Presentation is loading. Please wait.

Presentation is loading. Please wait.

第 12 章 8237A DMA控制器及其应用 中国科学技术大学 何克东.

Similar presentations


Presentation on theme: "第 12 章 8237A DMA控制器及其应用 中国科学技术大学 何克东."— Presentation transcript:

1 第 12 章 8237A DMA控制器及其应用 中国科学技术大学 何克东

2 在通常情况下,计算机系统中的数据传送是由CPU来控制的。不管是查询方式还是中断方式,每传送一个字节或者一个字,都需要CPU不断的检查数据是否传送完毕,是否要传送下一个数据。另外在查询方式或者中断方式下,需要执行相应的查询或者中断服务程序,这样就会大大降低数据的传送速度。 DMA (Direct Memory Access 直接存储器存取)方式是用硬件实现存储器与存储器之间、存储器与I/O设备之间直接进行高速数据传送,不需要CPU的干预,减少了中间环节,而且存储器地址的修改和传送完成的报告均由硬件自动完成,所以极大地提高了传送速度。 DMA传送方式通常用来高速传送大批量的数据块。如磁盘存取、图像处理及高速数据采集系统等。

3 在DMA期间由DMAC(直接存储器存取控制器)控制总线,负责一批数据的传输,数据传送完成后,再把总线的控制权交还给CPU。由于DMA传送期间,CPU让出总线控制权,这就可能影响诸如中断请求的及时响应和处理;又因为DMA传送方式的高速度是以增加系统的复杂性和成本为代价的(即用硬件控制代替软件控制)。所以,在一些小系统中,当对传送速度和传送量要求不高时,一般并不用DMA方式。

4 DMA传送包括以下三种操作: ①DMA读传送,存储器→ I/O设备。 ②DMA写传送,I/O设备→存储器。 ③存储单元之间传送,存储器→存储器。

5 实现DMA传送的关键部件是DMA控制器(DMAC)。系统总线分别受到CPU和DMAC这两个部件的控制,即CPU 可以向地址总线、数据总线和控制总线发送信息(非DMA方式),DMAC也可以向地址总线、数据总线和控制总线发送信息(DMA方式)。 但在同一时刻,系统总线只能接受一个部件的控制。究竟哪个部件来控制系统总线,是通过这两个部件之间的“联络信号”控制实现的。

6 ①I/O设备向DMAC发出DMA请求(DREQ)。
②DMAC在接到I/O设备发出的DMA请求后,向CPU发出总线请求(HRQ),请求CPU脱离对系统总线的控制,而由DMAC接管对系统总线的控制。 ③CPU在执行完当前指令的当前总线周期后(不一定是最后一个总线周期,注意和中断的区别),向DMAC发出总线响应信号(HLDA)。 ④CPU脱离对系统总线的控制,处于等待状态(但一直监视DMA总线请求信号),由DMAC接管对系统总线的控制。

7 ⑤DMAC向I/O设备发出DMA应答信号(DACK)。
⑥DMAC把存储器与I/O设备之间进行数据传送所需要的有关地址,送到地址总线,通过控制总线向存储器和I/O设备发出读或写信号,从而完成一个字节的传送。 ⑦当设定的字节数据传送完毕后(DMAC自动计数),DMAC将总线请求信号变成无效,同时脱离对系统总线的控制,CPU检测到总线请求信号变成无效后(CPU一直在监视总线请求信号),也将总线响应信号变成无效,CPU恢复对系统总线的控制,继续执行被DMAC中断的、当前指令的当前总线周期。

8 DMA控制器在系统中的两种工作状态 DMA控制器(DMAC)是作为存储器与I/O设备或者存储器与存储器之间实现高速数据传送的专用处理器。在系统中它有两种工作状态:从态和主动态。当DMAC处于从态时,称其为受控器,当DMAC处于主动态时,称其为主控器。 从态 在DMAC获得总线控制权之前,DMAC受CPU控制。此时,CPU可对DMAC进行初始化编程,也可从DMAC中读出状态。当DMAC上电或复位时,DMAC自动处于从态。 主动态 在DMAC获得总线控制权之后,DMAC取代CPU而成为系统总线的主控者,接管和控制系统总线。通过总线向存储器或I/O设备发出地址、读/写信号,以控制在两个实体之间的数据传送。

9 12.1 8237A的组成和工作原理 每个8237A芯片有4个DMA通道,就是有4个DMA控制器 每个DMA通道具有不同的优先权
一次传送的最大长度可达64KB 多个8237A芯片可以级连,扩展通道数

10 一、 8237A的内部结构 内部结构和外部引脚都相对比较复杂 应用观点,内部主要由两类寄存器组成 通道寄存器 控制和状态寄存器

11 (A15~A8) (6×4) 8237A的内部结构

12 时序和控制逻辑 当8237A作为从控器时,该部分接收系统送来的控制信号,完成相应的控制在操作。当8237A作为主控器时,该部分向系统存储器和I/O接口电路发出相应的控制信号。 优先级控制逻辑 该部分电路根据CPU在初始化8237A时写入的命令,对同时提出DMA请求的多个通道进行优先级管理,以决定哪个通道的优先级最高。8237A有固定优先级和循环优先级两种优先级管理方式。无论采用那种优先级管理方式,一旦某个DMA请求被系统响应后,即使有高优先级的DMA请求出现,也必须等到该DMA处理过程结束,才能被系统响应。这一点和中断处理时,高优先级中断请求可以打断低优先级中断请求是不一样的。

13 I/O缓冲器 I/O缓冲器包括数据缓冲器和地址缓冲器两部分。
DB7~DB0:当8237A作为从控器时,DB7~DB0作为数据线,用于传送CPU的控制命令和内部寄存器的内容。当8237A作为主控器时,DB7~DB0作为地址线,传送16位地址的高8位A15~A8,并由ADSETB选通信号将其锁存在高8位地址锁存器中。若8237A工作在存储器到存储器传送方式,源存储器的数据先经由DB7~DB0读入8237A的暂存寄存器,再传送到目的存储器。 A3~A0: 四位I/O缓冲器。当8237A作为从控器时,用于选择8237A的内部寄存器。当8237A作为主控器时,输出16位地址的最低4位。 A7~A4: 四位输出缓冲器。当8237A作为主控器时,输出16位地址的A7~A4部分。

14 命令控制逻辑 当8237A处于在从态时,该部分电路接收CPU送来的A3~A0,经译码后,选择8237A内部相应的寄存器。在写入方式控制字、请求命令字或屏蔽命令字时,对其中的最低两位(D1D0)进行译码,以确定通道号。A3~A0与IOR、IOW配合可以组合成各种操作命令。

15 内部寄存器 8237A内部包含4个独立的通道,每个通道包含两个16位的地址寄存器(基地址寄存器、当前地址寄存器)、两个16位的字节计数器(基字节计数器、当前字节计数器)、一个6位的方式寄存器、一个DMA请求触发器和一个DMA屏蔽触发器。 4个通道共用一个8位的命令寄存器、一个8位的状态寄存器、一个8位暂存寄存器、一个4位屏蔽寄存器和一个4位请求寄存器。 上述这些寄存器都是可编程的,另外还有不可编程的字节数暂存器和地址暂存器等寄存器。

16 二、 8237A的引脚功能

17 1. 请求与响应信号 DREQ0~DREQ3:DMA通道请求。当外设需要请求DMA服务时,将DREQ信号置成有效电平,并要保持到产生响应信号。 HRQ:总线请求。8237A输出有效的HRQ高电平,向CPU申请使用系统总线。 HLDA:总线响应。8237A接受来自CPU的响应信号HLDA,取得了总线的控制权。 DACK0~DACK3:DMA通道响应。8237A使请求服务的通道产生相应的DMA响应信号。

18 2. DMA传送控制信号 A0~A7:地址线。输出低8位存储器地址。
DB0~DB7:数据线。输出高8位存储器地址;存贮器与存贮器的传送期间,用于数据传送。 ADSTB:地址选通。DMA传送开始时,输出高有效,把在DB0~DB7上输出的高8位地址锁存在外部锁存器中。 AEN:地址允许。输出高有效,将锁存的高8位地址送入系统总线,与芯片此时输出的低8位地址组成16位存储器地址。

19 2. DMA传送控制信号(续) MEMR:存储器读。有效将数据从存储器读出 MEMW:存储器写。有效将数据写入存储器
IOR:I/O读。有效将数据从外设读出 IOW:I/O写。有效将数据写入外设 READY:准备好。DMA传送的S3下降沿检测到为低时,插入等待状态Sw,直到READY为高才进入第4个时钟周期S4。 EOP:过程结束。DMA传送过程结束,输出一个低有效脉冲。外部输入低脉冲信号,则终结DMA传送。

20 3. 处理器接口信号 DB0~DB7:数据线。用于8237A与微处理器进行数据交换。 A0~A3:地址线。用以选择芯片内部寄存器。
3. 处理器接口信号 DB0~DB7:数据线。用于8237A与微处理器进行数据交换。 A0~A3:地址线。用以选择芯片内部寄存器。 CS:片选。低有效时,微处理器与8237A通过数据线通信,主要完成对8237A的编程。 IOR:I/O读。读取8237A内部寄存器。 IOW:I/O写。写入8237A内部寄存器。 CLK:时钟。控制芯片内部操作和数据传输。 RESET:复位。使8237A处于初始状态。

21 于是,引脚分成两种作用 8237A具有两种工作状态 8237A的两种工作状态 空闲周期: 作为接口电路,受CPU控制的工作状态 有效周期:
作为DMAC控制DMA传送的工作状态 于是,引脚分成两种作用

22 与CPU连接 (空闲周期)的引脚 与外设连接 (有效周期)的引脚 CLK、RESET A0~A3、CS、DB0~DB7 IOR、IOW
HRQ、HLDA AEN、ADSTB、READY、EOP A0~A7、DB0~DB7 IOR、IOW、MEMR、MEMW DREQ0~DREQ3、DACK0~DACK3

23 三、 8237A的寄存器 全部都用地址A0~A3区分 8237A共有10种内部寄存器,对它们的操作有时需要配合3个软件命令
不需要通过数据总线写入控制字 直接由地址和控制信号译码实现 全部都用地址A0~A3区分

24 1. 当前地址寄存器 存放DMA传送过程中的内存地址,每次传送一个字节后,地址自动加1(或减1),它的初值和“基地址寄存器”的内容相同。两者由CPU同时写入统一端口。自动预置时,EOP信号使当前地址寄存器的内容重新预置为基地址值,可读、可写。 该寄存器的值减至0,再减1(从0减到FFFFH)时,终止计数

25 2. 当前字节数寄存器 传送N个字节,初始值为N-1 保持DMA传送的剩余字节数 每次传送后,该寄存器的值减1
2. 当前字节数寄存器 保持DMA传送的剩余字节数 每次传送后,该寄存器的值减1 这个寄存器的值可由CPU写入和读出 该寄存器的值减至0,再减1(从0减到FFFFH)时,终止计数 传送N个字节,初始值为N-1

26 3、基地址寄存器 存放本通道DMA传送时要控制的存储区的首地址或末地址。在初始化时,由CPU以先低位字节后高位字节顺序与当前地址寄存器的值一起被写入;数据传送过程中,基地址寄存器的内容不变。在自动预置方式下,当EOP有效时,8237A将基地址寄存器的内容重新装入“当前地址寄存器”。只能写,不能读。

27 4、基字节数寄存器 存放本通道DMA传送过程中的总字节数。在初始化时,由CPU以先低位字节后高位字节顺序写入;传送过程中,基本字节计数器的内容不变。其作用是在自动预置时,将它的内容重新装入“当前字节计数器”。只能写,不能读。

28 5. 命令寄存器 存放8237A的命令字 设置8237A芯片的操作方式 影响每个DMA通道 复位时,命令寄存器清零

29 命令字格式 D7 D6 D5 D4 D3 D2 D1 D0 0 禁止存储器之间传送 1 允许存储器之间传送 0 固定优先权 1 循环优先权
0 允许通道0地址改变 1 禁止通道0地址改变 × 若D0=0 0 滞后写 1 扩展写 × 若D3=1 0 允许8237工作 1 禁止8237工作 0 DREQ高有效 1 DREQ低有效 0 正常时序 1 压缩时序 × 若D0=1 0 DACK低有效 1 DACK高有效

30 禁止/允许存储器到存储器传送方式 当进行存储器之间的数据传送时,8237A约定:由通道0提供源地址,通道1提供目的地址,并把准备传送的字节数写入通道l的字节计数器。存储器到存储器传送方式下,每传送一个字节需要两个总线周期,第一个总线周期把源地址单元的数据读入8237A的暂存器,第二个总线周期把暂存器的内容放到数据总线上,在写信号的控制下,写入目的地址单元。然后两通道的地址各自加1或减1。通道1的字节计数器减1,直到产生EOP信号时,结束DMA方式。

31 禁止/允许通道0地址保持不变 在存储器向存储器传送时, D1=1,保持源(通道0)地址不变,这样就可以把某个源地址单元的数据写到不同的目的地址单元中。 正常/压缩时序 8237A有两种工作时序。当D3=0时,选择正常时序,每传输一个数据字节一般用S2、S3、S4,3个状态周期。当D3=1时,选择压缩时序 ,每传输一个数据字节只需S2、S4,2个状态周期。此时,S2状态修改低8位地址,把读和写操作都压缩在S4状态中完成。如果系统各部分的速度比较高,在DMA期间,便可用压缩时序,这样可提高DMA的传输速率。但命令字的D0=1(存储器到存储器传送)时,不能用压缩时序

32 固定/循环优先级 固定优先级时,通道0的优先级最高,通道3的优先级最低;循环优先级时,每次DMA操作后,各个通道的优先级都发生变化。已服务过的通道的优先级变为最低,而它的下一个通道的优先级变为最高,如此循环。 注意:DMA的优先级排序只是用来决定同时请求DMA服务的通道的响应次序,而任何一个通道一旦进入DMA服务后,其他的通道必须等到该通道的服务结束后,才可进行DMA服务,这与中断的嵌套处理不同。

33 扩展写 扩展写是把在正常时序下在S4状态下出现的写信号(IOW或MEMW),提前(扩展)到S3状态,与写信号同时变的有效,写信号被扩展到2个时钟周期。这样可以使写入设备有更多的写入时间。当命令字的D5=1时,就采用扩展写方式。但命令字的D3=1(采用压缩时序)时,不能扩展写。

34 6. 工作方式寄存器 存放相应通道的方式控制字 选择某个DMA通道的工作方式 其中用最低2位选择哪个DMA通道

35 方式字格式 D7 D6 D5 D4 D3 D2 D1 D0 0 地址增量(加1) 1 地址减量(减1) 00 DMA校验 01 DMA写
11 非法 ×× 若D7D6=11 00 通道0 01 通道1 10 通道2 11 通道3 0 禁止自动预置 1 允许自动预置 00 请求方式 01 单字节方式 10 数据块方式 11 级联方式

36 DMA传送类型 DMA读——把数据由存储器传送到外设 由MEMR有效从存储器读出数据,由IOW有效把这一数据写入外设
由IOR有效从外设输入数据,由MEMW有效把这一数据写入存储器。 DMA校验——空操作 用于对器件进行测试 存储器和I/O控制线保持无效,不进行传送

37 自动预置方式 每当DMA过程结束信号EOP产生时(不论是内部终止计数还是外部输入该信号),用基地址寄存器和基字节数寄存器的内容,使相应的现行寄存器恢复为初始值,包括恢复屏蔽位、允许DMA请求,这样就作好了下一次DMA传送的准备。

38 DMA传送方式-单字节方式 每次DMA传送时仅传送一个字节 传送一个字节之后,字节数寄存器减1,地址寄存器加1或减1,HRQ变为无效
8237A释放系统总线,将控制权还给CPU 若传送后使字节数从0减到FFFFH,则终结DMA传送或重新初始化 特点: 一次传送一个字节,效率略低 DMA传送之间CPU有机会重新获取总线控制权

39 DMA传送方式-数据块方式 由DREQ启动就连续地传送数据,直到字节数寄存器从0减到FFFFH终止计数,或由外部输入有效信号终结DMA传送
DREQ只需维持有效到DACK有效 特点: 一次请求传送一个数据块,效率高 整个DMA传送期间CPU长时间无法控制总线(无法响应其他DMA请求、无法处理中断等)

40 DMA传送方式-请求方式 DREQ信号有效就连续传送数据 DREQ信号无效,DMA传送被暂时中止,8237A释放总线,CPU可继续操作
如果字节数寄存器从0减到FFFFH,或者由外部送来一个有效的信号,将终止计数 特点: DMA操作可由外设利用DREQ信号控制传送的过程

41 DMA传送方式-级连方式 用于通过多个8237A级连以扩展通道 第二级的HRQ和HLDA信号连到第一级某个通道的DREQ和DACK上
第二级芯片的优先权等级与所连通道的优先权相对应 第一级只起优先权网络的作用,实际的操作由第二级芯片完成

42 7. 请求寄存器 存放软件DMA请求状态 除硬件DMA请求外,当工作在数据块传送方式时也可以通过软件发出DMA请求
7. 请求寄存器 存放软件DMA请求状态 除硬件DMA请求外,当工作在数据块传送方式时也可以通过软件发出DMA请求 若是存贮器到存贮器传送,则必须由软件请求启动通道0

43 请求字格式 D7 D6 D5 D4 D3 D2 D1 D0 00 通道0 01 通道1 10 通道2 11 通道3 任意 0 复位 1 置位

44 8. 屏蔽寄存器 控制外设硬件DMA请求是否被响应(为0允许),各个通道互相独立。3种方法: 复位使4个通道全置于屏蔽状态
8. 屏蔽寄存器 控制外设硬件DMA请求是否被响应(为0允许),各个通道互相独立。3种方法: 单通道屏蔽字只对一个DMA通道屏蔽位进行设置 主屏蔽字对4个DMA通道屏蔽位同时进行设置 清屏蔽寄存器命令使4个屏蔽位都清零(允许) 复位使4个通道全置于屏蔽状态 当一个通道的DMA过程结束,如果不是工作在自动初始化方式,则这一通道的屏蔽位置位,必须再次编程为允许,才能进行下次DMA传送。

45 单通道屏蔽字格式 D7 D6 D5 D4 D3 D2 D1 D0 任意 00 通道0 01 通道1 0 清屏蔽位 10 通道2 1 置屏蔽位
11 通道3 0 清屏蔽位 1 置屏蔽位

46 Di=0 清通道I屏蔽位Di=1 置通道I屏蔽位
主屏蔽字格式 D7 D6 D5 D4 D3 D2 D1 D0 Di=0 清通道I屏蔽位Di=1 置通道I屏蔽位 任意

47 9. 状态寄存器 可由CPU读取 低4位反映读命令这个瞬间每个通道是否产生TC(为1,表示该通道传送结束)
9. 状态寄存器 可由CPU读取 低4位反映读命令这个瞬间每个通道是否产生TC(为1,表示该通道传送结束) 高4位反映每个通道的DMA请求情况(为1,表示该通道有请求) 状态位在复位或被读出后,均被清零

48 状态字格式 D7 D6 D5 D4 D3 D2 D1 D0 1: 通道1已达TC 1: 通道1有请求 1: 通道2已达TC
1: 通道2有请求 1: 通道3已达TC 1: 通道3有请求 1: 通道0已达TC 1: 通道0有请求

49 10. 临时寄存器 在存储器到存储器的传送方式下,临时寄存器保存从源存储单元读出的数据,该数据又被写入到目的存储单元
10. 临时寄存器 在存储器到存储器的传送方式下,临时寄存器保存从源存储单元读出的数据,该数据又被写入到目的存储单元 传送完成,临时寄存器只会保留最后一个字节,可由CPU读出 复位使临时寄存器内容为零

50 11、软件命令 82C37A DMA控制器有3条特殊的“软命令”,软命令就是只要对特定的地址进行一次写操作即可(写任何数都可以)。

