DSP_DMA

通过C2000_Ware中例程can_ex4_loopback_dma来学习DMA

概要

这里的MCU平台为280049

1. DMA Block

在这里插入图片描述

2. DMA初始化分析

在这里插入图片描述
代码

	DMA_configAddresses(DMA_CH5_BASE, rxMsgData,
                        (uint16_t *)(CANA_BASE + CAN_O_IF2DATA));
    DMA_configBurst(DMA_CH5_BASE, DMA_BURST, 2, 1);
    DMA_configTransfer(DMA_CH5_BASE, DMA_TRANSFER, 0, 0);

3. DMA触发源选择

在这里插入图片描述
根据上面这个框图可知,DMA出发源选择其实分两步(为图中的1和2)
1 是选择触发源,即选择哪一个外设/软件触发源
2 此时触发源已经选好了,那么触发源要进入DMA的哪一个或多个通道,就要在此处进行选择

第1步 选择触发源

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
找到对应的通道寄存器后应该设置成什么样的值呢?
在这里插入图片描述

在这里插入图片描述

第2步 触发源进入DMA通道设置

在这里插入图片描述

代码 eg:

DMA_configMode(DMA_CH5_BASE, DMA_TRIGGER_CANAIF2, DMA_CFG_ONESHOT_DISABLE |
                   DMA_CFG_CONTINUOUS_DISABLE | DMA_CFG_SIZE_16BIT);

3. 概念和名词解释

WRAPSIZE

在这里插入图片描述

CAN_IF2CMD.DMAactive

在这里插入图片描述

CAN_CTL.DEx

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

|________________________________________________________________________|

4. 避坑指南-为什么DMA配置一切正常但是数据就是没有成功搬运?

|________________________________________________________________________|

概要:

这里以28388平台为例

4.1 DMA没有该地址区域的操作权限

原理分析:有可能是因为 【数据源数组】 和【目标数组】所处的地址不支持DMA操作
如下图所示,在memory map中可以看到哪些存储区是支持DMA的
在这里插入图片描述

举例说明:
在这里插入图片描述
通过.map文件可以找到上述两个数组的地址
在这里插入图片描述
在cmd文件中就可以看到.bss所处的存储区名称是C1RAM
在这里插入图片描述
那么cm memory map中C1RAM是不支持uDMA的,所以怎么折腾uDMA也不会听话的。

4.1 DMA的通道设置得不对

简述:DMA有很多个通道,每个通道对应什么外设都是分配好的,所以要正确设置。
举个栗子:
比如我想用EnterCAT的SYNC0信号来触发uDMA request
在这里插入图片描述
那么在uDMA通道分配表中可以看到其对应14通道
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值