如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
//北京联合大学实训基地潘峰//qq:66797490//微博:潘峰_buu//博客:http://www.eefocus.com/panpan_0315/blog/DMA模块DMA模块简介所谓DMA就是直接内存存取(DirectMemoryAccess),是计算机科学中的一种内存访问技术。以前我们向内存传送数据,都是通过CPU来进行。比如AD完成后,我们要把结果寄存器中的值传送到内存的一个变量中,一种方法就是查询COCO标志位(详见ADC模块一节),一旦置1,就读取结果寄存器并传送。这种方法CPU需要不断查询标志位,耽误时间,降低效率。我们也可以使用中断的方式,CPU并不需要轮询标志位,而是AD转换完成后触发中断,CPU中断当前的程序,转向执行中断服务程序,在中断服务程序中读取结果寄存器,然后传送到内存中。这种方式虽然省去了轮询的时间消耗,但传送数据仍然是由CPU完成的,如果是大批量数据高速传输的话,频繁的中断也将造成很重的CPU负担,于是就有了DMA。和轮询方式、中断方式不同的是,DMA是通过DMA控制器接管数据和地址总线,根据事先设定好的源地址和目的地址,以及传送的字节数,将数据自动传送到指定的位置,而不需要CPU的介入,从而CPU的负担大大减轻。如果CPU正在执行指令,DMA控制利用空闲的地址和数据总线完成数据传送,某种程度上说,CPU运算和数据传送是在并行进行的。在制作智能车的应用中,摄像头组的同学,需要将摄像头采集的数据用最快的速度传送到内存变量中,以采集更多的点。Kinetis芯片的DMA功能这个时候就能发挥重要的作用了。首先我们需要了解一下和Kinetis芯片的DMA功能有关的一些概念。1.DMA源和DMA通道在Kinetis芯片中,很多模块都可以请求DMA模块进行数据传送。所谓DMA源,也就是DMA传送请求是谁发出的。以K60DN512Z为例,共有63个DMA源。而DMA源发出的DMA请求并不是直接提交到DMA控制器,而是通过DMA多路复用器的16个DMA通道提交的。需要设置相关的寄存器建立DMA源和DMA通道之间的映射关系。如图错误!文档中没有指定样式的文字。-1所示。图错误!文档中没有指定样式的文字。-1DMA多路复用器2.DMA模块框图DMA控制模块分为两部分,一个是DMA引擎(eDMAEngine)。一个是DMA传输控制描述符(TCD),如图错误!文档中没有指定样式的文字。-2所示。图错误!文档中没有指定样式的文字。-2DMA控制框图3.DMA描述符每个通道需要一个32个字节的传输控制描述符用于定义我们想要的数据传送操作。描述符按通道0~通道15的顺序依次存放在DMA模块的内存中。描述符中包含了对应的数据传送的所有信息,主要有源地址,目的地址,传送次数,每次传送的字节数,传送完毕后源地址和目的地址如何调整等等,当一个通道的DMA传送结束后,源地址和目的地址需要加上各自的调整量回写到TCD中,传送计数也需要重新初始化并回写到TCD中。如表错误!文档中没有指定样式的文字。-1所示,详细含义参考相关寄存器中的内容。SADDR(源地址)SOFF(源地址偏移)SMODSSIZEDMODDSIZENBYTE(每次DMA请求需要传输的字节数)SLAST(主循环结束后,源地址调整量)DADDR(目的地址)DOFF(目的地址偏移)CITER(传送计数)DLASTSGA(主循环结束后,目的地址调整量)BWC0MAJORLINKCHBITER(传送计数初始值)ESGDREQDONESTARTACTIVEINTHALFINTMAJORMAJORELINK表错误!文档中没有指定样式的文字。-1DMA描述符4.主循环和副循环数据的传送分为主循环(majorloop)和副循环(minorloop)。如何理解这两个概念呢。我们不妨假设用软件来实现有规律的顺序数据传送,使用C语言来实现的话,可以用for循环。好比用两层嵌套的for循环来实现。如使用DMA做同样的工作,过程是相同的,外层的循环又称主循环,即majorloop。内层循环称为副循环,即minorloop。majorloop循环一次,可能需要minorloop循环多次。每个minorloop循环都需要DMA源发来请求或者通过软件请求。每个minorloop传送完毕,对应的DMA通道就进入空闲模式,等待下一次DMA请求。当所有DMA传送完毕,即置DONE标志,并且可以通过设置选择传送完毕是否触发中断。5.主/副循环链接功能Kinetis的DMA模块有