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

200分,快崩溃了,还是系统DMA的启动问题

楼主#
更多 发布于:2003-08-18 10:27
以前研究了一段时间的ISA的系统DMA的驱动,因为方案的变化,不采用DMA,现在采用基本的I/O传输,速率有点跟不上,想变成DMA,还得重新看。
我详细地看了《WINDOWS NT设备驱动程序设计指南》,(Art Baker 著),里面对系统DMA进行了详细的描述,在适配器控制例程里,利用IoMapTransfer对DMA控制器(8237)进行编程,相当于用汇编给8237的各寄存器写数据,所以,主板上的8237,驱动开发者是不能直接操作的。然后,书上说:给设备发送合适的命令来启动DMA的操作,在这里,我卡住了,我的设备是个FIFO,当FIFO半满的时候发DMA请求信号DREQ给总线,8237获得总线控制权后给FIFO发DMA应答信号DACK,怎么来启动DMA的操作??外设没有什么中断控制寄存器,或者DMA使能寄存器等给我写,我怎么办??

最新喜欢:

theseustheseu...
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-22 09:48
这个人写了两本,一本是NT的,一本是2000的,我都看了,在系统DMA方面,说的都差不多。
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
grant
驱动老牛
驱动老牛
  • 注册日期2001-05-14
  • 最后登录2007-04-13
  • 粉丝0
  • 关注0
  • 积分350分
  • 威望35点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-21 18:00
The Windows 2000 Device Driver Book, Second Edition
Art Baker
那里有它的中文版
 

我是在书店买到的。
没看到有电子版。
值得一买,58元,配CD。
翻译的还过得去。
助人乃快乐之本 有人给分就更快乐了 :-)
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-08-21 17:25
虽然对硬件知道的不多。
应该是DREQ有效吧。卡请求DMA传输。DMAC应答,然后开始DMA。
是不是考虑硬件改动一点点?
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-08-21 16:26
The Windows 2000 Device Driver Book, Second Edition
Art Baker
那里有它的中文版
 


谢谢这位大哥的回答,Art Baker 的书,我都看了,他写了两本(译本),译本是2000下的驱动开发,一本是NT下的 驱动开发,讲的差不多,只是个别函数在不同的系统下,使用的不同。
关于系统DMA方面,他在两本书上说的一样,都是说“给设备发送合适的命令,来启动传输”可我就是不理解,发送合适的命令是使DREQ有效,还是使DACK有效?

分已经给完了,不过我还有的是,如果哪位大虾愿意要,我可另开帖,给!
最近感觉和做应用的和做硬件的沟通很困难,真难!但还得坚持,因为才工作一年,还不能。。。。。
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
theseus
驱动牛犊
驱动牛犊
  • 注册日期2003-03-30
  • 最后登录2003-11-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-08-21 16:20
The Windows 2000 Device Driver Book, Second Edition
Art Baker
那里有它的中文版
------------------------------------------------------------ 痛并快乐
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-08-21 10:16
放分了,虽然还是不怎么明白,但两位大虾的耐心和诚心,还是令我很感动,你们不仅有很高的技术,同样有很高的品德。
向你们学习!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-08-20 13:26
[quote]
我只做驱动,应用软件和硬件都是别人来做,发现互相之间都不太了解,沟通很困难!


说实话,这是现在的普遍现象。搞硬件的人不碰软件,软件的不碰硬件,结果没有一个能够做总体的人。
努力一下把硬件也搞一下,这样路会很宽。   :) [/quote]

谢谢你的回答,你说的不错,确实是这么回事。虽说是让我做驱动,但硬件上的资源还都是我给分配的。就差和他们一起设计板子了。

你前面说到单片机的一个引脚接DREQ,一个接DACK,我的DMA传输方向是从主机到板子上的FIFO,刚开始的时候FIFO是空的,这个时候单片机就得发DREQ,我的疑问是:我的驱动给单片机发命令是使能DREQ有效,还是使能DACK有效?
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
grant
驱动老牛
驱动老牛
  • 注册日期2001-05-14
  • 最后登录2007-04-13
  • 粉丝0
  • 关注0
  • 积分350分
  • 威望35点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-08-20 11:59

我只做驱动,应用软件和硬件都是别人来做,发现互相之间都不太了解,沟通很困难!


说实话,这是现在的普遍现象。搞硬件的人不碰软件,软件的不碰硬件,结果没有一个能够做总体的人。
努力一下把硬件也搞一下,这样路会很宽。   :)
助人乃快乐之本 有人给分就更快乐了 :-)
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-08-20 11:37
[quote]
ISA总线传来的控制命令,我想应该是通过驱动给板子上的寄存器写入特定的数据来实现吧,除了这种方法,也没有其他的办法了!

对。建议通过端口发数据给指定的寄存器。
你软硬件都做吗?还是另有人做硬件? [/quote]

我只做驱动,应用软件和硬件都是别人来做,发现互相之间都不太了解,沟通很困难!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
grant
驱动老牛
驱动老牛
  • 注册日期2001-05-14
  • 最后登录2007-04-13
  • 粉丝0
  • 关注0
  • 积分350分
  • 威望35点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-08-20 09:05
grant怎么不来了?继续讨论啊

昨天后来网络出问题,没办法上来呀。
我回家后就不上网了,看书为主。  :)
助人乃快乐之本 有人给分就更快乐了 :-)
grant
驱动老牛
驱动老牛
  • 注册日期2001-05-14
  • 最后登录2007-04-13
  • 粉丝0
  • 关注0
  • 积分350分
  • 威望35点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-08-20 09:02

