第六章 DMA控制器和定时计数器_第1页
第六章 DMA控制器和定时计数器_第2页
第六章 DMA控制器和定时计数器_第3页
第六章 DMA控制器和定时计数器_第4页
第六章 DMA控制器和定时计数器_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一讲: 第六章DMA控制器和定时/计数器回 顾:微型计算机与外部设备之间的数据传送控制方式本讲重点:DMA的基本概念,DMA 控制器芯片8237的性能概述,内、外部结构,工作周期,工作方式,通道的优先级及数据传输速率。讲授内容:6. 1 DMA控制器Intel8237一、 DMA概述我们已经介绍了微机系统中各种常用的数据输入输出方法,有程控法(包括无条件及条件传送方式)和中断法,这些方法适用于CPU与慢速及中速外设之间的数据交换。但当高速外设要与系统内存或者要在系统内存的不同区域之间,进行大量数据的快速传送时,就在一定程度上限制了数据传送的速率。以Intel8088CPU为例,CPU从内存(或外设)读数据到累加器,然后再写到外设端口(或内存)中,若包括修改内存地址,判断数据块是否传送完,Intel8088CPU(时钟接近5MHz)传送一个字节约需要几十微秒的时间,由此可大致估计出用程控及中断的方式来进行数据传送,其数据传送速率大约为每秒几十KB字节。为了提高数据传送的速率,人们提出了直接存储器存取(DMA)的数据传送控制方式,即在一定时间段内,由DMA控制器取代CPU,获得总线控制权,来实现内存与外设或者内存的不同区域之间大量数据的快速传送。图6-1 DMAC的工作电路典型的DMAC的工作电路如图6-1。DMA数据传送的工作过程大致如下: 外设向DMAC发出DMA传送请求。 DMAC通过连接到CPU的HOLD信号向CPU提出DMA请求。 CPU在完成当前总线操作后会立即对DMA请求做出响应。CPU的响应包括两个方面:一方面,CPU将控制总线、数据总线和地址总线浮空,即放弃对这些总线的控制权;另一方面,CPU将有效的HLDA信号加到DMAC上,用此来通知DMAC,CPU已经放弃了总线的控制权。 待CPU将总线浮空,即放弃了总线控制权后,由DMAC接管系统总线的控制权,并向外设送出DMA的应答信号。 由DMAC送出地址信号和控制信号,实现外设与内存或内存不同区域之间大量数据的快速传送。 DMAC将规定的数据字节传送完之后,通过向CPU发HOLD信号,撤消对CPU的DMA请求。CPU收到此信号,一方面使HLDA无效,另一方面又重新开始控制总线,实现正常取指令、分析指令、执行指令的操作。需要注意的是,在内存与外设之间进行DMA传送期间,DMAC控制器只是输出地址及控制信号,而数据传送是直接在内存和外设端口之间进行的,并不经过DMAC;对于内存不同区域之间的DMA传送,则应先用一个DMA存储器读周期将数据从内存的源区域读出,存入到DMAC的内部数据暂存器中,再利用一个DMA存储器写周期将该数据写到内存的目的区域中去。二、 DMA控制器芯片Intel 8237的性能概述Intel8237是8086/8088微机系统中常用的DMAC芯片,有如下性能:1 含有4个相互独立的通道,每个通道有独立的地址寄存器和字节数寄存器,而控制寄存器、状态寄存器为四个通道所共用。2每个通道的DMA请求可以分别被允许/禁止。3每个通道的DMA请求有不同的优先权,可以可以通过程序设置为固定的或者是旋转的方式。4通道中地址寄图6-3 8237的内部结构组成存器的长度为16位,因而一次DMA传送的最大数据块的长度为64K字节。5 8237有4种工作方式,分别为:单字节传送、数据块传送、请求传送、级连方式。6 允许用输入信号来结束DMA传送或重新初始化。78237可以级连以增加通道数。三、 8237的内部组成与结构 8237的方框图如图6-3所示,主要包含以下几个部分:1四个独立的DMA通道 每个通道都有一个16位的基地址寄存器,一个16位的基字节数计数器, 一个16位的当前地址寄存器和一个16位的当前字节数计数器及一个8位的方 式寄存器,方式寄存器接收并保存来自于CPU的方式控制字,使本通道能够 工作于不同的方式下;2定时及控制逻辑电路对在DMA请求服务之前,CPU编程对给定的命令字和方式控制字进行译 码,以确定DMA的工作方式,并控制产生所需要的定时信号;3优先级编码逻辑 对通道进行优先级编码,确定在同时接收到不同通道的DMA请求时,能够确定相应的先后次序。通道的优先级可以通过编程确定为是固定的或者是旋转的。4共用寄存器 除了每个通道中的寄存器之外,整个芯片还有一些共用的的寄存器:包括1个16位的地址暂存寄存器,1个16位的字节数暂存寄存器,1个8位的状态寄存器,1个8位的命令寄存器,1个8位的暂存寄存器,1个4位的屏蔽寄存器和1个4位的请求寄存器等,我们将对这些寄存器的功能与作用,作较为详细的介绍。8237内部寄存器的类型和数量如表6-1所示,其中,凡数量为4个的寄存器,则每个通道一个,凡数量只有一个的,则为各通道所公用。 表6-1 8237的内部寄存器寄存器名长度(Bit)数量寄存器名长度(Bit)数量基地址寄存器基字节数寄存器当前地址寄存器当前字节数寄存器地址暂存寄存器字节数暂存寄存器161616161616444411状态寄存器命令寄存器暂存寄存器方式寄存器屏蔽寄存器请求寄存器88864411141158237的数据引线,地址引线都有三态缓冲器,因而可以接也可以释放总线。四、 8237的工作周期在设计8237时,规定它具有两种主要的工作周期(或工作状态),即空闲周期和有效周期,每一个周期又是由若干时钟周期所组成的。1空闲周期(lade cycle)当8237的任一通道都无DMA请求时,则其处于空闲周期或称为SI状态,空闲周期由一系列的时钟周期组成,在空闲周期中的每一个时钟周期,8237只做两项工作:l 采样各通道的DREQ请求输入线,只要无DMA请求,则其始终停留在SI状态;l 由CPU对8237进行读/写操作,即采样片选信号,只要信号变为有效的低电平,则表明CPU要对8237进行读/写操作,当8237采样为低电平而DREQ也为低,即外部设备没有向8237发DMA请求的情况下,则进入CPU对8237的编程操作状态,CPU可以向8237的内部寄存器进行写操作,以决定或者改变8237的工作方式,或者对8237内部的相关寄存器进行读操作,以了解8237的工作状态。CPU对8237进行读/写操作时,由地址信号A3A0来选择8237内部的不同寄存器(组),由读/写控制信号及来控制读/写操作。由于8237内部的地址寄存器和字节数计数器都是16位的,而数据线是8位的,所以在8237的内部,有一个高/低字节触发器,称为字节指针寄存器,由它来控制8位信息是写入16位寄存器的高8位还是低8位,该触发器的状态交替变化,当其状态为0时,进行低字节的读/写操作;而当其状态为1时,则进行低字节的读/写操作。2有效周期(Active Cycle)当处于空闲状态的8237的某一通道接收到外设提出的DMA请求DREQ时,它立即向CPU输出HRQ有效信号,在未收到CPU回答时,8237仍处于编程状态,又称初始状态,记为S0状态。经过若干个S0状态后,当8237收到来自于CPU的HLDA应答信号后,则进入工作周期,或称为有效周期,或者说8237由S0状态进入了S1状态。 S0状态是DMA服务的第一个状态,在这个状态下,8237已接收了外设的请求,向CPU发出了DMA请求信号HRQ,但尚未收到CPU对DMA请求的应答信号HLDA;而S1状态则是实际的DMA传送工作状态,当8237接收到CPU发来的HLDA应答信号时,就可以由S0状态转入S1状态,开始DMA传送。在内存与外设之间进行DMA传送时,通常一个S1周期由4个时钟周期组成,即S1、S2、S3、S4,但当外设速度较慢时,可以插入SW等待周期;而在内存的不同区域之间进行DMA传送时,由于需要依次完成从存储器读和向存储器写的操作,所以完成每一次传送需要8个时钟周期,在前四个周期S11、S12、S13、S14完成从存储器源区域的读操作,后四个时钟周期S21、S22、S23、S24完成向存储器目的区域的写操作。五、 8237的外部结构8237是具有40个引脚的双列直插式集成电路芯片,其引脚如图6-4所示:1 CLK:时钟信号输入引脚,对于标准的8237,其输入时钟频率为3MHz,对于8237-2,其输入时钟频率可达5MHz。2:芯片选择信号,输入引脚。3RESET:复位信号,输入引脚,用来清除8237中的命令、状态请求和临时寄存器,且使字节指针触发器复位并置位屏蔽触发器的所有位(即使所有通道工作在屏蔽状态),在复位之后,8237工作于空闲周期SI。4READY:外设向8237提供的高电平有效的“准备好”信号输入引脚,若8237在S3状态以后的时钟下降沿检测到READY为低电平,则说明外设还未准备好下一次DMA操作,需要插入SW状态,直到READY引脚出现高电平为止。5DREQ0DREQ3:DMA请求信号输入引脚,对应于四个独立的通道,DREQ的有效电平可以通过编程来加以确定,优先级可以固定,也可以旋转。6DACK0DACK3:对相应通道DREQ请求输入信号的应答信号输出引脚。7HRQ:8237向CPU提出DMA请求的输出信号引脚,高电平有效。8HLDA:CPU对HRQ请求信号的应答信号输入引脚,高电平有效。9DB0DB7:8条双向三态数据总线引脚。在CPU控制系统总线时,可以通过DB0DB7对8237编程或读出8237的内部状态寄存器的内容;在DMA操作期间,由DB0DB7输出高8位地址信号A8A15,并利用ADSTB信号锁存该地址信号。在进行内存不同区域之间的DMA传送时,除了送出A8A15地址信号外,还分时输入从存储器源区域读出的数据,送入8237的暂存寄存器中,等到存储器写周期时,再将这些数据通过这8个引脚,由8237的暂存寄存器送到系统数据总线上,然后写入到规定的存储单元中去。10A3A0 :4条双向三态的低位地址信号引脚。在空闲周期,接收来自于CPU的四位地址信号,用以寻址8237内部的不同的寄存器(组);在DMA传送时,输出要访问的存储单元或者I/O端口地址的低4位。11A7A4:4条三态地址信号输出引脚。在DMA传送时,输出要访问的存储单元或者I/O端口地址的中4位。12:低电平有效的双向三态信号引脚。在空闲周期,它是一条输入控制信号,CPU利用这个信号读取8237内部状态寄存器的内容;而在DMA传送时,它是读端口控制信号输出引脚,与相配合,使数据由外设传送到内存。13:低电平有效的双向三态信号引脚,其功能与相对应。14:低电平有效的双向三态信号引脚,用于DMA传送,控制存储器的读操作。15:低电平有效的双向三态信号引脚,用于DMA传送,控制存储器的写操作。16AEN:高电平有效的输出信号引脚,由它把锁存在外部锁存器中的高8位地址送入系统的地址总线,同时禁止其它系统驱动器使用系统总线。17ADSTB:高电平有效的输出信号引脚,此信号把DB7DB0上输出的高8位地址信号锁存到外部锁存器中。18:双向,当字节数计数器减为0时,在上输出一个有效的低电平脉冲,表明DMA传送已经结束;也可接收外部的信号,强行结束8237的DMA操作或者重新进行8237的初始化。当不使用端时,应通过数千的电阻接到高电平上,以免由它输入干扰信号。19+5V、GND及N/C引脚六、 8237的工作方式8237的各个通道在进行DMA传送时,有四种工作方式1单字节传送方式每次DMA操作仅传送一个字节的数据,完成一个字节的数据传送后,8237将当前地址寄存器的内容加1(或减1),并将当前字节数寄存器的内容减1,每传送完这一个字节,DMAC就将总线控制权交回CPU。2数据块传送在这种传送方式下,DMAC一旦获得总线控制权,便开始连续传送数据。每传送一个字节,自动修改当前地址及当前字节数寄存器的内容,直到将所有规定的字节全部传送完,或收到外部信号,DMAC才结束传送,将总线控制权交给CPU,一次所传送数据块的最大长度可达64KB,数据块传送结束后可自动初始化。显然,在这种方式下,CPU可能会很长时间不能获得总线的控制权。这在有些场合是不利的,例如,PC机就不能用这种方式,因为在块传送时,8088不能占用总线,无法实现对DRAM的刷新操作。3请求传送只要DREQ有效,DMA传送就一直进行,直到连续传送到字节计数器为0或外部输入使变低或DREQ变为无效时为止。4级联方式利用这种方式可以把多个8237连接在一起,以便扩充系统的DMA通道数。下一级的HRQ接到上一级的某一通道的DREQ上,而上一级的响应信号DACK图6-5 8237级联方式工作框图可接下一级的HLDA上,其连接如图6-5所示。在级联方式下,当第二级8237的请求得到响应时,第一级8237仅应输出HRQ信号而不能输出地址及控制信号,因为,第二级的8237才是真正的主控制器,而第一级的8237仅应起到传递DREQ请求信号及DACK应答信号的作用。七、 8237的DMA传输类型DMA所支持的DMA传送,可以在I/O接口到存储器;存储器到I/O接口及内存的不同区域之间进行,它们具有不同的特点,所需要的控制信号也不相同1I/O接口到存储器的传送。当进行由I/O接口到存储器的数据传送时,来自I/O接口的数据利用DMAC送出的控制信号,将数据输送到系统数据总线D0D7上,同时,DMAC送出存储器单元地址及控制信号,将存在于D0D7上的数据写入所选中的存储单元中。这样就完成了由I/O接口到存储器一个字节的传送。同时DMAC修改内部地址及字节数寄存器的内容。2 存储器到I/O接口 与前一种情况类似,在进行这种传送时,DMAC送出存储器地址及控制信号,将选中的存储单元的内容读出放在数据总线D0D7上,接着,DMAC送出控制信号,将数据写到规定的(预选中)端口中去,而后MDAC自动修改内部的地址及字节数寄存器的内容。3 存储器到存储器8237具有存储器到存储器的传送功能,利用8237编程命令寄存器,可以选择通道0和通道1两个通道实现由存储器到存储器的传送。在进行传送时采用数据块传送方式,由通道0送出内存源区域的地址和控制信号,将选中内存单元的的数据读到8237的暂存寄存器中,通道0修改地址及字节数寄存器的值;接着由通道1输出内存目的区域的地址及控制信号,将存放在暂存寄存器中的数据,通过系统数据总线,写入到内存的目的区域中去,尔后通道1修改地址和字节数寄存器的内容,通道1的字节计数器减到零或外部输入时可结束一次DMA传输过程。八、 8237各个通道的优先级及传输速率1优先级8237有两种优先级方案可供编程选择:(1)固定优先级规定各通道的优先级是固定的,即通道0的优先级最高,依次降低,通道3的优先级最低。(2)循环优先级规定刚被服务通道的优先级最低,依次循环。这就可以保证4个通道的优先级是动态变化的,若3个通道已经被服务则剩下的通道一定是优先级最高的。2传送速率在一般情况下,8237进行一次DMA传送需要4个时钟周期(不包括插入的等待周期SW)。例如,PC机的时钟周期约210ns,则一次DMA传送需要210ns4+2l0ns1050ns。多加一个210 ns是考虑到人为插入一个SW的缘故。另外,8237为了提高传送速率,可以在压缩定时状态下工作。在压缩定时状态下,每个DMA总线周期仅用2个时钟周期就可以实现,从而可以大幅度地提高数据的传送速率。习题与思考:1 什么叫DMA传送方式?试说明DMA方式传送数据的主要步骤。 2试比较DMA传输、查询式传输及中断方式传输之间的优缺点和适用场合? 3DMA控制器芯片Intel8237有哪几种工作方式?各有什么特点? 4Intel8237支持哪几种DMA传输类型?第二讲: 6. 1 DMA控制器Intel8237回 顾:DMA的基本概念,DMA 控制器芯片8237的性能概述,内、外部结构,工作周期,工作方式,通道的优先级及数据传输速率。本讲重点:DMA 控制器芯片8237的内部寄存器,端口地址,编程与应用。讲授内容:九、 8237的内部寄存器组 8237有4个独立的DMA通道,有许多内部寄存器。前面表6-1已经给出了这些寄存器的名称、长度和数量,我们来详细介绍各个寄存器的功能和作用。1基地址寄存器用以存放16位地址,只可写入而不能读出。在编程时,它与当前地址寄存器被同时写入某一起始地址,可用作内存区域的首地址或末地址。在8237进行DMA数据传送的工作过程中,其内容不发生变化,只是在自动预置时,其内容可被重新写到当前地址寄存器中去。2基字节数寄存器用以存放相应通道需要传送数据的字节数,只可写入而不能读出。在编程时它与当前字节数寄存器被同时写入要传送数据的字节数。在8237进行DMA数据传送的工作过程中,其内容保持不变,只是在自动预置时,其内容可以被重新写到当前字节数寄存器中去。3当前地址寄存器存放DMA传送期间的地址值。每次传送后自动加l或减l。CPU可以对其进行读写操作。在选择自动预置时,每当字节计数值减为0或外部有效后,就会自动将基地址寄存器的内容写入当前地址寄存器中,恢复其初始值。4当前字节数寄存器存放当前的字节数。每传送一个字节,该寄存器的内容减1。当计数值减为0或接收到来自外部的信号时,会自动将基字节数寄存器的内容写入该寄存器,恢复其初始计数值,即为自动预置。5地址暂存寄存器和字节数暂存寄存器这两个16位的寄存器和CPU不直接发生关系,我们也不必要对其进行读/写操作,因而对如何使用8237没有影响。6方式寄存器每个通道有一个8位的方式寄存器,但是它们占用同一个端口地址,用来存放方式字,依靠方式控制字本身的特征位来区分写入不同的通道,用来规定通道的工作方式,各位的作用如下:D7D6D5D4D1D3D2D0 00 通道000 请求传输方式 01 通道101 单字节传输方式 通道选择 10 通道210 块传输方式 方式选择 11 通道311 级联传输方式 00 校验传输 传输类型选择 01 写传输 10 读传输 11 无意义 自动预置功能选择,0禁止;1允许。 地址增/减1选择,0增1;1减1。 图6-6 8237的方式寄存器自动预置就是当某一通道按要求将数据传送完后,又能自动预置初始地址和传送的字节数,而后重复进行前面已进行过的过程。校验传送就是实际并不进行传送,只产生地址并响应信号,不产生读写控制信号,用以校验8237的功能是否正常。7命令寄存器8237的命令寄存器存放编程的命令字,命令字各位的功能如图6-7所示,D7D6D5D4D1D3D2D00 DACK低电平有效 0 禁止存储器到存储器传输1 DACK高电平有效 1 允许存储器到存储器传输 0 DREQ高电平有效 0 禁止通道0地址保持 1 DREQ低电平有效 1 允许通道0地址保持。D0=0时无意义 0 不扩展写入 0 启动8237工作 1 扩展写入 1 停止8237的工作 0 固定优先权 0 正常时序 1 旋转优先权 1 压缩时序图6-7 8237的命令寄存器其中:D0位用以规定是否允许采用存储器到存储器的传送方式。若允许这样做,则利用通道0和通道1来实现。D1位用以规定通道0的地址是否保持不变。如前所述,在存储器到存储器传送中,源地址由通道0提供,读出数据到暂存寄存器,而后,由通道l送出目的地址,将数据写入目的区域;若命令字中D10,则在整个数据块传送中(块长由通道1决定)保持内存源区域地址不变,因此,就会把同一个数据写入到整个目的存储器区域中。D2位是允许或禁止8237芯片工作的控制位。D3位用于选择总线周期中写信号的定时。例如,PC机中动态存储器写是由写信号的上升沿启动的。若在DMA周期中写信号来得太早,可能造成错误,所以PC机选择D30。命令字的其他位容易理解,不再说明。D5位用于选择是否扩展写信号。在D3=0(正常时序)时,如果外设速度较慢,有些外设是用8237A送出的和信号的下降沿来产生的READY信号的。为提高传送速度,能够使READY信号早些到来,须将和信号加宽,以使它们提前到来。因此,可以通过令D5=1使和信号扩展2个时钟周期提前到来。8请求寄存器用于在软件控制下产生一个DMA请求,就如同外部DREQ请求一样。图6-8所示,为请求字的格式,D0D1的不同编码用来表示向不同通道发出DMA请求。在软件编程时,这些请求是不可屏蔽的,利用命令字即可实现使8237按照命令字的D0D1所指的通道,完成D2所规定的操作,这种软件请求只用于通道工作在数据块传送方式之下。D7D6D5D4D1D3D2D0 00 通道0 无用 01 通道1 通道选择 10 通道2 11 通道3 0复位请求位;1置位请求位。图6-8 8237请求寄存器9屏蔽寄存器8237的屏蔽字有两种形式:单个通道屏蔽字。这种屏蔽字的格式如图6-9所示。利用这个屏蔽字,每次只能选择一个通道。其中D0D1的编码指示所选的通道,D2l表示禁止该通道接收DREQ请求,当D20时允许DREQ请求。四通道屏蔽字。可以利用这个屏蔽字同时对8237的4个通道的屏蔽字进行操作,故又称为主屏蔽字。该屏蔽字的格式如图6-10所示。它与单通道屏蔽字占用不同的I/O接口地址,以此加以区分。D7D6D5D4D1D3D2D0 00 通道0 无用 01 通道1 通道选择 10 通道2 11 通道3 0清除屏蔽位;1置屏蔽位。图6-9 8237的单通道屏蔽寄存器D7D6D5D4D1D3D2D0 0 清通道0屏蔽位 无用 1 置通道0屏蔽位 0 清通道1屏蔽位 1 置通道1屏蔽位 0 清通道2屏蔽位 1 置通道2屏蔽位 0 清通道3屏蔽位 1 置通道3屏蔽位图6-10 8237四通道屏蔽寄存器D7D6D5D4D1D3D2D0D7=1 通道3请求 D0=1 通道0已终止计数D6=1 通道2请求 D1=1 通道1已终止计数D5=1 通道1请求 D2=1 通道2已终止计数D4=1 通道0请求 D3=1 通道3已终止计数图6-11 8237的状态寄存器10状态寄存器状态寄存器存放各通道的状态,CPU读出其内容后,可得知8237的工作状况。主要有:哪个通道计数已达到计数终点对应位为1;哪个通道的DMA请求尚未处理对应位为1。状态寄存器的格式如图6-11所示。11暂存寄存器用于存储器到存储器传送过程中对数据的暂时存放。12字节指针触发器这是一个特殊的触发器,用于对前述各16位寄存器的寻址。由于前述各16位寄存器的读或写必须分两次进行,先低字节后高字节。为此,要利用字节指针触发器,当此触发器状态为0时,进行低字节操作。一旦低字节读/写操作完成后,字节指针触发器会自动置l,再操作一次又会清零。利用这种机制,就可以进行双字节读写操作,这样16位寄存器可以仅占用一个外设端口地址,高、低字节共用。十、 8237的编程及应用18237的寻址及连接 8237 4个通道中的寄存器及其它各种寄存器的寻址编码如表6-2和表6-3所示。从表6-2中可以看到,各通道的寄存器通过和地址线A3A0规定不同的地址,高低字节再由字节指针触发器来决定。其中有的寄存器是可读可写的,而有的寄存器是只写的。从表6-3可以看出,利用和A3A0规定寄存器的地址,再利用或控制对其进行读或写操作。需要注意的是,方式寄存器每通道一个,但仅分配一个端口地址,靠方式控制字的D1和D0位来区分不同通道。28237在系统中的典型连接我们注意到8237只能输出A0A1516位地址信号,这对于一般8位CPU构成的系统来说是比较方便的,因为大多数8位机的寻址范围就是64KB。而在8086/88系统中,系统的寻址范围是1MB,地址线有20条,即A0A19。为了能够在8086/88系统中使用8237来实现DMA,需要用硬件提供一组4位的页寄存器。通道0、1、2、3各有一个4位的页寄存器。在进行DMA传送之前,这些页寄存器可利用I/O地址来装入和读出。当进行DMA传送时,DMAC将A0A15放在系统总线上,同时页寄存器把A16A19也放在系统总线上,形成A0A19这20位地址信号实现DMA传送。其地址产生如图6-12所示。图6-13是8237在PC机中的连接简图。利用74LS138译码器产生8237的,8237的接口地址可定为000H00FH (注:在译码时XA4未用)。8237利用页寄存器74LS670、三态锁存器74LS373和三态门741S244形成系统总线的地址信号A0A19。8237的、接到74LS245上,表6-2 8237各通道寄存器的寻址通道寄存器操作 A3 A2 A1 A0字节指针触发器D0D70基和当前地址写0 1 0 0 0 0 00A0A71A8A15当前地址读0 0 1 0 0 0 00A0A71A8A15基和当前字节数写0 1 0 0 0 0 10W0W71W8W15当前字节数读0 0 1 0 0 0 10W0W71W8W151基和当前地址写0 1 0 0 0 1 00A0A71A8A15当前地址读0 0 1 0 1 0 00A0A71A8A15基和当前字节数写0 1 0 0 0 1 10W0W71W8W15当前字节数读0 0 1 0 0 1 10W0W71W8W150基和当前地址写0 1 0 0 1 0 00A0A71A8A15当前地址读0 0 1 0 0 1 00A0A71A8A15基和当前字节数写0 1 0 0 1 0 10W0W71W8W15当前字节数读0 0 1 0 1 0 10W0W71W8W150基和当前地址写0 1 0 0 1 1 00A0A71A8A15当前地址读0 0 1 0 1 1 00A0A71A8A15基和当前字节数写0 1 0 0 1 1 10W0W71W8W15当前字节数读0 0 1 0 1 1 10W0W71W8W15当芯片8237空闲时,CPU可对其编程,加控制信号到8237。而在DMA工作周期,8237的控制信号又会形成系统总线的控制信号。同样,数据线XD0XD7也是通过双向三态门74LS245与系统数据总线相连接。从前面的叙述中我们已经看到,当8237不工作时,即处于空闲状态时,它是以接口的形式出现的。此时,CPU经系统总线对它初始化,读出它的状态等并对它进行控制。这时,8237并不对系统总线进行控制。当8237进行DMA传送时,系统总线是由8237来控制的。这时,8237应送出各种系统总线所需要的信号。上述情况会大大增加8237连接上的复杂程度。最重要的问题是,不管在8237的空闲周期还是在其工作周期,连接上一定要保证各总线信号不会发生竞争。 表6-3A3 A2 A1 A0 功 能01 0 0 0 0 1读状态寄存器01 0 0 0 1 0写状态寄存器01 0 0 1 0 1非法01 0 0 1 1 0写请求寄存器01 0 1 0 0 1非法01 0 1 0 1 0写单通道屏蔽寄存器01 0 1 1 0 1非法01 0 1 1 1 0写方式寄存器01 1 0 0 0 1非法01 1 0 0 1 0字节指针触发器清001 1 0 1 0 1读暂存寄存器01 1 0 1 1 0总清01 1 1 0 0 1非法01 1 1 0 1 0清屏蔽寄存器01 1 1 1 0 1非法01 1 1 1 1 0写4通道屏蔽寄存器选择 页寄存器DACK3选择 页寄存器DACK2选择 页寄存器DACK1选择 页寄存器A19 A16DACK0A19 A16A15 A08237 DMAC 图6-12 利用页寄存器产生存储器地址38237的初始化在对8237初始化之前,通常必须对8237进行复位操作,利用系统总线上的RESET信号或用表6-3所示的软件命令对A3A2AlA0为1101的地址进行写操作,均可使8237复位。复位后,8237内部的屏蔽寄存器被置位而其它所有寄存器被图6-13 PC机中8237的连接清0,复位操作使8237进入空闲状态,这时才可以对8237进行初始化操作。初始化流程如图6-14所示。在图6-14中只画出8237一个通道的初始化过程。对于其他通道可顺序进行下去。下面我们抽出PC机中BIOS对8237初始化部分加以说明: 为了对DMAC 8237初始化,首先进行总清。总清时只地址低字节总 清地址高字节字数低字节字数高字节方 式 字命 令 字屏 蔽 字其他通道参数图6-16 8237的初始化流程要求对总清地址进行写操作并不关心写入什么数据。 对DMAC(8237)的4个通道的基地址寄存器与当前地址寄存器、基字节数寄存器及当前字节数寄存器先写入FFFFH,再读出比较,看读写操作是否正确。若正确,再写入0000H,同样读出校验,若仍正确则认为DMAC工作正常,就开始对其初始化。若比较时发现有错,则执行停机指令。由于每个通道的上述4个寄存器占用两个地址(见表6-2),故将循环计数器CX的内容置为8。 程序对DMAC(8237)的通道0初始化。在PC机中,通道0用于产生对动态存储器的刷新控制。利用可编程定时器8253每隔15.0857s向DMAC提出1次请求。DMAC响应后向CPU提出DMA请求。获得总线控制权后,使CPU进入总线放弃状态。在此DMA期间,DMAC送出刷新行地址,并利用DACK0控制产生各刷新控制信号,对DRAM一行进行刷新。一行刷新结束,HRQ变为无效,退出DMA。此处给出通道0初始化程序如下:OUT DMA+0DH,AL;总清8237MOV DS,BXMOV ES,BX ;初始化DS和ESMOV AL,0FFHOUT DMA+1,AL OUT DMA+1,AL ;通道0的传送字节数为64K字节,先写低位,后写高位MOV DL,0BH ;使DX=000BH(方式字地址)MOV AL,58HOUT DX,AL ;写方式字,单字节传送方式,每次传送行地址MOV AL,0 ;尔后地址自动加1,允许自动预置OUT DMA+8,AL ;写入命令字OUT DMA+10,AL ;写入屏蔽字(单通道屏蔽字)另外,值得注意的是,在初始化通道0时,未初始化地址。因为地址寄存器仅用于送出DRAM的行地址,总清后它们初始值为0,而后根据方式字地址递增,实现每次刷新一行。再就是PC机中DMA方式不是通过CPU(8088)的HOLD实现的,而是利用等待方式来实现的。这时CPU处于等待操作状态,把系统总线交给DMAC来控制。 为了进一步理解DMAC的工作,我们再以8237从存储器把数据传送到接口为例,说明其初始化及工作过程。图6-15 DMAC8237传送数据到接口的电路框图DMAC 8237的硬件连接可参见图6-13。接口地址及连接简图如图6-15所示。图中接口请求传送数据的信号经触发器74LS74的Q端形成,由三态门输出作为DMA请求信号。当DMAC响应接口请求时,送出存储器地址和信号,使选中存储单元的数据出现在系统数据总线D0D7上。同时,DMAC送出控制信号,将存储单元的数据锁存在三态锁存器74LS374中。在开始传送前,应当送出接口有效信号。当然,该信号在系统工作中也可以一直有效。在接口请求DMA传送时,由图6-15的逻辑电路产生控制信号,使CPU暂停执行指令,同时将总线形成电路的输出置高阻。DMA初始化程序如下:INITADM:OUT DMA+13,AL;总清 MOV AL,40H OUT DMA+2,AL;送地址低字节到通道1 MOV AL,74H OUT DMA+2,AL ;送地址高字节到通道1,7440H为通道基地址 MOV AL,80H OUT PAG,AL;送页地址1000B MOV AL,64H OUT DMA+3,AL;送传送字节数低字节到通道1 MOV AL,0 ;0064H表示100个字节 OUT DMA+3,AL;送传送字节数高字节到通道1 MOV AL,59H;通道1方式字:读操作,单字节传送 OUT DMA+11,AL;地址递增,自动预置 MOV AL,0;命令字:允许工作,固定优先级 OUT DMA+8,AL;DACK有效 OUT DMA+15,AL;写入四通道屏蔽寄存器,规定允许4个通道均 可请求DMA传送。程序中,将取数的存储单元的首地址87440H分别写到页寄存器(外加的三态输出寄存器)和DM

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论