Presentation is loading. Please wait.

Presentation is loading. Please wait.

第 13 章 中断系统.

Similar presentations


Presentation on theme: "第 13 章 中断系统."— Presentation transcript:

1 第 13 章 中断系统

2 本章主要内容 (1)中断及中断处理的基本概念 (2)80x86实模式中断系统 (3)可编程中断控制器8259A

3 13.1 基本概念 中断的定义 在程序运行时,系统外部、内部或现行程序本身若出现紧急事件,处理器必须立即强行中止现行程序的运行,改变机器的工作状态并启动相应的程序来处理这些事件,然后再恢复原来的程序运行,这一过程称为中断。

4 13.1.2 中断响应和处理过程 CPU在执行每条指令的适当时刻,检测中断请求信号。
中断响应和处理过程 CPU在执行每条指令的适当时刻,检测中断请求信号。 若发现中断请求信号有效,对于可屏蔽中断还必须CPU开放中断,则在下一机器周期进入中断响应周期。 进入中断响应周期后,中断响应和处理的过程如下:

5 1. 关中断 CPU在响应中断时,发出中断响应信号INTA,同时内部自动地关中断,以禁止接受其他的中断请求。 2. 保存断点 把断点处的指令指针IP值和CS值压入堆栈,以使中断处理完后能正确地返回主程序断点。

6 3. 识别中断源 CPU要对中断请求进行处理,必须找到相应的中断服务程序的入口地址,这就是中断的识别。 4. 保护现场 为了不使中断服务程序的运行影响主程序的状态,必须把断点处有关寄存器(指在中断服务程序中要使用的寄存器)的内容以及标志寄存器的状态压入堆栈保护。

7 5. 执行中断服务程序 在执行中断服务程序中,可在适当时刻重新开放中断,以便允许响应较高优先级的中断。 6. 恢复现场并返回 即把中断服务程序执行前压入堆栈的现场信息弹回原寄存器,然后执行中断返回指令,从而返回主程序继续运行。

8 在上述中断响应及处理的6项操作中,前3项是中断响应过程,一般由中断系统硬件负责完成;
后3项是中断处理过程,通常是由用户或系统程序设计者编制的中断处理程序(软件)负责完成。 针对一个具体的系统或机型,中断服务程序设计者应该清楚该系统在中断响应时,中断响应硬件完成了哪些操作(如程序状态字PSW是否已被压入堆栈),还需中断处理软件(中断服务程序)完成哪些操作。

9 中断优先级和中断嵌套 1. 中断优先级 在实际系统中,多个中断请求可能同时出现,但中断系统只能按一定的次序来响应和处理,这时CPU必须确定服务的次序,即根据中断源的重要性和实时性,照顾到操作系统处理的方便,对中断源的响应次序进行确定。 这个响应次序称为中断优先级(priority)。

10 通常,可用软件查询法确定中断优先级,也可用硬件组成中断优先级编码电路来实现。
现代PC机中多采用可编程中断控制器(如8259A)来处理中断优先级问题。 (1) 软件查寻法确定中断优先级 采用软件查询法解决中断优先级只需要少量硬件电路。如图13.1所示,系统中有多种外部设备,将这些设备的中断请求信号相“或”,从而产生一个总的中断请求信号INTR发给CPU。

11 图13.1 软件查询接口电路 磁盘 磁带 CRT 显示 键盘输入 打印输出 纸带输入 保留 INTR

12 当CPU响应中断请求进入中断处理程序后,必须在中断处理程序的开始部分安排一段带优先级的查询程序,查询的先后顺序就体现了不同设备的中断优先级,即先查的设备具有较高的优先级,后查的设备具有较低的优先级。
一般来说总是先查速度较快或是实时性较高的设备。 软件查询的流程如图13.2所示。

13 图13.2 软件查询流程图 保护现场 Y A申请服务? N 外设A中断服务程序 B申请服务? 外设B中断服务程序 C申请服务?
恢复现场 A申请服务? B申请服务? C申请服务? 外设A中断服务程序 N 外设B中断服务程序 外设C中断服务程序 Y

14 (2) 菊花链优先级排队电路 菊花链优先级排队电路是一种优先级管理的简单硬件方案。它是在每个设备接口设置一个简单的逻辑电路,以便根据优先级顺序来传递或截留CPU发出的中断响应信号INTA,以实现响应中断的优先顺序。 典型的菊花链优先级结构如图13.3(a) 所示。

15 图13.3 菊花链优先级结构 (a) 菊花链排队电路 CPU 接口 菊花链 逻辑 集电极开路门 中断请求 INTR 设备3 设备2 设备1
中断响应信号 集电极开路门 +5V

16 图13.3 菊花链优先级结构 (b) 菊花链逻辑 中断响应信号 (低电平有效) 中断 请求 信号 (高电平有效) INTR

17 2. 中断嵌套 当CPU正在执行优先级较低的中断服务程序时,允许响应比它优先级高的中断请求,而将正在处理的中断暂时挂起,这就是中断嵌套。 此时,CPU首先为级别高的中断服务,待优先级高的中断服务结束后,再返回到刚才被中断的较低的那一级,继续为它进行中断服务。 如图13.4所示。

18 图13.4 中断嵌套示意图 STI STI . . . IRET IRET

19 中断嵌套的深度(中断服务程序又被中断的层次)受到堆栈容量的限制。
所以在编写中断服务程序时,必须要考虑有足够的堆栈单元来保留多次中断的断点信息及有关寄存器的内容。

20 13.2 80x86实模式的中断系统 13.2.1 中断的分类 中断分类的方式很多。 根据进入中断的方式可分为自愿中断和强迫中断。
根据其重要性可分为可屏蔽中断和不可屏蔽中断。 根据中断源的位置可分为内部中断和外部中断等等。 如图13.5所示。

21 . 图13.5 80x86实模式系统的中断分类 硬件中断(外部中断) 软件中断(内部中断) 非屏蔽中断请求 INT n 指令 NMI
中 断 逻 辑 INTR IRQ0 (8259A) . 可 屏 蔽 中 断 断点中断 (INT 3) 溢出中断 (INTO, OF=1) 单步中断 (TF=1) 除法错 中断 软件中断(内部中断) IRQ7 硬件中断(外部中断)

22 关于中断分类的补充说明 为了支持多任务和虚拟存储器等功能,80386及以上CPU 把外部中断称为“中断”(interrupt),把内部中断称为“异常”(exception) 。与8086一样,它也最多处理256种中断和异常。 根据引起异常的程序是否可被恢复和恢复点的不同,又把异常分为三类: 故障(fault) 陷阱(trap) 中止(abort) 把对应的异常处理程序分别称为故障处理程序、陷阱处理程序和中止处理程序。

23 故障是在引起异常的指令之前,把异常通知给系统的一种异常。故障的特点是可以排除的。
例如,在执行一条指令时,如果发现它要访问的段不在内存中,那磨停止该指令的执行,并产生一个段不存在异常,对应的故障处理程序可通过从外存加载该段到内存的方法来排除故障。之后,原引起异常的指令就可以继续执行,就不再产生异常。 陷阱是在引起异常的指令执行之后触发的一种异常。在转入异常处理程序时,引起陷阱的指令已完成。陷阱处理程序执行完,返回到引起陷阱指令的下一条指令。软中断指令INT n 是陷阱的例子。 中止是在系统出现严重的不可恢复的事件时触发的一种异常。产生中止后,正执行的程序不能恢复执行,系统要重新启动才能恢复正常运行状态。

24 13.2.2 中断向量表 所谓中断向量(interrupt vector),实际上就是中断服务程序的入口地址,每个中断类型对应一个中断向量。
中断向量表 所谓中断向量(interrupt vector),实际上就是中断服务程序的入口地址,每个中断类型对应一个中断向量。 每个中断向量占4字节的存储单元。 其中: 前两个字节单元存放中断服务程序入口地址的偏移量(IP),低字节在前,高字节在后; 后两个字节单元存放中断服务程序入口地址的段基值(CS),也是低字节在前,高字节在后。

25 80x86实模式系统允许引入的中断可达256个,因此需占用1K字节的存储空间来存放这256个中断服务程序入口地址。
80x86实模式系统把中断服务程序入口地址信息设置在存储器的最低端,即从00000H~003FFH的1K字节存储空间中。 这一存储空间就叫中断向量表,如图13.6所示。

26 图13.6 实模式系统的中断向量表 类型255 (十进制) CS IP 供用户定义的中断 (共224个) ︽︾ ︽︾ 类型32 类型31
图13.6 实模式系统的中断向量表 类型255 (十进制) CS IP 0000: 03FFH 0000:007FH 0000:007EH 0000:0014H 0000:0013H 0000:0010H 0000:000FH 0000:000CH 0000:000BH 0000:0008H 0000:0007H 0000:0004H 0000:0003H 0000:0000H 供用户定义的中断 (共224个) ︽︾ ︽︾ 类型32 类型31 (十进制) CS IP 保留的中断 (共27个) ︽︾ ︽︾ 类型5 类型4 类型3 类型2 类型1 类型0 CS IP 溢出中断 CS IP 断点中断 专用的中断 (共5个) CS IP 非屏蔽中断 CS IP 单步中断 CS IP 除数为0中断

27 在中断向量表中,各中断向量按中断类型码从0到255顺序存放。这样,知道了中断类型码,很快就可算出相应中断向量的存放位置,从而取出中断向量。
例如,中断类型码为27H的中断所对应的中断向量应存放在从0000H:009CH开始的4个连续字节单元中。 如果相应存储单元的内容如图13.7所示,那么27H号中断的中断服务程序的入口地址即为8765H:4321H。

28 图13.7 中断向量的存放格式 87H 65H 43H 21H 0000:009FH 0000:009CH

29 由于中断向量在中断向量表中是按中断类型码(也称中断向量号)顺序存放的,所以每个中断向量的地址可由中断类型码乘以4计算出来。
CPU响应中断时,只要把中断类型码N左移2位(乘以4),即可得到中断向量在中断向量表中的对应地址4N(该中断向量所占4个字节单元的第一个字节单元的地址)。 然后把由此地址开始的两个低字节单元的内容装入IP寄存器: IP ← (4N, 4N+1) 再把两个高字节单元的内容装入 CS 寄存器: CS ←(4N+2, 4N+3)

30 这就是使程序转入中断类型码为N的中断服务程序的控制过程,如下面例1所示。
例13.1 若中断类型码为3,则由中断类型码取得中断服务入口地址的过程如图13.8所示。

31 图13.8 根据中断类型码取得中断服务程序入口地址
图13.8 根据中断类型码取得中断服务程序入口地址 OOH(IPL) 0AH(IPH) 00H(CSL) 1EH(CSH) 中断服务程序 00000H 00001H 0000CH (0000:000CH) 1EA00H (1E00:0A00H) FFFFFH 高地址 低地址 3×4=000CH (中断向量表地址)

32 例13.2 中断类型码为20H,则中断服务程序的入口地址存放在中断向量表从0000:0080H开始的4个字节单元中。若这4个字节单元的内容分别为:
试指出相应的中断服务程序的入口地址。 解: 中断服务程序的入口地址为 。

33 例13.3 中断类型码为17H,若中断服务程序的入口地址为2340H:7890H,试指出中断向量表中存放该中断向量的4个字节单元的地址及内容。
解: 由于中断类型码为17H,所以中断向量表中存放相应中断向量的4个字节单元的地址分别为0000:005CH、0000:005DH、0000:005EH、0000:005FH,4个字节单元的内容分别为 。

34 13.2.3 外部中断 由外部的中断请求信号启动的中断,称为外部中断,也称硬件中断。
外部中断 由外部的中断请求信号启动的中断,称为外部中断,也称硬件中断。 80x86 CPU为外部中断提供两条引线,即NMI和INTR,用来输入中断请求信号。 1. 非屏蔽中断 从NMI引脚进入的中断为非屏蔽中断,它不受中断允许标志IF的影响。 非屏蔽中断的类型码为2,因此,非屏蔽中断处理子程序的入口地址存放在08H、09H、0AH和0BH这4个字节单元中 。

