第 9 章 DMA 控制器 82C37A 和 时间间隔定时器 82C54

113
第9第 DMA 第第第 82C37A 第 第第第第第第第 82C54

description

第 9 章 DMA 控制器 82C37A 和 时间间隔定时器 82C54. 第 9 章 DMA 控制器 82C37A 和 时间间隔定时器 82C54. 9.1 DMA 控制器 82C37A 9.2 可编程时间间隔定时器芯片 82C54. 教学目的和要求. 掌握 82C37A 、 82C54 的内部结构 掌握 DMA 方式传送的一般过程 掌握 82C54 引脚定义及使用方法 熟练应用 82C54 编程 熟悉 82C37A 内部寄存器的功能及使用,了解 82C37A 引脚定义 . 重点 - PowerPoint PPT Presentation

Transcript of 第 9 章 DMA 控制器 82C37A 和 时间间隔定时器 82C54

Page 1: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

第 9 章 DMA 控制器 82C37A 和 时间间隔定时器 82C54

Page 2: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

第 9章 DMA 控制器 82C37A 和 时间间隔定时器 82C54

9.1 DMA 控制器 82C37A

9.2 可编程时间间隔定时器芯片 82C54

Page 3: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

掌握 82C37A 、 82C54 的内部结构掌握 DMA 方式传送的一般过程掌握 82C54 引脚定义及使用方法熟练应用 82C54 编程熟悉 82C37A 内部寄存器的功能及使用,了解 82C37A 引脚定义 

教学目的和要求

Page 4: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

重点 82C37A 实现 DMA 方式传送的一般原理与过程 82C54 引脚定义及使用, 82C54 的编程应用

难点 82C37A 内部寄存器的功能及编程 DMA 方式传送的一般过程 82C54 的六种工作方式及对应时序     

Page 5: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

9.1 DMA 控制器 82C37A82C37A 芯片拥有以下几个特点: 管脚引线与NMOS8237A 兼容 4个各自独立的DMA通道  可以级联扩展成至任意数量的DMA通道。 高速数据传输:在8MHz时钟时可达每秒4MB;在 12.5MHz 时钟时可达每秒6.25MB ;

存储器到存储器之间传送方式  静态CMOS设计,允许低功耗操作  TTL/CMOS 电平全兼容  内部寄存器可用软件读取 

Page 6: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

9.1.1 82C37A 的内部结构   82C37A 芯片是一个多模式的直接存储器存取控制器,是一种 CHMOS 外围接口。由于它允许外部设备直接从系统存储器传送信息,所以极大地改进了系统的性能。 

 图 9-1 给出了 82C37A DMA 控制器 (或者称 DMAC) 的内部结构框图。从图中可以看出, 82C37A芯片是由定时及控制、优先级编码器及循环优先级逻辑、命令控制及 12 个不同类型的寄存器等功能模块组成。下面简要地介绍每部分电路以及寄存器的主要功能。 

Page 7: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54
Page 8: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C37A 的内部结构 82C37A 的定时及控制部件产生外部总线接口所需要的控制信号。例如,它接受READY及 等输入信号,产生ADSTB 及 AEN 等输出信号。这些信号与输入到 82C37A的时钟信号一起进行的是同步操作。目前高速的 82C37A可在 12.5MHz 的最大时钟速率下进行操作。 

如果 82C37A 收到多个 DMA 服务请求,那么它将按优先级的高低来处理这些 DMA服务请求。在软件控制之下,可选择两种优先级方式中的一种。这两种优先级方式分别被称之为固定优先级和循环优先级。 

CS

Page 9: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

固定优先级方式是在数值上按由小到大顺序给各个通道指定优先级,即通道0的优先级最高,而通道3的优先级最低。 

循环优先级的初始化优先级级别与固定优先级相同。但是,当某个特定级别的DMA请求得到服务之后,进行优先级循环,先前得到服务的通道被指定为最低优先级。 

例如,假设初始化优先级为1的刚刚被服务过,此时通道2就会处于最高优先级,而通道 1则被循环到最低优先级。

82C37A 的内部结构

Page 10: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C37A 的内部结构

82C37A 芯片的命令控制电路对通过微处理器接口送给它的寄存器命令进行译码,由此来确定这次访问的是哪一个寄存器,以及将要形成的是哪种类型操作;另外,在 DMA 操作期间,它通常还要对该电路由程序所决定的操作方式进行译码。 

Page 11: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C37A 的内部结构 由图9-1的逻辑框图可以看出, 82C37A 有 12 个不同类型的内部寄存器。例如当前地址寄存器、当前计数寄存器、命令寄存器、屏蔽寄存器以及状态寄存器等。所有这些寄存器的名称已列于表 9-1 之中,同时在表中还列出了它们的大小及个数。注意,图中有 4 个当前地址寄存器,且其大小均为 16 位,即 4个 DMA 通道的每一个通道都有一个当前地址寄存器。 

Page 12: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

表 9-1 82C37A 内部寄存器

Page 13: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

9.1.2 82C37A 引脚信号的定义

图 9-2 给 出 了 82C37A可

编程 DMA 控制器的引脚图,其引脚定义如下: CLK ,时钟输入信号 ,片选信号 (Chip Select) ,低电平有效 有效时允许 CPU 对 82C37A 进行编程

CS

Page 14: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C37A 引脚信号的定义

译码器不使用 8086/8088 的控制信号( M/

/IO ),因为它有新的存储器读写信号与 I/O读写控制信号 ( 、 、 和 )

RESET ,复位 (Reset) 信号 READY ,准备就绪输入端,高电平表示已准备好。

若把逻辑 0 加到准备就绪输入上,则使 82C37A 进入等待状态,以等待较慢的存储器或 I/O 设备准备就绪后, 82C37A 才继续操作

IOM

IOWIORMEMWMEMR

Page 15: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

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 有效电平。

