下载PPT文档

Download Report

Transcript 下载PPT文档

第8章 DMA技术与DMA控制器
§8.1 DMA技术概述
§8.2 可编程DMA控制器8237A
§8.3 DMA技术在微机系统中的应用
直接存储器存取
1
§8.1 DMA技术概述
1.DMA(Direct Memory Access)的概念

DMA方式不用处理器干预完成M与I/O间数据传送。

DMA期间系统总线由其它主模块控制(驱动)

控制总线的主模块要提供系统的地址及控制信号。

DMA控制器与处理器配合可实现系统的DMA功能。
2
2. DMA系统组成及工作过程․ DMA系统组成
地址总线
总线
请求
DMA
请求
HOLD
HRQ
HLDA
HLDA
DREQ
I/O
设备
DMAC
总线
响应
DACK
DMA
响应
CPU
控制总线
数据总线
3
DMAC的基本功能
 接收接口往DMA控制器发出DMA请求信号后,
DMA控制器能向CPU发出总线请求信号
HOLD(高电平)。

当CPU向DMA发出响应信号HLDA(高电平)以
后,DMA能接管对总线的控制,进入DMA方式。

能向地址总线发出内存地址信息,对其进
行寻址及修改地址指针。
4
DMAC的基本功能
 能向存储器或I/O接口发相应的读写控制信号。
 能决定传送字节数,并判断DMA传送是否结束。
 DMA过程结束,能向CPU发出DMA结束信号,
HOLD变低,将总线控制权还给CPU,CPU恢复正
常工作。
5
․DMA传送方式
允许 DMA
N
DMA
请求?
Y
DMAC发BUS请求
CPU响应DMA
放弃BUS
DMAC控制
传一个字节
块结束否?
N
Y
DMA
放
总
线
放弃总线中断请求
字节传送
6
․DMA传送方式
允许 DMA
DMA请求?
DMAC发BUS请求
CPU 响应 DMA
放弃 BUS
DMAC控制
传一个字节
Y
DMA请求?
N
N
块结束否?
Y
块传送
放总线中断请求
7
․DMA传送方式
允许 DMA
N
DMA请求?
Y
DMAC发出BUS请求
CPU响应DMA放弃总线
DMAC 控制传一个字节
Y
DMA请求?
N
放总线
块结束否?
Y
放总线中断请求
随机请求
DEMAND REQUEST
8
DMA传送的过程
I/O设备向DMAC发出DMA请求
完成设定的字节数据传送,
CPU恢复对系统总线的控制
DMAC向CPU发出总线请求
DMAC进行一个字节的传送
CPU在执行完当前指令的当前
的总线周期后,向DMAC发出
总线响应信号
DMAC向I/O设备发出
的DMA应答信号
CPU脱离对系统总线的控制,
由DMAC接管对系统总线的控制
9
§8.2 可编程DMA控制器8237A

§8.2.1 8237A的主要特性
 1.具有四个独立的DMA通道,每个通道都具
有64K的存贮器寻址能力,即一次传送的最大
长度为64K字节。
 2.可实现内存与外设之间的高速大批量数据
传送 ,也可实现内存两个不同区域之间的高
速数据传送。
 3.每个通道的DMA请求均可分别允许或禁止,
且四个通道的DMA请求的优先权可由软件设
置为固定的或循环的。
10
8237A的主要特性





4.具有单字节传送、数据块传送、请求传送
和级联传送四种工作方式。
5.可用级联方式扩展DMA通道数目。
6.DMA传送结束信号可由内部计数产生,也
可由外部输入提供。
7.单一的+5V电源,40个引脚双列直插式封
装。
8.采用5MHz时钟,传送速率可达1.6M字节
/秒。
11


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 )就可实现,
这大大提高了传输速率。
12
§8.2.2 8237A的工作原理

1.8237A的编程结构
 编程结构见下页图
 内部有大量寄存器,内部寄存器的功能、
端口地址等信息 参见下表.
13
Intel 8237A可编程DMA控制器框图
14
1)8237A组成说明:

