阅读:1826回复:5
中断管道的编程?
我正在做一个采集卡,用的是AN2131QC片子.有各种不同的采样时间间隔, 10us, 20us, .... 1ms, 2ms, 5ms, 10ms.......,每次8个字节,实时性要求较高,得到数据后要马上画出图形,还有相关的处理.
当间隔等于1ms时,连采集8次,也就是8ms的数据共64字节,采用BULK上传,为了保证数据来源,我只想到了一个笨办法:在主机方连续地发出读请求,由于硬件没有FIFO,大受限制,每次的请求数据量还不能过大,甚至只能是64字节,否则数据量大时,主机软件绘制图形占用CPU时间过长,还是要丢失数据,波形失真,但是这个时候主机软件在响应其他消息时,仍然要丢失数据,所以我想用这样个机制:在64字节或更多的数据采到后,用一个中断管道向主机报告,这时主机才来读取数据,这样主机才有充足的时间处理数据和做其他的事.我已经在FIRMWARE中加了一个中断端点,但我不知道如何在主机软件中怎样利用中断机制,怎么得到中断通知?怎样读取中断端点的数据?我想不会是和读bulk端点一样吧,如果还是要连续地发出读请求就和BULK没什么区别了.驱动程序中需要额外的支持吗?谢谢大虾门回贴!!!! |
|
最新喜欢:![]() |
沙发#
发布于:2001-07-28 15:25
USB管道无法向HOST提供硬件中断,其“中断传输”的概念只是用来区别于“块传输”的。所有的读请求都是由HOST主动发出的。
|
|
|
板凳#
发布于:2001-07-29 08:45
这个道理我还是懂,但问题始终没有解决。你能告诉我怎么对一个中断端点编程吗?我一直有个困扰,在应用程序中对bulk端点编程时,由于不能一次性请求大批量的数据(原因见上),总是要用一个线程或一个可被终止的循环来发IOCTL请求数据,占用了大量的CPU时间,使主机性能下降,同时并不能保证我的请求被及时发出,因为多任务系统总是要响应其他消息的。如果对中断端点的数据请求做得和BULK一样就没有任何意义了。能给我一个建议吗?谢谢
|
|
地板#
发布于:2001-07-29 10:41
Interrupt Pipe与Bulk Pipe不同之处是,主机保留足够的带宽以确保在指定频率上直接向中断端点发出IN或OUT事务。我是在Win98下做的驱动程序,对Pipe的读请求,可以一次性发出任意大小(当然要保证在Device的MaxTransferSize之下)。然后由HOST的驱动USBD以一定的算法分解后,把In请求发给FirmWare。
至于FirmWare是不是一定要响应HOST发过来的读请求,我就不太清楚了,硬件方面我不太熟。我想应该是一样的,硬件如果无数据,可以不发,等到有数据变化的时候再应答HOST的读请求。 另外要说明一下,USB的“中断管道”是无法向主机提供“硬件中断”的。 |
|
|
地下室#
发布于:2001-07-30 13:25
我的困难不是在设备方,而是在主机方.因为每次不能请求大批量数据(这是个实时性要求很高的采集系统,有严格的时序),不象磁盘文件只要求无错地读取就OK,不限制什么时候完成,所以只能在主机方维持一个持续的均匀的bulk读请求,每次读一点处理一点,实时地反应采样结果.
没有硬件中断的道理我明白了,但中断端点总有它的中断特性吧,比如软件中断.主机会按设备配置中的时间间隔poll中断端点,这是由谁发起的呢?win32控制程序?功能驱动程序?USBD?USBHUB?查询的结果是什么?有什么作用?(我需要的是数据)?如果有可利用的查询结果,那么它放在什么地方?我怎样得到它?我非常想知道这里面的机制,请帮帮我. |
|
5楼#
发布于:2001-08-06 17:49
谢谢版主和站长给了我继续学习的机会。各位大虾,请给出个成熟的回答,行不行?
[sunkai 编辑于 2001-08-06 18:10] |
|