文章目录
【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:对应这张表格。

1894

被折叠的 条评论
为什么被折叠?



