📄 l2_fsnap.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
{
#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 + -