DMA 是如何工作的? DMA的工作流程是啥? [关闭]

Posted

技术标签:

【中文标题】DMA 是如何工作的? DMA的工作流程是啥? [关闭]【英文标题】:How does DMA work? What is the workflow of DMA? [closed]DMA 是如何工作的? DMA的工作流程是什么? [关闭] 【发布时间】:2021-10-29 17:56:42 【问题描述】:

我正在尝试学习 DMA 的基础知识。我也在 YouTube 上观看了某些视频。

我有几个问题:

    我们可以使用 DMA 设置/重置寄存器位吗?比如如果我想设置 GPIO_ODR 的第 4 位,我可以使用 DMA 吗?

    DMA 遵循轮询方式还是中断方式?

    如果我想设置和重置 GPIO(通用输入输出)外设的寄存器位,那么 DMA 的工作流程是什么?

会是: CPU->DMA->外设->寄存器

然后返回

寄存器->外设->DMA->CPU

这个工作流程正确吗?

请帮我解决这个问题。另外,如果你用简单的话解释会很棒,因为我对这个话题完全陌生。 谢谢!

-阿迪亚·乌巴汉德

【问题讨论】:

您观看的视频似乎在误导您。通过 DMA,您无法实现算术或逻辑操作,例如设置或重置位。 DMA 主要只是在内存或启用 DMA 的外设和内存之间将数据从源复制到目标。更好地搜索关于嵌入式控制的良好印刷或电子书籍,YouTube 很少是高质量的来源。 【参考方案1】:

免责声明:我的回答是基于我对 STM32 微控制器的 DMA 硬件的经验。

    如果您使用的 DMA 可以访问硬件寄存器所在的内存区域(如 GPIO),那么可以,您可以将数据移动到这些寄存器并更改位。但请注意,这不会为您提供按位读取-修改-写入访问权限。 DMA 一次写入(或读取)内存区域(可以是 8、16 或 32 位等)。在 STM32 上,定时器触发的 DMA 驱动的 GPIO 访问可用于同步并行端口实现。另一方面,DMA 通常用于事件触发的大容量内存传输,因此将其用于硬件寄存器的一次性操作意义不大。

    通常,您武装 DMA,它会在其工作完成(或半完成)或发生某些错误时生成中断。 DMA 有自己的控制和状态寄存器,因此您可以轮询它们而不是启用和使用中断。但大多数时候,使用中断是一个更好的主意。如果在传输完成时不需要通知您,也可以选择触发并忘记它(可能是一个不好的选择)。

    一般来说,对于任何 DMA 传输,您都需要配置源地址、目标地址、数据长度和宽度以及触发条件(除非是内存到内存的传输)。当然,还可以进行其他设置,例如启用中断等。

【讨论】:

以上是关于DMA 是如何工作的? DMA的工作流程是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

DMA和tensorflow的print是啥意思?是不是可以设置它们?

DMA 如何与 PCI Express 设备一起使用?

STM32 DMA问题

STM32F7:ADC DMA 传输只工作一次

程序查询 程序中断 DMA

带有 DMA 7 通道常规组的 STM32F4 ADC 不工作