3. 6 EPxFIFOCFG(E618:E61B):端点FIFO配置寄存器
INFM1:FIFO状态标志是否提前一个字节有效选择,IN端点满减1,1使能,0非使能。
OEP1:FIFO状态标志是否提前一个字节有效选择,OUT端点空加1,1使能,0非使能。
AUTOOUT:在前面,我们说Slave FIFO方式下的数据传输过程不需要FX2固件的参与,实际上是不确切的,应该说,FX2固件可以不参与数据传输过程,也可以参与。AUTOOUT即可设置。如果设置AUTOOUT为1,则就如上面所说的,FX2固件只需要完成初始化工作,真正的数据传输是不需要FX2固件的参与的,具体的说,当FX2从主机收到一包数据时,外部逻辑即可看到FIFO端点缓冲区状态的改变,然后从中取数。如果设置AUTOOUT为0,则数据传输过程就需要FX2参与了,此时当FX2从主机收到一包数据时,FIFO端点缓冲区状态的改变并不会立刻在端口显现,而是固件先看到FIFO端点状态的改变,此时,FX2固件可以做三件事情:
a.向OUTPKTEND中的SKIP位写0,使FIFO端点状态的改变在端口显现,从而使外部逻辑可以从FIFO端点中读取数据;
b.向OUTPKTEND中的SKIP位写1,丢掉这包数据,这样就相当于主机从来就没有发送这一包数据,外部逻辑当然也不能从FIFO端点中读到这一包数据了;
c.从新编辑这一包数据,设置完全重写整个包的数据,再写EPxBC寄存器,把数据传给外部逻辑。
在FX2复位之后,如果其OUT端点缓冲区内有一包数据未处理,这包数据并不会自动传给外部逻辑。所以,为保证OUT端点缓冲区内没有未处理数据,在reset FX2后,要清空一下OUT端点缓冲区,具体做法就是向SKIP位写1(OUT端点缓冲区有几个缓冲区就写几次)。
AUTOIN:Auto IN和Auto OUT有一点不同,在Auto OUT里,包的大小只能是512
20
或1024,而在Auto IN里,包的大小可以任意设定,甚至可以是0字节,这可以通过EPxAUTOINLENTH/L设置。
和AUTOOUT类似,当设置AUTOIN = 0时,FX2固件可以传输,丢弃,修改外部逻辑传过来的数据,这通过向INPTKEND寄存器的SKIP写不同的值实现。
ZEROLENIN:是否允许传输0字节,1使能,0非使能。
WORDWIDE:8 Bit,16 Bit选择。当选择8 Bit模式时,Port B将是FD[7:0];当选择16 Bit模式时,Port D将是FD[15:8],1则为16位,0则为8位。
3.7 EPxAUTOINLENH/L(E620:E627):端点2,4,6,8AUTOIN长度设置(仅IN端点有效)
设置AUTOIN时自动传输的包大小(注意,不能大于IN端点的缓冲区的大小)。
说明:PL10仅端点2和6有效
3.8 EPxFIFOPFH/L(E630:E637):FIFO可编程PF状态长度设置
21
DECIS-0小于等于门限值PF有效,1大于等于门限值PF有效 PKSTAT- 1.
OUT端点FIFO:门限值为PFC12:0设置,当FIFO长度小于等于门限值(DECIS=0),或者FIFO长度大于等于门限值(DECIS=1),则PF有效。 2. 3.
IN端点FIFO,且PKTSTAT=1:门限值为PFC9:0
IN端点FIFO,且PKTSTAT=0:门限值由两部分组成:PKTS2:0(数据包)再加上PFC9:0(当前数据长度)。
解释:
对于OUT包,极限存储在PFC[12:0]中,在整个FIFO缓冲区中的数据数目少于等于(DECIS=0)或大于等于(DECIS=1)这个极限时,PF将有效。
对于IN包,当PKTSTAT=1时,极限存储在两部分:PKTS[2:0]存储极限包数(已
22
经交给SIE但未传给主机的包数),PFC[9:0]存储极限字节数(正在编辑的包里的字节数)。在整个FIFO缓冲区中的数据数目少于等于(DECIS=0)或大于等于(DECIS=1)这个极限时,PF将有效。
3.9 INPKTEND(E648):结束IN传输
SKIP-当ENH_PKT(REVCTL寄存器bit0)为1时,0表示自动“分配”一个IN缓冲区,1表示将跳过一个IN缓冲区
EP3,EP2,EP1,EP0-代替PKTEND引脚功能,软件强行结束IN端点8,6,4,2 IN数据传输,传输短包。
3.10 OUTPKTEND(E649):强行结束OUT传输寄存器
SKIP-当ENH_PKT(REVCTL寄存器bit0)为1时,0表示自动“分配”一个OUT缓冲区,1表示将跳过一个OUT缓冲区
EP3,EP2,EP1,EP0-代替EPxBLH.7=1引脚功能,软件强行结束OUT端点8,6,4,2数据传输。
3.11 EPxFIFOIE和EPxFIFOIRQ(E652:E657):端点FIFO中断(INT4)使能和请求
EDGPF-PF中断触发沿,0上升沿触发,1下降沿触发
23
PF-1使能端点FIFO PF中断,0非使能 EF-1使能端点FIFO EF中断,0非使能 FF-1使能端点FIFO FF中断,0非使能
PF-0无PF中断,1有PF中断 EF-0无EF中断,1有EF中断 PF-0无FF中断,1有FF中断
3.12PORTACFG:端口A配置
置1使能端口A复用引脚,虽然SLCS出现在PORTACFG.6的位置上,当IFCFG1:0=11时,PORTA.7复用为SLCS,FLAGD也出现在PORTA.7引脚上,当PORTACFG.7置位时,PORTA.7复用为FLAGD输出,当PORTACFG.6和PORTACFG.7均为1,则PORTA.7复用为FLAGD。所以PORTACFG7:6=01时,PORTA.7复用为SLCS。
3.13 EPxFIFOBCH EPxFIFOBCL(E6AB:E6B2):端点FIFO计数
24