预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共14页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

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(源地址偏移)SMODSSIZEDMODDSIZE NBYTE(每次DMA请求需要传输的字节数) SLAST(主循环结束后,源地址调整量) DADDR(目的地址) DOFF(目的地址偏移)CITER(传送计数) DLASTSGA(主循环结束后,目的地址调整量) BWC0MAJORLINKCHBITER(传送计数初始值) ESG DREQ DONE START ACTIVE INTHALF INTMAJOR MAJORELINK 表错误!文档中没有指定样式的文字。-1DMA描述符 4.主循环和副循环 数据的传送分为主循环(majorloop)和副循环(minorloop)。如何理解这两个概念呢。 我们不妨假设用软件来实现有规律的顺序数据传送,使用C语言来实现的话,可以用for循 环。好比用两层嵌套的for循环来实现。如使用DMA做同样的工作,过程是相同的,外层 的循环又称主循环,即majorloop。内层循环称为副循环,即minorloop。majorloop循环 一次,可能需要minorloop循环多次。每个minorloop循环都需要DMA源发来请求或者通 过软件请求。每个minorloop传送完毕,对应的DMA通道就进入空闲模式,等待下一次DMA 请求。当所有DMA传送完毕,即置DONE标志,并且可以通过设置选择传送完毕是否触发 中断。 5.主/副循环链接功能 Kinetis的DMA模块有