阅读:1291回复:3
D12传输问题
D12上传问题,在下传数据(用主输入端点,USB_ENDPOINT_TYPE_BULK方式,PACK大为64)时,当PC机上应用程序WriteFile()每次写的包大于64时,D12将产生多个中断来响应以接受数据,比如WriteFile()写的包大小为128,则D12会产生两次接受中断,这样理解对吗?
现在问题是:当传下的包大于64时,或每包64,连续用for语句多发(WriteFile)几次包时,下微机中读取D12最后处理状态寄存器的值说明中会出现\"在前一状态被读出之前发生了第二个事件\",而且还比较有规律。这应该是说当前一个接受中断还没有处理完,就来了下一个接受中断吧。这类问题应该如何处理啊?当然如果每包64,且在for语句中每WriteFiler后延迟一点,可以解决问题,但这样效率太低!高手请指教!我的下微机是8位,24MHz D12上传问题,不能连续上传多个包(每包64),也不能上传大于64的包。是不是驱动程序有问题,只可以每次打开设备,上传一次,然后 关设备,再打开设备,再传。。 |
|
沙发#
发布于:2003-08-06 21:28
不给分
|
|
|
板凳#
发布于:2003-08-07 08:37
这么省分哪!
|
|
地板#
发布于:2003-08-07 13:07
“比如WriteFile()写的包大小为128,则D12会产生两次接受中断;这应该是说当前一个接受中断还没有处理完,就来了下一个接受中断吧”
你上面的理解是对的,因为你设备方一般是双缓冲,而且主机发数据比较快,所以你第一个包没有处理完就会有下一个包到达,但是主机一旦把两个缓冲区都填满,就会等待你腾出一个缓冲区来,否则不会再发数据下来的,因此你不用担心,你可以设置一个全局变量来记录到来的中断次数,来一次就加1,一般这个变量的值不会超过2的,你读完一个包就把这个变量减1,减到0就说明主机没有数据了就等待,等于2的时候主机会自动等待的。 最后,批评你一下,别人回答你的问题你应该表示感谢,这个感谢就是给你分而已,更何况这个分又不是用钱来买的,你不至于这么吝啬吧。 |
|