RT1060 eDMA 详解 (2)

RT1060 eDMA 详解 (2)

RT1060 eDMA Part2 功能描述

第 6 章 增强型直接内存访问(eDMA) Functional Description

要点:

???

6.3 功能描述

eDMA 的操作在以下小节中描述。

6.3.1 操作模式

eDMA 工作在以下模式: 表 6-4. 操作模式

模式 描述
Normal 在正常模式下,eDMA 将数据 从源传输到目标。源和目标可以是内存块或能够与 eDMA 协同工作的 I/O 块。
服务请求 启动传输 TCD 中指定的特定字节数NBYTES)。
- 小循环(minor loop)是为服务请求传输 NBYTES 数据的读写操作序列。
- 每个服务请求 **执行一次主循环迭代**(major loop iteration),传输 NBYTES 数据。
Debug DMA 操作可通过寄存器 Control(CR)在调试模式下配置:
- 若 CR[EDBG]=0,芯片处于调试模式时 eDMA 继续正常运行。
- 若 CR [EDBG]=1,芯片进入调试模式时 eDMA 停止传输数据。若进入调试模式时某通道处于活动状态,eDMA 会继续操作直至该通道退出。
Wait 进入等待模式前,eDMA 会尝试完成任何正在进行的传输。
传输完成后,芯片进入等待模式。

6.3.2 eDMA 基本数据流

数据传输的基本流程可分为三个阶段。 如下图所示,第一阶段涉及通道激活:

image-20250524151836491

图 6-2. eDMA operation, part 1

此示例使用 eDMA 外设请求信号的断言来为通道 n 请求服务。通过软件和 TCDn_CSR[START] 位激活通道的基本流程与外设请求相同。eDMA 请求输入信号在内部注册,然后路由通过 eDMA 引擎:

  • 首先经过控制模块,然后进入编程模型和通道仲裁模块
  • 在下一个周期,通道仲裁执行,使用固定优先级或循环算法。
  • 仲裁完成后,激活的通道号通过地址路径发送,并转换为 访问 TCDn 本地内存所需的地址。
  • 接下来,访问 TCD 内存,从本地内存读取所需的描述符并加载到 eDMA 引擎的内部寄存器文件中。TCD 内存宽度为 64 位,以最小化获取激活通道描述符并将其加载到内部寄存器文件所需的时间。

下图说明了基本数据流的第二部分:

image-20250524152522740

图 6-3. eDMA operation, part 2

与数据传输相关的模块(地址路径、数据路径和控制模块)按顺序执行所需的 源读取 和 目标写入 以执行数据移动。启动源读取,获取的数据临时存储在数据路径模块中,直到在目标写入期间被选通到内部总线上。这种源读取 / 目标写入处理持续进行,直到 minor byte count 完成传输。

小字节计数传输完成后,执行基本数据流的最后阶段。在此阶段,地址路径逻辑对相应 TCD 中的某些字段进行所需的更新,例如 SADDR、DADDR、CITER。如果主迭代计数用尽,则执行附加操作。这些操作包括最终地址调整和将 BITER 字段重新加载到 CITER 中。此时还会触发可选的中断请求,并可能使用描述符中包含的分散 / 聚集地址指针(如果启用了scatter/gather)从内存中获取新的 TCD。TCD 内存的更新和中断请求的触发如下图所示:

image-20250524153040151

图 6-4. eDMA operation, part 3

6.3.3 故障报告和处理

通道错误在错误状态寄存器(DMAx_ES)中报告,可能由以下原因引起:

  • 配置错误,即传输控制描述符中的非法设置或固定仲裁模式下的非法优先级寄存器设置,或
  • 总线主设备读或写周期的错误终止

当起始源地址或目标地址、源或目标偏移量、小循环字节计数或传输大小表示不一致状态时,报告配置错误。以下详细说明了每种可能的原因:

  • 地址和偏移量必须以 0 模传输大小边界对齐。
  • 小循环字节计数必须是源和目标传输大小的倍数。
  • 所有源读取和目标写入必须分别配置为已编程传输大小的自然边界。
  • 在固定仲裁模式下,任何两个通道优先级相等都会导致配置错误。启用固定仲裁模式后,所有通道优先级必须是唯一的。

:当两个通道具有相同优先级时,存在通道优先级错误,并在错误状态寄存器中报告。但是,错误状态寄存器中不报告通道号。当组内所有通道优先级不唯一时,仲裁选择的通道号不确定。 为帮助调试通道优先级错误(CPE),请在 DMA 的控制寄存器中设置错误暂停位。

如果组内所有通道优先级不唯一,DMA 在记录 CPE 错误后暂停。DMA 保持暂停状态,不处理任何通道服务请求。将所有通道优先级设置为唯一编号后,可通过清除 HALT 位重新启用 DMA。

  • 如果在通道完成时启用了分散 / 聚集操作,当分散 / 聚集地址(DLAST_SGA)未按 32 字节边界对齐时,报告配置错误。
  • 如果在通道完成时启用了小循环通道链接,当尝试链接时 TCDn_CITER[ELINK] 位不等于 TCDn_BITER[ELINK] 位,报告配置错误。

如果已启用,除分散 / 聚集和小循环链接错误外,所有配置错误条件都会在通道激活时报告并触发错误中断请求。分散 / 聚集配置错误在正确启用时,在主循环完成且分散 / 聚集操作开始时报告。小循环通道链接配置错误在小循环完成且链接操作被处理时报告。

如果系统总线读或写因错误而终止,数据传输将停止,并设置相应的总线错误标志。在这种情况下,eDMA 引擎会用故障点处的当前源地址、目标地址和当前迭代计数更新通道的传输控制描述符状态。发生系统总线错误时,通道在下一次传输后终止。由于流水线效应,eDMA 收到总线错误时,下一次传输已在进行中。如果在开始写入序列之前的最后一次读取时发生总线错误,将使用总线错误期间捕获的数据执行写入。如果在切换到下一个读取序列之前的最后一次写入时发生总线错误,在通道因目标总线错误终止之前,将执行读取序列。

可以通过软件使用 CR[CX] 位取消传输。当识别到取消传输请求时,DMA 引擎停止处理该通道。允许当前读写序列完成。如果取消发生在主循环或小循环的最后一个读写序列,取消请求将被丢弃,通道正常退出。

错误取消传输与取消传输相同,不同之处在于错误状态寄存器(DMAx_ES)会更新已取消的通道号并设置 ECX。已取消通道的 TCD 包含最后一次传输的源地址和目标地址,保存在 TCD 中。如果需要重新启动通道,必须重新初始化 TCD,因为上述字段不再代表原始参数。当通过错误取消传输机制取消传输时,通道号会加载到 DMA_ES[ERRCHN] 中,并设置 ECX 和 VLD。此外,如果已启用,可能会生成错误中断。

:取消传输请求使您能够在不再需要完整数据传输时停止大型数据传输。取消传输位不会中止通道,它只是停止数据传输,然后通过正常关闭序列退出通道。应用程序软件必须管理取消的上下文。如果需要(或不需要)中断,则应在取消请求之前启用(或禁用)中断。由于未完成完整传输,应用程序软件必须清理传输控制描述符。

任何错误的发生都会导致 eDMA 引擎立即停止活动通道的正常处理(进入错误处理状态,而到系统总线的事务仍有流水线效应),并断言 eDMA 错误寄存器中的相应通道位。同时,错误条件的详细信息会加载到错误状态寄存器(DMAx_ES)中。检测到错误时,主循环完成指示符、设置传输控制描述符 DONE 标志以及可能的中断请求断言不受影响。更新错误状态后,eDMA 引擎通过处理下一个适当的通道继续运行。发生错误条件的通道不会自动禁用。如果某个通道因错误而终止,并且在错误修复之前发出另一个服务请求,该通道将执行并以相同的错误条件终止。

6.3.4 通道抢占

通过设置 DCHPRIn[ECP] 位,可在每个通道的基础上启用通道抢占功能。通道抢占允许正在执行的数据传输暂时挂起,以便启动更高优先级的通道。抢占通道完成其微循环数据传输后,被抢占的通道将恢复执行。恢复后的通道完成一次读 / 写序列后,可再次被抢占。如果有任何更高优先级的通道请求服务,恢复后的通道将被挂起,优先处理高优先级通道。不支持嵌套抢占,即试图抢占一个正在执行抢占的通道。抢占通道一旦开始执行,便不能被抢占。抢占功能仅在选择固定仲裁时可用。

通过设置 DCHPRIn[DPA] 位,可以禁用某个通道的抢占能力。当一个通道的抢占能力被禁用时,无论低优先级通道的 ECP 设置如何,该通道都不能挂起低优先级通道的数据传输。这使得可以定义一组低优先级、大数据传输的通道。这些低优先级通道可配置为不相互抢占,从而避免低优先级通道占用通常为真正高优先级通道保留的抢占槽。

6.3.5 时钟

下表描述了 eDMA 的时钟源。有关时钟设置、配置和门控信息,请参见时钟控制器模块(CCM)。 表 6-5 eDMA 时钟

时钟名称 描述
edma_hclk 模块时钟
ipg_clk 外设时钟
作者

Gavin

发布于

2025-05-24

更新于

2025-05-24

许可协议

CC BY-NC-SA 4.0

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×