SAMV71 Xplained Ultra Software Package 1.5

ov7740_config.c

Go to the documentation of this file.
00001 /* ---------------------------------------------------------------------------- */
00002 /*                  Atmel Microcontroller Software Support                      */
00003 /*                       SAM Software Package License                           */
00004 /* ---------------------------------------------------------------------------- */
00005 /* Copyright (c) 2015, Atmel Corporation                                        */
00006 /*                                                                              */
00007 /* All rights reserved.                                                         */
00008 /*                                                                              */
00009 /* Redistribution and use in source and binary forms, with or without           */
00010 /* modification, are permitted provided that the following condition is met:    */
00011 /*                                                                              */
00012 /* - Redistributions of source code must retain the above copyright notice,     */
00013 /* this list of conditions and the disclaimer below.                            */
00014 /*                                                                              */
00015 /* Atmel's name may not be used to endorse or promote products derived from     */
00016 /* this software without specific prior written permission.                     */
00017 /*                                                                              */
00018 /* DISCLAIMER:  THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR   */
00019 /* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */
00020 /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE   */
00021 /* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,      */
00022 /* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */
00023 /* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,  */
00024 /* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF    */
00025 /* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING         */
00026 /* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */
00027 /* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                           */
00028 /* ---------------------------------------------------------------------------- */
00029 
00030 /**
00031  * \file
00032  */
00033 
00034 /*------------------------------------------------------------------------------
00035  *         Headers
00036  *------------------------------------------------------------------------------*/
00037 
00038 #include "board.h"
00039 
00040 #define OV7740_SLAVE_ADDRESS   0x21
00041 #define OV7740_PIDH_ADDRESS    0x0A
00042 #define OV7740_PIDL_ADDRESS    0x0B
00043 #define OV7740_PIDH            0x77
00044 #define OV7740_PIDL            0x40
00045 #define OV7740_PID_VER_MASK    0xFFF0
00046 /*------------------------------------------------------------------------------
00047  *         Local Variables
00048  *------------------------------------------------------------------------------*/
00049 
00050 const sensorReg_t ov7740_yuv_vga[] = {
00051     {0x12, 0x80},
00052     //{0x11 ,0x07},
00053     {0x55, 0x40},
00054     {0x11, 0x02},
00055 
00056     {0x12, 0x00},
00057     {0xd5, 0x10},
00058     {0x0c, 0x12},
00059     {0x0d, 0x34},
00060     {0x17, 0x25},
00061     {0x18, 0xa0},
00062     {0x19, 0x03},
00063     {0x1a, 0xf0},
00064     {0x1b, 0x89},       //;was 81
00065     {0x22, 0x03},       //;new
00066     {0x29, 0x18},       //;was 17
00067     {0x2b, 0xf8},
00068     {0x2c, 0x01},
00069     {0x31, 0xa0},
00070     {0x32, 0xf0},
00071     {0x33, 0xc4},       //;was44
00072     {0x35, 0x05},       //;new
00073     {0x36, 0x3f},
00074     {0x04, 0x60},
00075     {0x27, 0x80},       //;delete "42 3a b4"
00076     {0x3d, 0x0f},
00077     {0x3e, 0x80},
00078     {0x3f, 0x40},
00079     {0x40, 0x7f},
00080     {0x41, 0x6a},
00081     {0x42, 0x29},
00082     {0x44, 0x22},       //;was 11
00083     {0x45, 0x41},
00084     {0x47, 0x02},
00085     {0x49, 0x64},
00086     {0x4a, 0xa1},
00087     {0x4b, 0x40},
00088     {0x4c, 0x1a},
00089     {0x4d, 0x50},
00090     {0x4e, 0x13},
00091     {0x64, 0x00},
00092     {0x67, 0x88},
00093     {0x68, 0x1a},
00094 
00095     {0x14, 0x28},       //;38/28/18 for 16/8/4x gain ceiling
00096     {0x24, 0x3c},
00097     {0x25, 0x30},
00098     {0x26, 0x72},
00099     {0x50, 0x97},
00100     {0x51, 0x1f},       //;0fc/7e/3f/1f for 60/30/15/7.5fps, 60Hz
00101     {0x52, 0x00},       //;[7:6]/[5:4] 2 msb for 60/50Hz
00102     {0x53, 0x00},
00103     {0x20, 0x00},
00104     {0x21, 0xcf},       //;01/23/57/cf for 60/30/15/7.5fps
00105     {0x50, 0x4b},       //;12e/97/4b/25 for 60/30/15/7.5fps, 50Hz
00106     {0x38, 0x14},
00107     {0xe9, 0x00},
00108     {0x56, 0x55},
00109     {0x57, 0xff},
00110     {0x58, 0xff},
00111     {0x59, 0xff},
00112     {0x5f, 0x04},
00113     {0xec, 0x00},
00114     {0x13, 0xff},
00115 
00116     {0x80, 0x7f},       //;[6]/[5] for BPC/WPC
00117     {0x81, 0x3f},
00118     {0x82, 0x32},
00119     {0x83, 0x01},
00120     {0x38, 0x11},
00121     {0x84, 0x70},
00122     {0x85, 0x00},
00123     {0x86, 0x03},
00124     {0x87, 0x01},
00125     {0x88, 0x05},
00126     {0x89, 0x30},
00127     {0x8d, 0x30},
00128     {0x8f, 0x85},
00129     {0x93, 0x30},
00130     {0x95, 0x85},
00131     {0x99, 0x30},
00132     {0x9b, 0x85},
00133 
00134     {0x9c, 0x08},
00135     {0x9d, 0x12},
00136     {0x9e, 0x23},
00137     {0x9f, 0x45},
00138     {0xa0, 0x55},
00139     {0xa1, 0x64},
00140     {0xa2, 0x72},
00141     {0xa3, 0x7f},
00142     {0xa4, 0x8b},
00143     {0xa5, 0x95},
00144     {0xa6, 0xa7},
00145     {0xa7, 0xb5},
00146     {0xa8, 0xcb},
00147     {0xa9, 0xdd},
00148     {0xaa, 0xec},
00149     {0xab, 0x1a},
00150 
00151     {0xce, 0x78},
00152     {0xcf, 0x6e},
00153     {0xd0, 0x0a},
00154     {0xd1, 0x0c},
00155     {0xd2, 0x84},
00156     {0xd3, 0x90},
00157     {0xd4, 0x1e},
00158 
00159     {0x5a, 0x24},
00160     {0x5b, 0x1f},
00161     {0x5c, 0x88},
00162     {0x5d, 0x60},
00163 
00164     {0xac, 0x6e},
00165     {0xbe, 0xff},
00166     {0xbf, 0x00},
00167 
00168     {0x0f, 0x1d},
00169     {0x0f, 0x1f},
00170     {0xFF, 0xFF}
00171 };
00172 
00173 
00174 /**
00175  * \brief Addresses and values of the OV7740 registers for the
00176  * OV7740_QVGA_RGB888 configuration:
00177  *  - 320*240 pixel by picture (QVGA)
00178  *  - pixel data in YUV
00179  */
00180 const sensorReg_t ov7740_qvga_yuv[] = {
00181     {0x12, 0x80},
00182     /* flag for soft reset delay */
00183     {0x55 , 0x40},
00184 
00185     /**************************************************************/
00186     /*  30fps  11 01;clock_divider;sysclk=24MHz at XCLK=24MHz   */
00187     /*  20fps  11 02;clock_divider;sysclk=16MHz at XCLK=24MHz   */
00188     /*  15fps  11 03;clock_divider;sysclk=12MHz at XCLK=24MHz   */
00189     /*  10fps  11 05;sysclk=8MHz at XCLK=24MHz                   */
00190     /*  7p5fps 11 07;sysclk=6MHz at XCLK=24MHz                   */
00191     /**************************************************************/
00192     /*  7p5fps 11 0x0A;sysclk=6MHz at XCLK=16.5MHz  (MCK=132/8)                  */
00193     /**************************************************************/
00194     {0x11, 0x01},
00195     /**************************************************************/
00196 
00197     {0x12 , 0x00},
00198     {0xd5 , 0x10},
00199     {0x0c , 0x12},
00200     {0x0d , 0x34},
00201     {0x17 , 0x25},
00202     {0x18 , 0xa0},
00203     {0x19 , 0x03},
00204     {0x1a , 0xf0},
00205     {0x1b , 0x89}, //;was 81
00206     {0x22 , 0x03}, //;new
00207     {0x29 , 0x18}, //;was 17
00208     {0x2b , 0xf8},
00209     {0x2c , 0x01},
00210     {0x31 , 0xa0},
00211     {0x32 , 0xf0},
00212     {0x33 , 0xc4}, //;was44
00213     {0x35 , 0x05}, //;new
00214     {0x36 , 0x3f},
00215 
00216     {0x04 , 0x60},
00217     {0x27 , 0x80}, //;delete "42 3a b4"
00218     {0x3d , 0x0f},
00219     {0x3e , 0x80},
00220     {0x3f , 0x40},
00221     {0x40 , 0x7f},
00222     {0x41 , 0x6a},
00223     {0x42 , 0x29},
00224     {0x44 , 0x22}, //;was 11
00225     {0x45 , 0x41},
00226     {0x47 , 0x02},
00227     {0x49 , 0x64},
00228     {0x4a , 0xa1},
00229     {0x4b , 0x40},
00230     {0x4c , 0x1a},
00231     {0x4d , 0x50},
00232     {0x4e , 0x13},
00233     {0x64 , 0x00},
00234     {0x67 , 0x88},
00235     {0x68 , 0x1a},
00236 
00237     {0x14 , 0x28}, //;38/28/18 for 16/8/4x gain ceiling
00238     {0x24 , 0x3c},
00239     {0x25, 0x30},
00240     {0x26, 0x72},
00241     {0x50, 0x97},
00242     {0x51, 0x7e},
00243     {0x52, 0x00},
00244     {0x53, 0x00},
00245     {0x20, 0x00},
00246     {0x21, 0x23},
00247     /*********************************/
00248     /* To enable Static Test Pattern */
00249     /*********************************/
00250     //{0x38, 0x07},
00251     //{0x84, 0x02},
00252 
00253     /*********************************/
00254     /* Normal Mode / No test pattern */
00255     {0x38, 0x14},
00256     /*********************************/
00257     {0xe9, 0x00},
00258     {0x56, 0x55},
00259     {0x57, 0xff},
00260     {0x58, 0xff},
00261     {0x59, 0xff},
00262     {0x5f, 0x04},
00263     {0xec, 0x00},
00264     {0x13, 0xff},
00265 
00266     {0x80, 0x7f},
00267     {0x81, 0x3f},
00268     {0x82, 0x32},
00269     {0x83, 0x01},
00270     {0x38, 0x11},
00271     {0x84 , 0x70},
00272     {0x85, 0x00},
00273     {0x86, 0x03},
00274     {0x87, 0x01},
00275     {0x88, 0x05},
00276     {0x89, 0x30},
00277     {0x8d, 0x30},
00278     {0x8f, 0x85},
00279     {0x93, 0x30},
00280     {0x95, 0x85},
00281     {0x99, 0x30},
00282     {0x9b, 0x85},
00283 
00284     {0x9c, 0x08},
00285     {0x9d, 0x12},
00286     {0x9e, 0x23},
00287     {0x9f, 0x45},
00288     {0xa0, 0x55},
00289     {0xa1, 0x64},
00290     {0xa2, 0x72},
00291     {0xa3, 0x7f},
00292     {0xa4, 0x8b},
00293     {0xa5, 0x95},
00294     {0xa6, 0xa7},
00295     {0xa7, 0xb5},
00296     {0xa8, 0xcb},
00297     {0xa9, 0xdd},
00298     {0xaa, 0xec},
00299     {0xab, 0x1a},
00300 
00301     {0xce, 0x78},
00302     {0xcf, 0x6e},
00303     {0xd0, 0x0a},
00304     {0xd1, 0x0c},
00305     {0xd2, 0x84},
00306     {0xd3, 0x90},
00307     {0xd4, 0x1e},
00308 
00309     {0x5a, 0x24},
00310     {0x5b, 0x1f},
00311     {0x5c, 0x88},
00312     {0x5d, 0x60},
00313 
00314     {0xac, 0x6e},
00315     {0xbe, 0xff},
00316     {0xbf, 0x00},
00317 
00318     /* 320x240 */
00319 
00320     {0x31, 0x50},
00321     {0x32, 0x78},
00322     {0x82, 0x3f},
00323 
00324     {0x0f , 0x1d},
00325     {0x0f , 0x1f},
00326     {0xFF, 0xFF}
00327 
00328 };
00329 
00330 const sensorOutput_t ov7740_output_vga =
00331 {0, VGA, YUV_422_8_BIT, 1, 640, 480, ov7740_yuv_vga};
00332 
00333 const sensorOutput_t ov7740_output_qvga =
00334 {0, QVGA, YUV_422_8_BIT, 1, 320, 240, ov7740_qvga_yuv};
00335 
00336 const sensorProfile_t ov7740Profile = {
00337     SENSOR_COMS,                     /* Sensor type for CMOS sensor or CCD */
00338     SENSOR_TWI_REG_BYTE_DATA_BYTE,   /* TWI interface mode  */
00339     OV7740_SLAVE_ADDRESS,            /* TWI slave address */
00340     OV7740_PIDH_ADDRESS,             /* Register address for product ID high byte */
00341     OV7740_PIDL_ADDRESS,             /* Register address for product ID low byte*/
00342     OV7740_PIDH,                     /* product ID high byte */
00343     OV7740_PIDL,                     /* product ID low byte */
00344     OV7740_PID_VER_MASK,             /* version mask */
00345     {&ov7740_output_vga,
00346     &ov7740_output_qvga,
00347     0,
00348     0,
00349     0,
00350     0,
00351     0},
00352 };
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines