⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 graph.c

📁 TMS320c6000系列DSP做图像处理的应用举例,图象颜色模式转换,从RGB到Y Cr Cb
💻 C
📖 第 1 页 / 共 2 页
字号:

		WriteImage();	// 将处理过的图像发送到输出缓冲区
		uImgAdd=1-uImgAdd;
		nVideoReady=0;
		nProcessingImage=0;	// 处理图像完毕,清标志
	}
}

#pragma CODE_SECTION(in1,".text3")
void interrupt in1( void)//中断响应函数
{
	if ( !nProcessingImage )	// 如果没有处于图像处理状态,则继续
	{
		nInStatus=1-nInStatus;	// 切换输入缓冲区配置
		(*pVideoInCtrlRegister)=uCtrlVideoIn[nInStatus];
	}
	else
	{
		uLed^=0x80000000;		// 指示灯闪烁表示丢帧
		ICETEK6711ALED=uLed;
	}
	nVideoReady=1;
}

#pragma CODE_SECTION(initInterrupt,".text3")
void initInterrupt(void)
{
	CSR=CSR&0xfffffffe;	// 关中断
	ISTP=0x00000c00;
    EIP=0x0f;	// 响应INT4
   	ICR=0xff;	
	IER=0x13;
	CSR=CSR|1; 	// 开中断
}


#pragma CODE_SECTION(InitDSP,".text3")
void InitDSP(void)
{
	*(unsigned  int *)EMIF_GCR = 0x3300;    	/* EMIF global control      		*/
	*(unsigned  int *)EMIF_SDCTRL = 0x63116000; 
	*(unsigned  int *)EMIF_SDRP = 0x61a;    	/* EMIF SDRM refresh period 		*/
	*(unsigned  int *)EMIF_SDEXT= 0x54529;  	/* EMIF SDRM extension      		*/
	*(unsigned  int *)EMIF_CE0 = 0x30;      	/* EMIF CE0 control         		*/
	*(unsigned  int *)EMIF_CE1 = 0xFFFFFF23;    	/* EMIF CE1 control, 32bit  		*/
	*(unsigned  int *)EMIF_CE2 = 0xFFFFFF33;            
	*(unsigned  int *)EMIF_CE3 = 0xFFFFFF33;		/* EMIF CE3 control			*/
	CACHECFG=0;	// 关L2CACHE
	L1PFBAR=L1DFBAR=0x10000;
}

