]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained/libboard_samv7-ek/source/ov.c
Update version number ready for V8.2.1 release.
[freertos] / FreeRTOS / Demo / CORTEX_M7_SAMV71_Xplained / libboard_samv7-ek / source / ov.c
1 /* ----------------------------------------------------------------------------\r
2  *         SAM Software Package License \r
3  * ----------------------------------------------------------------------------\r
4  * Copyright (c) 2013, Atmel Corporation\r
5  *\r
6  * All rights reserved.\r
7  *\r
8  * Redistribution and use in source and binary forms, with or without\r
9  * modification, are permitted provided that the following conditions are met:\r
10  *\r
11  * - Redistributions of source code must retain the above copyright notice,\r
12  * this list of conditions and the disclaimer below.\r
13  *\r
14  * Atmel's name may not be used to endorse or promote products derived from\r
15  * this software without specific prior written permission.\r
16  *\r
17  * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
20  * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
23  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
24  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
25  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
26  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
27  * ----------------------------------------------------------------------------\r
28  */\r
29  \r
30  \r
31 /*----------------------------------------------------------------------------\r
32  *        Headers\r
33  *----------------------------------------------------------------------------*/\r
34 #include "board.h"\r
35 \r
36 const static struct capture_size ov_sizes[] = {\r
37 //  {width, height}\r
38     /// VGA\r
39     { 320, 240 },\r
40     { 640, 360 },\r
41     { 640, 480 },\r
42     // SWVGA\r
43     { 800, 600 },\r
44     /// SXGA\r
45     {1280, 960 },\r
46     {1280, 720 },\r
47     /// UXGA\r
48     {1600, 1200 },\r
49 };\r
50 \r
51 /*----------------------------------------------------------------------------\r
52  *        Global Functions\r
53  *----------------------------------------------------------------------------*/\r
54  \r
55 /**\r
56  * \brief  Configure the OV for a specified image size, pixel format, \r
57  * and frame period.\r
58  */\r
59 void ov_configure(Twid *pTwid, uint8_t ovType, uint32_t width, uint32_t heigth)\r
60 {\r
61     const struct ov_reg *reg_conf;\r
62     uint8_t goodCaptureSize = 0;\r
63     uint8_t i;\r
64     \r
65     reg_conf = ov5640_yuv_vga;\r
66     TRACE_DEBUG("ovxxx_configure\n\r");\r
67     for( i = 0; i< sizeof(ov_sizes); i++ ) {\r
68         if( ov_sizes[i].width == width ) {\r
69             if( ov_sizes[i].height != heigth ) {\r
70                 TRACE_INFO("ov configure vsize not define\n\r");\r
71             }\r
72             else {\r
73                 goodCaptureSize = 1;\r
74                 break;\r
75             }\r
76         }\r
77     }\r
78     if( goodCaptureSize == 0 ) {\r
79         TRACE_ERROR("Problem size\n\r");\r
80         while(1);\r
81     }\r
82     switch (ovType){\r
83         case OV_2640: {\r
84              // Default value\r
85              reg_conf = ov2640_yuv_qvga;\r
86              // common register initialization\r
87              switch(width) {\r
88                      case 320: //VGA\r
89                      printf("-I- QVGA 640 x 480\n\r");\r
90                      reg_conf = ov2640_yuv_qvga;\r
91                      break;\r
92                  case 640: //VGA\r
93                      printf("-I- VGA 640 x 480\n\r");\r
94                      reg_conf = ov2640_yuv_vga;\r
95                      break;\r
96                  default:\r
97                      TRACE_DEBUG("ov2640_configure problem\n\r");\r
98                      break;\r
99              }\r
100              break;\r
101         }\r
102         case OV_7740: {\r
103              // Default value\r
104              reg_conf = ov7740_yuv_vga;\r
105              // common register initialization\r
106              switch(width) {\r
107                  case 640: //VGA\r
108                      printf("-I- VGA 640 x 480\n\r");\r
109                      reg_conf = ov7740_yuv_vga;\r
110                      break;\r
111                  default:\r
112                      TRACE_DEBUG("ov7740_configure problem\n\r");\r
113                      break;\r
114              }\r
115              break;\r
116         }\r
117         case OV_9740: {\r
118              // Default value\r
119              reg_conf = ov9740_yuv_vga;\r
120              // common register initialization\r
121              switch(width) {\r
122                  case 640: //VGA\r
123                      printf("-I- VGA 640 x 360\n\r");\r
124                      reg_conf = ov9740_yuv_vga;\r
125                      break;\r
126                  case 1280: //VGA\r
127                      printf("-I- VGA 1280 x 720\n\r");\r
128                      reg_conf = ov9740_yuv_sxga;\r
129                      break;\r
130                  default:\r
131                      TRACE_DEBUG("ov9740_configure problem\n\r");\r
132                      break;\r
133              }\r
134              break;\r
135         }\r
136         case OV_2643: {\r
137              // Default value\r
138              reg_conf = ov2643_yuv_vga;\r
139              // common register initialization\r
140              switch(width) {\r
141                  case 1600: //UXGA\r
142                      printf("-I- UXGA 1600 x 1200 \n\r");\r
143                      reg_conf = ov2643_yuv_uxga;\r
144                      break;\r
145                  case 800: //SWVGA\r
146                      printf("-I- SWVGA 800 x 600\n\r");\r
147                      reg_conf = ov2643_yuv_swvga;\r
148                      break;\r
149                  case 640: //VGA\r
150                      printf("-I- VGA 640 x 480\n\r");\r
151                      reg_conf = ov2643_yuv_vga;\r
152                      break;\r
153                  default:  \r
154                      TRACE_DEBUG("ov2643_configure problem\n\r");\r
155                      break;\r
156              }\r
157             break;\r
158         }\r
159         case OV_5640: {\r
160              // Default value\r
161              reg_conf = ov5640_yuv_vga;\r
162              // common register initialization\r
163              switch(width) {\r
164                  case 640: //VGA\r
165                      printf("-I- VGA 640 x 480\n\r");\r
166                      reg_conf = ov5640_yuv_vga;\r
167                      break;\r
168                  case 1280: //SXGA\r
169                      printf("-I- SXGA 1280 x 720\n\r");\r
170                      reg_conf = ov5640_yuv_sxga;\r
171                      break;\r
172                  default:  \r
173                      TRACE_DEBUG("ov5640_configure problem\n\r");\r
174                      break;\r
175              }\r
176              break;\r
177         }\r
178     }\r
179     if ((ovType == OV_5640) || (ovType == OV_9740))\r
180         ov_write_regs16(pTwid, reg_conf);\r
181     else \r
182         ov_write_regs8(pTwid, reg_conf);\r
183 }\r
184 \r
185 \r
186 /**\r
187  * \brief  Configure the OV 5640 afc fireware. \r
188  */\r
189 void ov_5640Afc_Firmware(Twid *pTwid)\r
190 {\r
191     const struct ov_reg *reg_conf;\r
192     reg_conf = ov5640_afc;\r
193     ov_write_regs16(pTwid, reg_conf);\r
194 }