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

📄 image_sensor_ov7660.c

📁 ov7670
💻 C
📖 第 1 页 / 共 5 页
字号:
				  info_ptr->is_read_only=KAL_FALSE;
				  info_ptr->is_need_restart=KAL_TRUE;
				  info_ptr->min=2;
				  info_ptr->max=8;
				break;
				default:
				   ASSERT(0);
			}
		break;
		case FRAME_RATE_LIMITATION:
			switch (item_idx)
			{
				case 0:
				  sprintf((char *) (info_ptr->item_name_ptr), "Max Exposure Lines");
				  info_ptr->item_value=OV7660_MAX_EXPOSURE_LINES;
				  info_ptr->is_true_false=KAL_FALSE;
				  info_ptr->is_read_only=KAL_TRUE;
				  info_ptr->is_need_restart=KAL_FALSE;
				  info_ptr->min=0;
				  info_ptr->max=0;
				break;
				case 1:
				  sprintf((char *) (info_ptr->item_name_ptr), "Min Frame Rate");
				  info_ptr->item_value=OV7660_MIN_FRAME_RATE;
				  info_ptr->is_true_false=KAL_FALSE;
				  info_ptr->is_read_only=KAL_TRUE;
				  info_ptr->is_need_restart=KAL_FALSE;
				  info_ptr->min=0;
				  info_ptr->max=0;
				break;
				default:
				   ASSERT(0);
			}
		break;
		case REGISTER_EDITOR:
			switch (item_idx)
			{
				case 0:
				  sprintf((char *) (info_ptr->item_name_ptr), "REG Addr.");
				  info_ptr->item_value=0;
				  info_ptr->is_true_false=KAL_FALSE;
				  info_ptr->is_read_only=KAL_FALSE;
				  info_ptr->is_need_restart=KAL_FALSE;
				  info_ptr->min=0;
				  info_ptr->max=0xFF;
				break;
				case 1:
				  sprintf((char *) (info_ptr->item_name_ptr), "REG Value");
				  info_ptr->item_value=0;
				  info_ptr->is_true_false=KAL_FALSE;
				  info_ptr->is_read_only=KAL_FALSE;
				  info_ptr->is_need_restart=KAL_FALSE;
				  info_ptr->min=0;
				  info_ptr->max=0xFF;
				break;
				default:
				   ASSERT(0);		
			}
		break;
		default:
			ASSERT(0); 
	    #endif
	}
}

kal_bool OV7660_set_sensor_item_info(kal_uint16 group_idx, kal_uint16 item_idx, kal_int32 item_value)
{
   kal_uint8 temp_reg;
   kal_uint16 temp_gain;
   
   switch (group_idx)
	{
        #if (! defined(DRV_ISP_6238_SERIES))
		case OV7660_AWB_GAIN:
			switch (item_idx)
			{
				case 0:
				  camera_para.SENSOR.reg[OV7660_AWB_GAIN_R_INDEX].para = item_value;
				  OV7660_write_reg(camera_para.SENSOR.reg[OV7660_AWB_GAIN_R_INDEX].addr,item_value);
				break;
				case 1:
				  camera_para.SENSOR.reg[OV7660_AWB_GAIN_B_INDEX].para = item_value;
				  OV7660_write_reg(camera_para.SENSOR.reg[OV7660_AWB_GAIN_B_INDEX].addr,item_value);
				break; 
				default:
				   ASSERT(0);
			}			
		break;
		case OV7660_PRE_GAIN:
			switch (item_idx)
			{
				case 0:
				  temp_reg = OV7660_read_reg(camera_para.SENSOR.cct[OV7660_PRE_GAIN_R_INDEX].addr);
				  temp_reg &= ~0x30;
				  
				  if(item_value>=1000 && item_value<=1125)
				      temp_reg |= 0x00;
				  else if(item_value>1125 && item_value<=1375)
				      temp_reg |= 0x10;
				  else if(item_value>1375 && item_value<=1625)
				      temp_reg |= 0x20;
				  else if(item_value>1625 && item_value<=1875)
				      temp_reg |= 0x30;
				  else
				  		return KAL_FALSE;
				  
				  camera_para.SENSOR.cct[OV7660_PRE_GAIN_R_INDEX].para = temp_reg;
				  OV7660_write_reg(camera_para.SENSOR.cct[OV7660_PRE_GAIN_R_INDEX].addr,temp_reg);
				break;
				case 1:
				  temp_reg = OV7660_read_reg(camera_para.SENSOR.cct[OV7660_PRE_GAIN_B_INDEX].addr);
				  temp_reg &= ~0xC0;
				  
				  if(item_value>=1000 && item_value<=1125)
				      temp_reg |= 0x00;
				  else if(item_value>1125 && item_value<=1375)
				      temp_reg |= 0x40;
				  else if(item_value>1375 && item_value<=1625)
				      temp_reg |= 0x80;
				  else if(item_value>1625 && item_value<=1875)
				      temp_reg |= 0xC0;
				  else
				  		return KAL_FALSE;
				  		
				  camera_para.SENSOR.cct[OV7660_PRE_GAIN_B_INDEX].para = temp_reg;
				  OV7660_write_reg(camera_para.SENSOR.cct[OV7660_PRE_GAIN_B_INDEX].addr,temp_reg);
				break;
				case 2:
				  temp_gain = (item_value*BASEGAIN)/1000;
				
				  if(temp_gain>=1*BASEGAIN && temp_gain<2*BASEGAIN)
				  {
				      ov7660_sensor_global_gain=temp_gain&(~0x3);
				      temp_reg=(ov7660_sensor_global_gain-1*BASEGAIN)/4;
				  }
				  else if(temp_gain>=2*BASEGAIN && temp_gain<4*BASEGAIN)
				  {
				     ov7660_sensor_global_gain=temp_gain&(~0x7);
				     temp_reg=0x10;
				     temp_reg|=(ov7660_sensor_global_gain-2*BASEGAIN)/8;
				  }
				  else if(temp_gain>=4*BASEGAIN && temp_gain<8*BASEGAIN)
				  {
				      ov7660_sensor_global_gain=temp_gain&(~0xF);
				      temp_reg=0x30;
				      temp_reg|=(ov7660_sensor_global_gain-4*BASEGAIN)/16;
				  }
				  else if(temp_gain>=8*BASEGAIN && temp_gain<16*BASEGAIN)
				  {
				      ov7660_sensor_global_gain=temp_gain&(~0x1F);
				      temp_reg=0x70;
				      temp_reg|=(ov7660_sensor_global_gain-8*BASEGAIN)/32;
				  }
				  else if(temp_gain>=16*BASEGAIN)
				  {
				      ov7660_sensor_global_gain=temp_gain&(~0x3F);
				      temp_reg=0xF0;
				      temp_reg|=(ov7660_sensor_global_gain-16*BASEGAIN)/64;
				  }
				  else
				      return KAL_FALSE;				  		
				  		
				  camera_para.SENSOR.cct[OV7660_GLOBAL_GAIN_INDEX].para = temp_reg;
				  OV7660_write_reg(camera_para.SENSOR.cct[OV7660_GLOBAL_GAIN_INDEX].addr,temp_reg);
				  break;
				default:
				   ASSERT(0);	
			}
		break;
		case OV7660_SENSOR_DBLC:
			switch (item_idx)
			{
				case 0:
				  if(item_value==1)
				  {
				      temp_reg = OV7660_read_reg(camera_para.SENSOR.reg[OV7660_SENSOR_DBLC_INDEX].addr);
				      temp_reg |= 0x10;
				      camera_para.SENSOR.reg[OV7660_SENSOR_DBLC_INDEX].para = temp_reg;
				      OV7660_write_reg(camera_para.SENSOR.reg[OV7660_SENSOR_DBLC_INDEX].addr,temp_reg);
				  }
				  else
				  {
				      temp_reg = OV7660_read_reg(camera_para.SENSOR.reg[OV7660_SENSOR_DBLC_INDEX].addr);
				      temp_reg &= ~0x10;
				      camera_para.SENSOR.reg[OV7660_SENSOR_DBLC_INDEX].para = temp_reg;
				      OV7660_write_reg(camera_para.SENSOR.reg[OV7660_SENSOR_DBLC_INDEX].addr,temp_reg);
				  }
				break;
				default:
				   ASSERT(0);
			}
		break;
		case OV7660_GAMMA_ENABLE:
			switch (item_idx)
			{
				case 0:
				  temp_reg = OV7660_read_reg(camera_para.SENSOR.reg[OV7660_GAMMA_ENABLE_INDEX].addr);
				  temp_reg &= ~0xC0;
				  if(item_value==1)
				  {
				      temp_reg |= 0x80; 
				      camera_para.SENSOR.reg[OV7660_GAMMA_ENABLE_INDEX].para = temp_reg;
				  }
				  else
				  {
				      temp_reg &= ~0x80; 
				      camera_para.SENSOR.reg[OV7660_GAMMA_ENABLE_INDEX].para = temp_reg;
				  }
				  OV7660_write_reg(camera_para.SENSOR.reg[OV7660_GAMMA_ENABLE_INDEX].addr,temp_reg);
				break;
				default:
				   ASSERT(0);
			}
		break;
		case OV7660_CMMCLK_CURRENT:
			switch (item_idx)
			{
				case 0:
				  if(item_value==2)
				  {
				      camera_para.SENSOR.reg[OV7660_CMMCLK_CURRENT_INDEX].para = ISP_DRIVING_2MA;
				      set_isp_driving_current(ISP_DRIVING_2MA);
				  }
				  else if(item_value==3 || item_value==4)
				  {
				      camera_para.SENSOR.reg[OV7660_CMMCLK_CURRENT_INDEX].para = ISP_DRIVING_4MA;
				      set_isp_driving_current(ISP_DRIVING_4MA);
				  }
				  else if(item_value==5 || item_value==6)
				  {
				      camera_para.SENSOR.reg[OV7660_CMMCLK_CURRENT_INDEX].para = ISP_DRIVING_6MA;
				      set_isp_driving_current(ISP_DRIVING_6MA);
				  }
				  else
				  {
				      camera_para.SENSOR.reg[OV7660_CMMCLK_CURRENT_INDEX].para = ISP_DRIVING_8MA;
				      set_isp_driving_current(ISP_DRIVING_8MA);
				  }
				break;
				default:
				   ASSERT(0);
			}
		break;
		case OV7660_FRAME_RATE_LIMITATION:
			switch (item_idx)
			{
				   ASSERT(0);	
			}
		break;
		case OV7660_REGISTER_EDITOR:
			switch (item_idx)
			{
				case 0:
				  OV7660_FAC_SENSOR_REG=item_value;
				break;
				case 1:
				  OV7660_write_reg(OV7660_FAC_SENSOR_REG,item_value);
				break;
				default:
				   ASSERT(0);		
			}
		break;
		default:
		   ASSERT(0);
        #else
		case PRE_GAIN:
			switch (item_idx)
			{
				case 0:
				  temp_reg = OV7660_read_reg(camera_para.SENSOR.cct[PRE_GAIN_R_INDEX].addr);
				  temp_reg &= ~0x30;
				  
				  if(item_value>=1000 && item_value<=1125)
				      temp_reg |= 0x00;
				  else if(item_value>1125 && item_value<=1375)
				      temp_reg |= 0x10;
				  else if(item_value>1375 && item_value<=1625)
				      temp_reg |= 0x20;
				  else if(item_value>1625 && item_value<=1875)
				      temp_reg |= 0x30;
				  else
				  		return KAL_FALSE;
				  
				  camera_para.SENSOR.cct[PRE_GAIN_R_INDEX].para = temp_reg;
				  OV7660_write_reg(camera_para.SENSOR.cct[PRE_GAIN_R_INDEX].addr,temp_reg);
				break;
				case 1:
				  temp_reg = OV7660_read_reg(camera_para.SENSOR.cct[PRE_GAIN_B_INDEX].addr);
				  temp_reg &= ~0xC0;
				  
				  if(item_value>=1000 && item_value<=1125)
				      temp_reg |= 0x00;
				  else if(item_value>1125 && item_value<=1375)
				      temp_reg |= 0x40;
				  else if(item_value>1375 && item_value<=1625)
				      temp_reg |= 0x80;
				  else if(item_value>1625 && item_value<=1875)
				      temp_reg |= 0xC0;
				  else
				  		return KAL_FALSE;
				  		
				  camera_para.SENSOR.cct[PRE_GAIN_B_INDEX].para = temp_reg;
				  OV7660_write_reg(camera_para.SENSOR.cct[PRE_GAIN_B_INDEX].addr,temp_reg);
				break;
				case 2:
				  temp_gain = (item_value*BASEGAIN)/1000;
				
				  if(temp_gain>=1*BASEGAIN && temp_gain<2*BASEGAIN)
				  {
				      ov7660_sensor_global_gain=temp_gain&(~0x3);
				      temp_reg=(ov7660_sensor_global_gain-1*BASEGAIN)/4;
				  }
				  else if(temp_gain>=2*BASEGAIN && temp_gain<4*BASEGAIN)
				  {
				     ov7660_sensor_global_gain=temp_gain&(~0x7);
				     temp_reg=0x10;
				     temp_reg|=(ov7660_sensor_global_gain-2*BASEGAIN)/8;
				  }
				  else if(temp_gain>=4*BASEGAIN && temp_gain<8*BASEGAIN)
				  {
				      ov7660_sensor_global_gain=temp_gain&(~0xF);
				      temp_reg=0x30;
				      temp_reg|=(ov7660_sensor_global_gain-4*BASEGAIN)/16;
				  }
				  else if(temp_gain>=8*BASEGAIN && temp_gain<16*BASEGAIN)
				  {
				      ov7660_sensor_global_gain=temp_gain&(~0x1F);
				      temp_reg=0x70;
				      temp_reg|=(ov7660_sensor_global_gain-8*BASEGAIN)/32;
				  }
				  else if(temp_gain>=16*BASEGAIN)
				  {
				      ov7660_sensor_global_gain=temp_gain&(~0x3F);
				      temp_reg=0xF0;
				      temp_reg|=(ov7660_sensor_global_gain-16*BASEGAIN)/64;
				  }
				  else
				      return KAL_FALSE;				  		
				  		
				  camera_para.SENSOR.cct[SENSOR_BASEGAIN].para = temp_reg;
				  OV7660_write_reg(camera_para.SENSOR.cct[SENSOR_BASEGAIN].addr,temp_reg);
				  break;
	
				default:
				   ASSERT(0);	
			}
		break;
		case CMMCLK_CURRENT:
			switch (item_idx)
			{
				case 0:
				  if(item_value==2)
				  {
				      camera_para.SENSOR.reg[CMMCLK_CURRENT_INDEX].para = ISP_DRIVING_2MA;
				      set_isp_driving_current(ISP_DRIVING_2MA);
				  }
				  else if(item_value==3 || item_value==4)
				  {
				      camera_para.SENSOR.reg[CMMCLK_CURRENT_INDEX].para = ISP_DRIVING_4MA;
				      set_isp_driving_current(ISP_DRIVING_4MA);
				  }
				  else if(item_value==5 || item_value==6)
				  {
				      camera_para.SENSOR.reg[CMMCLK_CURRENT_INDEX].para = ISP_DRIVING_6MA;
				      set_isp_driving_current(ISP_DRIVING_6MA);
				  }
				  else
				  {
				      camera_para.SENSOR.reg[CMMCLK_CURRENT_INDEX].para = ISP_DRIVING_8MA;
				      set_isp_driving_current(ISP_DRIVING_8MA);
				  }
				break;
				default:
				   ASSERT(0);
			}
		break;
		case FRAME_RATE_LIMITATION:
			switch (item_idx)
			{
				   ASSERT(0);	
			}
		break;
		case REGISTER_EDITOR:
			switch (item_idx)
			{
				case 0:
				  OV7660_FAC_SENSOR_REG=item_value;
				break;
				case 1:
				  OV7660_write_reg(OV7660_FAC_SENSOR_REG,item_value);
				break;
				default:
				   ASSERT(0);		
			}
		break;
		default:
		   ASSERT(0);        
        #endif
	}
	
	return KAL_TRUE;
}

