⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 image_sensor.c

📁 格克威0316 驱动源码
💻 C
📖 第 1 页 / 共 5 页
字号:
*
* 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 + -