欢迎来到天天文库
浏览记录
ID:22888744
大小:82.51 KB
页数:20页
时间:2018-11-01
《s3c2440的摄像接口应用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、s3c2440提供了一个摄像接口,使开发人员很容易地实现摄像、照相等功能。摄像接口包括8位来自摄像头的输入数据信号,一个输出主时钟信号,三个来自摄像头的输入同步时钟信号和一个输出复位信号。摄像接口的主时钟信号由USBPLL产生,它的频率为96MHz,再经过分频处理后输出给摄像头,摄像头再根据该时钟信号产生三个同步时钟信号(像素时钟、帧同步时钟和行同步时钟),反过来再输入回s3c2440。 s3c2440仅仅提供了一个摄像接口,因此要实现其功能,还需要摄像头。在这里,我们使用OV9650。OV9650内部
2、有大量的寄存器需要配置,这就需要另外的数据接口。OV9650的数据接口称为SCCB(串行摄像控制总线),它由两条数据线组成:一个是用于传输时钟信号的SIO_C,另一个是用于传输数据信号的SIO_D。SCCB的传输协议与IIC的极其相似,只不过IIC在每传输完一个字节后,接收数据的一方要发送一位的确认数据,而SCCB一次要传输9位数据,前8位为有用数据,而第9位数据在写周期中是Don’t-Care位(即不必关心位),在读周期中是NA位。SCCB定义数据传输的基本单元为相(phase),即一个相传输一个字节数据。SCCB
3、只包括三种传输周期,即3相写传输周期(三个相依次为设备从地址,内存地址,所写数据),2相写传输周期(两个相依次为设备从地址,内存地址)和2相读传输周期(两个相依次为设备从地址,所读数据)。当需要写操作时,应用3相写传输周期,当需要读操作时,依次应用2相写传输周期和2相读传输周期。因此SCCB一次只能读或写一个字节。下面我们就用s3c2440的IIC总线接口分别与OV9650的SIO_C和SIO_D相连接来实现SCCB的功能。具体的读、写函数为: //配置IIC接口rGPEUP=0xc000;
4、 //上拉无效rGPECON=0xa0000000; //GPE15:IICSDA,GPE14:IICSCL //IIC中断void__irqIicISR(void){ rSRCPND
5、=0x1<<27; rINTPND
6、=0x1<<27; flag=0; } //写操作//输入参数分别为要写入的内存地址和数据voidWr_SCCB(unsignedcharwordAddr,unsignedchardata){ //3相写传输周期
7、//写OV9650设备从地址字节flag=1; rIICDS=0x60; //OV9650设备从地址为0x60 rIICSTAT=0xf0; rIICCON&=~0x10; while(flag==1) delay(100); //写OV9650内存地址字节 flag=1; rIICDS=wordAddr; rIICCON&=~0x10;
8、 while(flag) delay(100); //写具体的数据字节 flag=1; rIICDS=data; rIICCON&=~0x10; while(flag) delay(100); rIICSTAT=0xd0; //停止位 rIICCON=0xe3; //为下一次数据传输做准备
9、 delay(100); } //读操作//参数分别为要读取的内存地址和数据voidRd_SCCB(unsignedcharwordAddr,unsignedchar*data){ unsignedchartemp; //2相写传输周期 //写入OV9650设备从地址字节 flag=1; rIICDS=0x60; rIICSTAT=0xf0; rIICCON&=~0x10;
10、 while(flag) delay(100); //写入内存地址字节 flag=1; rIICDS=wordAddr; rIICCON&=~0x10; while(flag) delay(100);
此文档下载收益归作者所有