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

📄 image_sensor_ov7690.c

📁 OV 7690 摄像头驱动源代码程序
💻 C
📖 第 1 页 / 共 4 页
字号:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2005
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/

/*****************************************************************************
 *
 * Filename:
 * ---------
 *   image_sensor.c
 *
 * Project:
 * --------
 *   Maui_sw
 *
 * Description:
 * ------------
 *   Image sensor driver function
 *
 ****************************************************************************/
#include "drv_comm.h"
#include "IntrCtrl.h"
#include "reg_base.h"
#include "gpio_sw.h"
#include "sccb.h"
#include "isp_if.h"
#include "image_sensor.h"
#include "camera_para.h"
#include "upll_ctrl.h"
#include "med_api.h"
#include "image_sensor_ov7690.h"
/* Global Valuable */
//SensorInfo g_CCT_MainSensor = OV7690_OMNIVISION;

extern kal_uint8 start_grab_x_offset, start_grab_y_offset ;
extern kal_bool gVGAmode , sensor_night_mode, MPEG4_encode_mode, g_bMJPEG_mode;
extern kal_uint8 preview_pclk_division, capture_pclk_division;
extern kal_uint16 dummy_pixels , dummy_lines;
extern kal_uint16 exposure_lines;
extern kal_uint16 sensor_global_gain ;

/* Debug Message, Don't Care */
extern kal_uint16 sensor_frame_rate;

/* MAX/MIN Explosure Lines Used By AE Algorithm */
extern kal_uint16 MAX_EXPOSURE_LINES;
extern kal_uint8 MIN_EXPOSURE_LINES ;


/* Image Sensor ID */
kal_uint16 sensor_id = 0;

/* Lens Type: */
OV7690_LENS_TYPE_ENUM OV7690_LENS_TYPE = Sunny_F28;  	/*	0: Sunny_F28,
								                            1: Sunny_F24,
								                            2: Phoenix_F28,
								                            3: Phoenix_F24,	
								                            4: Dongya_F24
							                            */
extern kal_bool sensor_cap_state ;
															
extern kal_uint8 CameraModule_ID_CurSel;
extern kal_uint8 CAMERA_MODULE_NUM;
extern kal_uint8 CameraModule_CurSel;
extern CameraModule CameraModules[];

extern kal_uint8 get_coms_sensor(void);									
   /* read_cmos_sensor() */


/*****************************************************************************
 * FUNCTION
 *  write_OV7690_shutter
 * DESCRIPTION
 *  
 * PARAMETERS
 *  shutter     [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
void write_OV7690_shutter(kal_uint16 shutter)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    write_cmos_sensor(0x10, shutter & 0xFF);
    write_cmos_sensor(0x0f, shutter >> 8);
}   /* write_OV7690_shutter */


/*****************************************************************************
 * FUNCTION
 *  read_OV7690_shutter
 * DESCRIPTION
 *  
 * PARAMETERS
 *  void
 * RETURNS
 *  
 *****************************************************************************/
kal_uint16 read_OV7690_shutter(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    exposure_lines = (read_cmos_sensor(0x0f) << 8) | read_cmos_sensor(0x10);

    return exposure_lines;
}   /* read_OV7690_shutter */


/*****************************************************************************
 * FUNCTION
 *  write_OV7690_gain
 * DESCRIPTION
 *  
 * PARAMETERS
 *  gain        [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
void write_OV7690_gain(kal_uint16 gain)
{  
   write_cmos_sensor(0x00,gain);
}   /* write_OV7690_gain */


/*****************************************************************************
 * FUNCTION
 *  read_OV7690_gain
 * DESCRIPTION
 *  
 * PARAMETERS
 *  void
 * RETURNS
 *  
 *****************************************************************************/
kal_uint16 read_OV7690_gain(void)
{
   kal_uint16 sensor_gain;
   
   sensor_gain=read_cmos_sensor(0x00);
    
   return sensor_gain;
}   /* read_OV7690_gain */