8237A有四个独立通道:通道0~通道3。每个通道可独立响
应外部DMA请求,完成DMA传送。
地址寄存器2
个16位
每
个
通
道
字节数寄存
器2个16位
基地址寄存器
----放DMA传送RAM地址初值
当前地址寄存器:
----DMA传送时内容变化,可读。
基字节数寄存器:
----DMA传送的总字节数。
当前字节数寄存器:
----DMA传送时内容变化,可读。
模式REG, 1个8位
1个DMA请求触发器
1个DMA屏蔽触发器
15
15

控制寄存器, 8位
状态寄存器, 8位
四个通道公用
屏蔽寄存器,8位。
请求标志寄存器, 8位
暂存器, 8位
 定时和控制逻辑
• 作从模块----接收CPU的信号
和命令字,产生控制,读/写内部
寄存器
• 作主模块----控制总线,产生
控制命令完成DMA传送
 优先级编码电路---优先级裁决
16
16
8237的引脚功能
17
17
8237的引脚功能
•请求/应答信号
外设接口电路向8237的请求信号:DREQ3~DREQ0
8237对外设接口电路的应答信号:DACK3~DACK0
8237向CPU申请总线的信号:HRQ(连至CPU的HOLD)
CPU向8237传送的允许使用总线信号:HLDA
DREQ
HRQ
•CPU
•外设
•DMA
HLDA
DACK
18
18
8237的引脚功能
•地址信号
:CPU初始化8237或读8237状态时所需的
片选信号
A7~A0(输出):8237访问存储器的地址信号
的低8位。
A3~A0(输入):CPU初始化8237或读8237
状态时,用于寻址8237内部寄存器
19
19
8237的引脚功能
•数据信号(双向): DB7~DB0
CPU为主控时,可以通过I/O读命令查询8237的状态
寄存器的内容,或通过I/O写命令对8237的内部寄
存器进行编程,数据传送通过DB7~DB0
8237为主控时, DB7~DB0输出要访问的内存地址的
高8位,并通过ADSTB锁存到外部地址锁存器中,和
A7~A0输出的低8位地址一起构成16位地址
20
20
8237的引脚功能
•地址允许信号:AEN
8237作为主控时(8237控制总线),输出AEN=1。
8237作为从控时(CPU控制总线),输出AEN=0。
(双向)
•DMA传输结束信号:
当DMAC内部任一通道传输结束,8237发出
若由外部给DMAC送入有效的
所有通道结束传输。
21
,则强制DMAC内部
21
8237的引脚功能
MEMR/MEMW:
8237发出的存储器读/写信号
IOR/IOW:
8237作为主控时,输出的I/O读/写信号。
8237作为从控时,CPU发出的I/O读/写信号,用于
读/写8237
22
22
8237的引脚功能
ADSTB:地址选通信号
用于启动地址锁存器
READY:存储器或I/O的就绪信号
23
23
DMA控制器8237
工作方式
1)从模块工作方式:
当CPU将数据送入或取出8237时,DMA完全
象一个普通的I/O接口,此时它工作于从模块。
24
24
DMA控制器8237
2)主模块工作方式:
此时DMA已取代CPU控制系统。它
将提供系统正常工作的地址信息,控
制信息完成DMA方式的数据传送。
26
26

8237A处于DMA方式时,全部地址均用来寻
址存储器,无法同时提供I/O设备的端口地
DMA控制器8237
址.为了寻址外部设备,8237A提供DACK信
号,作为对请求DMA方式的外部设备的应答,
并指明该外部设备被认可,可以进行DMA传
送.在整个传输过程中只要DACK信
号,IOR,IOW同时有效,就能完成读外部设
备的I/O读写操作.所以,在DMA方式下,I/O
设备的地址无效.即:以DACK代替了片选和
译码功能.
由上可见8237工作
于模块方式,可取
代CPU产生地址及
控制信息。
那对于20位
地 址 线
8237 如 何
处理?

在8086/88系统中,系统的寻址范围是1MB,地址
线有20条,即A0~A19。为了能够在8086/88系统中
使用8237来实现DMA,需要用硬件提供一组4位的
页寄存器。

通道0、1、2、3各有一个4位的页寄存器。在进行
DMA传送之前,这些页寄存器可利用I/O地址来装
入和读出。当进行DMA传送时,DMAC将A0~A15放在
系统总线上,同时页寄存器把A16~A19也放在系统
总线上,形成A0~A19这20位地址信号实现DMA传送。
其地址产生如图所示。
28
28
选择 页寄存器
DACK3
选择 页寄存器
DACK2
DACK1
选择 页寄存器
页寄存器
DACK0
选择
8237 DMAC
A19~A16
A15~A0
A19~A16
DMA存储器地址
利用页寄存器产生存储器地址
29
29
8237A的工作方式



DMA传送方式
· 单字节传送方式 · 数据块传送方式
· 请求传送方式
· 级连方式
DMA传送类型
· DMA读 · DMA写 · DMA检验
存储器到存储器的传送
30
 DMA传送方式
(1) DMA传送-单字节方式





每次DMA传送时仅传送一个字节
传送一个字节之后,字节数寄存器减1,地址寄存器
加1或减1,HRQ变为无效
8237A释放系统总线,将控制权还给CPU
若传送后使字节数从0减到FFFFH,则终结DMA传送
或重新初始化
特点:
 一次传送一个字节,效率略低
 DMA传送之间CPU有机会重新获取总线控制权
31
(2) DMA传送-数据块方式



由DREQ启动就连续地传送数据,直到字节数
寄存器从0减到FFFFH终止计数,或由外部输
入有效信号终结DMA传送
DREQ只需维持有效到DACK有效
特点:
 一次请求传送一个数据块,效率高
 整个DMA传送期间CPU长时间无法控制总线
(无法响应其他DMA请求、无法处理中断等)
32
(3) DMA传送-请求方式






DREQ信号有效就连续传送数据
DREQ信号无效,DMA传送被暂时中止,8237A释放
总线,CPU可继续操作
DMA通道的地址和字节数的中间值仍被保持
DREQ信号再次有效,DMA传送就继续进行
如果字节数寄存器从0减到FFFFH,或者由外部送来
一个有效的信号,将终止计数
特点:
 DMA操作可由外设利用DREQ信号控制传送的过程
33
(4) DMA传送-级连方式





用于通过多个8237A级连以扩展通道
第二级的HRQ和HLDA信号连到第一级某个通
道的DREQ和DACK上
第二级芯片的优先权等级与所连通道的优先权
相对应
第一级只起优先权网络的作用,实际的操作由
第二级芯片完成
还可由第二级扩展到第三级等
34
8237A的级联
第二级
第一级
DREQ 0 |
HRQ
DACK0
HLDA
HLDA
DREQ 3 |
DACK 3
HRQ
|
HOLD |
HRQ
|
微处理器
|
HLDA
8237
HLDA
8237
35
 DMA传送类型



DMA读——把数据由存储器传送到外设
 由MEMR*有效从存储器读出数据,由IOW*有效把
这一数据写入外设
DMA写——把外设输入的数据写入存储器
 由IOR*有效从外设输入数据,由MEMW*有效把这
一数据写入存储器。
DMA检验——空操作
 8237A不进行任何检验
 外设可以进行DMA校验
 存储器和I/O控制线保持无效,不进行传送
36
 存储器到存储器的传送





固定使用通道0和通道1
通道0的地址寄存器存源区地址
通道1的地址寄存器存目的区地址,通道1的字节数寄
存器存传送的字节数
传送由设置通道0的软件请求启动
每传送一字节需用8个时钟周期
 前4个时钟周期用通道0地址寄存器的地址从源区读
数据送入8237A的临时寄存器
 后4个时钟周期用通道1地址寄存器的地址把临时寄
存器中的数据写入目的区
37
8237A的工作方式由写模式寄存器决定



存放相应通道的方式控制字
选择某个DMA通道的工作方式
其中用最低2位选择哪个DMA通道
请看方式字的格式
38
方式字格式(写B号)
D7 D6
00
01
10
11
D5
D4
D3 D2
D1 D0
请求模式
00 DMA校验
0 地址增量(加1)
0 禁止自动初始化
00 通道0
单字节模式
01 DMA写
1 地址减量(减1)
1 允许自动初始化
01 通道1
数据块模式 10 DMA读
10 通道2
级联模式
11 非法 11 通道3
×× 若D7D6=11
39
DMA控制器8237


