首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

USB2.0接口传输的FPGA控制与实现(3)

USB2.0接口传输的FPGA控制与实现(3)

2.2.1 VHDL程序设计
    FPGA是通过Slave FIFO的方式和USB控制器CY7C68013相连的。FPGA读取数据,通过查询CY7C68013中FIFO的状态来判断是否可以进行读数据,主要是查询状态标志位FLAGC。读数据程序状态转移图如图3所示。

    状态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后自动执行。设备功能、工作方式等均可以通过改写固件程序,重新配置。
继承事业,薪火相传
返回列表