【MSP430趣谈】MSP430第十三讲之DMA的应用

本系列教程应该来说也已经基本接近尾声了,还会有几讲的内容,最后如果可以的话还回附上一个具体的案例让我们来看下具体该如何应用430这款产品。也将更加深入的探讨他的低功耗特性。

今天我们还是继续讨论430的外设的使用。今天我们说的是DMA这个模块。首先一点我们需要知道,DMA是什么东西?

DMA的全称是Direct Memory Access,翻译过来是直接内存存取。那么具体是什么意思呢?我们解释一下。

比如说我们需要读取一个数据,简单的说比如从一个IO口读取一个电平的高低,然后存储到一个变量里头,那么在没有DMA的情况下,一般要分成这几个步骤来完成:

1.首先有CPU执行读取操作,将IO的输入寄存器的内容读取到内存当中

2.然后通过CPU将内存的内容写入到变量中

也就是说在这种情况下,对于一个寄存器的读取,需要CPU的参与,占用了CPU的运行时间,当我们加入了DMA这个模块之后,我们将实现一个什么功能呢?

也就是说利用DMA这个模块,我们无需涉及到CPU的使用,只要将DMA通道设置好,那么这些数据将直接通过寄存器传传输到指定的存储单元,从而节省了CPU的运行时间,从而大大的提高效率。

举个比较实际的例子,比如说你要卖东西,比如说卖书吧,那么你是不是得需要去一个书籍的经销商那边拿货,然后自己弄一个店铺,然后再把书卖给别人。整个一个这样的过程,那么现在如果你有了“DMA”这个功能的话,那你就不用开店了,你就直接打电话给经销商,让他把书送到客户那里就可以了,不用你自己开店来卖了。那么打电话这个过程就跟我们的DMA的配置一样,在使用之前我们要先经过一个配置的过程才可以。

很直接的看出来如果能够使用了DMA通道,对运行速度的提高有着非常大的帮助。

接下来我们来看下FR5969的DMA介绍:

FR5969的DMA特性包括以下几点:

1.最多能够达到8个独立的传输通道

2.可配置的DMA通道优先级

3.仅需要两个MCLK时钟周期来进行一次转换

4.一个字节,两个个字节或者是混合的字节和字的转换都是支持的

5.最多可以存储65535个字节或字

6.可配置转换触发方式

7.四种地址模式

8.单次,块,或者是多块的传输模式

这里我们添加解释一个东西就是word和byte的区别:

Byte就是我们所说的字节,这个毫无疑问,就是8个二进制位代表一个字节。那么对于字(word)而言是和我们的CPU架构有关联的,对于16位的架构来说一个字就是2两个字节,32位的呢就是4个字节,64位就是8个字节,所以很容易的看出来,一个字就是一个CPU架构的总线一次能够传输的最大数据量就是一个字,所以这里我们就可以很好的理解一个字。对于MSP430FR5969是一款发16位的单片机,所以它的字代表的就是两个字节。

那么我们现在先大概了解一下这些特点,接下来我们会详细讨论整个配置的过程。

首先我们看下DMA通道的地址模式,430的话有四种模式,具体如下:

从图上我们可以很容易看出这四种地址模式的区别,第一个是单地址到单地址,第二个是单地址到块地址,第三个是块地址到单地址,第四个是块地址到块地址。

那么接下来就是我们的传输模式:

前面是控制位的信息(DMADT控制位,这个位一定是在DMA某个控制寄存器之中)。总共是这6种传输模式。

单次传输模式,需要每次进行触发传输。

块传输模式,那么这个是一个块的数据在单次触发的时候同时传输。

突发块传输模式,此时CPU就处于间接工作状态,交叉工作在块传输模式上。

重复单次传输模式,也就是自动进行传输。

重复块传输模式,同样也是实现自动传输,其他的同上面一样。

重复突发块传输方式,同上面一样,只是能够自动重复实现,不用软件触发。

那么上面是对于DMA模块的一个基本介绍,了解相关的特性,以及它能够支持的一些传输方式,那么手册当中给出了每个传输方式具体的操作方法,但是由于篇幅太长,我们这里没有办法说一个一个给大家说明,这里如果大家有需要用到的时候可以具体参考手册的内容,我们这里只介绍一种方法进行说明。

我们假定两个数组,一个数组中存放字符串hello world!另一个字符串为空。那么我们利用DMA的方式,Data1的数据送到Data2中,这中间我们需要使用的是块传输的方式,因为我们的字符串总共有着11个字节,使用单次传输模式的话我们最多只能传输2个字节一个字(word)。这个应该比较好理解,另外我们使用软件触发数据传输,之后我们进行对比两个字符串是否相同,相同就点亮板子上面的LED2。

整个代码的思路就是这样,具体代码如下:

在判断两个字符串是否相等我们用到了一个函数,strcmp这个是C语言自身库里面的函数,用来判断字符串相等,形参直接输入两个字符串的首地址就可以,返回值为0的话就代表两着相等。两者比较的是之间的ASCII的值,当Data1<Data2的时候返回的是负数,反之则是正数。关于该函数的实现方式,大家具体参考我们的百度百科中的介绍。