Page 16: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C37A 引脚信号的定义 DB7 ~ DB0 , 8 位数据线。当 DMAC 为主模块时,

DB7 ~ DB0 输出当前地址寄存器中的高 8 位地址,并通过 ADSTB 打入锁存器,和地址线 A7 ~ A0 输出的低 8 位地址一起构成 16 位的存储器地址;当 DMAC 为从模块时, CPU 通过 DB7 ~ DB0 对 DMAC 进行读写操作

存储器读信号。此信号有效时,所选中的存储器单元的内容被读到数据总线上

MEMR

Page 17: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C37A 引脚信号的定义 存储器写信号。此信号有效时,数据总

线上的内容被写入选中的存储单元 。 输入输出设备写信号。在 DMA 控制器作为

主模块时, 的方向是由 DMA 控制器送出的,此信号有效时,存储器中读出的数据被写入 I/O 接口中;在 DMA 控制器作为从模块时,的方向是送入 DMA 控制器,此信号有效时, CPU 往 DMA 控制器的内部寄存器中写入信息,即进行编程。

MEMW

IOWIOW

Page 18: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C37A 引脚信号的定义

,输入输出设备读信号,低电平有效。在DMA 控制器作为主模块时, 作为输出控制信号由 DMA 控制器送出,此信号有效时, I/O 接口部件中的数据被读出送往数据总线;在 DMA 控制器作为从模块时, 作为输入控制信号送入 DMA 控制器,此信号有效时, CPU 读取 DMA 控制器中内部寄存器的值。

IOR

IOR

IOR

Page 19: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

, DMA 传输过程结束信号。 是双向的 :

当由外部往 DMA 控制器送一个 信号时, DMA传输过程被外部强迫性地结束;另一方面,当 DMA 控制器的任一通道中计数结束时,会从 引脚输出一个有效电平,作为 DMA 传输结束信号。不论是从外部终止 DMA 过程,还是由内部计数结束引起终止 DMA 过程,都会使 DAM 控制器的内部寄存器复位。

EOP

82C37A 引脚信号的定义

EOPEOP

EOP

Page 20: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C37A 引脚信号的定义 DACK , DMA 控制器送出 I/O 接口的回答信

号。 DMA 控制器获得 CPU 送来的总线允许信号 HLDA 以后,便产生 DACK 信号送到相应的外设的接口。

HRQ ,总线请求信号。当外设的 I/O 接口要求 DMA 传输时,往 DMA 控制器发送 DREQ信号,如果相应通道的屏蔽位为 0 ,则 DMA控制器的 HRQ 端输出为有效电平,从而向 CPU 发总线请求。

Page 21: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

A3 ~ A0 ,最低的 4 位地址线,它们是双向信号端。在 DMA 控制器作为从模块时, A3 ~ A0 作为输入端,对 DMA 控制器的内部寄存器进行寻址,这样, CPU 可以对 DMA 控制器进行编程;在 DMA 控制器作为主模块时,这 4 个信号端工作于输出状态,以提供低 4 位地址,其对应的寄存器地址如表 9-2 所示。 A7 ~ A4 ,这 4 位地址线始终工作于输出状态或浮空状态。它们在 DMA 传输时提供高 4位地址。

82C37A 引脚信号的定义

Page 22: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C37A 引脚信号的定义 ADSTB ,地址选通输出信号。此信号有效时,

DMA 控制器的当前地址寄存器中的高 8 位地址通过 8 位数据线 DB7 ~ DB0 送到外部锁存器。

AEN ,地址输出允许信号。 AEN 使地址锁存器中的高 8 位地址送到地址总线上,与芯片直接输出的低 8 位地址共同构成内存单元地址的偏移量。 AEN 信号也使与 CPU 相连的地址锁存器无效,这样,就保证了地址总线上的信号是来自 DMA 控制器,而不是来自 CPU 的。

Page 23: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

表 9-2 软件操作及对应的寄存器地址

Page 24: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

9.1.3 内部寄存器的功能和应用 前面介绍了 82C37A 内部结构和寄存器,下面将通过 82C37A DMA 控制器的各种操作来说明这些寄存器所具有的功能。

每个 DMA 通道都配备有 2 个地址寄存器,其一为基址寄存器,其二为当前地址寄存器。在基址寄存器内存放着 DMA 操作的起始地址,而在当前地址寄存器内保持着的则是将要访问的下一个存储单元的地址。在向基址寄存器写入的同时,也将自动地把相同的值装入当前的地址寄存器。由此可见,初始的当前地址寄存器的值总是指向 DMA 传送的存储器起始地址。这些寄存器必须在启动 DMA周期之前装入适当的值。

Page 25: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

内部寄存器的功能和应用 在 82C37A 芯片内还有一个名为先 / 后触发器的内部触发器。该触发器标识将哪一个字节写入基址寄存器。如果这个内部触发器的开始状态是逻辑 0 ,那么软件必须向该寄存器写入地址字的低字节;相反,如果它为逻辑 1 ,必须将高字节写入该寄存器。

例如,为了把地址 1234H 写入 DMA 控制器通道 0 的基址和当前地址寄存器中,且该 DMA 控制器的基本 I/O 地址为 ADDER ,这里 ADDER≤F0H ,并且由 82C37A 的 信号如何产生来决定,那么可以通过执行下列指令来初始化基址寄存器和当前地址寄存器 。

CS

Page 26: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

内部寄存器的功能和应用例【 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 操作周期的任何时刻,当前字计数寄存器中的值总是表示还剩多少个字节尚未传送。

Page 27: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

内部寄存器的功能和应用 对计数寄存器的编程方法与上面介绍的对地址寄存

器的编程方法相同。例如,要把计数值 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

