ov2640_settings.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449
  1. // Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. #ifndef _OV2640_SETTINGS_H_
  15. #define _OV2640_SETTINGS_H_
  16. #include <stdint.h>
  17. #include <stdbool.h>
  18. #include "esp_attr.h"
  19. #include "ov2640_regs.h"
  20. // 30fps@24MHz
  21. const DRAM_ATTR uint8_t ov2640_settings_cif[][2] = {
  22. {BANK_SEL, BANK_DSP},
  23. {0x2c, 0xff},
  24. {0x2e, 0xdf},
  25. {BANK_SEL, BANK_SENSOR},
  26. {0x3c, 0x32},
  27. {CLKRC, 0x01},
  28. {COM2, COM2_OUT_DRIVE_3x},
  29. {REG04, REG04_DEFAULT},
  30. {0x1e, 0x01},//水平镜像/竖直翻转使能
  31. {COM8, COM8_DEFAULT | COM8_BNDF_EN | COM8_AGC_EN | COM8_AEC_EN},
  32. {COM9, COM9_AGC_SET(COM9_AGC_GAIN_8x)},
  33. /**
  34. *Mirror/VFlip Enable - 水平镜像/竖直翻转使能
  35. */
  36. // {0x1e, 0x37},//修改配置值将产生图像显示上下或左右颠倒
  37. {0x2c, 0x0c},
  38. {0x33, 0x78},
  39. {0x3a, 0x33},
  40. {0x3b, 0xfB},
  41. {0x3e, 0x00},
  42. {0x43, 0x11},
  43. {0x16, 0x10},
  44. {0x39, 0x92},
  45. {0x35, 0xda},
  46. {0x22, 0x1a},
  47. {0x37, 0xc3},
  48. {0x23, 0x00},
  49. {ARCOM2, 0xc0},
  50. {0x06, 0x88},
  51. {0x07, 0xc0},
  52. {COM4, 0x87},
  53. {0x0e, 0x41},
  54. {0x4c, 0x00},
  55. {0x4a, 0x81},
  56. {0x21, 0x99},
  57. {AEW, 0x40},
  58. {AEB, 0x38},
  59. {VV, VV_AGC_TH_SET(8,2)},
  60. {0x5c, 0x00},
  61. {0x63, 0x00},
  62. {HISTO_LOW, 0x70},
  63. {HISTO_HIGH, 0x80},
  64. {0x7c, 0x05},
  65. {0x20, 0x80},
  66. {0x28, 0x30},
  67. {0x6c, 0x00},
  68. {0x6d, 0x80},
  69. {0x6e, 0x00},
  70. {0x70, 0x02},
  71. {0x71, 0x94},
  72. {0x73, 0xc1},
  73. {0x3d, 0x34},
  74. {0x5a, 0x57},
  75. {BD50, 0xbb},
  76. {BD60, 0x9c},
  77. {COM7, COM7_RES_CIF},
  78. {HSTART, 0x11},
  79. {HSTOP, 0x43},
  80. {VSTART, 0x00},
  81. {VSTOP, 0x25},
  82. {REG32, 0x89},
  83. {0x37, 0xc0},
  84. {BD50, 0xca},
  85. {BD60, 0xa8},
  86. {0x6d, 0x00},
  87. {0x3d, 0x38},
  88. {BANK_SEL, BANK_DSP},
  89. {0xe5, 0x7f},
  90. {MC_BIST, MC_BIST_RESET | MC_BIST_BOOT_ROM_SEL},
  91. {0x41, 0x24},
  92. {RESET, RESET_JPEG | RESET_DVP},
  93. {0x76, 0xff},
  94. {0x33, 0xa0},
  95. {0x42, 0x20},
  96. {0x43, 0x18},
  97. {0x4c, 0x00},
  98. {CTRL3, CTRL3_WPC_EN | 0x10 },
  99. {0x88, 0x3f},
  100. {0xd7, 0x03},
  101. {0xd9, 0x10},
  102. {R_DVP_SP, R_DVP_SP_AUTO_MODE | 0x02},
  103. {0xc8, 0x08},
  104. {0xc9, 0x80},
  105. {BPADDR, 0x00},
  106. {BPDATA, 0x00},
  107. {BPADDR, 0x03},
  108. {BPDATA, 0x48},
  109. {BPDATA, 0x48},
  110. {BPADDR, 0x08},
  111. {BPDATA, 0x20},
  112. {BPDATA, 0x10},
  113. {BPDATA, 0x0e},
  114. {0x90, 0x00},
  115. {0x91, 0x0e},
  116. {0x91, 0x1a},
  117. {0x91, 0x31},
  118. {0x91, 0x5a},
  119. {0x91, 0x69},
  120. {0x91, 0x75},
  121. {0x91, 0x7e},
  122. {0x91, 0x88},
  123. {0x91, 0x8f},
  124. {0x91, 0x96},
  125. {0x91, 0xa3},
  126. {0x91, 0xaf},
  127. {0x91, 0xc4},
  128. {0x91, 0xd7},
  129. {0x91, 0xe8},
  130. {0x91, 0x20},
  131. {0x92, 0x00},
  132. {0x93, 0x06},
  133. {0x93, 0xe3},
  134. {0x93, 0x05},
  135. {0x93, 0x05},
  136. {0x93, 0x00},
  137. {0x93, 0x04},
  138. {0x93, 0x00},
  139. {0x93, 0x00},
  140. {0x93, 0x00},
  141. {0x93, 0x00},
  142. {0x93, 0x00},
  143. {0x93, 0x00},
  144. {0x93, 0x00},
  145. {0x96, 0x00},
  146. {0x97, 0x08},
  147. {0x97, 0x19},
  148. {0x97, 0x02},
  149. {0x97, 0x0c},
  150. {0x97, 0x24},
  151. {0x97, 0x30},
  152. {0x97, 0x28},
  153. {0x97, 0x26},
  154. {0x97, 0x02},
  155. {0x97, 0x98},
  156. {0x97, 0x80},
  157. {0x97, 0x00},
  158. {0x97, 0x00},
  159. {0xa4, 0x00},
  160. {0xa8, 0x00},
  161. {0xc5, 0x11},
  162. {0xc6, 0x51},
  163. {0xbf, 0x80},
  164. {0xc7, 0x10},
  165. {0xb6, 0x66},
  166. {0xb8, 0xA5},
  167. {0xb7, 0x64},
  168. {0xb9, 0x7C},
  169. {0xb3, 0xaf},
  170. {0xb4, 0x97},
  171. {0xb5, 0xFF},
  172. {0xb0, 0xC5},
  173. {0xb1, 0x94},
  174. {0xb2, 0x0f},
  175. {0xc4, 0x5c},
  176. {CTRL1, 0xfd},
  177. {0x7f, 0x00},
  178. {0xe5, 0x1f},
  179. {0xe1, 0x67},
  180. {0xdd, 0x7f},
  181. {IMAGE_MODE, 0x00},
  182. {RESET, 0x00},
  183. {R_BYPASS, R_BYPASS_DSP_EN},
  184. {0, 0}
  185. };
  186. const DRAM_ATTR uint8_t ov2640_settings_to_cif[][2] = {
  187. {BANK_SEL, BANK_SENSOR},
  188. {COM7, COM7_RES_CIF},
  189. //Set the sensor output window
  190. {COM1, 0x0A},
  191. {REG32, REG32_CIF},
  192. {HSTART, 0x11},
  193. {HSTOP, 0x43},
  194. {VSTART, 0x00},
  195. {VSTOP, 0x25},
  196. {CLKRC, 0x01},
  197. {BD50, 0xca},
  198. {BD60, 0xa8},
  199. {0x5a, 0x23},
  200. {0x6d, 0x00},
  201. {0x3d, 0x38},
  202. {0x39, 0x92},
  203. {0x35, 0xda},
  204. {0x22, 0x1a},
  205. {0x37, 0xc3},
  206. {0x23, 0x00},
  207. {ARCOM2, 0xc0},
  208. {0x06, 0x88},
  209. {0x07, 0xc0},
  210. {COM4, 0x87},
  211. {0x0e, 0x41},
  212. {0x4c, 0x00},
  213. {BANK_SEL, BANK_DSP},
  214. {RESET, RESET_DVP},
  215. //Set the sensor resolution (UXGA, SVGA, CIF)
  216. {HSIZE8, 0x32},
  217. {VSIZE8, 0x25},
  218. {SIZEL, 0x00},
  219. //Set the image window size >= output size
  220. {HSIZE, 0x64},
  221. {VSIZE, 0x4a},
  222. {XOFFL, 0x00},
  223. {YOFFL, 0x00},
  224. {VHYX, 0x00},
  225. {TEST, 0x00},
  226. {CTRL2, CTRL2_DCW_EN | 0x1D},
  227. {CTRLI, CTRLI_LP_DP | 0x00},
  228. {R_DVP_SP, 0x82},
  229. {0, 0}
  230. };
  231. const DRAM_ATTR uint8_t ov2640_settings_to_svga[][2] = {
  232. {BANK_SEL, BANK_SENSOR},
  233. {COM7, COM7_RES_SVGA},
  234. //Set the sensor output window
  235. {COM1, 0x0A},
  236. {REG32, REG32_SVGA},
  237. {HSTART, 0x11},
  238. {HSTOP, 0x43},
  239. {VSTART, 0x00},
  240. {VSTOP, 0x4b},
  241. {CLKRC, 0x01},
  242. {0x37, 0xc0},
  243. {BD50, 0xca},
  244. {BD60, 0xa8},
  245. {0x5a, 0x23},
  246. {0x6d, 0x00},
  247. {0x3d, 0x38},
  248. {0x39, 0x92},
  249. {0x35, 0xda},
  250. {0x22, 0x1a},
  251. {0x37, 0xc3},
  252. {0x23, 0x00},
  253. {ARCOM2, 0xc0},
  254. {0x06, 0x88},
  255. {0x07, 0xc0},
  256. {COM4, 0x87},
  257. {0x0e, 0x41},
  258. {0x42, 0x03},
  259. {0x4c, 0x00},
  260. {BANK_SEL, BANK_DSP},
  261. {RESET, RESET_DVP},
  262. //Set the sensor resolution (UXGA, SVGA, CIF)
  263. {HSIZE8, 0x64},
  264. {VSIZE8, 0x4B},
  265. {SIZEL, 0x00},
  266. //Set the image window size >= output size
  267. {HSIZE, 0xC8},
  268. {VSIZE, 0x96},
  269. {XOFFL, 0x00},
  270. {YOFFL, 0x00},
  271. {VHYX, 0x00},
  272. {TEST, 0x00},
  273. {CTRL2, CTRL2_DCW_EN | 0x1D},
  274. {CTRLI, CTRLI_LP_DP | 0x00},
  275. {R_DVP_SP, 0x80},
  276. {0, 0}
  277. };
  278. const DRAM_ATTR uint8_t ov2640_settings_to_uxga[][2] = {
  279. {BANK_SEL, BANK_SENSOR},
  280. {COM7, COM7_RES_UXGA},
  281. //Set the sensor output window
  282. {COM1, 0x0F},
  283. {REG32, REG32_UXGA},
  284. {HSTART, 0x11},
  285. {HSTOP, 0x75},
  286. {VSTART, 0x01},
  287. {VSTOP, 0x97},
  288. {CLKRC, 0x01},
  289. {0x3d, 0x34},
  290. {BD50, 0xbb},
  291. {BD60, 0x9c},
  292. {0x5a, 0x57},
  293. {0x6d, 0x80},
  294. {0x39, 0x82},
  295. {0x23, 0x00},
  296. {0x07, 0xc0},
  297. {0x4c, 0x00},
  298. {0x35, 0x88},
  299. {0x22, 0x0a},
  300. {0x37, 0x40},
  301. {ARCOM2, 0xa0},
  302. {0x06, 0x02},
  303. {COM4, 0xb7},
  304. {0x0e, 0x01},
  305. {0x42, 0x83},
  306. {BANK_SEL, BANK_DSP},
  307. {RESET, RESET_DVP},
  308. //Set the sensor resolution (UXGA, SVGA, CIF)
  309. {HSIZE8, 0xc8},
  310. {VSIZE8, 0x96},
  311. {SIZEL, 0x00},
  312. //Set the image window size >= output size
  313. {HSIZE, 0x90},
  314. {VSIZE, 0x2c},
  315. {XOFFL, 0x00},
  316. {YOFFL, 0x00},
  317. {VHYX, 0x88},
  318. {TEST, 0x00},
  319. {CTRL2, CTRL2_DCW_EN | 0x1d},
  320. {CTRLI, 0x00},
  321. {R_DVP_SP, 0x82},
  322. {0, 0}
  323. };
  324. const DRAM_ATTR uint8_t ov2640_settings_jpeg3[][2] = {
  325. {BANK_SEL, BANK_DSP},
  326. {RESET, RESET_JPEG | RESET_DVP},
  327. {IMAGE_MODE, IMAGE_MODE_JPEG_EN | IMAGE_MODE_HREF_VSYNC},
  328. {0xD7, 0x03},
  329. {0xE1, 0x77},
  330. {0xE5, 0x1F},
  331. {0xD9, 0x10},
  332. {0xDF, 0x80},
  333. {0x33, 0x80},
  334. {0x3C, 0x10},
  335. {R_DVP_SP, 0x04},
  336. {0xEB, 0x30},
  337. {0xDD, 0x7F},
  338. {RESET, 0x00},
  339. {0, 0}
  340. };
  341. static const uint8_t ov2640_settings_yuv422[][2] = {
  342. {BANK_SEL, BANK_DSP},
  343. {RESET, RESET_DVP},
  344. {IMAGE_MODE, IMAGE_MODE_YUV422},
  345. {0xD7, 0x01},
  346. {0xE1, 0x67},
  347. {RESET, 0x00},
  348. {0, 0},
  349. };
  350. static const uint8_t ov2640_settings_rgb565[][2] = {
  351. {BANK_SEL, BANK_DSP},
  352. {RESET, RESET_DVP},
  353. {IMAGE_MODE, IMAGE_MODE_RGB565},
  354. {0xD7, 0x03},
  355. {0xE1, 0x77},
  356. {RESET, 0x00},
  357. {0, 0},
  358. };
  359. #define NUM_BRIGHTNESS_LEVELS (5)
  360. static const uint8_t brightness_regs[NUM_BRIGHTNESS_LEVELS + 1][5] = {
  361. {BPADDR, BPDATA, BPADDR, BPDATA, BPDATA },
  362. {0x00, 0x04, 0x09, 0x00, 0x00 }, /* -2 */
  363. {0x00, 0x04, 0x09, 0x10, 0x00 }, /* -1 */
  364. {0x00, 0x04, 0x09, 0x20, 0x00 }, /* 0 */
  365. {0x00, 0x04, 0x09, 0x30, 0x00 }, /* +1 */
  366. {0x00, 0x04, 0x09, 0x40, 0x00 }, /* +2 */
  367. };
  368. #define NUM_CONTRAST_LEVELS (5)
  369. static const uint8_t contrast_regs[NUM_CONTRAST_LEVELS + 1][7] = {
  370. {BPADDR, BPDATA, BPADDR, BPDATA, BPDATA, BPDATA, BPDATA },
  371. {0x00, 0x04, 0x07, 0x20, 0x18, 0x34, 0x06 }, /* -2 */
  372. {0x00, 0x04, 0x07, 0x20, 0x1c, 0x2a, 0x06 }, /* -1 */
  373. {0x00, 0x04, 0x07, 0x20, 0x20, 0x20, 0x06 }, /* 0 */
  374. {0x00, 0x04, 0x07, 0x20, 0x24, 0x16, 0x06 }, /* +1 */
  375. {0x00, 0x04, 0x07, 0x20, 0x28, 0x0c, 0x06 }, /* +2 */
  376. };
  377. #define NUM_SATURATION_LEVELS (5)
  378. static const uint8_t saturation_regs[NUM_SATURATION_LEVELS + 1][5] = {
  379. {BPADDR, BPDATA, BPADDR, BPDATA, BPDATA },
  380. {0x00, 0x02, 0x03, 0x28, 0x28 }, /* -2 */
  381. {0x00, 0x02, 0x03, 0x38, 0x38 }, /* -1 */
  382. {0x00, 0x02, 0x03, 0x48, 0x48 }, /* 0 */
  383. {0x00, 0x02, 0x03, 0x58, 0x58 }, /* +1 */
  384. {0x00, 0x02, 0x03, 0x68, 0x68 }, /* +2 */
  385. };
  386. #define NUM_SPECIAL_EFFECTS (7)
  387. static const uint8_t special_effects_regs[NUM_SPECIAL_EFFECTS + 1][5] = {
  388. {BPADDR, BPDATA, BPADDR, BPDATA, BPDATA },
  389. {0x00, 0X00, 0x05, 0X80, 0X80 }, /* no effect */
  390. {0x00, 0X40, 0x05, 0X80, 0X80 }, /* negative */
  391. {0x00, 0X18, 0x05, 0X80, 0X80 }, /* black and white */
  392. {0x00, 0X18, 0x05, 0X40, 0XC0 }, /* reddish */
  393. {0x00, 0X18, 0x05, 0X40, 0X40 }, /* greenish */
  394. {0x00, 0X18, 0x05, 0XA0, 0X40 }, /* blue */
  395. {0x00, 0X18, 0x05, 0X40, 0XA6 }, /* retro */
  396. };
  397. #define NUM_WB_MODES (4)
  398. static const uint8_t wb_modes_regs[NUM_WB_MODES + 1][3] = {
  399. {0XCC, 0XCD, 0XCE },
  400. {0x5E, 0X41, 0x54 }, /* sunny */
  401. {0x65, 0X41, 0x4F }, /* cloudy */
  402. {0x52, 0X41, 0x66 }, /* office */
  403. {0x42, 0X3F, 0x71 }, /* home */
  404. };
  405. #define NUM_AE_LEVELS (5)
  406. static const uint8_t ae_levels_regs[NUM_AE_LEVELS + 1][3] = {
  407. { AEW, AEB, VV },
  408. {0x20, 0X18, 0x60 },
  409. {0x34, 0X1C, 0x00 },
  410. {0x3E, 0X38, 0x81 },
  411. {0x48, 0X40, 0x81 },
  412. {0x58, 0X50, 0x92 },
  413. };
  414. const uint8_t agc_gain_tbl[31] = {
  415. 0x00, 0x10, 0x18, 0x30, 0x34, 0x38, 0x3C, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7A, 0x7C, 0x7E, 0xF0,
  416. 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
  417. };
  418. #endif /* _OV2640_SETTINGS_H_ */