打印

68013清空FIFO

[复制链接]
2897|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
leo_ni|  楼主 | 2012-9-26 22:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用68013有两个问题:
1,就是用EP2作为bulk ,auto-in quad buffer, auto in length = 512,测试时发现当接收满所有数据后,此时EP2CS = 0x30, {EP2FIFOBCH,EP2FIFOBCL} = 0x1FE,EP2FIFO标志寄存器S = 0x1;此时我想复位清空buffer,代码如下:
FIFORESET = 0x80;
   SYNCDELAY;
      FIFORESET = 0x2;  
   SYNCDELAY;
   FIFORESET = 0x0;

结果却是EP2FIFO标志寄存器S = 1, {EP2FIFOBCH,EP2FIFOBCL} = 0x1FE, EP2CS = 0x4,表明状态仍然为满,无法再写入新的数据,而且此时数据也读不出来,请问如何才能完整清空所有数据,包括已经提交的数据包。
2,就是执行控制传输时,返回的信息有6个字节,但偶尔只会返回一个字节,请问这是为什么?,代码如下
EP0BUF[ 0 ] = 0x20;
    EP0BUF[ 1 ] = 0x12;
    EP0BUF[ 2 ] = 0x09;
    EP0BUF[ 3 ] = 0x25;
    EP0BUF[ 4 ] = 0x0A;
    EP0BUF[ 5 ] = buf[0];
       EP0BCH = 0;
    SYNCDELAY;
       EP0BCL = 6;
    SYNCDELAY;
沙发
dqyubsh| | 2012-9-28 14:35 | 只看该作者
1)大致这样吧:
        if(!( EP2468STAT & bmEP2EMPTY ))        // 如果 IN 端点有旧数据就复位这个端点, 丢掉这个数据包
        {
            FIFORESET = 0x02;
            SYNCDELAY;
            FIFORESET = 0x00;
            SYNCDELAY;
        }


2)最后写成这样:
                        EP0BCH = 0;
                        EP0BCL = 6;                 // Arm endpoint with # bytes to transfer
                        EP0CS |= bmHSNAK;         // Acknowledge handshake phase of device request

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

4

帖子

0

粉丝