《DMA控制器》PPT课件.ppt_第1页
《DMA控制器》PPT课件.ppt_第2页
《DMA控制器》PPT课件.ppt_第3页
《DMA控制器》PPT课件.ppt_第4页
《DMA控制器》PPT课件.ppt_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

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

文档简介

第7章 DMA控制器,7.1 DMA基本概念 7.2 DMA占用总线方式 7.3 DMA控制器8237A 7.4 8237A在PC上的应用 7.5 DMA读传送实例,7.1 DMA基本概念,DMA的意思是“直接存储器存取”,意指不通过CPU、直接对存储器进行访问,它由专门的硬件装置DMA控制器(DMAC)来完成。除了事先要用指令设置DMAC外,传送是应外设请求、在硬件控制下完成的。所以,它具有极高的传送速率。,DMAC对存储器的访问与CPU类似,一般利用系统总线来进行。 以读存储器为例,其过程是:DMAC一面向存储器送存储单元地址和读控制信号( ) ,同时又向外设端口送写控制信号( ),数据在硬件信号的控制下通过总线由源直接送达目的地。为了支持数据块的传送,DMAC还具有修改地址指针、统计传送次数、判断传送是否结束等多项自动功能。 所以,使用DMA方法,可支持外设存储器、存储器外设的高速直接传送;变通后,也可支持存储器存储器、外设外设的高速直接传送。,7.2 DMA占用总线方式,1CPU暂时放弃总线控制权方式 此类DMA操作,CPU必须暂停任何总线操作,并让出对总线的控制权、直至DMA传送结束或完成一个总线操作周期之后,CPU才能继续控制总线。 实现这种方式的方法是DMAC向CPU发出总线请求信号,CPU在完成当前的总线周期操作之后,释放对总线的控制(有关的引脚信号处于高阻状态)并发出总线响应信号。,这类DMA又可分为两种情况:周期挪用和数据块传送。 如果DMAC控制总线的时间为一个总线周期,则称为周期挪用。对于这种操作方式,每次DMA操作仅传送一个字节(或字)数据。然后DMAC释放对总线的控制; 若DMAC控制总线的时间超过一个总线周期,用来完成一组数据(即数据块)的传送,在该组数据传送期间,DMAC一直控制着总线,这种操作方式称为数据块传送。,下面以图7-1为例说明这种DMA操作方式的工作过程。假定8086CPU工作于最小模式,且是将存储器中的数据传送给外部设备。在DMA操作之前,DMAC作为系统的一个接口部件,接受CPU送来的操作命令,也即对DMAC的初始化,以规定传输类型(存储器和外设之间)、操作方式(单字节传送)、传送方向、内存的首地址、传送的字节数等。在完成初化编程之后,DMAC就准备好进行DMA操作,传送一个字节数据的过程如下(在图7-1中以圆圈内的序号表示)。,图7-1 DMA操作过程示意图,(1)外设已作好接收数据准备,向DMAC发出请求信号DRQ。 (2)DMAC向CPU发出DMA操作请求HRQ,该请求信号送到CPU的HOLD信号引脚。 (3)CPU在完成当前的总线周期操作之后(若总线处于空闲状态,则立即做出响应),使数据总线、地址总线及部分控制信号处于三态,并向DMAC发出响应信号HLDA,指示DMAC可以使用总线。,(4)DMAC将地址(A19A0)放入地址总线,该地址用来寻址内存储单元。 (5)DMAC向I/O接口发出响应信号DACK,该信号可作为接口接受数据的控制条件,有效时,表示允许接口接受数据; (6)DMAC向存储器发出读控制信号,在该信号的控制下,由A19A0指定的单元的内容送入数据总线。,(7)DMAC向接口发出写控制信号,在该信号及DACK信号的共同作用下,将数据总线上的内容储存到接口中的数据寄存器,并通过接口将数据传送给外设,至此完成了数据传送。 (8)DMAC撤销对CPU的请求信号。 (9)CPU撤销保持响应信号并恢复对总线的控制。 如果数据未传送完,则又从第二步开始重复所述过程。,2暂停CPU时钟脉冲方式 这种方式也就是强迫CPU立即停止工作的方式。 在进入DMA操作时,把CPU的时钟“暂停”,就能达到停止CPU操作的目的。 这种方式的原理如图7-2所示,CPU的时钟脉冲由系统主时钟脉冲通过与门来提供,与门由PAS信号控制。 当PAS=1时,向CPU提供时钟脉冲,CPU操作得以进行;当PAS=0时,暂停时钟,CPU便处于“休眠”状态,此时可进行DMA操作。,图7-2 暂停CPU时钟脉冲方式示意图,3窃取CPU空闲时间方式 上述两种DMA总线占用方式共同的特点是,进行DMA操作时均使CPU的正常工作暂时停止。其优点是简单,可以不受限制地传送任意长度的数据块,但会浪费CPU资源。 为了充分利用CPU 资源,可以采用只有当CPU不使用总线时才进行DMA操作的方法,这样CPU不会因DMA传送而浪费时间。但这种DMA操作只能安排在CPU执行内部操作当中 例如取完指令操作码后,CPU要进行指令译码或CPU内部要进行算术/逻辑运算时,CPU均不使用总线,这时DMAC可以接管总线。MC6800 CPU有专门的信号用来指示总线是否正在被使用,这就给安排DMA操作带来了很大便利。,4周期扩展方式 周期扩展方式是采用专门的时钟发生电路加宽CPU的时钟周期,利用CPU每个时钟周期的加宽时间进行DMA操作,这种占用总线的方式为周期扩展。 这种方式由于延长了CPU的时钟周期必将导致CPU运行速度的降低。PC/XT微型机就是采用了这种方式,巧妙地在CPU总线中插入若干等待周期Tw,进行DMA操作。 在上述4种方式中,CPU暂时放弃总线控制权而DMA占用总线的方式是最简单的一种方式。,7.3 DMA控制器8237A,8237A是Intel系列高性能可编程DMA控制器,具有如下功能: (1)每片8237A内部有4个独立的DMA通道,每个通道可分别进行数据传送,一次传送最大达64MB,能够实现存储器与外部设备间或存储器两个区域间的数据传送。 (2)每个通道的DMA请求可以分别允许和禁止,具有不同的优先级,并且每个通道的优先级可以是固定的,也可以是循环的。 (3)8237A具有4种传送方式:单字节传送方式,数据块传送方式,请求传送方式和级联方式。,7.3.1 8237A的内部构成框图,1.3个基本控制逻辑单元 (1)定时和控制逻辑单元。 根据初始化编程时所设置的工作方式寄存器的内容和命令,在输入时钟信号的定时控制下,产生8237A内部的定时信号和外部的控制信号。 (2)命令控制单元。 在CPU控制总线时,即DMA处于空闲周期时(被动态),将CPU在编程初始化时送来的命令字进行译码;而在8237A进入DMA服务时,对设定DMA操作类型的工作方式字进行译码。 (3)优先权控制逻辑。 用来裁决各通道的优先权次序,解决多个通道同时请求DMA服务时可能出现的优先权竞争问题。,2.3个缓冲器 (1)I/O缓冲器1。 8位、双向、三态的缓冲器 当CPU控制总线时,从CPU送给8237A的编程控制字、CPU读取8237A的状态字、当前地址和字节计数器的内容都经过这个缓冲器。 当8237A控制总线时,在DMA周期一开始,8237A请求DMA服务优先权最高通道的暂时地址寄存器的高8位地址,由这个缓冲器输出到地址锁存器74LS373或Intel 8282锁存。然后,若编程时设定DMA的操作类型是DMA写、读或校验时,就使这个缓冲器进入高阻状态,即数据传送不经过此缓冲器; 若操作类型是存储器之间的传送(MM)时,首先将源存储单元的内容经数据总线由此缓冲器送到8237A的暂存器中。在下一个周期,暂存器的内容由此缓冲器送上数据总线,然后写入目的存储单元。,(2)I/O缓冲器2。4位、双向、三态缓冲器。 在CPU控制总线时,输入缓冲器导通(输出则处于高阻状态),将地址总线的低4位A3A0送入8237A进行译码后,选通内部的寄存器,以便在有效时,将数据总线的内容写入被选中的内部寄存器,或在有效时将被选中寄存器的内容送上数据总线。 在DMA控制总线时,输出缓冲器导通(输入则处于高阻状态),送出8237A产生的16位存储器地址的低4位A3A0。,(3)输出缓冲器。4位、输出、三态缓冲器。在CPU控制总线时,它为高阻状态;而在DMA控制总线时,它导通,由8237A提供的16位存储器地址的第8位到第5位地址A7A4通过它送出。,3内部寄存器 8237A的内部寄存器如表7-1所列。它与用户编程直接发生关系。 表7-1 8237A的内部寄存器,7.3.2 8237A的引脚 8237A的引脚如图7-4所示,CLK时钟脉冲输入信号,该信号用以控制8237A内部操作及数据传输率。 片选输入信号,低电平有效。CPU对8237A编程时把8237A视为输入/输出设备,此时该信号由地址总线高位经译码后产生。 RESET复位输入信号,高电平有效。复位后8237A处于空闲状态,清除内部各寄存器,并置位屏蔽触发器。 READY准备好输入信号,高电平时表示存储器或外设已经准备好。该信号用于DMA操作时与慢速存储器或外部设备同步。,DREQ3DREQ0DMA请求输入信号,通道3至通道0分别对应DREQ3至DREQ0。当外设请求DMA服务时,由I/O接口向8237A发出DREQ请求信号,该信号一直保持有效,直到收到DMA响应信号DACK后,信号才撤销。其有效电平由编程设定。在优先级固定的方式下,DREQ0优先级最高,DREQ3优先级最低。 HRQ总线请求输出信号。当8237A的任一个未屏蔽通道接收到DREQ请求时,8237A就向CPU输出HRQ信号,请求CPU出让总线的控制权。 HLDA总线响应信号,是CPU对HRQ信号的响应。CPU收到HRQ信号后,将在现行总线周期结束后让出总线的控制权,使HLDA信号有效,通知8237A接收总线的控制权,用以完成DMA传送。,DACK3DACK0DMA响应输出信号,是8237A对DREQ信号的响应,每个通道各有一个。当8237A接收到DMA响应信号HLDA后,开始DMA传送,相应的通道DACK信号输出有效,其有效电平由编程确定。 DB7DB08位双向三态数据总线,与系统的数据总线相连。CPU可以用I/O读命令,从DB7DB0读取8237A的状态寄存器和现行地址寄存器、字节数计数器的内容,以了解8237A的工作状态;也可以用I/O写命令通过DB7DB0对各个寄存器进行编程。在DMA传送期间,DB7DB0输出当前地址寄存器中的高8位,由ADSTB信号锁存到外部锁存器中,与地址线A7A0一起组成16位地址。,A7A44位双向三态地址线。只用于DMA传送时,输出要访问的存储单元地址低8位中的高4位。 A3A04位双向三态地址线。CPU对8237A进行编程时,它们是输入信号,用于寻址8237A的内部各寄存器。在DMA传送期间,这4条线输出要访问的存储单元地址低4位。 I/O读信号,是双向、低电平有效的三态信号。在CPU控制总线期间,它为输入信号,低电平有效时,CPU读取8237A内部寄存器的值;在DMA传送期间,它为输出信号,与相配合,控制数据由外设传送到存储器。,I/O写信号,是低电平有效的双向三态信号。在CPU控制总线期间,它为输入信号,CPU在控制下对8237A内部寄存器进行编程。在DMA传送期间,它是输出信号,与配合将数据从存储器传送到外设接口中。 存储器读信号。低电平有效的三态输出信号,仅用于DMA传送。在DMA读传送时,它与 配合,把数据从存储器传到外设;在存储器到存储器传送时, 有效控制从源区读出数据。 存储器写信号,低电平有效的三态输出信号,仅用于DMA传送。在DMA写传送时,它与 配合,把数据从外设传到存储器;在存储器到存储器传送时, 有效控制把数据写入目的区。,DMA过程结束信号。它是双向低电平有效信号,其有效时,可使8237A内部寄存器复位。在DMA传送期间,当任一通道当前字节数寄存器的值为0时,8237A从EOP引脚输出一个低电平信号,表示DMA传输结束。另外,8237A允许由外部送入一个有效的EOP信号,强制结束DMA传送过程。 AEN地址允许输出信号,高电平有效。AEN为高电平时,允许8237A将高8位地址输出至地址总线,同时使与CPU相连的地址锁存器无效,即禁止CPU使用地址总线。AEN为低电平时,8237A被禁止,CPU占用地址总线。 ADSTB地址选通输出信号,高电平有效。在DMA传送期间,此信号用于将DB7DB0输出的当前地址寄存器中高8位地址送到外部锁存器,与8237A芯片直接输出的低8位地址A7A0共同构成内存单元地址的偏移量。,7.3.3 8237A的内部寄存器及编程控制字 8237A内部的4个独立通道中,每个通道都有一个16位基地址寄存器、一个16位基本字节寄存器、一个16位当前地址寄存器、一个16位当前字节数计数器和一个8位工作模式寄存器。各寄存器功能如下:,(1)当前地址寄存器:用于保持DMA传送过程中当前地址值,每次DMA传送后其内容自动增1或减1。 这个寄存器的值可由CPU写入或读出。若8237A编程为自动初始化,则在每次DMA操作结束发出信号后,该寄存器自动恢复为它的初始值。 (2)当前字节数寄存器:它保持着当前要传送的字节数,每次DMA传送后内容减1。 当它的值由零减为FFFFH时,将发出信号,表明DMA操作结束。 它的值可由CPU读出。在自动初始化方式时,有效时自动装入初始值(即基地址寄存器的值)。,(3)基地址寄存器:它存放着与当前地址寄存器相联系的初始值。CPU同时写入基地址寄存器和当前地址寄存器。基地址寄存器的值不会修改,且不能读出。 (4)基字节数寄存器:它存放着与当前字节数寄存器相联系的初始值。CPU同时写入基字节数寄存器和当前字节数寄存器。基字节数寄存器的值不会修改,且不能读出。 (5)模式寄存器:用于存放8237A相应通道的工作模式、地址增减、是否自动预置、传输类型及通道选择。在CPU对8237A初始化编程时设定。,8237A的4种工作模式。 (1)单字节传送模式: 这种模式下每次只传送1个字节。传送一个字节后,字节数寄存器减1,地址寄存器加1或减1,HRQ无效。8237释放系统总线,将总线控制权交还CPU。若此时当前字节数由0减到FFFFH,将发出信号,则结束DMA传送或重新初始化。否则8237A会立即对DREQ信号进行检测,一旦DREQ有效,8237A将立即向CPU发出总线请求信号,获得总线控制权后,再进行下一个字节的传送。 单字节传送模式的特点是:一次传送一个字节,效率较低;但他将保证在两次DMA传送之间CPU有机会重新获取总线控制权,执行一个CPU总线周期。,(2)数据块传输模式: 这种传输模式可以连续传输多个字节。8237A获得总线控制权之后,可以完成一个数据块的传输,直到当前字节数寄存器由0减为FFFFH,或由外部接口输入有效的信号时,8237A才释放总线,将总线控制权交还CPU。 数据块传送的特点是:一次请求传送一个数据块,效率高;但整个DMA传送期间CPU长时间无法控制总线。,(3)请求传输模式: 这种传输模式也可以连续传送多个字节的数据。8237A进行DMA传输时,若出现当前字节寄存器由0减为FFFFH、外部接口输入有效信号或外界的DREQ信号变为无效这3种情况之一时,8237A结束传送,释放总线,由CPU接管总线。 当外界的DREQ信号变为无效时,8237A释放总线,CPU可继续操作。8237A相应通道将保存当前地址和字节数寄存器的中间值。8237A释放总线后继续检测DREQ,一旦变为有效信号,传送就可以继续进行。,(4)级联传输模式: 通过级联扩展传输通道。级联模式构成的主从式DMA系统中,第一级的DREQ和DACK信号分别连接第二级的HRQ和HLDA,第一级的HRQ和HLDA连接系统总线,此时第二级各个8237芯片的优先级与所连的第一级通道相对应。这样由5片8237构成的二级主从式DMA系统中,DMA数据通道可扩展到16个。 注意:主片需要在模式寄存器中设置为级联方式,而从片不设置为级联方式。 8237A的这4种工作模式可以通过置工作模式寄存器来设定。工作模式寄存器各位的定义如图7-5所示。,6屏蔽寄存器 8237A内部的屏蔽寄存器对应于每个通道的屏蔽触发器,当其设置为1时禁止该通道DMA请求。在复位后,4个通道全置于屏蔽状态。在编程时根据需要清除某些屏蔽位,允许产生DMA请求。如果某个通道编程规定为不自动初始化的情况下,则当该通道产生信号时,它所对应的屏蔽位置位,必须再次编程为允许,才能进行下一次DMA传送。 屏蔽寄存器的两种格式见图7-6所示。,(a)单通道屏蔽字 (b)主屏蔽字 图7-6 屏蔽字格式,7状态寄存器 8237A内部有一个可由CPU读出的8位状态寄存器,用来存放8237A的状态信息。 它的低4位反映读命令这个瞬间每个通道是否产生TC,高4位反映每个通道的请求情况(为1表示有请求)。 如图7-7所示。这些状态位在复位或被读出后,均被清除。,8请求寄存器 8237A的每个通道对应一条硬件DREQ请求线。当工作在数据块传送模式时也可以由软件发出DREQ请求,所以有一个请求寄存器。 CPU通过请求字写入请求寄存器,图7-8为请求字格式。 其中D1D0位决定写入的通道,D2位决定是请求(置位)还是复位。每个通道的软件请求位分别设置,它们是非屏蔽的。它们的优先权同样受优先权逻辑的控制。它们可由TC或外部的信号复位,RESET复位信号使整个寄存器清除。 注意:只有在数据块传送模式才能使用软件请求。若是存储器到存储器传送,则必须由软件请求启动通道0。,9命令寄存器 这是DMAC 4个通道公用的一个8位的寄存器,用于设定8237A的工作方式,由CPU编程写入,并用复位信号和软件命令清除。复位时使其清零。命令字格式如图7-9所示。 8237A中有两种优先权编码:固定优先权编码和循环优先权编码。 在固定优先权编码中,4个通道的优先权是固定的 在循环优先权编码中,本次循环中最近一次服务的通道在下次循环中变成最低优先权,其他通道依次轮流相应的优先权。 不论用哪种优先权编码,某个通道经判别优先权获得服务后,其他通道无论其优先权高低,均被禁止,直到已服务的通道结束传送为止。 当D0=1时将选择存储器到存储器的传送方式。此时,通道0的现行地址寄存器存放源地址。若D1也置位,则在整个存储器到存储器的传送过程中始终保持同一个源地址,以便实现将一个目的存储区域设置为同一个值。,在系统性能允许的范围,为获得较高的传输效率,8237A能将每次传输时间从正常时序的3个时钟周期变为压缩时序的2个时钟周期。 在正常时序时,命令字的D5选择滞后写或扩展写。 其不同之处是写信号滞后在S4状态有效(滞后写)还是扩展到S3状态有效(扩展写)。,10暂存寄存器 它是一个8位的寄存器,在存储器至存储器传送期间,用来暂存从源地址单元读出的数据。 当数据传送完成时,所传送的最后一个字节数据可以由CPU读出。用复位信号可清除此寄存器。,11复位命令及清除高低触发器命令(软件命令) 8237A有3种软件命令,不需要通过数据总线写入控制字,直接对地址和控制信号进行译码得到。 (1)总清除命令(软件复位命令): 其功能与硬件RESET信号相同,执行软件复位命令使8237A的控制寄存器、状态寄存器、DMA请求寄存器、暂存器及先/后触发器清0,使屏蔽寄存器置1。 写入此命令时要求地址信号A3A2A1A0=1101。,(2)清除先/后触发器命令: 8237A的先/后触发器用以控制写入或读出内部16位寄存器的高字节还是低字节,若先/后触发器为零,则读写低字节;为1则读写为高字节。 复位后,该触发器被清0,进行一次读写低字节的操作后,触发器变为1,再对高位进行操作。使用此命令可以改变将要进行的16位数据读/写的顺序。 此时要求地址信号A3A2A1A0=1100。,(3)清屏蔽寄存器命令: 这个命令使屏蔽寄存器的4位都清为0,使4个通道都被允许DMA通道请求。 对8237A的编程,就是将数据和控制字分别写入地址寄存器、字节数寄存器和模式寄存器、屏蔽寄存器、命令寄存器。若不是软件请求,则在完成编程后,由通道的引脚输入有效DREQ信号启动DMA传送过程。 若用软件请求,则再写入指定通道的请求字,就可开始DMA传送。,8237A内部10种寄存器和3种软件命令如表7-2所示。,表7-2 8237A寄存器和软件命令寻址,7.3.4 8237A的传送时序 8237A工作时序如图7-10所示,可分为SI、S0、S1、S2、S3、S4和SW。,图7-10 8237A工作时序,SI:闲状态。在没有DMA请求时,8237A处于SI状态。在SI期间,CPU可以对8237A进行编程,设置控制命令或读取状态信息,同时,在此期间8237A对各通道的DERQ端进行测试,判断是否有DMA请求。当某通道的DERQ电平有效,则表示此通道有DMA请求。于是8237A在SI的上升沿使HRQ变为有效电平,向CPU提出DMA请求从而进入S0状态。 S0:线请求状态。在此期间8237A等待CPU的响应信号,直到CPU发出响应信号HLDA后,进入S1状态。,S1:在S1期间,8237A送出地址允许信号AEN,使8237A占有地址总线A15A0,同时ADSTB的下降沿锁存地址A15A8。在传输一个256字节数据块时,需要改变A15A8,此时用到S1状态。而一般情况下这几个地址不变,因此S1可以省去,直接进入S2状态。 S2:修改存储单元低16位地址。8237A从DB7DB0输出地址A15A8,从A7A0输出低8位地址,但只有等到S3状态A15A8才会出现在地址总线上。,S3:读数据状态。在S3状态A15A8出现在地址总线上,8237A工作于普通时序时,需要用S3状态;若8237A工作于压缩时序,不用S3状态,直接进人S4状态,此时只更新低8位地址A7A0,高8位地址A15A8不变。同时,普通时序时S3状态产生读信号或,被传送的字节读出到数据线DB上;压缩时序时,或信号在S4状态产生。 SW:等待状态。若外部设备速度慢,在S3状态之后插入SW状态。,S4:写数据状态。S4期间,或有效,完成数据写入。同时测试传输模式,若是块传输立即回到S2状态传输下一个字节。 综上所述,普通时序进行一次DMA传输,一般用3个时钟周期:S2、S3、S4;压缩时序多数情况用2个时钟周期:S2、S4状态。,7.4 8237A在PC上的应用,7.4.1 8237A在IBM PC/XT上的应用 1电路简介 DMA控制电路,如图7-11所示。,图7-11 PC/XT微型机的DMAC电路示意图,2页面寄存器及20位地址形成 8237A每个通道的最大传送长度为64K,它提供16位地址。但XT机使用20位地址总线。所以,在DMA传输时,DMA控制电路还要提供高4位A19A16地址,称为页面地址。为此,XT机设计有DMA页面寄存器,它采用4个4位的寄存器堆电路74LS670,存放4个DMA通道所需的高4位地址A19A16。 74LS670内部有4个(称为组)寄存器,每组4位。它的4位数据输入端接至系统数据总线的低4位D3D0,4位数据输出端接至系统地址总线高4位A19A16。当控制端为低时,数据从数据输入端写入由WB和WA编码所指定的某组寄存器中;当控制端为低时,数据从由RB和RA编码指定的寄存器组中读出送至数据输出端,如表7-3所示。,写入页面寄存器内容由CPU的I/O写操作实现。页面寄存器的端受信号控制,当对端口地址80H9FH 执行写操作时,它为低电平有效。寄存器组写入选择端,WA接地址线A0,WB接A1,这样通常仅用80H83H这4个端口地址,如表7-4所示。,由DMA控制电路看到,页面寄存器读出的控制条件是 为低电平,即DMA操作期间,读出选择端RB接通道2的响应信号 DACK2,RA接通道3的DACK3,从表7-4看出,0组寄存器并未使用,这是因为通道0用于动态存储器的刷新,不需要页面寄存器的内容。,综上所述,进入DMA服务的S1状态时,8237A通过DB7DB0输出地址A15A8,并发出地址锁存信号ADSTB,把它选通至地址锁存器中。同时,8237A输出低8位地址A7A0,并在整个DMA有效周期保持有效。在DMA服务期间,信号为低电平,它将选通地址驱动器的低8位地址A7A0、地址锁存器地址A15A8以及事先写入页面寄存器的高4位地址A19A16,送至系统地址总线,形成20位DMA传输所需的内存地址。需注意的是,页面寄存器不具有自动增减量功能,所以高4位在整个DMA传送过程中是不会改变的。,3ROM-BIOS对8237A的初始化 在系统ROM-BIOS中有一段上电自测试程序,它对系统各部件进行测试,以确定系统部件是否无故障,然后对通道0通道4进行初始化。下面是ROM-BIOS对8237A进行测试和初始化的部分程序。,OUT 0DH, AL ; DMA主清除命令 MOV AL, 0FFH ; 通道寄存器的初始值 C16: MOV BL,AL ; 保存在BX MOV BH,AL MOV CX,08 ; 循环测试8次,因有8组通道寄存器 MOV DX,00 ; DMA通道寄存器地址送DX C17: OUT DX,AL ; 写入通道寄存器低字节 PUSH AX ;(本句在ROM-BIOS中用于其他目的) OUT DX,AL ; 写入通道寄存器高字节 MOV AL,01 IN AL,DX ; 读出通道寄存器低字节 MOV AH,AL IN AL,DX ; 读出通道寄存器高字节 CMP BX,AX ; 写入值等于读出值吗? JE C18 ; 相等,则正确,转下一组寄存器 HLT ; 不等,则有故障,停机 C18: INC DX ; DX指向下一个通道寄存器地址 LOOP C17 ; 循环测试 INC AL ; 再次测试,此时初始值设为0 JZ C16 ; 转测试,MOV DS,BX MOV ES,BX MOV AL,0FFH OUT 01,AL ; 写入通道0的字节数寄存器低字节 PUSH AX ; (与前同) OUT 01,AL ; 写入通道0的字节数寄存器高字节 MOV AL,58H ; 通道0模式字:单字节传送方式,DMA读,地址增量, 自动初始化 OUT 0BH,AL MOV AL,0 MOV CH,AL OUT 08,AL ;DMA命令字:禁止存储器到存储器传输方式,固定优先权, 正常时序,滞后写,DREQ高有效(PC总线用DRQ表示), DACK低有效(PC总线用DACK表示),DMA开始工作。 PUSH AX ;(与前同) OUT 0AH,AL ; 通道0屏蔽字,允许DREQ0提出申请 MOV AL,12H ; 定时器8253计数器1的计数值 OUT 41H,AL ; 计数器1以方式2开始工作,15s以后才会申请通 道0 的DMA读操作,MOV AL,41H OUT 0BH,AL ; 通道1模式字:单字节传送模式, 校验,地 址增量,非自动初始化 PUSH AX ;(与前同) IN AL,08H ; 读出8237A的状态寄存器 AND AL,10H ; 通道0请求吗? JE C18C ; 计数器开始到读出状态仅执行了3条指令, 在4.77MHz下不会超过 l0s。 HLT ; 有请求,则说明有故障,停机 C18C: MOV AL,42H ; 通道2模式字;功能同通道1 OUT 0BH,AL MOV AL,43H ; 通道3模式字:功能同通道1 OUT 0BH,AL,7.4.2 8237A在IBM PC/AT上的应用 在IBM PC/AT上,采用了两片8237A,并将DMAC1作为从级,级联到DMAC2的通道。为系统提供了7个DMA通道。 DMAC1包含通道03(CH0CH3)。通常,通道2用于软盘与内存的数据交换,通道1用于SDLC通信接口卡,通道0和3备用。 DMAC2包含通道47(CH4CH7)。通道4用于把DMAC1与DMAC2级联起来。通道57支持16位I/O接口板与16位系统存储器之间的16位数据传送,每个通道能够传送的数据量最大128KB。,1DMA控制器电路 AT机系统板的DMA子系统主要包括DMA控制器电路,其中有两片8237A和两片地址锁存器ALS573,如图7-12所示;1片页面寄存器电路(LS612)和相应的DMA应答和等待电路。 根据系统板I/O译码电路所产生的DMA片选信号,其端口地址范围是00001FH、0C0H0DFH。DMAC1的A0引脚同地址线A0相连,A4未参加译码,取A4=0时的地址000FH为DMAC1的端口地址。而DMAC2的A0引脚同地址线A1相连,A0未参加译码。取A0=0时的16个偶地址为DMAC2的端口地址如表7-2所示。,图7-12 AT机的DMA控制器电路,DMAC的时钟输入DMA CLK是由系统时钟SYSCLK经二分频后得到的。在标准AT机中,DMACLK的频率是3MHz,即时钟周期约为333ns。为配合慢速外设或存储器,可控制DMAC的READY引脚,插入等待状态Sw。在AT机系统已经插入了一个Sw。 在对DMAC和外设初始化设置以后,就可以进行DMA操作了。CPU与DMAC的应答过程如下:,首先,由外设向DMAC送出DMA请求信号DREQ。DMAC收到后,向CPU送出保持请求信号HRQ(DMAC1有请求时,是通过DMAC2送出请求信号HRQ1的)。请求信号HRQ1通过DMA应答电路,向CPU送出CPU HRQ请求信号,申请使用系统总线。CPU的HOLD引脚收到请求信号后,在这一个总线周期即将结束时,由CPU的HLDA引脚送出保持应答信号,并释放总线的使用权。HLDA信号通过DMA应答电路送出HLDA1,它接至DMAC2的HLDA引脚,作为DMAC的应答信号。DMAC收到应答信号后,接管系统总线,并向外设送出DMA应答信号。外设在接收到信号后,在DMAC的管理下,把数据送上总线或从总线读取数据。,两片8237A的过程结束信号线分别通过一个10K电阻接到+5V电源,以防止输入过程结束信号。计数终止信号T/C正是由这两个信号经与非逻辑后产生的;不论哪个通道的DMA传送结束都会得到有效的过程结束信号。,2页面寄存器及24位地址的形成 AT机地址总线有24位A23A0,系统中增设了一个DMA页面寄存器74LS612,处理高8位地址A23A16,如图7-13所示。,图7-13 页面寄存器电路,页面寄存器74LS612是三态输出的存储器映像器,是专为分页式存储器映像而设计的TTL集成电路。 它内部包含一个4:6译码器、16个12位的RAM、16个12位映像寄存器等单元。它有读、写、映像和通过4种操作方式,但在系统中只用到前3种。在CPU有效周期,用读写方式对页面寄存器编程;在DMA有效周期,用映像方式产生高位地址。 当LS612片选为低时,在读写信号R/W控制下,可从寄存器选择输入RS0RS3选通内部映像寄存器而进行数据的读写,数据的输入输出在数据线D7D0上。片选面由系统I/O译码电路产生。端口地址为809FH。,当为高,而映像控制方式选择为低时,执行映像操作。在输出允许为低有效时,把由映像地址输入MA3MA0选中的映像寄存器的内容从输出端MD7MD0输出。从MD7MD0输出的数据就是DMA请求通道的高8位地址。在DMA有效周期里,系统总线无效,所以无效,即确为高电平。连接信号,而信号是CPU保持应答信号HLDA的反相输出,在DMA有效周期为低有效。映像地址输入MA3MA0接到DMA响应输出及存储器刷新信号REFRESH的译码电路上,所以哪个映像寄存器被选中取决于及REFRESH的译码。 例如,通道0工作时,因DMAC1通过DMAC2的通道4进行级联,故为低,它送到页面寄存器的MA3=0。通道0工作,为低,即MA2=1。另外,DMAC一个时刻只能有一个通道工作,故、为高,即MA1=1;、为高,即MA0=1。由此可以看出,通道0工作时,MA3MA0=0111;它对应的页面寄存器的I/0地址为87H。采用此种方法,可以导出DMA通道和页面寄存器I/O地址的对应关系,如表7-5。,对于DMAC1的通道0通道3 8237A提供A15A016位地址。其中A7A0直接挂在系统总线上。在DMA有效周期,8237A的数据线输出A15A8地址信号,并由地址选通信号ADSTD对地址锁存器ALS573使能,把A15A8信号锁存到地址锁存器中;在地址允许信号AEN有效时,即产生A15A8地址。此时,高8位页面地址由页面寄存器输出A23A16。 通道0到通道3每页地址的最大空间为64KB。,对于DMAC2的通道5至通道7,8237A提供A16A1的1

温馨提示

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

评论

0/150

提交评论