§7.3 可编程中断控制器 8259a
DESCRIPTION
§7.3 可编程中断控制器 8259A. 一、引言 二、 8259A 的引脚、编程结构和工作过程 三、 8259A 的编程 1. 设置中断屏蔽字 2. 发中断结束命令 EOI 四、 8259A 在 IBM PC/XT 系统中的应用. 中断申请. 网络. 接口 1. 8086 CPU. 中断申请 管理接口. 打印机. 接口 4. IF. INT. INTR. 硬盘. 软盘. 接口 2. 接口 3. 一、引言. 中断申请管理接口的主要功能 :. 1. 向 CPU 的引脚 INTR 发中断申请信号 当有多个外设同时发出中断请求时, - PowerPoint PPT PresentationTRANSCRIPT
1
§7.3 可编程中断控制器 8259A
一、引言 二、 8259A 的引脚、编程结构和工作过程 三、 8259A 的编程
1. 设置中断屏蔽字 2. 发中断结束命令 EOI
四、 8259A 在 IBM PC/XT 系统中的应用
3
1. 向 CPU 的引脚 INTR 发中断申请信号当有多个外设同时发出中断请求时,能按照一定的优先级顺序,向 CPU 发出中断申请,使 CPU 能优先响应优先级最高的外部设备的中断申请。
2. 送中断类型号 在 CPU 中断响应周期,针对不同外设的中断请求, 向 CPU 传送不同的中断类型号,使 CPU 执行相应的中断子程。
中断申请管理接口的主要功能 :
在 IBM PC 机由 8259A 可编程中断控制器 (PIC) 来完成。
5
1. 8259A 的引脚 双列直插式芯片, 28 个引脚
方 波键 盘保 留串 口 2
硬 盘软 盘
打印机
IOW
17.2Hz
A0
CS
8259A
总线
A0
数 据 线
IOR RD
WR
片选译码
IR0IR1IR2IR3IR4IR5IR6IR7
A5~
A9
D0~
D7
D0~
D7
Vcc
SP/ENCA0CA1CA2
GND
+ 5V
20~3FH 用于多片8259A
级连情况INTAINT
INTA INTR
串 口 1
定时器
6
1 、单片 8259A 可支持 8 个中断源;2 、采用多片 8259A 级连,可最多支持 64 个
中断源。 n 片 8259A 可支持 7n+1 个中断源;
3 、级连时只能有一片 8259A 为主片,其余的均为从属片;
4 、涉及到的 8259A 引脚包括:CAS0-CAS2SP/EN IRi INT
66
级联工作方式
7
SP/EN :双功能的双向信号线,分别表示主从定义/ 缓冲器方向这两种工种方式。 在主从方式中,它作为输入信号线 SP ,由该信号的
高低电平来区分“主”或“从” 8259A :若 SP =1 ,则本片为“主” 8259A ;若 SP = 0 ,则为“从” 8259A 。只有一个 8259A 时,它应接高电平。
在缓冲方式时,则它作为输出信号线 EN ,用于控制缓冲器的传送方向:若 EN = 1 ,则 CPU 将把数据写入 8259A ;若 EN = 0 ,将把数据由 8259A 读出至 CPU 。
77
9
2 . 8259A 的编程结构
SP/ENCA0CA1CA2
IOR
IOW
总线
D0~
D7
数 据 线D0~
D7
INTA
INTR
A0
片选译码
A5~
A9CS
A0
RD
INTA
WR
INT
1 × I3 I4ICW1 芯片控制
ICW2 中断类型号
ICW3 主 从 片 连 接 关系
ICW4 方式控制
0
1
1
1
A01 0 0 1 0 1 0 0
OCW1 中断屏蔽寄存器 IMR 0 0
OCW2 优先级设置、发 EOI
0 1
OCW3 特殊屏蔽 , 查询方式设置
处理部分
控制部分
000 0 0 0 0 0
ISR当前中断服务寄存器
PR优先级裁决器
VCC
GND
1
0
0
A0
IR0IR1IR2IR3IR4IR5IR6IR7
IRR中断申请寄存器
000 0 0 0 0 0
10
4 个初始化命令寄存器 ICW1 、 ICW2
ICW3 、 ICW4
3 个操作命令寄存器 OCW1 ( IMR ) OCW2 、 OCW3
当前中断服务寄存器 ISR
中断申请寄存器 IRR
8259A 内部有 9 个 可读写的寄存器
8259A 的编程结构
1 × I3 I4ICW1 芯片控制
ICW2 中断类型号
ICW3 主从片关系
ICW4 方式控制
处理部分
控制部分
000 0 0 0 0 0
ISR当前中断服务寄存器
PR优先级裁决器
IRR中断申请寄存器
000 0 0 0 0 0
中断屏蔽寄存器 IMR
OCW2
1 0 0 1 0 1 0 0
0 0
0 1
OCW3
OCW1
8259A 中断控制器
11
(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 工作情况
12
初始化命令字在 8259 正常工作前设置。它决定 8259 的工作方式和环境。返回
A7 A6 A5 1 LTIM ADI SNGL IC4
D7 D6 D5 D4 D3 D2 D1 D0
0
A0ICW1
8086 不用
0 :边沿检测1 :电平检测
0 :不需要 ICW41 :需要 ICW4
8086 / 8088 不用
0 :级联使用1 :单独使用
1212
13
初始化 8259A 必须从 ICW1 开始写 ICW1 意味着重新初始化 8259A写入 ICW1 后, 8259A 的状态如下:
清除 ISR 和 IMR( 全 0) ;将中断优先级设成初始状态: IR0 最
高, IR7 最低;设定为一般屏蔽方式;采用非自动中断结束方式;状态读出逻辑预置为读 IRR 。
1313
14
在中断响应的第二个总线周期,通过数据线发送中断类型码给 CPU 返回
1A0
T7 T6 T5 T4 T3 X X X
D7 D6 D5 D4 D3 D2 D1 D0
中断类型码高 5 位 自动填入中断源中断源 D2D2 D1D1 D0D0
IR0IR0 00 00 00IR1IR1 00 00 11IR2IR2 00 11 00IR3IR3 00 11 11IR4IR4 11 00 00IR5IR5 11 00 11IR6IR6 11 11 00IR7IR7 11 11 11
1414
15
T7 ~ T3: 中断向量码的高 5 位 T2 ~ T0: 最低 3 位为中断源的序号 IRn
000 ~ 111 分别对应 IR0 ~ IR7
由 8259A 根据中断源的序号自动填入 例如:
若 ICW2 命令字为 48H ,则 IR0 的中断向量码为 48H , IR7 的中断向量码为 4FH ,等等。
A0A0 D7D7 D6 D6 D5 D5 D4 D4 D3 D3 D2 D2 D1 D1 D0D0 11 TT77 T T66 T T55 T T44 T T33 xx xx xx
1515
16
1A0
S7 S6 S5 S4 S3 S2 S1 S0 D7 D6 D5 D4 D3 D2 D1 D0
主 8259 的级联标志1 :相应的 IR 上有从 8259
0 :相应的 IR 上无从 8259
级连初始化必须与硬件连接一致
1A0
0 0 0 0 0 ID2 ID1 ID0D7 D6 D5 D4 D3 D2 D1 D0
ID2~ID0 :从 8259的 IR 识别码
主片
从片
1616
17
ICW3 必须与主从片的连接关系一致:例如,主片的 IR4 与从片的 INT 线连接,则主片的 ICW3=10H ,从片的 ICW3=04H 。
中断响应时,主片通过级连线 CAS2-CAS0
送出被允许中断的从片标识码,各从片用自己的 ICW3 与 CAS2-CAS0 比较,二者一致的从片才可发送中断向量码。
1717
18
初始化命令字 ICW1~ICW4是以写入的顺序来区分的
1A0
0 0 0 SFNM BUF M/S AEOI µPMD7 D6 D5 D4 D3 D2 D1 D0
0 :非自动 EOI
1 :自动 EOI
0 : 8085 方式1 : 86/88 方式
0 :一般的全嵌套方式1 :特殊的全嵌套方式
0×: 非缓冲方式10: 缓冲方式/从片11: 缓冲方式/主片
返回
1818
19
单片 8259 应用于 8086 系统, IR0 的中断类型码为 18H ,电平触发方式,全嵌套非缓冲方式,自动结束中断,要求初始化 ICW4 。端口地址为 0A0H 开始,初始化程序为:MOV AL , 13H ICW1初始化
OUT 0A0H , AL ;写入 ICW1 MOV AL , 18H ICW2 初始化
OUT 0A2H , AL ;写入 ICW2MOV AL , 03H ICW4初始化OUT 0A2H , AL ;写入 ICW4
1919
20
OCW 用于设置 8259 的工作状态 在初始化后写入 OCW 的写入顺序可任意 写入地址要求:
OCW1 必须写入奇地址端口 (A0=1)
OCW2 , OCW3 必须写入偶地址端口 (A0=0)
2020
21
Mi=1 中断请求线 IRi 被屏蔽 ( 不允许中断 ) =0 允许该 IRi 中断
OCW1 将写入 IMR 寄存器。 A0=1 时读 OCW1 可读出设置的 IMR内容。
OCW1 1A0
M7 M6 M5 M4 M3 M2 M1 M0 D7 D6 D5 D4 D3 D2 D1 D0
0 :清中断屏蔽位1 :置中断屏蔽位
2121
22
0A0
R SL EOI 0 0 L2 L1 L0
D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 ……1 1 1
对应 IRi 的编码
无操作010
特殊优先权循环,由 L2~L0 设定最低优先级011
特殊 EOI ,由 L2~L0 指定特殊优先权循环111取消自动优先权循环 ( 固定优先权 )000自动优先权循环001自动优先权循环,常规 EOI101特殊 EOI ,由 L2~L0 指定结束 IRi110常规 EOI100R=1 :循环优先权
R=0 :固定优先权SL=1 : L2L1L0 指定 IR位SL=0 : L2L1L0 无效EOI=1 :中断结束
OCW2
2222
23
OCW3 0A0 D7 D6 D5 D4 D3 D2 D1 D0
- ESMM SMM 0 1 P RR RIS
10
清除特殊屏蔽方式
01
设定特殊屏蔽方式
无意义1010
10
读 IRR
01
读 ISR
无意义
1010
0 :非查询方式1 :查询方式
8259 的工作方式编程并没有固定顺序,各命令字之间用地址信号 A0 及特征位加以区分。
2323
24
查询方式允许 8259A不工作于中断方式,而是以查询方式工作。CPU 先写一个 D2=1 (查询方式)的 OCW3 ,再对同一地址读入,即可得到如下状态字节:
I x x x x R2 R1 R0
I=1 表示有中断请求,中断请求号为 R2-R0
此查询步骤可反复执行,以响应多个同时发生 的中断。
读 IRR/ISR :写入此命令后,随后再对同一地址读,即可得到 IRR 或 ISR 的内容。
2424
25
CLI ;关中断MOV AL , 17H ; ICW1 :单片,边缘触发,需要 ICW4OUT 20H , ALMOV AL , 08H ; ICW2 :中断类型码的 D7 ~ D3 位为 000
01OUT 21H , ALMOV AL , 01H ; ICW4 :非自动的 EOI ,非缓冲, 80X86方式OUT 21H , ALMOV AL , 04H ; OCW1 :只屏蔽 IRQ2 (保留中断)OUT 21H , ALMOV AL , 20H ; OCW2 :固定优先权,一般的 EOIOUT 20H , ALMOV AL , 4BH ; OCW3 :正常屏蔽,非查询方式,可读 ISROUT 20H , ALSTI ;开中断
=0000 1000B
=0001 0111B
=0000 0001B
=0000 0100B
=0010 0000B
=0100 1011B
2525
26
分两步 :
(1) 处理外设中断申请,决定是否向 CPU 发中
断申请信号。
(2) 若发中断申请信号,且 CPU 响应,则在 CPU
中断响应周期送出中断类型号。
3. 8259A 的工作过程
27
(1) 处理外设中断申请,决定是否向 CPU 发中断申请信号
② 中断屏蔽寄存器 IMR 决定 IRR 中的中断申请 是否进入优先级裁决器 PR 。
IMR 对应位为 0 ,允许中断申请进入优先级裁决器, 为 1 ,不允许进入,中断申请被 IMR 屏蔽。
① 中断申请寄存器 IRR 锁存外部的中断申请。 若 IR0~IR7 引脚上有中断申请,则将 IRR 相应位置 1
③ 当前中断服务寄存器 ISR 记录CPU正在响应的中断。 ISR中的某位为 1,表示CPU正在响应此级中断, ISR中的某位为 0,表示CPU没有或已响应完此级中断,
④ 优先级裁决器 PR 据新进入的中断申请和 ISR 的内容 , 决定是否发中断申请信号。
如果进入的中断申请比 ISR 中记录的中断优先级高, 则通过 8259A 的 INT 引脚向 CPU 发出中断请求信号;
如果进入的中断申请不比 ISR 中记录的中断优先级高, 同级或低级,则不向 CPU 发中断请求信号。
28
① 中断申请寄存器 IRR 锁存外部的中断申请。 若 IR0~IR7 引脚上有中断申请,则将 IRR 相应位置 1
IOR
IOW
总线数 据 线
D0~
D7
INTA
A0片选译码
A5~
A9CS
A0
RD
INTA
WR
INT
D0~
D7
ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制
000 0 0 0 0 0
ISR当前中断服务寄存器
IR0IR1IR2IR3IR4IR5IR6IR7
OCW1 中断屏蔽寄存器 IMR 0 0
OCW2 优先级、发 EOI OCW3 特殊屏蔽设置
PR优先级裁决器
IRR中断申请寄存器
000 0 0 0 0 0
1 0 0 1 0 1 0 0
INTR
1
1
29
② 中断屏蔽寄存器 IMR 决定 IRR 中的中断申请 是否进入优先级裁决器 PR 。
IMR 对应位为 0 ,允许中断申请进入优先级裁决器, 为 1 ,不允许进入,中断申请被 IM
R 屏蔽。
IOR
IOW
总线数 据 线
D0~
D7
INTA
A0片选译码
A5~
A9CS
A0
RD
INTA
WR
INT
D0~
D7
ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制
000 0 0 0 0 0
ISR当前中断服务寄存器
IR0IR1IR2IR3IR4IR5IR6IR7
OCW1 中断屏蔽寄存器 IMR 0 0
OCW2 优先级、发 EOI OCW3 特殊屏蔽设置
PR优先级裁决器
IRR中断申请寄存器
100 0 0 0 0 1
1 0 0 1 0 1 0 0
INTR
30
③ 当前中断服务寄存器 ISR 记录 CPU 正在响应的中断。 ISR 中的某位为 1 ,表示 CPU 正在响应此级中断,
即正在执行此中断源的中断子程; ISR 中的某位为 0 ,表示 CPU 没有或已响应完此级中断,
即不在执行此中断源的中断子程
IOR
IOW
总线数 据 线
D0~
D7
INTA
A0片选译码
A5~
A9CS
A0
RD
INTA
WR
INT
D0~
D7
ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制
001 0 0 0 0 0
ISR当前中断服务寄存器
IR0IR1IR2IR3IR4IR5IR6IR7
OCW1 中断屏蔽寄存器 IMR 0 0
OCW2 优先级、发 EOI OCW3 特殊屏蔽设置
PR优先级裁决器
IRR中断申请寄存器
100 0 0 0 0 1
1 0 0 1 0 1 0 0
INTR
31
④ 优先级裁决器 PR 据新进入的中断申请和 ISR 的内容 , 决定是否发中断申请信号。
如果进入的中断申请比 ISR 中记录的中断优先级高, 则通过 8259A 的 INT 引脚向 CPU 发出中断请求信号;
如果进入的中断申请不比 ISR 中记录的中断优先级高,同级或低级, 则不向 CPU 发中断请求信号。
IOR
IOW
总线数 据 线
D0~
D7
INTA
A0片选译码
A5~
A9CS
A0
RD
INTA
WR
INT
D0~
D7
ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制
001 0 0 0 0 0
ISR当前中断服务寄存器
IR0IR1IR2IR3IR4IR5IR6IR7
OCW1 中断屏蔽寄存器 IMR 0 0
OCW2 优先级、发 EOI OCW3 特殊屏蔽设置
PR优先级裁决器
IRR中断申请寄存器
100 0 0 0 0 1
1 0 0 1 0 1 0 0
INTR
32
(2) 若发中断申请信号,且 CPU 响应, 则在 CPU 中断响应周期送出中断类型号
CPU 接收到 INTR上的中断申请信号后: 如果 IF 标志为 0 ,则 CPU不响应此中断申请信号 ,
即中断申请被 IF 屏蔽。
如果 IF 标志为 1, 则处理完当前的指令后 , 进入中断响应周期
通过 INTA 引脚发出两个负脉冲信号, 从数据总线上获取中断类型号, 进入中断响应的过程。
34
① 将 ISR 中相应位置 1 ,表示 CPU 响应此级中断,执行此中断源的中断子程。
8259A 在接收到第一个 INTA 中断响应信号后:
001 0 0 0 0 0
ISR当前中断服务寄存器
IR0IR1IR2IR3IR4IR5IR6IR7
PR优先级裁决器
IRR中断申请寄存器
100 0 0 0 0 1
ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制
OCW1 中断屏蔽寄存器 IMR 0 0
OCW2 优先级、发 EOI OCW3 特殊屏蔽设置
1 0 0 1 0 1 0 0
IOR
IOW
总线数 据 线
D0~
D7
INTA
A0片选译码
A5~
A9CS
A0
RD
WR
INTA
INT
D0~
D7
INTR
01
② 把 IRR 中对应的位清 0 ,清除 IRR 中锁存的中断申请信号。
35
① 通过数据线,将被响应申请的中断类型号送给 CPU 。类型号由 ICW2提供,在初始化 8259A 时已设定好。
8259A 在接收到第二个 INTA 中断响应信号后:
001 0 0 0 0 0
ISR当前中断服务寄存器
IR0IR1IR2IR3IR4IR5IR6IR7
PR优先级裁决器
IRR中断申请寄存器
100 0 0 0 0 1
ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制
OCW1 中断屏蔽寄存器 IMR 0 0
OCW2 优先级、发 EOI OCW3 特殊屏蔽设置
1 0 0 1 0 1 0 0
IOR
IOW
总线数 据 线
D0~
D7
INTA
A0片选译码
A5~
A9CS
A0
RD
WR
INTA
INT
D0~
D7
INTR
01
② CPU获得中断类型号后,进入 CPU 响应中断的过程 , 执行中断子程,处理中断源申请的功能。
36
① 取中断类型号 N
② 当前 PSW 的内容入栈③ 清 IF 、 TF 标志为 0
④当前 CS 的内容入栈⑤ 当前 IP 的内容入栈⑥ 取内存单元 ( 0 : N ×4 ) 字内容送 IP 取中断子程⑦ 取内存单元 ( 0 : N ×4 + 2 ) 字内容送 CS 入口地址 此时 CS:IP 指向中断程序的入口,开始执行中断程序。
保存现场
CPU 响应中断过程:
执行完中断子程中最后一条指令 IRET 后,
返回被中断处,继续执行被中断的程序。
38
4 个初始化命令寄存器 ICW1 、 ICW2
ICW3 、 ICW4
3 个操作命令寄存器 OCW1 ( IMR ) OCW2 、 OCW3
当前中断服务寄存器 ISR
中断申请寄存器 IRR
8259A 内部有 9 个 可读写的寄存器
1. 8259A 的编程
1 × I3 I4ICW1 芯片控制
ICW2 中断类型号
ICW3 主从片关系
ICW4 方式控制
处理部分
控制部分
000 0 0 0 0 0
ISR当前中断服务寄存器
PR优先级裁决器
IRR中断申请寄存器
000 0 0 0 0 0
中断屏蔽寄存器 IMR
OCW2
1 0 0 1 0 1 0 0
0 0
0 1
OCW3
OCW1
8259A 中断控制器
39
8259A 有两个 I/O端口地址
A0=0 偶地址端口 A0=1 奇地址端口
对 9 个寄存器的读写 均通过这两个端口实现
写入数据的特征位 写入的先后顺序 区分是对哪个寄存器 进行操作
根据 1 × I3 I4ICW1 芯片控制
ICW2 中断类型号
ICW3 主从片关系
ICW4 方式控制
处理部分
控制部分
000 0 0 0 0 0
ISR当前中断服务
寄存器PR
优先级裁决器
IRR中断申请寄存器
000 0 0 0 0 0
中断屏蔽寄存器
OCW2
1 0 0 1 0 1 0 0
0 0
0 1
OCW3
OCW1
8259A 中断控制器
D0~
D7
A0
CS
RD
WR
8
0
1
1
1
A01
0
0
A0
40
8259 初始化流程 用 ICW1 设置是否级联
请求格式信号
是否需要设置 ICW4
用 ICW2 设置中断类型码
是否为级联方式
本片设为主片吗?
设置 ICW3 ,各位对应 IR0~IR7
设置 ICW3 ,高 5 位为 0 ,低 3 位为标识码
需要用到 ICW4 吗?
用 ICW4 设置
是否为特殊全嵌套方式是否为缓冲方式是否为自动结束中断方式是否为 16 位系统
结束,进行中断服务
N
Y
N
Y
N
Y
41
(1)通过中断屏蔽寄存器 IMR 的读写,设置中断屏蔽字
(2) 通过 OCW2 操作命令寄存器,发中断结束 EOI 命令
2. 8259A 的编程方法
8259A 有多种工作方式,这些工作方式均可编程选择,使用相当灵活。
要求掌握:
42
IRR ISR 查询字( OCW3 )IMR ( OCW1 ) CPU
OCW2CPU 写 OCW3 ICW1 写( IMR ) .OCW1.ICW2.3.4
DB7-0
DB7-0
0 0 0 0 0 10 0 0 1 0 10 0 1 X 0 10 1 X X 0 1
0A0H
0A1H
20H
21H
输出操作( WR )
0 0 1 00 1 1 0
0A0H0A1H
20H 21H
输入操作( RD )CS A0 WR RD
PIC2PIC1
对 8259 的端口寻址及其基本操作(读 / 写基本操作)
注意: 8259 只有两个端口,由 A0 一位确定: 1 :奇数口 0 :偶数口 由奇 / 偶数端口及控制字中的某些特定 位来确定命令字往那个 R 中送。
43
通过往奇地址端口写入 IMR 内容实现 对应位为 0 ,允许该级中断申请进入 对应位为 1 ,禁止该级中断申请进入
(1) 设置中断屏蔽字
IOR
IOW
总线数 据 线
D0~
D7
INTA
A0片选译码
A5~
A9CS
A0
RD
INTA
WR
INT
D0~
D7
ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制
000 0 0 0 0 0
ISR当前中断服务寄存器
IR0IR1IR2IR3IR4IR5IR6IR7
OCW1 中断屏蔽寄存器 IMR 0 0
OCW2 优先级、发 EOI OCW3 特殊屏蔽设置
PR优先级裁决器
IRR中断申请寄存器
100 0 0 0 0 1
1 0 0 1 0 1 0 0
INTR
44
新增允许 IR2 的中断申请 IN AL, 21H ; 读入原 IMR 的内容 AND AL, 1111 1011B ;D2=0, 允许 IR2 的中断申请 OUT 21H, AL ; 写入 IMR
禁止 IR4 的中断申请 IN AL, 21H ; 读入原 IMR 的内容 OR AL, 0001 0000B ;D4=1,禁止 IR4 的中断申请 OUT 21H, AL ; 写入 IMR
例 已知 IBM PC/XT 系统中 8259A 的奇地址端口地址为 21H
45
设置完成后的结果 :
IOR
IOW
总线数 据 线
D0~
D7
INTA
A0片选译码
A5~
A9CS
A0
RD
INTA
WR
INT
D0~
D7
ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制
000 0 0 0 0 0
ISR当前中断服务寄存器
IR0IR1IR2IR3IR4IR5IR6IR7
OCW1 中断屏蔽寄存器 IMR 0 0
OCW2 优先级、发 EOI OCW3 特殊屏蔽设置
PR优先级裁决器
IRR中断申请寄存器
100 0 0 0 0 1
1 0 0 1 0 0 0 0
INTR
46
(2) 发中断结束命令 EOI
由 8259A 的工作过程可知 : ISR 中的内容是优先级裁决器进行裁决的重要依据 CPU 响应某级中断后, 8259A 自动将 ISR 的对应位置 1 ,
如果 CPU已执行完中断子程,而 ISR 中的对应位仍为 1, 8259A 的优先级裁决器仍会据 ISR 的内容做裁决, 从而会屏蔽同级或低级的中断申请。 在中断响应后,对 ISR 中相应位的清 0很重要, 它是 8259A认为中断结束的标志。
47
IOR
IOW
总线数 据 线
D0~
D7
INTA
A0片选译码
A5~
A9CS
A0
RD
INTA
WR
INT
D0~
D7
ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制
101 0 0 0 0 0
ISR当前中断服务寄存器
IR0IR1IR2IR3IR4IR5IR6IR7
OCW1 中断屏蔽寄存器 IMR 0 0
OCW2 优先级、发 EOI OCW3 特殊屏蔽设置
PR优先级裁决器
IRR中断申请寄存器
100 0 0 0 0 1
1 0 0 1 0 1 0 0
INTR
48
一、 初始化 8259A 时,设置 8259A 工作方式为自动清 0 方式, 则在 CPU 响应中断后,硬件自动将 ISR 的对应位清 0 。
清 ISR 内容的方法有两种:
二、 初始化 8259A 时,设置 8259A 工作方式为非自动清 0
方式, 需在中断子程中,通过软件方式清 0 。
方法是:通过往 OCW2 写入 20H实现,即由偶地址端口写入:
EOI
0 0 1 0 0 0 0 0
特征位,表示对 OCW2 操作
20H
49
编程在中断子程 IRET 返回前,发中断结束命令 EOI
例 已知 IBM PC 系统中 , 8259A 的偶地址端口地址为 20H;
BIOS 初始化 8259A 时,设置 8259A 工作方式为非自动清 0 方式。
intsub PROC
、、、 、、、 、、、
MOV AL, 20H ; 将中断结束命令字 20H 送 AL
OUT 20H, AL ; 写入 OCW2 中 IRET ; 中断返回
intsub ENDP
51
如果是采用硬件中断,则要使用由硬件确定的中断向量。如果是采用软件中断,即用执行 INT n指令的方式来执行中断服务程序,则可以在系统预留给用户的中断向量号中选某一个中断向量。例如,选 50H 号向量。
5151
52
( 2 )将中断子程序的入口地址置入中断向量表的相应表项中设选择的向量号为 n ,其置入方法有两种:一是用数据传送指令将中断服务子程序入口的相对地址存放在物理地址为 4×n 的字单元中,将中断服务子程序入口的段地址存放在物理地址为 4×n+ 2 的字单元中。二是采用 DOS 中设置新中断向量的中断功能( 25 功能),即:
向量号 21H
功能号 25H
入口参数: DS =中断服务子程序入口段地址;
DX=中断服务子程序入口相对地址;
AL =新增的向量号。
5252
53
使程序驻留内存,要求该程序以 .COM形式运行,因为 .COM 程序将定位于低地址区,DOS 常在低地址区增加驻留程序,而 .EXE将定位于高地址区。使程序驻留内存的方法是采用 DOS 的中断调用,即:向量号 21H
功能号 31H
入口参数: DX=驻留程序字节数; 该功能使当前程序的 DX个字节驻留内存并返回DOS 。
5353
54
例:在微机中增加一中断服务子程序,其向量号为 50H ,其功能是 BX内容增 1 。
C SEGMENTASSUME CS : CORG 100H
B: MOV AX, SEG SUBPMOV DS , AXMOV DX, OFFSET SUBPMOV AH , 25HMOV AL , 50HINT 21H ;建立 50H 中断向量表项MOV DX, NMOV AH , 31HINT 21H ;中断服务程序驻留内存并返回DOS
SUBP PROC FARINC BXIRET
SUBP ENDPN EQU $C ENDS
END B
5454
55
在 IBM PC/XT 机中,只用 1 片 8259A 中断控制器,用来提供 8 级中断请求,其中 IR0 优先级最高, IR7 优先级最低。它们分别用于日历时钟中断、键盘中断、保留、网络通信、异步通信中断、硬盘中断、软盘中断及打印机中断。8259A 片选地址为 20H 、 21H 。8259A 的使用步骤如下: 1. 初始化 2. 送中断向量入口地址 3. 中断子程序结束 4. 中断嵌套
5555
56
MOV AL , 13H ;写 ICW1 ,单片,边沿触发,要ICW4
OUT 20H , ALMOV AL , 8 ;写 ICW2 ,中断类型号从 8 开始
OUT 21H , ALMOV AL , 0DH ;写 ICW4 ,缓冲工作方式, 8088/80
86配置OUT 21H , ALMOV AL , 0 ;写 OCW1 ,允许 IR0 ~ IR7 全部 8
级中断请求OUT 21H , AL
5656
57
例如,异步通信中断 IR4 ,其中断向量类型码为 8+4=12 ( 0CH ),则中断入口地址的偏移量( IP值)与段基址( CS )在入口地址表中的存放地址为 12×4=48 ( 30H ),49 ( 31H ), 50 ( 32H ), 51 ( 33H )。其中 30H 、 31H 存放指令指针 IP ;32H , 33H 存放指令段码 CS 。
5757
58
由于 8259A 采用中断工作方式,且 ICW4 中的 D1 位(即 AEOI )为 0 ,这意味着采用正常结束中断,因此,在中断子程序结束前必须发 EOI 命令和 IRET 命令。
MOV AL , 20H ;写 OCW2 命令,使 ISR相应位复位(即发 EOI 命令) OUT 20H , ALIRET ;开放中断允许,并从中断返回
5858
61
1.与系统的连线
+5V
CLKRESETREADYMN/MX
VCC
RDQS0QS1LOCK
TESTHIGHNMI
GND
GND
地址锁存器8282( 两片 )
STB
数据收发器OE 8286T
MRDC 8288 MWTC 总线 IORC控制器 IOWC INTA8259A
及有关电路
DT/RDEN
ALE
地址总线
数据总线
控制总线
PC
总
线
A15~A8S6~S3/A19~A16
AD7~AD0
8086CPU
S0S1S2
INTRRQ/GT0RQ/GT1
内存
I/O接口
注意: 8259A 在连线中的位置
62
① 8259A 的片选地址范围为 20 ~ 3F H
偶、奇端口地址通常取用 20H 、21H
方 波键 盘保 留串 口 2
硬 盘软 盘
打印机
IOW
17.2Hz
A0
CS
8259A
总线
A0
数 据 线
IOR RD
WR
片选译码
IR0IR1IR2IR3IR4IR5IR6IR7
A5~
A9
D0~
D7
D0~
D7
Vcc
SP/ENCA0CA1CA2
GND
+ 5V
20~3FH 用于多片8259A
级连情况INTAINT
INTA INTR
串 口 1
63
IR0 接一个频率为 17.2Hz的方波; 若 CPU 对该申请给予响应 , 则每秒执行 17.2次该申请对应的中断子程。 IR1 接键盘接口发出的中断申请; 每按下一键,若 CPU 对该申请给予响应 , 则执行一次该申请对应的中断子程。 IR2~IR7 通过系统总线引出, 对应引脚信号为 IRQ2~IRQ7 。
17.2Hz 时钟信号
② 8259A 的 8 个中断申请与外设的连接
64
8086
INTR
主 板
IF
键
盘
17.2Hz 方波
8259A
INT
中断屏蔽寄存器
键盘
中断申请IR1
IR2~
IR7
IR0
当前中断服务寄存器
键盘接口
IRQ2~
IRQ7
PC总线
外设接口
外
设
08h
09h
0Ah~
0Fh
IBM PC/XT微机可屏蔽中断响应过程示意图
65
IBM PC/XT 总 线插槽引 脚 信号
GNDRESET
+5VIRQ2
-5VDRQ2
-12V
+12VGND
MEMWMEMR
IOWIOR
DACK3DRQ3
DACK1DRQ1
DACK0CLOCK
IRQ7IRQ6IRQ5IRQ4IRQ3
DACK2T/C
ALE+5V
OSCGND
I/O CH CKD7D6D5D4D3D2D1D0I/O CH RDYAENA19A18A17A16A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0
66
① IR0~IR7 中断申请信号为上升沿触发方式;② IR0~IR7 对应的中断类型号分别为 08H~0FH ;③ 优先级 IR0 最高 , IR7 最低;④ 采用非自动结束方式, 需向 OCW2 发 EOI 中断结束命令 , 清除 ISR 中的记录。
2. BIOS 初始化程序对 8259A 的设置
67
IOW
A0
CS
8259A
总线
A0
数 据 线
IOR RD
WR
片选译码
A5~
A9
D0~
D7
D0~
D7 0AH0BH0CH0DH0EH0FH
08H
09H
20~3FH SP/ENCA0CA1CA2
GND
方 波键 盘保 留串口 2串口 1硬 盘软 盘
打印机
17.2HzIR0IR1IR2IR3IR4IR5IR6IR7
Vcc + 5V
用于多片8259A
级连情况INTAINT
INTA INTR
68
从 8259
IRQ8IRQ9
IRQ10IRQ11IRQ12IRQ13 IRQ14IRQ15
主8259
IRQ0IRQ1
IRQ3IRQ4IRQ5 IRQ6IRQ7
INT至 CPU
INT中断路由器
IRQ
7IR
Q6
IRQ
5IR
Q4
IRQ
3IR
Q2 ISA总线
PCI
总
线
PCI
总
线
系统时钟键盘
芯片组
6868
69
中断系统由两片 8259 ,一个中断路由器构成 从 8259 的中断申请与主 8259 的 IRQ2相连 ISA 总线上有 6 个中断申请,其中 IRQ2 连至从 8259 的 I
RQ9 系统软件上,将 IRQ9 的中断向量指向 IRQ2 的中断向量
主 8259 的端口地址为: 20H , 21H 8 个对应的中断申请 IRQ7~IRQ0 类型号为 0Fh~08h
从 8259 的端口地址为: A0H , A1H 8 个对应的中断申请 IRQ15~IRQ8 类型号为 77h~70h
中断路由器 (Interrupt Router) : 动态分配 PCI上的中断申请到 8259 中未被占用的中断上
6969
70
中断程序举例 PC 机中主 8259A 的 I/O 地址为 20H 和 21H ,中
断向量码为 08H ; 中断请求从 IR6 引入,故中断类型号为 0EH ; 主程序如下:
; 保存原来的中断向量mov ah , 35h
mov al , 0eh ;中断类型码int 21h ;取原中断向量(在 es:bx 中)mov save_ip , bx ;保存原来的中断向量mov save_cs , es
70
7171
; 设置自己的中断向量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
……
< 其他代码放在这里 >
……
72
子程序如下:my_int proc far
pusha
…
< 中断服务程序主体 >
…
popa
mov al , 20h ; EOI 命令, 00100000B
out 20h , al ;写 OCW2
sti
iret
my_int endppusha是将我们所有的 16 位通用寄存器压入堆栈 ,popa同理是将我们所有的16 通用寄存器取出堆栈。
73
1 、中断优先方式 两类优先级控制方式:固定优先级和循环优先级固定优先级方式
所有中断请求 IRi 的中断优先级固定不变优先级排列顺序可编程改变加电后 8259A 的默认方式,默认优先级顺序从
高到低为 IR0 ~ IR7
IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0
7 6 5 4 3 2 1 0 3 2 1 0 7 6 5 4
最低级 最高级 最高级 最低级
优先级
IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0
默认优先级 优先级可编程改变
7373
74
2 、循环优先级方式 中断源轮流处于最高优先级,即自动中断优先级循环
初始优先级顺序可用编程改变某中断请求 IRi 被处理后,其优先级别自动降为
最低,原来比它低一级的中断上升为最高级
IR7 IR6 IR5IR4 IR3 IR2 IR1 IR0
7 6 5 4 3 2 1 0 2 1 0 7 6 5 4 3
最低级 最高级 最高级 最低级
ISR内容
IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0
IR4 的服务结束以前
0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 0
IR4 的服务结束以后
ISRi
7474
75
3 、中断嵌套方式在中断处理过程中允许被更高优先级的事件所中断称为中断嵌套。 8259A 有两种中断嵌套方式: 普通全嵌套方式(默认方式)
一中断正被处理时,只有更高优先级的事件可以打断当前的中断处理过程而被服务。
特殊全嵌套方式 一中断正被处理时,允许同级或更高优先级的事件可以打断当前的中断处理过程而被服务。
注 : 特殊全嵌套仅用于多个 8259A 级连时的主8259A ,而不能用于从属 8259A 或单8259A 系统。
7575
76
D.
主 8259A
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
一般嵌套方式:从片的 INT 被主片封锁,故更高级别的 IR0-IR2 中 断也无法得到响应
特殊嵌套方式:因主片不封锁从片的 INT ,故级别高的 IR0-IR2 中断可以得到响应。( 但 IR3-IR7仍被本从片封锁 )
C.
假定 IR3 发生中断 , 并获得服务
一般嵌套方式: IR4 的中断被服务时 , 这些中 断 将被封锁。
B.
特殊嵌套方式:IR4 的中断被服务 时 ,只封锁 IR5-IR7 。
A.
INT
E.
从 8259A
INT
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
一般全嵌套方式与特殊全嵌套方式的区别
去 CPU
7676
77
1 、当某一 IRi 中断被服务时, ISR 中的相应位 ISRi=1 。当服务结束后,则必须清零该 ISRi 位。使 ISRi=0 是通过向8259A 发出中断结束命令( EOI 命令)实现的。
2 、三种 EOI 命令自动 EOI ( AEOI )——(自动 EOI 方式)非指定 EOI ( NSEOI )——(正常 EOI 方
式)指定 EOI ( SEOI )——(特殊 EOI 方式)
7777
78
AEOI :在第 2 个 INTA# 结束时,由8259A使 ISRi 自动复位;因不保留当前正在服务的中断的状态,故 AEOI不能用于中断嵌套方式
指定 EOI :由 CPU 发出一条 SEOI 命令,该 EOI 命令中指出了所要复位的 ISR 的位号。 用于特殊屏蔽方式
非指定 EOI :由 CPU 发出正常 EOI 命令,该 EOI 命令使 ISRi=1 的位中优先级最高的那一位复位。用于普通全嵌套方式
7878
79
中断服务程序
┇
向从 PIC 发 EOI 命令
读从 PIC 的 ISR
全 0?
向主 PIC 发 EOI 命令Y
IRET
恢复现场
N
特殊全嵌套方式下的 EOI 处理
只有当从 PIC 的中断全部处理完后,才能向主 PIC 发 EOI 命令
7979
80
1 、 IMR 屏蔽字决定了允许或禁止某位 IRi所对应的中断: IMi=1 禁止, IMi=0 允许。
2 、特殊屏蔽方式:提供了允许较低优先级的中断能够得到响应
的特殊手段。原理:假定当前正在处理 IR6 ,先进入特殊
屏蔽方式,然后设置 IM6=1 。这时,除 IR6
外的所有中断请求均能得到响应。特殊屏蔽方式中只能用 SEOI 命令结束中断。
8080
81
特殊屏蔽例: ; IR4 中断处理程序CLIMOV AL , 68H ; OCW3 : 0 1 1 0 1 0 0 0OUT 0C0H , AL ;设置特殊屏蔽方式IN AL , 0C1H OR AL , 10H ;屏蔽 IR4OUT 0C1H , AL STI ; IR7 请求,响应,返回CLI ;为设命令字IN AL , 0C1H ;读出屏蔽字AND AL , 0EFH ;清除 IMR4OUT 0C1H , ALMOV AL , 48H ; OCW3 : 0 1 0 0 1 0 0 0OUT 0C0H , AL ;取消特殊屏蔽STI
;继续 IR4 中断服务MOV AL , 20H ; OCW2 : 0 0 1 0 0 0 0 0 (EOI)OUT 0C0 , ALIRET
8181