35 2. 可屏蔽中断 一般外部设备请求的中断都是从CPU的INTR端引入的可屏蔽中断。 当CPU接收到一个可屏蔽中断请求时,如果中断允许标志IF为1,那么CPU就会在执行完当前指令后响应这一中断请求。 下面以8086系统为例,具体介绍一下可屏蔽中断的响应时序。

36 图13.9 8086的中断响应总线周期 三个空闲状态 第一个总线周期 第二个总线周期
图 的中断响应总线周期 三个空闲状态 第一个总线周期 第二个总线周期 T T T T TI TI TI T T T T4 CLK ____ INTA AD7~AD0 中断类型码

37 内部中断 内部中断也称软件中断。 它是由于CPU执行了INT n(含INT 3)、INTO指令,或者由于除法出错以及进行单步操作所引起的中断,主要包括INT n指令中断、断点中断、溢出中断、除法错中断以及单步中断。

38 (1) INT n 指令中断。 80x86系统提供了直接调用中断处理子程序的手段,这就是中断指令INT n。 指令中的中断类型码n告诉CPU调用哪个中断处理子程序。 (2) 除法错中断(类型0) 在执行除法指令DIV 或IDIV 后,若所得的商超出了目标寄存器所能表示的范围,比如用数值0作除数,则CPU立即产生一个0型中断。

39 (3) 溢出中断(类型4) 若上一条指令执行的结果使溢出标志位OF置1,则紧接着执行INTO指令时,将引起类型为4的内部中断,CPU将转入溢出错误处理。 若OF=0时,则INTO指令执行空操作,即INTO指令不起作用。 INTO指令通常安排在算术运算指令之后,以便在发生溢出时能及时处理。 典型情况如表13-1所示。

40 表 13-1 . . . . 主程序 中断服务程序 OVERFLOW: PUSH AX PUSH BX PUSH CX PUSH DX
ADD AX , BX; 若OF=1 溢出处理 INTO (包括输出某些提示信息) POP DX POP CX POP BX POP AX IRET . . . .

41 (4) 单步中断(类型1) 当把CPU标志寄存器的TF位置为1以后,CPU便处于单步工作方式。 在单步工作方式下,CPU每执行完一条指令,就会自动产生一个1 型中断,进入1型中断处理程序。 此处理程序显示CPU内部各寄存器的内容并告知某些附带的信息。

42 (5) 断点中断 (类型3) 与单步中断类似,断点中断也是一种调试程序的手段,并且常常和单步中断结合使用。 对一个大的程序,不可能对整个程序全部用单步方式来调试,而只能先将程序中的某一错误确定在程序中的一小段中,再对这一小段程序用单步方式跟踪调试。 断点中断就是用来达到这个目的的。

43 在所有INT n形式的指令中,只有断点中断指令INT 3是一条单字节长的指令,其他中断指令都是两字节指令。

44 图13.10 断点的设置 1FEH,1FFH 200H 201H,202H 203H,204H 1FCH,1FDH ADD AL, BL
图 断点的设置 1FCH,1FDH ADD AL, BL 1FEH,1FFH JMP 201H 200H INC AL 断点 201H,202H CMP AL, 0FFH 转移 203H,204H JL 200H 不转移

45 内部中断的特点是: (1) 中断类型码由CPU内部自动提供(含从INT n指令中自动提取),不需要执行中断响应总线周期(INTA总线周期)去读取中断类型码。 (2) 除单步中断外,所有内部中断都不可以用软件的方法来禁止(屏蔽)。单步中断可以通过软件将TF标志置1或清0来予以允许或禁止。 (3) 除单步中断外,所有内部中断的优先级都比外部中断高。

46 13.2.5 中断响应和中断处理过程 1. 可屏蔽中断的响应和处理过程
中断响应和中断处理过程 1. 可屏蔽中断的响应和处理过程 图13.11给出了可屏蔽中断从中断请求信号产生到中断服务程序结束并返回被中断程序的全过程。

47 图13.11 可屏蔽中断全过程 . . . INTR ____ INTA STI IRET IP CS PSW(FR) 外设接口
图 可屏蔽中断全过程 外设接口 INTR ____ INTA ①接口发中断请求信号INTR CPU ②CPU完成现行指令, 发出中断响应信号 Q 中断 请求 中断 屏蔽 IP CS 中断类型码寄存器 PSW(FR) ③CPU读取中断类型码N ⑥取CS、 IP新值 ⑤清除IF和TF 存储器 新的(IP) 新的(CS) 旧的(IP) 旧的(CS) 旧的(PSW) 中断向量表 4N 4N+2 中断服务程序 . 被中断 的程序 . ④现行PSW、 CS、IP压栈 ︽︾ ︽︾ STI . ⑦转入 中断服务 程序 ⑧开放中断 (可选) IRET ⑨IRET指令使 旧的IP、CS、PSW 弹出堆栈 ︽︾ ︽︾ ⑩返回被中 断的程序 16位

48 2. 80x86 实模式中断响应和中断处理过程 80x86实模式中断响应和处理流程如图13.12所示。

49 图13.12 80x86实模式中断响应和中断处理过程 80x86实模式中断优先级 结束当前指令 执行下一条指令
①‘ 除法错,INTO,INT n? Y 内部自动形成中断类型码N N Y NMI N Y Y INTR? TF=1? 读中断类型码N N N Y TF=1? 标志压入堆栈 N 令TEMP=TF 执行下一条指令 清除IF和TF CS和IP压入堆栈 (4N,4N+1)IP (4N+2,4N+3)CS Y 有NMI? 80x86实模式中断优先级 N Y TEMP=1? N 中断 优先级 除法错,INT n,INTO 最高 NMI INTR 单步 最低 执行中断处理程序 IP、CS出栈 执行IRET指令 标志寄存器出栈 返回被中断的主程序