/*****************************************************************************
 * FUNCTION
 *  set_OV7690_dummy
 * DESCRIPTION
 *  
 * PARAMETERS
 *  pixels      [IN]        
 *  lines       [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
void set_OV7690_dummy(kal_uint16 pixels, kal_uint16 lines)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_uint16 temp;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    temp = read_cmos_sensor(0x2A);

   //This is for 15fps setting , any adjust frame rate is base on this. 	
    pixels += 0x334; //horizontal: 820tp
    lines += 0x00; //vertial: 512 lines 

    write_cmos_sensor(0x2B, pixels & 0xFF);
    write_cmos_sensor(0x2C, lines & 0xFF);
    write_cmos_sensor(0x2A, ((pixels >> 4) & 0x70) | ((lines >> 8) & 0x0F) | (temp & 0x80));
}   /* set_OV7690_dummy */



/*****************************************************************************
 * FUNCTION
 *  init_cmos_sensor
 * DESCRIPTION
 *  
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
void init_cmos_sensor()
{
			/*----------------------------------------------------------------*/
			/* Local Variables                                                */
			/*----------------------------------------------------------------*/

			/*----------------------------------------------------------------*/
			/* Code Body                                                      */
			/*----------------------------------------------------------------*/
			//12M PCLK, 15fps~5fps, 8x gain
			write_cmos_sensor(0x0c,0x06);//org:0x16

			write_cmos_sensor(0x48,0x42);
			write_cmos_sensor(0x49,0x0d);//;releated IO voltage.

			write_cmos_sensor(0x41,0x43);
			write_cmos_sensor(0x81,0xff);
			write_cmos_sensor(0x21,0x67);//BD step	
			write_cmos_sensor(0x16,0x03);
			write_cmos_sensor(0x39,0x80);

			//;;===Format===;;
			write_cmos_sensor(0x11,0x01);//12M pclk
			write_cmos_sensor(0x12,0x00);
			write_cmos_sensor(0x82,0x03);
			write_cmos_sensor(0xd0,0x48);
			write_cmos_sensor(0x80,0x7f);
			write_cmos_sensor(0x3e,0x30);
			write_cmos_sensor(0x22,0x00);


			write_cmos_sensor(0x2a,0x30);
		       write_cmos_sensor(0x2b,0x34);//horizontal: 820tp    
			write_cmos_sensor(0x2c,0x00);//vertial: 512 lines 
			write_cmos_sensor(0x15,0xa4);//auto down to 1/3 frame rate, 15fps~5fps
		

			//;;===Resolution===;;

			write_cmos_sensor(0x17,0x69);
			write_cmos_sensor(0x18,0xa4);
			write_cmos_sensor(0x19,0x0c);
			write_cmos_sensor(0x1a,0xf6);
			                           
			write_cmos_sensor(0xc8,0x02);
			write_cmos_sensor(0xc9,0x80);//ISP input hsize (640)
			write_cmos_sensor(0xca,0x01);
			write_cmos_sensor(0xcb,0xe0);//ISP input vsize (480)
			                           
			write_cmos_sensor(0xcc,0x02);
			write_cmos_sensor(0xcd,0x80);//ISP output hsize (640)
			write_cmos_sensor(0xce,0x01);
			write_cmos_sensor(0xcf,0xe0);//ISP output vsize (480)
			                           
			//;;===Lens Correction==;
			write_cmos_sensor(0x85,0x90);
			write_cmos_sensor(0x86,0x18);
			write_cmos_sensor(0x87,0xb0);
			write_cmos_sensor(0x88,0xA0);
			write_cmos_sensor(0x89,0x24);
			write_cmos_sensor(0x8a,0x1f);
			write_cmos_sensor(0x8b,0x21);
			                           
			//;;====Color Matrix======
			                           
			write_cmos_sensor(0xbb,0xac);
			write_cmos_sensor(0xbc,0xae);
			write_cmos_sensor(0xbd,0x02);
			write_cmos_sensor(0xbe,0x1f);
			write_cmos_sensor(0xbf,0x93);
			write_cmos_sensor(0xc0,0xb1);		
			write_cmos_sensor(0xc1,0x1A);
			                           
			//;;===Edge + Denoise====;
			                           
			write_cmos_sensor(0xb4,0x06);
			write_cmos_sensor(0xb7,0x06);
			write_cmos_sensor(0xb8,0x04);
			write_cmos_sensor(0xb9,0x00);
			write_cmos_sensor(0xba,0x04);

			//;;====AEC/AGC target===
			 
			write_cmos_sensor(0x24,0x90);
			write_cmos_sensor(0x25,0x80);
			write_cmos_sensor(0x26,0xB4);
			                           
			//;;=====UV adjust======; 
			write_cmos_sensor(0x81,0xff);
			write_cmos_sensor(0x5A,0x10);
			write_cmos_sensor(0x5B,0xA1);
			write_cmos_sensor(0x5C,0x3a);
			write_cmos_sensor(0x5d,0x20);

			//;;====Gamma====;;

			write_cmos_sensor(0xa3,0x04);
			write_cmos_sensor(0xa4,0x0c);
			write_cmos_sensor(0xa5,0x23);
			write_cmos_sensor(0xa6,0x55);
			write_cmos_sensor(0xa7,0x69);
			write_cmos_sensor(0xa8,0x78);
			write_cmos_sensor(0xa9,0x80);
			write_cmos_sensor(0xaa,0x88);
			write_cmos_sensor(0xab,0x90);
			write_cmos_sensor(0xac,0x97);
			write_cmos_sensor(0xad,0xa4);
			write_cmos_sensor(0xae,0xb0);
			write_cmos_sensor(0xaf,0xc5);
			write_cmos_sensor(0xb0,0xd7);
			write_cmos_sensor(0xb1,0xe8);
			write_cmos_sensor(0xb2,0x20);

			//;;==Advance AWB==;;

			write_cmos_sensor(0x8c, 0x5e);
			write_cmos_sensor(0x8d, 0x11);
			write_cmos_sensor(0x8e, 0x12);
			write_cmos_sensor(0x8f, 0x19);
			write_cmos_sensor(0x90, 0x50);
			write_cmos_sensor(0x91, 0x20);
			write_cmos_sensor(0x92, 0x99);
			write_cmos_sensor(0x93, 0x8b);
			write_cmos_sensor(0x94, 0x13);
			write_cmos_sensor(0x95, 0x14);
			write_cmos_sensor(0x96, 0xf0);
			write_cmos_sensor(0x97, 0x10);
			write_cmos_sensor(0x98, 0x34);
			write_cmos_sensor(0x99, 0x32);
			write_cmos_sensor(0x9a, 0x53);
			write_cmos_sensor(0x9b, 0x41);
			write_cmos_sensor(0x9c, 0xf0);
			write_cmos_sensor(0x9d, 0xf0);
			write_cmos_sensor(0x9e, 0xf0);
			write_cmos_sensor(0x9f, 0xff);
			write_cmos_sensor(0xa0, 0x66);
			write_cmos_sensor(0xa1, 0x52);
			write_cmos_sensor(0xa2, 0x11);
			
			                           
			write_cmos_sensor(0x14,0x21);//8x gain ceiling, PPChrg off

			write_cmos_sensor(0xd8,0x50);//saturation
			write_cmos_sensor(0xd9,0x50);
			write_cmos_sensor(0xd2,0x02);

			write_cmos_sensor(0x50,0x48);//50hz banding filter value
			write_cmos_sensor(0x51,0x3c);//60hz banding filter value
			write_cmos_sensor(0x13,0xf7);

	switch (OV7690_LENS_TYPE)
	{
		case Sunny_F28:
			//;;===Lens Correction==;
			write_cmos_sensor(0x85,0x90);
			write_cmos_sensor(0x86,0x18);
			write_cmos_sensor(0x87,0xb0);
			write_cmos_sensor(0x88,0xA0);
			write_cmos_sensor(0x89,0x24);
			write_cmos_sensor(0x8a,0x1f);
			write_cmos_sensor(0x8b,0x21);
			break;
		case Sunny_F24:
			//;;===Lens Correction==;
			write_cmos_sensor(0x85,0x90);
			write_cmos_sensor(0x86,0x18);
			write_cmos_sensor(0x87,0x10);
			write_cmos_sensor(0x88,0x00);
			write_cmos_sensor(0x89,0x32);
			write_cmos_sensor(0x8a,0x2c);
			write_cmos_sensor(0x8b,0x30);
			break;

⌨️ 快捷键说明

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