Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: FastPWM MODSERIAL mbed
Revision 2:a7f5fa80a385, committed 2013-07-23
- Comitter:
 - sampullman
 - Date:
 - Tue Jul 23 06:36:50 2013 +0000
 - Parent:
 - 1:6e4d2cff76e8
 - Commit message:
 - Fixed OV7670.cpp file name
 
Changed in this revision
| OC7670.cpp | Show diff for this revision Revisions of this file | 
| OV7670.cpp | Show annotated file Show diff for this revision Revisions of this file | 
diff -r 6e4d2cff76e8 -r a7f5fa80a385 OC7670.cpp
--- a/OC7670.cpp	Tue Jul 23 06:33:27 2013 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,192 +0,0 @@
-#include "OV7670.h"
-
-OV7670::OV7670(
-    PinName sda, // Camera I2C port
-    PinName scl, // Camera I2C port
-    PinName xclk,// Camera XCLK
-    PinName pclkPin,// PCLK
-    PinName vs,  // VSYNC
-    PinName hr,  // HREF
-    
-    PortName port, // 8bit bus port
-    int mask // 0000 0111 4000 0111 1000 0000 0000 0000 = 0x07878000
-    
-    ) : camera(sda,scl), data(port, mask), inPort(Port2, 0x0000001C),  spi(p5, p6, p7), ram(spi, p8)
-{
-    camera.stop();
-    camera.frequency(OV7670_I2CFREQ);
-    xclkPin = xclk;
-    spi.frequency(16000000);
-    size = 0;
-}
-
-void OV7670::Init() {
-    FastPWM clkOut(xclkPin);
-    double pclk_period_us = (1.0 / 16000000.0)*1000000;
-    clkOut.period_us(pclk_period_us);
-    clkOut.pulsewidth_us(pclk_period_us/2.0);
-    wait_ms(50);
-}
-
-void OV7670::WriteReg(int addr, int data) {
-    // WRITE 0x42, ADDR, DATA
-    camera.start();
-    camera.write(OV7670_WRITE);
-    wait_us(OV7670_WRITEWAIT);
-    camera.write(addr);
-    wait_us(OV7670_WRITEWAIT);
-    camera.write(data);
-    camera.stop();
-}
-
-int OV7670::ReadReg(int addr) {
-    int data;
-
-    // WRITE 0x42,ADDR
-    camera.start();
-    camera.write(OV7670_WRITE);
-    wait_us(OV7670_WRITEWAIT);
-    camera.write(addr);
-    camera.stop();
-    wait_us(OV7670_WRITEWAIT);    
-
-    // WRITE 0x43,READ
-    camera.start();
-    camera.write(OV7670_READ);
-    wait_us(OV7670_WRITEWAIT);
-    data = camera.read(OV7670_NOACK);
-    camera.stop();
-
-    return data;
-}
-
-void OV7670::Reset(void) {    
-    WriteReg(0x12,0x80) ; // RESET CAMERA
-    wait_ms(200) ;
-}
-
-void OV7670::InitQQVGA() {
-    // QQVGA RGB444
-    WriteReg(REG_CLKRC,0x03);
-    WriteReg(REG_COM11,0x0A) ;
-    WriteReg(REG_TSLB,0x04);
-    WriteReg(REG_COM7,0x04) ;
-    
-    WriteReg(REG_RGB444, 0x00);     // Disable RGB 444?
-    WriteReg(REG_COM15, 0xD0);      // Set RGB 565?
-    
-    WriteReg(REG_HSTART,0x16) ;
-    WriteReg(REG_HSTOP,0x04) ;
-    WriteReg(REG_HREF,0x24) ;
-    WriteReg(REG_VSTART,0x02) ;
-    WriteReg(REG_VSTOP,0x7a) ;
-    WriteReg(REG_VREF,0x0a) ;
-    WriteReg(REG_COM10,0x02) ;
-    WriteReg(REG_COM3, 0x04);
-    WriteReg(REG_COM14, 0x1a);
-    WriteReg(REG_MVFP,0x27) ;
-    WriteReg(0x72, 0x22);
-    WriteReg(0x73, 0xf2);
-
-    // COLOR SETTING
-    WriteReg(0x4f,0x80);
-    WriteReg(0x50,0x80);
-    WriteReg(0x51,0x00);
-    WriteReg(0x52,0x22);
-    WriteReg(0x53,0x5e);
-    WriteReg(0x54,0x80);
-    WriteReg(0x56,0x40);
-    WriteReg(0x58,0x9e);
-    WriteReg(0x59,0x88);
-    WriteReg(0x5a,0x88);
-    WriteReg(0x5b,0x44);
-    WriteReg(0x5c,0x67);
-    WriteReg(0x5d,0x49);
-    WriteReg(0x5e,0x0e);
-    WriteReg(0x69,0x00);
-    WriteReg(0x6a,0x40);
-    WriteReg(0x6b,0x0a);
-    WriteReg(0x6c,0x0a);
-    WriteReg(0x6d,0x55);
-    WriteReg(0x6e,0x11);
-    WriteReg(0x6f,0x9f);
-
-    WriteReg(0xb0,0x84);
-    size = 160 * 120 * 2;
-}
-
-void OV7670::scopeTest(Serial *host) {
-    Timer t1, t2;
-    int LED = 0x80000000;
-    PortInOut status(Port1, LED);
-    status = LED;
-    int cycles = 1000000;
-    while(inPort & 0x00000008) {};
-    while(!(inPort & 0x00000008)) {};
-    t1.start();
-    while(cycles--) {
-        while(!(inPort & 0x00000010)) {};
-        while(inPort & 0x00000010) {};
-    }
-    status = 0;
-    t1.stop();
-    printf("One million cycles: %d\n\r", t1.read_us());
-    //printf("Avg on, off = %d, %d\n\r", t1.read_us()/100, t2.read_us()/100);
-}
-
-int OV7670::captureImage() {
-    int d, i=0;
-    int byte = 0;
-    Timer t1;
-    // Prepare SRAM output
-    ram.startWriteSequence();
-    // Read in the first half of the image
-    while(inPort & 0x00000008) {};    // Wait for VSYNC low
-    while(!(inPort & 0x00000008)) {}; // Wait for VSYNC high
-    //t1.start();
-    while(inPort & 0x00000008) {      // While VSYNC high
-        while((inPort & 0x00000008) && !(inPort & 0x00000004)) {};  // stall while VSYNC high and HREF low
-        if(!(inPort & 0x00000008)) {                  // if VSYNC low
-            //printf("Interrupted!\n\r");
-            break;
-        }
-        while (inPort & 0x00000004) {       // While HREF high
-            while(!(inPort & 0x00000010)) {};  // Wait for PCLK high
-            d = data;
-            byte  = (d & 0x07800000) >> 19; // bit26 to bit7
-            byte |= (d & 0x00078000) >> 15; // bit18 to bit3
-            //arr1[i] = byte;
-            ram.writeSequence1(byte);
-            while(inPort & 0x00000010) {};        // Wait for PCLK low
-            while(!(inPort & 0x00000010)) {};  // Wait for PCLK high
-            d = data;
-            byte  = (d & 0x07800000) >> 19; // bit26 to bit7
-            byte |= (d & 0x00078000) >> 15; // bit18 to bit3
-            ram.writeSequence1(byte);
-            //arr2[i++] = byte;
-            while(inPort & 0x00000010) {}; 
-            i++;
-        }
-    }
-    //t1.stop();
-    ram.stopSequence();
-    //printf("Image read: %d\n\r", t1.read_us());
-    return i*2;
-}
-
-
-void OV7670::sendImage(Serial *dest, int numBytes) {
-    Timer t;
-    Serial host = *dest;
-    // Write the image to the serial host
-    ram.startReadSequence();
-    t.start();
-    for (int i = 0; i < numBytes; i++) {
-        while(!(host.writeable())) {}
-        host.putc(ram.readSequence1());
-    }
-    t.stop();
-    printf("BT time: %d\n\r", t.read_us());
-    ram.stopSequence();
-}
-    
\ No newline at end of file
diff -r 6e4d2cff76e8 -r a7f5fa80a385 OV7670.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/OV7670.cpp	Tue Jul 23 06:36:50 2013 +0000
@@ -0,0 +1,192 @@
+#include "OV7670.h"
+
+OV7670::OV7670(
+    PinName sda, // Camera I2C port
+    PinName scl, // Camera I2C port
+    PinName xclk,// Camera XCLK
+    PinName pclkPin,// PCLK
+    PinName vs,  // VSYNC
+    PinName hr,  // HREF
+    
+    PortName port, // 8bit bus port
+    int mask // 0000 0111 4000 0111 1000 0000 0000 0000 = 0x07878000
+    
+    ) : camera(sda,scl), data(port, mask), inPort(Port2, 0x0000001C),  spi(p5, p6, p7), ram(spi, p8)
+{
+    camera.stop();
+    camera.frequency(OV7670_I2CFREQ);
+    xclkPin = xclk;
+    spi.frequency(16000000);
+    size = 0;
+}
+
+void OV7670::Init() {
+    FastPWM clkOut(xclkPin);
+    double pclk_period_us = (1.0 / 16000000.0)*1000000;
+    clkOut.period_us(pclk_period_us);
+    clkOut.pulsewidth_us(pclk_period_us/2.0);
+    wait_ms(50);
+}
+
+void OV7670::WriteReg(int addr, int data) {
+    // WRITE 0x42, ADDR, DATA
+    camera.start();
+    camera.write(OV7670_WRITE);
+    wait_us(OV7670_WRITEWAIT);
+    camera.write(addr);
+    wait_us(OV7670_WRITEWAIT);
+    camera.write(data);
+    camera.stop();
+}
+
+int OV7670::ReadReg(int addr) {
+    int data;
+
+    // WRITE 0x42,ADDR
+    camera.start();
+    camera.write(OV7670_WRITE);
+    wait_us(OV7670_WRITEWAIT);
+    camera.write(addr);
+    camera.stop();
+    wait_us(OV7670_WRITEWAIT);    
+
+    // WRITE 0x43,READ
+    camera.start();
+    camera.write(OV7670_READ);
+    wait_us(OV7670_WRITEWAIT);
+    data = camera.read(OV7670_NOACK);
+    camera.stop();
+
+    return data;
+}
+
+void OV7670::Reset(void) {    
+    WriteReg(0x12,0x80) ; // RESET CAMERA
+    wait_ms(200) ;
+}
+
+void OV7670::InitQQVGA() {
+    // QQVGA RGB444
+    WriteReg(REG_CLKRC,0x03);
+    WriteReg(REG_COM11,0x0A) ;
+    WriteReg(REG_TSLB,0x04);
+    WriteReg(REG_COM7,0x04) ;
+    
+    WriteReg(REG_RGB444, 0x00);     // Disable RGB 444?
+    WriteReg(REG_COM15, 0xD0);      // Set RGB 565?
+    
+    WriteReg(REG_HSTART,0x16) ;
+    WriteReg(REG_HSTOP,0x04) ;
+    WriteReg(REG_HREF,0x24) ;
+    WriteReg(REG_VSTART,0x02) ;
+    WriteReg(REG_VSTOP,0x7a) ;
+    WriteReg(REG_VREF,0x0a) ;
+    WriteReg(REG_COM10,0x02) ;
+    WriteReg(REG_COM3, 0x04);
+    WriteReg(REG_COM14, 0x1a);
+    WriteReg(REG_MVFP,0x27) ;
+    WriteReg(0x72, 0x22);
+    WriteReg(0x73, 0xf2);
+
+    // COLOR SETTING
+    WriteReg(0x4f,0x80);
+    WriteReg(0x50,0x80);
+    WriteReg(0x51,0x00);
+    WriteReg(0x52,0x22);
+    WriteReg(0x53,0x5e);
+    WriteReg(0x54,0x80);
+    WriteReg(0x56,0x40);
+    WriteReg(0x58,0x9e);
+    WriteReg(0x59,0x88);
+    WriteReg(0x5a,0x88);
+    WriteReg(0x5b,0x44);
+    WriteReg(0x5c,0x67);
+    WriteReg(0x5d,0x49);
+    WriteReg(0x5e,0x0e);
+    WriteReg(0x69,0x00);
+    WriteReg(0x6a,0x40);
+    WriteReg(0x6b,0x0a);
+    WriteReg(0x6c,0x0a);
+    WriteReg(0x6d,0x55);
+    WriteReg(0x6e,0x11);
+    WriteReg(0x6f,0x9f);
+
+    WriteReg(0xb0,0x84);
+    size = 160 * 120 * 2;
+}
+
+void OV7670::scopeTest(Serial *host) {
+    Timer t1, t2;
+    int LED = 0x80000000;
+    PortInOut status(Port1, LED);
+    status = LED;
+    int cycles = 1000000;
+    while(inPort & 0x00000008) {};
+    while(!(inPort & 0x00000008)) {};
+    t1.start();
+    while(cycles--) {
+        while(!(inPort & 0x00000010)) {};
+        while(inPort & 0x00000010) {};
+    }
+    status = 0;
+    t1.stop();
+    printf("One million cycles: %d\n\r", t1.read_us());
+    //printf("Avg on, off = %d, %d\n\r", t1.read_us()/100, t2.read_us()/100);
+}
+
+int OV7670::captureImage() {
+    int d, i=0;
+    int byte = 0;
+    Timer t1;
+    // Prepare SRAM output
+    ram.startWriteSequence();
+    // Read in the first half of the image
+    while(inPort & 0x00000008) {};    // Wait for VSYNC low
+    while(!(inPort & 0x00000008)) {}; // Wait for VSYNC high
+    //t1.start();
+    while(inPort & 0x00000008) {      // While VSYNC high
+        while((inPort & 0x00000008) && !(inPort & 0x00000004)) {};  // stall while VSYNC high and HREF low
+        if(!(inPort & 0x00000008)) {                  // if VSYNC low
+            //printf("Interrupted!\n\r");
+            break;
+        }
+        while (inPort & 0x00000004) {       // While HREF high
+            while(!(inPort & 0x00000010)) {};  // Wait for PCLK high
+            d = data;
+            byte  = (d & 0x07800000) >> 19; // bit26 to bit7
+            byte |= (d & 0x00078000) >> 15; // bit18 to bit3
+            //arr1[i] = byte;
+            ram.writeSequence1(byte);
+            while(inPort & 0x00000010) {};        // Wait for PCLK low
+            while(!(inPort & 0x00000010)) {};  // Wait for PCLK high
+            d = data;
+            byte  = (d & 0x07800000) >> 19; // bit26 to bit7
+            byte |= (d & 0x00078000) >> 15; // bit18 to bit3
+            ram.writeSequence1(byte);
+            //arr2[i++] = byte;
+            while(inPort & 0x00000010) {}; 
+            i++;
+        }
+    }
+    //t1.stop();
+    ram.stopSequence();
+    //printf("Image read: %d\n\r", t1.read_us());
+    return i*2;
+}
+
+
+void OV7670::sendImage(Serial *dest, int numBytes) {
+    Timer t;
+    Serial host = *dest;
+    // Write the image to the serial host
+    ram.startReadSequence();
+    t.start();
+    for (int i = 0; i < numBytes; i++) {
+        while(!(host.writeable())) {}
+        host.putc(ram.readSequence1());
+    }
+    t.stop();
+    printf("BT time: %d\n\r", t.read_us());
+    ram.stopSequence();
+}
+    
\ No newline at end of file