1.S3C6410中DMA操作步骤

S3C6410中DMA操作步骤:
1、决定使用安全DMAC(SDMAC)还是通用DMAC(DMAC);
2、开始相应DMAC的系统时钟,并关闭另外一组的时钟(系统默认开启SDMA时钟);
3、开启DMAC控制,设置DMAC_Configuration寄存器;
4、清除传输结束中断寄存器和错误中断寄存器;
5、选择合适的优先级通道;
6、设置通道的源数据地址和目的数据地址(设置DMACCxSrcAddr和DMACCxDestAddr);
7、设置通道控制寄存器0(设置DMACCxControl0);
8、设置通道控制寄存器1,(传输大小,设置DMACCxControl1);
9、设置通道配置寄存器;(设置DMACCxConfiguration)
10、使能相应通道(设置DMACCxConfiguratoin);

2.各个寄存器的初始化

2.1 Secure DMA control register

2.2 Synchronization Register

2.3 DMACConfiguration

2.4 Souce Address Register

因为从内存取,要自增;目的地址固定;目标主机选择AHB主机2;源主机选择AHB主机1。

传输的大小

2.4 Destination Address Register

发送消息到串口

2.5 DMACC0Configuration设置

3. 代码

dma.c

 /*
S3C6410中DMA操作步骤:
1、决定使用安全DMAC(SDMAC)还是通用DMAC(DMAC);
2、开始相应DMAC的系统时钟,并关闭另外一组的时钟(系统默认开启SDMA时钟);
3、开启DMAC控制,设置DMAC_Configuration寄存器;
4、清除传输结束中断寄存器和错误中断寄存器;
5、选择合适的优先级通道;
6、设置通道的源数据地址和目的数据地址(设置DMACCxSrcAddr和DMACCxDestAddr);
7、设置通道控制寄存器0(设置DMACCxControl0);
8、设置通道控制寄存器1,(传输大小,设置DMACCxControl1);
9、设置通道配置寄存器;(设置DMACCxConfiguration)
10、使能相应通道(设置DMACCxConfiguratoin); */ #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->"; void dma_init()
{
//DMA控制器的选择(SDMAC0)
SDMA_SEL = ; /* 如果外设的工作时钟与DMA控制器的时钟不相同, 要使能"同步逻辑" */
DMACSync = ; //DMA控制器使能
DMACConfiguration = ; //初始化源地址
DMACC0SrcAddr = (unsigned int)src; //初始化目的地址
DMACC0DestAddr = (unsigned int)UTXH0; //对控制寄存器进行配置
/*
源地址自增
目的地址固定、
目标主机选择AHB主机2
源主机选择AHB主机1
*/
DMACC0Control0 =(<<) | ( << )| (<<);
DMACC0Control1 = 0x64; //传输的大小 //开启channel0 DMA
/*
流控制和传输类型:MTP 为 001
目标外设:DMA_UART0_1,源外设:DMA_MEM
通道有效: 1
*/ DMACC0Configuration = (<<) | (<<) | (<<) | (<<); } void dma_start()
{
DMACC0Configuration = ;
}

DMA控制的更多相关文章

  1. WS2812B彩灯详细讲解篇(STM32 PWM+DMA控制 STM32 HAL库编程 循环延时控制多种控制方式)

    一.效果展示 观看演示效果:https://www.bilibili.com/video/BV1JT4y1P72Q 二. 基础认识 (一)  小理论 WS2812B是一种智能控制LED光源,将控制电路 ...

  2. 我的操作系统复习——I/O控制和系统调用

    上篇博客介绍了存储器管理的相关知识——我的操作系统复习——存储器管理,本篇讲设备管理中的I/O控制方式和操作系统中的系统调用. 一.I/O控制方式 I/O就是输入输出,I/O设备指的是输入输出设备和存 ...

  3. 计算机中的DMA的多种含义?

    DMA: 一是 动态内存分配:dynamic memory allocate. 就是程序在执行过程中分配内存. 这就是我们在c/c++中经常用到的new, delete, alloc(函数)等等. [ ...

  4. DMA直接内存存取20160525

    说一下工作中接触到的DMA1)在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题.即DMA传输前,CPU要把 总线控制权交给DMA控制器,而在结束DMA传输后,DMA ...

  5. 转:FIFO和DMA

    FIFO SPI端口增加了FIFO,使得传输数据有了缓冲区间. FIFO存储器是一个先入先出的双口缓冲器,即第一个进入其内的数据第一个被移出,其中一个存储器的输入口,另一个口是存储器的输出口.主要有三 ...

  6. mini2440裸机试炼之——DMA直接存取 实现Uart(串口)通信

    这个仅仅能作为自己初步了解MDA的开门篇 实现功能: 将字符串数据通过DMA0通道传递给UTXH0,然后在终端 显示.传输数据完后.DMA0产生中断,beep声, LED亮. DMA基本知识 计算机系 ...

  7. HI3531由DMA 发起PCIe 事务

    Hi3531 PCIe 控制器内含DMA 控制器,DMA 控制器包含有两个DMA 通道(一个 DMA 读通道和一个DMA 写通道).PCIe 控制器内包含的DMA 控制器用于大数据量 的存储器读写事务 ...

  8. 【原创】DMA

    什么是DMA     DMA,Direct Memory Access,直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式.在DMA模式下,CPU只需要向DMA控制器下达指令,传输数据 ...

  9. DMA(直接存储器存取)

    DMA(Direct Memory Access) DMA(Direct Memory Access)即直接存储器存取,是一种快速传送数据的机制. 工作原理 DMA是指外部设备不通过CPU而直接与系统 ...

随机推荐

  1. 如何在Mac OS系统下配置Java服务器开发环境

    1.http://www.oracle.com/technetwork/Java/javase/downloads/index-jsp-138363.html 安装JDK(可通过java -versi ...

  2. s2 devMode cmdshell

    s2 devMode cmdshell   仅支持批量验证,命令执行 链接:http://pan.baidu.com/s/1sl7tgRV 密码:wud8 也可以通过outscan一键获取,之后导入t ...

  3. relative

    进行relative定位后的元素,不会影响原本的文本流. 下图左列的第二张图是进行了margin-top取负值,右列第二张图进行了relative定位     

  4. Invert Binary Tree

    Invert a binary tree: 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 简单递归实现,调换左右子树,子树的所有子树结构 ...

  5. requestAnimationFrame

    (function() { var lastTime = 0; var vendors = ['webkit', 'moz']; for(var x = 0; x < vendors.lengt ...

  6. C-随笔

    C语言的设计哲学之一: 程序员知道自己在干什么-没有安全带! 值的类型并不是值的内在本质, 而是取决于它被使用的方式 1.#include <stdio.h>在预处理器处理的时候把stdi ...

  7. oracle表分区详解(按天、按月、按年等)

    分区表的概念:  当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区.表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间 ...

  8. Base64编码及其作用

    Base64编码的作用:由于某些系统中只能使用ASCII字符.Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法.它使用下面表中所使用的字符与编码. 而且base64特别适合在 ...

  9. oracle数据库从入门到精通之三

    综合案例ddl&dml有一个商品数据库1.数据表的创建    ddl先编写数据库脚本--删除数据表drop table purcase purge;drop table product pur ...

  10. Linux下搭建VPN服务器(CentOS、pptp)转

    先说我搭建过程中出现的问题吧: 按照 教程搭建好之后出现了619错误,查看日志:/var/log/messages: Nov 20 09:46:20 localhost pptpd[7498]: GR ...