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.

[参考译文] TM4C1294NCPDT:UDMA 状态

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/601640/tm4c1294ncpdt-udma-status

器件型号:TM4C1294NCPDT

您好!

我正在使用 UDMA 从 UART RX 线路接收数据包(约50字节)。 我在 UART 上启用了 FIFO 模式。 了解 DMA 数据传输已开始的最有效方法是什么?

谢谢

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

    Sina、

    这是一个有趣的问题... 我将此帖子添加为评论、而不是尝试直接回复。

    当我们使用 DMA 时、应用程序不再看到"正常"外设中断(我确定至少使用计时器)。 相反、仅当整个配置的 DMA 传输完成时才会标记中断。

    在您的情况下、这将是50字节(或您配置的 DMA 传输的任何固定大小)... 您能否进行一个快速程序来确认、如果您将 DMA 配置为48字节、并且仅发送24字节的突发、您将不会获得任何中断? 如果您没有这样做、那么唯一的方法就是直接在 DMA 控制阵列内部轮询-您必须了解该阵列的组织方式(有相关文档)、 并读取包含当前传输字节数的字节(显然效率不高)。

    我们花了很多时间来建立一个可靠的接收/传输 UART 库、然后我们确定了 DMA 的目标-只是为了确定它不是满足我们需求的最高效的解决方案。 您确实有一个16字节 FIFO 可用、并且使用常规中断在 RX 和 RT 上进行标记的效果非常好。

    -当达到 FIFO 缓冲器的"特定级别"时、RX 将中断。 如果您将其配置为50%、它将在接收到8个字节后触发、在这种情况下、您"已经有8个字节需要处理、同时仍可能需要尽可能多的时间来读取接下来的8个字节所需的时间"。 这个50%级别是您的选择、具体取决于您希望为传入字节提供服务的频率以及您知道为这些字节提供服务的速度。
    -当未达到上述"RX 电平"时、RT 将中断、但 UART 中的输入信号的时间更长、即"一个字节应到达连续传输"-换句话说、传输突发可能已经完成。

    希望这对您来说很有意义:不要尝试在中断例程内处理传入字节。 只需快速将接收到的字节复制到缓冲区、并设置一个标志、告知程序"接收缓冲区中有新的东西"。 程序必须在"在 ISR 外部、在主程序流中"之后对它们进行处理。

    布鲁诺

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

    您好、Bruno、

    请注意您的(上面)帖子中的"伟大和关心"详细信息。   做得好-显然是本论坛的"精神"。  (尤其是在"vender-lite"白天...)    

    我是否说我们喜欢您的详细信息?   (但对于"- RT 将在达到该电平时中断")  、而"该电平"(可理解)、则"确实"引入了不确定性因素。   (简洁-据说是"智慧的灵魂"-(不经常)被称为"理解的灵魂"- Mais oui?)   Mercï……

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

    感谢您的详细答复。 我已经尝试发送的字节少于在 DMA 传输中编程的字节数量、但是没有获得任何中断。 正如您所建议的、我考虑过轮询 DMA 控制阵列、但正如您所提到的、这并不是一种高效的解决方案。

    SINA
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Sina、
    我想知道 UDMA 交替模式是否适合您。 您将设置传输第一个字的主控制结构体、以及传输其余49个数据的副控制结构体。 当第一个数据使用主控制结构体完成时、它将生成一个中断。 这可用作 DMA 传输开始的指示、以供后续49个数据传输。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    这是一个很好的主意! 我会去看看!

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

    我实现了乒乓模式、以检测 DMA 传输的开始、正如您所建议的、它是有效的!

    谢谢!

    SINA