码迷,mamicode.com
首页 > 其他好文 > 详细

16.6410DMA简述

时间:2016-02-14 11:42:31      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:

16.6410DMA简述

技术分享

1.为什么需要DMA

首先看串口来传递信息:发送字符串。

发送函数:在uart.c里增加下面发送函数:

技术分享

接下来在main.c里调用:

技术分享

技术分享

编译make,

技术分享

烧写到开发板:

制作SD卡,设置开发板从SD卡启动,设置好minicom后给开发板上电,紧接着按着空格键:

技术分享

选择[1]格式化NandFlash:

技术分享

技术分享

按照上面,选择从USB烧写image,然后选择1,烧写uboot。然后把USB线拉到虚拟机,会显示USB按着成功了。接下来就可以烧写编译好的.bin文件了。

技术分享

在Linux里按着USB驱动:

技术分享

接下来烧写:

技术分享

技术分享

串口信息:

技术分享

设置开发板从NandFlash启动:

技术分享

可以看到我们串口的信息已经打印出来了。说明串口发送信息成功了。

 

 

 

 

接下来看原始数据的传输:

技术分享

上面就是原始数据的传输机制,输出的传输需要CPU全程参与,当buf里的数据很大的时候,这机制就浪费了CPU的大部分资源。

所以DMA机制就出现了,有DMA的机制如下:

技术分享

该机制里,当需要传输数据的时候,CPU给DMA控制器命令,告诉DMA要去源地址拿数据,送到目的地址,然后就可以去干别的事了。DMA控制器接受到CPU的命令后,通过内存与串口的数据通道,会不停从源地址获取数据,送到目的地址,知道结束。这就是DMADirect Memory Access机制。

接下来看看2440的DMA:

 

技术分享

可以看到2440的DMA是四通道的。

每一个通道的请求源:

技术分享

DMA的基本时序:

例如UART0的请求源,对应的是通道0(Ch-0),UART2对应的是通道3.

DMA请求到启动的过程时序图:

技术分享

首先是DREQ,DMA请求信号生效,当请求信号生效两个时钟之后,响应信号DACK生效,生效的时间是3个时钟。DMA控制器正式接管了总线,就可以实现Read and Write了。

 

DMA的两种工作模式:

技术分享

 

 

6410的DMA:

技术分享

可以看到6410有四个DMA控制器,每一个控制器有8个通道,就是说6410支持的是32DMA通道。

 

32通道支持的DMA源:

技术分享

第一行的意思是:在DMA0或者SDMA0控制器的0通道上面,可以使用的是UART0源。依此类推。

四个控制器是DMA0,DMA1和SDMA0和SDMA1。在默认的情况使用的是SDMA控制器,默认值是0.

 

基本工作时序:

技术分享

原理跟2440一样的。

 

210的DMA:

技术分享

技术分享

上面可以看到210支持两种类型的DMA:一种是内存到内存的,另一种是内存到外设的。

210有三个控制器:DMA(内存)、DMA0、DMA1.

 

三个控制器对应的DMA源:

技术分享

技术分享

技术分享

可以看到DMA源的后面都的是by only DMA0或DMA1,说明这种的DMA源只能给对应的DMA控制器处理,如果是空白的则两个都可以处理。

16.6410DMA简述

标签:

原文地址:http://www.cnblogs.com/FORFISH/p/5188831.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!