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.

[参考译文] CC2340R5:有关 UART 和放大器的问题;DMA

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1254124/cc2340r5-questions-about-uart-dma

大家好!

如何配置 DMA 以便在不使用函数 uart2_open()的情况下发送数据?

目前我在没有  uart2_open()的情况下配置自己的 UART 读回调,所以我不使用 DMA。 原因如下:

我正在尝试使用 CC2340 UART 进行 LIN 通信。  我需要使用读回调完成 LIN 消息的接收。

  SDK 7.10中提供了一个示例 uart2callback,但由于在函数 uart2_open()中启用了 DMA,读取回调具有延迟。

此延迟 P0对于 LIN 通信非常糟糕。

在 LIN 通信中、我只需要接收1个字节、因此不需要 DMA 和 FIFO、但它们的启用 会导致接收延迟。  

但是,在使用 HwiP_create()函数时,我成功地配置了一个没有 DMA 和 FIFO 的 UART 读回调。 它工作正常、 没有长接收延迟。

对于 UART 发送, 在 SDK 7.10中有一个函数 UARTPutChar ()。 (路径:simplelink_lowpower_f3_sdk_7_20_00_01_eng\source\ti\devices\cc23x0r5\driverlib)

//*****************************************************************************
//
// Blocks until there is space in the data register, and writes a byte to it
//
//*****************************************************************************
void UARTPutChar(uint32_t base, uint8_t data)
{
    // Wait until space is available.
    while (HWREG(base + UART_O_FR) & UART_FR_TXFF) {}

    // Send the char.
    HWREG(base + UART_O_DR) = data;
}

奇怪的是、我的代码已经在 while 循环中卡住了2次。

我从来没有发现为什么,非常害怕再次发生这种情况。  

所以是否可以将 UART 发送分别配置为 DMA 发送而不使用 uart2_open ()函数?

是否有任何信息可用?

谢谢!

此致、

彼得

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

    Peter、您好!

    为了给 UART2和 DMA 提供一些上下文、请从 UART2.h 头文件读取:

    "UART2使用 DMA 在 UART FIFO 以及 RX 和 TX 环缓冲区之间传输数据(在非阻塞模式下)。 在阻塞模式和回调模式下、DMA 将在硬件 FIFO 和应用程序提供的源/目标缓冲区之间直接传输数据。"

    使用 TI 驱动程序时、UART2链接到不适合您应用程序的 DMA、因此、为了使用没有 DMA 功能的 UART、您需要从 UART2 TI 驱动程序中提取 UART 功能、以便创建您自己的由 driverlib 运行的应用; 最后 、当您不希望 UART2-DMA 链接在一起时、不应使用 UART2 TI 驱动程序 API。

    谢谢
    A·F

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

    尊敬的 Alex:

    感谢您提供信息。  

    我想知道是否可以将 UART Tx 单独连接到 DMA、而 UART Rx 继续使用我在回调模式下配置的硬件中断:)

    Br、

    彼得

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

    Peter、您好!

    要了解 DMA 如何与 UART2关联、我建议访问(simplelink_cc13xx_cc26xx_sdk_7_10_01_24\source\ti\drivers\uart2\UART2CC26X2.c)、从 UART2CC26X2.c 文件中可以看到 TX 和 RX 直接链接到 DMA 以进行 UART 操作。  

    如果您尝试在没有 DMA/UART2 TI 驱动程序的情况下使用 UART RX、则也不能对 UART TX 使用 DMA/UART2 TI 驱动程序。 然而、也可以通过自己独立的 driverlib 函数(使用 UART2CC26X2.c 作为参考)使用 DMA 来实施 UART TX、但如果采用这种方法、具体由您来实现。  

    谢谢。
    A·F

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

    感谢 Alex、非常感谢您的帮助。