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

📄 l2_fsnap.c

📁 dz3000_51.0.0.4.rar
💻 C
📖 第 1 页 / 共 3 页
字号:
#include "general.h"
extern bit STROBE;  //andrew

//Joe@2003.3.19 20:41 add begin
extern int Tidx;
extern xdata UCHAR G_FlashStatus;
//Joe@2003.3.19 20:41 add end

//herb for IGBT start @03/03/24
extern xdata USHORT flashwidth;
//herb for IGBT end @03/03/24

//Joe@2003.3.3 20:31 add begin
#include "ui.h"
#include "timer.h"
#include "JoeToEvb.h"
//version 4.0@andrew@0503
//
UCHAR L2_SnapFront(UCHAR SnapNum) USING_0
{
  #ifdef OV13		  			// Ov9620 1.3M CMOS Sensor
    UCHAR reg_addr[1], reg_data[1], i, j;
    //PRINT_FRONT ("            Snap %d Full frame Image \n", (USHORT)SnapNum);
	//for (i=0; i<40;i++)               //Delay
    //for (j=0; j<255; j++);

	if (SnapNum > 16) return 1;
    reg_addr[0] = 0x12;
    reg_data[0] = 0x20;
    L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);//patch4.4@jhyu@green_band
	//patch4.3@jhyu@0606
    reg_addr[0] = 0x17;
    reg_data[0] = 0x1c;
    L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);//patch4.4@jhyu@green_band
    reg_addr[0] = 0x1a;
    reg_data[0] = 0x83;
    L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);//patch4.4@jhyu@green_band
//    L2_WaitVD(0, 2); //patch4.4@jhyu@avoid_green_band

     //Joe@2003.3.3 20:30 add begin			//Davis@05.3.4patch
     if (((G_FlashStatus == K_FlashLightOn)||((G_FlashStatus == K_FlashLightAuto) && (Tidx <= 5))) && (G_FlashCharging > 1))
     {
	  USHORT k;
          XBYTE[0x2a82] = 1;//jhyu

          //Joe@2003.3.17 19:15 modify begin
	  //XBYTE[0x2023] = 0x10;
	  XBYTE[0x2023] = 0x02;
	  //Joe@2003.3.17 19:15 modify end

      	 L2_WaitVD(0,2);
      	 //set Gain=1
          reg_addr[0] = 0x0;
          reg_data[0] = 0x0;
          L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
          //set exposure time to cover 1 frame
          reg_addr[0] = 0x04;
          reg_data[0] = 0x07;
          L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
          reg_addr[0] = 0x10;
          reg_data[0] = 0x84;
          L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

          //dis-charge photo sensor
      	L2_WaitVD(0,2);


      	for(k=0;k<1000;k++)
          {
     	    DelayBase(95);//jhyu
          }

          for(k=0;k<1400;k++);//jhyu

          UI_FlashLight_Trigger(0x0480);
     }
     //Joe@2003.3.3 20:30 add end

     XBYTE[0X2B05] = 0x10 | SnapNum;
     while((L2_CheckDRAMStatus()&0X02)!=0X02);

     //Joe@2003.3.15 16:21 add begin
     XBYTE[0x2a82] = 5;
     if (((G_FlashStatus == K_FlashLightOn) && (Tidx > 0)) && (G_FlashCharging > 1))
     {
     	UI_FlashLight_Trigger(0x0480);
     }
    //Joe@2003.3.15 16:21 add end

  #endif

  	#ifdef OV2610		  			// Ov2610 2.0M CMOS Sensor
	UCHAR reg_addr[1], reg_data[1], i, j;
	XBYTE[0x2080] = 0x00;			//Disable TG PLL
	XBYTE[0x2A80] = 0x00;			//Disable HP, let Clk2x Change immediate
	XBYTE[0x2A81] = 0x01;      	//Set Clk1xDiv
	XBYTE[0x2A82] = 0x01;     	//Set Clk2xDiv

	//Joe@2003.3.18 15:54 mask begin
	//XBYTE[0x2019] = XBYTE[0x2019] | 0xC0;	//Select input clk1x, clk2x from Internal
	//Joe@2003.3.18 15:54 mask end

	XBYTE[0x2A80] = 0x02;

	if (SnapNum > 16) return 1;


	XBYTE[0X2100] = 0x01;//new 0
	XBYTE[0X2023] = 0x02;//new

	//    XBYTE[0X2100] = 0x01;//org


	reg_addr[0] = 0x12;
	reg_data[0] = 0x20;
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

	L2_WaitVD(0, 2);

