↑本章概述 §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所示的基本电路:
↑§7.1.2DMA控制器的基本组成 §7.1.3 DMAC的操作过程 ↓§7.2 8237A的结构和引脚
DMAC与CPU及存储器、I/O的连接方框图如图7-2所示。
在进行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的基本结构 |
1.Intel 8237引脚信号
Intel 8237A控制器是一个40引脚的双列直插式组件,如图7-4所示。由于它即是主控者又是受控者,故其外部引脚设置也具有特色,如它的I/O读/写线(IOR,IOW)和部分地址线(A0~A3)都是双向的,另外,还设置了存储器读/写线(MEMR,MEMW)和16位地址输出线(DB0~DB7,A0~A7)。这些都是其他I/O接口芯片所没有的。下面对各引脚功能加以说明。
(1)请求/应答信号
8237对外设接口电路的应答信号:DACK3~DACK0。
8237向CPU申请总线的信号:HRQ(连至CPU的HOLD)。
CPU向8237传送的允许使用总线信号:HLDA。
A7~A0(输出):8237访问存储器的地址信号的低8位。
A3~A0(输入):CPU初始化8237或读8237状态时,用于寻址8237内部寄存器。
8237作为从控时(CPU控制总线),输出AEN=0。
若由外部给DMAC送入有效的EOP,则强制DMAC内部所有通道结束传输。
8237作为从控时,CPU发出的I/O读/写信号,用于读/写8237内部寄存器。
(1)8237作为从控时如图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)。
(2)8237作为主控时,当8237收到CPU允许使用总线的通知(HLDA)后,8237获得总线控制权,从而转入主控工作模式。
在主控模式下,8237输出AEN为高电平,产生控制信号IOR、IOW、MEMW、MEMR,产生存储器地址信号。按初始化程序规定的方式执行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所示:
↑§7.3.2 8237A的编程结构§7.3.2 Intel8237A对主存和I/O寻址 ↓§7.4 8237A程序设计举例
在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。 |