《第7章中断控制器(改版)课件.ppt》由会员分享,可在线阅读,更多相关《第7章中断控制器(改版)课件.ppt(54页珍藏版)》请在三一办公上搜索。
1、第7章 中断控制器,2023/3/28,2,7.1 中断基本概念,一、中断和中断源,2023/3/28,3,7.1 中断基本概念,中断 CPU接到请求,暂停正在执行的程序而转向请求的处理程序,处理结束后又回到被中止的程序继续执行,这一过程称中断;中断源的分类;内部中断:由处理器内部产生的中断;外部中断:外部设备在中断申请引脚上产生的中断;可屏蔽中断与不可屏蔽中断 可屏蔽中断:能被处理器屏蔽掉而不被响应的中断(INTR)。不可屏蔽中断:不能被处理器屏蔽掉的中断(NMI)。,二、中断的处理过程,2023/3/28,4,7.1 中断基本概念,中断请求 在INTR上外设给出高电平,1)持续到被CPU响
2、应;2)CPU响应后及时撤消。中断承认(中断响应的条件)满足下列条件进入中断响应周期:a,INTR有中断请求;b,IF=1开中断;c,无RESET、HOLD和NMI或更高级的中断;d,一条指令执行结束。,中断响应,2023/3/28,5,7.1 中断基本概念,(1)关中断:CPU硬件自动清IF(关中断,禁止其它中断)。(2)断点保护:CPU硬件自动将PSW、CS、IP依次压栈,以便中断结束能 够返回断点。(3)中断源识别:1)软件查询(软件做)2)中断向量表(硬件自动做)软件查询方法:CPU收到INTR 读入D0D7 测试哪一位 确 定中断源 对其中断服务。,2023/3/28,6,7.1 中
3、断基本概念,中断响应(1)保护现场:断点保护未保护的&主程序用的&中断服务也用的 寄存器 堆栈(2)开中断(指令STI):采用软件查询方法的中断源识别。(3)中断服务:对中断事件的处理。(4)关中断(指令CTI)(5)现场恢复:保护现场的逆过程,堆栈 寄存器(6)开中断(指令STI):允许新的中断。(7)中断返回(指令IRET):从堆栈中依次弹出IP、CS、PSW,返回 原断点处,断点保护逆过程。,2023/3/28,7,7.1 中断基本概念,多个中断源同时请求中断,先响应中断优先级高的中断优先级 根据各中断源的重要性确定其响应的优先次序。中断优先级控制原则:(1)多个同时请求,先响应高优先级
4、,再响应低优先级;(2)当CPU执行某中断服务程序时,出现新的高优先级请求 中断,则:暂停低 处理高,高服务结束返回低,继续 低服务。,三、中断优先级及中断嵌套,2023/3/28,8,7.2 8086/8088的中断系统,一、中断源,2023/3/28,9,7.2 8086/8088的中断系统,二、中断优先级除法错、INT n、INTO优先级最高NMI次之INTR较低单步最低,三、中断源识别,中断类型码 每一中断都有一个表示中断源编号的8位二进制数称中断类 型码(号),从0255,共256个。,2023/3/28,10,7.2 8086/8088的中断系统,中断向量 每一中断类型码对应一个中
5、断向量,该中断向量指明了该类型码所对应的中断服务程序的入口地址中断向量表 8086/8088系统将内存前1024个单元作为中断向量表,存放256个中断向量,每一中断向量占4个单元,前二字节是中断服务程序入口地址的偏移地址,后二字节是段地址。中断向量表地址:4*中断类型码n。中断向量表的中断源识别方法(1)CPU收到中断请求 获取中断类型码 查中断向量表 得到该中断源的中断服务子程序入口地址 转向服务子程序进行中断服务,2023/3/28,11,7.2 8086/8088的中断系统,(2)查表方法:中断类型码n*4(左移2位)得到表地址从表地址所指单元连续取4个字节数据得到IP、CS该CS:IP
6、即为该中断源的中断服务子程序入口地址,2023/3/28,12,7.2 8086/8088的中断系统,【例7.2】设用户自定义中断的类型号为24H,已编好的中断服务子程序为ISUB,试完成中断向量表初始化。解:中断向量表存放首地址为24H4,中断服务子程序段地址为SEG ISUB,偏移地址为OFFSET ISUB。所以中断向量表初始化程序段如下。MOV AX,00HMOV DS,AX;向量表段地址置0000HMOV BX,24HSHLBXSHLBX;向量表存放首址MOV AX,OFFSET ISUB;中断服务程序入口偏移MOV BX,AX;偏移地址存入向量表MOV AX,SEG ISUB;中断
7、服务子程序MOV BX+2,AX;段地址存入向量表,2023/3/28,13,7.2 8086/8088的中断系统,四、中断响应过程,不可屏蔽中断NMI(1)上升沿提出中断请求。(2)不受IF=0的影响。(3)不要中断响应总线周期,自动进入中断类型2。(4)其它同INTR。内部中断(1)中断类型号或是指令码给出,或由硬件决定,都不要中断响应总线周期。(2)不受IF控制,但单步中断受TF控制。(3)其它同INTR,但要考虑优先级,2023/3/28,14,7.2 8086/8088的中断系统,五、中断与中断返回指令中断指令 INTO 测试OF,若OF=1执行中断,否则不操作。INT n 执行中断
8、类型号为n的中断,n=00HFFH。(1)断点保护:SP-2 SP,PSW SP+1:SP;清PSW的 IF与TF;SP-2 SP,CS SP+1:SP;SP-2 SP,IP SP+1:SP。(2)中断源识别与跳转:n*4+1:n*4 IP;n*4+3:n*4+2 CS;程序将自动跳转到CS:IP处执行该中断服务子程序中断返回指令:IRET 执行中断返回时,CPU自动做恢复断点:SP+1:SP IP,SP+2 SP;SP+1:SP CS,SP+2 SP;SP+1:SP PSW,SP+2 SP,2023/3/28,15,7.3 可编程中断控制器8259A,一、外部引线和内部结构,引脚:D0D7:
9、双向数据线/WR、/RD:写读控制信号,/CS片选 A0:地址线,选择内部寄存器 INT:中断请求输出/INTA:中断响应输入线 IR0IR7:是外接中断源输入线。CAS0CAS2:级联时用。SP/EN:作输入是/SP,控制8259作 主片或从 片,1主0从。用作输出是/EN,控制三态门,大系统中用。,2023/3/28,16,7.3 可编程中断控制器8259A,结构框图 中断请求寄存器IRR:存放IR0 IR7中断请求 服务寄存器ISR:存放IR0 IR7中正在服务的源 中断屏蔽寄存器IMR(interrupt mask)4个8位初始化命令字ICW 3个8位操作命令字OCW,2023/3/2
10、8,17,7.3 可编程中断控制器8259A,二、中断处理过程,(1)中断外设在IR0IR7上产生n条中断请求8259,8259将相应的IRR位置1;(2)IRR中断请求+设定的IMR屏蔽 优先级分析器,最高优先级的请求送到INT CPU;(3)CPU收到INT响应:发送连续二个总线周期的/INTA;8259在第一个/INTA,该中断源对应的IRR位复位,ISR位置位,从而禁止较低优先级的中断。8259在第二个/INTA:送出8位的中断类型码 D0D7。(4)8259中断结束 自动结束方式:第二个/INTA结束时ISR复位相应位;非自动方式:收到EOI命令才复位,以开放低级中断申请(5)CPU
11、读取中断类型码查中断向量表转服务子程序,2023/3/28,18,7.3 可编程中断控制器8259A,三、中断优先级管理方式,优先级管理(1)固定优先级(完全嵌套排序方式):IR0 IR1 IR7(2)自动循环优先级(等优先级方式):优先级循环,刚服务过的最低,下一个变为最高。如5级刚服务过,6级变为最高,7级次之。(3)特殊循环优先级:优先级循环,通过命令字指定最低优先级。屏蔽方式(1)一般屏蔽方式:一个中断请求被响应 8259禁止所有同级、低级的请求(2)特殊屏蔽方式:解除这种禁止,允许同级、低级的请求,即 IRi被响应 ISR、IMR设置的位对应的IR禁止请求,其他所有级别的IR允许请求
12、,2023/3/28,19,7.3 可编程中断控制器8259A,中断结束方式(1)非自动EOI:软件发EOI命令字结束 普通EOI:清除ISR中已置位的优先级最高的位,适用于固定优 先级、自动循环优先级;特殊EOI:清除命令字指定的ISR位,适用于所有优先级方式,特别是特殊循环优先级(2)自动EOI:硬件自动EOI CPU响应中断请求后,向8259发连续2个/INTA周期,在第二个/INTA结束时8259自动执行普通EOI的工作(复位ISRi).中断触发方式(1)电平触发方式(2)边沿触发方式,2023/3/28,20,7.3 可编程中断控制器8259A,四、初始化命令字ICW,初始化命令字I
13、CW1,2023/3/28,21,7.3 可编程中断控制器8259A,【例7.3】某8086系统中,使用单片8259A,中断请求信号为高电平触发,需要设置ICW4,8259A端口地址为20H、21H,写出初始化命令字ICW1以及设置ICW1的 命令。解:高电平触发、单片8259A以及需要设置ICW4,初始化命令字为00011011B=1BH。写ICW1的命令如下。MOV AL,1BHOUT 20H,AL;写ICW1用偶地址,2023/3/28,微机原理,22,7.3 可编程中断控制器8259A,初始化命令字ICW2,【例7.4】某PC机中有8个可屏蔽中断(IR0IR7),其中IR0的中断类型号
14、为18H,8259A端口地址为20H、21H,请问ICW2是怎样设置的?用指令设置ICW2。解:由于IR0的中断类型号是18H,所以ICW2的内容是00011000B=18H。写ICW2的命令如下。MOV AL,18H OUT 21H,AL;写ICW2用奇地址,2023/3/28,23,7.3 可编程中断控制器8259A,初始化命令字ICW3,2023/3/28,24,7.3 可编程中断控制器8259A,初始化命令字ICW4,2023/3/28,25,7.3 可编程中断控制器8259A,初始化命令字的设置过程,2023/3/28,26,7.3 可编程中断控制器8259A,【例7.5】IBM P
15、C机的ROM BIOS关于8259A的初始化程序段如下。INTA00EQU20H;8259A偶地址INTA01EQU21H;8259A奇地址MOV AL,13H;单片8259A,边沿触发,需要ICW4OUT INTA00,ALMOV AL,08H;中断类型号8HOUT INTA01,ALMOV AL,09H;8086/8088,缓冲,从片8259A,非自动结束,正常全嵌套OUT INTA01,AL,2023/3/28,27,7.3 可编程中断控制器8259A,【例7.6】某微机系统中有8259A,满足下列条件:工作在8086系统,单片8259A,中断请求信号为电平触发。中断类型码为40H47H
16、。中断优先级采用普通全嵌套方式,中断结束采用自动EOI方式,系统中未使用数据缓冲器。系统分配给8259A的端口地址为20H和21H,试对该8259A进行初始化。解:初始化程序如下所示。MOV AL,00011011B;写ICW1OUT 20H,ALMOV AL,01000000B;写ICW2OUT 21H,ALMOV AL,00000011B;写ICW4OUT 21H,AL,2023/3/28,28,7.3 可编程中断控制器8259A,五、操作命令字OCW,操作命令字OCW1,2023/3/28,29,7.3 可编程中断控制器8259A,五、操作命令字OCW,【例7.7】某微机系统中有8259
17、A,如果要将IR1、IR6两个引脚上的中断请求屏蔽,请问应如何设置OCW1?并用命令写入OCW1。假设地址为20H、21H。解:由于IR1和IR6上的中断请求被屏蔽,所以OCW1的第0位和第6位应该置“1”。OCW1为01000010B。写入程序如下所示。MOV AL,01000010BOUT 21H,AL,2023/3/28,30,7.3 可编程中断控制器8259A,操作命令字OCW2,2023/3/28,31,7.3 可编程中断控制器8259A,【例7.8】非自动EOI下用OCW2发布结束命令撤销ISR中断标志结束中断。假设地址为20H,21H。解:程序如下所示。MOV AL,20H;20
18、H是命令字,EOI=1OUT 20H,AL;A0=0,20H是OCW2地址,2023/3/28,32,7.3 可编程中断控制器8259A,【例7.9】如果8086系统中的8259A的优先级顺序为IR4、IR5、IR6、IR7、IR0、IR1、IR2、IR3,设8259A的偶地址为20H,试用程序实现之。解:要实现题目中的优先级,应先确定OCW2,然后写入偶地址。OCW2=11000011B。程序如下所示。MOV AL,11000011BOUT 20H,AL,2023/3/28,33,7.3 可编程中断控制器8259A,操作命令字OCW3,2023/3/28,34,7.3 可编程中断控制器825
19、9A,【例7.10】设8259A的IR3输入引脚上有中断请求,但此时8086 CPU的IF=0,8086 CPU如何才能知道8259A的IR3上有中断请求?设偶地址为20H。解:可用中断查询命令来解决这个问题,先发查询命令OCW3,然后读偶地址,就可以知道IR3是否有中断申请。OCW3应该取00001100B。程序如下所示。MOV AL,00001100B;P=1,查询命令OUT 20H,AL;输出查询命令IN AL,20H;读8259A的查询字读到的信息如下:0 表示IR3上没有中断请求。1 0 1 1 表示IR3上有中断请求。,2023/3/28,35,7.3 可编程中断控制器8259A,
20、【例7.11】编写一段程序,将8086系统中8259A的IRR、ISR、IMR 3个寄存器的内容读到后,写入存储器从0090H开始的数组中,设8259A的端口地址为20H和21H。MOV AL,00001010B;指出读IRR,OCW3=00001010BOUT 20H,ALIN AL,20H;读IRR的内容MOV 0090H,AL;将IRR的内容写入数组中MOV AL,0BHOUT 20H,AL;指出读ISR,OCW3=00001011BIN AL,20HMOV 0091H,AL;将ISR的内容写入数组中IN AL,21H;直接从奇地址端口读取IMR的内容MOV 0092H,AL;将IMR的
21、内容写入数组中,2023/3/28,36,7.3 可编程中断控制器8259A,六 8259寄存器的访问控制:8259的9个寄存器只占2个地址(只有A0地址线),如何区分?,2023/3/28,37,7.3 可编程中断控制器8259A,七 中断系统的应用方法(1)分配合适的中断级;(2)设计中断请求逻辑:(3)对8259A初始化(4)编写中断服务子程序(5)中断向量表初始化,2023/3/28,38,7.4 8259的应用,一、8259与系统总线的连接,8259A的偶地址:A1=0,地址为0FF00H、0FF01H、0FF04H、0FF05H中的任意一个。8259A的奇地址:A1=1,地址为0F
22、F02H、0FF03H、0FF06H、0FF07H中的任意一个,2023/3/28,39,7.4 8259的应用,二、初始化及操作控制SET59A:MOVDX,0FF00H;A0=0MOVAL,00010011B;ICW1:D3=LTIM=0沿触发,D1=1单片,D0=1要ICW4OUTDX,ALMOVDX,0FF02H;A0=1MOVAL,00011000B;ICW2:中断类型码 IR0IR7类型码18H1FHOUTDX,ALMOVAL,00000011B;ICW4:8086/8088,自动EOI,非缓冲,正常全嵌套 OUTDX,AL,2023/3/28,40,7.4 8259的应用,在某些
23、情况下,如果不希望看到某些中断发生,我们可以通过操作命令字OCW1的设置来屏蔽那些中断。同时也可以检查对某些中断的屏蔽是否成功。程序如下。MOV DX,0FF02H MOV AL,0;OCW1为00H,没有屏蔽中断 OUT DX,AL IN AL,DX;读IMR OR AL,AL;检查是否屏蔽?JNZ IMERR;不为0出错 MOV AL,0FFH;OCW1为FFH,全部屏蔽 OUT DX,AL IN AL,DX;读IMR ADD AL,1;检查是否有屏蔽?JNZ IMERR;不为全1出错,2023/3/28,41,7.4 8259的应用,8259A连接到CPU上,通过数据总线可以读取ISR、
24、IRR的内容,命令如下。MOV DX,0FF00H;OCW3用偶地址 MOV AL,00001011B;OCW3的 P=0,设置读ISR OUT DX,AL IN AL,DX;读出ISR MOV AL,00001010B;OCW3的 P=0,设置读IRR OUT DX,AL IN AL,DX;读出IRR,2023/3/28,42,7.5 小型案例实训,案例1-8259实现电子钟利用20ms一次的定时中断服务程序,建立时、分、秒电子钟,(1)编写20ms中断服务程序每次中断(20ms)n1=n1+1 n1 50 中断返回;n1=50second=second+1,n1=0second 60 中断
25、返回;,second=60 minute=minute+1,second=0minute 60 中断返回;minute=60 hour=hour+1,minute=0 hour 24 中断返回;hour=24 hour=0,2023/3/28,43,7.5 小型案例分析 电子钟,中断服务子程序:CLOCKPROCFAR PUSHDSPUSHAX;现场保护PUSHSIMOVAX,SEG TIMER;中断服务MOVDS,AXMOVSI,OFFSET TIMERMOVAL,SIINCAL;n1+1MOVSI,AL保存 新n1CMPAL,50;1秒到?JNZTRNEDMOVAL,0;1秒到 则n1=0
26、MOVSI,AL,2023/3/28,44,7.5 小型案例分析 电子钟,MOVAL,SI+1ADDAL,1;second+1 DAA MOVSI+1,AL;保存 新second CMPAL,60H;一分钟到?JNZTRNED MOVAL,0 MOVSI+1,AL MOVAL,SI+2ADDAL,1DAAMOVSI+2,ALCMPAL,60H;一小时到?JNZTRNED,2023/3/28,45,7.5 小型案例分析 电子钟,MOVAL,0 MOVSI+2,AL MOVAL,SI+3 ADDAL,1DAAMOVSI+3,ALCMPAL,24H;24小时到?JNZTRNEDMOVAL,0MOVS
27、I+3,ALTRNED:POPSI;现场恢复POPAX POPDS STI;开中断IRET;中断返回CLOCKENDP,2023/3/28,46,7.5 小型案例分析 电子钟,(2)确定中断类型码,初始化8259 IR0中断类型码为18H,初始化程序同前SET59A。SET8259A:MOV DX,0FF00H;偶地址MOV AL,00010011B;ICW1,D3的LTIM=0边沿触发,D1=1;单片,D0=1要ICW4OUT DX,ALMOV DX,0FF01H;奇地址MOV AL,00011000B;ICW2:中断源IR0IR7类型码18H1FHOUT DX,ALMOV AL,00000
28、011B;ICW4:8086/8088,自动EOI,非缓冲,正常;全嵌套OUT DX,AL,2023/3/28,47,7.5 小型案例分析 电子钟,(3)初始化中断向量表:INITB:MOV AX,0 MOV DS,AX MOVSI,18H SHLSI,1;中断类型码*4 SHLSI,1 MOV DX,OFFSET CLOCK MOVSI,DX MOV DX,SEG CLOCK MOVSI+2,DX,2023/3/28,48,7.5 小型案例分析 电子钟,(4)完整的程序:DATA SEGMENT TIMER DB 4 DUP(0)DATA ENDS STACK SEGMENT PARA ST
29、ACK STACK DB 100 DUP(0)STACK ENDS CODESEGMENTASSUME DS:CODE,DS:DATA,SS:STACK START:MOV AX,0;主程序初始化中断向量表程序段 MOV DS,AX;初始化中断向量表程序段 MOV SI,18H SHL SI,1 SHL SI,1,2023/3/28,49,7.5 小型案例分析 电子钟,MOV DX,OFFSET CLOCK MOV SI,DX MOV DX,SEG CLOCK MOV SI+2,DX MOV DX,0FF00H;初始化8259A程序段MOV AL,00010011B OUT DX,ALMOV
30、DX,0FF01HMOV AL,00011000BOUT DX,ALMOV AL,00000011B OUT DX,AL,2023/3/28,50,7.5 小型案例分析 电子钟,STI;开中断WAIT:HLT;等待20ms中断请求 JMPWAITCLOCK PROC FAR;中断服务子程序 PUSH AX PUSH SI MOV AX,SEG TIMER MOV DS,AX MOV SI,OFFSET TIMER MOV AL,SI INC AL MOV SI,AL CMP AL,50 JNZ TRNED MOV AL,0 MOV SI,AL MOV AL,SI+1,2023/3/28,51,
31、7.5 小型案例分析 电子钟,ADD AL,1 DAA MOV SI+1,AL CMP AL,60H JNZ TRNED MOV AL,0 MOV SI+1,AL MOV AL,SI+2 ADD AL,1 DAA MOV SI+2,AL CMP AL,60H JNZ TRNED MOV AL,0 MOV SI+2,AL MOV AL,SI+3,2023/3/28,52,7.5 小型案例分析 电子钟,ADD AL,1 DAA MOV SI+3,AL CMP AL,24H JNZ TRNED MOV AL,0 MOV SI+3,ALTRNED:POP SI POP AX STI IRETCLOCK ENDPCODE ENDS END START,人有了知识,就会具备各种分析能力,明辨是非的能力。所以我们要勤恳读书,广泛阅读,古人说“书中自有黄金屋。”通过阅读科技书籍,我们能丰富知识,培养逻辑思维能力;通过阅读文学作品,我们能提高文学鉴赏水平,培养文学情趣;通过阅读报刊,我们能增长见识,扩大自己的知识面。有许多书籍还能培养我们的道德情操,给我们巨大的精神力量,鼓舞我们前进。,