1-15 DMA的原理和应用

(详细的实验代码,请参看https://github.com/elvinsys/arm_tq2440/tree/master/1_uboot/1-15.dma

一、  DMA原理分析

    1.  DMA(Direct Memory Access)直接内存存储,用于内存到内存,或者内存到外设(接口、芯片寄存器等)

    2.  DMA控制器:2440为4通道;6410为四控制器,每个控制器8通道;210分为DMA_mem、DMA0以及DMA1


二、  基于S3C2440的DMA程序设计(touch dma.c   丢到dev目录下,修改dev/Makefile)

    1.  DMA初始化函数:void dma_init( )

        1.1  初始化源地址:

                先设定要传输的字符串:char  *buf = "Hello World!";

                DISRC0  R/W  0x4b00 0000

                DISRC0 = buf;

                DISRCC0    R/W    0x4b00 0004

LOC[1]0AHB
INC[0]0Increment    指针变化


Increment

        1.2  初始化目的地址

                DIDST0    R/W    0x4b00 0008

                DIDST0 = UTXH0;    /*  UTXH0地址为:  0x5000 0020  */

                DIDSTC0    R/W    0x4b00 0000


LOC[1]1APB
INC[0]1Fixed    指针不变化

        

        1.3  初始化控制寄存器

                PCON0    R/W    0x4b00 0010

HWSRCSEL[26:24]001UART0
SWHW-SEL[23]1by[26:24]operation
RELOAD[22]1turn off when becomes
TC[19:0]12数据位数

    2.  打开DMA开始传送——void dma_start()

          DMASKTRIG0    R/W    0x4b00 0020

ON_OFF[1]1ON

    3.  dma.c的代码如下:


char *buf = "Hello Fucku!";


#define DISRC0     (*(volatile unsigned long *)0x4B000000)
#define DISRCC0    (*(volatile unsigned long *)0x4B000004)
#define DIDST0     (*(volatile unsigned long *)0x4B000008)
#define DIDSTC0    (*(volatile unsigned long *)0x4B00000C)
#define DCON0      (*(volatile unsigned long *)0x4B000010)
#define DMASKTRIG0 (*(volatile unsigned long *)0x4B000020)


#define UTXH0      (volatile unsigned long *)0x50000020


void dma_init(void)
{
DISRC0 = (unsigned int)buf;
DISRCC0 &= ~((1<<0)|(1<<1));

DIDST0 = UTXH0;
DIDSTC0 |= ((1<<0)|(1<<1));

DCON0 |= ((1<<24)|(1<<23)|(1<<22)|(12<<0)); 
}


void dma_start(void)
{
DMASKTRIG0 |= (1<<1);
}












LOC[1]0:AHB 
INC[0]0:Increment指针变化
LOC[1]1:APB 
INC[0]1:Fixed指针不变化
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值