USB 固件开发流程.txt 标题:USB 固件开发流程2008-10-20 17:11:35 由于固件架构和固件的函数库的开发环境是Keil C51,所以针对本系统的开发也是基于这个开发环境。下图的项目窗口反映了对于本设计所需要的文件: 文件描叙如下: ( 1) FW.C-固件框架,处理USB 的请求和调用工作分配器中的函数。 ( 2) gpif.c-包含波形描述符表的文件,实现GPIF 传输的波形。 ( 3) gpif_fifo_rw.c-用户应用程序代码,修改TD-Poll()和TD-Init()以满足用户的要求。 ( 4) DSCR.A51-设备描述符表。报告在FX2 设备中使用哪些端点,如何配置等信息。本设计中设置EP0 作为控制传输端点,EP2 作为USB OUT 传输端点,EP6 作为USB IN 传输端点。 ( 5) USBjmpTb.OBJ-中断向量跳转表:USB 中断源INT2 和 GPIF/SLAVE FIFO 中断源INT4。 ( 6) Ezusb.lib-处理设备挂起(suspend),重新开始操作(resume), I2C 串口操作的函数集。 初始化: 首先在对设备读写之前,对CY7C68013 的寄存器进行初始设置,这部分工作在TD_Init()函数中实现。位于gpif_fifo_rw.c 文件中。实现其设置的代码如下: void TD_Init( void ) { CPUCS = ((CPUCS & ~ bmCLKSPD) | bmCLKSPD1); // 配置芯片时钟方式 GpifInit( ); // 初始GPIF 波形 EP2CFG = 0xA0; // 配置端点2 out BULK 传输模式 512 字节 EP6CFG = 0xE0; // 配置端点6 in BULK 传输模式 512 字节 4 倍缓存区 EP4CFG = 0x00; // 无效端点4 EP8CFG = 0x00; // 无效端点8 …… EP2FIFOCFG = 0x11; // 设置端点2 的 USB 传输方式 AUTOOUT=1 EP6FIFOCFG = 0x09; // 设置端点6 的 USB 传输方式 AUTOIN=1 …… EP2GPIFFLGSEL = 0x01; // 设置端点2 输出的GPIF 标识 OUT 传输 FS1=0 , FS0=1 空标志有效 EP6GPIFFLGSEL = 0x02; //设置端点6 的输入GPIF 标识 IN 传输 FS1=1 , FS0=0 满标志有效 …… //配置GPIF 以数据流状态传输 FLOWLOGIC = FlowStates[19]; FLOWSTB = FlowStates[23]; GPIFHOLDAMOUNT = FlowStates[26]; FLOWSTBEDGE = FlowStates[24]; FLOWSTBHPERIOD = FlowStates[25]; …… } 利用GPIF 实现对控制器数据流的控制: ( 1)单字的读写 为了区分所操作的数据来自哪个寄存器,在设备请求剖析器中的DR_VendorCmnd(void)函数编写不同...