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.

[参考译文] MSP430FR2433:UART中断从未触发

Guru**** 633105 points
Other Parts Discussed in Thread: MSP-EXP430FR2433
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1087723/msp430fr2433-uart-interrupt-never-triggered

部件号:MSP430FR2433
主题中讨论的其他部件:MSP-EXP430FR2433MSP430FR5869

您好,

我正在从正在工作的UART TX示例中添加中断功能。

我尝试在中断例程中中断开关壳体,但它从未触发。

代码与以下示例基本相同: dev.ti.com/.../node

有人能给我建议吗?

这是代码。

int main(void)
{
    WDTCTL = WDTPW | WDTHOLD;       // stop watchdog timer

    P1DIR = 0x01;
    P1OUT = 0x00;
    P1REN = 0x00;

    P2DIR &= ~BIT3;                 // Set P2.3 as in
    P2REN |= BIT3;                  // enable pull-up/down resistor
    P2OUT |= BIT3;                  // pull-up resistor
    P2IES |= BIT3;                  // enable interrupt

    P1SEL1 &= ~(BIT4 | BIT5);       // USCI_A0 UART operation
    P1SEL0 |= BIT4 | BIT5;

    UCA0CTLW0 |= UCSWRST;           // Put USCI_A0 to software reset
    UCA0CTLW0 |= UCSSEL__SMCLK;     // Use SMCLK(1048576Hz) for baud rate calculation
    UCA0BRW = 9;                    // N = f/BR = 1048576/115200 = 9
    UCA0MCTLW = 8;
    UCA0CTLW0 &= ~UCSWRST;          // Release USCI_A0 software reset
    UCA0IE |= UCRXIE;               // Enable USCI_A0 RX interrupt
    __bis_SR_register(GIE);
    //__bis_SR_register(LPM3_bits|GIE); //LPM3 not work when using SMCLK
    PM5CTL0 &= ~LOCKLPM5;           // Disable the GPIO power-on default high-impedance mode to activate previously configured port settings
    while(1);

}


#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
    switch(__even_in_range(UCA0IV,USCI_UART_UCTXCPTIFG))
    {
    case USCI_NONE: break;
    case USCI_UART_UCRXIFG:
        P1OUT ^= 0x01;
        UCA0TXBUF = UCA0RXBUF;
        break;
    case USCI_UART_UCTXIFG: break;
    case USCI_UART_UCSTTIFG: break;
    case USCI_UART_UCTXCPTIFG: break;
    default: break;
  }
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    在此示例代码说明中,"设备将在LPM0/LPM3 (基于时钟源)中等待,直到收到UART字符。" 您是否向MCU发送任何数据以触发UART接收中断?

    如果您没有其它设备通过UART将数据发送到您的设备,则可以尝试此示例代码 。https://dev.ti.com/tirex/explore/node?node=AC4fkny7IVqnhUvmZEUGSg__IOGqZri__LATEST

    它只需要将TX引脚连接到RX引脚。

    此致,

    现金Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Cash,

    感谢您的回复。 我的主板是MSP-EXP430FR2433, 我已使用Putty和sscom向USSCI_A0 RX发送了一些字符。 这是触发中断的正确方式吗?

    或者我应该将另一个UART设备连接到WFP 1.4 和WFP 1.5 ?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,  

    我不熟悉这个“Putty and sscom”。 但是,如果您无法获得接收中断,我认为这不是触发设备的正确方式。 您可以尝试我在以前的论坛上建议的示例代码。  它不需要另一个设备来触发中断。  

    此致,

    现金Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Cash,

    我已经尝试了您上面提到的示例,它在串行监视器(sscom)中显示01。 即使打印了一些内容,Code Composer Studio也不能在__interrupt内的交换器壳上中断。

    这是否为预期结果?

    (编辑打字错误)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我刚刚在FR2433 Launchpad上尝试了你的(原始)代码,它按预期工作--我得到了(正确的)回声,LED切换。 [编辑:我忘了提及--我也达到了断点。]

    查看您的连接可能很有用。 所有跳线是否都安装在J101 (桥接器)上? BoosterPack收割台(J1/J2)上是否连接了任何部件?

    另外,请记住,使用运行调试器时,反向通道UART会运行缓慢/突发。 但这不会影响断点行为。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢你的帮助。

    下面是我的主板图片。 所有跳线都安装在J101上。

    另外,我想问一下您使用的是哪种版本的CCS? 我想尝试一下。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    您需要使用我建议的示例代码将WFP 1.4 连接到WFP 1.5。 我在 你的照片中没有看到它。

    此致,

    现金Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我使用的是9.3。 (这是否会产生影响并不明显,但谁知道?)

    我通过PuTTY (11.52万-8-N-1)和虚拟COM (8.1)连接到反向通道UART。  

    在您的while (1) in main中,定期将某些内容输出到UCA0TXBUF ('U'在范围上看起来很好)可能很有用。 它对您的Rx没有任何帮助,但它可以确保您的操作系统不会对端口执行有趣的操作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我已经尝试了你的建议,将WFP 1.4 和WFP 1.4 (UART0 TX和RX)缩短了。

    但串行监视器上没有显示任何内容,也没有触发断点

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢您提供的信息。

    使用CCS v 9.3 时的结果相同。

    如果我将while循环更改为主循环中的类似内容。 'U'打印在串行监视器上。 但RX端仍然不工作。

       而(1){
           UCA0TXBUF ='U';
           P1OUT ^= 0x01;
           __DELAY周期(104.8576万);
       }

    也许我应该借用示波器,看看RX引脚会发生什么。

    如果有更新,将在此处更新。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    当然。 使用示波器将帮助我们了解RX引脚上发生的情况。  

    此致,

    现金Hao

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉回复太晚。 我有 示波器 ,并将其探到  电路板的RX UART引脚。 但当我向串行终端发送一个字节时,不会触发任何操作。

    我已经使用不同型号的MSP430 (MMSP430FR5869)进行了自定义,并使用相同的代码触发UART中断。 结果将 按预期操作。 我可以中断中断例程并接收发送到设备的回声。  

    感谢大家的支持和耐心。