📄 graph.c
字号:
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 + -