50 判断与思考: 若在主程序中已使IF=1(开中),则在响应中断请求并执行完中断服务程序返回主程序后,IF 标志位是否为1决定于在中断服务程序中是否执行了STI指令。

51 需要说明的是,在图13.12所示的中断响应和处理过程中,其中的①~⑥步(含①′)是由处理器内部的中断系统硬件自动完成的,即无需程序员的直接控制和干预;
其后的中断处理过程则是通过执行中断服务程序(软件)来完成的。

52 单步运行方式时发生其他中断的处理过程

53 单步运行方式时发生中断的处理过程(续) 堆堆栈的情形: 低地址 高地址 IP CS TF=0 TF=1 60 70 40 50 (FR)’
30 10 20 (FR)

54 13.3 可编程中断控制器8259A (8259A Programmable Interrupt Controller-PIC)
Intel 8259A用于管理和控制80x86的外部中断请求,实现优先级判决,提供中断类型码,屏蔽中断输入等功能。 使用单片8259A可以管理8级中断,采用级联方式,可扩充到64级(用9片8259A)。

55 . . 单片 级联 IR0 8259A CPU 从片 8259A CPU IR0 INT 主片 中断请求 INTA . INTR INTR

56 A的引脚功能 封装形式 28脚双列直插(28-pin DIP), DIP:Dual-In-line Package ,如图13.13所示。

57 1 2 3 4 5 6 7 8 9 10 11 12 13 14 28 27 26 25 24 23 22 21 20 19 18 17 16 15 8259A  CS  WR RD D7 D6 D4 D5 D2 D3 D0 D1 CAS0 CAS1 GND INTA IR7 IR6 IR4 IR5 IR2 IR3 IR0 IR1 INT CAS2 SP/EN VCC A0

58 --片选信号(Chip Select)低电平有效,来自地址译码器的输出只有 有效时,CPU才能对8259A进行读写操作。
--写信号,低电平有效,来自CPU的输出;当 有效且 有效时, 使8259A接受CPU送来的命令字。 --读信号,低电平有效,来自CPU的 输出;当 有效且 有效时, 使8259A将状态信息放到数据总路线上,供CPU检测。 CS CS WR CS WR WR RD RD CS RD

59 D7~ D0 :双向数据总线,接到系统数据总线的D7~ D0 上,用来传送控制字、状态字和中断类型号。
IR7~IR0 :中断请求信号,输入,来自外部接口电路。(单片时) INT:向CPU发出的中断请求信号。(单片时)。 INTA:中断响应信号,由此接收CPU发来的中断响应脉冲。

60 CAS2~ CAS0:级联线(CASCADE LINES),传送3位标 识码,用于区分特定的从控制器。双向:对于主片为输出,对于从片为输入。
A0:地址输入信号,用于对8259A内部寄存器的寻址。 CAS2~ CAS0:级联线(CASCADE LINES),传送3位标 识码,用于区分特定的从控制器。双向:对于主片为输出,对于从片为输入。   :从片/允许缓冲器信号。双功能引脚: 作为输入时,8259A作为主片(   =1)  8259A作为从片(   =0)见P462图13.15 作为输出时,用来启动(允许)数据总线收发器(如8286)。 *究竟是作为输入还是输出,取决于8259A是否工作于“缓冲方式”(即8259A是否通过一个“数据总线收发器”与系统总线相连)。详见后面ICW4的格式。 SP/ EN SP/ EN SP/ EN

61 A的内部结构 8259A的内部逻辑结构如图13.14所示。

62 图13.14 8259A的内部逻辑结构 RD WR SP/EN 数据总线 缓冲器 读/写 控制电路 级 连 缓冲器/比较器 中断服务 寄存器
级 连 缓冲器/比较器 中断服务 寄存器 (ISR) 中断请求 (IRR) 优先权 判别器 (PR) 中断屏蔽寄存器 (IMR) SP/EN IR0 IR1 IR2 IR6 IR7 内部总线 CAS0 CAS1 CAS2 ____ INTA INT WR RD CS A0 D7~D0

63 8259A的编程结构 CPU SP/EN CAS0 CAS1 AD7~AD0 D7~D0 CAS2 PR IR0 IRR ISR RD .
WR ICW1 OCW1 (IMR) IR7 A0 ICW2 OCW2 地址 译码 CS ICW3 OCW3 . INTA INTA ICW4 INTR INT

64 IRR—Interrupt Request Register PR---Priority Resolver
ISR---In-Service Register IMR---Interrupt Mask Register ICWs---Initialization Command Words OCWs---Operation Command Words 7个CPU可访问的寄存器,分两组: 初始化命令字ICW1 ~ICW4---系统初启时设定。 操作命令字OCW1~OCW3—系统运行时,由应用程序设定(实现对中断处理的动态管理和控制). The OCWs can be written into the 8259A anytime after initialization.(手册P6-P7)。

65 7个寄存器的寻址问题: 规规定:A0 ICW1:用偶地址写入,且D4=1 ICW2 紧接着ICW1,用奇地址写入 ICW3 ICW4
OCW1:也用奇地址写入,但不紧跟ICW1 OCW2 OCW3 也用偶地址写入,但D4=0 即: 采用了专门的“标识位“,以节省输入地址的引脚数(仅用了A0)

66 8259A的处理部件: 中断请求寄存器IRR-8位寄存器+控制逻辑 作用:接受并锁存来自IR0~IR7的中断请求信号。 中断服务寄存器ISR
作用:保存当前正在处理的中断请求。 优先级裁决器PR 作用:把新进入的中断请求和当前正在处理的中断进行比较,以决定哪一个优先级更高。

67 处理过程: IR0~IR7上出现某一中断请求信号->IRR对应位被置“1”->由IMR的相应位决定是否将其屏蔽(屏蔽位=1,不通过;屏蔽位=0,通过)->中断请求进PR->PR把新进入的中断请求和当前正在处理的中断进行优先级比较->若新进入的中断优先级高,该中断请求被送到CPU。 若CPU的IF=1,CPU完成当前指令后,响应中断,在 引脚上发出两个负脉冲 (执行两个中断响应总线周期,参见P463 图13.16)。 INTA

