📄 ov7725.c
字号:
/* extdrv/peripheral/dc/ov7725.c * * * Copyright (c) 2006 Hisilicon Co., Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. * * * History: * 04-Apr-2006 create this file * */#include <linux/string.h>#include <linux/slab.h>#include <linux/module.h>#include <linux/config.h>#include <linux/errno.h>#include <linux/miscdevice.h>#include <linux/fcntl.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/proc_fs.h>#include <linux/workqueue.h>#include <asm/uaccess.h>#include <asm/system.h>#include <asm/io.h>#include "ov7725.h"#include "gpio_i2c.h"static int out_mode = 1;static struct timer_list cycle_timer;static int s_s32Scene = DC_VAL_INDOOR;static int powerfreq = DC_VAL_50HZ;/* ov7725 i2c slaver address micro-definition. */#define I2C_OV7725 0x42#define DC_COM7 0x12#define DC_PIDH 0x0A#define DC_PIDL 0x0B#define PIDH 0x77#define PIDL 0x21static void delay(int us){ int i,j; for(i=0;i<5*us;i++) {for ( j=0;j<47;j++) {;}}} #define HW_REG(reg) *((volatile unsigned int *) reg) #define GPIO_BASE_DIR IO_ADDRESS(0x101e6400)#define GPIO_BASE_REG IO_ADDRESS(0x101e6040)static void rst_ov7725(void){unsigned int regvaluee; regvaluee = HW_REG (GPIO_BASE_DIR); regvaluee |= 0x10; HW_REG (GPIO_BASE_DIR) = regvaluee; HW_REG (GPIO_BASE_REG) = 0x10; delay(1); HW_REG (GPIO_BASE_REG) = 0; delay(20); HW_REG (GPIO_BASE_REG) = 0x10; printk(" rst ov7725 is ok \n"); }/* * ov7725's mirror image get routine. * * @return value: ov7725's mirror image enable or disable * */static unsigned int dc_mirror_get(void){ unsigned int regvalue,reg_mirror = DC_VAL_OFF; regvalue = gpio_sccb_read(I2C_OV7725, 0x0c); if( (regvalue & 0x40) == 0x00) { reg_mirror = DC_VAL_ON; } else if((regvalue & 0x40) == 0x40) { reg_mirror = DC_VAL_OFF; } return reg_mirror; }/* * ov7725's mirror image get routine. * * @return value: ov7725's mirror image enable or disable * */static unsigned int dc_flip_get(void){ unsigned int regvalue,reg_flip = DC_VAL_OFF; regvalue = gpio_sccb_read(I2C_OV7725, 0x0c); if( (regvalue&0x80) == 0) { reg_flip = DC_VAL_ON; } else if((regvalue & 0x80) == 0x80) { reg_flip = DC_VAL_OFF; } return reg_flip; }/* * registers initialise for ov7725's YCbCr output routine. * YCbCr output 640*480 * fps =30 * */void ov7725_vga_init(void){ unsigned int regvalue = 0; if(powerfreq == DC_VAL_50HZ) { gpio_i2c_write(I2C_OV7725, 0x12, 0x80); gpio_i2c_write(I2C_OV7725, 0x3d, 0x03); gpio_i2c_write(I2C_OV7725, 0x17, 0x22); gpio_i2c_write(I2C_OV7725, 0x18, 0xa4); gpio_i2c_write(I2C_OV7725, 0x19, 0x07); gpio_i2c_write(I2C_OV7725, 0x1a, 0xf0); gpio_i2c_write(I2C_OV7725, 0x32, 0x00); gpio_i2c_write(I2C_OV7725, 0x29, 0xa0); gpio_i2c_write(I2C_OV7725, 0x2c, 0xf0); gpio_i2c_write(I2C_OV7725, 0x2a, 0x00); gpio_i2c_write(I2C_OV7725, 0x11, 0x01);//00/01/03/07 for 60/30/15/7.5fps gpio_i2c_write(I2C_OV7725, 0x42, 0x7f); gpio_i2c_write(I2C_OV7725, 0x4d, 0x09); gpio_i2c_write(I2C_OV7725, 0x63, 0xe0); gpio_i2c_write(I2C_OV7725, 0x64, 0xff); gpio_i2c_write(I2C_OV7725, 0x65, 0x20); gpio_i2c_write(I2C_OV7725, 0x66, 0x00); gpio_i2c_write(I2C_OV7725, 0x67, 0x48); gpio_i2c_write(I2C_OV7725, 0x13, 0xf0); gpio_i2c_write(I2C_OV7725, 0x0d, 0x41);//0x51/0x61/0x71 for different AEC/AGC window gpio_i2c_write(I2C_OV7725, 0x0f, 0xc5); gpio_i2c_write(I2C_OV7725, 0x14, 0x11);//0x81 gpio_i2c_write(I2C_OV7725, 0x22, 0x7f);//ff/7f/3f/1f for 60/30/15/7.5fps gpio_i2c_write(I2C_OV7725, 0x23, 0x03);//01/03/07/0f for 60/30/15/7.5fps gpio_i2c_write(I2C_OV7725, 0x24, 0x50);//0x80 gpio_i2c_write(I2C_OV7725, 0x25, 0x30);//5a gpio_i2c_write(I2C_OV7725, 0x26, 0xa1);//c1 gpio_i2c_write(I2C_OV7725, 0x2b, 0x00);//ff gpio_i2c_write(I2C_OV7725, 0x6b, 0xaa); gpio_i2c_write(I2C_OV7725, 0x13, 0xff); gpio_i2c_write(I2C_OV7725, 0x90, 0x05); gpio_i2c_write(I2C_OV7725, 0x91, 0x01); gpio_i2c_write(I2C_OV7725, 0x92, 0x03); gpio_i2c_write(I2C_OV7725, 0x93, 0x00); gpio_i2c_write(I2C_OV7725, 0x94, 0x5f);//b0 gpio_i2c_write(I2C_OV7725, 0x95, 0x53);//9d gpio_i2c_write(I2C_OV7725, 0x96, 0x11);//13 gpio_i2c_write(I2C_OV7725, 0x97, 0x1a);//16 gpio_i2c_write(I2C_OV7725, 0x98, 0x3d);//7b gpio_i2c_write(I2C_OV7725, 0x99, 0x5a);//91 gpio_i2c_write(I2C_OV7725, 0x9a, 0x1e);//1e gpio_i2c_write(I2C_OV7725, 0x9b, 0x00); gpio_i2c_write(I2C_OV7725, 0x9c, 0x25); gpio_i2c_write(I2C_OV7725, 0x9e, 0x81); gpio_i2c_write(I2C_OV7725, 0xa6, 0x06); //modified saturation initialization value by pw 2008-03-04 gpio_i2c_write(I2C_OV7725, 0xa7, 0x65); gpio_i2c_write(I2C_OV7725, 0xa8, 0x65); gpio_i2c_write(I2C_OV7725, 0x7e, 0x0c); gpio_i2c_write(I2C_OV7725, 0x7f, 0x16); gpio_i2c_write(I2C_OV7725, 0x80, 0x2a); gpio_i2c_write(I2C_OV7725, 0x81, 0x4e); gpio_i2c_write(I2C_OV7725, 0x82, 0x61); gpio_i2c_write(I2C_OV7725, 0x83, 0x6f); gpio_i2c_write(I2C_OV7725, 0x84, 0x7b); gpio_i2c_write(I2C_OV7725, 0x85, 0x86); gpio_i2c_write(I2C_OV7725, 0x86, 0x8e); gpio_i2c_write(I2C_OV7725, 0x87, 0x97); gpio_i2c_write(I2C_OV7725, 0x88, 0xa4); gpio_i2c_write(I2C_OV7725, 0x89, 0xaf); gpio_i2c_write(I2C_OV7725, 0x8a, 0xc5); gpio_i2c_write(I2C_OV7725, 0x8b, 0xd7); gpio_i2c_write(I2C_OV7725, 0x8c, 0xe8); gpio_i2c_write(I2C_OV7725, 0x8d, 0x20); #if 0 gpio_i2c_write(I2C_OV7725, 0x34, 0x00); gpio_i2c_write(I2C_OV7725, 0x33, 0x40);//0x66/0x99 gpio_i2c_write(I2C_OV7725, 0x22, 0x99); gpio_i2c_write(I2C_OV7725, 0x23, 0x03); gpio_i2c_write(I2C_OV7725, 0x4a, 0x10); gpio_i2c_write(I2C_OV7725, 0x49, 0x10); gpio_i2c_write(I2C_OV7725, 0x4b, 0x14); gpio_i2c_write(I2C_OV7725, 0x4c, 0x17); gpio_i2c_write(I2C_OV7725, 0x46, 0x05); gpio_i2c_write(I2C_OV7725, 0x0e, 0x65);#endif gpio_i2c_write(I2C_OV7725, 0x69, 0x5d); gpio_i2c_write(I2C_OV7725, 0x0c, 0x00); gpio_i2c_write(I2C_OV7725, 0x33, 0xb2);//0x66/0x99 gpio_i2c_write(I2C_OV7725, 0x0e, 0x65); gpio_i2c_write(I2C_OV7725, 0x13, 0xff); //Enable banding Filter gpio_i2c_write(I2C_OV7725, 0x22, 0xab); //Banding Filter Minimum AEC Value gpio_i2c_write(I2C_OV7725, 0x23, 0x03); //Banding Filter Step//sharpness strength modified by pw 2008-03-05 regvalue = gpio_sccb_read(I2C_OV7725, 0xac); gpio_i2c_write(I2C_OV7725, 0xac, 0xdf®value); gpio_i2c_write(I2C_OV7725, 0x8f, 0x04); } if(powerfreq == DC_VAL_60HZ) { gpio_i2c_write(I2C_OV7725, 0x12, 0x80); gpio_i2c_write(I2C_OV7725, 0x3d, 0x03); gpio_i2c_write(I2C_OV7725, 0x17, 0x22); gpio_i2c_write(I2C_OV7725, 0x18, 0xa4); gpio_i2c_write(I2C_OV7725, 0x19, 0x07); gpio_i2c_write(I2C_OV7725, 0x1a, 0xf0); gpio_i2c_write(I2C_OV7725, 0x32, 0x00); gpio_i2c_write(I2C_OV7725, 0x29, 0xa0); gpio_i2c_write(I2C_OV7725, 0x2c, 0xf0); gpio_i2c_write(I2C_OV7725, 0x2a, 0x00); gpio_i2c_write(I2C_OV7725, 0x11, 0x01);//00/01/03/07 for 60/30/15/7.5fps gpio_i2c_write(I2C_OV7725, 0x42, 0x7f); gpio_i2c_write(I2C_OV7725, 0x4d, 0x09); gpio_i2c_write(I2C_OV7725, 0x63, 0xe0); gpio_i2c_write(I2C_OV7725, 0x64, 0xff); gpio_i2c_write(I2C_OV7725, 0x65, 0x20); gpio_i2c_write(I2C_OV7725, 0x66, 0x00); gpio_i2c_write(I2C_OV7725, 0x67, 0x48); gpio_i2c_write(I2C_OV7725, 0x13, 0xf0); gpio_i2c_write(I2C_OV7725, 0x0d, 0x41);//0x51/0x61/0x71 for different AEC/AGC window gpio_i2c_write(I2C_OV7725, 0x0f, 0xc5); gpio_i2c_write(I2C_OV7725, 0x14, 0x11);//0x81 gpio_i2c_write(I2C_OV7725, 0x22, 0x7f);//ff/7f/3f/1f for 60/30/15/7.5fps gpio_i2c_write(I2C_OV7725, 0x23, 0x03);//01/03/07/0f for 60/30/15/7.5fps gpio_i2c_write(I2C_OV7725, 0x24, 0x50);//0x80 gpio_i2c_write(I2C_OV7725, 0x25, 0x30);//5a gpio_i2c_write(I2C_OV7725, 0x26, 0xa1);//c1 gpio_i2c_write(I2C_OV7725, 0x2b, 0x00);//ff gpio_i2c_write(I2C_OV7725, 0x6b, 0xaa); gpio_i2c_write(I2C_OV7725, 0x13, 0xff); gpio_i2c_write(I2C_OV7725, 0x90, 0x05); gpio_i2c_write(I2C_OV7725, 0x91, 0x01); gpio_i2c_write(I2C_OV7725, 0x92, 0x03); gpio_i2c_write(I2C_OV7725, 0x93, 0x00); gpio_i2c_write(I2C_OV7725, 0x94, 0xb0); gpio_i2c_write(I2C_OV7725, 0x95, 0x9d); gpio_i2c_write(I2C_OV7725, 0x96, 0x13); gpio_i2c_write(I2C_OV7725, 0x97, 0x16); gpio_i2c_write(I2C_OV7725, 0x98, 0x7b); gpio_i2c_write(I2C_OV7725, 0x99, 0x91); gpio_i2c_write(I2C_OV7725, 0x9a, 0x1e); gpio_i2c_write(I2C_OV7725, 0x9b, 0x00); gpio_i2c_write(I2C_OV7725, 0x9c, 0x25); gpio_i2c_write(I2C_OV7725, 0x9e, 0x81); gpio_i2c_write(I2C_OV7725, 0xa6, 0x06);//modified saturation initialization value by pw 2008-03-04 gpio_i2c_write(I2C_OV7725, 0xa7, 0x65); gpio_i2c_write(I2C_OV7725, 0xa8, 0x65); gpio_i2c_write(I2C_OV7725, 0x7e, 0x0c); gpio_i2c_write(I2C_OV7725, 0x7f, 0x16); gpio_i2c_write(I2C_OV7725, 0x80, 0x2a); gpio_i2c_write(I2C_OV7725, 0x81, 0x4e); gpio_i2c_write(I2C_OV7725, 0x82, 0x61); gpio_i2c_write(I2C_OV7725, 0x83, 0x6f); gpio_i2c_write(I2C_OV7725, 0x84, 0x7b); gpio_i2c_write(I2C_OV7725, 0x85, 0x86); gpio_i2c_write(I2C_OV7725, 0x86, 0x8e); gpio_i2c_write(I2C_OV7725, 0x87, 0x97); gpio_i2c_write(I2C_OV7725, 0x88, 0xa4); gpio_i2c_write(I2C_OV7725, 0x89, 0xaf); gpio_i2c_write(I2C_OV7725, 0x8a, 0xc5); gpio_i2c_write(I2C_OV7725, 0x8b, 0xd7); gpio_i2c_write(I2C_OV7725, 0x8c, 0xe8); gpio_i2c_write(I2C_OV7725, 0x8d, 0x20); #if 0 gpio_i2c_write(I2C_OV7725, 0x34, 0x00); gpio_i2c_write(I2C_OV7725, 0x33, 0x40);//0x66/0x99 gpio_i2c_write(I2C_OV7725, 0x22, 0x99); gpio_i2c_write(I2C_OV7725, 0x23, 0x03); gpio_i2c_write(I2C_OV7725, 0x4a, 0x10); gpio_i2c_write(I2C_OV7725, 0x49, 0x10); gpio_i2c_write(I2C_OV7725, 0x4b, 0x14); gpio_i2c_write(I2C_OV7725, 0x4c, 0x17); gpio_i2c_write(I2C_OV7725, 0x46, 0x05); gpio_i2c_write(I2C_OV7725, 0x0e, 0x65);#endif gpio_i2c_write(I2C_OV7725, 0x69, 0x5d); gpio_i2c_write(I2C_OV7725, 0x0c, 0x00); gpio_i2c_write(I2C_OV7725, 0x33, 0x3f);//0x66/0x99 gpio_i2c_write(I2C_OV7725, 0x0e, 0x65);//sharpness strength modified by pw 2008-03-05 regvalue = gpio_sccb_read(I2C_OV7725, 0xac); gpio_i2c_write(I2C_OV7725, 0xac, 0xdf®value); gpio_i2c_write(I2C_OV7725, 0x8f, 0x04); }}void ov7725_qvga_init(void){ unsigned int regvalue = 0; if(powerfreq == DC_VAL_50HZ) { gpio_i2c_write(I2C_OV7725, 0x12, 0x80); gpio_i2c_write(I2C_OV7725, 0x3d, 0x03); gpio_i2c_write(I2C_OV7725, 0x17, 0x22); gpio_i2c_write(I2C_OV7725, 0x18, 0xa4); gpio_i2c_write(I2C_OV7725, 0x19, 0x07); gpio_i2c_write(I2C_OV7725, 0x1a, 0xf0); gpio_i2c_write(I2C_OV7725, 0x32, 0x00); gpio_i2c_write(I2C_OV7725, 0x29, 0x50); gpio_i2c_write(I2C_OV7725, 0x2c, 0x78); gpio_i2c_write(I2C_OV7725, 0x2a, 0x00); gpio_i2c_write(I2C_OV7725, 0x11, 0x01);//00/01/03/07 for 60/30/15/7.5fps gpio_i2c_write(I2C_OV7725, 0x42, 0x7f); gpio_i2c_write(I2C_OV7725, 0x4d, 0x09); gpio_i2c_write(I2C_OV7725, 0x63, 0xe0); gpio_i2c_write(I2C_OV7725, 0x64, 0xff); gpio_i2c_write(I2C_OV7725, 0x65, 0x2f); gpio_i2c_write(I2C_OV7725, 0x66, 0x00); gpio_i2c_write(I2C_OV7725, 0x67, 0x48); gpio_i2c_write(I2C_OV7725, 0x13, 0xf0); gpio_i2c_write(I2C_OV7725, 0x0d, 0x41); gpio_i2c_write(I2C_OV7725, 0x0f, 0xc5); gpio_i2c_write(I2C_OV7725, 0x14, 0x11); gpio_i2c_write(I2C_OV7725, 0x22, 0x7f);//ff/7f/3f/1f for 60/30/15/7.5fps gpio_i2c_write(I2C_OV7725, 0x23, 0x03);//01/03/07/0f for 60/30/15/7.5fps gpio_i2c_write(I2C_OV7725, 0x24, 0x50); gpio_i2c_write(I2C_OV7725, 0x25, 0x30); gpio_i2c_write(I2C_OV7725, 0x26, 0xa1); gpio_i2c_write(I2C_OV7725, 0x6b, 0xaa); gpio_i2c_write(I2C_OV7725, 0x13, 0xff); gpio_i2c_write(I2C_OV7725, 0x90, 0x05); gpio_i2c_write(I2C_OV7725, 0x91, 0x01); gpio_i2c_write(I2C_OV7725, 0x92, 0x03); gpio_i2c_write(I2C_OV7725, 0x93, 0x00); gpio_i2c_write(I2C_OV7725, 0x94, 0x5f);//b0 gpio_i2c_write(I2C_OV7725, 0x95, 0x53);//9d gpio_i2c_write(I2C_OV7725, 0x96, 0x11);//13 gpio_i2c_write(I2C_OV7725, 0x97, 0x1a);//16 gpio_i2c_write(I2C_OV7725, 0x98, 0x3d);//7b gpio_i2c_write(I2C_OV7725, 0x99, 0x5a);//91 gpio_i2c_write(I2C_OV7725, 0x9a, 0x1e);//1e gpio_i2c_write(I2C_OV7725, 0x9b, 0x00); gpio_i2c_write(I2C_OV7725, 0x9c, 0x25); gpio_i2c_write(I2C_OV7725, 0x9e, 0x81); gpio_i2c_write(I2C_OV7725, 0xa6, 0x06); //modified saturation initialization value by pw 2008-03-04 gpio_i2c_write(I2C_OV7725, 0xa7, 0x65); gpio_i2c_write(I2C_OV7725, 0xa8, 0x65); gpio_i2c_write(I2C_OV7725, 0x7e, 0x0c); gpio_i2c_write(I2C_OV7725, 0x7f, 0x16); gpio_i2c_write(I2C_OV7725, 0x80, 0x2a); gpio_i2c_write(I2C_OV7725, 0x81, 0x4e); gpio_i2c_write(I2C_OV7725, 0x82, 0x61); gpio_i2c_write(I2C_OV7725, 0x83, 0x6f); gpio_i2c_write(I2C_OV7725, 0x84, 0x7b); gpio_i2c_write(I2C_OV7725, 0x85, 0x86); gpio_i2c_write(I2C_OV7725, 0x86, 0x8e); gpio_i2c_write(I2C_OV7725, 0x87, 0x97); gpio_i2c_write(I2C_OV7725, 0x88, 0xa4); gpio_i2c_write(I2C_OV7725, 0x89, 0xaf); gpio_i2c_write(I2C_OV7725, 0x8a, 0xc5); gpio_i2c_write(I2C_OV7725, 0x8b, 0xd7); gpio_i2c_write(I2C_OV7725, 0x8c, 0xe8); gpio_i2c_write(I2C_OV7725, 0x8d, 0x20);#if 0 gpio_i2c_write(I2C_OV7725, 0x34, 0x00); gpio_i2c_write(I2C_OV7725, 0x33, 0x40); gpio_i2c_write(I2C_OV7725, 0x22, 0x99); gpio_i2c_write(I2C_OV7725, 0x23, 0x03); gpio_i2c_write(I2C_OV7725, 0x4a, 0x10); gpio_i2c_write(I2C_OV7725, 0x49, 0x10); gpio_i2c_write(I2C_OV7725, 0x4b, 0x14); gpio_i2c_write(I2C_OV7725, 0x4c, 0x17); gpio_i2c_write(I2C_OV7725, 0x46, 0x05); gpio_i2c_write(I2C_OV7725, 0x0e, 0x65);#endif gpio_i2c_write(I2C_OV7725, 0x69, 0x5d); gpio_i2c_write(I2C_OV7725, 0x0c, 0x00); gpio_i2c_write(I2C_OV7725, 0x33, 0x49);//0x66/0x99 gpio_i2c_write(I2C_OV7725, 0x34, 0x01);//0x66/0x99 gpio_i2c_write(I2C_OV7725, 0x0e, 0x65); gpio_i2c_write(I2C_OV7725, 0x13, 0xff); //Enable banding Filter//sharpness strength modified by pw 2008-03-05 regvalue = gpio_sccb_read(I2C_OV7725, 0xac); gpio_i2c_write(I2C_OV7725, 0xac, 0xdf®value); gpio_i2c_write(I2C_OV7725, 0x8f, 0x04);}if(powerfreq == DC_VAL_60HZ) { gpio_i2c_write(I2C_OV7725, 0x12, 0x80); gpio_i2c_write(I2C_OV7725, 0x3d, 0x03); gpio_i2c_write(I2C_OV7725, 0x17, 0x22); gpio_i2c_write(I2C_OV7725, 0x18, 0xa4); gpio_i2c_write(I2C_OV7725, 0x19, 0x07); gpio_i2c_write(I2C_OV7725, 0x1a, 0xf0); gpio_i2c_write(I2C_OV7725, 0x32, 0x00); gpio_i2c_write(I2C_OV7725, 0x29, 0x50); gpio_i2c_write(I2C_OV7725, 0x2c, 0x78); gpio_i2c_write(I2C_OV7725, 0x2a, 0x00); gpio_i2c_write(I2C_OV7725, 0x11, 0x01);//00/01/03/07 for 60/30/15/7.5fps gpio_i2c_write(I2C_OV7725, 0x42, 0x7f); gpio_i2c_write(I2C_OV7725, 0x4d, 0x09); gpio_i2c_write(I2C_OV7725, 0x63, 0xe0); gpio_i2c_write(I2C_OV7725, 0x64, 0xff); gpio_i2c_write(I2C_OV7725, 0x65, 0x2f); gpio_i2c_write(I2C_OV7725, 0x66, 0x00); gpio_i2c_write(I2C_OV7725, 0x67, 0x48); gpio_i2c_write(I2C_OV7725, 0x13, 0xf0); gpio_i2c_write(I2C_OV7725, 0x0d, 0x41); gpio_i2c_write(I2C_OV7725, 0x0f, 0xc5); gpio_i2c_write(I2C_OV7725, 0x14, 0x11); gpio_i2c_write(I2C_OV7725, 0x22, 0x7f);//ff/7f/3f/1f for 60/30/15/7.5fps gpio_i2c_write(I2C_OV7725, 0x23, 0x03);//01/03/07/0f for 60/30/15/7.5fps gpio_i2c_write(I2C_OV7725, 0x24, 0x50); gpio_i2c_write(I2C_OV7725, 0x25, 0x30); gpio_i2c_write(I2C_OV7725, 0x26, 0xa1); gpio_i2c_write(I2C_OV7725, 0x6b, 0xaa); gpio_i2c_write(I2C_OV7725, 0x13, 0xff);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -