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.

[参考译文] Linux/MSP430G2553:UART 问题

Guru**** 2540720 points
Other Parts Discussed in Thread: MSP430G2553

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/570227/linux-msp430g2553-uart-problem

器件型号:MSP430G2553

工具/软件:Linux

您好!


我尝试使用以下代码了解 MSP430g2553的 UART:

#include

int main (void){
   WDTCTL = WDTPW + WDTHOLD;
   
   
   DCOCTL = 0;
   BCSCTL1 = CALBC1_1MHz;
   DCOCTL = CALDCO_1MHz;
   
   P1DIR |= BIT6 + BIT0;
   P1SEL = BIT1 | BIT2;
   P1SEL2 = BIT1 | BIT2;
   
   UCA0CTL1 |= UCSSEL_2;   // SMCLK
   UCA0BR0 = 104;   // Brattto Visna tabela do userguide PRA 1MHz 9600 baud
   UCA0BR1 = 0;   // Visto tambem 无用户指南 PRA 1MHz 9600波特

   UCA0MCTL = UCBRS0;   //调制 UCBRSx = 1
   
   //从复位中获取 UCA
   UCA0CTL1 &=~UCSWRST;
   
   //启用 USCI A0 RX 中断
   IE2 |= UCA0RXIE;    
   _bis_SR_register (LPM0_bits + GIE);  //启用所有中断(包括 UART)
     

   
#pragma vector=USCIAB0RX_vector
_interrupt void USCI0RX_ISR (void){

   while (!(IFG2 & UCA0TXIFG));   // USCI_A0 TX 缓冲器准备就绪?

   UCA0TXBUF = UCA0RXBUF;      // TX;RXED 字符
   P1OUT ^=(BIT0 + BIT6);
  

因此、我转到终端并执行以下命令:


$ echo 'A'>/dev/ttyACM0

当我执行该命令时、它会发送字符、据称它应该同时打开两个 LED、但结果是几乎立即打开和关闭。


如果我执行相同的命令、但使用两个字符、例如:

$ echo 'aa'>/dev/ttyACM0


结果是 LED 更亮、它们保持高电平状态(LED 亮起)、如果我再次执行命令、LED 将关闭。

那么、我想知道为什么我通过发送奇数或偶数获得不同的结果? 我如何解决这个问题? 我只想发送一个字符、并获得与发送两个字符相同的结果。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我了解设置(1MHz 时为9600波特率)、我的问题是在 ISR 中、一切都好吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    将其移至 MSP430论坛。

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

    您的 ISR 逻辑适用于所需的应用程序、代码在我的系统(Windows 7和 TeraTerm)上运行良好。 问题必须出在 Linux 终端、调试 ISR 值得一看、每个命令输入 ISR 的次数是多少。

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

    echo 命令会发送字符串和换行字符,除非您为其提供了-n 选项。 因此、当您发送"A"时、它会发送"A"来开启 LED、然后\n 来关闭 LED。 (该 XOR)

    您应该使用终端程序、而不是使用回声。 我使用 minicom。