68 图13.9 8086的中断响应总线周期 三个空闲状态 第一个总线周期 第二个总线周期
图 的中断响应总线周期 三个空闲状态 第一个总线周期 第二个总线周期 T T T T TI TI TI T T T T4 CLK ____ INTA AD7~AD0 中断类型码

69 使IRR锁存允许,不予接受IR0~IR7上的中断请求信号;直到第二个负脉冲结束后,才又使IRR锁存禁止(输入输出透明)。
8259A收到第一个负脉冲后: 使IRR锁存允许,不予接受IR0~IR7上的中断请求信号;直到第二个负脉冲结束后,才又使IRR锁存禁止(输入输出透明)。 使ISR的相应位置“1”,以便为优先级裁决器以后的裁决提供依据。 清除IRR的相应位。 8259A收到第二个负脉冲后: 把中断类型码寄存器的内容(ICW2的内容)送到D7~D0 如果ICW4的AEOI位为1,则在第二个 脉冲结束时,将ISR中被第一个 脉冲置“1”的位清除(自动结束);否则,要等到中断结束命令(EOI)发送后才能清除。 INTA INTA

70 13.3.3 8259A的工作方式 1. 设置优先级的方式 (1) 全嵌套方式(FULLY NESTED MODE)
1. 设置优先级的方式 (1) 全嵌套方式(FULLY NESTED MODE) 也称固定优先级方式。在这种方式下,由IRi引入的中断请求具有固定的优先级-IR0(最高)->IR7(最低). This mode is entered after initialization unless another mode is programmed.

71 当一个中断请求被响应时,ISR中的对应位ISn被置“1”,8259A把中断类型码放到数据总线上,然后,进入中断服务程序。
一般情况下(除了“中断自动结束”方式外),在CPU发出中断结束命令(EOI)前,此对应位一直保持为“1”-封锁同级或低级的中断响应,但并不禁止比本级优先级高的中断响应-实现中断“嵌套”。

72 (2) 特殊全嵌套方式(SPECIAL FULLY NESTED MODE-SFNM)
在处理某一级中断时,不但允许优先级更高的中断请求进入,也允许同级的中断请求进入。 用于主从结构的8259系统中,将主片设置为“特殊全嵌套方式”。 通过ICW4的“SFNM”位可以设置此种方式。(参见p464) CPU IR0 IR1 IR7 8259(主片) 8259(从片)

73 (3) 优先级自动循环方式(AUTOMATIC ROTATION)
优先级是循环变化的(不希望有固定的优先级差别)-一个设备的中断服务完成后,其优先级自动降为最低,而将最高优先级赋给原来比它低一级的中断请求。 开始时,优先级队列还是:IR0->IR7 ,若此时出现了IR0请求,响应IR0并处理完成后,队列变为: IR1,IR2,IR3,IR4 ,IR5 ,IR6 ,IR7,IR0。 若又出现了IR4请求,处理完IR4后,队列变为: __________________________________ 系统中是否采用“自动循环优先级”,由 操作命令字OCW2来设定。( 参见p466)

74 (4)优先级特殊循环方式(SPECIFIC ROTATION)
与“优先级自动循环方式”相比,只有一点不同,即可以设置开始的最低优先级。 例如,设定IR4为最低优先级,那么IR5就是最高优先级,其余各级按循环方法类推。

75 2. 屏蔽中断源的方式(中断屏蔽方式) 普通屏蔽方式 *特殊屏蔽方式(SPECIAL MASK MODE)
通过对中断屏蔽寄存器(IMR)的设定,实现对相应位为“1”的中断请求的屏蔽。 可通过OCW1使IMR的一位或几位置“1”。 *特殊屏蔽方式(SPECIAL MASK MODE) 作用:P462 实现: 输出OCW3(ESMM=1,SMM=1) 输出OCW1(使IMR对应于本级的位为“1”) …… 输出OCW1(使IMR对应于本级的位为“0”) 输出OCW3(ESMM=1,SMM=0) “中断级无效” 设置 撤销

76 3. 中断结束方式(END OF INTERRUPT-EOI)
(1)中断自动结束方式(AUTOMATIC-AEOI方式) 在第二个 后沿,即完成把对应的ISR位复位。 注意:AEOI方式是在中断响应后,而不是在中断处理程序结束后将ISR位清0。 这样,在中断处理过程中,8259A中就没有“正在处理”的标识。此时,若有中断请求出现,且IF=1,则无论其优先级如何(比本级高、低或相同),都将得到响应。 尤其是当某一中断请求信号被CPU响应后,如不及时撤销,就会再次被响应-“二次中断”。 INTA

77 所以,AEOI方式适合于中断请求信号的持续时间有一定限制以及不出现中断嵌套的场合。
通过ICW4可以设置AEOI方式(AEOI=1)。

78 实现:在中断服务程序结束时,向8259A发常规中断结束命令(OCW2:EOI=1,SL=0,R=0)
(2)一般(常规)中断结束方式 适合于全嵌套方式。 实现:在中断服务程序结束时,向8259A发常规中断结束命令(OCW2:EOI=1,SL=0,R=0) 例:MOV AL,20H; OCW2=20H OUT 20H,AL; 端口地址=20H(偶地址) 在全嵌套方式下,ISR中最高优先级的置“1”位,正对应于当前正在处理的中断,将其清“0”,就完成了当前正在处理中断的结束操作。 IR0 IR7 1

79 (3)特殊中断结束方式(SPECIFIC EOI-SEOI)
在非全嵌套方式下,无固定的优先级序列(使用设置优先权命令或特殊屏蔽方式),此时,根据ISR的内容就无法确定刚刚所响应(处理)的中断。 这种情况下,就不能用上述的EOI方式进行中断结束处理,而必须用特殊的中断结束命令SEOI--用OCW2:EOI=1,SL=1,R=0,L2~L0. 由L2~L0指定清除ISR中的哪一位。

