1
DMA控制接口
7.4 DMA控制接口教学重点
8237A的工作方式
8237A寄存器组的作用
8237A寄存器组的编程
3
1 DMA控制器 8237A
每个 8237A芯片有 4个 DMA通道,就是有 4个 DMA控制器
每个 DMA通道具有不同的优先权
每个 DMA通道可以分别允许和禁止
每个 DMA通道有 4种工作方式
一次传送的最大长度可达 64KB
多个 8237A芯片可以级连,扩展通道数
4
1.1 8237A的内部结构和引脚
内部结构和外部引脚都相对比较复杂
应用观点,内部主要由两类寄存器组成
通道寄存器
控制和状态寄存器首先分类展开外部引脚
5
1,请求与响应信号
DREQ0~ DREQ3,DMA通道请求 。 当外设需要请求 DMA服务时,将 DREQ信号置成有效电平,并要保持到产生响应信号 。
HRQ,总线请求 。 8237A输出有效的 HRQ高电平,向 CPU申请使用系统总线 。
HLDA,总线响应 。 8237A接受来自 CPU的响应信号 HLDA,取得了总线的控制权 。
DACK0~ DACK3,DMA通道响应 。 8237A使请求服务的通道产生相应的 DMA响应信号 。
6
2,DMA传送控制信号
A0~ A7:地址线 。 输出低 8位存储器地址 。
DB0~ DB7:数据线 。 输出高 8位存储器地址;
存贮器与存贮器的传送期间,用于数据传送 。
ADSTB,地址选通 。 DMA传送开始时,输出高有效,把在 DB0~ DB7上输出的高 8位地址锁存在外部锁存器中 。
AEN,地址允许 。 输出高有效,将锁存的高 8位地址送入系统总线,与芯片此时输出的低 8位地址组成 16位存储器地址 。
7
2,DMA传送控制信号 (续)
MEMR*:存储器读 。 有效将数据从存储器读出
MEMW*,存储器写 。 有效将数据写入存储器
IOR*,I/O读 。 有效将数据从外设读出
IOW*,I/O。 有效将数据写入外设
READY,准备好 。 DMA传送的 S3下降沿检测到为低时,插入等待状态 Sw,直到 READY为高才进入第 4个时钟周期 S4。
EOP*:过程结束 。 DMA传送过程结束,输出一个低有效脉冲 。 外部输入低脉冲信号,则终结 DMA传送 。
8
3,处理器接口信号
DB0~ DB7:数据线 。 用于 8237A与微处理器进行数据交换 。
A0~ A3:地址线 。 用以选择芯片内部寄存器 。
CS*:片选 。 低有效时,微处理器与 8237A通过数据线通信,主要完成对 8237A的编程 。
IOR*,I/O读 。 读取 8237A内部寄存器 。
IOW*,I/O写 。 写入 8237A内部寄存器 。
CLK,时钟 。 控制芯片内部操作和数据传输 。
RESET,复位 。 使 8237A处于初始状态 。
9
8237A的两种工作状态
8237A具有两种工作状态
空闲周期,
作为接口电路,受 CPU控制的工作状态
有效周期,
作为 DMAC控制 DMA传送的工作状态于是,引脚分成两种作用
10
8237A引脚的两种作用与 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
11
1.3 8237A的工作方式
DMA传送方式
·单字节传送方式 ·数据块传送方式
·请求传送方式 ·级连方式
DMA传送类型
·DMA读 ·DMA写 ·DMA检验
存储器到存储器的传送
12
1,DMA传送-单字节方式
每次 DMA传送时仅传送一个字节
传送一个字节之后,字节数寄存器减 1,地址寄存器加 1或减 1,HRQ变为无效
8237A释放系统总线,将控制权还给 CPU
若传送后使字节数从 0减到 FFFFH,则终结
DMA传送或重新初始化
特点:
一次传送一个字节,效率略低
DMA传送之间 CPU有机会重新获取总线控制权
13
1,DMA传送-数据块方式
由 DREQ启动就连续地传送数据,直到字节数寄存器从 0减到 FFFFH终止计数,
或由外部输入有效信号终结 DMA传送
DREQ只需维持有效到 DACK有效
特点:
一次请求传送一个数据块,效率高
整个 DMA传送期间 CPU长时间无法控制总线 ( 无法响应其他 DMA请求,无法处理中断等 )
14
1,DMA传送-请求方式
DREQ信号有效就连续传送数据
DREQ信号无效,DMA传送被暂时中止,
8237A释放总线,CPU可继续操作
DMA通道的地址和字节数的中间值仍被保持
DREQ信号再次有效,DMA传送就继续进行
如果字节数寄存器从 0减到 FFFFH,或者由外部送来一个有效的信号,将终止计数
特点:
DMA操作可由外设利用 DREQ信号控制传送的过程
15
1,DMA传送-级连方式
用于通过多个 8237A级连以扩展通道
第二级的 HRQ和 HLDA信号连到第一级某个通道的 DREQ和 DACK上
第二级芯片的优先权等级与所连通道的优先权相对应
第一级只起优先权网络的作用,实际的操作由第二级芯片完成
还可由第二级扩展到第三级等
16
2,DMA传送类型
DMA读 —— 把数据由存储器传送到外设
由 MEMR*有效从存储器读出数据,由 IOW*有效把这一数据写入外设
DMA写 —— 把外设输入的数据写入存储器
由 IOR*有效从外设输入数据,由 MEMW*有效把这一数据写入存储器 。
DMA检验 —— 空操作
8237A不进行任何检验
外设可以进行 DMA校验
存储器和 I/O控制线保持无效,不进行传送
17
4,DMA通道的优先权方式
固定优先权方式 —— 优先权固定
通道 0优先权最高,通道 1其次,通道 2再次,
通道 3最低
循环优先权方式 —— 优先权循环变化
最近一次服务的通道在下次循环中变成最低优先权,其他通道依次轮流相应的优先权
DMA传送不存在嵌套
18
5,自动初始化方式
每当 DMA过程结束信号 EOP*产生时
( 不论是内部终止计数还是外部输入该信号 )
用基地址寄存器和基字节数寄存器的内容,使相应的现行寄存器恢复为初始值,
包括恢复屏蔽位,允许 DMA请求
这样就作好了下一次 DMA传送的准备
19
9.1.4 8237A的寄存器
8237A共有 10种内部寄存器,对它们的操作有时需要配合 3个软件命令
8237A的,软件命令,
不需要通过数据总线写入控制字
直接由地址和控制信号译码实现全部都用地址 A0~ A3区分
20
1,现行地址寄存器
保持 DMA传送的当前地址值
每次传送后该寄存器的值自动加 1或减 1
这个寄存器的值可由 CPU写入和读出基地址寄存器存放 初始值
21
2,现行字节数寄存器
保持 DMA传送的剩余字节数
每次传送后,该寄存器的值减 1
这个寄存器的值可由 CPU写入和读出
该寄存器的值减至 0,再减 1( 从 0减到
FFFFH) 时,终止计数基字节数寄存器存放 初始值传送 N个字节,初始值 为 N- 1
22
读写通道寄存器
CPU与 8237A之间通过 8位数据总线交换信息,8237A的通道寄存器均为 16位
需 要 两 次读 写 操作 才 能实 现 CPU 与
8237A之间的一个完整数据的交换
8237A内含一个 高 /低触发器,用来控制读写通道寄存器的高,低字节
23
高 /低触发器
该触发器为 0,控制读写低字节
该触发器为 1,控制读写高字节
软,硬件复位后,触发器为 0
每次读写通道寄存器,自动改变触发器状态 。 如果 对 16位寄存器的操作用两次连续读写进行,就不必清除这个触发器
清除高 /低触发器 软件命令 ( A3A2A1A0=
1100) 将使高 /低触发器清零
24
3个 软件命令
清除高 /低触发器软件命令
A3A2A1A0= 1100,使高 /低触发器清零
主清除命令
A3A2A1A0= 1101,使高 /低触发器清零
还使命令,状态,请求,临时寄存器清零
使屏蔽寄存器置为全 1( 禁止 DMA请求 )
主清除命令与硬件的 RESET信号具有相同的功能
清屏蔽寄存器命令
A3A2A1A0= 1110,使 4个屏蔽位都清零 ( 允许
DMA请求 )
25
5,模式寄存器
存放相应通道的方式控制字
选择某个 DMA通道的工作方式
其中用最低 2位选择哪个 DMA通道请看 方式字 的格式
26
方式字格式
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
27
6,命令寄存器
存放 8237A的命令字
设置 8237A芯片的操作方式
影响每个 DMA通道
复位时使命令寄存器清零
设置 D2= 1才使 8237A可以作为 DMA控制器请看 命令字 的格式
28
命令字格式
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 允许存储器之间传送
29
7,请求寄存器
存放软件 DMA请求状态
除硬件 DMA请求外,当工作在数据块传送方式时也可以通过软件发出 DMA请求
若是存贮器到存贮器传送,则必须由软件请求启动通道 0
请看 请求字 的格式
30
请求字格式
D7 D6 D5 D4 D3 D2 D1 D0
任意 0 复位
1 置位 00 通道 0
01 通道 1
10 通道 2
11 通道 3
31
8,屏蔽寄存器
控制外设硬件 DMA请求是否被响应 ( 为 0允许 ),各个通道互相独立 。 3种方法:
单通道屏蔽字只对一个 DMA通道屏蔽位进行设置
主屏蔽字对 4个 DMA通道屏蔽位同时进行设置
清屏蔽寄存器命令使 4个屏蔽位都清零 ( 允许 )
复位使 4个通道全置于屏蔽状态
当一个通道的 DMA过程结束,如果不是工作在自动初始化方式,则这一通道的屏蔽位置位,
必须再次编程为允许,才能进行下次 DMA传送请看 屏蔽字 的格式
32
单通道屏蔽字格式
D7 D6 D5 D4 D3 D2 D1 D0
任意 0 清屏蔽位
1 置屏蔽位 00 通道 001 通道 1
10 通道 2
11 通道 3
33
主屏蔽字格式
D7 D6 D5 D4 D3 D2 D1 D0
任意
Di= 0 清通道 I屏蔽位
Di= 1 置通道 I屏蔽位
34
9,状态寄存器
可由 CPU读取
低 4位反映读命令这个瞬间每个通道是否产生 TC( 为 1,表示该通道传送结束 )
高 4位反映每个通道的 DMA请求情况
( 为 1,表示该通道有请求 )
状态位在复位或被读出后,均被清零
35
10,临时寄存器
在存储器到存储器的传送方式下,临时寄存器保存从源存储单元读出的数据,
该数据又被写入到目的存储单元
传送完成,临时寄存器只会保留最后一个字节,可由 CPU读出
复位使临时寄存器内容为零
36
1.5 8237A的编程
8327A芯片的 初始化编程,只要写入命令寄存器
可先输出主清除命令,进行软件复位
然后写入命令字
命令字影响所有 4个通道的操作
37
9.1.5 8237A的编程 (续 1)
DMA通道的 DMA传送编程:
将存储器起始地址写入地址寄存器 ( 如果采用地址减量工作,则是结尾地址 )
将本次 DMA传送的数据个数写入字节数寄存器
( 个数要减 1)
确定通道的工作方式,写入方式寄存器
写入屏蔽寄存器复位通道屏蔽位,允许 DMA请求请看实例
DMA通道 0的刷新编程
out 0dh,al ;DMAC主清除命令
mov al,0
out 08,al ;DMAC命令字
mov al,0
out 00,al ;通道 0的地址寄存器低字节
out 00,al ;通道 0的地址寄存器高字节
mov al,0ffh
out 01,al ;通道 0的字节数寄存器低字节
out 01,al ;通道 0的字节数寄存器高字节
mov al,58h
out 0bh,al ;通道 0模式字
mov al,0
out 0ah,al ;通道 0屏蔽字
IBM PC/XT
39
2,高位地址的形成
DMA传送时的高位地址由,页面寄存器,
提供
页面寄存器由 CPU的输出指令实现写入
DMAC的通道 0~通道 3,8237A提供系统 A0~ A15低 16位地址,页面寄存器输出系统 A16~ A23高 8位地址页面寄存器不会自动增减量高位地址在 DMA传送过程中不改变通道 1工作方式
mov al,45h ;通道 1方式字:;单字节写传送,地址增量,非自动初始化
out 0bh,al
nop ;延时
nop
out 0ch,al ;清高 /低触发器命令
DMA写传送通道 1起始地址
mov al,0
out 02h,al ;写入低 8位地址到地址寄存器
mov al,50h
out 02h,al ;写入中 8位地址到地址寄存器
mov al,04h
out 83h,al ;写入高 8位地址到页面寄存器
DMA写传送通道 1传送字节数
mov ax,2048-1 ;AX← 传送字节数减 1
out 03h,al ;送字节数低 8位到字节数寄存器
mov al,ah
out 03h,al ;送字节数高 8位到字节数寄存器
mov al,01
out 0ah,al;单通道屏蔽字:允许通道 1的 DMA请求
…… ;其他工作
DMA写传送通道 1传送结束判断
dmalp,in al,08h ;读状态寄存器
and al,02h ;判断通道 1是否传送结束
jz dmalp ;没有结束,则循环等待
…… ;传送结束,处理转换数据
DMA写传送
DMA传送过程结束的判断:
软件查询方式教学要求
1,了解 8237A引脚特点和工作时序
2,掌握 8237A的各种工作方式
3,理解 8237A内部寄存器的作用和编程
4,了解 8237A在 IBM PC系列机上的应用情况