• USB小白学习之路(12) Cy7c68013A固件之Slave FIFO(转)


    Cy7c68013固件之Slave FIFO

    转自:http://blog.csdn.net/zengshaoqing/article/details/53053539

     选择SlaveFIFO传输方式

      SlaveFIFO传输示意如图1:

    图1 Slave FIFO传输示意图

      在Slave FIFO方式下FX2LP内嵌的8051固件的功能只是配置Slave FIFO 相关的寄存器以及控制FX2LP何时工作在Slave FIFO模式下一旦8051固件将相关的寄存器配置完毕,且使自身工作在SlaveFIFO模式下后,外部逻辑(如FPGA)即可按照SlaveFIFO的传输时序,高速与主机进行通讯,而在通讯过程中不需要8051固件的参与。

       在SlaveFIFO方式下外部逻辑与FX2的连接信号图如图2所示:

    图 2 FX2 SlaveFIFO模式端口引脚连接信号

      SlaveFIFO传输方式可分为同步异步两种,由于同步方式对时钟要求严格,故选择异步传输方式。以下为异步SlaveFIFO读写方式:

     异步SlaveFIFO读

      异步SlaveFIFO读的标准连接图如图3所示:

    图 3 异步FIFO读引脚连接

      异步Slave FIFO读的标准时序如下:

      IDLE:当读事件发生时,进状态1;

      状态1:使FIFOADR[1:0]指向OUT FIFO,进状态2;

      状态2:如FIFO空,在本状态等待,否则进状态3;

      状态3:使SLOE有效,使SLRD有效,从数据线上读数,再使SLRD无效,,以递增FIFO读指针,再使SLOE无效,进状态4;

      状态4:如需传输更多的数,进状态2,否则进状态IDLE。

      状态跳转示意图如图4:

    图 4  异步FIFO读状态跳转

       几种情况的时序图示意如图5所示(FULL,EMPTY,SLRD,SLOE均假定低有效):

    图 5 异步FIFO读时序

     异步Slave FIFO写:

      异步Slave FIFO写的标准连接图如图6(其实这个图是有误的,自己看看呗):

     

    图 6 异步FIFO写连接图

      异步Slave FIFO写的标准时序如下:

      IDLE:当写事件发生时,进状态1;

      状态1:使FIFOADR[1:0]指向IN FIFO,进状态2;

      状态2:如FIFO满,在本状态等待,否则进状态3;

      状态3:驱动数据到数据线上,使SLWR有效,再无效,以使FIFO写指针递增,进状态4;

      状态4:如需传输更多的数,进状态2,否则进状态IDLE。

      状态跳转示意图如图7(这个图也有错误):

     

    图 7 异步FIFO写状态跳转

      几种情况的时序图示意如图8(FULL,EMPTY,SLWR,PKTEND均假定低有效):

     

    图 8 异步FIFO写时序

      Slave FIFO模式下常用寄存器

    IFCONFIG

    接口配置寄存器

     

    EPxFIFOPFH/L

    FIFO 可编程PF状态长度

    PINFLAGAB

    FLAGx引脚配置

    寄存器

    PORTACFG

    端口A配置

    PINFLAGCD

    INPKTEND

    强制结束IN传输寄存器

    FIFORESET

    端点缓冲复位寄存器

    EPxFLAGIE

    端点FIFO中段

    FIFOPINPOLAR

    引脚极性设置寄存器

    EPxFLAGIRQ

    EPxCFG

    端点2/4/6/8配置

    EPxFIFOBCH:L

    端点FIFO计数

    EPxFIFOCFG

    端点FIFO配置

    EPxFLAGS

    端点状态标志寄存器

    EPxAUTOINLENH:L

    端点长度设置

    EPxFIFOBUF

    端点缓冲寄存器

      编程举例

       cy7c68013-56在使用Slave FIFO进行数据传输的时候,默认EP2、EP4作为OUT端点,EP6、EP8作为IN端点。一般要用到FLAGA,FLAGB,FLAGC,FLAGD几个引脚,用于得到端点的状态,寄存器PINFLAGSAB,PINFLAGSCD用于设置这四个引脚的功能。程序举例如下:

    1 PINFLAGSAB =0xe8;  // FLAGA - fixed EP2EF(empty flag), FLAGB -fixed EP6FF(full flag)
    2 SYNCDELAY;         //FLAGA引脚,EP2空时为0,非空为1,FLAGB引脚,EP6满为0,非满为1。信号有效电平通过FIFOPINPOLAR寄存器设置,0为低有效,1为高有效,默认都为低有效。
    3 PINFLAGSCD =0xac;  // FLAGC - fixed EP2FF, FLAGD - fixed EP6EF
    4 SYNCDELAY;         //FLAGC引脚,EP2满时为0,非空为1,FLAGD引脚,EP6空为0,非满为1

     FIFORESET是用于FIFO状态复位的。复位FIFO如下:

     1   FIFORESET =0x80;             // activate NAK-ALL toavoid race conditions
     2   SYNCDELAY;                   // see TRM section 15.5.4
     3   FIFORESET =0x02;             // reset, FIFO 2
     4   SYNCDELAY;                   //
     5   FIFORESET =0x04;             // reset, FIFO 4
     6   SYNCDELAY;                   //
     7   FIFORESET =0x06;             // reset, FIFO 6
     8   SYNCDELAY;                   //
     9   FIFORESET =0x08;             // reset, FIFO 8
    10   SYNCDELAY;                   //
    11   FIFORESET =0x00;             // deactivate NAK-ALL
    12   SYNCDELAY;                   //

    EPxFIFOCFG,用于设置端点的操作方式。

    1  EP2FIFOCFG =0x11;           //AUTOOUT="1", WORDWIDE="1"
    2  SYNCDELAY;                  //自动输出端点,16位数据总线
    3  EP4FIFOCFG =0x11;           // AUTOOUT="1",WORDWIDE="1"
    4  SYNCDELAY;                  //自动输出端点,16位数据总线
    5  EP6FIFOCFG =0x0c;           // AUTOIN="1",ZEROLENIN="1", WORDWIDE="1"
    6  SYNCDELAY;                  //自动输入端点,允许0长度端点,16位数据总线
    7  EP8FIFOCFG =0x0c;           // AUTOIN="1",ZEROLENIN="1", WORDWIDE="1"
    8  SYNCDELAY;                  //自动输入端点,允许0长度端点,16位数据总线

    注:其实这里才是最重要的(当然,上面的提到的读写FIFO的状态机也是很不错的):

      CY7C68013A的Slave FIFO方式指示引脚的高低有效状态不是固定的,是受寄存器FIFOPINPOLAR的控制的,如图9所示,默认情况下此寄存器的值为0x00:

    图 9 FIFIPINPOLAR寄存器

      在默认状态下,此寄存器的各位均为0。那就表示信号低有效:

    表1 FIFOPINPOLAR = 0x00时,各位的指示说明
    位名  bit = 1‘b1 bit = 1’b0 
    SLOE 禁止读 允许读 
    SLRD  禁止读 允许读 
    SLWR 禁止写 允许写 
     EF  FIFO里面有数据,非空  FIF0 Empty,所有缓冲区均空
     FF  FIFO所有的缓冲区还有空间,如果4个缓冲区中的一个缓冲区满,此bit = 1‘b1  FIFO Full,所有缓冲区均满

      同理:FIFOPINPOLAR = 0x1F(1'b0001_1111)时的情况,请自行分析。 

    真正不羁的灵魂不会真的去计较什么,因为他们的内心深处有着国王般的骄傲。
  • 相关阅读:
    Selenium操作之滚动条
    IntelliJ IDEA代码编码区提示库源不匹配字节码解决办法
    自动化测试浅谈
    json-lib解析json之二维JSONArray
    Java 多态
    Java0基础教程——java的安装
    LAYUI弹出层详解
    ajax实现动态URL
    js serialize()
    TP5.1接入支付宝实现网页/APP支付完整请求回调流程(沙箱环境)
  • 原文地址:https://www.cnblogs.com/kybyano/p/8215728.html
Copyright © 2020-2023  润新知