【AM263x】DMA

【AM2634】DMA

1. 前言

2. 功能

DMA的作用就是不依赖CPU实现内存搬运,降低CPU负载率。

2.1 模块框图

如下图所示为DMA模块的整体框图,从图中可以看到,DMA可以接收从其它模块输入的事件信号,并且自身也可以输出中断信号。它的内部报文两个模块:TPCC和TPTC用以实现外部输出事件的控制和仲裁以及数据的搬运。
在这里插入图片描述

2.2 数据搬运流程

如下图所示,当触发源触发后(比如SPI触发了数据发送请求),请求信号会通过DMA Trigger Xbar映射到对应DMA通道触发DMA数据搬运。DMA通道会根据用户配置的参数(这个和DMA的核心,后面重点介绍)进行数据搬运。
在这里插入图片描述

3. PaRAM(参数列表)

PaRAM非常的重要,它决定了DMA数据搬运的方式。

AM263x中一共有256个PaRAM。

如下图是一个PaRAM的内存分配图。
在这里插入图片描述

3.1 SRC / DST

  • SRC:源地址
  • DST:目标地址

3.2 ACNT / BCNT / CCNT

这三个值决定了数据搬运的维度。

  • ACNT:一维
  • BCNT:二维
  • CCNT:三维

如下图所示:
在这里插入图片描述

OPT中的SYNCDIM字段决定了数据的搬运模式,如下图所示:
在这里插入图片描述

① A-Sync模式:

如下图所示,在A-Sync模式下,触发一次DMA请求,DMA则会搬运ACNT个数据。
在这里插入图片描述
② AB-Sync模式:

如下图所示,在AB-Sync模式下,触发一次DMA请求,会搬运ACNT * BCNT个数据。
在这里插入图片描述

3.3 SBIDX / DBIDX

在二维角度上目标地址和源地址的步进值,当完成一次地址地址搬运后,目标地址和源地址都会增加BIDX。

(搬运了ACNT个数据后,地址递增)

3.4 SCIDX / DCIDX

在三维角度上目标地址和源地址的步进值,当完成一次地址地址搬运后,目标地址和源地址都会增加CIDX。

(搬运了ACNT * BCNT个数据后地址递增)

3.5 BCNTRLD

当CCNT-1的时候,BCNT重装载BCNTRLD值。

3.6 LINK

LINK很重要,它的作用是将PaRAM。当前DMA通道使用的PaRAM中的搬运计数减到0的时候,则会通过LINK中的信息去刷新PaRAM。

  • LINK中的值如果为0xFFFF,则数据搬运完后,PaRAM中的所有值被重置为0(NULL)
  • LINK中的值如果为(0x20 * n),则数据搬运完后,则会加载所链接的PaRAM中的值。

如下图所示,初始PaRAM Set被设置为3,3链接到PaRAM Set 511上,当3执行完毕的时候,会将511中的内容填充到3中,当3再次执行完毕的时候,3中内容全部被清0。

在这里插入图片描述

我们可以通过LINK的方式实现Auto-Reload

如下图所示,初始设置为PaRAM Set 3,3链接到PaRAM Set 5上,5链接自己。当3执行完毕后,会将5的内容赋值到3上,因为5链接的是自己,所以当3再次执行完毕后依旧会拷贝5的内容,以此实现Auto-Reload。
在这里插入图片描述

4. DMA XBAR

DMA XBAR 分为两部分:

  • DMA Xbar
  • DMA Trigger Xbar

整体框图如下图所示。

触发源需要通过DMA Trigger Xbar链接到DMA通道上以触发DMA通道进行数据搬搬运。DMA Xbar是用来将来自Controlss Modules的触发信号链接到DMA Trigger Xbar上。
在这里插入图片描述

4.1 DMA Xbar

DMA Xbar有16个通道,用于路由来自Controlss Modules的DMA请求信号。如下所示,每个通道有6个Group可用于选择,每个Group中都能够使能特定的触发源。
在这里插入图片描述

如下图所示,每个通道有一个通道选择寄存器用来选择Group,每个Group都有一个配置寄存器。
在这里插入图片描述
如下图所示为Group2寄存器中的配置,Group是专用于链接ADC模块的触发源。
在这里插入图片描述

/* DMA XBAR */
SOC_xbarSelectDMAXBarInputSource(CSL_CONTROLSS_DMAXBAR_U_BASE, 0, 2, 0, 0, DMA_XBAR_ADC3_INT2, 0, 0, 0);

4.2 DMA Trigger Xbar

如下图所示为EDMA Trigger Xbar模块图,它的作用是链接DMA触发源跟DMA通道。
在这里插入图片描述

/*
* out: DMA 通道
* mux_control: 请求信号
*/
static inline void SOC_xbarSelectEdmaTrigXbarInputSource(uint32_t base, uint8_t out, uint8_t mux_control)
{
    HW_WR_REG32(base + CSL_EDMA_TRIG_XBAR_MUXCNTL(out), (CSL_EDMA_TRIG_XBAR_MUXCNTL_INT_ENABLE_MASK) |    (mux_control & CSL_EDMA_TRIG_XBAR_MUXCNTL_ENABLE_MASK));
}

/*
* DMA TRIGGER XBAR
*/
SOC_xbarSelectEdmaTrigXbarInputSource(CSL_EDMA_TRIG_XBAR_U_BASE, DMA_TRIG_XBAR_EDMA_MODULE_0, DMA_TRIG_XBAR_EDMA_MODULE_0_INPUT);

mux_control:对应这张表格。

在这里插入图片描述
out:对应这张表格。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值