SAMV71 Xplained Ultra Software Package 1.4

ov2640_config.c

Go to the documentation of this file.
00001 /* ----------------------------------------------------------------------------
00002  *         SAM Software Package License
00003  * ----------------------------------------------------------------------------
00004  * Copyright (c) 2013, Atmel Corporation
00005  *
00006  * All rights reserved.
00007  *
00008  * Redistribution and use in source and binary forms, with or without
00009  * modification, are permitted provided that the following conditions are met:
00010  *
00011  * - Redistributions of source code must retain the above copyright notice,
00012  * this list of conditions and the disclaimer below.
00013  *
00014  * Atmel's name may not be used to endorse or promote products derived from
00015  * this software without specific prior written permission.
00016  *
00017  * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
00018  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
00019  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
00020  * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
00021  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00022  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
00023  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00024  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00025  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
00026  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00027  * ----------------------------------------------------------------------------
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 extern const sensorProfile_t ov2640Profile =
00526 {
00527     SENSOR_COMS,                     /* Sensor type for CMOS sensor or CCD */
00528     SENSOR_TWI_REG_BYTE_DATA_BYTE,   /* TWI interface mode  */
00529     OV2640_SLAVE_ADDRESS,            /* TWI slave address */
00530     OV2640_PIDH_ADDRESS,             /* Register address for product ID high byte */
00531     OV2640_PIDL_ADDRESS,             /* Register address for product ID low byte*/
00532     OV2640_PIDH,                     /* product ID high byte */
00533     OV2640_PIDL,                     /* product ID low byte */
00534     OV2640_PID_VER_MASK,             /* version mask */
00535     &ov2640_output_qvga,
00536     &ov2640_output_vga,
00537     0, 
00538     0, 
00539     0, 
00540     0,
00541     0
00542 };
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines