DMA-Direct Memory Access

DMA



前言

本文分为5部分–DMA的基本概念、DMA基本流程、DMA的相关参数、英飞凌TC397芯片DMA模块、Autosar Dma模块配置

一、DMA是什么

DMA-Direct Memory Access, 直接存储访问,即不需要CPU参与,实现数据的直接访问和数据从源地址传输到目标地址。通过在DMA控制器的控制下,实现外设存储器之间数据交换,本质上是从内存的某个区域传输到内存的另一个区域。使用DMA,对于大批量数据的传输,减少CPU中转处理,一方面提高了数据传输的速率,也节省了CPU资源消耗。

DMA控制器:内存储器同外设之间进行过高速数据传输的硬件控制电路,实际上是采用DMA方式的外围设备与系统总线之间的接口电路。

二、DMA工作流程

一般CPU总线是由CPU管理的,但在DMA工作时,CPU总线由DMA控制器接管,控制传送的字节数,判断DMA是否结束以及发出DMA结束信号,故DMA控制器的工作流程如下:

a. 当外设有DMA需求并准备就绪时,就向DMA控制器发送DMA请求DREQ(一般是中断)。
b. DMA控制器接收请求后,向CPU发送总线接管请求HRQ。
c. CPU接到总线接管请求后,则会在当前总线周期结束后进行中断处理并返回响应信号HLDA,通知DMA控制器其已经放弃了对总线的控制权(控制总线、数据总线、地址总线置高阻态)。
d. DMA控制器获得总线的控制权,并对外设发送应答信号DACK,通知外设可以进行DMA传输。
e. DMA控制器向存储器发送地址信号和向存储器及外设发出读/写控制信号,控制数据按初始化设定的方向传送,实现外设与内存的数据传输。
f. 数据全部传输结束后,DMA控制器向CPU发送HOLD结束信号,要求撤销总线请求信号,CPU接收到信号后,使HLDA无效,收回对总线的控制权

三、DMA相关参数

1.DMA传输模式

①:正常模式,当一次DMA数据传输完成后,结束传输,只传输一次;
②:循环模式,当一次DMA数据传输完成后,硬件自动将传输数据量寄存器进行重装(类比参考51计时器重装),进行下一轮的数据传输

2.DMA仲裁器

仲裁器根据DMA通道请求优先级来启动外设/存储器的访问。分为软件优先级和硬件优先级。

  • 硬件DMA请求
  • 软件DMA请求

3.DMA传输通道

每个通道都可以有固定地址的外设寄存器和存储器笛之爱之间执行DMA传输,可参考DMA数据流通道映射表

4.DMA中断

每个DMA通道在传输过程中,DMA控制器可以产生硬件中断,包括DMA传输过半中断、DMA传输完成中断、DMA传输错误中断。
各中断可以通过设置寄存器不同位来使能中断

5.DMA配置参数

通道地址、优先级、数据传输方向、存储器/外设数据宽度、存储器/外设地址是否增量、循环模式、数据传输量

四、英飞凌T397-DMA模块

在这里插入图片描述
如图所示,TC397的DMA的硬件请求来自于中断管理单元(ICU),对外部请求,ICU按照DMA接口需求格式,发送请求到DMA模块,首先进行通道仲裁,然后将DMA请求送到DMA通道,并在DMA子模块中进行请求服务。ME模块读取DMA Channels中的TCS(from DMARAM中),然后加载数据到ME激活通道寄存器中,开始执行Transfer。 另外,片上总线给DMA提供时钟,并与DMA进行数据传输。

Move Engine包括如下数据结构:
DMA Move:
1、读转移操作:将数据从数据源加载到DMA控制器
2、写转移操作:将数据从DMA控制器写入数据目标地址
DMA数据传输过程中,数据暂存DMA控制器中,读写操作数据宽度始终一致,8-bit/16-bit/32-bit/64-bit/128-bit/256-bit
DMA Transfer:
DMA Transfer可由 1, 2, 3, 4, 5, 8, 9或 16 次 DMA 转移操作组成。
DMA Transaction :
DMA Transaction由几个(至少一个) DMA Transfer组成。 Transfer计数决定一个 DMA Transaction中的 DMA Transfer次数。
例子:
1024 字(32 位宽度) 的Transaction可由 256 次Transfer组成, 每次Transfer由 4 次 DMA 字转移操作组成; 或由 128 次Transfer组成, 每次Transfer由 8 次 DMA 字转移操作组成。
在这里插入图片描述**DMA LinkedList :**还有一种特殊的个是为DMA队列,表示为一个DMA通道里运行的一系列DMA transaction。下图单通道DMA队列运行的例子
在这里插入图片描述

DMA Feature List

  • 资源分区Resource Partitions
  • DMA通道DMA Channel
  • 双缓存操作DoubleBufferingOperations
  • DMA链接表DMA LinkedList
  • DMA通道请求控制 DMA Channel Request Control
  • 转移引擎Move Engine
  • DMA片上总线开关 DMA On-Chip Bus Switch

1、RP–资源分区

在DMA配置过程中,每个DMA channel分配一个RP. 不同RP内的DMA Channel间相互独立。
每个RP有自身的访问使能(Access Enable)保护.
每个RP有独一无二的master tag identifier
每个RP产生的Error中断服务请求会cover所有所包含的DMA Channel产生的Error Event

2、DMA Channels

DMA Channel Operation支持单独编程;DMA Chanel Reuqest包括以下四类:

  • DMA Software Request–被CPU初始化

  • DMA Hardware Request–被IR的ICU初始化

  • DMA Daisy Chain Request–被下个高优先级的DMA Channel初始化

  • DMA Auto Start Request–被加载的下个TCS中的DMALL\ACCLL\SAFLL\CONLL操作初始化
    TSR.CH – DMA Status Flag,标识DMA Request是否Pending. 该寄存器在start DMA Transfer或者在end of DMA transaction的时候会清空,
    在这里插入图片描述
    DMA Channel Status

  • Idle State–DMA channel TSR.CH = 0b–无DMA Request,处于Pending状态

  • Reset State–DMA channel TSR.CH = 0b–无DMA Request,处于Pending状态,DMA channel TCS(Transaction Control Set) bits cleared

  • Halt State–DMA channel TSR.HLTACK = 1b–DMA Request shall not be serviced by a ME.

  • Pending State–DMA channel TSR.CH = 1b–DMA Request is waiting to be serviced by a ME.

  • Active State–ME is servicing a DMA Request.

TSR.CH DMA请求标志位,该标志位清空根据通道配置参数CHCFGR.RROAT(Reset Request Only After Transaction)而定,见上图中的MUX多路选择器。当CHCFGR.RROAT=1B,则标识在完成一次Transaction后Reset; 当CHCFGR.RROAT=0B,则标识在完成一次Transfer后Reset

2.1 Software Requeset

在这里插入图片描述

2.2、Hardware Request

DMA的硬件请求使能受TSR.HTRE(Transaction State Register. Hardware Transaction/Transfer Request Enable) bit位控制,见Figure 191,控制逻辑见下表
在这里插入图片描述
DMA Channel Mode该配置参数控制了DMA 硬件请求传输是单次模式还是连续模式

  • Single Mode (DMA channel CHCFGR.CHMODE = 0B)
    TSR.HTRE将reset在完成Transaction后,DMA硬件请求disable
  • Continuous Mode (DMA channel CHCFGR.CHMODE = 1B)
    TSR.HTRE在完成Transaction后不会reset, DMA硬件请求开始一个新的DMA transaction。

在这里插入图片描述

2.3 软件请求和硬件请求混合模式

在这里插入图片描述
.### 2.4 DMA菊花链请求DMA Daisy Chain Request
通过配置DMA channel CHCFGR.PRSEL(Peripheral Request Select—Active DMA channel Peripheral Request Select)参数来启用通道的Daisy Chain Request.
该请求模式的工作原理是什么?
当较高优先级的DMA通道完成DMA Transaction时,通过设置TSR.CHbit位pending, 它将在下一较低优先级的DMA通道启动一个DMA Transaction ,
该请求模式,仅应用于较高优先级DMA通道,向下一个较低优先级DMA通道中发起DMA请求。

启用该请求模式,将禁用下一个更高优先级DMA通道中的DMA通道中断服务请求触发器。
在典型该模式的应用场景中,只需要最低优先级的DMA通道来生成DMA通道中断服务请求。

当从最高优先级到最低优先级的DMA通道的DMA Transaction完成时,该链式通道中的最低优先级DMA通道将生成DMA通道中断服务请求,以发出DMA操作结束的信号。

如果DMA通道配置在该链式通道中,则最高优先级DMA通道中的DMA Transfer或DMA Transaction由DMA软件请求或DMA硬件请求启动。

较低优先级DMA通道中的DMA Transaction 由DMA Daisy Chain Request触发,以改善DMA延迟。

2.4 TRL(Transaction Request Lost)

DMA模块的TRL事件会触发ISR,条件如下:

场景一:
在这里插入图片描述
场景二:DMA通道配置Hardware Request is disable情况下,检测到DMA Hardware Request会触发Set TRL flag = 1B和ISR.

