kao yi
/
rtos_basic
bx-cam
Fork of rtos_basic by
main.cpp
- Committer:
- backman
- Date:
- 2014-07-04
- Revision:
- 7:f990f03bc2b2
- Parent:
- 3:c92e21f305d8
- Child:
- 8:025a9d74a731
File content as of revision 7:f990f03bc2b2:
#include "mbed.h" #include "rtos.h" #include "main.h" #include "ov7670.h" /* OV7670( PinName sda, // Camera I2C port PinName scl, // Camera I2C port PinName vs, l8 aa // VS YNC PinName hr, // HREF PinName we, // WEN PortName port, // 8bit bus port int mask, // 0b0000_0M65_4000_0321_L000_0000_0000_0000 = 0x07878000 PinName rt, // /RRST PinName o, // /OE PinName rc // RCLK ); */ OV7670 camera(PTE0,PTE1,PTD6,PTD7,PTE31,PortC,0x1983C,PTB8,PTB9,PTB10); #define VGA 307200 //640*480 #define QVGA 76800 //320*240 #define QQVGA 19200 //160*120 static char format = ' '; static int resolution = 0; void rxCallback() { pc.putc( pc.getc() ); new_send = true; } I2C i2c(PTE0, PTE1); /* int main() { while (1) { i2c.write('l'); wait(0.5); } }*/ int main() { pc.baud(115200); pc.printf("SystemCoreClock: %dMHz\r\n", SystemCoreClock/1000000); // print the clock frequency led4 = 0; t.start(); //pc.attach(&rxCallback); strcpy(word,"init_yuv_QQVGA"); parse_cmd(); wait_ms(50); strcpy(word,"snap"); parse_cmd(); /*while(1) { if(new_send) { int i = 0; while(pc.readable()) { word[i] = pc.getc(); i++; } parse_cmd(); i=0; } wait_ms(50); }*/ } void parse_cmd() { new_send = false; if(strcmp("snap", word) == 0) { CameraSnap(); memset(word, 0, sizeof(word)); }else if(strcmp("init_bw_VGA", word) == 0) // Set up for 640*480 pixels RAW { format = 'b'; resolution = VGA; if(camera.Init('b', VGA) != 1) { pc.printf("Init Fail\r\n"); } pc.printf("Initializing done\r\n"); memset(word, 0, sizeof(word)); }else if(strcmp("init_yuv_QVGA", word) == 0) // Set up for 320*240 pixels YUV422 { format = 'y'; resolution = QVGA; if(camera.Init('b', QVGA) != 1) { pc.printf("Init Fail\r\n"); } pc.printf("Initializing done\r\n"); memset(word, 0, sizeof(word)); }else if(strcmp("init_rgb_QVGA", word) == 0) // Set up for 320*240 pixels RGB565 { format = 'r'; resolution = QVGA; if(camera.Init('r', QVGA) != 1) { pc.printf("Init Fail\r\n"); } pc.printf("Initializing done\r\n"); memset(word, 0, sizeof(word)); }else if(strcmp("init_bw_QVGA", word) == 0) // Set up for 320*240 pixels YUV (Only Y) { format = 'b'; resolution = QVGA; if(camera.Init('b', QVGA) != 1) { pc.printf("Init Fail\r\n"); } pc.printf("Initializing done\r\n"); memset(word, 0, sizeof(word)); }else if(strcmp("init_yuv_QQVGA", word) == 0) // Set up for 160*120 pixels YUV422 //////// { format = 'y'; resolution = QQVGA; //pc.printf("ReadReg = %o\r\n",camera.Init('b', QQVGA)); if(camera.Init('b', QQVGA) != 1) { pc.printf("Init Fail\r\n"); } pc.printf("Initializing done\r\n"); memset(word, 0, sizeof(word)); }else if(strcmp("init_rgb_QQVGA", word) == 0) // Set up for 160*120 pixels RGB565 { format = 'r'; resolution = QQVGA; if(camera.Init('r', QQVGA) != 1) { pc.printf("Init Fail\r\n"); } pc.printf("Initializing done\r\n"); memset(word, 0, sizeof(word)); }else if(strcmp("init_bw_QQVGA", word) == 0) // Set up for 160*120 pixels YUV (Only Y) { format = 'b'; resolution = QQVGA; if(camera.Init('b', QQVGA) != 1) { pc.printf("Init Fail\r\n"); } pc.printf("Initializing done\r\n"); memset(word, 0, sizeof(word)); }else if(strcmp("reset", word) == 0) { mbed_reset(); }else if(strcmp("time", word) == 0) { pc.printf("Tot time acq + send (mbed): %dms\r\n", t2-t1); memset(word, 0, sizeof(word)); }else if(strcmp("reg_status", word) == 0) { int i = 0; pc.printf("AD : +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F"); for (i=0;i<OV7670_REGMAX;i++) { int data; data = camera.ReadReg(i); // READ REG if ((i & 0x0F) == 0) { pc.printf("\r\n%02X : ",i); } pc.printf("%02X ",data); } pc.printf("\r\n"); } memset(word, 0, sizeof(word)); } void CameraSnap() { led4 = 1; // Kick things off by capturing an image camera.CaptureNext(); while(camera.CaptureDone() == false); // Start reading in the image data from the camera hardware buffer camera.ReadStart(); t1 = t.read_ms(); pc.printf("re: %d",resolution); for(int x = 0; x<resolution; x++) { // Read in the first half of the image if(format == 'b' && resolution != VGA) { camera.ReadOnebyte(); }else if(format == 'y' || format == 'r') { // pc.printf("XDDDD"); pc.putc(camera.ReadOnebyte()); } // Read in the Second half of the image pc.putc(camera.ReadOnebyte()); // Y only } camera.ReadStop(); t2 = t.read_ms(); camera.CaptureNext(); while(camera.CaptureDone() == false); pc.printf("Snap_done\r\n"); led4 = 0; }