5 固件程序设计
固件是设备运行的核心,其主要功能是控制EZ-USB FX2处理驱动程序请求(如请求设备描述符、请求或设置设备状态及设备接口等USB2.0标准请求)、向FPGA发送采集参数、通过EZ-USB FX2缓存数据并实时上传至PC等。
本系统中,即使使用外部逻辑和内置通用可编程接口,在没有CPU的干涉下能够通过4个端点FIFO处理高速带宽数据,固件还需器件初始化、GPIF波形初始化、控制和监测GPIF的动作。
5.1 器件初始化
同件初始化函数为TD_Init(),主要负责对EZ-USB FX2的初始化,在同件开始运行时调用该甬数。其初始化工作主要分为以下步骤:
(1)设置EZ-USB FX2的IFCLK输出频率,将时钟频率设置为内部时钟48 MHz;
(2)设置EZ-USB FX2的EP2为BULK、OUT传输方式,EP6为BULK、IN传输方式,均为4倍缓冲;
(3)复位EP2 FIFO并设置为Auto OUT模式,复位EP6FIFO并设置为Auto IN模式;
(4)调用GpifInit()函数,初始化GPIF所需的寄存器;对EP2OUT、GPIF使用EF标志,对EP6IN,GPIF使用FF标志;
(5)初始化PA2为输出引脚并置为低电平,高电平时点亮LED。
5.2 GPIF波形设计
EZ-USB FX2固件程序可指定某个波形为4个端点中的任意一个工作,GPIF将在接口产生使能信号和握手信号,将数据送入或送出端点FIFO。在本系统中,对 FPGA写命令时则通过FIFO Write实现;读取所采集到的数据时,则通过FI-FO Read实现。波形设计如下:
(1)图3为FIFO Write时序波形,用于向FPGA发送采集控制参数。S0为非活动状态,当WEN#置低时跳入S1状态,S2设为Next FIFO Data,依次将数据写入FPGA的寄存器中。