阅读:1114回复:2
pci9054DMA如果没有数据传输如何中止问题?
采用DMA传输数据从pci到local,要读取0x400000个数据,如果Fifo中一个数据也没有,
那么pc端的程序一直处于等待状态,现在我要在pc端应用程序停止它,使它结束等待,该怎么办? 我读操作采用ReadFile方式, 通过跟踪驱动函数调用过程发现, 我在调用startdma后,会等待Isr_Irq中断子程序,由于没有数据,当前的KIrp I 没有完成,要在第4步OnDmaready中传输结束的时候I.Status() = STATUS_SUCCESS;才完成。 所以我在应用程序中调用驱动中的一个停止函数相当于另外一个KIrp i的时候,这个停止函数没有得到调用,所以没有能够停止dma。 我想大概是KIrp经过排队的缘故,没有调用到它。 不知有什么方法可以在Dma 无数据的情况下,我在应用程序中点停止的时候可以停止? |
|
沙发#
发布于:2007-08-29 11:26
楼主的问题解决了吗?我也是dma读异步fifo,当fifo为空时,驱动一直在等待数据传输状态,ready为高,插入等待状态,可是fifo又写入了数据时,9054仍然不读fifo数据,不知道怎么回事,能否探讨一下
qq 457129107 |
|
板凳#
发布于:2007-08-29 20:50
不知道你的工作模式是什么,我建议是用乒乓操作,把fifo分成2半,用FPGA控制逻辑,当一半写满了,就发一个中断,DMA迅速传完。然后,继续等待捕捉下一个中断。这样的效率比较高。
不知道能否帮助你。 |
|
|