打印

关于68013 bulkloop例子的疑问

[复制链接]
3338|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
baiyunchengzhu|  楼主 | 2013-5-10 22:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
bulkloop例程:
数据从EP2OUT->EP6IN ,从端点2 out缓冲区到端点6的in缓冲区。数据流向为:
1)PC端(console软件)设定要传输的数据
2)PC端发起端点2out传输,数据到达68013端点2的out缓冲区
3)bulkloop固件查询到端点2的out缓冲区有数据,于是将数据发往端点6的IN缓冲区
4)PC端发起端点6 IN传输,于是68013的端点6 IN缓冲区中的数据被读到PC机显示
数据从EP4OUT->EP8IN一样。。。
    我现在将FLAGB/C用来指示端点6的空状态和端点8的空状态,PINFLAGAB和PINFLAGCD设置正确,
FLAGB/C通过CPLD直接连接到开发板的两个LED灯上。把CPLD程序下到板子上,bulkloop固件程序下进去后,在console面板选端点2OUT,点击bulk tran按钮,LED1由灭变亮指示(端点6)非空,然后选端点6IN,点bulk tran按钮,LED1会灭指示端点6空。同样,4OUT端点和8IN端点测试也正确。

    我的问题是:
1)现在我对PINFLAGAB和PINFLAGCD重新赋值,让它们分别取指示端点2OUT和4OUT的空状态,同样FLAGB/C通过CPLD直接连接到开发板的两个LED灯上。把CPLD程序下到板子上,bulkloop固件程序下进去后,在console面板选端点2OUT,点击bulk tran按钮,LED1不变指示(端点2)空,然后选端点6IN,点bulk tran按钮,LED1不变指示端点2仍未空。(端点4和8的一样)
    在console面板选端点2OUT,点击bulk tran按钮,也就是PC端发起端点2out传输,数据到达68013端点2的out缓冲区,为什么端点2FIFO一直都为空??
   
   下面是TD_POLL()部分代码:
if(!(EP2468STAT & bmEP2EMPTY))
{ // check EP2 EMPTY(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is empty
     if(!(EP2468STAT & bmEP6FULL))
     { // check EP6 FULL(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is full
      首先,查询端点2的EMPTY标志,如果不为1,说明有数据,然后查询端点6的FULL标志,如果不为1,说明端点6 FIFO为空,可以接收数据。至于bmEP2EMPTY,bmEP6FULL,自行go to definition...
      当检查到端点2 out fifo有数据且端点6 in fifo为空时,就可以将ep2的数据"copy"到ep6.使用自动指针直接更换2者的指针,实现数据传送:
        APTR1H = MSB( &EP2FIFOBUF );   //取端点2 FIFO指针
        APTR1L = LSB( &EP2FIFOBUF );
        AUTOPTRH2 = MSB( &EP6FIFOBUF ); //取端点6 fifo指针
        AUTOPTRL2 = LSB( &EP6FIFOBUF );
        count = (EP2BCH << 8) + EP2BCL; //计数器
        // loop EP2OUT buffer data to EP6IN
        for( i = 0x0000; i < count; i++ )      //传送count字节
        {
           // setup to transfer EP2OUT buffer to EP6IN buffer using AUTOPOINTER(s)
           EXTAUTODAT2 = EXTAUTODAT1;   //APTR1指针赋给APTR2,实现数据传送
        }
完毕后,重置计数器,以进行下次传输:
        EP6BCH = EP2BCH;
        SYNCDELAY;
        EP6BCL = EP2BCL;        // arm EP6IN
        SYNCDELAY;                    
        EP2BCL = 0x80;          // re(arm) EP2OUT
}

我尝试将这部分代码注释掉了(也就是TD_POLL()里面是空的),但是在console面板选端点2OUT,点击bulk tran按钮,LED1灯仍然指示端点2 fifo为空,难道主机发送的数据没有达到端点2 OUT么?没到2OUT端点FIFO,那固件又是如何将主机发送的数据从端点2OUT缓冲区到达端点6IN缓冲区的呢?
请达人指导!

相关帖子

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

本版积分规则

1

主题

4

帖子

1

粉丝