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.

MSP430中断嵌套问题

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;

}

  • 在中断服务程序中开了总中断,之后当同时有多个中断到达,会按优先级来执行。

    中断优先级只有在多个中断同时到来才起做用。

    能否说一下您现在的为何要使用上面帖子描述的中断方式?
  • 是这样的,我需要用一个IO的下降沿来触发过流保护,因为这个芯片没有C2000的TZ事件,只能用IO的中断程序里去关PWM,且必须的实时的,所以,我需要这个中断可以打断其他的中断,且其他2个中断互不嵌套。请问还有其他实现方式吗,谢谢?
  • 请问您现在使用的芯片具体型号是什么?我看您最开始的描述是使用的定时器中断和UART接收中断以及IO中断。所以现在是定时器产生PWM?而现在是在PWM中断服务程序中调用IO中断?

    抱歉,我对您的描述有一些疑惑
  • 我现在用的是MSP430FR2155,我就想IO口的下降沿是实时的,不会因为定时器的中断和UART的中断在执行,而无法立即响应IO中断,因为我要在IO的中断里关PWM。而这款芯片的中断嵌套会响应所有的别的中断,所以,我必须在定时器中断和UART的中断里,先把对方关了,执行完以后再使能,但出现的问题就如我上面帖子所述了。

  • 很抱歉,之前漏掉了您的帖子。请问您现在是否解决了问题?