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:串口、DMA、FIFO、RX Timeout

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1522488/mspm0g3507-dma-fifo-rx-timeout

器件型号:MSPM0G3507

工具/软件:

MSPM0G3507串行端口 DMA 接收可变长度数据帧。 当通过≥3个条目启用 FIFO 且启用了 RX 超时时时、当数据帧长度不是3的倍数时、可以正常进入 RX 超时中断。 但是、当数据帧长度是3的倍数时、FIFO 为空、防止进入 RX 超时中断并导致 DMA 无法重新启动。 当 FIFO 容量更改为其他数据时、具有相应长度的数据帧中也会发生错误。 如何解决此问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Unknown 说:
    当启用 FIFO 并启用≥3个条目且启用 RX 超时时时、当数据帧长度不是3的倍数时、可以正常输入 RX 超时中断。

    这是正确的、即函数限制。

    Unknown 说:
    如何解决此问题?

    添加另一个计时器来读取 DMA 大小、是大小已更改、重新启动计时器、如果大小为0、则停止计时器、如果大小未更改、则应触发超时。

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

    我在 dma 头文件中找不到用于读取当前 dma 大小的函数。 那么、我是否需要编写函数来自行读取 DMA 大小、或者 TI 是否提供了可以使用的库函数?

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

    这是寄存器:

    TRM 中的5.3.24 DMASZ[j]。

    和 dam.h 中的 API:

    __STATIC_INLINE uint16_t DL_DMA_getTransferSize(const DMA_Regs *dma, uint8_t channelNum)