More Related Content Similar to 第6章 输入输出技术 (20) 第6章 输入输出技术1. 第 6 章 入 出技输 输
术
6.3 中断方式
6.4 直接存 器存取贮
6.5 例 解析题
6.2 程序控制方式
6.1 入 出的基本方法输 输
2. - 2- 目录 上页 下页 束结
第 6 章 基本 入 出接口输 输
教学重点
I/O 接口电路的典型结构
无条件传送方式
查询传送方式
中断工作过程
3. - 3- 目录 上页 下页 束结
6.1 输入输出的基本方法
6.1.1 输入输出接口的概念及基本结构
为什么需要 I/O 接口(电路)?
微机的外部设备多种多样
工作原理、驱动方式、信息格式、以及
工作速度方面彼此差别很大
它们不能与 CPU 直接相连
必须经过中间电路再与系统相连
这部分电路被称为 I/O 接口电路
多 外种
设
1. 接口电
路
4. - 4- 目录 上页 下页 束结
6.1.1 输入 / 输出接口概述(续 1 )
什么是 I/O 接口(电路)?
I/O 接口是位于系统与外设间、用来
协助完成数据传送和控制任务的逻辑
电路
PC 机系统板的可编程接口芯片、 I/O
总线槽的电路板(适配器)都是接口
电路 CPUCPUCPUCPU
接口接口
电路电路
I/OI/O
设备设备
5. - 5- 目录 上页 下页 束结
6.1.1 输入 / 输出接口概述(续 2 )
什么是微机接口技术?
处理微机系统与外设间联系的技术
注意其软硬结合的特点
根据应用系统的需要,使用和构造相
应的接口电路,编制配套的接口程序
,支持和连接有关的设备
6. - 6- 目录 上页 下页 束结
2. 接口电路分类
⑴ 按接口电路的通用性
⑵ 按数据传送格式
⑶ 按接口是否可编程
⑷ 按时序控制方式
用接口 通用接口专
并行接口 串行接口
可 程接口 不可 程接口编 编
同步接口 步接口异
7. - 7- 目录 上页 下页 束结
3. 接口的基本功能
⑴ 对输入输出数据进行缓冲和锁存
输出接口有锁存环节
输入接口有缓冲环节
⑵ 对信号的形式和数据的格式进行变
换
微机直接处理:数字量、开关量、脉冲量
⑶ 对 I/O 端口进行寻址
⑷ 与 CPU 和 I/O 设备进行联络
⑸ 中断管理 /DMA 控制功能
8. - 8- 目录 上页 下页 束结
4. 接口电路的基本结构
控制总线 CB
地址总线
AB
I/O 接口电路
数据
控制
状态
数据总线 DBCPU 外设
控制寄存器
状态寄存器
数据寄存器
9. - 9- 目录 上页 下页 束结
6.1.2 外设接口的编址方式
接口电路占用的 I/O 端口有两类编排形
式
I/O 端口单独编址
I/O 地址空间独立于存储地址空间
如 8086/8088
I/O 端口与存储器统一编址
它们共享一个地址空间
如 M6800
10. - 10- 目录 上页 下页 束结
1. I/O 端口与存储器统一编址
优点:
不需要专门的 I/O 指令
I/O 数据存取与存储器数
据存取一样灵活
缺点:
I/O 端口要占去部分存储
器地址空间
程序不易阅读(不易分清
访存和访问外设)
内存
部分
I/O
部分
存
储
空
间
0
FFFFF
11. - 11- 目录 上页 下页 束结
2. I/O 端口单独编址
优点:
I/O 端口的地址空间独立
控制和地址译码电路相对
简单
专门的 I/O 指令使程序清
晰易读
缺点:
I/O 指令没有存储器指令丰
富
内存
空间
I/O
空间
FFFFF
0
FFFF
0
80x86 采用 I/O 端口独立编址80x86 采用 I/O 端口独立编址
12. - 12- 目录 上页 下页 束结
补充 : 8088/8086 的输入输出指令
输入指令
IN AL,i8/DX ; 字节输入
IN AX,i8/DX ; 字输入
输出指令
OUT i8/DX,AL ; 字节输出
OUT i8/DX ; 字输出
功能演示
功能演示
13. - 13- 目录 上页 下页 束结
6.1.3 输入输出的基本方法
1. 程序控制方式
2. 中断控制方式
3. 直接存储器存取控制方式
4. 通道方式
5. 外围处理方式
14. - 14- 目录 上页 下页 束结
数据传送方式
程序控制下的数据传送——通过 CPU 执行
程序中的 I/O 指令来完成传送,又分为:
无条件传送
查询传送
中断传送
直接存储器存取( DMA )——传送请求由
外设向 DMA 控制器( DMAC )提出,后
者向 CPU 申请总线,最后 DMAC 利用系统
总线来完成外设和存储器间的数据传送
I/O 处理机—— CPU 委托专门的 I/O 处理机
来管理外设,完成传送和相应的数据处理
15. - 15- 目录 上页 下页 束结
1. 无条件传送方式及其接口
在 CPU 与慢速变化的设备交换数据时,可以认
为它们总是处于“就绪”状态,随时可以进行数
据传送,这就是无条件传送,或称立即传送、
同步传送
适合于简单设备,如 LED 数码管、按键 / 按纽
等
无条件传送的接口和操作均十分简单
这种传送有前提:外设必须随时处于就绪状态送传
流程
送传
流程
接口
例实
接口
例实
6.2. 程序控制方式
16. - 16- 目录 上页 下页 束结
无条件传送:输入示例
IOR
三
态
缓
冲
器 OE
I/O
装
置地
址
译
码
器CS
D7 ~ D0
A15 ~ A1
A0
0160H
MOV DX, 160H
IN AL, DX
MOV DX, 160H
IN AL, DX
17. - 17- 目录 上页 下页 束结
无条件传送:输入实例
MOV DX, 160H
IN AL, DX
MOV DX, 160H
IN AL, DX
74LS244
+5V
10K x 8
G1 G2
数
据
总
线
CS
RD
18. - 18- 目录 上页 下页 束结
无条件传送:输出示例
地
址
译
码
器
数
据
锁
存
器
A15
A0 ~ A14
-IOW
CS
0160H
输
出
设
备
D7 ~ D0
MOV DX, 160H
MOV AL, [BX]
OUT DX, AL
MOV DX, 160H
MOV AL, [BX]
OUT DX, AL
19. - 19- 目录 上页 下页 束结
无条件传送:输出实例
MOV DX, 160H
MOV AL, [BX]
OUT DX, AL
MOV DX, 160H
MOV AL, [BX]
OUT DX, AL
+5V
74LS373
300 x 8
LE OE
数
据
总
线
CS
WR
20. - 20- 目录 上页 下页 束结
无条件传送:输入输出接口
K7
K1
K0
+5V
D0 ~ D7
A0 ~
A15
CLK
LS06
反相
驱动器
LS273
8D
锁存器
LS244
三态
缓冲器
8000H
译码
+5V
LED0
LED7…
…
-G
-IOW
-IOR
21. - 21- 目录 上页 下页 束结
无条件传送:输入输出接口
next: mov dx,8000h ;DX 指向数据端口
in al, dx ; 从输入端口读开关状
态
not al ; 反相
out dx, al ; 送输出端口显示
call delay ; 调子程序延时
jmp next ; 重复
next: mov dx,8000h ;DX 指向数据端口
in al, dx ; 从输入端口读开关状
态
not al ; 反相
out dx, al ; 送输出端口显示
call delay ; 调子程序延时
jmp next ; 重复
22. - 22- 目录 上页 下页 束结
就 ?绪
2. 查询传送方式及其接口
CPU 先了解(查询)外设的工作状态,
在外设就绪(可以交换信息的情况下)
实现数据的输入或输出
对多个外设的情况,则 CPU 按一定顺序
依次查询(轮询)。先查询的外设将优
先进行数据交换
查询传送的特点是:工作可靠,适用面
宽,但传送效率低
23. - 23- 目录 上页 下页 束结
查询传送的两个环节
查询环节
寻址状态口
读取状态寄存器的标志位
若不就绪就继续查询,直至就绪
传送环节
寻址数据口
是输入,通过输入指令从数据口读入数据
是输出,通过输出指令向数据口输出数据
输入状态
就绪?
数据交换
Y
N
送流程传
接口 例实
24. - 24- 目录 上页 下页 束结
查询输入接口
-IOR
+5V
8D
锁存器
8 位
三态
缓冲器
译码
1 位
三态
缓冲器
A0 ~
A15
8000H
8001H
D0 ~
D7
D0
输入
设备
-IOR
-STB
R
QD
25. - 25- 目录 上页 下页 束结
查询输入接口
mov dx,8000h ;DX 指向状态端口
status: in al,dx ; 读状态端口
test al,01h ; 测试标志位 D0
jz status ;D0 = 0 ,未就绪,继续查询
inc dx ;D0 = 1 ,就绪, DX 指向数据
端口
in al,dx ; 从数据端口输入数据
mov dx,8000h ;DX 指向状态端口
status: in al,dx ; 读状态端口
test al,01h ; 测试标志位 D0
jz status ;D0 = 0 ,未就绪,继续查询
inc dx ;D0 = 1 ,就绪, DX 指向数据
端口
in al,dx ; 从数据端口输入数据
26. - 26- 目录 上页 下页 束结
查询输出接口
8D
锁存器
译码
1 位
三态
缓冲器
R
Q
A0 ~ A15
8000H
8001H
D0 ~ D7
D7
D
+5V
-ACK
-IOW
-IOR
输出
设备
27. - 27- 目录 上页 下页 束结
查询输出接口
mov dx,8000h ;DX 指向状态端口
status: in al,dx ; 读取状态端口的状态数据
test al,80h ; 测试标志位 D7
jnz status ;D7 = 1 ,未就绪,继续查询
inc dx ;D7 = 0 ,就绪, DX 指向数据
端口
mov al,buf ; 变量 buf 送 AL
out dx,al ; 将数据输出给数据端口
mov dx,8000h ;DX 指向状态端口
status: in al,dx ; 读取状态端口的状态数据
test al,80h ; 测试标志位 D7
jnz status ;D7 = 1 ,未就绪,继续查询
inc dx ;D7 = 0 ,就绪, DX 指向数据
端口
mov al,buf ; 变量 buf 送 AL
out dx,al ; 将数据输出给数据端口
28. - 28- 目录 上页 下页 束结
6.3 中断传送方式
程序
断点
主程序
中断请求 为
外
设
继
续
执
行
返回断点
送流程传送流程传
CPU 在执行程
序中,被内部或
外部的事件所打
断,转去执行一
段预先安排好的
中断服务程序;
服务结束后,又
返回原来的断点
,继续执行原来
的程序
CPU 在执行程
序中,被内部或
外部的事件所打
断,转去执行一
段预先安排好的
中断服务程序;
服务结束后,又
返回原来的断点
,继续执行原来
的程序
提
供
服
务
中断服务程序
入口
6.3.1 中断的基本概念
1. 中断的概
念
29. - 29- 目录 上页 下页 束结
2. 中断控制方式
中断传送是一种效率更高的程序传送方
式
进行传送的中断服务程序是预先设计好
的
中断请求是外设随机向 CPU 提出的
CPU 对请求的检测是有规律的:一般是
在每条指令的最后一个时钟周期采样中
断请求输入引脚
本书主要论述中断在输入和输出方面的
应用
中断还有着非常广泛的应用
30. - 30- 目录 上页 下页 束结
3. 中断源
能够引发中断的事件被称为中断源。通常,中
断源有两类:内部中断源和外部中断源。
由处理机内部产生的中断事件称为内部中断源。
常见的内部中断源有计算溢出、指令的单步运
行、执行特定的中断指令等。
由处理机之外的外围设备产生的中断事件称为
外部中断源。常见的外部中断源有外设的输入 /
输出请求、定时时间到、电源掉电、设备故障
等。
31. - 31- 目录 上页 下页 束结
三态
缓冲器
中断传送与接口(续)
D0 ~ D7
+5V
8D
锁存器
8 位
三态
缓冲器
R
Q 译码
8001H
中断向量号
D0 ~ D7
INTR
D
输入
设备
中断允许
触发器
A0 ~ A15
中断请求
触发器
-IOR
-INTA
-STB
32. - 32- 目录 上页 下页 束结
4. 中断处理过程
1. 中断请求(外设)
2. 中断响应( CPU )
3. 关中断( CPU )
4. 断点保护( CPU )
5. 中断识别(硬件 / 软
件)
6. 现场保护(用户)
7. 中断服务(用户)
8. 恢复现场(用户)
9. 开中断( CPU/ 用
户)
10. 中断返回(用户)
中断服务是进行数据
交换的实质性环节
33. - 33- 目录 上页 下页 束结
5. 中断系统的功能
① 能进入中断和退出中断,即
完成上述中断响应和中断返回的
过程 .
② 能对某些中断进行屏蔽,并
在必要时开放 .
③ 能进行优先权排队 .
④ 提供中断嵌套能力 .
34. - 34- 目录 上页 下页 束结
6.3.2 8086 中断系统
8086 的中断系统采用向量中断机制
一共可处理 256 个中断
采用中断向量编号 0 ~ 255 ,对 256 个中断
加以区别
可屏蔽中断需借助专用的中断控制器 Intel
8259A 对系统中的可屏蔽中断资源进行管理
:
扩充系统的可屏蔽中断资源,并管理它们:
实现中断优先权比较
实现中断源的识别
35. - 35- 目录 上页 下页 束结
1. 8086 中断类型
硬件中断 软件中断
⑴ 硬件中断
硬件中断,又称外部中断,它是由处
理器外部的硬件、外围设备的请求而引起的
中断。 8086 有两条硬件中断请求信号线:
NMI (非屏蔽中断)和 INTR (可屏蔽中
断)。
36. - 36- 目录 上页 下页 束结
8088 的中断类型
中断逻辑
INTO
指令
单步
中断
除法
错误
INT N
指令
CPU
NMI
8259A
中断
控制器
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
外
设
中
断
源
-INTA
可屏蔽中断申
请
INTR
不可屏蔽中断申
请
可屏蔽中断
源
不可屏蔽中断
源
内部中断
37. - 37- 目录 上页 下页 束结
⑵ 软件中断 ( 内部中断 )
内部中断——内部机制产生
除法错中断( 0 号)——除运算结果溢出时产生
指令中断( n 号)——执行 int n 指令后产生(操作码
CDH )
断点中断( 3 号)——执行 int 3 指令(单字节指令操作码
CCH )用于在调试中设置断点,程序遇断点则中断
溢出中断( 4 号)——执行 into 指令,且前面运算有溢出
( OF=1 )时产生
单步中断( 1 号)—— TF 标志置 1 后,每执行一条子指
令将发生一次
外部中断——外部引脚触发
非屏蔽中断(外设提供向量号)——触发 INTR 引脚产生
可屏蔽中断( 2 号)—— 触发 NMI 引脚产生
内部中断——内部机制产生
除法错中断( 0 号)——除运算结果溢出时产生
指令中断( n 号)——执行 int n 指令后产生(操作码
CDH )
断点中断( 3 号)——执行 int 3 指令(单字节指令操作码
CCH )用于在调试中设置断点,程序遇断点则中断
溢出中断( 4 号)——执行 into 指令,且前面运算有溢出
( OF=1 )时产生
单步中断( 1 号)—— TF 标志置 1 后,每执行一条子指
令将发生一次
外部中断——外部引脚触发
非屏蔽中断(外设提供向量号)——触发 INTR 引脚产生
可屏蔽中断( 2 号)—— 触发 NMI 引脚产生
38. - 38- 目录 上页 下页 束结
⑶ 中断优先权
8086 规定中断优先权从高到低的顺序
为:
① 除法错、溢出中断指令 INTO 、中
断指令 INT n 。
② 非屏蔽中断 NMI 。
③ 可屏蔽中断 INTR 。
④ 单步中断。
39. - 39- 目录 上页 下页 束结
2. 8088 的中断向量表
中断向量:指示中断服务程序的入口地址,
该地址包括:偏移地址 IP 、段地址 CS
(共 32 位)
每个中断向量的低字是偏移地址、高字是段
地址,需占用 4 个字节(低对低,高对高)
。
8088 微处理器从物理地址 000H 开始到
3FFH ( 1KB ),依次安排各个中断向量,
向量号从 0 到 255 。
256 个中断响亮所占用的 1KB 区域,称中断
向量表
中断向量:指示中断服务程序的入口地址,
该地址包括:偏移地址 IP 、段地址 CS
(共 32 位)
每个中断向量的低字是偏移地址、高字是段
地址,需占用 4 个字节(低对低,高对高)
。
8088 微处理器从物理地址 000H 开始到
3FFH ( 1KB ),依次安排各个中断向量,
向量号从 0 到 255 。
256 个中断响亮所占用的 1KB 区域,称中断
向量表
• 几个概念:向量号 N/ 中断向
量 / 中断服务程序的入口地址
• 中断向量的存放首址= N×4
• 几个概念:向量号 N/ 中断向
量 / 中断服务程序的入口地址
• 中断向量的存放首址= N×4
4B
4B
中
断
向
量
表
1KB
3FFH
0H
0 号中断向
量
IP
CS
40. - 40- 目录 上页 下页 束结
内部中断是由于 8086 内部执行程序出现特殊
情况而引起的中断
除法错中断: 向量号为 0
指令中断( int n ): 向量号为 n
断点中断( int 3 ): 向量号为 3
溢出中断( into ) : 向量号为 4
单步中断: 向量号为 1
内部中断是由于 8086 内部执行程序出现特殊
情况而引起的中断
除法错中断: 向量号为 0
指令中断( int n ): 向量号为 n
断点中断( int 3 ): 向量号为 3
溢出中断( into ) : 向量号为 4
单步中断: 向量号为 1
内部中断的中断向量号已由 Intel 公司确
定
内部中断的中断向量号已由 Intel 公司确
定
41. - 41- 目录 上页 下页 束结
外部中断是由于 8086 外部通过 CPU 引脚提出
中断请求而引起的中断
非屏蔽中断( NMI ): 向量号为 2
外部通过非屏蔽中断 NMI 请求,必须响应
非屏蔽中断主要用于处理系统的意外或故障(如奇偶校
验或协处理器运算错误等)
可屏蔽中断( INTR ): 向量号由中断控制器提供
外部通过可屏蔽中断 INTR 请求,由标志位 IF 控制是
否响应;响应时将产生有效的 – INTA 信号
可屏蔽中断主要用于外设中断请求(请求交换数据等服
务)
外部中断是由于 8086 外部通过 CPU 引脚提出
中断请求而引起的中断
非屏蔽中断( NMI ): 向量号为 2
外部通过非屏蔽中断 NMI 请求,必须响应
非屏蔽中断主要用于处理系统的意外或故障(如奇偶校
验或协处理器运算错误等)
可屏蔽中断( INTR ): 向量号由中断控制器提供
外部通过可屏蔽中断 INTR 请求,由标志位 IF 控制是
否响应;响应时将产生有效的 – INTA 信号
可屏蔽中断主要用于外设中断请求(请求交换数据等服
务)
标志位 IF 控制可屏蔽中断的响应标志位 IF 控制可屏蔽中断的响应
42. - 42- 目录 上页 下页 束结
中断标志 IF 的状态
IF = 0 :可屏蔽中断不会被响应(禁止中断,关中
断,中断屏蔽)
系统复位,使 IF = 0
任何一个中断被响应,使 IF = 0
执行指令 CLI ,使 IF = 0
IF = 1 :可屏蔽中断会被响应(允许中断,开中断
,中断开放)
执行指令 STI ,使 IF = 1
执行指令 IRET 后 IF 将恢复为中断前的状态
IF = 0 :可屏蔽中断不会被响应(禁止中断,关中
断,中断屏蔽)
系统复位,使 IF = 0
任何一个中断被响应,使 IF = 0
执行指令 CLI ,使 IF = 0
IF = 1 :可屏蔽中断会被响应(允许中断,开中断
,中断开放)
执行指令 STI ,使 IF = 1
执行指令 IRET 后 IF 将恢复为中断前的状态
明确 IF 标志的状态是关键明确 IF 标志的状态是关键
43. - 43- 目录 上页 下页 束结
3. 8086 中断处理过程
⑴ 可屏蔽中断的中断过程
中断源通过中断控制器 8259 向 CPU 发出中断请求信号
CPU 在每一个指令周期的最后一个时钟周期采样 INTR 信
号线
当 CPU 响应可屏蔽级的中断请求时,首先通过信号线向
8259 连续发出两个负脉冲的中断响应信号。
CPU 暂停执行当前程序,而转去执行相应的中断处理程
序
CPU 执行中断服务程序
返回断点,继续执行被打断的程序
中断源通过中断控制器 8259 向 CPU 发出中断请求信号
CPU 在每一个指令周期的最后一个时钟周期采样 INTR 信
号线
当 CPU 响应可屏蔽级的中断请求时,首先通过信号线向
8259 连续发出两个负脉冲的中断响应信号。
CPU 暂停执行当前程序,而转去执行相应的中断处理程
序
CPU 执行中断服务程序
返回断点,继续执行被打断的程序
44. - 44- 目录 上页 下页 束结
⑵ 非屏蔽中断和软件中断的执行
过程
查询中断的先后顺序决定了各中断源的优先级
别
软件中断
除法错中断
指令中断
溢出中断
非屏蔽中断
可屏蔽中断
单步中断
查询中断的先后顺序决定了各中断源的优先级
别
软件中断
除法错中断
指令中断
溢出中断
非屏蔽中断
可屏蔽中断
单步中断
高
低
45. - 45- 目录 上页 下页 束结
8086 的中断响应过程
NMI
N
软件中断
INTR
TF=1
中断响应周期
读中断向量号
下条指令
现行指令
IF = 1
N
NN
N
Y
Y
Y
Y
Y
执行中断服
务
46. - 46- 目录 上页 下页 束结
8086 的中断响应过程(续)
Y还有 NMI
TEMP = 1
标志寄存器入栈
TEMP = TF , IF = TF
= 0
CS : IP 入栈
获取中断向量
执行服务程序
弹出 CS : IP
弹出标志寄存器
返回被中断程序
( 1 )
( 2 )
( 3 )
( 4 )
( 5 )
N
N
Y
( 6 )
单步中
断
47. - 47- 目录 上页 下页 束结
8086 的中断响应过程(续)
8088 各种中断源的优先权,实际上
是指被识别的先后顺序
多种中断同时请求时,最先响应的
则可能是单步中断或 NMI 中断
8088 各种中断源的优先权,实际上
是指被识别的先后顺序
多种中断同时请求时,最先响应的
则可能是单步中断或 NMI 中断
48. - 48- 目录 上页 下页 束结
6.3.3 8259 中断控制器
Intel 8259A 是可编程中断控制器 PIC
可配合 CPU ( I8080/85 、 I8086/88/286/386
等)管理可屏蔽中断
8259A 的基本功能
1 片 8259A 可以管理 8 级中断,经级联最多可扩展至
64 级
每一级中断都可单独被屏蔽或允许
在中断响应周期,可提供相应的调用指令(配合
I8080/85 )或中断向量号(配合 I8086/88/286/386 )
8259A 设计有多种工作方式,通过初始化编程进行设
置
Intel 8259A 是可编程中断控制器 PIC
可配合 CPU ( I8080/85 、 I8086/88/286/386
等)管理可屏蔽中断
8259A 的基本功能
1 片 8259A 可以管理 8 级中断,经级联最多可扩展至
64 级
每一级中断都可单独被屏蔽或允许
在中断响应周期,可提供相应的调用指令(配合
I8080/85 )或中断向量号(配合 I8086/88/286/386 )
8259A 设计有多种工作方式,通过初始化编程进行设
置
49. - 49- 目录 上页 下页 束结
1. 8259A 的内部结构和引脚
D7~D0
-INTA
INT
中
断
请
求
寄
存
器
中断屏蔽寄存器
数据
总线
缓冲器
IR0
IR7
读 / 写
控制
逻辑
级联
缓冲器
比较器
-RD
-WR
A0
-CS
CAS0
CSA1
CAS2
-SP/-EN
优
先
权
判
别
电
路
中
断
服
务
寄
存
器
控制逻辑
50. - 50- 目录 上页 下页 束结
⑴ 8259 的内部结构
中断请求寄存器 IRR
保存 8 条外界中断请求信号 IR0 ~ IR7 的请求状态
Di 位为 1 表示 IRi 引脚有中断请求;为 0 表示无请求
中断服务寄存器 ISR
保存正在被 8259A 服务着的中断状态
Di 位为 1 表示 IRi 中断正在服务中;为 0 表示没有被
服务
中断屏蔽寄存器 IMR
保存对中断请求信号 IR 的屏蔽状态
Di 位为 1 表示 IRi 中断被屏蔽(禁止);为 0 表示允
许
中断请求寄存器 IRR
保存 8 条外界中断请求信号 IR0 ~ IR7 的请求状态
Di 位为 1 表示 IRi 引脚有中断请求;为 0 表示无请求
中断服务寄存器 ISR
保存正在被 8259A 服务着的中断状态
Di 位为 1 表示 IRi 中断正在服务中;为 0 表示没有被
服务
中断屏蔽寄存器 IMR
保存对中断请求信号 IR 的屏蔽状态
Di 位为 1 表示 IRi 中断被屏蔽(禁止);为 0 表示允
许
51. - 51- 目录 上页 下页 束结
优先权判别器 PR
优先权判别器( PR )用来识别各中断请求的优先级别
读 / 写控制电路
读 / 写控制电路接收来自 CPU 的读 / 写控制命令和片
选控制信息
数据总线缓冲器
这是一个 8 位的双向三态缓冲器,使 8259 和 CPU 数
据总线 D7 ~ D0 直接挂接,完成命令和状态信息的传送。
优先权判别器 PR
优先权判别器( PR )用来识别各中断请求的优先级别
读 / 写控制电路
读 / 写控制电路接收来自 CPU 的读 / 写控制命令和片
选控制信息
数据总线缓冲器
这是一个 8 位的双向三态缓冲器,使 8259 和 CPU 数
据总线 D7 ~ D0 直接挂接,完成命令和状态信息的传送。
52. - 52- 目录 上页 下页 束结
控制电路
它是 8259 内部的控制器,根据 CPU 对 8259 编
程设定的工作方式产生内部控制信号,向 CPU 发出
中断请求信号 INT ,请求 CPU 响应,同时产生与当
前中断请求服务有关的控制信号,并在接收到来自
CPU 的中断响应信号后,将中断类型号送到数据总线。
级联缓冲 / 比较器
该功能部件用来实现多个 8259 的级联连接及
数据缓冲方式。
控制电路
它是 8259 内部的控制器,根据 CPU 对 8259 编
程设定的工作方式产生内部控制信号,向 CPU 发出
中断请求信号 INT ,请求 CPU 响应,同时产生与当
前中断请求服务有关的控制信号,并在接收到来自
CPU 的中断响应信号后,将中断类型号送到数据总线。
级联缓冲 / 比较器
该功能部件用来实现多个 8259 的级联连接及
数据缓冲方式。
53. - 54- 目录 上页 下页 束结
中断级连
8259A 可以级连, 1 个主片最多可以级连 8 个从
片
级连时,主片的级连线 CAS0 ~ CAS2 连至每个
从片的 CAS0 ~ CAS2 ,输出被选中的从片编号
,
每个从片的中断请求信号 INT ,连至主 8259A
的一个中断请求输入端 IRx ;主片的 INT 线连
至 CPU 的中断请求输入端 INTR
在非缓冲方式下,引脚 -SP/-EN ,通过接地指
定该片充当从片( -SP = 0 );反之若接高电
平则该片充当主片( -SP = 1 )。
8259A 可以级连, 1 个主片最多可以级连 8 个从
片
级连时,主片的级连线 CAS0 ~ CAS2 连至每个
从片的 CAS0 ~ CAS2 ,输出被选中的从片编号
,
每个从片的中断请求信号 INT ,连至主 8259A
的一个中断请求输入端 IRx ;主片的 INT 线连
至 CPU 的中断请求输入端 INTR
在非缓冲方式下,引脚 -SP/-EN ,通过接地指
定该片充当从片( -SP = 0 );反之若接高电
平则该片充当主片( -SP = 1 )。
54. - 55- 目录 上页 下页 束结
⑵ 8259 的引脚功能
8259 芯 片 有
28 条 引 脚 ,
双列直插式封
装 , 如 图
6.10 所示。
8259 芯 片 有
28 条 引 脚 ,
双列直插式封
装 , 如 图
6.10 所示。
图 6.10 8259 芯片引脚定义
55. - 56- 目录 上页 下页 束结
2. 8259A 的中断过程
CAS0 ~
CAS2
D0 ~ D7
-SP/-EN
IR0 ~ IR7
CPU 响应周期
8259A 工作波形
INT
第 1 个总线周
期
T1 T2 T3 T4
ALE
CLK
第 2 个总线周
期
T1 T2 T3 T4
第 1 个 -INTA 前 保 持 高 电
平
-INTA
-LOCK
中断向量
主片输出
级联信号
从片接收
56. - 57- 目录 上页 下页 束结
3. 8259A 的工作方式
普通全嵌套方式
特殊全嵌套方式
自动循环方式
特殊循环方式
优先权固定方式
优先权循环方式
设置优先权方式
普通中断结束方式
特殊中断结束方式
自动中断结束方式
非自动中断结束方
式
结束中断方式
中断屏蔽方式
普通屏蔽方式
特殊屏蔽方式
中断触发方式 边沿触发方式
电平触发方式
数据线连接方式
缓冲方式
非缓冲方式
与 CPU 配合方式
与 8080/8085 CPU 配
合与 8086/8088 CPU 配
合
级连方式
级连
不级连
57. - 58- 目录 上页 下页 束结
( 1 )中断结束处理方式
什 么 是 8259A 的 中 断 结 束
?
8259A 利用中断服务寄存器 ISR 判断:
某位为 1 ,表示正在进行中断服务
;
该位为 0 ,就是该中断结束服务。
这里说明如何使 ISR 某位为 0 ,不
反映 CPU 的工作状态。
58. - 59- 目录 上页 下页 束结
( 1 )中断结束处理方式(续)
自动中断结束方式
普通中断结束方式
配合全嵌套优先权方式使用
当 CPU 用输出指令往 8259A 发出普通
中断结束 EOI 命令时, 8259A 就会把所有正
在服务的中断中优先权最高的 ISR 位复位。
特殊中断结束方式
配合循环优先权方式使用
CPU 在程序中向 8259A 发送一条特殊中断
结束命令,这个命令中指出了要清除哪个 ISR
位。
59. - 60- 目录 上页 下页 束结
( 2 ) 缓冲方式
缓冲方式
8259A 的数据线需加缓冲器予以驱动
8259A 把 SP*/EN* 引脚作为输出端,输出
允许信号,用以锁存或开启缓冲器
非缓冲方式
SP*/EN* 引脚为输入端
若 8259A 级连,由其确定是主片或从片
60. - 61- 目录 上页 下页 束结
( 3 )嵌套方式
普通全嵌套方式
8259A 的中断优先权顺序固定不变,从高到低依次为
IR0 、 IR1 、 IR2 、…… IR7
中断请求后, 8259A 对当前请求中断中优先权最高
的中断 IRi 予以响应,将其向量号送上数据总线,
对应 ISR 的 Di 位置位,至到中断结束( ISR 的 Di
位复位)
在 ISR 的 Di 位置位期间,禁止再发生同级和低级优
先权的中断,但允许高级优先权中断的嵌套
特殊全嵌套方式
优先权自动循环方式
优先权特殊循环方式
61. - 62- 目录 上页 下页 束结
( 4 ) 中断屏蔽方式
普通屏蔽方式
将 IMR 的 Di 位置 1 ,则对应的中断 IRi 被
屏蔽,该中断请求不能从 8259A 送到 CPU
如果 IMR 的 Di 位置 0 ,则允许 IRi 中断产
生
特殊屏蔽方式
将 IMR 的 Di 位置 1 ,对应的中断 IRi 被屏
蔽的同时,使 ISR 的 Di 位置 0
62. - 63- 目录 上页 下页 束结
⑸ 优先级的控制
① 固定优先级
所谓固定优先级,即是指 8259 的 8 个中断源中, IR0 优先级最高
, IR1 优先级次之,依次降低,直到 IR7 优先级最低,这个顺序固定不
变。
② 循环优先级
8259 将中断源 IR0 ~ IR7 按下标序号顺序构成一个环,有两种规定
方式:
● 自动优先循环级。
该方式规定:刚被服务过的中断源,其优先级别被改为最低级,而
将最高优先级赋给原来比它低一级的中断源,其它中断源的优先顺序依
中断源顺序环确定。例如: CPU 对 IR3 的中断服务刚结束时, IR3 的
优先级别变为最低,这时 8259 的 8 个中断源优先顺序由高到低为
IR4 , IR5 , IR6 , IR7 , IR0 , IR1 , IR2 , IR3 。
● 指定优先循环级。
该方式规定:在 OCW2 中指定的中断源,其优先级别被设为最低
级,其它中断源的优先顺序依中断源顺序环确定。例如: CPU 在对
IR3 的中断服务过程中,通过指令在 OCW2 中指定 IR5 具有最低优先级
,则 IR3 中断服务结束时, 2859A 的 8 个中断源优先顺序由高到低为
IR6 , IR7 , IR0 , IR1 , IR2 , IR3 , IR4 , IR5 。
63. - 64- 目录 上页 下页 束结
优先权方式
普通全嵌套方式
8259A 的中断优先权顺序固定不变,从高到低依次为 :
IR0 、 IR1 、 IR2 、…… IR7
中断请求后, 8259A 对当前请求中断中优先权最高的中断 IRi 予以
响应,将其向量号送上数据总线,对应 ISR 的 Di 位置位,至到
中断结束( ISR 的 Di 位复位)
在 ISR 的 Di 位置位期间,禁止再发生同级和低级优先权的中断,
但允许高级优先权中断的嵌套
特殊全嵌套方式——允许同级中断嵌套(用于级连主片)
优先权自动循环方式——最高优先权自动转移到相邻的低优先
级中断源
优先权特殊循环方式——最高优先权转移到由指令指定的中断
源
64. - 65- 目录 上页 下页 束结
( 6 ) 中断触发方式
边沿触发方式
8259A 将中断请求输入端出现
的上升沿作为中断请求信号
电平触发方式
中断请求端出现的高电平是有
效的中断请求信号
65. - 66- 目录 上页 下页 束结
( 7 ) 中断级连
一个系统中, 8259A 可以级连,有一个主
8259A ,若干个(最多 8 个)从 8259A
级连时,主 8259A 的三条级连线 CAS0 ~
CAS2 作为输出线,连至每个从 8259A 的
CAS0 ~ CAS2
每个从 8259A 的中断请求信号 INT ,连至主
8259A 的一个中断请求输入端 IR
主 8259A 的 INT 线连至 CPU 的中断请求输入
端
SP*/EN* 在非缓冲方式下,规定该 8259A 是主
片( SP* = 1 )还是从片( SP* = 0 )
66. - 67- 目录 上页 下页 束结
级连方式
不级连——只用 1 片,如 PC/XT
级连——使用 2~9 片,如 PC/AT ( 2
片)
-INTA
INTR
IR0
IR7
IR7
IR0
CAS0~CAS2=010
INT
INT
D0~D7
67. - 68- 目录 上页 下页 束结
4. 8259A 的编程
初始化编程
8259A 开始工作前,
用户必须对 8259A 进行初始化编程。通过
写入初始化命令字 ICW 对 8259A 进行初始化。
工作方式编程
在 8259A 工作期间
可以随时向 8259A 写入操作命令字
OCW ,使之按用户设置的新的工作方式进行工
作,用户还可以通过写操作命令字 OCW 通知
8259A ,下面的操作要读取 8259A 中的状态信
息,以便了解其工作情况。
68. - 69- 目录 上页 下页 束结
⑴ 8259 的初始化编程
8259 初始化编程的主要任务有:
① 复位 8259 芯片。
② 设定中断请求信号 INT 有效的形式,是高电
平有效,还是上升沿有效。
③ 设定 8259 工作在单片方式还是多片级联方
式。
④ 设定 8259 管理的中断类型号的基值,即 0
级 IR0 所对应的中断类型号。
⑤ 设定各中断级的优先次序, IR0 最高, IR7
最低。
⑥ 设定一次中断处理结束时的结束方式。
69. - 70- 目录 上页 下页 束结
( 1 )初始化命令字 ICW
初始化命令字 ICW 最多有 4 个
8259A 在开始工作前必须写入
必须按照 ICW1 ~ ICW4 顺序写入
ICW1 和 ICW2 是必须送的
ICW3 和 ICW4 由工作方式决定
流程
D7 D6 D5 D4 D3 D2 D1 D0
70. - 71- 目录 上页 下页 束结
ICW1
× × × 1 LTIM × SNGL IC4
D7 D6 D5 D4 D3 D2 D1 D0
×—— 表示可以任意
为 1 为 0 都 可 以 ( 建 议 为
0 )
1—— 只能为 1 ,作为标志
中断触发方式:
LTIM = 1 ,电平触发方式
LTIM = 0 ,边沿触发方式
规定单片或级连方式:
SNGL = 1 ,单片方式
SNGL = 0 ,级连方式
是否写入 ICW4
IC4 = 1 ,要写入 ICW4
IC4 = 0 ,不写入 ICW4 ,
即 ICW4 规定的位全为 0
71. - 72- 目录 上页 下页 束结
ICW2
T7 T6 T5 T4 T3 × × ×
D7 D6 D5 D4 D3 D2 D1 D0
设置中断向量号
T7 ~ T3 为中断向量号的高 5
位
低 3 位由 8259A 自动确定:
IR0 为 000 、 IR1 为 001 、 …
…、 IR7 为 111
72. - 73- 目录 上页 下页 束结
ICW3
S7 S6 S5 S4 S3 S2/
ID2
S1/
ID1
S0/
ID0
D7 D6 D5 D4 D3 D2 D1 D0
级连命令字
主片 8259A : Si = 1 对应 IRi 接有从
片;否则 IRi 没有连接从片
从片 8259A : ID0 ~ ID2 编码说明从
片 INT 引脚接到主片哪个 IR 引脚
73. - 74- 目录 上页 下页 束结
ICW4
0 0 0 SFNM BUF M/S AEOI μPM
D7 D6 D5 D4 D3 D2 D1 D0
嵌套方式:
特 殊 全 嵌 套 方 式 ( SFNM =
1 )
普 通 全 嵌 套 方 式 ( SFNM =
0 )
数据线的缓冲方式:
缓冲方式( BUF = 1 )
非缓冲方式( BUF = 0 )
主片 / 从片选择:
主片( M/S=1 )
从片( M/S=0 )
中断结束方式:
自动中断结束( AEOI = 1 )
非自动中断结束( AEOI =
0 )
微处理器类型:
16 位 80x86 ( PM =
1 )
8 位 8080/8085 ( PM =
0 )
74. - 75- 目录 上页 下页 束结
8259 芯片的初始化流程
ICW4 ( A0=1
)
SNGL=0 ?
ICW1 的
IC4=1 ?
初始化完,准备接受中断请求输入
是
是
否
ICW1 ( A0=0 , D4=1
)
ICW2 ( A0=0 )
ICW3 ( A0=0 )
否
75. - 76- 目录 上页 下页 束结
初始化主片 8259A
mov al,11h ; 写入 ICW1
out 20h,al
jmp intr1
intr1: mov al,08h ; 写入 ICW2
out 21h,al
jmp intr2
intr2: mov al,04h ; 写入 ICW3
out 21h,al
jmp intr3
intr3: mov al,1h ; 写入 ICW4
out 21h,al
中断控制器的初始化程序段
76. - 77- 目录 上页 下页 束结
初始化从片 8259A
mov al,11h ; 写入 ICW1
out 0a0h,al
jmp intr5
intr5: mov al,70h ; 写入 ICW2
out 0a1h,al
jmp intr6
intr6: mov al,02h ; 写入 ICW3
out 0a1h,al
jmp intr7
intr7: mov al, 01h ; 写入 ICW4
out 0a1h,al
中断控制器的初始化程序段
77. - 78- 目录 上页 下页 束结
⑵ 工作方式编程
8259 工作方式编程主要完成的任务是对中断请求的屏
蔽、优先级循环控制、中断结束方式、内部控制寄存
器的查询等。
8259A 工作期间,可以随时接受操作命令字 OCW
OCW 共有 3 个: OCW1 ~ OCW3
写入时没有顺序要求,需要哪个 OCW 就写入那个
OCW
D7 D6 D5 D4 D3 D2 D1 D0
78. - 79- 目录 上页 下页 束结
OCW1
M7 M6 M5 M4 M3 M2 M1 M0
D7 D6 D5 D4 D3 D2 D1 D0
屏蔽命令字
内容写入中断屏蔽寄存器 IMR
Di = Mi 对 应 IRi , 为 1 禁 止
IRi 中断;
为 0 允许 IRi 中断。各位互相独
立。
79. - 80- 目录 上页 下页 束结
OCW2
R SL EOI 0 0 L2 L1 L0
D7 D6 D5 D4 D3 D2 D1 D0
R 、 SL 和 EOI 配 合
使用
产 生 中 断 结 束 EOI
命 令 和 改 变 优 先 权
顺序
L2 ~ L0 的 3 位 编
码
指定 IR 引脚
80. - 81- 目录 上页 下页 束结
OCW3
0 ESMM SMM 0 1 P RR RIS
D7 D6 D5 D4 D3 D2 D1 D0
ESMM 、 SMM
设 置 中 断 屏 蔽 方
式
P 、 RR 和 RIS
规定随后读取的
状态字含义
81. - 82- 目录 上页 下页 束结
读取状态字
CPU 可读出 IRR 、 ISR 、 IMR 和查
询字
A0 为低,由 OCW3 中 RR 和 RIS 位
设定读取 IRR 或 ISR ,由 OCW3 中
P 位设定读取查询字
而 A0 引脚为高电平时读取的都是
IMR
查询字反映 8259A 是否有中断请求
82. - 83- 目录 上页 下页 束结
查询字
I - - - - W2 W1 W0
D7 D6 D5 D4 D3 D2 D1 D0
中 断 位 I 位 为
1 ,
有外设请求中断
W2 ~ W0 的 编
码
当前中断请求的
最高优先级
83. - 84- 目录 上页 下页 束结
补充: 命令字和状态字的区别方
法
⑴ 利用读写信号区别写入的控制寄存器
和读出的状态寄存器
⑵ 利用地址信号区别不同 I/O 地址的寄
存器
⑶ 由控制字中的标志位说明是哪个寄存
器
⑷ 由芯片内顺序控制逻辑按一定顺序识
别不同的寄存器
⑸ 由前面的控制字决定后续操作的寄存
器
接口电路中常用的方法
84. - 85- 目录 上页 下页 束结
( 1 )与 CPU 的配合方式
与 8080/8085 CPU 配合—— 中断响应时, -INTA 信号 3
次有效, 8259A 送 CALL XXXXH 指令( 3 个字节)的
机器代码到数据总线 ;
与 8086/8088 CPU 配合——中断响应时, -INTA 信号 2
次有效, 8259A 送相应的中断向量号( 1 个字节)到数
据总线。
8080/
85
CPU
8259A
8086/
88
CPU
8259A
CALL XXXXH 中断向量号
-INTA
INTR
-INTA
INTR
5. 80X86 微机的中断控制
器
85. - 86- 目录 上页 下页 束结
( 2 ) 与处理器接口
-CS A0 -RD -WR 功能
0 0 1 0
0 1 1 0
0 0 0 1
0 1 0 1
0 × 1 1
1 × × ×
写入 ICW1 、 OCW2 和
OCW3
写入 ICW2 ~ ICW4 和 OCW1
读出 IRR 、 ISR 和查询字
读出 IMR
数据总线高阻状态
数据总线高阻状态
86. - 87- 目录 上页 下页 束结
6.4.3 中断识别和中断优先权处理
问题 1 :系统有多个中断请求
,
CPU 如何识别中断源?
办法 1 : 向量中断(硬件)
办 法 2 : 中 断 查 询 ( 软 / 硬 件 结
合)
中断源的识别中断源的识别
87. - 88- 目录 上页 下页 束结
中断查询接口
A0 ~ A15
锁
存
器
INTR
三态
缓冲器
译码
8001H
D0 ~ D7
中断 A
中断 B
中断 C
中断 H
…
…
-IOR
88. - 89- 目录 上页 下页 束结
6.4.3 中断优先权(续 1 )
问题 2 :有多个中断同时请求
,
CPU 如何应对?
办法 1 :链式优先权排队电
路
办法 2 :优先权编码电路
中断优先级排
队
中断优先级排
队
89. - 90- 目录 上页 下页 束结
链式中断优先权排队电路
A2
A1
C2
C1
D2
D1
B2
B1
中断源 A
触发器
中断源 B
触发器
中断源 C
触发器
中断矢量 D中断矢量 C
中断矢量 B中断矢量 A
中断源 D
触发器
缓冲器缓冲器缓冲器缓冲器
-INTA
高优先级
90. - 91- 目录 上页 下页 束结
中断优先权编码电路
比较器失效信号
(先前无中断请求时有效
)
比较器
8:3
优先权
编码器
优先权
寄存器
D0 ~ D7
2
1 A < B
中断请求 0
中断请求 1
中断请求 2
A0
A1
A2INTR
B0
B1
B2
…
有中断请求
91. - 92- 目录 上页 下页 束结
6.4.3 中断优先权(续 2 )
问题 3 :中断处理过程中,
又有中断提出请求,怎么办?
办法 1 :链式优先权排队电
路
办法 2 :优先权编码电路
中断嵌套中断嵌套
92. - 93- 目录 上页 下页 束结
I/O 接口的典型结构
1. 接口电路的内部结构
2. 接口电路的外部特性
3. 接口芯片的分类
4. 接口芯片的可编程性
1. 接口电路的内部结构
2. 接口电路的外部特性
3. 接口芯片的分类
4. 接口芯片的可编程性
93. - 94- 目录 上页 下页 束结
1. 接口电路的内部结构
CPU 与外设主要有数据、状态和控制信息
需要相互交换,于是从应用角度看内部:
⑴ 数据寄存器
保存外设给 CPU 和 CPU 发往外设的数据
⑵ 状态寄存器
保存外设或接口电路的状态
⑶ 控制寄存器
保存 CPU 给外设或接口电路的命令
理解端口理解端口
94. - 95- 目录 上页 下页 束结
2. 接口电路的外部特性
面向 CPU 一侧的信号:
用于与 CPU 连接
主要是数据、地址和控制信号
面向外设一侧的信号:
用于与外设连接
提供的信号五花八门
功能定义、时序及有效电平等差异较大
95. - 96- 目录 上页 下页 束结
3. 接口芯片的分类
接口电路核心部分往往是一块或数块大规
模集成电路芯片(接口芯片):
通用接口芯片
支持通用的数据输入输出和控制的接口芯片
面向外设的专用接口芯片
针对某种外设设计、与该种外设接口
面向微机系统的专用接口芯片
与 CPU 和系统配套使用,以增强其总体功能
96. - 97- 目录 上页 下页 束结
4. 接口电路的可编程性
许多接口电路具有多种功能和工作方式
,可以通过编程的方法选定其中一种
接口需要进行物理连接,还需要编写接
口软件
接口软件有两类:
初始化程序段——设定芯片工作方式等
数据交换程序段——管理、控制、驱动外设,
负责外设和系统间信息交换
97. - 98- 目录 上页 下页 束结
IBM PC/AT 主机板的 I/O 译码电路
接口芯片内部译码A0 ~ A4
DMA 控制器 1
中断控制器 1
定时计数器
并行接口电路
DMA 页面寄存器
中断控制器 2
DMA 控制器 2
协处理器
A5
A6
A7
A8
A9
ALS138 译码器
HLDA
MASTER
A
B
C
E1
-E2
-E3
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
98. - 99- 目录 上页 下页 束结
IBM PC/XT 主机板的 I/O 译码电路
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
A5
A6
A7
A8
A9
AEN
-IOW
A
B
C
-G2B
-G2A
G1
74LS13874LS138
-DMA CS ( 8237 )
-INTR CS ( 8259 )
-T/C CS ( 8253 )
-PPI CS ( 8255 )
-WRTDMAPG
(写 DMA 页面寄存器)
-WRTNMIREG
(写 NMI 屏蔽寄存器)
99. - 100- 目录 上页 下页 束结
用门电路实现 I/O 地址译码
A9
A8
A7
A6
A5
A2
A4
A3
AEN
A1
A0
74LS03
I/O 地址 3E7H
100. - 101- 目录 上页 下页 束结
6.4 DMA 传送方式
希望克服程序控制传送的不足:
外设→ CPU→ 存储器
外设← CPU← 存储器
直接存储器存取 DMA :不经 CPU ,不用指令
外设→存储器( DMA 写)
外设←存储器( DMA 读)
扩展:外设↔ 外设
CPU 出让系统总线(输出高阻),由 DMA 控
制器( DMAC )接管系统总线
101. - 102- 目录 上页 下页 束结
6.4.1 DMA 传送的工作过程
⑴ CPU 对 DMA 控制器进行初始化设置
⑵ 外设、 DMAC 、 CPU , 3 者通过应答信号
建立联系: CPU 将总线暂交 DMAC 控制,事
后再将控制权返还。
⑶ DMA 传送
DMA 读:存储器 → 外设
DMA 写:存储器 ← 外设
⑷ DMAC 的功能:
对存储器寻址地址动加 1/ 减 1
计数器减 1
判断传送是否完成
送流程传
102. - 103- 目录 上页 下页 束结
DMA 传送( 以 DMA 写为例)
-MEMW
-IOR
数据总
线
地址总
线
输
入
设
备
存
储
器
D
M
A
C
C
P
U
②
③④
①
HOLD
HLDA
103. - 104- 目录 上页 下页 束结
DMA 传送流程
HLDA
发存储器地址
传送数据
传送结束?
DMA 结束
修改地址指针
104. - 105- 目录 上页 下页 束结
传送方式的比较
无条件传送:慢速外设需与 CPU 保持同
步
查询传送: 简单实用,效率较低
中断传送:外设主动,可与 CPU 并行工
作,但每次传送需要大量额外时间开销
DMA 传送: DMAC 控制,外设直接和存
储器进行数据传送,适合大量、快速数
据传送
105. - 106- 目录 上页 下页 束结
6.4.2 DMA 控制器 8237
每个 8237A 芯片有 4 个 DMA 通道,
就是有 4 个 DMA 控制器
每个 DMA 通道具有不同的优先权
每个 DMA 通道可以分别允许和禁止
每个 DMA 通道有 4 种工作方式
一次传送的最大长度可达 64KB
多个 8237A 芯片可以级连,扩展通道
数
106. - 107- 目录 上页 下页 束结
1. DMA 控制器的功能
① 编程设定 DMA 的传输模式及其所访问内存的地址区
域。
② 屏蔽或接受外围设备的 DMA 请求( DREQ ),当有
多个设备同时请求时,还要进行优先级排队,首先接受
最高级的请求。
③ 向 CPU 转达 DMA 请求, DMA 控制器要向 CPU 发
出总线请求信号 HOLD( 高电平有效 ) ,请求 CPU 放弃
总线的控制。
④ 接收 CPU 的总线响应信号 (HLDA) ,接管总线控制
权,实现对总线的控制。
⑤ 向相应外围设备转达 DMA 允许信号 DACK 。于是在
DMA 控制器的管理下,实现外围设备和存储器之间的
数据直接传送。
⑥ 在传送过程中进行地址修改和字节计数。在传送完
要求的字节数后,向 CPU 发出 DMA 结束信号 (EOP) ,
撤消总线请求 (HRQ) ,将总线控制权交还给 CPU 。
107. - 108- 目录 上页 下页 束结
2. 可编程 DMA 控制器 Intel8237DMAC
的主要性能和内部结构
内部结构和外部引脚都相对比较复杂
应用观点,内部主要由两类寄存器组
成
通道寄存器
控制和状态寄存器
首先分类展开外部引脚
109. - 110- 目录 上页 下页 束结
(1) 请求与响应信号
DREQ0 ~ DREQ3 : DMA 通道请求。当外
设需要请求 DMA 服务时,将 DREQ 信号置
成有效电平,并要保持到产生响应信号。
HRQ :总线请求。 8237A 输出有效的 HRQ
高电平,向 CPU 申请使用系统总线。
HLDA :总线响应。 8237A 接受来自 CPU
的响应信号 HLDA ,取得了总线的控制权
。
DACK0 ~ DACK3 : DMA 通道响
应。 8237A 使请求服务的通道产生相应的
DMA 响应信号。
3. 8237 的外部引脚
110. - 111- 目录 上页 下页 束结
(2) DMA 传送控制信号
A0 ~ A7 :地址线。输出低 8 位存储器地址。
DB0 ~ DB7 :数据线。输出高 8 位存储器地
址;存贮器与存贮器的传送期间,用于数据传
送。
ADSTB :地址选通。 DMA 传送开始时,输出
高有效,把在 DB0 ~ DB7 上输出的高 8 位地
址锁存在外部锁存器中。
AEN :地址允许。输出高有效,将锁存的高 8
位地址送入系统总线,与芯片此时输出的低 8
位地址组成 16 位存储器地址。
111. - 112- 目录 上页 下页 束结
(2) DMA 传送控制信号(续)
MEMR* :存储器读。有效将数据从存储器
读出
MEMW* :存储器写。有效将数据写入存储
器
IOR* : I/O 读。有效将数据从外设读出
IOW* : I/O 。有效将数据写入外设
READY :准备好。 DMA 传送的 S3 下降沿
检测到为低时,插入等待状态 Sw ,直到
READY 为高才进入第 4 个时钟周期 S4 。
EOP* :过程结束。 DMA 传送过程结束,输
出一个低有效脉冲。外部输入低脉冲信号,
则终结 DMA 传送。
112. - 113- 目录 上页 下页 束结
(3) 处理器接口信号
DB0 ~ DB7 :数据线。用于 8237A 与微处
理器进行数据交换。
A0 ~ A3 :地址线。用以选择芯片内部寄
存器。
CS* :片选。低有效时,微处理器与 8237A
通过数据线通信,主要完成对 8237A 的编
程。
IOR* : I/O 读。读取 8237A 内部寄存器。
IOW* : I/O 写。写入 8237A 内部寄存器。
CLK :时钟。控制芯片内部操作和数据传
输。
RESET :复位。使 8237A 处于初始状态。
113. - 114- 目录 上页 下页 束结
4. 8237 DMAC 的工作方式
DMA 传送方式
· 单字节传送方式 · 数据块传送方式
· 请求传送方式 · 级连方式
DMA 传送类型
· DMA 读 · DMA 写 · DMA 检验
存储器到存储器的传送
工作模式(传送方式)和操作类型。
114. - 115- 目录 上页 下页 束结
① . DMA 传送-单字节方式
每次 DMA 传送时仅传送一个字节
传送一个字节之后,字节数寄存器减 1 ,
地址寄存器加 1 或减 1 , HRQ 变为无效
8237A 释放系统总线,将控制权还给 CPU
若传送后使字节数从 0 减到 FFFFH ,则终
结 DMA 传送或重新初始化
特点:
一次传送一个字节,效率略低
DMA 传送之间 CPU 有机会重新获取总线控制权
⑴ 工作模式 : ( 每个通道有 4 种工作
模式 )
115. - 116- 目录 上页 下页 束结
② 数据块传送方式
由 DREQ 启动就连续地传送数据,直到
字节数寄存器从 0 减到 FFFFH 终止计数
,或由外部输入有效信号终结 DMA 传送
DREQ 只需维持有效到 DACK 有效
特点:
一次请求传送一个数据块,效率高
整个 DMA 传送期间 CPU 长时间无法控制总线
(无法响应其他 DMA 请求、无法处理中断
等)
116. - 117- 目录 上页 下页 束结
③ 请求传送方式
DREQ 信号有效就连续传送数据
DREQ 信号无效, DMA 传送被暂时中止,
8237A 释放总线, CPU 可继续操作
DMA 通道的地址和字节数的中间值仍被保
持
DREQ 信号再次有效, DMA 传送就继续进
行
如果字节数寄存器从 0 减到 FFFFH ,或者
由外部送来一个有效的信号,将终止计数
特点:
DMA 操作可由外设利用 DREQ 信号控制传送的过
程
117. - 118- 目录 上页 下页 束结
④ 级联方式
用于通过多个 8237A 级连以扩展通道
第二级的 HRQ 和 HLDA 信号连到第
一级某个通道的 DREQ 和 DACK 上
第二级芯片的优先权等级与所连通道
的优先权相对应
第一级只起优先权网络的作用,实际
的操作由第二级芯片完成
还可由第二级扩展到第三级等
118. - 119- 目录 上页 下页 束结
⑵ 操作类型
DMA 读——把数据由存储器传送到外设
由 MEMR* 有效从存储器读出数据,由 IOW* 有
效把这一数据写入外设
DMA 写——把外设输入的数据写入存储器
由 IOR* 有效从外设输入数据,由 MEMW* 有效
把这一数据写入存储器。
DMA 检验——空操作
8237A 不进行任何检验
外设可以进行 DMA 校验
存储器和 I/O 控制线保持无效,不进行传送
存储器→存储器传送
119. - 120- 目录 上页 下页 束结
存储器→存储器传送
固定使用通道 0 和通道 1
通道 0 的地址寄存器存源区地址
通道 1 的地址寄存器存目的区地址,通道 1
的字节数寄存器存传送的字节数
传送由设置通道 0 的软件请求启动
每传送一字节需用 8 个时钟周期
前 4 个时钟周期用通道 0 地址寄存器的地址从源
区读数据送入 8237A 的临时寄存器
后 4 个时钟周期用通道 1 地址寄存器的地址把临
时寄存器中的数据写入目的区
120. - 121- 目录 上页 下页 束结
5. 8237 的控制字和编程
8237A 共有 10 种内部寄存器,对它们
的操作有时需要配合 3 个软件命令
8237A 的“软件命令”
不需要通过数据总线写入控制字
直接由地址和控制信号译码实现
全部都用地址 A0 ~ A3 区分
121. - 122- 目录 上页 下页 束结
(1) 当前地址寄存器
保持 DMA 传送的当前地址值
每次传送后该寄存器的值自动加 1 或减 1
这个寄存器的值可由 CPU 写入和读出
基地址寄存器
存放初始值
㈠ 内部寄存器
122. - 123- 目录 上页 下页 束结
(2) 当前字节数寄存器
保持 DMA 传送的剩余字节数
每次传送后,该寄存器的值减 1
这个寄存器的值可由 CPU 写入和读出
该寄存器的值减至 0 ,再减 1 (从 0 减到
FFFFH )时,终止计数
传送 N 个字节,初始值为 N - 1
传送 N 个字节,初始值为 N - 1
基字节数寄存器
存放初始值
123. - 124- 目录 上页 下页 束结
⑶ 基地址寄存器和基字节计数寄
存器
每个通道均有一个 16 位的基地址寄存器和一个
16 位的基字节计数寄存器。
它们用来存放所对应的地址寄存器和字节计数
器的初始值。
在编程时,这两个寄存器由 CPU 以连续两字节
方式与对应的当前寄存器同时写入,但它们的
内容不能读出。
在自动预置方式时,基本寄存器的内容被用来
恢复当前寄存器的初始值。
124. - 125- 目录 上页 下页 束结
(4) 命令寄存器
存放 8237A 的命令字
设置 8237A 芯片的操作方式
影响每个 DMA 通道
复位时使命令寄存器清零
设置 D2 = 1 才使 8237A 可以作为 DMA 控
制器
请看命令字的格式
125. - 126- 目录 上页 下页 束结
命令字格式
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 允许存储器之间传
送
126. - 127- 目录 上页 下页 束结
(5) 方式寄存器
存放相应通道的方式控制字
选择某个 DMA 通道的工作方式
其中用最低 2 位选择哪个 DMA 通道
请看方式字的格式
127. - 128- 目录 上页 下页 束结
方式字格式
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
128. - 129- 目录 上页 下页 束结
(6) 请求寄存器
存放软件 DMA 请求状态
除硬件 DMA 请求外,当工作在数据
块传送方式时也可以通过软件发出
DMA 请求
若是存贮器到存贮器传送,则必须由
软件请求启动通道 0
请看请求字的格式
129. - 130- 目录 上页 下页 束结
请求字格式
D7 D6 D5 D4 D3 D2 D1 D0
任意
0 复位
1 置位 00 通 道
0
01 通道
1
10 通道
2
11 通道
130. - 131- 目录 上页 下页 束结
(7) 屏蔽寄存器
控制外设硬件 DMA 请求是否被响应(为 0
允许),各个通道互相独立。 3 种方法:
单通道屏蔽字只对一个 DMA 通道屏蔽位进行设置
主屏蔽字对 4 个 DMA 通道屏蔽位同时进行设置
清屏蔽寄存器命令使 4 个屏蔽位都清零(允许)
复位使 4 个通道全置于屏蔽状态
当一个通道的 DMA 过程结束,如果不是工
作在自动初始化方式,则这一通道的屏蔽位
置位,必须再次编程为允许,才能进行下次
DMA 传送
请看屏蔽字的格式
131. - 132- 目录 上页 下页 束结
单通道屏蔽字格式
D7 D6 D5 D4 D3 D2 D1 D0
任意
0 清 屏 蔽
位
1 置 屏 蔽
位
00 通 道
0
01 通道
1
10 通道
2
11 通道
132. - 133- 目录 上页 下页 束结
主屏蔽字格式
D7 D6 D5 D4 D3 D2 D1 D0
任意
Di = 0 清通道 I 屏
蔽位 Di = 1 置通道
I 屏蔽位
133. - 134- 目录 上页 下页 束结
(8) 状态寄存器
可由 CPU 读取
低 4 位反映读命令这个瞬间每个通道
是否产生 TC (为 1 ,表示该通道传
送结束)
高 4 位反映每个通道的 DMA 请求情
况(为 1 ,表示该通道有请求)
状态位在复位或被读出后,均被清零
134. - 135- 目录 上页 下页 束结
(9) 暂存寄存器
在存储器到存储器的传送方式下,临
时寄存器保存从源存储单元读出的数
据,该数据又被写入到目的存储单元
传送完成,临时寄存器只会保留最后
一个字节,可由 CPU 读出
复位使临时寄存器内容为零
135. - 136- 目录 上页 下页 束结
补充 : 读写通道寄存器
CPU 与 8237A 之间通过 8 位数据总线
交换信息, 8237A 的通道寄存器均为
16 位
需要两次读写操作才能实现 CPU 与
8237A 之间的一个完整数据的交换
8237A 内含一个高 / 低触发器,用来
控制读写通道寄存器的高、低字节
136. - 137- 目录 上页 下页 束结
补充 : 高 / 低触发器
该触发器为 0 ,控制读写低字节
该触发器为 1 ,控制读写高字节
软、硬件复位后,触发器为 0
每次读写通道寄存器,自动改变触发
器状态。如果对 16 位寄存器的操作
用两次连续读写进行,就不必清除这
个触发器
清除高 / 低触发器软件命令( A3
A2
A1
A0
= 1100 )将使高 / 低触发器清零
137. - 138- 目录 上页 下页 束结
(10) 软件命令
清除高 / 低触发器软件命令
A3
A2
A1
A0
= 1100 ,使高 / 低触发器清零
主清除命令
A3
A2
A1
A0
= 1101 ,使高 / 低触发器清零
还使命令、状态、请求、临时寄存器清零
使屏蔽寄存器置为全 1 (禁止 DMA 请求)
主清除命令与硬件的 RESET 信号具有相同的功能
清屏蔽寄存器命令
A3
A2
A1
A0
= 1110 ,使 4 个屏蔽位都清零(允许
DMA 请求)
138. - 139- 目录 上页 下页 束结
㈡ 内部寄存器的寻址
对 8237 内部寄存器的寻址和执行与控制器有关
的软件命令,都由芯片选择信号, I/O 读、 I/O
写和 A3 ~ A0 地址线的不同状态编码来完成。
= 0 表示访问该 8237DMAC 芯片; A3 = 0 则表
示访问某个地址寄存器或字节计数器; A3=1 则
表示访问控制寄存器和状态寄存器。
或正在发出一条软件命令。
在和 A3 都为 0 时, CPU 访问某个地址寄存器
或字节计数器,并由 A2 ~ A1 编码状态给出通
道号,而 A0=0 表示访问当前地址寄存器, A0
= 1 表示访问当前字节计数器。而用为低电平
或为低电平表示是读操作还是写操作。
对当前地址寄存器进行写入的同时,也写入基
本地址寄存器;对当前字节计数器进行写入的
同时,也写入基本字节计数器。
CS
139. - 140- 目录 上页 下页 束结
㈢ 8237 的编程步骤
① 输出主清除命令;
② 写入基与现行地址寄存器;
③ 写入基与现行字节数址寄存器;
④ 写入模式寄存器;
⑤ 写入屏蔽寄存器;
⑥ 写入命令寄存器;
⑦ 写入请求寄存器;
若有软件请求,就写入到指定通道,就可以开始 DMA
传送过程;若无软件请求,则在完成了① -⑦ 的编程后,由
通道的 DREQ 启动 DMA 传送过程。
140. 例:若要利用通道 0 ,由外设 ( 磁盘 ) 输入 32KB 的一个数据块,
传送至内存 8000H 开始的区域 ( 增量传送 ) ,采用块连续传送的方
式,传送完不自动初始化,外设的 DREQ 和 DACK 都为高电平有
效。
要编程首先要确定端口地址。地址的低 4 位用以区分 8237
的内部寄存器,高 4 位地址 A7 ~ A4 经译码后,连至选片端
CS ,假定选中时高 4 位为 5 。
① 模式控制字 D7 D6 D5 D4 D3 D2 D1 D0
1 0 0 0 0 1 0 0
② 屏蔽字 D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 0 0 0 0
③ 命令字 D7 D6 D5 D4 D3 D2 D1 D0
1 0 1 0 0 0 0 0
141. - 142- 目录 上页 下页 束结
DMA 通道 0 的刷新 程编
OUT 5DH , AL ;输出主清除命令
MOV AL , 00H
OUT 50H , AL ;输出基和现行地址
的低 8 位
MOV AL , 80H
OUT 50H , AL ;输出基和现行地址
的高 8 位
MOV AL , 00H
OUT 51H , AL
MOV AL , 80H
OUT 51H , AL ;给基和现行字节数
赋值
MOV AL , 84H
OUT 5BH , AL ;输出模式字
MOV AL , 00H
OUT 5AH , AL ;输出屏蔽字
MOV AL , 0AOHIBM PC/XT
142. - 143- 目录 上页 下页 束结
6. Intel 8237 的应用举例
㈠ 8088 访问 8237 的寻址 ( 自学 )
㈡ 8237 的初始化编程
在进行 DMA 传输之前, CPU 要对 8237
进行编程。 DMA 传输要涉及到 RAM 地址、
数据块长、操作方式和传输类型,因此,在
每次 DMA 传输之前,除自动预置外,都必须
对 8237 进行一次初始化编程。若数据块超过
64KB 界限时,还必须将页面地址写入页面寄
存器。
㈢ 利用 8237 的 CHl 实现 DMA 数据传送 ( 自
学 )
144. 第 6 章教学要求
1. 了解 8237A 引脚特点和工作时序
2. 掌握 8237A 的各种工作方式
3. 理解 8237A 内部寄存器的作用和编
程
4. 了解 8237A 在 IBM PC 系列机上的应
用情况