#pragma CODE_SECTION(ReadVideo,".text3")
void ReadVideo()
{
	nReadingVideo=1;
	*(unsigned volatile int *)MTV_RDMA_ADD = 0x0000ffff;
	*(unsigned volatile int *)MTV_RDMA_PARAM = 0x00001808;
	*(unsigned volatile int *)MTV_RDMA_CSR = 1;
	*(unsigned volatile int *)MTV_RDMA_CSR = 0;
	*(unsigned  int *)EMIF_CE2 = 0x00800421;	//	--40MHz
	*(unsigned  int *)DMA15_OPT = 0x203a0003;	// Signal=0x05
	*(unsigned  int *)DMA15_SRC = MTV_RDMA_DAT;
	*(unsigned  int *)DMA15_CNT = 0x0ff00;
	*(unsigned  int *)DMA15_DST = uImgAddress[uImgAdd];
	*(unsigned  int *)DMA15_IDX = 0;
	*(unsigned  int *)DMA15_LNK = 0;
	*(unsigned  int *)DMA15_ELERLD=0x0ff0000f0;
	*(unsigned  int *)DMA10_OPT = 0x203b0003;
	*(unsigned  int *)DMA10_SRC = MTV_RDMA_DAT;
	*(unsigned  int *)DMA10_CNT = 0x0b400;
	*(unsigned  int *)DMA10_DST = uImgAddress1[uImgAdd]; //0x80040000+0XFF00*4;
	*(unsigned  int *)DMA10_IDX = 0;
	*(unsigned  int *)DMA10_LNK = 0;
	*(unsigned  int *)DMA10_ELERLD=0x0b4000108;
    *(unsigned  int *)DMA11_OPT = 0x21100001;
    *(unsigned  int *)DMA11_SRC = SIGNSOURCEADDRESS;	
    *(unsigned  int *)DMA11_CNT = 1;
	*(unsigned  int *)DMA11_DST = SIGNTARGETADDRESS;
	*(unsigned  int *)DMA11_IDX = 0;
    *(unsigned  int *)DMA11_LNK = 0;
	*(unsigned  int *)DMA11_ELERLD=0x000010000;
	*(unsigned  int *)CCER = 0x0c00;
	*(unsigned  int *)ESR = 0x8000;
	(*pSignSource)=0x0cd123;
	if ( bColor )
	{
		while ( (*pSignTarget)==0 );
		(*pSignTarget)=0;
		*(unsigned volatile int *)MTV_RDMA_ADD = 0x8000ffff;
		*(unsigned volatile int *)MTV_RDMA_PARAM = 0x00000c04;
		*(unsigned volatile int *)MTV_RDMA_CSR = 1;
		*(unsigned volatile int *)MTV_RDMA_CSR = 0;
		*(unsigned  int *)DMA10_OPT = 0x203b0003;
		*(unsigned  int *)DMA10_SRC = MTV_RDMA_DAT;
		*(unsigned  int *)DMA10_CNT = 0x0d800;
		*(unsigned  int *)DMA10_DST = uImgAddress3[uImgAdd]-4; //0x80040000+0XFF00*4;
		*(unsigned  int *)DMA10_IDX = 0;
		*(unsigned  int *)DMA10_LNK = 0;
		*(unsigned  int *)DMA10_ELERLD=0x108;//0x0d8000108;
	    *(unsigned  int *)DMA11_OPT = 0x21100001;
	    *(unsigned  int *)DMA11_SRC = SIGNSOURCEADDRESS;	
	    *(unsigned  int *)DMA11_CNT = 1;
		*(unsigned  int *)DMA11_DST = SIGNTARGETADDRESS;
		*(unsigned  int *)DMA11_IDX = 0;
	    *(unsigned  int *)DMA11_LNK = 0;
		*(unsigned  int *)DMA11_ELERLD=0x000010000;
		*(unsigned  int *)CCER = 0x0c00;
		*(unsigned  int *)ESR = 0x400;
		while ( (*pSignTarget)==0 );
		(*pSignTarget)=0;
		*(unsigned volatile int *)MTV_RDMA_ADD = 0x0c000ffff;
		*(unsigned volatile int *)MTV_RDMA_PARAM = 0x00000c04;
		*(unsigned volatile int *)MTV_RDMA_CSR = 1;
		*(unsigned volatile int *)MTV_RDMA_CSR = 0;
		*(unsigned  int *)DMA10_OPT = 0x203b0003;
		*(unsigned  int *)DMA10_SRC = MTV_RDMA_DAT;
		*(unsigned  int *)DMA10_CNT = 0x0d800;
		*(unsigned  int *)DMA10_DST = uImgAddress2[uImgAdd]-4; //0x80040000+0XFF00*4;
		*(unsigned  int *)DMA10_IDX = 0;
		*(unsigned  int *)DMA10_LNK = 0;
		*(unsigned  int *)DMA10_ELERLD=0x108;//0x0d8000108;
	    *(unsigned  int *)DMA11_OPT = 0x21100001;
	    *(unsigned  int *)DMA11_SRC = SIGNSOURCEADDRESS;	
	    *(unsigned  int *)DMA11_CNT = 1;
		*(unsigned  int *)DMA11_DST = SIGNTARGETADDRESS;
		*(unsigned  int *)DMA11_IDX = 0;
	    *(unsigned  int *)DMA11_LNK = 0;
		*(unsigned  int *)DMA11_ELERLD=0x000010000;
		*(unsigned  int *)CCER = 0x0c00;
		*(unsigned  int *)ESR = 0x400;
	}
	while ( (*pSignTarget)==0 );
	(*pSignTarget)=0;
//	nVideoReady=1;
	nReadingVideo=0;
}