51 (1)清先/后触发器软命令 由于82C37A只有8位数据线,在向16位地址寄存器和计数器进行操作时,要分两次进行。先/后触发器就是来控制先后次序的。首先将先/后触发器清“0”,读/写低8位数据,随后先/后触发器自动置1,读/写高8位数据,接着,又自动清0,如此循环不断进行操作。在复位和EOP信号有效后,先/后触发器清0。 对先/后触发器清0,可以用下面的命令实现: MOV AL,0XXH ;0XXH为任意值 OUT 0CH,AL ;0CH为先/后触发器的端口地址 执行完此两条指令后,先/后触发器被清“0”。

52 (2)总清除软命令 执行此软命令后,使控制寄存器、状态寄存器、请求寄存器、暂存寄存器及先/后触发器被清除,屏蔽寄存器被置“1”(即屏蔽所有的DMA请求)。如: MOV AL,0XXH ;0XXH为任意值 OUT 0DH,AL ;ODH为总清端口 (3)清屏蔽寄存器软命令 执行该命令时屏蔽寄存器被置“0”(即允许所有的DMA请求)。如: MOV AL, 0XXH ;0XXH为任意值 OUT 0EH,AL ;0EH为屏蔽寄存器端口

53

54 12.2 8237A的工作时序 空闲周期 8237A的任一通道都没有DMA请求时 8237A由微处理器控制作为一个接口芯片
CPU可对8237A编程,或从8237A读取状态 8237A采样CS选片信号,该信号有效,CPU就要对8237A进行读/写操作 8237A还采样通道的请求输入信号DREQ,该信号有效,就进入有效周期

55 进入DMA传送时序 8237A的工作时序 有效周期 8237A采样到外设有DMA请求,就脱离空闲周期进入有效周期
DMA传送借用系统总线完成,其控制信号以及工作时序类似CPU总线周期 进入DMA传送时序

56

57

58

59 12.3 8237A的编程 编程步骤: 输出主清除命令,进行软件复位 写入基地址和现行地址寄存器,确定起始地址
写入基址和现行字计数器,确定要传送的字节数 写入方式寄存器,指定工作方式 写入屏蔽寄存器 写入命令寄存器 完成上述步骤后,8237便处于待命状态 写入请求寄存器

60 编程举例 在某一个系统中,用一片8237A设计了DMA传输电路,8237A的基地址为00H。要求利用它的通道0,从外设(如磁盘)输入一个1K字节的数据块,传送到内存中6000H开始的区域中,每传送一个字节,地址增1,采用数据块连续传送方式,禁止自动预置,外设的DMA请求信号DREQ和响应信号DACK均为高电平有效。则初始化8237A的程序如下:

61 OUT DMA+01H,Al ;先写入字节数的低8位
DMA EQU 00H ;8237A的基地址为00H ;输出主清命令 OUT DMA+0DH,AL ;发总清命令 ;将基地址6000H写入通道0基地址和当前地址寄存器,分两次进行 MOV AX,6000H ;基地址和当前地址寄存器 OUT DMA+00H,AL ;先写入低8位地址 MOV AL,AH OUT DMA+00H,AL ;后写入高8位地址 ;把要传送的总字节数1K=400H减1后,送到基字计数器和当前字计数器 MOV AX,0400H ;总字节数 DEC AX ;总字节数减1 OUT DMA+01H,Al ;先写入字节数的低8位 OUT DMA+01H,AL: ;后写入字节数的高8位

62 OUT DMA+09H,AL ;将请求字写入8237A,用软件方法启动8237A工作
;写入方式字:数据块传送,地址增量;禁止自动预置;写传送,选择通道0 MOV AL, B ;方式字 OUT DMA+0BH,AL ;写入方式字 ;写入屏蔽字:通道0屏蔽位清0 MOV AL,00H ;屏蔽字 OUT DMA+0AH,AL ;写入8237A ;写入命令字:DACK和DREQ为高电平,固定优先级,非存储器间传送 MOV AL, B ;命令字 OUT DMA+08H,AL ;写入8237A ;写入请求字:通道0产生请求 MOV AL,04H ;请求字 OUT DMA+09H,AL ;将请求字写入8237A,用软件方法启动8237A工作

63 CPU DMAC HRQ DREQ I/O设备 内存 DACK HLDA 总线


Download ppt "第 12 章 8237A DMA控制器及其应用 中国科学技术大学 何克东."

Similar presentations


Ads by Google