AURIX系列之TC275学习笔记(八):DMA模块(二)

6.DMA通道操作模式

每个 DMA 通道z的通道操作模式可单独编程设定。 DMA 通道有以下基本工作模式:
• 软件控制模式
• 硬件控制模式, 单次模式或连续模式
软件控制模式下, 通过置位控制位产生 DMA 通道请求。 硬件控制模式下, 通常是通过片上外设单元产生的请求信号来产生 DMA 通道请求。
硬件控制单次模式下, 在 DMA Transaction最后一次 DMA Transfer操作之后, DMA 通道 z被禁止。 硬件控制连续模式下, 在 DMA Transaction最后一次 DMA Transfer操作之后, DMA 通道 z保持使能。
软件控制模式:
软件控制模式下, 由软件请求启动一次 DMA Transaction或一次 DMA Transfer。 通过写HTREQ.DCHz = 1 选择软件控制模式。 该设置强制状态标志 TRSR.HTREz = 0(DMA通道z 的硬件请求被禁止 。
通过下列写操作选择软件控制模式启动DMA 通道 z的一次完整 DMA Transaction
• CHCRz.RROAT = 1
• STREQ.SCHz = 1
置位 STREQ.SCHz(由软件请求) 导致启动 DMA 通道 z 的 DMA Transaction且TRSR.CHz 被置位。 DMA Transfer开始时, CHCRz.TREL 值被载入 CHSRz.TCOUNT(Transfer计数或 tc) 且开始执行 DMA Transfer。 每次 DMA Transfer之后, TCOUNT 递减并计算下一次操作的源地址和目的地址。 当 TCOUNT 递减到 0, DMA 通道 z 被禁止且状态标志。TRSR.CHz 被清零。 重新置位 STREQ.SCHz 会再次启动 DMA 通道 z 的一个新 DMA Transaction(使用通道寄存器组中实际设定的参数)。
通过下列写操作选择由软件控制模式启动 DMA 通道 z 的单次 DMA Transfer:
• CHCRz.RROAT = 0
• STREQ.SCHz = 1, 每次 DMA Transfer重复设置
当 CHCRz.RROAT = 0, DMA Transaction的每次 DMA Transfer操作之后, TRSR.CHz 被清零, 启动下一次 DMA Transfer时, 必须产生新的软件请求(STREQ.SCHz = 1) 。

在这里插入图片描述
硬件控制模式:
硬件控制模式下, 由硬件请求信号启动 DMA Transaction或单次 DMA Transfer。 共有两种硬件
控制模式可用:
• 单次模式:
一次 DMA Transaction之后, 禁止硬件请求。
• 连续模式:
一次 DMA Transaction之后, 不禁止硬件请求。
硬件控制单次模式
硬件控制单次模式下, 硬件请求启动一次完整的 DMA Transaction或单次 DMA Transfer。 通过下列写操作选择由硬件控制单次模式启动 DMA 通道 z 的一次完整 DMA Transaction:
• CHCRz.CHMODE =0
• CHCRz.RROAT = 1
• 由 CHCRz.PRSEL 从16条硬件请求输入中选择一个
• HTREQ.ECHz = 1
置位 HTREQ.ECHz 为 1 的操作使通道 z 的硬件请求 CHz_REQ 被使能(TRSR.HTREz = 1) 。 只要硬件请求 CHz_REQ 变为有效, CHCRz.TREL 的值被载入 CHSRz.TCOUNT 中, 并开始执行第一次 DMA Transfer, 从而整个 DMA Transaction被启动。 每次 DMA Transfer之后, TCOUNT 递减并计算下一次Transfer的源和目的地址。 当TCOUNT 递减至 0, DMA 通道 z 被禁止且状态标志 TRSR.CHz 和 TRSR.HTREz被清零。 为了启动新的硬件控DMA Transaction, 必须通过 HTREQ.ECHz = 1 的方式置位TRSR.HTREz 再次使能硬件请求。
单次模式下, 在下一次硬件触发的 DMA Transaction启动之前, 若要重新编程 DMA 通道寄存器组(地址、 Transfer次数) , 则通常需要硬件请求禁止功能。
硬件控制单次模式下, 每个单次 DMA Transfer必须由硬件请求, 需要执行上述步骤,只有一处不同之处:
• CHCRz.RROAT =0
该操作模式下, DMA Transaction的每次 DMA Transfer之后, TRSR.CHz 被清零, 启动下一次 DMA Transfer, 必须在 CHz.REQ 上产生新的硬件请求。
在这里插入图片描述

7. Transfer计数和转移计数

转移计数决定一次Transfer操作中的转移次数(一次转移操作由一个读操作和一个写操作组成) 。 用户可用来向DMA指示请求后将要执行的转移次数。 每次 DMA Transfer的转移操作次数由数据块模式设置(CHCRz.BLKM) 选择。
在这里插入图片描述
一次 DMA 转移操作之后, 计算下一次转移操作的源和目的地址。 源地址和目的地址的计算相互独立。 可选择下列地址计算参数:
• 地址偏移, 为所选择数据宽度的倍数
• 偏移方向: 加、 减或地址不变
由地址控制寄存器 ADRCRz 中的控制位决定如何递增/递减地址。 另外, 计算地址时,还需要考虑 CHCRz.CHDW 中定义的数据宽度。
下图为地址偏移表:
在这里插入图片描述
在这里插入图片描述
下图给出地址计算的示例。 两个例子都假设数据宽度为 16 位(CHCRz.CHDW = 01B) 。
图一:
在这里插入图片描述
图一中, 16 位半字数据从递增偏移量为 10H的源地址传送至递减偏移量为 08H 的目的地址。

图二:
在这里插入图片描述
16 位半字数据从递增偏移量为 02H的源地址传送至递增偏移量为 04H 的目的地址。

8. 循环缓冲(例如一定大小的数组可从当循环缓冲)

可配置目的地址和源地址分别为源数据和目的数据构建循环缓冲区。 循环缓冲区内, 按照图一和图二中定义的方式更新地址, 达到缓冲区界限时进行回绕。 分别由位域ADRCR0n.CBLS(源数据缓冲)和 ADRCR0n.CBLD(目的数据缓冲) 定义循环缓冲区长度。 这些4 位宽度的位域决定更新地址时, 32 位地址中的哪些位保持不变。 可能的缓冲区大小为2CBLS或 2CBLD 字节(=1、 2、 4、 8、 16、…32 KB) 。一次 DMA 转移之后, 当源地址和目的地址被更新时(递增或递减) , 即使低地址[CBLS:0]或[CBLD:0]发生回绕时,所有源地址高位[31:CBLS]和目的地址高位 [31:CBLD]都冻结并保持不变。 该地址冻结机制始终使循环缓冲和其容量的整数倍对齐。如果循环缓冲器的容量小于或等于所选择的地址偏移, 将始终访问同一个循环缓冲地址。

9.主要寄存器

一组 DMA 通道寄存器包含下列寄存器:
• 通道Z控制寄存器CHCRz
• 通道Z状态寄存器CHSRz
• 通道Z中断控制寄存器CHICRz
• 通道Z地址控制寄存器ADRCRz
• 通道Z源地址寄存器SADRz
• 通道Z目的地址寄存器DADRz
• 通道Z映射地址寄存器SHADRz

①DMA通道控制和状态寄存器(DMA_CHCSRz (z = 000-063))
通道控制和状态寄存器包含当前传输计数,通道重置,模式检测比较结果和流量管理中断状态触发器。
在这里插入图片描述
②DMA通道阴影地址寄存器(DMA_SHADRz (z = 000-063))
在这里插入图片描述
③DMA通道配置寄存器(DMA_CHCFGRz (z = 000-063))
在这里插入图片描述
REL:传送重载值
该位域包含 DMA 通道 z DMA 事务的传送次数。DMA 事务启动时(当 TRSR.CHz置位且CHSR0n.TCOUNT = 0) , 10 位传送计数值被载入CHSR0n.TCOUNT。 在执行 DMA 事务期间, 对CHCRz.TREL 的写入, 不影响 DMA 事务。如果 CHCRz.TREL=0 或 CHCRz.TREL = 1, 启动新DMA 事务时, CHSRz.TCOUNT 将被载入 1(每个 DMA 事务必须至少执行一次 DMA 传送) 。

BLKM: 数据块模式
BLKM 决定一次 DMA 传送期间执行的 DMA 转移次数。

RROAT 仅在事务完成之后请求复位
RROAT 决定每次传送之后是否清零 TRSR.CHz传送请求状态标志。
0B 每次传送之后复位 TRSR.CHz。 每次传送都需要一个传送请求。
1B 传送之后当 TCOUNT = 0 时, 复位 TRSR.CHz。 一个传送请求启动一次完整的 DMA。

CHMODE:通道工作模式
CHMODE 决定 DMA 通道 z 的控制位 TRSR.HTREz的复位条件。
0B DMA 通道 z 选择单次模式。 一次事务之后,禁止 DMA 通道 z 响应后续的硬件请求(硬件清零 TRSR.HTREz)。 要启动新的事务, 必须由软件再次置位 TRSR.HTREz。
1B DMA 通道 z 选择连续模式。 一次事务之后,位 TRSR.HTREz 保持置位。

CHDW:通道数据宽度
CHDW 决定 DMA 通道 z 的读写转移数据宽度。
④DMA通道地址和中断控制寄存器(DMA_ADICRz (z = 000-063)
在这里插入图片描述
SMF:源地址修改因子
该位域和 CHCRmx.CHDW 定义的数据宽度共同决定每次 DMA 转移之后源地址修改操作的地址偏移值,见表。
在这里插入图片描述
在这里插入图片描述
DMF:目的地址修改因子
该位域和 CHCRmx.CHDW 定义的数据宽度共同决定每次 DMA 转移之后目的地址修改操作的地址偏移值, 见上表。 若 CBLD = 0000B, 则不修改目的地址。

INCS:源地址增/减控制
该位决定每次 DMA 转移之后, 源地址加上还是减去由 SMF 选定的地址偏移。 若 CBLS = 0000B,则不修改源地址。
0B 减去地址偏移
1B 加上地址偏移

CBLS:源地址循环缓冲器长度
该位域决定 32 位源地址寄存器中的哪一部分保持不变, 在 DMA 转移操作之后不被更新。
因此, CBLS 还决定循环源地址缓冲器的大小。
0000B 不更新源地址 SADR[31:0]
0001B 不更新源地址 SADR[31:1]
0010B 不更新源地址 SADR[31:2]

1111B 不更新源地址 SADR[31:15]

CBLD: 目的地址循环缓冲器长度
同CBLS

SCBE 启用源循环缓冲区
0B 禁止源循环缓冲区
1B 启用源循环缓冲区

DCBE 启用目的循环缓冲区
0B 禁止目的循环缓冲区
1B 启用目的循环缓冲区

SHCT:影子控制
见下表:

在这里插入图片描述
在这里插入图片描述
⑤DMA通道源地址寄存器DMA_SADRz (z = 000-063)
源地址寄存器包含 32 位源地址。 如果 DMA 通道 z 有效, SADRz被连续更新并给出 DMA 传送中读转移的实际源地址。
在这里插入图片描述
⑥DMA通道目的地址寄存器(DMA_DADRz (z = 000-063))

目的地址寄存器包含 32 位目的地址。 如果 DMA 通道 z 有效, DADRz 被连续更
新(若如此设置) 并给出 DMA 传送中写转移的实际目的地址。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值