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.

[参考译文] MSP430FR2355:UART 接收中断

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1260315/msp430fr2355-uart-receive-interrupt

器件型号:MSP430FR2355

我在 Launchpad 上装有 MSP430FR2355、我正在尝试使用 PC 通过连接到 USCI_A1的应用 UART 与它进行通信。 此时、我只是想将字符回显到计算机上。 我按如下方式配置 UART:

UCA1CTLW0 |= UCSWRST; // stop UART before configuring

UCA1CTLW0 |= UCSSEL_2; // use SMCLK clock source

/* set the baud rate to 9600 using values from user's guide for 1.048576 MHz BRCLK (baud rate clock)
*
* UCOS16 = 1 (lowest bit of UCA1MCTLW register)
* UCBRx = 6 (UCA1BRW register)
* UCBRFx = 13 (top half of lower byte of UCA1MCTLW register)
* UCBRSx = 0X22 (upper byte of UCA1MCTLW register)
*
*/
UCA1MCTLW |= 1; // enable oversampling
UCA1BRW = 6;
UCA1MCTLW |= 0x22D0;

UCA1IE |= UCRXIE; // enable interrupt when data is received

UCA1CTLW0 &= ~UCSWRST; // enable UART A1
P4SEL0 |= BIT2 | BIT3; // set UART_A1 pins as second function for Tx and Rx

我无法使用接收中断使它正常工作。 我正在使用的 ISR  根据示例代码进行了调整、以使用正确的 UART 通道- msp430fr235x_euscia0_uart_01.c (TI.com)。我添加了 LED 引脚的切换、以查看是否 调用了 ISR、它看起来根本没有调用。 我可以通过轮询 UCA1IFG 寄存器使其正常运行、但更愿意使用中断。

#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
P1OUT ^= 0x01;
switch(__even_in_range(UCA1IV, USCI_UART_UCTXCPTIFG))
{
case USCI_NONE: break;
case USCI_UART_UCRXIFG:
while(!(UCA1IFG & UCTXIFG));
UCA1TXBUF = UCA1RXBUF;
__no_operation();
break;
case USCI_UART_UCTXIFG: break;
case USCI_UART_UCSTTIFG: break;
case USCI_UART_UCTXCPTIFG: break;
default: break;
}
}

我做错了什么事吗?

谢谢

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

    您可能只是没有展示它、但您是:

    PM5CTL0 &=~μ A LOCKLPM5;     

    //禁用 GPIO 上电默认高阻抗模式
                                              //激活先前配置的端口设置

    __ bis_SR_register (LPM3_BITS|GIE);        //输入 LPM3、中断被启用

    ???

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

    您好!

    示例代码是否"按原样"工作而没有更改?   

    更仔细地看一下、我想该示例使用的是 UART0而不是 UART1。  如果您有一些跳线、可以尝试将 UART0引脚连接到 eZ-FET 接头上的 RX/TX 引脚。   (确保拆下跳线并将其连接到接头导线的编程器侧。   

    谢谢。

    JD

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

    我认为 JD 是对的。 Launchpad 上的"应用[反向通道] UART"通过 UART0进行连接。 您为何使用 UART1?

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

    嘿、Keith、

    我的意思是、我们的代码示例是为 UART0编写的、但从 launchpad 看、UART1实际上是连接到反向通道 UART 的。  因此、我认为这就是他尝试移植它的原因。    

    我建议从不变的代码和跳线开始。  看到它在工作。 并将其用作比较的工作源。   

    谢谢。

    JD

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

    我只想说一个小问题、在启用器件后不必启用中断、所以  

    UCA1CTLW0 &= ~UCSWRST; // enable UART A1
    UCA1IE |= UCRXIE; // enable interrupt when data is received

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

    是的、解决了这个问题。 谢谢