📄 l2_fsnap.c
字号:
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
printf("Before L2_CheckDRAMStatus\n");
while((L2_CheckDRAMStatus()&0X02)!=0X02);
printf("After L2_CheckDRAMStatus\n");
//L2_WaitVD(0,1);
//open MS
#endif
//-------------------Davis:patch4.0.0.0_2005/Jun/07 end
#ifdef MCM20027 // Motorola 1.3M CMOS Sensor
UCHAR reg_addr[4], reg_data[4], i, j;
//PRINT_FRONT (" Snap %d Full frame Image \n", (USHORT)SnapNum);
if (SnapNum > 16) return 1;
reg_addr[0] = 0x41;
reg_data[0] = 0x10;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x01);
reg_addr[0] = 0x50; //Virtual frame Row Depth MSB
reg_data[0] = 0x04;
reg_addr[1] = 0x51; //Virtual frame Row Depth LSB
reg_data[1] = 0x28;
reg_addr[2] = 0x52; //Virtual frame Column Depth MSB
reg_data[2] = 0x06;//patch4.3@jhyu@0612
reg_addr[3] = 0x53; //Virtual frame Column Depth LSB
reg_data[3] = 0x23;//patch4.3@jhyu@0612
L2_WriteSSC(reg_addr, reg_data, 0x04, 0x02);
L2_WaitVD(0, 2);
//Joe@2003.3.3 20:30 add begin
if (((G_FlashStatus == K_FlashLightOn)||((G_FlashStatus == K_FlashLightAuto) && (Tidx <= 0))) && (G_FlashCharging > 1))
{
USHORT k;
XBYTE[0x2a82] = 1;//jhyu
XBYTE[0x2023] = 0x02;
//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(0x0080);
}
//Joe@2003.3.3 20:30 add end
XBYTE[0X2B05] = 0x10 | SnapNum;
//Joe@2003.3.12 9:02 add begin
while((L2_CheckDRAMStatus()&0X02)!=0X02);
XBYTE[0x2A82] = 0x07; //Set Clk2xDiv
if (((G_FlashStatus == K_FlashLightOn) && (Tidx > 0)) && (G_FlashCharging > 1))
{
UI_FlashLight_Trigger(0x0080);
}
//Joe@2003.3.12 9:02 add end
#endif
#ifdef HP2020 // HP2020 VGA CMOS Sensor
XBYTE[0X2B05] = 0x10 | SnapNum;
//PRINT_FRONT (" Snap %d Full frame Image \n", (USHORT)SnapNum);
#endif
#ifdef ICM107B //andrew 2002/05/13 //IC-Media 1.0M CMOS Sensor
UCHAR reg_addr[2], reg_data[2], obvalue[1];
if (SnapNum > 16) return 1;
reg_addr[0] = 0x01; //Enable Auto Dark
reg_data[0] = 0x09;
L2_WSSC107(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x52;
reg_data[0] = 0x00;
L2_WSSC107(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x00;
reg_data[0] = 0x80;
L3_WaitUpdate107();
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);
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 ICM108 //andrew 2002/05/13 //IC-Media 1.3M CMOS Sensor
UCHAR reg_addr[2], reg_data[2], obvalue[1];
if (SnapNum > 16) return 1;
reg_addr[0] = 0x01; //Enable Auto Dark
reg_data[0] = 0x09;
L2_WSSC108(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x52;
reg_data[0] = 0x00;
L2_WSSC108(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x00;
reg_data[0] = 0x80;
L3_WaitUpdate108();
L2_WSSC108(reg_addr, reg_data, 0x01, 0x00);
L2_WaitVD(0, 1);
reg_addr[0] = 0x01; //Enable Auto Dark
reg_data[0] = 0x09;
L2_WSSC108(reg_addr, reg_data, 0x01, 0x00);
L2_WaitVD(0,3);
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_WSSC108(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x40;
reg_data[0] = obvalue[0]; //Set OB value
L2_WSSC108(reg_addr, reg_data, 0x01, 0x00);
#endif
//patch4.4@andrew@ICM109
#ifdef ICM109 //andrew 2002/05/13 //IC-Media 1.3M CMOS Sensor
UCHAR reg_addr[2], reg_data[2], obvalue[1];
if (SnapNum > 16) return 1;
reg_addr[0] = 0x01; //Enable Auto Dark
reg_data[0] = 0x09;
L2_WSSC109(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x52;
reg_data[0] = 0x00;
L2_WSSC109(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x00;
reg_data[0] = 0x80;
L3_WaitUpdate109();
L2_WSSC109(reg_addr, reg_data, 0x01, 0x00);
L2_WaitVD(0, 1);
reg_addr[0] = 0x01; //Enable Auto Dark
reg_data[0] = 0x09;
L2_WSSC109(reg_addr, reg_data, 0x01, 0x00);
L2_WaitVD(0,3);
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_WSSC109(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x40;
reg_data[0] = obvalue[0]; //Set OB value
L2_WSSC109(reg_addr, reg_data, 0x01, 0x00);
#endif
#ifdef RJ23N3 // Sharp 2.0M CCD Sensor
{
UCHAR temp;
XBYTE[0X2B05] = 0x10 | SnapNum;
XBYTE[0x270F] = 0x02; //Set Field mode
temp = L2_WCShutter();
if (temp == 0)
{
L2_CloseMShutter();
//PRINT_FRONT (" Close Shutter \n");
}
temp = L2_WOShutter();
if (temp == 0)
{
L2_OpenMShutter();
//PRINT_FRONT (" Open Shutter \n");
}
while((L2_CheckDRAMStatus()&0X02)!=0X02);
XBYTE[0x270F] = 0x00; //Set Field normal mode
//PRINT_FRONT (" Snap %d Full frame Image \n", (USHORT)SnapNum);
}
#endif
#ifdef RJ23P3AA
{
//FOR Field 1
XBYTE[0x2924] = 0x10; //Set 3 Field enable, fieldsel
XBYTE[0x2BA0] = 0x00; //Set CCD Xv1risecar
XBYTE[0x2BA1] = 0x00;
XBYTE[0x2BA2] = 0x00; //Set CCD Xv1fallcar
XBYTE[0x2BA3] = 0x00;
XBYTE[0x2BA4] = 0x00; //Set CCD Xv2risecar
XBYTE[0x2BA5] = 0x00;
XBYTE[0x2BA6] = 0x00; //Set CCD Xv2fallcar
XBYTE[0x2BA7] = 0x00;
XBYTE[0x2BA8] = 0x00; //Set CCD Xv3risecar
XBYTE[0x2BA9] = 0x00;
XBYTE[0x2BAA] = 0x00; //Set CCD Xv3fallcar
XBYTE[0x2BAB] = 0x00;
XBYTE[0x2BAC] = 0x00; //Set CCD Xv4risecar
XBYTE[0x2BAD] = 0x00;
XBYTE[0x2BAE] = 0x00; //Set CCD Xv4fallcar
XBYTE[0x2BAF] = 0x00;
XBYTE[0x2BD0] = 0x00; //Set CCD Xsg1afallca
XBYTE[0x2BD1] = 0x00;
XBYTE[0x2BD2] = 0x00; //Set CCD Xsg1bfallca
XBYTE[0x2BD3] = 0x00;
XBYTE[0x2BD4] = 0x5E; //Set CCD Xsg3afallca
XBYTE[0x2BD5] = 0x05;
XBYTE[0x2BD6] = 0x5E; //Set CCD Xsg3bfallca
XBYTE[0x2BD7] = 0x05;
// XBYTE[0x2BD4] = 0x00; //Set CCD Xsg3afallca
// XBYTE[0x2BD5] = 0x00;
// XBYTE[0x2BD6] = 0x00; //Set CCD Xsg3bfallca
// XBYTE[0x2BD7] = 0x00;
XBYTE[0X2000] = 0x00;
XBYTE[0X2000] = 0x02;
XBYTE[0x2B71] = 0x00; //Set CCD Xsg1afallm
XBYTE[0x2B72] = 0x00;
XBYTE[0x2B75] = 0x00; //Set CCD Xsg3afallm
XBYTE[0x2B76] = 0x00;
L2_WaitVD(0, 1);
//XBYTE[0x2A38] = XBYTE[0x2A38] - 1; //Voffsetafc
//XBYTE[0x2A20] = XBYTE[0x2A20] - 1; //hoffsetaf
XBYTE[0x2B09] = 0x11; //Set Vsubctr menual enable
XBYTE[0x2B00] = 0x07; //Set afen, progressen, ccdtgen
XBYTE[0X2B05] = 0x13;
L2_Wait(30);
L2_CloseMShutter();
while((L2_CheckDRAMStatus()&0X02)!=0X02);
//FOR Field 2
XBYTE[0x2924] = 0x12; //Set 3 Field enable, fieldsel
XBYTE[0x2BA0] = 0x72; //Set CCD Xv1risecar
XBYTE[0x2BA1] = 0x00;
XBYTE[0x2BA2] = 0x66; //Set CCD Xv1fallcar
XBYTE[0x2BA3] = 0x0C;
XBYTE[0x2BA4] = 0xA2; //Set CCD Xv2risecar
XBYTE[0x2BA5] = 0x0C;
XBYTE[0x2BA6] = 0x56; //Set CCD Xv2fallcar
XBYTE[0x2BA7] = 0x0D;
XBYTE[0x2BA8] = 0x92; //Set CCD Xv3risecar
XBYTE[0x2BA9] = 0x0D;
XBYTE[0x2BAA] = 0x01; //Set CCD Xv3fallcar
XBYTE[0x2BAB] = 0x00;
XBYTE[0x2BAC] = 0x0A; //Set CCD Xv4risecar
XBYTE[0x2BAD] = 0x0E;
XBYTE[0x2BAE] = 0xAE; //Set CCD Xv4fallcar
XBYTE[0x2BAF] = 0x00;
XBYTE[0x2BD0] = 0x5E; //Set CCD Xsg1afallca
XBYTE[0x2BD1] = 0x05;
// XBYTE[0x2BD0] = 0x00; //Set CCD Xsg1afallca
// XBYTE[0x2BD1] = 0x00;
XBYTE[0x2BD2] = 0x00; //Set CCD Xsg1bfallca
XBYTE[0x2BD3] = 0x00;
XBYTE[0x2BD4] = 0x00; //Set CCD Xsg3afallca
XBYTE[0x2BD5] = 0x00;
XBYTE[0x2BD6] = 0x00; //Set CCD Xsg3bfallca
XBYTE[0x2BD7] = 0x00;
XBYTE[0X2000] = 0x00;
XBYTE[0X2000] = 0x02;
while((L2_CheckDRAMStatus()&0X02)!=0X02);
//FOR Field 3
XBYTE[0x2924] = 0x11; //Set 3 Field enable, fieldsel
XBYTE[0x2BA0] = 0x72; //Set CCD Xv1risecar
XBYTE[0x2BA1] = 0x00;
XBYTE[0x2BA2] = 0x26; //Set CCD Xv1fallcar
XBYTE[0x2BA3] = 0x01;
XBYTE[0x2BA4] = 0x62; //Set CCD Xv2risecar
XBYTE[0x2BA5] = 0x01;
XBYTE[0x2BA6] = 0x56; //Set CCD Xv2fallcar
XBYTE[0x2BA7] = 0x0D;
XBYTE[0x2BA8] = 0x92; //Set CCD Xv3risecar
XBYTE[0x2BA9] = 0x0D;
XBYTE[0x2BAA] = 0x01; //Set CCD Xv3fallcar
XBYTE[0x2BAB] = 0x00;
XBYTE[0x2BAC] = 0x0A; //Set CCD Xv4risecar
XBYTE[0x2BAD] = 0x0E;
XBYTE[0x2BAE] = 0xAE; //Set CCD Xv4fallcar
XBYTE[0x2BAF] = 0x00;
XBYTE[0x2BD0] = 0x5E; //Set CCD Xsg1afallca
XBYTE[0x2BD1] = 0x05;
XBYTE[0x2BD2] = 0x5E; //Set CCD Xsg1bfallca
XBYTE[0x2BD3] = 0x05;
//XBYTE[0x2BD0] = 0x00; //Set CCD Xsg1afallca
//XBYTE[0x2BD1] = 0x00;
//XBYTE[0x2BD2] = 0x00; //Set CCD Xsg1bfallca
//XBYTE[0x2BD3] = 0x00;
XBYTE[0x2BD4] = 0x00; //Set CCD Xsg3afallca
XBYTE[0x2BD5] = 0x00;
XBYTE[0x2BD6] = 0x00; //Set CCD Xsg3bfallca
XBYTE[0x2BD7] = 0x00;
XBYTE[0X2000] = 0x00;
XBYTE[0X2000] = 0x02;
while((L2_CheckDRAMStatus()&0X02)!=0X02);
///////////////////////////////////////////////////////////////////
XBYTE[0x2B71] = 0x5E; //Set CCD Xsg1afallm
XBYTE[0x2B72] = 0x05;
XBYTE[0x2B75] = 0x3E; //Set CCD Xsg3afallm
XBYTE[0x2B76] = 0x07;
XBYTE[0x2924] = 0x00; //Set 3 Field DISable, fieldsel
XBYTE[0X2B05] = 0x01;
XBYTE[0x2B00] = 0x03; //Set afen, progressen, ccdtgen
XBYTE[0x2B09] = 0x10; //Set Vsubctr menual enable
XBYTE[0x2924] = 0x10; //Set 3 Field Enable, fieldsel
L2_OpenMShutter();
}
#endif
//andrew@patch4.4@0620
//ygliu modify , andrew update
#ifdef SONY432
{
PRINT_FRONT (" Snap %d Full frame Image \n", (USHORT)SnapNum);
XBYTE[0X203A] = XBYTE[0X203A] | 0x20; //GPIO21 Output enable
XBYTE[0X2032] = XBYTE[0X2032] | 0x20; //GPIO21 = 1
XBYTE[0X2032] = XBYTE[0X2032] & 0xDF; //GPIO21 = 0
//FOR Field 1
XBYTE[0x2924] = 0xB1; //Set 3 Field enable, fieldsel
XBYTE[0x2b41] = 0x11; //Set 3 monitor repeat 1,1
XBYTE[0x2B06] = 0x10; //Set CCD Rlinenum = 1
XBYTE[0x2BA0] = 0x7E; //Set CCD Xv1risecar
XBYTE[0x2BA1] = 0x02;
XBYTE[0x2BA2] = 0xFF; //Set CCD Xv1fallcar
XBYTE[0x2BA3] = 0x0F;
XBYTE[0x2BA4] = 0xFF; //Set CCD Xv2risecar
XBYTE[0x2BA5] = 0x0F;
XBYTE[0x2BA6] = 0xFF; //Set CCD Xv2fallcar
XBYTE[0x2BA7] = 0x0F;
XBYTE[0x2BA8] = 0xFF; //Set CCD Xv3risecar
XBYTE[0x2BA9] = 0x0F;
XBYTE[0x2BAA] = 0x63; //Set CCD Xv3fallcar
XBYTE[0x2BAB] = 0x02;
XBYTE[0x2BAC] = 0xFF; //Set CCD Xv4risecar
XBYTE[0x2BAD] = 0x0F;
XBYTE[0x2BAE] = 0x94; //Set CCD Xv4fallcar
XBYTE[0x2BAF] = 0x02;
XBYTE[0x2BD0] = 0xA9; //Set CCD Xsg1afallca
XBYTE[0x2BD1] = 0x02;
XBYTE[0x2BD2] = 0xA9; //Set CCD Xsg1bfallca
XBYTE[0x2BD3] = 0x02;
// XBYTE[0x2BD0] = 0xFF; //Set CCD Xsg1afallca
// XBYTE[0x2BD1] = 0x0F;
// XBYTE[0x2BD2] = 0xFF; //Set CCD Xsg1bfallca
// XBYTE[0x2BD3] = 0x0F;
XBYTE[0x2BD4] = 0xFF; //Set CCD Xsg3afallca
XBYTE[0x2BD5] = 0x0F;
XBYTE[0x2BD6] = 0xFF; //Set CCD Xsg3bfallca
XBYTE[0x2BD7] = 0x0F;
///////////////////////////////////////////////////////////////
XBYTE[0X2000] = 0x00;
XBYTE[0X2000] = 0x02;
XBYTE[0x2B71] = 0x00; //Set CCD Xsg1afallm
XBYTE[0x2B72] = 0x00;
XBYTE[0x2B75] = 0x00; //Set CCD Xsg3afallm
XBYTE[0x2B76] = 0x00;
XBYTE[0X2A82]= 0X01;
L2_WaitVD(0, 1);
XBYTE[0x2B00] = 0x07; //Set afen, progressen, ccdtgen
XBYTE[0X2B05] = 0x13; //Snap trg
L2_Wait(20);
//L2_Wait(50);
L2_CloseMShutter();
L2_WaitVD(0, 1);
XBYTE[0x2924] = 0xF1; //Set 3 Field enable, fieldsel
XBYTE[0x2b41] = 0x22; //Set 3 monitor repeat 1,1
while((L2_CheckDRAMStatus()&0X02)!=0X02);
//FOR Field 2
XBYTE[0x2924] = 0xF2; //Set 3 Field enable, fieldsel
XBYTE[0x2B06] = 0x10; //Set CCD Rlinenum = 1
XBYTE[0x2BA0] = 0x15; //Set CCD Xv1risecar
XBYTE[0x2BA1] = 0x03;
XBYTE[0x2BA2] = 0xFF; //Set CCD Xv1fallcar
XBYTE[0x2BA3] = 0x0F;
XBYTE[0x2BA4] = 0xFF; //Set CCD Xv2risecar
XBYTE[0x2BA5] = 0x0F;
XBYTE[0x2BA6] = 0xFF; //Set CCD Xv2fallcar
XBYTE[0x2BA7] = 0x0F;
XBYTE[0x2BA8] = 0xFF; //Set CCD Xv3risecar
XBYTE[0x2BA9] = 0x0F;
XBYTE[0x2BAA] = 0xFB; //Set CCD Xv3fallcar
XBYTE[0x2BAB] = 0x02;
XBYTE[0x2BAC] = 0xCA; //Set CCD Xv4risecar
XBYTE[0x2BAD] = 0x02;
XBYTE[0x2BAE] = 0x93; //Set CCD Xv4fallcar
XBYTE[0x2BAF] = 0x02;
XBYTE[0x2BD0] = 0xB2; //Set CCD Xsg1afallca
XBYTE[0x2BD1] = 0x02;
// XBYTE[0x2BD0] = 0xFF; //Set CCD Xsg1afallca
// XBYTE[0x2BD1] = 0x0F;
XBYTE[0x2BD2] = 0xFF; //Set CCD Xsg1bfallca
XBYTE[0x2BD3] = 0x0F;
XBYTE[0x2BD4] = 0xFF; //Set CCD Xsg3afallca
XBYTE[0x2BD5] = 0x0F;
XBYTE[0x2BD6] = 0xFF; //Set CCD Xsg3bfallca
XBYTE[0x2BD7] = 0x0F;
XBYTE[0X2000] = 0x00;
XBYTE[0X2000] = 0x02;
while((L2_CheckDRAMStatus()&0X02)!=0X02);
/////////////////////////////////////////////////////////////////////
//FOR Field 3
XBYTE[0x2924] = 0xF0; //Set 3 Field enable, fieldsel
XBYTE[0x2B06] = 0x20; //Set CCD Rlinenum = 2
XBYTE[0x2BA0] = 0x24; //Set CCD Xv1risecar
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -