huatuizh
驱动牛犊
驱动牛犊
  • 注册日期2002-12-07
  • 最后登录2009-06-08
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1437回复:3

d12 iso方式下,哪位有参考代码啊。老是丢中间的很多数据

楼主#
更多 发布于:2004-06-28 08:56
iso的时候怎么中间老是丢数据,我用iso方式,最大包32字节,想收到一次包就触发一次,而不是64字节收满才触发一次。
现在d12的主端点中断,是64字节收/发 满/空才触发啊,能不能有效包收到就触发一次那。
丢数据就是由于我读、写一次都32字节,然而中断是64字节来一次。
大师们指导一下吧
lejianz
驱动中牛
驱动中牛
  • 注册日期2003-03-05
  • 最后登录2023-11-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望145点
  • 贡献值0点
  • 好评度116点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2004-06-28 15:59
你有没有将EP2_PACKET_SIZE的值定义为32,根据我的了解,D12并不是FULL才来一次中断,一般是完成一次IN和OUT会来一次中断。你再好好查一下吧。
一起交流,共同提高!
huatuizh
驱动牛犊
驱动牛犊
  • 注册日期2002-12-07
  • 最后登录2009-06-08
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-28 16:20
是设置的32啊。
现在发现的确每个有效包IN out都会中断,但搞不懂它双缓冲怎么切换的。
比如:收到32字节的 ISO OUT包,触发中断,立刻d12自己就把后续的数据放到另一个缓冲区了吗?而不是等到这个缓冲区64字节满了,再切换到另一个缓冲区。
如果是后一种情况,那我每次读取32字节,也会造成丢失数据;每次读64字节,也不对,因为它是32字节时触发的中断。
但是又必须在读缓冲区数据后发送清缓冲区命令,否则后续的数据会被NAK掉。
感觉操作起来好麻烦,对应ISO。

而且不能用C,效率太低,就是 评估版里的代码例程,比如:
D12_WriteEndpoint
D12_ReadEndpoint
在24M晶振下,读/写64字节,竟然要2.3毫秒,恐怖啊
我同步方式,2毫秒以内都要传多少个字节了。怎么缓冲的过来。
后来全部用汇编来,同样的竟然节省到了400微秒。

可依然丢数据。呵呵
flyhye
驱动小牛
驱动小牛
  • 注册日期2003-07-01
  • 最后登录2012-01-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-28 19:56
双缓冲应该指的是A、B两个缓冲互相切换,当A已满,还有数据到达,就放B中,A中数据完成后,再处理B,同时A又可以接收数据,并且这个都应该由硬件完成吧。

不知道这样理解对不对
千载奇逢,无如好书良友 一生清福,只在碗茗炉烟
游客

返回顶部