[AVR单片机] ATMGE128A在IAR中嵌套中断的使用

[复制链接]
5511|10
 楼主| yushiqian2012 发表于 2013-3-31 22:51 | 显示全部楼层 |阅读模式
ATM, ge, IAR, vr, AVR
本帖最后由 yushiqian2012 于 2013-4-1 13:42 编辑

话不多少,直接正题:
         话说我一直使用STM32,然后就轻易地想当然的认为AVR也是支持嵌套中断的,然后悲剧就产生了,我用定时器中断里面发送指令,然后想用外部中断中断掉它,然后再用SPI中断中断掉外部中断,处理标志位,然后再依次回归,最后定时器中断中判断标志位while(!标志位);
结果就死机了,彻底的死机。搞了一下午,很是郁闷。然后就开始怀疑他是不是不支持嵌套中断,结果还真是。
        AVR的中断级别是死的,不像STM32,可以指定中断优先级,同时AVR中断是采用优先响应,但是进入中断后,硬件就直接关闭全局中断了。离开中断函数以后,硬件再重新打开全局中断。读到这里,大家应该明白了吧,这么来说,其实只要在中断函数里面重新打开全局中断,那么AVR也可以像STM32一样指定优先级了,如在中断函数里面屏蔽掉不想让响应的中断,打开想让响应的中断,就可以灵活的制定响应流程。我是用的是IAR编译器,所以流程就可以这么来做:

进入定时器中断以后:

1:屏蔽掉自身中断,防止嵌套自身中断
2:屏蔽掉其他不想让其相应的中断 ,打开让响应的中断
3:打开全局中断(IAR里面可以直接调用__enable_interrupt(); )

搞定!

评分

参与人数 1威望 +6 收起 理由
qin552011373 + 6 赞一个!

查看全部评分

qin552011373 发表于 2013-4-1 22:41 | 显示全部楼层
谢谢楼主分享经验
怎么会变懒 发表于 2013-4-11 14:08 | 显示全部楼层
谢谢楼主
bill_shi68 发表于 2013-4-13 01:44 | 显示全部楼层
AVR的中断级别是死的,不像STM32,可以指定中断优先级,同时AVR中断是采用优先响应,但是进入中断后,硬件就直接关闭全局中断了。离开中断函数以后,硬件再重新打开全局中断。

thanks!!!
飘飞的云123 发表于 2013-4-13 09:38 | 显示全部楼层
楼主加个QQ,想咨询AVR单片机一些问题。跪求指导!入门级新生报道!QQ:1042153286
谢了
qin552011373 发表于 2013-4-14 11:25 | 显示全部楼层
bill_shi68 发表于 2013-4-13 01:44
AVR的中断级别是死的,不像STM32,可以指定中断优先级,同时AVR中断是采用优先响应,但是进入中断后,硬件 ...

是茅塞顿开?
bill_shi68 发表于 2013-4-14 21:19 | 显示全部楼层
qin552011373 发表于 2013-4-14 11:25
是茅塞顿开?

先前看数据手册已经知道,在这里巩固了!
qin552011373 发表于 2013-4-15 14:41 | 显示全部楼层
bill_shi68 发表于 2013-4-14 21:19
先前看数据手册已经知道,在这里巩固了!

不错  多来啊
cos12a 发表于 2013-9-6 00:44 | 显示全部楼层
这对新手编写程序比较有利,默认的情况下防止中断嵌套.中断嵌套,会造成程序更加复杂,难以追踪运行.也提醒老鸟,注意可能存在的嵌套.
ygl968 发表于 2013-9-6 09:25 | 显示全部楼层
johnrita 发表于 2016-6-3 10:28 | 显示全部楼层
我的案例是,AVR外部低电平触发,进去后就打开全局总中断,然后程序有问题,数据不正常。怀疑是不是开中断后,自身嵌套了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:不需要别人来证明自己,自己的态度更重要

45

主题

354

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部