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.

[参考译文] LP-MSPM0G3507:RX FIFO 阈值与 TRM 说明不匹配时的 MSPM0 DMA 行为

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1522465/lp-mspm0g3507-mspm0-dma-behavior-with-rx-fifo-threshold-not-matching-trm-description

器件型号:LP-MSPM0G3507

工具/软件:

您好、

我目前正在 MSPM0上开发一个使用 DMA 进行 RX 数据处理的 UART 应用程序。 我遇到的行为似乎与技术参考手册中的说明不一致。

根据 MSPM0技术参考手册(TRM)、当 RX FIFO 中的条目数小于触发电平时、接收中断(RXINT)将被清除。 DMA 应仅传输足够的数据以将 FIFO 级别降低到刚好低于阈值。

但是、在 UART + DMA 开发期间、我观察到在特定条件下、DMA 消耗整个 FIFO。

我启用了 FIFO、将 RX FIFO 阈值级别设置为"RX FIFO 包含>= 2"条目、并将 DMA 传输模式设置为"单"。

当我向串行端口发送两个字节时、应将一个字节从 RXFIFO 传输到 DestAddr、并在 RXFIFO 中留下一个字节。 但我发现这两个字节都被传输了。

当我向串行端口发送三个字节时、会传输两个字节、保留一个字节。

当我向串行端口发送四个字节时、它会传输所有四个字节。

然后、将 RX FIFO 阈值级别更改为 RX FIFO contains>= 3个条目。  

发送3个字节→全部3个已传输

发送4个字节→3个已传输、1个保留

发送5个字节→3个已传输、2个保留

发送6个字节→全部6个已传输

总体而言、当接收到的字节数量是阈值的确切倍数时、DMA 意外完全耗尽 FIFO、这与 TRM 的说明相矛盾。 相比之下、非倍数的表现符合预期。 仅传输最小字节数以清除 RXINT。

这种行为是设计预期行为吗? 如果没有、是否存在错误或解决方法?

谢谢!

这就是我用于测试的项目:

e2e.ti.com/.../dma.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Unknown 说:
    这种行为在设计上是预期行为吗? 如果不是、是否存在错误或权变措施?

    TRM 中的 UART 描述与实际的 UART 行为之间存在差距、您的测试结果是正确的。

    始终、客户希望使用 UART + DMA 接收随机长度数据的意图会遇到此问题、如果您需要实现相同的功能、我建议您执行以下操作:

    e2e.ti.com/.../mspm0g3507-dma-fifo-rx-timeout