阅读:1437回复:3
d12 iso方式下,哪位有参考代码啊。老是丢中间的很多数据
iso的时候怎么中间老是丢数据,我用iso方式,最大包32字节,想收到一次包就触发一次,而不是64字节收满才触发一次。
现在d12的主端点中断,是64字节收/发 满/空才触发啊,能不能有效包收到就触发一次那。 丢数据就是由于我读、写一次都32字节,然而中断是64字节来一次。 大师们指导一下吧 |
|
沙发#
发布于:2004-06-28 15:59
你有没有将EP2_PACKET_SIZE的值定义为32,根据我的了解,D12并不是FULL才来一次中断,一般是完成一次IN和OUT会来一次中断。你再好好查一下吧。
|
|
|
板凳#
发布于: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微秒。 可依然丢数据。呵呵 |
|
地板#
发布于:2004-06-28 19:56
双缓冲应该指的是A、B两个缓冲互相切换,当A已满,还有数据到达,就放B中,A中数据完成后,再处理B,同时A又可以接收数据,并且这个都应该由硬件完成吧。
不知道这样理解对不对 |
|
|