80 4. 中断触发方式 电平触发方式:由IRi上的有效电平来触发“中断请求触发器”。 边沿触发方式:由IRi上由低电平向高电平的跳变来触发“中断请求触发器”。 由ICW1的LTIM位可以设置中断触发方式。

81 5. 连接系统总线的方式 缓冲方式(ICW4的BUF=1) 非缓冲方式(ICW4的BUF=0)
8259A通过总线驱动器(如8286)和数据总线相连。 在缓冲方式下,8259A的 作为输出( 有效),此时,由ICW4的M/S位来定义(标识)本8259A是主片还是从片。 非缓冲方式(ICW4的BUF=0) 即8259A直接与数据总线相连 在“非缓冲方式下”,8259A的 作为输入( 有效) 此时,由 端来标识本8259A是主片还是从片。 在“非缓冲方式下”,ICW4的BUF=0,M/S位无意义。 SP / EN EN SP / EN SP SP / EN

82 特点:既有中断的特点,又有查询(Polling)的特点。 外设仍然向8259A发中断请求信号,要求CPU服务。
“中断查询”方式 特点:既有中断的特点,又有查询(Polling)的特点。 外设仍然向8259A发中断请求信号,要求CPU服务。 CPU的IF=0,不响应外部的中断请求(对CPU的中断请求信号不起作用) 此时,CPU需要用软件查询方法来确认中断源,从而实现对设备的服务 先向8259A发查询命令(poll command) OCW3: 1 P

83 紧接着执行一条读指令(IN指令),读出专门的“中断状态字”:
当8259A收到P=1的查询命令后,在下一个 信号将使ISR的相应位置“1”,就像收到了 一样,并把上述的“中断状态字”送到数据总线上,由CPU读入AL。 A0 IR - - - - W2 W1 W0 D7 D0 1:有设备请求服务; 0:无设备请求服务。 当前最高优先级的中断请求 RD INTA

84 A的控制字及编程使用 8259A的控制寄存器可分为两组,一组是初始化命令字ICW1~ICW4,另一组是操作命令字OCW1~OCW3。 每片8259A具有两个内部端口地址,一个偶地址端口(A0 = 0),一个奇地址端口(A0 = 1),其他高位地址码由用户定义,用来产生8259A的片选信号。

85 1. 初始化命令字 初始化命令字用来对8259A初始化,包括ICW1~ICW4 4个初始化命令字。 (1) ICW1
ICW1 使用偶地址端口(A0 = 0),其中D4 位为特征位(标志位),此时该位固定为1,表示当前写入的是ICW1 (OCW1 也用偶地址端口写入,但OCW1 的D4 位为0)。 ICW1 的格式如下:

86 初始化命令字 ICW1格式 A0 D7 D6 D5 D4 D3 D2 D1 D0 A7 ICW1 A6 A5 1 LTIM ADI SNGL
ICW1 A D D D D D D D D0 初始化命令字 ICW1格式

87 解释: IC4 规定初始化时是否要写入ICW4。IC4 = 0表示不写入ICW4,IC4 = 1表示写入ICW4。 SNGL规定8259A的用法。SNGL=0表示为级联方式,同时要写入ICW3 ;SNGL=1表示为单片方式,不要写入ICW3。 ADI为配合8085工作时选用CALL指令字节数而设,80x86不用这一位。 LTIM规定中断检测方式。LTIM=0表示边沿触发,LTIM=1表示电平触发。 A5~A7 在8085微处理器中用这几位作中断向量字,80x86不用这三位。

88 (2) ICW2 ICW2 使用奇地址端口(A0 = 1),紧跟在ICW1之后设置。ICW2 的格式如下:

89 初始化命令字 ICW2格式 A0 D7 D6 D5 D4 D3 D2 D1 D0 1 A15/T7 A14/T6 A13/T5 A12/T4

90 对于80x86系统,ICW2的D7~D3位用来确定中断类型码N的高5位T7~T3位,低3位D2~D0未定义;
对于非80x86系统,ICW2的8位全部用来作中断向量地址的高8位A15~A8。 在80x86系统中,8259A在中断响应周期的第二个总线周期内,从数据总线上向CPU送出8位中断类型码N的值。 其中高5位D7~D3即T7~T3,由ICW2在初始化编程时设定;低3位D2~D0则由8259A根据中断进入的引脚序号而自动填入,从IR0~IR7依次为000~111。

91 例: 若将 ICW2 初始化为28H , 则在中断响应总线周期从数据总线上向CPU送出的对应于 IR2的中断类型码为2AH,对应于 IR3的中断类型码为 等。

92 (3) ICW3 ICW3 只在级联方式中使用,端口地址为奇地址,其格式如下:

93 初始化命令字 ICW3格式 S7 1 ICW3 A0 D7 D6 D5 D4 D3 D2 D1 D0 S6 S5 S4 S3 S2/ID2

94 对于主片8259A,ICW3 表示哪些IRi 引脚接有从片8259A。接有从片8259A的相应S位置1,否则置0。
例如,若IR2、IR6 上接有从片8259A,且其他IR引脚未接有从片8259A,则ICW3 为 。

95 对于从片8259A,用ICW3 中的ID2~ID0 表示本8259A接在主片8259A的哪一根IR引脚上。
与IR0~IR7 分别对应的ID码为000~111。 例如,若从片8259A接在主片8259A的IR6 上,则从片8259A的ICW3 应设定为: ID2=1,ID1=1,ID0=0

96 (4) ICW4 在80x86系统中必须设置ICW4,端口地址为奇地址,其格式如下:

97 SFNM BUF M/S AEOI μPM 1 ICW4 A D D D D D D D D0 初始化命令字 ICW4格式

98 其中,μPM规定是哪种系统。μPM = 0表示是8080/8085系统,μPM = 1表示是80x86系统。
AEOI表示中断结束方式。AEOI=0为普通EOI方式,AEOI=1表示自动EOI方式。 BUF表示本8259A工作于缓冲方式还是非缓冲方式。BUF=1为缓冲方式,BUF=0为非缓冲方式。

