微机原理 8259A 可编程中断控制器

lIntel 8259中断控制器是集合中断源识别、中断屏蔽、中断优先权排队、中断类型号提供等功能的,专用于微机系统INTR类中断管理的大规模集成电路芯片。

8259A的主要功能:

  • 中断源管理:单片8259可管理8级中断,最多可扩展管理64级,主从式的中断管理
  • 中断类型号:当8259中断响应时,可提供相应的中断类型号,中断类型号可以是由用户设定的8个连续类型号。
  • 中断屏蔽管理:8259对任何一级中断源可屏蔽/允许
  • 中断优先管理: 8259可选择多种中断优先权排队模式。 8259可以通过编程设定各种工作方式

8259A 引脚以及结构

1. 引脚信号

  • D7~D0 :双向数据总线,用于与 CPU 传送命令、状态和中断类型号。(Data Bus lines)

  • A0 :地址线,接系统地址总线,用于选择内部寄存器。(Address line)

  • :片选信号,由高位地址译码产生。 (Chip Select)

  • :读、写控制信号,配合 A0、CS 完成寄存器访问。(Read、Write)

  • INT:中断请求输出,接 CPU 的 INTR 引脚。(Interrupt)

  • :中断响应输入,接收 CPU 发出的两个负脉冲。(Interrupt Acknowledge)

  • IR0~IR7:8 级中断请求输入,可设为边沿或电平触发。(Interrupt Request lines)

  • CAS0~CAS2:级联总线,主从片通信用。主片为输出,从片为输入。(Cascade lines)

  • :双功能引脚。非缓冲方式下作输入,主片接高电平,从片接地;缓冲方式下作输出,控制数据总线缓冲器。 (Slave Program / Enable)

非缓冲方式:直接连到 CPU 的系统数据总线

缓冲方式:不再直连系统总线,而是先连到一个双向总线收发器上(如 74LS245),再由收发器连到系统数据总线。

2. 内部结构组成

  • 中断请求寄存器(IRR) :存放来自外设的中断请求信号IR0~IR7。有上升沿和"高电平"电平触发两种触发方式。高电平状态须保持到第一个中断响应信号**** 变为有效后,否则将丢失中断请求信号。

  • 中断屏蔽寄存器(IMR):存放中断屏蔽字,若某位置为1 则屏蔽对应 IR 请求。

  • 优先级分析器(PR):选出 IRR 中未被屏蔽的最高优先级请求,将优先级最高的中断服务送入ISR。

  • 根据CPU送入命令定义或修改IR0~IR7优先级。默认IR0最高(0级)、IR7最低(7级),可通过软件修改。
  • 多个中断请求同时出现,分析哪个中断优先级最高。
  • 判别是否可进入多重中断,即新中断源的优先级是否高于正在处理的中断级。
  • 当一个中断请求被判别为较高优先级,通过控制逻辑向CPU发出中断请求信号INT。当CPU响应中断获得响应信号INTA#,使ISR相应位置为1 。
  • 中断服务寄存器(ISR):记录当前正在被服务的中断级,被响应后对应位置为1。
  • 当CPU正为某个中断源服务时,8259A使ISR中相应位置为1 ,当ISR为全0时,表示CPU正在执行正常的主程序,无任何中断服务。
  • 如果有新的中断申请,当前服务的中断要发回PR重新进行中断优先级比较,所以ISR和PR之间是双向数据线。
  • 控制逻辑(Control Logic):接收 CPU 命令,完成时序控制。
  • 将根据的请求向CPU发出中断请求信号INT,该信号连接到8086/8088 CPU 的可屏蔽中断INTR引脚;同时接收CPU的中断响应信号,并作出相应的处理,如置位ISR 的相应位、释放中断类型码到总线D7~D0、清除INT信号等。
  • 包含有4个初始化命令寄存器和3个操作命令寄存器,用于存放4个初始化命令字ICW1~ICW4和3个操作命令字OCW1~OCW3。
  • 数据总线缓冲器:在读写逻辑的控制下实现CPU与8259A之间的信息交换.

8位三态双向缓冲器,通常和CPU 系统总线中的D7~D0相连接。

  • 读/写控制逻辑 :根据CPU送来的读写信号( )和地址信息(A0、),通过数据总线缓冲器完成CPU对8259A的所有写操作和读操作。

