DMA控制

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

 1 /*
 2 S3C6410中DMA操作步骤:
 3 1、决定使用安全DMAC(SDMAC)还是通用DMAC(DMAC);
 4 2、开始相应DMAC的系统时钟,并关闭另外一组的时钟(系统默认开启SDMA时钟);
 5 3、开启DMAC控制,设置DMAC_Configuration寄存器;
 6 4、清除传输结束中断寄存器和错误中断寄存器;
 7 5、选择合适的优先级通道;
 8 6、设置通道的源数据地址和目的数据地址(设置DMACCxSrcAddr和DMACCxDestAddr);
 9 7、设置通道控制寄存器0(设置DMACCxControl0);
10 8、设置通道控制寄存器1,(传输大小,设置DMACCxControl1);
11 9、设置通道配置寄存器;(设置DMACCxConfiguration)
12 10、使能相应通道(设置DMACCxConfiguratoin);
13
14 */
15
16
17 #define SDMA_SEL              (*((volatile unsigned long *)0x7E00F110))
18 #define DMACIntTCClear          (*((volatile unsigned long *)0x7DB00008))
19 #define DMACIntErrClr          (*((volatile unsigned long *)0x7DB00010))
20 #define DMACConfiguration          (*((volatile unsigned long *)0x7DB00030))
21 #define DMACSync              (*((volatile unsigned long *)0x7DB00034))
22 #define DMACC0SrcAddr         (*((volatile unsigned long *)0x7DB00100))
23 #define DMACC0DestAddr         (*((volatile unsigned long *)0x7DB00104))
24 #define DMACC0Control0          (*((volatile unsigned long *)0x7DB0010c))
25 #define DMACC0Control1          (*((volatile unsigned long *)0x7DB00110))
26 #define DMACC0Configuration     (*((volatile unsigned long *)0x7DB00114))
27
28
29
30 #define UTXH0              (volatile unsigned long *)0x7F005020
31
32 char src[100] = "\n\rHello World->";
33
34
35 void dma_init()
36 {
37     //DMA控制器的选择(SDMAC0)
38     SDMA_SEL = 0;
39
40     /* 如果外设的工作时钟与DMA控制器的时钟不相同, 要使能"同步逻辑" */
41     DMACSync = 0;
42
43     //DMA控制器使能
44     DMACConfiguration = 1;
45
46
47     //初始化源地址
48     DMACC0SrcAddr = (unsigned int)src;
49
50
51     //初始化目的地址
52     DMACC0DestAddr = (unsigned int)UTXH0;
53
54
55
56
57     //对控制寄存器进行配置
58     /*
59     源地址自增
60     目的地址固定、
61     目标主机选择AHB主机2
62     源主机选择AHB主机1
63     */
64     DMACC0Control0 =(1<<25) | (1 << 26)| (1<<31);
65     DMACC0Control1 = 0x64;     //传输的大小
66
67
68
69
70
71     //开启channel0 DMA
72     /*
73     流控制和传输类型:MTP 为 001
74     目标外设:DMA_UART0_1,源外设:DMA_MEM
75     通道有效: 1
76     */
77
78     DMACC0Configuration = (1<<6) | (1<<11) | (1<<14) | (1<<15);
79
80 }
81
82
83 void dma_start()
84 {
85     DMACC0Configuration  = 1;
86 }

时间: 2024-11-10 17:54:30

DMA控制的相关文章

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

这个只能作为自己初步了解MDA的开门篇 实现功能: 将字符串数据通过DMA0通道传递给UTXH0,然后在终端 显示.数据传输完后,DMA0产生中断,beep声, LED亮. DMA基本知识 计算机系统中各种常用的数据输入/输出方法有查询方式(包括无条件及条件传送方式)和中断方式,这些方式适用于CPU与慢速及中速外设之间的数据交换.但当高速外设要与系统内存或者要在系统内存的不同区域之间进行大量数据的快速传送时,就在一定程度上限制了数据传送的速率.直接存储器存取(DMA)就是为解决这个问题提出的,采

ZigBee与Android的智能家居控制系统设计

智能家居是在传统住宅的基础上,利用现代科学技术,诸如网络通信.安全防范.自动控制.音视频等技术将家居生活有关的各种家居设施集成,构成的高效.便利.舒适.节能环保的家居环境.随着无线移动网络的快速布局,现代的智能家居只要有一个无线智能设备,即能通过客户端实时查看到住宅中的一切动态.在目前,智能家居控制系统中,有基于面板和红外遥控器或蓝牙的智能家居控制终端解决方案,也有完全基于PC机的智能家居控制终端解决方案,同时还有采用手机作为家居控制终端,利用GSM电话网络通信,实现短信或者语音控制.而以上多种

ts101的DMA运用

今天看了别人的代码才稍微搞懂了点DMA. Direct Memory Access (DMA) is a mechanism for transferring data without executing instructions in the processor core.说白了就是不用内核的参与进行数据的传输. Internal memory <–> External memory or memory-mapped peripherals Internal memory <–>

转:FIFO和DMA

FIFO SPI端口增加了FIFO,使得传输数据有了缓冲区间. FIFO存储器是一个先入先出的双口缓冲器,即第一个进入其内的数据第一个被移出,其中一个存储器的输入口,另一个口是存储器的输出口.主要有三个方面的作用:1)对连续的数据流进行缓存,防止在进机和存储操作时丢失数据:2)数据集中起来进行进机和存储,可避免频繁的总线操作,减轻CPU的负担:3)允许系统进行DMA操作,提高数据的传输速度.这是至关重要的一点,如果不采用DMA操作,数据传输将达不到传输要求,而且大大增加CPU的负担,无法同时完成

DMA

什么是DMA DMA,Direct Memory Access,直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式.在DMA模式下,CPU只需要向DMA控制器下达指令,传输数据由DMA来完成,数据传送完再把信息反馈给CPU,这样能够减少CPU的资源占有率.DMA由硬件实现,从共用系统数据总线的角度看,DMA和CPU是竞争对手的关系,当完成一批数据的传输工作之后,快速设备可以向CPU发出中断请求,报告本次传输结束的同时,请示下一步的操作要求. 应用场合 DMA应用于快速设备和主存储

HI3531由DMA 发起PCIe 事务

Hi3531 PCIe 控制器内含DMA 控制器,DMA 控制器包含有两个DMA 通道(一个 DMA 读通道和一个DMA 写通道).PCIe 控制器内包含的DMA 控制器用于大数据量 的存储器读写事务,以提高数据传输的速率. DMA 控制器可以实现如下的存储器读写事务: DMA 控制寄存器 软件可通过DMA 控制寄存器来配置DMA 传输,也可以通过DMA 控制寄存器启动和 停止DMA 传输.DMA 控制寄存器位于PCIe 控制器的配置寄存器空间内,DMA 控制 寄存器的定义请参考本章的PCIe

详解ARM的AMBA设备中的DMA设备(Linux驱动之DMA)

在开始分析代码之前,先简要介绍一下DMA的基础知识. 1.       什么是DMA DMA,Direct Memory Access,直接内存访问. 既然叫 直接内存访问,那么相对应地,应该就有 "间接的内存访问". 间接的内存访问,我的理解是,就是指最常见的,我们利用CPU的指令,去从一个内存地址中读出数据,然后写到另外一个内存地址中,完成对应的赋值操作. 此过程,完全都是CPU去操作的,如果是单个这样的数据读取和写入,还没啥,但是如果数据量很大,比如我们用memcpy(addr1

关于STM32 DMA相关总结[概述知识点]

关于DMA相关知识的总结,写给未来的自己,希望有帮助.立个Flag[坚持写博客总结自己工作或学习记录自己的生活] -------------------------------------------------------------------------------------有事做,有人爱,有所期待------------------------------------------------------------------------------------------------

(转)DMA(Direct Memory Access)

DMA(Direct Memory Access) DMA(Direct Memory Access)即直接存储器存取,是一种快速传送数据的机制. 工作原理 DMA是指外部设备不通过CPU而直接与系统内存交换数据的接口技术. 要把外设的数据读入内存或把内存的数据传送到外设,一般都要通过CPU控制完成,如CPU程序查询或中断方式.利用中断进行数据传送,可以大大提高CPU的利用率. 但是采用中断传送有它的缺点,对于一个高速I/O设备,以及批量交换数据的情况,只能采用DMA方式,才能解决效率和速度问题