AURIX系列之TC275学习笔记(七):DMA模块(一)

1. DMA框图

DMA将数据从数据源位置传输到数据目标位置,不需要CPU或其他芯片设备的干预。
一个激活的DMA通道可以控制一个数据移动操作。DMA子块可以从任何DMA通道服务DMA请求。
在这里插入图片描述
如图所示,DMA的硬件请求来自于中断管理单元(即ICU)。特定的外部请求,可以按照ICU到DMA接口的需求格式,发送到DMA单元进行处理。我们看到外部请求首先送到DMA通道请求并进行仲裁,然后正式送到DMA通道,并在DMA子模块中进行请求服务。另外,图1的下半部分,片上总线为DMA提供时钟,并与DMA进行数据传输。

2. DMA传输

DMA 转移操作通常由两部分组成:
1.读转移操作: 将数据从数据源加载到 DMA 控制器。
2.写转移操作: 将数据从 DMA 控制器写入数据目的地址。
DMA 转移操作中,始终通过DMA控制器将数据从数据源地址转移到数据目的地址。 数据暂时保存在DMA控制器中。 读转移和写转移操作的数据宽度始终一致(8-bit, 16-bit, 32-bit, 64-bit, 128-bit or256-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 字转移操作组成。

3. 映射源地址或目的地址

在 DMA Transaction运行期间, 当用实际目的地址来更新目的地址寄存器时, 映射机制允许在不影响目的地址寄存器内容的前提下, 编程设置新目的地址。 这种情况下, 新的目的地址被写入缓冲寄存器, 即映射地址寄存器。 启动下一 次DMA Transaction时, 无须 CPU 干预, 新地址会从映射地址寄存器传送到目的地址寄存器。映射地址寄存器还能够保存源地址。 不过它不能同时保存源地址和目的地址。 这意味着,启动 DMA Transaction时, 映射机制只能自动更新源地址或者目的地址。 如果下一个 DMA Transaction需要更新两个地址寄存器(源地址和目的地址) , 则首先必须完成该通道正在运行的 DMA Transaction,随后, 在启动下一个 DMA 之前, 通过写操作更新源地址寄存器和目的地址寄存器。
①DMA通道空闲时
当没有DMA transaction运行时,如果有一个新的源或目标地址被写入DMA通道,新的地址值直接写入DMARAM源地址字(SADRz)或目标地址字(DADRz)。写在影子地址字( SHADRz)需遵循如下:
a.当在只读模式下,阴影寄存器不可写,写入影子寄存器SHADRz字将导致总线错误。
b.当直接写模式下,影子地址可直接写入( ADICRz.SHCT = 0101B或0110B),并且影子地址字SHADRz也将更新。
②DMA通道运行时
如果移动引擎x正在处理来自DMA通道z的DMA请求和正在进行DMA传输,然后地址更新取决于影子控制设置:
a.当在只读模式下,影子地址不能直接写入,(ADICRz.SHCT = 0001B or 0010B).对于
当前的DMATransaction完成并且发生对DMARAM的最终写回后,将MExSHADR值写入SADRz或DADRz并将SHADRz设置为00000000H。

如下图所示给出更新源地址寄存器的操作过程, 目的地址寄存器的更新也是以这种方式:
在这里插入图片描述

b.当直接写模式下,影子地址可直接写入,并且直接写入DMA子块x中的影子地址寄存器MExSHADR。在一个新的DMATransaction开始时,源地址寄存器(MExSADR)或目标地址寄存器(MExDADR)用SHADRz值更新。当映射转移发生时,SHADRz中的存储值不会被修改, 而且映射机制继续有效, 映射转移将会重复进行直到通道z 被重新置位或者直到 MExSHADR中的位值为 0000 0000H 。

4. Transfer计数值

DMA Transaction的Transfer计数值保存在位域 CHCRz.TREL 中, DMA Transaction运行期间也可编程设
置。 启动 DMA Transaction时, TREL 被传送给位域 CHSRz.TCOUNT, DMA Transaction运行期间更新位
域 CHSRz.TCOUNT。如果 TCOUNT 不等于 0, 不进行地址或计数器重载。DMA 通道有效时, 应该避免重新编程设置通道的特定值(所选择的地址映射寄存器除外) 。
在这里插入图片描述
图 14-5 给出两次 DMA Transaction期间(需要更新映射源地址和传送次数) , 如何更新源地址寄存器 SADRz 和Transfer计数 CHSRz.TCOUNT。在参考点 2) DMA Transfer 1 完成, DMA Transfer 2 启动。 在参考点 1) DMA 通道的两个参数Transfer计数 tc2 和源地址 sa2 需要重新编程, 以准备下一次 DMA Transfer操作。 在参考点 2)处, 新 DMA Transaction被启动时, 缓冲于 SADRz 中的源地址 sa2 被传送至 SADRz, 同时Transfer计数 tc2 也被传送至 CHSRz.TCOUNT。 请注意: 如此例所示, 如果写入使能位设置为0(ADRCRz.SHWEN = 0), 则映射寄存器只能通过硬件复位为0000 0000H。

如果在DMA通道z处于活动状态时写入CHCFGRz.TREL:
• 写入CHCFGRz.TREL将更新DMA子块x中的MExCHCR.TREL值
• 在写回时,CHCFGRz.TREL将更新为最新的MExCHCR.TREL值。
• 在下一个DMA Transaction,MExCHSR.TCOUNT被更新为新的CHCFGRz.TREL值。

5. 通道请求控制

下图给出每个 DMA 通道中实现的 DMA 请求控制逻辑。
在这里插入图片描述
共有两种类型的 DMA 请求:
• 硬件 DMA 请求
• 软件 DMA 请求
软硬件请求的使能需要配置TSRz.ECH和TSRz.DCH。其作用分别是置位和复位TSRz.HTRE,以达到使能和禁用硬件请求的目的。
软件请求由CHCSRz.SCH软件置位来触发,硬件请求则由中断管理单元触发。一旦有软件请求或硬件请求产生,标志位TSRz.CH会置1。 并将对应通道的DMA请求发送到DMA通道仲裁。 另外标志位的清0是由CHCFGRz.PROAT控制,可以实现在一次transfer后清0或者在一次transaction后清0。 而硬件使能可配置为一次transaction后复位或者由软件控制复位以上便是通道请求的基本功能,此外还支持事件丢失中断:其逻辑为通道Z以检测到DMA请求,同时又有新的DMA请求将标志位CH置1。这就表示当前请求的DMA传输还没有完成就有新的DMA请求检测到,这是一种异常状况。正常情况下只有当完成一次传输,标志位清0之后再产生DMA请求才会有效。

下篇继续,欢迎关注!

  • 6
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值