📄 l2_fponcmos.c
字号:
reg_addr[0] = 0x00; //Buckup Exposure time
reg_data[0] = 0x04;
L2_WSSC107(reg_addr, reg_data, 0x01, 0x00);
L3_WaitUpdate107();
L2_WaitVD(0, 10);
L2_ReadSSC(0x40, reg_data, 0x01, 0x01); //Read back OFFSET
// PRINT_FRONT (" Read Reg 0x40 = %bx\n", reg_data[0]);
obvalue = reg_data[0];
XBYTE[0x292A] = obvalue;
//Initial Setting //////////////////////////////////////////////////////////////
reg_addr[0] = 0x52; //Set VGA DATA OUTPUT
reg_data[0] = 0x0D;
L2_WSSC107(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x01; //Disable Auto Dark
reg_data[0] = 0x01;
L2_WSSC107(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x40; //Set OB value
//reg_data[0] = obvalue;
reg_data[0] = obvalue; //cywu
L2_WSSC107(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x00;
reg_data[0] = 0x88;
L2_WSSC107(reg_addr, reg_data, 0x01, 0x00);
////////////////////////////////////////////////////////////////////////////////
}
#endif
#ifdef ICM108 // IC-media 1.0M CMOS Sensor
void L3_CMOSIniPad16(void) USING_0
{
XBYTE[0x2007] = 0x00; //Set Output enable
XBYTE[0x2008] = 0x00;
XBYTE[0x2009] = 0x02; //Set Clk2x Output
XBYTE[0x200a] = 0x00; //Set SWTGole
XBYTE[0x200b] = 0x00;
}
void L3_CMOSIniClk16(void) USING_0
{
XBYTE[0x2080] = 0x00; //Disable TG PLL
XBYTE[0x2A80] = 0x00; //Disable HP, let Clk2x Change immediate
XBYTE[0x2A81] = 0x03; //Set Clk1xDiv
XBYTE[0x2A82] = 0x01; //Set Clk2xDiv, the Pixclk will be 12Mhz
XBYTE[0x2019] = XBYTE[0x2019] & 0x30; //Select input clk1x , clk2x from PAD
XBYTE[0x2A80] = 0x00; //Disable HP, let Clk2x Change sync witd Vd
}
void L3_CMOSIniPhase16(void) USING_0 //Adjust this part to get better Image quality
{
XBYTE[0x2A83] = 0x00; //Clk1x Out delay
XBYTE[0x2023] = 0x02; //Clk1x Input delay
XBYTE[0x2022] = 0x00; //Clk2x Input delay
}
code UCHAR CmosRegData[]={
0x01, 0x10, //rem disable column count
//
0x03, 0x00,
0x04, 0x00,
0x05, 0x00,
0x06, 0x02,
0x08, 0x00,
//State 1//////////////////////////////////////////////////////////////
0x03, 0x01,
0x04, 0x90,
0x05, 0x01,
0x06, 0x03,
0x08, 0x00,
//State 2//////////////////////////////////////////////////////////////
0x03, 0x02,
0x04, 0x94,
0x05, 0x01,
0x06, 0x02,
0x08, 0x00,
//State 3//////////////////////////////////////////////////////////////
0x03, 0x03,
0x04, 0x98,
0x05, 0x01,
0x06, 0x06,
0x08, 0x00,
//State 4//////////////////////////////////////////////////////////////
0x03, 0x04,
0x04, 0x9b,
0x05, 0x01,
0x06, 0x0e,
0x08, 0x00,
//State 5//////////////////////////////////////////////////////////////
0x03, 0x05,
0x04, 0x9f,
0x05, 0x01,
0x06, 0x06,
0x08, 0x00,
//State 6//////////////////////////////////////////////////////////////
0x03, 0x06,
0x04, 0x94,
0x05, 0x0d,
0x06, 0x06,
0x08, 0x00,
//State 7//////////////////////////////////////////////////////////////
0x03, 0x07,
0x04, 0x96,
0x05, 0x05,
0x06, 0x06,
0x08, 0x00,
//State 8//////////////////////////////////////////////////////////////
0x03, 0x08,
0x04, 0x98,
0x05, 0x15,
0x06, 0x06,
0x08, 0x00,
//State 9//////////////////////////////////////////////////////////////
0x03, 0x09,
0x04, 0xaa,
0x05, 0x15,
0x06, 0x0f,
0x08, 0x00,
//State 10//////////////////////////////////////////////////////////////
0x03, 0x0a,
0x04, 0xad,
0x05, 0x15,
0x06, 0x07,
0x08, 0x00,
//State 11//////////////////////////////////////////////////////////////
0x03, 0x0b,
0x04, 0xd0,
0x05, 0x1f,
0x06, 0x07,
0x08, 0x00,
//State 12//////////////////////////////////////////////////////////////
0x03, 0x0c,
0x04, 0xe4,
0x05, 0x17,
0x06, 0x06,
0x08, 0x00,
//wave table Length 132/////////////////////////////////////////////////
0x07, 0x0d, // change position:1039
0x1c, 0x9b,
0x0c, 0xDC, //set frame width to 1800
0x0d, 0x05, //
0x0e, 0x40, //set frame hight to 1300
0x0D, 0x04, //set frame hight to 1300
0x9b, 0xd4,
0x9c, 0x07,
0x01, 0x01,
0x40, 0x00,
0x00, 0x84,
0x94, 0x80,
0x91, 0x88,
0x57, 0x07,
0x56, 0xf8,
0x55, 0x00,
0x54, 0x00
};
void L3_CMOSIniParameter16(void) USING_0
{
UCHAR reg_addr[3], reg_data[3],obvalue;
//UCHAR reg_addr[3], reg_data[3];
XBYTE[0x2AB0] = 0x01; //Reset Sensor interface
XBYTE[0x2AB0] = 0x00;
XBYTE[0x2A00] = 0x00; //Inverise Vsync input polarity
XBYTE[0x2A20] = 0x69; //68 //Set Hoffset
XBYTE[0x2A21] = 0x00;
XBYTE[0x2A22] = 0x0f;//0d; //Set Voffset
XBYTE[0x2A23] = 0x00;
XBYTE[0x2A24] = 0x20; //Set Hsize
XBYTE[0x2A25] = 0x05;
XBYTE[0x2A26] = 0x20; //Set Vsize
XBYTE[0x2A27] = 0x04;
XBYTE[0x2A30] = 0x23; //Set Hoffsetm
XBYTE[0x2A31] = 0x00;
XBYTE[0x2A32] = 0x40; //Set Hsizem
XBYTE[0x2A33] = 0x02;
XBYTE[0x2A34] = 0x0b; //Set Voffsetm
XBYTE[0x2A35] = 0x00;
XBYTE[0x2A36] = 0xB1; //Set Vsizem
XBYTE[0x2A37] = 0x01;
XBYTE[0x2A41] = 0xF9; //Set LineTotal
XBYTE[0x2A42] = 0x03;
XBYTE[0x2A50] = 0x15; //Set FrameTotalm
XBYTE[0x2A51] = 0x02;
//Use SSC to initializes CMOS sensor register/////////////////////////////////// // Ov9620 1.3M CMOS Sensor
XBYTE[0X2900] = 0x42; //Set sensor slave address
XBYTE[0x2904] = 0x04; //Set to SSC Frequency
{
data USHORT i;
for (i=0; i<sizeof(CmosRegData) ; i+=2)
{
L2_WSSC108(CmosRegData+i, CmosRegData+i+1, 0x01, 0x00);
}
}
L2_WaitVD(0, 1);
//Caculate the OB value/////////////////////////////////////////////////////////
reg_addr[0] = 0x52; //Set VGA DATA OUTPUT
reg_data[0] = 0x00;
L2_WSSC108(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x01; //Enable Auto Dark
reg_data[0] = 0x09;
L2_WSSC108(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x00;
reg_data[0] = 0x80;
L2_WSSC108(reg_addr, reg_data, 0x01, 0x00);
L3_WaitUpdate108();
L2_WaitVD(0, 1);
reg_addr[0] = 0x1D; //Exposure time High
reg_data[0] = 0x02;
L2_WSSC108(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x1C; //Exposure time Low
reg_data[0] = 0x08;
L2_WSSC108(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x00; //Buckup Exposure time
reg_data[0] = 0x04;
L2_WSSC108(reg_addr, reg_data, 0x01, 0x00);
L3_WaitUpdate108();
L2_WaitVD(0, 10);
L2_ReadSSC(0x40, reg_data, 0x01, 0x01); //Read back OFFSET
// PRINT_FRONT (" Read Reg 0x40 = %bx\n", reg_data[0]);
obvalue = reg_data[0];
XBYTE[0x292A] = obvalue;
//Initial Setting //////////////////////////////////////////////////////////////
reg_addr[0] = 0x52; //Set VGA DATA OUTPUT
reg_data[0] = 0x0D;
L2_WSSC108(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x01; //Disable Auto Dark
reg_data[0] = 0x01;
L2_WSSC108(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x40; //Set OB value
//reg_data[0] = obvalue;
reg_data[0] = obvalue; //cywu
L2_WSSC108(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x00;
reg_data[0] = 0x88;
L2_WSSC108(reg_addr, reg_data, 0x01, 0x00);
////////////////////////////////////////////////////////////////////////////////
}
#endif
#ifdef HP2020 // HP VGA CMOS Sensor
void L3_CMOSIniPad03(void)
{
XBYTE[0x2007] = 0x00; //Set Output enable
XBYTE[0x2008] = 0x00;
XBYTE[0x2009] = 0x02; //Set Clk2x Output
XBYTE[0x200a] = 0x00; //Set SWTGole
XBYTE[0x200b] = 0x00;
}
void L3_CMOSIniClk03(void)
{
XBYTE[0x2080] = 0x00; //Disable TG PLL
XBYTE[0x2A80] = 0x01; //Enable HP, let Clk2x Change immediate
XBYTE[0x2A81] = 0x05; //Set Clk1xDiv
XBYTE[0x2A82] = 0x01; //Set Clk2xDiv
XBYTE[0x2019] = XBYTE[0x2019] | 0xC0; //Select input clk1x, clk2x from Internal
XBYTE[0x2A80] = 0x03; //Enable HP, let Clk2x Change sync witd Vd
}
void L3_CMOSIniPhase03(void) //Adjust this part to get better Image quality
{
XBYTE[0x2A83] = 0x00; //Clk1x Out delay
XBYTE[0x2023] = 0x00; //Clk1x Input delay
XBYTE[0x2022] = 0x00; //Clk2x Input delay
}
void L3_CMOSIniParameter03(void)
{
UCHAR reg_addr[6], reg_data[6];
UCHAR i,j;
XBYTE[0x2AB0] = 0x01; //Reset Sensor interface
XBYTE[0x2AB0] = 0x00;
// XBYTE[0x2A15] = 0x01; //Vfall (Low)
XBYTE[0x2A15] = 0x01; //Vfall (Low)1
// XBYTE[0x2A17] = 0x02; //Vrise (Low)
XBYTE[0x2A17] = 0x02; //Vrise (Low)2
XBYTE[0x2A10] = 0x02; //Vreshape ensble
// XBYTE[0x2A20] = 0x28; //Set Hoffset
// XBYTE[0x2A21] = 0x00;
XBYTE[0x2A20] = 0x30; //Set Hoffset
XBYTE[0x2A21] = 0x00;
XBYTE[0x2A22] = 0x08; //Set Voffset16
XBYTE[0x2A23] = 0x00;
XBYTE[0x2A24] = 0x80; //Set Hsize(640)
XBYTE[0x2A25] = 0x02;
XBYTE[0x2A26] = 0xed; //Set Vsize(480)(org=0xE0)
XBYTE[0x2A27] = 0x01;
XBYTE[0x2A30] = 0x18; //Set Hoffsetm(0x34)
XBYTE[0x2A31] = 0x00;
XBYTE[0x2A34] = 0x01; //Set Voffsetm(0x07)
XBYTE[0x2A35] = 0x00;
XBYTE[0x2A32] = 0x80; //Set Hsizem(0x80)
XBYTE[0x2A33] = 0x02;
XBYTE[0x2A36] = 0xEf; //Set Vsizem(0x01ee)
XBYTE[0x2A37] = 0x01;
/*
XBYTE[0x2A30] = 0x22; //Set Hoffsetm
XBYTE[0x2A31] = 0x00;
XBYTE[0x2A34] = 0x09; //Set Voffsetm
XBYTE[0x2A35] = 0x00;
XBYTE[0x2A32] = 0x80; //Set Hsizem
XBYTE[0x2A33] = 0x02;
XBYTE[0x2A36] = 0xe0; //Set Vsizem 0xa0
XBYTE[0x2A37] = 0x01;
*/
XBYTE[0x2A41] = 0x20; //Set LineTotal
XBYTE[0x2A42] = 0x03;
XBYTE[0x2A50] = 0x14; //Set FrameTotalm
XBYTE[0x2A51] = 0x02;
//Use SSC to initializes CMOS sensor register/////////////////////////////////// // Ov9620 1.3M CMOS Sensor
XBYTE[0X2900]= 0xAA; // Set sensor slave address
XBYTE[0x2904]= 0x02; //Set to SSC Frequency
reg_addr[0] = 0x38; //Rst Sensor
reg_data[0] = 0x09;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00); //Set Seq SSC Write
reg_addr[0] = 0x38; //Rst Sensor
reg_data[0] = 0x00;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00); //Set Seq SSC Write
reg_addr[0] = 0x38; //RUN
reg_data[0] = 0x04;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00); //Set Seq SSC Write
//status register
reg_addr[0] = 0x02;
reg_data[0] = 0x00;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00); //Set Seq SSC Write
//Interrupt Mask register
reg_addr[0] = 0x04;
reg_data[0] = 0x00;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00); //Set Seq SSC Write
//Pad control register
reg_addr[0] = 0x06;
reg_data[0] = 0x03;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00); //Set Seq SSC Write
//Pad Drive control register
reg_addr[0] = 0x08;
reg_data[0] = 0x00;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00); //Set Seq SSC Write
//Interface Control register
reg_addr[0] = 0x0A;
reg_data[0] = 0x40;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00); //Set Seq SSC Write
//Interface Timming register
reg_addr[0] = 0x0C;
reg_data[0] = 0x2A;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00); //Set Seq SSC Write
//Baud Fraction register
reg_addr[0] = 0x0E;
reg_data[0] = 0x01;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00); //Set Seq SSC Write
//Baud Rate register
reg_addr[0] = 0x10;
reg_data[0] = 0x9B;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00); //Set Seq SSC Write
//ADC Control register
reg_addr[0] = 0x12;
reg_data[0] = 0x0A;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00); //Set Seq SSC Write
//First row register
reg_addr[0] = 0x14;
reg_data[0] = 0x01;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00); //Set Seq SSC Write
//First column register
reg_addr[0] = 0x16;
reg_data[0] = 0x01;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00); //Set Seq SSC Write
//Last row register
reg_addr[0] = 0x18;
reg_data[0] = 0x7A;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00); //Set Seq SSC Write
//Last column register
reg_addr[0] = 0x1A;
reg_data[0] = 0xA7;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00); //Set Seq SSC Write
//Timming Control register
reg_addr[0] = 0x1C;
reg_data[0] = 0x07;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00); //Set Seq SSC Write
// even row even col gain
reg_addr[0] = 0x1E;
reg_data[0] = 0x0A;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00); //Set Seq SSC Write
// even row odd col gain
reg_addr[0] = 0x20;
reg_data[0] = 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -