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控制器处理,如果是空白的则两个都可以处理。

时间: 2024-10-07 18:17:42

16.6410DMA简述的相关文章

网传Linux运维面试题解答(二)

题目来源:http://2358205.blog.51cto.com/2348205/1688323 http://mofansheng.blog.51cto.com/8792265/1627907 大部分都自己做的,部分参考了原帖博主的答案 1.Linux开机流程 BIOS开机自检→MBR引导→加载GRUB→加载linux内核→运行init进程,读取/etc/inittab→执行/etc/rc.d/rc.sysinit脚本→执行/etc/rc.d/rc脚本,运行/etc/rc.d/rcX.d中

C/C++ 经典面试题汇总

面试题1:变量的声明和定义有什么区别 ? 为变量分配地址和存储空间的称为定义,不分配地址的称为声明.一个变量可以在多个地方声明,但是只在一个地方定义.加入extern修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分定义. 说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间,如外部变量. 面试题2:写出bool .int. float.指针变量与"零值"比较的if语句 bool型数据: if(flag) { A; } else { B:} in

软件体系结构原理、方法与实践总结

第1章:软件体系结构概论 什么是软件危机,软件危机的具体表现有哪些? 软件危机:落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象. 软件危机的表现: 软件成本日益增长,开发进度难以控制,软件质量差,软件维护困难 产生软件危机的原因,如何克服软件危机? 产生软件危机的原因有用户需求不明确,缺乏正确的理论指导,软件规模越来越大,软件复杂度越来越高. 人们面临的不光是技术问题,更重要的是管理问题.要提高软件开发效率,提高软件产品质量,必须采用工程

Android 常见面试题

这些面试是我之前总结的 .觉得还不错,就贴出来与大家分享一下.当中有不少问题.也是我以前被面试官问过的问题,另一些基础问题总结(既然是基础知识 ,必定是成为一名的 Android 开发者 所必须掌握的 ). 有多个问题,我都替你试过了,这样回答面试官.还能够啊,嘿嘿 1. Android中四大组件及其作用? 1.Activity:activity是用户和应用程序交互的窗体,一个activity相当于我们实际中的一个网页.当打开一个屏幕时,之前的那一个屏幕会被置为暂停状态.而且压入历史堆栈中,用户

Linux运维(应用软件原理)面试专题

1.什么是运维?什么是游戏运维? 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常, 在他运转的过程中,对他进行维护,他集合了网络.系统.数据库.开发.安全.监控于一身的技术 运维又包括很多种,有DBA运维.网站运维.虚拟化运维.监控运维.游戏运维等等 2)游戏运维又有分工,分为开发运维.应用运维(业务运维)和系统运维 开发运维:是给应用运维开发运维工具和运维平台的 应用运维:是给业务上线.维护和做故障排除的,用开发运维开发出来的工具给业务上线.维护.做故障排查

Java知识点解析

JAVA 1:简述Java的基本历史 java起源于SUN公司的一个GREEN的项目,其原先目的是为家用消费电子产品 发送一个信息的分布式代码系统,通过发送信息控制电视机.冰箱等. 2:简单写出Java特点,写出5个以上,越多越好 简单的.面向对象的.分布式的.安全的.稳定的.与平台无关的.可解释的.多线的.动态的语言. 3:什么是Java? JAVA:一种编程语言 一种开发环境 一种应用环境 一种部署环境 4:请写出Java的版本分类及应用方向 三种版本: J2ME:是面向内存有限的移动终端.

iOS 面试题 2

1.         描述应用程序的启动顺序. 1.程序入口main函数创建UIApplication实例和UIApplication代理实例 2.在UIApplication代理实例中重写启动方法,设置第一ViewController 3.在第一ViewController中添加控件,实现对应的程序界面. 为什么很多内置类如UITableViewControl的delegate属性都是assign而不是retain?请举例说明. 防止循环引用, Student * str=[]; Teache

Java课后思考题

1.简述path和classpath的区别. path:path环境变量是系统环境变量中的一种,它用于保存一系列可执行文件的路径,每个路径之间以分号分隔.当在命令行窗口运行一个可执行文件时,操作系统首先会在当前目录下查找是否存在该文件,如果不存在会继续在path环境变量中定义的路径下去寻找这个文件,如果仍未找到,系统会报错. classpath:classpath环境变量也是系统环境变量中的一种,它用于保存一系列类(.class)文件的路径.当Java虚拟机需要运行一个类时,会先在classpa

【python】基础知识练习题一

1.执行Python脚本的两种方式 1.pyhon解释器 python zhurui.py 2.简述位.字节的关系 8位一个字节 3.简述ascii.unicode.utf-­‐8.gbk的关系 4.请写出  “朱锐”  分别用utf-­‐8和gbk编码所占的位数 一个汉字 utf-8占3个字节,utf-8:6 gbk:4 5.Pyhton单行注释和多行注释分别用什么? 6.声明变量注意事项有那些? 7.如有一下变量n1  =  5,请使用int的提供的方法,得到该变量少可以用多少个二进制位表示