📄 sensor_micron_mt9m112.c
字号:
#include "hw_include.h"
#if ( SENSOR_TYPE == SENSOR_MICRON_MT9M112 )
#define I2C_Check 0
#define I2C_Sensor_Speed 200
#define I2C_Address 0xBA
#define MI1320_RegSet 0
#define MI1320_RegBitSet (0x1<<8)
#define MI1320_DelayMs 0xFFFF
UINT16 MI1320_InitParamList[] =
{
0xf0, 0x0000,
0x35, 0x0022,
0x20, 0x0103, // mirror
0xf0, 0x0001,
0x06,0x700e,
0xf0, 0x0002,
0xdd,0x18e0, 0x24,0x5f20, 0x28,0xef02, 0x5f,0x4143, 0x02,0x00ee,
0x03,0x291a, 0x04,0x02a4, 0x09,0x0068, 0x0a,0x002a, 0x0b,0x0004,
0x0c,0x0093, 0x0d,0x0082, 0x0e,0x0040, 0x0f,0x005f, 0x10,0x004e,
0x11,0x005b, 0x15,0x00c9, 0x16,0x005e, 0x17,0x009d, 0x18,0x0006,
0x19,0x0089, 0x1a,0x0012, 0x1b,0x00a1, 0x1c,0x00e4, 0x1d,0x007a,
0x1e,0x0064, 0xf6, 0x005f,
0xf0, 0x0001,
0x06,0xf00e, 0x06,0x700e, 0x81, 0x0000, 0x82,0x0000, 0x83, 0x0000,
0x84,0x0000, 0x85,0x0000, 0x86, 0x0000, 0x87,0x0000, 0x88, 0x0000,
0x89,0x0000, 0x8a,0x0000, 0x8b, 0x0000, 0x8c,0x0000, 0x8d, 0x0000,
0x8e,0x0000, 0x8f,0x0000, 0x90, 0x0000, 0x91,0x0000, 0x92, 0x0000,
0x93,0x0000, 0x94,0x0000, 0x95, 0x0000, 0xb6,0x0000, 0xb7, 0x0000,
0xb8,0x0000, 0xb9,0x0000, 0xba, 0x0000, 0xbb,0x0000, 0xbc, 0x0000,
0xbd,0x0000, 0xbe,0x0000, 0xbf, 0x0000, 0xc0,0x0000, 0xc1, 0x0000,
0xc2,0x0000, 0xc3,0x0000, 0xc4,0x0000,
//输出窗口大小
0xA7, 320,
0xaa, 256,
//背光初始化
0xf0, 0x0002,
0x2f, 0x9100,
0x2e, 0x0c64,
/*
//BLANK 调节
0xf0, 0x0000,
0x05, 0x00C0, // HORZ_BLANK_B [1]
0x06, 0x0009, // VERT_BLANK_B [1]
0x07, 0x00C0, // HORZ_BLANK_A [1]
0x08, 0x0009, // VERT_BLANK_A [1]
*/
};
// mode
UINT16 MI1320_Effect_Normal[] =
{
0xf0, 0x0001,
0xe2, 0X7000,
};
UINT16 MI1320_Effect_Mono[] =
{
0xf0, 0x0001,
0xe2, 0X7001,
};
UINT16 MI1320_Effect_Sepia[] =
{
0xf0, 0x0001,
0xe2, 0X7002,
};
UINT16 MI1320_Effect_Negative[] =
{
0xf0, 0x0001,
0xe2, 0X7003,
};
UINT16 MI1320_Effect_Solar1[] =
{
0xf0, 0x0001,
0xe2, 0X7004,
};
UINT16 MI1320_Effect_Solar2[] =
{
0xf0, 0x0001,
0xe2, 0X7005,
};
//backlight
UINT16 MI1320_BackLight_0[] =
{
0xf0, 0x0002,
0x2f, 0x9100,
0x2e, 0x0c24,
};
UINT16 MI1320_BackLight_1[] =
{
0xf0, 0x0002,
0x2f, 0x9100,
0x2e, 0x0c64,
};
UINT16 MI1320_BackLight_2[] =
{
0xf0, 0x0002,
0x2f, 0x9100,
0x2e, 0x0ca4,
};
//zoom
UINT16 MI1320_Zoom_0[] =
{
0xf0, 0x0001,
0xa6, 1280,
0xa9, 1024,
};
UINT16 MI1320_Zoom_1[] =
{
0xf0, 0x0001,
0xa6, 1120,
0xa9, 896,
};
UINT16 MI1320_Zoom_2[] =
{
0xf0, 0x0001,
0xa6, 960,
0xa9, 768,
};
UINT16 MI1320_Zoom_3[] =
{
0xf0, 0x0001,
0xa6, 800,
0xa9, 640,
};
UINT16 MI1320_Zoom_4[] =
{
0xf0, 0x0001,
0xa6, 640,
0xa9, 512,
};
//分辨率
UINT16 MI1320_ContextB_Pixel0[] = //320*240
{
0xf0, 0x0001,
0xA1, 320,
0xa4, 256,
};
UINT16 MI1320_ContextB_Pixel1[] =
{
0xf0, 0x0001,
0xA1, 640,
0xa4, 512,
};
UINT16 MI1320_ContextB_Pixel2[] =
{
0xf0, 0x0001,
0xA1, 1280,
0xa4, 1024,
};
// context change
UINT16 MI1320_Context_A[] =
{
#if 0
0xf0, 0x0002,
0xD2, 0x0,
0xCC, 4,
0xCB, 0x0001,
#else
0xf0, 0x0002,
0xCB, 0x0001, // PROGRAM_ADVANCE
0xCC, 0x0004, // PROGRAM_SELECT
0xD2, 0x0000, // DEFAULT_CONFIG
#endif
};
UINT16 MI1320_Context_B[] =
{
#if 0
0xf0, 0x0002,
0xD2, 0x7F,
0xCC, 4,
0xCB, 0x0001,
#else
0xf0, 0x0002,
0xCB, 0x0001, // PROGRAM_ADVANCE
0xCC, 0x0000, // PROGRAM_SELECT
0xD2, 0x0000, // DEFAULT_CONFIG
#endif
};
int MI1320_IICWrite( INT8U* data, INT16U len)
{
UINT32 timeout;
BOOLEAN bRight = FALSE;
timeout = 0;
bRight = FALSE;
while( !bRight )
{
I2C_Init( I2C_Address , I2C_Sensor_Speed );
bRight = I2C_Write( 0, data, len, DirectMode );
I2C_Deinit();
if( timeout++ > 10 )
return 1;
}
return 0;
}
int MI1320_IICRead( INT8U* data, INT16U len)
{
UINT32 timeout;
BOOLEAN bRight = FALSE;
timeout = 0;
bRight = FALSE;
while( !bRight )
{
I2C_Init( I2C_Address , I2C_Sensor_Speed );
bRight = I2C_Read( 0, data, len, DirectMode );
I2C_Deinit();
if( timeout++ > 10 )
return 1;
}
return 0;
}
int MI1320_CommondSet( UINT16 *data )
{
UINT16 addr = 0, value = 0, mask = 0;
UINT8 data8[3];
UINT32 timeout;
BOOLEAN bRight = FALSE;
addr = *data++;
value = *data++;
data8[0]= (UINT8)addr;
data8[1]= (UINT8)((value&0xff00)>>8); //get the high reg data
data8[2]= (UINT8)(value&0xff); //get the low reg data
if( addr == MI1320_DelayMs ) //delay 1ms
{
DelayMs_nops(value);
return 0;
}
return MI1320_IICWrite( data8, 3 );
}
int MI1320_CommondListSet( UINT16 *data, UINT32 len )
{
UINT16 *pData;
BOOLEAN bRight = FALSE;
UINT16 addr = 0, value = 0;
UINT32 i , timeout;
UINT8 data8[4];
pData = data;
for( i = len; i != 0; i-- )
{
if( MI1320_CommondSet(pData) )
return 1;
pData += 2;
}
return 0;
}
int MI1320_Init(void)
{
return MI1320_CommondListSet( MI1320_InitParamList, sizeof(MI1320_InitParamList)/4 );
}
int MI1320_SetZoom( INT8U level )
{
UINT16 * pCommondList;
switch(level)
{
case 0:
return MI1320_CommondListSet( MI1320_Zoom_0, sizeof(MI1320_Zoom_0)/4);
case 1:
return MI1320_CommondListSet( MI1320_Zoom_1, sizeof(MI1320_Zoom_1)/4);
case 2:
return MI1320_CommondListSet( MI1320_Zoom_2, sizeof(MI1320_Zoom_2)/4);
case 3:
return MI1320_CommondListSet( MI1320_Zoom_3, sizeof(MI1320_Zoom_3)/4);
case 4:
return MI1320_CommondListSet( MI1320_Zoom_4, sizeof(MI1320_Zoom_4)/4);
default:
return 1;
}
}
int MI1320_Set_Preveiw(void)
{
return MI1320_CommondListSet( MI1320_Context_A, sizeof(MI1320_Context_A)/4);
}
int MI1320_Set_Capture(INT8U level)
{
return MI1320_CommondListSet( MI1320_Context_B, sizeof(MI1320_Context_B)/4);
}
int MI1320_Pixel_QVGA(void)
{
return MI1320_CommondListSet(MI1320_ContextB_Pixel0, sizeof(MI1320_ContextB_Pixel0)/4);
}
int MI1320_Pixel_VGA(void)
{
return MI1320_CommondListSet(MI1320_ContextB_Pixel1, sizeof(MI1320_ContextB_Pixel1)/4);
}
int MI1320_Pixel_SXGA(void)
{
return MI1320_CommondListSet(MI1320_ContextB_Pixel2, sizeof(MI1320_ContextB_Pixel2)/4);
}
int MI1320_Set_Mode( INT8U level )
{
switch(level)
{
case 0:
return MI1320_CommondListSet(MI1320_Effect_Normal, sizeof(MI1320_Effect_Normal)/4);
case 1:
return MI1320_CommondListSet(MI1320_Effect_Mono, sizeof(MI1320_Effect_Mono)/4);
case 2:
return MI1320_CommondListSet(MI1320_Effect_Sepia, sizeof(MI1320_Effect_Sepia)/4);
case 3:
return MI1320_CommondListSet(MI1320_Effect_Negative, sizeof(MI1320_Effect_Negative)/4);
case 4:
return MI1320_CommondListSet(MI1320_Effect_Solar1, sizeof(MI1320_Effect_Solar1)/4);
case 5:
return MI1320_CommondListSet(MI1320_Effect_Solar2, sizeof(MI1320_Effect_Solar2)/4);
default:
return 1;
}
}
int MI1320_Set_BackLight(INT8U level)
{
switch(level)
{
case 0:
return MI1320_CommondListSet(MI1320_BackLight_0, sizeof(MI1320_BackLight_0)/4);
case 1:
return MI1320_CommondListSet(MI1320_BackLight_1, sizeof(MI1320_BackLight_1)/4);
case 2:
return MI1320_CommondListSet(MI1320_BackLight_2, sizeof(MI1320_BackLight_2)/4);
default:
return 1;
}
}
/**************************************************************************
* 函数描述: 注册sensor,模块初始化调用,添加的每个sensor必须要这个接口
* 入口参数: 无
* 出口参数: sif:获得的sensor功能接口
* 返回值: 无
***************************************************************************/
void SensorGetDriver(SENSOR_INTERFACE * sif )
{
sif->Sensor_Init = MI1320_Init;
sif->Sensor_CheckId = NULL;
sif->Sensor_Set_SXGA = MI1320_Pixel_SXGA;
sif->Sensor_Set_VGA = MI1320_Pixel_VGA;
sif->Sensor_Set_CIF = NULL;
sif->Sensor_Set_QVGA = MI1320_Pixel_QVGA;
sif->Sensor_Set_Effect = MI1320_Set_Mode;
sif->Sensor_Set_Brightness = MI1320_Set_BackLight;
sif->Sensor_Set_Saturation = NULL;
sif->Sensor_Set_Contrast = NULL;
sif->Sensor_Set_Rot = NULL;
sif->Sensor_Set_Rate = NULL;
sif->Sensor_Set_Sharpness = NULL;
sif->Sensor_Set_WhiteBlanceMode = NULL;
sif->Sensor_Set_SceneryMode = NULL;
sif->Sensor_Set_Zoom = MI1320_SetZoom;
sif->Sensor_Set_ExposureCompensate = NULL;
sif->Sensor_Set_Preview = MI1320_Set_Preveiw;
sif->Sensor_Set_Capture = MI1320_Set_Capture;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -