让找料更便捷
电子元器件
采购信息平台
生意随身带
随时随地找货
一站式电子元器件
采购平台
半导体行业观察第一站
标签:
摘要: 摘 要 本文介绍了符合USB2.0协议的FX2系列芯片利用可编程控制接口GPIF与外设进行高速数据传输的基本机制,及其软配置波形描述符的实现原理,并详细阐述了波形描述符的结构和各字段的含义,最后给出了据此进行波形描述符设计的基本方法和实例。 关键词 FX2 GPIF 波形描述符 USB2.0协
摘 要 本文介绍了符合USB2.0协议的FX2系列芯片利用可编程控制接口GPIF与外设进行高速数据传输的基本机制,及其软配置波形描述符的实现原理,并详细阐述了波形描述符的结构和各字段的含义,最后给出了据此进行波形描述符设计的基本方法和实例。
3 波形描述符的含义
GPIF的4个波形描述符具有相同的数据结构,它们被放在一段连续的地址空间0xE400-0xE47F,在编写固件程序时,一般放到同一个数组中,如下图(2)所示。
对应于GPIF的8个状态,每个波形描述符有8个具有相同结构的控制字段。控制字段包含LENGTH/BRANCH、OPCODE、LOGIC FUNCTION和OUTPUT四个字节,它们分别表示了在本时间段内的延时(或跳转)设置、操作码、要执行的逻辑函数和总线的输出状态。例如,上图中wave 0的第一个字段是0x0F 0x01 0x37 0xC7。对非判决点(Non-Decision Point)和判决点(Decision Point),其含义也有所区别。
对于非判决点(DP = 0),它们代表的意义如下表1所示:
对于判决点(DP = 1),它们的意义如下表2所示:
下面对每一个字节的定义进行详细的说明:
LENGTH/BRANCH 对于非判决点(DP = 0),该字节定义了在此状态停留的IFCLK的时钟周期的个数。但如果值为0的话则表示停留256个IFCLK个时钟周期的时间。对于判决点(DP = 1),该字节定义了逻辑函数所要跳转到的状态。1BRANCH:如果逻辑函数的结果为1时跳转到的状态序号,从0到6或7(空闲态);0BRANCH:如果逻辑函数的结果为0时跳转到的状态序号,从0到6或7(空闲态);
OPCODE 该字节定义了一些状态特征。DP :定义是了该状态是判决点状态还是非判决点状态,=1为判决点,=0为非判决点。DATA:定义数据总线的状态。进行写操作时,=1:驱动数据总线输出,=0:三态(不驱动数据总线);进行写操作时,=1:对数据总线上的数据进采样并存储数据,=0:不采样数据总线上的数据。NEXT:在这个状态的开始,指针是否指向OUT FIFO的下一个字节。=1:把OUT FIFO中的下一个数据移到顶部;=0:不移动数据。当波形描述符应用于IN FIFO时NEXT 位不起作用。INCAD:决定是否增加GPIF地址总线上的地址。=1:表示在这个状态的开始把GPIF地址总线上的地址加1;=0:不增加地址信号。GINT:决定是否在这个状态过程中产生GPIFWF中断。=1:表示在到达这个状态时产生一个GPIFWF中断信号(在INT4上);=0:表示不产生中断信号。
LOGIC FUNCTION 该字节只用于判决点的波形描述符。它指定了一个逻辑函数和应用于这个逻辑函数的输入信号(TERMA 和 TERMB)。其结果将决定采用什么样的跳转方式,跳转方式已在LENGTH/BRANCH中指定。TERMA 和TERMB:决定选择什么输入信号,从000到101分别代表RDY0到RDY5,但是若READYCFG.5=1,则101代表选择传输计数器的溢出信号。剩下两种选择是FIFO的标志位和INTRDY。 LFUNC:对输入信号采用的逻辑函数,从00到11代表到逻辑函数分别为'与'、'或'、'异或'和"非"。 在每个GPIF时钟的上升沿对输入信号进行采样。 在下一个上升沿到来前,GPIF根据选择的逻辑函数对输入信号进行计算,由结果确定跳转到哪一个状态。
OUTPUT 该字节决定了在进入此状态后GPIF的6个控制信号(CTL0-CTL5)的状态。OEn:如果TRICLT = 1,则该位决定了是否驱动CTLx信号。=1:驱动CTLx;=0:使其为三态。CTLn:决定了该状态中CTLn上的电平。=1:输出为'高电平';=0:输出为'低电平。如果在寄存器GPIFCTLCFG中CTLx被设置为1,则输出方式位集电极开路;如果在寄存器GPIFCTLCFG中CTLx被设置为0,则输出方式为CMOS电平。
4 波形描述符的设计与应用
设计波形描述符主要就是根据具体的硬件接口设计出合理有效的控制字节,一般利用公司给定的软件GPIF Designer或EZ-USB Control Panel来完成。这两种软件都具有可视化的界面,操作简单,最终形成一个名为*.c关于波形描述符的源文件。波形描述符的源文件主要由两部分构成,即初始变量(WavEDAta、FlowStates和InitData)的定义和GPIF初始化函数GpifInit( )的实现。在初始化函数中主要做的就是配置与GPIF相关的寄存器,同时把波形描述符数据填入相应内存空间0xE400-0xE47F。与GPIF相关的寄存器主要有IFCONFIG、GPIFIE、GPIFADRH和GPIFREADYCFG等,具体的配置方法见参考文献【1】。对设计者而言,这种方法无论是设计还是调试过程中的修改都缺乏透明度,这给固件的设计造成了一定的困难。为了更灵活有效地操作GPIF,还需要能从字段的角度对其进行修改。
下面是一个GPIF与高速采样芯片连接的例子。图(3)是执行图(1)所列波形描述符中的wave2时接口的工作时序。执行这一波形时,每次读一个数,数据读完后启动下一次转换。把wave 2的第三个字段0x01 0x00 0x36 0x00改为0x01 0x0a 0x32 0x00后其输出时序变为图(4)所示的形状。此时,每次读两个通道的两个数,一个数据读完后,内部FIFO地址自动加1,在读第二个数据后通过上升沿启动下一次转换。从图上可以清楚的看出各字段和输出逻辑的对应关系。
5 结束语
GPIF的灵活性源于其控制时序即波形描述符的软件可编程特点,所以正确设计波形描述符是利用该接口实现其高速数传功能的基础。但是要提高数据传输的效率还必须把波形描述与具体硬件外设电路结合起来,根据实际的时序配合关系,去除多余的状态,使GPIF的性能到达最优。
型号 | 厂商 | 价格 |
---|---|---|
EPCOS | 爱普科斯 | / |
STM32F103RCT6 | ST | ¥461.23 |
STM32F103C8T6 | ST | ¥84 |
STM32F103VET6 | ST | ¥426.57 |
STM32F103RET6 | ST | ¥780.82 |
STM8S003F3P6 | ST | ¥10.62 |
STM32F103VCT6 | ST | ¥275.84 |
STM32F103CBT6 | ST | ¥130.66 |
STM32F030C8T6 | ST | ¥18.11 |
N76E003AT20 | NUVOTON | ¥9.67 |