ov7670 no fifo

Dependents:   OV7670_Nucleo

Committer:
rulla
Date:
Mon Nov 21 10:04:38 2016 +0000
Revision:
1:e216fd4e8d9c
k

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rulla 1:e216fd4e8d9c 1 #include "mbed.h"
rulla 1:e216fd4e8d9c 2 #include "OV6620reg.h"
rulla 1:e216fd4e8d9c 3 #include "OV6620.h"
rulla 1:e216fd4e8d9c 4
rulla 1:e216fd4e8d9c 5 void OV6620::CaptureNext(void) {
rulla 1:e216fd4e8d9c 6 CaptureReq = true ;
rulla 1:e216fd4e8d9c 7 Busy = true ;
rulla 1:e216fd4e8d9c 8 }
rulla 1:e216fd4e8d9c 9
rulla 1:e216fd4e8d9c 10 bool OV6620::CaptureDone(void) {
rulla 1:e216fd4e8d9c 11 bool result ;
rulla 1:e216fd4e8d9c 12 if (Busy) {
rulla 1:e216fd4e8d9c 13 result = false ;
rulla 1:e216fd4e8d9c 14 } else {
rulla 1:e216fd4e8d9c 15 result = Done ;
rulla 1:e216fd4e8d9c 16 Done = false ;
rulla 1:e216fd4e8d9c 17 }
rulla 1:e216fd4e8d9c 18 return result ;
rulla 1:e216fd4e8d9c 19 }
rulla 1:e216fd4e8d9c 20
rulla 1:e216fd4e8d9c 21 void OV6620::WriteReg(int addr,int data) {
rulla 1:e216fd4e8d9c 22 camera.start();
rulla 1:e216fd4e8d9c 23 //camera.write(CAMERA_I2C_WRITE_ADDR);
rulla 1:e216fd4e8d9c 24 camera.write(addr);
rulla 1:e216fd4e8d9c 25 camera.write(data);
rulla 1:e216fd4e8d9c 26 camera.stop();
rulla 1:e216fd4e8d9c 27 wait_us(50);
rulla 1:e216fd4e8d9c 28 }
rulla 1:e216fd4e8d9c 29
rulla 1:e216fd4e8d9c 30 int OV6620::ReadReg(int addr) {
rulla 1:e216fd4e8d9c 31 int data ;
rulla 1:e216fd4e8d9c 32 camera.start() ;
rulla 1:e216fd4e8d9c 33 camera.write(OV6620_WRITE) ;
rulla 1:e216fd4e8d9c 34 wait_us(OV6620_WRITEWAIT);
rulla 1:e216fd4e8d9c 35 camera.write(addr) ;
rulla 1:e216fd4e8d9c 36 camera.stop() ;
rulla 1:e216fd4e8d9c 37 wait_us(OV6620_WRITEWAIT);
rulla 1:e216fd4e8d9c 38 camera.start() ;
rulla 1:e216fd4e8d9c 39 camera.write(OV6620_READ) ;
rulla 1:e216fd4e8d9c 40 wait_us(OV6620_WRITEWAIT);
rulla 1:e216fd4e8d9c 41 data = camera.read(OV6620_NOACK) ;
rulla 1:e216fd4e8d9c 42 camera.stop() ;
rulla 1:e216fd4e8d9c 43 return data ;
rulla 1:e216fd4e8d9c 44 }
rulla 1:e216fd4e8d9c 45
rulla 1:e216fd4e8d9c 46 int OV6620::Rreg(int addr) {
rulla 1:e216fd4e8d9c 47 int data ;
rulla 1:e216fd4e8d9c 48 camera.start() ;
rulla 1:e216fd4e8d9c 49 camera.write(OV6620_WRITE) ;
rulla 1:e216fd4e8d9c 50 wait_us(OV6620_WRITEWAIT);
rulla 1:e216fd4e8d9c 51 camera.write(addr) ;
rulla 1:e216fd4e8d9c 52 camera.stop() ;
rulla 1:e216fd4e8d9c 53 wait_us(OV6620_WRITEWAIT);
rulla 1:e216fd4e8d9c 54 camera.start() ;
rulla 1:e216fd4e8d9c 55 camera.write(OV6620_READ) ;
rulla 1:e216fd4e8d9c 56 wait_us(OV6620_WRITEWAIT);
rulla 1:e216fd4e8d9c 57 data = camera.read(OV6620_NOACK) ;
rulla 1:e216fd4e8d9c 58 camera.stop() ;
rulla 1:e216fd4e8d9c 59 return data ;
rulla 1:e216fd4e8d9c 60 }
rulla 1:e216fd4e8d9c 61
rulla 1:e216fd4e8d9c 62 void OV6620::Reset(void) {
rulla 1:e216fd4e8d9c 63 WriteReg(0x12,0xa4) ; // RESET CAMERA
rulla 1:e216fd4e8d9c 64 wait_ms(200) ;
rulla 1:e216fd4e8d9c 65 }
rulla 1:e216fd4e8d9c 66
rulla 1:e216fd4e8d9c 67 void OV6620::Wreg (int addr,int data) {
rulla 1:e216fd4e8d9c 68 camera.start();
rulla 1:e216fd4e8d9c 69 camera.write(CAMERA_I2C_WRITE_ADDR);
rulla 1:e216fd4e8d9c 70 camera.write(addr);
rulla 1:e216fd4e8d9c 71 camera.write(data);
rulla 1:e216fd4e8d9c 72 camera.stop();
rulla 1:e216fd4e8d9c 73 wait_us(50);
rulla 1:e216fd4e8d9c 74 }
rulla 1:e216fd4e8d9c 75
rulla 1:e216fd4e8d9c 76 void OV6620::InitQQVGA(void) {
rulla 1:e216fd4e8d9c 77
rulla 1:e216fd4e8d9c 78 xclk..period(1/24000000.0);
rulla 1:e216fd4e8d9c 79 xclk.write(.5);
rulla 1:e216fd4e8d9c 80
rulla 1:e216fd4e8d9c 81 Reset();
rulla 1:e216fd4e8d9c 82 Reset();
rulla 1:e216fd4e8d9c 83 WriteReg(CLKRC,0x00);
rulla 1:e216fd4e8d9c 84 WriteReg(COM_A,0x24);
rulla 1:e216fd4e8d9c 85 WriteReg(COM_C,0x20);
rulla 1:e216fd4e8d9c 86
rulla 1:e216fd4e8d9c 87 wait(0.1);
rulla 1:e216fd4e8d9c 88 }
rulla 1:e216fd4e8d9c 89
rulla 1:e216fd4e8d9c 90 // vsync handler
rulla 1:e216fd4e8d9c 91 void OV6620::VsyncHandler(void) {
rulla 1:e216fd4e8d9c 92 FrameCounter++;
rulla 1:e216fd4e8d9c 93 }
rulla 1:e216fd4e8d9c 94
rulla 1:e216fd4e8d9c 95 // href handler
rulla 1:e216fd4e8d9c 96 void OV6620::HrefHandler(void) {
rulla 1:e216fd4e8d9c 97 LineCounter++ ;
rulla 1:e216fd4e8d9c 98 }
rulla 1:e216fd4e8d9c 99
rulla 1:e216fd4e8d9c 100 // pclk handler
rulla 1:e216fd4e8d9c 101 void OV6620::PclkHandler(void) {
rulla 1:e216fd4e8d9c 102 PixCounter++ ;
rulla 1:e216fd4e8d9c 103 }
rulla 1:e216fd4e8d9c 104
rulla 1:e216fd4e8d9c 105 void OV6620::wait_posedge(InterruptIn pin) {
rulla 1:e216fd4e8d9c 106 while(pin);
rulla 1:e216fd4e8d9c 107 while(!pin);
rulla 1:e216fd4e8d9c 108 }
rulla 1:e216fd4e8d9c 109
rulla 1:e216fd4e8d9c 110 void OV6620::wait_negedge(InterruptIn pin) {
rulla 1:e216fd4e8d9c 111 while(!pin);
rulla 1:e216fd4e8d9c 112 while(pin) ;
rulla 1:e216fd4e8d9c 113 }
rulla 1:e216fd4e8d9c 114
rulla 1:e216fd4e8d9c 115 // Data Read
rulla 1:e216fd4e8d9c 116 int OV6620::ReadOneByte(void) {
rulla 1:e216fd4e8d9c 117 int result = (((dataP&0x07800000)>>19)|((dataP&0x078000)>>15));
rulla 1:e216fd4e8d9c 118 return result ;
rulla 1:e216fd4e8d9c 119 }
rulla 1:e216fd4e8d9c 120
rulla 1:e216fd4e8d9c 121
rulla 1:e216fd4e8d9c 122 void OV6620::shot(void) {
rulla 1:e216fd4e8d9c 123 uint8_t b1,b2;
rulla 1:e216fd4e8d9c 124 int x = 0,pix=0; // col
rulla 1:e216fd4e8d9c 125 int y = 0,line=0; // row
rulla 1:e216fd4e8d9c 126 int n = 0; // px number
rulla 1:e216fd4e8d9c 127 int r,g,b;
rulla 1:e216fd4e8d9c 128
rulla 1:e216fd4e8d9c 129 while(vsync);
rulla 1:e216fd4e8d9c 130 while(!vsync); // pc.printf("!vsync 1 %d %d %d\r\n", vsync& 0x1,href& 0x1,pclk& 0x1);
rulla 1:e216fd4e8d9c 131 while(vsync);
rulla 1:e216fd4e8d9c 132 while(!vsync);
rulla 1:e216fd4e8d9c 133 while(vsync);
rulla 1:e216fd4e8d9c 134
rulla 1:e216fd4e8d9c 135 for ( y=0; y<SIZEY; y++){
rulla 1:e216fd4e8d9c 136 while (!href);
rulla 1:e216fd4e8d9c 137 for ( x=0; x<SIZEX; x++){
rulla 1:e216fd4e8d9c 138
rulla 1:e216fd4e8d9c 139 while(!pclk);
rulla 1:e216fd4e8d9c 140 if (line>0){
rulla 1:e216fd4e8d9c 141 b1=dataP;
rulla 1:e216fd4e8d9c 142 result=dataP.read();
rulla 1:e216fd4e8d9c 143 }
rulla 1:e216fd4e8d9c 144 while (pclk);
rulla 1:e216fd4e8d9c 145
rulla 1:e216fd4e8d9c 146 while(!pclk);
rulla 1:e216fd4e8d9c 147 if (line>0){
rulla 1:e216fd4e8d9c 148 b2=dataP;
rulla 1:e216fd4e8d9c 149 result=dataP.read();
rulla 1:e216fd4e8d9c 150 }
rulla 1:e216fd4e8d9c 151 while (pclk);
rulla 1:e216fd4e8d9c 152
rulla 1:e216fd4e8d9c 153 r=((bank1 & 0x1f)) ;
rulla 1:e216fd4e8d9c 154 g= ((bank1&0xe0)>>5 ) | ((bank0&0x7)<<3);
rulla 1:e216fd4e8d9c 155 b=((bank0 & 0xf8)>>3 );
rulla 1:e216fd4e8d9c 156 colour = (((r<<11)&0xF800)|((g<<5)&0x7E0)| (b&0x1f));
rulla 1:e216fd4e8d9c 157 TFT.pixel(x,y,colour);
rulla 1:e216fd4e8d9c 158 }
rulla 1:e216fd4e8d9c 159 while(href);
rulla 1:e216fd4e8d9c 160 }
rulla 1:e216fd4e8d9c 161
rulla 1:e216fd4e8d9c 162 printf("x , y = %d , %d n= %d\r\n", x,y,FrameCounter);
rulla 1:e216fd4e8d9c 163 printf("frame\n");
rulla 1:e216fd4e8d9c 164 n=0;
rulla 1:e216fd4e8d9c 165 y=0;
rulla 1:e216fd4e8d9c 166 x=0;
rulla 1:e216fd4e8d9c 167 /*
rulla 1:e216fd4e8d9c 168 for(y=0; y<SIZEY; y++) {
rulla 1:e216fd4e8d9c 169 for(x=0; x<SIZEX; x++) {
rulla 1:e216fd4e8d9c 170 // pc.printf("%d %d\n",n,byt[n]);
rulla 1:e216fd4e8d9c 171 // pc.printf("%u\n",b1[n]);
rulla 1:e216fd4e8d9c 172 //TFT.pixel(x,y,b1[n]);
rulla 1:e216fd4e8d9c 173 n++;
rulla 1:e216fd4e8d9c 174 }
rulla 1:e216fd4e8d9c 175 }
rulla 1:e216fd4e8d9c 176 */
rulla 1:e216fd4e8d9c 177 printf("enddddddddd frame\n");
rulla 1:e216fd4e8d9c 178 }// SHOT
rulla 1:e216fd4e8d9c 179 }