自动预置功能:
D4:当设置为自动预置时,每当DMA过程结束信号
EOP*产生时(不论是内部终止计数还是外部输入
该信号)用基地址寄存器和基字节数寄存器的内
容,使相应的现行寄存器恢复为初始值,包括恢
复屏蔽位、允许DMA请求这样就作好了下一次DMA
传送的准备
40
40
DMA控制器8237
D3 D2:传输方式设定
写输入:
I/O设备往内存写入数据。
读输入;
将内存数据送往I/O设备。
校验传输:用于对读传输和写传输功能进行
校验,是虚拟传输,8237此时只产
生EOP信号和地址信号。
41
41
DMA控制器8237
A0~A15
8237
存
储
器
A0~A7
MEMW
D0~D7
IOR
8237
MEMR
I/O
设备
IOW
写传输
存
储
器
I/O
设备
读传输
42
42
8.4 827A的时序
当8237A没有被外围设备用来进行DMA操作时,
此时它处于所谓空闲状态。在这种状态下,
微处理器可以向这个DMA控制器输出命令以
及读/写它的内部寄存器 。
43
DMA控制器的工作时序
DMA空闲周期SI
 过渡状态S0
 有效周期(S1、S2、S3、S4)

8237A内部状态变化流程
44
8237A的工作时序·空闲周期





8237A的任一通道都没有DMA请求时
8237A由微处理器控制作为一个接口芯片
CPU可对8237A编程,或从8237A读取状态
8237A采样CS*选片信号,该信号有效,CPU就要对
8237A进行读/写操作
8237A还采样通道的请求输入信号DREQ,该信号有
效,就进入有效周期
进入有效周期
45
8237A的工作时序·有效周期



8237A采样到外设有DMA请求,就脱离空闲
周期进入有效周期
8237A作为系统的主控芯片,控制DMA传送
操作
DMA传送借用系统总线完成,其控制信号以
及工作时序类似CPU总线周期
进入DMA传送时序
46
Si
Si
S0
S0
S1
S2
S3
S4
S2
S3
S4
Si
Si
CLK
DREQ
HRQ
HLDA
AEN
ADSTB
DB0~DB7
A0~A7
DACK
MEMR(IOR)
IOW(MEMW)
DMA传送时序
47
8237A的工作周期、时序与模式
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
48
8237A的寄存器


8237A共有10种内部寄存器,对它们的操作
有时需要配合3个软件命令
8237A的“软件命令”
 不需要通过数据总线写入控制字
 直接由地址和控制信号译码实现
全部都用地址A0~A3区分
49
8.5
8237A 的控制寄存器和状态寄存器
1. 8237A 的控制寄存器





存放8237A的命令字
设置8237A芯片的操作方式
影响每个DMA通道
复位时使命令寄存器清零
设置D2=0才使8237A可以作为DMA控制器
请看命令字的格式
50
命令字格式
D7
D6
D5
D4
D3
D2
D1
D0
0 滞后写
0 DREQ高有效
0 固定优先权
0 DACK低有效
0 允许DMAC工作
0 禁止存储器之间传送
0 正常时序
0 允许通道0地址改变
1 扩展写
1 DREQ低有效
1 循环优先权
1 DACK高有效
1 禁止DMAC工作
1 允许存储器之间传送
1 压缩时序
1 禁止通道0地址改变
× 若D3=1
× 若D0=1
× 若D0=0
• 8237A 控制/命令寄存器格式(写8号):硬件设置与运行控制
8237A硬件设置:
51
DMA控制器8237
控制寄存器格式和有关问题:
D7 D6 D5 D4 D3 D2 D1 D0
DO:为1则为内存到内存的传送。
此时通道0用于存放源地址,通道1
用于存放目的地址及计数值。
52
52
DMA控制器8237
D1:为1时,可实现内存到内存时,使源
地址不变而目的地址变化,用于实现
内存的初始化。
D2:为0启动8237工作,D2为1停止8237
作。
D3:为0普通时序,为1压缩时序。
当地址范围仅用于A7~A0时的DMA时
序为压缩时序,即一次可传送最多
256个数据。
54
54
DMA通道的优先权方式


D4=0 固定优先权方式——优先权固定
 通道0优先权最高,通道1其次,通道2再次,
通道3最低
D4=1 循环优先权方式——优先权循环变化
 最近一次服务的通道在下次循环中变成最低
