SIEMENS BIBLIOGRAPHY - ad.siemens.com.cn · PLC与触摸屏 控制技术 Control ... 可编程控制器入门与 ...
DMA 与 DMA 控制器
description
Transcript of DMA 与 DMA 控制器
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 请求。