MSP430的中止优先级、翻开封闭、中止嵌套
优先级次序从高到低为:
PORT2_VECTOR (1 * 2u)
PORT1_VECTOR (4 * 2u)
TIMERA1_VECTOR (5 * 2u)
TIMERA0_VECTOR (6 * 2u)
ADC_VECTOR (7 * 2u)
USART0TX_VECTOR (8 * 2u)
USART0RX_VECTOR (9 * 2u)
WDT_VECTOR (10 * 2u)
COMPARATORA_VECTOR (11 * 2u)
TIMERB1_VECTOR (12 * 2u)
TIMERB0_VECTOR (13 * 2u)
NMI_VECTOR (14 * 2u)
RESET_VECTOR (15 * 2u)
当一起有多个中止来的时分才有优先级的考虑(优先级次序可查看向量表)。
有中止呼应今后主动封闭总中止,这个时分即便来更高优先级的中止都不会呼应。
要中止嵌套的话,就有必要在中止中翻开总中止。
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();”开中止,而在翻开中止前没有清标志,就会有相同的中止不断嵌入,而导致仓库溢出引起复位。所以在这类中止中有必要先清标志再翻开中止开关。
(1)铲除各个端口的外中止用:PxIFG,相应的方位0即可;
(2)铲除Timer中止用:TAIFG,TBIFG,相应的方位0即可;
MSP430的16个外中止比方软件铲除Flag,在进入外中止后,首先要做的便是把相应的PxIFG清0;
而定时器Timer中止是主动铲除Flag;
还有在中止嵌套的时分会用到,在进入中止后,MCU会主动把大局中止位GIE清零,这样在进入本中止后就不会再相应其他中止,若要进行中止嵌套,有必要在进入中止后把GIE再置1。
————————————————————————————————————————————
MSP430F2272 IO口中止运用的几点总结
这几天调试430,要求用IO中止唤醒体系。总结了以下几点经历,在运用IO口中止时应该留意。
一、多源中止中止标志需求软件清零。
在TI数据手册指出多源中止中止标志需求由软件整理。可是我在线仿真发现定时器的时钟中止和捕获中止好像会主动清零。不过最好仍是加上软件清零。而IO口中止有必要运用软件清零。
二、在中止封闭的情况下中止标志依然会被置位。
当IO口装备为中止功用后,不论是否敞开中止答应(PxIE.n),当中止条件满意时,相应的中止标志PxIFG.n都会由硬件主动置1。这样能最大极限的削减丢掉中止。假如在程序中要常常开关中止,主张在每次开中止之前先清零对应的中止标志位。否则或许会有问题。例如,在我的项目中需求用输入脉冲信号唤醒体系,当体系被唤醒后应该封闭该中止,而当体系进入休眠状况前应该再次敞开该中止。假如此刻在敞开该中止之前不清零中止标志,敞开中止后程序会当即进入中止服务子函数。
三、修正中止触发方法或许会使相应中止标志置位。
IO口中止触发方法有上升沿触发和下降沿触发两种。
四、别的弥补两点
1、若P2IN.x = 0, P2OUT.x = 1, P2REN.x = 1, P2DIR.x = 1, P2IES.x = 0(上升沿); 修正P2REN.x = 1 则 P2IN.x = 1, P2IFG.x = 1.
2、若P2IN.x = 1, P2OUT.x = 1, P2REN.x = 0, P2DIR.x = 1, P2IES.x = 1(下降沿); 修正P2OUT.x = 0 则 P2IN.x = 0, P2IFG.x = 1.
定论:P2IN发生跳变就会是中止标志方位位,P2IN的跳变或许因为改动P2OUT或许P2DIR或许P2REN而发生。
至于为什么改动P2OUT、P2REN、P2DIR会使得P2IN发生变化,应该参阅IO口的方框图。