libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:838回复:2

关于DMA,我说的对吗?

楼主#
更多 发布于:2003-04-01 14:08
我用DS做ISA板的系统DMA的驱动,DMA控制器是8237,我觉得执行DMA的过程是:当达到我设定的要传输的数据时,硬件发DMA请求信号,相应,在我的驱动中进入ISR例程,确认这个请求,再延迟到DpcForIsr,在这里有个事件对象来通知应用程序,可以发DMA的读请求了,然后应用程序发读请求,可以通过READFILE或DeviceIoControl来实现,我的驱动程序可以选择把IRP排队,或不排队都可以,接下来驱动进入相应的分发例程,把数据读到内存,完成DMA传输数据的过程,当传输完数据的时候又来个中断,又进入一个ISR(这个ISR与进行DMA传输前的ISR不同),在这里判断是否上次的传输完成了,在延迟,进入DpcForIsr。
我的理解是这样的,但用DS的DMA的机理是:DMA的启动是在STARTIO中完成的,也就是说是用IRP启动的DMA传输,我感觉这种方式不适合于我的这个项目。是不是真的这样???谁给分析一下!我捆饶了很长的时间了!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-04-01 20:10
哪位高手给看看!
这个问题好象不难吧!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-04-01 22:53
怎么做取决于你的驱动和应用程序。所谓“条条大路通罗马”
游客

返回顶部