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

📄 image_sensor_ov7660.c

📁 ov7670
💻 C
📖 第 1 页 / 共 5 页
字号:
	}
	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 + -