原创 关于AVR中断的疑问

2010-5-4 22:16 2956 6 17 分类: MCU/ 嵌入式

今天在用AVR的时候试了一下中断嵌套   感觉很怪  我的两个中断服务程序如下


我在中断程序里面都用了SEI();


用JTAG调试了一下  发现只要TCNT0一溢出  就触发TIMER0的中断  在中断的过程中只要TCNT2一溢出  就触发了TIMER2的中断   这样子级别高的中断打断低的中断是没什么问题啊   但是在TCNT0再次溢出时  还是会触发TIMER0的中断   这就很奇怪了   难道中断级别低的中断可以中断级别高的中断吗    ???


哪位高手指导一下啊   下面就是我用的两个中断程序


//T0溢出中断服务程序
#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
  TCNT0 = 0xB4;
  SEI();
  dlygd(0,0);
  dlygd(0,0);
}


//T2溢出中断服务程序
#pragma interrupt_handler timer2_ovf_isr:5
void timer2_ovf_isr(void)
{
 TCNT2 = 0xA0;
 SEI();
 saomiao();
}


 


假如一开始开的是INT0的中断  那么INT0的中断可以一直进  只要不改变中断使能

PARTNER CONTENT

文章评论11条评论)

登录后参与讨论

用户377235 2013-8-27 16:25

我现在也遇到了这个问题

用户1623314 2010-5-15 20:33

如果在初始化中开了总中断 那么AVR在进去中断后会把总中断给关了 中断出来后就会重新开中断 所以如果不用在中断里面嵌套另一个中断 就不用在中断服务程序里面开总中断使能。。。

用户1623314 2010-5-4 22:10

假如一开始开的是INT0的中断 那么INT0的中断可以一直进 只要不改变中断使能

用户1623314 2010-5-4 16:14

无论导致引脚电平变化的原因是来自单片机内部还是外部 只要引脚上的电平发生了变化 都可以触发该引脚上的电平变化中断

用户1623314 2010-4-29 15:29

简单的说 中断就是在中断源触发的时候启动中断程序 而在没有中断源的时候不执行 如果不使用中断 如果要根据某个端口的变化而作相应的动作 就必须不断地查询端口的信号 而中断不用 这就是区别。。。

用户1623314 2010-4-27 15:53

AVR单片机,其硬件系统不支持自动实现中断嵌套的处理。如果在系统设计中,必须使用中断嵌套处理,则需要由用户编写相应的程序,通过软件设置来实现中断嵌套的功能。

用户1623314 2010-4-27 15:50

中断优先级的概念是针对有多个中断源同时申请中断时,MCU如何响应中断,以及响应哪个中断而提出的。

用户1623314 2010-4-26 22:26

AVR的中断有2种类型的,一种是设置标志位为"1"的可挂起中断,一种是不影响标志位的不可挂起中断.大部分的中断属于第一种形式的. >>在中断服务程序执行的时候又来一个中断请求........ AVR在进入响应中断过程中,由硬件自动将全局中断允许标志清另,因此在中断服务程序执行过程中是不会再响应其它的中断了,所以后来的中断不会不会马上得到响应. 根据后来中断类型的不同,后续的处理也不一样: 如果是第一类型的中断,它的中断标志已经为"1",尽管AVR没有马上响应,但标志位保持着,等代AVR的响应(称为中断挂起).当AVR从中断返回后,如果标志位没有被软件清除,在执行一条指令后,会响应该中断的(尽管中断产生条件已经过去了). 对于第二类型的中断(不设置标志位的),在AVR执行中断的过程中肯定不不会响应的.当AVR从中断返回后,如果该中断的产生条件还存在,那么AVR执行一条指令后,响应该中断;如果中断产生条件不成立了,AVR就不会响应了(丢失一次中断).

用户1623314 2010-4-26 22:24

AVR中断嵌套处理是通过软件方式实现的。如在B中断服务中,如需要MCU能及时的响应A中断(不是等本次中断返回后再响应),B中断的服务程序应这样设计:(1)B中断的现场保护;(2)屏蔽除A以外其它的中断允许标志;(3)用指令SEI开放允许全局中断;(4)B中断服务;(5)用指令CLI禁止全局中断(6)恢复在本中断程序被屏蔽的中断允许标志;(7)B中断现场恢复;(8)B中断返回。 用户在编写中断处理服务程序中,应遵循中断服务程序尽量要短的原则

用户1623314 2010-4-26 22:23

当MCU响应一个中断时,其硬件系统会自动中断返回地址压入系统堆栈,并将关闭全局中断响应(硬件将中断标志I位清0),清除该中断的中断标志位;执行中断返回指令RETI时,硬件会先允许全局中断响应(硬件将中断标志I位置1),然后从系统堆栈中弹出返回地址到PC程序计数器中,继续执行被中断打断的程序。除此之外,MCU的硬件没有对中断保护做其他处理。
相关推荐阅读
用户1623314 2011-01-22 14:52
STM32入门系列教程之十五《如何使用SecureCRT串口终端软件》
attachment download...
用户1623314 2011-01-22 14:51
STM32入门系列教程之十四《STM32的USB下载调试》
attachment download...
用户1623314 2011-01-22 14:50
STM32入门系列教程之十三《点亮LCD液晶屏》
attachment download...
用户1623314 2011-01-22 14:49
STM32入门系列教程之十二《实时时钟RTC编程》
attachment download...
用户1623314 2011-01-22 14:48
STM32入门系列教程之十一《Systick编程》
attachment download...
用户1623314 2011-01-22 14:47
STM32入门系列教程之十《定时器与蜂鸣器》
attachment download...
EE直播间
更多
我要评论
11
6
关闭 站长推荐上一条 /3 下一条