📄 ov2640.c
字号:
sensor_write_reg(0xa6, 0x00); sensor_write_reg(0xa7, 0x20); sensor_write_reg(0xa7, 0xd8); sensor_write_reg(0xa7, 0x1b); sensor_write_reg(0xa7, 0x31); sensor_write_reg(0xa7, 0x00); sensor_write_reg(0xa7, 0x18); sensor_write_reg(0xa7, 0x20); sensor_write_reg(0xa7, 0xd8); sensor_write_reg(0xa7, 0x19); sensor_write_reg(0xa7, 0x31); sensor_write_reg(0xa7, 0x00); sensor_write_reg(0xa7, 0x18); sensor_write_reg(0xa7, 0x20); sensor_write_reg(0xa7, 0xd8); sensor_write_reg(0xa7, 0x19); sensor_write_reg(0xa7, 0x31); sensor_write_reg(0xa7, 0x00); sensor_write_reg(0xa7, 0x18); sensor_write_reg(0xc0, 0xc8); sensor_write_reg(0xc1, 0x96); sensor_write_reg(0x86, 0x3d); sensor_write_reg(0x50, 0x00); sensor_write_reg(0x51, 0x90); sensor_write_reg(0x52, 0x18); sensor_write_reg(0x53, 0x00); sensor_write_reg(0x54, 0x00); sensor_write_reg(0x55, 0x88); sensor_write_reg(0x57, 0x00); sensor_write_reg(0x5a, 0x90); sensor_write_reg(0x5b, 0x18); sensor_write_reg(0x5c, 0x05); sensor_write_reg(0xc3, 0xef); sensor_write_reg(0x7f, 0x00); sensor_write_reg(0xda, 0x00); sensor_write_reg(0xe5, 0x1f); sensor_write_reg(0xe1, 0x67); sensor_write_reg(0xe0, 0x00); sensor_write_reg(0xdd, 0x7f); sensor_write_reg(0x05, 0x00); /***************************/ sensor_write_reg(0xff, 0x00); sensor_write_reg(0xe0, 0x04); sensor_write_reg(0xc0, 0xc8); sensor_write_reg(0xc1, 0x96); sensor_write_reg(0x86, 0x3d); sensor_write_reg(0x50, 0x92); sensor_write_reg(0x51, 0x90); sensor_write_reg(0x52, 0x2c); sensor_write_reg(0x53, 0x00); sensor_write_reg(0x54, 0x00); sensor_write_reg(0x55, 0x88); sensor_write_reg(0x57, 0x00); sensor_write_reg(0x5a, 0x50); sensor_write_reg(0x5b, 0x3c); sensor_write_reg(0x5c, 0x00); sensor_write_reg(0xd3, 0x04); sensor_write_reg(0xe0, 0x00);}/* QVGA when SVGA mode */void init_ov2640_qvga_svga(void) { sensor_write_reg(0xff, 0x01); sensor_write_reg(0x12, 0x80); mdelay(1000); sensor_write_reg(0xff, 0x00); sensor_write_reg(0x2c, 0xff); sensor_write_reg(0x2e, 0xdf); sensor_write_reg(0xff, 0x01); sensor_write_reg(0x3c, 0x32); sensor_write_reg(0x11, 0x01);// sensor_write_reg(0x11, 0x04);// sensor_write_reg(0x11, 0x80);// sensor_write_reg(0x11, 0x00); sensor_write_reg(0x09, 0x00); sensor_write_reg(0x04, 0x28); sensor_write_reg(0x13, 0xe5); sensor_write_reg(0x14, 0x48); sensor_write_reg(0x2c, 0x0c); sensor_write_reg(0x33, 0x78); sensor_write_reg(0x3a, 0x33); sensor_write_reg(0x3b, 0xfb); sensor_write_reg(0x3e, 0x00); sensor_write_reg(0x43, 0x11); sensor_write_reg(0x16, 0x10); sensor_write_reg(0x39, 0x92); sensor_write_reg(0x35, 0xda); sensor_write_reg(0x22, 0x1a); sensor_write_reg(0x37, 0xc3); sensor_write_reg(0x23, 0x00); sensor_write_reg(0x34, 0xc0); sensor_write_reg(0x36, 0x1a); sensor_write_reg(0x06, 0x88); sensor_write_reg(0x07, 0xc0); sensor_write_reg(0x0d, 0x87); sensor_write_reg(0x0e, 0x41); sensor_write_reg(0x4c, 0x00); sensor_write_reg(0x4a, 0x81); sensor_write_reg(0x21, 0x99); sensor_write_reg(0x24, 0x40); sensor_write_reg(0x25, 0x38); sensor_write_reg(0x26, 0x82); sensor_write_reg(0x5c, 0x00); sensor_write_reg(0x63, 0x00); sensor_write_reg(0x46, 0x22); sensor_write_reg(0x0c, 0x3c); sensor_write_reg(0x5d, 0x55); sensor_write_reg(0x5e, 0x7d); sensor_write_reg(0x5f, 0x7d); sensor_write_reg(0x60, 0x55); sensor_write_reg(0x61, 0x70); sensor_write_reg(0x62, 0x80); sensor_write_reg(0x7c, 0x05); sensor_write_reg(0x20, 0x80); sensor_write_reg(0x28, 0x30); sensor_write_reg(0x6c, 0x00); sensor_write_reg(0x6d, 0x80); sensor_write_reg(0x6e, 0x00); sensor_write_reg(0x70, 0x02); sensor_write_reg(0x71, 0x94); sensor_write_reg(0x73, 0xc1); sensor_write_reg(0x12, 0x40); sensor_write_reg(0x17, 0x11); sensor_write_reg(0x18, 0x43); sensor_write_reg(0x19, 0x00); sensor_write_reg(0x1a, 0x4b); sensor_write_reg(0x32, 0x09); sensor_write_reg(0x37, 0xc0); sensor_write_reg(0x4f, 0xca); sensor_write_reg(0x50, 0xa8); sensor_write_reg(0x6d, 0x00); sensor_write_reg(0x3d, 0x38);// sensor_write_reg(0x3d, 0x35); sensor_write_reg(0xff, 0x00); sensor_write_reg(0xe5, 0x7f); sensor_write_reg(0xf9, 0xc0); sensor_write_reg(0x41, 0x24); sensor_write_reg(0x44, 0x06); sensor_write_reg(0xe0, 0x14); sensor_write_reg(0x76, 0xff); sensor_write_reg(0x33, 0xa0); sensor_write_reg(0x42, 0x20); sensor_write_reg(0x43, 0x18); sensor_write_reg(0x4c, 0x00); sensor_write_reg(0x87, 0xd0); sensor_write_reg(0x88, 0x3f); sensor_write_reg(0xd7, 0x03);// sensor_write_reg(0xd7, 0x01); sensor_write_reg(0xd9, 0x10); sensor_write_reg(0xd3, 0x82); sensor_write_reg(0xc8, 0x08); sensor_write_reg(0xc9, 0x80); sensor_write_reg(0x7c, 0x00); sensor_write_reg(0x7d, 0x00); sensor_write_reg(0x7c, 0x03); sensor_write_reg(0x7d, 0x48); sensor_write_reg(0x7d, 0x48); sensor_write_reg(0x7c, 0x08); sensor_write_reg(0x7d, 0x20); sensor_write_reg(0x7d, 0x10); sensor_write_reg(0x7d, 0x0e); sensor_write_reg(0x90, 0x00); sensor_write_reg(0x91, 0x0e); sensor_write_reg(0x91, 0x1a); sensor_write_reg(0x91, 0x31); sensor_write_reg(0x91, 0x5a); sensor_write_reg(0x91, 0x69); sensor_write_reg(0x91, 0x75); sensor_write_reg(0x91, 0x7e); sensor_write_reg(0x91, 0x88); sensor_write_reg(0x91, 0x8f); sensor_write_reg(0x91, 0x96); sensor_write_reg(0x91, 0xa3); sensor_write_reg(0x91, 0xaf); sensor_write_reg(0x91, 0xc4); sensor_write_reg(0x91, 0xd7); sensor_write_reg(0x91, 0xe8); sensor_write_reg(0x91, 0x20); sensor_write_reg(0x92, 0x00); sensor_write_reg(0x93, 0x06); sensor_write_reg(0x93, 0xe3); sensor_write_reg(0x93, 0x03); sensor_write_reg(0x93, 0x03); sensor_write_reg(0x93, 0x00); sensor_write_reg(0x93, 0x02); sensor_write_reg(0x93, 0x00); sensor_write_reg(0x93, 0x00); sensor_write_reg(0x93, 0x00); sensor_write_reg(0x93, 0x00); sensor_write_reg(0x93, 0x00); sensor_write_reg(0x93, 0x00); sensor_write_reg(0x93, 0x00); sensor_write_reg(0x96, 0x00); sensor_write_reg(0x97, 0x08); sensor_write_reg(0x97, 0x19); sensor_write_reg(0x97, 0x02); sensor_write_reg(0x97, 0x0c); sensor_write_reg(0x97, 0x24); sensor_write_reg(0x97, 0x30); sensor_write_reg(0x97, 0x28); sensor_write_reg(0x97, 0x26); sensor_write_reg(0x97, 0x02); sensor_write_reg(0x97, 0x98); sensor_write_reg(0x97, 0x80); sensor_write_reg(0x97, 0x00); sensor_write_reg(0x97, 0x00); sensor_write_reg(0xa4, 0x00); sensor_write_reg(0xa8, 0x00); sensor_write_reg(0xc5, 0x11); sensor_write_reg(0xc6, 0x51); sensor_write_reg(0xbf, 0x80); sensor_write_reg(0xc7, 0x10); sensor_write_reg(0xb6, 0x66); sensor_write_reg(0xb8, 0xA5); sensor_write_reg(0xb7, 0x64); sensor_write_reg(0xb9, 0x7C); sensor_write_reg(0xb3, 0xaf); sensor_write_reg(0xb4, 0x97); sensor_write_reg(0xb5, 0xFF); sensor_write_reg(0xb0, 0xC5); sensor_write_reg(0xb1, 0x94); sensor_write_reg(0xb2, 0x0f); sensor_write_reg(0xc4, 0x5c); sensor_write_reg(0xa6, 0x00); sensor_write_reg(0xa7, 0x20); sensor_write_reg(0xa7, 0xd8); sensor_write_reg(0xa7, 0x1b); sensor_write_reg(0xa7, 0x31); sensor_write_reg(0xa7, 0x00); sensor_write_reg(0xa7, 0x18); sensor_write_reg(0xa7, 0x20); sensor_write_reg(0xa7, 0xd8); sensor_write_reg(0xa7, 0x19); sensor_write_reg(0xa7, 0x31); sensor_write_reg(0xa7, 0x00); sensor_write_reg(0xa7, 0x18); sensor_write_reg(0xa7, 0x20); sensor_write_reg(0xa7, 0xd8); sensor_write_reg(0xa7, 0x19); sensor_write_reg(0xa7, 0x31); sensor_write_reg(0xa7, 0x00); sensor_write_reg(0xa7, 0x18); sensor_write_reg(0xc0, 0x64); sensor_write_reg(0xc1, 0x4b); sensor_write_reg(0x86, 0x1d); sensor_write_reg(0x50, 0x00); sensor_write_reg(0x51, 0xc8); sensor_write_reg(0x52, 0x96); sensor_write_reg(0x53, 0x00); sensor_write_reg(0x54, 0x00); sensor_write_reg(0x55, 0x00); sensor_write_reg(0x57, 0x00); sensor_write_reg(0x5a, 0xc8); sensor_write_reg(0x5b, 0x96); sensor_write_reg(0x5c, 0x00); sensor_write_reg(0xc3, 0xef); sensor_write_reg(0x7f, 0x00); sensor_write_reg(0xda, 0x00); sensor_write_reg(0xe5, 0x1f); sensor_write_reg(0xe1, 0x67); sensor_write_reg(0xe0, 0x00); sensor_write_reg(0xdd, 0x7f); sensor_write_reg(0x05, 0x00); /***************************/ sensor_write_reg(0xff, 0x00); sensor_write_reg(0xe0, 0x04); sensor_write_reg(0xc0, 0x64); sensor_write_reg(0xc1, 0x4B); sensor_write_reg(0x8c, 0x00); sensor_write_reg(0x86, 0x3D); sensor_write_reg(0x50, 0x89); sensor_write_reg(0x51, 0xC8); sensor_write_reg(0x52, 0x96); sensor_write_reg(0x53, 0x00); sensor_write_reg(0x54, 0x00); sensor_write_reg(0x55, 0x00); sensor_write_reg(0x5a, 0x50); sensor_write_reg(0x5b, 0x3c); sensor_write_reg(0x5c, 0x00); sensor_write_reg(0xd3, 0x04); sensor_write_reg(0xe0, 0x00);}/* QVGA when SVGA mode */void convert_to_jpeg(void) { sensor_write_reg(0xff, 0x01); sensor_write_reg(0x11, 0x01); sensor_write_reg(0x12, 0x00); sensor_write_reg(0x3d, 0x34); sensor_write_reg(0xff, 0x00); sensor_write_reg(0xe0, 0x14); // jpeg, dvp reset// sensor_write_reg(0xda, 0x10); // HREF is same as sensor sensor_write_reg(0xda, 0x12); // HREF = VSYNC sensor_write_reg(0xe0, 0x00);}void return_from_jpeg(void) { sensor_write_reg(0xff, 0x01); sensor_write_reg(0x11, 0x01); sensor_write_reg(0x12, 0x40); sensor_write_reg(0x3d, 0x38); sensor_write_reg(0xff, 0x00); sensor_write_reg(0xe0, 0x04); sensor_write_reg(0xda, 0x00); sensor_write_reg(0xe0, 0x00);}void night_mode(void) { sensor_write_reg(0xff, 0x01); sensor_write_reg(0x11, 0x05);}void de_night_mode(void) { sensor_write_reg(0xff, 0x01); sensor_write_reg(0x11, 0x01);}void auto_mode(void) { sensor_write_reg(0xff, 0x00); sensor_write_reg(0xc7, 0x00);}void sunny_mode(void) { sensor_write_reg(0xff, 0x00); sensor_write_reg(0xc7, 0x40); sensor_write_reg(0xcc, 0x5e); sensor_write_reg(0xcd, 0x41); sensor_write_reg(0xce, 0x54);}void cloudy_mode(void) { sensor_write_reg(0xff, 0x00); sensor_write_reg(0xc7, 0x40); sensor_write_reg(0xcc, 0x65); sensor_write_reg(0xcd, 0x41); sensor_write_reg(0xce, 0x4f);}void office_mode(void) { sensor_write_reg(0xff, 0x00); sensor_write_reg(0xc7, 0x40); sensor_write_reg(0xcc, 0x52); sensor_write_reg(0xcd, 0x41); sensor_write_reg(0xce, 0x66);}void home_mode(void) { sensor_write_reg(0xff, 0x00); sensor_write_reg(0xc7, 0x40); sensor_write_reg(0xcc, 0x42); sensor_write_reg(0xcd, 0x3f); sensor_write_reg(0xce, 0x71);}void antique_mode (void) { sensor_write_reg(0xff, 0x00); sensor_write_reg(0x7c, 0x00); sensor_write_reg(0x7d, 0x18); sensor_write_reg(0x7c, 0x05); sensor_write_reg(0x7d, 0x40); sensor_write_reg(0x7d, 0xa6);}void bluish_mode (void) { sensor_write_reg(0xff, 0x00); sensor_write_reg(0x7c, 0x00); sensor_write_reg(0x7d, 0x18); sensor_write_reg(0x7c, 0x05); sensor_write_reg(0x7d, 0xa0); sensor_write_reg(0x7d, 0x40);}void greenish_mode (void) { sensor_write_reg(0xff, 0x00); sensor_write_reg(0x7c, 0x00); sensor_write_reg(0x7d, 0x18); sensor_write_reg(0x7c, 0x05); sensor_write_reg(0x7d, 0x40); sensor_write_reg(0x7d, 0x40);}void reddish_mode (void) { sensor_write_reg(0xff, 0x00); sensor_write_reg(0x7c, 0x00); sensor_write_reg(0x7d, 0x18); sensor_write_reg(0x7c, 0x05); sensor_write_reg(0x7d, 0x40); sensor_write_reg(0x7d, 0xc0);}void black_white_mode (void) { sensor_write_reg(0xff, 0x00); sensor_write_reg(0x7c, 0x00); sensor_write_reg(0x7d, 0x18); sensor_write_reg(0x7c, 0x05); sensor_write_reg(0x7d, 0x80); sensor_write_reg(0x7d, 0x80);}void negative_mode (void) { sensor_write_reg(0xff, 0x00); sensor_write_reg(0x7c, 0x00); sensor_write_reg(0x7d, 0x40); sensor_write_reg(0x7c, 0x05); sensor_write_reg(0x7d, 0x80); sensor_write_reg(0x7d, 0x80);}void black_white_negative_mode (void) { sensor_write_reg(0xff, 0x00); sensor_write_reg(0x7c, 0x00); sensor_write_reg(0x7d, 0x58); sensor_write_reg(0x7c, 0x05); sensor_write_reg(0x7d, 0x80); sensor_write_reg(0x7d, 0x80);}void normal_mode (void) { sensor_write_reg(0xff, 0x00); sensor_write_reg(0x7c, 0x00); sensor_write_reg(0x7d, 0x00); sensor_write_reg(0x7c, 0x05); sensor_write_reg(0x7d, 0x80); sensor_write_reg(0x7d, 0x80);}/* Adjust brightness 1 -> 5 */void adjust_bright (unsigned int level) { unsigned char val; val = (unsigned char)((level - 1) * 16); sensor_write_reg(0xff, 0x00); sensor_write_reg(0x7c, 0x00); sensor_write_reg(0x7d, 0x04); sensor_write_reg(0x7c, 0x09); sensor_write_reg(0x7d, val); sensor_write_reg(0x7d, 0x00);}void sensor_read (void) { int i, val; for (i = 0; i < sizeof(reg_list)/4; i++) { printf("reg(0x%02x) = 0x%02x\n", reg_list[i], sensor_read_reg(reg_list[i])); }}/* * GPIO init for ov2640 */void init_ov2640_gpio(void) { __gpio_as_output(GPIO_CAM_PWD); __gpio_as_output(GPIO_CAM_RST); __gpio_clear_pin(GPIO_CAM_PWD); mdelay(10); __gpio_set_pin(GPIO_CAM_RST); __gpio_clear_pin(GPIO_CAM_RST); mdelay(10); __gpio_set_pin(GPIO_CAM_RST);}/* * Sensor Init Routine */int init_sensor(img_param_t *img){ init_ov2640_gpio(); sensor_set_addr(0x60); sensor_set_clk(10000); mdelay(10); if (img->in_width == 320 && img->in_height == 240) {// init_ov2640_qvga_uxga(); init_ov2640_qvga_svga(); return 0; } if (img->in_width == 640 && img->in_height == 480) { init_ov2640_vga(); return 0; } printf("ERROR: input size don't support width = %d, height = %d\n", img->in_width, img->in_height); return 1;}void output_jpeg(int mode) { printf(" ============= no output_jpeg\n");}void output_yuv(void) { printf(" ============= no output_yuv\n");}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -