ok6410的DMA裸机总结
1.为何使用DMA:为了提高CPU的工作效率,避免多余的等待时间
2.关于DMA控制器:
(1)通道数:2440有4个通道,6410有4个DMA控制器(初始化的时候要选择),32个通道。210有两种DMA一种是内存与内存之间,另外则是普通的内存与外设之间。
(2)请求源:
(3)基本时序
nXDREQ请求生效并经过2CLK周期同步后,nXDACK响应并开始生效,但至少还要经过3CLK的周期延迟,DMA控制器才可获得总线的控制权,并开始数据传输
(4)工作模式:
•Demond模式:
如果DMA完成一次请求后如果Request仍然有效,那么DMA就认为这是下一次DMA请求,并立即开始下一次的传输
•Handshake模式:
DMA完成一次请求后等待Request信号无效,如果Request无效,DMA会无效ACK两个时钟周期,再等待下一次Request。
3.初始化
(1)源地址寄存器初始化(总线模式以及地址是否增加,还有选择通道,指定地址)
(2)目的地址寄存器初始化
(3)控制寄存器初始化(选择DMA请求源,选择源是软件还是硬件,是否重加载以及计数值决定发送多少数据)
范例代码:
/*
S3C6410中DMA操作步骤:
1、决定使用安全DMAC(SDMAC)还是通用DMAC(DMAC);
2、开启DMAC控制,设置DMAC_Configuration寄存器;
3、清除传输结束中断寄存器和错误中断寄存器;
4、选择合适的优先级通道;
5、设置通道的源数据地址和目的数据地址(设置DMACC_SrcAddr和DMACC_DestAddr);
6、设置通道控制寄存器0(设置DMACC_Control0);
7、设置通道控制寄存器1,(传输大小,设置DMACC_Control1);
8、设置通道配置寄存器;(设置DMACC_Configuration)
9、使能相应通道(设置DMACC_Configuratoin);
*/ #define SDMA_SEL (*((volatile unsigned long *)0x7E00F110))
#define DMACIntTCClear (*((volatile unsigned long *)0x7DB00008))
#define DMACIntErrClr (*((volatile unsigned long *)0x7DB00010))
#define DMACConfiguration (*((volatile unsigned long *)0x7DB00030))
#define DMACSync (*((volatile unsigned long *)0x7DB00034))
#define DMACC0SrcAddr (*((volatile unsigned long *)0x7DB00100))
#define DMACC0DestAddr (*((volatile unsigned long *)0x7DB00104))
#define DMACC0Control0 (*((volatile unsigned long *)0x7DB0010c))
#define DMACC0Control1 (*((volatile unsigned long *)0x7DB00110))
#define DMACC0Configuration (*((volatile unsigned long *)0x7DB00114)) #define UTXH0 (volatile unsigned long *)0x7F005020 char src[] = "\n\rHello World-> This is a test!\n\r"; void dma_init()
{
//DMA控制器的选择(SDMAC0)
SDMA_SEL = ; //DMA控制器使能
DMACConfiguration = ; //初始化源地址
DMACC0SrcAddr = (unsigned int)src; //初始化目的地址
DMACC0DestAddr = (unsigned int)UTXH0; //对控制寄存器进行配置
/*
源地址自增
目的地址固定、
目标主机选择AHB主机2
源主机选择AHB主机1
*/ DMACC0Control0 =(<<) | ( << )| (<<); /* 25选择目的地址 26源地址增长 31中断允许位 */
DMACC0Control1 = 0x64; //传输的大小 /*
流控制和传输类型:MTP 为 001
目标外设:DMA_UART0_1,源外设:DMA_MEM
通道有效: 1
*/ DMACC0Configuration = (<<) | (<<) | (<<) | (<<); /* 6选择目的地址是否为外设 11流控位 memory to peripheral 14and15 中断屏蔽 */ } void dma_start()
{
//开启channel0 DMA
DMACC0Configuration = ;
}
ok6410的DMA裸机总结的更多相关文章
- ok6410[000] 搭建裸机开发环境
1.安装交叉工具链arm-linux-gcc-4.3.2 先把这个工具复制到rhat系统中[rhel-server-6.3-i386-dvd.iso] 解压arm-linux-gcc-4.3.2到一个 ...
- ok6410的LCD裸机范例
/****************************************** 实验步骤 1.配置引脚功能,将其GPI.GPJ引脚设置为VD数据输出模式,及GPJ后几位设置成LCD时钟输出: ...
- ok6410[002] ubuntu1604系统下搭配ckermit和dnw基于RAM的裸机程序调试环境
ubuntu1604系统下搭配ckermit和dnw基于RAM的裸机程序调试环境 系统: ubuntu16.04 裸板: 飞凌公司OK6410开发板 目标:搭建基于ubuntu1604系统和基于RA ...
- ok6410串口裸机总结
1.串口角色:(1)数据传输通道(2)控制台 2.通讯参数(1)波特率:衡量传输速率的快慢,每秒钟传输数据的位数(bit)(2)数据位:有效数据(3)起始位:线路空闲的时候是高电平,当检测到低电平认为 ...
- mini2440裸机试炼之——DMA直接存取 实现Uart(串口)通信
这个仅仅能作为自己初步了解MDA的开门篇 实现功能: 将字符串数据通过DMA0通道传递给UTXH0,然后在终端 显示.传输数据完后.DMA0产生中断,beep声, LED亮. DMA基本知识 计算机系 ...
- ok6410按键中断编程,linux按键裸机
6410按键中断编程 一.流程分析 外部中断控制寄存器(s3c6410x 359页) 1.EINTxCONy: 外部中断组x的第y个控制器.这个就是设置中断的触发方式.有5种触发方式. 2.EINT ...
- Ok6410裸机驱动学习(三)C语言内嵌汇编
1.C语言内嵌汇编使用方法 C内嵌汇编以关键字”_asm_或asm开始,下辖4个部分,各部分之间用“:”分开,第一部分是必须写的,后面3个部分可以省略,但是分号:不能省略 优化后的代码 2.汇编程序框 ...
- Ok6410裸机驱动学习(二)ARM基础知识
1.ARM工作模式 ARM微处理器支持7种工作模式,分别为: l 用户模式(usr):ARM处理器正常的程序执行状态(Linux用户态程序) l 快速中断模式(fiq):用于高速数据传输或通道处理 ...
- Ok6410裸机驱动学习(一)开发工具
1.GCC工具链 1.GCC默认处理的文件类型 文件类型 扩展名 文件说明 文本文件 *.c C语言源文件 *.C.*.cxx.*.cc C++源文件 *.i 预处理后的C语言源文件 *.ii 预处理 ...
随机推荐
- Ant not found - Make sure it's in the path or use --with-ant-home
# pacman -S apache-ant 参考:http://blog.csdn.net/linshutao/article/details/6638116
- 使用U盘在X230上安装Mavericks/Win7-黑苹果之路
新笔记本x230,毫不犹豫继续开始黑苹果之路,这次当然是上最新版本了,谁知道这条道路真是曲折艰难啊,从年前开始,直到前天才算安装成功,还有一堆硬件没驱动上,现记录过程以备以后查看: 1.准备机器.本来 ...
- 欧几里得算法与扩展欧几里得算法_C++
先感谢参考文献:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 注:以下讨论的数均为整数 一.欧几里得算法(重点是证 ...
- 3.5 The Lexical-Analyzer Generator Lex
3.5 The Lexical-Analyzer Generator Lex In this section, we introduce a tool called Lex, or in a more ...
- mongodb分组,的两种方式,先记一下
using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.Builders; using NationalUnion.AdGalle ...
- Java基础——异常体系
在Java中,异常对象都是派生于Throwable类的一个实例,Java的异常体系如下图所示: 所有的异常都是由Throwable继承而来,在下一层立即分解为两个分支,Error和Exception. ...
- VBS创建数据表
'创建数据表'参数:strDBPath 字符串型 数据库路径'参数:strTableName 字符串型 需要创建的数据表的名称'参数:strColumnName 字符串型 初始化的字段名称,其实可以算 ...
- C# 发送邮件3
C#邮件发送 这篇文章主要介绍如何使用C#的MailAddress类进行邮件的发送. 1.首先引入命名空间using System.Net.Mail; 2.将发送的邮件的功能封装成一个类,该类中包含了 ...
- ajax 清除缓存
$.ajax({ url : actionUrl , beforeSend :function(xmlHttp){ // deforeSend 是请求前清除缓存 ,如果没有缓存也不使用before ...
- Objective-C的基础语法总结
1.NSLog(@“hello world!”);//打印语句的函数,需要打印的字符串放在@之后. NSLog(@“are %d and %d different?%@”,4,4,@”YES”); 2 ...