Top Banner
1 §7.3 可可可可可可可可 8259A 可可 一、 8259A 可可可 可可可可可可可可可 8259A 可可可 1. 可可可可可可可 2. 可可可可可可可 EOI 8259A 可 IBM PC/XT 可 可可可可
82

§7.3 可编程中断控制器 8259A

Dec 30, 2015

Download

Documents

bethany-russo

§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 Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: §7.3  可编程中断控制器 8259A

1

§7.3 可编程中断控制器 8259A

一、引言 二、 8259A 的引脚、编程结构和工作过程 三、 8259A 的编程

1. 设置中断屏蔽字 2. 发中断结束命令 EOI

四、 8259A 在 IBM PC/XT 系统中的应用

Page 2: §7.3  可编程中断控制器 8259A

2

一、引言

中断申请管理接口

INT

中断申请 接口 1 网络

接口 2 硬盘

接口 3 软盘

接口 4 打印机

8086CPU

INTR

IF

Page 3: §7.3  可编程中断控制器 8259A

3

1. 向 CPU 的引脚 INTR 发中断申请信号当有多个外设同时发出中断请求时,能按照一定的优先级顺序,向 CPU 发出中断申请,使 CPU 能优先响应优先级最高的外部设备的中断申请。

2. 送中断类型号 在 CPU 中断响应周期,针对不同外设的中断请求, 向 CPU 传送不同的中断类型号,使 CPU 执行相应的中断子程。

中断申请管理接口的主要功能 :

在 IBM PC 机由 8259A 可编程中断控制器 (PIC) 来完成。

Page 4: §7.3  可编程中断控制器 8259A

4

二、 8259A 的引脚、编程结构和工作过程

1. 8259A 的引脚

2. 8259A 的编程结构

3. 8259A 的工作过程

Page 5: §7.3  可编程中断控制器 8259A

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

定时器

Page 6: §7.3  可编程中断控制器 8259A

6

1 、单片 8259A 可支持 8 个中断源;2 、采用多片 8259A 级连,可最多支持 64 个

中断源。 n 片 8259A 可支持 7n+1 个中断源;

3 、级连时只能有一片 8259A 为主片,其余的均为从属片;

4 、涉及到的 8259A 引脚包括:CAS0-CAS2SP/EN IRi INT

66

级联工作方式

Page 7: §7.3  可编程中断控制器 8259A

7

SP/EN :双功能的双向信号线,分别表示主从定义/ 缓冲器方向这两种工种方式。 在主从方式中,它作为输入信号线 SP ,由该信号的

高低电平来区分“主”或“从” 8259A :若 SP =1 ,则本片为“主” 8259A ;若 SP = 0 ,则为“从” 8259A 。只有一个 8259A 时,它应接高电平。

在缓冲方式时,则它作为输出信号线 EN ,用于控制缓冲器的传送方向:若 EN = 1 ,则 CPU 将把数据写入 8259A ;若 EN = 0 ,将把数据由 8259A 读出至 CPU 。

77

Page 8: §7.3  可编程中断控制器 8259A

888

Page 9: §7.3  可编程中断控制器 8259A

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

Page 10: §7.3  可编程中断控制器 8259A

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 中断控制器

Page 11: §7.3  可编程中断控制器 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 工作情况

Page 12: §7.3  可编程中断控制器 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

Page 13: §7.3  可编程中断控制器 8259A

13

初始化 8259A 必须从 ICW1 开始写 ICW1 意味着重新初始化 8259A写入 ICW1 后, 8259A 的状态如下:

清除 ISR 和 IMR( 全 0) ;将中断优先级设成初始状态: IR0 最

高, IR7 最低;设定为一般屏蔽方式;采用非自动中断结束方式;状态读出逻辑预置为读 IRR 。

1313

Page 14: §7.3  可编程中断控制器 8259A

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

Page 15: §7.3  可编程中断控制器 8259A

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

Page 16: §7.3  可编程中断控制器 8259A

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

Page 17: §7.3  可编程中断控制器 8259A

17

ICW3 必须与主从片的连接关系一致:例如,主片的 IR4 与从片的 INT 线连接,则主片的 ICW3=10H ,从片的 ICW3=04H 。

中断响应时,主片通过级连线 CAS2-CAS0

送出被允许中断的从片标识码,各从片用自己的 ICW3 与 CAS2-CAS0 比较,二者一致的从片才可发送中断向量码。

1717

Page 18: §7.3  可编程中断控制器 8259A

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

Page 19: §7.3  可编程中断控制器 8259A

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

Page 20: §7.3  可编程中断控制器 8259A

20

OCW 用于设置 8259 的工作状态 在初始化后写入 OCW 的写入顺序可任意 写入地址要求:

OCW1 必须写入奇地址端口 (A0=1)

OCW2 , OCW3 必须写入偶地址端口 (A0=0)