8259A只有两个I/O 端口地址,由**** 和A0输入的地址信息决定,一般****应连接到I/O 地址译码器的输出端,而A0端通常是和地址总线A0或A1相连接。

  • 级联缓冲/比较器:存放和比较级联标识,主片向从片送出标识,从片比较相符时送出中断类型号。

为实现多片8259A的级联应用而设计。在级联应用中只有一片8259A为主片,其他均为从片,但最多不能超过9片(包括主片)。

级联时,主片要拿出几个 IR 引脚来连接从片的 INT 输出,这些被占用的引脚就不能再接普通中断源了。

总中断源数量 = 主片可用 + 从片可用

8−(N−1)+8(N−1)=7N+18−(N−1)+8(N−1)=7N+1

比如中断源有25个,就需要4个8259芯片。

主8259A在第一个响应周期内通过CAS0~2送出3位识别码,与此识别码相符的从8259A将在第二个响应周期内释放中断类型码到数据总线,使CPU进入相应的中断处理程序。


工作方式

1. 触发方式 (ICW1 的 LTIM 位)

  • 边沿触发:由低到高的上升沿触发,请求被 IRR 锁存,直到被响应。

  • 电平触发:高电平有效,IRR 不锁存,请求信号必须保持到响应,否则会丢失中断。

2. 屏蔽方式

  • 普通屏蔽方式:由 OCW1 写 IMR,置 1 则屏蔽对应中断。

允许比该优先级高的中断源申请中断,不允许同级或低级中断源申请中断。

  • 特殊屏蔽方式:允许在服务某级中断时,动态开放对低级中断的响应。

    • 先通过 OCW3 设为特殊屏蔽(ESMM=1, SMM=1),再修改 IMR 屏蔽当前高级中断,此时 ISR 屏蔽作用被忽略。低级中断完成后需恢复。

屏蔽同级,允许级别比他高的或比他低的中断源申请中断。

3. 优先级管理方式

  1. 完全嵌套方式:固定优先级 IR0 最高、IR7 最低。ISR 某位置位后,同级及低级中断均被封锁。

  2. 特殊完全嵌套方式:主要用于级联的主片。允许同级中断请求(来自同一从片的更高优先级请求)打断当前服务。

  3. 自动循环优先级:某级服务结束后自动降为最低,相邻高一级变为最高。

  4. 指定循环优先级:通过 OCW2 指定最低优先级,其余顺次排列。

  5. 查询方式:CPU 写 OCW3(P=1)后读 A0=0 端口,获得最高优先级请求。此时不使用 INT 引脚。

4. 中断结束方式(EOI)

  • 自动结束(AEOI) :在第二个 脉冲结束时自动清除 ISR 对应位。可能引发重复中断或同级嵌套,一般不用于全嵌套系统。

  • 非自动结束(EOI):需程序发结束命令。

    • 普通 EOI:自动清除当前 ISR 最高优先级位。

    • 特殊 EOI:由 L2~L0 指定清除 ISR 哪一位。

    • 自动循环 EOI:清除当前最高优先级位,并将其优先级降为最低。

    • 特殊循环 EOI:清除指定 ISR 位,并将该优先级降为最低。

5. 连接系统总线方式

  • 非缓冲方式:SP/EN 作输入,决定主/从。

  • 缓冲方式:SP/EN 作输出使能,主/从由 ICW4 的 M/S 位确定。

中断响应过程

1. 单片或非级联响应步骤

① 外设通过 IRi 发出请求,8259 将 IRR 对应位置 1。

② 经过 IMR 屏蔽及优先级分析,若条件满足,8259 由 INT 引脚向 CPU 发中断请求。

③ CPU 若 IF=1 且当前指令执行完,发出两个 脉冲作为响应。

第一个 脉冲 :8259 冻结优先级,清除被选中的 IRR 位,置位对应的 ISR 位(禁止同级及低级中断)。边沿触发下请求被清除。若级联,主片还在 CAS 上送出从片标识。

第二个 脉冲 :8259(或选中的从片)将 8 位中断类型号送上数据总线,CPU 读取后自动保护现场,转入中断服务程序。若 AEOI=1,此时 ISR 位自动清零。

