本篇博客主要介绍在MCC中如何快速使用DMA这个功能。
对于DMA,想必大家都不陌生,主要功能就是让存储器和外设之间进行数据传输,最关键的是不需要CPU进行干预,能有效的提供数据传输的吞吐率。如下图。
目前大多数芯片都带有DMA这个功能,值得一提的是PIC在8bit MCU里面也有一部分芯片支持DMA,例如PIC18FxxK42和PIC18FxxK83 MCU。
首先,我们先打开MCC中DMA这个模块,如下图。
接下来,我们介绍DMA中,每个寄存器对应表示的含义。如下图。
目前在8bit PIC18FxxK42中只支持两路DMA,具体的逻辑框图如下图。
传输方向/源地址/目的地址:
DMA数据传输方向是固定的,即从源地址到目的地址。具体的说,DMA能将数据从源地址读出,然后写入目的地址。
源地址 (读操作):flash,EEPROM,GPR(SRAM), SFR(外设寄存器);
目的地址(写操作):GPR (SRAM),SFR(外设寄存器);
源地址起始地址寄存器,为24位,DMAxSSAU-DMAxSSAH-DMAxSSAL;
目的地址起始地址寄存器,为16位, DMAxDSAH-DMAxSSAL。
传输数据长度:
传输数据长度由源端数据长度和目的端数据长度决定。这两个数据长度可以设置不同。当设置不同时,每次传输的长度由较小的一端决定。
典型的传输形式举例:
N:1 - 将N字节长度数据通过串口/SPI口传输出去;
N:N – 将数据块在存储器不同地址间搬移;
1:N – 将ADC采集到数据依次写入到一块预定的存储器空间;
1:1 – 两个通信口桥接。
DMA 启动/停止控制:
DMA数据搬移启动可以由软件操作,也可以由其他外设进行触发。同样的,停止操作也是可以由软件操作或硬件触发。
DMA与CPU资源使用仲裁:
可以设为DMA高优先级或CPU高优先级。当DMA高优先级时,DMA操作时,CPU执行暂停;当CPU高优先级时,DMA利用CPU空闲时间进行DMA传输。
做好相应设置后,点击MCC生成代码,可以找到dma1.C的文件,如下图。
现在DMA的功能也基本介绍清楚,希望各位看官们,能在MCC上进行实际操作体验下。
以上内容来源大大通官网,速戳了解更多精彩内容吧~