//herb for IGBT start @03/03/24
	#if (IGBT_OPTION == 0)
	if (((G_FlashStatus == K_FlashLightOn)||((G_FlashStatus == K_FlashLightAuto) && (Tidx <= 0)))&& (G_FlashCharging > 1))
	#else
	if (((G_FlashStatus == K_FlashLightOn)||((G_FlashStatus == K_FlashLightAuto) && (Tidx <= 0)))&& (G_FlashCharging > 1)&&(flashwidth!=0))
	#endif
	{
		XBYTE[0x201b]=0x01;//henry for IGBT

		//Joe@2003.3.24 19:23 mask begin
		//G_FlashStatus = 1;
		//Joe@2003.3.24 19:23 mask end

		XBYTE[0x2a82] = 1;//jhyu

////      	L2_WaitVD(0,2);
		//set Gain=1
		reg_addr[0] = 0x0;
		reg_data[0] = 0x0;
		L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
		//set exposure time to cover 1 frame
		reg_addr[0] = 0x04;
		reg_data[0] = 0x07;
		L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
		reg_addr[0] = 0x10;
		reg_data[0] = 0xa4;//old is 84 , 97
		L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

		//dis-charge photo sensor
		L2_WaitVD(0,2);

		XBYTE[0X2B05] = 0x10 | SnapNum;////
		L2_WaitVD(0,1);////

		#if (IGBT_OPTION == 0)
		UI_FlashLight_Trigger(0x0480);
		XBYTE[0X2B05] = 0x10 | SnapNum;
		#else
		if(flashwidth != 1)
		{
			flashwidth = 0x0480;
			XBYTE[0x2a07] = (UCHAR)flashwidth;
			XBYTE[0x2a08] = (UCHAR)(flashwidth>>8);
			//set trigger width end
			XBYTE[0x2a09]=0x10;//trigger strobe
			while(XBYTE[0x2a09]&0x10);
		}
		#endif

	}

	else
	{
		//Joe@2003.3.24 19:24 mask begin
		//G_FlashStatus = 0;
		//Joe@2003.3.24 19:24 mask end
		XBYTE[0X2B05] = 0x10 | SnapNum;////
	}

//	XBYTE[0X2B05] = 0x10 | SnapNum;
//herb for IGBT end @03/03/24

	while((L2_CheckDRAMStatus()&0X02)!=0X02);

//herb for IGBT start @03/03/24
	#if (IGBT_OPTION == 0)
	if (((G_FlashStatus == K_FlashLightOn) && (Tidx > 0)) && (G_FlashCharging > 1))
	#else
	if(((G_FlashStatus == K_FlashLightOn)||((G_FlashStatus == K_FlashLightAuto) && (Tidx <= 0)))&&(flashwidth <= 1))
	#endif
	{
		XBYTE[0x2a07] = 0x80;
		XBYTE[0x2a08] = 0x00;
		XBYTE[0x2a09] = 0x10;
	}
//herb for IGBT end @03/03/24

	//   printf("After ......\n");
	XBYTE[0x2080] = 0x00;			//Disable TG PLL
	XBYTE[0x2A80] = 0x02;			//Disable HP, let Clk2x Change immediate
	XBYTE[0x2A81] = 0x01;      	//Set Clk1xDiv
	XBYTE[0x2A82] = 0x03;     	//Set Clk2xDiv

	//Joe@2003.3.18 15:54 mask begin
	//XBYTE[0x2019] = XBYTE[0x2019] | 0xC0;	//Select input clk1x, clk2x from Internal
	//Joe@2003.3.18 15:54 mask end

//	reg_addr[0] = 0x12; 		//patch4.5@jhyu@OV2610
//	reg_data[0] = 0x60;        	//patch4.5@jhyu@OV2610
//	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x01);//patch4.5@jhyu@OV2610
	#endif
	
#ifdef OV3610		  			// Ov3610 3.2M CMOS Sensor	//patch5.2.1@jhyu@OV3610
		UCHAR reg_addr[1], reg_data[1], i, j;
	
	
		if (SnapNum > 16) return 1;
		//Davis modify for Tidx<=0  ->  Tidx<=5