Page 28: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C37A 其他 5 个寄存器 一、命令寄存器( CR-command register) 由图 9-1 可以看出, 82C37A 内配备有一个 8 位的命令寄存器。该寄存器的各位用来控制 DMA 控制器所有通道的操作方式。图 9-3 给出了每个控制位的功能;通常是通过这些位的设置来选择各种操作,例如,存储器到存储器之间传送、允许 DMA 控制器及选择优先级方式等。例如,当位 0 为 1 时,则允许存储器到存储器之间的 DMA 传送方式,而当该位为 0 时, 则 DMA 传送操作是在 I/O 设备和存储器之间进行。另外,若将位 4 设置为 0 ,则全部 4 个通道选择均为固定优先级方式;若这位被设置 1 ,则选择的是循环优先级 。

Page 29: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54
Page 30: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

二、方式寄存器 (MR-Mode register) 82C37A 的方式寄存器用于设备的操作特性。从图

9-1 可以看出, 4 个 DMA 通道的每一个通道都分别有一个方式寄存器,每个寄存器的长度均为 6 位。其中的各个位用来为每个 DMA 通道选择各种操作方式。典型方式寄存器的格式如图 9-4 所示。

最低 2 位代码用以标识写入方式命令字节的通道号。例如,在一个写入通道 1 的方式寄存器命令中,这 2位必须为 01 。

Page 31: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

二、方式寄存器 (MR-Mode register)

D2 位和 D3 位规定该通道是形成数据写、数据读还是检验总线周期。例如,如果将这两位设置为 01 ,那么该通道将形成写数据传送,即 I/O设备到存储器的 DMA 数据传送。 D4 和 D5 分别决定在 DMA 周期结束及 DMA 数据传送时如何修改当前地址和当前计数寄存器中的值。

Page 32: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

二、方式寄存器 (MR-Mode register)

D4 允许或禁止自动初始化处理功能。若允许自动初始化,则在 DMA 操作结束时,分别将基地址和基本字计数寄存器的内容重新装入当前地址和当前计数寄存器内。在这种情况下,该通道已为开始下一次 DMA 操作做好了准备。

在每次 DMA 数据传送完成时,当前地址寄存器是自动增值还是自动减值,用 D5 的设置来确定。

Page 33: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

最高 2 位 ( 即 D6 和 D7) ,被用来为该通道从 4 种可能的 DMA 操作方式中选择出其中的一种 这 4 种操作方式分别称为:请求方式,单次方式,块方式和级联方式。这 4 种方式允许每次传送 1 个数据字节或 1 个字节块 。在请求传送方式中,一旦启动了 DMA周期,只要 HRQ 信号保持有效且还未达到终止计数值 (TC) ,则将仍然连续不断地进行数据字节的传送。

二、方式寄存器 (MR-Mode register)

Page 34: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

二、方式寄存器 (MR-Mode register)

块传送方式:一旦启动了 DMA周期,将连续进行数据传送操作,直至达到了终址计数值。在请求传送方式下, DREQ返回到它的无效状态并将暂停数据传送过程,但在块传送方式下,当 DMA周期开始后可在任何时刻释放DREQ 信号,而块传送仍将继续进行,直至整个数据块传送完毕。

Page 35: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

单次传送方式:通道被设置为每次只能进行一个数据的传送。另外,如果在当前数据传送完成时还未达到终止计数值,在这种情况下就不会出现自动初始处理操作。如果在当前数据传送完成之前 DREQ 输入变成了无效信号,只有 DREQ再次变为有效后,才可进行另一次数据传送操作。另一方面,如果 DREQ 信号在整个数据传送周期一直保持为有效,那么 82C37A 的 HRQ 输出将转变为无效,即逻辑 0 电平,以便在进行下一次单次传送之前,允许微处理器至少可以获得一个总线周期的系统总线控制权。

二、方式寄存器 (MR-Mode register)

Page 36: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

二、方式寄存器 (MR-Mode register)

前面已经介绍了如何通过 DREQ 输入端上的硬件请求信号来启动 DMA周期。另外, 82C37A也能响应对 DMA服务软件的启动请求。请求寄存器就是为达到这一目的而提供的。虽然表 9-1 中列出的该请求寄存器仅有 4 位,但每一位都对应一个 DMA通道。当一个通道的请求位被置成 l 时,则启动 DMA 操作;当被置成 0 时,则停止 DMA 操作。使用软件启动的 DMA 通道必须是块传送操作方式 。

Page 37: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

三、请求寄存器 (RR-request register)

对请求寄存器中的各位进行置位或复位操作,可通过向82C37A 写命令的方法来实现。图 9-5 中展示出了请求寄存器的格式。

Page 38: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

四、屏蔽寄存器 (MSR-mask register) 单个通道屏蔽寄存器 在 82C37A 内部还提供

了一个单个通道屏蔽寄存器,如图 9-6 所示。D1 D0 位的编码分别代表 4 个通道, D2 位为屏 蔽位,当屏蔽位被置 1 时,将禁止相应通道 上 的 DREQ 输 入 。当 屏蔽位被置 0 时,将允许相应通道上的 DREQ 输 入 , 对 应 的 通道可被外部设备激活。

Page 39: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

四、屏蔽寄存器 (MSR-mask register)

4 个通道屏蔽寄存器 4 个通道屏蔽寄存器中

的命令如图 9-7 中。这个命令字可用来同时装入 4个通道的屏蔽位。当屏蔽位被置 1 时,将禁止相应通道上的 DREQ 输入,相反,如果把屏蔽位置 0 ,则允许 DREQ 输入,所对应的通道可被外部设备激活。

Page 40: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

五、状态寄存器 (SR-status register)

状态寄存器,其内含有 4 个 DMA 通道的操作状态信息从图 9-8中可以看到,其中的低 4 位标识通道 0 ~3 是否已达到 它们的终止计数值。

当某一通道的 DMA操作达到终止计数值时,通过将相应的 TC位设置成逻辑 1 电平来记录这一事实。

Page 41: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

五、状态寄存器 (SR-status register)