⑥ 中断服务程序结束时,需发 EOI 命令(若非 AEOI)清除 ISR 位,开放后续中断。

2. 中断类型号形成

上图左部分多框了一位

  • 由 ICW2 的高 5 位作基值,低 3 位由请求引脚 IR0~IR7 的编码自动填入。

  • CPU 将类型号 n×4 得中断向量表地址,取出服务程序入口 CS:IP。


编程

1. I/O 端口寻址

A0 操作 写入(WR) 读出(RD)
0 偶地址 ICW1, OCW2, OCW3 IRR, ISR (先写 OCW3 选择), 查询字
1 奇地址 ICW2~ICW4, OCW1 IMR

特征位区分:

  • A0=0, D4=1 → ICW1

  • A0=0, D4=0, D3=0 → OCW2

  • A0=0, D4=0, D3=1 → OCW3

  • A0=1 → ICW2、ICW3、ICW4、OCW1(按顺序及写入时刻区分)

2. 初始化命令字(必须按顺序写入)

ICW1 (A0=0,D4=1):中断请求信号,单片和级联的选择

|---|---|---|---|------|---|------|-----|
| | | | 1 | LTIM | | SNGL | IC4 |

  • D3(LTIM):1 电平触发,0 边沿触发。

  • D1(SNGL):1 单片使用,0 级联。

  • D0(IC4):1 需要写入 ICW4,0则无需写入 ICW4。

ICW2 (A0=1):设置对应的中断类型码

|---|---|---|---|---|---|---|---|
| T | T | T | T | T | | | |

  • 高 5 位为中断类型号基值,低 3 位由用户编程时写入,基于𝑰𝑹_𝟎~𝑰𝑹_𝟕的引脚序号自动形成,初始化的时候无需设值。

为什么 08H ~ 0FH 都行?

已知硬盘接在 IR5 ,要求其中断类型码为 0DH (即 00001101)。

设 ICW2 写入值为 X,则:
中断类型码=(X 的高 5 位)×8+5=0DH中断类型码=(X 的高 5 位)×8+5=0DH

解出高 5 位对应的基值 = 0DH - 5 = 08H,即 基值必须是 08H。

08H 的二进制是 00001 000,高 5 位是 00001。观察:

08H = 00001 000

09H = 00001 001

0AH = 00001 010

0BH = 00001 011

0CH = 00001 100

0DH = 00001 101

0EH = 00001 110

0FH = 00001 111

高 5 位都是**00001**,只有低 3 位在变化。

而 8259A 在形成中断向量时,不会看低 3 位,会用 IR5 的编码 101 强制替换。

因此,只要写入的值高 5 位为 00001,即08H ~ 0FH 中的任何一个,效果完全一样。

ICW3 (A0=1,仅级联时写入):主/从片初始化命令

  • 主片:哪根 IR 引脚接有从片,对应位写 1(如 IR2 接从片,写 04H,直接映射,即D2=1)。

  • 从片:D2~D0(ID0~ID2)表示该从片连到主片哪根 IR 线(如连在 IR2,写 02H,二进制映射,即D1=1)。

在传统的 IBM PC/AT 架构中:

  • 主片 8259A 占用 I/O 地址:20H(命令端口)、21H(数据/掩码端口)

  • 从片 8259A 通常占用:0A0H(命令端口)、0A1H(数据/掩码端口)

这里 21H 是主片的数据端口 (用于写 ICW2、ICW3、ICW4 以及 OCW1)。

0A1H 是从片的数据端口(类似作用)。

这里为了支持第二个从片,硬件设计时通常会把第二个从片映射到 0A2H(命令)/ 0A3H(数据),即+2。

ICW4(A0=1,当 ICW1 的 IC4=1):设定8259A在级联方式下的优先级管理方式

|---|---|---|------|-----|-----|------|-----|
| 0 | 0 | 0 | SFNM | BUF | M/S | AEOI | μPM |

  • D4(SFNM):1 特殊完全嵌套,0 普通完全嵌套。
  • D3(BUF):1 缓冲方式,0 非缓冲方式。

  • D2(M/S):1 主片,0 从片。

  • D1(AEOI):1 自动中断结束,0 非自动结束中断方式。

