当前位置:文档之家› 中断与中断系统

中断与中断系统

华东师范大学 电子系 马 潮 7-1第7章 中断系统与基本应用中断是现代计算机必备的重要功能。

尤其在嵌入式系统和单片机系统中,中断扮演了非常重要的角色。

因此,全面深入的了解中断的概念,并能灵活掌握中断技术的应用,成为学习和真正掌握单片机应用非常重要的关键问题之一。

7.1 中断的基本概念中断是指计算机(MCU )自动响应一个“中断请求”信号,暂时停止(中断)了当前程序的执行,转而执行为外部设备服务的程序(中断服务程序),并在执行完服务程序后自动返回原程序执行的过程。

单片机一般都具有良好的中断系统,它的优点有:✓ 实现实时处理。

利用中断技术,MCU 可以及时响应和处理来自内部功能模块或外部设备的中断请求,并为其服务,以满足实时处理和控制的要求。

✓ 实现分时操作,提高了MCU 的效率。

在嵌入式系统的应用中可以通过分时操作的方式启动多个功能部件和外设同时工作。

当外设或内部功能部件向MCU 发出中断申请时,MCU 才转去为它服务。

这样,利用中断功能,MCU 就可以“同时”执行多个服务程序,提高了MCU 的效率。

✓ 进行故障处理。

对系统在运行过程中出现的难以预料的情况或故障,如掉电,可以通过中断系统及时向MCU 请求中断,做紧急故障处理。

✓ 待机状态的唤醒。

在单片机嵌入式系统的应用中,为了减少电源的功耗,当系统不处理任何事物,处于待机状态时,可以让单片机工作在休眠的低功耗方式。

通常,恢复到正常工作方式往往也是利用中断信号来唤醒。

7.1.1 中断处理过程在中断系统中,通常将MCU 处在正常情况下运行的程序称为主程序,把产生申请中断信号的单元和事件称为中断源,由中断源向MCU 所发出的申请中断信号称为中断请求信号,MCU 接受中断申请停止现行程序的运行而转向为中断服务称为中断响应,为中断服务的程序称为中断服务程序或中断处理程序。

现行程序打断的地方称为断点,执行完中断处理程序后返回断点处继续执行主程序称为中断返回。

这一整个的处理过程称为中断处理过程(图7-1)。

在整个中断处理过程中,由于MCU 执行完中断处理程序后仍然要返回主程序,因此,在执行中断处理程序之前,要将主程序中断处的地址,即断点处(实际为程序计数器PC 的当前值――即将执行的主程序的下一条指令地址,图7-1中的k+1点)保存起来,称为保护断点。

又由于MCU 在执行中断处理程序时,可能会使用和改变主程序使用过的寄存器、标志位,甚至内存单元,因此,在执行中断服务程序前,还要把有关的数据保护起来,称为中断现场保护。

在MCU 执行主程序 中断服务程序 K K+1 中断响应 中断返回中断请求 图7-1 中断过程示意图完中断处理程序后,则要恢复原来的数据,并返回主程序的断点处继续执行,称为恢复现场和恢复断点。

在单片机中,断点的保护和恢复操作,是在系统响应中断和执行中断返回指令时由单片机的内部硬件自动实现的,简单的说,就是在响应中断时,MCU的硬件系统会自动将断点地址压进系统的堆栈保存,而当执行中断返回指令时,硬件系统会自动又将压入堆栈的断点地址弹出到程序计数器PC中。

但对于中断现场的保护和恢复,则需要程序员在设计中断处理程序时编程实现。

在使用中断时,要认真和仔细考虑中断现场的保护和恢复。

7.1.2 中断源、中断信号、中断向量1.中断源中断源是指能够向MCU发出中断请求信号的部件和设备。

在一个系统中,往往存在多个中断源。

对于单片机讲,中断源一般可分为内部中断源和外部中断源。

在单片机内部集成的许多功能模块,如定时器、串行通讯口、模/数转换器等,它们在正常工作时往往无需CPU参与,而当处于某种状态或达到某个规定值需要程序控制时,会通过发出中断请求信号通知CPU。

