⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sensor_i2c.c

📁 onmivision 摄相头模块驱动程序,blackfin 平台参考设计.
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <fcntl.h>#include <errno.h>#include <linux/delay.h>//#include <linux/i2c.h>#include "sensor_i2c.h"#define I2C_DEVICE	"/dev/ov_sensor"#define PPI_DEVICE	"/dev/ppifcp"#define I2C_TENBIT	0x0704#define	I2C_SLAVE	0x0703#define I2C_RDWR	0x0707#define APP_DBG 	1#define IDAddr		0x3000#define I2C_CYCLE	0#define SET_IIC_PAR(addr,data)		ioctl(fd1,I2C_CYCLE,IDAddr + addr);(I2cWrBuf[0] = data)unsigned char ImageBuf[704*288];unsigned char I2cWrBuf[2];unsigned char I2cRdBuf[2];int fd1,fd2,fd3;void OvInitChk(int fd);void OvInit(int fd){	int t = sizeof(SensorInitTab);	int i;	/*	ioctl(fd,I2C_CYCLE,IDAddr + SENSOR_COM7);	I2cWrBuf[0] = 0x80;	write(fd,I2cWrBuf,2);	OvInitChk(fd);	*/	for(i = 0;i< t - 1;i = i+2){		SET_IIC_PAR(SensorInitTab[i],SensorInitTab[i+1]);		write(fd,I2cWrBuf,2);	}}void OvInitChk(int fd){	char i = sizeof(SensorInitTab);	for(i = i-2;i >= 0;i = i-2){		ioctl(fd,I2C_CYCLE,IDAddr + i); 	}}	void MatrixSave(void){        fd3 = read(fd2,ImageBuf,sizeof(ImageBuf));        if (fd3 < 0){                printf("catch image failed!\n");                close(fd3);        }        else{                printf("obtain matrix:= %d\n",fd3);                fd3 = open("/var/temp1",O_CREAT);                close(fd3);                fd3 = open("/var/temp1",O_RDWR);                if (fd3 < 0)                        printf("open file failed\n");                else                        write(fd3,ImageBuf,sizeof(ImageBuf));                close(fd3);        }}int main(void){	unsigned int i,j;#ifdef APP_DBG	unsigned int JudgeChar;#endif			fd1 = open(I2C_DEVICE,O_RDWR);	if (fd1 < 0)		{		perror("open device failed!\n");		exit(0);		}#ifdef APP_DBG	printf("open I2C success!\n");	#endif	OvInit(fd1);	fd2 = open(PPI_DEVICE,O_RDONLY);	if (fd2 < 0)		{		perror("open device failed!\n");		exit(0);		}	ioctl(fd2,CMD_PPI_SET_PIXELS_PER_LINE,704);#ifdef APP_DBG	printf("open PPI success!\n");	while(1){		printf("please input the opcode dd for read ,cc for write:");		scanf("%x",&JudgeChar);		if(JudgeChar == 0xdd){ 			printf("please input the read address:");			scanf("%x",&i); 			SET_IIC_PAR(i,0x0);			printf("0x%x content is %x\n",i,read(fd1,I2cRdBuf,2));		}		else if(JudgeChar == 0xcc){			printf("please input the write address:");			scanf("%x",&JudgeChar);			printf("please input the write content:");			scanf("%x",&i);			SET_IIC_PAR(JudgeChar,i);			write(fd1,I2cWrBuf,2);		}		else if(JudgeChar == 0xee)			MatrixSave();				else if(JudgeChar == 0xff)			break;	}#endif#if 0	for(i=0;i < sizeof(ImageBuf);++i)	printf("%x,",ImageBuf[i]);				//	for (j=0x00;j<=0xfe00;j=j+0x100)	//	{i					i2c_wr_buf[0] = 0x55;					ioctl(fd1,I2C_CYCLE,0x3000+0);			write(fd1,i2c_wr_buf,2);			getchar();			j=read(fd1,i2c_rd_buf,2);			printf("address 0 content is %x\n",j);			getchar();			i2c_wr_buf[0] = 0xaa;			ioctl(fd1,I2C_CYCLE,0x3000+1);			write(fd1,i2c_wr_buf,2);			getchar();			j=read(fd1,i2c_rd_buf,2);			printf("address 1 content is %x\n",j);			getchar();			i2c_wr_buf[0] = 0x55;			ioctl(fd1,I2C_CYCLE,0x3000+2);			write(fd1,i2c_wr_buf,2);			getchar();			j=read(fd1,i2c_rd_buf,2);			printf("address 2 content is %x\n",j);			getchar();					for(i=0;i< 0xab;++i)			{			i2c_wr_buf[0] = 0x55;			ioctl(fd1,I2C_CYCLE,0x3000+i);			write(fd1,i2c_wr_buf,2);			getchar();		 	j=read(fd1,i2c_rd_buf,2);			//if ((i2c_rd_buf[0]!=0x6)&&(i2c_rd_buf[0]!=0x24))			printf("address %x content is %x\n",i,j);			getchar();					}						#endif		close(fd1);	close(fd2);		}	 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -