📄 image_sensor_ov7660.c
字号:
}
for(i=0; i<FACTORY_END_ADDR; i++)
{
OV7660_write_reg(camera_para.SENSOR.cct[i].addr, camera_para.SENSOR.cct[i].para);
}
#else
for(i=OV7660_FACTORY_START_ADDR; 0xFFFFFFFF!=camera_para.SENSOR.reg[i].addr; i++)
{
OV7660_write_reg(camera_para.SENSOR.reg[i].addr, camera_para.SENSOR.reg[i].para);
}
for(i=0; i<OV7660_CCT_END_ADDR; i++)
{
OV7660_write_reg(camera_para.SENSOR.cct[i].addr, camera_para.SENSOR.cct[i].para);
}
#endif
}
// update camera_para from sensor register
void OV7660_sensor_to_camera_para(void)
{
kal_uint32 i;
#ifdef DRV_ISP_6238_SERIES //FACTORY_START_ADDR is for 3X common setting
for(i=0; 0xFFFFFFFF!=camera_para.SENSOR.reg[i].addr; i++)
{
camera_para.SENSOR.reg[i].para = OV7660_read_reg(camera_para.SENSOR.reg[i].addr);
}
for(i=FACTORY_START_ADDR; 0xFFFFFFFF!=camera_para.SENSOR.reg[i].addr; i++)
{
camera_para.SENSOR.reg[i].para = OV7660_read_reg(camera_para.SENSOR.reg[i].addr);
}
for(i=FACTORY_START_ADDR; i<FACTORY_END_ADDR; i++)
{
camera_para.SENSOR.cct[i].para = OV7660_read_reg(camera_para.SENSOR.cct[i].addr);
}
#else
for(i=0; 0xFFFFFFFF!=camera_para.SENSOR.reg[i].addr; i++)
{
camera_para.SENSOR.reg[i].para = OV7660_read_reg(camera_para.SENSOR.reg[i].addr);
}
for(i=OV7660_FACTORY_START_ADDR; 0xFFFFFFFF!=camera_para.SENSOR.reg[i].addr; i++)
{
camera_para.SENSOR.reg[i].para = OV7660_read_reg(camera_para.SENSOR.reg[i].addr);
}
for(i=0; i<OV7660_CCT_END_ADDR; i++)
{
camera_para.SENSOR.cct[i].para = OV7660_read_reg(camera_para.SENSOR.cct[i].addr);
}
#endif
}
//------------------------Engineer mode---------------------------------
void OV7660_get_sensor_group_count(kal_int32* sensor_count_ptr)
{
#if (!defined(DRV_ISP_6238_SERIES))
*sensor_count_ptr=OV7660_GROUP_TOTAL_NUMS;
#else
*sensor_count_ptr=GROUP_TOTAL_NUMS;
#endif
return;
}
void OV7660_get_sensor_group_info(kal_uint16 group_idx, kal_int8* group_name_ptr, kal_int32* item_count_ptr)
{
switch (group_idx)
{
#if(! defined(DRV_ISP_6238_SERIES))
case OV7660_AWB_GAIN:
sprintf((char *) group_name_ptr, "AWB Gain");
*item_count_ptr = 2;
break;
case OV7660_PRE_GAIN:
sprintf((char *) group_name_ptr, "CCT");
*item_count_ptr = 3;
break;
case OV7660_SENSOR_DBLC:
sprintf((char *) group_name_ptr, "DBLC");
*item_count_ptr = 1;
break;
case OV7660_GAMMA_ENABLE:
sprintf((char *) group_name_ptr, "Gamma");
*item_count_ptr = 1;
break;
case OV7660_CMMCLK_CURRENT:
sprintf((char *) group_name_ptr, "CMMCLK Current");
*item_count_ptr = 1;
break;
case OV7660_FRAME_RATE_LIMITATION:
sprintf((char *) group_name_ptr, "Frame Rate Limitation");
*item_count_ptr = 2;
break;
case OV7660_REGISTER_EDITOR:
sprintf((char *) group_name_ptr, "Register Editor");
*item_count_ptr = 2;
break;
default:
ASSERT(0);
#else
case PRE_GAIN:
sprintf((char *) group_name_ptr, "CCT");
*item_count_ptr = 3;
break;
case CMMCLK_CURRENT:
sprintf((char *) group_name_ptr, "CMMCLK Current");
*item_count_ptr = 1;
break;
case FRAME_RATE_LIMITATION:
sprintf((char *) group_name_ptr, "Frame Rate Limitation");
*item_count_ptr = 2;
break;
case REGISTER_EDITOR:
sprintf((char *) group_name_ptr, "Register Editor");
*item_count_ptr = 2;
break;
default:
ASSERT(0);
#endif
}
}
void OV7660_get_sensor_item_info(kal_uint16 group_idx,kal_uint16 item_idx, ENG_sensor_info* info_ptr)
{
kal_uint8 temp_reg;
switch (group_idx)
{
#if(! defined(DRV_ISP_6238_SERIES))
case OV7660_AWB_GAIN:
switch (item_idx)
{
case 0:
sprintf((char *) (info_ptr->item_name_ptr), "AWB R Gain");
info_ptr->item_value=OV7660_read_reg(camera_para.SENSOR.reg[OV7660_AWB_GAIN_R_INDEX].addr);
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), "AWB B Gain");
info_ptr->item_value=OV7660_read_reg(camera_para.SENSOR.reg[OV7660_AWB_GAIN_B_INDEX].addr);
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;
case OV7660_PRE_GAIN:
switch (item_idx)
{
case 0:
sprintf((char *) (info_ptr->item_name_ptr), "Pregain-R");
temp_reg = OV7660_read_reg(camera_para.SENSOR.cct[OV7660_PRE_GAIN_R_INDEX].addr);
temp_reg &= 0x30;
temp_reg >>= 4;
if(temp_reg==0)
info_ptr->item_value=1000;
else if(temp_reg==1)
info_ptr->item_value=1250;
else if(temp_reg==2)
info_ptr->item_value=1500;
else if(temp_reg==3)
info_ptr->item_value=1750;
info_ptr->is_true_false=KAL_FALSE;
info_ptr->is_read_only=KAL_FALSE;
info_ptr->is_need_restart=KAL_FALSE;
info_ptr->min=1000;
info_ptr->max=1875;
break;
case 1:
sprintf((char *) (info_ptr->item_name_ptr), "Pregain-B");
temp_reg = OV7660_read_reg(camera_para.SENSOR.cct[OV7660_PRE_GAIN_B_INDEX].addr);
temp_reg &= 0xC0;
temp_reg >>= 6;
if(temp_reg==0)
info_ptr->item_value=1000;
else if(temp_reg==1)
info_ptr->item_value=1250;
else if(temp_reg==2)
info_ptr->item_value=1500;
else if(temp_reg==3)
info_ptr->item_value=1750;
info_ptr->is_true_false=KAL_FALSE;
info_ptr->is_read_only=KAL_FALSE;
info_ptr->is_need_restart=KAL_FALSE;
info_ptr->min=1000;
info_ptr->max=1875;
break;
case 2:
sprintf((char *) (info_ptr->item_name_ptr), "SENSOR_BASEGAIN");
temp_reg = ov7660_read_gain();
info_ptr->item_value=(temp_reg*1000)/BASEGAIN;
info_ptr->is_true_false=KAL_FALSE;
info_ptr->is_read_only=KAL_FALSE;
info_ptr->is_need_restart=KAL_FALSE;
info_ptr->min=1000;
info_ptr->max=16000;
break;
default:
ASSERT(0);
}
break;
case OV7660_SENSOR_DBLC:
switch (item_idx)
{
case 0:
sprintf((char *) (info_ptr->item_name_ptr), "DBLC Enable");
temp_reg = OV7660_read_reg(camera_para.SENSOR.reg[OV7660_SENSOR_DBLC_INDEX].addr);
if(temp_reg&0x10)
{
info_ptr->item_value=1;
}
else
{
info_ptr->item_value=0;
}
info_ptr->is_true_false=KAL_TRUE;
info_ptr->is_read_only=KAL_FALSE;
info_ptr->is_need_restart=KAL_FALSE;
info_ptr->min=0;
info_ptr->max=1;
break;
default:
ASSERT(0);
}
break;
case OV7660_GAMMA_ENABLE:
switch (item_idx)
{
case 0:
sprintf((char *) (info_ptr->item_name_ptr), "GAMMA_ENABLE");
temp_reg = OV7660_read_reg(camera_para.SENSOR.reg[OV7660_GAMMA_ENABLE_INDEX].addr);
if(temp_reg&0xC0)
{
info_ptr->item_value=1;
}
else
{
info_ptr->item_value=0;
}
info_ptr->is_true_false=KAL_TRUE;
info_ptr->is_read_only=KAL_FALSE;
info_ptr->is_need_restart=KAL_FALSE;
info_ptr->min=0;
info_ptr->max=1;
break;
default:
ASSERT(0);
}
break;
case OV7660_CMMCLK_CURRENT:
switch (item_idx)
{
case 0:
sprintf((char *) (info_ptr->item_name_ptr), "Drv Cur[2,4,6,8]mA");
temp_reg=camera_para.SENSOR.reg[OV7660_CMMCLK_CURRENT_INDEX].para;
if(temp_reg==ISP_DRIVING_2MA)
{
info_ptr->item_value=2;
}
else if(temp_reg==ISP_DRIVING_4MA)
{
info_ptr->item_value=4;
}
else if(temp_reg==ISP_DRIVING_6MA)
{
info_ptr->item_value=6;
}
else if(temp_reg==ISP_DRIVING_8MA)
{
info_ptr->item_value=8;
}
info_ptr->is_true_false=KAL_FALSE;
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 OV7660_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 OV7660_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);
#else
case PRE_GAIN:
switch (item_idx)
{
case 0:
sprintf((char *) (info_ptr->item_name_ptr), "Pregain-R");
temp_reg = OV7660_read_reg(camera_para.SENSOR.cct[PRE_GAIN_R_INDEX].addr);
temp_reg &= 0x30;
temp_reg >>= 4;
if(temp_reg==0)
info_ptr->item_value=1000;
else if(temp_reg==1)
info_ptr->item_value=1250;
else if(temp_reg==2)
info_ptr->item_value=1500;
else if(temp_reg==3)
info_ptr->item_value=1750;
info_ptr->is_true_false=KAL_FALSE;
info_ptr->is_read_only=KAL_FALSE;
info_ptr->is_need_restart=KAL_FALSE;
info_ptr->min=1000;
info_ptr->max=1875;
break;
case 1:
sprintf((char *) (info_ptr->item_name_ptr), "Pregain-B");
temp_reg = OV7660_read_reg(camera_para.SENSOR.cct[PRE_GAIN_B_INDEX].addr);
temp_reg &= 0xC0;
temp_reg >>= 6;
if(temp_reg==0)
info_ptr->item_value=1000;
else if(temp_reg==1)
info_ptr->item_value=1250;
else if(temp_reg==2)
info_ptr->item_value=1500;
else if(temp_reg==3)
info_ptr->item_value=1750;
info_ptr->is_true_false=KAL_FALSE;
info_ptr->is_read_only=KAL_FALSE;
info_ptr->is_need_restart=KAL_FALSE;
info_ptr->min=1000;
info_ptr->max=1875;
break;
case 2:
sprintf((char *) (info_ptr->item_name_ptr), "SENSOR_BASEGAIN");
temp_reg = ov7660_read_gain();
info_ptr->item_value=(temp_reg*1000)/BASEGAIN;
info_ptr->is_true_false=KAL_FALSE;
info_ptr->is_read_only=KAL_FALSE;
info_ptr->is_need_restart=KAL_FALSE;
info_ptr->min=1000;
info_ptr->max=16000;
break;
default:
ASSERT(0);
}
break;
case CMMCLK_CURRENT:
switch (item_idx)
{
case 0:
sprintf((char *) (info_ptr->item_name_ptr), "Drv Cur[2,4,6,8]mA");
temp_reg=camera_para.SENSOR.reg[CMMCLK_CURRENT_INDEX].para;
if(temp_reg==ISP_DRIVING_2MA)
{
info_ptr->item_value=2;
}
else if(temp_reg==ISP_DRIVING_4MA)
{
info_ptr->item_value=4;
}
else if(temp_reg==ISP_DRIVING_6MA)
{
info_ptr->item_value=6;
}
else if(temp_reg==ISP_DRIVING_8MA)
{
info_ptr->item_value=8;
}
info_ptr->is_true_false=KAL_FALSE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -