第 8 章 DMA 技术与 DMA 控制器

Preview:

DESCRIPTION

第 8 章 DMA 技术与 DMA 控制器. § 8.1 DMA 技术概述 § 8.2 可编程 DMA 控制器 8237A § 8.3 DMA 技术在微机系统中的应用. 直接存储器存取. §8.1 DMA 技术概述. 1.DMA(Direct Memory Access) 的概念 DMA 方式不用处理器干预完成 M 与 I/O 间数据传送。 DMA 期间系统总线由其它主模块控制 ( 驱动 ) 控制总线的主模块要提供系统的地址及控制信号。 DMA 控制器与处理器配合可实现系统的 DMA 功能。. 地址总线. HOLD - PowerPoint PPT Presentation

Citation preview

1

第 8 章 DMA 技术与 DMA 控制器

§8.1 DMA 技术概述 §8.2 可编程 DMA 控制器 8237A §8.3 DMA 技术在微机系统中的应用

直接存储器存取

2

1.DMA(Direct Memory Access) 的概念

DMA 方式不用处理器干预完成 M 与 I/O 间数据传送。 DMA 期间系统总线由其它主模块控制 ( 驱动 ) 控制总线的主模块要提供系统的地址及控制信号。 DMA 控制器与处理器配合可实现系统的 DMA 功能。

§8.1 DMA 技术概述

3

地址总线

HRQ DREQDMAC

HLDA DACK

总线请求

总线响应

HOLD

HLDA

CPU

DMA请求

DMA响应

I / O设备

控制总线

数据总线

2. DMA 系统组成及工作过程 ․ DMA 系统组成

4

DMAC 的基本功能 接收接口往 DMA 控制器发出 DMA 请求信号

后, DMA 控制器能向 CPU 发出总线请求信号 HOLD( 高电平 ) 。

当 CPU 向 DMA 发出响应信号 HLDA( 高电平 ) 以后, DMA 能接管对总线的控制,进入 DMA 方式。

能向地址总线发出内存地址信息,对其进行寻址及修改地址指针。

5

DMAC 的基本功能 能向存储器或 I/O 接口发相应的读写控制信号。 能决定传送字节数,并判断 DMA 传送是否结

束。 DMA 过程结束,能向 CPU 发出 DMA 结束信

号, HOLD 变低 , 将总线控制权还给 CPU , CPU 恢复正常工作。

6

允许 DMA

DMA请求?

DMAC 发 BUS 请求

CPU 响应 DMA放弃 BUS

DMAC 控制传一个字节

块结束否?

放弃总线中断请求

N

DMA放总线

N

Y

字节传送

Y

․DMA 传送方式

7

允许 DMA

DMA 请求?

DMAC 发 BUS 请求

CPU 响应 DMA放弃 BUS

DMAC 控制传一个字节

块结束否?

放总线中断请求

DMA 请求?

N

Y

Y

N

块传送

․DMA 传送方式

8

允许 DMA

DMA 请求?

DMAC 发出 BUS 请求

CPU 响应 DMA 放弃总线

DMAC 控制传一个字节

块结束否?

放总线中断请求

Y

DMA 请求?Y

放总线

N

N

Y

随机请求DEMAND REQUEST

․DMA 传送方式

9

I/O 设备向 DMAC 发出 DMA 请求

DMAC 向 CPU 发出总线请求

CPU 在执行完当前指令的当前的总线周期后,向 DMAC 发出

总线响应信号

CPU 脱离对系统总线的控制,由 DMAC 接管对系统总线的控制

DMAC 向 I/O 设备发出的 DMA 应答信号

DMAC 进行一个字节的传送

完成设定的字节数据传送,CPU 恢复对系统总线的控制

DMADMA传送的过程传送的过程

10

§8.2 可编程 DMA 控制器 8237A §8.2.1 8237A 的主要特性

1 .具有四个独立的 DMA 通道,每个通道都具有 64K 的存贮器寻址能力,即一次传送的最大长度为 64K 字节。

2 .可实现内存与外设之间的高速大批量数据传送 ,也可实现内存两个不同区域之间的高速数据传送。

3 .每个通道的 DMA 请求均可分别允许或禁止,且四个通道的 DMA 请求的优先权可由软件设置为固定的或循环的。

11

8237A 的主要特性 4 .具有单字节传送、数据块传送、请求传送

和级联传送四种工作方式。 5 .可用级联方式扩展 DMA 通道数目。 6 . DMA 传送结束信号可由内部计数产生,

也可由外部输入提供。 7 .单一的 +5V 电源, 40 个引脚双列直插式

封装。 8 .采用 5MHz 时钟,传送速率可达 1.6M 字

节 /秒。

12

8 .采用 5MHz 时钟,传送速率可达 1.6M 字节 /秒。

8237 进行一次 DMA 传送需要 3 个时钟周期 ( 不包括插入的等待周期 SW) 。时钟周期为 200 ns ,则一次 DMA 传送需要 200 ns×3+ 200 ns= 700 ns( 1.6 M 字节 /秒)。多加一个 200 ns 是考虑到人为插入一个 SW的缘故。另外, 8237 为了提高传输速率,可以在压缩定时状态下工作。在此状态下,每一个 DMA 总线周期仅用两个时钟周期( 200 ns×2=400ns )就可实现,这大大提高了传输速率。  

13

§8.2.2 8237A 的工作原理 1 . 8237A 的编程结构

编程结构见下页图 内部有大量寄存器,内部寄存器的功能、端口地址等信息 参见下表 .

14

Intel 8237A 可编程 DMA 控制器框图

15

1) 8237A 组成说明: 8237A 有四个独立通道:通道 0~通道 3 。每个通道可独

立响应外部 DMA 请求,完成 DMA 传送。

15

模式 REG, 1 个 8位1 个 DMA 请求触发器1 个 DMA屏蔽触发器

字节数寄存器 2 个 16位

基字节数寄存器:----DMA 传送的总字节数。

当前字节数寄存器: ----DMA 传送时内容变化 , 可读。

地址寄存器 2个 16位

基地址寄存器----放 DMA 传送 RAM 地址初值当前地址寄存器: ----DMA 传送时内容变化 , 可读。

每个通道

16

控制寄存器, 8位

16

四个通道公用

状态寄存器, 8位屏蔽寄存器, 8位。请求标志寄存器, 8位暂存器, 8位

优先级编码电路 ---优先级裁决

定时和控制逻辑

• 作从模块 ----接收 CPU 的信号和命令字,产生控制,读 / 写内部寄存器• 作主模块 ----控制总线,产生控制命令完成 DMA 传送

17

8237 的引脚功能

17

18

8237 的引脚功能•请求 / 应答信号

外设接口电路向 8237 的请求信号: DREQ3~DREQ0

8237 对外设接口电路的应答信号: DACK3~DACK0

8237 向 CPU申请总线的信号: HRQ(连至 CPU 的 HOLD)

CPU 向 8237 传送的允许使用总线信号: HLDA

•CPU •DMA •外设

HRQ DREQ

HLDA DACK18

19

8237 的引脚功能

•地址信号

: CPU初始化 8237 或读 8237状态时所需的片选信号

A7~A0(输出): 8237访问存储器的地址信号的低 8位。

A3~A0(输入): CPU初始化 8237 或读 8237状态时,用于寻址 8237 内部寄存器

19

20

8237 的引脚功能

•数据信号 ( 双向 ): DB7~DB0

CPU 为主控时,可以通过 I/O 读命令查询 8237 的状态寄存器的内容,或通过 I/O 写命令对 8237 的内部寄存器进行编程,数据传送通过 DB7~DB0

8237 为主控时, DB7~DB0 输出要访问的内存地址的高 8位,并通过 ADSTB锁存到外部地址锁存器中,和 A7~A0 输出的低 8位地址一起构成 16位地址

20

21

8237 的引脚功能

•地址允许信号: AEN

8237 作为主控时( 8237 控制总线),输出 AEN=1 。

8237 作为从控时( CPU 控制总线),输出 AEN=0 。

•DMA 传输结束信号: (双向)

当 DMAC 内部任一通道传输结束, 8237 发出

若由外部给 DMAC 送入有效的 ,则强制 DMAC 内部所有通道结束传输。

21

22

8237 的引脚功能

MEMR/MEMW:

8237 发出的存储器读 / 写信号

IOR/IOW:

8237 作为主控时,输出的 I/O 读 / 写信号。

8237 作为从控时, CPU 发出的 I/O 读 / 写信号,用于读 / 写 8237

22

23

8237 的引脚功能

ADSTB:地址选通信号

用于启动地址锁存器

READY:存储器或 I/O 的就绪信号

23

24

DMA 控制器 8237

工作方式 1)从模块工作方式: 当 CPU 将数据送入或取出 8237 时, DMA

完全象一个普通的 I/O 接口,此时它工作于从模块。

24

26

DMA 控制器 8237

2)主模块工作方式:此时 DMA已取代 CPU 控制系统。它将提供系统正常工作的地址信息,控制信息完成 DMA 方式的数据传送。

26

28

DMA 控制器 8237

28

那 对 于 20位地址线 8237如何处理?

由上可见 8237 工作于模块方式,可

取代 CPU 产生地址及控制信息。

8237A8237A 处于处于 DMADMA 方式时方式时 ,,全部地址均用全部地址均用来寻址存储器来寻址存储器 ,,无法同时提供无法同时提供 I/OI/O 设备的设备的端口地址端口地址 .. 为了寻址外部设备为了寻址外部设备 ,8237A,8237A 提提供供 DACKDACK 信号信号 ,, 作为对请求作为对请求 DMADMA 方式的方式的外部设备的应答外部设备的应答 ,, 并指明该外部设备被认并指明该外部设备被认可可 ,, 可以进行可以进行 DMADMA 传送传送 .. 在整个传输过在整个传输过程中只要程中只要 DACKDACK 信号信号 ,IOR,IOW,IOR,IOW同时有同时有效效 ,,就能完成读外部设备的就能完成读外部设备的 I/OI/O 读写操作读写操作 ..所以所以 ,, 在在 DMADMA 方式下方式下 ,I/O,I/O 设备的地址无设备的地址无效效 .. 即即 ::以以 DACKDACK代替了片选和译码功能代替了片选和译码功能 ..

在在 8086/888086/88 系统中,系统的寻址范围是系统中,系统的寻址范围是 1MB1MB ,,地址线有地址线有 2020条,即条,即 A0~A19A0~A19。为了能够在。为了能够在 8088086/886/88 系统中使用系统中使用 82378237 来实现来实现 DMADMA ,需要用硬,需要用硬件提供一组件提供一组 44位的页寄存器。位的页寄存器。

通道通道 00 、、 11 、、 22 、、 33各有一个各有一个 44位的页寄存器。位的页寄存器。在进行在进行 DMADMA 传送之前,这些页寄存器可利用传送之前,这些页寄存器可利用 I/I/OO 地址来装入和读出。当进行地址来装入和读出。当进行 DMADMA 传送时,传送时, DDMACMAC 将将 A0~A15A0~A15 放在系统总线上,同时页寄存放在系统总线上,同时页寄存器把器把 A16~A19A16~A19也放在系统总线上,形成也放在系统总线上,形成 A0~A1A0~A199 这这 2020位地址信号实现位地址信号实现 DMADMA 传送。其地址产传送。其地址产生如图所示。生如图所示。

29

利用页寄存器产生存储器地址

选择 页寄存器

选择 页寄存器

选择 页寄存器

选择 页寄存器

A19~A16

8237 DMAC

DACK3

DACK2

DACK1

DACK0

DMA存储器地址

A19~A16 A15~A0

29

30

8237A 的工作方式 DMA 传送方式

· 单字节传送方式· 数据块传送方式· 请求传送方式 · 级连方式

DMA 传送类型· DMA 读 · DMA 写 · DMA 检验

存储器到存储器的传送

31

(1) DMA 传送-单字节方式

每次 DMA 传送时仅传送一个字节 传送一个字节之后,字节数寄存器减 1 ,地址寄存器加 1 或减 1 , HRQ变为无效

8237A释放系统总线,将控制权还给 CPU 若传送后使字节数从 0减到 FFFFH ,则终结 DMA 传

送或重新初始化 特点:

一次传送一个字节,效率略低 DMA 传送之间 CPU 有机会重新获取总线控制权

DMA 传送方式

32

(2) DMA 传送-数据块方式

由 DREQ启动就连续地传送数据,直到字节数寄存器从 0减到 FFFFH终止计数,或由外部输入有效信号终结 DMA 传送

DREQ只需维持有效到 DACK 有效 特点:

一次请求传送一个数据块,效率高 整个 DMA 传送期间 CPU 长时间无法控制总

线(无法响应其他 DMA 请求、无法处理中断等)

33

(3) DMA 传送-请求方式

DREQ信号有效就连续传送数据 DREQ信号无效, DMA 传送被暂时中止, 8237A释

放总线, CPU 可继续操作 DMA 通道的地址和字节数的中间值仍被保持 DREQ信号再次有效, DMA 传送就继续进行 如果字节数寄存器从 0减到 FFFFH ,或者由外部送来

一个有效的信号,将终止计数 特点:

DMA 操作可由外设利用 DREQ 信号控制传送的过程

34

(4) DMA 传送-级连方式

用于通过多个 8237A 级连以扩展通道 第二级的 HRQ和 HLDA 信号连到第一级某个

通道的 DREQ和 DACK上 第二级芯片的优先权等级与所连通道的优先权

相对应 第一级只起优先权网络的作用,实际的操作由

第二级芯片完成 还可由第二级扩展到第三级等

35

8237A 的级联 ...

...

8237

HLDA

HRQ

HLDA

HRQ

8237

第二级第一级

DACK3DREQ3

DACK0

DREQ0

HLDA

HRQ

HLDA

HOLD

微处理器

36

DMA 读——把数据由存储器传送到外设 由 MEMR* 有效从存储器读出数据,由 IOW* 有效

把这一数据写入外设 DMA 写——把外设输入的数据写入存储器

由 IOR* 有效从外设输入数据,由 MEMW* 有效把这一数据写入存储器。

DMA检验——空操作 8237A 不进行任何检验 外设可以进行 DMA 校验 存储器和 I/O 控制线保持无效,不进行传送

DMA 传送类型

37

固定使用通道 0 和通道 1 通道 0 的地址寄存器存源区地址 通道 1 的地址寄存器存目的区地址,通道 1 的字节数寄存器存传送的字节数

传送由设置通道 0 的软件请求启动 每传送一字节需用 8 个时钟周期

前 4 个时钟周期用通道 0 地址寄存器的地址从源区读数据送入 8237A 的临时寄存器

后 4 个时钟周期用通道 1 地址寄存器的地址把临时寄存器中的数据写入目的区

存储器到存储器的传送

38

8237A 的工作方式由写模式寄存器决定 存放相应通道的方式控制字 选择某个 DMA 通道的工作方式 其中用最低 2位选择哪个 DMA 通道

请看方式字的格式

39

方式字格式(写 B号)D7 D6 D5 D4 D3 D2 D1 D0

00 请求模式01 单 字 节 模式10 数 据 块 模式11 级联模式

0 地 址增量(加1)1 地 址减量(减1)

0 禁止自动初始化1 允许自动初始化

00 DMA校验01 DMA 写10 DMA 读11 非法×× 若 D7D6= 11

00 通道 0

01 通道 1

10 通道 2

11 通道 3

40

DMA 控制器 8237

自动预置功能:

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

40

41

DMA 控制器 8237

D3 D2:传输方式设定 写输入: I/O 设备往内存写入数据。 读输入; 将内存数据送往 I/O 设备。 校验传输:用于对读传输和写传输功能进行 校验,是虚拟传输, 8237此时只产 生 EOP 信号和地址信号。

41

42

DMA 控制器 8237

42

8237

存 储

I/O设备

8237

写传输 读传输

存 储

I/O设备

A0~A15

MEMW

IOR

D0~D7

A0~A7

MEMR

IOW

43

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

8.4 827A 的时序

44

DMA 控制器的工作时序 DMA空闲周期 SI 过渡状态 S0 有效周期( S1 、 S2 、 S3 、 S4)

8237A 内部状态变化流程

45

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

对 8237A 进行读 / 写操作 8237A 还采样通道的请求输入信号 DREQ,该信号

有效,就进入有效周期

进入有效周期

46

8237A 的工作时序·有效周期 8237A 采样到外设有 DMA 请求,就脱离空闲周期进入有效周期

8237A 作为系统的主控芯片,控制 DMA 传送操作

DMA 传送借用系统总线完成,其控制信号以及工作时序类似 CPU 总线周期

进入 DMA 传送时序

47DMA 传送时序

DB0~ DB7

DACK

ADSTB

HRQ

DREQ

CLK

S1S0S0SiSi S3S2S4S3S2 SiSiS4

HLDA

AEN

A0~ A7

MEMR( IOR)

IOW(MEMW)

48

a ) S1 周期: DMAC 在 S1 状态发出地址允许 AEN信号,通过数据总线 DB0~DB7 将高 8位地址 A8 ~A15锁存起来。多数情况下,这几位地址不需改变,故可直接进入 S2 周期。

b) S2 周期:①修改存储单元的低 8位地址,(高 8位已锁存)

②向 I/O 发请求回答信号 DACK ,准备 传送数据。c) S3 周期:送高 8位地址 A8 ~A15到地址总线,发出 MEMR或 IOR读命令,从内存或 I/O准备传送数据。

d) S4 周期:发 IOW或 MEMR命令。用普通时序时,每进行一次 DMA 传输,一般用 3 个时钟周期( S2 S3 S4 );压缩时序,用两个时钟周期(S2 S4 ),此时只更新低 8位地址,不修改高 8位地址

48

8237A 的工作周期、时序与模式

49

8237A 的寄存器

8237A共有 10 种内部寄存器,对它们的操作有时需要配合 3 个软件命令

8237A 的“软件命令” 不需要通过数据总线写入控制字 直接由地址和控制信号译码实现

全部都用地址 A0~ A3 区分

50

1. 8237A 的控制寄存器 存放 8237A 的命令字 设置 8237A芯片的操作方式 影响每个 DMA 通道 复位时使命令寄存器清零 设置 D2= 0才使 8237A 可以作为 DMA 控制

请看命令字的格式

8.5 8237A 的控制寄存器和状态寄存器

51

命令字格式D7 D6 D5 D4 D3 D2 D1 D0

0 DACK 低有效1 DACK 高有效

0 DREQ 高有效1 DREQ 低有效

0 滞后写1 扩展写× 若 D3= 1

0 固定优先权1 循环优先权

0 正常时序1 压缩时序× 若 D0= 1

0 允许 DMAC 工作1 禁止 DMAC 工作

0 允许通道 0 地址改变1 禁止通道 0 地址改变× 若 D0= 0

0 禁止存储器之间传送1 允许存储器之间传送

• 8237A 控制 /命令寄存器格式(写 8 号):硬件设置与运行控制8237A硬件设置:

52

DMA 控制器 8237

控制寄存器格式和有关问题:

52

D7 D6 D5 D4 D3 D2 D1 D0

DO:为 1则为内存到内存的传送。此时通道 0 用于存放源地址,通道 1用于存放目的地址及计数值。

54

DMA 控制器 8237

D1:为 1 时,可实现内存到内存时,使源 地址不变而目的地址变化,用于实现 内存的初始化。D2:为 0启动 8237 工作, D2 为 1停止 8237 作。D3:为 0普通时序,为 1压缩时序。 当地址范围仅用于 A7~A0 时的 DMA 时 序为压缩时序,即一次可传送最多 256 个数据。

54

55

DMA 通道的优先权方式 D4=0 固定优先权方式——优先权固定

通道 0 优先权最高,通道 1 其次,通道 2 再次,通道 3 最低

D4=1 循环优先权方式——优先权循环变化 最近一次服务的通道在下次循环中变成最低

优先权,其他通道依次轮流相应的优先权

DMA 传送不存在嵌套

D5:为 0 不扩展写信号;为 1 扩展写信号,使MEMW, IOW扩展 2 个时钟周期。

56

DMA 控制器 8237

2. 状态寄存器格式:

56

D7 D6 D5 D4 D3 D2 D1 D0

D0 D1 D2 D3:表示 4 个通道计数结束状态 1:结束; 0:未结束  D4 D5 D6 D7:表示 4 个通道 DMA 请求情 况 1:申请; 0:无申请

(读 8 号)

57

3. 请求寄存器 存放软件 DMA 请求状态 除硬件 DMA 请求外,当工作在数据块传

送方式时也可以通过软件发出 DMA 请求 若是存贮器到存贮器传送,则必须由软件

请求启动通道 0

请看请求字的格式

58

请求字格式D7 D6 D5 D4 D3 D2 D1 D0

任意 1:有 DMA 请求 0:无 DMA 请求

00 通道 0

01 通道 1

10 通道 2

11 通道 3

8237A DMA 请求寄存器 格式(写 9号) D6: 1: DREQ高电平有效。

59

屏蔽寄存器

控制外设硬件 DMA 请求是否被响应(为 0 允许),各个通道互相独立。 3 种方法: 单通道屏蔽字只对一个 DMA 通道屏蔽位进行设置 主屏蔽字对 4 个 DMA 通道屏蔽位同时进行设置 清屏蔽寄存器命令使 4 个屏蔽位都清零(允许)

复位使 4 个通道全置于屏蔽状态 当一个通道的 DMA 过程结束,如果不是工作在自动初始化

方式,则这一通道的屏蔽位置位,必须再次编程为允许,才能进行下次 DMA 传送

请看屏蔽字的格式

60

单通道屏蔽字格式D7 D6 D5 D4 D3 D2 D1 D0

任意 0 清屏蔽位1 置屏蔽位 00 通道 0

01 通道 1

10 通道 2

11 通道 3

8237A 屏蔽寄存器格式 (单一位)(写 A号)

61

主屏蔽字格式D7 D6 D5 D4 D3 D2 D1 D0

任意

Di= 0 清通道 I屏蔽位 Di= 1 置通道 I屏

蔽位

8237A 全 4位 MASK 寄存器 格式 (写 F号)

62

临时寄存器 在存储器到存储器的传送方式下,临时寄存器保存从源存储单元读出的数据,该数据又被写入到目的存储单元

传送完成,临时寄存器只会保留最后一个字节,可由 CPU 读出

复位使临时寄存器内容为零

63

4. 8237 的字节指针

(1) 现行地址寄存器

保持 DMA 传送的当前地址值 每次传送后该寄存器的值自动加 1 或减

1 这个寄存器的值可由 CPU 写入和读出

基地址寄存器存放初始值

64

(2) 现行字节数寄存器

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

基字节数寄存器存放初始值

传送 N个字节,初始值为 N- 1

65

读写通道寄存器 CPU 与 8237A 之间通过 8位数据总线交换信息, 8237A 的通道寄存器均为 16位

需要两次读写操作才能实现 CPU 与 8237A 之间的一个完整数据的交换

8237A 内含一个高 / 低触发器,用来控制读写通道寄存器的高、低字节

66

高 / 低触发器 该触发器为 0 ,控制读写低字节 该触发器为 1 ,控制读写高字节 软、硬件复位后,触发器为 0 每次读写通道寄存器,自动改变触发器状态。如果对 16位寄存器的操作用两次连续读写进行,就不必清除这个触发器

清除高 / 低触发器软件命令( A3A2A1A0= 110

0)将使高 / 低触发器清零

67

3 个软件命令 清除高 / 低触发器软件命令

A3A2A1A0= 1100=0CH ,使高 / 低触发器清零 主清除命令

A3A2A1A0= 1101=0DH ,使高 / 低触发器清零 还使命令、状态、请求、临时寄存器清零 使屏蔽寄存器置为全 1(禁止 DMA 请求) 主清除命令与硬件的 RESET信号具有相同的功能

清屏蔽寄存器命令 A3A2A1A0= 1110=0EH ,使 4 个屏蔽位都清零(允许 DMA 请求)

68

内部寄存器的寻址问题

占用 16 个端口地址 问题:如此多的寄存器,采用什么方法只用 16 个端口地址就能访问到?

端口分配表(见下页)

68

69

8237 内部寄存器的寻址A3 A2 A1 A0 通道号 读操作 (IOR) 写操作( IOW)

0 0 0 0 0 读当前地址寄存器 写基和当前地址寄存器

0 0 0 1 读当前字节计数寄存器 写基和当前字节计数寄存器

0 0 1 0 1 读当前地址寄存器 写基和当前地址寄存器

0 0 1 1 读当前字节计数寄存器 写基和当前字节计数寄存器

0 1 0 0 2 读当前地址寄存器 写基和当前地址寄存器

0 1 0 1 读当前字节计数寄存器 写基和当前字节计数寄存器

0 1 1 0 3 读当前地址寄存器 写基和当前地址寄存器

0 1 1 1 读当前字节计数寄存器 写基和当前字节计数寄存器

1 0 0 0 四个通道公用

读状态寄存器 写命令寄存器

1 0 0 1 -- 写请求寄存器

1 0 1 0 --返回 写屏蔽寄存器某一位

1 0 1 1 -- 写模式寄存器

1 1 0 0 -- 清除高低位触发器命令

1 1 0 1 读暂存寄存器 主清除命令

1 1 1 0 -- --

1 1 1 1 -- 写屏蔽寄存器所有位

70

8.7 8237 的编程

1. 编程步骤 8237 的编程通常可按如下步骤进行: (1) 输出主清除命令;总清时只要求对总清地址进行写操作

并不关心写入什么数据。 (2) 置页面寄存器; (3) 写入基和当前地址寄存器; (4) 写入基和当前字节计数寄存器; (5) 写入模式寄存器; (6) 写入命令寄存器; (7) 写入屏蔽寄存器; (8) 写入请求寄存器。

70

71

其中第 (8)步是采用软件 DMA 请求时所需要的,由此可将相应的请求命令字写入指定通道,从而启动DMA 传送过程;

若为硬件 DMA 请求,则无需此步骤,只要在完成了 (1)~ (7)步编程后,由通道的 DREQ信号即可启动 DMA 传送过程。

71

72

编程举例 在 IBM PC 系统中,试利用 8237 通道 1 ,将

内存 8000H: 0H开始的 16K 字节数据传送至磁盘 ( 地址增量传送 ) 。

要求采用块传送方式,传送完不自动预置, DREQ和 DACK 均为高电平有效,固定优先级,普通时序,不扩展写信号。

系统中 8237 的端口地址为 00H~ 0FH 。 通道 1“页面寄存器”的端口地址为 83H 。

72

73

1 0 0 0 1 0 0 1

D7 D6 D5 D4 D3 D2 D1 D0

89H

块方式 读传送 通道 1

地址增量 非自动初始化

( 1)确定模式字

73

74

D7 D6 D5 D4 D3 D2 D1 D0

1 0 0 0 0 0 0 0

( 2)确定命令字

非存储器至存储器传送

无意义

控制器允许

普通时序

DACK 高电平有效

DREQ 高电平有效

正常写

固定优先级

80H

74

75

( 3)确定屏蔽字

D7 D6 D5 D4 D3 D2 D1 D0

0 0 0 0 0 0 0 1 01H

通道 1 的屏蔽位复位

75

76

初始化程序如下: OUT 0DH , AL ; 输出主清除命令 MOV AL, 08H ; 置通道 1“ 页面寄存器” 页面地址为 8 ( A19 ~ A16=08H ) OUT 83H, AL MOV AL , 00H ; 写入基和当前地址低 8 位 OUT 02H , AL MOV AL , 00H ; 写入基和当前地址高 8 位 OUT 02H , AL MOV AL , 00H ; 写入基和当前字节计数寄存器低 8 位 OUT 03H , AL MOV AL , 40H ; 写入基和当前字节计数寄存器高 8 位 OUT 03H , AL MOV AL , 89H ; 输出模式字 OUT 0BH , AL MOV AL , 80H ; 输出命令字 OUT 08H , AL ; 8237 内部寄存器的寻址 MOV AL , 01H ; 输出屏蔽字 OUT 0AH , AL

76

77

8237A 的编程(续 1)

DMA 通道的 DMA 传送编程: 将存储器起始地址写入地址寄存器(如果采用

地址减量工作,则是结尾地址) 将本次 DMA 传送的数据个数写入字节数寄存

器(个数要减 1) 确定通道的工作方式,写入方式寄存器 写入屏蔽寄存器复位通道屏蔽位,允许 DMA

请求

请看实例

78

8237A 的编程(续 2)

两种方法反映 DMA 过程结束(即终止计数、发生 TC): 状态寄存器的低 4 位 信号(需配合 DACK 响应信号确定通

道) 应用程序处理 DMA 传送过程结束:

采用软件查询状态字 采用硬件中断在中断服务程序处理

79

8237A 的应用 8237A 在 PC 系列机的使用情况 DMA 写传送 DMA 设定子程序

80

8237A 在 IBM PC 系列机上的应用

IBM PC/XT机使用一片 8237A 通道 0 :动态存贮器 DRAM 刷新 通道 1 :用户使用或 SDLC 卡 通道 2 :内存与软盘的高速数据交换 通道 3 :内存与硬盘的高速数据交换

IBM PC/AT机采用两片 8237A DMAC1 包含通道 0 ~ 3 ,支持 8 位数据传