**非自动结束中断方式:**需要软件在中断服务程序结束前发送清ISR对应位的命令,具体是正常清ISR中最高置1位还是清ISR中的指定位由后续具体的操作命令字OCW2来决定。这种方式下如果不通过软件来清ISR对应位,则8259A会一直处于等待状态。

  • D0(μPM):1 8086/8088 模式(>=16位微机),0 8080/8085 模式(8位微机)。

3. 操作命令字

OCW1 (A0=1):设置中断源的屏蔽状态,即对8259A内的中断屏蔽寄存器IMR中的各位进行动态地置1或复0操作选择(直接映射)。

|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|
| 𝑴****𝟕 | 𝑴****𝟔 | 𝑴****𝟓 | 𝑴****𝟒 | 𝑴****𝟑 | 𝑴****𝟐 | 𝑴****𝟏 | 𝑴****𝟎 |

  • 𝑴𝒙=𝟏,表示𝑰𝑹𝒙被屏蔽
  • 𝑴𝒙=0,表示𝑰𝑹𝒙****不被屏蔽

OCW2(A0=0, D4=0, D3=0):设置中断结束方式和修改中断优先级管理方式。

|---|----|-----|---|---|----|----|----|
| R | SL | EOI | 0 | 0 | L2 | L1 | L0 |

  • R:1表示循环优先级;0表示固定优先级。

  • SL:1表示L2~L0有效,0表示L2~L0无效。

  • EOI:1表示发送非自动结束中断结束命令;0表示该命令与中断结束命令无关,是设置优先级的命令。

  • SL=1时,L2~L0 对应R、EOI的定义:

R EOI=10 设定循环优先级最低位;

R EOI=01 指定清除ISR的位;

R EOI=11 先清除指定的ISR位,再以设定循环优先级最低位。

OCW3(A0=0, D4=0, D3=1)

|---|------|-----|---|---|---|----|-----|
| | ESMM | SMM | 0 | 1 | P | RR | RIS |

  • D6(ESMM)、D5(SMM):置/复位特殊屏蔽方式。

ESMM=1为允许特殊屏蔽方式;

SMM=1为特殊屏蔽方式。

  • D2(P):1 发送查询命令,下次读 A0=0 端口可得查询字。

P=1为查询工作方式,此时读出的端口值D7位为1表示有中断,D0到D2用来表示哪一根引线有中断源。

  • D1(RR):读IRR控制,1为IRR;0为ISR

  • D0(RIS):读ISR控制,1为允许;0为禁止


级联

  • 主片 INT 接 CPU 的 INTR,从片 INT 接主片的某根 IR 线。

  • 主片需设为特殊完全嵌套(SFNM=1),以保证从片内部多级中断的正常嵌套。

  • 中断响应时,主片在第一个 INTA 期间通过 CAS0~CAS2 送出从片标识,对应从片在第二个 INTA 将自身的中断类型号送上数据总线。

  • 从片送出的中断类型号由其自身的 ICW2 决定,而不是主片 ICW2。

  • 结束级联中断时,需向从片和主片各发一次 EOI 命令(自动结束方式除外)。

参考文献

8259A可编程中断控制器 | MeAlert的笔记网站

相关推荐
破晓单片机3 小时前
068、STM32项目分享:智能小区门禁系统
stm32·单片机·嵌入式硬件
H__Rick4 小时前
C51单片机学习-DAY3
单片机·学习·mongodb
望眼欲穿的程序猿6 小时前
Hello World
嵌入式硬件·rust
bkspiderx6 小时前
Windows DLL核心技术:深入理解__declspec(dllexport)与__declspec(dllimport)
windows·stm32·单片机·dllimport·dllexport·windows dll·__declspec
ACP广源盛139246256736 小时前
GSV5600@ACP#多接口协议转换芯片,物理 AI 便携终端的互联核心
大数据·人工智能·分布式·嵌入式硬件·spark
望眼欲穿的程序猿7 小时前
ESP32-S3 定时器中断
单片机·嵌入式硬件
电气_空空7 小时前
基于 LabVIEW 的深海气密采水器测控系统
单片机·嵌入式硬件·毕业设计·labview
星夜夏空997 小时前
STM32单片机学习(37) —— PWR和BKP
stm32·单片机·学习
牛牛,牛8 小时前
榨干最后一微安:STM32 的低功耗设计与中断唤醒机制深度剖析
单片机·嵌入式硬件