DMA讲解《一》(清华大学)

时间:2022-07-02 00:57:39

本章概述 §7.1 DMA技术概述 §7.1.2DMA控制器的基本组成

  DMA(Driect Memory Access)技术是一种代替微处理器完成存储器与外部设备或存储器之间大量数据传送的方法,也称直接存储器存取方法。
  在微机系统内,外设与内存间的数据传送通常是通过CPU执行一段程序来实现的,但利用DMA技术则可不用CPU介入就能实现外设与内存之间数据的直接传送。DMA的主要优点是当需要把一个外设的大量数据送到指定内存时,它可以自动完成传送任务,也就是说外设发出一个DMA请求,则DMA电路暂停CPU的操作,并控制外设与内存之间进行一次传数,然后再让CPU继续执行程序,这样就使CPU节省了大量对外设的查询时间,从而提高了系统的整体性能。
  在DMA技术中,数据的传送是在DMA控制器(简称DMAC)下进行的,DMAC是一种能独立于微处理器进行操作的专用芯片或电路。在DMA数据传送过程中,DMA控制器接管了微处理器的地址总线、数据总线和控制总线。在当前总线周期结束之前,有一条外部控制线终止了微处理器的操作。在DMA开始传送数据时,微处理器的内存控制信号禁止使用;当DMA传送结束后,DMA控制器将终止信号复位,这样微处理器就恢复了它的一切权力并开始执行自己的操作。
  由此可见,DMA必须具有控制系统总线的能力,即DMA能够像微处理器一样输出地址信号,接收或发出控制信号,输入或输出数据信号。

§7.1.1DMA的作用 §7.1.2 DMA控制器的基本组成 §7.1.3DMAC的操作过程

1.DMAC的基本功能
  实现DMA操作主要靠DMA控制器,其结构相当复杂。在DMA操作期间,CPU停止了工作,而由DMAC代替CPU进行工作,因此它必须具备CPU的寻址及数据传送能力,这主要包括如下几点:
 (1)DMA控制器必须提供地址码以指明I/O设备变换数据的存储器起始地址;
 (2)DMA控制器必须提供读/写脉冲,以规定数据在存储器与I/O设备之间的传输方向;
 (3)DMA控制器必须修改内存地址指针并计算传送的字节数,以判断什么时候传送结束。
2.DMAC的基本组成
  一个DMAC至少必须包括如图7-1所示的基本电路:
 DMA讲解《一》(清华大学)

 

§7.1.2DMA控制器的基本组成 §7.1.3 DMAC的操作过程 §7.2 8237A的结构和引脚
  DMAC与CPU及存储器、I/O的连接方框图如图7-2所示。DMA讲解《一》(清华大学)                  
  在进行DMA操作之前应先对DMAC编程。例如,确定传送数据的存储器的起始地址,要传送的字节数,以及传送方式等。
  下面以I/O设备将一个数据块写入存储器的操作为例,简述DMA操作的基本过程。
 (1)I/O设备向DMAC发出请求信号DRQ;
 (2)DMAC向CPU发出总线请求信号HRQ=1;
 (3)CPU向DMAC发出总线响应信号HLDA=1,此时,DMAC获取了总线控制权;
 (4)DMAC向I/O设备发出DMA响应信号DACK,表示DMAC已控制了总线,允许I/O设备与存储器交换数据;
 (5)DMAC按地址寄存器的内容发出16位地址信号作为存储地址的选择,同时地址寄存器的内容加1(或减1,由编程定);
 (6)DMAC发出IORC信号到I/O设备,将I/O设备数据读入总线,同时发出MEMW信号,将数据总线的数据写入由地址总线选中的内存单元;
 (7)字节计数器减1;
 (8)重复5.、6.、7.步骤,直至字节计数器减到0为止,数据块的DMA方式传送工作宣告完成。这时,DMAC的HRQ降为低电平(HRO=0),总线控制权交给CPU。

 

§7.1DMA技术概述 7.2 Intel8237A的结构和引脚 §7.2.2 Intel8237A的引脚信号

§7.2.1 Intel 8237A的基本结构DMA讲解《一》(清华大学)
  一片DMAC通常可以控制一个或几个外设接口电路与内存的DMA传输。习惯上,将DMAC中与某个外设备接口电路相联系的部分称为一个“通道channel)”。如,Intel 8237A(简称8237),有四个通道如图7-3所示。每个通道都有独立的与相应外设接口相联系的信号,四个通道共享与CPU相连的控制信号、地址信号、数据信号,并且还可以用级联的方来扩充更多的信道,它允许在外部设备与系统存储器以及系统存储器与存储器之间交换信息,其数据传输率可达1.5MB/s.它提供了多种控制方式和操作类型,大大增强的系统的性能,8237A是一个高性能通用可编程的DMAC.
  8237A内部有四个独立通道,每个通道都有各自的四个寄存器(基地址,当前地址,基字节计数,当前字节计数),另外还有各个通道公用的寄存器(工作方式寄存器,命令寄存器,状态寄存器,屏蔽寄存器,请求寄存器以及暂存寄存器等).通过对这些寄存器的编程,可实现8237A的三种DMA操作类型和操作方式,2种工作时序,2种优先级排队,自动预置传送地址和字节数,以及实现存储器-存储器之间的传诵等一系列操作功能.

§7.2.1 8237A的基本结构 §7.2.2 Intel 8237A的引脚信号 §7.2.3 8237A的信号配合

1.Intel 8237引脚信号
  Intel 8237A控制器是一个40引脚的双列直插式组件,如图7-4所示。由于它即是主控者又是受控者,故其外部引脚设置也具有特色,如它的I/O读/写线(IORIOW)和部分地址线(A0~A3)都是双向的,另外,还设置了存储器读/写线(MEMR,MEMW)和16位地址输出线(DB0~DB7,A0~A7)。这些都是其他I/O接口芯片所没有的。下面对各引脚功能加以说明。
