1.13k likes | 1.21k Views
第 9 章 DMA 控制器 82C37A 和 时间间隔定时器 82C54. 第 9 章 DMA 控制器 82C37A 和 时间间隔定时器 82C54. 9.1 DMA 控制器 82C37A 9.2 可编程时间间隔定时器芯片 82C54. 教学目的和要求. 掌握 82C37A 、 82C54 的内部结构 掌握 DMA 方式传送的一般过程 掌握 82C54 引脚定义及使用方法 熟练应用 82C54 编程 熟悉 82C37A 内部寄存器的功能及使用,了解 82C37A 引脚定义 . 重点
E N D
第9章 DMA控制器82C37A和 时间间隔定时器82C54
第9章 DMA控制器82C37A和 时间间隔定时器82C54 • 9.1 DMA控制器82C37A • 9.2 可编程时间间隔定时器芯片82C54
教学目的和要求 • 掌握82C37A、 82C54的内部结构 • 掌握DMA方式传送的一般过程 • 掌握82C54引脚定义及使用方法 • 熟练应用82C54编程 • 熟悉82C37A内部寄存器的功能及使用,了解82C37A引脚定义
重点 • 82C37A实现DMA方式传送的一般原理与过程 • 82C54引脚定义及使用,82C54的编程应用 难点 • 82C37A内部寄存器的功能及编程 • DMA方式传送的一般过程 • 82C54的六种工作方式及对应时序
9.1 DMA控制器82C37A 82C37A芯片拥有以下几个特点: • 管脚引线与NMOS8237A兼容 • 4个各自独立的DMA通道 • 可以级联扩展成至任意数量的DMA通道。 • 高速数据传输:在8MHz时钟时可达每秒4MB;在12.5MHz时钟时可达每秒6.25MB; • 存储器到存储器之间传送方式 • 静态CMOS设计,允许低功耗操作 • TTL/CMOS电平全兼容 • 内部寄存器可用软件读取
9.1.1 82C37A的内部结构 82C37A芯片是一个多模式的直接存储器存取控制器,是一种CHMOS外围接口。由于它允许外部设备直接从系统存储器传送信息,所以极大地改进了系统的性能。 图9-1给出了82C37A DMA控制器(或者称DMAC)的内部结构框图。从图中可以看出,82C37A芯片是由定时及控制、优先级编码器及循环优先级逻辑、命令控制及12个不同类型的寄存器等功能模块组成。下面简要地介绍每部分电路以及寄存器的主要功能。
82C37A的内部结构 82C37A的定时及控制部件产生外部总线接口所需要的控制信号。例如,它接受READY及 等输入信号,产生ADSTB及AEN等输出信号。这些信号与输入到82C37A的时钟信号一起进行的是同步操作。目前高速的82C37A可在12.5MHz的最大时钟速率下进行操作。 如果82C37A收到多个DMA服务请求,那么它将按优先级的高低来处理这些DMA服务请求。在软件控制之下,可选择两种优先级方式中的一种。这两种优先级方式分别被称之为固定优先级和循环优先级。
82C37A的内部结构 • 固定优先级方式是在数值上按由小到大顺序给各个通道指定优先级,即通道0的优先级最高,而通道3的优先级最低。 • 循环优先级的初始化优先级级别与固定优先级相同。但是,当某个特定级别的DMA请求得到服务之后,进行优先级循环,先前得到服务的通道被指定为最低优先级。 • 例如,假设初始化优先级为1的刚刚被服务过,此时通道2就会处于最高优先级,而通道1则被循环到最低优先级。
82C37A的内部结构 82C37A芯片的命令控制电路对通过微处理器接口送给它的寄存器命令进行译码,由此来确定这次访问的是哪一个寄存器,以及将要形成的是哪种类型操作;另外,在DMA操作期间,它通常还要对该电路由程序所决定的操作方式进行译码。
82C37A的内部结构 由图9-1的逻辑框图可以看出,82C37A有12个不同类型的内部寄存器。例如当前地址寄存器、当前计数寄存器、命令寄存器、屏蔽寄存器以及状态寄存器等。所有这些寄存器的名称已列于表9-1之中,同时在表中还列出了它们的大小及个数。注意,图中有4个当前地址寄存器,且其大小均为16位,即4个DMA通道的每一个通道都有一个当前地址寄存器。
9.1.2 82C37A引脚信号的定义 图9-2给出了82C37A可 编程DMA控制器的引脚 图,其引脚定义如下: • CLK,时钟输入信号 • ,片选信号(Chip Select),低电平有效 有效时允许CPU对 82C37A进行编程
82C37A引脚信号的定义 译码器不使用8086/8088的控制信号(M//IO),因为它有新的存储器读写信号与I/O读写控制信号( 、 、 和 ) • RESET,复位(Reset) 信号 • READY,准备就绪输入端,高电平表示已准备好。若把逻辑0加到准备就绪输入上,则使82C37A进入等待状态,以等待较慢的存储器或I/O设备准备就绪后,82C37A才继续操作
HLDA,总线保持回答(Hold Acknowledge)信号。DMAC向CPU发总线请求信号HRQ以后,至少再过一个时钟周期,CPU才能发出总线保持回答信号HLDA,通知82C37A可以获得对地址、数据及控制总线的控制权。 • DREQ3~DREQ0,DMA请求(DMA Request)输入信号。用于为4个DMA通道中的每一个请求DMA传输。由于这些输入的极性是可编程的,所以它们可以是高有效输入也可以是低有效输入。当DMAC向I/O设备送来DMA响应信号DACK以后,I/O接口才撤除DREQ有效电平。
82C37A引脚信号的定义 • DB7~DB0,8位数据线。当DMAC为主模块时,DB7~DB0输出当前地址寄存器中的高8位地址,并通过ADSTB打入锁存器,和地址线A7~A0输出的低8位地址一起构成16位的存储器地址;当DMAC为从模块时,CPU通过DB7~DB0对DMAC进行读写操作 • 存储器读信号。此信号有效时,所选中的存储器单元的内容被读到数据总线上
82C37A引脚信号的定义 • 存储器写信号。此信号有效时,数据总线上的内容被写入选中的存储单元 。 • 输入输出设备写信号。在DMA控制器作为主模块时, 的方向是由DMA控制器送出的,此信号有效时,存储器中读出的数据被写入I/O接口中;在DMA控制器作为从模块时,的方向是送入DMA控制器,此信号有效时,CPU往DMA控制器的内部寄存器中写入信息,即进行编程。
82C37A引脚信号的定义 • ,输入输出设备读信号,低电平有效。在DMA控制器作为主模块时, 作为输出控制信号由DMA控制器送出,此信号有效时,I/O接口部件中的数据被读出送往数据总线;在DMA控制器作为从模块时, 作为输入控制信号送入DMA控制器,此信号有效时,CPU读取DMA控制器中内部寄存器的值。
82C37A引脚信号的定义 • ,DMA传输过程结束信号。 是双向的:当由外部往DMA控制器送一个 信号时,DMA传输过程被外部强迫性地结束;另一方面,当DMA控制器的任一通道中计数结束时,会从 引脚输出一个有效电平,作为DMA传输结束信号。不论是从外部终止DMA过程,还是由内部计数结束引起终止DMA过程,都会使DAM控制器的内部寄存器复位。
82C37A引脚信号的定义 • DACK,DMA控制器送出I/O接口的回答信号。DMA控制器获得CPU送来的总线允许信号HLDA以后,便产生DACK信号送到相应的外设的接口。 • HRQ,总线请求信号。当外设的I/O接口要求DMA传输时,往DMA控制器发送DREQ信号,如果相应通道的屏蔽位为0,则DMA控制器的HRQ端输出为有效电平,从而向CPU发总线请求。
82C37A引脚信号的定义 • A3~A0,最低的4位地址线,它们是双向信号端。在DMA控制器作为从模块时,A3~A0作为输入端,对DMA控制器的内部寄存器进行寻址,这样,CPU 可以对DMA控制器进行编程;在DMA控制器作为主模块时,这4个信号端工作于输出状态,以提供低4位地址,其对应的寄存器地址如表9-2所示。 • A7~A4,这4位地址线始终工作于输出状态或浮空状态。它们在DMA传输时提供高4位地址。
82C37A引脚信号的定义 • ADSTB,地址选通输出信号。此信号有效时,DMA控制器的当前地址寄存器中的高8位地址通过8位数据线DB7~DB0送到外部锁存器。 • AEN,地址输出允许信号。AEN使地址锁存器中的高8位地址送到地址总线上,与芯片直接输出的低8位地址共同构成内存单元地址的偏移量。AEN信号也使与CPU相连的地址锁存器无效,这样,就保证了地址总线上的信号是来自DMA控制器,而不是来自CPU的。
9.1.3 内部寄存器的功能和应用 前面介绍了82C37A内部结构和寄存器,下面将通过82C37A DMA控制器的各种操作来说明这些寄存器所具有的功能。 • 每个DMA通道都配备有2个地址寄存器,其一为基址寄存器,其二为当前地址寄存器。在基址寄存器内存放着DMA操作的起始地址,而在当前地址寄存器内保持着的则是将要访问的下一个存储单元的地址。在向基址寄存器写入的同时,也将自动地把相同的值装入当前的地址寄存器。由此可见,初始的当前地址寄存器的值总是指向DMA传送的存储器起始地址。这些寄存器必须在启动DMA周期之前装入适当的值。
内部寄存器的功能和应用 • 在82C37A芯片内还有一个名为先/后触发器的内部触发器。该触发器标识将哪一个字节写入基址寄存器。如果这个内部触发器的开始状态是逻辑0,那么软件必须向该寄存器写入地址字的低字节;相反,如果它为逻辑1,必须将高字节写入该寄存器。 • 例如,为了把地址1234H写入DMA控制器通道0的基址和当前地址寄存器中,且该DMA控制器的基本I/O地址为ADDER,这里ADDER≤F0H,并且由82C37A的 信号如何产生来决定,那么可以通过执行下列指令来初始化基址寄存器和当前地址寄存器 。
内部寄存器的功能和应用 例【9-1】 MOV AL,34H ;写低字节 OUT ADDER+0,AL MOV AL,12H ;写高字节 0UT ADDER+0,AL 假定该内部触发器已初始化为0 • 82C37A的每个DMA通道还配备有两个字计数寄存器,被分别称之为基本字计数寄存器和当前字计数寄存器。两个寄存器的长度也均为16位。基本字计数寄存器的值规定DMA操作期间所传送的数据字节数。实际传送的字节数总是比编程写入该寄存器的值多1。这是因为DMA传送的结束是通过检测当前字计数值从0000H到FFFFH的变化来实现的。在DMA操作周期的任何时刻,当前字计数寄存器中的值总是表示还剩多少个字节尚未传送。
内部寄存器的功能和应用 对计数寄存器的编程方法与上面介绍的对地址寄存器的编程方法相同。例如,要把计数值0FFFH写入到DMA控制器通道1的基本字计数寄存器和当前字计数寄存器中,设DMAC的基I/O地址为ADDER,且ADDER≤F0H,则可通过执行下列指令来实现 例【9-2】 MOV AL,0FFH ;写低字节 OUT ADDER+3,AL MOV AL,0FH ;写高字节 OUT ADDER+3,AL
82C37A其他5个寄存器 一、命令寄存器(CR-command register) 由图9-1可以看出,82C37A内配备有一个8位的命令寄存器。该寄存器的各位用来控制DMA控制器所有通道的操作方式。图9-3给出了每个控制位的功能;通常是通过这些位的设置来选择各种操作,例如,存储器到存储器之间传送、允许DMA控制器及选择优先级方式等。例如,当位0为1时,则允许存储器到存储器之间的DMA传送方式,而当该位为0时, 则DMA传送操作是在I/O设备和存储器之间进行。另外,若将位4设置为0,则全部4个通道选择均为固定优先级方式;若这位被设置1,则选择的是循环优先级 。
二、方式寄存器(MR-Mode register) 82C37A的方式寄存器用于设备的操作特性。从图9-1可以看出,4个DMA通道的每一个通道都分别有一个方式寄存器,每个寄存器的长度均为6位。其中的各个位用来为每个DMA通道选择各种操作方式。典型方式寄存器的格式如图9-4所示。 • 最低2位代码用以标识写入方式命令字节的通道号。例如,在一个写入通道1的方式寄存器命令中,这2位必须为01。
二、方式寄存器(MR-Mode register) • D2位和D3位规定该通道是形成数据写、数据读还是检验总线周期。例如,如果将这两位设置为01,那么该通道将形成写数据传送,即I/O设备到存储器的DMA数据传送。 • D4和D5分别决定在DMA周期结束及DMA数据传送时如何修改当前地址和当前计数寄存器中的值。
二、方式寄存器(MR-Mode register) • D4允许或禁止自动初始化处理功能。若允许自动初始化,则在DMA操作结束时,分别将基地址和基本字计数寄存器的内容重新装入当前地址和当前计数寄存器内。在这种情况下,该通道已为开始下一次DMA操作做好了准备。 • 在每次DMA数据传送完成时,当前地址寄存器是自动增值还是自动减值,用D5的设置来确定。
二、方式寄存器(MR-Mode register) • 最高2位(即D6和D7),被用来为该通道从4种可能的DMA操作方式中选择出其中的一种 • 这4种操作方式分别称为:请求方式,单次方式,块方式和级联方式。这4种方式允许每次传送1个数据字节或1个字节块 。 • 在请求传送方式中,一旦启动了DMA周期,只要HRQ信号保持有效且还未达到终止计数值(TC),则将仍然连续不断地进行数据字节的传送。
二、方式寄存器(MR-Mode register) • 块传送方式:一旦启动了DMA周期,将连续进行数据传送操作,直至达到了终址计数值。在请求传送方式下,DREQ返回到它的无效状态并将暂停数据传送过程,但在块传送方式下,当DMA周期开始后可在任何时刻释放DREQ信号,而块传送仍将继续进行,直至整个数据块传送完毕。
二、方式寄存器(MR-Mode register) • 单次传送方式:通道被设置为每次只能进行一个数据的传送。另外,如果在当前数据传送完成时还未达到终止计数值,在这种情况下就不会出现自动初始处理操作。如果在当前数据传送完成之前DREQ输入变成了无效信号,只有DREQ再次变为有效后,才可进行另一次数据传送操作。另一方面,如果DREQ信号在整个数据传送周期一直保持为有效,那么82C37A的HRQ输出将转变为无效,即逻辑0电平,以便在进行下一次单次传送之前,允许微处理器至少可以获得一个总线周期的系统总线控制权。
二、方式寄存器(MR-Mode register) 前面已经介绍了如何通过DREQ输入端上的硬件请求信号来启动DMA周期。另外,82C37A也能响应对DMA服务软件的启动请求。请求寄存器就是为达到这一目的而提供的。虽然表9-1中列出的该请求寄存器仅有4位,但每一位都对应一个DMA通道。当一个通道的请求位被置成l时,则启动DMA操作;当被置成0时,则停止DMA操作。使用软件启动的DMA通道必须是块传送操作方式 。
三、请求寄存器(RR-request register) 对请求寄存器中的各位进行置位或复位操作,可通过向82C37A写命令的方法来实现。图9-5中展示出了请求寄存器的格式。
四、屏蔽寄存器(MSR-mask register) • 单个通道屏蔽寄存器 在82C37A内部还提供了一个单个通道屏蔽寄存器,如图9-6所示。D1 D0位的编码分别代表4个通道,D2位为屏 蔽位,当屏蔽位被置1时,将禁止相应通道上的DREQ输入。当 屏蔽位被置0时,将允许相应通道上的DREQ输入,对应的通道可被外部设备激活。
四、屏蔽寄存器(MSR-mask register) • 4个通道屏蔽寄存器 4个通道屏蔽寄存器中的命令如图9-7中。这个命令字可用来同时装入4个通道的屏蔽位。当屏蔽位被置1时,将禁止相应通道上的DREQ输入,相反,如果把屏蔽位置0,则允许DREQ输入,所对应的通道可被外部设备激活。
五、状态寄存器(SR-status register) 状态寄存器,其内含有4个DMA通道的操作状态信息从图9-8中可以看到,其中的低4位标识通道0~3是否已达到它们的终止计数值。 当某一通道的DMA操作达到终止计数值时,通过将相应的TC位设置成逻辑1电平来记录这一事实。
五、状态寄存器(SR-status register) 状态寄存器的高4位表示是否有相应通道的请求被挂起。例如若由软件或硬件把一个DMA请求发送给了通道0,则状态寄存器的位4被置成1。微处理器可通过软件来读取状态寄存器的内容。
9.1.4 82C37A与微处理器的接口 图9-9中展示出了82C37A 与微处理器之间的接口信号方框图 在微机系统中,82C37A是作为外围控制器来工作的,它的操作必须通过软件进行初始化处理,这要通过写它的内部寄存器来实现,这些数据的传送要通过它与微处理器之间的接口来进行。
9.1.4 82C37A与微处理器的接口 图9-10展示出微处理器与82C37A相连接 。 当82C37A没有被外围设备用来进行DMA操作时,此时它处于所谓空闭状态。在这种状态下,微处理器可以向这个DMA控制器输出命令以及读/写它的内部寄存器。
9.1.4 82C37A与微处理器的接口 • 数据线DB0~DB7是进行这些数据传送的通路。所访问的寄存器由DMAC内部接到地址输入端A0~A3的4位寄存器(I/O缓冲)中的地址来确定。 • 在数据传送总线周期,其他地址位被外部电路译码,以产生82C37A的片选输入。在空闲状态时,82C37A不断采样这个片选输入信号,等待它变为有效。在这个输入端上的逻辑0将开启微处理器接口。微处理器分别用信号/IOR和/IOW来通知82C37A是进行输入总线周期还是输出总线周期。由此可见,这实际上是把82C37A映像到了微型计算机的I/O地址空间。
9.1.5 82C37A的DMA接口 82C37A芯片内拥有4个独立的DMA通道,通常,总是把每一个通道指定给一个专门的外围设备。由图9-11可见,该电路有4个DMA请求输入信号,标识为DREQ0~DREQ3。这4位请求输入信号分别与通道0、1、2、3相对应。在空闲状态,82C37A不断地测试这些输入信号,以确定是否有一个是有效的。当某一外围设备欲进行DMA操作时,就通过使82C37A的DREQ输入信号变为1来产生1个服务请求。
9.1.5 82C37A的DMA接口 • 在响应有效的DMA请求时,该DMA的控制器将使它的保持请求回答(HRQ)输出信号变为1。通常,把这个输出信号提供给微处理器的HOLD输入端,并通知该微处理器,DMA控制器要求获得对系统总线的控制权。当微处理器准备放弃对总线的控制权时,它就使其总线信号进入高阻状态,并使保持响应HLDA输出信号为1,来把这一事实通知给82C37A芯片。微处理器的HLDA信号端就接到82C37A芯片的HLDA输入端,以此表明目前系统总线可以由DMA控制器使用。
9.1.5 82C37A的DMA接口 • 当82C37A控制了系统总线时,它就通过输出一个DMA响应信号(DACK)来告诉申请DMA服务的外围设备,它已处于准备就绪状态。注意,在图9-11中,4个DMA请求输入(DREQ0~DREQ3)信号中的每一个信号,都有一个与其相对应的DMA输出响应(DACK0~DACK3)信号。一旦完成了这个DMA请求/响应信号的交换过程,这个外围I/O电路就可在82C37A的控制之下进行对系统总线及存储器的直接访问。
9.1.5 82C37A的DMA接口 • 在DMA总线周期期间,总线是由DMA控制器实施控制的,由82C37A产生地址及形成存储器或I/O数据传送所需要的全部控制信号。 • 在整个DMA总线周期开始时刻,16位的地址输出到地址线A0~A7及数据线DB0~DB7上。数据线上的高端8位地址与地址选通信号(ADSTB)是在同一时刻变为有效的,所以ADSTB是用来锁存地址的高端8位进入外部地址锁存器的定时信号。
9.1.5 82C37A的DMA接口 • 地址允许信号在整个DMA总线周期期间均为有效状态,它一方面能用来允许该地址锁存器,另一方面又用于禁止其他电路连接到总线上。 • 假定要从I/O外部电路将数据传送到存储器,82C37A利用 输出信号来通知I/O电路,把数据放到数据线DB0~DB7上。同时,它利用 信号把总线上的有效数据写入存储器。在这种情况下,数据直接从I/O电路传送到存储器而没有通过82C37A芯片。