快速参考目录

  • DMA的解释
    • MSP430系列单片机中的DMA
    • MSP430 DMA控制器的特性
  • DMA的应用
    • 明确你得需求
    • 一个能用起来的官方例程
  • 待续

DMA的解释

DMA(Direct Memory Access,直接存储器访问)。 DMA 传输将数据从一个地址空间复制到另外一个地址空间。当CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。像是这样的操作并没有让处理器工作拖延,反而可以被重新排程去处理其他的工作。DMA 传输对于高效能 嵌入式系统算法和网络是很重要的。

  • MSP430系列单片机中的DMA

MSP430系列单片机扩展的DMA具有来之所有外设的触发器不需要CPU的干预即可提供先进的可配置的数据传输能力,从而加速了基于MCU的信号处理进程,DMA传输的触发来源对CPU 来说是完全透明的,DMA控制器可在内存与外部及外部硬件之间进行精确的传输控制。DMA 消除了数据传输延迟时间以及各种开销,从而可以解放16位RISC CPU,以便其将更多的时间用于处理数据,而非执行正在处理的任务。

  • MSP430 DMA控制器的特性

MSP430系列单片机的DMA模块大多有以下特点:

  • 无需CPU介入,完全由DMA控制器自行管理。
  • 在整个地址空间范围内有效,块方式传输可达65536字节;
  • 每次传输仅需要2个MCLK;
  • 可在CPU进入超低功耗模式时运行;
  • 字节和字混合传输;
  • 四种传输寻址模式:固定地址到固定地址、固定地址到块地址、块地址到固定地址以及块地址到块地址;
  • 触发方式灵活:边沿或者电平触发。
  • 多种触发源可配置。
  • 多通道优先级可配置。

DMA的应用

最常见的场景,当你想吃饭时,你需要中止你的工作,走出去,到某家店,点餐,等餐,用餐,再回到你的工作地点继续你的工作。如果工作比较多的时候呢?你就没有时间外出,那你一般就是点个外卖,然后继续你的工作,等外卖员把餐送到了,再用餐,用餐后再继续你的工作。现在把这个场景全部类比到单片机的工作中来,吃饭是一个支线任务,但无法直接开始,需要等待,点餐是一个机器周期可以完成的简单操作,你的工作是CPU的主线任务。对于CPU而言,如果主线任务比较繁重,而支线任务又不得不做,那做了支线任务就必然要占用做主线的时间,这个结果就可能导致主线任务完成得不好,所以在这个时候我们就需要一个外卖员,他就是DMA!

  • 明确你得需求

好多人是按章节学习,到了DMA这一章就到处询问怎么使用DMA,要程序要代码,但是我在上面也举过例子了,你只有在CPU主线特别忙得时候才需要用到DMA,又或者是某种低功耗需求而IO处理有特别多得时候。没有这种需求你完全没必要去搞清楚DMA是怎么用的,你只要知道有这么个东西就行了,将来有需求了再回来研究。因为这里面还是有很多坑的,如果你急这在项目里上马DMA,那不可预料的BUG真的是会耽误你很多时间。所以根据你的需求,谨慎选择是否继续读下去。

  • 一个能用起来的官方例程

注释已翻译成中文了

#include <msp430.h>
#include <stdint.h>int main(void)
{WDTCTL = WDTPW+WDTHOLD;                   // 关闭看门狗P1DIR |= 0x01;                            // P1.0 设为输出__data20_write_long((uintptr_t) &DMA0SA,(uintptr_t) 0x1C00);// 设置源地址__data20_write_long((uintptr_t) &DMA0DA,(uintptr_t) 0x1C20);// 设置目标地址DMA0SZ = 16;                              // 设置传输快尺寸DMA0CTL = DMADT_5+DMASRCINCR_3+DMADSTINCR_3; // 通道0:重复块传输、源地址和目标地址自动增计数,默认为软件触发DMA0CTL |= DMAEN;                         // 使能DMA通道0while(1){P1OUT |= 0x01;                          // 置位P1.0DMA0CTL |= DMAREQ;                      // 触发块传输P1OUT &= ~0x01;                         // 复位P1.0}
}

一些说明

  • 官方历程由来:点我下载msp430ware,具体请自行搜索。
  • 关于程序执行过程,手册说DMA块传输需要2×MCLK×DMAxSZ(记tD)的时间,所以在执行了触发语句DMA0CTL |= DMAREQ; 后CPU将处于挂起状态,即在本例中,在执行*P1OUT &= ~ 0x01;*之前,系统会待机tD ,一定要引起注意。
  • 在老版的CCS中用MSP430wave导入的例程中,代码长这样:
#include <msp430.h>int main(void)
{WDTCTL = WDTPW+WDTHOLD;                   // 关闭看门狗P1DIR |= 0x01;                            // P1.0 设为输出__data16_write_long((unsigned short) &DMA0SA,(unsigned long) 0x1C00);// 设置源地址__data20_write_long((unsigned short) &DMA0DA,(unsigned long) 0x1C20);// 设置目标地址DMA0SZ = 16;                              // 设置传输快尺寸DMA0CTL = DMADT_5+DMASRCINCR_3+DMADSTINCR_3; // 通道0:重复块传输、源地址和目标地址自动增计数,默认为软件触发DMA0CTL |= DMAEN;                         // 使能DMA通道0while(1){P1OUT |= 0x01;                          // 置位P1.0DMA0CTL |= DMAREQ;                      // 触发块传输P1OUT &= ~0x01;                         // 复位P1.0}
}