(1)请求/应答信号

   外设接口电路向8237的请求信号:DREQ3~DREQ0。
   8237对外设接口电路的应答信号:DACK3~DACK0。
   8237向CPU申请总线的信号:HRQ(连至CPU的HOLD)。
   CPU向8237传送的允许使用总线信号:HLDA。

(2)地址信号   

   CS:CPU初始化8237或读8237状态时所需的片选信号。
   A7~A0(输出):8237访问存储器的地址信号的低8位。
   A3~A0(输入):CPU初始化8237或读8237状态时,用于寻址8237内部寄存器。

DMA讲解《一》(清华大学)
(3)数据信号:

  D7~D0。


(4)地址允许信号:AEN   

  8237作为主控时(8237控制总线),输出AEN=1。
  8237作为从控时(CPU控制总线),输出AEN=0。


(5)DMA传输结束信号:EOP  

  双向信号。当DMAC内部任一通道传输结束,8237发出EOPE。
  若由外部给DMAC送入有效的EOP,则强制DMAC内部所有通道结束传输。


(6)MEMR、CAS:

  DMAC发出的存储器读/写信号。


(7)IOR、IOW:双向信号。   

  8237作为主控时,输出的I/O读/写信号。
  8237作为从控时,CPU发出的I/O读/写信号,用于读/写8237内部寄存器。


(8)地址选通信号:ADSTB。   

  8237作为主控时,为存储器提供16位地址信号,其地址引脚A7~A0输出地址低8位,高8位地址由数据引脚  DB7~DB0输出,经地址  锁存器后形成存储器地址的A15~A8。ADSTB用于启动地址锁存器。


(9)READY:

   存储器或I/O的就绪信号。

2.8237引脚信号的加载

 

§7.2.2 8237A的引脚信号 §7.2.3 Intel 8237A的信号配合 §7.3 8237A的编程结构

18237作为从控时图7-6所示,与其他I/O接口一样,可以接收CPU的命令、数据,CPU也可读取其状态。这时,8237接收CPU发出的16位I/O地址信号,高12位地址产生片选信号CS,据此判别本片8237是否被选中,低4位地址选择8237内部寄存器。
  当IOR为低电平时,CPU读取8237内部寄存器的值;当IOW为低电平时,CPU将数据写入8237的内部寄存器。8237在从控状态中,输出AEN为低电平。
  8237在复位后,处于从控模式,程序可对其进行初始化。初始化后,8237仍处于从控模式。当外设接口电路准备就绪,向8237请求传输(DREQ),8237再向CPU请求总线(HRQ)。         
28237作为主控时,当8237收到CPU允许使用总线的通知(HLDA)后,8237获得总线控制权,从而转入主控工作模式。
  在主控模式下,8237输出AEN为高电平,产生控制信号IORIOWMEMWMEMR,产生存储器地址信号。按初始化程序规定的方式执行I/O与存储器之间的数据传输。(传输过程本身不需CPU干预)。在传输完成后,8237放弃总线,转入从控模式,撤消总线请求(HRQ为低),CPU检测到HRQ(HOLD)为低后,撤消HLDA,CPU重新获得总线控制权。在传输完成后,8237还发出结束信EOP,CPU可以查询EOP信号,以便进行后续数据处理。或者把EOP信号作为中断请求信号,CPU在中断处理程序中进行后续数据处理。
  在主控模式下,8237可以产生16位存储器地址信号,其地址引脚A7~A0输出地址低8位,高8位地址由数据引脚DB7~DB0输出,经地址锁存器后形成存储器地址的A15~A8。用ADSTB启动地址锁存器。当系统的存储器地址多于16位时,多余位地址由一个称为“DMA页面寄存器”的接口电路提供。例如,在8086系统中,需要20位地址,高4位地址A19~A16由DMA页面寄存器电路74LS670提供。
  在DMA传输之前,用指令将高4位地址送入页面寄存器,在DMA传输过程中,由AEN信号使页面寄存器输出该4位地址。

§7.2 8237A的结构和引脚§7.3 Intel 8237的编程结构§7.3.2 8237A对主存和I/O寻址

Intel 8237的内部结构如图7-7所示:
DMA讲解《一》(清华大学)

各寄存器/触发器的结构

§7.3.2 8237A的编程结构§7.3.2 Intel8237A对主存和I/O寻址§7.4 8237A程序设计举例

1. 存储器地址 2. I/O寻址
DMA讲解《一》(清华大学)   如图7-9所示,在主控模式下,8237可以产生16位存储器地址信号,其地址引脚A7~A0输出地址低8位,高8位地址由数据引脚DB7~DB0输出,经地址锁存器后形成存储器地址的A15~A8。用ADSTB启动地址锁存器。当系统的存储器地址多于16位时,多余位地址由一个称 为“DMA页面寄存器”的接口电路提供。
  在PC/XT系统中,需要20位地址,高4位地址A19~A16由DMA页面寄存器电路74LS670提供。在DMA传输之前,用指令将高4位地址送入页面寄存器,在DMA传输过程中,由AEN信号使页面寄存器输出该4位地址。
  一片74LS670有四个4位寄存器,分别用于存放四个通道的A19~A16,这四个寄存器的地址分别为80H、81H、82H、83H。
  在PC/AT系统中,使用2片8237, 并用74LS612作页面寄存器,
  第一片8237对应的页面寄存器地址分别为:80~83H,第二8237对应的页面寄存器地址分别为:87~8AH。