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

📄 l2_fsnap.c

📁 台湾凌阳方案300万数码相机源代码
💻 C
字号:
#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
{

    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
    // patch 5.2.1_38@mattwang@fix OV3620 not work end
    //L2_WaitVD(0,1);
    if ((G_FlashStatus == K_FlashLightOn)&&(Tidx >=2))
	{
		//L2_WaitVD(0,5);
		XBYTE[0X2B05] = 0x10 | SnapNum;////
		L2_WaitVD(0,6);////
		UI_FlashLight_Trigger(0x0100/*0x0080*/);
	}
    //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)&& (Tidx < 2))||((G_FlashStatus == K_FlashLightAuto) && (Tidx <= 0)))&& (G_FlashCharging > 1))
   	{
	//		USHORT k;
			XBYTE[0x2A82] = 0x03;
		//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,5);
		//	L2_WaitVD(0,1);


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

	}
	#endif
    XBYTE[0X2B05] = 0x10 | SnapNum;


  return 0;
}

UCHAR L2_SetFlash(USHORT Width, USHORT Ftnum, UCHAR Mode) USING_0
{
  UCHAR   temp1, temp2;
  temp1   = (UCHAR) (Width & 0xFF);
  temp2   = (UCHAR) (Width >> 8);
  XBYTE[0X2A07]  = temp1;
  XBYTE[0X2A08]  = temp2;
  temp1   = (UCHAR) (Ftnum & 0xFF);
  temp2   = (UCHAR) (Ftnum >> 8);
  XBYTE[0X2A0A]  = temp1;
  XBYTE[0X2A0B]  = temp2;
  XBYTE[0X2A09]  = 0x10 | (Mode & 0x07);
  return 0;
}


//patch4.4@yichang for subsample mode snapping begin
UCHAR L2_SnapFrontSubSample(UCHAR SnapNum) USING_0
{

 //               UCHAR reg_addr[1], reg_data[1];
	//	UCHAR obvalue[1];
    //            UCHAR i, j;
#ifdef ICM107B		  			//IC-Media 1.0M CMOS Sensor

		if (SnapNum > 16)
                        return 1;


		XBYTE[0x2A20] = 0x36;       		//Set Hoffset
  		XBYTE[0x2A21] = 0x00;
  		XBYTE[0x2A22] = 0x0d;       		//Set Voffset
  		XBYTE[0x2A23] = 0x00;
  		XBYTE[0x2A24] = 0x60;       		//Set Hsize = 576
  		XBYTE[0x2A25] = 0x02;
  		XBYTE[0x2A26] = 0xbf;       		//Set Vsize = 432
  		XBYTE[0x2A27] = 0x01;

		reg_addr[0] = 0x52;
		reg_data[0] = 0x0D;
		L2_WSSC107(reg_addr, reg_data, 0x01, 0x00);

		reg_addr[0] = 0x00;
		reg_data[0] = 0x88;
		L3_WaitUpdate107();
		L2_WSSC107(reg_addr, reg_data, 0x01, 0x00);


    		reg_addr[0]   = 0x01; 					//Enable Auto Dark
    		reg_data[0]   = 0x09;
    		L2_WSSC107(reg_addr, reg_data, 0x01, 0x00);
 		L2_WaitVD(0, 1);
		reg_addr[0]   = 0x01; 					//Enable Auto Dark
		reg_data[0]   = 0x09;
		L2_WSSC107(reg_addr, reg_data, 0x01, 0x00);


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

		if (STROBE)
		{
			L2_Wait(3);
			XBYTE[0x2030] &= 0xf7;
			XBYTE[0x2031] |= 0x10;
			XBYTE[0x2031] &= 0xef;
		}

      		L2_WaitVD(0, 1);
    		L2_ReadSSC(0x40, obvalue, 0x01, 0x01);   //Read back OFFSET
    		//XBYTE[0x292A] = obvalue[0]; // WWWW0409
    		//Calculate new OB value ///////////////////////////////////////////////
    		reg_addr[0]   = 0x01; 					//Disable Auto Dark
    		reg_data[0]   = 0x01;
    		L2_WSSC107(reg_addr, reg_data, 0x01, 0x00);

    		reg_addr[0] = 0x40;
    		reg_data[0] = obvalue[0];	              //Set OB value
    		L2_WSSC107(reg_addr, reg_data, 0x01, 0x00);
#endif

#ifdef ICM109		  			//IC-Media 2.0M CMOS Sensor  //patch4.5@jhyu@subsample raw data

		if (SnapNum > 16)
                        return 1;
		XBYTE[0x2A20] = 0x36;       		//Set Hoffset
  		XBYTE[0x2A21] = 0x00;
  		XBYTE[0x2A22] = 0x09;       		//Set Voffset
  		XBYTE[0x2A23] = 0x00;
  		XBYTE[0x2A24] = 0x20;       		//Set Hsize = 800
  		XBYTE[0x2A25] = 0x03;
  		XBYTE[0x2A26] = 0x65;       		//Set Vsize = 613
  		XBYTE[0x2A27] = 0x02;

		reg_addr[0] = 0x52;
		reg_data[0] = 0x0D;
		L2_WSSC109(reg_addr, reg_data, 0x01, 0x00);

		reg_addr[0] = 0x00;
		reg_data[0] = 0x88;
		L3_WaitUpdate109();
		L2_WSSC109(reg_addr, reg_data, 0x01, 0x00);


		reg_addr[0]   = 0x01; 					//Enable Auto Dark
    		reg_data[0]   = 0x09;
    		L2_WSSC109(reg_addr, reg_data, 0x01, 0x00);
 		L2_WaitVD(0, 1);


    		XBYTE[0X2B05] = 0x10 | SnapNum;



#endif




#ifdef OV13		  			// Ov9620 1.3M CMOS Sensor

	if (SnapNum > 16) return 1;
	XBYTE[0x2A10] = 0x02;
	XBYTE[0x2A15] = 0x08;
	XBYTE[0x2A17] = 0x0a;

	XBYTE[0x2A26] = 0xed;       		//Set Vsize
  	XBYTE[0x2A27] = 0x01;
  	XBYTE[0x2A24] = 0x90;       		//Set Hsize
  	XBYTE[0x2A25] = 0x02;
  	XBYTE[0x2A20] = 0x84;       		//Set Hoffset
  	XBYTE[0x2A21] = 0x00;
  	XBYTE[0x2A22] = 0x0e;       		//Set Voffset
  	XBYTE[0x2A23] = 0x00;


	//printf("L2_SnapFront_Conti\n");


    reg_addr[0] = 0x12;
    reg_data[0] = 0x60;//20
    L2_WriteSSC(reg_addr, reg_data, 0x01, 0x01);
	//patch4.4@jhyu@0606
    reg_addr[0] = 0x17;
    reg_data[0] = 0x11;//1c
    L2_WriteSSC(reg_addr, reg_data, 0x01, 0x01);
    reg_addr[0] = 0x1a;
    reg_data[0] = 0x7b;//83;
    L2_WriteSSC(reg_addr, reg_data, 0x01, 0x01);


    L2_WaitVD(0, 2);
//    while(1)
//    	{
    XBYTE[0X2B05] = 0x10 | SnapNum;
//    	};
 //   printf("before iii\n\n");
    while((L2_CheckDRAMStatus()&0X02)!=0X02);
 //       printf("after iii\n\n");
  #endif


#ifdef OV2610    //patch4.5@jhyu@subsample raw data

	if (SnapNum > 16) return 1;
	XBYTE[0x2A10] = 0x02;
	XBYTE[0x2A15] = 0x08;
	XBYTE[0x2A17] = 0x0a;
/*
	XBYTE[0x2A26] = 0x65;       		//Set Vsize
  	XBYTE[0x2A27] = 0x02;
  	XBYTE[0x2A24] = 0x20;       		//Set Hsize
  	XBYTE[0x2A25] = 0x03;
  	XBYTE[0x2A20] = 0x80;       		//Set Hoffset
  	XBYTE[0x2A21] = 0x00;
  	XBYTE[0x2A22] = 0x0e;       		//Set Voffset
  	XBYTE[0x2A23] = 0x00;
*/
XBYTE[0x2A30] = 0x8b;
XBYTE[0x2A31] = 0x00;
XBYTE[0x2A34] = 0x0b;
XBYTE[0x2A35] = 0x00;

	//printf("L2_SnapFront_Conti\n");


    reg_addr[0] = 0x12;
    reg_data[0] = 0x60;//20
    L2_WriteSSC(reg_addr, reg_data, 0x01, 0x01);
	//patch4.4@jhyu@0606
    reg_addr[0] = 0x17;
    reg_data[0] = 0x01;//1c
    L2_WriteSSC(reg_addr, reg_data, 0x01, 0x01);
    reg_addr[0] = 0x1a;
    reg_data[0] = 0x98;//83;
    L2_WriteSSC(reg_addr, reg_data, 0x01, 0x01);


  //  L2_WaitVD(0, 2);

    XBYTE[0X2B05] = 0x10 | SnapNum;

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

  #endif


		return 0;

}
//patch4.4@yichang for subsample mode snapping end

⌨️ 快捷键说明

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