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.

[参考译文] RM44L520:使用任务/非特权功能中的 DMA

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1026059/rm44l520-use-dma-from-task-unprivileged-function

器件型号:RM44L520
主题中讨论的其他器件: HALCOGEN

大家好!

我正在尝试使用 DMA 来优化日志消息的传输。 我已经使用 HALCoGen RM44L520_FreeRTOS 设置了应用程序、启用了 MPU 并将 SCI 配置为通过中断发送数据块。 所有工作文件。 然后、我尝试通过 DMA 发送数据、但一直停留在从非特权任务中触发 DMA、并寻求有关您如何执行该操作的建议。 这就是我到目前为止观察到的情况:

  • 在默认设置中,系统区域(0xFF80000 - 0xffffffff)配置为 USER_RO_NOexec。 因此、MPU 不会让任何任务写入 dmaREG。
  • TRM 表示在块传输结束时硬件通道使能位自动复位。
  • 我已将控制数据包配置为元素计数= 1、帧计数=根据 DMA 请求从 RAM 传输单字节数据到 sciREG->TD 的消息长度
  • 我已经配置块传输完成中断来释放硬件、并且不允许其他任务 发送更多消息。
  • 为此、我必须再次设置硬件通道使能位。 不允许将其作为系统区域的一部分,即 USER_RO_NOexec。  我尝试更改 MPU 以允许写入、但未成功、因为 TRM 说该位只能在特权模式下写入。

您有什么提示告诉我如何使用非特权任务中的 DMA 吗?

1月

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

    您好、Jan、

    DMA 寄存器及其本地 RAM 只能在特权模式下访问。  

    DMA 存储器有一个保护机制。 DMA 存储器区域可配置为完全可访问、只读、只写或不可访问。 请看一下 DMA 存储器保护控制寄存器。 默认情况下、不定义区域。

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

    您好、QJ Wang!

    非常感谢您的回答。

    我现在已经通过使用 MPU_warpiper.c 中的机制从非特权任务中实现了 DMA 配置:prvRaisePriviledge ()用于执行内核函数,然后 portRESET_priviledge ()返回到以前的状态。

    在不修改 MPU 设置的情况下运行良好。

    [引用 userid="45190" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1026059/rm44l520-use-dma-from-task-unprivileged-function/3793322 #3793322"] DMA 内存具有保护机制。[/quot]

    IIRC 用于保护、允许 DMA 读取或写入。