本帖最后由 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 |