paopao79916
驱动牛犊
驱动牛犊
  • 注册日期2002-12-05
  • 最后登录2005-08-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1412回复:6

68013的固件问题,高手进来讨论一下!

楼主#
更多 发布于:2003-06-25 15:42

我写的固件是把从端点2(OUT)的数据通过自动指针输入到内存地址0x2800中去,代码如下:
TD_Poll()  
 { if(!(EP2468STAT & bmEP2EMPTY))
  {
        APTR1H = MSB( &EP2FIFOBUF );
        APTR1L = LSB( &EP2FIFOBUF );

        AUTOPTRH2 = 0x28;//MSB( &EP6FIFOBUF );
        AUTOPTRL2 = 0x00;//LSB( &EP6FIFOBUF );

        count = (EP2BCH << 8) + EP2BCL;

        for( i = 0x0000; i < count; i++ )
        {
           // setup to transfer EP2OUT buffer to EP6IN buffer using AUTOPOINTER(s)
           EXTAUTODAT2 = EXTAUTODAT1;
        }
    
    
        EP2BCL = 0x80;  
   }  
}  
 由于TD_Poll是循环执行的,当我将1024个字节的数通过控制面板发到端点2(大小为512字节)时,应该先下载前512字节,等端点2重装载之后再下载后512字节 ,也就是这个循环应该是执行了两次才对。第二次循环过程中,我的AUTOPTR地址应该还是0x2800,应该把前面的512字节冲掉了才对。但我用端点6(IN)从内存空间读回时,又发现发的1024个字节的数都是对的,这是怎么回事呢?大家来讨论一下,是否我的理解有误呢?

最新喜欢:

lmhhlmhhlmhhlm...
zyz1974
驱动小牛
驱动小牛
  • 注册日期2002-11-06
  • 最后登录2005-06-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-25 20:59
我是这样理解的:看你设置的缓冲是否是ep2 out 2x,如果是的话,那么写进去的数就不会被冲掉,如果你发大于1024的数就可能被冲掉;对于4x缓冲则要发大于2048才会被冲掉,你试试看如何?或者我们可以进行qq交流
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-25 21:09
楼上说的是对的。
你至少是配置了双缓冲。
luckyjm
驱动中牛
驱动中牛
  • 注册日期2002-12-19
  • 最后登录2004-03-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-26 08:55
同意。
zyz1974
驱动小牛
驱动小牛
  • 注册日期2002-11-06
  • 最后登录2005-06-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-26 09:59
各位我这里也有一个问题:如果外设的数据量为4k以上,那么要保证不出错的数据传输,固件里是否应该有什么措施呢?还是应用程序需要做的工作呢?
paopao79916
驱动牛犊
驱动牛犊
  • 注册日期2002-12-05
  • 最后登录2005-08-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-06-27 10:28
我觉得你应该设置一个指针,每次开始时增加指针的值,因为端点已满的时候,你可以将数据搬运到内存,重新装载OUT端点。不然的话,可能会发生数据丢失的现象
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-06-27 11:17
如果你不是实时传输的话,那数据是不会丢的,如果是实时传输,那就看传输速度的要求了,如果速度又比较高,那就会出现数据丢失问题,解决这个问题的最根本方法是在设备方加上一定量的缓存,缓存的大小和你的数据速率有关系
游客

返回顶部