It is only writing and initialization.
Dependents: ov7670_dma_nucleo_f4 NUCLEO-F446RE_testDCMI
SCCB.cpp@0:754d49cac336, 2016-04-29 (annotated)
- Committer:
- tmnt
- Date:
- Fri Apr 29 13:37:13 2016 +0000
- Revision:
- 0:754d49cac336
Add OV7670_SCCB library.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tmnt | 0:754d49cac336 | 1 | |
tmnt | 0:754d49cac336 | 2 | #include <mbed.h> |
tmnt | 0:754d49cac336 | 3 | #include "SCCB.h" |
tmnt | 0:754d49cac336 | 4 | |
tmnt | 0:754d49cac336 | 5 | ov7670_sccb::ov7670_sccb(PinName _SDA,PinName _SCL) : SDA(_SDA),SCL(_SCL) {} |
tmnt | 0:754d49cac336 | 6 | |
tmnt | 0:754d49cac336 | 7 | |
tmnt | 0:754d49cac336 | 8 | void ov7670_sccb::I2cstart(void) |
tmnt | 0:754d49cac336 | 9 | { |
tmnt | 0:754d49cac336 | 10 | SDA=1;SCL=1; /* SCL,SDAは常時Highとする */ |
tmnt | 0:754d49cac336 | 11 | wait_us(2); |
tmnt | 0:754d49cac336 | 12 | SDA=0; |
tmnt | 0:754d49cac336 | 13 | wait_us(2); // SDA出力 |
tmnt | 0:754d49cac336 | 14 | } |
tmnt | 0:754d49cac336 | 15 | |
tmnt | 0:754d49cac336 | 16 | void ov7670_sccb::I2cstop(void) |
tmnt | 0:754d49cac336 | 17 | { |
tmnt | 0:754d49cac336 | 18 | SCL=0; // 先にSDA Low |
tmnt | 0:754d49cac336 | 19 | wait_us(2); |
tmnt | 0:754d49cac336 | 20 | SDA=0; // SCL Low |
tmnt | 0:754d49cac336 | 21 | wait_us(2); |
tmnt | 0:754d49cac336 | 22 | SCL=1; // SDA Low // 出力モードに戻す SDA =Low |
tmnt | 0:754d49cac336 | 23 | wait_us(2); |
tmnt | 0:754d49cac336 | 24 | SDA=1; // 先にSCLをHigh |
tmnt | 0:754d49cac336 | 25 | wait_us(2); |
tmnt | 0:754d49cac336 | 26 | // 後からSDAをHigh |
tmnt | 0:754d49cac336 | 27 | |
tmnt | 0:754d49cac336 | 28 | } |
tmnt | 0:754d49cac336 | 29 | void ov7670_sccb::I2cout(unsigned char datar) |
tmnt | 0:754d49cac336 | 30 | { |
tmnt | 0:754d49cac336 | 31 | int ia; |
tmnt | 0:754d49cac336 | 32 | for(ia=0;ia<8;ia++){ |
tmnt | 0:754d49cac336 | 33 | SCL=0; |
tmnt | 0:754d49cac336 | 34 | if(datar & 0x80){SDA=1;} |
tmnt | 0:754d49cac336 | 35 | else SDA=0; |
tmnt | 0:754d49cac336 | 36 | datar<<=1; |
tmnt | 0:754d49cac336 | 37 | wait_us(1); |
tmnt | 0:754d49cac336 | 38 | SCL=1; |
tmnt | 0:754d49cac336 | 39 | wait_us(2); |
tmnt | 0:754d49cac336 | 40 | SCL=0; |
tmnt | 0:754d49cac336 | 41 | wait_us(1);//wait(); |
tmnt | 0:754d49cac336 | 42 | } |
tmnt | 0:754d49cac336 | 43 | wait_us(1); |
tmnt | 0:754d49cac336 | 44 | |
tmnt | 0:754d49cac336 | 45 | SCL=1; |
tmnt | 0:754d49cac336 | 46 | datar<<=1; |
tmnt | 0:754d49cac336 | 47 | wait_us(2); |
tmnt | 0:754d49cac336 | 48 | SCL=0; |
tmnt | 0:754d49cac336 | 49 | |
tmnt | 0:754d49cac336 | 50 | wait_us(1); |
tmnt | 0:754d49cac336 | 51 | } |
tmnt | 0:754d49cac336 | 52 | |
tmnt | 0:754d49cac336 | 53 | void ov7670_sccb:: c(unsigned char adrs,unsigned char datak) |
tmnt | 0:754d49cac336 | 54 | { |
tmnt | 0:754d49cac336 | 55 | I2cstart(); |
tmnt | 0:754d49cac336 | 56 | I2cout(0x42); |
tmnt | 0:754d49cac336 | 57 | I2cout(adrs); |
tmnt | 0:754d49cac336 | 58 | I2cout(datak); |
tmnt | 0:754d49cac336 | 59 | I2cstop(); |
tmnt | 0:754d49cac336 | 60 | wait_ms(10); |
tmnt | 0:754d49cac336 | 61 | } |
tmnt | 0:754d49cac336 | 62 | void ov7670_sccb::cam_init(){ |
tmnt | 0:754d49cac336 | 63 | c(REG_COM7, COM7_RESET); //0x12:COM7(Reset,QCIF,Cbar,RGBformat) |
tmnt | 0:754d49cac336 | 64 | wait_ms(200); //200ms |
tmnt | 0:754d49cac336 | 65 | |
tmnt | 0:754d49cac336 | 66 | c(REG_COM7,COM7_RGB|COM7_FMT_QCIF); //0x12:COM7 , 0x0C) //QCIF, RGB |
tmnt | 0:754d49cac336 | 67 | |
tmnt | 0:754d49cac336 | 68 | c(REG_RGB444, 0x00); //0x8c:RGB 444 control |
tmnt | 0:754d49cac336 | 69 | c(REG_COM1, 0x00); //0x40 //0x04:COM1(CCIR656,AEC) //0) //0x40) |
tmnt | 0:754d49cac336 | 70 | c(REG_COM15, COM15_R01FE|COM15_RGB565); //0x40:COM15 |
tmnt | 0:754d49cac336 | 71 | |
tmnt | 0:754d49cac336 | 72 | c(REG_COM9, 0x68); // 38 0x14:COM9=max AGC gain ceiling, Freeze AGC/AEC |
tmnt | 0:754d49cac336 | 73 | |
tmnt | 0:754d49cac336 | 74 | //c(0x3d,0xc3); //(REG_COM13, COM13_GAMMA|COM13_UVSAT|0x2) //0x3d:COM13 |
tmnt | 0:754d49cac336 | 75 | c(REG_HAECC7,0x94); //0xaa:Hist AEC/AGC control 7 c(0xAA,0x94) //AEC algorithm |
tmnt | 0:754d49cac336 | 76 | |
tmnt | 0:754d49cac336 | 77 | c(REG_TSLB,0x04); //0x3a:Neg,UVval,YUYV,window TSLB_YLAST) //0x04) //0x0C) //0x80) //0x00) //0x04) |
tmnt | 0:754d49cac336 | 78 | c(0x20,0x04); //ADCCTR0, A/D range&ref, mu0102 |
tmnt | 0:754d49cac336 | 79 | |
tmnt | 0:754d49cac336 | 80 | /******* ringo *********/ |
tmnt | 0:754d49cac336 | 81 | c(REG_COM8,0xfd); //AGC,AWB OFF,res OK |
tmnt | 0:754d49cac336 | 82 | |
tmnt | 0:754d49cac336 | 83 | c(0x10,0x0f);//AECコントロール(中位ビット) |
tmnt | 0:754d49cac336 | 84 | c(0x07,0x00);//AECコントロール(上位ビット) |
tmnt | 0:754d49cac336 | 85 | //by Mr.Shiono |
tmnt | 0:754d49cac336 | 86 | |
tmnt | 0:754d49cac336 | 87 | c(0x01,0x40); |
tmnt | 0:754d49cac336 | 88 | c(0x02,0x60); |
tmnt | 0:754d49cac336 | 89 | c(0x03,0x0a); |
tmnt | 0:754d49cac336 | 90 | c(0x0c,0x00); |
tmnt | 0:754d49cac336 | 91 | c(0x0e,0x61); |
tmnt | 0:754d49cac336 | 92 | c(0x0f,0x4b); |
tmnt | 0:754d49cac336 | 93 | c(0x15,0x00); |
tmnt | 0:754d49cac336 | 94 | c(0x16,0x02); |
tmnt | 0:754d49cac336 | 95 | c(0x17,0x18); //HSTART |
tmnt | 0:754d49cac336 | 96 | c(0x18,0x01); |
tmnt | 0:754d49cac336 | 97 | c(0x19,0x02); |
tmnt | 0:754d49cac336 | 98 | c(0x1a,0x7a); |
tmnt | 0:754d49cac336 | 99 | c(0x1e,0x07); |
tmnt | 0:754d49cac336 | 100 | c(0x21,0x02); |
tmnt | 0:754d49cac336 | 101 | c(0x22,0x91); |
tmnt | 0:754d49cac336 | 102 | c(0x29,0x07); |
tmnt | 0:754d49cac336 | 103 | c(0x32,0xb6); |
tmnt | 0:754d49cac336 | 104 | c(0x33,0x0b); |
tmnt | 0:754d49cac336 | 105 | c(0x34,0x11); |
tmnt | 0:754d49cac336 | 106 | c(0x35,0x0b); |
tmnt | 0:754d49cac336 | 107 | c(0x37,0x1d); |
tmnt | 0:754d49cac336 | 108 | c(0x38,0x71); |
tmnt | 0:754d49cac336 | 109 | c(0x39,0x2a); |
tmnt | 0:754d49cac336 | 110 | c(0x3b,0x92);//com11 ナイトモード |
tmnt | 0:754d49cac336 | 111 | c(0x3c,0x78); |
tmnt | 0:754d49cac336 | 112 | c(0x3d,0xc3); |
tmnt | 0:754d49cac336 | 113 | c(0x3e,0x00); |
tmnt | 0:754d49cac336 | 114 | c(0x3f,0x00); |
tmnt | 0:754d49cac336 | 115 | c(0x41,0x08); |
tmnt | 0:754d49cac336 | 116 | c(0x41,0x38); |
tmnt | 0:754d49cac336 | 117 | c(0x43,0x0a); |
tmnt | 0:754d49cac336 | 118 | c(0x44,0xf0); |
tmnt | 0:754d49cac336 | 119 | c(0x45,0x34); |
tmnt | 0:754d49cac336 | 120 | c(0x46,0x58); |
tmnt | 0:754d49cac336 | 121 | c(0x47,0x28); |
tmnt | 0:754d49cac336 | 122 | c(0x48,0x3a); |
tmnt | 0:754d49cac336 | 123 | c(0x4b,0x09); |
tmnt | 0:754d49cac336 | 124 | c(0x4c,0x00); |
tmnt | 0:754d49cac336 | 125 | c(0x4d,0x40); |
tmnt | 0:754d49cac336 | 126 | c(0x4e,0x20); |
tmnt | 0:754d49cac336 | 127 | c(0x4f,0x80);//c(0x4f,0x80); 彩度調整 |
tmnt | 0:754d49cac336 | 128 | c(0x50,0x80);//c(0x50,0x80); |
tmnt | 0:754d49cac336 | 129 | c(0x51,0x00); |
tmnt | 0:754d49cac336 | 130 | c(0x52,0x22);//c(0x52,0x22); |
tmnt | 0:754d49cac336 | 131 | c(0x53,0x5e);//c(0x52,0x5e); |
tmnt | 0:754d49cac336 | 132 | c(0x54,0x80);//c(0x54,0x80); |
tmnt | 0:754d49cac336 | 133 | c(0x56,0x40); |
tmnt | 0:754d49cac336 | 134 | c(0x58,0x9e); |
tmnt | 0:754d49cac336 | 135 | c(0x59,0x88); |
tmnt | 0:754d49cac336 | 136 | c(0x5a,0x88); |
tmnt | 0:754d49cac336 | 137 | c(0x5b,0x44); |
tmnt | 0:754d49cac336 | 138 | c(0x5c,0x67); |
tmnt | 0:754d49cac336 | 139 | c(0x5d,0x49); |
tmnt | 0:754d49cac336 | 140 | c(0x5e,0x0e); |
tmnt | 0:754d49cac336 | 141 | c(0x69,0x00); |
tmnt | 0:754d49cac336 | 142 | c(0x6a,0x40); |
tmnt | 0:754d49cac336 | 143 | c(0x6b,0x0a); |
tmnt | 0:754d49cac336 | 144 | c(0x6c,0x0a); |
tmnt | 0:754d49cac336 | 145 | c(0x6d,0x55); |
tmnt | 0:754d49cac336 | 146 | c(0x6e,0x11); |
tmnt | 0:754d49cac336 | 147 | c(0x6f,0x9f); |
tmnt | 0:754d49cac336 | 148 | c(0x70,0x3a); |
tmnt | 0:754d49cac336 | 149 | c(0x71,0x35); |
tmnt | 0:754d49cac336 | 150 | c(0x72,0x11); |
tmnt | 0:754d49cac336 | 151 | c(0x73,0xf0); |
tmnt | 0:754d49cac336 | 152 | c(0x74,0x10); |
tmnt | 0:754d49cac336 | 153 | c(0x75,0x05); |
tmnt | 0:754d49cac336 | 154 | c(0x76,0xe1); |
tmnt | 0:754d49cac336 | 155 | c(0x77,0x01); |
tmnt | 0:754d49cac336 | 156 | c(0x78,0x04); |
tmnt | 0:754d49cac336 | 157 | c(0x79,0x01); |
tmnt | 0:754d49cac336 | 158 | c(0x8d,0x4f); |
tmnt | 0:754d49cac336 | 159 | c(0x8e,0x00); |
tmnt | 0:754d49cac336 | 160 | c(0x8f,0x00); |
tmnt | 0:754d49cac336 | 161 | c(0x90,0x00); |
tmnt | 0:754d49cac336 | 162 | c(0x91,0x00); |
tmnt | 0:754d49cac336 | 163 | c(0x96,0x00); |
tmnt | 0:754d49cac336 | 164 | c(0x96,0x00); //? |
tmnt | 0:754d49cac336 | 165 | c(0x97,0x30); |
tmnt | 0:754d49cac336 | 166 | c(0x98,0x20); |
tmnt | 0:754d49cac336 | 167 | c(0x99,0x30); |
tmnt | 0:754d49cac336 | 168 | c(0x9a,0x00); |
tmnt | 0:754d49cac336 | 169 | c(0x9a,0x84); //? |
tmnt | 0:754d49cac336 | 170 | c(0x9b,0x29); |
tmnt | 0:754d49cac336 | 171 | c(0x9c,0x03); |
tmnt | 0:754d49cac336 | 172 | c(0x9d,0x4c); |
tmnt | 0:754d49cac336 | 173 | c(0x9e,0x3f); |
tmnt | 0:754d49cac336 | 174 | c(0xa2,0x02); |
tmnt | 0:754d49cac336 | 175 | c(0xa4,0x88); |
tmnt | 0:754d49cac336 | 176 | c(0xb0,0x84); |
tmnt | 0:754d49cac336 | 177 | c(0xb1,0x0c); |
tmnt | 0:754d49cac336 | 178 | c(0xb2,0x0e); |
tmnt | 0:754d49cac336 | 179 | c(0xb3,0x82); |
tmnt | 0:754d49cac336 | 180 | c(0xb8,0x0a); |
tmnt | 0:754d49cac336 | 181 | c(0xc8,0xf0); |
tmnt | 0:754d49cac336 | 182 | c(0xc9,0x60); |
tmnt | 0:754d49cac336 | 183 | c(0x6b,0x40);//入力クロックx4 |
tmnt | 0:754d49cac336 | 184 | c(REG_CLKRC,0x40); //0xaf //PCLK*(1/48) |
tmnt | 0:754d49cac336 | 185 | |
tmnt | 0:754d49cac336 | 186 | } |