📄 sensor_mega_ov9650.c
字号:
UINT8 Saturation1[][2]=
{
{0x4f, 0x24},
{0x50, 0x25},
{0x51, 0x02},
{0x52, 0x0F},
{0x53, 0x1F},
{0x54, 0x2D}
};
UINT8 Saturation2[][2]=
{
{0x4f, 0x2F},
{0x50, 0x32},
{0x51, 0x02},
{0x52, 0x13},
{0x53, 0x29},
{0x54, 0x3C}
};
UINT8 Saturation3[][2]=
{
{0x4f, 0x3B},
{0x50, 0x3E},
{0x51, 0x03},
{0x52, 0x13},
{0x53, 0x29},
{0x54, 0x3C}
};
UINT8 Saturation4[][2]=
{
{0x4f, 0x47},
{0x50, 0x4A},
{0x51, 0x03},
{0x52, 0x1D},
{0x53, 0x3E},
{0x54, 0x5B}
};
UINT8 Saturation5[][2]= //LingZJUD the same as Saturation4 temp
{
{0x4f, 0x47},
{0x50, 0x4A},
{0x51, 0x03},
{0x52, 0x1D},
{0x53, 0x3E},
{0x54, 0x5B}
};
UINT8 Contrast0[][2]=
{
{0x6C, 0x20},
{0x6D, 0x50},
{0x6E, 0x80},
{0x6F, 0xC0},
{0x70, 0xC0},
{0x71, 0xA0},
{0x72, 0x90},
{0x73, 0x78},
{0x74, 0x78},
{0x75, 0x78},
{0x76, 0x40},
{0x77, 0x20},
{0x78, 0x20},
{0x79, 0x20},
{0x7A, 0x14},
{0x7B, 0x0E},
{0x7C, 0x02},
{0x7D, 0x07},
{0x7E, 0x17},
{0x7F, 0x47},
{0x80, 0x5F},
{0x81, 0x73},
{0x82, 0x85},
{0x83, 0x94},
{0x84, 0xA3},
{0x85, 0xB2},
{0x86, 0xC2},
{0x87, 0xCA},
{0x88, 0xDA},
{0x89, 0xEA},
{0x8A, 0xF4}
};
UINT8 Contrast1[][2]=
{
{0x6C, 0x20},
{0x6D, 0x50},
{0x6E, 0xc0},
{0x6F, 0xa8},
{0x70, 0x88},
{0x71, 0x80},
{0x72, 0x78},
{0x73, 0x70},
{0x74, 0x70},
{0x75, 0x58},
{0x76, 0x40},
{0x77, 0x30},
{0x78, 0x28},
{0x79, 0x20},
{0x7A, 0x1e},
{0x7B, 0x17},
{0x7C, 0x02},
{0x7D, 0x07},
{0x7E, 0x1f},
{0x7F, 0x49},
{0x80, 0x5a},
{0x81, 0x6a},
{0x82, 0x79},
{0x83, 0x87},
{0x84, 0x94},
{0x85, 0x9f},
{0x86, 0xaf},
{0x87, 0xbb},
{0x88, 0xcf},
{0x89, 0xdf},
{0x8A, 0xee}
};
UINT8 Contrast2[][2]=
{
{0x7C, 0x02},
{0x7D, 0x06},
{0x7E, 0x16},
{0x7F, 0x3A},
{0x80, 0x4C},
{0x81, 0x5C},
{0x82, 0x6A},
{0x83, 0x78},
{0x84, 0x84},
{0x85, 0x8E},
{0x86, 0x9E},
{0x87, 0xAE},
{0x88, 0xC6},
{0x89, 0xDA},
{0x8A, 0xEA},
{0x6C, 0x20},
{0x6D, 0x40},
{0x6E, 0x80},
{0x6F, 0x90},
{0x70, 0x90},
{0x71, 0x80},
{0x72, 0x70},
{0x73, 0x70},
{0x74, 0x60},
{0x75, 0x50},
{0x76, 0x40},
{0x77, 0x40},
{0x78, 0x30},
{0x79, 0x28},
{0x7A, 0x20},
{0x7B, 0x1c}
};
UINT8 Contrast3[][2]=
{
{0x7C, 0x04},
{0x7D, 0x07},
{0x7E, 0x10},
{0x7F, 0x28},
{0x80, 0x36},
{0x81, 0x44},
{0x82, 0x52},
{0x83, 0x60},
{0x84, 0x6C},
{0x85, 0x78},
{0x86, 0x8C},
{0x87, 0x9E},
{0x88, 0xBB},
{0x89, 0xD2},
{0x8A, 0xE6},
{0x6C, 0x40},
{0x6D, 0x30},
{0x6E, 0x48},
{0x6F, 0x60},
{0x70, 0x70},
{0x71, 0x70},
{0x72, 0x70},
{0x73, 0x70},
{0x74, 0x60},
{0x75, 0x60},
{0x76, 0x50},
{0x77, 0x48},
{0x78, 0x3A},
{0x79, 0x2E},
{0x7A, 0x28},
{0x7B, 0x22}
};
UINT8 Contrast4[][2]=
{
{0x7C, 0x04},
{0x7D, 0x09},
{0x7E, 0x13},
{0x7F, 0x29},
{0x80, 0x35},
{0x81, 0x41},
{0x82, 0x4D},
{0x83, 0x59},
{0x84, 0x64},
{0x85, 0x6F},
{0x86, 0x85},
{0x87, 0x97},
{0x88, 0xB7},
{0x89, 0xCF},
{0x8A, 0xE3},
{0x6C, 0x40},
{0x6D, 0x50},
{0x6E, 0x50},
{0x6F, 0x58},
{0x70, 0x60},
{0x71, 0x60},
{0x72, 0x60},
{0x73, 0x60},
{0x74, 0x58},
{0x75, 0x58},
{0x76, 0x58},
{0x77, 0x48},
{0x78, 0x40},
{0x79, 0x30},
{0x7A, 0x28},
{0x7B, 0x26}
};
UINT8 Contrast5[][2]=
{
{0x7c, 0x05},
{0x7d, 0x0b},
{0x7e, 0x16},
{0x7f, 0x2c},
{0x80, 0x37},
{0x81, 0x41},
{0x82, 0x4b},
{0x83, 0x55},
{0x84, 0x5f},
{0x85, 0x69},
{0x86, 0x7c},
{0x87, 0x8f},
{0x88, 0xb1},
{0x89, 0xcf},
{0x8a, 0xe5},
{0x6c, 0x50},
{0x6d, 0x60},
{0x6e, 0x58},
{0x6f, 0x58},
{0x70, 0x58},
{0x71, 0x50},
{0x72, 0x50},
{0x73, 0x50},
{0x74, 0x50},
{0x75, 0x50},
{0x76, 0x4c},
{0x77, 0x4c},
{0x78, 0x44},
{0x79, 0x3c},
{0x7a, 0x2c},
{0x7b, 0x23}
};
UINT8 Contrast6[][2]=
{
{0x7c, 0x04},
{0x7d, 0x09},
{0x7e, 0x14},
{0x7f, 0x28},
{0x80, 0x32},
{0x81, 0x3C},
{0x82, 0x46},
{0x83, 0x4F},
{0x84, 0x58},
{0x85, 0x61},
{0x86, 0x73},
{0x87, 0x85},
{0x88, 0xA5},
{0x89, 0xc5},
{0x8a, 0xDD},
{0x6c, 0x40},
{0x6d, 0x50},
{0x6e, 0x58},
{0x6f, 0x50},
{0x70, 0x50},
{0x71, 0x50},
{0x72, 0x50},
{0x73, 0x48},
{0x74, 0x48},
{0x75, 0x48},
{0x76, 0x48},
{0x77, 0x48},
{0x78, 0x40},
{0x79, 0x40},
{0x7a, 0x30},
{0x7b, 0x2E}
};
UINT8 ZoomVgaLevel1[][2] =
{
{0x17, 0x26},
{0x18, 0xc6},
{0x19, 0x1},
{0x1a, 0x3d},
{0x03, 0x0},
{0x32, 0xad}
};
UINT8 ZoomVgaLevel2[][2] =
{
{0x17, 0x4E},
{0x18, 0x9E},
{0x19, 0x10},
{0x1a, 0x2e},
{0x03, 0x0},
{0x32, 0x2d}
};
UINT8 ZoomVgaLevel3[][2] =
{
{0x17, 0x62},
{0x18, 0x8A},
{0x19, 0x17},
{0x1a, 0x26},
{0x03, 0x24},
{0x32, 0x2d}
};
UINT8 ZoomVgaLevel4[][2] =
{
{0x17, 0x6C},
{0x18, 0x80},
{0x19, 0x1B},
{0x1a, 0x22},
{0x03, 0x32},
{0x32, 0x2d}
};
/**************************************************************************
* 函数描述: 统一封装OV9650的写控制接口
* 入口参数: data: 地址和数据序列 len data的长度(包括地址和数据)
* 出口参数: 无
* 返回值: 是否写成功
***************************************************************************/
int OV9650_Write( UINT8 * data, INT16U len )
{
BOOLEAN bRight;
INT16U i, nRegCount;
UINT8 addr, value, temp,i2c_error_cnt;
nRegCount = len>>1;
for (i = 0; i < nRegCount; i++)
{
addr = *data++;
value = *data++;
bRight = FALSE;
i2c_error_cnt = 0;
I2C_Deinit( );
while (!bRight)
{
I2C_Init(0x60,I2C_Sensor_Speed);
bRight = I2C_Write( addr,&value,1,NormalMode);
if (bRight == FALSE)
i2c_error_cnt++;
I2C_Deinit( );
if (i2c_error_cnt > 3)
{
bRight = TRUE;
}
}
#if I2C_Check
bRight = FALSE;
while (!bRight)
{
I2C_Init(0x60,I2C_Sensor_Speed);
bRight = I2C_Read( addr, &temp, 1, NormalMode );
I2C_Deinit( );
}
if ( (addr != 0x12) && (temp != value) )
{
return 1;
}
#endif
}
DelayMs_nops(100);
return (!bRight);
}
/**************************************************************************
* 函数描述: OV9650 sensor 的复位操作
* 入口参数: 无
* 出口参数: 无
* 返回值:
***************************************************************************/
int OV9650_Reset( void )
{
IOMUX_SetUart1Port(UART1_GPIO_TYPE);
GPIO_SetPinDirection(OV9650_PWRDN_PIN, GPIO_OUT); /* ov9650处于正常工作状态 */
GPIO_SetPinLevel(OV9650_PWRDN_PIN, GPIO_LOW);
GPIO_SetPinDirection(OV9650_RESET_PIN,GPIO_OUT);
GPIO_SetPinLevel(OV9650_RESET_PIN,GPIO_HIGH);
DelayMs_nops(300);
GPIO_SetPinLevel(OV9650_RESET_PIN,GPIO_LOW);
return 0;
}
int OV9650_PowerOn( void )
{
IOMUX_SetUart1Port(UART1_GPIO_TYPE);
GPIO_SetPinDirection(OV9650_PWRDN_PIN, GPIO_OUT); /* ov9650处于正常工作状态 */
GPIO_SetPinLevel(OV9650_PWRDN_PIN, GPIO_LOW);
return 0;
}
int OV9650_PowerDown( void )
{
IOMUX_SetUart1Port(UART1_GPIO_TYPE);
GPIO_SetPinDirection(OV9650_PWRDN_PIN, GPIO_OUT); /* ov9650处于关闭状态 */
GPIO_SetPinLevel(OV9650_PWRDN_PIN, GPIO_HIGH);
return 0;
}
/**************************************************************************
* 函数描述: OV9650 sensor 的初始化操作
* 入口参数: 无
* 出口参数: 无
* 返回值: 是否写成功
***************************************************************************/
int OV9650_Init( void )
{
return OV9650_Write( (UINT8 *)sensorData, sizeof(sensorData) );
}
/**************************************************************************
* 函数描述: 检查器件ID
* 入口参数: 无
* 出口参数: 无
* 返回值: 是否正确
***************************************************************************/
int OV9650_CheckID(void)
{
UINT8 id = 0;
I2C_Init(0x60,I2C_Sensor_Speed);
I2C_Read( 0x0A, &id, 1, NormalMode );
I2C_Deinit( );
if ( id != 0x96 )
return 1;
return 0;
}
/**************************************************************************
* 函数描述: Sensor 工作模式切换到 Mega
* 入口参数: 无
* 出口参数: 无
* 返回值: 是否正确
***************************************************************************/
int OV9650_Set_Mega(void)
{
return OV9650_Write( (UINT8 *)ChangeMegaData, sizeof(ChangeMegaData) );
}
/**************************************************************************
* 函数描述: Sensor 工作模式切换到VGA
* 入口参数: 无
* 出口参数: 无
* 返回值: 是否正确
***************************************************************************/
int OV9650_Set_VGA(void)
{
return OV9650_Write( (UINT8 *)ChangeVGAData, sizeof(ChangeVGAData) );
}
int OV9650_Set_CIF(void)
{
return OV9650_Write( (UINT8 *)ChangeCIFData, sizeof(ChangeCIFData) );
}
/**************************************************************************
* 函数描述: Sensor 工作模式切换到VGA
* 入口参数: 无
* 出口参数: 无
* 返回值: 是否正确
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -