This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
上一次问一个问题,一位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点的正确性予以辨别和确认。这对我很重要。谢谢!!!!!!
你说的内容有些是不对的,我觉得你对中断的理解还是很模糊,430中断优先级基本上已经定好了,对于中断,高优先级的中断先执行,当高优先级的中断在执行的时候,低优先级的中断是被忽略的。低优先级的中断在执行时,来了高级的,才会打断低级的执行高级的。还是先看看书,然后再程序中弄个小程序测试一下体验实际的操作最深刻。
(1)我知道MSP430的中断优先级是定好的,而且貌似还不能更改;
(2)做51单片机的时候(或者PC机8051),51里面的中断系统确实如你所讲,中断的时候,如果来了更高优先级的新中断,则系统就会去执行该新中断;
(3)你的说法,刚好和我的帖子里面提到两种说法都不同,我现在也不知道到底哪个是对的
Shi JianHua 说的是错的,MSP430的中断优先级确实是定好的,但是优先级只在系统处于普通模式,两个不同优先级的中断同时发生时起作用。
一旦进入中断,全局中断使能就会被关闭。任何中断,无论低优先级的还是高优先级的都不能打断中断。这时候如何软件开始全局中断使能,那么无论比当前中断优先级高的,还是低的中断都会打断当前中断。
第一个是我回答的吧,两种说法并不冲突啊.
1. MSP430进入中断后,全局中断是关闭的,除非人工打开。
2. 中断优先级只在未进入中断前起判定作用,进入中断后如果打开了全局中断,任何中断(无论高优先级高,还是低)都能打断当前中断。
3. 所以在中断处理中,一般是不能打开全局中断的。除非有非常特殊的事件要处理。