if ((((G_FlashStatus == K_FlashLightOn)||((G_FlashStatus == K_FlashLightAuto) && (Tidx <= 5))) && (G_FlashCharging > 1))||(Tidx>32))
{
	
	reg_addr[0] = 0x13; 
	reg_data[0] = 0xc0;	//jhyu@OV3610 MP
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

	reg_addr[0] = 0x14; 
	reg_data[0] = 0xc6;	//jhyu@OV3610 MP
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

//	reg_addr[0] = 0x15; 
//	reg_data[0] = 0x02;	//jhyu@OV3610 MP
//	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

	reg_addr[0] = 0x01; 
	//reg_data[0] = 0x80;	//jhyu@OV3610 MP//gain
	reg_data[0] = 0x80;	//jhyu@OV3610 MP
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

	reg_addr[0] = 0x02; 
	//reg_data[0] = 0x80;	//jhyu@OV3610 MP
	reg_data[0] = 0x80;	//jhyu@OV3610 MP
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

	reg_addr[0] = 0x0c; 
	reg_data[0] = 0x38;	//jhyu@OV3610 MP
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

//	L2_WaitVD(0, 1);

	reg_addr[0] = 0x0d; 
	reg_data[0] = 0x41;	//jhyu@OV3610 MP
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

	reg_addr[0] = 0x0e; 
	reg_data[0] = 0x19;	//jhyu@OV3610 MP
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

	reg_addr[0] = 0x39; 
	reg_data[0] = 0x00;	//jhyu@OV3610 MP
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

	reg_addr[0] = 0x0f; 
	reg_data[0] = 0x47;	//jhyu@OV3610 MP
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

	reg_addr[0] = 0x33; 
	reg_data[0] = 0x0c;	//jhyu@OV3610 MP
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

	reg_addr[0] = 0x34; 
	reg_data[0] = 0x00;	//jhyu@OV3610 MP
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

	reg_addr[0] = 0x35; 
	reg_data[0] = 0x90;	//jhyu@OV3610 MP
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

	reg_addr[0] = 0x3c; 
	reg_data[0] = 0x01;	//jhyu@OV3610 MP
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

//	reg_addr[0] = 0x11; 
//	reg_data[0] = 0x80;	//jhyu@OV3610 MP
//	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

	reg_addr[0] = 0x12; 
	reg_data[0] = 0x00;	//jhyu@OV3610 MP
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
}
else
{
    reg_addr[0] = 0x12; 
	reg_data[0] = 0x00;	//jhyu@OV3610 MP
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);


	reg_addr[0] = 0x03; 
	reg_data[0] = 0x44;	//jhyu@OV3610 MP
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

	reg_addr[0] = 0x17; 
	reg_data[0] = 0x0a;	//jhyu@OV3610 MP
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

}


		/*reg_addr[0] = 0x00; //Set Gain to 1x
		reg_data[0] = 0x00;
		L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

		reg_addr[0] = 0x10; //jhyu@FREX
		reg_data[0] = 0xff;
		L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
		L2_WaitVD(0,1);
	
	//close MS
	
	
		reg_addr[0] = 0x12;
		reg_data[0] = 0x00; //jhyu@OV3610 MP
		L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
	
	
		reg_addr[0] = 0x03;
		reg_data[0] = 0x44; //jhyu@OV3610 MP
		L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
	
		reg_addr[0] = 0x17;
		reg_data[0] = 0x0a; //jhyu@OV3610 MP
		L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
	         */
	
	
		L2_WaitVD(0, 2);
		if (((G_FlashStatus == K_FlashLightOn)||((G_FlashStatus == K_FlashLightAuto) && (Tidx <= 0))) && (G_FlashCharging > 1))
		{
		 USHORT k;
			 XBYTE[0x2a82] = 1;//jhyu
		
			 //Joe@2003.3.17 19:15 modify begin
		 //XBYTE[0x2023] = 0x10;
		 XBYTE[0x2023] = 0x02;
		 //Joe@2003.3.17 19:15 modify end
		 
		 reg_addr[0] = 0x00; //Set Gain to 1x
		 reg_data[0] = 0x00;
		 L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
		 
		 reg_addr[0] = 0x10; //jhyu@FREX
		 reg_data[0] = 0xff;
		 L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
		
			 //dis-charge photo sensor
				L2_WaitVD(0,2);
			 XBYTE[0X2B05] = 0x10 | SnapNum;
				L2_WaitVD(0,1);//// 			 
			 UI_FlashLight_Trigger(0x480/*0x0080*/);

			 UI_BusyLed(0);//wendy@2004/9/9

		}
	
	//open MS
	
		XBYTE[0X2B05] = 0x10 | SnapNum;
		L2_WaitVD(0,1);
	
	
	
#if 0 //jhyu@FREX
	
	
		L2_SetGPIOBit(32,1);		//FREX high
	
		L2_SetGPIOBit(33,1);		//EXPSTB high
		for(i=0; i<25; i++)
		{
			Delay_10us();
		}
		L2_SetGPIOBit(33,0);		//EXPSTB low
	
	
		for(i=0;i<20;i++)
		{
			Delay_1ms();
		}
		for(i=0;i<10;i++)
		{
			Delay_10us();
		}
	//close MS
		L2_SetGPIOBit(32,0);		//FREX low
#endif
	
		while((L2_CheckDRAMStatus()&0X02)!=0X02);
	
		L2_WaitVD(0,1);
	//open MS

	#endif
//-------------------Davis:patch4.0.0.0_2005/Jun/07 begin	
#ifdef OV3620
    UCHAR reg_addr[1], reg_data[1];//, i, j;
 //   UCHAR	 mi_reg_data[2];

    if (SnapNum > 16)
        return 1;
 XBYTE[0x2100]=0x01;//liumr
/*  XBYTE[0x2100]=0x02;*/
    XBYTE[0x2a00]=0x02;
  // XBYTE[0x2a82]=0x09;

    // patch 5.2.1_38@mattwang@fix OV3620 not work beg
    #if 0  // 20041123 nmattwang remark
    reg_addr[0] = 0x10;  // AEC
    reg_data[0] = 0xFF;
    L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

    reg_addr[0] = 0x14;  // COMJ
    reg_data[0] = 0xC6;
    L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

    reg_addr[0] = 0x33;  // CHLF
    reg_data[0] = 0x3D;
    L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

    reg_addr[0] = 0x34;  // VGAP
    reg_data[0] = 0x8c;
    L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

    reg_addr[0] = 0x1a;  // VEND
    reg_data[0] = 0xC4;//ff;
    L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
    #endif
    // patch 5.2.1_38@mattwang@fix OV3620 not work end
    L2_WaitVD(0,1);

    //close MS
    #if 1
    reg_addr[0] = 0x12;  // COMH: QXGA mode (2048x1536), master mode
    reg_data[0] = 0x00;
    L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

    reg_addr[0] = 0x03;  // COMA
    reg_data[0] = 0x4c;//44;
    L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);

    reg_addr[0] = 0x17;  // HREFST
    reg_data[0] = 0x0E;//0a;
    L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
//liumr add
reg_addr[0] = 0x3f;  
	reg_data[0] = 15;
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
	reg_addr[0] = 0x40;  	
	reg_data[0] = 13;//24
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
	reg_addr[0] = 0x41; 
	reg_data[0] = 13;
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
	reg_addr[0] = 0x42; 
	reg_data[0] = 16;//25
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
	reg_addr[0] = 0x43; 
	reg_data[0] = 14;
	L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
    #endif
 //   L2_WaitVD(0, 2);
    #if 1
    if (((G_FlashStatus == K_FlashLightOn)||((G_FlashStatus == K_FlashLightAuto) && (Tidx <= 0)))&& (G_FlashCharging > 1))
   	{
	//		USHORT k;
			XBYTE[0x2A82] = 0x05;
		//set Gain=1
		reg_addr[0] = 0x0;
		reg_data[0] = 0x0;
		L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
		//set exposure time to cover 1 frame
		reg_addr[0] = 0x04;
		reg_data[0] = 0x01;
		L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
		reg_addr[0] = 0x10;
		reg_data[0] = 0xc8;//old is 84 , 97//0xc2;//1548 line:c14;1554: c22;c40
		L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
	
			//dis-charge photo sensor
			L2_WaitVD(0,2);
			L2_WaitVD(0,2);
	#if 0
			for(k=0;k<1100;k++)
			{
				DelayBase(95);
			}
	
			for(k=0;k<13200;k++);
	
			UI_FlashLight_Trigger(0x0400/*0x0080*/);
	#endif

		XBYTE[0X2B05] = 0x10 | SnapNum;////
		L2_WaitVD(0,1);////
		UI_FlashLight_Trigger(0x0400/*0x0080*/);

	}
	#endif
	//open MS
    //while(1)
    
    XBYTE[0X2B05] = 0x10 | SnapNum;
    
    //L2_WaitVD(0,1);

    #if 0  //jhyu@FREX
    L2_SetGPIOBit(32,1);        //FREX high

    L2_SetGPIOBit(33,1);        //EXPSTB high

⌨️ 快捷键说明

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