DMA的配置与安装

前言

前面提到,要想使用DMA首先要配置DMA


废话不多说,直接上代码吧

typedef struct { 
//源地址高8位    
unsigned char SRCADDRH; 
//源地址低8位    
unsigned char SRCADDRL; 
//目的地址高8位   
unsigned char DESTADDRH;    
//目的地址低8位   
unsigned char DESTADDRL;    
//长度域模式选择   
unsigned char VLEN  :3;
//传输长度高字节
unsigned char LENH  :5;
//传输长度低字节
unsigned char LENL  :8; 

//字节或字传输 
unsigned char WORDSIZE  :1;
//传输模式选择
unsigned char TMODE     :2;
//触发事件选择
unsigned char TRIG :5;  
//源地址增量:_1/0/1/2    
unsigned char SRCINC    :2;
//目的地址增量:-1/0/1/2
unsigned char DESTINC   :2;
//中断屏蔽
unsigned char IRQMASK   :1;
//7或8bit传输长度,仅在字节传输模式下适用    
unsigned char M8 :1; 
//优先级   
unsigned char PRIORITY  :2;
} DMA_CFG;  

上面就是DMA配置安装的结构体

DMA的具体配置

void DMAtest(void)
{   char i;
    char error = 0; 
    //源字符串
    unsigned char sourceString[] = "I am the sourceString!\r\n"; 
    //目的字符串
    unsigned char destString[sizeof(sourceString)];
    memset(destString,0,sizeof(destString));

    // DMA配置安装——DMA参数的配置:源地址
    dmaConfig.SRCADDRH=(unsigned char)((unsigned int)&sourceString >> 8);
    dmaConfig.SRCADDRL=(unsigned char)((unsigned int)&sourceString );
    //目的地址
    dmaConfig.DESTADDRH=(unsigned char)((unsigned int)&destString >> 8);
    dmaConfig.DESTADDRL=(unsigned char)((unsigned int)&destString); 
    //选择LEN  作为传送长度
    dmaConfig.VLEN = 0x00; 
    //传输长度
    dmaConfig.LENH = (unsigned char)((unsigned int)sizeof(sourceString)>>8);
    dmaConfig.LENL = (unsigned char)((unsigned int)sizeof(sourceString));
    //选择字节byte传送
    dmaConfig.WORDSIZE = 0x00;  
    //选择块传送模式
    dmaConfig.TMODE = 0x01; 
    //无触发,可理解为手动触发
    dmaConfig.TRIG  = 0; 
    //源地址增量为1
    dmaConfig.SRCINC = 0x01; 
    //目的地址增量为1      
    dmaConfig.DESTINC =0x01;  
    //使能中断
    dmaConfig.IRQMASK = 1; 
    //选择8位长的字节来传送数据
    dmaConfig.M8 = 0x00;
    //传送优先级为高
    dmaConfig.PRIORITY = 0x02;     

    // DMA配置安装——DMA地址的配置:将配置结构体的首地址赋予相关SFR
    DMA0CFGH = (unsigned char)((unsigned int)&dmaConfig >>8);
    DMA0CFGL = (unsigned char)((unsigned int)&dmaConfig);
    asm("nop");//等待加载结束
    }

DMA地址的配置

DMA配置数据结构的地址是通过一组SFR来存放,通过寄存器DMAxCFGH:DMAxCFGL(高8位:低8位)送到DMA控制器
DMA0CFGH:DMA0CFGL给出DMA通道0配置数据结构的开始地址
DMA1CFGH:DMA1CFGL给出DMA通道1配置数据结构的开始地址,其后跟着通道2-4的配置数据结构。

// DMA配置安装——DMA地址的配置:将配置结构体的首地址赋予相关SFR
    DMA0CFGH = (unsigned char)((unsigned int)&dmaConfig >>8);
    DMA0CFGL = (unsigned char)((unsigned int)&dmaConfig);

代码有点多,希望大家能够慢慢理解,下期我们介绍怎么初始化DMA。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值