2020

Page 21: §7.3  可编程中断控制器 8259A

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

Page 22: §7.3  可编程中断控制器 8259A

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

Page 23: §7.3  可编程中断控制器 8259A

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

Page 24: §7.3  可编程中断控制器 8259A

24

查询方式允许 8259A不工作于中断方式,而是以查询方式工作。CPU 先写一个 D2=1 (查询方式)的 OCW3 ,再对同一地址读入,即可得到如下状态字节:

I x x x x R2 R1 R0

I=1 表示有中断请求,中断请求号为 R2-R0

此查询步骤可反复执行,以响应多个同时发生 的中断。

读 IRR/ISR :写入此命令后,随后再对同一地址读,即可得到 IRR 或 ISR 的内容。

2424

Page 25: §7.3  可编程中断控制器 8259A

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

Page 26: §7.3  可编程中断控制器 8259A

26

分两步 :

(1) 处理外设中断申请,决定是否向 CPU 发中

断申请信号。

(2) 若发中断申请信号,且 CPU 响应,则在 CPU

中断响应周期送出中断类型号。

3. 8259A 的工作过程

Page 27: §7.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 发中断请求信号。

Page 28: §7.3  可编程中断控制器 8259A

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

Page 29: §7.3  可编程中断控制器 8259A

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

Page 30: §7.3  可编程中断控制器 8259A

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

Page 31: §7.3  可编程中断控制器 8259A

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

Page 32: §7.3  可编程中断控制器 8259A

32

(2) 若发中断申请信号,且 CPU 响应, 则在 CPU 中断响应周期送出中断类型号

CPU 接收到 INTR上的中断申请信号后: 如果 IF 标志为 0 ,则 CPU不响应此中断申请信号 ,

即中断申请被 IF 屏蔽。

如果 IF 标志为 1, 则处理完当前的指令后 , 进入中断响应周期

通过 INTA 引脚发出两个负脉冲信号, 从数据总线上获取中断类型号, 进入中断响应的过程。

Page 33: §7.3  可编程中断控制器 8259A

33

向量类型

INTA

CLK

AD7~AD0

T1 T2 T3 T4

第 一 个中断响应周期

T1 T2 T3 T4

第 二 个中断响应周期

8086CPU 中断响应周期时序

Page 34: §7.3  可编程中断控制器 8259A

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 中锁存的中断申请信号。

Page 35: §7.3  可编程中断控制器 8259A

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 响应中断的过程 , 执行中断子程,处理中断源申请的功能。

Page 36: §7.3  可编程中断控制器 8259A

36

① 取中断类型号 N

② 当前 PSW 的内容入栈③ 清 IF 、 TF 标志为 0

④当前 CS 的内容入栈⑤ 当前 IP 的内容入栈⑥ 取内存单元 ( 0 : N ×4 ) 字内容送 IP 取中断子程⑦ 取内存单元 ( 0 : N ×4 + 2 ) 字内容送 CS 入口地址 此时 CS:IP 指向中断程序的入口,开始执行中断程序。

保存现场

CPU 响应中断过程:

执行完中断子程中最后一条指令 IRET 后,

返回被中断处,继续执行被中断的程序。

Page 37: §7.3  可编程中断控制器 8259A

37

三、 8259A 的编程

1. 8259A 的编程

2. 8259A 的编程方法

(1) 设置中断屏蔽字

(2) 发中断结束命令 EOI

Page 38: §7.3  可编程中断控制器 8259A

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 中断控制器

Page 39: §7.3  可编程中断控制器 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

Page 40: §7.3  可编程中断控制器 8259A

40

8259 初始化流程 用 ICW1 设置是否级联

请求格式信号

是否需要设置 ICW4

用 ICW2 设置中断类型码

是否为级联方式

本片设为主片吗?

设置 ICW3 ,各位对应 IR0~IR7

设置 ICW3 ,高 5 位为 0 ,低 3 位为标识码

需要用到 ICW4 吗?

用 ICW4 设置

是否为特殊全嵌套方式是否为缓冲方式是否为自动结束中断方式是否为 16 位系统

结束,进行中断服务

N

Y

N

Y

N

Y

Page 41: §7.3  可编程中断控制器 8259A

41

(1)通过中断屏蔽寄存器 IMR 的读写,设置中断屏蔽字

(2) 通过 OCW2 操作命令寄存器,发中断结束 EOI 命令

2. 8259A 的编程方法

8259A 有多种工作方式,这些工作方式均可编程选择,使用相当灵活。

要求掌握:

Page 42: §7.3  可编程中断控制器 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 中送。

Page 43: §7.3  可编程中断控制器 8259A

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

Page 44: §7.3  可编程中断控制器 8259A

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

Page 45: §7.3  可编程中断控制器 8259A

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

