1.2 软件设计
图像传输系统的软件设计主要包括三个部分:固件程序设计、驱动程序设计和计算机上层应用软件。固件程序是硬件中的软件部分,通过执行该软件可实现特定的硬件功能,主要包括初始化、处理标准的USB设备请求以及USB挂起时的电源管理等。固件首先初始化内部的状态变量,然后调用用户初始化函数TD_Init()。从该函数返回后,固件初始化USB接口到未配置状态并使能中断。然后每间隔1 s进行一次设备重枚举,直到端点0接收到一个SETUP包。一旦检测到SETUP包,固件函数将开始交互下述任务调度:调用用户函数TD_Poll();判断是否有标准设备请求等待处理。如果有,分析该请求并响应;判断USB内核是否收到USB挂起信号。如果有,则调用用户函TD_Suspend()。从该函数成功返回TRUE值后,在检测是否发生USB唤醒事件。如果未检测到,则处理器进入挂起方式;如果有,则调用用户函数TD_Resume(),程序继续运行。如果从TD_Suspend函数返回FALSE,则程序继续进行。TD_Init函数负责CY7C68013A进行初始化,首先设置时钟为48 MHz,然后设置芯片工作于从属FIFO块传输模式,并配置端点6工作于自动块传输IN,端点2自动块传输OUT模式。其主要程序段如下:
DR_VendorCmnd函数负责处理上位机发出的用户自定义请求,通过控制PA0,PA1的高低电平,以控制整个硬件系统的运行。该系统中,使用0xB3使PA0置低进行图像数据的上行操作,用0xB4使PA0置高进行图像数据的下行操作,使用0xB5使PA1置低来通知硬件开始传输,使用0xB6请求使PA1置高以通知硬件系统停止传输。
USB设备驱动程序负责建立起主机端和设备端的联系。驱动程序主要有两个:一是开机自动将固件程序下载至芯片RAM中,以由增强性8051执行。结合CYPRESS开发包EZ-Loader Drivers以及HEX2C和Windows DDK即可生成所需要固件自动下载程序*.sys文件。二是完成上位机应用程序和硬件设备之间的数据传输。其主要包括驱动程序入口例程、即插即用例程、分发例程、电源管理例程和卸载例程。本系统根据通用驱动结合自身需要,在DDK环境下修改编译,生成自己需要的驱动程序。USB上层应用程序都通过I/O控制来访问设备驱动程序。上层应用程序首先通过调用Win32函数CreaFile()来取得访问设备驱动程序的句柄;然后应用程序使用Win32函数Devi-ceIoControl()来提交I/O控制码,并且为CreatFile()函数返回的设备句柄设置I/O缓冲区。该系统中,设置USB端口缓冲区FIFO为1 024 B,端口非空即读取。保持了传输的连续性,并且每次以帧结构包形式传输,每包的大小为512 B。以实验中为例。每传输大小为245 KB的一幅图像,需要490个包进行传输。