请问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电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 |