bx-cam

Dependencies:   mbed-rtos mbed

Fork of rtos_basic by mbed official

Committer:
backman
Date:
Tue Jul 08 06:21:37 2014 +0000
Revision:
8:025a9d74a731
Parent:
7:f990f03bc2b2
wang

Who changed what in which revision?

UserRevisionLine numberNew contents of line
backman 7:f990f03bc2b2 1
backman 7:f990f03bc2b2 2 #include "ov7670.h"
backman 7:f990f03bc2b2 3
backman 7:f990f03bc2b2 4
backman 7:f990f03bc2b2 5
backman 7:f990f03bc2b2 6
backman 7:f990f03bc2b2 7 //i2c data i2c clk //ver //her //write enable //data //reset //chip en //clock
backman 8:025a9d74a731 8 OV7670::OV7670(PinName sda, PinName scl, PinName vs, PinName hr, PinName we, PinName d7, PinName d6,PinName d5,PinName d4, PinName d3, PinName d2, PinName d1, PinName d0, PinName rt, PinName o, PinName rc): _i2c(sda,scl),vsync(vs),href(hr),wen(we),data(d0,d1,d2,d3,d4,d5,d6,d7),rrst(rt),oe(o),rclk(rc)
backman 7:f990f03bc2b2 9 {
backman 7:f990f03bc2b2 10
backman 8:025a9d74a731 11
backman 7:f990f03bc2b2 12
backman 7:f990f03bc2b2 13 _i2c.stop();
backman 7:f990f03bc2b2 14 _i2c.frequency(OV7670_I2CFREQ);
backman 7:f990f03bc2b2 15 vsync.fall(this,&OV7670::VsyncHandler); // interrupt fall edge
backman 7:f990f03bc2b2 16 CaptureReq = false;
backman 7:f990f03bc2b2 17 Busy = false;
backman 7:f990f03bc2b2 18 Done = false;
backman 7:f990f03bc2b2 19 LineCounter = 0;
backman 7:f990f03bc2b2 20
backman 7:f990f03bc2b2 21 rrst = 1;
backman 7:f990f03bc2b2 22 oe = 1;
backman 7:f990f03bc2b2 23 rclk = 1;
backman 7:f990f03bc2b2 24 wen = 0;
backman 8:025a9d74a731 25
backman 7:f990f03bc2b2 26
backman 7:f990f03bc2b2 27 }
backman 7:f990f03bc2b2 28
backman 7:f990f03bc2b2 29
backman 8:025a9d74a731 30
backman 7:f990f03bc2b2 31 OV7670::~OV7670()
backman 7:f990f03bc2b2 32 {
backman 7:f990f03bc2b2 33
backman 7:f990f03bc2b2 34 }
backman 7:f990f03bc2b2 35
backman 7:f990f03bc2b2 36
backman 7:f990f03bc2b2 37 // capture request
backman 7:f990f03bc2b2 38 void OV7670::CaptureNext(void)
backman 7:f990f03bc2b2 39 {
backman 7:f990f03bc2b2 40 CaptureReq = true;
backman 7:f990f03bc2b2 41 Busy = true;
backman 7:f990f03bc2b2 42 }
backman 7:f990f03bc2b2 43
backman 7:f990f03bc2b2 44
backman 7:f990f03bc2b2 45 // capture done? (with clear)
backman 7:f990f03bc2b2 46 bool OV7670::CaptureDone(void)
backman 7:f990f03bc2b2 47 {
backman 7:f990f03bc2b2 48 bool result;
backman 7:f990f03bc2b2 49 if (Busy)
backman 7:f990f03bc2b2 50 {
backman 7:f990f03bc2b2 51 result = false;
backman 7:f990f03bc2b2 52 }else
backman 7:f990f03bc2b2 53 {
backman 7:f990f03bc2b2 54 result = Done;
backman 7:f990f03bc2b2 55 Done = false;
backman 7:f990f03bc2b2 56 }
backman 7:f990f03bc2b2 57 return result;
backman 7:f990f03bc2b2 58 }
backman 7:f990f03bc2b2 59
backman 7:f990f03bc2b2 60
backman 7:f990f03bc2b2 61 // vsync handler
backman 7:f990f03bc2b2 62 void OV7670::VsyncHandler(void)
backman 7:f990f03bc2b2 63 {
backman 7:f990f03bc2b2 64 // Capture Enable
backman 7:f990f03bc2b2 65 if (CaptureReq)
backman 7:f990f03bc2b2 66 {
backman 7:f990f03bc2b2 67 wen = 1;
backman 7:f990f03bc2b2 68 Done = false;
backman 7:f990f03bc2b2 69 CaptureReq = false;
backman 7:f990f03bc2b2 70 }else
backman 7:f990f03bc2b2 71 {
backman 7:f990f03bc2b2 72 wen = 0;
backman 7:f990f03bc2b2 73 if (Busy)
backman 7:f990f03bc2b2 74 {
backman 7:f990f03bc2b2 75 Busy = false;
backman 7:f990f03bc2b2 76 Done = true;
backman 7:f990f03bc2b2 77 }
backman 7:f990f03bc2b2 78 }
backman 7:f990f03bc2b2 79 }
backman 7:f990f03bc2b2 80
backman 7:f990f03bc2b2 81
backman 7:f990f03bc2b2 82 // Data Read
backman 7:f990f03bc2b2 83 int OV7670::ReadOnebyte(void)
backman 7:f990f03bc2b2 84 {
backman 8:025a9d74a731 85 char B1;
backman 7:f990f03bc2b2 86 rclk = 1;
backman 8:025a9d74a731 87 // B1 = (((data&0x07800000)>>19)|((data&0x078000)>>15));
backman 8:025a9d74a731 88 B1 = data;
backman 8:025a9d74a731 89
backman 7:f990f03bc2b2 90 rclk = 0;
backman 7:f990f03bc2b2 91 return B1;
backman 7:f990f03bc2b2 92 }
backman 7:f990f03bc2b2 93
backman 7:f990f03bc2b2 94
backman 7:f990f03bc2b2 95 // Data Start read from FIFO
backman 7:f990f03bc2b2 96 void OV7670::ReadStart(void)
backman 7:f990f03bc2b2 97 {
backman 7:f990f03bc2b2 98 rrst = 0;
backman 7:f990f03bc2b2 99 oe = 0;
backman 7:f990f03bc2b2 100 wait_us(1);
backman 7:f990f03bc2b2 101 rclk = 0;
backman 7:f990f03bc2b2 102 wait_us(1);
backman 7:f990f03bc2b2 103 rclk = 1;
backman 7:f990f03bc2b2 104 wait_us(1);
backman 7:f990f03bc2b2 105 rrst = 1;
backman 7:f990f03bc2b2 106 }
backman 7:f990f03bc2b2 107
backman 7:f990f03bc2b2 108
backman 7:f990f03bc2b2 109 // Data Stop read from FIFO
backman 7:f990f03bc2b2 110 void OV7670::ReadStop(void)
backman 7:f990f03bc2b2 111 {
backman 7:f990f03bc2b2 112 oe = 1;
backman 7:f990f03bc2b2 113 ReadOnebyte();
backman 7:f990f03bc2b2 114 rclk = 1;
backman 7:f990f03bc2b2 115 }
backman 7:f990f03bc2b2 116
backman 7:f990f03bc2b2 117
backman 7:f990f03bc2b2 118 void OV7670::Reset(void)
backman 7:f990f03bc2b2 119 {
backman 7:f990f03bc2b2 120 WriteReg(0x12, 0x80); // RESET CAMERA
backman 7:f990f03bc2b2 121 wait_ms(200);
backman 7:f990f03bc2b2 122 }
backman 7:f990f03bc2b2 123
backman 7:f990f03bc2b2 124
backman 7:f990f03bc2b2 125 int OV7670::Init(char c, int n)
backman 7:f990f03bc2b2 126 {
backman 7:f990f03bc2b2 127 if(c == 'b' || c == 'y') // YUV
backman 7:f990f03bc2b2 128 {
backman 7:f990f03bc2b2 129 format_temp = "BAW";
backman 7:f990f03bc2b2 130 }
backman 7:f990f03bc2b2 131 else
backman 7:f990f03bc2b2 132 if(c == 'r') // RGB565
backman 7:f990f03bc2b2 133 {
backman 7:f990f03bc2b2 134 format_temp = "RGB";
backman 7:f990f03bc2b2 135 }
backman 7:f990f03bc2b2 136 return Init(format_temp, n);
backman 7:f990f03bc2b2 137 }
backman 7:f990f03bc2b2 138
backman 7:f990f03bc2b2 139
backman 7:f990f03bc2b2 140 int OV7670::Init(char *format, int n)
backman 7:f990f03bc2b2 141 {
backman 7:f990f03bc2b2 142
backman 7:f990f03bc2b2 143 if (ReadReg(REG_PID) != 0x76) // check id camera
backman 7:f990f03bc2b2 144 {
backman 7:f990f03bc2b2 145 return 0;
backman 7:f990f03bc2b2 146 }
backman 7:f990f03bc2b2 147
backman 7:f990f03bc2b2 148
backman 7:f990f03bc2b2 149
backman 7:f990f03bc2b2 150 Reset(); // Resets all registers to default values
backman 7:f990f03bc2b2 151 Reset(); // Resets all registers to default values
backman 7:f990f03bc2b2 152
backman 7:f990f03bc2b2 153 WriteReg(REG_RGB444, 0x00); // Disable RGB444
backman 7:f990f03bc2b2 154 WriteReg(REG_COM10, 0x02); // 0x02 VSYNC negative (http://nasulica.homelinux.org/?p=959)
backman 7:f990f03bc2b2 155 WriteReg(REG_MVFP, 0x27); // mirror image
backman 7:f990f03bc2b2 156
backman 7:f990f03bc2b2 157 WriteReg(REG_CLKRC, 0x80); // prescaler x1
backman 7:f990f03bc2b2 158 WriteReg(DBLV, 0x0a); // bypass PLL
backman 7:f990f03bc2b2 159
backman 7:f990f03bc2b2 160 WriteReg(REG_COM11, 0x0A) ;
backman 7:f990f03bc2b2 161 WriteReg(REG_TSLB, 0x04); // 0D = UYVY 04 = YUYV
backman 7:f990f03bc2b2 162 WriteReg(REG_COM13, 0x88); // connect to REG_TSLB
backman 7:f990f03bc2b2 163
backman 7:f990f03bc2b2 164
backman 7:f990f03bc2b2 165 if((strcmp("BAW", format) == 0) || (strcmp("YUV", format) == 0)|| (strcmp("RAW", format) == 0)) // YUV
backman 7:f990f03bc2b2 166 {
backman 7:f990f03bc2b2 167 WriteReg(REG_COM7, 0x00); // YUV
backman 7:f990f03bc2b2 168 WriteReg(REG_COM17, 0x00); // color bar disable
backman 7:f990f03bc2b2 169 WriteReg(REG_COM3, 0x04);
backman 7:f990f03bc2b2 170 WriteReg(REG_COM15, 0xC0); // Set normal rgb with Full range
backman 7:f990f03bc2b2 171
backman 7:f990f03bc2b2 172 }else
backman 7:f990f03bc2b2 173 if((strcmp("RGB", format) == 0)) // RGB565
backman 7:f990f03bc2b2 174 {
backman 7:f990f03bc2b2 175 WriteReg(REG_COM7, 0x04); // RGB + color bar disable
backman 7:f990f03bc2b2 176 WriteReg(REG_RGB444, 0x00); // Disable RGB444
backman 7:f990f03bc2b2 177 WriteReg(REG_COM15, 0x10); // Set rgb565 with Full range 0xD0
backman 7:f990f03bc2b2 178 WriteReg(REG_COM3, 0x04);
backman 7:f990f03bc2b2 179 WriteReg(REG_CLKRC, 0x80); // prescaler x1
backman 7:f990f03bc2b2 180 }
backman 7:f990f03bc2b2 181
backman 7:f990f03bc2b2 182 WriteReg(0x70, 0x3A); // Scaling Xsc
backman 7:f990f03bc2b2 183 WriteReg(0x71, 0x35); // Scaling Ysc
backman 7:f990f03bc2b2 184 WriteReg(0xA2, 0x02); // pixel clock delay
backman 7:f990f03bc2b2 185
backman 7:f990f03bc2b2 186 if(n == 19200) // 160*120
backman 7:f990f03bc2b2 187 {
backman 7:f990f03bc2b2 188 WriteReg(REG_COM14, 0x1a); // divide by 4
backman 7:f990f03bc2b2 189 WriteReg(0x72, 0x22); // downsample by 4
backman 7:f990f03bc2b2 190 WriteReg(0x73, 0xf2); // divide by 4
backman 7:f990f03bc2b2 191 WriteReg(REG_HREF, 0xa4);
backman 7:f990f03bc2b2 192 WriteReg(REG_HSTART, 0x16);
backman 7:f990f03bc2b2 193 WriteReg(REG_HSTOP, 0x04);
backman 7:f990f03bc2b2 194 WriteReg(REG_VREF, 0x0a);
backman 7:f990f03bc2b2 195 WriteReg(REG_VSTART, 0x02);
backman 7:f990f03bc2b2 196 WriteReg(REG_VSTOP, 0x7a);
backman 7:f990f03bc2b2 197
backman 7:f990f03bc2b2 198 WriteReg(0x7a, 0x20);
backman 7:f990f03bc2b2 199 WriteReg(0x7b, 0x1c);
backman 7:f990f03bc2b2 200 WriteReg(0x7c, 0x28);
backman 7:f990f03bc2b2 201 WriteReg(0x7d, 0x3c);
backman 7:f990f03bc2b2 202 WriteReg(0x7e, 0x5a);
backman 7:f990f03bc2b2 203 WriteReg(0x7f, 0x68);
backman 7:f990f03bc2b2 204 WriteReg(0x80, 0x76);
backman 7:f990f03bc2b2 205 WriteReg(0x81, 0x80);
backman 7:f990f03bc2b2 206 WriteReg(0x82, 0x88);
backman 7:f990f03bc2b2 207 WriteReg(0x83, 0x8f);
backman 7:f990f03bc2b2 208 WriteReg(0x84, 0x96);
backman 7:f990f03bc2b2 209 WriteReg(0x85, 0xa3);
backman 7:f990f03bc2b2 210 WriteReg(0x86, 0xaf);
backman 7:f990f03bc2b2 211 WriteReg(0x87, 0xc4);
backman 7:f990f03bc2b2 212 WriteReg(0x88, 0xd7);
backman 7:f990f03bc2b2 213 WriteReg(0x89, 0xe8);
backman 7:f990f03bc2b2 214
backman 7:f990f03bc2b2 215 WriteReg(0x13, 0xe0);
backman 7:f990f03bc2b2 216 WriteReg(0x00, 0x00);
backman 7:f990f03bc2b2 217 WriteReg(0x10, 0x00);
backman 7:f990f03bc2b2 218 WriteReg(0x0d, 0x40);
backman 7:f990f03bc2b2 219 WriteReg(0x14, 0x18);
backman 7:f990f03bc2b2 220 WriteReg(0xa5, 0x05);
backman 7:f990f03bc2b2 221 WriteReg(0xab, 0x07);
backman 7:f990f03bc2b2 222 WriteReg(0x24, 0x95);
backman 7:f990f03bc2b2 223 WriteReg(0x25, 0x33);
backman 7:f990f03bc2b2 224 WriteReg(0x26, 0xe3);
backman 7:f990f03bc2b2 225 WriteReg(0x9f, 0x78);
backman 7:f990f03bc2b2 226 WriteReg(0xa0, 0x68);
backman 7:f990f03bc2b2 227 WriteReg(0xa1, 0x03);
backman 7:f990f03bc2b2 228 WriteReg(0xa6, 0xd8);
backman 7:f990f03bc2b2 229 WriteReg(0xa7, 0xd8);
backman 7:f990f03bc2b2 230 WriteReg(0xa8, 0xf0);
backman 7:f990f03bc2b2 231 WriteReg(0xa9, 0x90);
backman 7:f990f03bc2b2 232 WriteReg(0xaa, 0x94);
backman 7:f990f03bc2b2 233 WriteReg(0x13, 0xe5);
backman 7:f990f03bc2b2 234
backman 7:f990f03bc2b2 235 WriteReg(0x0e, 0x61);
backman 7:f990f03bc2b2 236 WriteReg(0x0f, 0x4b);
backman 7:f990f03bc2b2 237 WriteReg(0x16, 0x02);
backman 7:f990f03bc2b2 238
backman 7:f990f03bc2b2 239 WriteReg(0x21, 0x02);
backman 7:f990f03bc2b2 240 WriteReg(0x22, 0x91);
backman 7:f990f03bc2b2 241 WriteReg(0x29, 0x07);
backman 7:f990f03bc2b2 242 WriteReg(0x33, 0x0b);
backman 7:f990f03bc2b2 243 WriteReg(0x35, 0x0b);
backman 7:f990f03bc2b2 244 WriteReg(0x37, 0x1d);
backman 7:f990f03bc2b2 245 WriteReg(0x38, 0x71);
backman 7:f990f03bc2b2 246 WriteReg(0x39, 0x2a);
backman 7:f990f03bc2b2 247 WriteReg(0x3c, 0x78);
backman 7:f990f03bc2b2 248 WriteReg(0x4d, 0x40);
backman 7:f990f03bc2b2 249 WriteReg(0x4e, 0x20);
backman 7:f990f03bc2b2 250 WriteReg(0x69, 0x00);
backman 7:f990f03bc2b2 251
backman 7:f990f03bc2b2 252 WriteReg(0x74, 0x10);
backman 7:f990f03bc2b2 253 WriteReg(0x8d, 0x4f);
backman 7:f990f03bc2b2 254 WriteReg(0x8e, 0x00);
backman 7:f990f03bc2b2 255 WriteReg(0x8f, 0x00);
backman 7:f990f03bc2b2 256 WriteReg(0x90, 0x00);
backman 7:f990f03bc2b2 257 WriteReg(0x91, 0x00);
backman 7:f990f03bc2b2 258 WriteReg(0x92, 0x00);
backman 7:f990f03bc2b2 259
backman 7:f990f03bc2b2 260 WriteReg(0x96, 0x00);
backman 7:f990f03bc2b2 261 WriteReg(0x9a, 0x80);
backman 7:f990f03bc2b2 262 WriteReg(0xb0, 0x84);
backman 7:f990f03bc2b2 263 WriteReg(0xb1, 0x0c);
backman 7:f990f03bc2b2 264 WriteReg(0xb2, 0x0e);
backman 7:f990f03bc2b2 265 WriteReg(0xb3, 0x82);
backman 7:f990f03bc2b2 266 WriteReg(0xb8, 0x0a);
backman 7:f990f03bc2b2 267
backman 7:f990f03bc2b2 268 WriteReg(0x43, 0x0a);
backman 7:f990f03bc2b2 269 WriteReg(0x44, 0xf0);
backman 7:f990f03bc2b2 270 WriteReg(0x45, 0x34);
backman 7:f990f03bc2b2 271 WriteReg(0x46, 0x58);
backman 7:f990f03bc2b2 272 WriteReg(0x47, 0x28);
backman 7:f990f03bc2b2 273 WriteReg(0x48, 0x3a);
backman 7:f990f03bc2b2 274 WriteReg(0x59, 0x88);
backman 7:f990f03bc2b2 275 WriteReg(0x5a, 0x88);
backman 7:f990f03bc2b2 276 WriteReg(0x5b, 0x44);
backman 7:f990f03bc2b2 277 WriteReg(0x5c, 0x67);
backman 7:f990f03bc2b2 278 WriteReg(0x5d, 0x49);
backman 7:f990f03bc2b2 279 WriteReg(0x5e, 0x0e);
backman 7:f990f03bc2b2 280 WriteReg(0x64, 0x04);
backman 7:f990f03bc2b2 281 WriteReg(0x65, 0x20);
backman 7:f990f03bc2b2 282 WriteReg(0x66, 0x05);
backman 7:f990f03bc2b2 283 WriteReg(0x94, 0x04);
backman 7:f990f03bc2b2 284 WriteReg(0x95, 0x08);
backman 7:f990f03bc2b2 285
backman 7:f990f03bc2b2 286 WriteReg(0x6c, 0x0a);
backman 7:f990f03bc2b2 287 WriteReg(0x6d, 0x55);
backman 7:f990f03bc2b2 288 WriteReg(0x6e, 0x11);
backman 7:f990f03bc2b2 289 WriteReg(0x6f, 0x9f);
backman 7:f990f03bc2b2 290 WriteReg(0x6a, 0x40);
backman 7:f990f03bc2b2 291 WriteReg(0x01, 0x40);
backman 7:f990f03bc2b2 292 WriteReg(0x02, 0x40);
backman 7:f990f03bc2b2 293 WriteReg(0x13, 0xe7);
backman 7:f990f03bc2b2 294 WriteReg(0x15, 0x02);
backman 7:f990f03bc2b2 295
backman 7:f990f03bc2b2 296 WriteReg(0x4f, 0x80);
backman 7:f990f03bc2b2 297 WriteReg(0x50, 0x80);
backman 7:f990f03bc2b2 298 WriteReg(0x51, 0x00);
backman 7:f990f03bc2b2 299 WriteReg(0x52, 0x22);
backman 7:f990f03bc2b2 300 WriteReg(0x53, 0x5e);
backman 7:f990f03bc2b2 301 WriteReg(0x54, 0x80);
backman 7:f990f03bc2b2 302 WriteReg(0x58, 0x9e);
backman 7:f990f03bc2b2 303
backman 7:f990f03bc2b2 304 WriteReg(0x41, 0x08);
backman 7:f990f03bc2b2 305 WriteReg(0x3f, 0x00);
backman 7:f990f03bc2b2 306 WriteReg(0x75, 0x05);
backman 7:f990f03bc2b2 307 WriteReg(0x76, 0xe1);
backman 7:f990f03bc2b2 308 WriteReg(0x4c, 0x00);
backman 7:f990f03bc2b2 309 WriteReg(0x77, 0x01);
backman 7:f990f03bc2b2 310 WriteReg(0x3d, 0xc1);
backman 7:f990f03bc2b2 311 WriteReg(0x4b, 0x09);
backman 7:f990f03bc2b2 312 WriteReg(0xc9, 0x60);
backman 7:f990f03bc2b2 313 WriteReg(0x41, 0x38);
backman 7:f990f03bc2b2 314 WriteReg(0x56, 0x40);
backman 7:f990f03bc2b2 315
backman 7:f990f03bc2b2 316 WriteReg(0x34, 0x11);
backman 7:f990f03bc2b2 317 WriteReg(0x3b, 0x02);
backman 7:f990f03bc2b2 318 WriteReg(0xa4, 0x88);
backman 7:f990f03bc2b2 319 WriteReg(0x96, 0x00);
backman 7:f990f03bc2b2 320 WriteReg(0x97, 0x30);
backman 7:f990f03bc2b2 321 WriteReg(0x98, 0x20);
backman 7:f990f03bc2b2 322 WriteReg(0x99, 0x30);
backman 7:f990f03bc2b2 323 WriteReg(0x9a, 0x84);
backman 7:f990f03bc2b2 324 WriteReg(0x9b, 0x29);
backman 7:f990f03bc2b2 325 WriteReg(0x9c, 0x03);
backman 7:f990f03bc2b2 326 WriteReg(0x9d, 0x4c);
backman 7:f990f03bc2b2 327 WriteReg(0x9e, 0x3f);
backman 7:f990f03bc2b2 328 WriteReg(0x78, 0x04);
backman 7:f990f03bc2b2 329
backman 7:f990f03bc2b2 330 WriteReg(0x79, 0x01);
backman 7:f990f03bc2b2 331 WriteReg(0xc8, 0xf0);
backman 7:f990f03bc2b2 332 WriteReg(0x79, 0x0f);
backman 7:f990f03bc2b2 333 WriteReg(0xc8, 0x00);
backman 7:f990f03bc2b2 334 WriteReg(0x79, 0x10);
backman 7:f990f03bc2b2 335 WriteReg(0xc8, 0x7e);
backman 7:f990f03bc2b2 336 WriteReg(0x79, 0x0a);
backman 7:f990f03bc2b2 337 WriteReg(0xc8, 0x80);
backman 7:f990f03bc2b2 338 WriteReg(0x79, 0x0b);
backman 7:f990f03bc2b2 339 WriteReg(0xc8, 0x01);
backman 7:f990f03bc2b2 340 WriteReg(0x79, 0x0c);
backman 7:f990f03bc2b2 341 WriteReg(0xc8, 0x0f);
backman 7:f990f03bc2b2 342 WriteReg(0x79, 0x0d);
backman 7:f990f03bc2b2 343 WriteReg(0xc8, 0x20);
backman 7:f990f03bc2b2 344 WriteReg(0x79, 0x09);
backman 7:f990f03bc2b2 345 WriteReg(0xc8, 0x80);
backman 7:f990f03bc2b2 346 WriteReg(0x79, 0x02);
backman 7:f990f03bc2b2 347 WriteReg(0xc8, 0xc0);
backman 7:f990f03bc2b2 348 WriteReg(0x79, 0x03);
backman 7:f990f03bc2b2 349 WriteReg(0xc8, 0x40);
backman 7:f990f03bc2b2 350 WriteReg(0x79, 0x05);
backman 7:f990f03bc2b2 351 WriteReg(0xc8, 0x30);
backman 7:f990f03bc2b2 352 WriteReg(0x79, 0x26);
backman 7:f990f03bc2b2 353 WriteReg(0x09, 0x03);
backman 7:f990f03bc2b2 354 WriteReg(0x3b, 0x42);
backman 7:f990f03bc2b2 355
backman 7:f990f03bc2b2 356 WriteReg(0xff, 0xff); /* END MARKER */
backman 7:f990f03bc2b2 357
backman 7:f990f03bc2b2 358 }
backman 7:f990f03bc2b2 359 if(n == 76800) // 320*240
backman 7:f990f03bc2b2 360 {
backman 7:f990f03bc2b2 361 WriteReg(REG_COM14, 0x19);
backman 7:f990f03bc2b2 362 WriteReg(0x72, 0x11);
backman 7:f990f03bc2b2 363 WriteReg(0x73, 0xf1);
backman 7:f990f03bc2b2 364 WriteReg(REG_HREF, 0x24);
backman 7:f990f03bc2b2 365 WriteReg(REG_HSTART, 0x16);
backman 7:f990f03bc2b2 366 WriteReg(REG_HSTOP, 0x04);
backman 7:f990f03bc2b2 367 WriteReg(REG_VREF, 0x0a);
backman 7:f990f03bc2b2 368 WriteReg(REG_VSTART,0x02);
backman 7:f990f03bc2b2 369 WriteReg(REG_VSTOP, 0x7a);
backman 7:f990f03bc2b2 370
backman 7:f990f03bc2b2 371 WriteReg(0x7a, 0x20);
backman 7:f990f03bc2b2 372 WriteReg(0x7b, 0x1c);
backman 7:f990f03bc2b2 373 WriteReg(0x7c, 0x28);
backman 7:f990f03bc2b2 374 WriteReg(0x7d, 0x3c);
backman 7:f990f03bc2b2 375 WriteReg(0x7e, 0x55);
backman 7:f990f03bc2b2 376 WriteReg(0x7f, 0x68);
backman 7:f990f03bc2b2 377 WriteReg(0x80, 0x76);
backman 7:f990f03bc2b2 378 WriteReg(0x81, 0x80);
backman 7:f990f03bc2b2 379 WriteReg(0x82, 0x88);
backman 7:f990f03bc2b2 380 WriteReg(0x83, 0x8f);
backman 7:f990f03bc2b2 381 WriteReg(0x84, 0x96);
backman 7:f990f03bc2b2 382 WriteReg(0x85, 0xa3);
backman 7:f990f03bc2b2 383 WriteReg(0x86, 0xaf);
backman 7:f990f03bc2b2 384 WriteReg(0x87, 0xc4);
backman 7:f990f03bc2b2 385 WriteReg(0x88, 0xd7);
backman 7:f990f03bc2b2 386 WriteReg(0x89, 0xe8);
backman 7:f990f03bc2b2 387
backman 7:f990f03bc2b2 388 WriteReg(0x13, 0xe0);
backman 7:f990f03bc2b2 389 WriteReg(0x00, 0x00);
backman 7:f990f03bc2b2 390 WriteReg(0x10, 0x00);
backman 7:f990f03bc2b2 391 WriteReg(0x0d, 0x00);
backman 7:f990f03bc2b2 392 WriteReg(0x14, 0x28);
backman 7:f990f03bc2b2 393 WriteReg(0xa5, 0x05);
backman 7:f990f03bc2b2 394 WriteReg(0xab, 0x07);
backman 7:f990f03bc2b2 395 WriteReg(0x24, 0x75);
backman 7:f990f03bc2b2 396 WriteReg(0x25, 0x63);
backman 7:f990f03bc2b2 397 WriteReg(0x26, 0xA5);
backman 7:f990f03bc2b2 398 WriteReg(0x9f, 0x78);
backman 7:f990f03bc2b2 399 WriteReg(0xa0, 0x68);
backman 7:f990f03bc2b2 400 WriteReg(0xa1, 0x03);
backman 7:f990f03bc2b2 401 WriteReg(0xa6, 0xdf);
backman 7:f990f03bc2b2 402 WriteReg(0xa7, 0xdf);
backman 7:f990f03bc2b2 403 WriteReg(0xa8, 0xf0);
backman 7:f990f03bc2b2 404 WriteReg(0xa9, 0x90);
backman 7:f990f03bc2b2 405 WriteReg(0xaa, 0x94);
backman 7:f990f03bc2b2 406 WriteReg(0x13, 0xe5);
backman 7:f990f03bc2b2 407
backman 7:f990f03bc2b2 408 WriteReg(0x0e, 0x61);
backman 7:f990f03bc2b2 409 WriteReg(0x0f, 0x4b);
backman 7:f990f03bc2b2 410 WriteReg(0x16, 0x02);
backman 7:f990f03bc2b2 411 WriteReg(0x21, 0x02);
backman 7:f990f03bc2b2 412 WriteReg(0x22, 0x91);
backman 7:f990f03bc2b2 413 WriteReg(0x29, 0x07);
backman 7:f990f03bc2b2 414 WriteReg(0x33, 0x0b);
backman 7:f990f03bc2b2 415 WriteReg(0x35, 0x0b);
backman 7:f990f03bc2b2 416 WriteReg(0x37, 0x1d);
backman 7:f990f03bc2b2 417 WriteReg(0x38, 0x71);
backman 7:f990f03bc2b2 418 WriteReg(0x39, 0x2a);
backman 7:f990f03bc2b2 419 WriteReg(0x3c, 0x78);
backman 7:f990f03bc2b2 420 WriteReg(0x4d, 0x40);
backman 7:f990f03bc2b2 421 WriteReg(0x4e, 0x20);
backman 7:f990f03bc2b2 422 WriteReg(0x69, 0x00);
backman 7:f990f03bc2b2 423 WriteReg(0x6b, 0x00);
backman 7:f990f03bc2b2 424 WriteReg(0x74, 0x19);
backman 7:f990f03bc2b2 425 WriteReg(0x8d, 0x4f);
backman 7:f990f03bc2b2 426 WriteReg(0x8e, 0x00);
backman 7:f990f03bc2b2 427 WriteReg(0x8f, 0x00);
backman 7:f990f03bc2b2 428 WriteReg(0x90, 0x00);
backman 7:f990f03bc2b2 429 WriteReg(0x91, 0x00);
backman 7:f990f03bc2b2 430 WriteReg(0x92, 0x00);
backman 7:f990f03bc2b2 431 WriteReg(0x96, 0x00);
backman 7:f990f03bc2b2 432 WriteReg(0x9a, 0x80);
backman 7:f990f03bc2b2 433 WriteReg(0xb0, 0x84);
backman 7:f990f03bc2b2 434 WriteReg(0xb1, 0x0c);
backman 7:f990f03bc2b2 435 WriteReg(0xb2, 0x0e);
backman 7:f990f03bc2b2 436 WriteReg(0xb3, 0x82);
backman 7:f990f03bc2b2 437 WriteReg(0xb8, 0x0a);
backman 7:f990f03bc2b2 438 WriteReg(0x43, 0x14);
backman 7:f990f03bc2b2 439 WriteReg(0x44, 0xf0);
backman 7:f990f03bc2b2 440 WriteReg(0x45, 0x34);
backman 7:f990f03bc2b2 441 WriteReg(0x46, 0x58);
backman 7:f990f03bc2b2 442 WriteReg(0x47, 0x28);
backman 7:f990f03bc2b2 443 WriteReg(0x48, 0x3a);
backman 7:f990f03bc2b2 444 WriteReg(0x59, 0x88);
backman 7:f990f03bc2b2 445 WriteReg(0x5a, 0x88);
backman 7:f990f03bc2b2 446 WriteReg(0x5b, 0x44);
backman 7:f990f03bc2b2 447 WriteReg(0x5c, 0x67);
backman 7:f990f03bc2b2 448 WriteReg(0x5d, 0x49);
backman 7:f990f03bc2b2 449 WriteReg(0x5e, 0x0e);
backman 7:f990f03bc2b2 450 WriteReg(0x64, 0x04);
backman 7:f990f03bc2b2 451 WriteReg(0x65, 0x20);
backman 7:f990f03bc2b2 452 WriteReg(0x66, 0x05);
backman 7:f990f03bc2b2 453 WriteReg(0x94, 0x04);
backman 7:f990f03bc2b2 454 WriteReg(0x95, 0x08);
backman 7:f990f03bc2b2 455 WriteReg(0x6c, 0x0a);
backman 7:f990f03bc2b2 456 WriteReg(0x6d, 0x55);
backman 7:f990f03bc2b2 457 WriteReg(0x6e, 0x11);
backman 7:f990f03bc2b2 458 WriteReg(0x6f, 0x9f);
backman 7:f990f03bc2b2 459 WriteReg(0x6a, 0x40);
backman 7:f990f03bc2b2 460 WriteReg(0x01, 0x40);
backman 7:f990f03bc2b2 461 WriteReg(0x02, 0x40);
backman 7:f990f03bc2b2 462 WriteReg(0x13, 0xe7);
backman 7:f990f03bc2b2 463 WriteReg(0x15, 0x02);
backman 7:f990f03bc2b2 464 WriteReg(0x4f, 0x80);
backman 7:f990f03bc2b2 465 WriteReg(0x50, 0x80);
backman 7:f990f03bc2b2 466 WriteReg(0x51, 0x00);
backman 7:f990f03bc2b2 467 WriteReg(0x52, 0x22);
backman 7:f990f03bc2b2 468 WriteReg(0x53, 0x5e);
backman 7:f990f03bc2b2 469 WriteReg(0x54, 0x80);
backman 7:f990f03bc2b2 470 WriteReg(0x58, 0x9e);
backman 7:f990f03bc2b2 471 WriteReg(0x41, 0x08);
backman 7:f990f03bc2b2 472 WriteReg(0x3f, 0x00);
backman 7:f990f03bc2b2 473 WriteReg(0x75, 0x05);
backman 7:f990f03bc2b2 474 WriteReg(0x76, 0xe1);
backman 7:f990f03bc2b2 475 WriteReg(0x4c, 0x00);
backman 7:f990f03bc2b2 476 WriteReg(0x77, 0x01);
backman 7:f990f03bc2b2 477 WriteReg(0x3d, 0xc2);
backman 7:f990f03bc2b2 478 WriteReg(0x4b, 0x09);
backman 7:f990f03bc2b2 479 WriteReg(0xc9, 0x60);
backman 7:f990f03bc2b2 480 WriteReg(0x41, 0x38);
backman 7:f990f03bc2b2 481 WriteReg(0x56, 0x40);
backman 7:f990f03bc2b2 482 WriteReg(0x34, 0x11);
backman 7:f990f03bc2b2 483 WriteReg(0x3b, 0x02);
backman 7:f990f03bc2b2 484 WriteReg(0xa4, 0x89);
backman 7:f990f03bc2b2 485 WriteReg(0x96, 0x00);
backman 7:f990f03bc2b2 486 WriteReg(0x97, 0x30);
backman 7:f990f03bc2b2 487 WriteReg(0x98, 0x20);
backman 7:f990f03bc2b2 488 WriteReg(0x99, 0x30);
backman 7:f990f03bc2b2 489 WriteReg(0x9a, 0x84);
backman 7:f990f03bc2b2 490 WriteReg(0x9b, 0x29);
backman 7:f990f03bc2b2 491 WriteReg(0x9c, 0x03);
backman 7:f990f03bc2b2 492 WriteReg(0x9d, 0x4c);
backman 7:f990f03bc2b2 493 WriteReg(0x9e, 0x3f);
backman 7:f990f03bc2b2 494 WriteReg(0x78, 0x04);
backman 7:f990f03bc2b2 495 WriteReg(0x79, 0x01);
backman 7:f990f03bc2b2 496 WriteReg(0xc8, 0xf0);
backman 7:f990f03bc2b2 497 WriteReg(0x79, 0x0f);
backman 7:f990f03bc2b2 498 WriteReg(0xc8, 0x00);
backman 7:f990f03bc2b2 499 WriteReg(0x79, 0x10);
backman 7:f990f03bc2b2 500 WriteReg(0xc8, 0x7e);
backman 7:f990f03bc2b2 501 WriteReg(0x79, 0x0a);
backman 7:f990f03bc2b2 502 WriteReg(0xc8, 0x80);
backman 7:f990f03bc2b2 503 WriteReg(0x79, 0x0b);
backman 7:f990f03bc2b2 504 WriteReg(0xc8, 0x01);
backman 7:f990f03bc2b2 505 WriteReg(0x79, 0x0c);
backman 7:f990f03bc2b2 506 WriteReg(0xc8, 0x0f);
backman 7:f990f03bc2b2 507 WriteReg(0x79, 0x0d);
backman 7:f990f03bc2b2 508 WriteReg(0xc8, 0x20);
backman 7:f990f03bc2b2 509 WriteReg(0x79, 0x09);
backman 7:f990f03bc2b2 510 WriteReg(0xc8, 0x80);
backman 7:f990f03bc2b2 511 WriteReg(0x79, 0x02);
backman 7:f990f03bc2b2 512 WriteReg(0xc8, 0xc0);
backman 7:f990f03bc2b2 513 WriteReg(0x79, 0x03);
backman 7:f990f03bc2b2 514 WriteReg(0xc8, 0x40);
backman 7:f990f03bc2b2 515 WriteReg(0x79, 0x05);
backman 7:f990f03bc2b2 516 WriteReg(0xc8, 0x30);
backman 7:f990f03bc2b2 517 WriteReg(0x79, 0x26);
backman 7:f990f03bc2b2 518 WriteReg(0x09, 0x03);
backman 7:f990f03bc2b2 519 WriteReg(0x3b, 0x42);
backman 7:f990f03bc2b2 520
backman 7:f990f03bc2b2 521 WriteReg(0xff, 0xff); /* END MARKER */
backman 7:f990f03bc2b2 522
backman 7:f990f03bc2b2 523 }
backman 7:f990f03bc2b2 524 if(n == 307200) // 640*480
backman 7:f990f03bc2b2 525 {
backman 7:f990f03bc2b2 526 WriteReg(REG_CLKRC, 0x01);
backman 7:f990f03bc2b2 527 WriteReg(REG_TSLB, 0x04);
backman 7:f990f03bc2b2 528 WriteReg(REG_COM7, 0x01);
backman 7:f990f03bc2b2 529 WriteReg(DBLV, 0x4a);
backman 7:f990f03bc2b2 530 WriteReg(REG_COM3, 0);
backman 7:f990f03bc2b2 531 WriteReg(REG_COM14, 0);
backman 7:f990f03bc2b2 532
backman 7:f990f03bc2b2 533 WriteReg(REG_HSTART, 0x13);
backman 7:f990f03bc2b2 534 WriteReg(REG_HSTOP, 0x01);
backman 7:f990f03bc2b2 535 WriteReg(REG_HREF, 0xb6);
backman 7:f990f03bc2b2 536 WriteReg(REG_VSTART, 0x02);
backman 7:f990f03bc2b2 537 WriteReg(REG_VSTOP, 0x7a);
backman 7:f990f03bc2b2 538 WriteReg(REG_VREF, 0x0a);
backman 7:f990f03bc2b2 539 WriteReg(0x72, 0x11);
backman 7:f990f03bc2b2 540 WriteReg(0x73, 0xf0);
backman 7:f990f03bc2b2 541
backman 7:f990f03bc2b2 542 /* Gamma curve values */
backman 7:f990f03bc2b2 543 WriteReg(0x7a, 0x20);
backman 7:f990f03bc2b2 544 WriteReg(0x7b, 0x10);
backman 7:f990f03bc2b2 545 WriteReg(0x7c, 0x1e);
backman 7:f990f03bc2b2 546 WriteReg(0x7d, 0x35);
backman 7:f990f03bc2b2 547 WriteReg(0x7e, 0x5a);
backman 7:f990f03bc2b2 548 WriteReg(0x7f, 0x69);
backman 7:f990f03bc2b2 549 WriteReg(0x80, 0x76);
backman 7:f990f03bc2b2 550 WriteReg(0x81, 0x80);
backman 7:f990f03bc2b2 551 WriteReg(0x82, 0x88);
backman 7:f990f03bc2b2 552 WriteReg(0x83, 0x8f);
backman 7:f990f03bc2b2 553 WriteReg(0x84, 0x96);
backman 7:f990f03bc2b2 554 WriteReg(0x85, 0xa3);
backman 7:f990f03bc2b2 555 WriteReg(0x86, 0xaf);
backman 7:f990f03bc2b2 556 WriteReg(0x87, 0xc4);
backman 7:f990f03bc2b2 557 WriteReg(0x88, 0xd7);
backman 7:f990f03bc2b2 558 WriteReg(0x89, 0xe8);
backman 7:f990f03bc2b2 559
backman 7:f990f03bc2b2 560 /* AGC and AEC parameters. Note we start by disabling those features,
backman 7:f990f03bc2b2 561 then turn them only after tweaking the values. */
backman 7:f990f03bc2b2 562 WriteReg(0x13, COM8_FASTAEC | COM8_AECSTEP | COM8_BFILT);
backman 7:f990f03bc2b2 563 WriteReg(0x00, 0);
backman 7:f990f03bc2b2 564 WriteReg(0x10, 0);
backman 7:f990f03bc2b2 565 WriteReg(0x0d, 0x40);
backman 7:f990f03bc2b2 566 WriteReg(0x14, 0x18);
backman 7:f990f03bc2b2 567 WriteReg(0xa5, 0x05);
backman 7:f990f03bc2b2 568 WriteReg(0xab, 0x07);
backman 7:f990f03bc2b2 569 WriteReg(0x24, 0x95);
backman 7:f990f03bc2b2 570 WriteReg(0x25, 0x33);
backman 7:f990f03bc2b2 571 WriteReg(0x26, 0xe3);
backman 7:f990f03bc2b2 572 WriteReg(0x9f, 0x78);
backman 7:f990f03bc2b2 573 WriteReg(0xa0, 0x68);
backman 7:f990f03bc2b2 574 WriteReg(0xa1, 0x03);
backman 7:f990f03bc2b2 575 WriteReg(0xa6, 0xd8);
backman 7:f990f03bc2b2 576 WriteReg(0xa7, 0xd8);
backman 7:f990f03bc2b2 577 WriteReg(0xa8, 0xf0);
backman 7:f990f03bc2b2 578 WriteReg(0xa9, 0x90);
backman 7:f990f03bc2b2 579 WriteReg(0xaa, 0x94);
backman 7:f990f03bc2b2 580 WriteReg(0x13, COM8_FASTAEC|COM8_AECSTEP|COM8_BFILT|COM8_AGC|COM8_AEC);
backman 7:f990f03bc2b2 581
backman 7:f990f03bc2b2 582 /* Almost all of these are magic "reserved" values. */
backman 7:f990f03bc2b2 583 WriteReg(0x0e, 0x61);
backman 7:f990f03bc2b2 584 WriteReg(0x0f, 0x4b);
backman 7:f990f03bc2b2 585 WriteReg(0x16, 0x02);
backman 7:f990f03bc2b2 586 WriteReg(0x1e, 0x27);
backman 7:f990f03bc2b2 587 WriteReg(0x21, 0x02);
backman 7:f990f03bc2b2 588 WriteReg(0x22, 0x91);
backman 7:f990f03bc2b2 589 WriteReg(0x29, 0x07);
backman 7:f990f03bc2b2 590 WriteReg(0x33, 0x0b);
backman 7:f990f03bc2b2 591 WriteReg(0x35, 0x0b);
backman 7:f990f03bc2b2 592 WriteReg(0x37, 0x1d);
backman 7:f990f03bc2b2 593 WriteReg(0x38, 0x71);
backman 7:f990f03bc2b2 594 WriteReg(0x39, 0x2a);
backman 7:f990f03bc2b2 595 WriteReg(0x3c, 0x78);
backman 7:f990f03bc2b2 596 WriteReg(0x4d, 0x40);
backman 7:f990f03bc2b2 597 WriteReg(0x4e, 0x20);
backman 7:f990f03bc2b2 598 WriteReg(0x69, 0);
backman 7:f990f03bc2b2 599 WriteReg(0x6b, 0x0a);
backman 7:f990f03bc2b2 600 WriteReg(0x74, 0x10);
backman 7:f990f03bc2b2 601 WriteReg(0x8d, 0x4f);
backman 7:f990f03bc2b2 602 WriteReg(0x8e, 0);
backman 7:f990f03bc2b2 603 WriteReg(0x8f, 0);
backman 7:f990f03bc2b2 604 WriteReg(0x90, 0);
backman 7:f990f03bc2b2 605 WriteReg(0x91, 0);
backman 7:f990f03bc2b2 606 WriteReg(0x96, 0);
backman 7:f990f03bc2b2 607 WriteReg(0x9a, 0);
backman 7:f990f03bc2b2 608 WriteReg(0xb0, 0x84);
backman 7:f990f03bc2b2 609 WriteReg(0xb1, 0x0c);
backman 7:f990f03bc2b2 610 WriteReg(0xb2, 0x0e);
backman 7:f990f03bc2b2 611 WriteReg(0xb3, 0x82);
backman 7:f990f03bc2b2 612 WriteReg(0xb8, 0x0a);
backman 7:f990f03bc2b2 613
backman 7:f990f03bc2b2 614 /* More reserved magic, some of which tweaks white balance */
backman 7:f990f03bc2b2 615 WriteReg(0x43, 0x0a);
backman 7:f990f03bc2b2 616 WriteReg(0x44, 0xf0);
backman 7:f990f03bc2b2 617 WriteReg(0x45, 0x34);
backman 7:f990f03bc2b2 618 WriteReg(0x46, 0x58);
backman 7:f990f03bc2b2 619 WriteReg(0x47, 0x28);
backman 7:f990f03bc2b2 620 WriteReg(0x48, 0x3a);
backman 7:f990f03bc2b2 621 WriteReg(0x59, 0x88);
backman 7:f990f03bc2b2 622 WriteReg(0x5a, 0x88);
backman 7:f990f03bc2b2 623 WriteReg(0x5b, 0x44);
backman 7:f990f03bc2b2 624 WriteReg(0x5c, 0x67);
backman 7:f990f03bc2b2 625 WriteReg(0x5d, 0x49);
backman 7:f990f03bc2b2 626 WriteReg(0x5e, 0x0e);
backman 7:f990f03bc2b2 627 WriteReg(0x6c, 0x0a);
backman 7:f990f03bc2b2 628 WriteReg(0x6d, 0x55);
backman 7:f990f03bc2b2 629 WriteReg(0x6e, 0x11);
backman 7:f990f03bc2b2 630 WriteReg(0x6f, 0x9f);
backman 7:f990f03bc2b2 631 WriteReg(0x6a, 0x40);
backman 7:f990f03bc2b2 632 WriteReg(0x01, 0x40);
backman 7:f990f03bc2b2 633 WriteReg(0x02, 0x60);
backman 7:f990f03bc2b2 634 WriteReg(0x13, COM8_FASTAEC|COM8_AECSTEP|COM8_BFILT|COM8_AGC|COM8_AEC|COM8_AWB);
backman 7:f990f03bc2b2 635
backman 7:f990f03bc2b2 636 /* Matrix coefficients */
backman 7:f990f03bc2b2 637 WriteReg(0x4f, 0x80);
backman 7:f990f03bc2b2 638 WriteReg(0x50, 0x80);
backman 7:f990f03bc2b2 639 WriteReg(0x51, 0);
backman 7:f990f03bc2b2 640 WriteReg(0x52, 0x22);
backman 7:f990f03bc2b2 641 WriteReg(0x53, 0x5e);
backman 7:f990f03bc2b2 642 WriteReg(0x54, 0x80);
backman 7:f990f03bc2b2 643 WriteReg(0x58, 0x9e);
backman 7:f990f03bc2b2 644
backman 7:f990f03bc2b2 645 WriteReg(0x41, 0x08);
backman 7:f990f03bc2b2 646 WriteReg(0x3f, 0);
backman 7:f990f03bc2b2 647 WriteReg(0x75, 0x05);
backman 7:f990f03bc2b2 648 WriteReg(0x76, 0xe1);
backman 7:f990f03bc2b2 649 WriteReg(0x4c, 0);
backman 7:f990f03bc2b2 650 WriteReg(0x77, 0x01);
backman 7:f990f03bc2b2 651 WriteReg(0x3d, 0xc3);
backman 7:f990f03bc2b2 652 WriteReg(0x4b, 0x09);
backman 7:f990f03bc2b2 653 WriteReg(0xc9, 0x60);
backman 7:f990f03bc2b2 654 WriteReg(0x41, 0x38);
backman 7:f990f03bc2b2 655 WriteReg(0x56, 0x40);
backman 7:f990f03bc2b2 656
backman 7:f990f03bc2b2 657 WriteReg(0x34, 0x11);
backman 7:f990f03bc2b2 658 WriteReg(0x3b, COM11_EXP|COM11_HZAUTO);
backman 7:f990f03bc2b2 659 WriteReg(0xa4, 0x88);
backman 7:f990f03bc2b2 660 WriteReg(0x96, 0);
backman 7:f990f03bc2b2 661 WriteReg(0x97, 0x30);
backman 7:f990f03bc2b2 662 WriteReg(0x98, 0x20);
backman 7:f990f03bc2b2 663 WriteReg(0x99, 0x30);
backman 7:f990f03bc2b2 664 WriteReg(0x9a, 0x84);
backman 7:f990f03bc2b2 665 WriteReg(0x9b, 0x29);
backman 7:f990f03bc2b2 666 WriteReg(0x9c, 0x03);
backman 7:f990f03bc2b2 667 WriteReg(0x9d, 0x4c);
backman 7:f990f03bc2b2 668 WriteReg(0x9e, 0x3f);
backman 7:f990f03bc2b2 669 WriteReg(0x78, 0x04);
backman 7:f990f03bc2b2 670
backman 7:f990f03bc2b2 671 /* Extra-weird stuff. Some sort of multiplexor register */
backman 7:f990f03bc2b2 672 WriteReg(0x79, 0x01);
backman 7:f990f03bc2b2 673 WriteReg(0xc8, 0xf0);
backman 7:f990f03bc2b2 674 WriteReg(0x79, 0x0f);
backman 7:f990f03bc2b2 675 WriteReg(0xc8, 0x00);
backman 7:f990f03bc2b2 676 WriteReg(0x79, 0x10);
backman 7:f990f03bc2b2 677 WriteReg(0xc8, 0x7e);
backman 7:f990f03bc2b2 678 WriteReg(0x79, 0x0a);
backman 7:f990f03bc2b2 679 WriteReg(0xc8, 0x80);
backman 7:f990f03bc2b2 680 WriteReg(0x79, 0x0b);
backman 7:f990f03bc2b2 681 WriteReg(0xc8, 0x01);
backman 7:f990f03bc2b2 682 WriteReg(0x79, 0x0c);
backman 7:f990f03bc2b2 683 WriteReg(0xc8, 0x0f);
backman 7:f990f03bc2b2 684 WriteReg(0x79, 0x0d);
backman 7:f990f03bc2b2 685 WriteReg(0xc8, 0x20);
backman 7:f990f03bc2b2 686 WriteReg(0x79, 0x09);
backman 7:f990f03bc2b2 687 WriteReg(0xc8, 0x80);
backman 7:f990f03bc2b2 688 WriteReg(0x79, 0x02);
backman 7:f990f03bc2b2 689 WriteReg(0xc8, 0xc0);
backman 7:f990f03bc2b2 690 WriteReg(0x79, 0x03);
backman 7:f990f03bc2b2 691 WriteReg(0xc8, 0x40);
backman 7:f990f03bc2b2 692 WriteReg(0x79, 0x05);
backman 7:f990f03bc2b2 693 WriteReg(0xc8, 0x30);
backman 7:f990f03bc2b2 694 WriteReg(0x79, 0x26);
backman 7:f990f03bc2b2 695
backman 7:f990f03bc2b2 696 WriteReg(0xff, 0xff); /* END MARKER */
backman 7:f990f03bc2b2 697 }
backman 7:f990f03bc2b2 698
backman 7:f990f03bc2b2 699 return 1;
backman 7:f990f03bc2b2 700 }
backman 7:f990f03bc2b2 701
backman 7:f990f03bc2b2 702
backman 7:f990f03bc2b2 703
backman 7:f990f03bc2b2 704
backman 7:f990f03bc2b2 705 // write to camera
backman 7:f990f03bc2b2 706 void OV7670::WriteReg(int addr,int data)
backman 7:f990f03bc2b2 707 {
backman 7:f990f03bc2b2 708 _i2c.start();
backman 7:f990f03bc2b2 709 _i2c.write(OV7670_WRITE);
backman 7:f990f03bc2b2 710 wait_us(OV7670_WRITEWAIT);
backman 7:f990f03bc2b2 711 _i2c.write(addr);
backman 7:f990f03bc2b2 712 wait_us(OV7670_WRITEWAIT);
backman 7:f990f03bc2b2 713 _i2c.write(data);
backman 7:f990f03bc2b2 714 _i2c.stop();
backman 7:f990f03bc2b2 715 }
backman 7:f990f03bc2b2 716
backman 7:f990f03bc2b2 717 // read from camera
backman 7:f990f03bc2b2 718 int OV7670::ReadReg(int addr)
backman 7:f990f03bc2b2 719 {
backman 7:f990f03bc2b2 720 int data;
backman 7:f990f03bc2b2 721
backman 7:f990f03bc2b2 722 _i2c.start();
backman 7:f990f03bc2b2 723
backman 7:f990f03bc2b2 724
backman 7:f990f03bc2b2 725
backman 7:f990f03bc2b2 726 _i2c.write(OV7670_WRITE);
backman 7:f990f03bc2b2 727 wait_us(OV7670_WRITEWAIT);
backman 7:f990f03bc2b2 728 _i2c.write(addr);
backman 7:f990f03bc2b2 729 _i2c.stop();
backman 7:f990f03bc2b2 730 wait_us(OV7670_WRITEWAIT);
backman 7:f990f03bc2b2 731
backman 7:f990f03bc2b2 732 _i2c.start();
backman 7:f990f03bc2b2 733 _i2c.write(OV7670_READ);
backman 7:f990f03bc2b2 734 wait_us(OV7670_WRITEWAIT);
backman 7:f990f03bc2b2 735 data = _i2c.read(OV7670_NOACK);
backman 7:f990f03bc2b2 736 _i2c.stop();
backman 7:f990f03bc2b2 737
backman 7:f990f03bc2b2 738 return data;
backman 7:f990f03bc2b2 739 }
backman 7:f990f03bc2b2 740
backman 7:f990f03bc2b2 741
backman 7:f990f03bc2b2 742
backman 7:f990f03bc2b2 743
backman 7:f990f03bc2b2 744
backman 7:f990f03bc2b2 745
backman 7:f990f03bc2b2 746
backman 7:f990f03bc2b2 747
backman 7:f990f03bc2b2 748