阅读:2156回复:26
救命啊108分,这次只能给这么多,若能解决问题我把1000多分全给大家
真的,真的很失望,更加郁闷,看了很长时间的ISA的系统DMA的驱动了,在启动DMA上,我卡住了,DDK的帮助,DS的帮助,我都看了,因为我是用DS做的,先看的DS的DMA模型,前面能看懂,到了回调函数那里,帮助上说,回调函数先检查是否还有剩余字节需要传输,如果没有,则结束DMA传输,如果有则调用操作硬件的函数来进行DMA的启动工作以后进入ISR,DPC。。。。很死板的机制。不知道回调函数怎么写,我就去看了,DS的SOURCE文件夹里的两个进行DMA传输的函数,然后又看了DDK关于DMA的信息,发现,DS的那两个函数把DDK给封装了,做的很出色,包括了所有的四种情况。还是不知道怎么操作硬件,但我明白了点,我的DMAC:主板上的8237,我不用去管它了,也就是我不用亲自来操作它的那些寄存器,因为DDK做好了这些工作,DS又封装DDK,但要启动DMA的传输,我要做的只能是来控制我的外设卡上的东东了。可惜我的板卡设计的很简单,双口RAM半满发DMA请求信号:DREQ给8237,驱动程序(DS的那两个源函数)设置好了8237的基本设置,然后8237发DACK给外设,再配合一定的控制信号,就可以进行数据的传输了,外设没有可用的口地址来让驱动启动DMA?
哪位大师做过系统DMA的驱动,尤其是做过8237驱动的能人,请您,指点迷津! 真的,很无助,很急,这个问题捆饶我了很长时间了,如果谁能帮我把问题解决,当然是给些思路,我将把分全部给他! 真诚的求救 |
|
最新喜欢:zheng2...
|
沙发#
发布于:2003-05-22 13:25
老兄,你用过PLX9054没有?能否帮忙一下?
|
|
板凳#
发布于:2003-05-22 14:11
老兄,你用过PLX9054没有?能否帮忙一下? 没用过,这是我的第一个驱动,也是我的第一份任务,新手!请大家多多指教!!! |
|
|
地板#
发布于:2003-05-22 15:55
技术上我还帮不了你,只能帮你顶,祝兄弟好运!
|
|
|
地下室#
发布于:2003-05-22 20:02
救命!!!!!!!!1
|
|
|
5楼#
发布于:2003-05-23 14:26
我看书上说包传输的系统DMA的驱动有以下这些步骤:1。DRIVERENTRY 例程,这些我都做好了,主要是使用硬件信息构造DEVICE_DESCRIPTION结构,并调用HalGetAdapter,找到与设备关联的适配器对象。2。START I/O例程 ,这个我也做好了。3。ADAPTER CONTROL 例程,它的工作是为传输初始化DMA控制器,并启动设备:首先调用IOMAPTRANSFER来获得用户缓冲区的逻辑地址,往下是:驱动给设备发送合适的命令开始传输操作,在这里我不知道怎么去做,哪位大虾给指点迷津!!!
|
|
|
6楼#
发布于:2003-05-23 14:55
设备是你的,你都不知道怎么start?
应该是你给你的设备一个命令如写某个reg,或设置触发条件等。 |
|
7楼#
发布于:2003-05-23 16:04
问题是要操作的只是设备上的一段内存,不是什么磁盘之类的能发命令的东西,如何start?
|
|
8楼#
发布于:2003-05-23 16:44
设备是你的,你都不知道怎么start? 我的板子上的双口RAM半满时发DREQ信号给8237,这是触发的唯一条件,可是,我的板子上没有对应的寄存器可写,那是不是我硬件设计有问题? |
|
|
9楼#
发布于:2003-05-23 19:06
你怎么控制设备发DREQ呀?总得有个东西吧?
pacer?register?external triger? |
|
10楼#
发布于:2003-05-23 19:08
问题是要操作的只是设备上的一段内存,不是什么磁盘之类的能发命令的东西,如何start? ??? |
|
|
11楼#
发布于:2003-05-25 19:10
你怎么控制设备发DREQ呀?总得有个东西吧? 谢谢这位大哥的回答,register是寄存器,pacer,external triger,分别指什么?能告诉我吗?谢谢 |
|
|
12楼#
发布于:2003-05-25 19:43
我写错了,是trigger。
外部触发信号吧 |
|
13楼#
发布于:2003-05-25 19:58
我写错了,是trigger。 那pacer 是什么意思? 我的外部触发信号就是DREQ,由CPLD发出,CPLD计数到双口RAM半满时,发DREQ给总线,可见,我的驱动没有办法控制设备发请求,你说呢?大虾! |
|
|
14楼#
发布于:2003-05-25 21:32
那大概可以这样:
设置好DMA,然后允许设备发DREQ。 在DMA中断,判断是不是传输完了。完了就禁止设备发DREQ。 |
|
15楼#
发布于:2003-05-26 08:25
那大概可以这样: 您说的很对,我也是这么想的,就是不知道怎么去实现,我觉得能达到这种目的的唯一办法就是往控制寄存器(板子上的,不是8237的)写数据来使能DMA(DREQ),但是硬件设计上确没有这样的寄存器,只是简单的有一条DREQ信号线。是不是我的硬件设计有错误?还是说有别的办法,来控制设备发DREQ。 真的很感激你的回答! |
|
|
16楼#
发布于:2003-05-26 11:04
我是不是可以这样来使DREQ有效呢!设置8237的屏蔽寄存器,清除我要使用的通道的屏蔽位!我很疑惑,8237的内部寄存器是否需要我来亲自控制?
|
|
|
17楼#
发布于:2003-05-26 12:07
WDM就想抽象DMA controller,你还去写8237的reg,呵呵。
硬件设计是不是有问题,我就无法回答了,不懂。 比如不是enable/disable DMA DREQ,而是enable/disable AD转换。 |
|
18楼#
发布于:2003-05-26 14:24
WDM就想抽象DMA controller,你还去写8237的reg,呵呵。 那我真的没折了! |
|
|
19楼#
发布于:2003-05-27 08:35
这个问题,没有答案了!
|
|
|
上一页
下一页