📄 ov3640.c
字号:
sensor_write_reg16(0x335f, 0x68); sensor_write_reg16(0x3360, 0x18); sensor_write_reg16(0x3361, 0x0c); sensor_write_reg16(0x3362, 0x68); sensor_write_reg16(0x3363, 0x08); sensor_write_reg16(0x3364, 0x04); sensor_write_reg16(0x3403, 0x42); sensor_write_reg16(0x3088, 0x08); sensor_write_reg16(0x3089, 0x00); sensor_write_reg16(0x308a, 0x06); sensor_write_reg16(0x308b, 0x00); sensor_write_reg16(0x300e, 0x39); sensor_write_reg16(0x300f, 0x21); sensor_write_reg16(0x3010, 0x20); sensor_write_reg16(0x3011, 0x00); sensor_write_reg16(0x304c, 0x81);}void convert_to_xga(void) { sensor_write_reg16(0x3012, 0x10); sensor_write_reg16(0x3023, 0x06); sensor_write_reg16(0x3026, 0x03); sensor_write_reg16(0x3027, 0x04); sensor_write_reg16(0x302a, 0x03); sensor_write_reg16(0x302b, 0x10); sensor_write_reg16(0x3075, 0x24); sensor_write_reg16(0x300d, 0x01); sensor_write_reg16(0x30d7, 0x90); sensor_write_reg16(0x3069, 0x04); sensor_write_reg16(0x303e, 0x00); sensor_write_reg16(0x303f, 0xc0); sensor_write_reg16(0x3302, 0xef); sensor_write_reg16(0x335f, 0x34); sensor_write_reg16(0x3360, 0x0c); sensor_write_reg16(0x3361, 0x04); sensor_write_reg16(0x3362, 0x34); sensor_write_reg16(0x3363, 0x08); sensor_write_reg16(0x3364, 0x04); sensor_write_reg16(0x3403, 0x42); sensor_write_reg16(0x3088, 0x04); sensor_write_reg16(0x3089, 0x00); sensor_write_reg16(0x308a, 0x03); sensor_write_reg16(0x308b, 0x00); sensor_write_reg16(0x300e, 0x32); sensor_write_reg16(0x300f, 0x21); sensor_write_reg16(0x3010, 0x20); sensor_write_reg16(0x3011, 0x00); sensor_write_reg16(0x304c, 0x82);}void return_from_jpeg(void) {}void night_mode(void) {/* sensor_read_reg16(0x300e, &save_reg[0]); sensor_read_reg16(0x3011, &save_reg[1]); sensor_read_reg16(0x3010, &save_reg[2]); sensor_read_reg16(0x302a, &save_reg[3]); sensor_read_reg16(0x302b, &save_reg[4]); sensor_read_reg16(0x302c, &save_reg[5]); sensor_read_reg16(0x3014, &save_reg[6]); sensor_read_reg16(0x302e, &save_reg[7]); sensor_read_reg16(0x302d, &save_reg[8]);*/ save_reg[0]=sensor_read_reg16(0x300e); save_reg[1]=sensor_read_reg16(0x3011); save_reg[2]=sensor_read_reg16(0x3010); save_reg[3]=sensor_read_reg16(0x302a); save_reg[4]=sensor_read_reg16(0x302b); save_reg[5]=sensor_read_reg16(0x302c); save_reg[6]=sensor_read_reg16(0x3014); save_reg[7]=sensor_read_reg16(0x302e); save_reg[8]=sensor_read_reg16(0x302d); save_reg[9]=sensor_read_reg16(0x3015); sensor_write_reg16(0x300e, 0x32); sensor_write_reg16(0x3011, 0x00); sensor_write_reg16(0x3010, 0x20); sensor_write_reg16(0x302a, 0x03); sensor_write_reg16(0x302b, 0x92);//add 130 line sensor_write_reg16(0x302c, 0x00); sensor_write_reg16(0x3014, 0x0c); sensor_write_reg16(0x302e, 0x00); sensor_write_reg16(0x302d, 0x00); sensor_write_reg16(0x3015, 0x42);}void de_night_mode(void) { sensor_write_reg16(0x300e, save_reg[0]); sensor_write_reg16(0x3011, save_reg[1]); sensor_write_reg16(0x3010, save_reg[2]); sensor_write_reg16(0x302a, save_reg[3]); sensor_write_reg16(0x302b, save_reg[4]); sensor_write_reg16(0x302c, save_reg[5]); sensor_write_reg16(0x3014, save_reg[6]); sensor_write_reg16(0x302e, save_reg[7]); sensor_write_reg16(0x302d, save_reg[8]); sensor_write_reg16(0x3015, save_reg[9]);}void auto_mode(void) { sensor_write_reg16(0x332b, 0x00);//AWB auto, bit[3]:0,auto}void sunny_mode(void) { sensor_write_reg16(0x332b, 0x08); //AWB off sensor_write_reg16(0x33a7, 0x5e); sensor_write_reg16(0x33a8, 0x40); sensor_write_reg16(0x33a9, 0x46);}void cloudy_mode(void) { sensor_write_reg16(0x332b, 0x08); sensor_write_reg16(0x33a7, 0x68); sensor_write_reg16(0x33a8, 0x40); sensor_write_reg16(0x33a9, 0x4e);}void office_mode(void) { sensor_write_reg16(0x332b, 0x08); sensor_write_reg16(0x33a7, 0x52); sensor_write_reg16(0x33a8, 0x40); sensor_write_reg16(0x33a9, 0x58);}void home_mode(void) { sensor_write_reg16(0x332b, 0x08); sensor_write_reg16(0x33a7, 0x44); sensor_write_reg16(0x33a8, 0x40); sensor_write_reg16(0x33a9, 0x70);}void antique_mode (void) { sensor_write_reg16(0x3302, 0xef); sensor_write_reg16(0x3355, 0x18); sensor_write_reg16(0x335a, 0x40); sensor_write_reg16(0x335b, 0xa6);}void bluish_mode (void) { sensor_write_reg16(0x3302, 0xef); sensor_write_reg16(0x3355, 0x18); sensor_write_reg16(0x335a, 0xa0); sensor_write_reg16(0x335b, 0x40);}void greenish_mode (void) { sensor_write_reg16(0x3302, 0xef); sensor_write_reg16(0x3355, 0x18); sensor_write_reg16(0x335a, 0x60); sensor_write_reg16(0x335b, 0x60);}void reddish_mode (void) { sensor_write_reg16(0x3302, 0xef); sensor_write_reg16(0x3355, 0x18); sensor_write_reg16(0x335a, 0x80); sensor_write_reg16(0x335b, 0xc0);}void yellowish_mode (void) { sensor_write_reg16(0x3302, 0xef); sensor_write_reg16(0x3355, 0x18); sensor_write_reg16(0x335a, 0x30); sensor_write_reg16(0x335b, 0x90);}void black_white_mode (void) { sensor_write_reg16(0x3302, 0xef); sensor_write_reg16(0x3355, 0x18);//bit[4]fix u enable, bit[3]fix v enable sensor_write_reg16(0x335a, 0x80); sensor_write_reg16(0x335b, 0x80);}void negative_mode (void) { sensor_write_reg16(0x3302, 0xef); sensor_write_reg16(0x3355, 0x40);//bit[6] negative}void normal_mode (void) { sensor_write_reg16(0x3302, 0xef); sensor_write_reg16(0x3355, 0x00);}/* Adjust brightness [+1 ,+7] */ //chaged by georgevoid adjust_bright ( unsigned int level) { char val; val = level-4; val *= 16;printf(" ============== val: %d\n", val );if (val>=0) { sensor_write_reg16(0x3302, 0xef); sensor_write_reg16(0x3355, 0x04); //bit[2] enable sensor_write_reg16(0x3354, 0x01); //bit[3] sign of brightness sensor_write_reg16(0x335e, val);}else { val =-val; sensor_write_reg16(0x3302, 0xef); sensor_write_reg16(0x3355, 0x04); //bit[2] enable sensor_write_reg16(0x3354, 0x09); //bit[3] sign of brightness sensor_write_reg16(0x335e, val); }}#if 0void 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_reg16(reg_list[i])); }}#endif/* * GPIO init for ov2640 */void init_ov3640_gpio(void) { __gpio_as_output(GPIO_CAM_PWD); __gpio_as_output(GPIO_CAM_RST); __gpio_clear_pin(GPIO_CAM_PWD); mdelay(100);// __gpio_set_pin(GPIO_CAM_RST); __gpio_clear_pin(GPIO_CAM_RST); mdelay(100); __gpio_set_pin(GPIO_CAM_RST); mdelay(100);}void output_jpeg(int mode) { switch (mode) { case 1: convert_to_xga(); break; case 0: default: convert_to_qxga(); break; } convert_to_jpeg();}void output_yuv(void) { init_ov3640_vga();}/* * Sensor Init Routine */int init_sensor(img_param_t *img){ init_ov3640_gpio(); sensor_set_addr(0x78); sensor_set_clk(10000); mdelay(10); if (img->in_width == 320 && img->in_height == 240) { init_ov3640_qvga(); return 0; } if (img->in_width == 640 && img->in_height == 480) { init_ov3640_vga(); return 0; } printf("ERROR: input size don't support width = %d, height = %d\n", img->in_width, img->in_height); return 1;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -