sc网卡接口扩展.docx
- 文档编号:5842794
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:22
- 大小:22.33KB
sc网卡接口扩展.docx
《sc网卡接口扩展.docx》由会员分享,可在线阅读,更多相关《sc网卡接口扩展.docx(22页珍藏版)》请在冰豆网上搜索。
sc网卡接口扩展
s3c2440提供了一个摄像接口,使开发人员很容易地实现摄像、照相等功能。
摄像接口包括8位来自摄像头的输入数据信号,一个输出主时钟信号,三个来自摄像头的输入同步时钟信号和一个输出复位信号。
摄像接口的主时钟信号由USBPLL产生,它的频率为96MHz,再经过分频处理后输出给摄像头,摄像头再根据该时钟信号产生三个同步时钟信号(像素时钟、帧同步时钟和行同步时钟),反过来再输入回s3c2440。
s3c2440仅仅提供了一个摄像接口,因此要实现其功能,还需要摄像头。
在这里,我们使用OV9650。
OV9650内部有大量的寄存器需要配置,这就需要另外的数据接口。
OV9650的数据接口称为SCCB(串行摄像控制总线),它由两条数据线组成:
一个是用于传输时钟信号的SIO_C,另一个是用于传输数据信号的SIO_D。
SCCB的传输协议与IIC的极其相似,只不过IIC在每传输完一个字节后,接收数据的一方要发送一位的确认数据,而SCCB一次要传输9位数据,前8位为有用数据,而第9位数据在写周期中是Don’t-Care位(即不必关心位),在读周期中是NA位。
SCCB定义数据传输的基本单元为相(phase),即一个相传输一个字节数据。
SCCB只包括三种传输周期,即3相写传输周期(三个相依次为设备从地址,内存地址,所写数据),2相写传输周期(两个相依次为设备从地址,内存地址)和2相读传输周期(两个相依次为设备从地址,所读数据)。
当需要写操作时,应用3相写传输周期,当需要读操作时,依次应用2相写传输周期和2相读传输周期。
因此SCCB一次只能读或写一个字节。
下面我们就用s3c2440的IIC总线接口分别与OV9650的SIO_C和SIO_D相连接来实现SCCB的功能。
具体的读、写函数为:
//配置IIC接口
rGPEUP=0xc000。
//上拉无效
rGPECON=0xa0000000。
//GPE15:
IICSDA,GPE14:
IICSCL
//IIC中断
void__irqIicISR(void)
{
rSRCPND|=0x1<<27。
rINTPND|=0x1<<27。
flag=0。
}
//写操作
//输入参数分别为要写入的内存地址和数据
voidWr_SCCB(unsignedcharwordAddr,unsignedchardata)
{
//3相写传输周期
//写OV9650设备从地址字节
flag=1。
rIICDS=0x60。
//OV9650设备从地址为0x60
rIICSTAT=0xf0。
rIICCON&=~0x10。
while(flag==1)
delay(100)。
//写OV9650内存地址字节
flag=1。
rIICDS=wordAddr。
rIICCON&=~0x10。
while(flag)
delay(100)。
//写具体的数据字节
flag=1。
rIICDS=data。
rIICCON&=~0x10。
while(flag)
delay(100)。
rIICSTAT=0xd0。
//停止位
rIICCON=0xe3。
//为下一次数据传输做准备
delay(100)。
}
//读操作
//参数分别为要读取的内存地址和数据
voidRd_SCCB(unsignedcharwordAddr,unsignedchar*data)
{
unsignedchartemp。
//2相写传输周期
//写入OV9650设备从地址字节
flag=1。
rIICDS=0x60。
rIICSTAT=0xf0。
rIICCON&=~0x10。
while(flag)
delay(100)。
//写入内存地址字节
flag=1。
rIICDS=wordAddr。
rIICCON&=~0x10。
while(flag)
delay(100)。
rIICSTAT=0xd0。
//停止位
rIICCON=0xe3。
//为下一次数据传输做准备
delay(100)。
//2相读传输周期
//写入OV9650设备从地址字节
flag=1。
rIICDS=0x60。
rIICSTAT=0xb0。
rIICCON&=~0x10。
while(flag)
delay(100)。
//读取一个无用字节
flag=1。
temp=rIICDS。
rIICCON&=~((1<<7)|(1<<4))。
while(flag)
delay(100)。
//读取数据
flag=1。
*data=rIICDS。
rIICCON&=~((1<<7)|(1<<4))。
while(flag)
delay(100)。
rIICSTAT=0x90。
//停止位
rIICCON=0xe3。
//为下一次传输做准备
delay(100)。
}
当然我们也可以用两个通用IO口来模拟SCCB总线,下面我们给出具体的程序,其中GPE15为SIO_D,GPE14为SIO_C。
#defineCLOCK_LOW() (rGPEDAT&=(~(1<<14))) //时钟信号低
#defineCLOCK_HIGH() (rGPEDAT|=(1<<14)) //时钟信号高
#defineDATA_LOW() (rGPEDAT&=(~(1<<15))) //数据信号低
#defineDATA_HIGH() (rGPEDAT|=(1<<15)) //数据信号高
//配置IO
rGPEUP=0xc000。
//上拉无效
rGPECON=5<<28。
//GPE15为SIO_D,GPE14为SIO_C,都为输出
voiddelay(inta)
{
intk。
for(k=0。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- sc 网卡 接口 扩展
