stephen80320
驱动小牛
驱动小牛
  • 注册日期2003-07-01
  • 最后登录2003-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1260回复:5

关于 IO四种传输方式 不明之处?

楼主#
更多 发布于:2003-08-11 06:26
在操作系统中,我们都知道,数据传送控制方式有四种:
1)程序直接控制方式
就是由用户进程来直接控制内存或CPU和外围设备之间的信息传送
2)中断方式
是为了减少程序直接控制方式中CPU等待时间以及提高系统的并行工作程度,采用中断方式来控制外围设备和内存与CPU之间的数据传送
3)DMA方式
DMA方式是在要求转送的数据块全部传送结束时要求CPU进行中断处理
4)通道控制方式
数据的传送方向,存放数据的内存始址以及传送的数据址长度等都由专管输入输出的硬件――通道来控制。

而我在很多驱动程序的书中,只看到程序控制方式和DMA方式。

我的问题是:
是否驱动程序中就只有这两种传输方式?其它两种传输方式都可以并入到DMA方式中去?

比如 我现在正在给一个PCI9054写一个驱动程序,该板子是采用一般中断控制方式的(即上面的第二种传输方式)。请问是否可以采用所有驱动程序书中所介绍的DMA方式,还是必须写一个一般中断控制方式的驱动程序?

请高手指教!


 
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-11 08:56
计算机和外围设备的数据传输方式,有通道传输方式吗?只有程序控制的方式,中断和DMA吧!程序控制的方式是程序来控制CPU发OUT或IN指令(对应端口映射)或让CPU发MOV(对应内存映射)。中断的传输方式是让一个更需要急于被完成的任务打断当前正在执行的不太重要的任务。DMA,我理解,是用硬件方式实现数据的快速传输,DMA控制器可以理解为一个CPU。
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
grant
驱动老牛
驱动老牛
  • 注册日期2001-05-14
  • 最后登录2007-04-13
  • 粉丝0
  • 关注0
  • 积分350分
  • 威望35点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-11 09:31
1. 程序直接控制方式:同libin2309的回复,程序用IN指令或MOV指令来控制硬件,在总线上生成读时序;
2. 中断方式:由于用1时是计算机主动,当外部电路需要等待时会耗许多计算机时间,于是提出中断方式,当外设准备好数据后发中断给计算机,计算机在ISR中对数据进行读取。传统是用IN / MOV指令,后来也有在ISR中直接做DMA。所以中断方式要具体分析。
3. DMA方式:分两种。传统ISA总线时,主板上的8217芯片做为主控,实现外设对内存的直接访问(Direct Memory Access),每次最多传输64kBytes。后来到PCI阶段,发展成Bus Mastering DMA,以主控板上的芯片来产生时序,控制PCI总线,完成对内存的直接访问,单次最大64MBytes。再后来又有了Scatter/Gather Mode DMA。

你的问题,应该需要在中断控制中完成DMA。板上FIFO HF时产生中断,在中断中启动DMA进行数据传输。
助人乃快乐之本 有人给分就更快乐了 :-)
stephen80320
驱动小牛
驱动小牛
  • 注册日期2003-07-01
  • 最后登录2003-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-08-12 14:17
但是板子设计的时候,不是采取DMA方式。即使这样,在驱动中也可以采取DMA传输方式?
flytomoon
驱动巨牛
驱动巨牛
  • 注册日期2003-07-09
  • 最后登录2004-10-18
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-08-12 14:26
采用DMA和硬件无关,完全是芯片的工作方式的设置问题,如果引脚接的需要改动,那就改一下好了,不用动很多。基本上还是在寄存器里进行设置的。
stephen80320
驱动小牛
驱动小牛
  • 注册日期2003-07-01
  • 最后登录2003-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-08-12 14:37
flytomoon大侠:
我现在有一个采取DMA方式的PCI9054驱动程序,照你这么说,是不是不需要改写就可以用在我的板子上了(也是PCI9054)?如果需要改写,是在哪几个部分改写呢?

[编辑 -  8/12/03 by  stephen80320]
游客

返回顶部