MSP430的中止优先级、翻开封闭、中止嵌套
优先级次序从高到低为:
PORT2_VECTOR (1 * 2u) /* 0xFFE2 Port 2 */
PORT1_VECTOR (4 * 2u) /* 0xFFE8 Port 1 */
TIMERA1_VECTOR (5 * 2u) /* 0xFFEA Timer A CC1-2, TA */
TIMERA0_VECTOR (6 * 2u) /* 0xFFEC Timer A CC0 */
ADC_VECTOR (7 * 2u) /* 0xFFEE ADC */
USART0TX_VECTOR (8 * 2u) /* 0xFFF0 USART 0 Transmit */
USART0RX_VECTOR (9 * 2u) /* 0xFFF2 USART 0 Receive */
WDT_VECTOR (10 * 2u) /* 0xFFF4 Watchdog Timer */
COMPARATORA_VECTOR (11 * 2u) /* 0xFFF6 Comparator A */
TIMERB1_VECTOR (12 * 2u) /* 0xFFF8 Timer B CC1-2, TB */
TIMERB0_VECTOR (13 * 2u) /* 0xFFFA Timer B CC0 */
NMI_VECTOR (14 * 2u) /* 0xFFFC Non-maska××e */
RESET_VECTOR (15 * 2u) /* 0xFFFE Reset [Highest Priority] */
当一起有多个中止来的时分才有优先级的考虑(优先级次序可查看向量表)
有中止呼应今后主动封闭总中止,这个时分即便来更高优先级的中止都不会呼应
要中止嵌套的话,就必须在中止中翻开总中止
msp430的指令中,DINT和EINT别离指关和开一切中止,也便是包容P1IE、P2IE、WDTIE、TAIE、TBIE、ADC12IE、串口中止答应的一切中止答应位为“0”和为“1”。
完成中止嵌套需求留意以下几点:
1)430默许的是封闭中止嵌套的,除非你在一个中止程序中再次开总中止EINT;
2)当进入中止程序时,只需不在中止中再次开中止,则总中止是封闭的,此刻来中止不论是比当时中止的优先级高仍是低都不履行;
3)若在中止A中开了总中止,则能够呼应后来的中止B(不论B的优先级比A高仍是低),B履行完再持续履行A。留意:进入中止B后总中止相同也会封闭,如 果B中止程序履行时需呼应中止C,则此刻也要开总中止,若不需呼应中止,则不必开中止,B履行完后跳出中止程序进入A程序时,总中止会主动翻开;
4)若在中止中开了总中止,后来的中止一起有多个,则会按优先级来履行,即中止优先级只需在多个中止一起到来时才起做用!中止服务不履行抢先准则。
5)关于单源中止,只需呼应中止,体系硬件主动清中止标志位,关于TA/TB定时器的比较/捕获中止,只需拜访TAIV/TBIV,标志位倍被主动铲除;
关于多源中止要手动清标志位,比方P1/P2口中止,要手艺铲除相应的标志,如果在这种中止用”EINT();”开中止,而在翻开中止前没有清标志,就会 有相同的中止不断嵌入,而导致仓库溢出引起复位,所以在这类中止中必须先清标志再翻开中止开关.