状态寄存器的高 4 位表示是否有相应通道的请求被挂起。例如若由软件或硬件把一个 DMA 请求发送给了通道 0 ,则状态寄存器的位 4 被置成 1 。微处理器可通过软件来读取状态寄存器的内容。

Page 42: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

9.1.4 82C37A 与微处理器的接口

图 9-9 中展示出了 82C37A 与微处理器之间的接口信号方框图

在微机系统中, 82C37A 是作为外围控制器来工作的,它的操作必须通过软件进行初始化处理,这要通过写它的内部寄存器来实现,这些数据的传送要通过它与微处理器之间的接口来进行。

Page 43: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

9.1.4 82C37A 与微处理器的接口

图 9-10展示出微处理 器 与 82C37A相连接 。

当 82C37A 没有被外围设备用来进行 DMA 操作时,此时它处于所谓空闭状态。在这种状态下,微处理器可以向这个 DMA 控制器输出命令以及读/写它的内部寄存器。

Page 44: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

9.1.4 82C37A 与微处理器的接口 数据线 DB0 ~ DB7 是进行这些数据传送的通路。所访问的

寄存器由 DMAC 内部接到地址输入端 A0~A3 的 4 位寄存器( I/O缓冲)中的地址来确定。

在数据传送总线周期,其他地址位被外部电路译码,以产生 82C37A 的片选输入。在空闲状态时, 82C37A 不断采样这个片选输入信号,等待它变为有效。在这个输入端上的逻辑 0将开启微处理器接口。微处理器分别用信号 /IOR 和 /IOW 来通知 82C37A 是进行输入总线周期还是输出总线周期。由此可见,这实际上是把 82C37A映像到了微型计算机的 I/O 地址空间。

Page 45: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

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 个服务请求。

Page 46: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

I/O 电路的 I/O 接口

Page 47: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

9.1.5 82C37A 的 DMA 接口 在响应有效的 DMA 请求时,该 DMA 的控制器将使

它的保持请求回答 (HRQ) 输出信号变为 1 。通常,把这个输出信号提供给微处理器的 HOLD 输入端,并通知该微处理器, DMA 控制器要求获得对系统总线的控制权。当微处理器准备放弃对总线的控制权时,它就使其总线信号进入高阻状态,并使保持响应 HLDA 输出信号为 1 ,来把这一事实通知给 82C37A 芯片。微处理器的 HLDA 信号端就接到 82C37A 芯片的 HLDA 输入端,以此表明目前系统总线可以由 DMA 控制器使用。

Page 48: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

9.1.5 82C37A 的 DMA 接口 当 82C37A 控制了系统总线时,它就通过输出一个 DM

A响应信号 (DACK) 来告诉申请 DMA服务的外围设备,它已处于准备就绪状态。注意,在图 9-11 中, 4 个 DMA 请求输入 (DREQ0 ~ DREQ3) 信号中的每一个信号,都有一个与其相对应的 DMA 输出响应 (DACK0 ~ DACK3) 信号。一旦完成了这个 DMA 请求 /响应信号的交换过程,这个外围 I/O 电路就可在 82C37A 的控制之下进行对系统总线及存储器的直接访问。

Page 49: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

在 DMA 总线周期期间,总线是由 DMA 控制器实施控制的,由 82C37A 产生地址及形成存储器或 I/O 数据传送所需要的全部控制信号。 在整个 DMA 总线周期开始时刻, 16 位的地址输出到地址线 A0 ~ A7 及数据线 DB0 ~ DB7 上。数据线上的高端 8 位地址与地址选通信号 (ADSTB) 是在同一时刻变为有效的,所以 ADSTB 是用来锁存地址的高端 8 位进入外部地址锁存器的定时信号。

9.1.5 82C37A 的 DMA 接口

Page 50: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

地址允许信号在整个 DMA 总线周期期间均为有效状态,它一方面能用来允许该地址锁存器,另一方面又用于禁止其他电路连接到总线上。 假定要从 I/ O 外部电路将数据传送到存储器,82C37A利用 输出信号来通知 I/O 电路,把数据放到数据线 DB0 ~ DB7 上。同时,它利用

信号把总线上的有效数据写入存储器。在这种情况下,数据直接从 I/O 电路传送到存储器而没有通过 82C37A 芯片。

9.1.5 82C37A 的 DMA 接口

IOR

MEMW

Page 51: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

9.1.5 82C37A 的 DMA 接口 与此类似,同样也可以产生从存储器到 I/O 电路的 DMA 数据传送。在这种情况下, 82C37A先从存储器读出数据,然后再把它们传送到 I/O电路,最终再将数据传送至外围设备。对于这样的数据传送方式来说, 82C37A 芯片的 和 控制信号有效。

82C37A 所形成存储器到 I/ O 或 I/O 到存储器的 DMA 总线周期,均需用 4 个时钟周期时间。时钟周期的持续时间由加到 CLOCK 输入端的时钟信号的频率所决定。

MEMR IOW

Page 52: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

9.1.5 82C37A 的 DMA 接口

82C37A 还能形成存储器到存储器的 DMA传送。在这样的数据传送中, 和 这 2 个信号均要被使用。与 I/O 到存储器的操作不同,这种存储器到存储器的数据传送需要占用 8 个时钟周期时间。这是因为要用 4 个时钟作为读总线周期,把数据从源存储器单元传送到 82C37A 内部的暂存寄存器,然后再用另外 4 个时钟作为写总线周期,把数据从暂存寄存器传送到目的存储器单元 。

MEMR MEMW

Page 53: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

9.1.5 82C37A 的 DMA 接口

READY 输入信号用来适应低速的存储器或 I/O 电路。在 82C37A将要完成一个存储器或 I/O 总线周期之前, READY必须变为有效的 1 电平。若 READY 为 0 ,则需插入等待状态来扩展当前总线周期的持续时间。

Page 54: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

9.2 可编程时间间隔定时器芯片 82C54

