Presentation is loading. Please wait.

Presentation is loading. Please wait.

第8章 中断技术 8.1 概述 8.2 中断处理过程 8.3 中断优先级和中断嵌套 8.4 可编程中断控制器Intel 8259A.

Similar presentations


Presentation on theme: "第8章 中断技术 8.1 概述 8.2 中断处理过程 8.3 中断优先级和中断嵌套 8.4 可编程中断控制器Intel 8259A."— Presentation transcript:

1 第8章 中断技术 8.1 概述 8.2 中断处理过程 8.3 中断优先级和中断嵌套 8.4 可编程中断控制器Intel 8259A

2 8.1 概 述 一、 中断的基本概念 引入中断技术 查询方式使CPU的效率降低。
8.1 概 述 一、 中断的基本概念 查询方式使CPU的效率降低。 多个外设进行I/O操作时,当实时性要求较高,CPU有可能因来不及响应而造成数据丢失。 引入中断技术

3 什么是中断? 所谓中断,是指计算机在正常执行程序的过程中,由于某非预料事件的发生使CPU暂时停止当前程序的执行,而转去执行相关事件的处理程序,结束后又返回原程序继续执行,这样的一个过程就是中断。 中断提高了CPU的工作效率,能实现: 分时操作(CPU与外设并行工作) 实时处理 故障处理

4 中断的到来是随机的 非预料事件是指事件发生的时间无法预知, 即中断源何时产生中断不确定,是随机的。
但事件的性质及处理方法则是已知的, 确定的, 即中断服务程序是事先编写好的,只是何时执行未知。 中断源产生中断的随机性, 使中断服务程序的执行也具有随机性, 即何时执行中断服务程序不是在程序中安排好的。

5 中断源 引起中断的因素很多, 将发出中断申请的外设或内部原因,称为中断源。 8086中断源: ①内部中断:执行INT n 指令时产生中断。
②外部中断:如外设(I/O)设备向CPU提出中断申请,使INTR=1。

6 中断服务程序 处理中断源事务,完成其所要求功能的程序, 称中断服务程序(中断子程)。 CPU执行流程 非预料事件1 中断服务程序1
中断服务程序2 非预料事件2 非预料事件1

7 断点和中断现场 断点: 是指CPU执行的现行程序被中断时的下一条指令的地址, 又称断点地址。 中断现场:
是指CPU转去执行中断服务程序前的运行状态,包括CPU内部各寄存器、断点地址等。

8 断点概念: 1000:150H 地址1000:150H为断点 CPU在执行此指令时, 某中断源发申请中断; CPU在执行完该指令后,
、、 MOV AX, 0 ADD AX, DX MOV [ DI ], AX PUSH AX IRET 断点概念: CPU在执行此指令时, 某中断源发申请中断; CPU在执行完该指令后, 转去执行中断子程 1000:150H 地址1000:150H为断点

9 中断申请 中断源的功能:在需要时,向CPU发出中断申请INTR=1,直至CPU响应中断INTA=0 后撤销中断申请。
Intel 8088/8086的二种硬件中断申请:可屏蔽中断申请和非屏蔽中断申请 1、可屏蔽中断申请INTR 用户可以使用编程手段(STI、CLI指令),使CPU处于“开中断”或“关中断”状态。CPU只有在”开中断” 状态下才能响应外设通过INTR可屏蔽中断线提出的中断申请。 2、非屏蔽中断申请NMI 用户无法使用编程手段控制。只要NMI=1,CPU在当前指令运行结束后,马上响应NMI非屏蔽中断申请。

10 中断系统的功能( 8086/8088系统) 1、中断响应和返回 中断响应:中断屏蔽、断点和标志保护(CS、IP、PSW)、转向中断服务程序。
中断返回:断点和标志恢复(PSW、IP、CS)、转向主程序。 2、优先权排队 多个中断源同时申请中断时,根据预先安排的各中断源预先级别,首先响应级别高的中断源;待中断服务结束后,再响应级别稍低的中断源。 3、中断服务嵌套 在低级中断源服务过程中,若有高级中断源申请,CPU中断低级别中断服务程序;响应高级别中断申请,并服务;待高级别中断服务结束后,再继续执行低级别中断服务。

11 最简单的中断情况 只有一个中断源时中断的情况(指外部硬件可屏蔽中断)。 1. CPU响应中断的条件 1) 外设有中断请求且未屏蔽 外设发中断请求信号,且一直保持到CPU响应中断后才被清除;外设接口电路中的中断屏蔽触发器,允许中断源发出的中断请求信号送往CPU,如图8.1所示。

12 图8.1 最简单的中断情况

13 2) 中断是开放的 当CPU内部中断允许触发器为“1” 时,中断是开放的,CPU能响应中断请求引脚(INTR)送来的中断请求;反之,CPU不响应。 这个中断允许触发器的状态可以用STI和CLI指令来改变。如CPU复位时处于中断关闭状态,必须用STI指令来让中断开放。 3) 中断请求的检测 CPU在每条指令执行的最后一个时钟周期,检测其中断请求引脚(INTR)有无中断请求信号。如果有中断请求信号,就把内部的中断锁存器置“1”,在下一个总线周期到来时,进入中断响应状态。

14 2. CPU对中断的响应 1) 关中断 8086CPU在发出中断响应信号的同时内部自动关中断。 2) 保护断点和现场 把当前断点地址压入堆栈,为中断返回作准备。在中断服务程序中将要保存的现场信息(各寄存器的内容)压入堆栈。 3) 给出中断入口地址,转入相应的中断服务程序 8086CPU由中断源给出的中断向量,形成中断服务程序的入口地址,转入中断服务程序。

15 4) 恢复现场 当CPU完成相应的中断服务后,利用中断服务程序,将原来保存的现场信息从堆栈弹出,恢复CPU内部各寄存器的内容。 5) 开中断与返回 在中断服务程序的最后,为使CPU能再次响应新的中断请求,执行开中断操作,同时安排一条中断返回指令返回断点处(如从堆栈中弹出断点地址到IP、CS),恢复原程序的执行。

16 二、 中断分类 8086/8088可以处理256种不同的中断,每个中断都有一个中断类型码以供CPU进行识别。这些中断又可分为外部中断和内部中断两大类。 非屏蔽中断请求 中断逻辑 INT n 指令 INTO 除法 出错 单步 (TF=1) 断点 中断 CPU NMI 8 2 5 9 A IRQ0 IRQ1 IRQ2 IRQ3 IRQ4 IRQ5 IRQ6 IRQ7 INTR 8086/8088的中断源

17 外部中断源: 引起中断的原因是处理机的外部设备。如外设的I/O请求、定时时间到、设备故障、电源掉电等都是外部中断源。 内部中断源: 中断源在微处理器内部。如计算溢出、中断指令的执行、程序调试中指令的单步运行等都是内部中断源。 已定义的内部中断有下面的5个。

18 (1) 除法错中断。执行除法指令时,除数为“0”或商超过寄存器所能表达的最大值,则无条件产生该中断。中断向量码(类型号)为0。
(2) 单步中断。该中断是在调试程序过程中为单步运行程序而提供的中断。当设定单步操作时,标志寄存器的TF=1,这样使CPU执行完一条指令就产生该中断。中断向量码为1。

19 (3) 断点中断。该中断在调试程序过程中为设置程序断点而提供的中断。执行INT 3指令或设置断点可产生该中断。中断向量码为3。
(4) 溢出中断。在算术运算程序中,若在算术运算指令后加入一条INTO指令,则INTO指令将测试溢出标志OF。当OF=1(运算溢出),该中断发生。中断向量码为4。 (5) 软件中断。执行软件中断指令INT n 即产生该中断,n为中断向量码。 软件中断由程序设定,没有随机性,且不受中断允许标志位IF的影响。

20 8.2中断处理过程 一、CPU响应中断过程 中断处理一般需要经历下述七个过程。 1) 中断请求
内部中断源:通过CPU内部特定事件的发生或特定指令的执行作为对CPU的中断请求。 2) 中断响应 CPU接受中断请求就称为中断响应。每条指令的最后一个时钟周期检测是否有中断请求。 内部中断源:CPU会无条件响应。 外部中断源:只有在满足响应条件时,CPU才会响应其中断请求。

21 3) 断点、现场保护 为了使CPU在完成中断服务后能返回原程序继续执行,需要将原程序被中断处的相关信息(IP、CS、标志寄存器、其他寄存器内容)保存到堆栈中。 4) 中断源识别 系统中有多个中断源,中断请求时,通过中断优先权判别响应最高级别的中断请求,且中断源须自身提供其编码,供CPU进行识别,以便对其进行相应的服务。 5) 中断服务 每一个中断源都有其相应的服务程序,CPU识别中断源后,会取得其中断服务程序的入口地址,并转入该中断程序,进行相应的中断服务。

22 6) 断点、现场恢复 当CPU完成相应的中断服务后,将原来在中断程序中用软件保存的断点信息从堆栈弹出,恢复为中断前的内容。 7) 中断返回 在中断程序的最后,通过执行一条中断返回指令,将IP、CS及标志寄存器的内容从堆栈中弹出,使CPU返回到中断前的程序,并从断点处继续执行。

23 CPU对可屏蔽中断的响应示意图 恢复现场 IF=1 INTR=1 CPU 1、CPU发INTA同时,自动关中断 执行一条指令
指令结束 INTR=1 取下一条指令 执行主程序 CPU N 1、CPU发INTA同时,自动关中断 2、CPU自动将断点CS,IP,PSW入栈 3、CPU将中断源提供的中断类型码形成中断服务入口地址,送CS,IP 关中断 断点保护 转中断服务 CPU自动执行中断响应 执行PUSH指令 保护现场 开中断 中断服务 恢复现场 返回主程序 CPU 执行中断服务程序 用于中断嵌套。若无中断嵌套,可放在恢复现场前 执行POP指令 原PSW,IP,CS出栈,返回主程序

24 注意: 对于NMI请求,不必判断IF是否为1。 内部(软件)中断的特点:  没有随机性,中断类型码包含在指令中,或者是预先规定的;不受IF标志的影响。  不执行INTA总线周期;  除单步中断外(TF=0禁止),任何内部中断都无法禁止;  除单步中断外,任何内部中断的优先级都比任何外部中断的高。

25 二、中断向量表 8086采用矢量中断方法,每个设备有一中断服务入口地址(中断向量)。 1. 中断向量表 8086/8088在内存区的00000H~003FFH(1KB)建立一个中断向量表。用于存放与256个中断类型码(00H~0FFH)相应的中断服务程序入口地址。每个中断服务程序入口地址使用4个字节,低16bit为段内偏移量送IP,高16bit为段码送CS。 各中断服务程序入口地址的段地址和段内偏移量按中断类型号顺序存放在表中。因此由中断类型号n*4可得到相应中断服务程序入口地址的地址,取4n和4n+1单元中的内容(中断入口段内偏移量)装入指令指针IP,取4n+2和4n+3单元中的内容(中断入口段地址)装入代码段寄存器CS,即可转入中断服务程序。

