logo

AVR应用笔记 AVR单片机内核剖析 ATmega128 复位与中断处理

ATmega128 复位与中断处理

以下资料参考马潮老师的中文手册,由微雪电子整理并发布,转载请注明出处:www.waveshare.net,否则追究相应责任!

AVR有不同的中断源。每个中断和复位在程序空间都有一个独立的中断向量。所有的中断 事件都有自己的使能位。当使能位置位,且状态寄存器的全局中断使能位I 也置位的情况 下,中断可以发生。根据不同的程序计数器PC 数值,在引导锁定位BLB02 或BLB12 被 编程的情况下,中断可能自动禁止。这个特性提高了软件的安全性。具体请参见 P 267“ 存储器编程” 。

程序存储器空间的最低地址缺省定义为复位和中断向量。完全的向量列表请参见 P 55“ 中 断” 。列表也决定了不同中断的优先级。向量所在的地址越低,优先级越高。RESET 具 有最高的优先级,下一个则为INT0 – 外部中断请求0。通过置位MCU 控制寄存器 (MCUCR)的IVSEL,中断向量可以移至引导Flash的起始处P 55“中断” 一节有详细说明。 编程熔丝位BOOTRST 可以将复位向量也移至引导Flash 的起始处。具体可参见 P 255“ 支持引导装入程序 – 在写的同时可以读(RWW, Read-While-Write) 的自我编程能力” 。

当中断发生时全局中断使能位I 被清零,所有的中断都被禁止。用户软件可以通过置位位 I 来使能中断嵌套。此时所有的中断都可以中断当前中断。执行RETI 指令后I 自动置位。

从根本上说有两种类型的中断。第一种由事件触发并置位中断标志。对于这些中断,程序 计数器跳转到实际的中断向量以执行中断处理例程,同时硬件将清除相应的中断标志。中 断标志也可以通过对其写”1” 来清除。当中断发生后,如果相应的中断使能位为”0”,则中 断标志位置位,并一直保持到中断执行,或者被软件清除。类似的,如果全局中断标志被 清零,则所有以发生的中断都不会被执行,直到I 置位。然后被挂起的各个中断按中断优 先级依次执行。

第二种类型的中断则是只要中断条件满足,就会一直触发。这些中断不需要中断标志。若 中断条件在中断使能之前就消失了,则中断不会被触发。

AVR 退出中断后总是回到主程序并执行一条指令才可以去执行其他被挂起的中断。

进入中断例程时状态寄存器不会自动保存;中断返回时也不会自动恢复。这些工作必须 由软件来完成。

使用CLI 指令来禁止中断时,中断立即禁止。没有中断可以在执行CLI 指令后发生,即使 它是在执行CLI 的同时发生的。下面的例子说明了如何在写EEPROM 时使用这个指令来 防止中断发生。

汇编代码例程
in r16, SREG ; 保存SREG
cli ; 禁止中断
sbi EECR, EEMWE ; 启动 EEPROM 写操作
sbi EECR, EEWE
out SREG, r16 ; 恢复 SREG (I-bit)
C 代码例程
char cSREG;
cSREG = SREG; /* 保存 SREG */
/* 禁止中断 */
_CLI();
EECR |= (1<<EEMWE); /* 启动 EEPROM 写操作 */
EECR |= (1<<EEWE);
SREG = cSREG; /* 恢复 SREG (I-bit) */

使用SEI 指令使能中断时,紧跟其后的第一条指令在执行任何中断之前先执行。

汇编代码例程
sei ; 置位全局中断使能标志
sleep ; 进入睡眠模式,等待中断发生
; 注意: 在执行任何被挂起的中断之前首先进入睡眠模式
C 代码例程
_SEI(); /* 置位全局中断使能标志 */
_SLEEP(); /* 进入睡眠模式,等待中断发生 */
/* 注意: 在执行任何被挂起的中断之前首先进入睡眠模式 */

中断响应时间

AVR 中断响应时间最少为4 个时钟周期。4 个时钟周期后,程序跳转到实际的中断处理例程。在这4 个时钟期间, PC 自动入栈。在通常情况下,中断向量为一个跳转指令,此跳转要花3 个时钟周期。如果中断在一个多周期指令执行期间发生,则在此多周期指令执行完后MCU 才会执行中断程序。若中断发生时MCU 处于睡眠模式,中断响应时间增加到8 个时钟周期。增加的时钟周期是由于唤醒启动时间引入的。

中断返回需要4 个时钟。在此期间PC( 两个字节) 将被弹出栈,堆栈指针加二,状态寄存 器SREG 的I 置位。

 相关AVR资料说明

可作为如下AVR的参考资料: ATtiny13 ATtiny24 ATtiny44 ATtiny84 ATtiny2313 ATtiny26 ATmega48 ATmega88 ATmega168 ATmega8 ATmega16 ATmega32 ATmega64 ATmega128 ATmega162 ATmega169 ATmega169P ATmega8515 ATmega8535

 相关AVR型号资料

ATtiny13 ATtiny24 ATtiny44 ATtiny84 ATtiny26 ATtiny2313
ATmega48 ATmega88 ATmega168 ATmega8 ATmega16 ATmega32
ATmega64 ATmega128 ATmega162 ATmega169 ATmega8515 ATmega8535

ATmega128 复位与中断处理

——