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:如何使用具有 DMA 的 UART 来接收长度可变的数据

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1321559/lp-mspm0g3507-how-to-use-uart-with-dma-to-receive-data-of-variable-length

器件型号:LP-MSPM0G3507
主题中讨论的其他器件:MSPM0G3507

我想实现一个演示、该演示使用具有 DMA 通道的 UART 来接收 长度可变的数据、但我找不到合适的方法来实现这一点。 我曾提到隔音、我认为使用 RX 超时中断通知 MCU 获取数据可能是一种方法、但我找不到一种稳定的方法来触发该中断、因为很难确保 Rx FIFO 在每次传输中都有剩余数据。 因此、如果有人有很好的方法、请给出一些提示。

谢谢。

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

    您好、John:

    请参阅 SDK:...:\ti\mspm0_sdk_1_30_00_03\examples\nortos\lp_MSPM0G3507\driverlib\uart_rx_multibyte_fifo_dma_interrupts

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

    尊敬的 Zoey:

    n‘t、此示例无法提供实际帮助。 我想要的功能 是使用 DMA 支持灵活 长度传输而不是固定长度、这意味着即使 DMA 目标缓冲区未满、也应通知系统。 我提到了几乎所有的示例、并且很少获得有用的信息。

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

    我在这个渠道注意到了一些类似的问题。 如: https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1321460/msp430fr5962-how-to-use-dma-to-receive-data-of-indefinite-length-with-msp430fr5994-5962。  对于 MSP430FR5862系列而言、这似乎是更好的解决方案。  

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

    您好、John:

    您是指变量字节?

    由于 FIFO 中有数据、将触发 DMA 进行传输。  

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

    尊敬的 Zoey:

    当达到 RX FIFO 级别时、数据将自动传送到 DMA 缓冲区、即成立。 但如果整个大小是  FIFO 级别的倍数、则意味着如果传输完成、则 RX FIFO 将为空、此时不会触发中断。

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

    您好、John:

    感谢您的评论。 我将在明天进行测试、然后向您提供反馈。

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

    与 MSP430不同、MSPM0 UART 确实具有内置的超时机制(关键字"RTOUT"、例如 TRM (SLAU846A)表16-22)。 我在 SPI 中使用了这个特性已经取得了一定的成功、所以我认为它在 UART 中执行了同样的操作。

    我还没有尝试过使用 DMA 的 RTOUT、但我希望您能收到 RTOUT 指示、然后您必须自行禁用/重新启动 DMA。

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

    Bruce、您好!

    事实上,我 已经 考虑过 这个选择。 我发现了一些有趣的事情。

    如上所述、该"RTOUT"的前提条件是 RX FIFO 中存在数据。 我做了一些测试、发现在每次 DMA 触发操作中 RX FIFO 中的数据都会被带到空状态。 我曾尝试将"DMA 传输大小"设置为1个字节、但此设置 会导致 DMA 目标缓冲区仅接收1个字节。 我现在不知道要解决这个问题。

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

    您好、John:

    请尝试 将"dma transfer size"设置为1个字节,接收包后,只需增加目标 Rx 缓冲点地址,例如 rxbuffer[0]-> rxbuffer[1]。  

    B.R.

    佐伊

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

    尊敬的 Zoey:

    该操作是由编程人员完成还是 由程序自动执行? 如果是前者,我认为这不是一个好办法。 因为、我使用 DMA 的目的是减少 中断次数。 如果我需要在每次传输中执行一些操作、那么使用 RX 中断可能会好得多。

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

    您好、John:

    实际上是由程序员完成的。 以下是两种解决方案:

    1. 将 DMA 设置为重复单次传输模式。 它会使 DMA 始终正常工作。 UART 关闭后、您可以使用 Rx 超时中断来停止 DMA

    2.就在数据之前,先发送长度,然后设置 DMA 的传输大小。

    B.R.

    佐伊

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

    尊敬的 Zoey:

    感谢您的建议。 我一直致力于探索解决方案的可行性1.  核心问题是不能保证 RX 超时中断始终被触发。 你可以看到我对布鲁斯的答复的细节。  

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

    您好、John:

    您可以将 DAM 触发条件设置为 FIFO>=2、这样将始终在 FIFO 中保留一个数据、并且它将触发超时、然后您手动读取最后的数据。

    B.R.

    佐伊

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

    添加

    注:

    请检查数据的最大长度、只需将其设置为 DMA 传输大小

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

    尊敬的 Zoey:

    我做了这个。 似乎每次触发时 RX FIFO 都会清空。

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

    我要去度假两周、回来后还会做更多的测试。

    祝你一切顺利。

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

    您好、John:

    请检查 DMA 是否是单模

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

    站在我们这边、

    当 FIFO 中有两个数据时、将触发 DMA 并且仅传输一个数据、然后等待下一个触发。

    B.R.

    佐伊

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

    好的、我会尝试这种方式、如果我得到答案、我会回来。 感谢你的评分

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

    啊,我看到--它们不是一样的。 (SPI 具有空闲状态的概念、我怀疑这不是不相关的。)

    对不起打断一下。 让我们知道结果如何----我可能有一天会做这件事(--)。

    [编辑:也许我需要一个笑脸。]

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

    嗨、布鲁斯

    感谢您的帮助、不仅在本主题中提供解答、而且在其他特别 MSP430