1、第九章 可编程DMA控制器8237A,一、 DMA控制器8237,1. 概述 2. 8237的引脚功能 3. 8237的编程结构 4. 8237对内存和I/O的寻址,概述,DMA=Direct Memory Access,直接存储器存取,CPU,内存,外设,数据通道,数据通道,非DMA方式 (包括程序控制方式和中断方式),DMAC,内存,外设,数据通道,DMA方式,概述,DMAC具有独立的控制三大总线来访问存储器和I/O端口的能力,它能像CPU一样提供数据传送所需的地址信息和读写控制信息DMAC和CPU都挂在系统总线上,当进入DMA方式时,DMAC成为总线主控。在总线上,可以控制其他部件的部件
2、称为总线主控或主控(bus master),被控部件称为从控(slave)。任意时刻,总线上只有一个主控。,概述,DMA操作之前,应先对DMAC编程,把要传送的数据块长度、数据块在存储器中的起始地址,数据传送方向等信息发送给DMACDMA操作过程包括三个阶段: DMA请求 DMA响应和数据传送 传送结束,当外设要求以DMA方式为它服务时,发DMA请求信号DREQ到DMAC DMAC检查该信号是否被屏蔽及其优先权,如确认该信号有效则向CPU发送总线请求信号HRQ(连到CPU的HOLD),DMA请求阶段,CPU,DMAC,HRQ,外设,DREQ,地址总线,数据总线,存储器,概述,每个总线周期结束时
3、CPU检测HOLD,如为高电平,则响应HOLD请求进入保持态,使三态总线CPU侧呈高阻状态,并以总线保持响应信号HLDA通知DMAC DMAC接管总线,并以DACK信号通知外设,使之成为DMA传送时被选中的设备,同时DMAC给出内存地址以及I/O读写和存储器读写控制信号,在外设和存储器之间完成数据传送,DMA响应和数据传送阶段,CPU,DMAC,HLDA,外设,DACK,存储器,地址总线,数据总线,IOR/IOW,MEMR/MEMW,概述,传送结束阶段,传送完成后,DMAC放弃总线,撤消总线请求(HRQ为低),CPU检测到HRQ(HOLD)为低后,撤消HLDA,CPU重新获得总线控制权,CPU
4、,DMAC,HRQ,外设,EOP,地址总线,数据总线,存储器,概述,概述,PC系列微机使用可编程DMA控制器 8237A(简称8237)实现DMA功能8237有四个通道,每个通道都有独立的与相应外设接口相联系的信号,四个通道共享与CPU相连的控制信号、地址信号、数据信号,8237的引脚功能,8237A芯片内部结构,8237的引脚功能,请求/应答信号外设接口电路向8237的请求信号:DREQ3DREQ08237对外设接口电路的应答信号:DACK3DACK08237向CPU申请总线的信号:HRQ(连至CPU的HOLD)CPU向8237传送的允许使用总线信号:HLDA,8237的引脚功能,地址信号:
5、CPU初始化8237或读8237状态时所需的片选信号A7A0(输出):8237访问存储器的地址信号的低8位。A3A0(输入):CPU初始化8237或读8237状态时,用于寻址8237内部寄存器,8237的引脚功能,数据信号(双向): DB7DB0,CPU为主控时,可以通过I/O读命令查询8237的状态寄存器的内容,或通过I/O写命令对8237的内部寄存器进行编程,数据传送通过DB7DB08237为主控时, DB7DB0输出要访问的内存地址的高8位,并通过ADSTB锁存到外部地址锁存器中,和A7A0输出的低8位地址一起构成16位地址,8237的引脚功能,地址允许信号:AEN8237作为主控时(8
6、237控制总线),输出AEN=1。8237作为从控时(CPU控制总线),输出AEN=0。DMA传输结束信号: (双向)当DMAC内部任一通道传输结束,8237发出若由外部给DMAC送入有效的 ,则强制DMAC内部 所有通道结束传输。,8237的引脚功能,MEMR/MEMW:,8237发出的存储器读/写信号,IOR/IOW:,8237作为主控时,输出的I/O读/写信号。8237作为从控时,CPU发出的I/O读/写信号,用于读/写8237,8237的引脚功能,ADSTB:地址选通信号,用于启动地址锁存器,READY:存储器或I/O的就绪信号,8237的编程结构,8237的编程结构,控制寄存器8位,
7、4个通道共用,用于设定8237的信号形式、工作时序、传输方向。 端口地址08H信号形式:DREQ/DACK信号的有效形式。 工作时序:普通时序(3个时钟周期完成一次传输)压缩时序(2个时钟周期完成一次传输) 传输方向:内存 I/O(常用)I/O内存(常用)内存内存(PC系列机未用),控制寄存器格式,例如,PC系列机的8237,按如下要求工作:禁止存储器到存储器传送,按正常时序,滞后写入,通道按固定优先权排序,允许 8237进行DMA操作,DREQ高电平有效,DACK低电平有效。则命令字为00000000B=00HMOV AL,00H ;命令字OUT DMA+8,AL ;写入命令寄存器,状态寄存
8、器,8位,4个通道共用,与控制寄存器共用一个端口地址 端口地址08H 记录每个通道是否有请求、传输是否结束,8位 , 端口地址0DH在内存内存传输时,暂存数据。注意:内存 I/O传输时,数据不进入8237内部,只存在于数据总线上,暂存寄存器,8位,设定DMA的传输模式,4个通道的模式寄存器共用一个端口地址,端口地址0BH传输模式: 单字节传输模式 数据块传输模式 请求传输模式 级联传输模式,模式寄存器,单字节传输模式:每次DMA操作只传送一字节后,接着8237释放总线块传输模式:8237获得总线控制权后,连续传送多个字节,每传输一个字节,当前字节计数器减1,当前地址寄存器加1或减1,直到所要求
9、的字节数传输完(当前字节计数器减至0),8237在EOP引脚上发出结束信号,然后释放总线。在块传输过程中,若向8237的EOP引脚上输入低电平,可强行结束传输。,模式寄存器,请求传输模式: 在传输过程中,8237要检测DREQ信号(询问外设),当DREQ为低时,8237暂停传输(不释放总线),当DREQ再次有效后,继续进行传输。 级联传输模式: 多片8237级联时,可以构成主从式DMA系统。级联的方式是把从片的请求线HRQ连至主片的DREQ引脚,主片的DACK联至从片的HLDA引脚 若主8237的某通道(DREQ)连接从8237的HRQ,主8237的该通道应设置为级联传输模式,但从8237不设
10、置级联传输模式,而是设置其它三种模式之一,模式寄存器,模式寄存器,D4:自动预置功能, 0=禁止, 1=允许 自动预置:在当前字节计数器到达0时,当前字节计数器和当前地址寄存器从基本字节计数器和基地址寄存器中自动获得新的初值,每个通道一个基地址寄存器,一个当前地址寄存器,16位 ,占用相同的端口地址基地址寄存器:DMA传输的内存地址初值,在初始化时由CPU分两次写入。当前地址寄存器:DMA传输过程中,内存地址的当前值。每传输一字节,该寄存器的值增1或减1。CPU可 分两次读出其值。,基地址寄存器和当前地址寄存器,每个通道一个基本字节计数器,一个当前字节计数器,16位 ,占用相同的端口地址基字节
11、计数器:DMA传输的字节数初值,在初始化时由CPU分两次写入。8237规定,初值比实际传输的字节数少1当前字节计数器:DMA传输过程中,当前的计数值。每传输一字节,该寄存器的值减1。当计数值减到FFFFH时,8237发出结束信号EOP。CPU可分两次读出其值。,基地址寄存器和当前地址寄存器,端口地址0CHCPU写入基地址寄存器、基本字节计数器时,均分两次写入,先/后触发器用于控制写入的值是低8位还是高8位写入过程: 使先/后触发器=0。 写入低8位,先/后触发器自动置1。 写入高8位,先/后触发器自动置0。,先/后触发器,四个通道的请求触发器构成一个请求寄存器(8位) 一般情况下,DMA请求由
12、硬件信号DREQ发出,也可由软件设置请求触发器来发出DMA请求。,端口地址09H,请求寄存器,四个通道的屏蔽触发器构成一个屏蔽寄存器(8位)当屏蔽寄存器的屏蔽标志置1时,将禁止该通道的硬件DMA请求和软件DMA请求。,D2=1,设置屏蔽; D2 =0,清除屏蔽;D1D0:选通道,端口地址0AH,屏蔽寄存器,8237可以一次完成四个通道的屏蔽设置,D3D0:分别对通道30设置屏蔽1,设置屏蔽; 0,清除屏蔽;,端口地址0FH,综合屏蔽寄存器,对端口0EH写入0,可以一次清除四个通道的屏蔽触发器,端口地址0EH,MOV DX, DMA+0EH MOV AL, 0 OUT DX, AL,清除屏蔽寄存
13、器,对端口0DH写入0,使8237复位,其功能等同于硬件复位,端口地址0DH,8237复位后的状态为: 控制寄存器 状态寄存器 请求寄存器 暂存器 先/后触发器,清0,屏蔽寄存器 置1,复位命令寄存器,8237的编程结构,一片8237占用连续16个端口地址,用DMA+00HDMA+0FH表示。其中,DMA表示该片8237的基地址。在AT以上的微机中,使用2片8237,其地址为:第一片8237,基地址DMA=0000H,使用0000H000F I/O地址。 第二片8237,基地址DMA=00C0H,使用00C0H00CF I/O地址。,8237的编程结构,DMA控制器的工作时序, DMA空闲周期
14、SI 过渡状态S0 DMA 有效周期(S1、S2、S3、S4) 82C37A内部状态变化流程,DMA传输(数据块传输)正常时序,在PC/AT系统中,需要24位地址,高8位地址A23A16由DMA页面寄存器电路74LS612提供。在DMA传输之前,用指令将高8位地址送入页面寄存器,在DMA传输过程中,由AEN信号使页面寄存器输出该8位地址。,存储器寻址,8237对内存和I/O的寻址,I/O寻址,8237对内存和I/O的寻址,8237的四个通道,每一个只接一个外设接口电路,不使用I/O地址来区分I/O设备,I/O设备的端口地址只用于CPU对I/O设备的寻址,I/O寻址,8237对内存和I/O的寻址
15、,8237的应用,初始化编程,写入控制寄存器 写入屏蔽寄存器屏蔽要初始化的通道 写入模式寄存器 先后触发器置0 写入基地址和基本字节寄存器 解除屏蔽 写入请求寄存器,8237的应用,例:对通道2初始化编程的代码片段,DMA EQU 0 ;DMA通道起始端口 1) 系统在启动时,对控制寄存器进行初始化MOV AL, 0OUT DMA+8, AL 2) 清除先/后寄存器OUT DMA+12, AL 3) 设置模式寄存器MOV AL, 46HOUT DMA+11, AL,4) 送内存地址计算内存的物理地址,将20位地址的高4位送页面寄存器,低16位先送低8位,再送高8位.OUT DMA+4, AL
16、;低8位OUT DMA+4, AL ;高8位OUT 81H, AL ;20位地址的高4位 5) 送传送字节数. 6) 送屏蔽位MOV AL, 2OUT DMA+10, AL,8237的应用,8237的应用,例:利用主板上的8237通道1,将内存起始地址为80000H的300H字节直接输出给外设,MOV AL, 0 ;清除先/后触发器 OUT 0DH, AL ;写地址 OUT 02, AL OUT 02, AL MOV AL, 8 OUT 83H, AL ;传送的字节数 MOV AX, 300H DEC AX MOV 03, AL MOV AL, AH OUT 03, AL,;写模式寄存器 MOV AL, 49H OUT 0BH, AL ;清除通道1屏蔽 MOV AL, 1 OUT 0AH, AL ;读通道1状态 WAIT: IN AL,08 AND AL, 02 JZ WAIT ;完成后屏蔽通道1 MOV AL, 5 OUT 0AH, AL,