kao yi
/
rtos_basic
bx-cam
Fork of rtos_basic by
main.cpp@7:f990f03bc2b2, 2014-07-04 (annotated)
- Committer:
- backman
- Date:
- Fri Jul 04 14:29:56 2014 +0000
- Revision:
- 7:f990f03bc2b2
- Parent:
- 3:c92e21f305d8
- Child:
- 8:025a9d74a731
hh
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
emilmont | 1:491820ee784d | 1 | #include "mbed.h" |
emilmont | 1:491820ee784d | 2 | #include "rtos.h" |
backman | 7:f990f03bc2b2 | 3 | #include "main.h" |
backman | 7:f990f03bc2b2 | 4 | #include "ov7670.h" |
emilmont | 1:491820ee784d | 5 | |
backman | 7:f990f03bc2b2 | 6 | |
backman | 7:f990f03bc2b2 | 7 | |
backman | 7:f990f03bc2b2 | 8 | /* |
backman | 7:f990f03bc2b2 | 9 | OV7670( |
backman | 7:f990f03bc2b2 | 10 | PinName sda, // Camera I2C port |
backman | 7:f990f03bc2b2 | 11 | PinName scl, // Camera I2C port |
backman | 7:f990f03bc2b2 | 12 | PinName vs, l8 aa // VS YNC |
backman | 7:f990f03bc2b2 | 13 | PinName hr, // HREF |
backman | 7:f990f03bc2b2 | 14 | PinName we, // WEN |
backman | 7:f990f03bc2b2 | 15 | |
backman | 7:f990f03bc2b2 | 16 | PortName port, // 8bit bus port |
backman | 7:f990f03bc2b2 | 17 | int mask, // 0b0000_0M65_4000_0321_L000_0000_0000_0000 = 0x07878000 |
backman | 7:f990f03bc2b2 | 18 | |
backman | 7:f990f03bc2b2 | 19 | PinName rt, // /RRST |
backman | 7:f990f03bc2b2 | 20 | PinName o, // /OE |
backman | 7:f990f03bc2b2 | 21 | PinName rc // RCLK |
backman | 7:f990f03bc2b2 | 22 | ); |
backman | 7:f990f03bc2b2 | 23 | |
backman | 7:f990f03bc2b2 | 24 | |
backman | 7:f990f03bc2b2 | 25 | */ |
backman | 7:f990f03bc2b2 | 26 | |
backman | 7:f990f03bc2b2 | 27 | |
backman | 7:f990f03bc2b2 | 28 | |
backman | 7:f990f03bc2b2 | 29 | OV7670 camera(PTE0,PTE1,PTD6,PTD7,PTE31,PortC,0x1983C,PTB8,PTB9,PTB10); |
backman | 7:f990f03bc2b2 | 30 | |
backman | 7:f990f03bc2b2 | 31 | |
backman | 7:f990f03bc2b2 | 32 | |
backman | 7:f990f03bc2b2 | 33 | |
backman | 7:f990f03bc2b2 | 34 | |
backman | 7:f990f03bc2b2 | 35 | |
backman | 7:f990f03bc2b2 | 36 | |
backman | 7:f990f03bc2b2 | 37 | |
backman | 7:f990f03bc2b2 | 38 | |
backman | 7:f990f03bc2b2 | 39 | #define VGA 307200 //640*480 |
backman | 7:f990f03bc2b2 | 40 | #define QVGA 76800 //320*240 |
backman | 7:f990f03bc2b2 | 41 | #define QQVGA 19200 //160*120 |
backman | 7:f990f03bc2b2 | 42 | |
backman | 7:f990f03bc2b2 | 43 | static char format = ' '; |
backman | 7:f990f03bc2b2 | 44 | static int resolution = 0; |
backman | 7:f990f03bc2b2 | 45 | |
backman | 7:f990f03bc2b2 | 46 | |
backman | 7:f990f03bc2b2 | 47 | void rxCallback() |
backman | 7:f990f03bc2b2 | 48 | { |
backman | 7:f990f03bc2b2 | 49 | pc.putc( pc.getc() ); |
backman | 7:f990f03bc2b2 | 50 | new_send = true; |
backman | 7:f990f03bc2b2 | 51 | } |
backman | 7:f990f03bc2b2 | 52 | |
backman | 7:f990f03bc2b2 | 53 | I2C i2c(PTE0, PTE1); |
backman | 7:f990f03bc2b2 | 54 | |
backman | 7:f990f03bc2b2 | 55 | /* |
backman | 7:f990f03bc2b2 | 56 | int main() { |
backman | 7:f990f03bc2b2 | 57 | |
backman | 7:f990f03bc2b2 | 58 | while (1) { |
backman | 7:f990f03bc2b2 | 59 | |
backman | 7:f990f03bc2b2 | 60 | i2c.write('l'); |
backman | 7:f990f03bc2b2 | 61 | |
backman | 7:f990f03bc2b2 | 62 | wait(0.5); |
backman | 7:f990f03bc2b2 | 63 | |
backman | 7:f990f03bc2b2 | 64 | |
backman | 7:f990f03bc2b2 | 65 | |
backman | 7:f990f03bc2b2 | 66 | } |
backman | 7:f990f03bc2b2 | 67 | }*/ |
backman | 7:f990f03bc2b2 | 68 | |
backman | 7:f990f03bc2b2 | 69 | |
backman | 7:f990f03bc2b2 | 70 | |
backman | 7:f990f03bc2b2 | 71 | int main() |
backman | 7:f990f03bc2b2 | 72 | { |
backman | 7:f990f03bc2b2 | 73 | pc.baud(115200); |
backman | 7:f990f03bc2b2 | 74 | pc.printf("SystemCoreClock: %dMHz\r\n", SystemCoreClock/1000000); // print the clock frequency |
backman | 7:f990f03bc2b2 | 75 | led4 = 0; |
backman | 7:f990f03bc2b2 | 76 | |
backman | 7:f990f03bc2b2 | 77 | |
backman | 7:f990f03bc2b2 | 78 | |
backman | 7:f990f03bc2b2 | 79 | t.start(); |
backman | 7:f990f03bc2b2 | 80 | //pc.attach(&rxCallback); |
backman | 7:f990f03bc2b2 | 81 | |
backman | 7:f990f03bc2b2 | 82 | strcpy(word,"init_yuv_QQVGA"); |
backman | 7:f990f03bc2b2 | 83 | parse_cmd(); |
backman | 7:f990f03bc2b2 | 84 | |
backman | 7:f990f03bc2b2 | 85 | |
backman | 7:f990f03bc2b2 | 86 | wait_ms(50); |
backman | 7:f990f03bc2b2 | 87 | |
backman | 7:f990f03bc2b2 | 88 | strcpy(word,"snap"); |
backman | 7:f990f03bc2b2 | 89 | parse_cmd(); |
backman | 7:f990f03bc2b2 | 90 | |
backman | 7:f990f03bc2b2 | 91 | |
backman | 7:f990f03bc2b2 | 92 | |
backman | 7:f990f03bc2b2 | 93 | |
backman | 7:f990f03bc2b2 | 94 | /*while(1) |
backman | 7:f990f03bc2b2 | 95 | { |
backman | 7:f990f03bc2b2 | 96 | |
backman | 7:f990f03bc2b2 | 97 | if(new_send) |
backman | 7:f990f03bc2b2 | 98 | { |
backman | 7:f990f03bc2b2 | 99 | int i = 0; |
backman | 7:f990f03bc2b2 | 100 | |
backman | 7:f990f03bc2b2 | 101 | |
backman | 7:f990f03bc2b2 | 102 | |
backman | 7:f990f03bc2b2 | 103 | |
backman | 7:f990f03bc2b2 | 104 | while(pc.readable()) |
backman | 7:f990f03bc2b2 | 105 | { |
backman | 7:f990f03bc2b2 | 106 | word[i] = pc.getc(); |
backman | 7:f990f03bc2b2 | 107 | i++; |
backman | 7:f990f03bc2b2 | 108 | } |
backman | 7:f990f03bc2b2 | 109 | parse_cmd(); |
backman | 7:f990f03bc2b2 | 110 | i=0; |
backman | 7:f990f03bc2b2 | 111 | } |
backman | 7:f990f03bc2b2 | 112 | |
backman | 7:f990f03bc2b2 | 113 | wait_ms(50); |
backman | 7:f990f03bc2b2 | 114 | }*/ |
backman | 7:f990f03bc2b2 | 115 | |
backman | 7:f990f03bc2b2 | 116 | } |
backman | 7:f990f03bc2b2 | 117 | |
backman | 7:f990f03bc2b2 | 118 | |
emilmont | 1:491820ee784d | 119 | |
backman | 7:f990f03bc2b2 | 120 | void parse_cmd() |
backman | 7:f990f03bc2b2 | 121 | { |
backman | 7:f990f03bc2b2 | 122 | new_send = false; |
backman | 7:f990f03bc2b2 | 123 | |
backman | 7:f990f03bc2b2 | 124 | if(strcmp("snap", word) == 0) |
backman | 7:f990f03bc2b2 | 125 | { |
backman | 7:f990f03bc2b2 | 126 | CameraSnap(); |
backman | 7:f990f03bc2b2 | 127 | memset(word, 0, sizeof(word)); |
backman | 7:f990f03bc2b2 | 128 | }else |
backman | 7:f990f03bc2b2 | 129 | if(strcmp("init_bw_VGA", word) == 0) // Set up for 640*480 pixels RAW |
backman | 7:f990f03bc2b2 | 130 | { |
backman | 7:f990f03bc2b2 | 131 | |
backman | 7:f990f03bc2b2 | 132 | format = 'b'; |
backman | 7:f990f03bc2b2 | 133 | resolution = VGA; |
backman | 7:f990f03bc2b2 | 134 | if(camera.Init('b', VGA) != 1) |
backman | 7:f990f03bc2b2 | 135 | { |
backman | 7:f990f03bc2b2 | 136 | pc.printf("Init Fail\r\n"); |
backman | 7:f990f03bc2b2 | 137 | } |
backman | 7:f990f03bc2b2 | 138 | pc.printf("Initializing done\r\n"); |
backman | 7:f990f03bc2b2 | 139 | memset(word, 0, sizeof(word)); |
backman | 7:f990f03bc2b2 | 140 | }else |
backman | 7:f990f03bc2b2 | 141 | if(strcmp("init_yuv_QVGA", word) == 0) // Set up for 320*240 pixels YUV422 |
backman | 7:f990f03bc2b2 | 142 | { |
backman | 7:f990f03bc2b2 | 143 | format = 'y'; |
backman | 7:f990f03bc2b2 | 144 | resolution = QVGA; |
backman | 7:f990f03bc2b2 | 145 | if(camera.Init('b', QVGA) != 1) |
backman | 7:f990f03bc2b2 | 146 | { |
backman | 7:f990f03bc2b2 | 147 | pc.printf("Init Fail\r\n"); |
backman | 7:f990f03bc2b2 | 148 | } |
backman | 7:f990f03bc2b2 | 149 | pc.printf("Initializing done\r\n"); |
backman | 7:f990f03bc2b2 | 150 | memset(word, 0, sizeof(word)); |
backman | 7:f990f03bc2b2 | 151 | }else |
backman | 7:f990f03bc2b2 | 152 | if(strcmp("init_rgb_QVGA", word) == 0) // Set up for 320*240 pixels RGB565 |
backman | 7:f990f03bc2b2 | 153 | { |
backman | 7:f990f03bc2b2 | 154 | format = 'r'; |
backman | 7:f990f03bc2b2 | 155 | resolution = QVGA; |
backman | 7:f990f03bc2b2 | 156 | if(camera.Init('r', QVGA) != 1) |
backman | 7:f990f03bc2b2 | 157 | { |
backman | 7:f990f03bc2b2 | 158 | pc.printf("Init Fail\r\n"); |
backman | 7:f990f03bc2b2 | 159 | } |
backman | 7:f990f03bc2b2 | 160 | pc.printf("Initializing done\r\n"); |
backman | 7:f990f03bc2b2 | 161 | memset(word, 0, sizeof(word)); |
backman | 7:f990f03bc2b2 | 162 | }else |
backman | 7:f990f03bc2b2 | 163 | if(strcmp("init_bw_QVGA", word) == 0) // Set up for 320*240 pixels YUV (Only Y) |
backman | 7:f990f03bc2b2 | 164 | { |
backman | 7:f990f03bc2b2 | 165 | format = 'b'; |
backman | 7:f990f03bc2b2 | 166 | resolution = QVGA; |
backman | 7:f990f03bc2b2 | 167 | |
backman | 7:f990f03bc2b2 | 168 | if(camera.Init('b', QVGA) != 1) |
backman | 7:f990f03bc2b2 | 169 | { |
backman | 7:f990f03bc2b2 | 170 | pc.printf("Init Fail\r\n"); |
backman | 7:f990f03bc2b2 | 171 | } |
backman | 7:f990f03bc2b2 | 172 | pc.printf("Initializing done\r\n"); |
backman | 7:f990f03bc2b2 | 173 | memset(word, 0, sizeof(word)); |
backman | 7:f990f03bc2b2 | 174 | }else |
backman | 7:f990f03bc2b2 | 175 | if(strcmp("init_yuv_QQVGA", word) == 0) // Set up for 160*120 pixels YUV422 //////// |
backman | 7:f990f03bc2b2 | 176 | { |
backman | 7:f990f03bc2b2 | 177 | |
backman | 7:f990f03bc2b2 | 178 | format = 'y'; |
backman | 7:f990f03bc2b2 | 179 | resolution = QQVGA; |
backman | 7:f990f03bc2b2 | 180 | |
backman | 7:f990f03bc2b2 | 181 | //pc.printf("ReadReg = %o\r\n",camera.Init('b', QQVGA)); |
backman | 7:f990f03bc2b2 | 182 | |
backman | 7:f990f03bc2b2 | 183 | if(camera.Init('b', QQVGA) != 1) |
backman | 7:f990f03bc2b2 | 184 | { |
backman | 7:f990f03bc2b2 | 185 | pc.printf("Init Fail\r\n"); |
backman | 7:f990f03bc2b2 | 186 | } |
backman | 7:f990f03bc2b2 | 187 | pc.printf("Initializing done\r\n"); |
backman | 7:f990f03bc2b2 | 188 | memset(word, 0, sizeof(word)); |
backman | 7:f990f03bc2b2 | 189 | }else |
backman | 7:f990f03bc2b2 | 190 | if(strcmp("init_rgb_QQVGA", word) == 0) // Set up for 160*120 pixels RGB565 |
backman | 7:f990f03bc2b2 | 191 | { |
backman | 7:f990f03bc2b2 | 192 | format = 'r'; |
backman | 7:f990f03bc2b2 | 193 | resolution = QQVGA; |
backman | 7:f990f03bc2b2 | 194 | if(camera.Init('r', QQVGA) != 1) |
backman | 7:f990f03bc2b2 | 195 | { |
backman | 7:f990f03bc2b2 | 196 | pc.printf("Init Fail\r\n"); |
backman | 7:f990f03bc2b2 | 197 | } |
backman | 7:f990f03bc2b2 | 198 | pc.printf("Initializing done\r\n"); |
backman | 7:f990f03bc2b2 | 199 | memset(word, 0, sizeof(word)); |
backman | 7:f990f03bc2b2 | 200 | }else |
backman | 7:f990f03bc2b2 | 201 | if(strcmp("init_bw_QQVGA", word) == 0) // Set up for 160*120 pixels YUV (Only Y) |
backman | 7:f990f03bc2b2 | 202 | { |
backman | 7:f990f03bc2b2 | 203 | format = 'b'; |
backman | 7:f990f03bc2b2 | 204 | resolution = QQVGA; |
backman | 7:f990f03bc2b2 | 205 | if(camera.Init('b', QQVGA) != 1) |
backman | 7:f990f03bc2b2 | 206 | { |
backman | 7:f990f03bc2b2 | 207 | pc.printf("Init Fail\r\n"); |
backman | 7:f990f03bc2b2 | 208 | } |
backman | 7:f990f03bc2b2 | 209 | pc.printf("Initializing done\r\n"); |
backman | 7:f990f03bc2b2 | 210 | memset(word, 0, sizeof(word)); |
backman | 7:f990f03bc2b2 | 211 | }else |
backman | 7:f990f03bc2b2 | 212 | if(strcmp("reset", word) == 0) |
backman | 7:f990f03bc2b2 | 213 | { |
backman | 7:f990f03bc2b2 | 214 | mbed_reset(); |
backman | 7:f990f03bc2b2 | 215 | }else |
backman | 7:f990f03bc2b2 | 216 | if(strcmp("time", word) == 0) |
backman | 7:f990f03bc2b2 | 217 | { |
backman | 7:f990f03bc2b2 | 218 | pc.printf("Tot time acq + send (mbed): %dms\r\n", t2-t1); |
backman | 7:f990f03bc2b2 | 219 | memset(word, 0, sizeof(word)); |
backman | 7:f990f03bc2b2 | 220 | }else |
backman | 7:f990f03bc2b2 | 221 | if(strcmp("reg_status", word) == 0) |
backman | 7:f990f03bc2b2 | 222 | { |
backman | 7:f990f03bc2b2 | 223 | int i = 0; |
backman | 7:f990f03bc2b2 | 224 | pc.printf("AD : +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F"); |
backman | 7:f990f03bc2b2 | 225 | for (i=0;i<OV7670_REGMAX;i++) |
backman | 7:f990f03bc2b2 | 226 | { |
backman | 7:f990f03bc2b2 | 227 | int data; |
backman | 7:f990f03bc2b2 | 228 | data = camera.ReadReg(i); // READ REG |
backman | 7:f990f03bc2b2 | 229 | if ((i & 0x0F) == 0) |
backman | 7:f990f03bc2b2 | 230 | { |
backman | 7:f990f03bc2b2 | 231 | pc.printf("\r\n%02X : ",i); |
backman | 7:f990f03bc2b2 | 232 | } |
backman | 7:f990f03bc2b2 | 233 | pc.printf("%02X ",data); |
backman | 7:f990f03bc2b2 | 234 | } |
backman | 7:f990f03bc2b2 | 235 | pc.printf("\r\n"); |
backman | 7:f990f03bc2b2 | 236 | } |
backman | 7:f990f03bc2b2 | 237 | |
backman | 7:f990f03bc2b2 | 238 | memset(word, 0, sizeof(word)); |
backman | 7:f990f03bc2b2 | 239 | |
emilmont | 1:491820ee784d | 240 | } |
emilmont | 1:491820ee784d | 241 | |
backman | 7:f990f03bc2b2 | 242 | |
backman | 7:f990f03bc2b2 | 243 | void CameraSnap() |
backman | 7:f990f03bc2b2 | 244 | { |
backman | 7:f990f03bc2b2 | 245 | led4 = 1; |
backman | 7:f990f03bc2b2 | 246 | |
backman | 7:f990f03bc2b2 | 247 | // Kick things off by capturing an image |
backman | 7:f990f03bc2b2 | 248 | camera.CaptureNext(); |
backman | 7:f990f03bc2b2 | 249 | while(camera.CaptureDone() == false); |
backman | 7:f990f03bc2b2 | 250 | // Start reading in the image data from the camera hardware buffer |
backman | 7:f990f03bc2b2 | 251 | camera.ReadStart(); |
backman | 7:f990f03bc2b2 | 252 | t1 = t.read_ms(); |
backman | 7:f990f03bc2b2 | 253 | pc.printf("re: %d",resolution); |
backman | 7:f990f03bc2b2 | 254 | for(int x = 0; x<resolution; x++) |
backman | 7:f990f03bc2b2 | 255 | { |
backman | 7:f990f03bc2b2 | 256 | |
backman | 7:f990f03bc2b2 | 257 | |
backman | 7:f990f03bc2b2 | 258 | // Read in the first half of the image |
backman | 7:f990f03bc2b2 | 259 | if(format == 'b' && resolution != VGA) |
backman | 7:f990f03bc2b2 | 260 | { |
backman | 7:f990f03bc2b2 | 261 | camera.ReadOnebyte(); |
backman | 7:f990f03bc2b2 | 262 | }else |
backman | 7:f990f03bc2b2 | 263 | if(format == 'y' || format == 'r') |
backman | 7:f990f03bc2b2 | 264 | { |
backman | 7:f990f03bc2b2 | 265 | // pc.printf("XDDDD"); |
backman | 7:f990f03bc2b2 | 266 | pc.putc(camera.ReadOnebyte()); |
backman | 7:f990f03bc2b2 | 267 | } |
backman | 7:f990f03bc2b2 | 268 | // Read in the Second half of the image |
backman | 7:f990f03bc2b2 | 269 | pc.putc(camera.ReadOnebyte()); // Y only |
backman | 7:f990f03bc2b2 | 270 | } |
backman | 7:f990f03bc2b2 | 271 | |
backman | 7:f990f03bc2b2 | 272 | camera.ReadStop(); |
backman | 7:f990f03bc2b2 | 273 | t2 = t.read_ms(); |
backman | 7:f990f03bc2b2 | 274 | |
backman | 7:f990f03bc2b2 | 275 | camera.CaptureNext(); |
backman | 7:f990f03bc2b2 | 276 | while(camera.CaptureDone() == false); |
backman | 7:f990f03bc2b2 | 277 | |
backman | 7:f990f03bc2b2 | 278 | pc.printf("Snap_done\r\n"); |
backman | 7:f990f03bc2b2 | 279 | led4 = 0; |
emilmont | 1:491820ee784d | 280 | } |
backman | 7:f990f03bc2b2 | 281 | |
backman | 7:f990f03bc2b2 | 282 | |
backman | 7:f990f03bc2b2 | 283 |