在微机系统内,外设与内存间的数据传送通常是通过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。 |