Page 46: §7.3  可编程中断控制器 8259A

46

(2) 发中断结束命令 EOI

由 8259A 的工作过程可知 : ISR 中的内容是优先级裁决器进行裁决的重要依据 CPU 响应某级中断后, 8259A 自动将 ISR 的对应位置 1 ,

如果 CPU已执行完中断子程,而 ISR 中的对应位仍为 1, 8259A 的优先级裁决器仍会据 ISR 的内容做裁决, 从而会屏蔽同级或低级的中断申请。 在中断响应后,对 ISR 中相应位的清 0很重要, 它是 8259A认为中断结束的标志。

Page 47: §7.3  可编程中断控制器 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

Page 48: §7.3  可编程中断控制器 8259A

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

Page 49: §7.3  可编程中断控制器 8259A

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

Page 50: §7.3  可编程中断控制器 8259A

50

设计中断子程序的步骤:( 1 ) 选择一个中断向量; ( 2 )

将中断子程序的入口地址置入中断向量表的相应表项中;

( 3 ) 使中断服务子程序驻留内存; 举例

5050

Page 51: §7.3  可编程中断控制器 8259A

51

如果是采用硬件中断,则要使用由硬件确定的中断向量。如果是采用软件中断,即用执行 INT n指令的方式来执行中断服务程序,则可以在系统预留给用户的中断向量号中选某一个中断向量。例如,选 50H 号向量。

5151

Page 52: §7.3  可编程中断控制器 8259A

52

( 2 )将中断子程序的入口地址置入中断向量表的相应表项中设选择的向量号为 n ,其置入方法有两种:一是用数据传送指令将中断服务子程序入口的相对地址存放在物理地址为 4×n 的字单元中,将中断服务子程序入口的段地址存放在物理地址为 4×n+ 2 的字单元中。二是采用 DOS 中设置新中断向量的中断功能( 25 功能),即:

向量号 21H

功能号 25H

入口参数: DS =中断服务子程序入口段地址;

DX=中断服务子程序入口相对地址;

AL =新增的向量号。

5252

Page 53: §7.3  可编程中断控制器 8259A

53

使程序驻留内存,要求该程序以 .COM形式运行,因为 .COM 程序将定位于低地址区,DOS 常在低地址区增加驻留程序,而 .EXE将定位于高地址区。使程序驻留内存的方法是采用 DOS 的中断调用,即:向量号 21H

功能号 31H

入口参数: DX=驻留程序字节数; 该功能使当前程序的 DX个字节驻留内存并返回DOS 。

5353

Page 54: §7.3  可编程中断控制器 8259A

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

Page 55: §7.3  可编程中断控制器 8259A

55

在 IBM PC/XT 机中,只用 1 片 8259A 中断控制器,用来提供 8 级中断请求,其中 IR0 优先级最高, IR7 优先级最低。它们分别用于日历时钟中断、键盘中断、保留、网络通信、异步通信中断、硬盘中断、软盘中断及打印机中断。8259A 片选地址为 20H 、 21H 。8259A 的使用步骤如下: 1. 初始化 2. 送中断向量入口地址 3. 中断子程序结束 4. 中断嵌套

5555

Page 56: §7.3  可编程中断控制器 8259A

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

Page 57: §7.3  可编程中断控制器 8259A

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

Page 58: §7.3  可编程中断控制器 8259A

58

由于 8259A 采用中断工作方式,且 ICW4 中的 D1 位(即 AEOI )为 0 ,这意味着采用正常结束中断,因此,在中断子程序结束前必须发 EOI 命令和 IRET 命令。

MOV AL , 20H ;写 OCW2 命令,使 ISR相应位复位(即发 EOI 命令) OUT 20H , ALIRET ;开放中断允许,并从中断返回

5858

Page 59: §7.3  可编程中断控制器 8259A

59

为了使中断嵌套,即在中断响应过程中,允许比本中断优先级高的中断进入,只要在进入中断处理程序后,执行开中断指令 STI即可达到此目的。

5959

Page 60: §7.3  可编程中断控制器 8259A

60

四、 8259A 在 IBM PC/XT 系统中的应用

1. 8259A与系统的连线。

2. BIOS 初始化程序对 8259A 的设置。

Page 61: §7.3  可编程中断控制器 8259A

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 在连线中的位置

Page 62: §7.3  可编程中断控制器 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

Page 63: §7.3  可编程中断控制器 8259A

63

IR0 接一个频率为 17.2Hz的方波; 若 CPU 对该申请给予响应 , 则每秒执行 17.2次该申请对应的中断子程。 IR1 接键盘接口发出的中断申请; 每按下一键,若 CPU 对该申请给予响应 , 则执行一次该申请对应的中断子程。 IR2~IR7 通过系统总线引出, 对应引脚信号为 IRQ2~IRQ7 。

17.2Hz 时钟信号

