ov7670 no fifo
OV6620.cpp
- Committer:
- rulla
- Date:
- 2016-11-21
- Revision:
- 1:e216fd4e8d9c
File content as of revision 1:e216fd4e8d9c:
#include "mbed.h" #include "OV6620reg.h" #include "OV6620.h" void OV6620::CaptureNext(void) { CaptureReq = true ; Busy = true ; } bool OV6620::CaptureDone(void) { bool result ; if (Busy) { result = false ; } else { result = Done ; Done = false ; } return result ; } void OV6620::WriteReg(int addr,int data) { camera.start(); //camera.write(CAMERA_I2C_WRITE_ADDR); camera.write(addr); camera.write(data); camera.stop(); wait_us(50); } int OV6620::ReadReg(int addr) { int data ; camera.start() ; camera.write(OV6620_WRITE) ; wait_us(OV6620_WRITEWAIT); camera.write(addr) ; camera.stop() ; wait_us(OV6620_WRITEWAIT); camera.start() ; camera.write(OV6620_READ) ; wait_us(OV6620_WRITEWAIT); data = camera.read(OV6620_NOACK) ; camera.stop() ; return data ; } int OV6620::Rreg(int addr) { int data ; camera.start() ; camera.write(OV6620_WRITE) ; wait_us(OV6620_WRITEWAIT); camera.write(addr) ; camera.stop() ; wait_us(OV6620_WRITEWAIT); camera.start() ; camera.write(OV6620_READ) ; wait_us(OV6620_WRITEWAIT); data = camera.read(OV6620_NOACK) ; camera.stop() ; return data ; } void OV6620::Reset(void) { WriteReg(0x12,0xa4) ; // RESET CAMERA wait_ms(200) ; } void OV6620::Wreg (int addr,int data) { camera.start(); camera.write(CAMERA_I2C_WRITE_ADDR); camera.write(addr); camera.write(data); camera.stop(); wait_us(50); } void OV6620::InitQQVGA(void) { xclk..period(1/24000000.0); xclk.write(.5); Reset(); Reset(); WriteReg(CLKRC,0x00); WriteReg(COM_A,0x24); WriteReg(COM_C,0x20); wait(0.1); } // vsync handler void OV6620::VsyncHandler(void) { FrameCounter++; } // href handler void OV6620::HrefHandler(void) { LineCounter++ ; } // pclk handler void OV6620::PclkHandler(void) { PixCounter++ ; } void OV6620::wait_posedge(InterruptIn pin) { while(pin); while(!pin); } void OV6620::wait_negedge(InterruptIn pin) { while(!pin); while(pin) ; } // Data Read int OV6620::ReadOneByte(void) { int result = (((dataP&0x07800000)>>19)|((dataP&0x078000)>>15)); return result ; } void OV6620::shot(void) { uint8_t b1,b2; int x = 0,pix=0; // col int y = 0,line=0; // row int n = 0; // px number int r,g,b; while(vsync); while(!vsync); // pc.printf("!vsync 1 %d %d %d\r\n", vsync& 0x1,href& 0x1,pclk& 0x1); while(vsync); while(!vsync); while(vsync); for ( y=0; y<SIZEY; y++){ while (!href); for ( x=0; x<SIZEX; x++){ while(!pclk); if (line>0){ b1=dataP; result=dataP.read(); } while (pclk); while(!pclk); if (line>0){ b2=dataP; result=dataP.read(); } while (pclk); r=((bank1 & 0x1f)) ; g= ((bank1&0xe0)>>5 ) | ((bank0&0x7)<<3); b=((bank0 & 0xf8)>>3 ); colour = (((r<<11)&0xF800)|((g<<5)&0x7E0)| (b&0x1f)); TFT.pixel(x,y,colour); } while(href); } printf("x , y = %d , %d n= %d\r\n", x,y,FrameCounter); printf("frame\n"); n=0; y=0; x=0; /* for(y=0; y<SIZEY; y++) { for(x=0; x<SIZEX; x++) { // pc.printf("%d %d\n",n,byt[n]); // pc.printf("%u\n",b1[n]); //TFT.pixel(x,y,b1[n]); n++; } } */ printf("enddddddddd frame\n"); }// SHOT }