📄 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
{
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 + -