② 8259A 的 8 个中断申请与外设的连接

Page 64: §7.3  可编程中断控制器 8259A

64

8086

INTR

主 板

IF

17.2Hz 方波

8259A

INT

中断屏蔽寄存器

键盘

中断申请IR1

IR2~

IR7

IR0

当前中断服务寄存器

键盘接口

IRQ2~

IRQ7

PC总线

外设接口

08h

09h

0Ah~

0Fh

IBM PC/XT微机可屏蔽中断响应过程示意图

Page 65: §7.3  可编程中断控制器 8259A

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

Page 66: §7.3  可编程中断控制器 8259A

66

① IR0~IR7 中断申请信号为上升沿触发方式;② IR0~IR7 对应的中断类型号分别为 08H~0FH ;③ 优先级 IR0 最高 , IR7 最低;④ 采用非自动结束方式, 需向 OCW2 发 EOI 中断结束命令 , 清除 ISR 中的记录。

2. BIOS 初始化程序对 8259A 的设置

Page 67: §7.3  可编程中断控制器 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

Page 68: §7.3  可编程中断控制器 8259A

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

Page 69: §7.3  可编程中断控制器 8259A

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

Page 70: §7.3  可编程中断控制器 8259A

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

Page 71: §7.3  可编程中断控制器 8259A

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

……

< 其他代码放在这里 >

……

Page 72: §7.3  可编程中断控制器 8259A

72

子程序如下:my_int proc far

pusha

< 中断服务程序主体 >

popa

mov al , 20h ; EOI 命令, 00100000B

out 20h , al ;写 OCW2

sti

iret

my_int endppusha是将我们所有的 16 位通用寄存器压入堆栈 ,popa同理是将我们所有的16 通用寄存器取出堆栈。

Page 73: §7.3  可编程中断控制器 8259A

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

Page 74: §7.3  可编程中断控制器 8259A

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

Page 75: §7.3  可编程中断控制器 8259A

75

3 、中断嵌套方式在中断处理过程中允许被更高优先级的事件所中断称为中断嵌套。 8259A 有两种中断嵌套方式: 普通全嵌套方式(默认方式)

一中断正被处理时,只有更高优先级的事件可以打断当前的中断处理过程而被服务。

特殊全嵌套方式 一中断正被处理时,允许同级或更高优先级的事件可以打断当前的中断处理过程而被服务。

注 : 特殊全嵌套仅用于多个 8259A 级连时的主8259A ,而不能用于从属 8259A 或单8259A 系统。

7575

Page 76: §7.3  可编程中断控制器 8259A

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

Page 77: §7.3  可编程中断控制器 8259A

77

1 、当某一 IRi 中断被服务时, ISR 中的相应位 ISRi=1 。当服务结束后,则必须清零该 ISRi 位。使 ISRi=0 是通过向8259A 发出中断结束命令( EOI 命令)实现的。

2 、三种 EOI 命令自动 EOI ( AEOI )——(自动 EOI 方式)非指定 EOI ( NSEOI )——(正常 EOI 方

式)指定 EOI ( SEOI )——(特殊 EOI 方式)

7777

Page 78: §7.3  可编程中断控制器 8259A

78

AEOI :在第 2 个 INTA# 结束时,由8259A使 ISRi 自动复位;因不保留当前正在服务的中断的状态,故 AEOI不能用于中断嵌套方式

指定 EOI :由 CPU 发出一条 SEOI 命令,该 EOI 命令中指出了所要复位的 ISR 的位号。 用于特殊屏蔽方式

非指定 EOI :由 CPU 发出正常 EOI 命令,该 EOI 命令使 ISRi=1 的位中优先级最高的那一位复位。用于普通全嵌套方式

7878

Page 79: §7.3  可编程中断控制器 8259A

79

中断服务程序

向从 PIC 发 EOI 命令

读从 PIC 的 ISR

全 0?

向主 PIC 发 EOI 命令Y

IRET

恢复现场

N

特殊全嵌套方式下的 EOI 处理

只有当从 PIC 的中断全部处理完后,才能向主 PIC 发 EOI 命令

7979

Page 80: §7.3  可编程中断控制器 8259A

80

1 、 IMR 屏蔽字决定了允许或禁止某位 IRi所对应的中断: IMi=1 禁止, IMi=0 允许。

2 、特殊屏蔽方式:提供了允许较低优先级的中断能够得到响应

的特殊手段。原理:假定当前正在处理 IR6 ,先进入特殊

屏蔽方式,然后设置 IM6=1 。这时,除 IR6

外的所有中断请求均能得到响应。特殊屏蔽方式中只能用 SEOI 命令结束中断。

8080

Page 81: §7.3  可编程中断控制器 8259A

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

Page 82: §7.3  可编程中断控制器 8259A

82

第一小节结束,谢谢您的合作!