82C54 是一种实现定时和计数功能的外围电路,拥有 3 个独立的 16 位计数器,每个计数器都可通过程序设计的方法设定为实现定时功能的各种操作方式。

可编程时间间隔定时器芯片 82C54 有以下几个特点: 与所有 Intel系列微处理器兼容 可以处理从 DC ~ 12MHz 范围的输入频率信号 3 个独立的 16 位的计数器 最大计数范围为 0 ~ 65535 6 种可编程的计数模式

Page 55: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

状态读返回命令 以二进制或 BCD 计数 与 TTL完全兼容 单 5V供电电压 低功耗的 CHMOS 工作温度范围: C82C54 0C ~ +70C I82C54 -40C ~ +85C M82C54 -55C ~ +125C

Page 56: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

9.2.1   82C54 内部结构

82C54 的内部结构如图 9-12所 示 ,该芯 片内 部 由 数 据 总线缓冲器 、 控制 寄 存 器 、 读/写 控 制 逻 辑以 及 计 数 器 等组成。

Page 57: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C54 内部结构

一、数据总线缓冲器 该缓冲器为 8 位双向三态的缓冲器,可直接挂在数据总线

上。通过它,一方面可以向控制寄存器写入控制字,向计数器写入计数初值;另一方面也可由 CPU 通过该缓冲器读取计数器的当前计数值。

二、读/写控制逻辑 读/写逻辑的功能是接收来自 CPU 的控制信号,包括读

信号 、写信号 、片选信号 和芯片内部寄存器的寻址信号 A1 、 A0 ,并完成对 82C54各计数器的读/写操作 。RD WR CS

Page 58: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C54 内部结构 三、控制字寄存器 接收来自 CPU 的控制字,并由控制字 D7 、 D6 位的编码决

定该控制字写入哪一个计数器的控制寄存器中。 四、计数器 82C54 有 3 个独立的计数器通道,每个通道的结构完全相

同,如图 9-13 所示。每一个通道有一个 16 位减法计数器,还有对应的 16 位初值寄存器和输出锁存器。计数开始前写入的计数初值存于初值寄存器;计数过程中,减法计数器的值不断递减,而初值寄存器中的初值不变。输出锁存器则用于写入锁存命令时锁定当前计数值。

Page 59: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C54每个计数器的内部逻辑图

Page 60: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

9.2.2 82C54 的引脚信号

82C54 有 24条引脚,双列直插式封装,如图 9-14所示。

一、与 CPU 一侧的接口信号

D0 ~ D7 ,三态双向数据线。与 CPU 数据总线相连,用于传递 CPU 与 82C54 之间的 数据信息、控制信息和状态信息。

Page 61: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C54 的引脚信号

片选信号,输入,低电平有效。有效时,表示 82C54 被选中,允许 CPU 对其进行读/写操作。通常连接到 I/O 端口地址译码电路的输出端 。

,写信号,输入,低电平有效。用于控制CPU 对 82C54 的写操作,可与 A1 、 A0 信号配合以决定是写入控制字还是计数初值 。

WR

CS

Page 62: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

,读信号,输入,低电平有效。用于控制 CPU 对 82C54 的读操作,可与 A1 、A0 信号配合读取某个计数器的当前计数值。 A1 、 A0 ,地址输入线。用于寻址 82C54内部的 4 个端口,即 3 个计数器和一个控制字。一般与 CPU 低位的地址线相连, 82C54 的读/写操作逻辑如表 9-3 所示。

RD

82C54 的引脚信号

Page 63: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

表 9-2 82C54 读 / 写操作逻辑 A1 A0 操作功能

0 1 0 0 0 计数初值装入计数器 0 0 1 0 0 1 计数初值装入计数器 1

0 1 0 1 0 计数初值装入计数器 2

0 1 0 1 1 写控制寄存器

0 0 1 0 0 读计数器 0

0 0 1 0 1 读计数器 1

0 0 1 1 0 读计数器 2

CS RD WR

Page 64: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C54 的引脚信号

二、与外部设备的接口信号 CLK[0,1,2],时钟脉冲输入端,用于输入定时脉冲或

计数脉冲信号。 CLK 可以是系统时钟脉冲,也可以由其他脉冲源提供。

GATE[0,1,2],门控输入端,用于外部控制计数器的启动计数和停止计数的操作。两个或两个以上计数器连用时,可用此信号来同步,也可用于与外部某信号的同步 。

OUT[0,1,2,],计数输出端。在不同方式的计数过程中,OUT 引脚上输出相应的信号。

Page 65: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

9.2.3 82C54 的控制字

一、 82C54 的方式控制字 82C54 的方式控制字有 4 个主要功能: 从 3 个计数器中选择一个 确定计数器数据的读写格式 确定计数器的工作方式 选择计数器的计数方式 方式控制字的格式如图 9-15 所示,其中, X表示没

有使用位,通常设置为 0

Page 66: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C54 的控制字格式

Page 67: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C54 的控制字 计数器选择 (D7D6)

决定这个控制字是哪一个通道的控制字。由于 3 个通道的工作是完全独立的,所以需要有 3 个控制字寄存器分别规定相应通道的工作方式。但它们的地址是同一个,即 A1A0= 11( 控制字寄存器的地址 ) 。所以,需要由这 2 位来决定是哪一个通道的控制字 。

Page 68: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

读 / 写格式 (D5D4) CPU 向计数通道写入初值和读取它们的当前状态时,有几种不同的格式 1.若低 8 位计数 , 则令 D5D4 = 01, 只写低 8 位,高 8 位自动置 0 ;2.若高 8 位计数 , 则令 D5D4 = 10, 只写高 8 位,低 8 位自动为 0 ;3.若 16 位计数 , 则令 D5D4= 11 ,先写入低 8 位,后写入高 8 位;4.令 D5D4= 00 ,则把当前计数器中的值锁存到输出寄存器中,以便读取。

