第七章 中断与中断系统Word下载.docx

上传人:b****6 文档编号:21979757 上传时间:2023-02-02 格式:DOCX 页数:71 大小:164.70KB
下载 相关 举报
第七章 中断与中断系统Word下载.docx_第1页
第1页 / 共71页
第七章 中断与中断系统Word下载.docx_第2页
第2页 / 共71页
第七章 中断与中断系统Word下载.docx_第3页
第3页 / 共71页
第七章 中断与中断系统Word下载.docx_第4页
第4页 / 共71页
第七章 中断与中断系统Word下载.docx_第5页
第5页 / 共71页
点击查看更多>>
下载资源
资源描述

第七章 中断与中断系统Word下载.docx

《第七章 中断与中断系统Word下载.docx》由会员分享,可在线阅读,更多相关《第七章 中断与中断系统Word下载.docx(71页珍藏版)》请在冰豆网上搜索。

第七章 中断与中断系统Word下载.docx

即断点处(实际为程序计数器PC的当前值――即

将执行的主程序的下一条指令地址,图7-1中的

k+1点)保存起来,称为保护断点。

又由于MCU

在执行中断处理程序时,可能会使用和改变主程

中断请求

K

K+1

中断响应

中断返回

序使用过的寄存器、标志位,甚至内存单元,因

图7-1中断过程示意图

此,在执行中断服务程序前,还要把有关的数据保护起来,称为中断现场保护。

在MCU执行

华东师范大学电子系马潮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申请中断。

但中断标志位的置“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的优先级来确定)。

用户程序对可屏蔽中断的控制,一般是通过设置相应的中断控制寄存器来实现的。

除了

设置中断的响应条件,用户程序还需要通过中断控制器来设置中断的其他特性,如:

中断触

发信号的类型、中断的优先级、中断信号产生的条件等等。

以上我们介绍了中断的基本概念,可以看出中断的控制与使用相对比较复杂。

但是正确

和熟练掌握中断的应用,是单片机嵌入式系统设计的重要和基本技能之一。

单片机的许多功

能和特点,以及变化无穷的应用,往往需要中断的巧妙的配合。

因此,要正确使用中断,必

须全面了解所使用单片机的中断特性,中断服务程序的编写技能,以及中断使用的技巧和设

计。

因此读者还需要在以后的学习和应用中进一步的深入理解,逐步全面的掌握中断应用的

基本技巧。

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

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中断的优先级最低。

也就是说,当与其他中断同时

发生时,SPM_RDY将最后得到响应。

AVR单片机采用固定的硬件优先级方式,不支持通过软件对中断优先级的重新设定。

此中断优先级的作用仅体现在当同一时刻有两(多)个中断源向MCU申请中断的情况中。

这种情况下,MCU将根据中断的优先级的不同,把低优先级的中断挂起,首先响应中断优先

级最高的那个中断。

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

的中断。

2)中断标志

AVR有两种机制不同的中断:

带有中断标志的中断(可挂起)和不带中断标志的中断(不

能挂起)。

在AVR中,大多数的中断都属于带中断标志的中断。

所谓的中断标志,是每个中断源在

其I/O空间寄存器中具有自己的一个中断标志位。

AVR的硬件系统在每个时钟周期内都会检

测(接受)外部(内部)中断源的中断条件。

一旦中断条件满足,AVR的硬件就会将置位相

应的中断标志位(置为“1”),表示向MCU提起中断请求。

中断标志位一般在MCU响应该中断时,由硬件自动清除,或在中断服务程序中通过读/

写专门数据寄存器的方式自动清除。

中断标志位除了由硬件自动清除外也可以使用软件指令

清除,注意:

如用软件方法清除,清除的方法是对其写“1”。

当中断被禁止,或MCU不能马上响应中断,则该中断标志将会一直保持,直到中断允许

并得到响应之止。

已建立的中断标志,实际就是一个中断的请求信号,如果暂时不能被响应,

该中断标志会一直保留(除非被用户软件清除掉),此时该中断被“挂起”。

如果有多个中断

被挂起,一旦中断允许后,各个被挂起的中断将按优先级依次得到中断响应服务。

应该注意

的是,AVR在退出中断后至少要再执行一条指令才能去响应其它被挂起的中断。

在AVR中,还有个别的中断不带(不设置)中断标志,如配置为低电平触发的外部中断

即为此类型的中断。

这类中断只要中断条件满足(外部输入低电平),便会一直向MCU发出

中断申请。

这种外部低电平中断有其特殊性,它不产生中断标志,因此不能悬挂记忆。

如果

由于等待时间过长而得不到响应,可能会因中断条件结束(低电平取消)而失去一次服务机

会。

另一方面,如果这个低电平维持时间过长,则会使中断服务完成返回后再次响应,使

MCU重复响应同一中断的请求,进行重复服务。

因此,在这在类中断的服务程序中,应该有

破坏中断条件产生的操作,例如,在低电平中断的服务程序中,使用相应的操作以释放外部

器件加在INT引脚上低电平。

低电平中断的重要应用是唤醒处于休眠工作模式的MCU。

因为当MCU休眠时,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 其它语言学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1