http://baike.baidu.com/link?url=doE09oASDZPFpJ5iachmEj2rWNx7DJZ0cAWTUW5-rguGpIphvDL7WL4BM5Tas66zpDCVk6A9WEQnkT39DvZUEK

好了,到此我们就介绍完了我们的DMA,那么他对于数据传输方面是非常方便的,特别是在图像数据传输上面,因为图像数据量是比较大的,通过CPU进行搬运的话太费时费力了。当然DMA不局限于这样的一个应用还有其他的应用。

同时我们也需要明白一点,当我们使用DMA的时候,是不需要CPU来干涉数据的传输,但是我们需要明白,在CPU中的数据总线就那么多,DMA传输数据的时候回占用数据总线,所以如果CPU需要读写数据的话就没有办法同时进行,这个是我们需要明确的一点,此时CPU可以进行相应的运算工作,但是数据传输必须和DMA之间相互协调,因为毕竟数据总线就那么多。

今天就聊到这里了哈。

(0)

相关推荐

  • DMA模式和PIO模式的区别

    DMA模式和PIO模式的区别

  • 【原创】DMA

    什么是DMA     DMA,Direct Memory Access,直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式.在DMA模式下,CPU只需要向DMA控制器下达指令,传输数据 ...

  • DMA方式的基础知识

    程序控制(查询)方式:CPU需要不断查询I/O是否完成,因此一直占用CPU. 程序中断方式:与程序控制方式相比,中断方式因为CPU无需等待而提高了传输请求的响应速度. DMA方式:DMA方式是为了在主 ...

  • 【博文连载】PCIe扫盲——PCI总线的三种传输模式

    本文来简单地介绍一下PCI Spec规定的三种数据传输模型:Programmed I/O(PIO),Peer-to-Peer和DMA. 三种数据传输模型的示意图如下图所示: PIO 首先来介绍一下Pr ...

  • HC32F460 系列的 DMA 控制器

    32 位微控制器 HC32F460 系列的 DMA 控制器 1 摘要 本篇应用笔记主要介绍如何使用 HC32F460 系列芯片的 DMA 模块传输数据. 2 DMA 简介 什么是 DMA? DMA(直 ...

  • 【MSP430趣谈】MSP430第十二讲之ADC(下)

    Ksps的意思是每秒转换次数为多少. 这里插播一个细节的东西,德州仪器(TI)的官网不管对于库函数还是寄存器都给出了示例代码,我们通过我们CCS环境下面的TI Resource Explorer下面查 ...

  • 【MSP430趣谈】MSP430第十二讲之ADC(上)

    首先我们需要明白一个问题是什么是ADC,中文翻译过来就是模数转换器,从他的英文名的话我们会更加好记,Analog-to-Digital Converter. 简而言之就是将模拟量转换为数字量.在我们的 ...

  • 【MSP430趣谈】MSP430第十讲之SPI总线驱动OLED

    上次我们说到了430的UART的使用方法,当我们一步一步开始探索的时候会发现它的实际应用是十分复杂的,但是经过我们的慢慢的看下来,我们看到TI给了很多官方的参数供给我们进行选择,所以这里给我们带来了很 ...

  • 【MSP430趣谈】MSP430第三讲

    不知道前两讲中有没有对430有一个大概的概念和印象. 今天就先谈谈我学习的单片机的一些想法和经验吧.我想写这个的原因主要还是希望面对初学单片机的人来说的,对于初学的话我们经常都会去看一些参考书啊,之类 ...

  • 【MSP430趣谈】MSP430第九讲之串口使用

    上次一讲中我们说到了定时器的两种写法,一种是利用寄存器进行书写的,另外一种是利用官方库函数进行书写的.我们通过对比这两种写法,发现库函数居然写的要比寄存器还多,这不是更加不方便了吗.其实库函数和寄存器 ...

  • 【MSP430趣谈】MSP430第八讲之时钟设置

    写到现在已经是第八讲了,希望大家多多支持.可能我的行文风格和我们的标题不大符合,趣谈,对吧.但是希望能够仔细的讲到每一点,让所有初学者能够明白.如果大家有不懂的地方也麻烦留言一下,也有帮助我补充和完善 ...

  • 【MSP430趣谈之六】时钟简介与图形化配置方式

    不知道大家现在有没有一点感觉步入单片机的感觉,这次我们来聊一聊关于单片机的"心脏基调",也就是单片的时钟.为什么说是心脏呢?也就是说单片机的运行步伐是靠这个时钟来决定的,按照时钟的 ...

  • 【MSP430趣谈】MSP430第五讲之库函数的使用

    哈哈!经过前面的四讲,不知道大家有收获没有.至少感觉自己有点入门了吧.可能大家会说为什么要写这个,那么多的书籍,也有很多的教程.我的出发点是他们大部分的都是以工程师的身份了,或者说已经从事这一块行业比 ...

  • 【MSP430趣谈】MSP430第四讲之简谈中断

    上次和大家聊到了GPIO的使用,但是讲的不是很全面,要是全面涉及的话就是我们后面要讲的内容了,这里我们就不多加描述.在后期的讲解中也会慢慢涉及我们没有讲到的一些功能的.今天我们要涉及一个对于单片机来说 ...