第六章 直接存储器存取DMA 6.1 DMA的工作原理及工作过程 中断传送方式要中断主程序,每次都要保护断点、保护现场、进入中断服务子程序,中断服务完毕又要恢复现场、恢复断点、返回主程序,操作步骤重复繁多,对低速外设这些缺点不明显,中断传送不失为一种行之有效的传送方式。但对成批高速数据传输(如磁盘和内存间成批数据交换)效率则较低,这时宜采用DMA(Direct Memory Access:直接存储器存取)方式。 德 能 日 新
6.1.1 DMA的传送原理 直接存储器存取DMA(Direct Memory Access)方式是用硬件实现存储器与存储器之间或存储器与I\O设备之间直接进行高速数据传送,不需要CPU的干预。这种方式通常用来传送数据块。 DMA传送包括: RAM→I/O端口的DMA读传送; I/O端口 →RAM的DMA写传送; RAM→RAM的存储单元传送。 德 能 日 新
DMA传送的基本特点是不经过CPU,不破坏CPU内各寄存器的内容,直接实现存储器与I/O设备之间的数据传送。在IBM PC系统中,DMA方式传送一个字节的时间通常是一个总线周期,即5个时钟周期。CPU内部的指令操作只是暂停这个总线周期,然后继续操作,指令的操作次序不会被破坏。所以DMA传送的方式特别适合用于外部设备与存储器之间高许成批的数据传送。图6-1是实现DMA传送的基本原理图。图中一系统总线为界,左侧为于主机板内,其中有DMA控制器;右侧有存储器(部分存储器在主机板内)、外设和外设接口,它们通过I/O插槽与系统总线相接。 德 能 日 新
图6-1 DMA传送的基本原理图 CPU 8088 总线 逻辑 存储器 DMA 控制器8237 德 能 日 新 I/O 接口 主机板 回 答 系统总线 回 答 请 求 图6-1 DMA传送的基本原理图 德 能 日 新
6.1.2 DMA的工作过程 DMA传送过程如图6-2所示。从图中可以看出,系统总线分别受到CPU和DMAC这两个器件的控制,即CPU可以向地址总线、数据总线和控制总线发送信息,DMAC也可以向地址总线、数据总线和控制总线发送信息。但是,在同一时间,系统总线只能受一个器件控制。当CPU控制总线时,DMAC必须与总线脱离;而当DMAC控制总线时,CPU必须与总线脱离。因此,CPU与DMAC之间必须有联络信号。 德 能 日 新
AB CPU DMAC I/O DB CB 总线请求 DMA请求 总线响应 DMA响应 图 6-2 DMA传送过程 德 能 日 新
①I/O端口向DMA控制器发出DMA请求,请求数 据传送。 ②DMA控制器在接到I/O端口的DMA请求后,向 CPU发出总线请求信号,请求CPU脱离系统总 线。 ③CPU在执行完当前指令的当前总线周期后, 向DMA控制器发出总线请求信号。 ④CPU随即和系统的控制总线、地址总线及数 据总线脱离关系,处于等待状态,由DMA控制 器接管这3个总线的控制权。 德 能 日 新
⑤DMA控制器向I/O端口发出DMA应答信号。 ⑥DMA控制器把进行DMA传送涉及到的RAM地址 送到地址总线上。如果进行I/O端口 RMA传送,DMAC向I/O端口发出I/O读命令,向RAM发出存储器写命令;如果进行RAM I/O端口传送,DMAC向RAM发出存储器读命令,向I/O端口发出I/O写命令,从而完成一个字节的传送。 ⑦当设定的字节数传送完毕,DMA传输过程结束,也可以由来自外部的终止信号迫使传输过程结束。当DMA传送结束后,DMA控制器就将总线请求信号变成无效,并放弃对总线的控制,CPU检测到总线请求信号无效后,也将总线响应信号变成无效,于是,CPU重新控制三总线,继续执行被中断的当前指令的其他总线周期 。 德 能 日 新
些控制信号线(如IO/M、RD、WR等)是由 CPU管理的,在DMA方式,就要求 CPU让出 总线(也就是将这些总线置为高阻状态),而 据交换。通常系统的数据和地址总线以及一 些控制信号线(如IO/M、RD、WR等)是由 CPU管理的,在DMA方式,就要求 CPU让出 总线(也就是将这些总线置为高阻状态),而 由DMA控制器(DMAC)接管总线。通常,大 部分DMA都有三种DMA传送方式: (1)单字节传送方式 (2)成组传送方式 (3)请求传送方式 德 能 日 新
①它使主存既可被CPU访问,又可被外设直接 访问; ②当传送数据块时,主存地址的确定、传送数 据的计数控制等都用硬件电路直接实现; DMA具有下列特点: ①它使主存既可被CPU访问,又可被外设直接 访问; ②当传送数据块时,主存地址的确定、传送数 据的计数控制等都用硬件电路直接实现; ③主存中要开设专用缓冲区,及时供给和接收 外设的数据; ④DMA传送速度快,可使CPU和外设并行工 作,提高了系统的效率; ⑤DMA在开始前和结束后要通过程序和中断方 式进行预处理之后处理。 德 能 日 新
模集成电路控制器。PC/XT使用一片8237A, PC/AT使用两片8237A,在高档微机中常使用 6.2 DMA控制器及8237DMA控制器 6.2.1 8237A的外部引脚 8237A是微机系统中实现DMA功能的大规 模集成电路控制器。PC/XT使用一片8237A, PC/AT使用两片8237A,在高档微机中常使用 功能芯片取代8237A,但多功能芯片中的DMA 控制器与8237A的功能基本相同。 德 能 日 新
1.8237A的内部结构和引脚功能 8237A是具有4个独立DMA通道的可编程DMA控制器(DMAC),它使用单一的+5V电源,单相时钟,40引脚双列直插式封装。在实际应用中,8237A必须与一片8位锁存器一起使用,才能形成一个完整的4 通道DMA控制器。8237A必须经初始化后,可以控制每一个通道在存储器和I/O口之间以最高1.6兆波特的速率传送最多达64KB的数据块,而不需要CPU的介入。 德 能 日 新
(2)每一个通道的DMA请求都可以被允许或禁止。 (3)每个通道的DMA请求有不同的优先级,即可以是 固定优先级,也可以是循环优先级。 (4)每个通道一次传送的最大字节数为64KB。 (5)8237A提供4种传送方式:单字节传送方式、数据 传送方式、请求传送方式和级连传送方式。 德 能 日 新
8237A的内部结构如图6-3所示。它主要由以下3个部分组成: (1)DMA通道 (2)读/写逻辑 (3)控制逻辑 德 能 日 新
图6-3 8237A内部结构 德 能 日 新 HOLD 控制寄存器 请求寄存器 状态寄存器 屏蔽寄存器 请求触发器 屏蔽触发器 方式寄存器 基地址寄存器 基本字节寄存器 当前地址寄存器 当前字节寄存器 通道0 暂存寄存器 HRQ HLDA CLK AEN ADSTB DB7~DB0 A7~A4 A3~A0 通道1 通道2 通道3 REDAY DREQ0 DACK0 DREQ1 DACK1 DACK3 DACK2 DREQ2 DREQ3 IOR MEMR IOW MEMW 德 能 日 新
图6-4为8237A的引脚图。各个信号说明如下: CLK:时钟输入端,通常接到8234时钟发生器的输出引脚,用来控制8237A内部操作定时和DMA传送时的数据传送速率。8237A的时钟频率为3MHz,8237A-5的钟频率为5MHz,后者是8237A的改进型,工作速度比较高,但工作原理及使用方法与8237A相同。 CS:片选输入端,低电平有效。 RESET: 复位输入端,高电平有效。当RESET有效时,屏蔽寄存器被置1(4个通道均禁止DMA请求),其他寄存器均清0, 8237A处于空闲周期,所有控制线都处于高阻状态,并禁止4个通道的DMA操作。复位后必须重新初始化。否则8237A不能进入DMA操作。 德 能 日 新
ADSTB: 地址选通输出信号,高电平有效。当此信号有效时,8237A当前地址寄存器的高8位经数据总线DB7~DB0锁存到外部地址锁存器中。 READKY:“准备就绪”信号输入端,高电平有效。当所选择的存储器或I/O端的速度比较慢,需要延长传输时间时,使READY端处于低电平,8237A就会自动地在存储器读和存储器写周期中插入等待周期。当传输完成时,READY端变为高电平,以表示存储器或I/O设备准备就绪。 ADSTB: 地址选通输出信号,高电平有效。当此信号有效时,8237A当前地址寄存器的高8位经数据总线DB7~DB0锁存到外部地址锁存器中。 德 能 日 新
MEMR:存储器读信号,低电平效,输出,只用于DMA传送。在DMA读周期期间,用于从所寻址的存储器单元中读出数据。 AEN:地址允许输出信号,高电平有效。AEN把外部地址锁存器中锁存的高8位地址输出到地址总线上,与芯片直接输出的低8位地址一起共同构成内存单元的低16位地址。 MEMR:存储器读信号,低电平效,输出,只用于DMA传送。在DMA读周期期间,用于从所寻址的存储器单元中读出数据。 MEMW:存储器写信号,低电平有效,输出,只用于DMA传送。在DMA写周期期间,用于将数据写入所寻址的存值储单元中。 德 能 日 新
IOR: I/O读信号,低电平有效,双向。当CPU控制总线时,它是输入信号,CPU读8237A内部寄存器。当8237A内部寄存器。当8237A控制总线时,它是输出信号,与MEMW相配合,控制数据由I/O端口传送至存储器。 IOW:I/O写信号,低电平有效,双向。当CPU控制总线时,它是输入信号,CPU写8237A内部寄存器(初始化)。当8237A控制总线时,它是输出信号,与MEMR相配合,把数据从存储器传送至I/O端口。 EOP:DMA传送过程结束信号,低电平有效,双向。当DMA控制的任一通道计数结束时,会从EOP引脚输出一个低电平,表示DMA传输结束。而当外部向DMA控制输入EOP信号时,DMA传送过程将被强迫结束,无论是从外部终止外DMA过程,还是内部计数结束引起DMA过程终止,都会使DMA控制器的内部寄存器复位。 德 能 日 新
DREQ0~DREQ3:DMA请求输入信号,有效电平可由编程设定。这4条DMA请求线是外设为取得DMA服条而送到各个通道的请求信号。在固定优先级的情况下,DREQ0的优先级最高,DREQ3的优先级最低。在优先级循环方式下,某通道的DMA请求被响应后,随即降为最低级。8237A用DACK 信号作为对DREQ的响应,因此在相应的DACK 信号有效之前,DREQ信号必须维持有效。 DACK0~DACK3:DMA对各个通道请求的响应信号、输出的有效电平可由编程设定。8237A接收到通道请求,向CPU发出DMA请求信号HRQ,当8237A获得CPU送来的总线允许信号HLDA后,便产生DACK信号,送到相应的I/O端口,表示DMA控制器响应外设的DMA请求,从而进入DMA服务过程。 德 能 日 新
HRQ: 8237A输出给CPU的总线请求信号,高电平有效。当外设的I/O端口要求DMA传送时,向DMA控制器发送DREQ信号,如果相应的通道屏蔽位为0,即DMA请求未被屏蔽,则DMA控制器的HRQ端输出为有效电平,从而向CPU发出总线请求。 HLDA: 总线响应信号,高电平有效,是CPU对HRQ信号的应答。当CPU接收到HRQ信号后,在当前总线周期结束之后让出总线,并使HLDA信号有效。 德 能 日 新
A7~A4: 地址线,输出,只用于在DMA传送时,输出要访问的存储单元的低8位地址中的高4位。 A3~A0:地址总线低4位,双向。当CPU控制总线时,它们是地址输入线。CPU用这4条地址线对DMA控制器的内部寄存器进行寻址,完成对DMA控制器的编程。当8237A控制总线时,由这4条线输出要访问的存储单元的最低4位地址。 A7~A4: 地址线,输出,只用于在DMA传送时,输出要访问的存储单元的低8位地址中的高4位。 德 能 日 新
DB7~DB0:8位双向数据线,与系统数总线相连。在CPU控制总线时,CPU可以通过I/O读命令从DMA控制器中读取内部寄存器的内容,送到DB7~DB0,以了解8237A的工作情况。也可以通过I/O写命令对DMA控制器的内部寄存器进行编程。在DMA控制器控制总线时,DB7~DB0输出要访问的存储单元的高8位地址(A15~A8),并通过ADSTB锁存到外部地址锁存器中,并和A7~A0输出的低8位地址一起构成16位地址。 德 能 日 新
图6-4 8237A引脚图 2 39 3 38 4 37 5 36 6 35 7 34 8 33 9 32 10 31 11 30 12 29 13 28 14 27 15 26 16 25 17 24 19 22 20 21 18 23 1 40 IOR A7 MEMR IOW MEMW ADSTB NC HLDA READY VCC AEN HRQ GND CS EOP CLK RESET DREQ0 DACK0 A6 A5 A4 A3 A2 A1 A0 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 DACK1 DREQ1 DREQ2 DREQ3 DACK2 DACK3 德 能 日 新
6.2.2 8237A的工作方式 DMA控制器8237A依靠它的可编程特性可以实现对多种DMA传送方式的控制。用程序的方法置入控制字(或称命令字)可以设置和改变DMA传送方式。置入控制寄存器的控制字控制着与整个DMA控制器有关的工作方式。置入各通道内方式寄存器的控制器的控制字控制着本通道的工作方式。 德 能 日 新
8237在DMA传送时有四种工作方式: 1.单字节传送方式 2.成组传送方式 3.请求传送方式 4.级连方式 级连方式用于通过级连以扩展通道。第二级的HRQ和HLDA信号连到第一级的DREQ和DACK上,如图6-5所示。第二级各个片子的优先权等级与所连的通道相对应。 在这种工作情况下,第一级只起优先权网络的作用,除了由某一个二级的请求向CPU输出HRQ信号外,并不输出任何其它信号,实际的操作是由第二级的片子完成的,若有需要还可以由第二级扩展到第三级等等。 德 能 日 新
微处 理器 HRQ DREQ HRQ HLDA DACK HLDA 8237A DREQ DACK 图6-5 8237的级连 德 能 日 新 8327 HRQ HLDA 微处 理器 第一级 第二级 初始装置 附加装置 图6-5 8237的级连 德 能 日 新
在前三种工作方式下,DMA传送有三种类型: DMA读、写和校验。 DMA读传送是把数据由存储器传送至外设,操作时由MEMR有效从存储器读出数据,由IOW有效把数据传送给外设。 DMA写传送是把由外设输入的数据写至储存储器中。操作时由IOR信号有效从外设输入数据,由MEMW有效把数据写入内存。 校验操作是一种空操作,8237本身并不进行任何校验,而只是像DMA读或DMA写送一样地产生时序,产生地址信号,但是存储器和I/O控制线保持无效,所以并不进行传送,而外设可以利用这样的时序进行校验。 德 能 日 新
在存储器到存储器的传送中,也允许外部送来一个EOP信号停止DMA传送。这种方式可用于数据块搜索,当发现匹配时,发出EOP信号停止传送 。 存储器到储器传送。8237可以编程工作要这种工作方式,这时就要用到两个通道,通道 0的地址寄存器编程为源区地址;通道 1的地址寄存器编程为目的地址。字节数寄存器编程为传送的字节数,传送由设置一个通道0的软件DREQ启动。8237按正常方式向CPU 发出DMA请求信号HRQ,待CPU 用HLDA信号响应后传送就可以开始,每传送一个字节要用8个小时钟周期,4个时钟周期以通道0为地址从源区读数据送入8237的临时寄存器;另4个时钟周期以通道1为地址把临时寄存器中的数据写入目的区,每传送一个字节,源地址和目的地址都要修改,字节数减量。传送一直进行到通道1的字节数计数器减到零,产生TC引起在EOP端输出一个脉冲,结束DMA传送。 在存储器到存储器的传送中,也允许外部送来一个EOP信号停止DMA传送。这种方式可用于数据块搜索,当发现匹配时,发出EOP信号停止传送 。 德 能 日 新
8237A的内部寄存器(如表6-1所示)分为两类:一类是4个通道共用的寄存器,另一类是各个通道专用的寄存器。 (1)控制寄存器 8237A的4个通道共用一个控制寄存器。在编程时,由CPU向它写入控制字,而由复位信号(RESET)或软件命令清除它。控制寄存器格式如图6-6所示。控制字是4个通道必须共同遵循的原则。 在PC系列机中,当BIOS初始化时,已将控制寄存器设定为00H,即禁止存储器到存储器的传送,允许读/写操作,使用正常是时序,固定优先级,不扩展写信号,DREQ高电平有效,DACK低电平有效。 德 能 日 新
表6-1 8237内部寄存器 寄 存 器 名 容 量 数 量 德 能 日 新 基地址寄存器 16位 4 基地节数计数器 16位 4 表6-1 8237内部寄存器 寄 存 器 名 容 量 数 量 基地址寄存器 16位 4 基地节数计数器 16位 4 现行地址寄存器 16位 4 现行字节数寄存器 16位 4 临时地址寄存器 16位 1 临时字节数寄存器 16位 1 状态寄存器 8位 1 控制寄存器 8位 1 临时寄存器 8位 1 方式寄存器 6位 4 屏蔽寄存器 4位 1 请求寄存器 4位 1 德 能 日 新
图6-6 控制寄存器格式 德 能 日 新 0:DACK低电平有效 1:DACK高电平有效 0:禁止存储器到存储器传送 1:允许存储器到存储器传送 存储器到存储器传送时: 0:源地址不保持 1:源地址保持不变 0:DREQ高电平有效 1:DREQ低电平有效 0:不扩展写信号 1:扩展写信号 0:启动8237A工作 1:停止工作 0:正常时序 1:压缩时序 0:固定优先级 1:循环优先级 图6-6 控制寄存器格式 德 能 日 新
(2)方式寄存器。8237A的每个通道都有一个方式寄存器,4个通道的方式寄存器共用一个端口地址,方式选择命令的格式如图6-7所示。方式字的最低两位进行通道选择,写入命令字之后,8237A将根据D1和D0的编码把方式寄存器的D7~D2位送到相应通道的方式寄存器中,从而确定该通道的传送方式和数据传送类型。8237A各通道的方式寄存器是6位的,CPU不可寻址。 德 能 日 新
图6-7 方式寄存器格式 德 能 日 新 00:请求方式 01:单字节传送方式 10:数据块方式 11:级联方式 0:禁止自动预置 D7 D6 D5 D4 D3 D2 D1 D0 编码选通道 00:通道0 01:通道1 10:通道2 11:通道3 00:请求方式 01:单字节传送方式 10:数据块方式 11:级联方式 00:校验传送 01:写传送 10:读传送 11:无效 当D7D6为11时,不考虑这两位 0:禁止自动预置 1:禁止自动预置 0:地址加1 1:地址减1 图6-7 方式寄存器格式 德 能 日 新
(3)地址寄存器。每个通道有一个16位的基地址寄存器和一个16位的当前地址寄存器。基地址寄存器存放本通道DMA传输时所涉及到的存储区首地址或末地址,这个初始值是在初始化编程时写入的,同时也被写入当前地址寄存器。当进行DMA传送时,由当前地址寄存器向地址总线提供本次DMA传送时的内存地址(低16位)。当前地址寄存器的值在每次DMA传输后自动加1或减1,为传送下一个字节作好准备。在整个DMA传送期间,基地址寄存器的内容保持不变。当通道初始化选择“自动重装“功能时,一旦全部字节传送完毕,基地址寄存器的内容自动重新装入当前地址寄存器。 德 能 日 新
(4)字节寄存器。每个通道有一个16位的基本字节寄存器和一个16位的当前字节寄存器,基本字节寄存器存放本通道DMA传输时字节数的初值。8237A规定:初值比实际传输的字节数少1,初值是在初始化编程时写入的,同时,初值也被写入当前字节寄存器。在DMA传送时,每传送一个字节,当前字节寄存器自动减1,当初值由0减到FFFFH时,产生计数结束信号,EOP端输出有效电平。当通道初始化选择“自动重装“功能时,一旦全部字节传送完毕,基本字节寄存器的内容自动重新装入当前字节寄存器。基本字节寄存器预置初值后将保持不变,也不能被CPU读出,而当前这节寄存器中的内容可以随时由CPU读出。 德 能 日 新
(5)状态寄存器。状态寄存器的格式如图6-8所示。状态寄存器的高4位表示当前4 个通道是否有DMA请求,低4位指出4个通道的DMA传送是否结束,供CPU查询。它与控制器共用一个端口地址。 德 能 日 新
通道3 通道2 通道1 通道0 有DMA请求为1 计数结束为1 图6-8 状态寄存器的格式 德 能 日 新
(6)请求寄存器和屏蔽寄存器。请求寄存器和屏蔽寄存器是4个通道公用的寄存器,使用时应写入请求命令和屏蔽命令字,其格式如图6-9所示。 德 能 日 新
图6-9 请求寄存器和屏蔽寄存器 德 能 日 新 D7 D6 D5 D4 D3 D2 D1 D0 无用位 0:置1请求触发器 1:置0请求触发器 无用位 0:置1请求触发器 1:置0请求触发器 通道选择 00:通道0 01:通道1 10:通道2 11:通道3 通道选择 00:通道0 01:通道1 10:通道2 11:通道3 图6-9 请求寄存器和屏蔽寄存器 德 能 日 新
(7)多通道屏蔽寄存器。8237A允许使用一个屏蔽字一次完成对4个通道的屏蔽置,格式如图6-10所示。其中,D0~D3对应于通道0~3的屏蔽触发器,若某一位为1,则对应通道的屏蔽触发器置1。 德 能 日 新
图6-10 多通道屏蔽寄存器 德 能 日 新 无用位 0:置1屏蔽触发器 1:置0屏蔽触发器 D7 D6 D5 D4 D3 D2 D1 D0 通道0 通道1 通道2 通道3 无用位 0:置1屏蔽触发器 1:置0屏蔽触发器 图6-10 多通道屏蔽寄存器 德 能 日 新
(8)先/后触发器。8237A只有8根数据线,而基地址寄存器和基本字节寄存器都是16位,在预置初值时需要分两次进行,每次写入一个字节。 先/后触发器是为初值的写入顺序而设置的,在使用先/后触发器时,先将其清“0”,然后写字节先写低位字节,后写高位字节。 (9)暂存寄存器。暂存寄存器为4通道共用的8位寄存器。在DMA控制器实现存储器到存储器的传送方式时,它暂存中间数据,CPU可以读取暂存寄存器中的内容,其值为最后一次传送的数据。 德 能 日 新
地址初值寄存器和地址计数器、字节数值寄存器和字节 6.3 8237A的初始化编程 6.3.1 8237的寻址及连接 8237内部共占用16个I/O端口地址,由地址码的 A3~A0控制,恰好对应从0000至1111的16种组合。表6-2给 出了端口地址的分配关系。需要说明以下两点: (1)地址0H~7H(0000~0111)分配给4个通道的 地址初值寄存器和地址计数器、字节数值寄存器和字节 计数器。每个寄存器都是16位,无论是写入还是读出都需要 两次。内部逻辑中有个字节指向触发器F接成计数方式工 作。F触发器为0,读、写时指向低位字节;F为1,读、写时 指向高位字节。每次读、写后F改变状态。表6-2还指出,对 地址0CH(1100)执行输出指令(AL寄存器可为任意 值),将使F触发器初始化为0。 德 能 日 新
(2)16个I/O端口地址中,除分配给内部编址寄存 器外,还有几个地址分配用于形成软件命令。这些 命令是:对8237总清等效于外接RESET信号,占 用地址1101;对请求寄存器清0,占用地址1110; 还有已经提到的对字节指向触发器F的清0。这3种 命令都是用输出指令实施的。指令中AL寄存器的内 容不起作用,可为任意值。 德 能 日 新
表6-2 8237内的地址分配 德 能 日 新 A3A2A1A0 寄存器说明 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 表6-2 8237内的地址分配 A3A2A1A0 寄存器说明 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 通道0 写:地址初值寄存器和地址计数器 读:地址计数器 写:字节数初值寄存器和字节数计数器 读:字节数计数器 通道1:操作时对应的寄存器与地址0000同 通道1:操作时对应的寄存器与地址0001同 通道2:操作时对应的寄存器与地址0000同 通道2:操作时对应的寄存器与地址0001同 通道3:操作时对应的寄存器与地址0000同 通道3:操作时对应的寄存器与地址0001同 写:控制寄存器,读:状态寄存器 写:请求寄存器,读:非法 写:发管理一位的屏蔽字,读:非法 写:方式寄存器,读:非法 写:清除F触发器,读:非法 写:8237总清,读:暂存寄存器 写:清除屏蔽寄存器,读:非法 写:发管理4位的屏蔽字,读:非法 德 能 日 新
(1)命令字写入控制寄存器。在初始化时必须设置寄存器,以确定其工作时序、优先级方式、DREP和DACK的有效电平及是否允许工作等。 在PC系列机中,当BIOS初始化时,已将通道的控制寄存器设定为00H ,禁止存储器到存储器的传送,允许读、写传送、正常时序,固定优先级,不扩展写信号,DREQ高电平有效,DACK低电平有效。因此在PC微机系统中,如果借用DMA CH1进行DMA传送,则在初始化编程时,不应再向控制寄存器写入新的命令字。 德 能 日 新
(3)方式字写入方式寄存寄器。通道规定传送类型及工作方式。 (2)屏蔽字写入屏蔽寄存器。当某通道正在进行初始化编程时,接收到DMA请求,可能本初始化结束,8237A就开始进行DMA传送,从而导致出错。因此,初始化编程时,必须先屏蔽末初始化的通道,在初始化结束后再解除该通道的屏蔽。 (3)方式字写入方式寄存寄器。通道规定传送类型及工作方式。 (4)置0先/后触发器。对口地址DMA+0CH执行一条输出指令,从而产生一个写命令,即可置“0”先/后触发器,为始化基地址寄存器和基本字节寄存器作准备。 德 能 日 新
(6)解除屏蔽。初始化空间通道的屏蔽寄存器写入D2~D0=0××的命令,置0相应通道的屏蔽解发器,准备响应DMA请求。 (7) 写入请求寄存器。如果采用软件DMA请求,在完成通道 初始化之后,在程序的适当位置向请求寄存置器写入D2~D0=1××命令,即可使相应通道进行DMA传送。 德 能 日 新
286微机系统使用两片8237A级连,如图6-11所示。它提供了7个DMA通道,通道 1.8237A在IBM PC /AT系统中的应用 286微机系统使用两片8237A级连,如图6-11所示。它提供了7个DMA通道,通道 0~3支持8位数据传送,通道5~7支持16位数据传送。PC/AT有专门的动态RAM刷新电路,硬盘驱动器,通道4作为两个DMA控制器的级联,其佘均保留备用。 PC/AT DMAC寄存器I/O端口地址见表6-3所示。 德 能 日 新
表6-3 PC/AT DMAC寄存器I/O端口地址 内部寄存器名称 DMA+00H 000 0C0 CH0基地址寄存器和当前地址寄存器 DMA+01H 001 0C2 CH0基本字节寄存器和当前字节寄存器 DMA+02H 002 0C4 CH1基地址寄存器和当前地址寄存器 DMA+03H 003 0C6 CH1基本字节寄存器和当前字节寄存器 DMA+04H 004 0C8 CH2基地址寄存器和当前地址寄存器 DMA+05H 005 0CA CH3基本字节寄存器和当前地址寄存器 DMA+06H 006 0CC CH3基地址寄存器和当前地址寄存器 DMA+07H 007 0CE CH3基本字节寄存器和妆前字节寄存器 DMA+08H 008 状态寄存器/控制寄存器 DMA+09H 009 请求寄存器 DMA+0AH 00A 屏蔽寄存器 DMA+0BH 00B 方式寄存器 DMA+0CH 00C 先/后触发器 DMA+0DH 00D 0DA 暂存器/复位命令 DMA+0EH 00E 0DC 清屏蔽寄存器 DMA+0FH 00F 0DE 多通道屏蔽寄存器 德 能 日 新
PC/XT地址总线的宽度是24位的,由A23~A0组成,最大寻址空间可达16MB。 由于8237A内部地址寄存器是16位,只能寻址64KB的空间,为了扩大8237A的寻址空间,PC/AT微机系统在8237A芯片以外为每一个通道设置了一个8位的页面寄存器,如图6-12所示。 在进行DMA读 /写传送之前,程序要把DMA传送所涉及到的RAM单元的高8位物理地址写入到相关通道的页面寄存器中,把RAM单元低16位物理地址写入到相关通道的基本地址寄存器中,把DMA传送的实际字节数减1,写入到相关通道的基本字节寄存器中,从而做好初始化准备。 德 能 日 新
8237某通道 图6-12 扩大8327A寻址范围示意图 系统数据线 初始化时写入高8位RAM地址 中8位RAM地址 低8位RAM地址 页面寄存器 地址锁存器 当前地址寄存器 地址驱动器 初始化时写入高8位RAM地址 中8位RAM地址 低8位RAM地址 8237某通道 图6-12 扩大8327A寻址范围示意图 德 能 日 新
一旦I/O端口有DMA请求,并且DMAC控制系统三总线之后,由相关通道的DMA应答信号控制把页面寄存器的内容送到地址总经高8位,DMAC把相关通道的低16位地址经过外部地址锁存和驱动送到低16位地址总线上,选择某一存储单元。 在PC/AT系统中,页面寄存器采用的三 态输出存输出存储器映像器74612来实现。在高档微机中,DMAC和相关页面寄存器都被兼容的多功能芯片所取代。页面寄存器端口址址见表6-4。 德 能 日 新
表6-4 PC/AT页面寄存器的I/O端口地址 DMA通道 I/O地址 CH0 87H CH1 83H CH2 81H CH3 82H CH5 8BH CH6 89H CH7 8AH 存储器刷新 8FH 错误标志单元 80H 德 能 日 新
要编程首先要确定端口地址。地址的低四位用以区分8237的内部寄存器,高四位地址A7~A4经译后,连至选片端CS,假定选中时高4位为5。 2. 编程举例 若要利用通道0,由外设(磁盘)输入32K字节的一个数据块,传送至内存8000H开始的区域(增量传送),采用块连传送的方式,传送完不自动初始化,外设的DREQ和DACK都为高电平有效。 要编程首先要确定端口地址。地址的低四位用以区分8237的内部寄存器,高四位地址A7~A4经译后,连至选片端CS,假定选中时高4位为5。 德 能 日 新
方式控制字 D7 D6 D5 D4 D3 D2 D1 D0 1 数据块 地址 非自动 写传送 传送通道 传送 增量 初始化 德 能 日 新
通道0的屏蔽位复位 (2)屏蔽控制字 D7 D6 D5 D4 D3 D2 D1 D0 (3)命令字 通道0的屏蔽位复位 (3)命令字 D7 D6 D5 D4 D3 D2 D1 D0 DACK DREQ 固定优先权 非存储器至存储器传送 德 能 日 新
初始化程序如下: OUT 5DH,AL ;输出主清除命令 MOV AL,00H OUT 50H,AL ;输出基和现行地址的低8位 OUT 5BH,AL ;输出工作方式字 OUT 5AH,AL ;输出屏蔽控制字 MOV AL,0A0H OUT (58H),AL ;输出命令字 德 能 日 新
谢谢观看 德 能 日 新