打印

关于maskable interrupt中断的讨论

[复制链接]
3561|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yirongfu|  楼主 | 2011-10-17 12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yirongfu 于 2011-10-18 11:56 编辑

针对maskable interrupt,假设这么个应用情况:使用了MSP430的两个中断资源,一个是定时器中断,另一个是I/O口触发中断,总中断GIE使能,同时两个模块各自的中断(TxIE、PxIE)也使能。
    如果两个模块的标志位(TxIFG、PxIFG)刚好同时被置位,此时,高优先级的中断服务程序先被执行。问题是这样的:
1.  如果在高优先级的服务程序里将相对低优先级的另外那个中断的中断使能IE复位(即禁能其中断,不是禁能总中断GIE),但不改变标志位IFG,那么在执行完高优先级的中断服务程序之后,低优先级别的中断对应的中断服务程序还能被执行吗?如果改为在高优先级的服务程序里,将相对低优先级的另外那个中断的中断标志位IFG清除,依旧保持中断使能IE,那么在执行完高优先级的中断服务程序之后,低优先级别的中断对应的中断服务程序还能被执行吗?
2.  或者换个问法,当存在多个中断标志时,如何在某个中断服务程序执行过程中(即在中断服务程序内)将其他已经产生中断标志但未被执行的中断禁掉,也就是说在当前中断服务程序执行完后不再执行其他还未处理的中断?
3.  延伸一个问题:在某个中断执行过程中,在结束前如果有高优先级的中断产生,这时430是先去处理高优先级中断,还是排队等当前中断执行完、从中断返回后再去执行高优先级中断?

    欢迎朋友们讨论一下这个问题,也期盼有实际操作经验的朋友分享经验。只要回答正确就送分,看人数平均给,只能使用50分,万一超过50人就结贴,回答好的、早的酌情多给哦!;P

相关帖子

沙发
TI_MCU| | 2011-10-17 16:34 | 只看该作者
这里仅针对maskable interrupt讨论:

问题1、2:
在430中断过程中,GIE会被自动清除,所以后续的其它中断不会被执行。中断服务程序中清除其它中断标志,退出ISR时GIE会再被自动置位,但这些中断也不会被执行了。

问题3:
430中断时GIE会被自动清除。如果中断服务程序中手动置位GIE就会开启中断嵌套,此时不管后续中断请求的优先级高低,都会中断当前的中断服务程序。所以该功能要慎用。

使用特权

评论回复
板凳
五谷道场| | 2011-10-17 23:08 | 只看该作者
这么长篇大论,呵呵

使用特权

评论回复
地板
vivisa| | 2011-10-18 09:31 | 只看该作者
430我的硬伤

使用特权

评论回复
5
yirongfu|  楼主 | 2011-10-18 11:54 | 只看该作者
这里仅针对maskable interrupt讨论:

问题1、2:
在430中断过程中,GIE会被自动清除,所以后续的其它中断不会被执行。中断服务程序中清除其它中断标志,退出ISR时GIE会再被自动置位,但这些中断也不会被执行了。

...
TI_MCU 发表于 2011-10-17 16:34


版主所言极是,这个讨论仅针对maskable interrupt

使用特权

评论回复
6
yirongfu|  楼主 | 2011-10-18 11:57 | 只看该作者
430我的硬伤
vivisa 发表于 2011-10-18 09:31


那就在这里倾诉出来,大伙帮您疗疗伤吧:)

使用特权

评论回复
7
TI_MCU| | 2011-10-18 17:37 | 只看该作者
3# 五谷道场

看看我的回复就可以了  嘿嘿

使用特权

评论回复
8
永远的不知| | 2011-10-18 22:00 | 只看该作者
这次把中断说透彻了!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:生活将我们磨圆,是为了让我们滚得更远。。。 我来到这个世上就没打算活着回去!

99

主题

906

帖子

2

粉丝