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的工作流程是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章