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.

[参考译文] CC1310:具有 DMA 的 CC1310 UART

Guru**** 2487425 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1175660/cc1310-cc1310-uart-with-dma

器件型号:CC1310

在经历了很多混乱之后、我认为我最终有了与 DMA 一起工作的 UART 传输。 但是、它的工作方式似乎有点奇怪、因此我想确保它实际按预期工作。 首先、我在禁用中断的情况下设置 UART、但注册了 UART 中断处理程序。 然后、我在启用组合中断的情况下设置 DMA。 最后一步是调用:

UARTDMAEnable (UART0_BASE、UART_DMA_TX);

这会导致传输开始。 一旦传输完成、UART 中断就会被触发。 除非正确的 REQDONE 位被写入、否则程序将卡在中断中、并且在启用 UART DMA 的情况下无法写入该位、因此在 UART 中断处理程序中、我必须按顺序进行以下两次调用:

UARTDMADisable (UART0_BASE、UART_DMA_TX);

uDMAIntClear (UDMA0_BASE、0x00000004);

此时、传输完成。 DMA 中断处理程序在任何时候都不会被触发。

我一直在浏览技术参考手册、CC13xx 驱动程序库文档和源代码以及寄存器定义。 即使现在我已经开始工作了、这也不是很明显的、它应该是通过阅读文档来工作的。

这是它应该怎么工作的,还是我刚刚幸运地得到了某种攻击?

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

    您好!

    由于这是 driverlib 级别的软件、我们只能提供有限的支持。 我们一般建议使用 TI 驱动程序。

    您是否看到了技术参考手册的 UDMA 一章? 这记录了在 DMA 传输中被调用的寄存器。

    https://www.ti.com/lit/swcu117

    另请注意、无法调试 DMA 传输。 发送  UARTDMAEnable()命令时,无论断点如何,DMA 传输都将发生 因此、您必须仔细考虑在遇到断点时器件处于何种状态。

    谢谢、

    玛丽·H

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

    我对您的回答感到困惑、希望更好地了解情况。

    正如我在上面所说的、是的、我阅读了技术参考手册。 我通常更喜欢直接寄存器访问、但在描述如何初始化 UDMA 的部分中、手动调用使用一些 driverlib 软件函数。

    似乎 driverlib 是由 TI 编写和记录的。 为什么您只能提供有限的 driverlib 支持?

    我认为 driverlib 是 TI 驱动程序。 您提到的 TI 驱动程序是什么?

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

    JJ、您好!

    Driverlib 是 一个低级硬件抽象层。 TI 驱动程序是高层驱动程序。 您可以在此处找到 TI 驱动程序的 UART 示例:

    https://dev.ti.com/tirex/explore/node?node=A__ALP9mnlWHKUDYR9Hs7qYMA__com.ti.SIMPLELINK_CC13X0_SDK__eCfARaV__LATEST

    谢谢、

    玛丽·H

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

    感谢您的回答。 遗憾的是、似乎没有任何演示 DMA 使用的 TI 驱动程序示例。