你在编译的时候会发现在设置地址的地方有警告 #770-D conversion from pointer to smaller integer 你可以自行比较一下新旧连个例程就应该知道问题在哪了1

待续


  1. 之所以提到这个,是因为在我写总结的时候才下载了最新的CCS9.10,而之前我的工程都是用的CCS6.10,而我的工程电脑也不联网,就不知道有新版本。这个警告起初困惑了我很久,因为我确实习惯消除掉程序里的所有警告,而为了解决这个问题我还真是测试了很久才get到20位地址空间这个点,算是个不大不小的坑。通过这个例子,我建议大家还是时不时关注下工具软件的更新,兴许一些老问题就迎刃而解了。 ↩︎

MSP430系列单片机的DMA使用全面认识相关推荐

  1. MSP430系列单片机实用C语言程序设计 张晞pdf

    链接:https://pan.baidu.com/s/1UmP-BitP1noDLeOfNmX71g 密码:1rgc 本书为完整版,以下为内容截图:

  2. 51、PIC、AVR、16、32-BIT系列单片机区别与特点

    8031/8051/8751是Intel公司早期的产品. 1.8031的特点 8031片内不带程序存储器ROM,使用时用户需外接程序存储器和一片逻辑电路373,外接的程序存储器多为EPROM的2764 ...

  3. MSP430G2553与MSP430F5336系列单片机总结[0]——概述

    最近用了MSP430系列的两款单片机,一块是MSP430G2553,市面上有卖,管脚和功能比较少,但是网上的例程和资料很多,比较适合MSP430系列的单片机上手:另一块F5336系列有引脚和功能都较多 ...

  4. msp430系列16位超低功耗单片机原理与应用_第四章课后练习

    1.三个时钟源:LFXT1CLK.XT2CLK.DCOCLK 2.可提供四种时钟信号:ACLK(辅助时钟,用于低速外设).ACLK/n(经过分频的由P1.5脚输出,仅供外部电路使用).MCLK(主要用 ...

  5. 单片机c语言波特率检测,基于MSP430系列微控制器串口通信时的波特率自动检测的实现...

    通常微控制器通过串行接口与其它终端进行通信时,两个终端需要通讯波特率一致才能达到准确与可靠的通讯效果,串行波特率的自动检测(ABR)可以解决通信终端的波特率自动匹配问题,从而实现微控制器与PC或其它主 ...

  6. 基于恩智浦MK60DN512Z系列单片机的智能模型车主程序与子程序集

    基于恩智浦MK60DN512Z系列单片机的智能模型车主程序集 作者 徐挺 /********************************************************** 函数名 ...

  7. STM32F4系列单片机选型详解

    一. 简介 本篇文章将全面介绍STM32F4系列单片机的详细情况,在实际项目中对F4系列的选型具有一定的指导意义. 那里有广告!!!! 二. 整体介绍 整个F4可以分为三个系列: 入门型系列, 基础系 ...

  8. AVR系列单片机的基本架构(翻译自俄语讲义)

    本文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7685596 作者:毛星云    邮箱: hap ...

  9. 主题:瑞萨16 位R8C/TINY 系列单片机

    主题:瑞萨16 位R8C/TINY 系列单片机– 小型,少脚数,高速,高效能,含闪存的MCU 在线问答: [问:winalltech] WDT通过软件来开关,有可能不可靠吗?会因为干扰而造成其突然关闭 ...

最新文章

  1. ISE include 头文件错误的解决办法
  2. Java程序员必备基础:Java代码是怎么运行的?
  3. Js文件中调用其它Js函数的方法(转)
  4. Kubernetes 1.9 发布
  5. 开源项目商业模式分析(2) - 持续维护的重要性 - Selenium和WatiN
  6. 图书管理系统python语言-Python简易版图书管理系统
  7. Windows下安装配置SubVersion的简明步骤
  8. 聊聊身边的嵌入式,英语学习利器点读笔
  9. java .class参数_java – 将.getClass()转换为类型参数
  10. C#之Application.DoEvents()
  11. 在HTML页面添加数学公式格式
  12. C++默认参数(缺省参数)应该写在哪里,声明还是定义里
  13. 猫狗数据集百度网盘链接
  14. GPS纠偏算法,适用于google,高德体系的地图
  15. java面试题大全2
  16. python for循环语句1到100_python——循环语句
  17. 台阶的意思_台阶词语解释
  18. 轻聊 - 聊天室的设计思路
  19. Outlook 2010 电子邮件数字签名和加密指南
  20. 局域网无法访问发布的网站问题解决

热门文章

  1. Java实现 蓝桥杯 算法训练 删除数组零元素
  2. 项目——3——lnmp-gitlab-jenkins-ansible
  3. 简单好用、且永久免费的内网穿透工具
  4. 级联rc滤波_六阶级联式开关电容低通滤波器设计与仿真分析
  5. 对 iOS 14.2 糟糕的音乐控制界面的思考
  6. 安全审计——等级保护日志审计要求的一种解决方案
  7. php excel 导出图片,phpexcel 导出多张图片
  8. 微信小程序webview清除缓存、微信公众号h5清除缓存、页面白屏、空白、不刷新问题
  9. 去掉选中div后出现的高亮淡蓝色边框
  10. 2008年8月25号,星期一,晴。天将降大任于是人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为。