Transcript A 0 =0

§7.3 可编程中断控制器8259A
一、引言
二、8259A的引脚、编程结构和工作过程
三、8259A的编程
 1. 设置中断屏蔽字
 2. 发中断结束命令EOI
四、8259A在IBM PC/XT系统中的应用
1
一、引言
中断申请
8086
CPU
中断申请
管理接口
IF
INTR
接口1
网络
接口2
硬盘
接口3
软盘
接口4
打印机
INT
2
中断申请管理接口的主要功能:
1. 向CPU的引脚INTR发中断申请信号
 当有多个外设同时发出中断请求时,
 能按照一定的优先级顺序,向CPU发出中断申请,
 使CPU能优先响应优先级最高的外部设备的中断申请。
2. 送中断类型号
 在CPU中断响应周期,针对不同外设的中断请求,
 向CPU传送不同的中断类型号,
 使CPU执行相应的中断子程。
在IBM PC机由8259A可编程中断控制器(PIC)来完成。
3
二、 8259A的引脚、编程结构和工作过程
1. 8259A的引脚
2. 8259A的编程结构
3. 8259A的工作过程
4
双列直插式芯片,28个引脚
1. 8259A的引脚
8259A
Vcc
总线
D0
~
D7
IOR
IOW
数据线
RD
WR
A0
A0
A5
~
A9
INTA
INTR
D0
~
D7
片
选 20~3FH
译
码
CS
INTA
INT
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
SP/EN
CA0
CA1
CA2
+ 5V
17.2Hz 定时器
方波
键盘
保留
串 口2
串 口1
硬盘
软盘
打印机
用于多片
8259A
级连情况
GND
5
级联工作方式
1、单片8259A可支持8个中断源;
2、采用多片8259A级连,可最多支持64个中断
源。n片8259A可支持7n+1个中断源;
3、级连时只能有一片8259A为主片,其余的均
为从属片;
4、涉及到的8259A引脚包括:
 CAS0-CAS2
 SP/EN
 IRi
 INT
6
6
 SP/EN:双功能的双向信号线,分别表示主从定
义/缓冲器方向这两种工种方式。
 在主从方式中,它作为输入信号线SP,由该信号
的高低电平来区分“主”或“从” 8259A:若SP
=1,则本片为“主”8259A;若SP=0,则为“从”
8259A。只有一个8259A时,它应接高电平。
 在缓冲方式时,则它作为输出信号线EN,用于控
制缓冲器的传送方向:若EN=1,则CPU将把数据
写入8259A;若EN=0,将把数据由8259A读出至
CPU。
7
7
8
8
2.8259A的编程结构
处理部分
总线
D0
~
D7
A0
A5
~
A9
IOR
IOW
INTA
INTR
数据线
A0
片
选 CS
译
码
RD
D0
~
D7
ISR
当前
中断
服务
寄存器
0
IRR 0
中断 0
申请 0
PR
寄存器 0
0
优先级
0
0
裁决器
0
0
0
0
0
0
0
0
ICW1 芯片控制
A0
1 × I3 I4 0
1
WR
INT
0 0
0
OCW2 优先级设置、发EOI
ICW3 主从片连接关系
INTA
A0
1 0 0 1 0 1 0 0 1
OCW1 中断屏蔽寄存器 IMR
ICW2 中断类型号
1
ICW4 方式控制
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
0 1
0
SP/EN
CA0
CA1
CA2
VCC
OCW3特殊屏蔽,查询方式设置
1
控制部分
GND
9
8259A的编程结构
8259A内部有9个
可读写的寄存器
 4个初始化命令寄存器

ICW1、ICW2

ICW3、ICW4
8259A中断控制器
处理部分
0
ISR 0
当前 0
中断 0
服务 0
寄存器 00
0
 3个操作命令寄存器
ICW1 芯片控制
1 × I3 I4

OCW1(IMR)
ICW2 中断类型号

OCW2、OCW3
 当前中断服务寄存器
ISR
 中断申请寄存器 IRR
IRR
0
中断申请 0
寄存器 0
0
0
0
0
0
PR
优先级
裁决器
OCW1
1 0 0 1 0 1 0 0
中断屏蔽寄存器 IMR
0 0
ICW3 主从片关系
OCW2
0 1
ICW4 方式控制
OCW3
控制部分
10
(1) 初始化命令字(ICW1- ICW4)
决定8259A的工作方式
 通常是在计算机系统启动时在初始程序设置,
 一旦设定,一般在系统工作过程不再改变。
例
开机后,BIOS将8259A初始化为:
① IR0~IR7中断申请信号为上升沿触发方式;
② IR0~IR7对应的中断类型号分别为08H~0FH;
③ 优先级IR0最高, IR7最低;
(2) 操作命令字(OCW1,OCW2,OCW3)

在应用程序中设定,动态地控制CPU处理中断的过程
(3) ISR和IRR存放当前8259A的状态
通过读取 ISR 和 IRR 的内容,可了解当前8259A工作情况
11
初始化命令字在8259正常工作前设置。它决
定8259的工作方式和环境。返回
A0
ICW1 0
D7
D6
D5 D4
A7
A6
A5 1 LTIM ADI SNGL IC4
8086不用
0:边沿检测
1:电平检测
D3
D2
D1
D0
0:不需要ICW4
1:需要ICW4
0:级联使用
1:单独使用
8086/
8088不用
12
12
 初始化8259A必须从ICW1开始
 写ICW1意味着重新初始化8259A
 写入ICW1后,8259A的状态如下:
 清除ISR和IMR(全0);
 将中断优先级设成初始状态:IR0最高,IR7
