📄 image_sensor.c
字号:
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_int8 init_GC0316(void)
{
gc_effect_on = KAL_FALSE;
gc_reinit = KAL_TRUE;
gc_EnterCarvingEffect = KAL_FALSE;
cis_module_power_on(KAL_TRUE); // Power On CIS Power
kal_sleep_task(2);
// SCCB high, output
GPIO_ModeSetup(SCCB_SERIAL_CLK_PIN,0);
GPIO_ModeSetup(SCCB_SERIAL_DATA_PIN,0);
GPIO_WriteIO(1, SCCB_SERIAL_CLK_PIN);
GPIO_WriteIO(1, SCCB_SERIAL_DATA_PIN);
GPIO_InitIO(OUTPUT, SCCB_SERIAL_CLK_PIN);
GPIO_InitIO(OUTPUT, SCCB_SERIAL_DATA_PIN);
kal_sleep_task(2); // To wait for Stable Power
REG_ISP_CMOS_SENSOR_MODE_CONFIG |= REG_CMOS_SENSOR_RESET_BIT;
kal_sleep_task(2);
REG_ISP_CMOS_SENSOR_MODE_CONFIG &= ~REG_CMOS_SENSOR_RESET_BIT;//low
kal_sleep_task(2);
REG_ISP_CMOS_SENSOR_MODE_CONFIG |= REG_CMOS_SENSOR_RESET_BIT;
SET_CMOS_CLOCK_POLARITY_LOW;
SET_VSYNC_POLARITY_HIGH;
SET_HSYNC_POLARITY_LOW; //LOW is hsync high active!
//ENABLE_CAMERA_SENSOR_HVALID_HREF; //test how it work?
ENABLE_CAMERA_INDATA_FORMAT;
SET_CAMERA_INPUT_TYPE(INPUT_YUV422);
SET_CAMERA_INPUT_ORDER(INPUT_ORDER_YCbY1Cr);
ENABLE_CAMERA_TG_CLK_48M;
UPLL_Enable(UPLL_OWNER_ISP);
//set_isp_driving_current(camera_para.SENSOR.reg[CMMCLK_CURRENT_INDEX].para);
set_isp_driving_current(ISP_DRIVING_8MA);
sensor_id=(read_cmos_sensor(0x00));
kal_prompt_trace(MOD_MMI,"GC0316 TRY: sensor ID is %x", sensor_id);
if(sensor_id != GC0316_SENSOR_ID)
return -1;
write_cmos_sensor(0xf0, 0x00); //page0
write_cmos_sensor(0x13, 0x01); //apwd
Delayms_GC(200);
//-close output-//
write_cmos_sensor(0x43, 0x20); //[6] pclk_en
write_cmos_sensor(0x44, 0xa2); //[6] output_en
write_cmos_sensor(0x40, 0x10);
write_cmos_sensor(0x41, 0x00);
write_cmos_sensor(0x47, 0x00);
write_cmos_sensor(0x00, 0x00);
write_cmos_sensor(0x00, 0x00);
write_cmos_sensor(0x00, 0x00); // delay some time
//-nomal output-//
Delayms_GC(200);
write_cmos_sensor(0xc7, 0x50);
write_cmos_sensor(0xc8, 0x40);
write_cmos_sensor(0xc9, 0x48);
write_cmos_sensor(0x00, 0x98); //RO
write_cmos_sensor(0x01, 0xBF);
write_cmos_sensor(0x02, 0x0C);
write_cmos_sensor(0x03, 0x00);
write_cmos_sensor(0x04, 0x8e);//0x8e,
write_cmos_sensor(0x05, 0x00);
write_cmos_sensor(0x06, 0x00);
write_cmos_sensor(0x07, 0x00);
write_cmos_sensor(0x08, 0x00);
write_cmos_sensor(0x09, 0x01); //width height YUV: 488-8
write_cmos_sensor(0x0a, 0xfc);
write_cmos_sensor(0x0b, 0x02); //window width YUV: 648-8
write_cmos_sensor(0x0c, 0x90);//0x88,
write_cmos_sensor(0x0d, 0x22);
write_cmos_sensor(0x0e, 0x22);
write_cmos_sensor(0x0f, 0x30);
write_cmos_sensor(0x10, 0x24);
write_cmos_sensor(0x11, 0x00);
write_cmos_sensor(0x12, 0x10);
write_cmos_sensor(0x14, 0x00);
write_cmos_sensor(0x15, 0x08);
write_cmos_sensor(0x16, 0x04);
write_cmos_sensor(0x17, 0x08);
write_cmos_sensor(0x18, 0x02);
write_cmos_sensor(0x19, 0x00);
write_cmos_sensor(0x1a, 0x00);
write_cmos_sensor(0x1b, 0x00);
write_cmos_sensor(0x1c, 0x02);
write_cmos_sensor(0x1d, 0x02);
write_cmos_sensor(0x1e, 0x00);
write_cmos_sensor(0x1f, 0x00);
//BLK control
write_cmos_sensor(0x59, 0x30); //global offset
write_cmos_sensor(0x35, 0x6d); //BLK
write_cmos_sensor(0x36, 0x15);
//--PRE_GAIN--//
write_cmos_sensor(0x61, 0x80); //G0 gain
write_cmos_sensor(0x63, 0x80); //R gain
write_cmos_sensor(0x65, 0x98); //B1 gain
write_cmos_sensor(0x67, 0x80); //G1 gain
write_cmos_sensor(0x68, 0x08); //[3:0]global 0x04=1.0X, 0x0f=3.99X
write_cmos_sensor(0xdb, 0x40);
write_cmos_sensor(0xdc, 0x40);
//-Color correction-//
/*
write_cmos_sensor(0x69, 0x40);
write_cmos_sensor(0x6a, 0xf8);
write_cmos_sensor(0x6b, 0xf8);
write_cmos_sensor(0x6c, 0x00);
write_cmos_sensor(0x6d, 0x48);
write_cmos_sensor(0x6e, 0xf4);*/
write_cmos_sensor( 0x69,0x44 );
write_cmos_sensor( 0x6a,0xf8 );
write_cmos_sensor( 0x6b,0xf4 );
write_cmos_sensor( 0x6c,0xfe );
write_cmos_sensor( 0x6d,0x53 );
write_cmos_sensor( 0x6e,0xe7 );
//-lens shading-//
write_cmos_sensor(0x70, 0x05); //big lens
write_cmos_sensor(0x71, 0x04);
write_cmos_sensor(0x72, 0x03);
write_cmos_sensor(0x73, 0x08);
write_cmos_sensor(0x74, 0x3d);
write_cmos_sensor(0x75, 0x51);
write_cmos_sensor(0x76, 0x00);
write_cmos_sensor(0x7d, 0x00);
//-Defect,Noise-//
write_cmos_sensor(0x7e, 0x44);
write_cmos_sensor(0x7f, 0x84);
write_cmos_sensor(0x80, 0x0c); //DN,0x18
write_cmos_sensor(0x81, 0x0c); //0x10//,0x80,0x81,
write_cmos_sensor(0x82, 0x34); //66
write_cmos_sensor(0x83, 0x18);
write_cmos_sensor(0x84, 0x18);
write_cmos_sensor(0x85, 0x04);//0x02,
write_cmos_sensor(0x86, 0xff);
write_cmos_sensor(0x87, 0x93);//93 //0x94//,
//-Edge enhance-//
write_cmos_sensor(0x88, 0x0a); //0a,
write_cmos_sensor(0x89, 0x04); //04,
write_cmos_sensor(0x8b, 0x0a); //5 edge_max
write_cmos_sensor(0x8c, 0x10); //低4位 :1 : adaptive enhance effect,0: edge effect 64
write_cmos_sensor(0x8d, 0x23);//0x12,
write_cmos_sensor(0x8e, 0x32);//0x3f//,0x8d,0x8e,
//-RGB GAMMA-// gamma3-new
/*
write_cmos_sensor(0x8f, 0x19);
write_cmos_sensor(0x90, 0x30);
write_cmos_sensor(0x91, 0x44);
write_cmos_sensor(0x92, 0x54);
write_cmos_sensor(0x93, 0x63);
write_cmos_sensor(0x94, 0x71);
write_cmos_sensor(0x95, 0x7e);
write_cmos_sensor(0x96, 0x94);
write_cmos_sensor(0x97, 0xa6);
write_cmos_sensor(0x98, 0xb6);
write_cmos_sensor(0x99, 0xc3);
write_cmos_sensor(0x9A, 0xcc);
write_cmos_sensor(0x9B, 0xd5);
write_cmos_sensor(0x9C, 0xdb);
write_cmos_sensor(0x9D, 0xe4);
write_cmos_sensor(0x9E, 0xe9);
write_cmos_sensor(0x9F, 0xeb);*/
write_cmos_sensor(0x8f, 0x1b);
write_cmos_sensor(0x90, 0x35);
write_cmos_sensor(0x91, 0x48);
write_cmos_sensor(0x92, 0x57);
write_cmos_sensor(0x93, 0x63);
write_cmos_sensor(0x94, 0x6e);
write_cmos_sensor(0x95, 0x77);
write_cmos_sensor(0x96, 0x88);
write_cmos_sensor(0x97, 0x96);
write_cmos_sensor(0x98, 0xA3);
write_cmos_sensor(0x99, 0xaf);
write_cmos_sensor(0x9A, 0xba);
write_cmos_sensor(0x9B, 0xc4);
write_cmos_sensor(0x9C, 0xce);
write_cmos_sensor(0x9D, 0xE0);
write_cmos_sensor(0x9E, 0xf0);
write_cmos_sensor(0x9F, 0xFe);
//--Y_gamma--//
write_cmos_sensor(0xf1, 0x0a);
write_cmos_sensor(0xf2, 0x16);
write_cmos_sensor(0xf3, 0x20);
write_cmos_sensor(0xf4, 0x38);
write_cmos_sensor(0xf5, 0x4e);
write_cmos_sensor(0xf6, 0x64);
write_cmos_sensor(0xf7, 0x78);
write_cmos_sensor(0xf8, 0x8b);
write_cmos_sensor(0xf9, 0xaa);
write_cmos_sensor(0xfa, 0xc3);
write_cmos_sensor(0xfb, 0xd6);
write_cmos_sensor(0xfc, 0xe1);
write_cmos_sensor(0xfd, 0xe9);
//-Y Color domai-//
write_cmos_sensor(0x77, 0x80); //contrast_center
write_cmos_sensor(0x78, 0x00);
write_cmos_sensor(0x79, 0x00);
write_cmos_sensor(0x7a, 0x00);
write_cmos_sensor(0x7b, 0x40);
write_cmos_sensor(0x7c, 0x00);
write_cmos_sensor(0xa0, 0x50); //saturation, when open CC, use smaller saturation
write_cmos_sensor(0xa1, 0x40); //contrast
write_cmos_sensor(0xa2, 0x30); //Cb_sat
write_cmos_sensor(0xa3, 0x30); //Cr_sat/
//-- skin --//
write_cmos_sensor(0xa8, 0xf2); //,
write_cmos_sensor(0xa9, 0x0e);
write_cmos_sensor(0xaa, 0x00);
write_cmos_sensor(0xab, 0xe0);
write_cmos_sensor(0xac, 0xfc);
write_cmos_sensor(0xad, 0x10);
write_cmos_sensor(0xae, 0x80);
write_cmos_sensor(0xaf, 0x80);
write_cmos_sensor(0xe8, 0x80);
write_cmos_sensor(0xe9, 0xff);
write_cmos_sensor(0xea, 0xff);
write_cmos_sensor(0xeb, 0x00);
write_cmos_sensor(0xec, 0x00);
write_cmos_sensor(0xed, 0x00);
write_cmos_sensor(0xee, 0x00);
write_cmos_sensor(0xef, 0xff);
//-- AWB --//
/*write_cmos_sensor(0xba, 0x0f); //0x08, //AWB by jiu
write_cmos_sensor(0xbb, 0x0f);
write_cmos_sensor(0xbc, 0x00); //0x01,
write_cmos_sensor(0xbd, 0xf0);
write_cmos_sensor(0xbe, 0x20);
write_cmos_sensor(0xbf, 0x40); //0x20,by jiu
write_cmos_sensor(0xc0, 0x66);
write_cmos_sensor(0xc1, 0xF0);
write_cmos_sensor(0xc2, 0x04); //0x07
write_cmos_sensor(0xc3, 0x80);
write_cmos_sensor(0xc4, 0x01);
write_cmos_sensor(0xc5, 0x41); //,
write_cmos_sensor(0xc6, 0x70); //0xff,//0x68,
write_cmos_sensor(0xc7, 0x58);
write_cmos_sensor(0xc8, 0x40);
write_cmos_sensor(0xc9, 0x5c); //0x60,by jiu //,
write_cmos_sensor(0xcd, 0x08); //R_ratio, 0x08,
write_cmos_sensor(0xce, 0x08); //0x08,
write_cmos_sensor(0xcf, 0x08); //0x08,*/
write_cmos_sensor(0xba, 0x0f); //0x08, //AWB by jiu
write_cmos_sensor(0xbb, 0x0f);
write_cmos_sensor(0xbc, 0x02); //0x01, //,
write_cmos_sensor(0xbd, 0xe0);
write_cmos_sensor(0xbe, 0x20);
write_cmos_sensor(0xbf, 0x40); //0x20,by jiu
write_cmos_sensor(0xc0, 0x00); // 10, 66
write_cmos_sensor(0xc1, 0xf0);
write_cmos_sensor(0xc2, 0x04); //0x07
write_cmos_sensor(0xc3, 0x80);
write_cmos_sensor(0xc4, 0x01);
write_cmos_sensor(0xc5, 0x44); //,
write_cmos_sensor(0xc6, 0x70); //0xff,//0x68, //,
write_cmos_sensor(0xcd, 0x08); //R_ratio, 0x08,
write_cmos_sensor(0xce, 0x08); //0x08,
write_cmos_sensor(0xcf, 0x08);
//-- AE --//
write_cmos_sensor(0xd0, 0x17); //0x37, //0x3f, //, AEC_mode
write_cmos_sensor(0xd1, 0x50); // Y target ,
write_cmos_sensor(0xd2, 0xa6); //margin;speed
write_cmos_sensor(0xd4, 0x30);
write_cmos_sensor(0xd5, 0xC0);
write_cmos_sensor(0xd6, 0x7D); //AEC_flicker_step 7D--25FPS
write_cmos_sensor(0xd7, 0x02); //exp_min_l
write_cmos_sensor(0xf0, 0x00); //page0
write_cmos_sensor(0xd8, 0x02);
write_cmos_sensor(0xd9, 0xff); //,
write_cmos_sensor(0xda, 0xff);
write_cmos_sensor(0xdb, 0x40); //,
write_cmos_sensor(0xdd, 0x10); //[7:4]exp_level //
write_cmos_sensor(0xde, 0xff);
write_cmos_sensor(0x20, 0x02);
write_cmos_sensor(0x21, 0x80);//post gain limit, c0
write_cmos_sensor(0x22, 0x50);//pre gain limit ,80
write_cmos_sensor(0x23, 0x88);
write_cmos_sensor(0x24, 0x00);
write_cmos_sensor(0x25, 0xaa);
write_cmos_sensor(0x26, 0xcc);
write_cmos_sensor(0x27, 0x16);
write_cmos_sensor(0x28, 0x03); //
write_cmos_sensor(0x29, 0x18);
write_cmos_sensor(0x2a, 0x03); //exp_level_1, 14fps
write_cmos_sensor(0x2b, 0x18);
write_cmos_sensor(0x2c, 0x06); //exp_level_2 , 7c4~7FPS, 58c~10FPS, 6a8~8.2FPS
write_cmos_sensor(0x2d, 0xe0);
write_cmos_sensor(0x2e, 0x06); //exp_level_3
write_cmos_sensor(0x2f, 0xe0);
write_cmos_sensor(0x30, 0x04);
write_cmos_sensor(0x31, 0x00);
write_cmos_sensor(0x32, 0x00);
write_cmos_sensor(0x33, 0x0f);
write_cmos_sensor(0x34, 0x40); //,
//-Measure window-//
write_cmos_sensor(0xe0, 0x01); //window
write_cmos_sensor(0xe1, 0x01);
write_cmos_sensor(0xe2, 0x28);
write_cmos_sensor(0xe3, 0x1e);
write_cmos_sensor(0xe4, 0x0a);
write_cmos_sensor(0xe5, 0x0a);
write_cmos_sensor(0xe6, 0x1e);
write_cmos_sensor(0xe7, 0x14);
//- PGA_table -//
write_cmos_sensor(0xf0, 0x01); //page1, PGA_table
write_cmos_sensor(0x00, 0x04);
write_cmos_sensor(0x01, 0x00);
write_cmos_sensor(0x02, 0x04);
write_cmos_sensor(0x03, 0x00); //,
write_cmos_sensor(0x04, 0x04); //
write_cmos_sensor(0x05, 0x00); //,
write_cmos_sensor(0x06, 0x04);
write_cmos_sensor(0x07, 0x00); //,
write_cmos_sensor(0x08, 0x04);
write_cmos_sensor(0x09, 0x00);
write_cmos_sensor(0x0a, 0x04);
write_cmos_sensor(0x0b, 0x00);
write_cmos_sensor(0x0c, 0x04); //level6
write_cmos_sensor(0x0d, 0x00);
write_cmos_sensor(0x0e, 0x04); //level7
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -