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.

[参考译文] MSP430F6459:msp430f6459

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1261378/msp430f6459-msp430f6459

器件型号:MSP430F6459

您好!

我正在编写一个简单的应用程序、其中控制器应通过 UART 中断接收字符、同时我的 while 循环应该不会执行。

我正尝试执行以下代码、其中 UART 应接受该字符、而我的 while 循环应持续运行、并应根据接收到的字符执行 if 或 else if 条件。

但它不是以这种方式工作的、   而是在_ bis_SR_register (LPM0_bits + GIE)停止;甚至没有进入 while 循环。

有人能帮助我解决这个问题吗?

空 main (void)

{

__ bis_SR_register (LPM0_bits + GIE);

 while (1)
 {
  if (UartRx_flag == 1)
   {
    UartRx_flag = 0;

      if (UCA0RXBUF == 0x31)
      {
         __delay_cycles (100000);
           ReadLocalTemp();
            TestMenu();
      }
      否则、如果(UCA0RXBUF == 0x32)
      {
          __delay_cycles (100000);
          ReadRemoteTemp();
          TestMenu();
       }
  }

 }

//*****
// UART RX 中断
//*****

#if defined (__TI_Compiler_version__)|| defined (__IAR_SYSTEMS_ICC__)
#pragma vector=USCI_A0_vector
__interrupt void USCI_A0_ISR (void)
#Elif 已定义(_ GNU _)
void __attribute__((interrupt (USCI_A0_vector)) USCI_A0_ISR (void)
#else
#错误编译器不受支持!
#endif
{
开关(__even_in_range (UCA0IV、4))
{
情形0:break;//向量0 -无中断
情形2://矢量2 - RXIFG
while (!(UCA0IFG & UCTXIFG));// USCI_A0 TX 缓冲器是否已就绪?


UCA0TXBUF = UCA0RXBUF;// TX -> RXED 字符


UartRx_flag = 1;         //将标志置为高电平

中断;
情形4:中断;//矢量4 - TXIFG
默认值:中断;

谢谢。此致、

K. Aravind,

第二代 Sigma 高级系统、

9848992750.

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

    尊敬的 Aravind:

    要开始解决此问题、我需要检查以下两件事:

    1) 1)我没有看到任何用于初始化引脚或相关寄存器以执行 UART 传输的代码。 这是否包含在您正在执行的代码中? 如果是、您可能希望将其包含在您的响应中、以便我可以看到您正在程序中执行的所有内容。 如果不需要、您应该添加此代码、以便 UART 模块能够有效地执行传输。

    2) 2)您是否能够检查并确认您的 ISR 正在执行?  

    谢谢

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

    确保 Rx_Flag 不稳定。

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

    尊敬的 Dylan Obrien:

    我已经初始化了所需的一切、而且 ISR 正在执行。

    我的唯一问题是什么是_ bis_SR_register (LPM0_bits + GIE)

    谢谢。

    Aravind.

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

    您好 Keith Barkley、

    感谢您的答复。

    甚至没有进入我想执行的 while 循环、但 ISR 正在执行。

    执行在  _ bis_SR_register (LPM0_bits + GIE)停止。

    这种方法的用途是什么  

    谢谢。

    阿尔文德  

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

    中断后它会将其置于低功耗模式、这样即使不运行 while 循环、也只运行中断代码。 删除了"LPM0_bits"

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

    该代码行全局启用中断并将器件置于低功耗模式0。  正如 Keith 在其响应中所提到的、您可以删除行的"LPM0_bits"部分、这样器件就永远不会进入低功耗模式。  

    请尝试一下、并告诉我们它是否可以解决您的问题、或者您是否需要进一步的帮助。