微型计算机原理及应用学习笔记 中断的基本知识
编辑整理:浙江自考网 发表时间:2018-05-23 【大 中 小】
一、中断的基本概念
(一)中断和中断源
所谓“中断”是指CPU在正常运行程序时,由于内、外部事件引起CPU暂时中止正在运行的程序,转而去执行请求CPU暂时中止的内、外部事件的服务程序,待该服务程序处理完毕后又返回到被中止的程序的过程。
能够向CPU发出中断请求的中断来源称为“中断源”。常见的中断源为:
(1)一般的输入输出设备,如CRT终端、行式打印机等;
(2)数据通道,如磁带、磁盘等;
(3)实时时钟,如计数器芯片8253等的定时输出作为定时中断请求信号;
(4)故障信号,如电源掉电等;
(5)软件中断,如为调试程序而设置的中断源。
(二)中断系统的功能
为满足上述中断要求,中断系统应具有的功能可归结为中断处理和中断控制。
(1)中断处理。包括发现中断请求,响应中断请求、中断处理与中断返回。
(2)中断控制。主要是实现中断优先级的排队和中断嵌套。
(三)中断的主要用途
在微机系统中,中断的主要用途是:
(1)实现输入输出操作;
(2)电源掉电或其他情况的报警;
(3)控制台或人工干预;
(4)多处理机系统中各处理机之间的协调;
(5)控制操作系统。
(四)可屏蔽中断与不可屏蔽中断
根据微处理器内部受理中断请求的情况,中断可分为可屏蔽中断与不可屏蔽中断两种。
凡是微处理器内部能够“屏蔽”的中断,称为可屏蔽中断;凡是微处理器内部不能“屏蔽”的中断,称为不可屏蔽中断。所谓“屏蔽”是指微处理器能拒绝响应中断请求信号,不允许打断微处理器所执行的主程序。这通常是由内部的中断触发器(或中断允许触发器)来控制的。
二、中断处理过程
微机系统中断处理过程的流程图如图6-14所示。
(一)CPU响应中断的条件
1.设置中断请求触发器
每个中断源向CPU发出中断请求信号是随机的,而大多数CPU都是在现行周期结束时,才检测有无中断请求信号发出。故在现行指令执行期间,必须把随机输入的中断信号锁存起来,并保持到CPU响应这个中断请求后,才可以清除中断请求。因此,要求每一个中断源有一个中断请求触发器,如图.6-15中④所示。
2.设置中断屏蔽触发器
在多个中断源的情况下,为增加控制的灵活性,常要求在每一个外设的接口电路中,设置一个中断屏蔽触发器,只有当此触发器为“1”时,外设的中断请求才能被送到CPU,如图6-15中的⑧所示。可把8个外设的中断屏蔽触发器组成一个中断屏蔽寄存器端口,用输出指令来控制它们的状态。上述两个条件在接口中设置。
3.设置中断允许触发器的状态
在CPU内部有一个中断允许触发器,只有当其为“1”时(即中断开放时),CPU才能响应中断;若其为“0”.(即中断关闭时),即使中断请求线上有中断请求,CPU也不响应。可用允许中断和禁止中断指令来设置中断允许触发器的状态。当CPU复位时,中断允许触发器也复位为“0”,即关中断。当中断响应后,CPU就自动关闭中断,以禁止接受另一个新的中断(否则要处理多重中断),因而通常在中断服务程序结束时,必须有两条指令,即允许中断指令和返回指令。
4.CPU在现行指令结束后响应中断
在满足上面三个条件的情况下,CPU在执行现行指令的最后一个机器周期(总线周期)的最后一个时钟周期(T状态)时,才采样中断输入线INTR,若发现中断请求有效,则把内部的中断锁存器置“1”,下一机器周期进入中断周期。
(二)CPU对中断的响应
进入中断周期后,中断响应的过程如下:
1.关中断
CPU在响应中断后,发出中断响应信号 ,同时内部自动地关中断,以禁止接受其他的中断请求。
2.保护断点
把断点处的IP(指令指针)值和CS值(段基值)压人堆栈保留,以备中断处理完后能正确地返回主程序断点。
3.识别中断源
CPU要对中断请求进行处理,必须要找到相应的中断服务程序(处理中断的程序)的入口地址,这就是中断源的识别。
识别中断源有两种方法:
(1)查询中断。当外设没有提出中断请求时,CPU照常执行主程序,只有在接收到外设的中断请求后,CPU才去查询,以识别提出中断请求的设备,主要采用软件查询。
软件查询是用程序查询接在中断线上的每一个外设。查询程序依次读出每一个外设的中断状态位,通过测试该状态位来判断对应的外设是否发出过中断请求,若是,则转到相应的中断服务程序。一个管理4个外设的查询测试程序的流程图及硬件示意图如图6-16所示。从图中可见,如果4次测试都未发现有中断请求,则表示中断输入线的信号是由于出错引起,程序转向出错出口。
图6-16 用软件查询法找中断源
(a)硬件示意图;(b)流程图
(2)向量中断(Vectored Interrupt)。向量中断又称矢量中断,在具有向量中断的微机系统中,每个外设都预先指定一个中断向量,当CPU识别出某个外设请求中断并予以响应时,控制逻辑就将该外设的中断向量送入CPU,以自动地提供相应的中断服务程序的人口地址,转人中断服务。用向量中断来确定中断源主要是用硬件来实现的,通常在微机系统中所用的可编程中断控制器都能提供中断向量。
4.保护现场
为了不使中断服务程序的运行影响主程序的状态,必须把断点处有关寄存器(指在中断服务程序中要使用的寄存器)内容以及标志寄存器的状态,压入堆栈保护。
5.执行中断服务程序
6.恢复现场
即把中断服务程序执行前压入堆栈的现场信息弹回原寄存器及标志。
7.开中断与返回
开中断放在返回之前,目的是返回主程序后能继续响应新的中断请求。
三、中断优先级(又称中断优先权
在实际系统中,常常遇到多个中断源同时请求中断的情况,这时CPU必须确定首先为哪一个中断源服务,以及服务的次序。解决的方法是用中断优先排队的处理方法。这就是根据中断源要求的轻重缓急,排好中断处理的优先次序,即优先级(Pnonty);先响应优先级最高的中断请求。有的微处理器有两条或更多的中断请求线、而且已经安排好中断的优先级,但有的微处理器只有一条中断请—求线。凡是遇到中断源的数目多于CPU的中断请求线的情况时,就需要采取适当的方法来解决中断优先级的问题。
另外,当-CPU正在处理中断时,也要能响应优先级更高的中断请求,而屏蔽掉同级或较低级的中断请求。即所谓多重中断的问题。
通常,解决中断的优先级的方法有以下几种:
(一)软件查询确定中断优先级
把8个外设的中断请求触发器组合起来,作为—个端口,赋以设备号,如图6-17所示。把各个外设的中断请求信号相“或”后,作为INTR信号,这样任一外设有中断请求都可向CPU送出IN丁R信号。当CPU响应中断后,把中断寄存器的状态作为一个外设信息读人CPU,逐位检测其状态,若检测出某位有中断请求,即转入相应的中断服务程序人口。在查询方式中询问的次序即为优先级的次序,不需要有判断与确定优先级的硬件排队电路。其缺点是在中断源较多的情况下,由询问到转至相应的中断服务程序的入口时间较长。
(二)硬件查询确定优先级
图6-18为实现硬件查询的优先级中断链电路(Daisy-chaining)。来自CPU的“中断响应”信号从A设备开始串行地往下传送,当A设备有“中断请求”时,则“中断响应”信号在门A2处被封锁,不再下传,使后级设备得不到CPU的“中断响应”信号。同时A设备的“数据允许”线EN变为有效,从而允许A设备使用数据总线,将其中断标志放上数据总线进入CPU。当A设备无“中断请求”时, “中断响应”信号可以通过A2门传给下一设备B。
优先级中断链电路又称链式优先级排队电路,当“中断响应”信号串行地通过所有外设时,这些外设的中断优先级由其在链式排队电路中的先后次序来决定。
(三)中断优先级编码电路
用硬件编码器和比较器组成的中断优先级排队电路如图6-19所示。
设有8个中断源,当任何一个有中断请求时,通过“或”门,即可产生一个中断请求信号,但它能否送至CPU的中断请求线,还必须受比较器的控制。
图6-19 编码器和比较器的优先级排队电路
8条中断输入线的任何一条,经过编码器可以产生三位二进制优先级编码A2A1A0,优先级最高的中断输入线的编码为111,优先级最低的中断输入线的编码为000,而且若有多个中断输入线同时输入,则编码器只输出优先级最高的编码。
正在进行中断处理的外设的优先级编码,由CPU通过软件,经据总线送至优先级寄存器,然后输出编码B2BlB0至比较器。
比较器对编码A2A1A0与B2B1B0的大小进行比较。若A≤B,则“A>B”端输出低电子,封锁与门1,禁止向CPU发出新的中断请求;只有当A>B时,比较器输出端才为高电平,打开与门1,将中断请求信号送至CPU的INTR输入端,—当CPU-响应中断后,中断正在进行的中断服务程序,转去执行优先级更高的中断服务程序。
若CPU不在执行中断服务程序时(即在执行主程序),则优先级失效信号为高电平,此时如有任一中断源请求中断,都能通过与门2,向CPU发出INTR信号。
当外设的个数≤8时,它们公用一个产生中断向量的电路,该电路由三位比较器的编码A2A1A0供给。据此不同的编码,即可转入不同的入口地址。
四、中断的嵌套
当CPU执行优先级较低的中断服务程序时,允许响应比它优先级高的中断源请求中断,而挂起正在处理的中断,这就是中断嵌套或称多重中断。此时,CPU将暂时中断正在进行着的级别较低的中断服务程序,优先为级别高的中断服务,待优先级高的中断服务结束后,再返回到刚才被中断的较低优先级的那一级,继续为它进行中断服务。
多重中断流程的编排与单级中断的区别有以下几点:
(1)加入屏蔽本级和较低级中断请求的环节。这是为了防止在进行中断处理时不致受到来自本级和较低级中断的干扰,并允许优先级比它高的中断源进行中断。
(2)在进行中断服务之前,要开放中断。因为如果中断仍然处于禁止状态,则将阻碍较高级中断的中断请求和响应,所以必须在保护现场、屏蔽本级及较低级中断完成之后,开放中断,以便允许进行中断嵌套。
(3)中断服务程序结束之后,为了使恢复现场过程不致受到任何中断请求的干扰,必须安排并执行关中断指令,将中断关闭,才能恢复现场。
(4)恢复现场后,应该安排并执行开中断指令,重新开放中断,以便允许任何其他等待着的中断请求有可能被CPU响应。应当指出只有在执行了紧跟在开中断指令后面的一条指令以后,CPU才重新开放中断。一般紧跟在开中断指令后的是返回指令RET,它将把原来被中断的服务程序的断点地址弹回IP及CS,然后CPU才能开放中断,响应新的中断请求。
多个中断源、单一中断请求线的中断处理过程的流程图如图6-20所示。
(一)中断和中断源
所谓“中断”是指CPU在正常运行程序时,由于内、外部事件引起CPU暂时中止正在运行的程序,转而去执行请求CPU暂时中止的内、外部事件的服务程序,待该服务程序处理完毕后又返回到被中止的程序的过程。
能够向CPU发出中断请求的中断来源称为“中断源”。常见的中断源为:
(1)一般的输入输出设备,如CRT终端、行式打印机等;
(2)数据通道,如磁带、磁盘等;
(3)实时时钟,如计数器芯片8253等的定时输出作为定时中断请求信号;
(4)故障信号,如电源掉电等;
(5)软件中断,如为调试程序而设置的中断源。
(二)中断系统的功能
为满足上述中断要求,中断系统应具有的功能可归结为中断处理和中断控制。
(1)中断处理。包括发现中断请求,响应中断请求、中断处理与中断返回。
(2)中断控制。主要是实现中断优先级的排队和中断嵌套。
(三)中断的主要用途
在微机系统中,中断的主要用途是:
(1)实现输入输出操作;
(2)电源掉电或其他情况的报警;
(3)控制台或人工干预;
(4)多处理机系统中各处理机之间的协调;
(5)控制操作系统。
(四)可屏蔽中断与不可屏蔽中断
根据微处理器内部受理中断请求的情况,中断可分为可屏蔽中断与不可屏蔽中断两种。
凡是微处理器内部能够“屏蔽”的中断,称为可屏蔽中断;凡是微处理器内部不能“屏蔽”的中断,称为不可屏蔽中断。所谓“屏蔽”是指微处理器能拒绝响应中断请求信号,不允许打断微处理器所执行的主程序。这通常是由内部的中断触发器(或中断允许触发器)来控制的。
二、中断处理过程
微机系统中断处理过程的流程图如图6-14所示。
(一)CPU响应中断的条件
1.设置中断请求触发器
每个中断源向CPU发出中断请求信号是随机的,而大多数CPU都是在现行周期结束时,才检测有无中断请求信号发出。故在现行指令执行期间,必须把随机输入的中断信号锁存起来,并保持到CPU响应这个中断请求后,才可以清除中断请求。因此,要求每一个中断源有一个中断请求触发器,如图.6-15中④所示。
2.设置中断屏蔽触发器
在多个中断源的情况下,为增加控制的灵活性,常要求在每一个外设的接口电路中,设置一个中断屏蔽触发器,只有当此触发器为“1”时,外设的中断请求才能被送到CPU,如图6-15中的⑧所示。可把8个外设的中断屏蔽触发器组成一个中断屏蔽寄存器端口,用输出指令来控制它们的状态。上述两个条件在接口中设置。
3.设置中断允许触发器的状态
在CPU内部有一个中断允许触发器,只有当其为“1”时(即中断开放时),CPU才能响应中断;若其为“0”.(即中断关闭时),即使中断请求线上有中断请求,CPU也不响应。可用允许中断和禁止中断指令来设置中断允许触发器的状态。当CPU复位时,中断允许触发器也复位为“0”,即关中断。当中断响应后,CPU就自动关闭中断,以禁止接受另一个新的中断(否则要处理多重中断),因而通常在中断服务程序结束时,必须有两条指令,即允许中断指令和返回指令。
4.CPU在现行指令结束后响应中断
在满足上面三个条件的情况下,CPU在执行现行指令的最后一个机器周期(总线周期)的最后一个时钟周期(T状态)时,才采样中断输入线INTR,若发现中断请求有效,则把内部的中断锁存器置“1”,下一机器周期进入中断周期。
(二)CPU对中断的响应
进入中断周期后,中断响应的过程如下:
1.关中断
CPU在响应中断后,发出中断响应信号 ,同时内部自动地关中断,以禁止接受其他的中断请求。
2.保护断点
把断点处的IP(指令指针)值和CS值(段基值)压人堆栈保留,以备中断处理完后能正确地返回主程序断点。
3.识别中断源
CPU要对中断请求进行处理,必须要找到相应的中断服务程序(处理中断的程序)的入口地址,这就是中断源的识别。
识别中断源有两种方法:
(1)查询中断。当外设没有提出中断请求时,CPU照常执行主程序,只有在接收到外设的中断请求后,CPU才去查询,以识别提出中断请求的设备,主要采用软件查询。
软件查询是用程序查询接在中断线上的每一个外设。查询程序依次读出每一个外设的中断状态位,通过测试该状态位来判断对应的外设是否发出过中断请求,若是,则转到相应的中断服务程序。一个管理4个外设的查询测试程序的流程图及硬件示意图如图6-16所示。从图中可见,如果4次测试都未发现有中断请求,则表示中断输入线的信号是由于出错引起,程序转向出错出口。
图6-16 用软件查询法找中断源
(a)硬件示意图;(b)流程图
(2)向量中断(Vectored Interrupt)。向量中断又称矢量中断,在具有向量中断的微机系统中,每个外设都预先指定一个中断向量,当CPU识别出某个外设请求中断并予以响应时,控制逻辑就将该外设的中断向量送入CPU,以自动地提供相应的中断服务程序的人口地址,转人中断服务。用向量中断来确定中断源主要是用硬件来实现的,通常在微机系统中所用的可编程中断控制器都能提供中断向量。
4.保护现场
为了不使中断服务程序的运行影响主程序的状态,必须把断点处有关寄存器(指在中断服务程序中要使用的寄存器)内容以及标志寄存器的状态,压入堆栈保护。
5.执行中断服务程序
6.恢复现场
即把中断服务程序执行前压入堆栈的现场信息弹回原寄存器及标志。
7.开中断与返回
开中断放在返回之前,目的是返回主程序后能继续响应新的中断请求。
三、中断优先级(又称中断优先权
在实际系统中,常常遇到多个中断源同时请求中断的情况,这时CPU必须确定首先为哪一个中断源服务,以及服务的次序。解决的方法是用中断优先排队的处理方法。这就是根据中断源要求的轻重缓急,排好中断处理的优先次序,即优先级(Pnonty);先响应优先级最高的中断请求。有的微处理器有两条或更多的中断请求线、而且已经安排好中断的优先级,但有的微处理器只有一条中断请—求线。凡是遇到中断源的数目多于CPU的中断请求线的情况时,就需要采取适当的方法来解决中断优先级的问题。
另外,当-CPU正在处理中断时,也要能响应优先级更高的中断请求,而屏蔽掉同级或较低级的中断请求。即所谓多重中断的问题。
通常,解决中断的优先级的方法有以下几种:
(一)软件查询确定中断优先级
把8个外设的中断请求触发器组合起来,作为—个端口,赋以设备号,如图6-17所示。把各个外设的中断请求信号相“或”后,作为INTR信号,这样任一外设有中断请求都可向CPU送出IN丁R信号。当CPU响应中断后,把中断寄存器的状态作为一个外设信息读人CPU,逐位检测其状态,若检测出某位有中断请求,即转入相应的中断服务程序人口。在查询方式中询问的次序即为优先级的次序,不需要有判断与确定优先级的硬件排队电路。其缺点是在中断源较多的情况下,由询问到转至相应的中断服务程序的入口时间较长。
(二)硬件查询确定优先级
图6-18为实现硬件查询的优先级中断链电路(Daisy-chaining)。来自CPU的“中断响应”信号从A设备开始串行地往下传送,当A设备有“中断请求”时,则“中断响应”信号在门A2处被封锁,不再下传,使后级设备得不到CPU的“中断响应”信号。同时A设备的“数据允许”线EN变为有效,从而允许A设备使用数据总线,将其中断标志放上数据总线进入CPU。当A设备无“中断请求”时, “中断响应”信号可以通过A2门传给下一设备B。
优先级中断链电路又称链式优先级排队电路,当“中断响应”信号串行地通过所有外设时,这些外设的中断优先级由其在链式排队电路中的先后次序来决定。
(三)中断优先级编码电路
用硬件编码器和比较器组成的中断优先级排队电路如图6-19所示。
设有8个中断源,当任何一个有中断请求时,通过“或”门,即可产生一个中断请求信号,但它能否送至CPU的中断请求线,还必须受比较器的控制。
图6-19 编码器和比较器的优先级排队电路
8条中断输入线的任何一条,经过编码器可以产生三位二进制优先级编码A2A1A0,优先级最高的中断输入线的编码为111,优先级最低的中断输入线的编码为000,而且若有多个中断输入线同时输入,则编码器只输出优先级最高的编码。
正在进行中断处理的外设的优先级编码,由CPU通过软件,经据总线送至优先级寄存器,然后输出编码B2BlB0至比较器。
比较器对编码A2A1A0与B2B1B0的大小进行比较。若A≤B,则“A>B”端输出低电子,封锁与门1,禁止向CPU发出新的中断请求;只有当A>B时,比较器输出端才为高电平,打开与门1,将中断请求信号送至CPU的INTR输入端,—当CPU-响应中断后,中断正在进行的中断服务程序,转去执行优先级更高的中断服务程序。
若CPU不在执行中断服务程序时(即在执行主程序),则优先级失效信号为高电平,此时如有任一中断源请求中断,都能通过与门2,向CPU发出INTR信号。
当外设的个数≤8时,它们公用一个产生中断向量的电路,该电路由三位比较器的编码A2A1A0供给。据此不同的编码,即可转入不同的入口地址。
四、中断的嵌套
当CPU执行优先级较低的中断服务程序时,允许响应比它优先级高的中断源请求中断,而挂起正在处理的中断,这就是中断嵌套或称多重中断。此时,CPU将暂时中断正在进行着的级别较低的中断服务程序,优先为级别高的中断服务,待优先级高的中断服务结束后,再返回到刚才被中断的较低优先级的那一级,继续为它进行中断服务。
多重中断流程的编排与单级中断的区别有以下几点:
(1)加入屏蔽本级和较低级中断请求的环节。这是为了防止在进行中断处理时不致受到来自本级和较低级中断的干扰,并允许优先级比它高的中断源进行中断。
(2)在进行中断服务之前,要开放中断。因为如果中断仍然处于禁止状态,则将阻碍较高级中断的中断请求和响应,所以必须在保护现场、屏蔽本级及较低级中断完成之后,开放中断,以便允许进行中断嵌套。
(3)中断服务程序结束之后,为了使恢复现场过程不致受到任何中断请求的干扰,必须安排并执行关中断指令,将中断关闭,才能恢复现场。
(4)恢复现场后,应该安排并执行开中断指令,重新开放中断,以便允许任何其他等待着的中断请求有可能被CPU响应。应当指出只有在执行了紧跟在开中断指令后面的一条指令以后,CPU才重新开放中断。一般紧跟在开中断指令后的是返回指令RET,它将把原来被中断的服务程序的断点地址弹回IP及CS,然后CPU才能开放中断,响应新的中断请求。
多个中断源、单一中断请求线的中断处理过程的流程图如图6-20所示。
浙江自考网课程中心
浙江自考网声明:
1、由于各方面情况的调整与变化,本网提供的考试信息仅供参考,考试信息以省考试院及院校官方发布的信息为准。
2、本网信息来源为其他媒体的稿件转载,免费转载出于非商业性学习目的,版权归原作者所有,如有内容与版权问题等请与本站联系。