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

救命啊108分,这次只能给这么多,若能解决问题我把1000多分全给大家

楼主#
更多 发布于:2003-05-22 11:15
真的,真的很失望,更加郁闷,看了很长时间的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驱动的能人,请您,指点迷津!
真的,很无助,很急,这个问题捆饶我了很长时间了,如果谁能帮我把问题解决,当然是给些思路,我将把分全部给他!
真诚的求救

最新喜欢:

zheng2002zheng2...
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
luojinchuan
驱动牛犊
驱动牛犊
  • 注册日期2003-05-01
  • 最后登录2005-03-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-22 13:25
老兄,你用过PLX9054没有?能否帮忙一下?
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-22 14:11
老兄,你用过PLX9054没有?能否帮忙一下?


没用过,这是我的第一个驱动,也是我的第一份任务,新手!请大家多多指教!!!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
huoyan
驱动牛犊
驱动牛犊
  • 注册日期2003-05-06
  • 最后登录2005-07-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-22 15:55
技术上我还帮不了你,只能帮你顶,祝兄弟好运!
活着,就是为了体会人世间的喜怒哀乐。 这是上天给我们的唯一机会,好好珍惜!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-05-22 20:02
救命!!!!!!!!1
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-05-23 14:26
我看书上说包传输的系统DMA的驱动有以下这些步骤:1。DRIVERENTRY 例程,这些我都做好了,主要是使用硬件信息构造DEVICE_DESCRIPTION结构,并调用HalGetAdapter,找到与设备关联的适配器对象。2。START I/O例程 ,这个我也做好了。3。ADAPTER CONTROL 例程,它的工作是为传输初始化DMA控制器,并启动设备:首先调用IOMAPTRANSFER来获得用户缓冲区的逻辑地址,往下是:驱动给设备发送合适的命令开始传输操作,在这里我不知道怎么去做,哪位大虾给指点迷津!!!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2003-05-23 14:55
设备是你的,你都不知道怎么start?
应该是你给你的设备一个命令如写某个reg,或设置触发条件等。
Linking.xmu
驱动牛犊
驱动牛犊
  • 注册日期2003-05-19
  • 最后登录2003-05-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-05-23 16:04
问题是要操作的只是设备上的一段内存,不是什么磁盘之类的能发命令的东西,如何start?
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-05-23 16:44
设备是你的,你都不知道怎么start?
应该是你给你的设备一个命令如写某个reg,或设置触发条件等。

我的板子上的双口RAM半满时发DREQ信号给8237,这是触发的唯一条件,可是,我的板子上没有对应的寄存器可写,那是不是我硬件设计有问题?
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2003-05-23 19:06
你怎么控制设备发DREQ呀?总得有个东西吧?
pacer?register?external triger?
mailme
驱动老牛
驱动老牛
  • 注册日期2001-05-21
  • 最后登录2010-02-25
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-05-23 19:08
问题是要操作的只是设备上的一段内存,不是什么磁盘之类的能发命令的东西,如何start?


???
早起早睡 精神百倍
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-05-25 19:10
你怎么控制设备发DREQ呀?总得有个东西吧?
pacer?register?external triger?



谢谢这位大哥的回答,register是寄存器,pacer,external triger,分别指什么?能告诉我吗?谢谢
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
12楼#
发布于:2003-05-25 19:43
我写错了,是trigger。
外部触发信号吧
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-05-25 19:58
我写错了,是trigger。
外部触发信号吧


那pacer 是什么意思?
我的外部触发信号就是DREQ,由CPLD发出,CPLD计数到双口RAM半满时,发DREQ给总线,可见,我的驱动没有办法控制设备发请求,你说呢?大虾!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
14楼#
发布于:2003-05-25 21:32
那大概可以这样:
设置好DMA,然后允许设备发DREQ。
在DMA中断,判断是不是传输完了。完了就禁止设备发DREQ。
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-05-26 08:25
那大概可以这样:
设置好DMA,然后允许设备发DREQ。
在DMA中断,判断是不是传输完了。完了就禁止设备发DREQ。

您说的很对,我也是这么想的,就是不知道怎么去实现,我觉得能达到这种目的的唯一办法就是往控制寄存器(板子上的,不是8237的)写数据来使能DMA(DREQ),但是硬件设计上确没有这样的寄存器,只是简单的有一条DREQ信号线。是不是我的硬件设计有错误?还是说有别的办法,来控制设备发DREQ。

真的很感激你的回答!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-05-26 11:04
我是不是可以这样来使DREQ有效呢!设置8237的屏蔽寄存器,清除我要使用的通道的屏蔽位!我很疑惑,8237的内部寄存器是否需要我来亲自控制?
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
17楼#
发布于:2003-05-26 12:07
WDM就想抽象DMA controller,你还去写8237的reg,呵呵。
硬件设计是不是有问题,我就无法回答了,不懂。

比如不是enable/disable DMA DREQ,而是enable/disable AD转换。
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-05-26 14:24
WDM就想抽象DMA controller,你还去写8237的reg,呵呵。
硬件设计是不是有问题,我就无法回答了,不懂。

比如不是enable/disable DMA DREQ,而是enable/disable AD转换。


那我真的没折了!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2003-05-27 08:35
这个问题,没有答案了!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
上一页
游客

返回顶部