最低;
 设定为一般屏蔽方式;
 采用非自动中断结束方式;
 状态读出逻辑预置为读IRR。
13
13
A0
1
D7
T7
D6
T6
D5 D4 D3 D2 D1 D0
T5 T4 T3 X X X
中断类型码高5位
中断源
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
D2
0
0
0
0
1
1
1
1
D1
0
0
1
1
0
0
1
1
自动填入
D0
0
1
0
1
0
1
0
1
在中断响应的第二个总线周期,通过数据线发送
中断类型码给CPU
返回
14
14
A0
1
D7
T7
D6
T6
D5
T5
D4
T4
D3
T3
D2
x
D1
x
D0
x
 T7~T3: 中断向量码的高5位
 T2~T0: 最低3位为中断源的序号IRn
 000~111分别对应IR0~IR7
 由8259A根据中断源的序号自动填入
例如:
若ICW2命令字为48H,则IR0的中断向量码为48H,
IR7的中断向量码为4FH,等等。
15
15
D7
S7
A0
1
主片
D6 D5 D4 D3
S6 S5 S4 S3
D2
S2
D1
S1
D0
S0
主8259的级联标志
1:相应的IR上有从8259
0:相应的IR上无从8259
从片
A0
1
D7
0
D6
0
D5
0
D4
0
D3
0
D2
ID2
D1
ID1
D0
ID0
ID2~ID0:从8259
的IR识别码
级连初始化必须与硬件连接一致
16
16
 ICW3必须与主从片的连接关系一致:
例如,主片的IR4与从片的INT线连接,则
主片的ICW3=10H,从片的ICW3=04H。
 中断响应时,主片通过级连线CAS2-CAS0
送出被允许中断的从片标识码,各从片用
自己的ICW3与CAS2-CAS0比较,二者一
致的从片才可发送中断向量码。
17
17
A0
1
D7 D6 D5 D4
D3
D2
D1 D0
0 0 0 SFNM BUF M/S AEOI µPM
0:一般的全嵌套方式
1:特殊的全嵌套方式
0×:非缓冲方式
10:缓冲方式/从片
11:缓冲方式/主片
0:8085方式
1:86/88方式
0:非自动EOI
1:自动EOI
返回
初始化命令字ICW1~ICW4
是以写入的顺序来区分的
18
18
 单片8259应用于8086系统,IR0的中断类型码为
18H,电平触发方式,全嵌套非缓冲方式,自动
结束中断,要求初始化ICW4。端口地址为0A0H
开始,初始化程序为:
MOV
AL,13H ICW1初始化
OUT
0A0H,AL ;写入ICW1
MOVAL,18H ICW2 初始化
OUT
0A2H,AL ;写入ICW2
MOV
AL,03H ICW4初始化
OUT
0A2H,AL ;写入ICW4
19
19




OCW用于设置8259的工作状态
在初始化后写入
OCW的写入顺序可任意
写入地址要求:
 OCW1必须写入奇地址端口(A0=1)
 OCW2,OCW3必须写入偶地址端口(A0=0)
20
20
OCW1
A0
1
D7
M7
D6
M6
D5
M5
D4
M4
D3
M3
D2
M2
D1
M1
D0
M0
0:清中断屏蔽位
1:置中断屏蔽位
 Mi=1 中断请求线IRi被屏蔽(不允许中断)

=0 允许该IRi中断
 OCW1将写入IMR寄存器。
 A0=1时读OCW1可读出设置的IMR内容。
21
21
OCW2
A0
0
D7
D6
D5
R
SL
EOI
D4
D3
0
0
D2
L2
D1 D0
L1
L0
0
0
……
1
1
0
R=1:循环优先权
0
R=0:固定优先权
1
SL=1:L2L1L0指定IR位1
0
SL=0:L2L1L0无效
1
EOI=1:中断结束
1
0
0
1
0
0
0
1
1
1
1
1
1
0
0
1
0
0
0
对应IRi
1 的编码
常规EOI
特殊EOI,由L2~L0指定结束IRi
自动优先权循环,常规EOI
自动优先权循环
取消自动优先权循环(固定优先权)
特殊EOI,由L2~L0指定特殊优先权循环
特殊优先权循环,由L2~L0设定最低优先级
无操作
22
22
OCW3
0
0
0
1
1
0
A0
0
D7
D6
- ESMM
D5
D4
D3
D2
SMM
0
1
P
1
1
无意义 清除特殊 设定特殊
屏蔽方式 屏蔽方式
0 0
0 1
0:非查询方式
1:查询方式
D1 D0
RR RIS
1
0
1
1
无意 读
读
义 IRR ISR
8259的工作方式编程并没有固定顺序,各命
令字之间用地址信号A0及特征位加以区分。
23
23
 查询方式允许8259A不工作于中断方式,
而是以查询方式工作。
 CPU先写一个D2=1(查询方式)的OCW3,
再对同一地址读入,即可得到如下状态字节:
I x x x x R2 R1 R0
I=1表示有中断请求,中断请求号为R2-R0
此查询步骤可反复执行,以响应多个同时发
生 的中断。
 读IRR/ISR:写入此命令后,随后再对同
