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.

[参考译文] MSPM0C1106-Q1:基于 DMA 将数据从 UART RX FIFO 移动到 SRAM 进行计时器复位或重新加载

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1627791/mspm0c1106-q1-timer-reset-or-reload-based-on-dma-moving-data-from-uart-rx-fifo-to-sram

器件型号: MSPM0C1106-Q1

我正在通过 UART 接收数据、但如果没有收到足够的数据、我希望超时触发故障。 我已启用 UART FIFO、并使用 DMA 将接收到的数据移动到 SRAM 中的缓冲区。 我在 UART 数据的标头中有一个长度字段(因此每个接收到的数据可以具有不同的长度)、并根据此长度字段来配置 DMA。 但是、如果此长度字段发生位翻转或主机的通信停止、我的 DMA 仍在等待更多数据、并且不会触发接收完成中断。 因此、我想使用计时器来防止这种故障模式。 是否有办法可以将器件设置为每个接收到的 UART 帧、然后重置/重新加载计时器?

未重新配置或重新加载计时器时、计时器将超时并触发中断。 请注意、计时器的信号可以是 UART 接收、UART FIFO 触发、甚至是 DMA 将 1 个字节从 FIFO 移动到 SRAM。

 

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

    您好 Ben、

    您可以启用“DMA 完成“中断、并在 DMA 完成中断中复位计时器。 如果某些原因导致 DMA 无法正常完成、则不会触发 DMA 完成中断、 超时后将触发计时器中断。

    BR、

    Janz Bai

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

    尊敬的 Janz:

    这不是首选方式、因为传输长度可能在几十微秒到几毫秒的范围内不同。 根据接收到的长度字段计算超时是不可取的。 例如、如果预期长度为 50us 但接收到的长度将导致 3ms、则会怎样。 然后我在我的接收器上等待很长一段时间以超时。

    BR

    Ben

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

    您好 Ben、

    我明白了您的意思。

    但我们都知道,“超时机制“本身只是一种紧急保险,提供了一种方法,从错误发生时的错误状态摆脱.  

    最重要的是、我们需要尽力确保您提到的 UART 传输不会发生错误。

    有一种方法是、您可以禁用 UART FIFO 功能(这意味着 FIFO 深度为 1)并启用“UART 接收“中断、然后在 UART 接收中断中、您可以重置计时器。 这是“接收到一个数据时、复位计时器“。 我认为这可能符合您的要求。

    BR、

    Janz Bai

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

    尊敬的 Janz:

    感谢您的建议。 是的,这是一个紧急保险,但在嘈杂的环境中,它可能是关键。 尤其是因为标准 UART 奇偶校验已禁用。

    我会尝试你的建议。 禁用 FIFO 后、DMA 是否仍然可以正常工作?

    BR

    Ben

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

    您好 Ben、

    是的、DMA 可以正常工作。 “禁用 FIFO“仅表示不使用 FIFO、但会使用接收器接收一个字节。 您可以将其理解为一个字节深度 FIFO。

    BR、

    Janz Bai

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

    我已经使用 UART RX 中断实现了这种方式、我确实可以看到、每个接收到的帧之后、它都会进入 UART ISR。

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

    好的、Ben