dragondragon123
驱动牛犊
驱动牛犊
  • 注册日期2007-06-18
  • 最后登录2007-08-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1114回复:2

pci9054DMA如果没有数据传输如何中止问题?

楼主#
更多 发布于:2007-06-18 14:37
    采用DMA传输数据从pci到local,要读取0x400000个数据,如果Fifo中一个数据也没有,
那么pc端的程序一直处于等待状态,现在我要在pc端应用程序停止它,使它结束等待,该怎么办?

我读操作采用ReadFile方式, 通过跟踪驱动函数调用过程发现, 我在调用startdma后,会等待Isr_Irq中断子程序,由于没有数据,当前的KIrp I 没有完成,要在第4步OnDmaready中传输结束的时候I.Status() = STATUS_SUCCESS;才完成。

 所以我在应用程序中调用驱动中的一个停止函数相当于另外一个KIrp i的时候,这个停止函数没有得到调用,所以没有能够停止dma。

我想大概是KIrp经过排队的缘故,没有调用到它。

不知有什么方法可以在Dma 无数据的情况下,我在应用程序中点停止的时候可以停止?






zhangzhen_1982
驱动牛犊
驱动牛犊
  • 注册日期2007-05-28
  • 最后登录2008-01-27
  • 粉丝0
  • 关注0
  • 积分160分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-08-29 11:26
楼主的问题解决了吗?我也是dma读异步fifo,当fifo为空时,驱动一直在等待数据传输状态,ready为高,插入等待状态,可是fifo又写入了数据时,9054仍然不读fifo数据,不知道怎么回事,能否探讨一下
qq 457129107
xp4105
论坛版主
论坛版主
  • 注册日期2006-04-02
  • 最后登录2014-03-29
  • 粉丝1
  • 关注0
  • 积分905分
  • 威望570点
  • 贡献值1点
  • 好评度162点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2007-08-29 20:50
不知道你的工作模式是什么,我建议是用乒乓操作,把fifo分成2半,用FPGA控制逻辑,当一半写满了,就发一个中断,DMA迅速传完。然后,继续等待捕捉下一个中断。这样的效率比较高。

不知道能否帮助你。
时光如流水 抓紧时间实现自我价值
游客

返回顶部