libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
40楼#
发布于:2003-06-06 15:15
你回答的很好!确实是这么回事,不知道你做过总线主方式的DMA没有?
这种形式的DMA,驱动编写的时候,要用软件来启动DMA的传输!驱动资料上说,基于包传输(非通用缓冲区)的系统DMA传输和基于包的总线主DMA传输的差别在于:驱动调用IoMapTransfer后,对于系统的DMA,函数调用后系统自动编程好了DMA控制器(例如8237,往里写地址和记数值)驱动只需给设备发送合适的命令来启动DMA的传输,或者说成是驱动发标志位给硬件来告诉硬件可以开始请求DMA了。而总线主的DMA,驱动调用IoMapTransfer后,系统并没有编程DMA控制器(自己板子上自带的),因为系统不知道怎么来编程,得需要驱动编写者自己来做这些事:把IoMapTransfer返回的地址和记数值写到相应的地址和记数寄存器,然后和系统DMA的差不多,发送合适的命令来启动DMA的传输。也就是系统DMA的传输,编程DMA硬件是要系统来做的,而总线主的DMA是要驱动编写者自己来做的。这个我能理解,也是很好理解的。

其实,问你到现在,我的问题还是关于启动传输,是否要软件支持的问题,是必要的,还是不一定需要?

我想,是必要的,理由如下,你分析一下,看有没有道理:假如不用我的软件来使能DMA的传输,那么一旦外设的DREQ来的时候,就表明DMA请求是有效的,我就得响应,来传输数据吧,如果这时候,我还没调用IoMapTransfer编程好我的8237,那么我就不可能响应传输,也就是不可能进行数据的传输了,那么外设也就得不到DACK这个信号了。你说是不是?
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
我是游虾儿
驱动牛犊
驱动牛犊
  • 注册日期2003-05-05
  • 最后登录2004-03-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
41楼#
发布于:2003-06-06 16:51
有DMA允许信号是最保险的做法,你能加就加吧。

但我还是不认为它必要:
    操作系统对不使用的DMA通道应该均是屏蔽的,如果驱动又不使用8237的自动重载功能的话,在每次DMA计数完成时,8237均会自行屏蔽该通道。
虾米
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
42楼#
发布于:2003-06-06 18:11
是你说的这个道理,但是,如果外设的DMA请求到来了,我的DMA控制器还没有编程好的话,怎么进行传输,也就是我编程DMA控制器在前,使能DREQ在后,不加使能控制难以做到这点,所以必须加使能!你说呢?
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
我是游虾儿
驱动牛犊
驱动牛犊
  • 注册日期2003-05-05
  • 最后登录2004-03-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
43楼#
发布于:2003-06-06 22:11
你最好加上DMA允许位,我只是说:

如果你家的门没有,但是整幢楼的门确被管理员管得很好,一样也没有危险――你家的门是DMA允许位,整幢楼的门是8237的屏蔽位。

我要撞豆腐啦。
虾米
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
44楼#
发布于:2003-06-07 10:49
你回答的真够形象的。好的,硬件上,我是没什么问题了,关于软件的问题,我再开帖子问!真的很感激你的回答!请问你在哪个城市?交个朋友!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
我是游虾儿
驱动牛犊
驱动牛犊
  • 注册日期2003-05-05
  • 最后登录2004-03-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
45楼#
发布于:2003-06-07 16:53
我常看的邮箱是zhyzya@163.net,在江苏省连云港市,有空就给我来个email吧。
虾米
上一页 下一页
游客

返回顶部