ov7670 FIFO from Edoardo De Marchi
Dependents: 3D_Scanner_OV7670_
Fork of OV7670 with FIFO by
OV7670.cpp@0:101fbacf126f, 2016-11-16 (annotated)
- Committer:
- rulla
- Date:
- Wed Nov 16 10:37:49 2016 +0000
- Revision:
- 0:101fbacf126f
- Child:
- 1:f5f5d7c979cf
11/2016
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rulla | 0:101fbacf126f | 1 | #include "mbed.h" |
rulla | 0:101fbacf126f | 2 | #include "ov7670reg.h" |
rulla | 0:101fbacf126f | 3 | #include "OV7670.h" |
rulla | 0:101fbacf126f | 4 | |
rulla | 0:101fbacf126f | 5 | // capture request |
rulla | 0:101fbacf126f | 6 | void OV7670::CaptureNext(void) |
rulla | 0:101fbacf126f | 7 | { |
rulla | 0:101fbacf126f | 8 | CaptureReq = true ; |
rulla | 0:101fbacf126f | 9 | Busy = true ; |
rulla | 0:101fbacf126f | 10 | printf("CaptReq\n"); |
rulla | 0:101fbacf126f | 11 | } |
rulla | 0:101fbacf126f | 12 | |
rulla | 0:101fbacf126f | 13 | // capture done? (with clear) |
rulla | 0:101fbacf126f | 14 | bool OV7670::CaptureDone(void) |
rulla | 0:101fbacf126f | 15 | { |
rulla | 0:101fbacf126f | 16 | bool result ; |
rulla | 0:101fbacf126f | 17 | if (Busy) { |
rulla | 0:101fbacf126f | 18 | result = false ; |
rulla | 0:101fbacf126f | 19 | } else { |
rulla | 0:101fbacf126f | 20 | result = Done ; |
rulla | 0:101fbacf126f | 21 | Done = false ; |
rulla | 0:101fbacf126f | 22 | } |
rulla | 0:101fbacf126f | 23 | return result ; |
rulla | 0:101fbacf126f | 24 | } |
rulla | 0:101fbacf126f | 25 | |
rulla | 0:101fbacf126f | 26 | // write to camera |
rulla | 0:101fbacf126f | 27 | void OV7670::WriteReg(int addr,char data) |
rulla | 0:101fbacf126f | 28 | { |
rulla | 0:101fbacf126f | 29 | // WRITE 0x42,ADDR,DATA |
rulla | 0:101fbacf126f | 30 | //camera.write(OV7670_WRITE,d1,2) ; |
rulla | 0:101fbacf126f | 31 | camera.start() ; |
rulla | 0:101fbacf126f | 32 | camera.write(OV7670_WRITE) ; |
rulla | 0:101fbacf126f | 33 | wait_us(OV7670_WRITEWAIT); |
rulla | 0:101fbacf126f | 34 | camera.write(addr) ; |
rulla | 0:101fbacf126f | 35 | wait_us(OV7670_WRITEWAIT); |
rulla | 0:101fbacf126f | 36 | camera.write(data) ; |
rulla | 0:101fbacf126f | 37 | camera.stop() ; |
rulla | 0:101fbacf126f | 38 | } |
rulla | 0:101fbacf126f | 39 | |
rulla | 0:101fbacf126f | 40 | // read from camera |
rulla | 0:101fbacf126f | 41 | char OV7670::ReadReg(int addr) |
rulla | 0:101fbacf126f | 42 | { |
rulla | 0:101fbacf126f | 43 | /* |
rulla | 0:101fbacf126f | 44 | char buff[20]; |
rulla | 0:101fbacf126f | 45 | char buf[20]; |
rulla | 0:101fbacf126f | 46 | buff[0] = addr; |
rulla | 0:101fbacf126f | 47 | buff[1] = OV7670_NOACK; |
rulla | 0:101fbacf126f | 48 | |
rulla | 0:101fbacf126f | 49 | camera.write(OV7670_WRITE,buff,1); |
rulla | 0:101fbacf126f | 50 | camera.read(OV7670_WRITE+1,buf,1); |
rulla | 0:101fbacf126f | 51 | return buf[0];*/ |
rulla | 0:101fbacf126f | 52 | int data ; |
rulla | 0:101fbacf126f | 53 | |
rulla | 0:101fbacf126f | 54 | // WRITE 0x42,ADDR |
rulla | 0:101fbacf126f | 55 | camera.start() ; |
rulla | 0:101fbacf126f | 56 | camera.write(OV7670_WRITE) ; |
rulla | 0:101fbacf126f | 57 | wait_us(OV7670_WRITEWAIT); |
rulla | 0:101fbacf126f | 58 | camera.write(addr) ; |
rulla | 0:101fbacf126f | 59 | camera.stop() ; |
rulla | 0:101fbacf126f | 60 | wait_us(OV7670_WRITEWAIT); |
rulla | 0:101fbacf126f | 61 | |
rulla | 0:101fbacf126f | 62 | // WRITE 0x43,READ |
rulla | 0:101fbacf126f | 63 | camera.start() ; |
rulla | 0:101fbacf126f | 64 | camera.write(OV7670_READ) ; |
rulla | 0:101fbacf126f | 65 | wait_us(OV7670_WRITEWAIT); |
rulla | 0:101fbacf126f | 66 | data = camera.read(OV7670_NOACK) ; |
rulla | 0:101fbacf126f | 67 | camera.stop() ; |
rulla | 0:101fbacf126f | 68 | |
rulla | 0:101fbacf126f | 69 | return data ; |
rulla | 0:101fbacf126f | 70 | } |
rulla | 0:101fbacf126f | 71 | |
rulla | 0:101fbacf126f | 72 | void OV7670::test(void) |
rulla | 0:101fbacf126f | 73 | { |
rulla | 0:101fbacf126f | 74 | printf("ResetMAMT\n"); |
rulla | 0:101fbacf126f | 75 | } |
rulla | 0:101fbacf126f | 76 | |
rulla | 0:101fbacf126f | 77 | void OV7670::Reset(void) |
rulla | 0:101fbacf126f | 78 | { |
rulla | 0:101fbacf126f | 79 | WriteReg(0x12,0x80) ; // RESET CAMERA |
rulla | 0:101fbacf126f | 80 | wait_ms(200) ; |
rulla | 0:101fbacf126f | 81 | printf("Reset\n"); |
rulla | 0:101fbacf126f | 82 | } |
rulla | 0:101fbacf126f | 83 | |
rulla | 0:101fbacf126f | 84 | void OV7670::InitQQVGA(void) |
rulla | 0:101fbacf126f | 85 | { |
rulla | 0:101fbacf126f | 86 | /* |
rulla | 0:101fbacf126f | 87 | //WriteReg(REG_COM7,0x80) ; |
rulla | 0:101fbacf126f | 88 | WriteReg(REG_CLKRC,0x80); |
rulla | 0:101fbacf126f | 89 | WriteReg(REG_COM11,0x1A) ; |
rulla | 0:101fbacf126f | 90 | WriteReg(REG_TSLB,0x04); |
rulla | 0:101fbacf126f | 91 | WriteReg(REG_TSLB,0x04); |
rulla | 0:101fbacf126f | 92 | WriteReg(REG_COM3,0x04) ; |
rulla | 0:101fbacf126f | 93 | WriteReg(REG_COM7,0x07) ; |
rulla | 0:101fbacf126f | 94 | WriteReg(REG_COM8,0x87) ; |
rulla | 0:101fbacf126f | 95 | //WriteReg(REG_RGB444, 0x00); |
rulla | 0:101fbacf126f | 96 | //WriteReg(REG_RGB444, 0x00); // Disable RGB 444? |
rulla | 0:101fbacf126f | 97 | WriteReg(REG_COM15, 0xD0); // Set RGB 565? |
rulla | 0:101fbacf126f | 98 | */ |
rulla | 0:101fbacf126f | 99 | |
rulla | 0:101fbacf126f | 100 | WriteReg(REG_CLKRC,0x80); |
rulla | 0:101fbacf126f | 101 | WriteReg(REG_COM11,0x1A) ; |
rulla | 0:101fbacf126f | 102 | // WriteReg(REG_TSLB,0x04); |
rulla | 0:101fbacf126f | 103 | //WriteReg(REG_TSLB,0x04); |
rulla | 0:101fbacf126f | 104 | //WriteReg(REG_COM1,0x0) ; |
rulla | 0:101fbacf126f | 105 | WriteReg(REG_COM3,0x04) ; |
rulla | 0:101fbacf126f | 106 | WriteReg(REG_COM7,0x04) ; |
rulla | 0:101fbacf126f | 107 | WriteReg(REG_COM14, 0x1a); |
rulla | 0:101fbacf126f | 108 | WriteReg(SCALING_XSC, 0x3a); |
rulla | 0:101fbacf126f | 109 | WriteReg(SCALING_YSC, 0x35); |
rulla | 0:101fbacf126f | 110 | WriteReg(SCALING_DCWCTR,0x22); |
rulla | 0:101fbacf126f | 111 | WriteReg(SCALING_PCLK_DIV,0xf2); |
rulla | 0:101fbacf126f | 112 | WriteReg(SCALING_PCLK_DELAY,0x02); |
rulla | 0:101fbacf126f | 113 | WriteReg(REG_COM8,0x87) ; |
rulla | 0:101fbacf126f | 114 | // WriteReg(REG_RGB444, 0x02); |
rulla | 0:101fbacf126f | 115 | // WriteReg(REG_RGB444, 0x00); // Disable RGB 444? |
rulla | 0:101fbacf126f | 116 | WriteReg(REG_COM15, 0xD0); // Set RGB 565? |
rulla | 0:101fbacf126f | 117 | |
rulla | 0:101fbacf126f | 118 | WriteReg(REG_HSTART,0x16) ; |
rulla | 0:101fbacf126f | 119 | WriteReg(REG_HSTOP,0x04) ; |
rulla | 0:101fbacf126f | 120 | WriteReg(REG_HREF,0x24) ; |
rulla | 0:101fbacf126f | 121 | WriteReg(REG_VSTART,0x02) ; |
rulla | 0:101fbacf126f | 122 | WriteReg(REG_VSTOP,0x7a) ; |
rulla | 0:101fbacf126f | 123 | WriteReg(REG_VREF,0x0a) ; |
rulla | 0:101fbacf126f | 124 | WriteReg(REG_COM10,0x02) ; |
rulla | 0:101fbacf126f | 125 | WriteReg(REG_MVFP,0x27) ; |
rulla | 0:101fbacf126f | 126 | |
rulla | 0:101fbacf126f | 127 | // COLOR SETTING |
rulla | 0:101fbacf126f | 128 | WriteReg(0x4f,0x80); |
rulla | 0:101fbacf126f | 129 | WriteReg(0x50,0x80); |
rulla | 0:101fbacf126f | 130 | WriteReg(0x51,0x00); |
rulla | 0:101fbacf126f | 131 | WriteReg(0x52,0x22); |
rulla | 0:101fbacf126f | 132 | WriteReg(0x53,0x5e); |
rulla | 0:101fbacf126f | 133 | WriteReg(0x54,0x80); |
rulla | 0:101fbacf126f | 134 | WriteReg(0x56,0x40); |
rulla | 0:101fbacf126f | 135 | WriteReg(0x58,0x9e); |
rulla | 0:101fbacf126f | 136 | WriteReg(0x59,0x88); |
rulla | 0:101fbacf126f | 137 | WriteReg(0x5a,0x88); |
rulla | 0:101fbacf126f | 138 | WriteReg(0x5b,0x44); |
rulla | 0:101fbacf126f | 139 | WriteReg(0x5c,0x67); |
rulla | 0:101fbacf126f | 140 | WriteReg(0x5d,0x49); |
rulla | 0:101fbacf126f | 141 | WriteReg(0x5e,0x0e); |
rulla | 0:101fbacf126f | 142 | WriteReg(0x69,0x00); |
rulla | 0:101fbacf126f | 143 | WriteReg(0x6a,0x40); |
rulla | 0:101fbacf126f | 144 | WriteReg(0x6b,0x0a); |
rulla | 0:101fbacf126f | 145 | WriteReg(0x6c,0x0a); |
rulla | 0:101fbacf126f | 146 | WriteReg(0x6d,0x55); |
rulla | 0:101fbacf126f | 147 | WriteReg(0x6e,0x11); |
rulla | 0:101fbacf126f | 148 | WriteReg(0x6f,0x9f); |
rulla | 0:101fbacf126f | 149 | |
rulla | 0:101fbacf126f | 150 | WriteReg(0xb0,0x84); |
rulla | 0:101fbacf126f | 151 | ////////// |
rulla | 0:101fbacf126f | 152 | |
rulla | 0:101fbacf126f | 153 | |
rulla | 0:101fbacf126f | 154 | |
rulla | 0:101fbacf126f | 155 | WriteReg(0x7a, 0x20); |
rulla | 0:101fbacf126f | 156 | WriteReg(0x7b, 0x1c); |
rulla | 0:101fbacf126f | 157 | WriteReg(0x7c, 0x28); |
rulla | 0:101fbacf126f | 158 | WriteReg(0x7d, 0x3c); |
rulla | 0:101fbacf126f | 159 | WriteReg(0x7e, 0x5a); |
rulla | 0:101fbacf126f | 160 | WriteReg(0x7f, 0x68); |
rulla | 0:101fbacf126f | 161 | WriteReg(0x80, 0x76); |
rulla | 0:101fbacf126f | 162 | WriteReg(0x81, 0x80); |
rulla | 0:101fbacf126f | 163 | WriteReg(0x82, 0x88); |
rulla | 0:101fbacf126f | 164 | WriteReg(0x83, 0x8f); |
rulla | 0:101fbacf126f | 165 | WriteReg(0x84, 0x96); |
rulla | 0:101fbacf126f | 166 | WriteReg(0x85, 0xa3); |
rulla | 0:101fbacf126f | 167 | WriteReg(0x86, 0xaf); |
rulla | 0:101fbacf126f | 168 | WriteReg(0x87, 0xc4); |
rulla | 0:101fbacf126f | 169 | WriteReg(0x88, 0xd7); |
rulla | 0:101fbacf126f | 170 | WriteReg(0x89, 0xe8); |
rulla | 0:101fbacf126f | 171 | |
rulla | 0:101fbacf126f | 172 | WriteReg(0x13, 0xe0); |
rulla | 0:101fbacf126f | 173 | WriteReg(0x00, 0x00); |
rulla | 0:101fbacf126f | 174 | WriteReg(0x10, 0x00); |
rulla | 0:101fbacf126f | 175 | WriteReg(0x0d, 0x40); |
rulla | 0:101fbacf126f | 176 | WriteReg(0x14, 0x18); |
rulla | 0:101fbacf126f | 177 | WriteReg(0xa5, 0x05); |
rulla | 0:101fbacf126f | 178 | WriteReg(0xab, 0x07); |
rulla | 0:101fbacf126f | 179 | WriteReg(0x24, 0x95); |
rulla | 0:101fbacf126f | 180 | WriteReg(0x25, 0x33); |
rulla | 0:101fbacf126f | 181 | WriteReg(0x26, 0xe3); |
rulla | 0:101fbacf126f | 182 | WriteReg(0x9f, 0x78); |
rulla | 0:101fbacf126f | 183 | WriteReg(0xa0, 0x68); |
rulla | 0:101fbacf126f | 184 | WriteReg(0xa1, 0x03); |
rulla | 0:101fbacf126f | 185 | WriteReg(0xa6, 0xd8); |
rulla | 0:101fbacf126f | 186 | WriteReg(0xa7, 0xd8); |
rulla | 0:101fbacf126f | 187 | WriteReg(0xa8, 0xf0); |
rulla | 0:101fbacf126f | 188 | WriteReg(0xa9, 0x90); |
rulla | 0:101fbacf126f | 189 | WriteReg(0xaa, 0x94); |
rulla | 0:101fbacf126f | 190 | WriteReg(0x13, 0xe5); |
rulla | 0:101fbacf126f | 191 | |
rulla | 0:101fbacf126f | 192 | WriteReg(0x0e, 0x61); |
rulla | 0:101fbacf126f | 193 | WriteReg(0x0f, 0x4b); |
rulla | 0:101fbacf126f | 194 | WriteReg(0x16, 0x02); |
rulla | 0:101fbacf126f | 195 | |
rulla | 0:101fbacf126f | 196 | WriteReg(0x21, 0x02); |
rulla | 0:101fbacf126f | 197 | WriteReg(0x22, 0x91); |
rulla | 0:101fbacf126f | 198 | WriteReg(0x29, 0x07); |
rulla | 0:101fbacf126f | 199 | WriteReg(0x33, 0x0b); |
rulla | 0:101fbacf126f | 200 | WriteReg(0x35, 0x0b); |
rulla | 0:101fbacf126f | 201 | WriteReg(0x37, 0x1d); |
rulla | 0:101fbacf126f | 202 | WriteReg(0x38, 0x71); |
rulla | 0:101fbacf126f | 203 | WriteReg(0x39, 0x2a); |
rulla | 0:101fbacf126f | 204 | WriteReg(0x3c, 0x78); |
rulla | 0:101fbacf126f | 205 | WriteReg(0x4d, 0x40); |
rulla | 0:101fbacf126f | 206 | WriteReg(0x4e, 0x20); |
rulla | 0:101fbacf126f | 207 | WriteReg(0x69, 0x00); |
rulla | 0:101fbacf126f | 208 | |
rulla | 0:101fbacf126f | 209 | WriteReg(0x74, 0x10); |
rulla | 0:101fbacf126f | 210 | WriteReg(0x8d, 0x4f); |
rulla | 0:101fbacf126f | 211 | WriteReg(0x8e, 0x00); |
rulla | 0:101fbacf126f | 212 | WriteReg(0x8f, 0x00); |
rulla | 0:101fbacf126f | 213 | WriteReg(0x90, 0x00); |
rulla | 0:101fbacf126f | 214 | WriteReg(0x91, 0x00); |
rulla | 0:101fbacf126f | 215 | WriteReg(0x92, 0x00); |
rulla | 0:101fbacf126f | 216 | |
rulla | 0:101fbacf126f | 217 | WriteReg(0x96, 0x00); |
rulla | 0:101fbacf126f | 218 | WriteReg(0x9a, 0x80); |
rulla | 0:101fbacf126f | 219 | WriteReg(0xb0, 0x84); |
rulla | 0:101fbacf126f | 220 | WriteReg(0xb1, 0x0c); |
rulla | 0:101fbacf126f | 221 | WriteReg(0xb2, 0x0e); |
rulla | 0:101fbacf126f | 222 | WriteReg(0xb3, 0x82); |
rulla | 0:101fbacf126f | 223 | WriteReg(0xb8, 0x0a); |
rulla | 0:101fbacf126f | 224 | |
rulla | 0:101fbacf126f | 225 | WriteReg(0x43, 0x0a); |
rulla | 0:101fbacf126f | 226 | WriteReg(0x44, 0xf0); |
rulla | 0:101fbacf126f | 227 | WriteReg(0x45, 0x34); |
rulla | 0:101fbacf126f | 228 | WriteReg(0x46, 0x58); |
rulla | 0:101fbacf126f | 229 | WriteReg(0x47, 0x28); |
rulla | 0:101fbacf126f | 230 | WriteReg(0x48, 0x3a); |
rulla | 0:101fbacf126f | 231 | WriteReg(0x59, 0x88); |
rulla | 0:101fbacf126f | 232 | WriteReg(0x5a, 0x88); |
rulla | 0:101fbacf126f | 233 | WriteReg(0x5b, 0x44); |
rulla | 0:101fbacf126f | 234 | WriteReg(0x5c, 0x67); |
rulla | 0:101fbacf126f | 235 | WriteReg(0x5d, 0x49); |
rulla | 0:101fbacf126f | 236 | WriteReg(0x5e, 0x0e); |
rulla | 0:101fbacf126f | 237 | WriteReg(0x64, 0x04); |
rulla | 0:101fbacf126f | 238 | WriteReg(0x65, 0x20); |
rulla | 0:101fbacf126f | 239 | WriteReg(0x66, 0x05); |
rulla | 0:101fbacf126f | 240 | WriteReg(0x94, 0x04); |
rulla | 0:101fbacf126f | 241 | WriteReg(0x95, 0x08); |
rulla | 0:101fbacf126f | 242 | |
rulla | 0:101fbacf126f | 243 | WriteReg(0x6c, 0x0a); |
rulla | 0:101fbacf126f | 244 | WriteReg(0x6d, 0x55); |
rulla | 0:101fbacf126f | 245 | WriteReg(0x6e, 0x11); |
rulla | 0:101fbacf126f | 246 | WriteReg(0x6f, 0x9f); |
rulla | 0:101fbacf126f | 247 | WriteReg(0x6a, 0x40); |
rulla | 0:101fbacf126f | 248 | WriteReg(0x01, 0x40); |
rulla | 0:101fbacf126f | 249 | WriteReg(0x02, 0x40); |
rulla | 0:101fbacf126f | 250 | WriteReg(0x13, 0xe7); |
rulla | 0:101fbacf126f | 251 | WriteReg(0x15, 0x02); |
rulla | 0:101fbacf126f | 252 | |
rulla | 0:101fbacf126f | 253 | WriteReg(0x4f, 0x80); |
rulla | 0:101fbacf126f | 254 | WriteReg(0x50, 0x80); |
rulla | 0:101fbacf126f | 255 | WriteReg(0x51, 0x00); |
rulla | 0:101fbacf126f | 256 | WriteReg(0x52, 0x22); |
rulla | 0:101fbacf126f | 257 | WriteReg(0x53, 0x5e); |
rulla | 0:101fbacf126f | 258 | WriteReg(0x54, 0x80); |
rulla | 0:101fbacf126f | 259 | WriteReg(0x58, 0x9e); |
rulla | 0:101fbacf126f | 260 | |
rulla | 0:101fbacf126f | 261 | WriteReg(0x41, 0x08); |
rulla | 0:101fbacf126f | 262 | WriteReg(0x3f, 0x00); |
rulla | 0:101fbacf126f | 263 | WriteReg(0x75, 0x05); |
rulla | 0:101fbacf126f | 264 | WriteReg(0x76, 0xe1); |
rulla | 0:101fbacf126f | 265 | WriteReg(0x4c, 0x00); |
rulla | 0:101fbacf126f | 266 | WriteReg(0x77, 0x01); |
rulla | 0:101fbacf126f | 267 | WriteReg(0x3d, 0xc1); |
rulla | 0:101fbacf126f | 268 | WriteReg(0x4b, 0x09); |
rulla | 0:101fbacf126f | 269 | WriteReg(0xc9, 0x60); |
rulla | 0:101fbacf126f | 270 | WriteReg(0x41, 0x38); |
rulla | 0:101fbacf126f | 271 | WriteReg(0x56, 0x40); |
rulla | 0:101fbacf126f | 272 | |
rulla | 0:101fbacf126f | 273 | WriteReg(0x34, 0x11); |
rulla | 0:101fbacf126f | 274 | WriteReg(0x3b, 0x02); |
rulla | 0:101fbacf126f | 275 | WriteReg(0xa4, 0x88); |
rulla | 0:101fbacf126f | 276 | WriteReg(0x96, 0x00); |
rulla | 0:101fbacf126f | 277 | WriteReg(0x97, 0x30); |
rulla | 0:101fbacf126f | 278 | WriteReg(0x98, 0x20); |
rulla | 0:101fbacf126f | 279 | WriteReg(0x99, 0x30); |
rulla | 0:101fbacf126f | 280 | WriteReg(0x9a, 0x84); |
rulla | 0:101fbacf126f | 281 | WriteReg(0x9b, 0x29); |
rulla | 0:101fbacf126f | 282 | WriteReg(0x9c, 0x03); |
rulla | 0:101fbacf126f | 283 | WriteReg(0x9d, 0x4c); |
rulla | 0:101fbacf126f | 284 | WriteReg(0x9e, 0x3f); |
rulla | 0:101fbacf126f | 285 | WriteReg(0x78, 0x04); |
rulla | 0:101fbacf126f | 286 | |
rulla | 0:101fbacf126f | 287 | WriteReg(0x79, 0x01); |
rulla | 0:101fbacf126f | 288 | WriteReg(0xc8, 0xf0); |
rulla | 0:101fbacf126f | 289 | WriteReg(0x79, 0x0f); |
rulla | 0:101fbacf126f | 290 | WriteReg(0xc8, 0x00); |
rulla | 0:101fbacf126f | 291 | WriteReg(0x79, 0x10); |
rulla | 0:101fbacf126f | 292 | WriteReg(0xc8, 0x7e); |
rulla | 0:101fbacf126f | 293 | WriteReg(0x79, 0x0a); |
rulla | 0:101fbacf126f | 294 | WriteReg(0xc8, 0x80); |
rulla | 0:101fbacf126f | 295 | WriteReg(0x79, 0x0b); |
rulla | 0:101fbacf126f | 296 | WriteReg(0xc8, 0x01); |
rulla | 0:101fbacf126f | 297 | WriteReg(0x79, 0x0c); |
rulla | 0:101fbacf126f | 298 | WriteReg(0xc8, 0x0f); |
rulla | 0:101fbacf126f | 299 | WriteReg(0x79, 0x0d); |
rulla | 0:101fbacf126f | 300 | WriteReg(0xc8, 0x20); |
rulla | 0:101fbacf126f | 301 | WriteReg(0x79, 0x09); |
rulla | 0:101fbacf126f | 302 | WriteReg(0xc8, 0x80); |
rulla | 0:101fbacf126f | 303 | WriteReg(0x79, 0x02); |
rulla | 0:101fbacf126f | 304 | WriteReg(0xc8, 0xc0); |
rulla | 0:101fbacf126f | 305 | WriteReg(0x79, 0x03); |
rulla | 0:101fbacf126f | 306 | WriteReg(0xc8, 0x40); |
rulla | 0:101fbacf126f | 307 | WriteReg(0x79, 0x05); |
rulla | 0:101fbacf126f | 308 | WriteReg(0xc8, 0x30); |
rulla | 0:101fbacf126f | 309 | WriteReg(0x79, 0x26); |
rulla | 0:101fbacf126f | 310 | WriteReg(0x09, 0x03); |
rulla | 0:101fbacf126f | 311 | WriteReg(0x3b, 0x42); |
rulla | 0:101fbacf126f | 312 | |
rulla | 0:101fbacf126f | 313 | WriteReg(0xff, 0xff); /* END MARKER */ |
rulla | 0:101fbacf126f | 314 | |
rulla | 0:101fbacf126f | 315 | printf("Init\n"); |
rulla | 0:101fbacf126f | 316 | } |
rulla | 0:101fbacf126f | 317 | |
rulla | 0:101fbacf126f | 318 | |
rulla | 0:101fbacf126f | 319 | |
rulla | 0:101fbacf126f | 320 | // vsync handler |
rulla | 0:101fbacf126f | 321 | void OV7670::VsyncHandler(void) |
rulla | 0:101fbacf126f | 322 | { |
rulla | 0:101fbacf126f | 323 | // Capture Enable |
rulla | 0:101fbacf126f | 324 | if (CaptureReq) { |
rulla | 0:101fbacf126f | 325 | wen = 1 ; |
rulla | 0:101fbacf126f | 326 | Done = false ; |
rulla | 0:101fbacf126f | 327 | CaptureReq = false ; |
rulla | 0:101fbacf126f | 328 | } else { |
rulla | 0:101fbacf126f | 329 | wen = 0 ; |
rulla | 0:101fbacf126f | 330 | if (Busy) { |
rulla | 0:101fbacf126f | 331 | Busy = false ; |
rulla | 0:101fbacf126f | 332 | Done = true ; |
rulla | 0:101fbacf126f | 333 | } |
rulla | 0:101fbacf126f | 334 | } |
rulla | 0:101fbacf126f | 335 | |
rulla | 0:101fbacf126f | 336 | // Hline Counter |
rulla | 0:101fbacf126f | 337 | LastLines = LineCounter ; |
rulla | 0:101fbacf126f | 338 | LineCounter = 0 ; |
rulla | 0:101fbacf126f | 339 | } |
rulla | 0:101fbacf126f | 340 | |
rulla | 0:101fbacf126f | 341 | |
rulla | 0:101fbacf126f | 342 | // Data Read |
rulla | 0:101fbacf126f | 343 | int OV7670::ReadOneByte(void) |
rulla | 0:101fbacf126f | 344 | { |
rulla | 0:101fbacf126f | 345 | int result; |
rulla | 0:101fbacf126f | 346 | rclk = 1; |
rulla | 0:101fbacf126f | 347 | result = dataP; |
rulla | 0:101fbacf126f | 348 | /* |
rulla | 0:101fbacf126f | 349 | // Shift the bits around to form the byte |
rulla | 0:101fbacf126f | 350 | int top = result >> 19; // Isolate the top nibble |
rulla | 0:101fbacf126f | 351 | int middle = result >> 2; // Isolate bits 2 & 3 |
rulla | 0:101fbacf126f | 352 | result = result & 0x00000003; // Isolate bits 0 & 1 |
rulla | 0:101fbacf126f | 353 | result += middle; |
rulla | 0:101fbacf126f | 354 | result += top; |
rulla | 0:101fbacf126f | 355 | */ |
rulla | 0:101fbacf126f | 356 | |
rulla | 0:101fbacf126f | 357 | //int middle= ((result)& 0xf00)>>4; |
rulla | 0:101fbacf126f | 358 | result= ((result&0x0f)|(((result)& 0xf00)>>4))&0xff; |
rulla | 0:101fbacf126f | 359 | // int top=((result&0x01) << 7) | ((result&0x02) << 5) | ((result&0x04) << 3) | ((result&0x08) << 1) | ((result&0x10) >>1) | ((result&0x20) <<3) | ((result&0x40) >>5) | ((result&0x80) >>7); |
rulla | 0:101fbacf126f | 360 | int top=((result&0x01) << 7) | ((result&0x02) << 5) | ((result&0x04) << 3) | ((result&0x08) << 1) |
rulla | 0:101fbacf126f | 361 | | ((result&0x10) >>1) | ((result&0x20) <<3) | ((result&0x40) >>5) | ((result&0x80) >>7); |
rulla | 0:101fbacf126f | 362 | |
rulla | 0:101fbacf126f | 363 | rclk = 0; |
rulla | 0:101fbacf126f | 364 | return top; |
rulla | 0:101fbacf126f | 365 | } |
rulla | 0:101fbacf126f | 366 | |
rulla | 0:101fbacf126f | 367 | // Data Start |
rulla | 0:101fbacf126f | 368 | void OV7670::ReadStart(void) |
rulla | 0:101fbacf126f | 369 | { |
rulla | 0:101fbacf126f | 370 | rrst = 0 ; |
rulla | 0:101fbacf126f | 371 | oe = 0 ; |
rulla | 0:101fbacf126f | 372 | wait_us(1) ; |
rulla | 0:101fbacf126f | 373 | rclk = 0 ; |
rulla | 0:101fbacf126f | 374 | wait_us(1) ; |
rulla | 0:101fbacf126f | 375 | rclk = 1 ; |
rulla | 0:101fbacf126f | 376 | wait_us(1) ; |
rulla | 0:101fbacf126f | 377 | rrst = 1 ; |
rulla | 0:101fbacf126f | 378 | } |
rulla | 0:101fbacf126f | 379 | |
rulla | 0:101fbacf126f | 380 | // Data Stop |
rulla | 0:101fbacf126f | 381 | void OV7670::ReadStop(void) |
rulla | 0:101fbacf126f | 382 | { |
rulla | 0:101fbacf126f | 383 | oe = 1 ; |
rulla | 0:101fbacf126f | 384 | ReadOneByte() ; |
rulla | 0:101fbacf126f | 385 | rclk = 1 ; |
rulla | 0:101fbacf126f | 386 | } |