1、计算机硬件技术基础,主讲:焦明海 东北大学计算中心,第八章 DMA控制器,8.1 DMA控制器功能 8.2 DMA控制器8237A,8.1 DMA控制器功能,DMA具有以下功能: 1.工作要受CPU的管理。它和其它I/O接口一样是CPU的管理对象。 2.具有总线主设备(MASTER)的功能。一旦DMA请求并得到了总线控制权,它就成了总线主设备,它和CPU一样控制信息在总线上的传输DMA传输。在DMA传送期间,DMAC将读取源口数据,并写到目的口。当一次传输或若干次传送完毕,DMAC就把总线控制权移交给CPU,它又变成从设备。,CPU对8237A的编程初始化工作是通过8237A的端口 进行的。8
2、237A的端口是用低4位地址线A3A2A1A0编址 ,共有16个端口地址。16个端口地址分为以下两部分: (1)00H07H分配给4个通道的相应的16位寄存器。 8237A的寄存器都是16位的,而8237A只有8位数据线 ,读/写操作均分两次进行。 (2)08H0FH分配给其他寄存器。包括3条不使用数据总线而只利用端口地址进行操作 的命令。,8.2 DMA控制器8237A,8.2.1 8237A的内部结构,8.2.2 8237A内部端口地址分配,A3A2A1A0 寄存器说明 0 0 0 0 通道0 写:基地址寄存器和当前地址寄存器 读:当前地址寄存器 0 0 0 1 通道0 写:基字节计数器和
3、当前字节计数器 读:当前字节计数器 0 0 1 0 通道1 写:基地址寄存器和当前地址寄存器 读:当前地址寄存器 0 0 1 1 通道1 写:基字节计数器和当前字节计数器 读:当前字节计数器 0 1 0 0 通道2 写:基地址寄存器和当前地址寄存器 读:当前地址寄存器 0 1 0 1 通道2 写:基字节计数器和当前字节计数器 读:当前字节计数器 0 1 1 0 通道3 写:基地址寄存器和当前地址寄存器 读:当前地址寄存器 0 1 1 1 通道3 写:基字节计数器和当前字节计数器 读:当前字节计数器,A3A2A1A0 寄存器说明 1 0 0 0 写:命令寄存器 读:状态寄存器 1 0 0 1 写
4、:请求寄存器 读:非法 1 0 1 0(A) 写:一位屏蔽字寄存器 读:非法 1 0 1 1(B) 写:方式字寄存器 读:非法 1 1 0 0(C) 写:清除F触发器 读:非法 1 1 0 1(D) 写:8237A总清 读:暂存寄存器 1 1 1 0(E) 写:清除屏蔽寄存器 读:非法 1 1 1 1(F) 写:四位屏蔽字寄存器 读:非法,8.2.2 8237A内部端口地址分配,8.2.3 DMA控制器8237A的编程,方式字,命令字,8.2.3 DMA控制器8237A的编程,1位屏蔽字,0:允许 1:禁止DMA,D1D0 0 0 通道0 0 1 通道1 1 0 通道2 1 1 通道3,8.2
5、.3 DMA控制器8237A的编程,1. 控制命令,1)方式字写入端口地址0BH,主要功能:选择传送方式和传送类型,设置自动初始化方式和地址增量方向。 2)命令字写入端口地址08H,主要功能:选择DREQ、DACK有效极性,读/写时序,优先级编码方式等。 3)请求字写入端口地址09H,主要功能:发生软件DMA请求。 4)屏蔽字写入端口地址0AH或0FH,主要功能:允许或禁止通道的DMA请求。 5)状态字从端口地址08H读出,主要功能:反映通道DMA请求状态和是否有TC信号。,8.2.3 DMA控制器8237A的编程,2.清除命令,清除命令不需通过数据总线。执行输出指令时,AL的内容可任意设置。
6、 1)清除字节指针命令(写入端口地址0CH) .8237A数据线是8位的,所以16位数据分两次读/写,而且使用同一端口地址。 2)主清除命令(写入端口地址0DH) .使屏蔽寄存器各位置“1”外,其他各寄存器均被清“0”. 3)清除屏蔽寄存器命令(写入端口地址0EH) ,主要功能:将4个通道的屏蔽位清除。,8.2.3 DMA控制器8237A的编程,3. 8237A的编程步骤:,1)CPU发主清除命令。 2)写入基地址及当前地址的值。 3)写入基字节数和当前字节数的初值。 4)写入方式字。 5)写入屏蔽字。 6)写入命令字。 7)写入请求字。,8.2.3 DMA控制器8237A的编程,例:8237
7、A数据块传送。设在某8086/8088系统中,用8237A通道1将内存1000H单元开始的24KB数据转存到硬盘中(1000H即为基地址初值),采用数据块方式传送,地址增量方式,只传送一便,设DREQ和DACK低电平有效,当A15A4为0000 0000 0111时选中8237A.要求设计8237A通道1的初始化程序。,分析: 1)端口地址。A3A0由8237A芯片内部译码,编码范围为00001111,再与A15A4组合,则端口地址范围是0070H007FH。 2)传送字节数。24KB对应的16进制数为6000H,写入通道字节数计数器的值应为:6000H-1=5FFFH。,8.2.4 DMA控
8、制器8237A的编程实例,分析: 3)方式字。按题目要求,控制字的组合为:1000 1001B. 4)一位屏蔽字。按题要求,一位屏蔽字组合为:0000 0001B. 5)命令字。按题目要求,命令字的组合为0100 0000B. 6)初始化程序如下:START: MOV DX, 007DH ;发生清除命令OUT DX, AL ;AL内容任意设置MOV DX, 0072H ;通道1,8.2.4 DMA控制器8237A的编程实例,6)初始化程序如下(续上):MOV AL, 00H OUT DX, AL ;送基地址和当前地址低8位MOV AL, 10HOUT DX, AL ;送基地址和当前地址高8位MOV DX, 0073H MOV AL, 0FFH ;送基值和当前计数值低8位OUT DX, ALMOV AL, 5FH ;送基值和当前计数值高8位OUT DX, AL,8.2.4 DMA控制器8237A的编程实例,6)初始化程序如下(续上) :MOV DX, 007BH MOV AL, 89H ;写入方式控制字OUT DX, AL ;DMA读传送 MOV DX, 007AH MOV AL, 01H ;写入屏蔽字OUT DX, ALMOV DX, 0078HMOV AL, 40H ;写入命令控制字OUT DX, AL,8.2.4 DMA控制器8237A的编程实例,