这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » ARM11内核DMA的作用

共5条 1/1 1 跳转至

ARM11内核DMA的作用

菜鸟
2009-09-29 10:21:46     打赏

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




关键词: ARM11     内核     作用    

菜鸟
2009-09-29 20:34:25     打赏
2楼

数据批传。


菜鸟
2009-10-26 11:01:41     打赏
3楼
谢谢!!!
DATASHEET里面是这样子写的
“transfer large blocks of data between the TCM and an external memory”
请问主要是传输什么样的数据?这样子做提高了那些性能呢?

菜鸟
2009-10-27 23:49:39     打赏
4楼
深圳知名通信企业,高薪诚聘底层软件设计师、工程师,
4年以上嵌入式系统开发设计经验;
熟悉PowerPC/mips/ARM/X86至少两种或以上处理器架构;
熟悉CPU的多核、多线程、cache、MMU等常用硬件技术,深入了解嵌入式OS(VXWORKS,linux等);
熟悉常用硬件单元或芯片,如网口,flash,硬件加速引擎的软件驱动技术;
如果有意向可联系
qq:1263987528
或简历发到:
email:zwd2009101@163.com
合适的话面谈

助工
2009-11-05 17:21:10     打赏
5楼

这个问题问得有点难,需要对单片机有足够的了解后才会明白其原理。

这里简单的讲解一下,详细情况可以自己查阅相关资料。
电子产品经常需要进行数据搬运工作,如果是用程序代码一个一个的搬运,效率会非常低下,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的配合,否则程序会出现一些怪问题,这里不进行详述。


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]