Page 69: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C54 的控制字 工作方式 (D3D2D1) 82C54 的每个通道可以有 6 种不同的工作方式,由 D3D2

D1 三位决定,具体情况在 9.2.4节中详细介绍 数制选择 (D0) 82C54 的每个通道都有两种计数制:二进制和二—十进

制 (BCD 码 ) ,由 D0 位决定。在二进制时,写入初值的范围为 0000H ~ FFFFH ,其中 0000H 是最大值,表示65536 。在二—十进制时,写入初值范围为 0000 ~ 9999 ,其中 0000 表示最大值 l0000 。因为计数器是先减1 ,再判断是否为 0 ,所以写入 0 实际代表最大计数值。

Page 70: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C54 的控制字例【 9-3】选用计数器 0 计数,计数值为 1000 ,分别用二进 制和二—十进制( BCD )方式计数,用方式 3 计数,假设系统安排82C54 计数器 0 、 1 、 2 和控制端口的地址分别为: 220H 、221H 、 222H 和 223H ,试对计数器 0 编程初始化

MOV DX, 223H MOV AL , 00110110B ;二进制方式计数 OUT DX, AL ;送计数方式控制字 MOV DX, 220H MOV AX, 1000 ;十进制数 1000 送给 AX OUT DX, AL ;先送低 8 位 MOV AL , AH OUT DX, AL ;后送高 8 位

Page 71: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C54 的编程逻辑二、 82C54 的编程逻辑 当初始化 82C54某个计数通道时,首先把相应的方式

控制字写入到控制字寄存器中,再根据控制字中数据读/ 写格式 (D5D4) 位的规定,写入计数初值到对应的计数通道。 82C54 工作过程中,任一通道的计数值, CPU可用输入指令读取。 CPU 读到的是执行输入指令瞬间计数器的当前值,但 82C54 的计数器是 16 位的,所以要分 2次读至 CPU ,因此,若不锁存的话,在前后两次执行输入指令的过程中,计数值可能已经发生变化了 。

Page 72: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C54 的编程逻辑 锁存当前计数值有下面 3 种方法: 利用 GATE 信号使计数过程暂停 向 82C54 写入一个方式控制字,令 82C54 通道的输出

锁存器锁存。 82C54 的每个通道都有一个 16 位输出锁存器,平时它的值随着通道计数器的值变化。当向通道写入锁存的控制字时,它把计数器的当前值锁存 ( 计数器可继续计数 ) ,于是 CPU 读取的就是输出锁存器的值。当对计数器重新编程,或读取计数值后,自动解除锁存状态,它的值又随减法计数器变化 。

写读回命令锁存

Page 73: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C54 的编程逻辑

Page 74: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C54 的编程逻辑 82C54 的另一种工作方式,称为读回方式。这种工作

方式允许程序用一条命令就可锁存全部 3 个计数器的当前计数值和状态信息。读回命令的格式如图 9-16所示,读回命令时控制字寄存器中的 D6 和 D7 位均为1 。其中,使 D1 位 (CNT0) 、 D2 位 (CNTl) 和 D3 位 (CNT2)分别对应 3 计数器,为 1 选中计数器,为 0 不选中计数器, D4 位为 0 ,表示将锁存状态信息, D5 位为 0 表示将锁存计数值。这样, 3 个计数器的当前计数值和状态信息就可以同时锁存,以便分时读出。

Page 75: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

9.2.4 82C54 的六种工作方式 82C54 的每一个计数器都可以按照控制字的规定有 6 种

不同的工作方式。下面结合时序波形图介绍各种工作方式的计数过程。

一、方式 0( 计数结束中断方式 ) 时序如图 9-17 计数过程 当写入方式 0 控制字后, OUT立即变为低电平,并且在

计数过程中一直维持低电平。若 GATE= 1 ,写入初值后,CLK 第 1 个下降沿到,计数值装入计数器,随后每一个 CLK脉冲下降沿到,计数器减 1 。计数器减到零时, OUT输出变为高电平,并且一直保持到该通道重新装入计数值或重新设置工作方式为止。

Page 76: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

GATE 信号的影响 门控信号 GATE 可以用来控制计数过程, GATE 为低电平时暂停计数,当 GATE重新为高电平时又恢复计数。新的初值对计数过程的影响 方式 0 是写一次计数值,只计数一遍,计数器不会自动重装初值重新开始计数。如果在计数过程中写入新的计数初值,则在写入新值后的下一个时钟下降沿计数器将按新的初值计数,即新的初值是立即有效的。

方式 0

Page 77: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

方式 0波形图

Page 78: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

方式 0波形图

Page 79: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

备注 : 下面的约定适用于所有的工作方式波形图: 计数器编程采用二进制方式,只对低字节操作 (LSB) ; 计数器的片选信号 一直处于低电平; CW表示控制字 (Control Word) ; CW=10 表示 1

0H 写入计数器; LSB 表示计数器的低字节; 图下的数字表示计数值:上面的数是高字节,下面

的数是低字节; N 表示一个不确定的计数值 

CS

Page 80: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

二、方式 1 ( 可编程单稳态触发器)  方式 1 的时序如图 9-18 所示。这种方式由外部门

控信号 GATE 上升沿触发,产生一单拍负脉冲信号,脉冲宽度由计数初值决定。 

计数过程 写入控制字后, OUT 输出为高电平。写入计数初值之后,计数器并不立即开始计数,而要等到 GATE上升沿后的下一个 CLK 输入脉冲的下降沿, OUT输出变低,计数才开始。结束时, OUT 输出变高,从而产生一个宽度为 N 个 CLK周期的负脉冲。 

Page 81: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

二、方式 1 GATE 信号的影响 方式 1 中, GATE 信号的作用可从两个方面进行说明。 