ISA总线传来的控制命令,我想应该是通过驱动给板子上的寄存器写入特定的数据来实现吧,除了这种方法,也没有其他的办法了!

对。建议通过端口发数据给指定的寄存器。
你软硬件都做吗?还是另有人做硬件?
助人乃快乐之本 有人给分就更快乐了 :-)
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-08-20 08:44
grant怎么不来了?继续讨论啊
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-08-19 18:46
[/quote]

我从昨天开始知道你的数据流向的。
以你目前的硬件是没办法做DMA了,要重新设计。
板上有单片机,那就好办了。拿它控制时序好了。用单片机的某一位控制DREQ,另一位接收DACK#,当收到ISA总线传来的控制命令后开始握手传输,用FIFO接数据。
具体没仔细想,你画个草图想一下,有问题欢迎讨论。 [/quote]

ISA总线传来的控制命令,我想应该是通过驱动给板子上的寄存器写入特定的数据来实现吧,除了这种方法,也没有其他的办法了!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
grant
驱动老牛
驱动老牛
  • 注册日期2001-05-14
  • 最后登录2007-04-13
  • 粉丝0
  • 关注0
  • 积分350分
  • 威望35点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-08-19 17:27

DMA的传送方向是从主机到板卡:板卡上有FIFO做为缓存和总线相连,FIFO的另一端是单片机,也就是数据的流动方向是:应用层-驱动层-FIFO-单片机。用DMA的话,接口关系怎么设计??


我从昨天开始知道你的数据流向的。
以你目前的硬件是没办法做DMA了,要重新设计。
板上有单片机,那就好办了。拿它控制时序好了。用单片机的某一位控制DREQ,另一位接收DACK#,当收到ISA总线传来的控制命令后开始握手传输,用FIFO接数据。
具体没仔细想,你画个草图想一下,有问题欢迎讨论。
助人乃快乐之本 有人给分就更快乐了 :-)
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-08-19 16:13

[/quote]

你的意思是,单片机连到ISA总线,控制FIFO的读写?
可是数据从哪儿来呢?要么就是单点读写。
要启动DMA的话,总得有个开始信号发DIREQ才行呀。

FIFO HF --> fifo half full. 是FIFO的几个状态引脚之一。
 [/quote]

非常地抱歉,我一直把DMA的传送方向给弄反了。我们现在在用PIO方式传输数据给板卡,发现速度很慢(8位的I/O传输),只有25KB/S,打算改成DMA的方式,DMA的传送方向是从主机到板卡:板卡上有FIFO做为缓存和总线相连,FIFO的另一端是单片机,也就是数据的流动方向是:应用层-驱动层-FIFO-单片机。用DMA的话,请大虾分析一下,接口关系怎么设计??
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
grant
驱动老牛
驱动老牛
  • 注册日期2001-05-14
  • 最后登录2007-04-13
  • 粉丝0
  • 关注0
  • 积分350分
  • 威望35点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-08-19 15:18

板子上的FIFO是和一个单片机了连在一起,单片机从前端接收数据处理后传给FIFO,然后,FIFO的半满标志HF和总线上的DMA请求信号DREQ连接。这个应当是没什么问题吧??

你说没数据发出来。我不懂你的意思,而且HF不合适,我也不理解


你的意思是,单片机连到ISA总线,控制FIFO的读写?
可是数据从哪儿来呢?要么就是单点读写。
要启动DMA的话,总得有个开始信号发DIREQ才行呀。

FIFO HF --> fifo half full. 是FIFO的几个状态引脚之一。
助人乃快乐之本 有人给分就更快乐了 :-)
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-08-19 13:55
那就变成硬件要改了。
想想你一直没数据发出来,FIFO怎么能半满呢?
而且需要一直有DREQ作为握手信号,FIFO HF也不适合呀。


很高兴和你能这么深入的讨论这个问题,我越来越困惑了!板子上的FIFO是和一个单片机了连在一起,单片机从前端接收数据处理后传给FIFO,然后,FIFO的半满标志HF和总线上的DMA请求信号DREQ连接。这个应当是没什么问题吧??你说没数据发出来。我不懂你的意思,而且HF不合适,我也不理解
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
grant
驱动老牛
驱动老牛
  • 注册日期2001-05-14
  • 最后登录2007-04-13
  • 粉丝0
  • 关注0
  • 积分350分
  • 威望35点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-08-19 12:43

板子上的FIFO发DREQ的条件是FIFO半满,这个和我的驱动有什么关系,我的驱动怎么来控制使它发第一个DREQ??

上午忙得没时间过来。
这样我看是没办法完成DMA的。
应该在硬件上利用计数器或别的电路来产生DREQ的时序,
软件只是让这个电路开始运作。
以你的硬件把DIREQ和FIFO HF接在一起,是没办法完成这样的工作的。
助人乃快乐之本 有人给分就更快乐了 :-)
grant
驱动老牛
驱动老牛
  • 注册日期2001-05-14
  • 最后登录2007-04-13
  • 粉丝0
  • 关注0
  • 积分350分
  • 威望35点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2003-08-19 12:31
那就变成硬件要改了。
想想你一直没数据发出来,FIFO怎么能半满呢?
而且需要一直有DREQ作为握手信号,FIFO HF也不适合呀。
助人乃快乐之本 有人给分就更快乐了 :-)
上一页
游客

返回顶部