立即注册 找回密码

微雪课堂

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

ATtiny13 复位与中断处理

2015-5-28 00:22| 发布者: kaloha| 查看: 1246| 评论: 0

摘要: AVR有不同的中断源。每个中断和复位在程序空间都有独立的中断向量。所有的中断事件 都有自己的使能位。当使能位置位,且状态寄存器的全局中断使能位 I 也置位时,中断可以发生。程序存储区的最低地址缺省为复位向量 ...

AVR有不同的中断源。每个中断和复位在程序空间都有独立的中断向量。所有的中断事件 都有自己的使能位。当使能位置位,且状态寄存器的全局中断使能位 I 也置位时,中断可以发生。

程序存储区的最低地址缺省为复位向量和中断向量。完整的向量列表请参见P40“中断” 。 列表也决定了不同中断的优先级。向量所在的地址越低,优先级越高。RESET 具有最高的优先级,第二个为 INT0 – 外部中断请求 0。

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

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

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

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

使用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 个时钟周期。此外还要考虑到不同的休眠模式所需要的启动时间。这个时间不包括在前面提到的时钟周期里。

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


172

顶一下

刚表态过的朋友 (172 人)

最新评论

所有教程
    01ATtiny13 片上调试系统
    特性* 完全的程序流控制* 仿真芯片上所有的模拟和数字功能,除了RESET引脚* 实时操作*
    02ATtiny13 中断向量
    本节描述ATtiny13的中断处理。更一般的AVR中断处理请参见P9“复位与中断处理” 。如果
    03ATtiny13 看门狗定时器
    ATtiny13 有一个增强型的看门狗定时器 (WDT),其主要特征为:* 独立的片上振荡器提供
    04ATtiny13 基准电压使能信号和启动时间
    ATtiny13 具有片内能隙基准源,用于掉电检测,或者是作为模拟比较器或ADC的输入。电压
    05ATtiny13 控制和状态寄存器MCUCSR
    AVR 控制和状态寄存器提供了有关引起AVR复位的复位源的信息。· Bit 7..4 –Res:保留
    06ATtiny13 看门狗复位
    ATtiny13看门狗定时器溢出时将产生持续时间为1 个CK 周期的复位脉冲。在脉冲的下降沿
    07ATtiny13 掉电检测
    ATtiny13 具有片内BOD(Brown-out Detection) 电路,通过与固定的触发电平的对比来检测
    08ATtiny13 外部复位
    外部复位由外加于RESET 引脚的低电平产生。当复位低电平持续时间大于最小脉冲宽度时(
    09ATtiny13 上电复位
    上电复位(POR) 脉冲由片内检测电路产生。检测电平请参见 Table 12。 无论何时VCC 低于
    010ATtiny13 复位源
    复位AVRATtiny13复位时所有的I/O 寄存器都被设置为初始值,程序从复位向量处开始执行
    011ATtiny13 减少功耗的方法
    试图降低AVR 控制系统的功耗时需要考虑几个问题。一般来说,要尽可能利用睡眠模式,并
    012ATtiny13 掉电模式
    当 SM1..0 为 10 时,SLEEP 指令将使 MCU 进入掉电模式。在此模式下,外部晶体停振,
    013ATtiny13 ADC噪声抑制模式
    当SM1..0 为01 时, SLEEP 指令将使MCU 进入噪声抑制模式。在此模式下,ATtiny13 CPU
    014ATtiny13 空闲模式
    当SM1..0 为00 时,SLEEP 指令将使MCU 进入空闲模式。在此模式下,ATtiny13 CPU 停止
    015ATtiny13 MCU控制寄存器MCUCR
    MCU 控制寄存器包含了电源管理的控制位。· Bit 5–SE: 休眠使能为了使 MCU 在执行 SL
    016ATtiny13 系统时钟预分频器
    ATtiny13 系统时钟可通过设置时钟预分频寄存器 CLKPR 来分频。该特性可用来降低功 耗
    017ATtiny13 128kHz片内振荡器
    ATtiny13 128 kHz片内振荡器为提供时钟频率为128 kHz的低功耗振荡器。该频率为在3V、
    018ATtiny13 外部时钟
    为了从外部时钟源驱动芯片, CLKI 必须如 Figure 12 所示的进行连接。同时,ATtiny13
    019ATtiny13 标定的片内RC振荡器
    标定的片内 RC 振荡器提供了固定的 9.6 MHz 或 4.8 MHz 的时钟。 这些频率都是 3V、 2
    020ATtiny13 时钟源
    ATtiny13芯片有如下几种通过Flash熔丝位进行选择的时钟源。时钟输入到AVR时钟发生器,
    021ATtiny13 时钟系统及其分布
    时钟系统及其分布Figure 11为AVR的主要时钟系统及其分布。这些时钟并不需要同时工作。
    022ATtiny13 I/O存储器
    ATtiny13的 I/O P150“ 寄存器概述 ” 。ATtiny13所有的I/O及外设都被放置于I/O I/O位
    023ATtiny13 EEPROM数据存储器
    ATtiny13包含64字节的EEPROM数据存储器。它是作为一个独立的数据 可以按字节读写。EEP
    024ATtiny13 SRAM数据存储器
    SRAM数据存储器Figure 9 给出了ATtiny13 SRAM 空间的组织结构。前 160 个数据存储器包
    025ATtiny13 Flash程序存储器
    系统内可编程的Flash 程序存储器ATtiny13具有1K字节的在线编程Flash,用于存放程序指
    026ATtiny13 复位与中断处理
    AVR有不同的中断源。每个中断和复位在程序空间都有独立的中断向量。所有的中断事件 都
    027ATtiny13 指令执行时序
    这一节介绍指令执行过程中的访问时序。AVR CPU 由系统时钟clkCPU 驱动。此时钟直接来
    028ATtiny13 堆栈指针
    堆栈指针主要用来保存临时数据、局部变量和中断 子程序的返回地址。堆栈指针总是指 向
    029ATtiny13 通用寄存器
    寄存器文件针对AVR增强型RISC指令集做了优化。为了获得需要的性能和灵活性,寄存器文
    030ATtiny13 状态寄存器
    状态寄存器包含了最近执行的算术指令的结果信息。这些信息可以用来改变程序流程以实现
    031ATtiny13 ALU
    ALU- 算术逻辑单元AVR ALU 与32 个通用工作寄存器直接相连。寄存器与寄存器之间、寄存
    032ATtiny13 内核介绍
    本节从总体上讨论ATtiny13 AVR 内核的结构。CPU 的主要任务是保证程序的正确执行。因
    033ATtiny13 引脚功能
    引脚名称引脚功能说明VCC数字电路的电源GND地端口B(PB5..PB0)端口 B 为 6 位双向 I/O
    034ATtiny13 简介
    ATtiny13是基于增强的AVR RISC结构的低功耗8 位CMOS微控制器。由于其先进的指令集以及
内核剖析
    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, 2019-11-12 06:25 , Processed in 0.018962 second(s), 18 queries .

Powered by Discuz! X3.2 © 2001-2013 Comsenz Inc & Style Design

返回顶部