DMA 是如何工作的?DMA的工作流程是什么?

阿迪亚·乌巴尔汉德

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

我有几个疑问:

  1. 我们可以使用 DMA 设置/重置寄存器位吗?就像如果我想设置 GPIO_ODR 的第 4 位,我可以使用 DMA 来完成吗?

  2. DMA 是采用轮询方式还是中断方式?

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

会不会是:CPU->DMA->Peripheral->Register

然后为了恢复

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

这个工作流程正确吗?

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

-阿迪亚·乌巴尔汉德

削减

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

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

  2. 在一般情况下,你手臂的DMA和它产生时,其工作已经完成中断(或完成一半),或者发生一些错误。DMA 有自己的控制和状态寄存器,因此您可以轮询它们而不是启用和使用中断。但大多数时候,使用中断是一个更好的主意。如果您不需要在传输完成时收到通知,那么它也是一种选择(可能是一个坏选择)来触发并忘记它。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章