原创 AVR中断优先级以及中断嵌套处理

2011-11-2 12:37 3521 17 19 分类: MCU/ 嵌入式

AVR中断优先级以及中断嵌套处理

 
   1.AVR中断的优先级由该中断向量在中断向量区中的位置确定,处于低地址的中断向量所对应的中断拥有高优先级,所以,系统复位RESET拥有最高优先级。
   2.当两个中断同时发生申请中断时,MCU先响应中断优先级高的中断。低优先级的中断一般将保持中断标志位的状态(外部低电平中断除外),等待MCU响应处理。
   3.MCU响应一个中断后,在进入中断服务前已由硬件自动清零全局中断允许位。因此此时即使有更高优先级的中断请求发生,MCU也会不响应,要等执行到 RETI指令,从本次中断返回,并执行了一条指令后,才能继续响应中断。所以,在缺省情况下,AVR的中断不能嵌套。AVR中断的优先级只是在有多个中断 同时发生时才起作用,此时MCU将首先响应高优先级的中断。
   4.AVR中断嵌套处理是通过软件方式实现的。如在B中断服务中,如需要MCU能及时的响应A中断(不是等本次中断返回后再响应),B中断的服务程序应这 样设计:(1)B中断的现场保护;(2)屏蔽除A以外其它的中断允许标志;(3)用指令SEI开放允许全局中断;(4)B中断服务;(5)用指令CLI禁 止全局中断(6)恢复在本中断程序被屏蔽的中断允许标志;(7)B中断现场恢复;(8)B中断返回。
   5.采用软件方式实现中断嵌套处理的优点,是能够让程序员可以根据不同的实际情况和需要来决定中断的重要性,有更加灵活的手段处理中断响应和中断嵌套,如让低优先级的中断(此时很重要)打断高优先级中断的服务等,但同时也增加了编写中断服务程序的复杂性。
   6.由于AVR的指令执行速度比较高,因此在一般情况下,不建议使用中断嵌套的处理方法。当然,这还需要用户在编写中断处理服务程序中,应遵循中断服务程序尽量要短的原则。

文章评论2条评论)

登录后参与讨论

tsyctc2598_917119019 2012-12-15 18:10

用ISR(xxx_vect)貌似支持中断嵌套的,好像sig的那种不支持,现在很久都没接触单片机了,都有些忘了。

用户377235 2012-12-14 15:03

嗯。 未处于中断处理进程时,同时收到高低优先级的中断,则先进入优先级高的 处于中断处理进程时候,即使收到更高优先级的中断,也不会跳入高优先级中断,除非正在处理的这个中断代码中,一开始就有开了全局中断使能的代码。
相关推荐阅读
tsyctc2598_917119019 2014-08-08 22:17
几种由运放构成的恒流源的电路接法(转帖)
  图老是挂,传成附件了   这几种电路都可以在负载电阻RL上获得恒流输出 第一种由于RL浮地,一般很少用 第二种RL是虚地,也不大使用 第三种虽然RL浮地,但是RL一...
tsyctc2598_917119019 2014-02-23 12:40
cadence 16.3 16.5 16.6 hotfix 安装方法
**成功,共享方法:不少人遇到**之后安装HOTFIX不能使用、报错的问题,那是因为没有使用正确的安装方法。此方法只适合使用pubkey**的16.3、16.5和16.6用户。为何使用pubkey...
tsyctc2598_917119019 2013-05-07 23:36
2013-5-7更新cadence16.3学习笔记(下)
  44.  SI仿真时,提示can’t open xx/xx/xx/cycle.msm是怎么回事? 答:肯定是.brd文件的路径或文件名本身有空格。   45.  SI仿真时,提示“part wit...
tsyctc2598_917119019 2013-05-07 23:08
【新手学习Cadence16.3】自己的Allegro16.3的学习笔记,算是回报社会吧。
  2013-5-7更新 1.         Allegro中我设置了highlight的颜色为白色,但选中后颜色是白蓝相间的,很不方便查看。是什么地方...
tsyctc2598_917119019 2012-08-14 21:20
评论:@lihailin560's Blog 博客中提到的“给你们介绍一些毛骨悚然的骗人技术”
果然是惊悚系列的...
tsyctc2598_917119019 2012-08-12 22:50
【新手学习LPC1768】关于IO2IntEnR与EXTPOLAR、EXTMODE等的区别?
随便google了下,发现貌似没什么人关心这个问题,不过没关系,就让以后的初学者看到后不用再迷茫了。 其实两者是有很大不同的,前者只能通过软件不停查询LPC_GPIOINT->IO2IntS...
我要评论
2
17
关闭 站长推荐上一条 /2 下一条