公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

TC275调试日志——DMA基本配置及传输过程

TC275调试日志——DMA基本配置及传输过程

凌风2018_版主_
Level 4

今天我们终于可以进入DMA的实际操作过程,设计到DMA传输的所有细节,包括数据配置,寄存器配置等。

1、DMA数据结构设置

因为我们之前说过DMA传输当中MOVE、TRANSFER和TRANSACTION的区别。所以我们现在直接来说这三种数据结构怎么设置。

MOVE是最基础的传输单元,一个MOVE的数据宽度由位域CHCFGRz.CHDW来定义,其配置表如图表一所示

表一:MOVE数据宽度配置

1.png

TRANSFER是由多个MOVE组成的,其中MOVE的个数由位域CHCFGRz.BLKM来配置和计数的,其配置表如表二所示:

表二、TRANSFER中MOVE个数配置表

2.png

TRANSACTION我们之前介绍过是由多个TRANSFER组成的,其个数由位域MExCHSR.TCOUNT进行计数控制的。改位域的值通过位域CHCFGRz.TREL写入和更新的。其配置表如表三所示:

表三、TRANSACTION中TRANSFER个数配置表

3.png

我们可以看到该位域包含14个数据位,可配置为1到16383个TRANSFER。

4.png

图1:MOVE和TRANSFER计数过程

图1展示了MOVE和TRANSFER计数的时序图。

2、DMA地址偏移设置

我们知道,每个DMA move都对应一个源地址或者目标地址。那么在一个DMA transfer传输当中,我们不可能每次都定义一次地址值,这样效率太低下了。因此在DMA控制当中,提供了一种地址自动偏移的机制。可以按照一定的方向以一定的偏移量进行地址偏移。

地址偏移与三个量有关,分别是数据宽度CHCFGRz.CHDW、偏移量MExADICR. SMF、以及偏移方向MExADICR.INCS。表四是对地址偏移的说明:

表四、地址偏移表

5.png

下面再给出一个地址偏移的示例

6.png

图2、地址偏移示例

如图2所示,数据宽度设置为16bit(也就是说每个地址的数据前16位有效),查表可得源地址偏移为地址递增,偏移量为8个,也就是说地址每增加8就读取一次该地址的数据。而目标地址设置为地址递减,偏移量为4个,也就是说地址每减少4就将数据传输到该地址。

3、DMA传输控制流程

在之前的帖子当中,我们说到DMA结构图里有两个DMA子模块,主要是做请求处理的。它包含传输控制和move引擎控制,是DMA传输过程的主要控制单元。其结构如图3所示:

7.png

图3、DMA传输结构图

如图3所示,首先是DMA通道将请求传输到DMA通道仲裁。我们上一帖说明的DMA请求控制就是由软硬件请求到通道仲裁这一阶段的过程。我们说了有软硬件请求的控制,包括使能,启停、标志位、故障中断等等内容。在上上贴我们说明了提到了DMARAM的配置,所有的传输控制设置都会储存到DMARAM当中。我们现在来详细说明一下有哪些控制设置:

3.1控制寄存器配置

(1)标志位寄存器MExCHSR,里面包含TRANSFER计数标志TCOUNT以及中断、DMA异常状态等的标志位。

(2)控制寄存器MExCHCR,里面包含数据宽度、MOVE数目,transfer数目,以及软硬件请求控制当中的一些设置。

(3)地址偏移和中断控制寄存器MExADICR

(4)地址覆盖寄存器MExSHADR

(5)目标地址寄存器MExDADR

(6)目标地址和源地址校验寄存器MExSDCRC

(7)数据读取校验寄存器MExRDCRC

以上地寄存器有些事直接写入的,例如地址寄存器,有些是只读的,需要通过其它寄存器来写入,那么我们来总结一下,我们需要写入的寄存器:

(1)DMA_CHCFGRz (z = 000-063),通道配置寄存器,包含数据宽度、transfer数目配置,以及通道请求的一些设置如下表所示

8.png

(2)DMA_ADICRz (z = 000-063) 中断控制和地址偏移寄存器

9.png

剩下的就是源地址和目标地址的设置,这些地址在地址map里面可以找到,一般都在地址片段15当中。基本为各个外设使用,也可以自己人为的定义,从一个数组传输到另一个数组也是可以的。(这里面涉及到内存管理的问题,我们有机会再说明)

3.2通道仲裁

DMA控制引擎总是优先仲裁通过优先级高的通道。即使是正在进行的某通道DMA传输,如果有优先级更高的通道传输请求,那么当前的传输停止,传输信息记录到RAM当中,然后将优先级更高的通道传输信息覆盖到当前的DMA传输当中。

好了,以上便是DMA传输过程的说明,到现在为止就说完了DMA的工作原理。下一贴我们来说一个简单的DMA配置如何做。


0 点赞
5363 次查看
7 评论