99 在缓冲方式下,SP/EN引脚作为输出能使信号给总线收发器。此时,由M/S位来定义本8259A是主片还是从片。所谓8259A工作于缓冲方式,是指在多片8259A级联的大系统中,8259A通过总线收发器(驱动器)和数据总线相连。 M/S位用来在缓冲方式下规定本8259A是主片还是从片。M/S=0表示是从片,M/S=1表示是主片。 在非缓冲方式(BUF=0)下,M/S位无效。 SFNM表示中断嵌套方式。SFNM=0表示全嵌套方式,SFNM=1表示特殊全嵌套方式。

100 8259A的初始化流程 8259A的初始化命令字(ICW)是在加电之后由CPU按特定的顺序写入的。也就是说,各初始化命令字的识别一方面依赖于地址信号A0和初始化命令字中的特定标识位,另一方面也与写入的先后次序有关。 8259A的初始化顺序及相应的寻址标志如图13.17所示。

101 开始 ICW1(A0=0 D4=1) ICW2(A0=1) SNGL=0? (级联方式?) ICW3(A0=1) IC4=1 ? ICW4(A0=1) 准备好接受中断 N Y

102 ① 在初始化操作过程的开头,总要依次写入命令字ICW1和ICW2。
② 只有当ICW1中的SNGL位=0,才需写入ICW3。对于主片和从片均需写入ICW3,而且它们的格式不同。 ③ 只有当ICW1中的IC4=1时,才需写入ICW4。对于80x86系统,ICW4总是需要设置的。

103 在系统中,单片8259A与80x86 CPU配置时,初始化要写入的预置命令字是:ICW1、ICW2、ICW4 。
而级联系统要写入预置命令字是:ICW1、ICW2、ICW3和ICW4。 初始化过程结束,8259A进入所设置的状态后,才能写入操作命令字(OCW)。

104 2. 操作命令字 在8259A工作期间,可通过设置操作命令字来修改或控制8259A的工作方式。
需要说明的是,与初始化命令字ICW1~ICW4需要按规定的顺序进行设置不同,操作命令字OCW1~OCW3 的设置没有规定其先后顺序,使用时可根据需要灵活选择不同的操作命令字写入到8259A中。 当然,也需注意奇、偶端口地址及有关标识位的规定。

105 (1) OCW1 OCW1 为中断屏蔽操作命令字,用来实现中断屏蔽功能,要求写入8259A的奇地址端口(A0=1)。 OCW1 的内容被直接置入中断屏蔽寄存器IMR中,其格式如下:

106 M7 M6 M5 M4 M3 M2 M1 M0 1 OCW1 A D D D D D D D D0 操作命令字OCW1

107 其中M0~M7 分别对应8259A的IR0~IR7。 当OCW1 中的Mi 位为1时,则相应的IRi 的中断请求就被屏蔽。 例如, 若通过OCW1向中断屏蔽寄存器写入代码 ,将导致中断输入IR7~IR4被屏蔽掉,而IR3~IR0撤销屏蔽。

108 (2) OCW2 OCW2 用来设置优先级循环方式和中断结束方式。占用偶地址端口(A0=0)。OCW2 的格式如下:

109 R SL EOI L2 L1 L0 OCW2 A D D D D D D D D0 操作命令字OCW2

110 其中,D4D3= 00是OCW2 的标识位。 R表示中断优先级是否按循环方式设置。R=1表示采用循环方式,R=0表示采用非循环方式。 SL表示OCW2 中的L2、L1、L0 是否有效。SL=1表示有效,SL=0表示无效。 EOI为中断结束命令位。EOI=1使当前ISR寄存器的相应位清0。当ICW4 中的AEOI为0时,ISR中的相应置1位就要由该命令位来清除。

111 L2、L1、L0 在SL=1时配合R、SL、EOI的设置,用来确定一个中断优先级的编码。
L2、L1、L0 的8种编码000~111分别与IR0~IR7 相对应。 由R、SL、EOI三位可以定义多种不同的中断结束命令或优先级循环方式。 综合起来,R、SL、EOI的设置与其代表的意义如表13-2所示。

112 表13-2 R、SL、EOI的设置及意义 R SL EOI 意义 1 普通EOI命令 特殊EOI命令 普通EOI循环命令 特殊EOI循环命令
1 普通EOI命令 特殊EOI命令 普通EOI循环命令 特殊EOI循环命令 自动EOI循环方式(复位) 自动EOI循环方式(置位) 置优先权命令 无操作

113 (3) OCW3 OCW3 的端口为偶地址(A0=0),其格式如下:

114 ESMM SMM 1 P PR RIS OCW3 A D D D D D D D D0 操作命令字OCW3

115 其中D4 D3 = 01是OCW3 的特征位。 ESMM是特殊屏蔽方式允许位,SMM是特殊屏蔽方式位。当ESMM为0时,SMM的值不起用。 当ESMM为1时,由SMM位决定是否工作在特殊屏蔽方式。 当ESMM=1,SMM=0时,表示8259A不是工作在特殊屏蔽方式。 当ESMM=SMM=1时,表示8259A工作在特殊屏蔽方式。

116 P是查询命令(Poll Command)标识位。
当P=1时,表示向8259A发查询命令,查询当前是否有中断请求,以及在有中断请求时,当前正在请求的中断最高优先级是哪一级。 查询的中断状态字的格式如下:

117 中断状态字 A0 D7 D6 D5 D4 D3 D2 D1 D0 IR 0: 无中断请求 1: 有中断请求 当前正在请求的中断的 最高优先级
--- W2 W1 W0 A D D D D D D D D0 0: 无中断请求 1: 有中断请求 当前正在请求的中断的 最高优先级 中断状态字

118 8259A初始化编程举例 例13.6 对8259A按下述要求进行初始化编程: (1) 工作于80x86系统,单片8259A,边沿触发方式。
(2) 中断类型码初始值为08H,即IR0~IR7 对应的中断类型码为08H~0FH。 (3) 中断结束时,用普通中断结束命令,固定优先级。 8259A的端口地址为20H,21H。

