第七章 中断与中断系统.docx
- 文档编号:8843594
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:71
- 大小:164.70KB
第七章 中断与中断系统.docx
《第七章 中断与中断系统.docx》由会员分享,可在线阅读,更多相关《第七章 中断与中断系统.docx(71页珍藏版)》请在冰豆网上搜索。
第七章中断与中断系统
基于AVR的单片嵌入式系统原理与实践应用
第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
在执行中断处理程序时,可能会使用和改变主程
中断请求
K
K+1
中断响应
中断返回
中
断
服
务
程
序
序使用过的寄存器、标志位,甚至内存单元,因
图7-1中断过程示意图
此,在执行中断服务程序前,还要把有关的数据保护起来,称为中断现场保护。
在MCU执行
华东师范大学电子系马潮7-1
第7章中断系统与基本应用
完中断处理程序后,则要恢复原来的数据,并返回主程序的断点处继续执行,称为恢复现场
和恢复断点。
在单片机中,断点的保护和恢复操作,是在系统响应中断和执行中断返回指令时由单片
机的内部硬件自动实现的,简单的说,就是在响应中断时,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所示。
由
于一个中断向量通常仅占几个字节或一条指令的长度,所以在中断向量区一般不放置中断服
基于AVR的单片嵌入式系统原理与实践应用
务程序的。
中断服务程序一般放置在程序存储器的其它地方,而在中断向量处放置一条跳转
到中断服务程序的指令。
这样,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
第7章中断系统与基本应用
系统软件运行的某些关键阶段不允许中断打断现行程序的运行,这就需要一套软件可控制的
中断屏蔽/允许系统。
在单片机的I/O寄存器中,通常存在一些特殊的标志位用于控制开放
或关闭(屏蔽)MCU对中断响应处理,这些标志称为中断屏蔽标志位或中断允许控制位。
用
户程序可以改变这些标志位的设置,在需要的时候允许MCU响应中断,而在不需要的时候则
将中断请求信号屏蔽(注意:
不是取消),此时尽管产生了中断请求信号,MCU也不会响应
中断请求。
因而从对中断源的控制角度讲,中断源还可分成3类:
非屏蔽中断。
非屏蔽中断是指MCU对中断源产生的中断请求信号是不能屏蔽的,也
就是说一旦发生中断请求,MCU肯定响应该中断。
在单片机中,外部RESET引脚产
生的复位信号,就是一个非屏蔽的中断。
可屏蔽中断。
可屏蔽中断是指用户程序可以通过中断屏蔽控制标志对中断源产生的
中断请求信号进行控制,既允许或禁止MCU对该中断的响应。
在用户程序中,可以
预先执行一条允许中断的指令,这样一旦发生中断请求,MCU就能够响应中断。
反
之,用户程序也可以预先执行一条中断禁止(屏蔽)指令,使MCU不响应中断请求。
因此,可屏蔽中断的中断请求能否可以被MCU响应,最终是由用户程序来控制的。
在单片机中,大多数的中断都是可屏蔽的中断。
软件中断。
软件中断通常是指CPU具有相应的软件中断指令,当MCU执行这条指令
时就能进入软件中断服务,以完成特定的功能(通常用于调试)。
但一般的单片机
都不具备软件中断的指令,因此不能直接通过软件中断的指令实现软件中断的功
能。
因此,在单片机系统中,如果必须要使用软件中断的功能,一般要通过间接的
方式实现软件中断的功能。
2)中断控制与中断响应条件
综合前面的介绍,我们可以知道,在单片机中,对应每一个中断源都有一个相应的中断
标志位,该中断标志位将占据中断控制寄存器中的一位。
当单片机检测到某一中断源产生符
合条件的中断信号时,其硬件会自动将该中断源对应的中断标志位置“1”,这就意味着有中
断信号产生了,向MCU申请中断。
但中断标志位的置“1”,并不代表MCU一定响应该中断。
为了合理控制中断响应,在单
片机内部还有相关的用于中断控制的中断允许标志位。
最重要的一个中断允许标志位是全局
中断允许标志位。
当该标志位为“0”,表示禁止MCU响应所有的可屏蔽中断的响应。
此时不
管有否中断产生,MCU不会响应任何的中断请求。
只有全局中断允许标志位为“1”,才为MCU
响应中断请求打开第一道闸门。
MCU响应中断请求的第二道闸门是每个中断源所具有的各自独立的中断允许标志位。
当
某个中断允许标志位为“0”时,表示MCU不响应该中断的中断申请。
因此,MCU响应一个可屏蔽中断源(假定为A中断)的中断请求的条件是:
响应A中断=全局中断允许标志AND中断A允许标志AND中断A标志
从上面的中断响应条件看出,只有当全局中断允许标志位为“1”(由用户软件设置),
中断A允许标志位为“1”(由用户软件设置),中断A标志位为“1”(符合中断条件时由硬
件自动设置或由用户软件设置)时,MCU才会响应中断A的请求信号(如果有多个中断请求
信号同时存在的情况下,还要根据中断A的优先级来确定)。
用户程序对可屏蔽中断的控制,一般是通过设置相应的中断控制寄存器来实现的。
除了
设置中断的响应条件,用户程序还需要通过中断控制器来设置中断的其他特性,如:
中断触
发信号的类型、中断的优先级、中断信号产生的条件等等。
基于AVR的单片嵌入式系统原理与实践应用
以上我们介绍了中断的基本概念,可以看出中断的控制与使用相对比较复杂。
但是正确
和熟练掌握中断的应用,是单片机嵌入式系统设计的重要和基本技能之一。
单片机的许多功
能和特点,以及变化无穷的应用,往往需要中断的巧妙的配合。
因此,要正确使用中断,必
须全面了解所使用单片机的中断特性,中断服务程序的编写技能,以及中断使用的技巧和设
计。
因此读者还需要在以后的学习和应用中进一步的深入理解,逐步全面的掌握中断应用的
基本技巧。
7.2ATmega16的中断系统
与一般8位单片机相比,AVR单片机的中断系统具有中断源品种多、门类全的特点,便
于设计实时、多功能、高效率的嵌入式应用系统。
但同时由于其功能更为强大,因此相比一
般8位单片机AVR的中断使用和控制也相对复杂些。
本节以ATmega16为主,讨论AVR单片
机的中断系统的组成和基本的应用方式。
对于各个中断源的具体配置和使用将在相关章节中
介绍。
7.2.1ATmega16的中断源和中断向量
AVR一般拥有数十个中断源,每个中断源都有独立的中断向量。
缺省情况下,AVR的程
序存储区的最低端,即从Flash地址的0x0000开始用于放置中断向量,称作中断向量区。
各种型号的AVR中断向量区的大小是不同的,由下式决定:
中断向量区大小=中断源个数*每个中断向量占据字数
对于Flash比较小的AVR处理器,每个中断向量占据一个字的空间,用于放置一条相对
转移指令rjmp(跳转范围-2k~+2k),而Flash较大的AVR,每个中断向量占据两个字空间,
用于放置一条绝对转移指令jmp,用于跳转到相应中断的中断服务程序的起始地址。
原则上讲,在不使用中断的时候,中断向量区与程序存储区的其它部分没有什么区别,
可以用于放置普通的程序。
但在正式的系统应用中,为了提高系统的抗干扰能力,通常应该
在中断向量的位置上放置一条中断返回指令RETI(对于中断向量占据两个字空间的处理器,
应连续放置两条RETI)。
对于使用了一部分中断的情况,则应在未使用的中断向量处放置这
样的指令。
在用汇编语言进行开发时应该注意这一点。
ATmega16共有21个中断源,由于ATmega16片内的Flash为8K字,因此每个中断向量
占据了两个字(4个字节),缺省状态下ATmega16的中断向量表如下:
表7.1ATmega16的中断向量区
Flash空间地址
向量号
1
2
3
(中断向量)
$000
$002
$004
RESET
INT0
INT1
中断源
中断定义说明
外部引脚电平引发的复位、
上电复位、掉电检测复位、
看门狗复位、JTAGAVR复位
外部中断请求0
外部中断请求1
4
5
6
7
$006
$008
$00A
$00C
TIMER2COMP
TIMER2OVF
TIMER1CAPT
TIMER1COMPA
定时计数器2比较匹配
定时计数器2溢出
定时计数器1事件捕捉
定时计数器1比较匹配A
华东师范大学电子系马潮7-5
8
$00E
第7章中断系统与基本应用
TIMER1COMPB定时计数器1比较匹配B
9
10
11
12
13
14
15
16
17
18
19
20
21
$010
$012
$014
$016
$018
$01A
$01C
$01E
$020
$022
$024
$026
$028
TIMER1OVF
TIMER0OVF
SPISTC
USARTRXC
USARTUDRE
USARTTXC
ADC
EE_RDY
ANA_COMP
TWI
INT2
TIMER0COMP
SPM_RDY
定时计数器1溢出
定时计数器0溢出
SPI串行传输结束
USART,Rx结束
USART,数据寄存器空
USART,Tx结束
AD转换结束
EEPROM就绪
模拟比较器
两线串行接口
外部中断请求2
定时计数器0比较匹配
保存程序存储器内容就绪
在这21个中断中,包含1个非屏蔽中断(RESET)3个外部中断(INT0、INT1、INT2)
和17个内部中断,它们的具体意义和使用方法将在相应的章节中详述,这里仅做大概的简
单介绍。
系统复位RESET中断,也被称作系统复位源。
RESET是一个特殊的中断源,是AVR中唯
一的不可屏蔽的中断。
当ATmega16由于各种原因被复位后,程序将跳到复位向量(缺省为
0x0000)处,在该地址处通常放置一条跳转指令,跳转到主程序继续执行(见2.6.5节)。
INT0、INT1和INT2是3个外部中断源,它们是分别由芯片外部引脚PD2、PD3、PB2上
的电平的变化或状态触发的。
通过对控制寄存器MCUCR和控制与状态寄存器MCUCSR的配置,
外部中断可以定义为由PD2、PD3、PB2引脚上的电平的下降沿、上升沿、逻辑电平变化,或
者低电平(INT2仅支持电平变化的边沿触发)触发,这为外部硬件电路和设备向AVR申请
中断服务提供了很大方便。
TIMER2COMP、TIMER2OVF、TIMER1CAPT、TIMER1COMPA、TIMER1COMPB、TIMER1OVF、
TIMER0OVF、TIMER0COMP这8个中断是来自于ATmega16内部的3个定时计数器触发的内
部中断。
定时计数器处在不同的工作模式下时,这些中断的发生条件和具体意义是不同的,
它们的应用将在有关定时计数器介绍的章节中进行详述。
USARTRXC、USARTTXC、USARTUDRE是来自于ATmega16内部的通用同步/异步串行接
收和转发器USART的3个内部中断。
当USART串口完整接收一个字节、成功发送一个字节以
及发送数据寄存器为空时,这3个中断会分别被触发。
还有其它6个中断也是来自ATmega16内部,它们分别由芯片内部集成的各个功能模块
产生,其中:
SPISTC为内部SPI串行接口传送结束中断,ADC为ADC单元完成一次A/D转
换的中断,EE_RDY是片内的EEPROM就绪(对EEPROM的操作完成)中断,ANA_COMP是由内
置的模拟比较器输出引发的中断,TWI为内部两线串行接口的中断,SPM_RDY是对片内的
Flash写操作完成中断。
在本书的相关章节中,会对这些中断的使用进行介绍。
7.2.2ATmega16的中断控制
1)中断优先级的确定
在AVR单片机中,一个中断在中断向量区中的位置决定了它的优先级,位于低地址的中
断优先级高于位于高地址的中断。
因此,对于ATmega16来说,复位中断RESET具有最高优
先级,外部中断INT0次之,而SPM_RDY中断的优先级最低。
也就是说,当与其他中断同时
基于AVR的单片嵌入式系统原理与实践应用
发生时,SPM_RDY将最后得到响应。
AVR单片机采用固定的硬件优先级方式,不支持通过软件对中断优先级的重新设定。
因
此中断优先级的作用仅体现在当同一时刻有两(多)个中断源向MCU申请中断的情况中。
在
这种情况下,MCU将根据中断的优先级的不同,把低优先级的中断挂起,首先响应中断优先
级最高的那个中断。
待优先级最高的中断服务程序执行完成返回后,再顺序响应优先级较低
的中断。
2)中断标志
AVR有两种机制不同的中断:
带有中断标志的中断(可挂起)和不带中断标志的中断(不
能挂起)。
在AVR中,大多数的中断都属于带中断标志的中断。
所谓的中断标志,是每个中断源在
其I/O空间寄存器中具有自己的一个中断标志位。
AVR的硬件系统在每个时钟周期内都会检
测(接受)外部(内部)中断源的中断条件。
一旦中断条件满足,AVR的硬件就会将置位相
应的中断标志位(置为“1”),表示向MCU提起中断请求。
中断标志位一般在MCU响应该中断时,由硬件自动清除,或在中断服务程序中通过读/
写专门数据寄存器的方式自动清除。
中断标志位除了由硬件自动清除外也可以使用软件指令
清除,注意:
如用软件方法清除,清除的方法是对其写“1”。
当中断被禁止,或MCU不能马上响应中断,则该中断标志将会一直保持,直到中断允许
并得到响应之止。
已建立的中断标志,实际就是一个中断的请求信号,如果暂时不能被响应,
该中断标志会一直保留(除非被用户软件清除掉),此时该中断被“挂起”。
如果有多个中断
被挂起,一旦中断允许后,各个被挂起的中断将按优先级依次得到中断响应服务。
应该注意
的是,AVR在退出中断后至少要再执行一条指令才能去响应其它被挂起的中断。
在AVR中,还有个别的中断不带(不设置)中断标志,如配置为低电平触发的外部中断
即为此类型的中断。
这类中断只要中断条件满足(外部输入低电平),便会一直向MCU发出
中断申请。
这种外部低电平中断有其特殊性,它不产生中断标志,因此不能悬挂记忆。
如果
由于等待时间过长而得不到响应,可能会因中断条件结束(低电平取消)而失去一次服务机
会。
另一方面,如果这个低电平维持时间过长,则会使中断服务完成返回后再次响应,使
MCU重复响应同一中断的请求,进行重复服务。
因此,在这在类中断的服务程序中,应该有
破坏中断条件产生的操作,例如,在低电平中断的服务程序中,使用相应的操作以释放外部
器件加在INT引脚上低电平。
低电平中断的重要应用是唤醒处于休眠工作模式的MCU。
因为当MCU休眠时,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七章 中断与中断系统 第七 中断 系统