这一类的中断源位于单片机内部,称作内部中断源。

其典型例子有定时器溢出中断、ADC完成中断等。

如8位的定时器在正常计数过程中无需CPU的干预,一旦计数到达0xff产生溢出时便产生一个中断申请信号,通知CPU进行必要的处理。

内部中断源在中断条件成立时,一般通过片内硬件会自动产生中断请求信号,无须用户介入,使用方便。

内部中断是CPU管理片内资源的一种高效的途径。

系统中的外部设备也可以用作中断源,这时要求它们能够产生一个中断信号(通常是高(低)电平或者电平跳变的上升(下降)沿),送到单片机的外部中断请求引脚供CPU检测。

这些中断源位于单片机外部,称为外部中断源。

通常用作外部中断源的有输入输出设备、控制对象、以及故障源等。

例如,打印机打印完一个字符时可以通过中断请求CPU为它送下一个打印字符;控制对象可以通过中断要求CPU及时采集参量或者对参数超标做出反应;掉电检测电路发现掉电时可以通过中断通知CPU,以便在短时间内对数据进行保护。

2. 中断信号中断信号是指内部或外部中断源产生的中断申请信号,这个中断信号往往是电信号的某种变化形式,通常有以下几种类型:✓脉冲的上跳沿或下降沿(上升沿触发型或下降沿触发型)✓高电平或低电平(电平触发型)✓电平的变化(状态变化触发型)对于单片机来讲,不同的中断源,产生什么类型的中断信号能够触发申请中断,取决于芯片内部的硬件结构,而且通常也可以通过用户的软件来设定。

单片机的硬件系统会自动对这些中断信号进行检测。

一旦检测到规定的信号出现,将会把相应的中断标志位置“1”(在I/O空间的控制或状态寄存器中),通知CPU进行处理。

3.中断向量中断源发出的请求信号被CPU检测到之后,如果单片机的中断控制系统允许响应中断,CPU会自动转移,执行一个固定的程序空间地址中的指令。

这个固定的地址称作中断入口地址,也叫做中断向量。

中断入口地址往往是由单片机内部硬件决定的。

通常,一个单片机会有若干个中断源,每个中断源都有着自己的中断向量。

这些中断向量一般在程序存储空间中占用一个连续的地址空间段,称为中断向量区,如表7.1所示。

由于一个中断向量通常仅占几个字节或一条指令的长度,所以在中断向量区一般不放置中断服务程序的。

中断服务程序一般放置在程序存储器的其它地方,而在中断向量处放置一条跳转到中断服务程序的指令。

这样,CPU响应中断后,首先自动转向执行中断向量中的转移指令,再跳转执行中断服务程序。

7.1.3 中断优先级和中断嵌套中断优先级的概念是针对有多个中断源同时申请中断时,MCU如何响应中断,以及响应哪个中断而提出的。

通常,一个单片机会有若干个中断源,MCU可以接收若干个中断源发出的中断请求。

但在同一时刻,MCU只能响应这些中断请求中的其中一个。

为了避免MCU同时响应多个中断请求带来的混乱,在单片机中为每一个中断源赋予一个特定的中断优先级。

一旦有多个中断请求信号,MCU先响应中断优先级高的中断请求,然后再逐次响应优先级次一级的中断。

中断优先级也反映了各个中断源的重要程度,同时也是分析中断嵌套的基础。

对于中断优先级的确定,通常是由单片机的硬件结构规定的。

一般的确定规则方式为两种:✓某中断对应的中断向量地址越小,其中断优先级越高(硬件确定方式)。

✓通过软件对中断控制寄存器的设定,改变中断的优先级(用户软件可设置方式,注意:AVR不支持)。

实际上,MCU在两种情况下需要对中断的优先级进行判断:第一种情况为同时有两(多)个中断源申请中断。

在这种情况下,MCU首先响应中断优先级最高的那个中断,而将其它的中断挂起。

待优先级最高的中断服务程序执行完成返回后,再顺序响应优先级较低的中断。

第二种情况是当MCU正处于响应一个中断的过程中。

如已经响应了某个中断,正在执行为其服务的中断程序时,此时又产生一个其它的中断申请,这种情况也称作中断嵌套。

对于中断嵌套的处理,不同的单片机处理的方式是不同的,应根据你所使用单片机的特点正确实现中断嵌套的处理。

按照通常的规则,当MCU正在响应一个中断B的过程中,又产生一个其它的中断A申请时,如果这个新产生中断A的优先级比正在响应的中断B优先级高的话,就应该暂停当前的中断B的处理,转入响应高优先级的中断A,待高优先级中断A处理完成后,再返回原来的中断B的处理过程。

如果新产生中断A的优先级比正在处理中断B的优先级低(或相同),则应在处理完当前的中断B后,再响应那个后产生的中断A申请(如果中断A条件还成立的话)。

一些单片机(如8051结构)的硬件能够自动实现中断嵌套的处理,既单片机内部的硬件电路能够识别中断的优先级,并根据优先级的高低,自动完成对高优先级中断的优先响应,实现中断的嵌套处理。

而另一类的单片机,如本书介绍的AVR单片机,其硬件系统不支持自动实现中断嵌套的处理。

如果在系统设计中,必须使用中断嵌套处理,则需要由用户编写相应的程序,通过软件设置来实现中断嵌套的功能。

7.1.4中断响应条件与中断控制1)中断的屏蔽单片机拥有众多中断源,但在某一具体设计中通常并不需要使用所有的中断源,或者在华东师范大学电子系马潮7-3系统软件运行的某些关键阶段不允许中断打断现行程序的运行,这就需要一套软件可控制的中断屏蔽/允许系统。

在单片机的I/O寄存器中,通常存在一些特殊的标志位用于控制开放或关闭(屏蔽)MCU对中断响应处理,这些标志称为中断屏蔽标志位或中断允许控制位。

用户程序可以改变这些标志位的设置,在需要的时候允许MCU响应中断,而在不需要的时候则将中断请求信号屏蔽(注意:不是取消),此时尽管产生了中断请求信号,MCU也不会响应中断请求。

因而从对中断源的控制角度讲,中断源还可分成3类:✓非屏蔽中断。

非屏蔽中断是指MCU对中断源产生的中断请求信号是不能屏蔽的,也就是说一旦发生中断请求,MCU肯定响应该中断。

在单片机中,外部RESET引脚产生的复位信号,就是一个非屏蔽的中断。

✓可屏蔽中断。

可屏蔽中断是指用户程序可以通过中断屏蔽控制标志对中断源产生的中断请求信号进行控制,既允许或禁止MCU对该中断的响应。

在用户程序中,可以预先执行一条允许中断的指令,这样一旦发生中断请求,MCU就能够响应中断。

反之,用户程序也可以预先执行一条中断禁止(屏蔽)指令,使MCU不响应中断请求。

因此,可屏蔽中断的中断请求能否可以被MCU响应,最终是由用户程序来控制的。

在单片机中,大多数的中断都是可屏蔽的中断。

✓软件中断。

软件中断通常是指CPU具有相应的软件中断指令,当MCU执行这条指令时就能进入软件中断服务,以完成特定的功能(通常用于调试)。

但一般的单片机都不具备软件中断的指令,因此不能直接通过软件中断的指令实现软件中断的功能。

因此,在单片机系统中,如果必须要使用软件中断的功能,一般要通过间接的方式实现软件中断的功能。

2)中断控制与中断响应条件综合前面的介绍,我们可以知道,在单片机中,对应每一个中断源都有一个相应的中断标志位,该中断标志位将占据中断控制寄存器中的一位。

当单片机检测到某一中断源产生符合条件的中断信号时,其硬件会自动将该中断源对应的中断标志位置“1”,这就意味着有中断信号产生了,向MCU申请中断。

相关主题