直接存储器访问 ( DMA )控制器,可以在内存和/或外设之间传输数据,而不需要 CPU 参与每次传输。合理利用 DMA 控制器,可以减轻CPU的负担。
先进的 DMA 控制器,如STMicroelectronics的STM32F4系列中包含的控制器,可以通过灵活的数据流分配和传输管理功能进一步减轻 CPU 的负担。
如图左侧所示,来自8个不同的通道 DMA 请求,并到仲裁器上,从而建立优先级(编号较低的输入通道,具有较高的优先级)。然后激活最高优先级的传输,传输到图中右侧的两个 AHB 主设备(存储器端口和外设接口),提高了外设到存储器传输的效率。这可能是 DMA 在基于 CPU 的设计中最常见的情况。

图 1STM32F4系列DMA控制器(图片来源于STMicroelectronics*)*
为每个路径分配单独的 FIFO,如图1中间所示,允许针对每个外设接口的特性调整 FIFO 特性。例如,FIFO 的阈值级别(请求传输的深度)可以单独设置为 FIFO 大小的¼,½或¾。这允许低速通道等待,直到FIFO 几乎满了才进行传输,以最小化开销。更快的通道会更早地启动传输,可能只有一半大小,以避免FIFO 溢出。
我们来通过一个实例,来看看DMA怎么工作的。
实例:使用STM32 来控制 NeoPixels LED
硬件部分采用STM32 开发板,与 NeoPixelLED、灯带、矩阵等相连接。
RGB NeoPixels 实际上是 WS2812 智能控制 LED。下面是WS2812 LED 的3字节数据协议的结构,分别代表绿红蓝三个信息。

图 2 WS2812 LED 的3字节数据协议的结构
使用计时器来PWM控制波形,然后配置DMA使CPU高效并且易于实施。

图 3 WS2812 LED 的0和1位的计时图
在软件中,配置 DMA,选择了“TIM2_CH3/UP”,将方向改为“内存到外设”。同时,将优先级改为“非常高”,最后保存.ioc 文件,以生成项目代码。

审核编辑:刘清
-
存储器
+关注
关注
39文章
7755浏览量
172175 -
RGB
+关注
关注
4文章
836浏览量
62226 -
计时器
+关注
关注
1文章
435浏览量
35359 -
PWM波
+关注
关注
0文章
101浏览量
17787 -
DMA控制器
+关注
关注
1文章
43浏览量
12963
原文标题:DMA 控制器可以减轻CPU负担 前提是配置得当!
文章出处:【微信号:得捷电子DigiKey,微信公众号:得捷电子DigiKey】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
探索MAX1937/MAX1938/MAX1939:高效CPU核心电源控制器
MAX1639:高性能CPU电源降压控制器的设计与应用
MAX1638:高性能CPU电源降压控制器的设计与应用
探索MAX797H:高性能CPU电源降压控制器
高精准降压控制器MAX798:为CPU供电的理想之选
MAX1544:AMD Hammer CPU核心电源的双相快速PWM控制器
MAX1519/MAX1545:可编程CPU核心电源的双相Quick - PWM控制器
深入解析MAX17410:IMVP6+ CPU核心电源的理想控制器
AT32F421C8T7微控制器现货库存
蜂鸟内核中DMA的硬件实现——寄存器配置
M483SIDAE SD控制器,无法使用DMA读取从SDHC获取正确的数据,怎么解决?
请问DMA控制器可以减轻CPU负担吗?
评论