微机原理 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的笔记网站

相关推荐
国科安芯4 小时前
航天器多路并联大功率电源系统设计与ASP4644均流特性分析
单片机·嵌入式硬件·fpga开发·安全性测试
茯苓gao6 小时前
嵌入式开发笔记:CANopen相关移位运算与通信协议术语详解
网络·嵌入式硬件·学习·信息与通信
梁朝辉9 小时前
STM32H750VBT6中ADCINP与INN什么区别
stm32·单片机·嵌入式硬件
省四收割者10 小时前
一文详解信号完整性(1)
python·嵌入式硬件·数学建模·信息与通信·信号处理·智能硬件
崇山峻岭之间11 小时前
单片机无感FOC驱动之ADC
单片机·嵌入式硬件
Ligocious11 小时前
1.点亮一颗小小的LED
单片机·嵌入式硬件
KaifuZeng15 小时前
通信与接口协议面试八、CAN通信
单片机·嵌入式硬件·面试·通信与接口协议
智源单片机设计16 小时前
基于单片机的直流电机双闭环调速系统设计
单片机·嵌入式硬件
KaifuZeng1 天前
通信与接口协议面试一、基本概念
嵌入式硬件·通信与接口协议
wuyk5551 天前
24. C 语言模块化:不是拆几个.c 文件那么简单
c语言·开发语言·stm32·单片机