📄 l2_fponcmos.c
字号:
reg_addr[2] = 0x05;
reg_data[2] = 0x00;
reg_addr[3] = 0x06;
reg_data[3] = 0x05;
reg_addr[4] = 0x08;
reg_data[4] = 0x00;
L2_WriteSSC(reg_addr, reg_data, 0x05, 0x02); //Set Burst SSC Write
//Vector 4
reg_addr[0] = 0x03;
reg_data[0] = 0x04;
reg_addr[1] = 0x04;
reg_data[1] = 0x39;
reg_addr[2] = 0x05;
reg_data[2] = 0x00;
reg_addr[3] = 0x06;
reg_data[3] = 0x0d;
reg_addr[4] = 0x08;
reg_data[4] = 0x00;
L2_WriteSSC(reg_addr, reg_data, 0x05, 0x02); //Set Burst SSC Write
//Vector 5
reg_addr[0] = 0x03;
reg_data[0] = 0x05;
reg_addr[1] = 0x04;
reg_data[1] = 0x3b;
reg_addr[2] = 0x05;
reg_data[2] = 0x00;
reg_addr[3] = 0x06;
reg_data[3] = 0x05;
reg_addr[4] = 0x08;
reg_data[4] = 0x00;
L2_WriteSSC(reg_addr, reg_data, 0x05, 0x02); //Set Burst SSC Write
//Vector 6
reg_addr[0] = 0x03;
reg_data[0] = 0x06;
reg_addr[1] = 0x04;
reg_data[1] = 0x34;
reg_addr[2] = 0x05;
reg_data[2] = 0x06;
reg_addr[3] = 0x06;
reg_data[3] = 0x05;
reg_addr[4] = 0x08;
reg_data[4] = 0x00;
L2_WriteSSC(reg_addr, reg_data, 0x05, 0x02); //Set Burst SSC Write
//Vector 7
reg_addr[0] = 0x03;
reg_data[0] = 0x07;
reg_addr[1] = 0x04;
reg_data[1] = 0x38;
reg_addr[2] = 0x05;
reg_data[2] = 0x02;
reg_addr[3] = 0x06;
reg_data[3] = 0x05;
reg_addr[4] = 0x08;
reg_data[4] = 0x00;
L2_WriteSSC(reg_addr, reg_data, 0x05, 0x02); //Set Burst SSC Write
//Vector 8
reg_addr[0] = 0x03;
reg_data[0] = 0x08;
reg_addr[1] = 0x04;
reg_data[1] = 0x3e;
reg_addr[2] = 0x05;
reg_data[2] = 0x8A;
reg_addr[3] = 0x06;
reg_data[3] = 0x05;
reg_addr[4] = 0x08;
reg_data[4] = 0x00;
L2_WriteSSC(reg_addr, reg_data, 0x05, 0x02); //Set Burst SSC Write
//Vector 9
reg_addr[0] = 0x03;
reg_data[0] = 0x09;
reg_addr[1] = 0x04;
reg_data[1] = 0x42;
reg_addr[2] = 0x05;
reg_data[2] = 0x8A;
reg_addr[3] = 0x06;
reg_data[3] = 0x0D;
reg_addr[4] = 0x08;
reg_data[4] = 0x00;
L2_WriteSSC(reg_addr, reg_data, 0x05, 0x02); //Set Burst SSC Write
//Vector 10
reg_addr[0] = 0x03;
reg_data[0] = 0x0A;
reg_addr[1] = 0x04;
reg_data[1] = 0x44;
reg_addr[2] = 0x05;
reg_data[2] = 0x8A;
reg_addr[3] = 0x06;
reg_data[3] = 0x05;
reg_addr[4] = 0x08;
reg_data[4] = 0x00;
L2_WriteSSC(reg_addr, reg_data, 0x05, 0x02); //Set Burst SSC Write
//Vector 11
reg_addr[0] = 0x03;
reg_data[0] = 0x0B;
reg_addr[1] = 0x04;
reg_data[1] = 0x0C;
reg_addr[2] = 0x05;
reg_data[2] = 0x8F;
reg_addr[3] = 0x06;
reg_data[3] = 0x05;
reg_addr[4] = 0x08;
reg_data[4] = 0x00;
L2_WriteSSC(reg_addr, reg_data, 0x05, 0x02); //Set Burst SSC Write
//Vector 12
reg_addr[0] = 0x03;
reg_data[0] = 0x0C;
reg_addr[1] = 0x04;
reg_data[1] = 0x59;
reg_addr[2] = 0x05;
reg_data[2] = 0x0B;
reg_addr[3] = 0x06;
reg_data[3] = 0x05;
reg_addr[4] = 0x08;
reg_data[4] = 0x00;
L2_WriteSSC(reg_addr, reg_data, 0x05, 0x02); //Set Burst SSC Write
//use wave table length
reg_addr[0] = 0x07;
reg_data[0] = 0x0d;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
//use wave table, enable auto dark correction
reg_addr[0] = 0x01;
reg_data[0] = 0x29;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
//Disable column count
reg_addr[0] = 0x10; //begin of column
reg_data[0] = 0xb4;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x0C; //Column width
reg_data[0] = 0x5A;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x0D; //Column width
reg_data[0] = 0x03;
//L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x14; //Row Begin
reg_data[0] = 0x03;
//L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x0e; //Row Height
reg_data[0] = 0x00;
//L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x18; //Hsync End position
reg_data[0] = 0x20;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x91;
reg_data[0] = 0x1a;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x00;
reg_data[0] = 0x88;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x01;
reg_data[0] = 0x21;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x90;
reg_data[0] = 0x30;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x9B;
reg_data[0] = 0x42;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x9C;
reg_data[0] = 0x03;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x01;
reg_data[0] = 0x29;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x1C;
reg_data[0] = 0x0C;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x00;
reg_data[0] = 0x84;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
////////////////////////////////////////////////////////////////////////////////
reg_addr[0] = 0x1d; //Set Exposure High
reg_data[0] = 0x02;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x1c; //Set Exposure Low
reg_data[0] = 0x05;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x00; //Update Exposure time
reg_data[0] = 0x00;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x00; //Update Exposure time
reg_data[0] = 0x84;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x11; //Set Global gain
reg_data[0] = 0x00;
L2_WriteSSC(reg_addr, reg_data, 0x01, 0x00);
}
#endif
// version4.0@andrew@0513
// merge rocky setting
#ifdef ICM107B // IC-media 1.0M CMOS Sensor
void L3_CMOSIniPad11(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_CMOSIniClk11(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_CMOSIniPhase11(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, 0xf2, //set frame width to 2034
0x0d, 0x07, //
0x0e, 0x9c, //set frame hight to 1180
0x9b, 0xd4,
0x9c, 0x07,
0x01, 0x01,
0x40, 0x00,
0x00, 0x84,
0x94, 0x80,
0x91, 0x88,
0x57, 0x07,
0x56, 0xf8,
0x55, 0x00,
0x54, 0x00
};
void L3_CMOSIniParameter11(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] = 0x6A; //Set Hoffset
XBYTE[0x2A21] = 0x00;
XBYTE[0x2A22] = 0x0F; //Set Voffset
XBYTE[0x2A23] = 0x00;
XBYTE[0x2A24] = 0x80; //Set Hsize = 1152
XBYTE[0x2A25] = 0x04;
XBYTE[0x2A26] = 0x61; //Set Vsize = 864
XBYTE[0x2A27] = 0x03;
XBYTE[0x2A30] = 0x24; //Set Hoffsetm
XBYTE[0x2A31] = 0x00;
XBYTE[0x2A32] = 0x40; //Set Hsizem
XBYTE[0x2A33] = 0x02;
XBYTE[0x2A34] = 0x0C; //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;
//patch4.3@richie@po0603
L2_Wait(1);
//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_WSSC107(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_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);
reg_addr[0] = 0x00;
reg_data[0] = 0x80;
L2_WSSC107(reg_addr, reg_data, 0x01, 0x00);
L3_WaitUpdate107();
L2_WaitVD(0, 1);
reg_addr[0] = 0x1D; //Exposure time High
reg_data[0] = 0x02;
L2_WSSC107(reg_addr, reg_data, 0x01, 0x00);
reg_addr[0] = 0x1C; //Exposure time Low
reg_data[0] = 0x08;
L2_WSSC107(reg_addr, reg_data, 0x01, 0x00);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -