📄 hv7131.c
字号:
/* * HV7131 CMOS camera sensor initialization */#include "camera.h"/* * hv7131 registers */#define DEVID 0x00 /* Dev ID */#define SCTRA 0x01 /* Sensor Control A */#define SCTRB 0x02 /* Sensor Control B */#define OUTIV 0x03 /* Output Inversion */#define RSAU 0x10 /* Row Start Address Upper */#define RSAL 0x11 /* Row Start Address Lower */#define CSAU 0x12 /* Col Start Address Upper */#define CSAL 0x13 /* Col Start Address Lower */#define WIHU 0x14 /* Window Height Upper */#define WIHL 0x15 /* Window Height Lower */#define WIWU 0x16 /* Window Width Upper */#define WIWL 0x17 /* Window Width Lower */#define HBLU 0x20 /* HBLANK Time Upper */#define HBLL 0x21 /* HBLANK Time Lower */#define VBLU 0x22 /* VBLANK Time Upper */#define VBLL 0x23 /* VBLANK Time Lower */#define INTH 0x25 /* Integration Time High */#define INTM 0x26 /* Integration Time Middle */#define INTL 0x27 /* Integration Time Low */#define PAG 0x30 /* Pre-amp Gain */#define RCG 0x31 /* Red Color Gain */#define GCG 0x32 /* Green Color Gain */#define BCG 0x33 /* Blue Color Gain */#define ACTRA 0x34 /* Analog Bias Control A */#define ACTRB 0x35 /* Analog Bias Control B */#define BLCTH 0x40 /* Black Level Threshod */#define ORedI 0x41 /* Initial ADC Offset Red */#define OGrnI 0x42 /* Initial ADC Offset Green */#define OBluI 0x43 /* Initial ADC Offset Blue *//* * Define the starting (x, y) *//* cam2 */#define XSTART 0x02#define YSTART 0x02#define VAL_INT_TIME 35#define VAL_PAG 0x30#define VAL_DIV 2/* cam2 *//* integration time *///static unsigned int integration_time = 35; /* unit: ms */static unsigned int integration_time = VAL_INT_TIME; /* unit: ms *//* master clock and video clock */static unsigned int mclk_hz = 25000000; /* 25 MHz *///static unsigned int vclk_div = 2; /* VCLK = MCLK/vclk_div: 2,4,8,16,32 */static unsigned int vclk_div = VAL_DIV; /* VCLK = MCLK/vclk_div: 2,4,8,16,32 *//* left, top, width, height */static void set_window(int l, int t, int w, int h){ l = (l/2)*2; t = (t/2)*2; /* Set the column start address */ sensor_write_reg(CSAU, (l >> 8) & 0xff); sensor_write_reg(CSAL, l & 0xff); /* Set the row start address */ sensor_write_reg(RSAU, (t >> 8) & 0xff); sensor_write_reg(RSAL, t & 0xff); /* Set the image window width*/ sensor_write_reg(WIWU, (w >> 8) & 0xff); sensor_write_reg(WIWL, w & 0xff); /* Set the image window height*/ sensor_write_reg(WIHU, (h >> 8) & 0xff); sensor_write_reg(WIHL, h & 0xff);}static void set_blanking_time(unsigned short hb_time, unsigned short vb_time){ hb_time = (hb_time < 0xd0)? 0xd0 : hb_time; vb_time = (vb_time < 0x08)? 0x08 : vb_time; sensor_write_reg(HBLU, (hb_time >> 8) & 0xff); sensor_write_reg(HBLL, hb_time & 0xff); sensor_write_reg(VBLU, (vb_time >> 8) & 0xff); sensor_write_reg(VBLL, vb_time & 0xff);}static void set_integration_time(void){ unsigned int regval; if (vclk_div == 0) vclk_div = 2; regval = (integration_time * mclk_hz)/ (1000*vclk_div); /* default: 0x065b9a */ sensor_write_reg(INTH, (regval & 0xff0000) >> 16); sensor_write_reg(INTM, (regval & 0xff00) >> 8); sensor_write_reg(INTL, regval & 0xff);}/* VCLK = MCLK/div */static void set_hv7131_clock(int div){#define ABLC_EN (1 << 3) /* ABLC enable */ switch (div) { case 2: sensor_write_reg(SCTRA, ABLC_EN | 0x01); // DCF=MCLK break; case 4: sensor_write_reg(SCTRA, ABLC_EN | 0x11); // DCF=MCLK/2 break; case 8: sensor_write_reg(SCTRA, ABLC_EN | 0x21); // DCF=MCLK/4 break; case 16: sensor_write_reg(SCTRA, ABLC_EN | 0x31); // DCF=MCLK/8 break; case 32: sensor_write_reg(SCTRA, ABLC_EN | 0x41); // DCF=MCLK/16 break; default: break; }}void init_hv7131(void){ //sensor_open(); //sensor_set_addr(0x22); //sensor_set_clk(100000); //sensor_write_reg(SCTRB, 0x05); // VsHsEn, HSYNC mode sensor_write_reg(SCTRB, 0x15); // VsHsEn, HSYNC mode sensor_write_reg(BLCTH, 0xff); // set black level threshold sensor_write_reg(OUTIV, 0x01); /*modified, Wolfwang */ sensor_write_reg(PAG, VAL_PAG); /*modified, Wolfwang */ sensor_write_reg(RCG, 0x08); sensor_write_reg(GCG, 0x08); sensor_write_reg(BCG, 0x08); sensor_write_reg(ACTRA, 0x17); sensor_write_reg(ACTRB, 0x7f); sensor_write_reg(ORedI, 0x7f); sensor_write_reg(OGrnI, 0x7f); sensor_write_reg(OBluI, 0x7f); set_hv7131_clock(vclk_div); set_window(XSTART, YSTART, IMG_WIDTH, IMG_HEIGHT); set_integration_time(); //set_blanking_time(0xd0, 0x04); // default set_blanking_time(0xff, 0x08); // ZK value //sensor_close();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -