Transcript

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

地址总线

HRQ DREQDMAC

HLDA DACK

总线请求

总线响应

HOLD

HLDA

CPU

DMA请求

DMA响应

I / O设备

控制总线

数据总线

DMA 与 DMA 控制器(续)2. DMA 系统组成及工作过程 ․ DMA 系统组成

DMA 与 DMA 控制器(续)2. DMA 系统组成及工作过程 ․ DMA 工作过程 I/O 向 DMAC DMAC 向 CPU 响应 DMAC 向 发请求 CPU 发请求 DMAC 请求 I/O 发响应

DMA 传送结束 DMA 传送进行 DMAC 发出控制信号 DMAC 发出内存地址

允许 DMA

DMA请求?DMAC 发 BUS 请求

CPU 响应 DMA放弃 BUS

DMAC 控制传一个字节 块结束否?

放弃总线中断请求

NDMA放总线

N

Y

字节传送

Y

․DMA 传送方式

允许 DMA

DMA 请求?

DMAC 发 BUS 请求

CPU 响应 DMA放弃 BUS

DMAC 控制传一个字节

块结束否?

放总线中断请求

DMA 请求?N

Y

Y

N

块传送

․DMA 传送方式

允许 DMA

DMA 请求?

DMAC 发出 BUS 请求CPU 响应 DMA 放弃总线

DMAC 控制传一个字节

块结束否?

放总线中断请求Y

DMA 请求?Y

放总线N

N

Y

随机请求DEMAND REQUEST

․DMA 传送方式

控制 REG. 8 HRQ Addr.Temp.16 Count Temp. 16

状态 REG. 8 暂存器 8HLDA

RENMODE REG.6

REQ1

FLAG1

MASK

FLAG

当前 ADDR..REG. 16 基地址 REG. 16

可读 非读当前字节计数器 .16 基字节数 REG.16

通道 0

通道 1

通道 2

通道 3

HOLD

HLDA

CLOCK

AEN关闭 CPU 地址锁存器

EN#STB

锁存器

ADSTB

DB7 :DB0

IO / M#

CS#ADDR.

译 码

DATA SUB

A15~A8A7~A0

地址总线A3~A0

A7~A4

IOR#

MEMR#

IOW#

MEMW#

READY

RESET

DREQ0

DACK0

DREQ1

DACK1

DREQ2

DREQ3

DACK2

DACK3

EOP#

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

DMA 与 DMA 控制器(续)3.Intel 8237A 可编程 DMA 控制器框图 ( 续)• 8237A 主从两面性: 作为 DMAC , 8237A 是可控制总线的主模块。 作为 I/O 芯片, 8237A 可被处理器读写。 运行时注意 8237A 主 - 从地址的变化。• 8237A 组成说明: 8237A 有四个独立通道:每个通道有 16 位地址 REG , 16 位字节数计数器, 6 位模式 REG 。 四个通道公用控制寄存器,状态寄存器,屏蔽寄存器,请求标志寄存器及暂存器,各寄存器均为 8 位。

DMA 与 DMA 控制器(续)3.Intel 8237A 可编程 DMA 控制器框图 ( 续)• 8237A 组成说明: 基地址寄存器:放 DMA 传送 RAM 地址初值。 当前地址寄存器: DMA 传送时内容变化 , 可读。 基字节数寄存器: DMA 传送的总字节数。 当前字节数寄存器: DMA 传送时内容变化 ,可读。

DMA 与 DMA 控制器(续)3.Intel 8237A 可编程 DMA 控制器框图 ( 续)• 8237A 引线说明: DB7-DB0 :双向数据总线。 8237A 为从模块时被处理器编程或读状态, DB7-DB0 作为数据线,传输数据或命令字。 8237A 为主模块时 DB7-DB0 输出地址 A15-A8 ,在 M M 传送操作时经 DB7-DB0 ,将 M 数据送 8237A 暂存器。 A3-A4 :地址线,从模块时为输入,处理器寻址 8237A ;主模块时输出低压位地址。

DMA 与 DMA 控制器(续) A7-A4 :地址线,主模块时输出 A7-A4 。 CS# :片选,从模块时处理器用来寻址 8237A 。 IOR# , IOW# : I/O 读写控制,双向。 8237A 在从模块时为输入,在主模块时为输出。 AEN , ADSTB 输出: 8 位地址锁存允许及选通。在主模块时允许外部锁存器锁存 8237A的高 8 位地址。 MEMR# , MEMW :输出,存储器读写控制,主模块时送存储器。 READY :输入,准备就绪,主模块时控制总线周期的长度,与慢速设备同步。

DMA 与 DMA 控制器(续) RESET :输入,复位信号,复位时屏幕寄存器置 1 ,其它寄存器置 0 。 EOP# :双向。输出时,表明内部通道传送结束;输入时,表明外部强迫 DMA 传送停止。 DREQ0-DREQ3 : I/O 设备 DMA 请求输入信号。 DACK0-DACK3 :输出 DMA 请求的响应。 HRQ : 8237A 向处理器发出的总线请求信号。 HLDA :处理器发给 8237A 的总线请求响应信号。

通道 REGISTER 操作 CS #10R# 10W# A3 A2 A1 A0 内 F/F

DB0~DB7

0

0

0

1

1

1

1

基 / 现行地址

基 / 现行字计数

现行地址

现行字计数 基 / 现行地址

现行地址基 / 现行字计数

现行字计数

0 1 0 0 1 0

0 0 10 0 1

0 1 0 0 1 0

0 0 1 0 0 1

0 1 00 1 0

0 0 10 0 1

0 0 10 0 1

0 1 00 1 0

0 0 0 00 0 0 0

0 0 0 00 0 0 0

0 0 0 10 0 0 1

0 0 0 10 0 0 1

0 0 1 00 0 1 0

0 0 1 00 0 1 0

0 0 1 10 0 1 1

0 0 1 10 0 1 1

0

1

0 1

01

01

01

01

01

01

A0 ~ A7 A8 ~ A15

A0 ~ A7 A8 ~ A15

W0 ~ W7W8 ~ W15

W0 ~ W7W8 ~ W15

W0 ~ W7W8 ~ W15

W0 ~ W7W8 ~ W15

A0 ~ A7A8 ~ A15

A0 ~ A7A8 ~ A15

8237A 字计数器与地址寄存器端口号与对应操作( 1 )

4. 8237A 编程• 地址、字计数器端口分配

0

通道 REGISTER 操作 CS #10R# 10W# A3 A2 A1 A0 内 F/F

DB0~DB7

2

2

3

3

3

3

基 / 现行地址

基 / 现行字计数

现行地址

现行字计数 基 / 现行地址

现行地址基 / 现行字计数

现行字计数

0 1 0 0 1 0

0 0 10 0 1

0 1 0 0 1 0

0 0 1 0 0 1

0 1 00 1 0

0 0 10 0 1

0 0 10 0 1

0 1 00 1 0

0 1 0 00 1 0 0

0 1 0 00 1 0 0

0 1 0 10 1 0 1

0 1 0 10 1 0 1

0 1 1 00 1 1 0

0 1 1 00 1 1 0

0 1 1 10 1 1 1

0 1 1 10 1 1 1

0

1

0 1

01

01

01

01

01

01

A0 ~ A7 A8 ~ A15

A0 ~ A7 A8 ~ A15

W0 ~ W7W8 ~ W15

W0 ~ W7W8 ~ W15

W0 ~ W7W8 ~ W15

W0 ~ W7W8 ~ W15

A0 ~ A7A8 ~ A15

A0 ~ A7A8 ~ A15

8237A 字计数器与地址寄存器端口号与对应操作( 2 )

2

2

• 操作命令与端口号对应关系表A3 A2 A1 A0 IOR# IOW# 操 作 十六进制1 0 0 0 0 1 读状态 REG. 81 0 0 0 1 0 写命令 / 控制 REG.

1 0 0 1 0 1 非法 91 0 0 1 1 0 写 DMA 请求标志 REG.

1 0 1 0 0 1 非法 A1 0 1 0 1 0 写屏蔽标志 REG.

1 0 1 1 0 1 非法 B1 0 1 1 1 0 写模式 REG.

1 1 0 0 0 1 非法 C1 1 0 0 1 0 清除字节指针 F/F

1 1 0 1 0 1 读暂存器 D 1 1 0 1 1 0 复位 (总清) 1 1 1 0 0 1 非法 E1 1 1 0 1 0 清除 / 屏蔽标志 REG.

1 1 1 1 0 1 非法 F1 1 1 1 1 0 写所有屏蔽 REG

单一位

三个软件命令不依赖 DB 上数据

所有位

• 8237A 模式 REG. 格式(写 B 号):工作方式设定 D7 D6 D5 D4 D3 D2 D1 D0模式选择

随机请求传输模式 0 0

单字节传输模式 0

0

1

1

1 1

非传输模式级联传输模式

地址增量选择地址加 1 0

地址减 1 1

自动预置功能选择禁止 0

允许 1

通道选择 0 选 0# Channel 0

0

1

1

1 0

1

选 1# Channel

选 2# Channel

选 3# Channel

传输类型选择 0 0 校验传输

0

0

1

1

1 1

X X

写传输 读传输

非 法D7 D6=11

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

D7 D6 D5 D4 D3 D2 D1 D0DACK 有效电平

低电平有效 0

高电平有效 1

0

1

DREQ 有效电平 高电平有效

扩展写

MEM.

0

1

1

0

0

1

Enable 8237A

低电平有效

不扩展写 0

扩展写 1

D3=1 X

优先级类型0

1

固定优先级循环优先级

MEM. 传输禁止允许

Channel 0 地址保持不变

X

Disable

Enable

D0=0

8237A 工作 Disable 8237A

时序类型0

1

X

普通时序压缩时序D0=1

8237A DMA 请求 REG. 格式(写 9号) D7 D6 D3 D2 D1 D0D5 D4

运行控制

不用

0清除 DMA 请求位建立 DMA 请求位

1

0 0 Channel 0

0

0

1

1

1 1

Channel 1

Channel 2

Channel 3

• 8237A 控制 / 命令 REG. 格式(写 9 号):硬件设置与运行控制8237A 运行控制命令字:软件 DMA 请求

8237A 屏蔽 REG. 格式 (单一位)(写 A号) D7 D6 D3 D2 D1 D0D5 D4

运行控制

不用

0清除 MASK 位建立 MASK 位 1

0 0 Channel 0

0

0

1

1

1 1

Channel 1

Channel 2

Channel 3

通道选择

• 8237A 控制 / 命令 REG. 格式(写 A 号):硬件设置与运行控制8237A 运行控制命令字:设屏蔽字(单通道)

8237A 全 4 位 MASK REG. 格式 (写 F号) D7 D6 D3 D2 D1 D0D5 D4

运行控制

不用

0清 Channel 3 M 位设 Channel 3 M 位 1

0

0

1

10清 Channel 2 M 位1设 Channel 2 M 位

清 Channel 0 Mask 位设 Channel 0 Mask 位

清 Channel 1 Mask 位设 Channel 1 Mask 位

• 8237A 控制 / 命令 REG. 格式(写 F 号):硬件设置与运行控制8237A 运行控制命令字:设屏蔽字(四通道)

DMA 与 DMA 控制器(续)4. 8237A 编程(续)• 关于 3 个软件命令:与端口号有关,与DB 线上的内容无关。 写 C 号地址:清除字节指针 F/F,使将装入顺序为先 LSB后MSB 。 写 D 号地址:总清除命令,屏蔽 REG.为 1 ,其它 REG. 为 0 ,软件复位。 写 E 号地址,清除屏蔽标志。

• 编程过程 HLDA无效时 8237A接受µP 编程,不管 HRQ 是否有效。 编程前禁止 8237A :发关闭 8237A 命令,向8 号端口(硬件设置)写 04H ,或对通道进行屏蔽。 用软命令发出总清( Master Clear) 操作:向0DH 端口执行一次写操作。 向有关通道送地址值,计数值,模式字。 送硬件设置命令字,打开 8237A 。去除屏蔽准备接收 DMA 请求。

8237A 状态 REG. 格式(读 8 号) D7 D6 D3 D2 D1 D0D5 D4

通道 3 有 DMA 请求 1 1 : 通道 0 计数结束通道 2 有 DMA 请求 1

通道 1 有 DMA 请求 1

通道 0 有 DMA 请求 1

1 :通道 1 计数结束

1 :通道 2 计数结束

1 : 通道 3 计数结束

状态字

4. 8237A 编程序(续)• 8237A 状态监测:可监测运行状态。


Top Related