a

Dependencies:   mbed

Dependents:   a123

Committer:
nam3886
Date:
Mon Jun 10 10:45:06 2019 +0000
Revision:
1:d4da8708dc0a
Parent:
0:d05b765ea94c
12

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fundokukiri 0:d05b765ea94c 1 /**
fundokukiri 0:d05b765ea94c 2 ******************************************************************************
fundokukiri 0:d05b765ea94c 3 * @file ov9655.c
fundokukiri 0:d05b765ea94c 4 * @author MCD Application Team
fundokukiri 0:d05b765ea94c 5 * @version V1.0.0
fundokukiri 0:d05b765ea94c 6 * @date 25-June-2015
fundokukiri 0:d05b765ea94c 7 * @brief This file provides the OV9655 camera driver
fundokukiri 0:d05b765ea94c 8 ******************************************************************************
fundokukiri 0:d05b765ea94c 9 * @attention
fundokukiri 0:d05b765ea94c 10 *
fundokukiri 0:d05b765ea94c 11 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
fundokukiri 0:d05b765ea94c 12 *
fundokukiri 0:d05b765ea94c 13 * Redistribution and use in source and binary forms, with or without modification,
fundokukiri 0:d05b765ea94c 14 * are permitted provided that the following conditions are met:
fundokukiri 0:d05b765ea94c 15 * 1. Redistributions of source code must retain the above copyright notice,
fundokukiri 0:d05b765ea94c 16 * this list of conditions and the following disclaimer.
fundokukiri 0:d05b765ea94c 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
fundokukiri 0:d05b765ea94c 18 * this list of conditions and the following disclaimer in the documentation
fundokukiri 0:d05b765ea94c 19 * and/or other materials provided with the distribution.
fundokukiri 0:d05b765ea94c 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
fundokukiri 0:d05b765ea94c 21 * may be used to endorse or promote products derived from this software
fundokukiri 0:d05b765ea94c 22 * without specific prior written permission.
fundokukiri 0:d05b765ea94c 23 *
fundokukiri 0:d05b765ea94c 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
fundokukiri 0:d05b765ea94c 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
fundokukiri 0:d05b765ea94c 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
fundokukiri 0:d05b765ea94c 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
fundokukiri 0:d05b765ea94c 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
fundokukiri 0:d05b765ea94c 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
fundokukiri 0:d05b765ea94c 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
fundokukiri 0:d05b765ea94c 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
fundokukiri 0:d05b765ea94c 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
fundokukiri 0:d05b765ea94c 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
fundokukiri 0:d05b765ea94c 34 *
fundokukiri 0:d05b765ea94c 35 ******************************************************************************
fundokukiri 0:d05b765ea94c 36 */
fundokukiri 0:d05b765ea94c 37
fundokukiri 0:d05b765ea94c 38 /* Includes ------------------------------------------------------------------*/
fundokukiri 0:d05b765ea94c 39 #include "ov9655.h"
fundokukiri 0:d05b765ea94c 40
fundokukiri 0:d05b765ea94c 41 /** @addtogroup BSP
fundokukiri 0:d05b765ea94c 42 * @{
fundokukiri 0:d05b765ea94c 43 */
fundokukiri 0:d05b765ea94c 44
fundokukiri 0:d05b765ea94c 45 /** @addtogroup Components
fundokukiri 0:d05b765ea94c 46 * @{
fundokukiri 0:d05b765ea94c 47 */
fundokukiri 0:d05b765ea94c 48
fundokukiri 0:d05b765ea94c 49 /** @addtogroup OV9655
fundokukiri 0:d05b765ea94c 50 * @brief This file provides a set of functions needed to drive the
fundokukiri 0:d05b765ea94c 51 * OV9655 Camera module.
fundokukiri 0:d05b765ea94c 52 * @{
fundokukiri 0:d05b765ea94c 53 */
fundokukiri 0:d05b765ea94c 54
fundokukiri 0:d05b765ea94c 55 /** @defgroup OV9655_Private_TypesDefinitions
fundokukiri 0:d05b765ea94c 56 * @{
fundokukiri 0:d05b765ea94c 57 */
fundokukiri 0:d05b765ea94c 58
fundokukiri 0:d05b765ea94c 59 /**
fundokukiri 0:d05b765ea94c 60 * @}
fundokukiri 0:d05b765ea94c 61 */
fundokukiri 0:d05b765ea94c 62
fundokukiri 0:d05b765ea94c 63 /** @defgroup OV9655_Private_Defines
fundokukiri 0:d05b765ea94c 64 * @{
fundokukiri 0:d05b765ea94c 65 */
fundokukiri 0:d05b765ea94c 66
fundokukiri 0:d05b765ea94c 67 /**
fundokukiri 0:d05b765ea94c 68 * @}
fundokukiri 0:d05b765ea94c 69 */
fundokukiri 0:d05b765ea94c 70
fundokukiri 0:d05b765ea94c 71 /** @defgroup OV9655_Private_Macros
fundokukiri 0:d05b765ea94c 72 * @{
fundokukiri 0:d05b765ea94c 73 */
fundokukiri 0:d05b765ea94c 74
fundokukiri 0:d05b765ea94c 75 /**
fundokukiri 0:d05b765ea94c 76 * @}
fundokukiri 0:d05b765ea94c 77 */
fundokukiri 0:d05b765ea94c 78
fundokukiri 0:d05b765ea94c 79 /** @defgroup OV9655_Private_FunctionPrototypes
fundokukiri 0:d05b765ea94c 80 * @{
fundokukiri 0:d05b765ea94c 81 */
fundokukiri 0:d05b765ea94c 82 static uint64_t ov9655_ConvertValue(uint32_t feature, uint32_t value);
fundokukiri 0:d05b765ea94c 83 /**
fundokukiri 0:d05b765ea94c 84 * @}
fundokukiri 0:d05b765ea94c 85 */
fundokukiri 0:d05b765ea94c 86
fundokukiri 0:d05b765ea94c 87 /** @defgroup OV9655_Private_Variables
fundokukiri 0:d05b765ea94c 88 * @{
fundokukiri 0:d05b765ea94c 89 */
fundokukiri 0:d05b765ea94c 90
fundokukiri 0:d05b765ea94c 91 CAMERA_DrvTypeDef ov9655_drv =
fundokukiri 0:d05b765ea94c 92 {
fundokukiri 0:d05b765ea94c 93 ov9655_Init,
fundokukiri 0:d05b765ea94c 94 ov9655_ReadID,
fundokukiri 0:d05b765ea94c 95 ov9655_Config,
fundokukiri 0:d05b765ea94c 96 };
fundokukiri 0:d05b765ea94c 97
fundokukiri 0:d05b765ea94c 98 /* Initialization sequence for VGA resolution (640x480)*/
fundokukiri 0:d05b765ea94c 99 const unsigned char OV9655_VGA[][2]=
fundokukiri 0:d05b765ea94c 100 {
fundokukiri 0:d05b765ea94c 101 {0x00, 0x00},
fundokukiri 0:d05b765ea94c 102 {0x01, 0x80},
fundokukiri 0:d05b765ea94c 103 {0x02, 0x80},
fundokukiri 0:d05b765ea94c 104 {0xb5, 0x00},
fundokukiri 0:d05b765ea94c 105 {0x35, 0x00},
fundokukiri 0:d05b765ea94c 106 {0xa8, 0xc1},
fundokukiri 0:d05b765ea94c 107 {0x3a, 0xcc},
fundokukiri 0:d05b765ea94c 108 {0x3d, 0x99},
fundokukiri 0:d05b765ea94c 109 {0x77, 0x02},
fundokukiri 0:d05b765ea94c 110 {0x13, 0xe7},
fundokukiri 0:d05b765ea94c 111 {0x26, 0x72},
fundokukiri 0:d05b765ea94c 112 {0x27, 0x08},
fundokukiri 0:d05b765ea94c 113 {0x28, 0x08},
fundokukiri 0:d05b765ea94c 114 {0x2c, 0x08},
fundokukiri 0:d05b765ea94c 115 {0xab, 0x04},
fundokukiri 0:d05b765ea94c 116 {0x6e, 0x00},
fundokukiri 0:d05b765ea94c 117 {0x6d, 0x55},
fundokukiri 0:d05b765ea94c 118 {0x00, 0x11},
fundokukiri 0:d05b765ea94c 119 {0x10, 0x7b},
fundokukiri 0:d05b765ea94c 120 {0xbb, 0xae},
fundokukiri 0:d05b765ea94c 121 {0x11, 0x03},
fundokukiri 0:d05b765ea94c 122 {0x72, 0x00},
fundokukiri 0:d05b765ea94c 123 {0x3e, 0x0c},
fundokukiri 0:d05b765ea94c 124 {0x74, 0x3a},
fundokukiri 0:d05b765ea94c 125 {0x76, 0x01},
fundokukiri 0:d05b765ea94c 126 {0x75, 0x35},
fundokukiri 0:d05b765ea94c 127 {0x73, 0x00},
fundokukiri 0:d05b765ea94c 128 {0xc7, 0x80},
fundokukiri 0:d05b765ea94c 129 {0x62, 0x00},
fundokukiri 0:d05b765ea94c 130 {0x63, 0x00},
fundokukiri 0:d05b765ea94c 131 {0x64, 0x02},
fundokukiri 0:d05b765ea94c 132 {0x65, 0x20},
fundokukiri 0:d05b765ea94c 133 {0x66, 0x01},
fundokukiri 0:d05b765ea94c 134 {0xc3, 0x4e},
fundokukiri 0:d05b765ea94c 135 {0x33, 0x00},
fundokukiri 0:d05b765ea94c 136 {0xa4, 0x50},
fundokukiri 0:d05b765ea94c 137 {0xaa, 0x92},
fundokukiri 0:d05b765ea94c 138 {0xc2, 0x01},
fundokukiri 0:d05b765ea94c 139 {0xc1, 0xc8},
fundokukiri 0:d05b765ea94c 140 {0x1e, 0x04},
fundokukiri 0:d05b765ea94c 141 {0xa9, 0xef},
fundokukiri 0:d05b765ea94c 142 {0x0e, 0x61},
fundokukiri 0:d05b765ea94c 143 {0x39, 0x57},
fundokukiri 0:d05b765ea94c 144 {0x0f, 0x48},
fundokukiri 0:d05b765ea94c 145 {0x24, 0x3c},
fundokukiri 0:d05b765ea94c 146 {0x25, 0x36},
fundokukiri 0:d05b765ea94c 147 {0x12, 0x63},
fundokukiri 0:d05b765ea94c 148 {0x03, 0x12},
fundokukiri 0:d05b765ea94c 149 {0x32, 0xff},
fundokukiri 0:d05b765ea94c 150 {0x17, 0x16},
fundokukiri 0:d05b765ea94c 151 {0x18, 0x02},
fundokukiri 0:d05b765ea94c 152 {0x19, 0x01},
fundokukiri 0:d05b765ea94c 153 {0x1a, 0x3d},
fundokukiri 0:d05b765ea94c 154 {0x36, 0xfa},
fundokukiri 0:d05b765ea94c 155 {0x69, 0x0a},
fundokukiri 0:d05b765ea94c 156 {0x8c, 0x8d},
fundokukiri 0:d05b765ea94c 157 {0xc0, 0xaa},
fundokukiri 0:d05b765ea94c 158 {0x40, 0xd0},
fundokukiri 0:d05b765ea94c 159 {0x43, 0x14},
fundokukiri 0:d05b765ea94c 160 {0x44, 0xf0},
fundokukiri 0:d05b765ea94c 161 {0x45, 0x46},
fundokukiri 0:d05b765ea94c 162 {0x46, 0x62},
fundokukiri 0:d05b765ea94c 163 {0x47, 0x2a},
fundokukiri 0:d05b765ea94c 164 {0x48, 0x3c},
fundokukiri 0:d05b765ea94c 165 {0x59, 0x85},
fundokukiri 0:d05b765ea94c 166 {0x5a, 0xa9},
fundokukiri 0:d05b765ea94c 167 {0x5b, 0x64},
fundokukiri 0:d05b765ea94c 168 {0x5c, 0x84},
fundokukiri 0:d05b765ea94c 169 {0x5d, 0x53},
fundokukiri 0:d05b765ea94c 170 {0x5e, 0x0e},
fundokukiri 0:d05b765ea94c 171 {0x6c, 0x0c},
fundokukiri 0:d05b765ea94c 172 {0xc6, 0x85},
fundokukiri 0:d05b765ea94c 173 {0xcb, 0xf0},
fundokukiri 0:d05b765ea94c 174 {0xcc, 0xd8},
fundokukiri 0:d05b765ea94c 175 {0x71, 0x78},
fundokukiri 0:d05b765ea94c 176 {0xa5, 0x68},
fundokukiri 0:d05b765ea94c 177 {0x6f, 0x9e},
fundokukiri 0:d05b765ea94c 178 {0x42, 0xc0},
fundokukiri 0:d05b765ea94c 179 {0x3f, 0x82},
fundokukiri 0:d05b765ea94c 180 {0x8a, 0x23},
fundokukiri 0:d05b765ea94c 181 {0x14, 0x3a},
fundokukiri 0:d05b765ea94c 182 {0x3b, 0xcc},
fundokukiri 0:d05b765ea94c 183 {0x34, 0x3d},
fundokukiri 0:d05b765ea94c 184 {0x41, 0x40},
fundokukiri 0:d05b765ea94c 185 {0xc9, 0xe0},
fundokukiri 0:d05b765ea94c 186 {0xca, 0xe8},
fundokukiri 0:d05b765ea94c 187 {0xcd, 0x93},
fundokukiri 0:d05b765ea94c 188 {0x7a, 0x20},
fundokukiri 0:d05b765ea94c 189 {0x7b, 0x1c},
fundokukiri 0:d05b765ea94c 190 {0x7c, 0x28},
fundokukiri 0:d05b765ea94c 191 {0x7d, 0x3c},
fundokukiri 0:d05b765ea94c 192 {0x7e, 0x5a},
fundokukiri 0:d05b765ea94c 193 {0x7f, 0x68},
fundokukiri 0:d05b765ea94c 194 {0x80, 0x76},
fundokukiri 0:d05b765ea94c 195 {0x81, 0x80},
fundokukiri 0:d05b765ea94c 196 {0x82, 0x88},
fundokukiri 0:d05b765ea94c 197 {0x83, 0x8f},
fundokukiri 0:d05b765ea94c 198 {0x84, 0x96},
fundokukiri 0:d05b765ea94c 199 {0x85, 0xa3},
fundokukiri 0:d05b765ea94c 200 {0x86, 0xaf},
fundokukiri 0:d05b765ea94c 201 {0x87, 0xc4},
fundokukiri 0:d05b765ea94c 202 {0x88, 0xd7},
fundokukiri 0:d05b765ea94c 203 {0x89, 0xe8},
fundokukiri 0:d05b765ea94c 204 {0x4f, 0x98},
fundokukiri 0:d05b765ea94c 205 {0x50, 0x98},
fundokukiri 0:d05b765ea94c 206 {0x51, 0x00},
fundokukiri 0:d05b765ea94c 207 {0x52, 0x28},
fundokukiri 0:d05b765ea94c 208 {0x53, 0x70},
fundokukiri 0:d05b765ea94c 209 {0x54, 0x98},
fundokukiri 0:d05b765ea94c 210 {0x58, 0x1a},
fundokukiri 0:d05b765ea94c 211 {0x6b, 0x5a},
fundokukiri 0:d05b765ea94c 212 {0x90, 0x92},
fundokukiri 0:d05b765ea94c 213 {0x91, 0x92},
fundokukiri 0:d05b765ea94c 214 {0x9f, 0x90},
fundokukiri 0:d05b765ea94c 215 {0xa0, 0x90},
fundokukiri 0:d05b765ea94c 216 {0x16, 0x24},
fundokukiri 0:d05b765ea94c 217 {0x2a, 0x00},
fundokukiri 0:d05b765ea94c 218 {0x2b, 0x00},
fundokukiri 0:d05b765ea94c 219 {0xac, 0x80},
fundokukiri 0:d05b765ea94c 220 {0xad, 0x80},
fundokukiri 0:d05b765ea94c 221 {0xae, 0x80},
fundokukiri 0:d05b765ea94c 222 {0xaf, 0x80},
fundokukiri 0:d05b765ea94c 223 {0xb2, 0xf2},
fundokukiri 0:d05b765ea94c 224 {0xb3, 0x20},
fundokukiri 0:d05b765ea94c 225 {0xb4, 0x20},
fundokukiri 0:d05b765ea94c 226 {0xb6, 0xaf},
fundokukiri 0:d05b765ea94c 227 {0x29, 0x15},
fundokukiri 0:d05b765ea94c 228 {0x9d, 0x02},
fundokukiri 0:d05b765ea94c 229 {0x9e, 0x02},
fundokukiri 0:d05b765ea94c 230 {0x9e, 0x02},
fundokukiri 0:d05b765ea94c 231 {0x04, 0x03},
fundokukiri 0:d05b765ea94c 232 {0x05, 0x2e},
fundokukiri 0:d05b765ea94c 233 {0x06, 0x2e},
fundokukiri 0:d05b765ea94c 234 {0x07, 0x2e},
fundokukiri 0:d05b765ea94c 235 {0x08, 0x2e},
fundokukiri 0:d05b765ea94c 236 {0x2f, 0x2e},
fundokukiri 0:d05b765ea94c 237 {0x4a, 0xe9},
fundokukiri 0:d05b765ea94c 238 {0x4b, 0xdd},
fundokukiri 0:d05b765ea94c 239 {0x4c, 0xdd},
fundokukiri 0:d05b765ea94c 240 {0x4d, 0xdd},
fundokukiri 0:d05b765ea94c 241 {0x4e, 0xdd},
fundokukiri 0:d05b765ea94c 242 {0x70, 0x06},
fundokukiri 0:d05b765ea94c 243 {0xa6, 0x40},
fundokukiri 0:d05b765ea94c 244 {0xbc, 0x02},
fundokukiri 0:d05b765ea94c 245 {0xbd, 0x01},
fundokukiri 0:d05b765ea94c 246 {0xbe, 0x02},
fundokukiri 0:d05b765ea94c 247 {0xbf, 0x01},
fundokukiri 0:d05b765ea94c 248 };
fundokukiri 0:d05b765ea94c 249
fundokukiri 0:d05b765ea94c 250 /* Initialization sequence for QVGA resolution (320x240) */
fundokukiri 0:d05b765ea94c 251 const unsigned char OV9655_QVGA[][2]=
fundokukiri 0:d05b765ea94c 252 {
fundokukiri 0:d05b765ea94c 253 {0x00, 0x00},
fundokukiri 0:d05b765ea94c 254 {0x01, 0x80},
fundokukiri 0:d05b765ea94c 255 {0x02, 0x80},
fundokukiri 0:d05b765ea94c 256 {0x03, 0x02},
fundokukiri 0:d05b765ea94c 257 {0x04, 0x03},
fundokukiri 0:d05b765ea94c 258 {0x09, 0x01},
fundokukiri 0:d05b765ea94c 259 {0x0b, 0x57},
fundokukiri 0:d05b765ea94c 260 {0x0e, 0x61},
fundokukiri 0:d05b765ea94c 261 {0x0f, 0x40},
fundokukiri 0:d05b765ea94c 262 {0x11, 0x01},
fundokukiri 0:d05b765ea94c 263 {0x12, 0x62},
fundokukiri 0:d05b765ea94c 264 {0x13, 0xc7},
fundokukiri 0:d05b765ea94c 265 {0x14, 0x3a},
fundokukiri 0:d05b765ea94c 266 {0x16, 0x24},
fundokukiri 0:d05b765ea94c 267 {0x17, 0x18},
fundokukiri 0:d05b765ea94c 268 {0x18, 0x04},
fundokukiri 0:d05b765ea94c 269 {0x19, 0x01},
fundokukiri 0:d05b765ea94c 270 {0x1a, 0x81},
fundokukiri 0:d05b765ea94c 271 {0x1e, 0x00},
fundokukiri 0:d05b765ea94c 272 {0x24, 0x3c},
fundokukiri 0:d05b765ea94c 273 {0x25, 0x36},
fundokukiri 0:d05b765ea94c 274 {0x26, 0x72},
fundokukiri 0:d05b765ea94c 275 {0x27, 0x08},
fundokukiri 0:d05b765ea94c 276 {0x28, 0x08},
fundokukiri 0:d05b765ea94c 277 {0x29, 0x15},
fundokukiri 0:d05b765ea94c 278 {0x2a, 0x00},
fundokukiri 0:d05b765ea94c 279 {0x2b, 0x00},
fundokukiri 0:d05b765ea94c 280 {0x2c, 0x08},
fundokukiri 0:d05b765ea94c 281 {0x32, 0x12},
fundokukiri 0:d05b765ea94c 282 {0x33, 0x00},
fundokukiri 0:d05b765ea94c 283 {0x34, 0x3f},
fundokukiri 0:d05b765ea94c 284 {0x35, 0x00},
fundokukiri 0:d05b765ea94c 285 {0x36, 0x3a},
fundokukiri 0:d05b765ea94c 286 {0x38, 0x72},
fundokukiri 0:d05b765ea94c 287 {0x39, 0x57},
fundokukiri 0:d05b765ea94c 288 {0x3a, 0xcc},
fundokukiri 0:d05b765ea94c 289 {0x3b, 0x04},
fundokukiri 0:d05b765ea94c 290 {0x3d, 0x99},
fundokukiri 0:d05b765ea94c 291 {0x3e, 0x02},
fundokukiri 0:d05b765ea94c 292 {0x3f, 0xc1},
fundokukiri 0:d05b765ea94c 293 {0x40, 0xc0},
fundokukiri 0:d05b765ea94c 294 {0x41, 0x41},
fundokukiri 0:d05b765ea94c 295 {0x42, 0xc0},
fundokukiri 0:d05b765ea94c 296 {0x43, 0x0a},
fundokukiri 0:d05b765ea94c 297 {0x44, 0xf0},
fundokukiri 0:d05b765ea94c 298 {0x45, 0x46},
fundokukiri 0:d05b765ea94c 299 {0x46, 0x62},
fundokukiri 0:d05b765ea94c 300 {0x47, 0x2a},
fundokukiri 0:d05b765ea94c 301 {0x48, 0x3c},
fundokukiri 0:d05b765ea94c 302 {0x4a, 0xfc},
fundokukiri 0:d05b765ea94c 303 {0x4b, 0xfc},
fundokukiri 0:d05b765ea94c 304 {0x4c, 0x7f},
fundokukiri 0:d05b765ea94c 305 {0x4d, 0x7f},
fundokukiri 0:d05b765ea94c 306 {0x4e, 0x7f},
fundokukiri 0:d05b765ea94c 307 {0x4f, 0x98},
fundokukiri 0:d05b765ea94c 308 {0x50, 0x98},
fundokukiri 0:d05b765ea94c 309 {0x51, 0x00},
fundokukiri 0:d05b765ea94c 310 {0x52, 0x28},
fundokukiri 0:d05b765ea94c 311 {0x53, 0x70},
fundokukiri 0:d05b765ea94c 312 {0x54, 0x98},
fundokukiri 0:d05b765ea94c 313 {0x58, 0x1a},
fundokukiri 0:d05b765ea94c 314 {0x59, 0x85},
fundokukiri 0:d05b765ea94c 315 {0x5a, 0xa9},
fundokukiri 0:d05b765ea94c 316 {0x5b, 0x64},
fundokukiri 0:d05b765ea94c 317 {0x5c, 0x84},
fundokukiri 0:d05b765ea94c 318 {0x5d, 0x53},
fundokukiri 0:d05b765ea94c 319 {0x5e, 0x0e},
fundokukiri 0:d05b765ea94c 320 {0x5f, 0xf0},
fundokukiri 0:d05b765ea94c 321 {0x60, 0xf0},
fundokukiri 0:d05b765ea94c 322 {0x61, 0xf0},
fundokukiri 0:d05b765ea94c 323 {0x62, 0x00},
fundokukiri 0:d05b765ea94c 324 {0x63, 0x00},
fundokukiri 0:d05b765ea94c 325 {0x64, 0x02},
fundokukiri 0:d05b765ea94c 326 {0x65, 0x20},
fundokukiri 0:d05b765ea94c 327 {0x66, 0x00},
fundokukiri 0:d05b765ea94c 328 {0x69, 0x0a},
fundokukiri 0:d05b765ea94c 329 {0x6b, 0x5a},
fundokukiri 0:d05b765ea94c 330 {0x6c, 0x04},
fundokukiri 0:d05b765ea94c 331 {0x6d, 0x55},
fundokukiri 0:d05b765ea94c 332 {0x6e, 0x00},
fundokukiri 0:d05b765ea94c 333 {0x6f, 0x9d},
fundokukiri 0:d05b765ea94c 334 {0x70, 0x21},
fundokukiri 0:d05b765ea94c 335 {0x71, 0x78},
fundokukiri 0:d05b765ea94c 336 {0x72, 0x11},
fundokukiri 0:d05b765ea94c 337 {0x73, 0x01},
fundokukiri 0:d05b765ea94c 338 {0x74, 0x10},
fundokukiri 0:d05b765ea94c 339 {0x75, 0x10},
fundokukiri 0:d05b765ea94c 340 {0x76, 0x01},
fundokukiri 0:d05b765ea94c 341 {0x77, 0x02},
fundokukiri 0:d05b765ea94c 342 {0x7A, 0x12},
fundokukiri 0:d05b765ea94c 343 {0x7B, 0x08},
fundokukiri 0:d05b765ea94c 344 {0x7C, 0x16},
fundokukiri 0:d05b765ea94c 345 {0x7D, 0x30},
fundokukiri 0:d05b765ea94c 346 {0x7E, 0x5e},
fundokukiri 0:d05b765ea94c 347 {0x7F, 0x72},
fundokukiri 0:d05b765ea94c 348 {0x80, 0x82},
fundokukiri 0:d05b765ea94c 349 {0x81, 0x8e},
fundokukiri 0:d05b765ea94c 350 {0x82, 0x9a},
fundokukiri 0:d05b765ea94c 351 {0x83, 0xa4},
fundokukiri 0:d05b765ea94c 352 {0x84, 0xac},
fundokukiri 0:d05b765ea94c 353 {0x85, 0xb8},
fundokukiri 0:d05b765ea94c 354 {0x86, 0xc3},
fundokukiri 0:d05b765ea94c 355 {0x87, 0xd6},
fundokukiri 0:d05b765ea94c 356 {0x88, 0xe6},
fundokukiri 0:d05b765ea94c 357 {0x89, 0xf2},
fundokukiri 0:d05b765ea94c 358 {0x8a, 0x24},
fundokukiri 0:d05b765ea94c 359 {0x8c, 0x80},
fundokukiri 0:d05b765ea94c 360 {0x90, 0x7d},
fundokukiri 0:d05b765ea94c 361 {0x91, 0x7b},
fundokukiri 0:d05b765ea94c 362 {0x9d, 0x02},
fundokukiri 0:d05b765ea94c 363 {0x9e, 0x02},
fundokukiri 0:d05b765ea94c 364 {0x9f, 0x7a},
fundokukiri 0:d05b765ea94c 365 {0xa0, 0x79},
fundokukiri 0:d05b765ea94c 366 {0xa1, 0x40},
fundokukiri 0:d05b765ea94c 367 {0xa4, 0x50},
fundokukiri 0:d05b765ea94c 368 {0xa5, 0x68},
fundokukiri 0:d05b765ea94c 369 {0xa6, 0x4a},
fundokukiri 0:d05b765ea94c 370 {0xa8, 0xc1},
fundokukiri 0:d05b765ea94c 371 {0xa9, 0xef},
fundokukiri 0:d05b765ea94c 372 {0xaa, 0x92},
fundokukiri 0:d05b765ea94c 373 {0xab, 0x04},
fundokukiri 0:d05b765ea94c 374 {0xac, 0x80},
fundokukiri 0:d05b765ea94c 375 {0xad, 0x80},
fundokukiri 0:d05b765ea94c 376 {0xae, 0x80},
fundokukiri 0:d05b765ea94c 377 {0xaf, 0x80},
fundokukiri 0:d05b765ea94c 378 {0xb2, 0xf2},
fundokukiri 0:d05b765ea94c 379 {0xb3, 0x20},
fundokukiri 0:d05b765ea94c 380 {0xb4, 0x20},
fundokukiri 0:d05b765ea94c 381 {0xb5, 0x00},
fundokukiri 0:d05b765ea94c 382 {0xb6, 0xaf},
fundokukiri 0:d05b765ea94c 383 {0xb6, 0xaf},
fundokukiri 0:d05b765ea94c 384 {0xbb, 0xae},
fundokukiri 0:d05b765ea94c 385 {0xbc, 0x7f},
fundokukiri 0:d05b765ea94c 386 {0xbd, 0x7f},
fundokukiri 0:d05b765ea94c 387 {0xbe, 0x7f},
fundokukiri 0:d05b765ea94c 388 {0xbf, 0x7f},
fundokukiri 0:d05b765ea94c 389 {0xbf, 0x7f},
fundokukiri 0:d05b765ea94c 390 {0xc0, 0xaa},
fundokukiri 0:d05b765ea94c 391 {0xc1, 0xc0},
fundokukiri 0:d05b765ea94c 392 {0xc2, 0x01},
fundokukiri 0:d05b765ea94c 393 {0xc3, 0x4e},
fundokukiri 0:d05b765ea94c 394 {0xc6, 0x05},
fundokukiri 0:d05b765ea94c 395 {0xc7, 0x81},
fundokukiri 0:d05b765ea94c 396 {0xc9, 0xe0},
fundokukiri 0:d05b765ea94c 397 {0xca, 0xe8},
fundokukiri 0:d05b765ea94c 398 {0xcb, 0xf0},
fundokukiri 0:d05b765ea94c 399 {0xcc, 0xd8},
fundokukiri 0:d05b765ea94c 400 {0xcd, 0x93},
fundokukiri 0:d05b765ea94c 401 {0x12, 0x63},
fundokukiri 0:d05b765ea94c 402 {0x40, 0x10},
fundokukiri 0:d05b765ea94c 403 };
fundokukiri 0:d05b765ea94c 404
fundokukiri 0:d05b765ea94c 405 /* Initialization sequence for QQVGA resolution (160x120) */
fundokukiri 0:d05b765ea94c 406 const char OV9655_QQVGA[][2]=
fundokukiri 0:d05b765ea94c 407 {
fundokukiri 0:d05b765ea94c 408 {0x00, 0x00},
fundokukiri 0:d05b765ea94c 409 {0x01, 0x80},
fundokukiri 0:d05b765ea94c 410 {0x02, 0x80},
fundokukiri 0:d05b765ea94c 411 {0x03, 0x02},
fundokukiri 0:d05b765ea94c 412 {0x04, 0x03},
fundokukiri 0:d05b765ea94c 413 {0x09, 0x01},
fundokukiri 0:d05b765ea94c 414 {0x0b, 0x57},
fundokukiri 0:d05b765ea94c 415 {0x0e, 0x61},
fundokukiri 0:d05b765ea94c 416 {0x0f, 0x40},
fundokukiri 0:d05b765ea94c 417 {0x11, 0x01},
fundokukiri 0:d05b765ea94c 418 {0x12, 0x62},
fundokukiri 0:d05b765ea94c 419 {0x13, 0xc7},
fundokukiri 0:d05b765ea94c 420 {0x14, 0x3a},
fundokukiri 0:d05b765ea94c 421 {0x16, 0x24},
fundokukiri 0:d05b765ea94c 422 {0x17, 0x18},
fundokukiri 0:d05b765ea94c 423 {0x18, 0x04},
fundokukiri 0:d05b765ea94c 424 {0x19, 0x01},
fundokukiri 0:d05b765ea94c 425 {0x1a, 0x81},
fundokukiri 0:d05b765ea94c 426 {0x1e, 0x00},
fundokukiri 0:d05b765ea94c 427 {0x24, 0x3c},
fundokukiri 0:d05b765ea94c 428 {0x25, 0x36},
fundokukiri 0:d05b765ea94c 429 {0x26, 0x72},
fundokukiri 0:d05b765ea94c 430 {0x27, 0x08},
fundokukiri 0:d05b765ea94c 431 {0x28, 0x08},
fundokukiri 0:d05b765ea94c 432 {0x29, 0x15},
fundokukiri 0:d05b765ea94c 433 {0x2a, 0x00},
fundokukiri 0:d05b765ea94c 434 {0x2b, 0x00},
fundokukiri 0:d05b765ea94c 435 {0x2c, 0x08},
fundokukiri 0:d05b765ea94c 436 {0x32, 0xa4},
fundokukiri 0:d05b765ea94c 437 {0x33, 0x00},
fundokukiri 0:d05b765ea94c 438 {0x34, 0x3f},
fundokukiri 0:d05b765ea94c 439 {0x35, 0x00},
fundokukiri 0:d05b765ea94c 440 {0x36, 0x3a},
fundokukiri 0:d05b765ea94c 441 {0x38, 0x72},
fundokukiri 0:d05b765ea94c 442 {0x39, 0x57},
fundokukiri 0:d05b765ea94c 443 {0x3a, 0xcc},
fundokukiri 0:d05b765ea94c 444 {0x3b, 0x04},
fundokukiri 0:d05b765ea94c 445 {0x3d, 0x99},
fundokukiri 0:d05b765ea94c 446 {0x3e, 0x0e},
fundokukiri 0:d05b765ea94c 447 {0x3f, 0xc1},
fundokukiri 0:d05b765ea94c 448 {0x40, 0xc0},
fundokukiri 0:d05b765ea94c 449 {0x41, 0x41},
fundokukiri 0:d05b765ea94c 450 {0x42, 0xc0},
fundokukiri 0:d05b765ea94c 451 {0x43, 0x0a},
fundokukiri 0:d05b765ea94c 452 {0x44, 0xf0},
fundokukiri 0:d05b765ea94c 453 {0x45, 0x46},
fundokukiri 0:d05b765ea94c 454 {0x46, 0x62},
fundokukiri 0:d05b765ea94c 455 {0x47, 0x2a},
fundokukiri 0:d05b765ea94c 456 {0x48, 0x3c},
fundokukiri 0:d05b765ea94c 457 {0x4a, 0xfc},
fundokukiri 0:d05b765ea94c 458 {0x4b, 0xfc},
fundokukiri 0:d05b765ea94c 459 {0x4c, 0x7f},
fundokukiri 0:d05b765ea94c 460 {0x4d, 0x7f},
fundokukiri 0:d05b765ea94c 461 {0x4e, 0x7f},
fundokukiri 0:d05b765ea94c 462 {0x4f, 0x98},
fundokukiri 0:d05b765ea94c 463 {0x50, 0x98},
fundokukiri 0:d05b765ea94c 464 {0x51, 0x00},
fundokukiri 0:d05b765ea94c 465 {0x52, 0x28},
fundokukiri 0:d05b765ea94c 466 {0x53, 0x70},
fundokukiri 0:d05b765ea94c 467 {0x54, 0x98},
fundokukiri 0:d05b765ea94c 468 {0x58, 0x1a},
fundokukiri 0:d05b765ea94c 469 {0x59, 0x85},
fundokukiri 0:d05b765ea94c 470 {0x5a, 0xa9},
fundokukiri 0:d05b765ea94c 471 {0x5b, 0x64},
fundokukiri 0:d05b765ea94c 472 {0x5c, 0x84},
fundokukiri 0:d05b765ea94c 473 {0x5d, 0x53},
fundokukiri 0:d05b765ea94c 474 {0x5e, 0x0e},
fundokukiri 0:d05b765ea94c 475 {0x5f, 0xf0},
fundokukiri 0:d05b765ea94c 476 {0x60, 0xf0},
fundokukiri 0:d05b765ea94c 477 {0x61, 0xf0},
fundokukiri 0:d05b765ea94c 478 {0x62, 0x00},
fundokukiri 0:d05b765ea94c 479 {0x63, 0x00},
fundokukiri 0:d05b765ea94c 480 {0x64, 0x02},
fundokukiri 0:d05b765ea94c 481 {0x65, 0x20},
fundokukiri 0:d05b765ea94c 482 {0x66, 0x00},
fundokukiri 0:d05b765ea94c 483 {0x69, 0x0a},
fundokukiri 0:d05b765ea94c 484 {0x6b, 0x5a},
fundokukiri 0:d05b765ea94c 485 {0x6c, 0x04},
fundokukiri 0:d05b765ea94c 486 {0x6d, 0x55},
fundokukiri 0:d05b765ea94c 487 {0x6e, 0x00},
fundokukiri 0:d05b765ea94c 488 {0x6f, 0x9d},
fundokukiri 0:d05b765ea94c 489 {0x70, 0x21},
fundokukiri 0:d05b765ea94c 490 {0x71, 0x78},
fundokukiri 0:d05b765ea94c 491 {0x72, 0x22},
fundokukiri 0:d05b765ea94c 492 {0x73, 0x02},
fundokukiri 0:d05b765ea94c 493 {0x74, 0x10},
fundokukiri 0:d05b765ea94c 494 {0x75, 0x10},
fundokukiri 0:d05b765ea94c 495 {0x76, 0x01},
fundokukiri 0:d05b765ea94c 496 {0x77, 0x02},
fundokukiri 0:d05b765ea94c 497 {0x7A, 0x12},
fundokukiri 0:d05b765ea94c 498 {0x7B, 0x08},
fundokukiri 0:d05b765ea94c 499 {0x7C, 0x16},
fundokukiri 0:d05b765ea94c 500 {0x7D, 0x30},
fundokukiri 0:d05b765ea94c 501 {0x7E, 0x5e},
fundokukiri 0:d05b765ea94c 502 {0x7F, 0x72},
fundokukiri 0:d05b765ea94c 503 {0x80, 0x82},
fundokukiri 0:d05b765ea94c 504 {0x81, 0x8e},
fundokukiri 0:d05b765ea94c 505 {0x82, 0x9a},
fundokukiri 0:d05b765ea94c 506 {0x83, 0xa4},
fundokukiri 0:d05b765ea94c 507 {0x84, 0xac},
fundokukiri 0:d05b765ea94c 508 {0x85, 0xb8},
fundokukiri 0:d05b765ea94c 509 {0x86, 0xc3},
fundokukiri 0:d05b765ea94c 510 {0x87, 0xd6},
fundokukiri 0:d05b765ea94c 511 {0x88, 0xe6},
fundokukiri 0:d05b765ea94c 512 {0x89, 0xf2},
fundokukiri 0:d05b765ea94c 513 {0x8a, 0x24},
fundokukiri 0:d05b765ea94c 514 {0x8c, 0x80},
fundokukiri 0:d05b765ea94c 515 {0x90, 0x7d},
fundokukiri 0:d05b765ea94c 516 {0x91, 0x7b},
fundokukiri 0:d05b765ea94c 517 {0x9d, 0x02},
fundokukiri 0:d05b765ea94c 518 {0x9e, 0x02},
fundokukiri 0:d05b765ea94c 519 {0x9f, 0x7a},
fundokukiri 0:d05b765ea94c 520 {0xa0, 0x79},
fundokukiri 0:d05b765ea94c 521 {0xa1, 0x40},
fundokukiri 0:d05b765ea94c 522 {0xa4, 0x50},
fundokukiri 0:d05b765ea94c 523 {0xa5, 0x68},
fundokukiri 0:d05b765ea94c 524 {0xa6, 0x4a},
fundokukiri 0:d05b765ea94c 525 {0xa8, 0xc1},
fundokukiri 0:d05b765ea94c 526 {0xa9, 0xef},
fundokukiri 0:d05b765ea94c 527 {0xaa, 0x92},
fundokukiri 0:d05b765ea94c 528 {0xab, 0x04},
fundokukiri 0:d05b765ea94c 529 {0xac, 0x80},
fundokukiri 0:d05b765ea94c 530 {0xad, 0x80},
fundokukiri 0:d05b765ea94c 531 {0xae, 0x80},
fundokukiri 0:d05b765ea94c 532 {0xaf, 0x80},
fundokukiri 0:d05b765ea94c 533 {0xb2, 0xf2},
fundokukiri 0:d05b765ea94c 534 {0xb3, 0x20},
fundokukiri 0:d05b765ea94c 535 {0xb4, 0x20},
fundokukiri 0:d05b765ea94c 536 {0xb5, 0x00},
fundokukiri 0:d05b765ea94c 537 {0xb6, 0xaf},
fundokukiri 0:d05b765ea94c 538 {0xb6, 0xaf},
fundokukiri 0:d05b765ea94c 539 {0xbb, 0xae},
fundokukiri 0:d05b765ea94c 540 {0xbc, 0x7f},
fundokukiri 0:d05b765ea94c 541 {0xbd, 0x7f},
fundokukiri 0:d05b765ea94c 542 {0xbe, 0x7f},
fundokukiri 0:d05b765ea94c 543 {0xbf, 0x7f},
fundokukiri 0:d05b765ea94c 544 {0xbf, 0x7f},
fundokukiri 0:d05b765ea94c 545 {0xc0, 0xaa},
fundokukiri 0:d05b765ea94c 546 {0xc1, 0xc0},
fundokukiri 0:d05b765ea94c 547 {0xc2, 0x01},
fundokukiri 0:d05b765ea94c 548 {0xc3, 0x4e},
fundokukiri 0:d05b765ea94c 549 {0xc6, 0x05},
fundokukiri 0:d05b765ea94c 550 {0xc7, 0x82},
fundokukiri 0:d05b765ea94c 551 {0xc9, 0xe0},
fundokukiri 0:d05b765ea94c 552 {0xca, 0xe8},
fundokukiri 0:d05b765ea94c 553 {0xcb, 0xf0},
fundokukiri 0:d05b765ea94c 554 {0xcc, 0xd8},
fundokukiri 0:d05b765ea94c 555 {0xcd, 0x93},
fundokukiri 0:d05b765ea94c 556 {0x12, 0x63},
fundokukiri 0:d05b765ea94c 557 {0x40, 0x10},
fundokukiri 0:d05b765ea94c 558 };
fundokukiri 0:d05b765ea94c 559
fundokukiri 0:d05b765ea94c 560 /**
fundokukiri 0:d05b765ea94c 561 * @}
fundokukiri 0:d05b765ea94c 562 */
fundokukiri 0:d05b765ea94c 563
fundokukiri 0:d05b765ea94c 564 /** @defgroup OV9655_Private_Functions
fundokukiri 0:d05b765ea94c 565 * @{
fundokukiri 0:d05b765ea94c 566 */
fundokukiri 0:d05b765ea94c 567
fundokukiri 0:d05b765ea94c 568 /**
fundokukiri 0:d05b765ea94c 569 * @brief Initializes the OV9655 CAMERA component.
fundokukiri 0:d05b765ea94c 570 * @param DeviceAddr: Device address on communication Bus.
fundokukiri 0:d05b765ea94c 571 * @param resolution: Camera resolution
fundokukiri 0:d05b765ea94c 572 * @retval None
fundokukiri 0:d05b765ea94c 573 */
fundokukiri 0:d05b765ea94c 574 void ov9655_Init(uint16_t DeviceAddr, uint32_t resolution)
fundokukiri 0:d05b765ea94c 575 {
fundokukiri 0:d05b765ea94c 576 uint32_t index;
fundokukiri 0:d05b765ea94c 577
fundokukiri 0:d05b765ea94c 578 /* Initialize I2C */
fundokukiri 0:d05b765ea94c 579 CAMERA_IO_Init();
fundokukiri 0:d05b765ea94c 580
fundokukiri 0:d05b765ea94c 581 /* Prepare the camera to be configured by resetting all its registers */
fundokukiri 0:d05b765ea94c 582 CAMERA_IO_Write(DeviceAddr, OV9655_SENSOR_COM7, 0x80);
fundokukiri 0:d05b765ea94c 583 CAMERA_Delay(200);
fundokukiri 0:d05b765ea94c 584
fundokukiri 0:d05b765ea94c 585 /* Initialize OV9655 */
fundokukiri 0:d05b765ea94c 586 switch (resolution)
fundokukiri 0:d05b765ea94c 587 {
fundokukiri 0:d05b765ea94c 588 case CAMERA_R160x120:
fundokukiri 0:d05b765ea94c 589 {
fundokukiri 0:d05b765ea94c 590 for(index=0; index<(sizeof(OV9655_QQVGA)/2); index++)
fundokukiri 0:d05b765ea94c 591 {
fundokukiri 0:d05b765ea94c 592 CAMERA_IO_Write(DeviceAddr, OV9655_QQVGA[index][0], OV9655_QQVGA[index][1]);
fundokukiri 0:d05b765ea94c 593 CAMERA_Delay(2);
fundokukiri 0:d05b765ea94c 594 }
fundokukiri 0:d05b765ea94c 595 break;
fundokukiri 0:d05b765ea94c 596 }
fundokukiri 0:d05b765ea94c 597 case CAMERA_R320x240:
fundokukiri 0:d05b765ea94c 598 {
fundokukiri 0:d05b765ea94c 599 for(index=0; index<(sizeof(OV9655_QVGA)/2); index++)
fundokukiri 0:d05b765ea94c 600 {
fundokukiri 0:d05b765ea94c 601 CAMERA_IO_Write(DeviceAddr, OV9655_QVGA[index][0], OV9655_QVGA[index][1]);
fundokukiri 0:d05b765ea94c 602 CAMERA_Delay(2);
fundokukiri 0:d05b765ea94c 603 }
fundokukiri 0:d05b765ea94c 604 break;
fundokukiri 0:d05b765ea94c 605 }
fundokukiri 0:d05b765ea94c 606 case CAMERA_R480x272:
fundokukiri 0:d05b765ea94c 607 {
fundokukiri 0:d05b765ea94c 608 /* Not supported resolution */
fundokukiri 0:d05b765ea94c 609 break;
fundokukiri 0:d05b765ea94c 610 }
fundokukiri 0:d05b765ea94c 611 case CAMERA_R640x480:
fundokukiri 0:d05b765ea94c 612 {
fundokukiri 0:d05b765ea94c 613 for(index=0; index<(sizeof(OV9655_VGA)/2); index++)
fundokukiri 0:d05b765ea94c 614 {
fundokukiri 0:d05b765ea94c 615 CAMERA_IO_Write(DeviceAddr, OV9655_VGA[index][0], OV9655_VGA[index][1]);
fundokukiri 0:d05b765ea94c 616 CAMERA_Delay(2);
fundokukiri 0:d05b765ea94c 617 }
fundokukiri 0:d05b765ea94c 618 break;
fundokukiri 0:d05b765ea94c 619 }
fundokukiri 0:d05b765ea94c 620 default:
fundokukiri 0:d05b765ea94c 621 {
fundokukiri 0:d05b765ea94c 622 break;
fundokukiri 0:d05b765ea94c 623 }
fundokukiri 0:d05b765ea94c 624 }
fundokukiri 0:d05b765ea94c 625 }
fundokukiri 0:d05b765ea94c 626
fundokukiri 0:d05b765ea94c 627 /**
fundokukiri 0:d05b765ea94c 628 * @brief Configures the OV9655 camera feature.
fundokukiri 0:d05b765ea94c 629 * @param DeviceAddr: Device address on communication Bus.
fundokukiri 0:d05b765ea94c 630 * @param feature: Camera feature to be configured
fundokukiri 0:d05b765ea94c 631 * @param value: Value to be configured
fundokukiri 0:d05b765ea94c 632 * @param brightness_value: Brightness value to be configured
fundokukiri 0:d05b765ea94c 633 * @retval None
fundokukiri 0:d05b765ea94c 634 */
fundokukiri 0:d05b765ea94c 635 void ov9655_Config(uint16_t DeviceAddr, uint32_t feature, uint32_t value, uint32_t brightness_value)
fundokukiri 0:d05b765ea94c 636 {
fundokukiri 0:d05b765ea94c 637 uint8_t tslb, mtx1, mtx2, mtx3, mtx4, mtx5, mtx6;
fundokukiri 0:d05b765ea94c 638 uint64_t value_tmp;
fundokukiri 0:d05b765ea94c 639 uint32_t br_value;
fundokukiri 0:d05b765ea94c 640
fundokukiri 0:d05b765ea94c 641 /* Convert the input value into ov9655 parameters */
fundokukiri 0:d05b765ea94c 642 value_tmp = ov9655_ConvertValue(feature, value);
fundokukiri 0:d05b765ea94c 643 br_value = (uint32_t)ov9655_ConvertValue(CAMERA_CONTRAST_BRIGHTNESS, brightness_value);
fundokukiri 0:d05b765ea94c 644
fundokukiri 0:d05b765ea94c 645 switch(feature)
fundokukiri 0:d05b765ea94c 646 {
fundokukiri 0:d05b765ea94c 647 case CAMERA_CONTRAST_BRIGHTNESS:
fundokukiri 0:d05b765ea94c 648 {
fundokukiri 0:d05b765ea94c 649 CAMERA_IO_Write(DeviceAddr, OV9655_SENSOR_BRTN, br_value);
fundokukiri 0:d05b765ea94c 650 CAMERA_IO_Write(DeviceAddr, OV9655_SENSOR_CNST1, value_tmp);
fundokukiri 0:d05b765ea94c 651 break;
fundokukiri 0:d05b765ea94c 652 }
fundokukiri 0:d05b765ea94c 653 case CAMERA_BLACK_WHITE:
fundokukiri 0:d05b765ea94c 654 case CAMERA_COLOR_EFFECT:
fundokukiri 0:d05b765ea94c 655 {
fundokukiri 0:d05b765ea94c 656 tslb = (uint8_t)(value_tmp >> 48);
fundokukiri 0:d05b765ea94c 657 mtx1 = (uint8_t)(value_tmp >> 40);
fundokukiri 0:d05b765ea94c 658 mtx2 = (uint8_t)(value_tmp >> 32);
fundokukiri 0:d05b765ea94c 659 mtx3 = (uint8_t)(value_tmp >> 24);
fundokukiri 0:d05b765ea94c 660 mtx4 = (uint8_t)(value_tmp >> 16);
fundokukiri 0:d05b765ea94c 661 mtx5 = (uint8_t)(value_tmp >> 8);
fundokukiri 0:d05b765ea94c 662 mtx6 = (uint8_t)(value_tmp);
fundokukiri 0:d05b765ea94c 663 CAMERA_IO_Write(DeviceAddr, OV9655_SENSOR_TSLB, tslb);
fundokukiri 0:d05b765ea94c 664 CAMERA_IO_Write(DeviceAddr, OV9655_SENSOR_MTX1, mtx1);
fundokukiri 0:d05b765ea94c 665 CAMERA_IO_Write(DeviceAddr, OV9655_SENSOR_MTX2, mtx2);
fundokukiri 0:d05b765ea94c 666 CAMERA_IO_Write(DeviceAddr, OV9655_SENSOR_MTX3, mtx3);
fundokukiri 0:d05b765ea94c 667 CAMERA_IO_Write(DeviceAddr, OV9655_SENSOR_MTX4, mtx4);
fundokukiri 0:d05b765ea94c 668 CAMERA_IO_Write(DeviceAddr, OV9655_SENSOR_MTX5, mtx5);
fundokukiri 0:d05b765ea94c 669 CAMERA_IO_Write(DeviceAddr, OV9655_SENSOR_MTX6, mtx6);
fundokukiri 0:d05b765ea94c 670 break;
fundokukiri 0:d05b765ea94c 671 }
fundokukiri 0:d05b765ea94c 672 default:
fundokukiri 0:d05b765ea94c 673 {
fundokukiri 0:d05b765ea94c 674 break;
fundokukiri 0:d05b765ea94c 675 }
fundokukiri 0:d05b765ea94c 676 }
fundokukiri 0:d05b765ea94c 677 }
fundokukiri 0:d05b765ea94c 678
fundokukiri 0:d05b765ea94c 679 /**
fundokukiri 0:d05b765ea94c 680 * @brief Read the OV9655 Camera identity.
fundokukiri 0:d05b765ea94c 681 * @param DeviceAddr: Device address on communication Bus.
fundokukiri 0:d05b765ea94c 682 * @retval the OV9655 ID
fundokukiri 0:d05b765ea94c 683 */
fundokukiri 0:d05b765ea94c 684 uint16_t ov9655_ReadID(uint16_t DeviceAddr)
fundokukiri 0:d05b765ea94c 685 {
fundokukiri 0:d05b765ea94c 686 /* Initialize I2C */
fundokukiri 0:d05b765ea94c 687 CAMERA_IO_Init();
fundokukiri 0:d05b765ea94c 688
fundokukiri 0:d05b765ea94c 689 /* Get the camera ID */
fundokukiri 0:d05b765ea94c 690 return (CAMERA_IO_Read(DeviceAddr, OV9655_SENSOR_PIDH));
fundokukiri 0:d05b765ea94c 691 }
fundokukiri 0:d05b765ea94c 692
fundokukiri 0:d05b765ea94c 693 /******************************************************************************
fundokukiri 0:d05b765ea94c 694 Static Functions
fundokukiri 0:d05b765ea94c 695 *******************************************************************************/
fundokukiri 0:d05b765ea94c 696 /**
fundokukiri 0:d05b765ea94c 697 * @brief Convert input values into ov9655 parameters.
fundokukiri 0:d05b765ea94c 698 * @param feature: Camera feature to be configured
fundokukiri 0:d05b765ea94c 699 * @param value: Value to be configured
fundokukiri 0:d05b765ea94c 700 * @retval The converted value
fundokukiri 0:d05b765ea94c 701 */
fundokukiri 0:d05b765ea94c 702 static uint64_t ov9655_ConvertValue(uint32_t feature, uint32_t value)
fundokukiri 0:d05b765ea94c 703 {
fundokukiri 0:d05b765ea94c 704 uint64_t ret = 0;
fundokukiri 0:d05b765ea94c 705
fundokukiri 0:d05b765ea94c 706 switch(feature)
fundokukiri 0:d05b765ea94c 707 {
fundokukiri 0:d05b765ea94c 708 case CAMERA_BLACK_WHITE:
fundokukiri 0:d05b765ea94c 709 {
fundokukiri 0:d05b765ea94c 710 switch(value)
fundokukiri 0:d05b765ea94c 711 {
fundokukiri 0:d05b765ea94c 712 case CAMERA_BLACK_WHITE_BW:
fundokukiri 0:d05b765ea94c 713 {
fundokukiri 0:d05b765ea94c 714 ret = OV9655_BLACK_WHITE_BW;
fundokukiri 0:d05b765ea94c 715 break;
fundokukiri 0:d05b765ea94c 716 }
fundokukiri 0:d05b765ea94c 717 case CAMERA_BLACK_WHITE_NEGATIVE:
fundokukiri 0:d05b765ea94c 718 {
fundokukiri 0:d05b765ea94c 719 ret = OV9655_BLACK_WHITE_NEGATIVE;
fundokukiri 0:d05b765ea94c 720 break;
fundokukiri 0:d05b765ea94c 721 }
fundokukiri 0:d05b765ea94c 722 case CAMERA_BLACK_WHITE_BW_NEGATIVE:
fundokukiri 0:d05b765ea94c 723 {
fundokukiri 0:d05b765ea94c 724 ret = OV9655_BLACK_WHITE_BW_NEGATIVE;
fundokukiri 0:d05b765ea94c 725 break;
fundokukiri 0:d05b765ea94c 726 }
fundokukiri 0:d05b765ea94c 727 case CAMERA_BLACK_WHITE_NORMAL:
fundokukiri 0:d05b765ea94c 728 {
fundokukiri 0:d05b765ea94c 729 ret = OV9655_BLACK_WHITE_NORMAL;
fundokukiri 0:d05b765ea94c 730 break;
fundokukiri 0:d05b765ea94c 731 }
fundokukiri 0:d05b765ea94c 732 default:
fundokukiri 0:d05b765ea94c 733 {
fundokukiri 0:d05b765ea94c 734 ret = OV9655_BLACK_WHITE_NORMAL;
fundokukiri 0:d05b765ea94c 735 break;
fundokukiri 0:d05b765ea94c 736 }
fundokukiri 0:d05b765ea94c 737 }
fundokukiri 0:d05b765ea94c 738 break;
fundokukiri 0:d05b765ea94c 739 }
fundokukiri 0:d05b765ea94c 740 case CAMERA_CONTRAST_BRIGHTNESS:
fundokukiri 0:d05b765ea94c 741 {
fundokukiri 0:d05b765ea94c 742 switch(value)
fundokukiri 0:d05b765ea94c 743 {
fundokukiri 0:d05b765ea94c 744 case CAMERA_BRIGHTNESS_LEVEL0:
fundokukiri 0:d05b765ea94c 745 {
fundokukiri 0:d05b765ea94c 746 ret = OV9655_BRIGHTNESS_LEVEL0;
fundokukiri 0:d05b765ea94c 747 break;
fundokukiri 0:d05b765ea94c 748 }
fundokukiri 0:d05b765ea94c 749 case CAMERA_BRIGHTNESS_LEVEL1:
fundokukiri 0:d05b765ea94c 750 {
fundokukiri 0:d05b765ea94c 751 ret = OV9655_BRIGHTNESS_LEVEL1;
fundokukiri 0:d05b765ea94c 752 break;
fundokukiri 0:d05b765ea94c 753 }
fundokukiri 0:d05b765ea94c 754 case CAMERA_BRIGHTNESS_LEVEL2:
fundokukiri 0:d05b765ea94c 755 {
fundokukiri 0:d05b765ea94c 756 ret = OV9655_BRIGHTNESS_LEVEL2;
fundokukiri 0:d05b765ea94c 757 break;
fundokukiri 0:d05b765ea94c 758 }
fundokukiri 0:d05b765ea94c 759 case CAMERA_BRIGHTNESS_LEVEL3:
fundokukiri 0:d05b765ea94c 760 {
fundokukiri 0:d05b765ea94c 761 ret = OV9655_BRIGHTNESS_LEVEL3;
fundokukiri 0:d05b765ea94c 762 break;
fundokukiri 0:d05b765ea94c 763 }
fundokukiri 0:d05b765ea94c 764 case CAMERA_BRIGHTNESS_LEVEL4:
fundokukiri 0:d05b765ea94c 765 {
fundokukiri 0:d05b765ea94c 766 ret = OV9655_BRIGHTNESS_LEVEL4;
fundokukiri 0:d05b765ea94c 767 break;
fundokukiri 0:d05b765ea94c 768 }
fundokukiri 0:d05b765ea94c 769 case CAMERA_CONTRAST_LEVEL0:
fundokukiri 0:d05b765ea94c 770 {
fundokukiri 0:d05b765ea94c 771 ret = OV9655_CONTRAST_LEVEL0;
fundokukiri 0:d05b765ea94c 772 break;
fundokukiri 0:d05b765ea94c 773 }
fundokukiri 0:d05b765ea94c 774 case CAMERA_CONTRAST_LEVEL1:
fundokukiri 0:d05b765ea94c 775 {
fundokukiri 0:d05b765ea94c 776 ret = OV9655_CONTRAST_LEVEL1;
fundokukiri 0:d05b765ea94c 777 break;
fundokukiri 0:d05b765ea94c 778 }
fundokukiri 0:d05b765ea94c 779 case CAMERA_CONTRAST_LEVEL2:
fundokukiri 0:d05b765ea94c 780 {
fundokukiri 0:d05b765ea94c 781 ret = OV9655_CONTRAST_LEVEL2;
fundokukiri 0:d05b765ea94c 782 break;
fundokukiri 0:d05b765ea94c 783 }
fundokukiri 0:d05b765ea94c 784 case CAMERA_CONTRAST_LEVEL3:
fundokukiri 0:d05b765ea94c 785 {
fundokukiri 0:d05b765ea94c 786 ret = OV9655_CONTRAST_LEVEL3;
fundokukiri 0:d05b765ea94c 787 break;
fundokukiri 0:d05b765ea94c 788 }
fundokukiri 0:d05b765ea94c 789 case CAMERA_CONTRAST_LEVEL4:
fundokukiri 0:d05b765ea94c 790 {
fundokukiri 0:d05b765ea94c 791 ret = OV9655_CONTRAST_LEVEL4;
fundokukiri 0:d05b765ea94c 792 break;
fundokukiri 0:d05b765ea94c 793 }
fundokukiri 0:d05b765ea94c 794 default:
fundokukiri 0:d05b765ea94c 795 {
fundokukiri 0:d05b765ea94c 796 ret = OV9655_CONTRAST_LEVEL0;
fundokukiri 0:d05b765ea94c 797 break;
fundokukiri 0:d05b765ea94c 798 }
fundokukiri 0:d05b765ea94c 799 }
fundokukiri 0:d05b765ea94c 800 break;
fundokukiri 0:d05b765ea94c 801 }
fundokukiri 0:d05b765ea94c 802 case CAMERA_COLOR_EFFECT:
fundokukiri 0:d05b765ea94c 803 {
fundokukiri 0:d05b765ea94c 804 switch(value)
fundokukiri 0:d05b765ea94c 805 {
fundokukiri 0:d05b765ea94c 806 case CAMERA_COLOR_EFFECT_ANTIQUE:
fundokukiri 0:d05b765ea94c 807 {
fundokukiri 0:d05b765ea94c 808 ret = OV9655_COLOR_EFFECT_ANTIQUE;
fundokukiri 0:d05b765ea94c 809 break;
fundokukiri 0:d05b765ea94c 810 }
fundokukiri 0:d05b765ea94c 811 case CAMERA_COLOR_EFFECT_BLUE:
fundokukiri 0:d05b765ea94c 812 {
fundokukiri 0:d05b765ea94c 813 ret = OV9655_COLOR_EFFECT_BLUE;
fundokukiri 0:d05b765ea94c 814 break;
fundokukiri 0:d05b765ea94c 815 }
fundokukiri 0:d05b765ea94c 816 case CAMERA_COLOR_EFFECT_GREEN:
fundokukiri 0:d05b765ea94c 817 {
fundokukiri 0:d05b765ea94c 818 ret = OV9655_COLOR_EFFECT_GREEN;
fundokukiri 0:d05b765ea94c 819 break;
fundokukiri 0:d05b765ea94c 820 }
fundokukiri 0:d05b765ea94c 821 case CAMERA_COLOR_EFFECT_RED:
fundokukiri 0:d05b765ea94c 822 {
fundokukiri 0:d05b765ea94c 823 ret = OV9655_COLOR_EFFECT_RED;
fundokukiri 0:d05b765ea94c 824 break;
fundokukiri 0:d05b765ea94c 825 }
fundokukiri 0:d05b765ea94c 826 case CAMERA_COLOR_EFFECT_NONE:
fundokukiri 0:d05b765ea94c 827 default:
fundokukiri 0:d05b765ea94c 828 {
fundokukiri 0:d05b765ea94c 829 ret = OV9655_COLOR_EFFECT_NONE;
fundokukiri 0:d05b765ea94c 830 break;
fundokukiri 0:d05b765ea94c 831 }
fundokukiri 0:d05b765ea94c 832 }
fundokukiri 0:d05b765ea94c 833 break;
fundokukiri 0:d05b765ea94c 834 default:
fundokukiri 0:d05b765ea94c 835 {
fundokukiri 0:d05b765ea94c 836 ret = 0;
fundokukiri 0:d05b765ea94c 837 break;
fundokukiri 0:d05b765ea94c 838 }
fundokukiri 0:d05b765ea94c 839 }
fundokukiri 0:d05b765ea94c 840 }
fundokukiri 0:d05b765ea94c 841
fundokukiri 0:d05b765ea94c 842 return ret;
fundokukiri 0:d05b765ea94c 843 }
fundokukiri 0:d05b765ea94c 844
fundokukiri 0:d05b765ea94c 845 /**
fundokukiri 0:d05b765ea94c 846 * @}
fundokukiri 0:d05b765ea94c 847 */
fundokukiri 0:d05b765ea94c 848
fundokukiri 0:d05b765ea94c 849 /**
fundokukiri 0:d05b765ea94c 850 * @}
fundokukiri 0:d05b765ea94c 851 */
fundokukiri 0:d05b765ea94c 852
fundokukiri 0:d05b765ea94c 853 /**
fundokukiri 0:d05b765ea94c 854 * @}
fundokukiri 0:d05b765ea94c 855 */
fundokukiri 0:d05b765ea94c 856
fundokukiri 0:d05b765ea94c 857 /**
fundokukiri 0:d05b765ea94c 858 * @}
fundokukiri 0:d05b765ea94c 859 */
fundokukiri 0:d05b765ea94c 860
fundokukiri 0:d05b765ea94c 861 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/