一地址读,即可得到IRR或ISR的内容。
24
24
CLI
MOV
OUT
MOV
OUT
MOV
OUT
MOV
OUT
MOV
OUT
MOV
OUT
STI
=0001 0111B
;关中断
AL,17H;ICW1:单片,边缘触发,需要ICW4
20H,AL
=0000 1000B
AL,08H
;ICW2:中断类型码的D7~D3位为00001
21H,AL
=0000 0001B
AL,01H;ICW4:非自动的EOI,非缓冲,80X86方式
21H,AL
=0000 0100B
AL,04H
;OCW1:只屏蔽IRQ2(保留中断)
21H,AL
=0010 0000B
AL,20H
;OCW2:固定优先权,一般的EOI
20H,AL
=0100 1011B
AL,4BH;OCW3:正常屏蔽,非查询方式,可读ISR
20H,AL
;开中断
25
25
3. 8259A 的工作过程
 分两步:

(1)处理外设中断申请,决定是否向CPU发中断
申请信号。
 (2)若发中断申请信号,且CPU响应, 则在CPU
中断响应周期送出中断类型号。
26
(1) 处理外设中断申请,决定是否向CPU发中断申请信号
① 中断申请寄存器IRR 锁存外部的中断申请。
 若 IR0~IR7 引脚上有中断申请,则将 IRR 相应位置1
② 中断屏蔽寄存器 IMR 决定 IRR 中的中断申请
是否进入优先级裁决器 PR。
 IMR对应位为 0,允许中断申请进入优先级裁决器,
为 1,不允许进入,中断申请被IMR屏蔽。

③ 当前中断服务寄存器 ISR 记录CPU正在响应的中断。
 ISR中的某位为1,表示CPU正在响应此级中断,
 ISR中的某位为 0,表示CPU没有或已响应完此级中断,

④ 优先级裁决器PR 据新进入的中断申请和 ISR的内容,
决定是否发中断申请信号。
 如果进入的中断申请比 ISR 中记录的中断优先级高,
 则通过 8259A 的 INT 引脚向 CPU发出中断请求信号;
 如果进入的中断申请不比 ISR 中记录的中断优先级高,
 同级或低级,则不向 CPU 发中断请求信号。
27
① 中断申请寄存器IRR 锁存外部的中断申请。
 若 IR0~IR7 引脚上有中断申请,则将 IRR 相应位置1
总线
D0
~
D7
数据线
A0
A0
A5
~
A9
IOR
片
选
CS
译
码
RD
IOW
WR
INTA
INTA
INTR
INT
D0
~
D7
ISR
当前
中断
服务
寄存器
0
0
0
0
0
0
0
0
ICW1 芯片控制
ICW2 中断类型号
ICW3 主从片关系
ICW4 方式控制
IRR
中断
申请
寄存器
PR
优先级
裁决器
01
0
0
0
0
0
0
01
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
1 0 0 1 0 1 0 0
OCW1 中断屏蔽寄存器 IMR
0 0
OCW2 优先级、发EOI
OCW3 特殊屏蔽设置
28
② 中断屏蔽寄存器 IMR 决定 IRR 中的中断申请
是否进入优先级裁决器 PR。
 IMR对应位为 0,允许中断申请进入优先级裁决器,

为 1,不允许进入,中断申请被IMR屏蔽。
总线
D0
~
D7
数据线
A0
A0
A5
~
A9
IOR
片
选
CS
译
码
RD
IOW
WR
INTA
INTA
INTR
INT
D0
~
D7
ISR
当前
中断
服务
寄存器
0
0
0
0
0
0
0
0
ICW1 芯片控制
ICW2 中断类型号
ICW3 主从片关系
ICW4 方式控制
IRR
中断
申请
寄存器
PR
优先级
裁决器
1
0
0
0
0
0
0
1
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
1 0 0 1 0 1 0 0
OCW1 中断屏蔽寄存器 IMR
0 0
OCW2 优先级、发EOI
OCW3 特殊屏蔽设置
29
③ 当前中断服务寄存器 ISR 记录CPU正在响应的中断。
 ISR中的某位为1,表示CPU正在响应此级中断,

即正在执行此中断源的中断子程;
 ISR中的某位为 0,表示CPU没有或已响应完此级中断,

即不在执行此中断源的中断子程
总线
D0
~
D7
数据线
A0
A0
A5
~
A9
IOR
片
选
CS
译
码
RD
IOW
WR
INTA
INTA
INTR
INT
D0
~
D7
ISR
当前
中断
服务
寄存器
0
0
1
0
0
0
0
0
ICW1 芯片控制
ICW2 中断类型号
ICW3 主从片关系
ICW4 方式控制
IRR
中断
申请
寄存器
PR
优先级
裁决器
1
0
0
0
0
0
0
1
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
1 0 0 1 0 1 0 0
OCW1 中断屏蔽寄存器 IMR
0 0
OCW2 优先级、发EOI
OCW3 特殊屏蔽设置
30
④ 优先级裁决器PR据新进入的中断申请和 ISR的内容,
决定是否发中断申请信号。
 如果进入的中断申请比 ISR 中记录的中断优先级高,
 则通过 8259A 的 INT 引脚向 CPU发出中断请求信号;
 如果进入的中断申请不比 ISR 中记录的中断优先级高,同级或低级,