送 DMAC2 组成通道 4 ~ 7 ,通道 5 ~ 7 支持

16 位数据传送,通道 4 用于级连

81

(1) 8237A 的初始化 8237A初始化写入命令字为 0 ,确定了:

DREQ 高电平有效、 DACK 低电平有效,固定优先权(依次为通道 0 、 1……7 )

不进行存储器到存储器的数据传输 PC 机用 DMA 控制电路进行刷新,所以 DMA 传送

不能长时间占用总线(不应超过 15s ),一般只能使用单字节传送方式

在 PC 系列机上,用户如果使用 DMA 通道,要注意遵从上述系统要求。除了要禁止 8237A 工作,用户通常不必操作命令寄存器

82

(2) 高位地址的形成 DMA 传送时的高位地址由“页面寄存器”提供 页面寄存器由 CPU 的输出指令实现写入 DMAC1 的通道 0~通道 3: 8237A 提供系统 A0~ A1

5 低 16位地址,页面寄存器输出系统 A16~ A23 高 8位地址

DMAC2 的通道 5~通道 7: 8237A 提供系统 A1~ A16 的 16位地址,而系统 A0被强迫为逻辑 0 ,页面寄存器仅输出高 7位地址 A17~ A23

页面寄存器不会自动增减量高位地址在 DMA 传送过程中不改变

83

DMA通道 0的刷新编程 out 0dh,al ;DMAC 主清除命令

mov al,0out 08,al ;DMAC命令字mov al,0out 00,al ; 通道 0 的地址寄存器低字节out 00,al ; 通道 0 的地址寄存器高字节mov al,0ffhout 01,al ; 通道 0 的字节数寄存器低字节out 01,al ; 通道 0 的字节数寄存器高字节mov al,58h

out 0bh,al ; 通道 0 模式字mov al,0out 0ah,al ; 通道 0屏蔽字

IBM PC/XT

84

通道 1工作方式mov al,45h ; 通道 1 方式字:; 单字节写传送,地址增量,非自动初始化out 0bh,alnop ;延时nopout 0ch,al ;清高 / 低触发器命令

DMA写传送

85

通道 1起始地址mov al,0out 02h,al ; 写入低 8位地址到地址寄存器mov al,50hout 02h,al ; 写入中 8位地址到地址寄存器mov al,04hout 83h,al ; 写入高 8位地址到页面寄存器

DMA写传送

86

通道 1传送字节数mov ax,2048-1 ;AX← 传送字节数减 1out 03h,al ; 送字节数低 8位到字节数寄存器mov al,ahout 03h,al ; 送字节数高 8位到字节数寄存器mov al,01out 0ah,al; 单通道屏蔽字:允许通道 1 的 DMA 请求…… ; 其他工作

DMA写传送

87

通道 1传送结束判断dmalp: in al,08h ; 读状态寄存器

and al,02h ; 判断通道 1 是否传送结束

jz dmalp ;没有结束,则循环等待…… ; 传送结束,处理转换数

DMA写传送

DMA 传送过程结束的判断:软件查询方式

88

8237A教学要求

1. 了解 8237A 引脚特点和工作时序2. 掌握 8237A 的各种工作方式3. 理解 8237A 内部寄存器的作用和编程4. 了解 8237A 在 IBM PC 系列机上的应用情况

89

多功能 I/O 接口芯片 82380

82380 内部功能体系结构

90

DMA 控制器

8 通道,每个有一个 24位字节计数寄存器、一个 32位请求地址寄存器和一个32位目标地址寄存器。可通过编程选择为循环优先级或固定优先级。

可以在 I/0 设备之间、存储器之间、存储器和 I/O 设备之间进行传送。

91

传送数据块有 3 种方式:

( 1)单一缓冲方式

( 2)缓冲器自动初始化方式

( 3)缓冲器链接方式

DMA 控制器

92

可编程中断控制器

5 个内部中断请求:

( 1) IRQ8 , IRQ0;

( 2) IRQ1 和 IRQ4;

( 3) IRQ1.5 。

15 个外部中断请求: IRQ3 , IRQ9, IRQ11~IRQ23 。

IRQ7:容错处理中断

中断控制器: IRR、 PR、 ISR、IMR、 VR。

93

可编程定时 / 计数器

Recommended