ISP1581通过16位数据总线与FPGA相连,AT89C52负责控制数据的DMA传输。ISP1581与微控制器的通信通过一个高速(15 MB/s或15 Mword/s)的通用并行接口AD[7:O]实现,并具有高速DMA接口。
2.4.1 USB接收数据模块实现
本文采用的USB器件是带有DMA控制器的ISP1581,为了简化电路,采用ISP1581的DMA主控制器方式。如图6所示,当FPGA的FIFO满标志为1时,单片机给ISP1581发送请求有效信号、写信号和写周期信号,给FIFO发送读请求信号和读周期信号,当读出的数据达到预定的数目时,单片机把ISP1581请求信号设置为无效,等待下一组存储数据。
2.4.2 读数据和并/串转换
单片机把接收的控制信号通过DMA传输通道把数据传到FIFO中,其DMA传输过程和图6相似,只要把DIOW改成DIOR,把rdreq改成wreq就可以了,然后通过FPGA的内部逻辑取出16位并行数据进行并/串转换。
3 系统软件设计
3.1 USB固件(Firmware)程序开发
固件其实就是单片机的程序文件,主要完成设备初始化、USB协议标准请求处理以及其他应用程序。一般来说,固件程序的软件结构可设计为基于中断的分层结构,如图7所示。
在固件程序中,后台的中断服务例程(ISR)负责从ISP1581收集数据,当ISR收集到了足够的数据时,通知前台主程序循环数据已经准备好,由主程序循环进行数据的处理。以的批量传输端点为例,当从主机收到一个数据包,就会向为控制器产生一个中断请求,微控制器立即响应中断。在中断服务例程中,固件程序将数据包从内部数据缓冲区转移到循环数据缓冲区,然后将数据缓冲区清零以使该端点可以接收新的数据包,这时微控制器可以继续执行当前更为紧急或者还未处理完的任务,例如读取采集数据,然后返回到主循环中检查循环缓冲区是否有新的数据,并进行处理。
3.2 USB设备驱动程序开发
驱动程序的基本功能是建立应用程序与USB接口之间的数据通讯。本设计采用Driver Works开发USB驱动程序。