总线
D0
~
D7
则不向 CPU 发中断请求信号。
数据线
A0
A0
A5
~
A9
IOR
片
选
CS
译
码
RD
IOW
WR
INTA
INTA
INTR
INT
D0
~
D7
ISR
当前
中断
服务
寄存器
0
0
1
0
0
0
0
0
ICW1 芯片控制
ICW2 中断类型号
ICW3 主从片关系
ICW4 方式控制
IRR
中断
申请
寄存器
PR
优先级
裁决器
1
0
0
0
0
0
0
1
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
1 0 0 1 0 1 0 0
OCW1 中断屏蔽寄存器 IMR
0 0
OCW2 优先级、发EOI
OCW3 特殊屏蔽设置
31
(2) 若发中断申请信号,且CPU响应,
则在CPU中断响应周期送出中断类型号
 CPU接收到 INTR上的中断申请信号后:
 如果 IF 标志为0,则CPU不响应此中断申请信号,
即中断申请被IF屏蔽。
 如果 IF 标志为1, 则处理完当前的指令后, 进入中
断响应周期

通过 INTA 引脚发出两个负脉冲信号,

从数据总线上获取中断类型号,

进入中断响应的过程。
32
8086CPU中断响应周期时序
第 一 个
中断响应周期
T1
T2
T3
T4
第 二 个
中断响应周期
T1
T2
T3
T4
CLK
INTA
AD7~AD0
向量类型
33
8259A在接收到第一个INTA中断响应信号后:
① 将 ISR 中相应位置1,
表示 CPU 响应此级中断,执行此中断源的中断子程。
② 把 IRR中对应的位清0,清除IRR中锁存的中断申请信号。
总线
D0
~
D7
数据线
A0
A0
A5
~
A9
IOR
片
选
CS
译
码
RD
IOW
WR
INTA
INTA
INTR
INT
D0
~
D7
ISR
当前
中断
服务
寄存器
01
0
1
0
0
0
0
0
ICW1 芯片控制
ICW2 中断类型号
ICW3 主从片关系
ICW4 方式控制
IRR
中断
申请
寄存器
PR
优先级
裁决器
01
0
0
0
0
0
0
1
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
1 0 0 1 0 1 0 0
OCW1 中断屏蔽寄存器 IMR
0 0
OCW2 优先级、发EOI
OCW3 特殊屏蔽设置
34
8259A在接收到第二个INTA中断响应信号后:
① 通过数据线,将被响应申请的中断类型号送给CPU。
类型号由ICW2提供,在初始化8259A时已设定好。
② CPU获得中断类型号后,进入CPU响应中断的过程,
执行中断子程,处理中断源申请的功能。
总线
D0
~
D7
数据线
A0
A0
A5
~
A9
IOR
片
选
CS
译
码
RD
IOW
WR
INTA
INTA
INTR
INT
D0
~
D7
ISR
当前
中断
服务
寄存器
01
0
1
0
0
0
0
0
ICW1 芯片控制
ICW2 中断类型号
ICW3 主从片关系
ICW4 方式控制
IRR
中断
申请
寄存器
PR
优先级
裁决器
01
0
0
0
0
0
0
1
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
1 0 0 1 0 1 0 0
OCW1 中断屏蔽寄存器 IMR
0 0
OCW2 优先级、发EOI
OCW3 特殊屏蔽设置
35
CPU响应中断过程:
① 取中断类型号N
② 当前PSW的内容入栈
③ 清IF、TF标志为0
保存现场
④当前CS的内容入栈
⑤ 当前IP的内容入栈
⑥ 取内存单元( 0 : N ×4 )字内容送IP
取中断子程
⑦ 取内存单元( 0 : N ×4 + 2 )字内容送CS
入口地址
此时CS:IP指向中断程序的入口,开始执行中断程序。
执行完中断子程中最后一条指令IRET后,
返回被中断处,继续执行被中断的程序。
36
三、8259A的编程
1. 8259A的编程
2. 8259A的编程方法
(1) 设置中断屏蔽字
(2) 发中断结束命令EOI
37
1. 8259A的编程
8259A内部有9个
可读写的寄存器
 4个初始化命令寄存器

ICW1、ICW2

ICW3、ICW4
8259A中断控制器
处理部分
0
ISR 0
当前 0
中断 0
服务 0
寄存器 00
0
 3个操作命令寄存器
ICW1 芯片控制
1 × I3 I4

OCW1(IMR)
ICW2 中断类型号

OCW2、OCW3
 当前中断服务寄存器
ISR
 中断申请寄存器 IRR
IRR
0
中断申请 0
寄存器 0
0
0
0
0
0
PR
优先级
裁决器
OCW1
1 0 0 1 0 1 0 0
中断屏蔽寄存器 IMR
0 0
ICW3 主从片关系
OCW2
0 1
ICW4 方式控制
OCW3
控制部分
38
8259A中断控制器
处理部分
8259A有两个I/O端口地址
 A0=0 偶地址端口
 A0=1 奇地址端口
 对 9个寄存器的读写
 均通过这两个端口实现

写入数据的特征位
根据

写入的先后顺序


