0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

玩转单片机的重要功能-DMA,你的MCU编程设计有可能成为卷王!

jf_pJlTbmA9 来源:得捷电子DigiKey 作者:得捷电子DigiKey 2023-09-18 10:56 次阅读

直接存储器访问(DMA)控制器,可以在内存和/或外设之间传输数据,而不需要CPU参与每次传输。合理利用DMA控制器,可以减轻CPU的负担。本文通过介绍DMA结构与工作原理,以及两种模式(兵乓模式与多数据包缓冲传输模式),来看看使用DMA如何提高MCU效率。

DMA结构与工作原理

先进的DMA控制器,如STMicroelectronics的STM32F4系列中包含的控制器,可以通过灵活的数据流分配和传输管理功能进一步减轻CPU的负担。

如图左侧所示,来自8个不同的通道DMA请求,并到仲裁器上,从而建立优先级(编号较低的输入通道,具有较高的优先级)。然后激活最高优先级的传输,传输到图中右侧的两个AHB 主设备(存储器端口和外设接口),提高了外设到存储器传输的效率。这可能是DMA在基于CPU的设计中最常见的情况。

wKgZomUDwHCAcjeDAADsVIysjq0364.jpg

图 1. STM32F4系列DMA控制器(图片来源于STMicroelectronics)

为每个路径分配单独的FIFO,如图1中间所示,允许针对每个外设接口的特性调整FIFO特性。例如,FIFO的阈值级别(请求传输的深度)可以单独设置为FIFO大小的¼,½或¾。这允许低速通道等待,直到FIFO几乎满了才进行传输,以最小化开销。更快的通道会更早地启动传输,可能只有一半大小,以避免FIFO溢出。

我们来通过一个实例,来看看DMA怎么工作的。

实例:“使用 STM32 来控制 NeoPixels LED

硬件部分采用STM32 开发板,与 NeoPixelLED、灯带、矩阵等相连接。

RGB NeoPixels实际上是WS2812智能控制LED。下面是WS2812 LED的3字节数据协议的结构,分别代表绿红蓝三个信息

wKgaomUDwHOAbFNZAAAkVbCSsD4400.jpg

图 2.WS2812 LED的3字节数据协议的结构

使用计时器来PWM控制波形,然后配置DMA使CPU高效并且易于实施。

wKgZomUDwHWAUQKUAABNu2Dq2sY191.jpg

图 3.WS2812 LED的0和1位的计时图

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

wKgaomUDwHeAVb3CAADOmUA3nwI260.jpg

图 4. 配置DMA流,以便有效更新PWM信号的占空比

更多内容请看下面文章:使用 STM32 来控制 NeoPixels

DMA的两种模式

合理使用两种DMA模式(兵乓模式与多数据包缓冲传输模式),可以帮助提高MCU效率。

USB外设是一个很好的外设示例,早期的USB实现的最大吞吐量只有1.5 Mb/秒。随着更高性能的标准版本的出现。比如要接近12 Mbit/s全速USB标准的理论最大值。我们来看看,数据传输方面DMA如何帮助提高MCU效率!

我们以Microchip的ATXMEGA16D4-MH举例。

01、兵乓模式

之前通常使用单个存储器缓冲区进行外设数据传输。如果数据缓冲区已满,MCU将响应NAK(否定确认)消息。接收到NAK后,主机将等待并稍后重试传输。它将继续重试,直到MCU能够成功接收数据。

ATXMEGA16D4-MH使用乒乓模式来消除这个问题。乒乓模式使用两个存储单元(memory banks)进行数据传输。当一个存储单元满时,主机可以将数据传输到另一个存储单元。在两个存储单元之间交替传输可以避免复审,并提高整体数据带宽。

wKgZomUDwHmAPqQEAABgCisnRas657.jpg

图 5. 乒乓模式提高了效率(图片来源于Microchip)

此外,如上图所示,以乒乓模式还使MCU有更多时间来处理数据。如图所示,没有乒乓,CPU只能处理传输之间的数据。使用乒乓模式,CPU可以在传输周期的一部分时间内处理数据,并降低NAK被要求“赶上”数据处理要求的可能性。

02、多数据包缓冲传输模式

另一个很有用的模式,可以让MCU的数据传输更高效。这个特性叫做“多数据包缓冲传输模式”。如果你要通过USB端口传送的数据包,超过了全速USB的BULK传输模式所允许的最大值(64字节),那么就可以用上这个模式。以前,你需要在主机上把数据包分成小块,然后在接收端把它们合并,这会增加中央处理器(CPU)的负担。不过现在,多数据包缓冲功能加入了USB设备,它会在数据包超过USB标准大小时自动帮你分割和合并数据。重要的是,这个模式还能减少中断的次数,因为只有在整个传输结束后才需要中断CPU。这意味着,CPU可以处理其他任务,或者进入休眠模式,直到整个传输完成并且准备好处理。

总结

合理利用DMA控制器,可以减轻减轻CPU的负担,事半功倍。结合“乒乓缓冲”和“多传输模式”,你可以把传输的带宽从基准BULK传输模式的5.6 Mb/s提升到8.7 Mbits/s,这是一个不小的提升。更重要的是,在使用这两个功能的情况下,CPU的负担从基准的46%降低到只有9%。这两个功能的结合,不仅在性能上有所改进,而且还能节省能源。

来源:得捷电子DigiKey(作者:Alan Yang)

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6034

    文章

    44547

    浏览量

    634379
  • 控制器
    +关注

    关注

    112

    文章

    16302

    浏览量

    177783
  • 存储器
    +关注

    关注

    38

    文章

    7481

    浏览量

    163751
  • dma
    dma
    +关注

    关注

    3

    文章

    560

    浏览量

    100531
收藏 人收藏

    评论

    相关推荐

    笙泉科技:专注提供8051 MCU单片机

    笙泉科技:专注提供8051 MCU单片机单片机领域的竞争很激烈,单片机的应用很广泛,单片机的威廉希尔官方网站 也很多,没有一家
    发表于 03-08 10:05 1444次阅读

    【高手问答】第2期——阿东带你走进fpga的逻辑编程设计

    【高手问答】第4期——与社区之星工聊聊labview设计【高手问答】第3期——走进硬件电路设计【高手问答】第2期——阿东带你走进fpga的逻辑编程设计【高手问答】第1期——朱兆琪在线解答单片机C语言
    发表于 07-07 14:30

    如何升华51单片机基础,成为一个出色的开发工程师。

    解答PCB设计【高手问答】第5期——STM32硬件问答【高手问答】第4期——与社区之星工聊聊labview设计【高手问答】第3期——走进硬件电路设计【高手问答】第2期——阿东带你走进fpga的逻辑编程设计【高手问答】第1期——朱兆琪在线解答
    发表于 10-09 11:25

    如何成为单片机编程高手

    记住这些寄存器成为单片机编程高手
    发表于 02-01 06:49

    云计算为什么能成为物联网的秘密武器?

    云计算为什么能成为物联网的秘密武器?
    发表于 06-18 06:22

    如何才能成为一名单片机高手?

    如何才能成为一名单片机高手?学习单片机的三个步骤都知道吗
    发表于 07-01 07:01

    STC89C52_51单片机_例程5_长短按键_定时***_要怎样努力才能成为很厉害的人? 精选资料分享

    STC89C52_51单片机_例程5_长短按键_定时***_要怎样努力才能成为很厉害的人?代码及文件下载链接https://download.csdn.net/download
    发表于 07-20 06:53

    单片机功能编程器有哪些主要功能

    单片机功能编程器的特点是什么?单片机功能编程器有哪些主
    发表于 09-18 06:42

    如何才能成为一个硬件工程师?

    如何才能成为一个硬件工程师?
    发表于 11-11 07:11

    如何才能成为一名单片机工程师?

    如何才能成为一名单片机工程师?
    发表于 12-23 07:56

    单片机的ISP在线编程设计

    单片机的ISP在线编程设计   随着电子威廉希尔官方网站 的日益发展,芯片的规模越来越大,封装日趋小型化,相应地对系统板级调试的困难也在加大。在传统
    发表于 03-29 15:10 1962次阅读
    <b class='flag-5'>单片机</b>的ISP在线<b class='flag-5'>编程设计</b>

    怎么由芯片的时序图写程序?_单片机对1602液晶时序图编程设计

    如何看懂芯片的时序图,进行编程设计单片机对外接芯片进行操作的基础。本文以1602为例,解析单片机对芯片时序图的编程思路。
    发表于 01-06 10:13 1.1w次阅读
    怎么由芯片的时序图写程序?_<b class='flag-5'>单片机</b>对1602液晶时序图<b class='flag-5'>编程设计</b>

    华大单片机HC32F460 系列MCU

    1摘要本篇应用笔记主要介绍如何使用华大单片机 HC32F460 系列MCUDMA 模块传输数据。2DMA 简介什么是 DMA
    发表于 11-18 19:21 20次下载
    华大<b class='flag-5'>单片机</b>HC32F460 系列<b class='flag-5'>MCU</b>

    AVR单片机为何能成为8位中的佼佼者?

    AVR单片机为何能成为8位中的佼佼者? AVR单片机是一种高性能、低功耗、高可靠性、方便编程的微控制器。它可以广泛应用于消费电子、汽车电子
    的头像 发表于 10-29 17:29 712次阅读

    按照这样学习C语言,成为不是梦!

    在计算机编程领域,C语言被誉为一种强大而灵活的编程语言,掌握好C语言不仅可以让轻松驾驭各种编程任务,还能够为的职业生涯打下坚实的基础。但
    的头像 发表于 07-06 08:04 312次阅读
    按照这样学习C语言,<b class='flag-5'>成为</b><b class='flag-5'>卷</b><b class='flag-5'>王</b>不是梦!