《微型计算机原理与应用 教学课件 ppt 作者 王法能 杨永生 主编 潘晓中 周晓娟 副主编 第十二章》由会员分享,可在线阅读,更多相关《微型计算机原理与应用 教学课件 ppt 作者 王法能 杨永生 主编 潘晓中 周晓娟 副主编 第十二章(23页珍藏版)》请在金锄头文库上搜索。
1、第十二章 可编程DMA控制8237A,【本章重点】 本章以可编程控制器8237A为例重点简述了DMA的工作原理和工作方式、8237A的连接应用。 【本章难点】 本章难点是理解DMA的工作原理、 8237A的内部工作寄存器的使用,会写8237A的初始化编程。,12.1 DMA的工作过程 1. DMA的工作过程大致如下: 1)外设向DMAC发出DMA传送请求。 2)DMAC通过连接到CPU的HOLD信号向CPU提出DMA请求。 3)CPU在完成当前总线周期后会立即对DMA请求做出响应。 4)待CPU将总线置高阻放弃总线控制权。 5)DMAC送出地址信号和控制信号,实现外设与内存或内 存与内存的数据
2、传送。 6)DMAC将规定的数据字节传送完之后,通过向CPU发 HOLD信号,撤消对CPU的DMA请求。,12.2 DMA8237A控制器的编程 12.2.1 8237的引脚功能,图12-1 8237A可编程DMA控制器引脚,12.2.2 8237A的内部寄存器及工作方式 1当前地址寄存器(CAR) 用于存放DMA传送时的16位存储器地址,每一个通道有一个当前地址寄存器。DMA每传送一个字节数据后,CAR地址值自动加1或减1;在编程状态下,CPU以字节为单位对CAR进行读出或写入操作。当工作方式寄存器(MR)设置为自动预置方式时,当每次字计数为0或出现有效低电平时,基地寄存器(BR)可自动地将
3、初始值重新装入CAR。 2当前字数寄存器(CWCR) 它用于存放当前的字节数,最大可达64KB。每一个通道都有一个16位的当前字计数寄存器。在DMA传送操作时,每传送一个字节,该寄存器的内容减1,当计数值变为零时,便自动产生终止计数信号。在编程状态下,CPU以字节为单位进行操作。在自动预置方式下,当计数减为0或出现有效低电平时,基字计数寄存器(BWC)可自动地将初始值重新装入CWCR。,3基址寄存器(BR) 用于存放对应通道的当前地址寄存器的初始值,为16位寄存器。与当前地址寄存器共用一个I/O端口地址,在编程时,它与当前地址寄存器被同时写入某一起始地址。在通道选择自动预置方式时,在DMA操作
4、结束后,由基址寄存器对当前地址寄存器自动重装初始值。 4基字计数寄存器(BWC) 用于存入该通道数据传送的个数,它与当前字计数寄(CWCR)一一对应,并使用相同的端口地址。在编程时,它与当前字数寄存器同时写入要传送的数据个数。如果在自动预置方式时,在DMA操作结束后,由基字计数寄存器自动重装当前字计数寄存器的初始值。 5方式寄存器(MR) 它用于控制某个通道的DMA传送方式和传送方向,每一个通过都有一个方式寄存器,其格式如图12-2所示。,图12-2 工作方式寄存器,7 6 5 4 3 2 1 0,00选择请求方式 01选择单字节方式 10选择块方式 11选择级联方式,0选择地址增量 1选择地
5、址减量,0禁止自动预置 1允许自动预置,00选择通道0 01选择通道1 10选择通道2 11选择通道3,00效验传输 01写传输 10读传输 11非法 XX若D7D6=11,则无效,6命令寄存器(CR) 其格式和各位定义如图12 4所示,它确定了整个8237A的总体特性,CPU可通过其编程对8237A进行控制操作,并在复位时,将其清除。,0DACK低电平有效 1DACK高电平有效,0DREQ高电平有效 1DREQ低电平有效,0不扩展写选择 1扩展写选择 XD3=1时不起作用,0固定优先权 1循环优先权,7 6 5 4 3 2 1 0,0禁止存储器到存储器传输 1允许存储器到存储器传输,0禁止通
6、道0地址保持不变 1允许存储器到存储器传输 XD0=0时不起作用,0允许8237A操作 1禁止8237A操作,0正常时序 1压缩时序 XD0=1不起作用,图12-4 命令寄存器,7请求寄存器(RR) 8237A的4个通道都有一个于其相对应的请求触发器,它是用来设置DMA请求标志的。在8237A控制器内,是4个请求触发器对应1个DMA请求寄存器。我们知道,DMA请求可以由硬件发出,也可由软件发出,对于硬件是通过DREQ引脚引入DMA请求的,对于软件,则是通过对DMA请求标志的设置来发出请求的,在存储器与存储器进行数据传输时,因没有外部DREQ请求信号,因此,由软件产生一个DMA请求信号来启动,D
7、MA传输请求寄存器的格式如图125所示。 DMA请求寄存器中的D1D0位用来指出4个通道信号,D2表示是否对相应通道设置DMA请求,D2为1时,相应通道的DMA请求触发器置1,产生DMA请求,D2为0时,则无请求。,7 6 5 4 3 2 1 0,00选择通道0 01选择通道1 10 选择通道2 11选择通道3,0复位请求方式 1置位请求方式,无关,图12-5请求寄存器,8屏蔽寄存器 8237A中的屏蔽寄存器有两种: (1) 通道屏蔽寄存器。通过编程来设置单个通道的屏蔽控制,在8237A控制器内,每个通道都有一个屏蔽触发器,它们对应1个屏蔽寄存器。其格式如图126(a)所示。屏蔽寄存器的D1D
8、0位用来指出通道号,在D2位为1时,表示对应的通道设置DMA屏蔽。D2位为0时,表示不屏蔽。 (2)综合屏蔽命令格式(或称为主屏蔽寄存器)。其格式如图126(b)所示。8237A允许使用综合屏蔽命令一次完成对4个通道的屏蔽设置。,(a) 通道屏蔽寄存器(MRSR),(b) 主屏蔽寄存器(MSR),9状态寄存器(SR) 它给出8237A每个通道的状态,其格式如图127所示 : D0D3位指出4个通道的计数终止TC状态,如果计数终止或外部产生信号,该位置为1,同时停止DMA操作,D4D7位为正在等待处理的4个通道的DMA请求状态,1表示该位的通道有DMA请求,0表示没有DMA请求。,图12-7 状
9、态寄存器,10暂存寄存器 它在存储器和存储器之间传输时,进行数据保持。当传输完成时,暂存寄存器中始终保持最后传输的一个字节,在编程状态,该寄存器的内容可由CPU读出,使用RESET信号可清除暂存器的内容。 12.2.3.8237A寻址及连接 8237A内部共有16个I/0端口地址,它们是由地址线A0A3控制选择的,其中地址00H07H分配给4个通道的基址寄存器和当前地址寄存器。基字计数寄存器和当前字计数寄存器。由于这些寄存器都是16位的。而且,基址寄存器和当前地址寄存器共用一个端口地址,基字计数寄存器和当前字计数寄存器共用一个端口地址。这样在CPU的基址寄存器进行写操作时,当前地址寄存器也写入
10、同样的数据,与此相同CPU对基字计数寄存器进行写操作时当前字计数寄存器也写入同样数据。,0 1000 0 1 0 1000 1 0 0 1001 0 1 0 1001 1 0 0 1010 0 1 0 1010 1 0 0 1011 0 1 0 1011 1 0 0 1100 0 1 0 1100 1 0 0 1101 0 1 0 1101 1 0 0 1110 0 1 0 1110 1 0 0 1111 0 1 0 1111 1 0,读状态寄存器 写命令寄存器 非法 写请求寄存器 非法 写单通道屏蔽寄存器 非法 写方式寄存器 非法 字节指针触发清零 读暂存寄存器 总清 非法 清屏蔽寄存器 非
11、法 写四通道屏蔽寄存器,软件命令寄存器的寻址表12-1A,12.2.4.8237A的编程和应用 (1) 命令寄存器复位。 (2)将起始地址的低8位和高8位分别写入地址寄存器。 (3)将字计数值的低8位和高8位分别写入字计数寄存器。 (4)写方式寄存器。 (5)写屏蔽寄存器。 (6)写命令寄存器。,1,通道,寄存器,操作,基和当前字数,写,0 1 0 0 0 0 1,0,1,W,0,-,W,7,W,8,-,W,15,0,当前字数,读,0 0 1 0 0 0 1,0,1,W,0,-,W,7,W,8,-,W,15,基和当前地址,写,0 1 0 0 0 1 0,0,1,A,0,-,A,7,A,8,-,
12、A,15,A,3,A,2,A,1,A,0,字节,指针,触,发,器,D,0,-,D,7,基和当前地址,写,0 1 0 0 0 0 0,0,1,A,0,-,A,7,A,8,-,A,15,当前地址,读,0 0 1 0 0 0 0,0,1,A,0,-,A,7,A,8,-,A,15,当前地址,读,0 0 1 0 1 0 0,0,1,A,0,-,A,7,A,8,-,A,15,基和当前字数,写,0 1 0 0 0 1 1,0,1,W,0,-,W,7,W,8,-,W,15,1,当前字数,读,0 0 1 0 0 1 1,0,1,W,0,-,W,7,W,8,-,W,15,8237A个寄存器殉职编码表 12-1B,12.2.5 8237应用实例 如图12-8所示,它由8237DMA控制器、74LS373高位地址锁存器及其外围电路组成,8237初始化通过初始化程序完成存储器到存储器的数据传输。各信道寄存器地址分配如表 12-2所示。 表12-2 8237信道寄存器地址分配,8086,12-8 8237A与8086的连接图,图12-9程序流程图,流程图如图12-9所示,所编写的程序如下 :,本章到此结束,