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.

[参考译文] MSPM0G3507:UART 间歇性无法工作

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1582103/mspm0g3507-uart-not-working-intermittently

器件型号:MSPM0G3507


您好的团队、

我面临一个奇怪的问题、那就是 UART 无法接收数据。

 

我配置了两个 UART 的 UART0 和 UART2、两个 UART 都能够发送数据、但接收不一致。

 

有时 UART0 无法工作、UART2 无法工作或 UART0 和 UART2 都无法工作、但有时两者都正常工作、系统运行没有问题。

 

该行为类似于有时寄存器 UARTx->CPU_INT.MIS 设置为 0x400 (RXINT)、但不调用例程、有时不设置寄存器、也不调用例程。

 

请建议如何修复此问题。

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

    您好、Ankit、

    您能检查一下:

    • 是否触发 UART RX 中断(UART IIDX 寄存器显示挂起的 RXINT 中断)
    • 是否启用 UART NVIC。  
    • 您是在 LaunchPad 还是在您自己的电路板上进行测试、以及连接到 UART 引脚的连接方式。

    此致、

    Pengfei

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

    您好、

    以下是一些观察结果、

    当 UART0 不工作时、寄存器 UART0->CPU_INT.MIS 的值为 0x400、UART0->CPU_INT.IIDX 的值为 0xB(附加的屏幕截图)。

    当 UART2 无法正常工作时、寄存器 UART2->CPU_INT.MIS 的值为 0x0、UART2->CPU_INT.IIDX 的值为 0x0。

    我确认已启用 UART NVIC(随附屏幕截图)。

    此外、还在具有 MCU“MSPM0G3507SDGS28R"(“(28 引脚排列)的定制电路板上执行该操作。

    此外、我使用 SYSOSC @32MHz 和 HFXT->SYSPLLCLK0 @80MHz 对此进行了测试、每次的行为相同。 UART 波特率始终为 115200。

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

    确保始终读取 RXDATA 寄存器 (DL_UART_Main_receiveData ()) 以响应 RX 中断。 我看到 RIS 中设置了 OVRERR (0x10)、因此我怀疑这是发生了什么。 我的观察是清除 RX 中断 (DL_UART_clearInterruptStatus ()) 时不会清除 RXDATA 上的“锁定“。

    在 NVIC 中待处理时清除 IRQ (NVIC_ClearPendingIRQ ()) 后、我还看到了 UART0 情况 (MIS 中为 0x400)、尽管这可能是更罕见的情况。

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

    我的问题是在 UART RX 上未调用中断例程。

    当发现 UART0->CPU_INT.MIS 设置为接收 (0x400) 时、如何调用例程函数?

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

    我的建议是为了避免进入这个状态的第一个地方(没有真正知道它是如何发生的)。

    如果您丢失了“待处理“(在 NVIC 中)IRQ、则不会再次显示它。 在另一个线程(这里),我使用 OVRERR 来处理这种情况,因为超支是一种副作用。

    [编辑:该链接根本不可见。]

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

    问题已解决、谢谢。