区分是对哪个寄存器
进行操作
0
8 D0 ISR 0
0
当前
~
0
D7 中断 0
服务
0
A0
寄存器 0
0
CS
IRR
0
中断申请 0
寄存器 0
0
0
0
0
0
PR
优先级
裁决器
A0
ICW1 芯片控制 A0 OCW1
1 × I3 I4 0 1 0 0 1 0 1 0 0 1
RD
中断屏蔽寄存器
ICW2 中断类型号
1
WR
0
0 0
OCW2
ICW3 主从片关系
ICW4 方式控制
0
0 1
1
OCW3
1
控制部分
39
是否级联
8259初始化流程
用ICW1设置
请求格式信号
是否需要设置ICW4
用ICW2设置中断类型码
N
是否为级联方式
Y
Y
本片设为主片吗?
N
设置ICW3,各位 设置ICW3,高5位
对应IR0~IR7
为0,低3位为标识码
需要用到ICW4吗?
Y
用ICW4设置
是否为特殊全嵌套方式
是否为缓冲方式
是否为自动结束中断方式
是否为16位系统
N
结束,进行中断服务
40
 2. 8259A的编程方法
 8259A有多种工作方式,这些工作方式均可编
程选择,使用相当灵活。
要求掌握:
 (1)通过中断屏蔽寄存器IMR的读写,设置中断屏蔽字
 (2) 通过OCW2操作命令寄存器,发中断结束EOI命令
41
对8259的端口寻址及其基本操作(读/写基本操作)
PIC1 PIC2
CS A0
WR RD
输入操作(RD)
20H
21H
0
0
1
1
IRR ISR 查询字(OCW3)
IMR(OCW1)
CPU
DB7-0
0A0H
0A1H
0
1
0
0
输出操作(WR)
20H
0A0H
21H
0A1H
0
0
0
0
0
0
0
1
0
0
1
X
0
1
X
X
0
0
0
0
1
1
1
1
OCW2
CPU写 DB7-0 OCW3
ICW1
写(IMR).OCW1.ICW2.3.4
注意:8259只有两个端口,由A0一位确定: 1:奇数口 0:偶数口
由奇/偶数端口及控制字中的某些特定 位来确定命令字往那个R中送。
42
(1)设置中断屏蔽字
 通过往奇地址端口写入IMR内容实现
对应位为0,允许该级中断申请进入
对应位为1,禁止该级中断申请进入
总线
D0
~
D7
数据线
A0
A0
A5
~
A9
IOR
片
选
CS
译
码
RD
IOW
WR
INTA
INTA
INTR
INT
D0
~
D7
ISR
当前
中断
服务
寄存器
0
0
0
0
0
0
0
0
ICW1 芯片控制
ICW2 中断类型号
ICW3 主从片关系
ICW4 方式控制
IRR
中断
申请
寄存器
PR
优先级
裁决器
1
0
0
0
0
0
0
1
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
1 0 0 1 0 1 0 0
OCW1 中断屏蔽寄存器 IMR
0 0
OCW2 优先级、发EOI
OCW3 特殊屏蔽设置
43
例 已知 IBM PC/XT系统中
8259A的奇地址端口地址为21H
 新增允许 IR2 的中断申请
IN
AL, 21H
AND AL, 1111 1011B
OUT 21H, AL
;读入原IMR的内容
;D2=0,允许IR2的中断申请
;写入IMR
 禁止 IR4 的中断申请
IN
AL, 21H
;读入原IMR的内容
OR
AL, 0001 0000B
;D4=1,禁止IR4的中断申请
OUT 21H, AL
;写入IMR
44
设置完成后的结果:
总线
D0
~
D7
数据线
A0
A0
A5
~
A9
IOR
片
选
CS
译
码
RD
IOW
WR
INTA
INTA
INTR
INT
D0
~
D7
ISR
当前
中断
服务
寄存器
0
0
0
0
0
0
0
0
ICW1 芯片控制
ICW2 中断类型号
ICW3 主从片关系
ICW4 方式控制
IRR
中断
申请
寄存器
PR
优先级
裁决器
1
0
0
0
0
0
0
1
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
1 0 0 1 0 0 0 0
OCW1 中断屏蔽寄存器 IMR
0 0
OCW2 优先级、发EOI
OCW3 特殊屏蔽设置
45
(2) 发中断结束命令 EOI
 由 8259A 的工作过程可知:
 ISR中的内容是优先级裁决器进行裁决的重要依据
CPU响应某级中断后,8259A自动将ISR的对应位置1,
如果CPU已执行完中断子程,而ISR中的对应位仍为1,
8259A的优先级裁决器仍会据ISR的内容做裁决,
从而会屏蔽同级或低级的中断申请。
 在中断响应后,对 ISR中相应位的清0很重要,
它是8259A认为中断结束的标志。
46
总线
D0
~
D7
数据线
A0
A0
A5
~
A9
IOR
片
选
CS
译
码
RD
IOW
WR
INTA
INTA
INTR
INT
D0
~
D7
ISR
当前
中断
服务
寄存器
1
0
1
0
0
0
0
0
ICW1 芯片控制
ICW2 中断类型号
ICW3 主从片关系
ICW4 方式控制
IRR
中断
申请
寄存器
PR
优先级
裁决器
1
0
0
0
0
0
0
1
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
1 0 0 1 0 1 0 0
OCW1 中断屏蔽寄存器 IMR
0 0
OCW2 优先级、发EOI
OCW3 特殊屏蔽设置
47
清 ISR 内容的方法有两种:
 一、 初始化8259A时,设置8259A工作方式为自动清0方式,
