阅读:3177回复:48
200分,快崩溃了,还是系统DMA的启动问题
以前研究了一段时间的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使能寄存器等给我写,我怎么办?? |
|
最新喜欢:![]()
|
沙发#
发布于:2003-08-22 09:48
这个人写了两本,一本是NT的,一本是2000的,我都看了,在系统DMA方面,说的都差不多。
|
|
|
板凳#
发布于:2003-08-21 18:00
The Windows 2000 Device Driver Book, Second Edition 我是在书店买到的。 没看到有电子版。 值得一买,58元,配CD。 翻译的还过得去。 |
|
|
地板#
发布于:2003-08-21 17:25
虽然对硬件知道的不多。
应该是DREQ有效吧。卡请求DMA传输。DMAC应答,然后开始DMA。 是不是考虑硬件改动一点点? |
|
地下室#
发布于:2003-08-21 16:26
The Windows 2000 Device Driver Book, Second Edition 谢谢这位大哥的回答,Art Baker 的书,我都看了,他写了两本(译本),译本是2000下的驱动开发,一本是NT下的 驱动开发,讲的差不多,只是个别函数在不同的系统下,使用的不同。 关于系统DMA方面,他在两本书上说的一样,都是说“给设备发送合适的命令,来启动传输”可我就是不理解,发送合适的命令是使DREQ有效,还是使DACK有效? 分已经给完了,不过我还有的是,如果哪位大虾愿意要,我可另开帖,给! 最近感觉和做应用的和做硬件的沟通很困难,真难!但还得坚持,因为才工作一年,还不能。。。。。 |
|
|
5楼#
发布于:2003-08-21 16:20
The Windows 2000 Device Driver Book, Second Edition
Art Baker 那里有它的中文版 |
|
|
6楼#
发布于:2003-08-21 10:16
放分了,虽然还是不怎么明白,但两位大虾的耐心和诚心,还是令我很感动,你们不仅有很高的技术,同样有很高的品德。
向你们学习! |
|
|
7楼#
发布于:2003-08-20 13:26
[quote] 说实话,这是现在的普遍现象。搞硬件的人不碰软件,软件的不碰硬件,结果没有一个能够做总体的人。 努力一下把硬件也搞一下,这样路会很宽。 :) [/quote] 谢谢你的回答,你说的不错,确实是这么回事。虽说是让我做驱动,但硬件上的资源还都是我给分配的。就差和他们一起设计板子了。 你前面说到单片机的一个引脚接DREQ,一个接DACK,我的DMA传输方向是从主机到板子上的FIFO,刚开始的时候FIFO是空的,这个时候单片机就得发DREQ,我的疑问是:我的驱动给单片机发命令是使能DREQ有效,还是使能DACK有效? |
|
|
8楼#
发布于:2003-08-20 11:59
说实话,这是现在的普遍现象。搞硬件的人不碰软件,软件的不碰硬件,结果没有一个能够做总体的人。 努力一下把硬件也搞一下,这样路会很宽。 :) |
|
|
9楼#
发布于:2003-08-20 11:37
[quote] 对。建议通过端口发数据给指定的寄存器。 你软硬件都做吗?还是另有人做硬件? [/quote] 我只做驱动,应用软件和硬件都是别人来做,发现互相之间都不太了解,沟通很困难! |
|
|
10楼#
发布于:2003-08-20 09:05
grant怎么不来了?继续讨论啊 昨天后来网络出问题,没办法上来呀。 我回家后就不上网了,看书为主。 :) |
|
|
11楼#
发布于:2003-08-20 09:02
对。建议通过端口发数据给指定的寄存器。 你软硬件都做吗?还是另有人做硬件? |
|
|
12楼#
发布于:2003-08-20 08:44
grant怎么不来了?继续讨论啊
|
|
|
13楼#
发布于:2003-08-19 18:46
[/quote]
我从昨天开始知道你的数据流向的。 以你目前的硬件是没办法做DMA了,要重新设计。 板上有单片机,那就好办了。拿它控制时序好了。用单片机的某一位控制DREQ,另一位接收DACK#,当收到ISA总线传来的控制命令后开始握手传输,用FIFO接数据。 具体没仔细想,你画个草图想一下,有问题欢迎讨论。 [/quote] ISA总线传来的控制命令,我想应该是通过驱动给板子上的寄存器写入特定的数据来实现吧,除了这种方法,也没有其他的办法了! |
|
|
14楼#
发布于:2003-08-19 17:27
我从昨天开始知道你的数据流向的。 以你目前的硬件是没办法做DMA了,要重新设计。 板上有单片机,那就好办了。拿它控制时序好了。用单片机的某一位控制DREQ,另一位接收DACK#,当收到ISA总线传来的控制命令后开始握手传输,用FIFO接数据。 具体没仔细想,你画个草图想一下,有问题欢迎讨论。 |
|
|
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的话,请大虾分析一下,接口关系怎么设计?? |
|
|
16楼#
发布于:2003-08-19 15:18
你的意思是,单片机连到ISA总线,控制FIFO的读写? 可是数据从哪儿来呢?要么就是单点读写。 要启动DMA的话,总得有个开始信号发DIREQ才行呀。 FIFO HF --> fifo half full. 是FIFO的几个状态引脚之一。 |
|
|
17楼#
发布于:2003-08-19 13:55
那就变成硬件要改了。 很高兴和你能这么深入的讨论这个问题,我越来越困惑了!板子上的FIFO是和一个单片机了连在一起,单片机从前端接收数据处理后传给FIFO,然后,FIFO的半满标志HF和总线上的DMA请求信号DREQ连接。这个应当是没什么问题吧??你说没数据发出来。我不懂你的意思,而且HF不合适,我也不理解 |
|
|
18楼#
发布于:2003-08-19 12:43
上午忙得没时间过来。 这样我看是没办法完成DMA的。 应该在硬件上利用计数器或别的电路来产生DREQ的时序, 软件只是让这个电路开始运作。 以你的硬件把DIREQ和FIFO HF接在一起,是没办法完成这样的工作的。 |
|
|
19楼#
发布于:2003-08-19 12:31
那就变成硬件要改了。
想想你一直没数据发出来,FIFO怎么能半满呢? 而且需要一直有DREQ作为握手信号,FIFO HF也不适合呀。 |
|
|
上一页
下一页