内部结构
IRR — 中断请求寄存器,保存 8个输入端IR0~IR7的中断申请状态,输入可高电平有效,也可上升沿有效
ISR — 中断服务寄存器,保存CPU正在处理的中断请求
IMR — 中断屏蔽寄存器,对中断申请进行屏蔽控制
中断优先级分析器决定中断申请的优先级
把初始化命令字和操作命令字结合进行设置,可以有四种优先级管理方式- 全嵌套方式(中断请求按优先级0-7进行处理,0级中断的优先级最高)
- 自动循环方式(优先级相等。这种方式下,优先级队列是在变化的,一个设备受到中断服务后,它的优先级自动降为最低)
- 特殊循环方式(设置最低优先级)
- 特殊的全嵌套方式(可在级联时使用,与全嵌套方式基本相同,不过允许同级中断)
控制逻辑
- 初始化命令寄存器组:ICW1~ICW4
- 操作命令寄存器组: OCW1~OCW3
- INT 中断申请输出,高电平有效,可连接8086 INTR引脚
- $\overline{INTA}$ 中断响应输入,接收8086发出的中断响应信号,有效时8259应输出中断类型码
- D7~D0 双向三态数据线,传送数据
- $\overline{RD}$ 读信号,低电平有效
- $\overline{WR}$ 写信号,低电平有效
- $\overline{CS}$ 片选信号,低有效,给8259分配地址
- A0 用于选择8259内部不同的寄存器。
- CAS2~CAS0 级联信号线,当8259为主片时为输出,从片时为输入
- $\overline{SP}/\overline{EN}$ 在非缓冲工作方式时,用作输入,决定8259A为主片还是从片,主片接+5V,从片接地;在缓冲工作方式时,用作输出,由它打开总线缓冲器
初始化命令字
初始化命令字一般在初始化8259时才写入,而且写入有严格的顺序,先写ICW1,最后写ICW4
- ICW1(芯片控制)
A0 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 1 | LTIM | 0 | SNGL | IC4 | |
A0=0,D4=1 表示对ICW1编程 |
- D0(IC4)
D0=1 需要ICW4
D0=0 不需要ICW4 - D1(SNGL)
D1=1 为单片8259工作方式
D1=0 为级联工作方式,此时要用ICW3指明级联端 - D2(ADI)
指明8080/8085系统中地址间距,
8086系统不用 - D3(LTIM)
D3=1 中断请求是电平触发方式
D3=0 上升沿触发方式 - D5
D7(A5A7)
8080/8085系统中断服务程序页面地址,
8086系统不用
- ICW2(类型)
A0 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
---|---|---|---|---|---|---|---|---|---|
1 | T7 | T6 | T5 | T4 | T3 | T2 | T1 | T0 | |
A0=1,跟在ICW1后表示对ICW2编程 |
A15A8 为8080/8085系统中页面地址高8位~~- T7~T3 为8086系统中的中断类型码的高5位,低3位根据申请端自动填充
- ICW3(主/从)
A0||D7|D6|D5|D4|D3|D2|D1|D0
-|-|-|-|-|-|-|-|-|-|-
1|主片|S7|S6|S5|S4|S3|S2|S1|S0
1|从片|0|0|0|0|0|ID2|ID1|ID0
A0=1,且ICW1的D1(SNGL)=0,跟在ICW2后表示对ICW3编程
- 主片 Si=1 表示第IRi引脚上连接有从片
- 从片 ID2
ID0对应从片的识别码,即表明从片连接到主片的第几个输入引脚上。CPU发出第一个中断响应负脉冲$\overline{INTA}$时,主片通过CAS2 ~CAS0送出识别码通知有中断请求的从片,每个从片将CAS2CAS0上信号与自己内部的识别码(ID2~ID0)相比较,若相同,则在第二个$\overline{INTA}$信号到来时送出自己的中断类型码。
- ICW4(方式控制)
A0 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
---|---|---|---|---|---|---|---|---|---|
1 | 0 | 0 | 0 | SFNM | BUF | $M/\overline{S}$ | AEOI | 1 | |
A0=1,且ICW1的D0=1,跟在其他初始化字后表示对ICW4编程 |
- D0(μpm)
D0=1 为非8位处理器体系
D0=0 为8位处理器体系 - D1(AEOI)
D1=1 自动结束中断方式,在第二个$\overline{INTA}$清ISR(中断服务寄存器)中的对应位
D1=0 非自动结束中断方式,中断结束时发EOI命令清ISR中的对应位 - D2($M/\overline{S}$)
在缓冲方式下(BUF=1),选择主片和从片,$M/\overline{S}$=1为主片,$M/\overline{S}$=0为从片。
在非缓冲方式下,则$M/\overline{S}$不起作用,可为1,也可为0. 由$\overline{SP}/\overline{EN}$引脚设定主片和从片(接高电平为主片,接低电平为从片)。 - D3(BUF)
D3=1 为缓冲工作方式,$\overline{SP}/\overline{EN}$为缓冲选通信号。
D3=0 为非缓冲工作方式。 - D4(SFNM)
D4=1 为特殊全嵌套方式,此时允许同级中断再次进入,一般用于多片级联方式
D4=0 为普通全嵌套方式,禁止同级中断再次进入。
操作命令字
OCW1(IMR)
A0=1 表示设置OCW1- Mi=1 表示屏蔽IRi输入中断请求
OCW2
A0=0,且D4D3 = 00,表示对OCW2编程- R 优先权循环状态
R=1 优先权自动循环
R=0 优先权不循环 - SL 设定标志
SL=1 L2、L1、L0有效
SL=0 L2、L1、L0无效 - EOI 中断结束命令标志
EOI=1,非自动结束方式时清ISR中对应位
一般EOI指令(普通结束指令)为
MOV AL, 20H
OUT 20H, AL
- L2 L1 L0 指明中断号或最低优先权
- R 优先权循环状态
OCW3
A0=0,且D4D3 = 01,表示对OCW3编程
ESMM | SMM | |
---|---|---|
1 | 1 | 设置特殊屏蔽,无优先级,未屏蔽中断申请均可进入 |
1 | 0 | 取消特殊屏蔽 |
0 | × | 无操作 |
P=1 ,设置8259A为查询工作方式,此时8259A不发INT信号,CPU通过查询指令决定服务程序
查询得到格式如下表所示
I=1 表示有中断请求
W2 W1 W0为当前最高优先级的中断请求中断号P=0,由RR和RIS设置下一个读取的寄存器
RR | RIS | |
---|---|---|
1 | 0 | 在下一个A0=0端口读IRR(中断请求寄存器) |
1 | 1 | 在下一个A0=0端口读ISR(中断服务寄存器) |