26 中断服务程序入口地址表 中断服务程序入口地址表地址 =4×中断类型码
类型 0 类型 1 类型2 类型 3 类型 4 类型 5 类型63 I P CS 除数为零 单步(TF =1) 非屏蔽中断 断点中断 溢出(OF=1) 类型 28 000H 004H 008H 00CH 010H 014H 070H 0FCH CPU使用(5) DOS使用(59) 1/18.2S定时 类型 64 类型 65 类型66 类型 67 类型255 100H 104H 108H 10CH 3FCH 用户使用(192) 中断服务程序入口地址表 中断服务程序入口地址表地址 =4×中断类型码

27 中断类型号: 00H~04H :8086规定的专用中断 8H~FH: 八级硬件中断 5H和10H~1AH:基本I/O驱动程序、BIOS中调用 1BH和1CH:由用户设定;1DH~1FH指向三个数据区域。 20H~3FH:DOS操作系统使用 40H以后: 可由用户程序安排使用。

28 例:某中断的中断类型号为68H,其中断过程为:
INT H MOV AX,0 50 20 00 A0 001A0H 001A2H 001A4H 存放地址=68H*4 =1A0H (1) 计算存放中断服务程序入口地址的地址=68H*4=1A0H; 2050 A000 (2) 取中断入口地址的段内偏移量装入IP,IP=2050H , 段码装入CS,CS=A000H; STI PUSH DS IRET 中断服务程序 A000:2050 (3 ) 转向中断服务程序; (4 ) 中断返回

29 2. 中断入口地址的设置 IBM PC对256个中断类型已进行了地址分配,其中40H以后的中断类型号可供用户使用。供用户使用的中断类型号,可由用户定义为软中断,由INT n指令引用;可通过INTR端或通过中断控制器8259A引入可屏蔽的硬件中断。使用时用户要自己将中断服务程序入口地址置入相应的中断向量表内。 方法1:通过指令来设置 MOV AX,0 ;中断入口表 MOV ES,AX ;段地址送ES MOV DI,n*4 ;偏移量送DI MOV AX,OFFSET INTRAD CLD STOSW ;传送子程序偏移地址 MOV AX,CS STOSW ;传送子程序段地址 STI MOV AX,0 ;中断入口表 MOV ES,AX ;段地址送ES MOV BX,n*4 ;偏移量送DI MOV AX,OFFSET INTRAD MOV ES: [BX],AX MOV AX,SEG INTRAD MOV ES: [BX+2],AX STI

30 方法2:通过调用DOS功能来设置 MOV AL,n ;取中断入口 MOV AH,35H INT H PUSH ES ;存原中断入口 PUSH BX PUSH DS MOV AX,SEG INTRAD MOV DS,AX MOV DX,OFFSET INTRAD MOV AL,n ;中断类型号 MOV AL,25 ;设置中断入口 POP DS POP DX ;恢复原中断入口 MOV AL,n MOV AL,25 INT H RET 设置中断入口:把由AL指定中断类型号的中断入口DS:DX中放置在中断入口表中。 预置:AL=中断类型号 DS:DX=中断服务程序入口地址 AH=25H 执行:INT H 取中断入口:把由AL指定中断类型号的中断入口,从中断入口表中取到ES:BX中。 预置:AL=中断类型号 AH=35H 执行:INT H 返回: ES:BX=中断服务程序入口地址

31 3、 8086系统中断类型号的获取 对于外部中断,CPU是在每条指令执行结束时采样中断请求输入信号。 可屏蔽中断请求 (开中断),则CPU连续运行两个中断响应周期,在第二个中断响应周期中,采样数据线获取由外设输入的中断类型码。(可由8259A提供中断类型号) IBM PC及内有一片8259,中断类型号:08H—0FH 非屏蔽中断请求,则CPU不经过上述的两个中断响应周期,而在内部自动产生中断类型码2。 对于软件中断,中断类型码则自动形成,具体安排如下表所示。

32 软件中断类型码表 除法错中断 单步中断 1 NMI 2 断点中断 3 溢出中断 4 中 断 功 能 中断类型码 INT n指令 n

33 8086中断处理过程: (1) 将中断类型号乘4,并将其作为中断向量表的指针,使其指向中断处理程序的入口地址。 (2) 保存CPU状态,即把标志寄存器的内容入栈。 (3) 使TEMP=TF,清除IF和TF的状态标志位,屏蔽新的INTR和单步中断。 (4) 保存断点,即把CS和IP内容入栈。 (5) 从中断向量表中获取CS、IP,转入中断处理子程序入口地址。

34 (6) 将CPU内部各寄存器的内容入栈,开中断(允许中断嵌套),然后执行中断处理子程序,进行中断服务。当中断处理程序结束时,恢复被保存寄存器的内容,最后执行中断返回指令IRET。IRET指令将从堆栈中弹出IP、CS和标志寄存器的内容,此时,CPU结束中断处理子程序的运行,返回到被中断的主程序断点处继续执行。 8086/8088的中断处理过程可用流程图表示。

35 图8.6 8088的中断响应和处理流程 标志寄存器入栈 令TEMP=TF 清TF和IF CS、IP入栈 调用中断处理程序 当前指令
执行结束? 软件中断 NMI? INTR? TF=1? 执行下一条指令 形成中断 类型码 进入中断响应 取中断类型码 IF=1? 又有NMI? 执行用户中断过程 IP、CS出栈 标志寄存器出栈 返回被中断的主程序 IRET 图 的中断响应和处理流程

36 思考: 1、内部(软)和外部(硬)中断类型号怎样取得?中断向量如何设置?
2、CPU响应中断自动完成哪几件事?我们在编写中断服务程序时要注意什么问题? 3、响应中断后为什么要清IF、TF标志? 4、内部(软)和外部(硬)中断执行过程不同点与相同点? 5、软中断子程与子程序的编写类似,它们的不同点?

37 总结:8086CPU响应中断的过程 当中断源产生中断申请后, 不论是内中断、非屏蔽中断,还是可屏蔽中断,
只要满足响应条件,在执行完当前指令后, CPU内部硬件会自动完成下列响应中断的过程: ① 取中断类型号N ② 当前PSW的内容入栈 ③ 清IF、TF标志为0 ④ 当前CS的内容入栈 ⑤ 当前IP的内容入栈 ⑥ 取内存单元( 0 : N ×4 )字内容送IP 取中断子程 ⑦ 取内存单元( 0 : N ×4 + 2 )字内容送CS 入口地址 此时CS:IP指向中断程序的入口,开始执行中断程序。 保护现场、断点

38 清IF和TF以屏蔽外部其它中断请求,避免CPU以单步方式执行中断处理子程。
硬件、软件中断响应中断的过程一样,但硬件中断的到来具有随机性,软中断则没有此特点。 软中断子程与子程序的编写类似, 其不同点在于: 1、子程用CALL指令调用,中断子程用INT指令。 2、子程用RET指令返回,中断子程用IRET指令返回。 3、CALL指令直接用过程名做操作数,即由过程名提供子程的入口地址,INT指令由类型号N到中断向量表中固定的单元获得中断子程的入口地址。因此,应在主程中将中断子程的入口地址(中断向量) 放入中断向量表中。

39 三、CPU中断响应时序 中断请求信号有效,且CPU开中,则CPU在执行完当前指令后,响应中断,在响应中断时,CPU执行两个中断响应周期。 中断响应周期时序 在每一个中断响应周期,都给出中断响应信号INTA,第一个响应周期,使AD7~AD0浮空;第二个响应周期,被响应的外设应将中断类型号送到数据线上,以便CPU寻找该设备的服务程序的入口地址,转入中断服务。

40 8.3 中断优先级 一、用软件确定优先权(查询法) 电路结构:
中断优先级 问题:多中断源,一条INTR申请线 方法:按优先权处理;CPU先响应优先权级别高的中断源申请 一、用软件确定优先权(查询法) AB GH (D7) (D6) (D1) (D0) INTR DB 三态缓冲器 译码 RD M/IO .. 各外设 中断触发器输出 电路结构: 1、各中断源申请通过或门组合后与INTR连接。 2、各中断源情况通过缓冲器从DB输入。

41 查询法中断服务程序 IN AL,20H TEST AL,80H JNZ PWA TEST AL,40H JNZ PWB ……… DONE:…… PWA:…… …… JMP DONE PWB: …… JMP DONE 保护现场 输入各中断源 中断触发器状态 A申请 B申请 A外设服务 B外设服务 恢复现场 返回主程序 DONE Y N 查询法软件结构 所有外设共有一个中断服务程序。首先输入它们的中断申请情况,再依次查询每一个中断源申请情况;若是,则转入相应子程序服务。 查询法特点 查询次序就是优先权次序。 电路简单,但转入服务时间长。

42 二、 硬件优先权排队电路 工作原理 组成:8:3,比较器,逻辑电路,优先权寄存器 各外设 INTR 或 中断触发器输出 8:3优先权编码器
二、 硬件优先权排队电路 组成:8:3,比较器,逻辑电路,优先权寄存器 IR7 IR6 IR1 IR0 INTR 8:3优先权编码器 .. 各外设 中断触发器输出 优先权寄存器 CPU DB A2A1A0 B2 B1 B0 A>B 比较器 1 3 2 优先权失效 工作原理

43 1、中断申请8:3优先权编码器 将8个中断申请输入进行8:3编码
A2 A1 A0 若有多个中断申请,只输出优先权最高的编码 IR0 中断申请 IR1 中断申请 ……………… IR7 中断申请 中断优先权级别 2、优先权寄存器 由CPU通过DB输入正在中断服务的优先权级别编码B2、B1、B0。若CPU不处于中断服务状态,则优先权失效信号为 1 。 3、比较器 对A2、A1、A0与B2、B1、B0的编码比较。A>B,则输出为1,表示申请级别高于正在服务的级别。 4、逻辑电路 通过逻辑组合,在下列二种情况下,INTR=1 ①CPU在不处于中断服务时有中断申请 ②申请中断源的级别高于CPU在执行中断服务的级别。

44 8.4 可编程中断控制器Intel 8259A LIC(大规模集成电路)电路复杂,如何学习? 学习并应用的方法: 不强调内部原理的具体分析
侧重掌握其外特性:引脚的名称及定义 内部逻辑结构 功能的描述(控制字)及性能指标

45 一、 功能和引脚 主要功能: 1、8级优先权控制,通过级连可扩展到64级优先级控制; 2、每一级可由程序单独屏蔽或允许; 3、在CPU响应周期,可提供相应的中断类型码。中断类型码由 8259编程设定; 4、通过编程可设定多种工作方式。 8259A为28引脚双列直插式芯片,见下页引脚图。

46 8259A的外围引脚排列图

47 中断控制器8259A方框图 数据总线缓冲器 内部总线 控 制 逻 辑 读 / 写逻辑 优先权电路 在服务寄存器 ISR 级连缓冲 / 比较器
IR0 IR7 :: 中断请求寄存器 IRR 优先权电路 在服务寄存器 ISR 中断屏蔽寄存器 IMR 控 制 逻 辑 数据总线缓冲器 读 / 写逻辑 级连缓冲 / 比较器 INTA INTR DB RDWRA0 CS CAS0CAS1CAS2 SP / EN 内部总线

48 与CPU的DB连接,传送控制字、状态字和中断类型码等。
二、 内部结构 1、数据总线缓冲器 与CPU的DB连接,传送控制字、状态字和中断类型码等。 2、读写逻辑 通过RD、WR、CS、A0控制接收CPU的命令、发出8259的状态。 CS RD WR A0 D4 D 读写操作  写ICW1   写ICW2、 ICW3 、ICW4、OCW1 写OCW2 写OCW3 读IRR/ISR 读IMR 8259的读写功能

49 3、级联缓冲/比较器 (1)缓冲方式:在多片8259A级联的系统中,8259A通过总线驱动器和数据总线相联。在缓冲方式下,SP / EN与总线驱动器的允许端相连,控制总线驱动器的启动,当EN=0,8259A控制数据送到CPU,当EN=1,控制数据从CPU送到8259A。 (2)非缓冲方式:此时各8259A直接与数据总线相连。 SP / EN为输入端,当SP=1,该片为主片,当SP=0,该片为从片。主片与从片通过CAS0~CAS2级连。主片的INTR与CPU的INTR连接;从片的INTR作为主片的IR0~IR7输入。 由ICW4设置缓冲方式与非缓冲方式。

50 8259A的级联 CAS 1 2 INT IR 7 EN / SP +5 V INTA 8259A CPU 3 4 5 6

51 4、中断请求寄存器 IRR(8位) 存放中断请求信号,当IR0 ——IR7中的某个IR端有中断请求时,IRR相应的某位置1。当该中断被响应后, IRR相应的位被复位。优先权IR0最高,IR7最低。 外部设备产生中断请求有两种方式: 边沿触发方式(上升沿) 电平触发方式(高电平) 5、中断服务寄存器 ISR(8位) 存放正在服务的中断源级别,当某个中断被响应后,CPU发出第一个INTA信号,ISR中的相应位置“1”,一直被保存到该中断处理结束。当多重中断时,ISR的多位同时被置1。

52 6、中断屏蔽寄存器 IMR(8位) 用于存放对中断请求的屏蔽信息。软件编程使得IMR的某位为“1”时,相应IRR中的中断请求被屏蔽;若IMR的某位为“0”时,允许相应IRR中的中断请求进入中断优先级判别器。 IMR的各中断屏蔽位是独立的,屏蔽了优先级高的中断,不影响其它较低优先级的中断允许。 7、优先权电路(PR) 对IRR保持的各中断请求(已屏蔽的除外)进行优先权判别,并在CPU的中断响应周期将其送ISR。在出现多重中断时,由PR判定是否允许所出现的中断去打断正在处理的中断,让优先级更高的中断优先处理。 8、控制逻辑 向CPU输出INTR中断请求,接受CPU的中断响应信号INTA。

53 三、 8259A中断管理方式 8259A是可编程控制器,它根据CPU的命令进行工作。通过对控制字的编程控制,来初始化和控制8259A工作方式,使其完成规定的功能。CPU对8259A的控制命令分为两类:一类是初始化控制字(ICW) 4个,另一类是操作命令字(OCW) 3个。 编程分为两部分: 一、初始化编程 对8259A初始状态的设定,在计算机加电初始化时由BIOS完成的。 二、操作方式编程 控制8259A的工作方式,操作命令字可在8259A初始化后的任何时间写入。

54 Intel 8259A的工作方式 8259A通过编程可以设置各种工作方式,因而能适应不同系统环境的要求。 1.中断屏蔽方式 8259A有两种形式的屏蔽方式:一般屏蔽方式和特殊屏蔽方式。 1) 一般屏蔽方式 在正常情况下,当一个中断请求被响应时,8259A将禁止同级和较低优先级的中断请求,这就是一般屏蔽方式。

55 2) 特殊屏蔽方式 在一些特殊的场合,如需要均等服务,此时就需要对中断的优先权进行动态管理,一般屏蔽方式就不能满足要求。另外,如果一个高级别的中断源持续中断请求,就会使某些优先级较低的中断源长时间得不到服务,等等。这就是引入特殊屏蔽方式的原因。在特殊屏蔽方式下,使用OCW1让某个屏蔽位置位时,就禁止在这一级上再次产生中断,而允许其他较高或较低的未屏蔽的优先级产生中断。这样通过OCW1对IMR的操作控制,就可以有选择地允许或禁止某些中断。特殊屏蔽方式由OCW3来设置,当ESMM=1、SMM=1时就可设置此种方式;当ESMM=1、SMM=0时即可清除。