第一,在计数结束后,若再来一个 GATE 信号上升沿,则下一个时钟周期的下降沿又从初值开始计数,而不需要重新写入初值,即门控信号可重新触发计数。 

第二,在计数过程中,若再来一个门控信号的上升沿,也在下一个时钟下降沿从初值起重新计数,即终止原来的计数过程,开始新的一轮计数 

Page 82: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

新的初值对计数过程的影响 如果在计数过程中写入新的初值,不会立即影响计数过程,只有下一个门控信号到来后的第一个时钟下降沿,才终止原来的计数过程,按新值开始计数。即新的初值下次有效。

方式 1波形图

Page 83: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

方式 1波形图

Page 84: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

三、方式 2 (脉冲波发生器、分频器 )

方式 2 的工作波形如图 9-19 所示。这种方式的功能如同一个 N分频计数器,输出是输入时钟按照计数值 N分频后的一个连续脉冲。

计数过程  写入控制字后的第一个 CLK 时钟上升沿,

输出端 OUT 变成高电平。若 GATE= 1 ,写入计数初值后的第一个时钟下降沿开始减1 计数。

Page 85: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

三、方式 2 减到 1 时,输出端 OUT变为低电平,减到 0

时,输出 OUT又变成高电平,同时从初值开始新的计数过程。因此,方式 2 能自动重装初值,输出固定频率的脉冲,也称之为分频器。 

GATE 信号的影响  方式 2 中, GATE 信号为低电平时终止计数,

而由低电平恢复为高电平后的第一个时钟下降沿重新从初值开始计数。由此可见, GATE 一直维持高电平时,计数器为一个 N分频器。 

Page 86: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

新的初值对计数过程的影响。如果在计数过程中写入新的初值,且 GATE 信 号 一 直维持高电平,则新的初值不会立即影响当前的计数过程,但在计数结束后的下一个计数周期将按新的初值计数,即新的初值下次有效。

方式 2波形图

Page 87: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

方式 2波形图

Page 88: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

四、方式 3 ( 方波发生器 )方式 3 的工作波形如图 9-20 所示 

Page 89: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

方式 3波形图

Page 90: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

四、方式 3 计数过程 方式 3 的计数过程按计数初值的不同分为两种情况:( 1 )计数初值为偶数 写入控制字后的第一个时钟上升沿,输出端 OUT变成高电平。若 GATE= 1 ,写入计数初值后的第一个时钟下降沿开始减 1 计数。减到 N/2 时,输出端 OUT变为低电平;减到 0 时,输出端 OUT又变成高电平,并重新从初值开始新的计数过程。可见,输出端 OUT 的波形是连续的方波,故称方波发生器。 

Page 91: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

( 2 )计数初值为奇数 写入控制字后的时钟上升沿,输出端 OUT变成高电平。若 G

ATE= 1 ,写入计数初值后的第一个时钟下降沿开始减 1 计数,减到 (N+1)/2 以后,输出端 OUT变为低电平;减到 0 时,输出端 OUT又变成高电平,并重新从初值开始新的计数。这时输出的波形为连续的近似方波。 

Page 92: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

四、方式 3 GATE 信号的影响 GATE= l,允许计数, GATE= 0 ,禁止计数; 如果在输出端 OUT 为低电平期间, GATE 变低,则 OUT 将立

即变高,并停止计数。当 GATE 变高以后,计数器重新装入初值并重新开始计数。

新的初值对计数过程的影响 如果在计数过程中写入新的初值,而 GATE 信号一直维持高

电平,则新的初值不会立即影响当前的计数过程,只有在计数结束后的下一个计数周期,才按新的初值计数。若写入新的初值后,遇到门控信号的上升沿,则终止现行计数过程,从下一个时钟下降沿开始按新的初值进行计数。

Page 93: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

五、方式 4 (软件触发选通方式 ) 计数过程 写入方式控制字后, OUT 输出高电平。 若 GATE= 1 ,写入初值后的下一个 CLK 脉冲开始减 1 计

数,计数到达 0 值 ( 注意:不是减到 1) , OUT 输出为低电平,持续一个 CLK 脉冲周期后再恢复到高电平。

门控信号的影响 GATE= 1 时,允许计数; GATE 信号变低,禁止计数,输

出维持当时的电平。这种方式依赖于装入计数值触发工作,因此,称为软件触发选通方式 。

Page 94: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

新 的初值 对 计 数过程的影响 在计数过程中改变计数值,则在写入新值后的下一个时钟下降沿计数器将按新的初值计数,即新值是立即有效的。

方式 4波形图

Page 95: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

方式 4波形图

Page 96: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

六、方式 5 (硬件触发选通方式 ) 计数过程 写入控制字后,输出 OUT 即为高电平。写入计数初值后,计数器并不立即开始计数,而是由门控脉冲的上升沿触发。计数结束 ( 计数器减到 0) ,输 出一个持续时间为一个 CLK时钟周期的负脉冲,然后输出恢复为高电平。直到 GATE 信号再次触发。

输出负脉冲可以用作选通脉冲,它是通过硬件电路产生的门控信号上升沿触发得到的,所以叫硬件触发选通方式。

Page 97: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

六、方式 5 门控信号的影响

若在计数过程中,又有一个门控信号的上升沿,则立即终止当前的计数过程,且在下一个时钟下降沿,又从初值开始计数,如果计数过程结束后,来一个门控上升沿,计数器也会在下一个时钟的下降沿,又从初值开始减 1 计数,即门控信号的上升沿任何时候到来,都会立即触发一个计数过程。

Page 98: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

新的初值对计数过程的影响 如果在计数过程中写入新的初值,则新的初值不会立即影响当前的计数过程,只有到下一个门控信号上升沿到来后,才从新的初值开始减 1 计数。即新的计数初值在下一个门控信号上升沿触发后有效。

Page 99: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

方式 5波形图

Page 100: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

9.2.5 82C54 几种工作方式的比较一、计数值 N 与输入 CLK 和输出 OUT 的关系

