学习DMA原理

2015-11-3 11:20:28 周二

目的: 掌握DMA原理,在工作中能灵活应用。

概念:

DMA原理:DMA(Direct Memory Access,直接内存存取) ,它可以让不同速度的硬件沟通,

不需要依赖CPU的大量中断负载。不然,CPU 需要从 来源 把每一片段的资料复制到 暂存器,

然后把他们再次写回到新的地方。

在这个时间中,CPU 对于其他的工作来说就无法使用。 DMA 传输将数据从一个地址空间复制到另外一个地址空间。当 CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器 来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。

像是这样的操作并没有让处理器工作拖延,处理器反而可以重新安排程序去处理其他的工作。

DMA 传输对于高效能 嵌入式系统 算法和网络是很重要的

在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题。

即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。

一个完整的DMA传输过程必须经过下面的4个步骤。

1.DMA请求

  CPU对DMA控制器初始化,并向 I/O接口 发出操作命令,I/O接口提出DMA请求。

2.DMA响应

  DMA控制器对DMA请求判别优先级及屏蔽,向总线裁决逻辑提出总线请求。当CPU执行完当前总线周期即可释放总线控制权。此时,总线裁决逻辑输出总线应答,表示DMA已经响应,通过DMA控制器通知I/O接口开始DMA传输。

3.DMA传输

  DMA控制器获得总线控制权后,CPU即刻挂起或只执行内部操作,由DMA控制器输出读写命令,直接控制RAM与I/O接口进行DMA传输。  在DMA控制器的控制下,在存储器和外部设备之间直接进行数据传送,在传送过程中不需要中央处理器的参与。开始时需提供要传送的数据的起始位置和数据长度。

4.DMA结束

  当完成规定的成批数据传送后,DMA控制器即释放总线控制权,并向I/O接口发出结束信号。当I/O接口收到结束信号后,一方面停 止I/O设备的工作,另一方面向CPU提出中断请求,使CPU从不介入的状态解脱,并执行一段检查本次DMA传输操作正确性的代码。最后,带着本次操作结果及状态继续执行原来的程序。

由此可见,DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,使CPU的效率大为提高。

二、DMA传送方式  DMA技术的出现,使得外围设备可以通过DMA控制器直接访问内存,与此同时,CPU可以继续执行程序.那么DMA控制器与CPU怎样分时使用内存呢?通常采用以下三种方法:(1)停止CPU访内;(2)周期挪用;(3)DMA与CPU交替访内存.  1.停止CPU访问内存  当外围设备要求传送一批数据时,由DMA控制器发一个停止信号给CPU,要求CPU放弃对地址总线、数据总线和有关控制总线的使用权.DMA控制器获得总线控制权以后,开始进行数据传送.在一批数据传送完毕后,DMA控制器通知CPU可以使用内存,并把总线控制权交还给CPU.

优点: 控制简单,它适用于数据传输率很高的设备进行成组传送。  缺点: 在DMA控制器访内阶段,内存的效能没有充分发挥,相当一部分内存工作周期是空闲的。这是因为,外围设备传送两个数据之间的间隔一般总是大于内存存储周期,即使高速I/O设备也是如此。例如,软盘读出一个8位二进制数大约需要32us,而半导体内存的存储周期小于0.5us,因此许多空闲的存储周期不能被CPU利用.   2.周期挪用:  当I/O设备没有DMA请求时,CPU按程序要求访问内存;一旦I/O设备有DMA请求,则由I/O设备挪用一个或几个内存周期。

传输策略选择

如果设备有总线主控能力,那么它就有访问主存的必要硬件部件,因此只需告诉它几个基本事实,如从哪开始,需要传输多少单位的数据,

是输入还是输出操作,等等。

可以向硬件设计者咨询或者固件程序员咨询以得到细节部分,否则参考许多硬件级的说明文档。

怎么编写WINDOWS下的DMA驱动程序?

 内核(Kernel)模式的驱动程序可以应用于WINDOWS NTWINDOWS 2000的操作系统中。

它区别于WDM(Win32 Driver Model)模型,主要不支持即插即用。

基于包的总线主控DMA方式的原理和对常见驱动程序例程的要求是什么?

1AMCC S59333控制芯片PCI主控DMA功能概述

AMCC S5933控制芯片,它具有实现完整的PCI主控模块和目标模块的接口功能。将复杂的PCI总线接口转换为相对简单的用户接口,用户只需要设计转换后的总线接口即可。

AMCC S5933有两个FIFO(先入先出)存储器,一个是PCIADD-ON(附加设备)的FIFO,另一个是从ADD-ONPCIFIFOS5933通过它的FIFO接口在PCI总线上进行DMA传输(总线主控)。

FIFO可以作为PCI的发起者也可以作为目标者。FIFO作为目标,PCI总线主控访问ADD-ON数据。FIFO作为发起者可以向PCI发送数据。

PCI发起的DMA传输:此时FIFO作为目标。PCI发起的DMA传输必须通过总线主控控制状态寄存器(MCSR)来使能,读写使能分别控制,在驱动程序适配器控制(AdapterControl)例程设定这个寄存器。另外在驱动程序的设计中必须设定AMCC S5933读写地址寄存器(MWAR/MRAR)以及读写传输数据计数器(MWTC/MRTC)的值。AMCC S5933DMA中断有下列几种情况:读传输计数器计到 0,写传输计数到0,或在DMA传输过程中PCI总线上发生错误。
2 内核式驱动程序的基本结构和编程技术
    驱动程序与应用程序的最大差别之一是驱动程序的控制结构,应用程序一直用mainWinMain函数控制运行。而驱动程序没有mainWinMain函数。它是由I/O(输入输出)管理器在下列情况下调用一个程序例程:
1
 驱动程序被装入时。
2
 驱动程序被卸出或系统被关闭时。
3
 用户程序发出I/O系统服务调用时。
4
 共享硬件资源对驱动程序可用时。
5
 设备操作过程中的任何时候。

任何设备驱动程序都必须拥有一个DriverEntry例程为每个驱动程序的入口点。下面简要说明驱动程序的分类。


未完待续....


你可能感兴趣的:(windows驱动)