则在CPU响应中断后,硬件自动将ISR的对应位清0。
 二、 初始化8259A时,设置8259A工作方式为非自动清0方
式, 需在中断子程中,通过软件方式清0。
 方法是:通过往OCW2写入20H实现,即由偶地址端口
写入:
0
0
1
EOI
0
0
0
0
0
20H
特征位,表示对OCW2操作
48
例
已知 IBM PC系统中, 8259A的偶地址端口地址为 20H;
BIOS 初始化 8259A 时,设置 8259A 工作方式为非自动清 0 方式。
编程在中断子程 IRET 返回前,发中断结束命令EOI
intsub PROC
、、、
、、、
、、、
MOV AL, 20H
OUT 20H, AL
IRET
intsub ENDP
;将中断结束命令字20H 送AL
;写入OCW2中
;中断返回
49
 设计中断子程序的步骤:
(1) 选择一个中断向量;
(2) 将中断子程序的入口地址置入中断向量表
的相应表项中;
(3) 使中断服务子程序驻留内存;
 举例
50
50
 如果是采用硬件中断,则要使用由硬件确定
的中断向量。如果是采用软件中断,即用执
行INT n指令的方式来执行中断服务程序,
则可以在系统预留给用户的中断向量号中选
某一个中断向量。例如,选50H号向量。
51
51
 (2)将中断子程序的入口地址置入中断向量表的相
应表项中
设选择的向量号为n,其置入方法有两种:一是用数
据传送指令将中断服务子程序入口的相对地址存放在
物理地址为4×n的字单元中,将中断服务子程序入口
的段地址存放在物理地址为4×n+2的字单元中。二
是采用DOS中设置新中断向量的中断功能(25功能),
向量号 21H
功能号 25H
入口参数:DS
DX
AL=新增的向量号。
52
52
 使程序驻留内存,要求该程序以.COM形式运
行,因为.COM程序将定位于低地址区,DOS常
在低地址区增加驻留程序,而.EXE将定位于
高地址区。使程序驻留内存的方法是采用DOS
的中断调用,即:向量号21H
功能号31H
入口参数:DX
 该功能使当前程序的DX个字节驻留内存并返
回DOS。
53
53

例:在微机中增加一中断服务子程序,其向量号为50H,其功能是BX内容增1。
C
SEGMENT
ASSUME CS:C
ORG 100H
B: MOV AX,SEG SUBP
MOV DS,AX
MOV DX,OFFSET SUBP
MOV AH,25H
MOV AL,50H
INT 21H
;建立50H
MOV DX,N
MOV AH,31H
INT 21H
;中断服务程序驻留内存并返回DOS
SUBP PROC FAR
INC BX
IRET
SUBP ENDP
N
EQU
C
ENDS
END B
54
54
 在IBM PC/XT机中,只用1片8259A中断控制器,
用来提供8级中断请求,其中IR0优先级最高,
IR7优先级最低。它们分别用于日历时钟中断、
键盘中断、保留、网络通信、异步通信中断、
硬盘中断、软盘中断及打印机中断。8259A片
选地址为20H、21H。
8259A 的使用步骤如下:
1. 初始化
2. 送中断向量入口地址
3. 中断子程序结束
4. 中断嵌套
55
55
MOV AL, 13H
OUT
MOV
OUT
MOV
OUT
MOV
;写ICW1,单片,边沿触发,要ICW4
20H,AL
AL,8
;写ICW2,中断类型号从8开始
21H,AL
AL,0DH ;写ICW4,缓冲工作方式,8088/8086配置
21H,AL
AL,0
;写OCW1,允许IR0~IR7全部8级中断
OUT 21H,AL
56
56
 例如,异步通信中断IR4,其中断向量类型码
为8+4=12(0CH),则中断入口地址的偏移量
(IP值)与段基址(CS)在入口地址表中的
存放地址为12×4=48(30H),49(31H),
50(32H),51(33H)。其中30H、31H存放
指令指针IP;32H,33H存放指令段码CS。
57
57
 由于8259A采用中断工作方式,且ICW4中的D1
位(即AEOI)为0,这意味着采用正常结束中
断,因此,在中断子程序结束前必须发EOI命
令和IRET
MOV AL,20H
(即发EOI命令)
OUT 20H,AL
IRET
;写OCW2命令,使ISR相应位复位
;开放中断允许,并从中断返回
58
58
 为了使中断嵌套,即在中断响应过程中,允许
比本中断优先级高的中断进入,只要在进入中
断处理程序后,执行开中断指令STI即可达到
此目的。
59
59
四、8259A在IBM PC/XT系统中的应用
 1.8259A与系统的连线。
 2.BIOS初始化程序对8259A的设置。
