请问ARM11内核里面的DMA接口的用途是什么?谢谢!


DATASHEET里面是这样子写的
“transfer large blocks of data between the TCM and an external memory”
请问主要是传输什么样的数据?这样子做提高了那些性能呢?

4年以上嵌入式系统开发设计经验;
熟悉PowerPC/mips/ARM/X86至少两种或以上处理器架构;
熟悉CPU的多核、多线程、cache、MMU等常用硬件技术,深入了解嵌入式OS(VXWORKS,linux等);
熟悉常用硬件单元或芯片,如网口,flash,硬件加速引擎的软件驱动技术;
如果有意向可联系
qq:1263987528
或简历发到:
email:zwd2009101@163.com
合适的话面谈

这个问题问得有点难,需要对单片机有足够的了解后才会明白其原理。
这里简单的讲解一下,详细情况可以自己查阅相关资料。
电子产品经常需要进行数据搬运工作,如果是用程序代码一个一个的搬运,效率会非常低下,DMA就是用来解决此类问题的。
比如现在有一大段数据需要从RAM的buffer_1搬运到buffer_2,用代码实现就是
long *p1,*p2;
p1=buffer_1;
p2=buffer_2;
size=xx;
while(size--)
{
*p2++=*p1++;
}
如果这里size很大的话就会占用CPU相当多的时间,DMA则可以解决此类问题,DMA硬件原理就是在CPU外围增加一个DMA控制器,DMA控制器只要配置好就可以在系统时钟的调度下自己独立工作完,中间过程不需要程序代码干预。
最简单的DMA控制器会提供下面控制寄存器由用户配置使用:
src_addr数据传输的源地址
des_addr数据传输的目的地址
tran_size数据传输的大小
start_flag启动数据传输的控制位
end_flag数据传输完成的标志位
改用DMA传输的代码为
long *p1,*p2;
src_addr=buffer_1;
des_addr=buffer_2;
tran_size=xx;
start_flag=1;//假定设该标志位为1是启动DMA传输
while(xx)
{
...;//其它控制代码
if(end_flag)
{
...;//传输结束后的处理代码
}
}
可以看出使用DMA的方式并不需要代码来做数据搬用的工作,DMA去完成数据搬运是通过内部共用的总线直接将数据从RAM的buffer_1搬运到buffer_2,数据并不进CPU。
那为什么可以这样做呢,因为CPU并不是每时每刻都需要占用总线,很大一部分时间都是在用寄存器进行处理,这个时候总线是空闲的,DMA就可以来搬运数据。
DMA并不局限于RAM内部的数据传输,还可以与外部设备接口进行数据传输,如果想要把其工作原理完全弄懂需要理解总线的知识。
使用DMA的时候如果MCU带CACHE在编写程序的时候一定要留意DMA与CACHE的配合,否则程序会出现一些怪问题,这里不进行详述。
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
基于MSPM0L1306的MODBUS-RTU协议通讯实验被打赏50分 | |
每周了解几个硬件知识+485硬件知识分享被打赏10分 | |
【换取手持示波器】树莓派PICOW网页烟花被打赏18分 | |
【换取手持示波器】树莓派PICO逻辑分析仪被打赏16分 | |
【分享评测,赢取加热台】教你五分钟本地部署蒸馏版本的DeepSeekR1-7B被打赏12分 | |
【换取手持示波器】蓝牙音箱更换电池被打赏8分 | |
【换取手持示波器】鼠标更换微动开关被打赏10分 | |
【我要开发板】4.传感器移植被打赏50分 | |
【换取手持数字示波器】RISC-VGCC使用-fno-omit-frame-pointer编译选项实现栈回溯被打赏29分 | |
【分享评测,赢取加热台】+开关电源简述被打赏7分 |