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 + -
显示快捷键?