#pragma CODE_SECTION(WriteImage,".text4")
void WriteImage()
{
	*(unsigned volatile int *)DTV_WDMA_ADD = 0x0004ffff;
	*(unsigned volatile int *)DTV_WDMA_PARAM = 0x0001808;
	*(unsigned volatile int *)DTV_WDMA_CSR = 1;
	*(unsigned volatile int *)DTV_WDMA_CSR = 0;
    *(unsigned  int *)EMIF_CE2 =( bColor )?(0x1800421):(0x1900421);	//	--40MHz
    *(unsigned  int *)DMA15_OPT = 0x211a0003;	
    *(unsigned  int *)DMA15_SRC = uImgAddress[1-uImgAdd];
	*(unsigned  int *)DMA15_CNT = 0x00ff00;
	*(unsigned  int *)DMA15_DST = DTV_WDMA_DAT;
	*(unsigned  int *)DMA15_IDX = 0;
    *(unsigned  int *)DMA15_LNK = 0;
	*(unsigned  int *)DMA15_ELERLD=0x0ff0000f0;
    *(unsigned  int *)DMA10_OPT = 0x211b0003;	
    *(unsigned  int *)DMA10_SRC = uImgAddress1[1-uImgAdd];	
    *(unsigned  int *)DMA10_CNT = 0x0b400;
	*(unsigned  int *)DMA10_DST = DTV_WDMA_DAT;
	*(unsigned  int *)DMA10_IDX = 0;
    *(unsigned  int *)DMA10_LNK = 0;
	*(unsigned  int *)DMA10_ELERLD=0x0b4000108;
    *(unsigned  int *)DMA11_OPT = 0x21100001;
    *(unsigned  int *)DMA11_SRC = SIGNSOURCEADDRESS;	
    *(unsigned  int *)DMA11_CNT = 1;
	*(unsigned  int *)DMA11_DST = SIGNTARGETADDRESS;
	*(unsigned  int *)DMA11_IDX = 0;
    *(unsigned  int *)DMA11_LNK = 0;
	*(unsigned  int *)DMA11_ELERLD=0x000010000;
	*(unsigned  int *)CCER = 0x0c00;
	(*pSignSource)=0x0cd123;
	*(unsigned  int *)ESR = 0x8000;
	if ( bColor )
	{
		while ( (*pSignTarget)==0 );
		(*pSignTarget)=0;
		*(unsigned volatile int *)DTV_WDMA_ADD = 0x08002ffff;
		*(unsigned volatile int *)DTV_WDMA_PARAM = 0x00000c04;
		*(unsigned volatile int *)DTV_WDMA_CSR = 1;
		*(unsigned volatile int *)DTV_WDMA_CSR = 0;
	    *(unsigned  int *)DMA10_OPT = 0x211b0003;	
	    *(unsigned  int *)DMA10_SRC = uImgAddress2[1-uImgAdd];	
	    *(unsigned  int *)DMA10_CNT = 0x0d800;
		*(unsigned  int *)DMA10_DST = DTV_WDMA_DAT;
		*(unsigned  int *)DMA10_IDX = 0;
	    *(unsigned  int *)DMA10_LNK = 0;
		*(unsigned  int *)DMA10_ELERLD=0x108;//0x0d8000108;
	    *(unsigned  int *)DMA11_OPT = 0x21100001;
	    *(unsigned  int *)DMA11_SRC = SIGNSOURCEADDRESS;	
	    *(unsigned  int *)DMA11_CNT = 1;
		*(unsigned  int *)DMA11_DST = SIGNTARGETADDRESS;
		*(unsigned  int *)DMA11_IDX = 0;
	    *(unsigned  int *)DMA11_LNK = 0;
		*(unsigned  int *)DMA11_ELERLD=0x000010000;
		*(unsigned  int *)CCER = 0x0c00;
		*(unsigned  int *)ESR = 0x400;
		while ( (*pSignTarget)==0 );
		(*pSignTarget)=0;
		*(unsigned volatile int *)DTV_WDMA_ADD = 0x0c002ffff;
		*(unsigned volatile int *)DTV_WDMA_PARAM = 0x00000c04;
		*(unsigned volatile int *)DTV_WDMA_CSR = 1;
		*(unsigned volatile int *)DTV_WDMA_CSR = 0;
	    *(unsigned  int *)DMA10_OPT = 0x211b0003;	
	    *(unsigned  int *)DMA10_SRC = uImgAddress3[1-uImgAdd];	
	    *(unsigned  int *)DMA10_CNT = 0x0d800;
		*(unsigned  int *)DMA10_DST = DTV_WDMA_DAT;
		*(unsigned  int *)DMA10_IDX = 0;
	    *(unsigned  int *)DMA10_LNK = 0;
		*(unsigned  int *)DMA10_ELERLD=0x108;//0x0b4000108;
	    *(unsigned  int *)DMA11_OPT = 0x21100001;
	    *(unsigned  int *)DMA11_SRC = SIGNSOURCEADDRESS;	
	    *(unsigned  int *)DMA11_CNT = 1;
		*(unsigned  int *)DMA11_DST = SIGNTARGETADDRESS;
		*(unsigned  int *)DMA11_IDX = 0;
	    *(unsigned  int *)DMA11_LNK = 0;
		*(unsigned  int *)DMA11_ELERLD=0x000010000;
		*(unsigned  int *)CCER = 0x0c00;
		*(unsigned  int *)ESR = 0x400;
	}
	while ( (*pSignTarget)==0 );
	(*pSignTarget)=0;
}

void ConvertToRGB()
{
	unsigned char *pY,*pU,*pV,*pR,*pG,*pB;
	int r,g,b,y,u,v,i,j;
	
	pY=(unsigned char *)uImgAddress[uImgAdd];
	pV=(unsigned char *)uImgAddress3[uImgAdd];
	pU=(unsigned char *)uImgAddress2[uImgAdd];
	pR=(unsigned char *)RGBDATAADDRESS2;
	pG=(unsigned char *)RGBDATAADDRESS3;
	pB=(unsigned char *)RGBDATAADDRESS4;
	for ( j=0;j<576;j+=4,pY+=2352,pU+=1176,pV+=1176 )
		for ( i=0;i<720;i+=4 )
		{
			y=(*pY); u=(*pU); v=(*pV);
			u-=128; v-=128;
			r=y+1.402*u;
			g=y-0.34414*u-0.71414*v;
			b=y+1.772*v;
			if ( r<0 )	r=0;
			else if ( r>255 )	r=255;
			if ( g<0 )	g=0;
			else if ( g>255 )	g=255;
			if ( b<0 )	b=0;
			else if ( b>255 )	b=255;
			(*pR)=r; (*pG)=g; (*pB)=b; pR++; pG++; pB++;
			pY+=4; pU+=2; pV+=2;
		}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -