Slave FIFO模式为从机方式,由0V9620的时钟信号PCLK控制CY7C68013内部的多层缓冲FIFO进行读写,从而确保了图像采集的同步、无偏移特性。利用帧同步信号VSYNC作为图像采集的起始同步信号,当VSYNC高电平到来以前,初始置PA7为低电平,钳制SLWR使写入无效,并且清空FIFO,这样保证残余数据清空使采集图像不会发生偏移;当VSYNC为高电平时,标志一帧图像的开始,进入中断处理。这时置PA7为高电平,行同步信号HREF使能SLWR,写信号有效。这样在“量子FIF0”框架下图像数据从该帧的第一个像素开始自动高速地传输到上位机中,实现了采集一幅完整、无偏移的图像。
2 系统软件设计
图像采集系统软件主要包括3方面的工作:USB固件程序、USB设备驱动程序和主机应用程序设计。
2.1 USB固件程序设计
Cypress公司为CY7C68013提供了一个固件开发框架,可以在KEIL C51环境下开发。由于开发框架的引入,从而大大缩短了用户的研发周期。该框架由fw.c、USBJmpTb.a5l、dscr.a51、periph.c、Ezusb.1ib几部分组成。固件程序主要完成一下几部分功能:(1)初始化,包括对CY7C68013的端点配置和传输模式的初始化。(2)命令控制函数,按照采集原理实现采集过程。(3)中断处理,包括处理各种USB中断及外部中断。
设计中,考虑到系统要求高速无丢失地传输大量数据。因此在初始化过程中,本系统采用BULK传输方式。系统EP6(FIFOADR[1:0]=10)为块传输IN端点,采用总线供电,IFCLK由外部设备控制器提供(IFCONFIG=Ox43H),确保系统的稳定行。其输入选择1 6位数据线(wORDWIDE=1)并行输入,并设置FIF0深度位4倍缓冲,保证传输具有较高的宽度和深度。系统采用自动打包的方式(hUTOIN=1)使外设的数据由于不需要8051的处理,直接从FIFO到SIE,有利于提高传输速率。而命令控制函数和中断处理负责采集原理的实施,其程序部分代码如下:
2.2 USB驱动程序设计
USB设备驱动程序在整个系统中相当于设备端固件和主机应用程序之间的纽带。USB设备驱动程序属于WDM驱动程序,其主要完成了两个功能:第一,USB设备的添加,操作系统快速识别USB硬件设备;第二,处理IRP_MJ_PNP青求,建立设备端与操作系统之间的通讯。
编写USB设备驱动程序所需要的开发环境,主要包括:DDK(Drivet Oevelopment Kit,驱动开发工具包),BUILD工具和Visua1 C++开发环境。Visual C++是包含标准编译工具的集成开发环境,通过正确设置,其可以用来建立内核模式的设备驱动程序。它向用户提供了以良好的编译环境、方便的调试器和一些有用的工具(如rebase、guidgen等),都有助于驱动程序的开发。因此,本系统系统采用Visual C++6.0开发工具,对USB设备驱动程序进行开发和调试,步骤如下:
1)设置Visual C++驱动开环境
2)创建并设置一个Makefile项目,使处于驱动开发环境。
3)使用当前Makefile项目来开发设备驱动程序,也可以修改通用驱动程序(GDP),使其符合该采集系统要求。
4)编写DrvBuild.Bat批处理文件。
5)调用BUILD工具,创建驱动程序,安装驱动。
2.3 主机应用程序设计
本系统在VC++6.0下调用API函数编写上层用户端图像显示程序,实现对USB高速传输,捕获,读写和保存等操作。为提高采集速度,在设计用使用了多线程技术,采用两个线程完成图像的显示,即将控制线程与采集显示线程。其流程图如图4一a所示。
由于0V9620采用彩色滤光器阵列(CFA)为Bayer方案,如图5所示,每个像素只包括RGB颜色的一个分量,为恢复另外2种颜色分量,必须进行彩色去马赛克(co1ordemosaicing)处理,即彩色插值。本系统采用双线性(Bilinear)差值算法对像素进行还原,即利用相邻像素中同色分量的平均值作为当前像素的待求颜色分量。其具体数学模型为:
令S(x,y)表示像素点(x,y)处的颜色值,包含三个颜色分量:红色R(x,y)、绿色G(x,y)、蓝色B(x,y),则有:
然后对图像进行双线性差值,其中可分两类像素点。