1、本章主要教学内容可编程DMA控制器8237A的内部结构和引脚功能8237A的工作方式及编程方法可编程计数/定时器接口芯片8253的编程结构与使用方法8253在PC机上的具体应用,第8章 可编程DMA控制器8237A,8.1 可编程DMA控制器8237A概述数据传送方式除了查询方式和中断方式以外还有DMA控制方式。利用DMA方式传送数据时,数据的传送过程完全由硬件电路控制,这种电路称为DMA控制器(DMAC),它可以在DMA方式下起到CPU的作用。DMAC的功能就是在存储器和I/O设备之间进行高速、成批的数据传输。在8086系统中,DMAC选用的是可编程器件Intel 8237A,它含有4个独立
2、的DMA通道,可以用来实现内存到接口、接口到内存及内存到内存之间的高速数据传送,最高数据传送速率可达1.6MB/s,在此过程中CPU不再干预,这样可大大减少数据传送的中间过程,提高了数据的传送速度。,8.1.1 8237A的内部结构及引脚在DMA控制器取得系统总线的控制权后,系统就完全在它的控制下进行工作,此时DMA为总线主模块,这种工作方式通常称为主态方式;另外,DMA又可以和其它接口一样,接受CPU对它的读/写操作,这时DMA控制器就成了总线从模块,这种工作方式通常称为从态方式。8237A的编程结构和引脚信号与这两方面的情况有关。 1. 8237A的内部结构8237A的内部结构如图8-1所
3、示,它主要由时序与控制逻辑、命令控制逻辑、优先级编码电路、数据和地址缓冲器组以及内部寄存器等5个部分组成。,图8-1 8237A内部结构,图8-1中各主要部件的功能分析如下: (1)时序与控制逻辑:当8237A处于从态工作方式时,时序与控制逻辑电路接受系统送来的时钟、复位、片选和读/写控制等信号,完成相应的控制操作;当8237A处于主态工作方式时则向系统发出相应的控制信号。(2)命令控制逻辑:8237A处于从态工作方式时,命令控制逻辑接收CPU送来的寄存器选择信号A3A0,选择8237A内部相应的寄存器;主态时,对工作方式寄存器的最低两位D1D0进行译码,以确定DMA的操作类型。寄存器选择信号
4、A3A0与、配合可组成各种操作命令。,(3)优先级编码电路:该电路根据CPU对8237A初始化时送来的命令,对同时提出DMA请求的多个通道进行排队判优,来决定哪一个通道的优先级别为最高。对优先级的管理有固定优先级和循环优先级两种方式,无论采用哪种优先级管理,一旦某个优先级高的设备在服务时,其它通道的请求均被禁止,直到该通道的服务结束时为止。 (4)数据和地址缓冲器组:8237A的引脚A7A4、A3A0为地址线;引脚DB7DB0在从态时传输数据信息,在主态时传送地址信息。这些数据引线和地址引线都与三态缓冲器相连,因而可以接管或释放总线。 (5)内部寄存器:8237A内部有4个DMA通道,每个通道
5、都有一个16位的基地址寄存器、基字计数器、当前地址寄存器和当前字计数器,以及一个6位的工作方式寄存器。片内还各有一个可编程的命令寄存器、屏蔽寄存器、请求寄存器、状态寄存器和暂存寄存器,以及不可编程的字数暂存器和地址暂存器等。,2. 8237A的引脚8237A是一种具备40个引脚的双列直插式DIP封装的芯片,如图8-2所示。,8.3 8237A的工作方式8237A在系统中可以有两种功能:一种功能是系统总线的主控者,这是它工作的主方式。在取代CPU控制DMA传送时,它应提供存储器的地址和必要的读写控制信号,数据是在I/O设备与存储器之间通过数据总线直接传递;另一种功能是在成为主控者之前,必须由CP
6、U对它编程以确定通道的选择、数据传送的模式、存储器区域首地址、传送总字节数等等。在DMA传送之后,也有可能由CPU读取DMA控制器的状态。这时8237A如同一般I/O端口设备一样,是系统总线的从设备,这是8237A工作的从方式。,1. 8237A传送工作方式 (1)单字节传送方式 这种工作方式的特点是每申请一次只传送一个字节。数据传送后字节计数器自动减量(增量或减量取决于编程)。传送完这一个字节后DMAC放弃系统总线,将总线控制权交回CPU。HRQ信号变为无效,释放系统总线。若传送数据使字节数减为0,总线计数结束发出信号,或终结DMA传送,或重新初始化。 (2)数据块传送方式 在这种传送方式下
7、,DMAC一旦获得总线控制权便开始连续传送数据。每传送一个字节,自动修改地址,并使要传送的字节数减1,直到将所有规定的字节全部传送完,或收到外部信号,DMAC才结束传送,将总线控制权交给CPU。,(3)请求传送方式在这种方式下,8237A可以进行连续的数据传送,只有出现以下三种情况之一时才停止传送: 字节数计数器减到0,产生一个终止计数T/C信号; 由外界送来一个有效的信号; 外界的DRQ信号变为无效(外设来的数据已传送完)。 (4)级联方式采用这种方式可以将多个8237A级联起来,以扩展系统中的DMA通道数量。如图8-3所示,是2个8237A级联情况示意。,图8-3 二级8237A的级联示意
8、图,2. 8237A的传送类型8237A主要完成三种不同的传送: (1)I/O接口到存储器的传送 (2)存储器到I/O接口的传送 (3)存储器到存储器的传送 3. 8237A的优先级处理8237A有两种优先级方案可供编程选择: (1)固定优先级:规定每个通道的优先级是固定的,即通道0的优先级最高,依次降低,通道3的优先级最低。(2)循环优先级:规定刚被服务的通道的优先级为最低,依次循环。这样,就可以保证4个通道都有机会被服务。若3个通道已被服务,则剩下的通道一定是优先级最高的。,4. 8237A的传送速率一般情况下,8237A进行一次DMA传送需要4个时钟周期(不包括插入的等待周期)。例如,P
9、C机的时钟周期约为210ns,则一次DMA传送需要210 ns4+210 ns=1050 ns,多加一个210 ns是考虑到认为插入一个等待周期的缘故。另外,8237A为了提高传输速率,可以在压缩定时状态下工作。在压缩定时下,每一个DMA总线周期仅用2个时钟周期来实现,从而大大地提高了传送速率。,8.4 8237A的内部寄存器功能及格式 1. 8237A内部寄存器的种类8237A的内部有10种不同类型的寄存器。各类寄存器的名称、位数、寄存器个数及其主要功能见表8-1所示。,2. 8237A内部寄存器 (1)当前地址寄存器 (2)当前字节计数寄存器 (3)基地址寄存器 (4)基字节计数寄存器 (
10、5)工作方式寄存器 (6)命令寄存器 (7)状态寄存器 (8) 请求寄存器 (9)屏蔽寄存器 (10)暂存寄存器 (11)软件命令,8.5 8237A的编程及应用 1. 8237A编程的一般步骤 在进行DMA传输之前,CPU要对8237A进行初始化编程,设定工作模式及参数等。通常,其编程内容主要包括以下几步: (1)输出总清除命令,使8237A处于复位状态,做好接收新命令的准备; (2)根据所选通道,写入相应通道的基地址寄存器和当前地址寄存器的初始值; (3)写入基字节计数寄存器和当前字节计数寄存器的初始值; (4)写入方式控制寄存器,以确定8237A的工作方式和传送类型; (5)写入屏蔽寄存
11、器; (6)写入命令寄存器,以控制8237A的工作; (7)写入请求寄存器。,【例8.1】已知某系统采用一片8237A来设计DMA传输电路,给定8237A的基地址为00H。利用通道0从磁盘将一个1K字节的数据块传送到内存06000H开始的区域中,每传送一个字节,地址增1,采用数据块连续传送方式,禁止自动预置,外设的DMA请求信号DREQ和响应信号DACK均为高电平有效。对8237A的初始化程序如下: DMA EQU 00H OUT DMA+0DH,AL MOV AX,6000H OUT DMA+00H,AL MOV AL,AH OUT DMA+00H,AL MOV AX,0400H DEC A
12、X OUT DMA+01H,AL MOV AL,AH OUT DMA+01H,AL,写入方式字:数据块传送,地址增量,禁止自动预置,写传送,选择通道 MOV AL,10000100B OUT DMA+0BH,AL 写入屏蔽字:通道0屏蔽位清0 MOV AL,00H OUT DMA+0AH,AL 写入命令字:DACK和DREQ为高电平,固定优先级,非存储器间传送 MOV AL,10000000B OUT DMA+08H,AL 写入请求字:通道0产生请求,用软件启动8237A MOV AL,04H OUT DMA+09H,AL,2. 8237A的应用为了掌握8237A的编程方法,我们结合IBM P
13、C/XT计算机系统中8237A的应用来进行说明。 【例8.2】在PC/XT机中,8237A的通道0用来对动态RAM进行刷新,通道2和通道3分别用来进行软盘驱动器和内存之间的数据传送以及硬盘和内存之间的数据传送,通道1用来提供其它传送功能,比如网络通讯功能。系统采用固定优先级,即动态RAM刷新的优先权最高。4个DMA请求信号中,只有DREQ0是和系统板相连的,DREQ1DREQ3几个请求信号都接到总线扩展槽的引脚上,由对应的软盘接口板和网络接口板提供。同样,DMA应答信号DACK0送往系统板,而DACK1DACK3信号则送往扩展槽。该例中的8237A对应端口地址为0000H000FH,在下面的编
14、程中我们采用标号DMA来代表首地址0000H。,对8237A的初始化及测试程序如下。 初始化程序段: MOV AL, 04 ;4个DMA请求信号 MOV DX, DMA+8 ;DMA+8为控制寄存器的端口号 OUT DX, AL ;输出控制命令,关闭8237A MOV AL, 00 MOV DX, DMA+0DH ;DMA+0DH为主清除命令端口号 OUT DX, AL ;发送主清除命令 MOV DX, DMA ;DMA为通道0的地址寄存器对应端口号 MOV CX,0004 MOV AL, 0FFH OUT DX, AL ;写入地址低位 OUT DX, AL ;写入地址高位 INC DX IN
15、C DX ;指向下一通道 LOOP WRITE ;使4个通道地址寄存器均为FFFFH,MOV DX, DMA+0BH ;DMA+0BH为模式寄存器的端口 MOV AL,58H OUT DX, AL MOV AL, 42H OUT DX, AL ;设置通道2模式 MOV AL, 43H OUT DX, AL ;设置通道3模式 MOV DX, DMA+8 ;DMA+8为控制寄存器的端口号 MOV AL, 0 OUT DX, AL MOV DX, DMA+0AH ;DMA+0AH为屏蔽寄存器的端口号 OUT DX, AL ;通道0去除屏蔽 MOV AL, 01 OUT DX, AL ;通道2去除屏蔽
16、 MOV AL, 01 OUT DX, AL ;通道1去除屏蔽 MOV AL, 03 OUT DX, AL ;通道3去除屏蔽,对通道13的地址寄存器的值进行测试: MOV DX, DMA+2 ;DMA+2为通道1地址寄存器端口 MOV CX, 0003 READ:IN AL, DX ;读字节低位 MOV AH, AL IN AL, DX ;读字节高位 CMP AX, 0FFFFH ;比较读取的值和写入的值是否相等 JNZ STOP ;不等,则转STOPH INC DX INC DX ;指向下一个通道 LOOP READ ;测试下一个通道 ;后续测试 STOP:HLT ;出错则停机等待,本章小结
17、,本章介绍了可编程接口芯片8237A的内部结构、引脚功能、编程结构和主要应用。8237A DMA控制器有两种不同的工作状态,即总线主模块和总线从模块。在总线主模块下DMA控制器一方面可以控制系统总线,而在总线从模块下可以和其他接口一样,接受CPU对它的读/写操作。8237A DMA控制器含有4个独立的DMA通道,可以用来实现内存到接口、接口到内存及内存到内存之间的高速数据传送。,8253为定时器/计数器接口芯片,具备定时和计数两个基本功能,内部包含3个16位计数器,每个计数器可按二进制或十进制计数,有6种工作方式,可通过编程选择。在不同的工作方式下,计数过程的启动方式、OUT端的输出波形都不一样。自动重复功能和GATE的控制作用以及写入新的计数初值对计数器的工作过程产生的影响是不一样的。,本章小结,第8章内容到此结束谢谢各位 !,