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. linux笔记_防止ddos攻击

    一.什么是DoS攻击 DoS是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务.最常见的DoS攻击有计算机网络带宽攻 ...

  2. Java和C++的虚函数的异同

    参考博客:点我 要点:Java中的普通函数默认为虚函数,因此动态绑定的行为是默认的,而C++必须将方法声明为虚函数(virtual关键字),执行时才会进行动态绑定,详细区别可参考代码以及注释. 代码大 ...

  3. linux第三方程序移植

    摘要:在linux开发过程中经常需要用到第三方的程序,有时需要用到它们的库,有时需要它们生成的可执行文件,如何正确地编译这些第三方的程序,以方便地使用和开发自己需要的程序,将是本文要论述的内容. 1. ...

  4. Visual Studio+TFS--强大的项目管理工具

    一.前言 微软的Visual Studio非常强大,可以无缝结合Git或自家的TFS(Team Foundation Server),进行项目管理非常方便,从需求分析.开发.测试.维护,几乎可以贯穿软 ...

  5. Who is using Asio?

    https://think-async.com/Asio/WhoIsUsingAsio

  6. PHP MYSQL单向同步方案

    项目上有个需求,需要从外网服务器的MYSQL同步到本地服务器上. 思路如下: 1 在外网MYSQL中创建表 table_change_log ,记录表中数据的更改记录. DROP TABLE IF E ...

  7. C#:优惠券代码

    static Random random = new Random(); List<string> generatedVouchers = new List<string>() ...

  8. Zedboard安装桌面系统ubuntu及opencv(2)

    接上一篇,下面安装opencv. 一般都是参照陆佳华那本白色封皮的<软硬件协同设计>,但是不得不说这本书实在太粗糙了,很多的细节都没有说明. 首先,在PC和这块板子的方法是一样的,所以PC ...

  9. 数据挖掘之KNN算法(C#实现)

    在十大经典数据挖掘算法中,KNN算法算得上是最为简单的一种.该算法是一种惰性学习法(lazy learner),与决策树.朴素贝叶斯这些急切学习法(eager learner)有所区别.惰性学习法仅仅 ...

  10. haproxy +keepalived 原创

    Haproxy+keepalived 原理: HAProxy介绍及其定位 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.根 ...