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.

[参考译文] MSPM0G1507:具有 DMA 的 UART TX 和 RX

Guru**** 2832805 points

Other Parts Discussed in Thread: MSPM0G3507, MSPM0G3519

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1630341/mspm0g1507-uart-tx-and-rx-with-dma

部件号: MSPM0G1507
Thread 中讨论的其他器件: MSPM0G3507MSPM0G3519

尊敬的 TI 团队:

我尝试了解它如何通过 DMA 从 UART 发送和读取数据。 我认为 FIFO 也有道理。 我的目标是发送包含数千个测量值(Q15 值)的数组。 TX 缓冲区使用 8 位、因此我必须发送数组的每个第一个字节和第二个字节 (>8) 值。 可能有适合此目的的功能?

  • 对于单个 8 位发送、我测试了可以正常工作的 DL_UART_Main_transmitData ()。
  • 使用 FIFO:我测试了 DL_UART_Main_fillTXFIFO ()、如果我对每 4x8 位数据包使用一个 for 循环、并且单次传输之间有适当的延迟、它也可以工作。 是否有要读取的发送完成标志?
  • 使用 DMA:我找不到使用 DMA 发送它的任何函数。 是否有任何示例来了解这种方法?

此致

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

    在 MSPM0 SDK 中查看以下演示:

    C:\ti\mspm0_sdk_2_10_00_04\examples\nortos\LP_MSPM0G3507\driverlib\uart_rw_multibyte_fi

    C:\ti\mspm0_sdk_2_10_00_04\examples\nortos\LP_MSPM0G3507\driverlib\uart_rx_multibyte_fifo_DMA_interrupts

    C:\ti\mspm0_sdk_2_10_00_04\examples\nortos\LP_MSPM0G3507\driverlib\uart_tx_multibyte_fifo_DMA_interrupts

    ------------------------

    C:\ti\mspm0_sdk_2_10_00_04\examples\nortos\LP_MSPM0G3519\demos\bq7870x_TIDA010279

    下面的演示可帮助您更好地了解 Rx Tx/UART。 这是在 mspm0_uart.x 文件中

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

    感谢您提供的信息。 我对示例“uart_tx_multibyte_fifo_dma_interrupts"有“有疑问。

    应该发生 DL_UART_MAIN_IIDX_DMA_DONE_TX 和 DL_UART_MAIN_IIDX_EOT_DONE 来启动新的传输。 这两个 IRQ 之间有何区别? 因为如果 DMA 发送 DONE TX IRQ、则传输完成...

    如何实现对 DL_UART_MAIN_IIDX_EOT_DONE IRQ 的回调函数?

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

    DMA 传输完成(在 DMA/RAM 和 UART 之间)、但 UART 仍在发送 FIFO 中的最后一个或多个字节。

    DL_UART_MAIN_IIDX_EOT_DONE

    UART 发送完成。

    、如何实现对 DL_UART_MAIN_IIDX_EOT_DONE IRQ 的回调函数?

    在这种情况下、只需添加您的回调函数、中断就可以...

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

    但是、如果我在中断中添加回调函数、那么我只能使用  DL_UART_MAIN_IIDX_EOT_DONE 情况。 这样做是否正常、或者是否 也有理由检查中断 DL_UART_MAIN_IIDX_DMA_DONE_TX?

    是否仍然可以将回调函数放置到中断 DL_UART_MAIN_IIDX_EOT_DONE?

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

    仔细检查会更好、但只检查 EOT 就足够了。

    是否仍可以将回调函数置于中断 DL_UART_MAIN_IIDX_EOT_DONE?

    是的、可以。

    例如、如果您启用 UART 的 4 字节 FIFO、DMA 完成将早于 EOT 完成大约 4 字节的传输时间、这也与您设置的 UART FIFO 触发电平(将触发 DMA 传输)有关。

    如果您要测试这些时序、可以添加两个 IO、在 UART 中断中切换 IO、以便更好地监控这些中断的时序、最好捕获 UART Tx 线路以进行比较。