56 2. 查询方式 8259A也可以用查询方式来检查请求中断的设备。当CPU关中断时,中断输入信号将不起作用,那么对设备的服务就可通过软件查询来实现。查询命令是通过OCW3中P=1发出的,8259A接到查询命令后,把随后的一次CPU读操作当作中断响应信号,如果有中断请求,就把ISR相应的位置位,并读出该中断级别,如图8.17所示。从发出查询命令的写脉冲开始,到读出查询结果的读脉冲为止,这段时间里中断被“冻结”。其中,I为有无中断的标志,当I=1时,W2~W0为请求中断服务的最高优先权中断源的二进制编码。

57 查询方式读出的中断状态字

58 3. 优先级方式 8259A对优先级的控制是通过操作命令字OCW2来设置的,它有两种优先级方式: 1) 固定优先级方式 当8259A初始化完成后,就为固定优先级方式,即8个中断请求的优先级从高到低依次为:IR0→IR1→IR2→IR3→IR4→IR5→IR6→IR7,且顺序固定不变。

59 2) 循环优先级方式 循环优先级方式是将8个中断源IR0~IR7按固定顺序构成一个闭合的环,具体有两种实现方法。 (1) 自动优先级循环。该方法规定刚被服务过的中断源优先级最低,其他中断源的优先级将依闭合环顺序变化。例如,CPU对IR3中断服务结束后,8259A的8个中断源优先顺序由高到低为IR4、IR5、IR6、IR7、IR0、IR1、IR2、IR3。这种工作模式可通过OCW2来设置。

60 (2) 指定循环优先级。 该方法规定在OCW2中指定的中断源优先级最低,其他中断源的优先级将按闭合环顺序变化。例如,设置OCW2的R=1,SL=1,EOI=0,则OCW2中L2~L0所对应的中断源级别最低。假如L2L1L0编码为010,即指定IR2的优先级最低,8个中断源的优先级顺序将变为:IR3、IR4、IR5、IR6、IR7、IR0、IR1、IR2。 另外,优先权也可以在执行EOI命令时进行改变,只要设置OCW2的R=1,SL=1,EOI=1,同样也使OCW2中L2~L0所对应的中断源级别最低。 循环优先级控制使8259A在中断控制过程中可以灵活地改变各中断源的优先顺序,使每个中断源都有机会得到及时的服务。

61 4. 嵌套方式 嵌套方式用来进行优先级控制,8259A的嵌套方式有两种形式。 1) 全嵌套方式(一般嵌套方式) 在8259A初始化完成后,就处于固定中断优先权方式。 全嵌套方式是指当CPU正在对某中断源进行服务时,将会屏蔽同级或更低级中断源的中断请求,只有优先权比它高的中断源的中断请求才能被响应(CPU已开中断)。 这种方式一般用在单片使用8259A或级联方式下的从属8259A上。

62 2) 特殊全嵌套方式 8259A以级联方式工作时,要求主控制器8259A在对一个从属8259A送来的中断进行服务的过程中,还能够对同一个从属8259A上另外的中断源进行中断服务,这就需要采用特殊的全嵌套模式。特殊全嵌套方式是为实现多重中断而专门设置的,这种方式与全嵌套方式的工作情况基本相同,不同点有以下两个方面。 (1) 在级联方式下的主控制器8259A上,它允许同级优先权之间中断。这样,如果CPU响应了从属8259A某一中断源的中断请求后,这个从属8259A上优先权高于正在服务的中断源,另一个中断请求也可以得到响应。

63 (2) 如果主控8259A的某一端接有从属8259A,这个中断源要退出中断服务程序前,必须检查它是否是这个从属8259A中唯一的中断源,只有在唯一的情况下才能送一个EOI命令至主8259A,以结束此从属8259A的中断。检查的办法是送一个一般EOI命令给从属8259A,当它的ISR为0时,说明它的中断源是唯一的。

64 5. 中断结束方式 8259A中的内部服务寄存器ISR用来记录正在被CPU服务中断源,当中断结束时,必须清除ISR的相应位。8259A有两种中断结束方式。 1) 自动结束方式(AEOI) 这种方式不需要EOI命令,对8086/8088系统,8259A在第2个INTA脉冲的后沿自动执行使ISR的相应位复位。由于这种方式在中断服务过程中使ISR相应位复位,就有可能响应优先级更低的中断,因此不适合有中断嵌套的情况。

65 2) 非自动结束方式(EOI) 这种方式是在中断处理程序中提供一条EOI(中断结束)命令,使8259A中的ISR相应位复位。如果是级联方式,则必须送两个EOI命令,第一个先送从属8259A,第二个送主控8259A,特别是在特殊嵌套的情况下,必须按此次序发送。 EOI命令由OCW2来设置,有两种形式。 (1) 一般中断结束命令(EOI)。 该命令对正在服务的中断源的ISR复位。当8259A工作在全嵌套方式时,且刚被CPU服务的中断源优先级最高,此时就可以使用该命令对正在服务的中断源的ISR复位。一般EOI命令通常放置在中断返回指令之前。

66 (2) 特殊中断结束命令(SEOI)。该命令对指定中断源的ISR复位。在特殊的全嵌套方式下,8259A可能无法确定刚被服务过的中断源的级别,此时就可用SEOI命令,通过OCW2中的L2~L0来指定ISR中要复位的位。但如果该位在特殊的屏蔽模式中由IMR屏蔽,则不能使用SEOI命令。

67 6. 读8259A的状态 CPU可以读出8259A内部的IRR、ISR、IMR寄存器的状态,以便进行有关分析处理。 1) 读中断请求寄存器IRR IRR中保存着申请中断的各输入级。若A0=0,OCW3的RR=1、RIS=0,则可用读命令读取IRR的状态。若输出一个OCW3,令其中RR=1、RIS=1,则用读命令可以读入中断服务寄存器ISR的状态,其中既可以看到在服务过程中中断源的情况,也可以看到是否处于中断嵌套的情况。

68 2) 读中断服务寄存器ISR ISR的内容为正在服务的各个中断优先级,在中断响应或中断结束命令EOI时,ISR的内容被修改。使A0=0,OCW3的RR=1、RIS=1,则可用读命令读取ISR的状态。 3) 读中断屏蔽寄存器IMR IMR内容是被屏蔽的各中断请求级。当A0=1时,则可用读命令读取IMR的状态。

69 四、8259A的编程方法 ICW1 ICW2 ICW3 ICW4
系统复位后,由初始化程序对8259置入初始化命令字ICW。初始化后可通过发出操作命令字OWC来定义8259A的操作方式,实现对8259A的控制。初始化命令字只发一次,操作命令字可以重置,以动态改变8259A的操作与控制方式。 ICW1 ICW2 级联方式 ICW3 需要ICW4 ICW4 N(SNGL=1) Y(SNGL=0) Y(IC4=1) N(IC4=0) 1. 初始化命令字 初始化命令字有四个ICW1、 ICW2、 ICW3、 ICW4,首先输入ICW1,然后输入ICW2、 ICW3、 ICW4,由ICW1决定是否输入ICW3、 ICW4。

70 初始化命令字ICW1写入后,8259内部完成初始化过程: (1)清除ISR和IMR寄存器; (2)指定中断优先级R0 R7;
(3)从方式的地址置成7; (4)特殊屏蔽方式复位; (5)自动EIO循环方式复位;(6)边沿触发器复位。 IC4 SNGL ADI * 1 LTIM A0 D7 D6 D5 D4 D D D D0 ICW1 0=边沿触发方式(上升沿) 1=电平触发方式 (高电平) 1 不写ICW4 8088/8086不用 标志位 写ICW4 1 级联,写ICW3 单片,不写ICW3 =0(不用)

71 1 ICW2 8259A输送的中断向量 D7 D6 D5 D4 D3 D2 D1 D0 A11 /T3 A0 A10 A15 /T7 A14
自动填入 D D D D D D D D0 IR T T T T T IR T T T T T IR T T T T T IR T T T T T IR T T T T T IR T T T T T IR T T T T T IR T T T T T 8259A输送的中断向量

72 S2/ID2 1 S5/0 S4/0 S3/0 S7/0 S6/0 S1/ID1 S0/ID0 ICW3
8259A在级联工作方式(SNGL=0)时,要写入ICW3,它规定本8259为主设备,还是从设备。 S2/ID2 1 S5/0 S4/0 S3/0 S7/0 S6/0 A0 D7 D6 D5 D4 D D D D0 S1/ID1 S0/ID0 ICW3 (1)工作在主设备 8259A作为主设备,SP/ EN接高电平,或缓冲方式ICW4的M/S=1时,S0---S7表明从设备接在IR0——IR7的哪一根线上,接有从设备的IR端对应的S位为1,未接从设备的IR端对应的S位为0。 (2)工作在从设备 8259A作为从设备时,SP/ EN接低电平,或缓冲方式ICW4的M/S=0时,ID0---ID2表明从设备接在主设备的哪一根IR线上, ID0---ID2用编码表示IR0——IR7的8根线。

73 PM AEOI M/S 1 SFNM BUF ICW4
SFNM BUF A0 D7 D6 D D D D D D0 ICW4 0= 全嵌套方式 1= 特殊全嵌套方式 1 正常EOI方式 自动结束中断方式 1 选用8085 选用8088 全嵌套方式:高级中断可打断正在处理的中断,优先处理更高级的中断。 特殊全嵌套方式:对于级联方式,主8259A把从同一从8259A来的不同级别的中断请求认为是同级的,而不予以响应。在8259A级联时,若主片处于特殊全嵌套方式就允许对相同级别的中断请求开放。 0  1 0 1 1 = 非缓冲方式,此时若用级联, 由SP/ EN确定主从设备。 = 缓冲方式,本机为从机。 = 缓冲方式,本机为主机。

74 例:在IBM PC机中,ROM BIOS中的8259初始化程序为:
mov al,13h ; 单片,上升沿触发 out 20h,al mov al,08h ;中断类型号基值为08h out 21h,al mov al,09h ;缓冲,非自动结束 若开机初始化程序不符合要求,应从ICW1重新开始一遍初始化。

75 M0 1 M7 M6 M5 M4 M3 M2 M1 OCW1 L0 R SL EOI L2 L1 OCW2
2. 操作命令字 8259A有3个操作命令字,必须在初始化之后才能设置,根据需要由CPU写入8259A,写入顺序不限。 M0 1 A0 D7 D6 D5 D4 D D2 D1 D0 M7 M6 M5 M4 M3 M2 M1 OCW1 中断屏蔽字:1=屏蔽中断; 0 = 允许中断 OCW2----控制8259A的中断结束和优先级循环方式的命令 L0 A0 D7 D6 D5 D4 D D2 D1 D0 R SL EOI L2 L1 OCW2 当SL=1时(特殊方式),L2~L0有效。

