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.

[参考译文] MSPM0G3519:UART 扩展外设的 RXD_NEG_EDGE 中断上的 DMA 传输

Guru**** 2826195 points

Other Parts Discussed in Thread: MSPM0G3519

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1595310/mspm0g3519-dma-transfer-on-rxd_neg_edge-interrupt-of-uart-extend-peripheral

器件型号: MSPM0G3519

你好。  我正在编写软件、以通过 MSPM0G3519 处理器上的 UART 扩展外设与 LIN 总线连接。  介绍了如何操作 LIN 接收 部分 23.2.3.7 本地互联网络 (LIN) 支持 在 技术参考手册中、我能够检测中断字段和同步字节。  在同步字节检测期间、会触发五个中断 ( RXNE ) 以记录每个位 ( LINC0 LINC1 寄存器)的位。  为了减少中断次数、我想看看是否可以使用 DMA 外设来保存这些时序。  DMA 传输将发送的值 LINC0 LINC1 写入到 RAM 中的缓冲区 RXNE 触发中断。  In 23.2.7.2 DMA 触发发布者 但并未列出 RXNE DMA 支持 UART 外设的中断。  是否有其他可能的策略可以将 RXNE 中断事件路由到 DMA 外设?  也许我可以将中断事件路由到 GENERAL_SUBx_TRIG 通过“事件管理器“触发?  如果是、我将如何做到这一点?  谢谢!

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

    您好,感谢您的提问! 您应该能够使用通用触发器、甚至在 UART 接收到 x 个样本后使用 DMA 进行传输、但这也取决于工程其余部分的设置方式、使其正常工作。 这里有几个选项供您选择:

    • 通过此选项、您可以分配 DMA 通道、将其设置为订阅者、设置所有其他参数、并使用通用外部触发器、或者您也可以选择直接路由到正在使用的 UART 通道。 然后、确保启用 UART 上的中断、以将其连接到 DMA。 您可以在 PUB/SUB 等的“事件“选项卡中进行验证
    • 另一种选择是配置 UART 的 RX 数据寄存器已满 (RXDR) 标志、以直接触发 DMA 通道、完全绕过 CPU 中断以进行数据移动。 为此、请将 DMA 源设置为 UART 的数据寄存器(例如,对于 UART0) EUSCIB0RXBUF 、并将目标设置为内存缓冲区。  RXDR 在器件配置中选择或将事件与 DMA 触发源类似。 此选项允许最高带宽、最低的 CPU 开销、非常适合连续数据流(如高波特率)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您提供的信息!  在两个选项中,我真的很喜欢第二个!

    在参考手册和 SDK 中、我没有看到任何有关 RXDR 标志和  EUSCIB0RXBUF UART 数据寄存器的引用。  您能帮助我找到这些信息的位置吗?

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

    抱歉、困惑、对于 M0 器件、UART 模块包含三个事件发布者而没有事件订阅者。 一个事件发布者 (CPU_INT) 通过静态事件路由来管理对 CPU 子系统的 UART 中断请求 (IRQ)。 第二个和第三个事件发布者 (DMA_TRIG_RX、DMA_TRIG_TX) 用于通过 DMA 事件路由设置 DMA 的触发信号。 对于 RXDR、这是接收时 DMA 完成的操作、因此您可以在 UART 配置中将此操作添加为中断、然后确保启用了 UART RX 中断。