首页 > 代码库 > DMA控制
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 *)0x7F00502031 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主机262 源主机选择AHB主机163 */64 DMACC0Control0 =(1<<25) | (1 << 26)| (1<<31); 65 DMACC0Control1 = 0x64; //传输的大小66 67 68 69 70 71 //开启channel0 DMA72 /*73 流控制和传输类型:MTP 为 00174 目标外设:DMA_UART0_1,源外设:DMA_MEM75 通道有效: 176 */77 78 DMACC0Configuration = (1<<6) | (1<<11) | (1<<14) | (1<<15);79 80 }81 82 83 void dma_start()84 {85 DMACC0Configuration = 1; 86 }
DMA控制
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。