优先权,其他通道依次轮流相应的优先权
D5:为0不扩展写信号;为1扩展写信号,使MEMW,IOW扩展2
个时钟周期。
DMA传送不存在嵌套
55
DMA控制器8237
2. 状态寄存器格式:
D7 D6 D5 D4 D3 D2 D1 D0
D0 D1 D2 D3:表示4个通道计数结束状态
1:结束; 0:未结束
D4 D5 D6 D7:表示4个通道DMA请求情
况 1:申请; 0:无申请
(读8号)
56
56
3. 请求寄存器



存放软件DMA请求状态
除硬件DMA请求外,当工作在数据块传
送方式时也可以通过软件发出DMA请求
若是存贮器到存贮器传送,则必须由软
件请求启动通道0
请看请求字的格式
57
请求字格式
D7 D6 D5 D4 D3
任意
D2
1:有DMA请求
0:无DMA请求
D1 D0
00 通道0
01 通道1
10 通道2
11 通道3
8237A DMA 请求寄存器 格式(写9号)
D6: 1:DREQ高电平有效。
58
屏蔽寄存器



控制外设硬件DMA请求是否被响应(为0允许),各个通道
互相独立。3种方法:
 单通道屏蔽字只对一个DMA通道屏蔽位进行设置
 主屏蔽字对4个DMA通道屏蔽位同时进行设置
 清屏蔽寄存器命令使4个屏蔽位都清零(允许)
复位使4个通道全置于屏蔽状态
当一个通道的DMA过程结束,如果不是工作在自动初始化
方式,则这一通道的屏蔽位置位,必须再次编程为允许,才
能进行下次DMA传送
请看屏蔽字的格式
59
单通道屏蔽字格式
D7 D6 D5 D4 D3
任意
0 清屏蔽位
1 置屏蔽位
D2
D1 D0
00 通道0
01 通道1
10 通道2
11 通道3
8237A 屏蔽寄存器格式 (单一位)(写A号)
60
主屏蔽字格式
D7 D6 D5 D4
D3
D2
D1
D0
任意
Di=0 清通道I屏蔽位
Di=1 置通道I屏蔽位
8237A 全4位 MASK 寄存器 格式 (写F号)
61
临时寄存器



在存储器到存储器的传送方式下,临时
寄存器保存从源存储单元读出的数据,
该数据又被写入到目的存储单元
传送完成,临时寄存器只会保留最后一
个字节,可由CPU读出
复位使临时寄存器内容为零
62
4. 8237的字节指针
(1) 现行地址寄存器



基地址寄存器
存放初始值
保持DMA传送的当前地址值
每次传送后该寄存器的值自动加1或减1
这个寄存器的值可由CPU写入和读出
63
(2) 现行字节数寄存器




基字节数寄存器
存放初始值
保持DMA传送的剩余字节数
每次传送后,该寄存器的值减1
这个寄存器的值可由CPU写入和读出
该寄存器的值减至0,再减1(从0减到
FFFFH)时,终止计数
传送N个字节,初始值为N-1
64
读写通道寄存器



CPU与8237A之间通过8位数据总线交
换信息,8237A的通道寄存器均为16位
需要两次读写操作才能实现CPU与
8237A之间的一个完整数据的交换
8237A内含一个高/低触发器,用来控制
读写通道寄存器的高、低字节
65
高/低触发器





该触发器为0,控制读写低字节
该触发器为1,控制读写高字节
软、硬件复位后,触发器为0
每次读写通道寄存器,自动改变触发器状态。
如果对16位寄存器的操作用两次连续读写进
行,就不必清除这个触发器
清除高/低触发器软件命令(A3A2A1A0=1100)
将使高/低触发器清零
66
3个软件命令



清除高/低触发器软件命令
 A A A A =1100=0CH,使高/低触发器清零
3 2 1 0
主清除命令
 A A A A =1101=0DH,使高/低触发器清零
3 2 1 0
 还使命令、状态、请求、临时寄存器清零
 使屏蔽寄存器置为全1(禁止DMA请求)
 主清除命令与硬件的RESET信号具有相同的功能
清屏蔽寄存器命令
 A A A A =1110=0EH,使4个屏蔽位都清零
3 2 1 0
(允许DMA请求)
67
内部寄存器的寻址问题



