SAMV71 Xplained Ultra Software Package 1.5

ov2640_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 #include "board.h"
00038 
00039 #define OV2640_SLAVE_ADDRESS   0x21
00040 #define OV2640_PIDH_ADDRESS    0x0A
00041 #define OV2640_PIDL_ADDRESS    0x0B
00042 #define OV2640_PIDH            0x26
00043 #define OV2640_PIDL            0x40
00044 #define OV2640_PID_VER_MASK    0xFFF0
00045 
00046 /*------------------------------------------------------------------------------
00047  *         Local Variables
00048  *------------------------------------------------------------------------------*/
00049 
00050 /* 320*240 */
00051 const sensorReg_t ov2640_yuv_qvga[] = {
00052     {0xff, 0x01},
00053     {0x12, 0x80},
00054     {0xff, 0x00},
00055     {0x2c, 0xff},
00056     {0x2e, 0xdf},
00057     {0xff, 0x01},
00058     {0x3c, 0x32},
00059     {0x11, 0x00},
00060     {0x09, 0x02},
00061     {0x04, 0x28},
00062     {0x13, 0xe5},
00063     {0x14, 0x48},
00064     {0x2c, 0x0c},
00065     {0x33, 0x78},
00066     {0x3a, 0x33},
00067     {0x3b, 0xfb},
00068     {0x3e, 0x00},
00069     {0x43, 0x11},
00070     {0x16, 0x10},
00071     {0x39, 0x02},
00072     {0x35, 0x88},
00073     {0x22, 0x0a},
00074     {0x37, 0x40},
00075     {0x23, 0x00},
00076     {0x34, 0xa0},
00077     {0x36, 0x1a},
00078     {0x06, 0x02},
00079     {0x07, 0xc0},
00080     {0x0d, 0xb7},
00081     {0x0e, 0x01},
00082     {0x4c, 0x00},
00083     {0x4a, 0x81},
00084     {0x21, 0x99},
00085     {0x24, 0x3a},
00086     {0x25, 0x32},
00087     {0x26, 0x82},
00088     {0x5c, 0x00},
00089     {0x63, 0x00},
00090     {0x5d, 0x55},
00091     {0x5e, 0x7d},
00092     {0x5f, 0x7d},
00093     {0x60, 0x55},
00094     {0x61, 0x70},
00095     {0x62, 0x80},
00096     {0x7c, 0x05},
00097     {0x20, 0x80},
00098     {0x28, 0x30},
00099     {0x6c, 0x00},
00100     {0x6d, 0x80},
00101     {0x6e, 0x00},
00102     {0x70, 0x02},
00103     {0x71, 0x94},
00104     {0x73, 0xc1},
00105     {0x3d, 0x34},
00106     {0x5a, 0x57},
00107     {0x4f, 0xbb},
00108     {0x50, 0x9c},
00109     {0xff, 0x00},
00110     {0xe5, 0x7f},
00111     {0xf9, 0xc0},
00112     {0x41, 0x24},
00113     {0xe0, 0x14},
00114     {0x76, 0xff},
00115     {0x33, 0xa0},
00116     {0x42, 0x20},
00117     {0x43, 0x18},
00118     {0x4c, 0x00},
00119     {0x87, 0xd0},
00120     {0x88, 0x3f},
00121     {0xd7, 0x03},
00122     {0xd9, 0x10},
00123     {0xd3, 0x82},
00124     {0xc8, 0x08},
00125     {0xc9, 0x80},
00126     {0x7c, 0x00},
00127     {0x7d, 0x02},
00128     {0x7c, 0x03},
00129     {0x7d, 0x48},
00130     {0x7d, 0x48},
00131     {0x7c, 0x08},
00132     {0x7d, 0x20},
00133     {0x7d, 0x10},
00134     {0x7d, 0x0e},
00135     {0x90, 0x00},
00136     {0x91, 0x0e},
00137     {0x91, 0x1a},
00138     {0x91, 0x31},
00139     {0x91, 0x5a},
00140     {0x91, 0x69},
00141     {0x91, 0x75},
00142     {0x91, 0x7e},
00143     {0x91, 0x88},
00144     {0x91, 0x8f},
00145     {0x91, 0x96},
00146     {0x91, 0xa3},
00147     {0x91, 0xaf},
00148     {0x91, 0xc4},
00149     {0x91, 0xd7},
00150     {0x91, 0xe8},
00151     {0x91, 0x20},
00152     {0x92, 0x00},
00153     {0x93, 0x06},
00154     {0x93, 0xe3},
00155     {0x93, 0x05},
00156     {0x93, 0x05},
00157     {0x93, 0x00},
00158     {0x93, 0x02},
00159     {0x93, 0x00},
00160     {0x93, 0x00},
00161     {0x93, 0x00},
00162     {0x93, 0x00},
00163     {0x93, 0x00},
00164     {0x93, 0x00},
00165     {0x93, 0x00},
00166     {0x96, 0x00},
00167     {0x97, 0x08},
00168     {0x97, 0x19},
00169     {0x97, 0x02},
00170     {0x97, 0x0c},
00171     {0x97, 0x24},
00172     {0x97, 0x30},
00173     {0x97, 0x28},
00174     {0x97, 0x26},
00175     {0x97, 0x02},
00176     {0x97, 0x98},
00177     {0x97, 0x80},
00178     {0x97, 0x00},
00179     {0x97, 0x00},
00180     {0xc3, 0xed},
00181     {0xa4, 0x00},
00182     {0xa8, 0x00},
00183     {0xc5, 0x11},
00184     {0xc6, 0x51},
00185     {0xbf, 0x80},
00186     {0xc7, 0x10},
00187     {0xb6, 0x66},
00188     {0xb8, 0xa5},
00189     {0xb7, 0x64},
00190     {0xb9, 0x7c},
00191     {0xb3, 0xaf},
00192     {0xb4, 0x97},
00193     {0xb5, 0xff},
00194     {0xb0, 0xc5},
00195     {0xb1, 0x94},
00196     {0xb2, 0x0f},
00197     {0xc4, 0x5c},
00198     {0xc0, 0xc8},
00199     {0xc1, 0x96},
00200     {0x86, 0x1d},
00201     {0x50, 0x00},
00202     {0x51, 0x90},
00203     {0x52, 0x18},
00204     {0x53, 0x00},
00205     {0x54, 0x00},
00206     {0x55, 0x88},
00207     {0x57, 0x00},
00208     {0x5a, 0x90},
00209     {0x5b, 0x18},
00210     {0x5c, 0x05},
00211     {0xc3, 0xed},
00212     {0x7f, 0x00},
00213     {0xda, 0x04},
00214     {0xe5, 0x1f},
00215     {0xe1, 0x67},
00216     {0xe0, 0x00},
00217     {0xdd, 0xff},
00218     {0x05, 0x00},
00219     {0xff, 0x01},
00220     {0x11, 0x01},
00221     {0xff, 0x01},
00222     {0x12, 0x40},
00223     {0x17, 0x11},
00224     {0x18, 0x43},
00225     {0x19, 0x00},
00226     {0x1a, 0x4b},
00227     {0x32, 0x09},
00228     {0x4f, 0xca},
00229     {0x50, 0xa8},
00230     {0x5a, 0x23},
00231     {0x6d, 0x00},
00232     {0x3d, 0x38},
00233     {0x39, 0x12},
00234     {0x35, 0xda},
00235     {0x22, 0x1a},
00236     {0x37, 0xc3},
00237     {0x23, 0x00},
00238     {0x34, 0xc0},
00239     {0x36, 0x1a},
00240     {0x06, 0x88},
00241     {0x07, 0xc0},
00242     {0x0d, 0x87},
00243     {0x0e, 0x41},
00244     {0x4c, 0x00},
00245     {0x48, 0x00},
00246     {0x5B, 0x00},
00247     {0x42, 0x03},
00248     {0xff, 0x00},
00249     {0xe0, 0x04},
00250     {0xc0, 0x64},
00251     {0xc1, 0x4B},
00252     {0x8c, 0x00},
00253     {0x86, 0x1D},
00254     {0xd3, 0x82},
00255     {0xe0, 0x00},
00256     {0xff, 0x00},
00257     {0xc0, 0x64},
00258     {0xc1, 0x4B},
00259     {0x8c, 0x00}, // HSIZE 0x64*8 = 800, VSIZE 0x4b*8 = 600
00260     {0x86, 0x3D},
00261     {0x50, 0x89}, // LP_DP, V_DIV 1, H_DIV 1
00262     {0x51, 0xC8},
00263     {0x52, 0x96},
00264     {0x53, 0x00},
00265     {0x54, 0x00},
00266     {0x55, 0x00},
00267     {0x5a, 0x50}, // HSIZE 0xC8(200)*4 = 800, VSIZE 0x96(150)*4 = 600
00268     {0x5b, 0x3C},
00269     {0x5c, 0x00}, // ZMOW 0x50(80)*4 = 320, ZMOH 0x3C(60)*4 = 240
00270     {0xd3, 0x04},
00271     {0xFF, 0x00},
00272     {0xE0, 0x04},
00273     {0xE1, 0x67},
00274     {0xD7, 0x01},
00275     {0xDA, 0x00},
00276     {0xD3, 0x82},
00277     {0xE0, 0x00},
00278     {0xFF, 0xFF}
00279 };
00280 
00281 const sensorReg_t ov2640_yuv_vga[] = {
00282     {0xff, 0x01},       //dsp
00283     {0x12, 0x80},       //reset
00284     {0xff, 0x00},       //sensor
00285     {0x2c, 0xff},
00286     {0x2e, 0xdf},       //ADDVSH, VSYNC msb=223
00287     {0xff, 0x01},       //dsp
00288     {0x3c, 0x32},
00289     {0x11, 0x00},       //clock rate off
00290     {0x09, 0x02},       //2 capablity + standby mode
00291     {0x04, 0x28},
00292     {0x13, 0xe5},
00293     {0x14, 0x48},       //Auto agc
00294     {0x2c, 0x0c},
00295     {0x33, 0x78},
00296     {0x3a, 0x33},
00297     {0x3b, 0xfb},
00298     {0x3e, 0x00},
00299     {0x43, 0x11},
00300     {0x16, 0x10},
00301     {0x39, 0x02},
00302     {0x35, 0x88},
00303     {0x22, 0x0a},
00304     {0x37, 0x40},
00305     {0x23, 0x00},
00306     {0x34, 0xa0},       //startpoint 0
00307     {0x36, 0x1a},
00308     {0x06, 0x02},
00309     {0x07, 0xc0},
00310     {0x0d, 0xb7},
00311     {0x0e, 0x01},
00312     {0x4c, 0x00},
00313     {0x4a, 0x81},
00314     {0x21, 0x99},
00315     {0x24, 0x3a},       // Luminance high
00316     {0x25, 0x32},       // Luminance low
00317     //{0x24, 0x10}, // Luminance high
00318     //{0x25, 0x03}, // Luminance low
00319 
00320     {0x26, 0xF3},       // Fast mode large Step Range Threshold
00321     {0x5c, 0x00},
00322     {0x63, 0x00},
00323     {0x5d, 0x55},       //zone
00324     {0x5e, 0x7d},       //zone
00325     {0x5f, 0x7d},       //zone
00326     {0x60, 0x55},       //zone
00327     {0x61, 0x70},       //Histogram low
00328     {0x62, 0x80},       //Histogram high
00329     {0x7c, 0x05},
00330     {0x20, 0x80},
00331     {0x28, 0x30},
00332     {0x6c, 0x00},
00333     {0x6d, 0x80},
00334     {0x6e, 0x00},
00335     {0x70, 0x02},
00336     {0x71, 0x94},
00337     {0x73, 0xc1},
00338     {0x3d, 0x34},
00339     {0x5a, 0x57},
00340     {0x4f, 0xbb},       //50Hz
00341     {0x50, 0x9c},       //60Hz
00342 
00343     {0xff, 0x00},       //dsp
00344     {0xe5, 0x7f},
00345     {0xf9, 0xc0},       //MicroC reset,Boot
00346     {0x41, 0x24},
00347     {0xe0, 0x14},       //JPEG,DVP reset
00348     {0x76, 0xff},
00349     {0x33, 0xa0},
00350     {0x42, 0x20},
00351     {0x43, 0x18},
00352     {0x4c, 0x00},
00353     {0x87, 0xd0},       //Module Enable BPC+WPC 11010000
00354     {0x88, 0x3f},
00355     {0xd7, 0x03},
00356     {0xd9, 0x10},
00357     {0xd3, 0x82},       //Auto mode
00358     {0xc8, 0x08},
00359     {0xc9, 0x80},
00360     {0x7c, 0x00},       //SDE indirect register access: address
00361     {0x7d, 0x02},       //SDE indirect register data
00362     {0x7c, 0x03},
00363     {0x7d, 0x48},
00364     {0x7d, 0x48},
00365     {0x7c, 0x08},
00366     {0x7d, 0x20},
00367     {0x7d, 0x10},
00368     {0x7d, 0x0e},
00369     {0x90, 0x00},
00370     {0x91, 0x0e},
00371     {0x91, 0x1a},
00372     {0x91, 0x31},
00373     {0x91, 0x5a},
00374     {0x91, 0x69},
00375     {0x91, 0x75},
00376     {0x91, 0x7e},
00377     {0x91, 0x88},
00378     {0x91, 0x8f},
00379     {0x91, 0x96},
00380     {0x91, 0xa3},
00381     {0x91, 0xaf},
00382     {0x91, 0xc4},
00383     {0x91, 0xd7},
00384     {0x91, 0xe8},
00385     {0x91, 0x20},
00386     {0x92, 0x00},
00387     {0x93, 0x06},
00388     {0x93, 0xe3},
00389     {0x93, 0x05},
00390     {0x93, 0x05},
00391     {0x93, 0x00},
00392     {0x93, 0x02},
00393     {0x93, 0x00},
00394     {0x93, 0x00},
00395     {0x93, 0x00},
00396     {0x93, 0x00},
00397     {0x93, 0x00},
00398     {0x93, 0x00},
00399     {0x93, 0x00},
00400     {0x96, 0x00},
00401     {0x97, 0x08},
00402     {0x97, 0x19},
00403     {0x97, 0x02},
00404     {0x97, 0x0c},
00405     {0x97, 0x24},
00406     {0x97, 0x30},
00407     {0x97, 0x28},
00408     {0x97, 0x26},
00409     {0x97, 0x02},
00410     {0x97, 0x98},
00411     {0x97, 0x80},
00412     {0x97, 0x00},
00413     {0x97, 0x00},
00414     {0xc3, 0xed},       //Module enable
00415     {0xa4, 0x00},
00416     {0xa8, 0x00},
00417     {0xc5, 0x11},
00418     {0xc6, 0x51},
00419     {0xbf, 0x80},
00420     {0xc7, 0x10},
00421     {0xb6, 0x66},
00422     {0xb8, 0xa5},
00423     {0xb7, 0x64},
00424     {0xb9, 0x7c},
00425     {0xb3, 0xaf},
00426     {0xb4, 0x97},
00427     {0xb5, 0xff},
00428     {0xb0, 0xc5},
00429     {0xb1, 0x94},
00430     {0xb2, 0x0f},
00431     {0xc4, 0x5c},
00432     {0xc0, 0xc8},       // HSIZE8[7:0] 1600
00433     {0xc1, 0x96},       // VSIZE8[7:0] 1200
00434     {0x86, 0x1d},       //Module enable
00435     {0x50, 0x00},
00436     {0x51, 0x90},       //H_SIZE[7:0] (real/4) 1600
00437     {0x52, 0x18},       //V_SIZE[7:0] (real/4) 1120
00438     {0x53, 0x00},       //OFFSET_X[7:0]
00439     {0x54, 0x00},       //OFFSET_Y[7:0]
00440     {0x55, 0x88},       //V_SIZE[8]=1 H_SIZE[8]
00441     {0x57, 0x00},
00442     {0x5a, 0x90},       //OUTW
00443     {0x5b, 0x18},       //OUTH
00444     {0x5c, 0x05},       //OUTW8 ,OUTH8
00445     {0xc3, 0xed},
00446     {0x7f, 0x00},
00447     {0xda, 0x04},       //Image output format select ------ RAW
00448     {0xe5, 0x1f},
00449     {0xe1, 0x67},
00450     {0xe0, 0x00},       //Reset
00451     {0xdd, 0xff},
00452     {0x05, 0x00},       //Bypass DSP no
00453     {0xC2, 0x08 | 0x04 | 0x02},
00454 
00455     {0xff, 0x01},
00456     {0x11, 0x01},
00457     {0xff, 0x01},
00458     {0x12, 0x40},       //Preview mode
00459     {0x17, 0x11},
00460     {0x18, 0x43},
00461     {0x19, 0x00},
00462     {0x1a, 0x4b},
00463     {0x32, 0x09},
00464     {0x4f, 0xca},
00465     {0x50, 0xa8},       //10 101 000 V_DIVDER = 5
00466     {0x5a, 0x23},       // OUTW 23
00467     {0x6d, 0x00},
00468     {0x3d, 0x38},
00469     {0x39, 0x12},
00470     {0x35, 0xda},
00471     {0x22, 0x1a},
00472     {0x37, 0xc3},
00473     {0x23, 0x00},
00474     {0x34, 0xc0},
00475     {0x36, 0x1a},
00476     {0x06, 0x88},
00477     {0x07, 0xc0},
00478     {0x0d, 0x87},
00479     {0x0e, 0x41},
00480     {0x4c, 0x00},
00481     {0x48, 0x00},
00482     {0x5B, 0x00},       //OUTH
00483     {0x42, 0x03},
00484     {0xff, 0x00},       //DSP
00485 
00486     {0xe0, 0x04},       //Reset DVP
00487     {0xc0, 0x64},       // HSIZE8[7:0] 400
00488     {0xc1, 0x4B},       // VSIZE8[7:0] 300
00489     {0x8c, 0x00},
00490     {0x86, 0x1D},       //Module enable
00491     {0xd3, 0x82},       //Auto mode DVP PCLK=2
00492     {0xe0, 0x00},       //Reset
00493 
00494     {0xff, 0x00},       //DSP
00495     {0xc0, 0x64},       // HSIZE8[7:0] 400
00496     {0xc1, 0x4B},       // VSIZE8[7:0] 300
00497     {0x8c, 0x00},
00498     {0x86, 0x3D},
00499     {0x50, 0x00},
00500     {0x51, 0xC8},       //H_SIZE[7:0] (real/4) 800
00501     {0x52, 0x96},       //V_SIZE[7:0] (real/4) 600
00502     {0x53, 0x00},       //OFFSET
00503     {0x54, 0x00},       //OFFSET
00504     {0x55, 0x00},       //H_SIZE[8],V_SIZE[8]
00505     {0x5a, 0xA0},       //OUTW[0-7] 160?
00506     {0x5b, 0x78},       //OUTH[0-7] 120?
00507     {0x5c, 0x00},       //OUTW8,OUTH8
00508     {0xd3, 0x04},
00509     {0xFF, 0x00},
00510     {0xE0, 0x04},
00511     {0xE1, 0x67},
00512     {0xD7, 0x01},
00513     {0xDA, 0x00},       //Image output format select ------ YUV422
00514     {0xD3, 0x82},
00515     {0xE0, 0x00},
00516     {0xFF, 0xFF}
00517 };
00518 
00519 const sensorOutput_t ov2640_output_qvga =
00520 {0, QVGA, YUV_422_8_BIT, 1, 320, 240, ov2640_yuv_qvga};
00521 
00522 const sensorOutput_t ov2640_output_vga =
00523 {0, VGA, YUV_422_8_BIT, 1, 640, 480, ov2640_yuv_vga};
00524 
00525 const sensorProfile_t ov2640Profile = {
00526     SENSOR_COMS,                     /* Sensor type for CMOS sensor or CCD */
00527     SENSOR_TWI_REG_BYTE_DATA_BYTE,   /* TWI interface mode  */
00528     OV2640_SLAVE_ADDRESS,            /* TWI slave address */
00529     OV2640_PIDH_ADDRESS,             /* Register address for product ID high byte */
00530     OV2640_PIDL_ADDRESS,             /* Register address for product ID low byte*/
00531     OV2640_PIDH,                     /* product ID high byte */
00532     OV2640_PIDL,                     /* product ID low byte */
00533     OV2640_PID_VER_MASK,             /* version mask */
00534     {&ov2640_output_qvga,
00535     &ov2640_output_vga,
00536     0,
00537     0,
00538     0,
00539     0,
00540     0}
00541 };
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines