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.

[参考译文] CC2642R:禁用时 UART 忙

Guru**** 2540720 points
Other Parts Discussed in Thread: SIMPLELINK-CC13XX-CC26XX-SDK

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1173461/cc2642r-uart-busy-when-disabled

器件型号:CC2642R
主题中讨论的其他器件:SIMPLELINK-CC13XX-CC26XX-SDK

使用 UARTCC26XX 驱动程序并经常打开和关闭 UART 时、我会遇到问题。  当调用 UARTCC26XX_open()时,由于设置了 FR BUSY 位,它会滞留在无限循环中。 有没有关于 UART 如何进入这样的不良状态的想法? 调用堆栈为:

和寄存器为:

SDK 是 simplelink_cc13x2_26x2_sdk_4_40_00_44 (是的、它很旧、但希望在更新前先进行调试、因为我们在现场安装了大量程序、并且正在小心升级)。

可能是某种竞争条件、因为在不同的任务中可能会出现"打开"和"关闭"。

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

    尊敬的 Martin:

    SIMPLELINK-CC13XX-CC26XX-SDK v6.10、TICRIVERS-5046中存在类似的 TT、其中 UART2_CLOSE 可以将 UART 硬件实例 UART_FR_BUSY 位设置为 https://software-dl.ti.com/simplelink/esd/simplelink_cc13xx_cc26xx_sdk/6.10.01.01/exports/docs/simplelink_mcu_sdk/release_notes_coresdk_cc13xx_cc26xx_6_10_00_13.html 

    一种可能的分辨率路径是从 source\ti\drivers\UART\UARTCC26X2.c 修改 UART_Close、以使用 UARTDisable 而不是禁用 UART FIFO。

        /* Disable UART FIFO */
    // REMOVE    HWREG(hwAttrs->baseAddr + UART_O_LCRH) &= ~(UART_LCRH_FEN);
    // REMOVE    /* Disable UART module */
    // REMOVE    HWREG(hwAttrs->baseAddr + UART_O_CTL) &= ~(UART_CTL_UARTEN | UART_CTL_TXE |
    // REMOVE                                      UART_CTL_RXE);
        UARTDisable(hwAttrs->baseAddr);  //ADD THIS LINE

    您可以将修改后的 UARTCC26X2.c 直接添加到您的项目目录中、以便它取代预构建的 TI 驱动程序库。  请尝试一下、让我知道它是否解决了问题。

    此致、
    Ryan

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

    这似乎解决了问题、谢谢!