立即注册 找回密码

微雪课堂

搜索
微雪课堂 AVR AVR单片机内核剖析 ATmega88 查看内容

ATmega88 复位与中断处理

2015-5-27 23:56| 发布者: kaloha| 查看: 2585| 评论: 0

摘要: AVR有不同的中断源。每个中断和复位在程序空间都有独立的中断向量。所有的中断事件都有自己的使能位。当使能位置位,且状态寄存器的全局中断使能位I 也置位时,中断可以发生。根据程序计数器PC 的不同,在引导锁定位 ...

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

程序存储区的最低地址缺省为复位向量和中断向量。完整的向量列表请参见 P47“中断”。列表也决定了不同中断的优先级。向量所在的地址越低,优先级越高。RESET 具有最高的优先级,第二个为INT0 – 外部中断请求0。通过置位MCU 控制寄存器 (MCUCR) 的IVSEL,中断向量可以移至引导Flash的起始处。编程熔丝位BOOTRST也可以将复位向量移至引导Flash的起始处。具体参见P240“支持引导装入程序 – 在写的同时可以读(RWW,Read-While-Write) 的自我编程能力, ATmega88 与 ATmega168”。特别说明ATmega48是没有Boot 代码区。

任一中断发生时全局中断使能位I 被清零,从而禁止了所有其他的中断。用户软件可以在中断程序里置位I 来实现中断嵌套。此时所有的中断都可以中断当前的中断服务程序。执行RETI 指令后I 自动置位。

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

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

AVR 退出中断后总是回到主程序并至少执行一条指令才可以去执行其他被挂起的中断。要注意的是,进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢复。这些工作必须由用户通过软件来完成。

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

汇编代码例程
in r16, SREG ; 保存SREG
cli ; 禁止中断
sbi EECR, EEMWE ; 启动 EEPROM 写操作
sbi EECR, EEWE
out SREG, r16 ; 恢复SREG (I 位)

C 代码例程
char cSREG;
cSREG = SREG; /* 保存SREG */
/* 禁止中断*/
_CLI();
EECR |= (1<<EEMWE); /* 启动 EEPROM 写操作*/
EECR |= (1<<EEWE);
SREG = cSREG; /* 恢复SREG (I 位) */

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

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

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

AVR 中断响应时间最少为4 个时钟周期。4 个时钟周期后,程序跳转到实际的中断处理例程。在这4 个时钟期期间PC 自动入栈。在通常情况下,中断向量为一个跳转指令,此跳转需要3 个时钟周期。如果中断在一个多时钟周期指令执行期间发生,则在此多周期指令执行完毕后MCU 才会执行中断程序。若中断发生时MCU 处于休眠模式,中断响应时间还需增加4 个时钟周期。此外还要考虑到不同的休眠模式所需要的启动时间。这个时间不包括在前面提到的时钟周期里。

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

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


236

顶一下

刚表态过的朋友 (236 人)

最新评论

所有教程
    01ATmega88 简介
    ATmega88是基于增强的AVR RISC结构的低功耗8 位CMOS微控制器。由于其先进的指令集以及
    02ATmega88 引脚功能
    引脚名称引脚功能说明VCC电源正GND电源地端口B(PB7..PB0)端口 B 为 8 位双向 I/O 口,
    03ATmega88 内核介绍
    本节从总体上讨论ATmega88 AVR 内核的结构。CPU 的主要任务是保证程序的正确执行。因
    04ATmega88 ALU
    ALU (Arithmetic Logic Unit)- 算术逻辑单元。 ATmega88 的 ALU 跟其他 AVR ALU 一样
    05ATmega88 状态寄存器
    ATmega88状态寄存器包含了最近执行的算术指令的结果信息。这些信息可以用来改变程序流
    06ATmega88 通用寄存器
    寄存器文件针对AVR增强型RISC指令集做了优化。为了获得需要的性能和灵活性,寄存器文
    07ATmega88 堆栈指针
    堆栈指针主要用来保存临时数据、局部变量和中断/ 子程序的返回地址。堆栈指针总是指向
    08ATmega88 指令执行时序
    这一节介绍ATmega88指令执行过程中的访问时序。AVR CPU 由系统时钟clkCPU 驱动。此时
    09ATmega88 复位与中断处理
    AVR有不同的中断源。每个中断和复位在程序空间都有独立的中断向量。所有的中断事件都
    010ATmega88 Flash程序存储器
    系统内可编程的Flash 程序存储器ATmega88具有8K 字节的在线编程 Flash,用于存放程序
    011ATmega88 SRAM数据存储器
    SRAM数据存储器Figure 10 给出了ATmega88 SRAM 空间的组织结构。ATmega88 是一个复杂
    012ATmega88 EEPROM数据存储器
    ATmega88包含512字节的EEPROM数据存储器。它是作为一个独立的数据 EEPROM 的寿命至少
    013ATmega88 I/O存储器
    ATmega88的 I/O P311“ 寄存器概述 ” 。ATmega88 的所有 I/O 和外设都被放置在 I/O
    014ATmega88 时钟系统及其分布
    时钟系统及其分布Figure12为ATmega88 的主要时钟系统及其分布。这些时钟并不需要同时
    015ATmega88 时钟源
    ATmega88芯片有如下几种通过Flash熔丝位进行选择的时钟源。时钟输入到AVR时钟发生器,
    016ATmega88 晶体振荡器
    XTAL1 与XTAL2 分别为用作片内振荡器的反向放大器的输入和输出,如Figure 13 所示,这
    017ATmega88 低频晶体振荡器
    为了使用32.768 kHz 钟表晶体作为器件的时钟源,必须将熔丝位CKSEL 设置为“1001”以
    018ATmega88 外部RC振荡器
    芯片可用外部时钟源驱动,如Figure15所示。此时CKSEL熔丝位必须按照Table15编程。选择
    019ATmega88 标定的片内RC振荡器
    校准的ATmega88片内 RC 振荡器提供了固定的 8.0 MHz 的时钟 这是在 3V、25 C 下的标称
    020ATmega88 外部时钟
    ATmega88可用外部时钟源驱动,如Figure 15所示的进行连接。此时CKSEL熔丝位必须按照Ta
    021ATmega88 定时器/计时器振荡器
    ATmega88可通过外部 32.768 kHz 表用振荡器或外部时钟源对定时器 计数器2 进行操作 。
    022ATmega88 MCU控制寄存器SMCR
    MCU 控制寄存器包含了电源管理的控制位。· Bits 7..4 Res 保留位: ATmega88中的这些
    023ATmega88 空闲模式
    SM2..0 为 000 时,SLEEP 指令使 MCU 进入 CPU 停止运行,而SPI、USART、模拟比较器、
    024ATmega88 ADC噪声抑制模式
    SM2..0为001时,SLEEP指令使MCU进入噪声抑制模式。在此模式下,CPU停止运行,而 ADC、
    025ATmega88 掉电模式
    SM2..0为010时,SLEEP指令使MCU进入掉电模式。在此模式下,外部晶体停振,而外部中断
    026ATmega88 省电模式
    当SM2..0 为011 时, SLEEP 指令将使MCU 进入省电模式。这一模式与掉电模式只有一点不
    027ATmega88 Standby模式
    Standby 模式当 SM2..0 为 110 ,且选择了外部晶体振荡器或陶瓷谐振器作为时钟源, SL
    028ATmega88 减少功耗的方法
    试图降低AVR 控制系统的功耗时需要考虑几个问题。一般来说,要尽可能利用睡眠模式,并
    029ATmega88 复位源
    复位AVR复位时所有的 I/O 寄存器都被设置为初始值,程序从复位向量处开始执行。 对于A
    030ATmega88 上电复位
    上电复位 (POR) 脉冲由片内检测电路产生。检测电平请参见 Table20。 无论何时 VCC 低
    031ATmega88 外部复位
    外部复位由外加于 RESET 引脚的低电平产生。当复位低电平持续时间大于最小脉冲宽度时
    032ATmega88 掉电检测
    ATmega88 具有片内 BOD(Brown-out Detection) 电路,通过与固定的触发电平的对比来检
    033ATmega88 看门狗复位
    看门狗定时器溢出时将产生持续时间为1个CK周期的复位脉冲。在脉冲的下降沿,延时定时
    034ATmega88 控制和状态寄存器MCUCSR
    AVR 控制和状态寄存器提供了有关引起AVR复位的复位源的信息。· Bit 7..4 – Res: 保
    035ATmega88 基准电压使能信号和启动时间
    ATmega88具有片内能隙基准源,用于掉电检测,或者是作为模拟比较器或ADC的输入。电压
    036ATmega88 看门狗定时器
    看门狗定时器由独立的128 kHz片内振荡器驱动。通过设置看门狗定时器的预分频器可以调
    037ATmega88 中断向量
    本节描述 ATmega88 的中断处理。更一般的 AVR 中断处理请参见 P11” 复位与中断处理
    038ATmega88 SPI数据模式与时序
    ATmega88有四种 XCKn (SCK)相位与极性的组合与串行数据有关,具体由 UCPHAn与UCPOLn决
    039ATmega88 片上调试系统
    特性* 完全的程序流控制* 仿真芯片上所有的模拟和数字功能,除了RESET引脚* 实时操作*
内核剖析
    01Atmega16
    深入剖析Atmega16芯片内核
    02Atmega48
    深入剖析Atmega48芯片内核
    03ATmega8
    深入剖析ATmega8芯片内核
    04ATmega128
    深入剖析ATmega128芯片内核
    05ATmega64
    深入剖析ATmega64芯片内核
    06ATmega32
    深入剖析ATmega32芯片内核
    07ATmega168
    深入剖析ATmega168芯片内核
    08ATtiny13
    深入剖析ATtiny13芯片内核
    09ATmega88
    深入剖析ATmega88芯片内核
    010ATtiny2313
    深入剖析ATtiny2313芯片内核
AVR

微雪官网|产品资料|手机版|小黑屋|微雪课堂. ( 粤ICP备05067009号 )

GMT+8, 2024-11-24 07:04 , Processed in 0.019422 second(s), 20 queries .

返回顶部