1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
|
/*
* Copyright 2004-2008 Freescale Semiconductor, Inc. All Rights Reserved.
*/
/*
* The code contained herein is licensed under the GNU General Public
* License. You may obtain a copy of the GNU General Public License
* Version 2 or later at the following locations:
*
* http://www.opensource.org/licenses/gpl-license.html
* http://www.gnu.org/copyleft/gpl.html
*/
/*!
* @defgroup Camera Sensor Drivers
*/
/*!
* @file mt9v111.h
*
* @brief MT9V111 Camera Header file
*
* This header file contains defines and structures for the iMagic mi8012
* aka the Micron mt9v111 camera.
*
* @ingroup Camera
*/
#ifndef MT9V111_H_
#define MT9V111_H_
/*!
* Basic camera values
*/
#define MT9V111_FRAME_RATE 30
#define MT9V111_MCLK 27000000 /* Desired clock rate */
#define MT9V111_CLK_MIN 12000000 /* This clock rate yields 15 fps */
#define MT9V111_CLK_MAX 27000000
#define MT9V111_MAX_WIDTH 640 /* Max width for this camera */
#define MT9V111_MAX_HEIGHT 480 /* Max height for this camera */
/*!
* mt9v111 IFP REGISTER BANK MAP
*/
#define MT9V111I_ADDR_SPACE_SEL 0x1
#define MT9V111I_BASE_MAXTRIX_SIGN 0x2
#define MT9V111I_BASE_MAXTRIX_SCALE15 0x3
#define MT9V111I_BASE_MAXTRIX_SCALE69 0x4
#define MT9V111I_APERTURE_GAIN 0x5
#define MT9V111I_MODE_CONTROL 0x6
#define MT9V111I_SOFT_RESET 0x7
#define MT9V111I_FORMAT_CONTROL 0x8
#define MT9V111I_BASE_MATRIX_CFK1 0x9
#define MT9V111I_BASE_MATRIX_CFK2 0xa
#define MT9V111I_BASE_MATRIX_CFK3 0xb
#define MT9V111I_BASE_MATRIX_CFK4 0xc
#define MT9V111I_BASE_MATRIX_CFK5 0xd
#define MT9V111I_BASE_MATRIX_CFK6 0xe
#define MT9V111I_BASE_MATRIX_CFK7 0xf
#define MT9V111I_BASE_MATRIX_CFK8 0x10
#define MT9V111I_BASE_MATRIX_CFK9 0x11
#define MT9V111I_AWB_POSITION 0x12
#define MT9V111I_AWB_RED_GAIN 0x13
#define MT9V111I_AWB_BLUE_GAIN 0x14
#define MT9V111I_DELTA_MATRIX_CF_SIGN 0x15
#define MT9V111I_DELTA_MATRIX_CF_D1 0x16
#define MT9V111I_DELTA_MATRIX_CF_D2 0x17
#define MT9V111I_DELTA_MATRIX_CF_D3 0x18
#define MT9V111I_DELTA_MATRIX_CF_D4 0x19
#define MT9V111I_DELTA_MATRIX_CF_D5 0x1a
#define MT9V111I_DELTA_MATRIX_CF_D6 0x1b
#define MT9V111I_DELTA_MATRIX_CF_D7 0x1c
#define MT9V111I_DELTA_MATRIX_CF_D8 0x1d
#define MT9V111I_DELTA_MATRIX_CF_D9 0x1e
#define MT9V111I_LUMINANCE_LIMIT_WB 0x20
#define MT9V111I_RBG_MANUUAL_WB 0x21
#define MT9V111I_AWB_RED_LIMIT 0x22
#define MT9V111I_AWB_BLUE_LIMIT 0x23
#define MT9V111I_MATRIX_ADJUST_LIMIT 0x24
#define MT9V111I_AWB_SPEED 0x25
#define MT9V111I_H_BOUND_AE 0x26
#define MT9V111I_V_BOUND_AE 0x27
#define MT9V111I_H_BOUND_AE_CEN_WIN 0x2b
#define MT9V111I_V_BOUND_AE_CEN_WIN 0x2c
#define MT9V111I_BOUND_AWB_WIN 0x2d
#define MT9V111I_AE_PRECISION_TARGET 0x2e
#define MT9V111I_AE_SPEED 0x2f
#define MT9V111I_RED_AWB_MEASURE 0x30
#define MT9V111I_LUMA_AWB_MEASURE 0x31
#define MT9V111I_BLUE_AWB_MEASURE 0x32
#define MT9V111I_LIMIT_SHARP_SATU_CTRL 0x33
#define MT9V111I_LUMA_OFFSET 0x34
#define MT9V111I_CLIP_LIMIT_OUTPUT_LUMI 0x35
#define MT9V111I_GAIN_LIMIT_AE 0x36
#define MT9V111I_SHUTTER_WIDTH_LIMIT_AE 0x37
#define MT9V111I_UPPER_SHUTTER_DELAY_LIM 0x39
#define MT9V111I_OUTPUT_FORMAT_CTRL2 0x3a
#define MT9V111I_IPF_BLACK_LEVEL_SUB 0x3b
#define MT9V111I_IPF_BLACK_LEVEL_ADD 0x3c
#define MT9V111I_ADC_LIMIT_AE_ADJ 0x3d
#define MT9V111I_GAIN_THRE_CCAM_ADJ 0x3e
#define MT9V111I_LINEAR_AE 0x3f
#define MT9V111I_THRESHOLD_EDGE_DEFECT 0x47
#define MT9V111I_LUMA_SUM_MEASURE 0x4c
#define MT9V111I_TIME_ADV_SUM_LUMA 0x4d
#define MT9V111I_MOTION 0x52
#define MT9V111I_GAMMA_KNEE_Y12 0x53
#define MT9V111I_GAMMA_KNEE_Y34 0x54
#define MT9V111I_GAMMA_KNEE_Y56 0x55
#define MT9V111I_GAMMA_KNEE_Y78 0x56
#define MT9V111I_GAMMA_KNEE_Y90 0x57
#define MT9V111I_GAMMA_VALUE_Y0 0x58
#define MT9V111I_SHUTTER_60 0x59
#define MT9V111I_AUTO_EXPOSURE_17 0x5A
#define MT9V111I_SEARCH_FLICK_60 0x5c
#define MT9V111I_RESERVED93 0x5d
#define MT9V111I_RATIO_IMAGE_GAIN_BASE 0x5e
#define MT9V111I_RATIO_IMAGE_GAIN_DELTA 0x5f
#define MT9V111I_SIGN_VALUE_REG5F 0x60
#define MT9V111I_AE_GAIN 0x62
#define MT9V111I_RESERVED100 0x64
#define MT9V111I_MAX_GAIN_AE 0x67
#define MT9V111I_LENS_CORRECT_CTRL 0x80
#define MT9V111I_SHADING_PARAMETER1 0x81
#define MT9V111I_SHADING_PARAMETER2 0x82
#define MT9V111I_SHADING_PARAMETER3 0x83
#define MT9V111I_SHADING_PARAMETER4 0x84
#define MT9V111I_SHADING_PARAMETER5 0x85
#define MT9V111I_SHADING_PARAMETER6 0x86
#define MT9V111I_SHADING_PARAMETER7 0x87
#define MT9V111I_SHADING_PARAMETER8 0x88
#define MT9V111I_SHADING_PARAMETER9 0x89
#define MT9V111I_SHADING_PARAMETER10 0x8A
#define MT9V111I_SHADING_PARAMETER11 0x8B
#define MT9V111I_SHADING_PARAMETER12 0x8C
#define MT9V111I_SHADING_PARAMETER13 0x8D
#define MT9V111I_SHADING_PARAMETER14 0x8E
#define MT9V111I_SHADING_PARAMETER15 0x8F
#define MT9V111I_SHADING_PARAMETER16 0x90
#define MT9V111I_SHADING_PARAMETER17 0x91
#define MT9V111I_SHADING_PARAMETER18 0x92
#define MT9V111I_SHADING_PARAMETER19 0x93
#define MT9V111I_SHADING_PARAMETER20 0x94
#define MT9V111I_SHADING_PARAMETER21 0x95
#define MT9V111i_FLASH_CTRL 0x98
#define MT9V111i_LINE_COUNTER 0x99
#define MT9V111i_FRAME_COUNTER 0x9A
#define MT9V111i_H_PAN 0xA5
#define MT9V111i_H_ZOOM 0xA6
#define MT9V111i_H_SIZE 0xA7
#define MT9V111i_V_PAN 0xA8
#define MT9V111i_V_ZOOM 0xA9
#define MT9V111i_V_SIZE 0xAA
#define MT9V111I_SEL_IFP 0x1
#define MT9V111I_SEL_SCA 0x4
#define MT9V111I_FC_RGB_OR_YUV 0x1000
/*!
* Mt9v111 SENSOR CORE REGISTER BANK MAP
*/
#define MT9V111S_ADDR_SPACE_SEL 0x1
#define MT9V111S_COLUMN_START 0x2
#define MT9V111S_WIN_HEIGHT 0x3
#define MT9V111S_WIN_WIDTH 0x4
#define MT9V111S_HOR_BLANKING 0x5
#define MT9V111S_VER_BLANKING 0x6
#define MT9V111S_OUTPUT_CTRL 0x7
#define MT9V111S_ROW_START 0x8
#define MT9V111S_SHUTTER_WIDTH 0x9
#define MT9V111S_PIXEL_CLOCK_SPEED 0xa
#define MT9V111S_RESTART 0xb
#define MT9V111S_SHUTTER_DELAY 0xc
#define MT9V111S_RESET 0xd
#define MT9V111S_COLUMN_START_IN_ZOOM 0x12
#define MT9V111S_ROW_START_IN_ZOOM 0x13
#define MT9V111S_DIGITAL_ZOOM 0x1e
#define MT9V111S_READ_MODE 0x20
#define MT9V111S_RESERVED33 0x21
#define MT9V111S_DAC_CTRL 0x27
#define MT9V111S_GREEN1_GAIN 0x2b
#define MT9V111S_BLUE_GAIN 0x2c
#define MT9V111S_READ_GAIN 0x2d
#define MT9V111S_GREEN2_GAIN 0x2e
#define MT9V111S_ROW_NOISE_CTRL 0x30
#define MT9V111S_DARK_TARGET_W 0x31
#define MT9V111S_TEST_DATA 0x32
#define MT9V111S_GLOBAL_GAIN 0x35
#define MT9V111S_SENSOR_CORE_VERSION 0x36
#define MT9V111S_DARK_TARGET_WO 0x37
#define MT9V111S_VERF_DAC 0x41
#define MT9V111S_VCM_VCL 0x42
#define MT9V111S_DISABLE_BYPASS 0x58
#define MT9V111S_CALIB_MEAN_TEST 0x59
#define MT9V111S_DARK_G1_AVE 0x5B
#define MT9V111S_DARK_G2_AVE 0x5C
#define MT9V111S_DARK_R_AVE 0x5D
#define MT9V111S_DARK_B_AVE 0x5E
#define MT9V111S_CAL_THRESHOLD 0x5f
#define MT9V111S_CAL_G1 0x60
#define MT9V111S_CAL_G2 0x61
#define MT9V111S_CAL_CTRL 0x62
#define MT9V111S_CAL_R 0x63
#define MT9V111S_CAL_B 0x64
#define MT9V111S_CHIP_ENABLE 0xF1
#define MT9V111S_CHIP_VERSION 0xFF
/* OUTPUT_CTRL */
#define MT9V111S_OUTCTRL_SYNC 0x1
#define MT9V111S_OUTCTRL_CHIP_ENABLE 0x2
#define MT9V111S_OUTCTRL_TEST_MODE 0x40
/* READ_MODE */
#define MT9V111S_RM_NOBADFRAME 0x1
#define MT9V111S_RM_NODESTRUCT 0x2
#define MT9V111S_RM_COLUMNSKIP 0x4
#define MT9V111S_RM_ROWSKIP 0x8
#define MT9V111S_RM_BOOSTEDRESET 0x1000
#define MT9V111S_RM_COLUMN_LATE 0x10
#define MT9V111S_RM_ROW_LATE 0x80
#define MT9V111S_RM_RIGTH_TO_LEFT 0x4000
#define MT9V111S_RM_BOTTOM_TO_TOP 0x8000
/*! I2C Slave Address */
#define MT9V111_I2C_ADDRESS 0x48
/*!
* The image resolution enum for the mt9v111 sensor
*/
typedef enum {
MT9V111_OutputResolution_VGA = 0, /*!< VGA size */
MT9V111_OutputResolution_QVGA, /*!< QVGA size */
MT9V111_OutputResolution_CIF, /*!< CIF size */
MT9V111_OutputResolution_QCIF, /*!< QCIF size */
MT9V111_OutputResolution_QQVGA, /*!< QQVGA size */
MT9V111_OutputResolution_SXGA /*!< SXGA size */
} MT9V111_OutputResolution;
enum {
MT9V111_WINWIDTH = 0x287,
MT9V111_WINWIDTH_DEFAULT = 0x287,
MT9V111_WINWIDTH_MIN = 0x9,
MT9V111_WINHEIGHT = 0x1E7,
MT9V111_WINHEIGHT_DEFAULT = 0x1E7,
MT9V111_HORZBLANK_DEFAULT = 0x26,
MT9V111_HORZBLANK_MIN = 0x9,
MT9V111_HORZBLANK_MAX = 0x3FF,
MT9V111_VERTBLANK_DEFAULT = 0x4,
MT9V111_VERTBLANK_MIN = 0x3,
MT9V111_VERTBLANK_MAX = 0xFFF,
};
/*!
* Mt9v111 Core Register structure.
*/
typedef struct {
u32 addressSelect; /*!< select address bank for Core Register 0x4 */
u32 columnStart; /*!< Starting Column */
u32 windowHeight; /*!< Window Height */
u32 windowWidth; /*!< Window Width */
u32 horizontalBlanking; /*!< Horizontal Blank time, in pixels */
u32 verticalBlanking; /*!< Vertical Blank time, in pixels */
u32 outputControl; /*!< Register to control sensor output */
u32 rowStart; /*!< Starting Row */
u32 shutterWidth;
u32 pixelClockSpeed; /*!< pixel date rate */
u32 restart; /*!< Abandon the readout of current frame */
u32 shutterDelay;
u32 reset; /*!< reset the sensor to the default mode */
u32 zoomColStart; /*!< Column start in the Zoom mode */
u32 zomRowStart; /*!< Row start in the Zoom mode */
u32 digitalZoom; /*!< 1 means zoom by 2 */
u32 readMode; /*!< Readmode: aspects of the readout of the sensor */
u32 dACStandbyControl;
u32 green1Gain; /*!< Gain Settings */
u32 blueGain;
u32 redGain;
u32 green2Gain;
u32 rowNoiseControl;
u32 darkTargetwNC;
u32 testData; /*!< test mode */
u32 reserved33;
u32 globalGain;
u32 chipVersion;
u32 darkTargetwoNC;
u32 vREFDACs;
u32 vCMandVCL;
u32 disableBypass;
u32 calibMeanTest;
u32 darkG1average;
u32 darkG2average;
u32 darkRaverage;
u32 darkBaverage;
u32 calibThreshold;
u32 calibGreen1;
u32 calibGreen2;
u32 calibControl;
u32 calibRed;
u32 calibBlue;
u32 chipEnable; /*!< Image core Registers written by image flow processor */
} mt9v111_coreReg;
/*!
* Mt9v111 IFP Register structure.
*/
typedef struct {
u32 addrSpaceSel; /*!< select address bank for Core Register 0x1 */
u32 baseMaxtrixSign; /*!< sign of coefficient for base color correction matrix */
u32 baseMaxtrixScale15; /*!< scaling of color correction coefficient K1-5 */
u32 baseMaxtrixScale69; /*!< scaling of color correction coefficient K6-9 */
u32 apertureGain; /*!< sharpening */
u32 modeControl; /*!< bit 7 CCIR656 sync codes are embedded in the image */
u32 softReset; /*!< Image processing mode: 1 reset mode, 0 operational mode */
u32 formatControl; /*!< bit12 1 for RGB565, 0 for YcrCb */
u32 baseMatrixCfk1; /*!< K1 Color correction coefficient */
u32 baseMatrixCfk2; /*!< K2 Color correction coefficient */
u32 baseMatrixCfk3; /*!< K3 Color correction coefficient */
u32 baseMatrixCfk4; /*!< K4 Color correction coefficient */
u32 baseMatrixCfk5; /*!< K5 Color correction coefficient */
u32 baseMatrixCfk6; /*!< K6 Color correction coefficient */
u32 baseMatrixCfk7; /*!< K7 Color correction coefficient */
u32 baseMatrixCfk8; /*!< K8 Color correction coefficient */
u32 baseMatrixCfk9; /*!< K9 Color correction coefficient */
u32 awbPosition; /*!< Current position of AWB color correction matrix */
u32 awbRedGain; /*!< Current value of AWB red channel gain */
u32 awbBlueGain; /*!< Current value of AWB blue channel gain */
u32 deltaMatrixCFSign; /*!< Sign of coefficients of delta color correction matrix register */
u32 deltaMatrixCFD1; /*!< D1 Delta coefficient */
u32 deltaMatrixCFD2; /*!< D2 Delta coefficient */
u32 deltaMatrixCFD3; /*!< D3 Delta coefficient */
u32 deltaMatrixCFD4; /*!< D4 Delta coefficient */
u32 deltaMatrixCFD5; /*!< D5 Delta coefficient */
u32 deltaMatrixCFD6; /*!< D6 Delta coefficient */
u32 deltaMatrixCFD7; /*!< D7 Delta coefficient */
u32 deltaMatrixCFD8; /*!< D8 Delta coefficient */
u32 deltaMatrixCFD9; /*!< D9 Delta coefficient */
u32 lumLimitWB; /*!< Luminance range of pixels considered in WB statistics */
u32 RBGManualWB; /*!< Red and Blue color channel gains for manual white balance */
u32 awbRedLimit; /*!< Limits on Red channel gain adjustment through AWB */
u32 awbBlueLimit; /*!< Limits on Blue channel gain adjustment through AWB */
u32 matrixAdjLimit; /*!< Limits on color correction matrix adjustment through AWB */
u32 awbSpeed; /*!< AWB speed and color saturation control */
u32 HBoundAE; /*!< Horizontal boundaries of AWB measurement window */
u32 VBoundAE; /*!< Vertical boundaries of AWB measurement window */
u32 HBoundAECenWin; /*!< Horizontal boundaries of AE measurement window for backlight compensation */
u32 VBoundAECenWin; /*!< Vertical boundaries of AE measurement window for backlight compensation */
u32 boundAwbWin; /*!< Boundaries of AWB measurement window */
u32 AEPrecisionTarget; /*!< Auto exposure target and precision control */
u32 AESpeed; /*!< AE speed and sensitivity control register */
u32 redAWBMeasure; /*!< Measure of the red channel value used by AWB */
u32 lumaAWBMeasure; /*!< Measure of the luminance channel value used by AWB */
u32 blueAWBMeasure; /*!< Measure of the blue channel value used by AWB */
u32 limitSharpSatuCtrl; /*!< Automatic control of sharpness and color saturation */
u32 lumaOffset; /*!< Luminance offset control (brightness control) */
u32 clipLimitOutputLumi; /*!< Clipping limits for output luminance */
u32 gainLimitAE; /*!< Imager gain limits for AE adjustment */
u32 shutterWidthLimitAE; /*!< Shutter width (exposure time) limits for AE adjustment */
u32 upperShutterDelayLi; /*!< Upper Shutter Delay Limit */
u32 outputFormatCtrl2; /*!< Output Format Control 2
00 = 16-bit RGB565.
01 = 15-bit RGB555.
10 = 12-bit RGB444x.
11 = 12-bit RGBx444. */
u32 ipfBlackLevelSub; /*!< IFP black level subtraction */
u32 ipfBlackLevelAdd; /*!< IFP black level addition */
u32 adcLimitAEAdj; /*!< ADC limits for AE adjustment */
u32 agimnThreCamAdj; /*!< Gain threshold for CCM adjustment */
u32 linearAE;
u32 thresholdEdgeDefect; /*!< Edge threshold for interpolation and defect correction */
u32 lumaSumMeasure; /*!< Luma measured by AE engine */
u32 timeAdvSumLuma; /*!< Time-averaged luminance value tracked by auto exposure */
u32 motion; /*!< 1 when motion is detected */
u32 gammaKneeY12; /*!< Gamma knee points Y1 and Y2 */
u32 gammaKneeY34; /*!< Gamma knee points Y3 and Y4 */
u32 gammaKneeY56; /*!< Gamma knee points Y5 and Y6 */
u32 gammaKneeY78; /*!< Gamma knee points Y7 and Y8 */
u32 gammaKneeY90; /*!< Gamma knee points Y9 and Y10 */
u32 gammaKneeY0; /*!< Gamma knee point Y0 */
u32 shutter_width_60;
u32 auto_exposure_17;
u32 search_flicker_60;
u32 reserved93;
u32 ratioImageGainBase;
u32 ratioImageGainDelta;
u32 signValueReg5F;
u32 aeGain;
u32 reserved100;
u32 maxGainAE;
u32 lensCorrectCtrl;
u32 shadingParameter1; /*!< Shade Parameters */
u32 shadingParameter2;
u32 shadingParameter3;
u32 shadingParameter4;
u32 shadingParameter5;
u32 shadingParameter6;
u32 shadingParameter7;
u32 shadingParameter8;
u32 shadingParameter9;
u32 shadingParameter10;
u32 shadingParameter11;
u32 shadingParameter12;
u32 shadingParameter13;
u32 shadingParameter14;
u32 shadingParameter15;
u32 shadingParameter16;
u32 shadingParameter17;
u32 shadingParameter18;
u32 shadingParameter19;
u32 shadingParameter20;
u32 shadingParameter21;
u32 flashCtrl; /*!< Flash control */
u32 lineCounter; /*!< Line counter */
u32 frameCounter; /*!< Frame counter */
u32 HPan; /*!< Horizontal pan in decimation */
u32 HZoom; /*!< Horizontal zoom in decimation */
u32 HSize; /*!< Horizontal output size iIn decimation */
u32 VPan; /*!< Vertical pan in decimation */
u32 VZoom; /*!< Vertical zoom in decimation */
u32 VSize; /*!< Vertical output size in decimation */
} mt9v111_IFPReg;
/*!
* mt9v111 Config structure
*/
typedef struct {
mt9v111_coreReg *coreReg; /*!< Sensor Core Register Bank */
mt9v111_IFPReg *ifpReg; /*!< IFP Register Bank */
} mt9v111_conf;
typedef struct {
u8 index;
u16 width;
u16 height;
} mt9v111_image_format;
#endif /* MT9V111_H_ */
|