DMA的引入

来源:互联网 发布:java金融项目开发代码 编辑:程序博客网 时间:2024/05/16 19:05

假设我们的开发板,举个例子就是s5pv210外面接有内存,

如上图,假设我们要把内存中某一段的数据作为源,拷贝到这个内存中的另一段中去


我们写出程序来,比如说我们这么写

char *src=某个地址

char *dst=某个地址

int i;

for(i=0;i<size;i++)

dst[i]=src[i];

谁来运行这个程序,CPU

这个S5PV210里面有个CPU,CPU执行数据的拷贝工作

那么显然,CPU在执行过程中,CPU同一时间只能做一件事情,假设我们数据很大的话,我们CPU就不能做其他事情了,那怎么办呢,我们就引入了另外一个东西叫DMA

这个s5pv210除了CPU之外还有个DMA,DMA的意思是direct memory access 内存的直接访问。我们数据的拷贝按照以前的做法是写出一段程序,让CPU来执行,我现在想把CPU给解放出来,由谁来做,由这个DMA来做,我只需要把源告诉DMA,把目的告诉DMA,把这个长度告诉DMA,然后启动。DMA就会自动的把数据拷贝从源拷贝到目的。

拷贝过程中跟CPU没什么关系。拷贝完之后中断,CPU就知道你这数据拷完了。在拷贝过程中你的CPU可以去忙其他的事情uq,这就是DMA的概念。 其实在启动DMA之前,还需要设置DMA的一些参数,比如说对我们的例子是从源把数据拷贝到目的,假设我们源在低地址,目的是高地址,那么考的时候 我们源地址是加,目的地址也是往上涨,那么你可以设置比如说,地址是递增也可以是递减,每拷完一个数据地址增加或者减小,或者不变,我们启动DMA也分为手工启动,设置某个寄存器。还有外部启动,我们s5pv210里面除了DMA之外还有其他芯片,比如说I2S,当我们麦克风数据进来之后,数据会存到fifo里面,你可以去设置他,当里面有数据的时候去触发DMA,这个DMA就会把FIFO里面的数据拷贝到内存里面去,可以这么做





0 0
原创粉丝点击