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

📄 sensor_mega_ov9650.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 3 页
字号:

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 + -