60
1.与系统的连线
注意:8259A在连线中的位置
A15~A8
S6~S3/A19~A16
AD7~AD0
CLK
RESET
READY
MN/MX
VCC
+5V RD
QS0
QS1
LOCK
TEST
HIGH
NMI
GND
地址锁存器
8282(两片)
地址总线
内
存
STB
数据收发器
8086
CPU
OE
T
数据总线
8286
总
DT/R
DEN
S0
S1
S2
INTR
RQ/GT0
GND RQ/GT1
MRDC
8288 MWTC
ALE
总线
IORC
控制器 IOWC
INTA
PC
线
控制总线
I/O
接口
8259A
及有关电路
61
① 8259A的片选地址范围为 20 ~ 3F H
偶、奇端口地址通常取用20H、21H
8259A
Vcc
总线
D0
~
D7
IOR
IOW
数据线
RD
WR
A0
A0
A5
~
A9
INTA
INTR
D0
~
D7
片
选 20~3FH
译
码
CS
INTA
INT
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
+ 5V
17.2Hz
方波
键盘
保留
串 口2
串 口1
硬盘
软盘
打印机
SP/EN
CA0
CA1
CA2
用于多片
8259A
级连情况
GND
62
②
8259A的8个中断申请与外设的连接
 IR0
接一个频率为17.2Hz的方波;

若CPU对该申请给予响应,

17.2Hz时钟信号
则每秒执行17.2次该申请对应的中断子程。

IR1接键盘接口发出的中断申请;

每按下一键,若CPU对该申请给予响应,

则执行一次该申请对应的中断子程。


IR2~IR7通过系统总线引出,
对应引脚信号为IRQ2~IRQ7。
63
主 板
08h IR0
8086
17.2Hz 方波
键盘
IF
INTR
当前
中断
服务
寄存器
INT
键盘
09h IR1
中断申请 接口
0Ah IR2
~
~
0Fh IR7
中断屏蔽寄存器
8259A
IRQ2
~
IRQ7
键
盘
外
设
接
口
外
设
PC
总
线
IBM PC/XT微机可屏蔽中断响应过程示意图
64
GND
RESET
+5V
IRQ2
-5V
DRQ2
-12V
+12V
GND
MEMW
MEMR
IOW
IOR
DACK3
DRQ3
DACK1
DRQ1
DACK0
CLOCK
IRQ7
IRQ6
IRQ5
IRQ4
IRQ3
DACK2
T/C
ALE
+5V
OSC
GND
I/O CH CK
D7
D6
D5
D4
D3
D2
D1
D0
I/O CH RDY
AEN
A19
A18
A17
A16
A15
A14
A13
A12
A11
A10
A9
A8
A7
A6
A5
A4
A3
A2
A1
A0
IBM PC/XT总线插槽引脚信号
65
2.BIOS初始化程序对8259A的设置
①
IR0~IR7 中断申请信号为上升沿触发方式;
②
IR0~IR7 对应的中断类型号分别为08H~0FH;
 ③ 优先级IR0最高, IR7最低;
 ④ 采用非自动结束方式,
 需向OCW2发EOI中断结束命令, 清除ISR中的记录。
66
8259A
Vcc
总线
D0
~
D7
IOR
IOW
数据线
RD
WR
A0
A0
A5
~
A9
INTA
INTR
D0
~
D7
片
选 20~3FH
译
码
CS
INTA
INT
08H IR0
09H IR1
0AH IR2
0BH IR3
0CH IR4
0DH IR5
0EH IR6
0FH IR7
SP/EN
CA0
CA1
CA2
GND
+ 5V
17.2Hz
方波
键盘
保留
串口2
串口1
硬盘
软盘
打印机
用于多片
8259A
级连情况
67
PCI
总
线
PCI
总
中
断
路
由
器
IRQ8
IRQ9
IRQ10
IRQ11
IRQ12
IRQ13
IRQ14
IRQ15
芯片组
从 INT
8259
系统时钟
键盘
IRQ0
IRQ1
IRQ3
IRQ4
IRQ5
IRQ6
IRQ7
线
主
8259
INT
至CPU
IRQ7
IRQ6
IRQ5
IRQ4
IRQ3
IRQ2
ISA总线68
68
 中断系统由两片8259,一个中断路由器构成
 从8259的中断申请与主8259的IRQ2相连
 ISA总线上有6个中断申请,其中IRQ2连至从8259的IRQ9
 系统软件上,将IRQ9的中断向量指向IRQ2的中断向量
 主8259的端口地址为: 20H,21H
 8个对应的中断申请IRQ7~IRQ0类型号为0Fh~08h
 从8259的端口地址为: A0H,A1H
 8个对应的中断申请IRQ15~IRQ8类型号为77h~70h
 中断路由器(Interrupt Router) :
 动态分配PCI上的中断申请到8259中未被占用的中断上
69
69
中断程序举例
 PC机中主8259A的I/O地址为20H和21H,中断向
量码为08H;
 中断请求从IR6引入,故中断类型号为0EH;
 主程序如下:
;保存原来的中断向量
mov
ah,35h
mov
al,0eh
int
21h
mov
save_ip,bx
mov
save_cs,es
;中断类型码
;取原中断向量(在es:bx中)
;保存原来的中断向量
70
70
;设置自己的中断向量
push
ds
mov
dx,offset my_int
mov
ax,seg my_int
mov
ds,ax
;DS:DX的内容为my_int的首地址
mov
ah,25h
mov
al,0eh
int
21h
;设置自己的中断向量
pop
ds
;初始化堆栈指针
mov
sp,my_stack_top
;设置8259A的中断屏蔽字
in
al,21h
and
al,10111111b ;开放IR6中断
out
21h,al
sti
……
<其他代码放在这里>
……
71
71
子程序如下:
my_int
my_int
proc far
pusha
…
<中断服务程序主体>
…
popa
mov
al,20h
;EOI命令,00100000B
out
20h,al
;写OCW2
sti
iret
endp
pusha是将我们所有的16位通用寄存器压
入堆栈,popa同理是将我们所有的16通用
寄存器取出堆栈。
72
1、中断优先方式
两类优先级控制方式:固定优先级和循环优
先级
 固定优先级方式
 所有中断请求IRi的中断优先级固定不变
 优先级排列顺序可编程改变
 加电后8259A的默认方式,默认优先级顺序从