76 R SL EOI 操作 正常EOI中断结束命令 特殊EOI中断结束命令 正常EOI时循环命令 自动EOI时循环置位命令 自动EOI时循环复位命令 特殊EOI时循环命令 优先级设定命令 无操作 R、SL、EOI编码表 L2 L1 L IR IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 L2、L1、L0编码表 (1)中断结束命令 普通EOI结束方式:8259A收到EOI结束命令后,自动将ISR中级别最高的置“1”位清“0”。

77 特殊EOI结束方式:正常EOI是自动清除级别最高的ISR位,而特殊EOI则清除有L0—L2指定的ISR位。
自动AEOI结束方式:某中断被响应后,ISR对应位被置1,但CPU在中断响应的第二个脉冲将ISR的对应位清0。此时,尽管CPU对某个外设正在进行中断服务,但在8259A中无指示,低级别的中断可打断高级中断,产生重复嵌套,嵌套深度无法控制。 在级联方式下,一般用非自动结束方式,中断结束时,要发两次中断结束命令,一次是对主片,另一次是对从片发的位。

78 (2)优先级设定命令 IR7 7 IR6 6 IR5 5 IR4 4 IR3 3 IR2 2 IR1 1 IR0 默认优先级 优先级循环 特殊循环(特定优先级):由编程设定最低优先级,从而规定了所有其它的优先级。例:若设定IR3对应的设备优先级最低,则IR4对应的设备优先级最高。 (3)优先级循环 自动循环(设备优先级相等):一个设备受到服务后,优先级变得最低,原优先级比它低一级的设备的优先级变得最高。

79 OCW3----特殊屏蔽方式和查询方式的命令
RIS A0 D D D5 D4 D3 D2 D1 D0 * ESMM SMM 1 P RR OCW3 0* :无效 10:特殊屏蔽方式复位 11:特殊屏蔽方式置位 标志位 1:查询8259A状态 0:不查询 0* :无效 10:下次RD有效读IRR 11:下次RD有效读ISR

80 五、8259的中断级联 从8259 1# 从8259 2# 主8259 地址总线(16) 控制总线(8) 数据总线(8) Vcc GND
CS A0 D7-D0 INTA INT CAS0 CAS1 CAS2 SP/EN IR7 IR IR0 从8259 1# 从8259 2# 主8259 GND Vcc 地址总线(16) 控制总线(8) 数据总线(8)

81 例:某中断级联系统,从片的INT端接主片的IR3,主片从IR1、IR3引入两个中断请求,中断类型号为31H、35H。中断服务程序的段基址为1000H,偏移量分别为2000H、3000H。从8259的IR4、IR5引入两个中断请求,中断类型号为44H、45H。中断服务程序的段基址为2000H,偏移量分别为3600H、4500H。 RD WR CS A0 D7--D0 INTA CAS0 CAS1 CAS2 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 INT SP/EN 从8259 SP/EN IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 主8259 INT 外部中断请求

82 (1)中断入口地址写入中断向量表 00 20 10 30 45 36 00116 00114 00112 00110 000D6 000D4 000C4 000C6 IP CS 31 35 44 MOV AX,1000H ;送段地址 MOV DS,AX MOV DX,2000H;送偏移地址 MOV AL,31H MOV AH,25H INT H MOV DX,3000H MOV AH,35H INT H MOV AX,2000H MOV DS,AX MOV DX,3600H MOV AL,44H MOV AH,25H INT H MOV DX,3000H MOV AH,35H INT H

83 (2)主片8259A初始化编程(端口地址FFC8H,FFC9H)
MOV AL,11H ;ICW1,级联,边沿触发 MOV DX,0FFC8H; OUT DX, AL MOV AL,30H ;ICW2,确定中断类型号 MOV DX,0FFC9H; OUT DX, AL MOV AL,08H ;ICW3,IR3端接从INT端 OUT DX, AL MOV AL,11H ; ICW4,特殊嵌套,非缓冲方式 OUT DX, AL MOV AL,0D5H ;OCW1,允许IR1,IR3,IR5中断 OUT DX, AL MOV AL,20H ; OCW2,普通EOI结束方式 MOV DX,0FFC8H; OUT DX, AL

84 (3)从片8259A初始化编程(端口地址FFC8H,FFC9H)
MOV AL,11H ;ICW1,级联,边沿触发 MOV DX,0FFCAH; OUT DX, AL MOV AL,40H ;ICW2,确定中断类型号 MOV DX,0FFCBH; OUT DX, AL MOV AL,03H ;ICW3,从片接主片的IR3端 OUT DX, AL MOV AL,01H ; ICW4,完全嵌套,非缓冲方式 OUT DX, AL ;非自动EOI结束方式 MOV AL,0CFH ;OCW1,允许IR4,IR5中断 OUT DX, AL ; MOV AL,20H ; OCW2,普通EOI结束方式 MOV DX,0FFCAH; OUT DX, AL

85 作业 P 303 4、7、8、9


Download ppt "第8章 中断技术 8.1 概述 8.2 中断处理过程 8.3 中断优先级和中断嵌套 8.4 可编程中断控制器Intel 8259A."

Similar presentations


Ads by Google