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

📄 sensor_micron_mt9m112.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 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 + -