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

📄 ov2640.c

📁 linux pxa270 ov2640 驱动实例
💻 C
📖 第 1 页 / 共 4 页
字号:
/* ov2640 - ov2640 camera driver 
 *	
 * Copyrith (c) 2006, OmniVision
 * 	
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation; either version 2 of the License, or (at your
 * option) any later version. NO WARRANTY OF ANY KIND is expressed or implied.
 *
 *
 * OmniVision is a trademark of OmniVision Technologies, Inc. 
 *
 *  Version 1.00   July.04.2006   david zhu
 *					      david@ovt.com.cn
 *  
 */ 

#include <linux/types.h>
#include <linux/delay.h>
#include <linux/videodev.h>
#include <asm/dma.h>

#include "pxaovcamera.h"
#include "ovcamerachip.h"
#include "ov2640.h"

#define DEBUG

#ifdef DEBUG
#define ov2640print(fmt,args...) printk(KERN_WARNING "OV2640:" fmt, ## args)
#else
#define ov2640print(fmt,args...) 
#endif

ovcamerachip g_ovcamerachip;

#define REG11A_UXGA	0x02
#define REG3DA_UXGA	0x2E
#define REG3DA_SVGA	0x35
#define QCIF                176
#define QVGA               320
#define CIF                   352
#define VGA                  640
#define SVGA                800
#define XGA                  1024
#define SXGA                1280
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/********old code by jiahongling*****************************
const static u8 OV_REGS_INITIALIZE[] =
{
	0xff,  	0x00,
	0x2c,  	0xff,
	0x2e,  	0xdf,
	0xff,  	0x01,
	0x12,  	0x80,
	0x3c,  	0x35,
	0x11,  	0x02,
	0x04,  	0x28,
	0x13,  	0xe5,
	0x14,  	0x48,
	0x2c,  	0x0c,
	0x33,  	0x78,
	0x3b,  	0xf7,
	0x36,  	0x00,
	0x37,  	0x42, 
	0x3e,  	0x00,
	0x43,  	0x11,
	0x16,  	0x10,
	0x39,  	0x82,
	0x35,  	0xc8,
	0x22,  	0x0f,
	0x23,  	0x00,
	0x34,  	0xa0,
	0x06,  	0x08,
	0x07,  	0xc0,
	0x0d,  	0xb7,
	0x0e,  	0x29, 
	0x4c,  	0x00,
	0x4a,  	0x81,
	0x21,  	0x99,
	0x09,  	0x02,
	0x24,  	0x3e, 
	0x25,  	0x38, 
	0x26,  	0x81, 
	0x5c,  	0x00,
	0x63,  	0x00,
	0x7c,  	0x00,
	0x61,  	0x70,
	0x62,  	0x80,
	0x20,  	0x80,
	0x28,  	0x30,
	0x6c,  	0x00,
	0x6e,  	0x00,
	0x70,  	0x02,
	0x71,  	0x94,
	0x73,  	0xc1,
	0x3d,  	0x34,
	0x5a,  	0x57,
	0x4f,  	0xbb,
	0x50,  	0x9c,
	0x6d,  	0x80,
	0x39,  	0x02,
	0x3a,  	0x33,
	0x3b,  	0xfb,
	0x3c,  	0x32,

	0xff,  	0x00,
	0xe5,  	0x7f, 
	0xf9,  	0xc0, 
	0x41,  	0x24, 
	0xe0,  	0x14,
	0x76,  	0xff, 
	0x33,  	0xa0,  
	0x42,  	0x20,   
	0x43,  	0x18,   
	0x4c,  	0x00,   
	0x87,  	0xd0,   
	0x88,  	0x3f,  
	0xd7,  	0x03,   
	0xd9,  	0x10,   
	0xd3,  	0x82,   
	0xc8,  	0x08,   
	0xc9,  	0x80,   
	0x7c,  	0x00,   
	0x7d,  	0x00,   
	0x7c,  	0x03,   
	0x7d,  	0x48,   
	0x7d,  	0x48,   
	0x7c,  	0x08,   
	0x7d,  	0x20,   
	0x7d,  	0x10,   
	0x7d,  	0x0e,   
	0x90,  	0x00,   
	0x91,  	0x0e,   
	0x91,  	0x1a,   
	0x91,  	0x31,   
	0x91,  	0x5a,   
	0x91,  	0x69,   
	0x91,  	0x75,   
	0x91,  	0x7e,   
	0x91,  	0x88,   
	0x91,  	0x8f,  
	0x91,  	0x96,   
	0x91,  	0xa3,   
	0x91,  	0xaf,  
	0x91,  	0xc4,   
	0x91,  	0xd7,   
	0x91,  	0xe8,   
	0x91,  	0x20,   
	0x92,  	0x00,   
	0x93,  	0x06,   
	0x93,  	0xe3,  
	0x93,  	0x31,   
	0x93,  	0x05,   
	0x93,  	0x00,   
	0x93,  	0x04,   
	0x93,  	0x00,   
	0x93,  	0x00,   
	0x93,  	0x00,   
	0x93,  	0x00,   
	0x93,  	0x00,   
	0x93,  	0x00,   
	0x93,  	0x00,   
	0x96,  	0x00,   
	0x97,  	0x08,   
	0x97,  	0x19,   
	0x97,  	0x02,   
	0x97,  	0x0c,   
	0x97,  	0x24,   
	0x97,  	0x30,   
	0x97,  	0x28,   
	0x97,  	0x26,   
	0x97,  	0x02,   
	0x97,  	0x98,   
	0x97,  	0x80,   
	0x97,  	0x00,   
	0x97,  	0x00,   
	0xc3,  	0xed,   
	0xc4,  	0x9a,   
	0xa4,  	0x01,   
	0xc5,  	0x11,   
	0xc6,  	0x51,   
	0xc7,  	0x00,   
	0xb6,  	0x66,   
	0xb8,  	0xA5,   
	0xb7,  	0x64,   
	0xb9,  	0x7C,   
	0xb3,  	0xaf,   
	0xb4,  	0x97,   
	0xb5,  	0xFF,   
	0xb0,  	0xC5,   
	0xb1,  	0x94,   
	0xb2,  	0x0f,   
	0xc4,  	0x9d,   
	0xc0,  	0xc8,   
	0xc1,  	0x96,   
	0x86,  	0x1d,   
	0x50,  	0x00,   
	0x51,  	0x90,   
	0x52,  	0x18,   
	0x53,  	0x00,   
	0x54,  	0x00,  	
	0x55,  	0x88,   
	0x57,  	0x00,   
	0x5a,  	0x90,   
	0x5b,  	0x18,   
	0x5c,  	0x05,   
	0xc3,  	0xed,   
	0x7f,  	0x00,   
	0xda,  	0x04,   
	0xe5,  	0x1f,   
	0xe1,  	0x77,   
	0xe0,  	0x00,   
	0xdd,  	0xff,  	
	0x05,  	0x00,  
	0x3d,  	0x48,   
	0xff,  	0x01,   // set sensor to SVGA
	0x12,  	0x40,  	
	0x17,  	0x11,  	
	0x18,  	0x43,   
	0x19,  	0x00,   
	0x1a,  	0x4b,   
	0x32,  	0x09,   
	0x37,  	0xc0,   
	0x4f,  	0xca,   
	0x50,  	0xa8,   
	0x6d,  	0x00,   
	0x3d,  	0x38,   
	0x35,  	0xc0,   
	0x22,  	0x0f,   
	0x6d,  	0x00,  	
	0xff,  	0x00,  	// set output to QCIF   // keep view angle
	0x86,  	0x3d,   
	0xc0,  	0x64,   	// image horizontal size HSIze[10:3]
	0xc1,  	0x4b,   	// image Vertical size VSIze[10:3]
	0x8c,  	0x00,   	// HSize[11],HSize[2:0],Vsize[2:0]
	0x50,  	0x92,   	// down sample /4
	0x51,  	0xC8,   	// H_Size[7:0],  	0x(real/4)
	0x52,  	0x96, 	// V_Size[7:0]  (real/4)
	0x53,  	0x00,   	// OFFSET_X[7 0]
	0x54,  	0x00,  	// OFFSET_Y[7 0]
	0x55,  	0x00,  	// V_size[8],offset_y[10:8],H_Size[8],offset_X[10:8]
	0x5a,  	0x2c,  	// outw[7:0]  real/4
	0x5b,  	0x24,   	// outH[7:0]  real/4
	0x5c,  	0x00,   	// bit [7:4],zmspd  ,bit2 outh[8],bit 1..0  ,outw[9 8]
	0xd3,  	0x04, 	// bit 6..0,DVP PCLK=sysclk(48)/[6..0]
	0xe0,  	0x04, 	// add the following 4 line to set  YUV output
	0xe1,  	0x67, 
	0xda,  	0x00,  	// RGB565 0x08 YUV 0x00
	0xe0,  	0x00, 
		
	0x00,	0x00 
};
********************************************************/
/////////////////////////////////////////////////////////
/**************** add by syp according  to ov *******************/
/////////////////////////////////////////////////////////
const static u8 OV_REGS_INITIALIZE[] =
{
	0xff,  	0x00,//使能table12
	0x2c,  	0xff,//
	0x2e,  	0xdf,
	0xff,  	0x01,
	//0x12,  	0x80,
	0x3c,  	0x32,
	0x11,  	0x00,//内部时钟关闭
	0x09,        0x02,
	0x04,  	0x28,
	0x13,  	0xe5,
	0x14,  	0x48,
	0x2c,  	0x0c,
	0x33,  	0x78,
	0x3a,        0x33,
	0x3b,  	0xfb,
	//0x36,  	0x00,
	//0x37,  	0x42, 
	0x3e,  	0x00,
	0x43,  	0x11,
	0x16,  	0x10,
	0x39,  	0x02,
	0x35,  	0x88,
	0x22,  	0x0a,
	0x37,        0x40,
	0x23,  	0x00,
	0x34,  	0xa0,
	0x36,        0x1a,//
	0x06,  	0x02,///
	0x07,  	0xc0,
	0x0d,  	0xb7,
	0x0e,  	0x01, //
	0x4c,  	0x00,
	0x4a,  	0x81,
	0x21,  	0x99,
	//0x24,        0x40,//
	//0x09,  	0x02,
	0x24,  	0x40, 
	0x25,  	0x38, 
	0x26,  	0x82, 
	0x5c,  	0x00,
	0x63,  	0x00,
	0x46,        0x3f,	
	0x61,  	0x70,
	0x62,  	0x80,
	0x7c,  	0x05,
	0x20,  	0x80,
	0x28,  	0x30,
	0x6c,  	0x00,
	0x6d,        0x80,//
	0x6e,  	0x00,
	0x70,  	0x02,
	0x71,  	0x94,
	0x73,  	0xc1,
	0x3d,  	0x34,
	0x5a,  	0x57,
	0x4f,  	0xbb,
	0x50,  	0x9c,
	0xff,        0x00,//
	/*0x6d,  	0x80,
	0x39,  	0x02,
	0x3a,  	0x33,
	0x3b,  	0xfb,
	0x3c,  	0x32,

	0xff,  	0x00,*/
	0xe5,  	0x7f, 
	0xf9,  	0xc0, 
	0x41,  	0x24, 
	0xe0,  	0x14,
	0x76,  	0xff, 
	0x33,  	0xa0,  
	0x42,  	0x20,   
	0x43,  	0x18,   
	0x4c,  	0x00,   
	0x87,  	0xd0,   
	0x88,  	0x3f,  
	0xd7,  	0x03,   
	0xd9,  	0x10,   
	0xd3,  	0x82,   
	0xc8,  	0x08,   
	0xc9,  	0x80,   
	0x7c,  	0x00,   
	0x7d,  	0x00,   
	0x7c,  	0x03,   
	0x7d,  	0x48,   
	0x7d,  	0x48,   
	0x7c,  	0x08,   
	0x7d,  	0x20,   
	0x7d,  	0x10,   
	0x7d,  	0x0e,   
	0x90,  	0x00,   
	0x91,  	0x0e,   
	0x91,  	0x1a,   
	0x91,  	0x31,   
	0x91,  	0x5a,   //
	0x91,  	0x69,   
	0x91,  	0x75,   
	0x91,  	0x7e,   
	0x91,  	0x88,   
	0x91,  	0x8f,  
	0x91,  	0x96,   
	0x91,  	0xa3,   
	0x91,  	0xaf,  
	0x91,  	0xc4,   
	0x91,  	0xd7,   
	0x91,  	0xe8,   
	0x91,  	0x20,   
	0x92,  	0x00,   
	0x93,  	0x06,   
	0x93,  	0xe3,  
	//0x93,  	0x31,   
	0x93,  	0x05,
	0x93,  	0x05, 
	0x93,  	0x00,   
	0x93,  	0x04,   
	0x93,  	0x00,   
	0x93,  	0x00,   
	0x93,  	0x00,   
	0x93,  	0x00,   
	0x93,  	0x00,   
	0x93,  	0x00,   
	0x93,  	0x00,   
	0x96,  	0x00,   
	0x97,  	0x08,   
	0x97,  	0x19,   
	0x97,  	0x02,   
	0x97,  	0x0c,   
	0x97,  	0x24,   
	0x97,  	0x30,   
	0x97,  	0x28,   
	0x97,  	0x26,   
	0x97,  	0x02,   
	0x97,  	0x98,   
	0x97,  	0x80,   
	0x97,  	0x00,   
	0x97,  	0x00,   
	0xc3,  	0xed,   
	//0xc4,  	0x9a,   
	0xa4,  	0x00,  // 
	0xc5,  	0x11,   
	0xc6,  	0x51,  
	0xbf,        0x80,//
	0xc7,  	0x00,   
	0xb6,  	0x66,   
	0xb8,  	0xA5,   
	0xb7,  	0x64,   
	0xb9,  	0x7C,   
	0xb3,  	0xaf,   
	0xb4,  	0x97,   
	0xb5,  	0xFF,   
	0xb0,  	0xC5,   
	0xb1,  	0x94,   
	0xb2,  	0x0f,   
	0xc4,  	0x5c,  // 
	0xc0,  	0xc8,   
	0xc1,  	0x96,   
	0x86,  	0x1d,   
	0x50,  	0x00,   
	0x51,  	0x90,   
	0x52,  	0x18,   
	0x53,  	0x00,   
	0x54,  	0x00,  	
	0x55,  	0x88,   
	0x57,  	0x00,   
	0x5a,  	0x90,   
	0x5b,  	0x18,   
	0x5c,  	0x05,   
	0xc3,  	0xed,   
	0x7f,  	0x00,   
	0xda,  	0x00,   
	0xe5,  	0x1f,   
	0xe1,  	0x77,   
	0xe0,  	0x00,   
	0xdd,  	0x7f,  	
	0x05,  	0x00,  
	/*0x3d,  	0x48,   
	0xff,  	0x01,   // set sensor to SVGA
	0x12,  	0x40,  	
	0x17,  	0x11,  	
	0x18,  	0x43,   
	0x19,  	0x00,   
	0x1a,  	0x4b,   
	0x32,  	0x09,   
	0x37,  	0xc0,   
	0x4f,  	0xca,   
	0x50,  	0xa8,   
	0x6d,  	0x00,   
	0x3d,  	0x38,   
	0x35,  	0xc0,   
	0x22,  	0x0f,   
	0x6d,  	0x00,  	
	0xff,  	0x00,  	// set output to QCIF   // keep view angle
	0x86,  	0x3d,   
	0xc0,  	0x64,   	// image horizontal size HSIze[10:3]
	0xc1,  	0x4b,   	// image Vertical size VSIze[10:3]
	0x8c,  	0x00,   	// HSize[11],HSize[2:0],Vsize[2:0]
	0x50,  	0x92,   	// down sample /4
	0x51,  	0xC8,   	// H_Size[7:0],  	0x(real/4)
	0x52,  	0x96, 	// V_Size[7:0]  (real/4)
	0x53,  	0x00,   	// OFFSET_X[7 0]
	0x54,  	0x00,  	// OFFSET_Y[7 0]
	0x55,  	0x00,  	// V_size[8],offset_y[10:8],H_Size[8],offset_X[10:8]
	0x5a,  	0x2c,  	// outw[7:0]  real/4
	0x5b,  	0x24,   	// outH[7:0]  real/4
	0x5c,  	0x00,   	// bit [7:4],zmspd  ,bit2 outh[8],bit 1..0  ,outw[9 8]
	0xd3,  	0x04, 	// bit 6..0,DVP PCLK=sysclk(48)/[6..0]
	0xe0,  	0x04, 	// add the following 4 line to set  YUV output
	0xe1,  	0x67, 
	0xda,  	0x00,  	// RGB565 0x08 YUV 0x00
	0xe0,  	0x00, 
		
	0x00,	0x00 */
};////end code by syp 2008.6.24
/////////////////////////////////////////////////////////////
//apply by ov
/*--------CIF:352*288----------*/
const static u8 OV2640_UXGA_CIF[]=
{
      0xff,      0x00,
      0xe0,      0x04,
      0xc0,      0xc8,
      0xc1,      0x96,
      0x86,      0x35,
      0x50,      0x92,
      0x51,      0x90,
      0x52,      0x2c,
      0x53,      0x00,
      0x54,      0x00,
      0x55,      0x88,
      0x57,      0x00,
      0x5a,      0x58,
      0x5b,      0x48,
      0x5c,      0x00,
      0xd3,      0x08,
      0xe0,      0x00
};
/*--------QCIF:176*144----------*/
const static u8 OV2640_UXGA_QCIF[]=
{
      0xff,      0x00,
      0xc0,      0xC8,
      0xc1,      0x96,
      0x8c,      0x00,
      0x86,      0x3D,
      0x50,      0x9B,
      0x51,      0x90,
      0x52,      0x2C,
      0x53,      0x00,
      0x54,      0x00,
      0x55,      0x88,
      0x5a,      0x2C,
      0x5b,      0x24,
      0x5c,      0x00,
      0xd3,      0x04
};
/*-------QVGA:320*240---------*/
const static u8 OV2640_UXGA_QVGA[]=
{
      0xff,      0x00,
      0xe0,      0x04,
      0xc0,      0xc8,
      0xc1,      0x96,
      0x86,      0x3d,
      0x50,      0x92,
      0x51,      0x90,
      0x52,      0x2c,
      0x53,      0x00,
      0x54,      0x00,
      0x55,      0x88,
      0x57,      0x00,
      0x5a,      0x50,
      0x5b,      0x3c,
      0x5c,      0x00,
      0xd3,      0x04,
      0xe0,      0x00
};
/*-------SVGA:800*600 ---------*/
const static u8 OV2640_UXGA_SVGA[]=
{
      0xff,      0x00,
      0xe0,      0x04,
      0xc0,      0xc8,
      0xc1,      0x96,
      0x86,      0x35,
      0x50,      0x89,
      0x51,      0x90,
      0x52,      0x2c,
      0x53,      0x00,
      0x54,      0x00,
      0x55,      0x88,
      0x57,      0x00,
      0x5a,      0xc8,
      0x5b,      0x96,
      0x5c,      0x00,
      0xd3,      0x02,
      0xe0,      0x00
};
/*--------SXGA:1280*1024---------*/
const static u8 OV2640_UXGA_SXGA[]=
{
      0xff,      0x00,
      0xe0,      0x04,
      0xc0,      0xc8,
      0xc1,      0x96,
      0x86,      0x3d,
      0x50,      0x00,
      0x51,      0x90,
      0x52,      0x2c,
      0x53,      0x00,
      0x54,      0x00,
      0x55,      0x88,
      0x57,      0x00,
      0x5a,      0x40,
      0x5b,      0xf0,
      0x5c,      0x01,
      0xd3,      0x82,
      0xe0,      0x00
};
/*-------VGA:640*480---------*/
const static u8 OV2640_UXGA_VGA[]=
{
      0xff,      0x00,
      0xe0,      0x04,
      0xc0,      0xc8,
      0xc1,      0x96,
      0x86,      0x3d,
      0x50,      0x89,
      0x51,      0x90,
      0x52,      0x2c,
      0x53,      0x00,
      0x54,      0x00,
      0x55,      0x88,
      0x57,      0x00,
      0x5a,      0xa0,
      0x5b,      0x78,
      0x5c,      0x00,
      0xd3,      0x04,
      0xe0,      0x00
};
/*-------XGA:1024*768---------*/
const static u8 OV2640_UXGA_XGA[]=
{
      0xff,      0x00,
      0xc0,      0xC8,
      0xc1,      0x96,
      0x8c,      0x00,
      0x86,      0x3D,
      0x50,      0x00,
      0x51,      0x90,
      0x52,      0x2C,
      0x53,      0x00,
      0x54,      0x00,
      0x55,      0x88,
      0x5a,      0x00,
      0x5b,      0xC0,
      0x5c,      0x01,
      0xd3,      0x02
};
const static u8 *OV2640_SETTING_PELS[]=
{
        OV2640_UXGA_QCIF,
        OV2640_UXGA_QVGA,
	OV2640_UXGA_CIF,
	OV2640_UXGA_VGA,
	OV2640_UXGA_SVGA,
	OV2640_UXGA_XGA,
	OV2640_UXGA_SXGA	
};

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const static u8 OV2640_BRIGHTNESS_DISABLE[]=
{
	0xFF,	0x00,	0xff,
	0x7C,	0x00,	0xff,
	0x7D,	0x00,	0x04,
	0x00,	0x00,	0x00
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -