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<
使用SEI 指令使能中断时,紧跟其后的第一条指令在执行任何中断之前一定会首先得到执行。
汇编代码例程
sei ; 置位全局中断使能标志
sleep ; 进入休眠模式,等待中断发生
; 注意: 在执行任何被挂起的中断之前MCU 将首先进入休眠模式
C 代码例程
_SEI(); /* 置位全局中断使能标志*/
_SLEEP(); /* 进入休眠模式,等待中断发生*/
/* 注意: 在执行任何被挂起的中断之前MCU 将首先进入休眠模式*/
AVR 中断响应时间最少为4 个时钟周期。4 个时钟周期后,程序跳转到实际的中断处理例程。在这4 个时钟期期间PC 自动入栈。在通常情况下,中断向量为一个跳转指令,此跳转需要3 个时钟周期。如果中断在一个多时钟周期指令执行期间发生,则在此多周期指令执行完毕后MCU 才会执行中断程序。若中断发生时MCU 处于休眠模式,中断响应时间还需增加4 个时钟周期。此外还要考虑到不同的休眠模式所需要的启动时间。这个时间不包括在前面提到的时钟周期里。
ATmega88中断返回需要4 个时钟。在此期间PC( 两个字节) 将被弹出栈,堆栈指针加二,状态寄存器SREG 的I 置位。
上一篇:ATmega88 Flash程序存储器
下一篇:ATmega88 指令执行时序
推荐阅读最新更新时间:2024-11-10 11:20
推荐帖子
- 瑞萨杯--2011全国大学生电子设计竞赛新闻发布会
- 昨天下午(6月7日)“瑞萨杯2011全国大学生电子设计竞赛”新闻发布会在竞赛秘书处单位北京理工大学举行,从而拉开了本届大赛的序幕。教育部高等教育司、工业和信息化部电子信息司相关领导,全国大学生电子设计竞赛组委会主任、两院院士、北京理工大学名誉校长王越,协办单位瑞萨电子(中国)有限公司大中国区总经理兼CEO郑力先生等出席了此次新闻发布会。自2009年起,将由NEC电子在中国的子公司NEC电子(中国)有限公司独家赞助、由中国教育部高等教育司及工业和信息化部人教司主办的全国大学生电
- maylove 电子竞赛
- 【实时时钟RTC】MSP430系统实时时钟RTC学习日志(完善中)
- 读取实时时钟:1、RTCRDY为0时,不能取读取实时时钟RT0PS源于ACLK,为了实时时钟日历的正确的运行,ACLK必须是32768Hz。(易出错)定时:一、每小时闹一次:每一小时的15分钟闹一次:1、将RTCAMIN设置成15;2、设置RTCAMIN的AE位和清除闹钟寄存器的其它所有AE位3、AF会在:00:14:59到00:15:00、01:14:59到01:15:00、02:14:59到02:15:00等等时刻被置位。二、在每天04:00:00时刻闹:1、RTC
- qinkaiabc 微控制器 MCU
- 实现100台手机组成的蓝牙散射网的问题
- 在大概十到二十平方米的空间里,要把100台左右的蓝牙手机用散射网组成一个局域网,在技术可行性上不知道能否行得通?希望各位大侠帮帮忙给点意见。 以前有看过一个老外写的Bluechat的手机程序,他也实现了蓝牙的无限连接,但不知道他使用了什么的办法。 想利用BTTREE来进行构造这个网络。这么多的设备不知道会不会在搜索、连接以及通信的时候出现冲突?还有设备的移出也是件很头痛的事。 这是小弟的毕业设计,没什么能做的,只能用些许分数来赠送大家了,希望大家能帮帮忙。 实现100台
- tsytkh 嵌入式系统
- 多款TI Launch板免费测评试用,赶紧来看看吧!
- LAUNCHXL-F28379D,LAUNCHXL-280049C,MSP430F5529LaunchPad,三款好板任你选,赶紧来申请吧!测评时间安排:申请时间:2020年9月17日-10月8日入选名单:10月9日-10月15日测评时间:10月16日-11月30日颁奖时间:12月1日-12月7日如何免费申请:进入对应板子的活动页面,点击我要参与,填写测评申请表进行申请点此申请LAUNCHXL-F28379D
- okhxyyo 微控制器 MCU
- 关于用超级终端AT命令读取诺基亚手机短信的问题
- 请问诺基亚5200通过蓝牙驱动IVTBlueSoleil与电脑连接,并打开蓝牙串行端口服务。然后在PC机上的超级终端里面连接到此手机蓝牙串口,并可以发送AT命令,但是奇怪的是,发AT可以返回OK,也可以发一些查询型号的AT命令,都有返回。但是发送AT+CMGR=1命令就返回ERROR,还有关于短信读取的AT命令都是返回ERROR,请问是不是诺基亚手机把这部分的AT命令给屏蔽了呢?还是说串口那里设置不正确?关于用超级终端AT命令读取诺基亚手机短信的问题是否因为短信存储区内没有短信.短信
- lilizhen329 嵌入式系统
- i/o接口问题
- I/O接口与I/O控制器的区别?通常说的串口编程,与串口设备的驱动有什么不同。为什么通常都说对串口编程,而不是对具体的串口设备编程?(因为串口通用的原因吗?)i/o接口问题在PC上,串口的设备驱动更底层,串口编程一般指编写应用程序。upupup串口驱动是你能够使用串口open,read,write的基础,是内核态的驱动模块。串口编程是在串口驱动的基础上,使用串口驱动定义了的open,read,write打开串口,对串口实现读写。而具体的串口设备通常不需要特别编程,只需要通
- scorpio 嵌入式系统