·上一文章:NI ELVIS在数字电子技术实验中的应用
·下一文章:基于nRF24L01的无线USB控制系统
状态1:在空闲时,接到命令,发起传输,使地址指向用于下传数据的FIFO。进入状态2;
状态2:查询读状态的FIFO标志FLAGC,如果为FIFO为空,则继续等待,如果有数据则进入状态3;
状态3:使读数据信号线有效,接收数据,接收完数据后进入状态4;
状态4:如果FIFO中还有数据需要接收,则进如状态2,否则进入空闲状态。
FPGA在上传数据时,原理基本相同,方向相反,采用不同的FIFO和查询状态标志位。
2.2.2 固件编程
固件编程就是对USB设备的各类寄存器进行配置的过程。固件程序是指运行在设备CPU中的程序,只有在固件程序运行时,外设才称之为具有给定功能的外部设备。固件要完成以下主要工作:
(1)初始化工作;
(2)对设备进行重新列举(ReNumeration);
(3)响应中断,并对中断作相应的处理;
(4)数据的接收与发送;
(5)外围电路的控制。
为了简化固件编程,CYPRESS提供了开发固件库和固件编程框架,只需在此基础上添加少量代码就可以完成固件编程。USB建立固件编程框架的文件见表1,在实际编程过程中,根据自定义,只需要修改Periph.c和Dscr.a51两个文件。固件代码固化到一片EEPROM中,设备加电后由FX2通过I2C总线自动加载到片内RAM后自动执行。设备功能、工作方式等均可以通过改写固件程序,重新配置。