DMA与DMA控制器 DMA(Direct Memory Access)的概念 DMA方式不用处理器干预完成M与I/O间数据传送。 控制总线的主模块要提供系统的地址及控制信号。 DMA控制器与处理器配合可实现系统的DMA功能。
DMA与DMA控制器(续) 2. DMA系统组成及工作过程․ DMA系统组成 地址总线 HOLD HLDA 总线 请求 DMA 请求 I / O 设备 HRQ DREQ DMAC HLDA DACK 总线 响应 DMA 响应 CPU 控制总线 数据总线
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控制 传一个字节 DMA 放 总 线 N DMA 请求? Y DMAC发BUS请求 CPU响应DMA 放弃BUS DMAC控制 传一个字节 DMA 放 总 线 N 块结束否? Y 放弃总线中断请求 字节传送
․DMA传送方式 允许 DMA DMA请求? DMAC发BUS请求 CPU 响应 DMA 放弃 BUS DMAC控制 传一个字节 Y N 块结束否? DMA请求? N Y 块传送 放总线中断请求
․DMA传送方式 允许 DMA N DMA请求? Y DMAC发出BUS请求 CPU响应DMA放弃总线 DMAC 控制传一个字节 Y 块结束否? N Y 放总线 放总线中断请求 随机请求 DEMAND REQUEST
3.Intel 8237A可编程DMA控制器框图 HOLD HRQ 控制 REG. 8 Addr.Temp.16 Count Temp. 16 IOR# HLDA HLDA 状态 REG. 8 暂存器 8 MEMR# IOW# CLOCK REN REQ MASK MODE REG.6 1 1 MEMW# AEN FLAG FLAG 通道0 关闭CPU地址锁存器 READY 当前ADDR..REG. 16 基地址 REG. 16 RESET ADSTB 可读 非读 EN# DB7 : DB0 当前字节计数器.16 基字节数REG.16 DREQ0 STB DATA SUB DACK0 锁存器 IO / M# DREQ1 通道1 CS# DACK1 地 址 总 线 ADDR. 译 码 A15~A8 DREQ2 A7~A0 通道2 DACK2 A3~A0 DREQ3 通道3 DACK3 A7~A4 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输出地址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的总线请求响应信号。
8237A编程 地址、字计数器端口分配 8237A 字计数器与地址寄存器端口号与对应操作(1) 1 1 1 1 通道 REGISTER 操作 CS #10R# 10W# A3 A2 A1 A0 内 F/F DB0~DB7 0 1 0 0 0 0 0 1 A0 ~ A7 A8 ~ A15 写 基 / 现行地址 0 0 1 0 0 0 0 1 A0 ~ A7 A8 ~ A15 现行地址 读 0 1 0 0 0 0 1 1 W0 ~ W7 W8 ~ W15 基 / 现行字计数 写 0 0 1 0 0 0 1 1 W0 ~ W7 W8 ~ W15 现行字计数 读 0 1 0 0 0 1 0 1 A0 ~ A7 A8 ~ A15 1 基 / 现行地址 写 A0 ~ A7 A8 ~ A15 0 0 1 0 0 1 0 1 1 现行地址 读 0 1 0 0 0 1 1 1 1 W0 ~ W7 W8 ~ W15 基 / 现行字计数 写 0 0 1 0 0 1 1 1 W0 ~ W7 W8 ~ W15 1 现行字计数 读
8237A 字计数器与地址寄存器端口号与对应操作(2) 通道 REGISTER 操作 CS #10R# 10W# A3 A2 A1 A0 内 F/F DB0~DB7 0 1 0 0 1 0 0 1 A0 ~ A7 A8 ~ A15 2 写 基 / 现行地址 0 0 1 0 1 0 0 1 A0 ~ A7 A8 ~ A15 2 现行地址 读 0 1 0 0 1 0 1 1 W0 ~ W7 W8 ~ W15 2 基 / 现行字计数 写 0 0 1 0 1 0 1 1 W0 ~ W7 W8 ~ W15 2 现行字计数 读 3 0 1 0 0 1 1 0 1 A0 ~ A7 A8 ~ A15 基 / 现行地址 写 A0 ~ A7 A8 ~ A15 0 0 1 0 1 1 0 1 3 现行地址 读 0 1 0 0 1 1 1 3 1 W0 ~ W7 W8 ~ W15 基 / 现行字计数 写 0 0 1 0 1 1 1 1 W0 ~ W7 W8 ~ W15 3 现行字计数 读
操作命令与端口号对应关系表 A3 A2 A1 A0 IOR# IOW# 操 作 十六进制 1 0 0 0 0 1 读状态 REG. 8 1 0 0 1 0 1 非法 9 1 0 0 1 1 0 写DMA请求标志 REG. 1 0 1 0 0 1 非法 A 1 0 1 0 1 0 写屏蔽标志 REG. 单一位 1 0 1 1 0 1 非法 B 1 0 1 1 1 0 写模式 REG. 1 1 0 0 0 1 非法 C 1 1 0 0 1 0 清除字节指针 F/F 三个软件 命令不依 赖DB上 数据 1 1 0 1 0 1 读暂存器 D 1 1 0 1 1 0 复位 (总清) 1 1 1 0 0 1 非法 E 1 1 1 0 1 0 清除/屏蔽标志 REG. 1 1 1 1 0 1 非法 F 1 1 1 1 1 0 写所有屏蔽 REG 所有位
8237A 模式 REG. 格式(写B号):工作方式设定 D7 D6 D5 D4 D3 D2 D1 D0 模式选择 通道选择 随机请求传输模式 0 0 0 选 0# Channel 1 选 1# Channel 单字节传输模式 1 1 选 2# Channel 1 非传输模式 1 1 选 3# Channel 级联传输模式 1 1 传输类型选择 地址增量选择 0 0 校验传输 地址加1 0 1 写传输 地址减1 1 1 读传输 1 1 非 法 自动预置功能选择 X X D7 D6=11 禁止 0 允许 1
8237A 控制/命令REG. 格式(写8号):硬件设置与运行控制 D7 D6 D5 D4 D3 D2 D1 D0 DACK有效电平 MEM. MEM. 传输 低电平有效 0 禁止 高电平有效 1 1 允许 DREQ有效电平 Channel 0 地址保持不变 高电平有效 Disable 低电平有效 1 1 Enable X D0=0 扩展写 不扩展写 8237A 工作 扩展写 1 Enable 8237A D3=1 X 1 Disable 8237A 优先级类型 时序类型 固定优先级 普通时序 循环优先级 1 1 压缩时序 X D0=1
8237A 控制/命令REG. 格式(写9号):硬件设置与运行控制 8237A运行控制命令字:软件DMA请求 运行控制 8237A DMA 请求REG. 格式(写9号) D7 D6 D5 D4 D3 D2 D1 D0 不用 Channel 0 1 Channel 1 清除DMA请求位 1 Channel 2 1 建立DMA请求位 1 1 Channel 3
8237A 控制/命令REG. 格式(写A号):硬件设置与运行控制 D7 D6 D5 D4 D3 D2 D1 D0 通道选择 不用 Channel 0 1 Channel 1 清除 MASK 位 1 Channel 2 1 建立 MASK 位 1 1 Channel 3
8237A 控制/命令REG. 格式(写F号):硬件设置与运行控制 8237A 全4位 MASK REG. 格式 (写F号) D7 D6 D5 D4 D3 D2 D1 D0 不用 清 Channel 0 Mask 位 1 设 Channel 0 Mask 位 清 Channel 3 M 位 设 Channel 3 M 位 1 清 Channel 1 Mask 位 设 Channel 1 Mask 位 清 Channel 2 M 位 1 设 Channel 2 M 位 1
DMA与DMA控制器(续) 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编程序(续) 8237A状态监测:可监测运行状态。 8237A 状态 REG. 格式(读8号) 状态字 D7 D6 D5 D4 通道 3 有DMA请求 1 1: 通道 0计数结束 通道 2有DMA请求 1 1:通道 1计数结束 通道 1 有DMA请求 1 1:通道 2计数结束 通道 0 有DMA请求 1 1: 通道 3计数结束