占用16个端口地址
问题:如此多的寄存器,采用什么方
法只用16个端口地址就能访问到?
端口分配表(见下页)
68
68
8237内部寄存器的寻址
A3
A2 A1
A0
通道号
0
0
0
0
0
0
0
1
0
0
1
0
0
0
1
1
0
1
0
0
0
1
0
1
0
1
1
0
0
1
1
1
1
0
0
0
1
0
0
1
1
0
1
0
1
0
1
1
1
1
0
1
1
1
1
0
读操作(IOR)
写操作(IOW)
读当前地址寄存器
写基和当前地址寄存器
读当前字节计数寄存器
写基和当前字节计数寄存器
读当前地址寄存器
写基和当前地址寄存器
读当前字节计数寄存器
写基和当前字节计数寄存器
读当前地址寄存器
写基和当前地址寄存器
读当前字节计数寄存器
写基和当前字节计数寄存器
读当前地址寄存器
写基和当前地址寄存器
读当前字节计数寄存器
写基和当前字节计数寄存器
读状态寄存器
写命令寄存器
--
写请求寄存器
--返回
写屏蔽寄存器某一位
--
写模式寄存器
0
--
清除高低位触发器命令
0
1
读暂存寄存器
主清除命令
1
1
0
--
--
1
1
1
--
写屏蔽寄存器所有位
1
2
3
四
个
通
道
公
用
69
8.7 8237的编程

1. 编程步骤

8237的编程通常可按如下步骤进行:
(1)
输出主清除命令;总清时只要求对总清地址进行写操
作并不关心写入什么数据。







(2)
(3)
(4)
(5)
(6)
(7)
(8)
置页面寄存器;
写入基和当前地址寄存器;
写入基和当前字节计数寄存器;
写入模式寄存器;
写入命令寄存器;
写入屏蔽寄存器;
写入请求寄存器。
70
70


其中第(8)步是采用软件DMA请求时所需要的,由此
可将相应的请求命令字写入指定通道,从而启动DMA
传送过程;
若为硬件DMA请求,则无需此步骤,只要在完成了
(1)~(7)步编程后,由通道的DREQ信号即可启动DMA
传送过程。
71
71





编程举例
在IBM PC系统中,试利用8237通道1,将内存
8000H:0H开始的16K字节数据传送至磁盘(地
址增量传送)。
要求采用块传送方式,传送完不自动预置,
DREQ和DACK均为高电平有效,固定优先级,普
通时序,不扩展写信号。
系统中8237的端口地址为00H~0FH。
通道1“页面寄存器”的端口地址为83H。
72
72
(1)确定模式字
D
7
D
1
6
0
D
5
0
D
D
4
0
1
块方式
地址增量
3
D
0
读传送
2
D
0
1
D
1
0
89H
通道1
非自动初始化
73
73
(2)确定命令字
D
7
D
1
6
0
D
5
0
D
D
4
0
0
3
D
0
2
D
0
1
D
0
0
80H
非存储器至
存储器传送
DACK 高电平有效
DREQ 高电平有效
无意义
正常写
控制器允许
固定优先级
普通时序
74
74
(3)确定屏蔽字
D
7
0
D
6
0
D
5
0
D
4
0
D
3
0
D
2
0
D
1
0
D
1
0
01H
通道1的屏蔽位复位
75
75
初始化程序如下:

















OUT 0DH,AL ; 输出主清除命令
MOV AL, 08H ; 置通道1“页面寄存器”
OUT
MOV
OUT
MOV
OUT
MOV
OUT
MOV
OUT
MOV
OUT
MOV
OUT
MOV
OUT
83H, AL
AL, 00H
02H,AL
AL,00H
02H,AL
AL,00H
03H,AL
AL,40H
03H,AL
AL,89H
0BH,AL
AL,80H
08H,AL
AL,01H
0AH,AL
页面地址为8(A19~ A16=08H)
; 写入基和当前地址低8位
; 写入基和当前地址高8位
; 写入基和当前字节计数寄存器低8位
; 写入基和当前字节计数寄存器高8位
; 输出模式字
; 输出命令字
;8237内部寄存器的寻址
; 输出屏蔽字
76
76
8237A的编程(续1)