82C54 在不同工作方式下,计数值 N 与输入 CLK 时钟脉冲和输出 OUT 的关系是不同的,如表 9-4 所示。

Page 101: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

表 9-4 计数值 N 与输入 CLK 和输出 OUT 的关系

方式 功能 N 与 CLK 和 OUT 的关系

0 计完最后一个数中断 写入 N 后,过 N+1 个 CLK 输出变高

1 硬件再触发单拍脉冲 宽度为 N-1 个 CLK 的正脉冲

2 速率发生器 每 N 个 CLK ,输出 N-1 个 CLK 高 , 1个 CLK 低

3 方波速率发生器 N 为偶数:输出为 N/2 个 CLK 高, N/2 个 CLK 低的方波; N 为奇数:输出为 (N+1)/2 个 CLK 高, (N-1)/2 个CLK 低的方波

4 软件触发选通 写入 N 后过 N+1 个 CLK ,输出一个CLK宽度的负脉冲

5 硬件触发选通 门控触发后过 N+1 个 CLK, 输出一个CLK宽度的负脉冲

Page 102: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C54 几种工作方式的比较二、启动计数和重复计数的条件  所有工作方式都必须设置计数值才能够开始工作,但不是所有的方式一经设置计数值就马上开始计数,需要有一定的条件才能工作。有些方式一经启动,计数器就永无休止的工作下去,而有些方式只能计数一次。如果要重复计数同样需要某些条件,这些条件如表 9-5 所示 。

Page 103: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

表 9-5 启动计数和重复计数的条件 方 式 功 能 启动条件 重复条件

0 计完最后一个数中断 写计数值 写计数值

1 硬件再触发单拍脉冲 外部触发 外部触发

2 速率发生器 写计数值 自动 3 方波速率发生器 写计数值 自动

4 软件触发选通 写计数值 写计数值

5 硬件触发选通 外部触发 外部触发

Page 104: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C54 几种工作方式的比较

三、门控信号的作用  82C54 在不同的工作方式下,门控信号 GATE 的作用如 表 9-6 所示。 

Page 105: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

表 9-6 门控信号的作用 方 式

功 能

GATE

低或变为低 上升沿 高

0 计完最后一个数中断 禁止计数 --- 允许计数 1 硬件再触发单拍脉冲 --- (1)启动计数

(2) 下 一 CLK后使输出变低

---

2 速率发生器 (1)禁止计数(2)立即使输出为高

(1)重新装入计数值(2)启动计数

允许计数

3 方波速率发生器 (1)禁止计数(2)立即使输出为高

启动计数 允许计数

4 软件触发选通 禁止计数 --- 允许计数 5 硬件触发选通 --- 启动计数 ---

Page 106: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C54 几种工作方式的比较

 四、在计数过程中改变计数值   82C54 的六种工作方式都可以在计数器计

数过程中改变计数值。新的计数值什么时候起作用,随工作方式不同而有差异,具体区别如表 9-7 所示 。

Page 107: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

表 9-7 在计数过程中改变计数值

方式 功 能 改变计数值

0 计完最后一个数中断 立即有效

1 硬件再触发单拍脉冲 外部触发后有效

2 速率发生器 计数到 1 后有效 3 方波速率发生器 (1) 外部触发后有效

(2) 计数到 0 后有效 4 软件触发选通 立即有效

5 硬件触发选通 外部触发后有效

Page 108: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C54 几种工作方式的比较

五、 82C54 应用举例  例【 9-4】设一片 82C54 接在系统中,如图 9-23 所

示。计数器 0 、 1 、 2 及控制口地址分别为 320H 、 321H 、 322H 以及 323H ,用计数器 0 与计数器 1级联定时,在 OUT1 输出对称方波,使 LED 点亮 0.5S ,熄灯 0.5S ,周而复始,试对计数器 0 和计数器 1初始化编程 

  分析:由于 CLK0 输入 f=1MHz,所以周期 t0=1μs ,而定时时间间隔为 1S ,那么计数初始值: 1000ms÷1μs=1000000 ,分配为 1000×1000 ,即计数器 0 与 1分别送初始值 1000 ,均选用二进制计数,并采用方式3 计数,编程如下:

Page 109: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C54 应用举例MOV DX, 323H ;控制端口地址给 DXMOV AL , 00110110B ;计数器 0 控制字OUT DX, ALMOV AX, 1000MOV DX, 320HOUT DX, AL ;先送低 8 位MOV AL , AHOUT DX, AL ;后送高 8 位MOV DX, 323HMOV AL , 01110110B ;计数器 1 控制字 OUT DX, ALMOV DX, 321HMOV AX, 1000OUT DX, AL ;先送低 8 位MOV AL , AHOUT DX, AL ;后送高 8 位

Page 110: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C54 应用举例

计数器 0 输出周期为 1ms 的方波,计数器 1 输出周期为 1000ms 的方波,低电平使 LED导通发亮。当每个计数器送完初始值后,要等到下一个完整的 CLK 时钟到来时,减法计数器才获得计数初始值,并开始作减1 计数。只要 82C54 不掉电,它将不停顿地对外部脉冲进行计数。

Page 111: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C54 应用举例

Page 112: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

82C54 应用举例

例【 9-5】假如一片 82C54 的 3 个计数器全部级联起来,外部计数脉冲的频率为 2MHz,采用二进制方式计数,最长的定时间隔是多少?

解:①输入 f=2MHz,所以周期 t=0.5μs ②每个计数器的初值为 0 时 , 实际初值相当于 6553

6 ,则第一级定时间隔为 65536×0.5μs=32.768ms ③3 个计数器全部级联,定时间隔为 :

T=65536×65536×65536×0.5μs

Page 113: 第 9 章   DMA 控制器 82C37A 和        时间间隔定时器 82C54

习 题 9

9.6 9.8 9.10 9.11