高到低为IR0~IR7
默认优先级
优先级可编程改变
IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0
IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0
7
最低级
6
5
4
3
2
1
0
优先级
最高级
3
2
1
0
最高级
7
6
5
最低级
73
4
73
2、循环优先级方式
 中断源轮流处于最高优先级,即自动中断优先级
循环
 初始优先级顺序可用编程改变
 某中断请求IRi被处理后,其优先级别自动降为
最低,原来比它低一级的中断上升为最高级
IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0
ISRi
0
1
0
1
0
0
0
0
7
6
5
4
3
2
1
0
IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0
ISR内容
最高级
最低级
IR4的服务结束以前
0
1
0
0
0
0
0
0
2
1
0
7
6
5
4
3
最高级
最低级
IR4的服务结束以后
74
74
3、中断嵌套方式
在中断处理过程中允许被更高优先级的事件
所中断称为中断嵌套。8259A有两种中断嵌套
方式:
 普通全嵌套方式(默认方式)
一中断正被处理时,只有更高优先级的事件可
以打断当前的中断处理过程而被服务。
 特殊全嵌套方式
一中断正被处理时,允许同级或更高优先级的
事件可以打断当前的中断处理过程而被服务。
注: 特殊全嵌套仅用于多个8259A级连时的主8259A,
而不能用于从属8259A或单8259A系统。
75
75
一般全嵌套方式与特殊全嵌套方式的区别
B. 一 般 嵌 套 方 式 :
C. 一般嵌套方式:
IR4的中断被服务
时,这些中断将
被封锁。
去CPU
主8259A
从8259A
IR0
IR0
IR1
IR1
IR2
IR2
IR3
IR3
INT IR4
INT IR4
IR5
IR5
IR6
IR6
IR7
IR7
D. 特殊嵌套方式:
IR4 的 中 断 被 服
务时,只封锁
IR5-IR7。
从片的INT被主片封
锁,故更高级别的
IR0-IR2中断也无法
得到响应
A.
E.
假定IR3发生中断,
并获得服务
特殊嵌套方式:
因主片不封锁从片的
INT,故级别高的IR0IR2中断可以得到响应。
( 但 IR3-IR7 仍 被 本 从
片封锁)
76
76
1、当某一IRi中断被服务时,ISR中的相
应位ISRi=1。当服务结束后,则必须
清零该ISRi位。使ISRi=0是通过向
8259A发出中断结束命令(EOI命令)
实现的。
2、三种EOI命令
 自动EOI(AEOI)——(自动EOI方式)
 非指定EOI(NSEOI)——(正常EOI方式)
 指定EOI(SEOI)——(特殊EOI方式)
77
77
 AEOI:在第2个INTA#结束时,由8259A使
ISRi自动复位;
 因不保留当前正在服务的中断的状态,故AEOI不
能用于中断嵌套方式
 指定EOI:由CPU发出一条SEOI命令,该EOI
命令中指出了所要复位的ISR的位号。
 用于特殊屏蔽方式
 非指定EOI:由CPU发出正常EOI命令,该
EOI命令使ISRi=1的位中优先级最高的那一
位复位。
 用于普通全嵌套方式
78
78
特殊全嵌套方式
下的EOI处理
只有当从PIC
的中断全部处理
完后,才能向主
PIC发EOI命令
中断服务程序
┇
向从PIC发EOI命令
读从PIC的ISR
全0?
N
Y
向主PIC发EOI命令
恢复现场
IRET
79
79
1、IMR屏蔽字决定了允许或禁止某位IRi所
对应的中断:IMi=1 禁止, IMi=0 允许。
2、特殊屏蔽方式:
 提供了允许较低优先级的中断能够得到响
应的特殊手段。
 原理:假定当前正在处理IR6,先进入特殊
屏蔽方式,然后设置IM6=1。这时,除IR6外
的所有中断请求均能得到响应。
 特殊屏蔽方式中只能用SEOI命令结束中断。
80
80
 特殊屏蔽例:
CLI
MOV
OUT
IN
OR
OUT
STI
AL,68H
0C0H,AL
AL,0C1H
AL,10H
0C1H,AL
CLI
IN
AND
OUT
MOV
OUT
STI
AL,0C1H
AL,0EFH
0C1H,AL
AL,48H
0C0H,AL
MOV
OUT
IRET
AL,20H
0C0,AL
;IR4中断处理程序
;OCW3:0 1 1 0 1 0 0 0
;设置特殊屏蔽方式
;屏蔽IR4
;IR7请求,响应,返回
;为设命令字
;读出屏蔽字
;清除IMR4
;OCW3:0 1 0 0 1 0 0 0
;取消特殊屏蔽
;继续IR4中断服务
;OCW2:0 0 1 0 0 0 0 0 (EOI)
81
81
第一小节结束,
谢谢您的合作!
82