上一次问一个问题,一位TI的工程师回答了以下内容:
“先普及下MSP430的中断系统:
1. 和大多数的MCU一样,MSP430的中断系统也分优先级,不同的中断源有不同的优先级。同一时间发生的N个中断时会优先触发中断级别较高的中断。
2. 和很多MCU不一样的是,一旦进入了中断处理函数,任何中断都可能被其他中断给打断而不管新中断的优先级是否比当前的中断优先级高还是低。可以这样理解,进入中断之后本次中断的优先级就变成最低的了,任何其他中断都可以打断本中断。
3. 所以在实际编程过程中,为了防止本次中断被其他中断打断,进入中断就需要关闭全局中断使能标志。
4. 如果在有的应用中允许某个中断类型打断本中断,就要人为得打开全局中断标志,并屏蔽掉其他不允许中断的标志类型。这样操作很复杂,所以推荐在应用中尽量减少中断处理的程序,而是用状态机或标志位来实现中断指示,放在主函数去处理需要较多时间处理的事件。”
但是,我到网上找资料的时候刚好越到一些相反的说法:
所以想要再次确认一下,430的中断机制到底是怎样的,有没有这方面的官方资料:
附我之前看到的一下说法:
1)430默认的是关闭中断嵌套的,除非你在一个中断程序中再次开总中断EINT;
2)当进入中断程序时,只要不在中断中再次开中断,则总中断是关闭的,此时来中断不管是比当前中断的优先级高还是低都不执行;
3)若在中断A中开了总中断,则可以响应后来的中断B(不管B的优先级比A高还是低),B执行完再继续执行A。注意:进入中断B后总中断同样也会关闭,如果B中断程序执行时需响应中断C,则此时也要开总中断,若不需响应中断,则不用开中断,B执行完后跳出中断程序进入A程序时,总中断会自动打开;
4)若在中断中开了总中断,后来的中断同时有多个,则会按优先级来执行,即中断优先级只有在多个中断同时到来时才起做用!中断服务不执行抢先原则。
5)对于单源中断,只要响应中断,系统硬件自动清中断标志位,对于TA/TB定时器的比较/捕获中断,只要访问TAIV/TBIV,标志位倍被自动清除;
麻烦,对这5点的正确性予以辨别和确认。这对我很重要。谢谢!!!!!!