119 实现上述要求的初始化程序如下: MOV AL,13H ;ICW1,边沿触发,单片8259A,要写ICW4 OUT 20H,AL MOV AL,08H ;ICW2,中断类型码初值为08H OUT 21H,AL MOV AL,0DH ;ICW4,缓冲方式,80x86系统,普通EOI方式 OUT 21H,AL ;

120 在中断服务结束时,需向8259A设置操作命令字OCW2=20H,如下所示:
MOV AL,20H ; OCW2,普通EOI命令 OUT 20H,AL 普通用户在使用系统资源时,不应该也没有必要去改变系统对8259A的初始化编程设定。

121 8259A的读出操作: 可以读出四个方面的内容 读“中断状态字”(“查询字”): 先写入P=1的OCW3查询命令字
用偶地址读(IN AL,20H) 读IRR: 先写入OCW3(RR=1,RIS=0) 读ISR: 先写入OCW3(RR=1,RIS=1) 随时可用奇地址读IMR (IN AL,21H)

122 例1: IN AL,21H ;读IMR AND AL,7FH ;开放IR7中断 OUT 21H,AL 例2: IN AL,21H ;读IMR OR AL,80H ;关闭IR7中断

123 A 应用举例 A 在IBM PC/XT 中的应用 IBM PC/XT 微型计算机只用一片8259A 作为整个系统的中断控制器,可连接8个外部中断源,其连线结构、中断源名称、中断类型码的情况如图13.18及表13-3所示。

124 图13.18 8259A在IBM PC/XT中的连线结构 IRQ0 IR0 IRQ1 日时钟定时器 IR1 IRQ2 键盘 IR2 IRQ3
INT ____ INTA IRQ0 IRQ1 IRQ2 IRQ3 IRQ4 IRQ5 IRQ6 IRQ7 日时钟定时器 键盘 保留 串行通信口1 串行通信口2 硬磁盘 软磁盘 打印机 8086/8088 CPU INTR

125 A 在IBM PC/AT中的应用 系统中的外部可屏蔽中断源除IBM PC/XT 的7个中断源外,还有实时时钟、INT 0AH、80287协处理器和第二硬盘等。 外部中断源数大于8 个,所以系统中采用两片8259A组成中断系统。 其中主片8259A的功能与上面介绍的IBM PC/XT中的8259A功能相同,而从片8259A则负责管理系统中增加的中断源,从片的中断请求信号INT和主片8259A的IR2(PC/XT中保留备用)输入端相连。 主片和从片的CAS0~CAS2依次连接,但此时主片8259A的CAS0~CAS2 作为输出,而从片8259A的CAS0~CAS2则作为输入。

126 IBM PC/AT 中的2片8259A的连接结构如图13.19所示。
主片采用“特殊全嵌套方式”,从片采用“全嵌套方式”。系统的中断优先级队列为: IRQ0>IRQ1>IRQ8>IRQ9>IRQ10…IRQ15>IRQ3>IRQ4>IRQ5>IRQ6>IRQ7 主片 从片 主片

127 图13.19 8259A 在IBM PC/AT中的应用 80286 CPU ____ INTA INTR 8259A (主片) IR0
IRQ0 IRQ1 IRQ3 IRQ4 IRQ5 IRQ6 IRQ7 日时钟 键盘 串行通信1 串行通信2 硬磁盘 软磁盘 打印机 (从片) INT CAS0 CAS1 CAS2 IRQ8 IRQ9 IRQ10 IRQ11 IRQ12 IRQ13 IRQ14 IRQ15 保留 实时时钟 INT 0AH 80287 硬盘 ___ SP +5V IRQ2

128 中断向量的设置和获取 (1)设置中断向量 把由AL指定的中断类型的中断向量DS:DX放置在中断向量表的相应位置中。 (2)取中断向量
预置: AH=25H 执行:INT 21H AL=中断类型号 DS:DX=中断向量 (2)取中断向量 把由AL指定的中断类型的中断向量从中断向量表中取到ES:BX中 预置: AH=35H 执行:INT 21H 返回: ES:BX=中断向量

129 例:使用DOS功能调用存、取中断向量 MOV AL,N; type N Interrupt
MOV AH,35H; get Interrupt vector INT 21H; PUSH ES; save the old base and PUSH BX; offset of interrupt N PUSH DS; MOV AX,SEG INTHAND; MOV DS,AX; base of INTHAND in DS MOV DX, Offset INTHAND; offset in DX MOV AL, N; MOV AH, 25H; Set Interrupt Vector POP DS;

130 POP DX; restore the old offset
POP DS; and base of interrupt MOV AL,N; MOV AH,25H; set interrupt vector INT 21H; RET ; return INTHAND: … Interrupt Processing Routine IRET

131 中断实验 参考程序 DATA SEGMENT MESS DB `THIS IS A IRQ7 INTRUPT !`,0AH,0DH,`$`
中断实验 参考程序 DATA SEGMENT MESS DB `THIS IS A IRQ7 INTRUPT !`,0AH,0DH,`$` DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX, CS MOV DS, AX ;set up ds to same as cs MOV DX,OFFSET INT7 MOV AX, 250AH INT 21H IN AL, 21H AND AL, 7FH OUT 21H, AL MOV CX, 10 STI HERE: JMP HERE

132 INT7: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MESS MOV AH,09 INT 21H
MOV AL,20H OUT 20H,AL LOOP NEXT IN AL,21H OR AL,80H OUT 21H,AL STI MOV AH,4CH INT 21H NEXT: IRET CODE ENDS END START

133 第13章 作业 1. 画出在单步运行时(TF=1)发生INTR中断的处理流程及堆栈的情形。假定当前指令下一条指令的地址为4030H:2080H;INTR中断服务程序的入口地址为9080H:3020H. P475 第7题 P475 第8题 (将题中的0BH 改为 0FH)


Download ppt "第 13 章 中断系统."

Similar presentations


Ads by Google