dm642main.c
来自「基于642的sd卡读写程序」· C语言 代码 · 共 654 行 · 第 1/2 页
C
654 行
c=c+1;
else
break;
}
/******************************************************************************/
//c=2;
//ReadFile(name[c],0,415798,(Uint8 *)&dis3Ybuffer);
/******************************************************************************/
for(i=0;i<1078;i++)
{
*(Uint8 *)(bmph+i)=bmp[i];
}
/*----------------------------------------------------------*/
vpHchannel0 = bt656_8bit_ncfd(2);
/*----------------------------------------------------------*/
/*初始化Video Port1*/
/*将Vedio Port2设为采集输入*/
ED=0;
portNumber = 0;
vpHchannel1 = bt656_8bit_ncfc(portNumber);
bt656_capture_start(vpHchannel1);
/*等待第一帧数据采集完成*/
while(capNewFrame == 0){}
/*将数据存入显示缓冲区,并清采集完成的标志*/
capNewFrame =0;
bt656_display_start(vpHchannel0);
/*建立显示的实时循环*/
ED=1;
ED1=1;
up1=0;
//VP_close(vpHchannel0);
//vpHchannel0 = bt656_8bit_ncfd(0);
//bt656_display_start(vpHchannel0);
error=0;
for(;;)
{
Uint8 pin1;
tu1=c;
up=1;
readpic:
pin1=GPIO_pinRead(hGpio,GPIO_PIN1);//以下进入浏览模式
if(!pin1)
{
if(up==1)
{
GPIO_pinWrite(hGpio,GPIO_PIN8,1);//开始读点亮指示灯
ReadFile(name[c],0,415798,(Uint8 *)&dis3Ybuffer);//读取函数
VP_close(vpHchannel1);
VP_close(vpHchannel0);
for(i=0;i<288;i++)
{
DAT_copy((void *)(dis3Ybuffer + (i*2) * numPixels),
(void *)(findY + i * numPixels),
numPixels);
}
for(i=0;i<288;i++)
{
DAT_copy((void *)(findY + i * numPixels),
(void *)(findY + 288*720+i * numPixels),
numPixels);
}
for(i=0;i<0x32a00;i++)
{
*(Uint8 *)(findCb + i) = 0x80;
*(Uint8 *)(findCr + i) = 0x80;
}
color(0x80300000);
copy();
vpHchannel0 = bt656_8bit_ncfd(2);
bt656_display_start(vpHchannel0);
GPIO_pinWrite(hGpio,GPIO_PIN8,0);//读取完,关指示灯
up=0;
k=1;
}
goto readpic;
}
c=tu1;
while(error&&(!up1))
{
if(GPIO_pinRead(hGpio,GPIO_PIN1))
goto readpic;
}
if(up1==1)//以下为保存图象函数
{
if((c>=0)&&(c<=60))
{
GPIO_pinWrite(hGpio,GPIO_PIN8,1);//开始写,点亮指示灯
ok=CreateFile((Uint8 *)(&name+11*c),(Uint32)415798);//创建文件
if(ok==SD_FAIL)printf("error occur.\n");}
else
{c=0;}
WriteFile((Uint8 *)(&name+11*c),(Uint32)0,(Uint32)415798,(Uint8 *)&dis3Ybuffer);//写入数据
GPIO_pinWrite(hGpio,GPIO_PIN8,0);//写完成,关指示灯
up1=0;
c=c+1;
}
while(error){}//以下为扫描状态
if((!ED)||(k))
{ED=1;
k=0;
//vpHchannel0 = bt656_8bit_ncfd(0);
//EVMDM642_waitusec(100);
VP_close(vpHchannel0);
//VP_close(vpHchannel1);
vpHchannel1 = bt656_8bit_ncfc(0);
bt656_capture_start(vpHchannel1);
vpHchannel0 = bt656_8bit_ncfd(2);
while(capNewFrame == 0){}
bt656_display_start(vpHchannel0);
}
/*******************************************************************************************/
/*if(capNewFrame%2 == 1)
{
for(i=0;i<20;i++)
{
for(j=0;j<40;j++)
{
*(int *)(dis1Ybuffer + (260+i)*720 + (20+j) + 0x32a00) = 0xffffffff;
*(int *)(dis1Ybuffer + (260+i)*720 + (20+j) ) = 0xffffffff;
}
}
}
else if(capNewFrame%2 == 0)
{
for(i=0;i<20;i++)
{
for(j=0;j<40;j++)
{
*(int *)(dis2Ybuffer + (260+i)*720 + (20+j) + 0x32a00) = 0xffffffff;
*(int *)(dis2Ybuffer + (260+i)*720 + (20+j) ) = 0xffffffff;
}
}
} */
/*************************************************************************************************/
/*当采集区的数据已经采集好,而显示缓冲区的数据已空*/
EVMDM642_waitusec(45000);
if(capNewFrame%2 == 0)//&&(disNewFrame == 1))
{ /*将数据装入显示缓冲区,并清采集完成的标志*/
//capNewFrame =0;
disNewFrame =0;
for(i=0;i<numLines;i++)
{
/*传送Y缓冲区*/
DAT_copy((void *)(dis1Ybuffer + i * numPixels),
(void *)(findY + i * numPixels),
numPixels);
/*传送Cb缓冲区*/
DAT_copy((void *)(dis1Cbbuffer + i * (numPixels >> 1)),
(void *)(findCb + i * (numPixels >> 1)),
numPixels>>1);
/*传送Cr缓冲区*/
DAT_copy((void *)(dis1Crbuffer + i * (numPixels >> 1)),
(void *)(findCr + i * (numPixels >> 1)),
numPixels>>1);
}
if(!ED)
bt656_display_start(vpHchannel0);
error = search(findY,x,y);
if(error/*(cjbz>240)&(cjbz<400)*/)
{
ED=1;
//vpHchannel1 = bt656_8bit_ncfc(2);
//EVMDM642_waitusec(100);
VP_close(vpHchannel1);
VP_close(vpHchannel0);
//VP_close(vpHchannel0);
capNewFrame =0;
disNewFrame =0;
if(error>0)
{
n = error;
//error = 0;
for(m=0;m<n; m++)
{
for(i=0;i<10;i++)
{
line_x = x[m]+i;
line_t = 120+i;
if(!(line_x%2))
{
line_x = line_x/2;
line_t = line_t/2;
for(j=0;j<10;j++)
{
*(int *)(findY + (line_x)*720 + (y[m]+j) + 0x32a00) = 0xffffffff;
*(int *)(findCb + line_x*360 + (y[m]+j)/2 + 0x19500) = 0x55555555;
//*(int *)(findY + 120*720 + (y[m]+j) + 0x19500) = 0xffffffff;
*(int *)(findCr + line_x*360 + (y[m]+j)/2 + 0x19500) = 0x55555555;
}
}
else
{
line_x = line_x/2;
line_t = line_t/2;
for(j=0;j<10;j++)
{
*(int *)(findY + (line_x)*720 + (y[m]+j) ) = 0xffffffff;
*(int *)(findCb + line_x*360 + (y[m]+j)/2 ) = 0x55555555;
//*(int *)(findY + line_x*360 + (y[m]+j) ) = 0xffffffff;
*(int *)(findCr + line_x*360 + (y[m]+j)/2 ) = 0x55555555;
}
}
}
}
//GPVAL = GPVAL | 0x8000;
/*break;*/
}
color(0x80100000);
for(i=0;i<288;i++)
{
/*传送Y缓冲区*/
DAT_copy((void *)(findY + i * numPixels),
(void *)(findY + 288*720+i * numPixels),
numPixels);
/*传送Cb缓冲区*/
DAT_copy((void *)(findCb + i * (numPixels >> 1)),
(void *)(findCb + 288*360+i * (numPixels >> 1)),
numPixels>>1);
/*传送Cr缓冲区*/
DAT_copy((void *)(findCr + i * (numPixels >> 1)),
(void *)(findCr + 288*360+i * (numPixels >> 1)),
numPixels>>1);
}
copy();
/*for(i=0;i<numLines;i++)
{
/*传送Y缓冲区*/
/*DAT_copy((void *)(findY + i * numPixels),
(void *)(dis1Ybuffer + i * numPixels),
numPixels);
/*传送Cb缓冲区*/
/*DAT_copy((void *)(findCb + i * (numPixels >> 1)),
(void *)(dis1Cbbuffer + i * (numPixels >> 1)),
numPixels>>1);
/*传送Cr缓冲区*/
/*DAT_copy((void *)(findCr + i * (numPixels >> 1)),
(void *)(dis1Crbuffer + i * (numPixels >> 1)),
numPixels>>1);
}
for(i=0;i<numLines;i++)
{
/*传送Y缓冲区*/
/* DAT_copy((void *)(findY + i * numPixels),
(void *)(dis2Ybuffer + i * numPixels),
numPixels);
/*传送Cb缓冲区*/
/*DAT_copy((void *)(findCb + i * (numPixels >> 1)),
(void *)(dis2Cbbuffer + i * (numPixels >> 1)),
numPixels>>1);
/*传送Cr缓冲区*/
/*DAT_copy((void *)(findCr + i * (numPixels >> 1)),
(void *)(dis2Crbuffer + i * (numPixels >> 1)),
numPixels>>1);
}
/************************************************************************************************************/
for(i=0;i<288;i++)
{
DAT_copy((void *)(findY + i * numPixels),
(void *)(dis3Ybuffer + i*2 * numPixels),
numPixels);
}
for(i=0;i<288;i++)
{
DAT_copy((void *)(findY + i * numPixels),
(void *)(dis3Ybuffer +( i*2+1) * numPixels),
numPixels);
}
/************************************************************************************************************/
vpHchannel0 = bt656_8bit_ncfd(2);
bt656_display_start(vpHchannel0);
ED=0;
/*if(sw)
{
ok=CreateFile((Uint8 *)(&name+11*c),(Uint32)415798);
if(ok==SD_FAIL)printf("error occur.\n");
//WriteFile((Uint8 *)(&name+11*c),(Uint32)0,(Uint32)415798,(Uint8 *)&dis3Ybuffer/*(findY+(i*16384))*///);
//ok=CreateFile(name[c],(Uint32)405798); //建立长度为54的空文件
//if(ok==SD_FAIL)printf("error occur.\n"); //文件已存在,退出
//WriteFile(name[3],(Uint32)0,(Uint32)405798,(Uint8 *)&findY/*(findY+(i*16384))*/); //将buffer写入文件
//最后记着把error清零。
// }
}
}
}
for(;;)
{}
/*----------------------------------------------------------*/
/*采集与回放*/
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?