2.5 DMA Service Request

相关寄存器:SRC(Service Requset Control)
寄存器bit: SRPN(Service Request Priority Number)

2.6 DMA Request Arbitration仲裁

仲裁规则如下(备注:机翻):
规则1:如果有一个优先级更高的DMA通道有一个挂起的DMA请求,那么
–规则1.1:ME应将激活的DMA通道更新TCS写回DMARAM。
–规则1.2:ME从DMARAM向ME读取优先级较高的DMA通道TCS。
–规则1.3:ME应执行DMA传输。
–规则1.4:DMA传输完成后,DMA执行仲裁序列。

规则2:如果没有更高优先级的DMA通道有挂起DMA请求,或者Actived的DMA通道
CHCFGR.RROAT=0B,则
–规则2.1:应将更新后的TCS从ME写回DMARAM。
–规则2.2:在每个时钟周期内,DMA应执行仲裁序列。
–规则2.3:如果收到DMA请求,则ME应执行DMA传输。
–规则2.4:DMA传输完成后,DMA应执行仲裁序列。

规则3:如果没有更高优先级的DMA通道挂起DMA请求,或者Actived的DMA通道
CHCFGR.RROAT=1B,则
–规则3.1:ME应执行DMA传输。
–规则3.2:DMA传输完成后,DMA应执行仲裁序列。

规则4:在完成最后一次DMA传输时,DMA信道请求位被清除(TSR.CH=0B)。

规则5:仲裁序列继续,直到所有DMA通道访问未决请求都由ME提供服务。

2.7 DMA Channel Reset

Reset State、Reseting a DMA Channel、Restarting a DMA Channel

2.8 DMA Channel Halt状态

3、DMA Random Access Memory

3.x Move Operation

地址偏移量计算:
在这里插入图片描述
未完待续…

3.x DMA传输过程

DMA共有64个通道,两个DMA子模块,一次DMA move表示一个DMA子模块服务了一个DMA通道的请求。中间需要进行DMA传输设置,这些设置是保存在DMARAM当中的,一次传输会将这些设置发送到相应的寄存器完成数据传输。这些传输设置包含DMA源地址,目标地址以及传输控制、校验等。

下面会介绍一些传输的基本功能:

3.x.1地址更新机制:

使用**地址覆盖寄存器( Shadowed Address Register )**可以在一次DMA传输完成后自动更新传输的源地址或者目标地址。这样可以减少CPU的干预,CPU不必去判断一次传输的完成并加载相应的地址。地址覆盖寄存器为MExSHADR目标地址寄存器为:MExDADR源地址寄存器为:MExSADR。地址更新机制在以下两种情况下,略有区别。

(1)DMA空闲模式
在没有进行DMA传输的时候,DMA处于空闲状态,这个时候给到DMA通道的地址会直接写到DMARAM当中。如果使用地址覆盖机制的话,则有两种情况:

a、只读模式(ADICRz.SHCT = 0001B or 0010B),这个时候写入地址覆盖寄存器会导致传输错误;

b、直写模式(ADICRz.SHCT = 0101B or 0110B),这个时候可以正常使用地址覆盖。

(2)DMA动作模式
在进行DMA传输过程中,进行地址覆盖更新的时候也取决于以下两种情况:

a、只读模式
该模式下,直接写入地址覆盖寄存器仍会导致传输错误

b、直写模式
该模式下,DMARAM当中的地址覆盖值会在一次传输开始时,写入到地址覆盖寄存器;这个传输会一直进行,指导DMA通道复位或者地址值变为0.

传输过程如图4所示:

在这里插入图片描述
图4:地址更新过程

(3)传输计数(transfer count)更新

在图4当中也涉及到了传输计数的问题,transfer count是保存在CHCFGRz.TREL当中的。在开始DMA一次传输的时候,该值会写到MExCHSR.TCOUNT当中。如果COUNT=0的话,没有任何传输产生。
5.png
图5:两次DMA传输中COUNT的更新

如图所示,展示了两次DMA传输,COUNT的更新过程。节点2之前是第一次transaction的过程,随着一个个transfer的传输,TCOUNT会递减直到减为0完成一次transaction。

节点2之后是第二次transaction的过程。在节点1,为了准备开启第二次transaction,需要加载两个参数:新的TCOUNT和新的目标地址。地址是通过地址覆盖寄存器映射的,相应的TCOUNT是通过CHCFGRz.TREL更新的。另外在该传输当中目标地址覆盖寄存器是通过硬件复位的(复位到0)。

五、Autosar Dma模块

在这里插入图片描述

总结

未完待续…

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值