DMA通道的DMA传送编程:
 将存储器起始地址写入地址寄存器(如果
采用地址减量工作,则是结尾地址)
 将本次DMA传送的数据个数写入字节数寄
存器(个数要减1)
 确定通道的工作方式,写入方式寄存器
 写入屏蔽寄存器复位通道屏蔽位,允许
DMA请求
请看实例
77
8237A的编程(续2)


两种方法反映DMA过程结束(即终止
计数、发生TC):
 状态寄存器的低4位
 信号(需配合DACK响应信号确定通
道)
应用程序处理DMA传送过程结束:
 采用软件查询状态字
 采用硬件中断在中断服务程序处理
78
8237A的应用



8237A在PC系列机的使用情况
DMA写传送
DMA设定子程序
79
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用于级连
80
(1) 8237A的初始化


8237A初始化写入命令字为0,确定了:
 DREQ高电平有效、DACK低电平有效,固定优先权
(依次为通道0、1……7)
 不进行存储器到存储器的数据传输
 PC机用DMA控制电路进行刷新,所以DMA传送不能
长时间占用总线(不应超过15s),一般只能使用
单字节传送方式
在PC系列机上,用户如果使用DMA通道,要注意遵
从上述系统要求。除了要禁止8237A工作,用户通常
不必操作命令寄存器
81
(2) 高位地址的形成




DMA传送时的高位地址由“页面寄存器”提供
页面寄存器由CPU的输出指令实现写入
DMAC1的通道0~通道3:8237A提供系统A0~A15低
16位地址,页面寄存器输出系统A16~A23高8位地址
DMAC2的通道5~通道7:8237A提供系统A1~A16的
16位地址,而系统A0被强迫为逻辑0,页面寄存器仅输
出高7位地址A17~A23
页面寄存器不会自动增减量
高位地址在DMA传送过程中不改变
82
DMA通道0的刷新编程
out 0dh,al
mov al,0
out 08,al
mov al,0
out 00,al
out 00,al
mov al,0ffh
out 01,al
out 01,al
mov al,58h
out 0bh,al
mov al,0
out 0ah,al
IBM PC/XT
;DMAC主清除命令
;DMAC命令字
;通道0的地址寄存器低字节
;通道0的地址寄存器高字节
;通道0的字节数寄存器低字节
;通道0的字节数寄存器高字节
;通道0模式字
;通道0屏蔽字
83
通道1工作方式
mov al,45h
;通道1方式字:
;单字节写传送,地址增量,非自动初始化
out 0bh,al
nop
;延时
nop
out 0ch,al
;清高/低触发器命令
DMA写传送
84
通道1起始地址
mov al,0
out 02h,al
mov al,50h
out 02h,al
mov al,04h
out 83h,al
DMA写传送
;写入低8位地址到地址寄存器
;写入中8位地址到地址寄存器
;写入高8位地址到页面寄存器
85
通道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写传送
86
通道1传送结束判断
dmalp:
in al,08h
and al,02h
jz dmalp
……
;读状态寄存器
;判断通道1是否传送结束
;没有结束,则循环等待
;传送结束,处理转换数据
DMA传送过程结束的判断:
软件查询方式
DMA写传送
87
8237A教学要求
1.
2.
3.
4.
了解8237A引脚特点和工作时序
掌握8237A的各种工作方式
理解8237A内部寄存器的作用和编程
了解8237A在IBM PC系列机上的应用情况
88
多功能I/O接口芯片82380
82380内部功能体系结构
89
DMA控制器
8通道,每个有
一个24位字节计
数寄存器、一个
32位请求地址寄
存器和一个32位
目标地址寄存器。
可通过编程选择
为循环优先级或
固定优先级。
可以在I/0设备
之间、存储器之
间、存储器和
I/O设备之间进
行传送。
90
DMA控制器
传送数据块有3种方式:
(1)单一缓冲方式
(2)缓冲器自动初始化方式
(3)缓冲器链接方式
91
可编程中断控制器
5个内部中断请求:
(1)IRQ8,IRQ0;
(2)IRQ1和IRQ4;
(3)IRQ1.5。
15个外部中断请求:IRQ3,
IRQ9,IRQ11~IRQ23。
IRQ7:容错处理中断
中断控制器:IRR、PR、ISR、
IMR、VR。
92
可编程定时/计数器
93