Other Parts Discussed in Thread:MSP430FR2155
我有一个工程,已经开了2个中断了,分别为定时器中断和UART接收中断,但我目前有一个新的需求,就是增加一个IO口的下降沿触发中断,且需要IO的中断的优先级是最高,需要在其他两个中断里嵌套。我的处理方式是,在定时器的中断里关闭UART的中断使能,开总中断,退出时再使能UART的中断;在UART的中断里关闭定时器中断使能,开总中断,退出时再使能定时器中断。但最终有2个问题:1、IO中断还是会有100次里,2次左右无法实时响应;2、程序容易跑飞。请问下我是否哪里配置有误,谢谢!
以下是我的嵌套程序:
1、定时器中断
#pragma vector = TIMER2_B1_VECTOR
__interrupt void Timer2_B1_ISR(void)
{
TB2CCTL1 &= 0xFFFE; //CCIFG bit is zero
EUSCI_A_UART_disableInterrupt(EUSCI_A0_BASE,EUSCI_A_UART_RECEIVE_INTERRUPT);
_EINT(); // 允许嵌套中断
。。。
。。。
EUSCI_A_UART_enableInterrupt(EUSCI_A0_BASE,EUSCI_A_UART_RECEIVE_INTERRUPT);
}
2、UART中断
void __attribute__ ((interrupt(USCI_A0_VECTOR))) USCI_A0_ISR (void)
#else
#error Compiler not supported!
#endif
{
TB2CCTL1 &= ~CCIE; // TA1CCR1 interrupt enabled
_EINT();
。。。
。。。
TB2CCTL1 |= CCIE; // TA1CCR1 interrupt enabled}
3、IO中断
#pragma vector=PORT4_VECTOR
__interrupt void FAULT_P4_1 (void)
{
P4IFG &= ~0x02; //清除中断标志
duty = 0;
DUTY = DUTY1 = 0;
only_once = only_once | set_b1;
}
Susan Yang:
在中断服务程序中开了总中断,之后当同时有多个中断到达,会按优先级来执行。
中断优先级只有在多个中断同时到来才起做用。
能否说一下您现在的为何要使用上面帖子描述的中断方式?
,
user5059962:
是这样的,我需要用一个IO的下降沿来触发过流保护,因为这个芯片没有C2000的TZ事件,只能用IO的中断程序里去关PWM,且必须的实时的,所以,我需要这个中断可以打断其他的中断,且其他2个中断互不嵌套。请问还有其他实现方式吗,谢谢?
,
Susan Yang:
请问您现在使用的芯片具体型号是什么?我看您最开始的描述是使用的定时器中断和UART接收中断以及IO中断。所以现在是定时器产生PWM?而现在是在PWM中断服务程序中调用IO中断?
抱歉,我对您的描述有一些疑惑
,
user5059962:
我现在用的是MSP430FR2155,我就想IO口的下降沿是实时的,不会因为定时器的中断和UART的中断在执行,而无法立即响应IO中断,因为我要在IO的中断里关PWM。而这款芯片的中断嵌套会响应所有的别的中断,所以,我必须在定时器中断和UART的中断里,先把对方关了,执行完以后再使能,但出现的问题就如我上面帖子所述了。
,
Susan Yang:
很抱歉,之前漏掉了您的帖子。请问您现在是否解决了问题?