深入解析PDMA静态TR配置:从SPI到MCAN的高效DMA传输实践
1. 项目概述:PDMA传输机制的核心价值与挑战
在嵌入式系统开发,尤其是涉及高速数据流处理的场景里,CPU常常被大量、琐碎的数据搬运任务所拖累。想象一下,一个负责处理多路SPI传感器数据或MCAN总线报文的系统,如果每一字节的收发都需要CPU亲自参与,那它的主线程将寸步难行,实时性更是无从谈起。这时,直接内存访问(DMA)技术就如同一位不知疲倦的专职快递员,接管了内存与外设之间的“货物”搬运工作,让CPU这位“经理”得以专注于核心的业务逻辑运算。
然而,DMA并非一个简单的“即插即用”模块。要让这位快递员高效、准确地工作,我们需要对其进行精细的“岗前培训”和“任务规划”。这就是PDMA(Peripheral DMA,外设DMA)通道配置与静态传输请求(Static Transfer Request, 静态TR)设置的意义所在。它定义了DMA工作的核心规则:从哪里取数据、送到哪里去、一次搬多少、以什么格式搬。本文将以TI AM275x等处理器中的PDMA控制器为蓝本,深入解析其TX(发送)与RX(接收)通道的配置逻辑,特别是静态TR在不同工作模式下的设置要点。无论你是正在调试SPI通信的稳定性,还是试图榨干MCAN总线的最后一分带宽,理解这些底层机制都将使你从“配置工程师”转变为“系统架构师”,能够精准地预测和优化数据流的每一个环节。
2. PDMA架构与核心概念解析
在深入配置细节之前,我们必须先搭建起对PDMA整体架构和关键概念的认知框架。这有助于理解后续所有配置动作的“为什么”,而不仅仅是记住“怎么做”。
2.1 PDMA在系统中的角色与数据流
PDMA通常作为SoC内部一个专为外设服务的DMA子系统。它的一端通过PSI-L(Peripheral Serial Interface-Lite)这类轻量级、高带宽的片内互连总线与另一个通用的DMA控制器(如UDMA-P)对话,另一端则通过内存映射接口(如VBUSP)直接访问外设的寄存器或数据缓冲区。其核心价值在于,为特定的、有固定模式的外设(如串口、CAN、音频接口)提供高度定制化的数据搬运服务,减轻通用DMA的负担,并实现更低的传输延迟。
一个典型的数据发送(TX)流程如下:
- 数据准备:CPU或其它主控将待发送数据写入系统内存。
- UDMA-P搬运:通用DMA(UDMA-P)从系统内存读取数据,并通过PSI-L链路发送给PDMA。
- PDMA处理:PDMA根据其通道配置,将接收到的数据流进行格式化(如拆包、按元素大小处理),然后写入目标外设的特定FIFO或缓冲区。
- 外设发送:外设(如SPI、MCAN)从其FIFO中取出数据,按照自身协议发送到物理总线上。
接收(RX)流程则相反,PDMA从外设FIFO读取数据,打包后通过PSI-L送给UDMA-P,最终由UDMA-P写入系统内存。
2.2 核心组件:通道、线程与排序表
- 通道(Channel):PDMA内部独立的数据传输通路。每个通道专用于一个特定的外设数据流(例如,SPI3的TX通道0)。通道包含了完整的配置寄存器、状态机和数据缓冲区。
- PSI-L线程(Thread):这是PSI-L互连协议上的逻辑端点。每个PDMA通道在PSI-L上对应一个线程ID。通道配对实质上就是配置PDMA的线程与UDMA-P的线程相互指向对方,建立一条专属的数据管道。
- 排序表(Ordering Table):这是一个用于AASRC(高级音频采样率转换器)等复杂外设的模式。它不是一个数据缓冲区,而是一个索引表。当通道工作在“组模式(Group Mode)”时,它并不直接操作固定的FIFO,而是根据排序表中的索引值,动态决定本次操作访问哪一个物理FIFO。这为处理交织或非连续的数据流提供了极大的灵活性。
注意:模式选择的关键:输入材料中明确指出,DMA通道可以工作在“组模式”或“流模式”。这个选择决定了通道如何解读排序表中的索引——是将其视为Group FIFO的索引,还是Stream FIFO的索引。配置错误会导致访问到错误的内存地址,引发数据错乱或系统异常。在初始化时,必须根据外设的实际工作模式(由外设模块自身配置决定)来正确设置PDMA通道的模式。
2.3 静态TR(传输请求)的本质
这是PDMA配置的灵魂。与一些支持链表描述符的通用DMA不同,PDMA的静态TR是一种“一劳永逸”的配置方式。在通道启动前,通过PSI-L配置总线,将一组参数(主要是X, Y, Z)写入通道的特定寄存器。一旦设置,在通道工作期间,这些参数通常不再改变,所有数据传输都遵循这套静态规则。
为什么采用静态TR?为了极致的高效和低延迟。对于音频流、CAN报文、SPI块传输这类具有固定、可预测数据模式的应用,动态配置描述符的开销是不必要的。静态TR将配置开销降至一次,之后完全由硬件自动、循环地执行,非常适合实时流处理。
3. TX发送通道的配置与实现详解
发送通道负责将来自PSI-L(即来自UDMA-P和系统内存)的数据,搬移到外设的发送FIFO中。其配置流程具有明确的顺序性。
3.1 通道分配与硬件映射
首先,我们需要为具体的外设找到对应的PDMA通道。根据技术手册,TX通道的分配是硬件固定的。例如,在提供的表格中:
0x8000-0x8003通道分配给 SPI 3 的 4 个发送通道。0x8008-0x8010通道分配给 MCAN 2/3/4 的发送通道。
每个通道的配置信息中,“Data FIFO Address”是最关键的,它指明了该通道对应的外设数据寄存器物理地址。PDMA会向这个地址执行写操作。
实操心得:在驱动开发中,通常会定义一个通道映射表,将逻辑外设和通道号与这些硬件地址常量关联起来。避免在代码中直接使用魔数(Magic Number),而是使用有意义的宏或枚举,例如#define PDMA_CH_SPI3_TX0 0x8000。这能极大提高代码的可读性和可维护性。
3.2 初始化三部曲:配对、设TR、使能
PDMA通道的初始化必须严格按照以下顺序进行,任何步骤的错漏都会导致通道无法工作。
3.2.1 PSI-L目的地线程配对
复位后,所有PSI-L线程处于未配对状态。此步骤的目的是在PDMA的某个TX通道线程和UDMA-P的某个源线程之间建立点对点连接。
- 配置PDMA端:向PDMA通道的PSI-L配对寄存器写入目标UDMA-P线程的ID。
- 配置UDMA-P端:向UDMA-P源线程的配对寄存器写入该PDMA通道的线程ID。
关键点:配对是双向的。只有两端互相指向对方,PSI-L硬件才能正确路由数据包。配对完成后,该PDMA通道将只接收来自其配对UDMA-P线程的数据,形成了逻辑上的独立管道。
3.2.2 静态传输请求(静态TR)设置
这是定义“如何搬运”的核心步骤。静态TR的格式统一为X, Y, Z三个参数,但不同通道模式下,这些参数的含义截然不同。
1. X-Y FIFO模式静态TR此模式适用于SPI、UART等需要按固定元素大小和数量传输的外设。
- X(元素大小):位于地址
0x400的[26:24]位。定义每次写入外设FIFO的数据量。0: 8位1: 16位2: 24位3: 32位4: 64位- 例如,SPI传输通常设置为8位(字节)或16位(半字)。
- Y(元素数量):位于地址
0x400的[11:0]位。定义每次DMA请求触发时,连续传输的X元素个数。- 例如,
X=0(8-bit),Y=100, 表示一次���发传输100个字节。
- 例如,
- Burst位:
0x400的bit 31。使能VBUSP突发传输模式。在X-Y模式下,突发模式允许PDMA在VBUSP总线上执行一次多数据相的突发读/写,但针对外设FIFO的写入仍然是按X定义的大小逐元素进行。这提升了总线利用效率,但需要外设接口支持。 - Acc32位:
0x400的bit 30。为兼容旧IP,当PDMA的VBUSP端口是32位时,设置此位会使所有访问的XCNT=4。
2. MCAN模式静态TR此模式专为MCAN外设优化,用于发送CAN报文。
- Y(缓冲区大小):这是唯一有效的核心参数,位于
0x400的[11:0]位。它定义了每次写入MCAN TX缓冲区的字节数。- 关键细节:这个大小包含了首片段的8字节MCAN报文头。如果上层CPPI数据包长度超过Y值,PDMA会自动将其分片。对于第一个片段,PDMA会拷贝8字节头部;对于后续片段,则跳过这8字节,复用第一个片段的头部。
- 范围限制:Y值小于16会被视为16,大于72会被视为72。这是因为MCAN缓冲区有固定大小。
- X和Acc32位:在此模式下未使用。
- Burst位:
0x400的bit 31。在MCAN模式下,使能后允许PDMA以最大72字节的线性突发方式填充TX缓冲区,能极大提升长报文(或分片报文)的传输效率。
3. AASRC模式静态TR此模式用于服务复杂的音频采样率转换器,支持多FIFO轮流服务。
- X(元素大小):与X-Y FIFO模式类似,定义每次读/写的音频样本大小(如24位音频数据)。
- Y(FIFO元素计数):含义发生重要变化。它定义每次通道激活时,整个FIFO列表被处理的次数。
- 举例:假设FIFO列表包含
[0, 1, 2, 3]四个FIFO索引,Y=2。则一次触发后的服务顺序为:FIFO 0, FIFO 1, FIFO 2, FIFO 3, FIFO 0, FIFO 1, FIFO 2, FIFO 3。总共进行 4(FIFO数) * 2(Y值) = 8 次数据传输。
- 举例:假设FIFO列表包含
- Z参数:在此模式下未使用。AASRC的包界定通常由其它机制控制。
配置示例:设置SPI3 TX通道0假设我们需要配置SPI3的TX通道0,以16位数据格式,每次DMA请求发送32个数据(即64字节),并使能突发模式。
- 找到通道基址:根据表格,SPI3 TX Ch0 通道的TR寄存器位于PSI-L地址
0x400(这是一个逻辑偏移,实际使用需加上通道基址)。 - 计算TR寄存器值:
Burst(bit 31) = 1 (使能突发)Acc32(bit 30) = 0 (假设不需要32位兼容模式)X(bits 26:24) =1(代表16位,即2字节)Y(bits 11:0) =32(十进制)- 寄存器值(
0x400) =(1<<31) | (1<<24) | 32=0x8000 0020
- 通过PSI-L配置总线,向该通道的TR寄存器(地址
0x400)写入值0x8000 0020。
3.2.3 PSI-L目的地线程使能
完成配对和TR设置后,最后一步是“打开开关”。通过设置PSI-L实时使能寄存器中对应线程的使能位,该通道才正式进入“武装”状态,准备接收来自UDMA-P的数据并响应外设的DMA请求。
重要顺序:务必遵循“先配对,再设TR,最后使能”的顺序。如果先使能,通道可能因为接收到未定义格式的数据而进入错误状态。
3.3 数据传输流程与模式差异
配置完成后,通道的行为因模式而异:
- X-Y FIFO模式:通道空闲,等待外设的DMA请求事件(一个脉冲)。事件到来后,PDMA立即从内部TX通道化FIFO中读取数据,并连续执行Y次“写入X字节到Data FIFO Address”的操作。完成后继续等待下次触发。
- MCAN模式:通道空闲,等待来自UDMA-P的数据(通过PSI-L)。数据到达后,PDMA立即开始将其拷贝到指定的MCAN TX缓冲区,一次拷贝Y字节。填满一个缓冲区后,PDMA通过写MCAN的控制寄存器移交缓冲区所有权,并等待MCAN的发送完成事件以回收缓冲区,继续填充下一个报文片段。
- AASRC模式:通道空闲,等待所有配置在TxFifoConfig寄存器中的DMA请求事件都到来(事件被锁存)。事件集齐后,通道根据TxFifoConfig中的
FirstSlot和LastSlot,从TxOrderTable中读取FIFO索引序列,然后按照X和Y的配置,依次向这些索引对应的FIFO写入数据。
3.4 高级控制与调试
- 暂停与恢复:通过设置RT使能寄存器中的暂停位,可以临时挂起某个通道的数据传输,而不影响其配置。这在需要动态调整优先级或进行系统调试时非常有用。
- 通道拆卸:当一个数据流需要结束时,应发起拆卸流程。主机在UDMA-P端设置
tdown位,UDMA-P会确保所有已排队数据发送完毕后,通过PSI-L通知PDMA。PDMA在将内部数据全部刷写到外设后,清除自身使能位,并返回一个sccnt=0的信用响应作为确认。这是一种优雅的关闭方式。 - 强制刷新与复位:如果外设无响应导致拆卸卡住,可以设置
flush位,强制PDMA清空内部流水线。在极端情况下(如状态机错乱),可以通过直接清除PSI-L使能寄存器的使能位来复位整个通道,但这需要同时复位UDMA-P的对端才能重新初始化。 - 调试状态寄存器:地址
0x402和0x403附近的寄存器提供了通道的实时快照,如剩余的Y计数、事件积压数、内部状态机代码等。在排查数据丢失、传输卡顿等问题时,这些信息是首要的检查点。
4. RX接收通道的配置与实现详解
接收通道的逻辑与发送通道对称但方向相反,负责从外设FIFO读取数据,并通过PSI-L发送出去。其核心配置流程同样是配对、设TR、使能三部曲,但静态TR的参数和通道行为有显著区别。
4.1 通道分配与模式识别
查看RX通道分配表可以发现,SPI接收通道与发送通道对应,地址相邻。而MCAN的RX通道类型标注为“XY”,但其触发类型为“pulse”,且Data FIFO Address指向了MCAN的RX缓冲区区域。这提示我们,对于MCAN接收,PDMA可能采用了一种特殊的“XY模式”来读取线性缓冲区,而非标准的MCAN TX那种打包/分片逻辑。这体现了PDMA配置的灵活性:模式(XY/MCAN)定义了数据处理逻辑,而外设类型和地址决定了数据的来源/去向。
4.2 接收通道静态TR的独特参数
接收通道的静态TR在X, Y参数的基础上,引入了一个至关重要的Z参数和一个EOL标志位。这是接收与发送配置的最大不同。
1. X-Y FIFO模式静态TR(接收)
- X, Y, Burst, Acc32:含义与发送模式完全相同,定义了每次触发从外设读取X大小的元素,共读取Y次。
- Z(FIFO计数):位于
0x401的[23:0]位。这是一个包界定参数。它定义了多少个完整的FIFO操作(即多少次‘触发-完成Y次传输’的循环)构成一个完整的数据包。当达到Z次操作后,PDMA会在通过PSI-L发送数据时,标记一个‘EOP’(End of Packet)指示。 - EOL模式:
0x401的bit 31。当此位置位时,达到Z次操作后,PDMA将产生‘EOL’(End of List)指示而非‘EOP’。EOP/EOL是PSI-L/CPPI协议中用于数据包管理的信号,上层DMA或处理器据此来区分不同的数据块。 - Z=NULL的特殊情况:如果将Z设置为NULL(通常为0),则PDMA不提供任何包界定,所有帧控制由上游的UDMA-P��过动态TR完成。这给了软件更大的灵活性,但也增加了软件负担。
为什么接收需要Z参数?发送时,数据包的边界通常由应用层或UDMA-P在提交数据时就已经确定。而接收时,数据是源源不断从外设来的,硬件需要有一种机制来告���上层“这是一个完整的数据单元”。例如,对于SPI接收一帧128字节的数据,如果设置X=8-bit,Y=16, 那么Z=8就表示“每8次触发(共8*16=128字节)组成一个包”。
2. MCAN模式静态TR(接收)
- Y(缓冲区大小):定义每次从MCAN RX缓冲区读取的字节数,包含首片段的8字节MCAN头。
- Z(缓冲区计数):定义在关闭一个CPPI数据包(发出EOP)之前,需要读取多少个MCAN RX缓冲区。这允许将多个连续的CAN报文缓冲区合并到一个更大的CPPI包中,提高传输效率。后续缓冲区读取时会跳过8字节头部。
- EOL模式:同上,用于控制包结束标记的类型。
- 重要警告:手册明确指出,应避免将Z设置为NULL,因为这会抑制所有包界定,可能导致数据流无法被正确分割。
3. AASRC模式静态TR(接收)与发送模式类似,X和Y参数用于控制从每个FIFO读取的数据大小和循环次数。Z参数和EOL标志的作用与X-Y FIFO接收模式一致,用于定义多少次完整的DMA请求操作构成一个音频数据包。
4.3 MCAN RX的乒乓缓冲区与事件映射
MCAN接收配置是RX通道中的一个难点和重点,它直接关系到CAN总线数据接收的可靠性和实时性。
核心挑战:CAN报文可能连续到达。如果只有一个RX缓冲区,当PDMA正在读取缓冲区数据时,新的CAN报文到来就会丢失。
解决方案:乒乓缓冲区+过滤器事件映射。
- 硬件支持:MCAN模块通常提供多个RX缓冲区(例如6个)。PDMA的每个MCAN RX通道(如MCAN2 RX Ch0)可以关联其中两个缓冲区,形成一组“乒乓”缓冲。
- 事件映射:MCAN的每个接收过滤器匹配成功后,可以产生一个3位的“过滤器事件”(Filter Event, FE[2:0])。这个事件码不仅触发PDMA开始DMA传输,还编码了目标通道和缓冲区索引。
- 映射表解读:根据手册提供的映射表:
FE[2:0] = 0x2 (010)-> PDMA CAN通道偏移0, RX缓冲区0FE[2:0] = 0x3 (011)-> PDMA CAN通道偏移0, RX缓冲区1FE[2:0] = 0x4 (100)-> PDMA CAN通道偏移1, RX缓冲区2- 以此类推...
- 配置实例:要为CAN报文ID 0x123配置乒乓缓冲,可以使用MCAN的两个过滤器:
- 过滤器0:匹配ID 0x123, 产生事件
0x2。当报文ID为0x123的报文到来并存入RX缓冲区0时,触发PDMA从缓冲区0读取。 - 过滤器1:同样匹配ID 0x123, 产生事件
0x3。当另一个ID为0x123的报文到来并存入RX缓冲区1时,触发PDMA从缓冲区1读取。
- 过滤器0:匹配ID 0x123, 产生事件
这样,当PDMA正在处理缓冲区0的数据时,新的0x123报文可以无冲突地进入缓冲区1,并由另一个过滤器事件触发下一次DMA。软件只需要处理一个连贯的CPPI数据流,而无需关心底层的缓冲区切换,实现了零丢失的高效接收。
实操心得:配置MCAN RX DMA时,务必仔细规划过滤器事件码的分配,确保每个需要DMA的报文ID都有一对事件码指向一对乒乓缓冲区。同时,PDMA的Z参数可以设置为1(每个缓冲区作为一个独立包)或更大(合并多个缓冲区),具体取决于应用层希望如何处理连续的相同ID报文。
4.4 接收数据流与PSI-L接口
接收通道被触发后,PDMA从外设FIFO地址读取数据,暂存于内部的Rx Per Channel Buffer。当凑够一个完整的数据字(符合PSI-L传输宽度)后,PDMA会通过Rx PSI-L接口发起一次数据相位传输,将数据推送给配对的UDMA-P线程。
strm_o_req信号在PDMA输出FIFO有数据时拉高,strm_o_sthread_id则指示当前数据属于哪个通道。UDMA-P根据这些信息接收数据并写入系统内存。
5. 常见问题排查与实战技巧
基于多年的调试经验,PDMA配置问题往往集中在初始化顺序、参数理解和硬件协同上。以下是一些典型问题及排查思路。
5.1 问题排查速查表
| 现象 | 可能原因 | 排查步骤 |
|---|---|---|
| 通道完全不工作,无数据传输 | 1. PSI-L线程未配对或配对错误。 2. 静态TR寄存器未正确写入。 3. 通道未使能。 4. 外设端的DMA请求未产生或未连接。 | 1. 检查PDMA和UDMA-P两端的线程配对寄存器,确认ID互相指向对方。 2. 读取通道的静态TR寄存器( 0x400,0x401),确认值与配置一致。3. 检查PSI-L RT使能寄存器对应位是否为1。 4. 使用示波器或逻辑分析仪检查外设的DMA请求信号线是否有脉冲;检查外设自身DMA控制寄存器是否已使能。 |
| TX通道:数据发送不完整或错位 | 1. X(元素大小)设置错误,与外设数据宽度不匹配。 2. Y(元素数量)设置过大,超过单次触发预期。 3. MCAN模式下,Y值(缓冲区大小)设置不合理,导致分片错误。 | 1. 确认外设数据寄存器宽度。例如,32位FIFO应设置X=3(32-bit)。2. 核对应用层提交的数据量与外设单次触发期望量。Y值应等于(单次触发数据量 / X元素大小)。 3. 对于MCAN,确保Y值在16-72之间,且大于等于你希望单次填充的报文数据段长度+8(头部)。 |
| RX通道:数据包边界混乱 | 1. Z参数(FIFO/缓冲区计数)设置错误或为0。 2. EOL/EOP标志理解错误,上层软件解析不当。 3. MCAN RX的Z参数导致多个缓冲区被合并,但软件未按此解析。 | 1. 计算预期数据包大小,根据Y值反推Z值。例如,一包128字节,Y=16(每次读16字节),则Z=8。 2. 确认上层CPPI驱动或数据处理代码是识别EOP还是EOL作为包结束标志。 3. 检查MCAN RX的Z值。如果Z>1,则一个CPPI包内包含多个CAN报文,需要软件解析内部边界(可能通过长度字段或自定义标记)。 |
| MCAN RX丢帧 | 1. 未正确配置乒乓缓冲区。 2. 过滤器事件映射错误,导致缓冲区覆盖。 3. PDMA读取速度慢于CAN报文到达速度。 | 1. 确认至少为每个活跃的CAN ID配置了两个过滤器,指向不同的缓冲区索引(如事件0x2和0x3)。 2. 核对MCAN过滤器配置寄存器,确保事件码生成正确。 3. 检查PDMA优先级、系统总线带宽。考虑使能突发模式(Burst bit)提升读取效率。 |
| 使能后系统异常或总线错误 | 1. Data FIFO Address配置错误,访问了非法或受保护地址。 2. 在通道活跃时错误修改了关键配置寄存器。 3. 突发模式使能,但外设或总线不支持。 | 1. 反复核对通道分配表中的Data FIFO Address,确保与芯片数据手册完全一致。 2. 任何配置修改前,先暂停或拆卸通道。 3. 查阅外设手册,确认其VBUSP接口是否支持突发传输。在不明确时,先禁用突发模式进行测试。 |
| 调试寄存器显示“EventCnt”积压 | DMA请求事件产生的速度大于PDMA处理速度。 | 1. 检查外设是否错误地连续产生DMA请求。 2. 优化PDMA性能:使能突发模式、调整仲裁优先级。 3. 检查目标内存或外设FIFO是否响应缓慢,导致PDMA等待。 |
5.2 实战配置技巧与心得
配置脚本化与版本管理:PDMA配置涉及大量寄存器地址和魔数。强烈建议为每个外设或用例编写初始化函数,并将关键参数(X, Y, Z, 地址)定义为宏或通过结构体传递。这比散落在代码各处的裸写数值要可靠得多,也便于不同项目间复用和调试。
启动顺序是生命线:务必严格遵守“外设时钟与基础配置 -> PDMA通道配对 -> PDMA静态TR设置 -> PDMA通道使能 -> 外设DMA请求使能”的启动顺序。一个常见的错误是先使能了外设的DMA请求,但PDMA还未准备好,导致最初的几个请求被丢失。
理解“静态”的含义:静态TR意味着运行时难���更改。如果你的应用需要频繁变换传输数据量(例如,可变长度的CAN报文),你有两个选择:一是将Y/Z设置为可能的最大值,依赖上层软件或UDMA-P进行精确控制;二是为不同长度的传输配置不同的PDMA通道,通过开关通道来切换模式。后者硬件开销大但延迟确定,前者软件开销大但灵活。
充分利用调试寄存器:在驱动开发初期,不要只关注功能是否通。养成读取
0x402/0x403调试状态寄存器的习惯。观察Y(剩余计数)、EventCnt(积压事件)、Data(是否有数据)等字段,可以非常直观地看到DMA是卡在等待数据、等待请求还是正在忙碌传输,能快速定位问题阶段。MCAN模式下的长度计算:这是最容易出错的地方。牢记MCAN模式的Y值包含首片段的8字节头。如果你要发送一个64字节数据负载的CAN FD报文,总长度可能是72字节(加上头和其他控制字段)。你需要确保Y值 >= 72, 或者合理规划分片。计算错误会导致报文被截断或分片逻辑异常。
压力测试与边界条件:在实验室里,低速发送几条测试数据往往能成功。真正的考验在于长时间、满负荷的压力测试。务必设计测试用例,让DMA持续工作在最大带宽下,观察是否会出现积压(
EventCnt增长)、数据错误或系统不稳定。这能暴露出优先级配置、总线仲裁、缓冲区深度等潜在问题。