首页 > 代码库 > 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 }
View Code

 

DMA控制