ov7670 no fifo
OV6620.h@1:e216fd4e8d9c, 2016-11-21 (annotated)
- Committer:
- rulla
- Date:
- Mon Nov 21 10:04:38 2016 +0000
- Revision:
- 1:e216fd4e8d9c
k
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rulla | 1:e216fd4e8d9c | 1 | #include "mbed.h" |
rulla | 1:e216fd4e8d9c | 2 | #include "OV6620reg.h" |
rulla | 1:e216fd4e8d9c | 3 | #include <FastPWM.h> |
rulla | 1:e216fd4e8d9c | 4 | #include "ST7735_TFT.h" |
rulla | 1:e216fd4e8d9c | 5 | |
rulla | 1:e216fd4e8d9c | 6 | #define OV6620_WRITE (0xa2) |
rulla | 1:e216fd4e8d9c | 7 | #define OV6620_READ (0xa2) |
rulla | 1:e216fd4e8d9c | 8 | #define OV6620_WRITEWAIT (20) |
rulla | 1:e216fd4e8d9c | 9 | #define OV6620_NOACK (0) |
rulla | 1:e216fd4e8d9c | 10 | #define OV6620_REGMAX (201) |
rulla | 1:e216fd4e8d9c | 11 | #define OV6620_I2CFREQ (39000) |
rulla | 1:e216fd4e8d9c | 12 | |
rulla | 1:e216fd4e8d9c | 13 | #define SIZEX 176 |
rulla | 1:e216fd4e8d9c | 14 | #define SIZEY 144 |
rulla | 1:e216fd4e8d9c | 15 | #define SIZE 25344 |
rulla | 1:e216fd4e8d9c | 16 | // |
rulla | 1:e216fd4e8d9c | 17 | // OV6620 + FIFO AL422B camera board test |
rulla | 1:e216fd4e8d9c | 18 | // |
rulla | 1:e216fd4e8d9c | 19 | ST7735_TFT TFT(p5, p6, p7, p8, p9, p10,"TFT");// SDA, nc, SCK,CS,A0,RESET |
rulla | 1:e216fd4e8d9c | 20 | int per=2; |
rulla | 1:e216fd4e8d9c | 21 | int pwi=1; |
rulla | 1:e216fd4e8d9c | 22 | |
rulla | 1:e216fd4e8d9c | 23 | class OV6620 |
rulla | 1:e216fd4e8d9c | 24 | { |
rulla | 1:e216fd4e8d9c | 25 | public: |
rulla | 1:e216fd4e8d9c | 26 | |
rulla | 1:e216fd4e8d9c | 27 | volatile int LineCounter ; |
rulla | 1:e216fd4e8d9c | 28 | volatile int LastLines ; |
rulla | 1:e216fd4e8d9c | 29 | volatile bool CaptureReq ; |
rulla | 1:e216fd4e8d9c | 30 | volatile bool Busy ; |
rulla | 1:e216fd4e8d9c | 31 | volatile bool Done ; |
rulla | 1:e216fd4e8d9c | 32 | void CaptureNext(void); |
rulla | 1:e216fd4e8d9c | 33 | bool CaptureDone(void); |
rulla | 1:e216fd4e8d9c | 34 | void WriteReg(int addr,char data); |
rulla | 1:e216fd4e8d9c | 35 | void Reset(void); |
rulla | 1:e216fd4e8d9c | 36 | void test(void); |
rulla | 1:e216fd4e8d9c | 37 | void InitQQVGA(void); |
rulla | 1:e216fd4e8d9c | 38 | char ReadReg(int addr); |
rulla | 1:e216fd4e8d9c | 39 | int ReadOneByte(void); |
rulla | 1:e216fd4e8d9c | 40 | int ReadOneWord(void); |
rulla | 1:e216fd4e8d9c | 41 | void ReadStart(void); |
rulla | 1:e216fd4e8d9c | 42 | void ReadStop(void); |
rulla | 1:e216fd4e8d9c | 43 | void VsyncHandler(void); |
rulla | 1:e216fd4e8d9c | 44 | void PclkHandler(void) ; |
rulla | 1:e216fd4e8d9c | 45 | void wait_posedge(InterruptIn pin); |
rulla | 1:e216fd4e8d9c | 46 | void wait_posedge(InterruptIn pin); |
rulla | 1:e216fd4e8d9c | 47 | |
rulla | 1:e216fd4e8d9c | 48 | OV6620( |
rulla | 1:e216fd4e8d9c | 49 | PinName sda,// Camera I2C port |
rulla | 1:e216fd4e8d9c | 50 | PinName scl,// Camera I2C port |
rulla | 1:e216fd4e8d9c | 51 | PinName vs, // VSYNC |
rulla | 1:e216fd4e8d9c | 52 | PinName hr, // HREF |
rulla | 1:e216fd4e8d9c | 53 | PinName pic ,// /pclk |
rulla | 1:e216fd4e8d9c | 54 | PortName port, // 8bit bus port |
rulla | 1:e216fd4e8d9c | 55 | int mask, // 0b0000_0M65_4000_0321_L000_0000_0000_0000 = 0x07878000 |
rulla | 1:e216fd4e8d9c | 56 | PinName xk |
rulla | 1:e216fd4e8d9c | 57 | ) : camera(sda,scl),vsync(vs),href(hr),pclk(pic),dataP(port,mask),xclk(xk) |
rulla | 1:e216fd4e8d9c | 58 | |
rulla | 1:e216fd4e8d9c | 59 | { |
rulla | 1:e216fd4e8d9c | 60 | pc.baud(115200) ; |
rulla | 1:e216fd4e8d9c | 61 | |
rulla | 1:e216fd4e8d9c | 62 | xclk..period(1/24000000.0); |
rulla | 1:e216fd4e8d9c | 63 | xclk.write(.5); |
rulla | 1:e216fd4e8d9c | 64 | TFT.claim(stdout); // Send stdout to the TFT display |
rulla | 1:e216fd4e8d9c | 65 | TFT.background(Black); // Set background to black |
rulla | 1:e216fd4e8d9c | 66 | TFT.foreground(White); // Set chars to white |
rulla | 1:e216fd4e8d9c | 67 | TFT.cls(); // Clear the screen |
rulla | 1:e216fd4e8d9c | 68 | TFT.set_orientation(3); |
rulla | 1:e216fd4e8d9c | 69 | |
rulla | 1:e216fd4e8d9c | 70 | camera.stop() ; |
rulla | 1:e216fd4e8d9c | 71 | camera.frequency(OV6620_I2CFREQ) ; |
rulla | 1:e216fd4e8d9c | 72 | // vsync.fall(this,&OV6620::VsyncHandler) ; |
rulla | 1:e216fd4e8d9c | 73 | // href.rise(this,&OV6620::HrefHandler) ; |
rulla | 1:e216fd4e8d9c | 74 | // pclk.rise(this,&OV6620::PclkHandler) ; // ????????????? blocca tutto il programma |
rulla | 1:e216fd4e8d9c | 75 | CaptureReq = false ; |
rulla | 1:e216fd4e8d9c | 76 | Busy = false ; |
rulla | 1:e216fd4e8d9c | 77 | Done = false ; |
rulla | 1:e216fd4e8d9c | 78 | LineCounter = 0 ; |
rulla | 1:e216fd4e8d9c | 79 | FrameCounter = 0 ; |
rulla | 1:e216fd4e8d9c | 80 | PixCounter = 0 ; |
rulla | 1:e216fd4e8d9c | 81 | camera.start(); |
rulla | 1:e216fd4e8d9c | 82 | } |
rulla | 1:e216fd4e8d9c | 83 | protected: |
rulla | 1:e216fd4e8d9c | 84 | I2C camera ; |
rulla | 1:e216fd4e8d9c | 85 | //InterruptIn vsync,href,pclk; |
rulla | 1:e216fd4e8d9c | 86 | DigitalIn vsync,href,pclk; |
rulla | 1:e216fd4e8d9c | 87 | PortIn dataP ; |
rulla | 1:e216fd4e8d9c | 88 | FastPWM xclk; |
rulla | 1:e216fd4e8d9c | 89 | }; |