bx-cam

Dependencies:   mbed-rtos mbed

Fork of rtos_basic by mbed official

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?

UserRevisionLine numberNew 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