原创 AVR中断知识

2009-9-18 16:55 3192 4 4 分类: MCU/ 嵌入式

只要全局中断开放,一旦有中断申请,AVR将响应中断的申请,既打断当前正在执行的任何程序(包括正在执行中断服务程序),进入中断服务程序。
如果有多个中断申请同时存在,MCU响应高优先权的中断(回答你的问题)。

========================================================

AVR外部中断的电平触发主要应用于唤醒CPU,其它情况时一般不建议使用电平触发方式。如必须使用电平触发,进入中断后要设法将触发的低电平信号取消,同时电平中断的服务程序中不能再次开放全局中断,否则系统堆栈会很快的爆掉了。

不管是使用51还是AVR,只要采用电平触发方式,那么在进入中断后要设法将触发电平信号取消。如果不取消,51不会爆堆栈(自己不能打断自己),但每次中断退出,又进入了。AVR的中断服务如果是不允许嵌套的,那么同51类似;而在允许嵌套时,会将堆栈压爆。

AVR的低电平触发中断服务应该这样设计,首先该中断服务不允许嵌套,既不能被任何中断打断。其次设法取消该中断的触发低电平(需要硬件的配合了)。服务程序在执行完相应的处理后,应该循环检测触发信号引脚是否恢复成高电平,恢复高电平后再退出本次中断。

实际上我上面提供的例子中也有这样的问题,如果按INT0的键N次后,系统堆栈就会溢出了。

所以我讲AVR的中断处理比51复杂,虽然非常灵活,但需要设计人员有更高的水平。因此建议一般不要采用中断嵌套的结构。一旦必须使用中断嵌套的结构,你必须精心设计你的系统和中断服务程序。否则出现的BUG非常隐蔽,不容易找到。

在一般场合中,我只是提醒大家尽量不要使用AVR的中断嵌套结构,并不做深入的讨论。因为需要具备一定的基础才能讨论这些问题。你是我碰到的第一位问到更深入层次的使用问题的。

其实,AVR中有许多非常有特色的设计,比如它的USART,在硬件设计上比标准51(这里指标准51,因为现在有很多51兼容的,它是否进行了改进我并不能全部了解)的方便使用,而且可靠性也要高多了。你有兴趣的话也可以做深入比较和分析。


转自:http://hi.baidu.com/dapaopao/blog/item/e2f9384e2238a8ced0c86a7a.html

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条