2015-11-3 11:20:28 周二
DMA原理:DMA(Direct Memory Access,直接内存存取) ,它可以让不同速度的硬件沟通,
不需要依赖CPU的大量中断负载。不然,CPU 需要从 来源 把每一片段的资料复制到 暂存器,
然后把他们再次写回到新的地方。
在这个时间中,CPU 对于其他的工作来说就无法使用。 DMA 传输将数据从一个地址空间复制到另外一个地址空间。当 CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器 来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。
像是这样的操作并没有让处理器工作拖延,处理器反而可以重新安排程序去处理其他的工作。
DMA 传输对于高效能 嵌入式系统 算法和网络是很重要的
在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题。
即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。
一个完整的DMA传输过程必须经过下面的4个步骤。
由此可见,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设备挪用一个或几个内存周期。
传输策略选择
如果设备有总线主控能力,那么它就有访问主存的必要硬件部件,因此只需告诉它几个基本事实,如从哪开始,需要传输多少单位的数据,
是输入还是输出操作,等等。
可以向硬件设计者咨询或者固件程序员咨询以得到细节部分,否则参考许多硬件级的说明文档。
内核(Kernel)模式的驱动程序可以应用于WINDOWS NT和WINDOWS 2000的操作系统中。
它区别于WDM(Win32 Driver Model)模型,主要不支持即插即用。
基于包的总线主控DMA方式的原理和对常见驱动程序例程的要求是什么?
1、AMCC S59333控制芯片PCI主控DMA功能概述
AMCC S5933控制芯片,它具有实现完整的PCI主控模块和目标模块的接口功能。将复杂的PCI总线接口转换为相对简单的用户接口,用户只需要设计转换后的总线接口即可。
AMCC S5933有两个FIFO(先入先出)存储器,一个是PCI到ADD-ON(附加设备)的FIFO,另一个是从ADD-ON到PCI的FIFO。S5933通过它的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 S5933的DMA中断有下列几种情况:读传输计数器计到 0,写传输计数到0,或在DMA传输过程中PCI总线上发生错误。
2、 内核式驱动程序的基本结构和编程技术
驱动程序与应用程序的最大差别之一是驱动程序的控制结构,应用程序一直用main或WinMain函数控制运行。而驱动程序没有main或WinMain函数。它是由I/O(输入输出)管理器在下列情况下调用一个程序例程:
1) 驱动程序被装入时。
2) 驱动程序被卸出或系统被关闭时。
3) 用户程序发出I/O系统服务调用时。
4) 共享硬件资源对驱动程序可用时。
5) 设备操作过程中的任何时候。
任何设备驱动程序都必须拥有一个DriverEntry例程为每个驱动程序的入口点。下面简要说明驱动程序的分类。
未完待续....