void OV7660_get_sensor_prefix_name(kal_char* buf){
	strcpy(buf, "OV7660");
}

void OV7660_cct_global_variable_init(void){
	g_CCT_MainSensor=OV7660_g_CCT_MainSensor;
	g_CCT_FirstGrabColor=OV7660_g_CCT_FirstGrabColor;	
}

kal_uint16 OV7660_get_max_exposure_lines(void){
	return OV7660_MAX_EXPOSURE_LINES;	
}

void OV7660_set_max_exposure_lines(kal_uint32 shutter_lines){
	OV7660_MAX_EXPOSURE_LINES = shutter_lines;	
}

kal_uint16 OV7660_get_min_exposure_lines(void){
	return OV7660_MIN_EXPOSURE_LINES;	
}

#if (defined(DRV_ISP_6238_SERIES))
void  OV7660_dispatch_camera_info(void) {
       kal_mem_cpy(&dsc_support_info, &OV7660_dsc_support_info, sizeof(camcorder_info_struct));	
}
#endif

kal_uint32 OV7660_get_valid_camera_type(void) {
	
	#if(defined(OV7660_RAW_MAIN))
		return  IMAGE_SENSOR_MAIN;			
	#elif(defined(OV7660_RAW_SUB))
		return  IMAGE_SENSOR_SUB;			
	#elif(defined(OV7660_RAW_BAK1))
		return  IMAGE_SENSOR_BAK1;			
	#elif(defined(OV7660_RAW_SUB_BAK1))
		return  IMAGE_SENSOR_SUB_BAK1;
	#endif									
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -