深入解析EDMA3:DMA/QDMA通道、触发机制与参数集配置实战

发布时间:2026/7/22 1:40:12

深入解析EDMA3:DMA/QDMA通道、触发机制与参数集配置实战 1. 项目概述为什么我们需要深入理解EDMA3在嵌入式系统尤其是高性能数字信号处理器DSP和微控制器MCU的开发中数据搬运的效率往往是决定系统性能的瓶颈。无论是音频处理中的采样数据搬移、图像处理中的帧缓冲区切换还是通信协议栈中的数据包收发CPU如果被频繁地卷入到简单、重复的内存拷贝操作中其核心的计算能力就会被严重浪费。这时直接内存访问DMA技术就成了我们的“救星”。它像一个专职的、不知疲倦的“搬运工”能在CPU下达指令后独立完成外设与内存、内存与内存之间的大块数据搬运让CPU得以专注于算法和逻辑运算。然而传统的DMA控制器功能相对单一通常是一对一的、顺序的传输。当面对现代嵌入式应用中越来越复杂的、多维的、有条件的数据流时就显得力不从心。德州仪器TI在其C6000系列DSP及部分高性能ARM处理器中集成的增强型直接内存访问控制器第三代——EDMA3正是为了解决这些复杂场景而生的。它不仅仅是一个简单的搬运工更像是一个配备了智能调度系统、可编程任务列表和多种触发方式的“物流中心”。理解EDMA3特别是其核心的DMA/QDMA通道、灵活的触发机制以及参数集PaRAM映射是解锁其强大能力、设计出高效、稳定数据通路的关键。很多开发者初次接触EDMA3时会被其众多的寄存器、多维的传输维度和复杂的链接/链式机制所困扰配置起来往往靠“复制粘贴”例程一旦需求变化就无从下手。本文旨在剥开EDMA3的技术外壳从实际应用的角度深入解析其工作原理和配置逻辑让你不仅能“用起来”更能“懂得为什么这么用”从而在项目中游刃有余地设计出最优的数据传输方案。2. EDMA3架构核心通道、控制器与参数集在深入细节之前我们需要建立一个EDMA3的宏观架构视图。一个完整的EDMA3子系统通常由两部分构成通道控制器EDMA3 Channel Controller, EDMA3CC和传输控制器EDMA3 Transfer Controller, EDMA3TC。你可以把EDMA3CC看作是一个“任务调度中心”而EDMA3TC则是负责实际“搬运货物”的“执行车队”。EDMA3CC通道控制器这是用户主要交互的部分。它负责管理所有的传输通道DMA和QDMA、处理各种触发事件如外设中断、手动写入、链式完成、维护参数集PaRAM表并将准备好的传输请求Transfer Request, TR提交给传输控制器队列。我们配置的ACNT、BCNT、CCNT、源/目的地址等所有参数都存储在EDMA3CC管理的PaRAM中。EDMA3TC传输控制器这是实际执行数据传输的硬件单元。一个EDMA3CC可以连接多个EDMA3TC以实现更高的并发吞吐量。TC从CC的队列中取出传输请求包TRP按照其中的描述地址、数据量等通过系统总线执行具体的内存读写操作。它不关心这个传输是谁触发的只负责高效、准确地完成搬运任务。而连接调度中心CC和执行车队TC的“任务工单”就是参数集Parameter RAM, PaRAM。这是EDMA3设计的精髓所在。2.1 参数集PaRAM详解传输任务的蓝图每个PaRAM集是一个包含若干字段的数据结构完整定义了一次或一系列数据传输的所有信息。一个典型的PaRAM集包含以下关键字段以16字节或32字节对齐具体取决于器件OPT选项这是PaRAM的“大脑”包含了本次传输的核心控制位。TCCHEN/ITCCHEN传输完成链式使能最终/中间。决定本次传输在最终或中间步骤完成后是否触发另一个通道链式传输。TCINTEN/ITCINTEN传输完成中断使能最终/中间。决定是否在传输完成后向CPU发送中断。TCC传输完成码一个6位的代码用于标识本次传输。当中断或链式事件发生时这个代码会被写入相应的寄存器IPR或CERCPU或EDMA3CC通过查询此代码来知道是哪个传输完成了。TCCMODE传输完成模式。0为正常完成等待TC返回完成信号1为提前完成CC提交TR后即认为完成。后者常用于链式传输以提升流水线效率。SYNCDIM同步维度。决定传输如何被“同步事件”推进。A-同步SYNCDIM0指每个触发事件启动一个ACNT大小的传输即一个ArrayAB-同步SYNCDIM1指每个触发事件启动一个ACNT*BCNT大小的传输即一个Frame。STATIC静态位。若设为1则传输完成后PaRAM内容不会被链接Link操作更新若为0则允许链接。SRC/DST源/目的地址数据传输的起点和终点内存地址。ACNT第一维计数单个Array的字节数。这是传输的最小数据单元。BCNT第二维计数每个Frame中包含的Array数量。CCNT第三维计数传输中包含的Frame数量。SRCBIDX/DSTBIDX源/目的B索引在一个Array传输完成后源/目的地址的跳跃字节数。用于在内存中非连续存放的Array之间跳转。SRCCIDX/DSTCIDX源/目的C索引在一个Frame传输完成后即BCNT个Array都传完源/目的地址的跳跃字节数。用于在内存中非连续存放的Frame之间跳转。BCNTRLDB计数重载值当使用AB-同步模式时在每次Frame传输开始前BCNT寄存器会被重载为此值。这对于实现环形缓冲区Ping-Pong Buffer非常有用。LINK链接地址本次传输完成后如果允许链接STATIC0EDMA3CC会自动将此地址指向的另一个PaRAM集的内容加载到当前PaRAM集的位置为下一次传输做好准备。如果设置为0xFFFF则为空链接Null Link表示传输链结束。注意理解ACNT、BCNT、CCNT以及B/C索引是掌握EDMA3多维传输的关键。一个常见的类比是把要传输的整个数据块想象成一本书Block。CCNT是书的章数FramesBCNT是每章的页数ArraysACNT是每页的字数Bytes。传输时先读完一页的所有字ACNT然后根据SRCBIDX/DSTBIDX跳到下一页开头读完一章的所有页BCNT后根据SRCCIDX/DSTCIDX跳到下一章开头。2.2 DMA通道 vs QDMA通道固定工单与即时工单EDMA3提供了两种类型的通道DMA通道和QDMA通道。它们的核心区别在于触发机制和使用场景。DMA通道这是传统的、与特定硬件事件绑定的通道。每个DMA通道在硬件上固定映射到一个特定的外设事件如McASP的接收中断、定时器溢出等。它的PaRAM集也是固定的通道N映射到PaRAM集N。DMA通道的触发方式多样事件触发外设产生事件如收到一帧数据。手动触发CPU通过写事件置位寄存器ESR来手动启动。链式触发由另一个通道传输完成时触发。DMA通道适用于周期性、规律性的数据流例如持续不断的ADC采样数据搬运。一旦配置好PaRAM外设事件就会自动驱动传输。QDMA通道这是“队列式”DMA其核心特点是触发与PaRAM写入绑定。QDMA通道与PaRAM集的映射是可编程的通过QCHMAPn寄存器并且触发发生在CPU或其他主机向该PaRAM集的触发字执行写操作时。触发字可以是PaRAM中的OPTSRC或DST字段。自动触发CPU写触发字后传输立即被排队。链接触发当一个链接操作更新了映射为QDMA通道的PaRAM集时也会触发该QDMA传输。QDMA通道适用于非周期性、突发性的数据传输任务。例如CPU计算出一批需要搬移的数据地址和大小后通过一次写操作写入PaRAM的OPT字段就能启动传输非常高效。通常QDMA传输配置为单次触发完成全部数据搬运BCNTCCNT1 for A-同步或CCNT1 for AB-同步。实操心得在实际项目中我通常将DMA通道用于“数据流”处理比如音频I/O、视频采集等有固定节奏的场景。而将QDMA通道用于“控制流”或“任务式”搬运比如将处理完的一帧数据从内部存储器搬移到网络接口或者动态配置一段DMA传输链。QDMA的灵活性更高但需要CPU介入来“点火”DMA更自动化但通道资源有限且与事件绑定。3. 触发机制深度解析如何启动一次传输触发机制是EDMA3灵活性的体现。理解每种触发方式的细微差别是避免配置错误和资源冲突的关键。3.1 DMA通道的三种触发方式3.1.1 事件触发最常用的自动化方式这是DMA最典型的工作模式。当外设如UART、SPI、ADC产生一个同步事件例如接收缓冲区满时该事件信号会连接到EDMA3CC的特定事件输入。EDMA3CC内部流程如下事件锁存事件发生时对应通道位在事件寄存器ER中被置位ER.En 1。事件使能检查如果该通道在事件使能寄存器EER中已被使能EER.En 1则该事件进入优先级队列等待处理。如果未使能事件仍会被锁存在ER中但不会进入队列。这是一个重要的细节你可以在事件发生后再使能EER来“释放”这个待处理的事件。队列处理与提交当事件在队列头部时EDMA3CC检查其映射的PaRAM集。如果PaRAM是有效集非空则生成一个传输请求包TRP提交给EDMA3TC并清除ER.En位。如果PaRAM是空集Null Set所有字段为0LINK0xFFFF则不会提交TR直接清除ER.En并在事件丢失寄存器EMR中置位表示事件被丢弃。良好的编程习惯要求在重新触发该通道前必须清除EMR中的错误标志。事件丢失如果一个事件正在处理中已在队列或正在被处理ER.En尚未清除此时同一个通道又来了一个新的事件那么新事件会被记录在事件丢失寄存器EMR中。这通常意味着CPU处理速度跟不上DMA事件产生的速度或者DMA传输配置ACNT大小与事件频率不匹配。3.1.2 手动触发CPU的直接控制CPU通过向事件置位寄存器ESR的对应位写1可以手动触发一次DMA传输。其流程与事件触发类似但有一个关键区别手动触发不受EER事件使能寄存器的控制。即使EER.En 0写ESR依然会强制事件进入队列。这为软件灵活控制DMA提供了可能例如用于初始化数据传输或测试。同样如果对应PaRAM是空集也会导致事件丢失EMR置位。3.1.3 链式触发构建传输流水线链式触发允许一个通道通道M的传输完成自动触发另一个通道通道N的传输。这是实现复杂、多步骤数据传输流水线的核心机制。配置在通道M的PaRAM的OPT字段中设置TCCHEN最终链式使能或ITCCHEN中间链式使能为1并将TCC字段设置为通道N的通道号0-63但通常与通道号对应。触发过程当通道M的传输完成根据TCCMODE决定是“正常完成”还是“提前完成”EDMA3CC会根据TCC值在链式事件寄存器CER的对应位置位CER.E[TCC] 1。响应CER.E[TCC]被置位其效果等同于一个事件发生。如果通道N的EER已使能则该链式事件进入队列最终触发通道N的传输。关键点链式触发不修改任何PaRAM集的内容它只是产生一个“软事件”。这与“链接”Linking功能有本质区别链接是更新当前通道的PaRAM内容。重要提示ER事件寄存器、ESR事件置位寄存器和CER链式事件寄存器是独立工作的。这意味着同一个通道可以被硬件事件、手动写入和链式事件任何一种方式触发这为设计鲁棒性高的数据传输状态机提供了极大便利。3.2 QDMA通道的触发方式3.2.1 自动触发一次写入启动传输这是QDMA最常用的模式。其核心在于QCHMAPn寄存器的配置。该寄存器有两个关键字段PAENTRY指定本QDMA通道映射到哪个PaRAM集0到n-1。TR WORD指定PaRAM集中的哪个字Word作为“触发字”。可以是OPT、SRC或DST字段的偏移地址。触发流程CPU或其他主机向QCHMAPn指定的PaRAM集的“触发字”执行一次32位写操作。如果该QDMA通道在QDMA事件使能寄存器QEER中已使能则此次写操作会置位QDMA事件寄存器QER中的对应位。后续流程与DMA事件触发类似事件进入队列检查PaRAM有效性提交TR。为什么需要32位写这是硬件设计的要求确保触发信号的完整性。在C代码中你需要确保对触发字比如一个uint32_t类型的OPT变量的赋值操作是原子的32位写。3.2.2 链接触发构建QDMA传输链当EDMA3CC执行一次链接Linking操作且被链接更新的目标PaRAM集正好被映射为一个QDMA通道即其地址匹配某个QCHMAPn的PAENTRY设置并且该QDMA通道已使能那么这次链接操作本身就会触发一次QDMA事件。 这实现了强大的“链式QDMA”功能你可以设置一个QDMA PaRAM集其LINK字段指向另一个PaRAM集。当第一次QDMA通过写触发字启动完成后EDMA3CC执行链接将下一个PaRAM集加载过来同时这个加载操作又触发了第二次QDMA传输如此往复形成一个由QDMA驱动的传输链表。3.3 触发机制对比与选型建议特性DMA通道 (事件触发)DMA通道 (手动触发)DMA通道 (链式触发)QDMA通道 (自动触发)QDMA通道 (链接触发)触发源硬件外设事件CPU写ESR寄存器其他通道传输完成CPU写PaRAM触发字EDMA3CC链接操作PaRAM映射固定 (通道N - PaRAM N)固定 (通道N - PaRAM N)固定 (通道N - PaRAM N)可编程 (QCHMAPn)可编程 (QCHMAPn)典型应用规律性数据流 (ADC, McASP)软件控制单次传输传输流水线多步骤处理突发性、非周期数据传输由链接驱动的QDMA传输链灵活性中 (与硬件绑定)高 (软件随时可触发)高 (可构建复杂流程)很高 (PaRAM可动态分配)高 (实现自动链表)资源占用占用一个硬件通道占用一个硬件通道占用多个硬件通道占用一个QDMA通道占用一个QDMA通道选型建议有固定硬件事件源且传输模式稳定 - 首选DMA事件触发。需要软件精确控制传输时机- 使DMA手动触发或QDMA自动触发。如果传输参数变化不频繁用DMA手动触发如果每次传输参数如地址、数据量都可能不同用QDMA更高效一次写操作同时更新参数并触发。需要构建多级数据处理流水线如搬数据 - 处理 - 再搬走- 使用DMA链式触发将各个处理环节用DMA通道串联。需要实现一个动态的、由事件驱动的传输链表- 结合使用QDMA自动触发和链接触发。4. 参数集PaRAM映射与链接机制4.1 DMA/QDMA通道到PaRAM的映射这是配置EDMA3的基础必须清晰理解。DMA通道映射这是固定的一一映射。DMA通道0固定使用PaRAM集0通道1使用集1依此类推。这种设计简单直接但缺乏灵活性。通道号通常也与特定的外设事件输入绑定这在器件数据手册中有明确说明。QDMA通道映射这是完全可编程的。通过QCHMAPn寄存器你可以将任何一个QDMA通道映射到任何一个可用的PaRAM集。这带来了巨大的灵活性你可以在运行时动态地将不同的传输任务分配给QDMA通道。但这里有一个至关重要的陷阱默认情况下所有QDMA通道都映射到PaRAM集0如果你同时使用了DMA通道0它也映射到PaRAM集0和任何QDMA通道就会发生冲突导致不可预知的行为。因此系统初始化时必须尽早重新映射QDMA通道到未被使用的PaRAM集。4.2 链接Linking传输实现循环缓冲区与传输链链接是EDMA3最强大的功能之一。它允许一个通道在完成当前传输后自动将其PaRAM集的内容更新为另一个PaRAM集的内容从而实现传输参数的自动重载。最常见的应用就是Ping-Pong缓冲区。链接过程详解在PaRAM集的LINK字段中填入下一个要链接的PaRAM集的地址注意是字节地址。将该PaRAM集的STATIC位在OPT中设为0允许链接。当该通道的传输最终完成即BCNT和CCNT都递减到1并提交了最后一个TR后EDMA3CC会执行链接操作。链接操作是将LINK地址指向的整个PaRAM集16/32字节的内容一次性拷贝到当前通道的PaRAM集位置。拷贝完成后如果新加载的PaRAM集是有效的非空则该通道就为下一次传输做好了准备等待新的触发事件。图例分析基于输入材料中的Figure 18-8初始化状态PaRAM集3的LINK字段指向PaRAM集127的地址0x01C0 4FE0。PaRAM集3传输完成后EDMA3CC将集127的内容拷贝到集3的位置。此时集3拥有了原来集127的配置OPT, SRC, DST等并且其自身的LINK字段也被更新为集127的LINK值图中假设为0xFFFF即空链接。PaRAM集127传输完成后由于此时集3的LINK已是0xFFFF空链接链接操作会将一个“空PaRAM集”所有字段为0LINK0xFFFF加载进来。这意味着该通道的传输链结束后续再触发该通道会导致事件丢失EMR置位除非软件重新配置PaRAM。“链接到自身”模式这是一种特殊用法将LINK字段设置为自身PaRAM集的地址。这样每次传输完成后都会用自身的内容重新加载自己。这有什么用想象一下如果你的传输参数如SRC/DST地址是在传输过程中由外设或DMA本身自动更新的例如通过写入FIFO那么链接到自身可以保证每次传输都使用更新后的地址而其他参数如ACNT, BCNT保持不变。这在某些特定外设的FIFO读取场景中可能会用到。实操心得配置Ping-Pong缓冲区这是链接最经典的应用。假设我们需要将ADC采样的数据连续存入两个缓冲区Buffer A和Buffer B供CPU交替处理。准备两个PaRAM集例如集0和集1。集0SRCADC数据寄存器地址DSTBuffer A地址ACNT采样数据大小BCNT1, CCNT1, LINK集1的地址。集1SRCADC数据寄存器地址DSTBuffer B地址其他参数同集0LINK集0的地址。将DMA通道映射到PaRAM集0配置为事件触发由ADC转换完成事件触发。启动传输。第一次触发数据存入Buffer A。传输完成后链接操作将集1的内容加载到集0。此时通道的PaRAM变成了集1的配置但物理上仍然在集0的位置。第二次ADC事件触发数据存入Buffer B。传输完成后链接操作再次发生将集0其内容最初来自集0但链接地址指向集1的内容加载回来。如此循环往复实现了自动的Ping-Pong操作。关键点CPU只需要在初始化时配置好两个PaRAM集并开启DMA。之后DMA和链接机制会自动管理缓冲区的切换CPU通过检查中断如果使能了TCINTEN或轮询缓冲区标志位就知道哪个缓冲区已满可以安全读取。5. 传输完成与完成检测机制一次传输何时算“完成”完成时又该做什么EDMA3提供了精细的控制。5.1 传输完成的定义对于一个非空、非哑元的传输其完成的定义与同步模式有关A-同步传输需要BCNT × CCNT个同步事件。每个事件触发一个ACNT大小的传输。当BCNT和CCNT都递减到1时下一个即最后一个TR的提交将标志着传输最终完成。AB-同步传输需要CCNT个同步事件。每个事件触发一个ACNT × BCNT大小的传输。当CCNT递减到1时下一个TR的提交标志着传输最终完成。5.2 完成模式TCCMODE正常完成TCCMODE0EDMA3CC只有在收到EDMA3TC返回的传输完成确认后才认为传输完成并据此设置中断或链式事件。这保证了数据确实已被搬运到目的地。适用于需要严格确认数据已就绪的场景例如通知CPU处理数据。提前完成TCCMODE1EDMA3CC在将传输请求TR提交给EDMA3TC后就立即认为传输完成并立即设置中断或链式事件。此时TC可能还在搬运数据。这极大地减少了传输间的延迟特别适用于链式传输可以实现“流水线”操作通道A的传输还未结束就可以触发通道B开始准备或传输提升整体吞吐量。5.3 完成代码与中断/链式在OPT字段中配置的传输完成代码TCC6位是连接传输完成与后续动作中断或链式的桥梁。中断生成如果TCINTEN最终中断使能或ITCINTEN中间中断使能为1当传输完成或中间完成时EDMA3CC会在中断挂起寄存器IPR的对应TCC位置1。CPU可以查询IPR或配置中断控制器来响应。链式事件生成如果TCCHEN最终链式使能或ITCCHEN中间链式使能为1当传输完成或中间完成时EDMA3CC会在链式事件寄存器CER的对应TCC位置1从而触发另一个通道的传输。哑元/空集完成这是一种特殊情况。如果为一个通道配置了空PaRAM集NULL Set或哑元集Dummy Set当该通道被触发时EDMA3CC不会向TC提交任何TR。但是如果该集的OPT中使能了中断或链式EDMA3CC会内部模拟一个完成事件并设置相应的IPR或CER位。这可以用于实现纯事件通知或软件触发的链式逻辑而不进行实际的数据搬运。5.4 阴影区域Shadow Regions与资源分区在多核或异构系统中多个处理器核心或主设备如协处理器可能都需要访问和配置EDMA3。为了避免冲突EDMA3CC引入了阴影区域的概念。全局区域包含所有寄存器的完整视图通常由系统主控核或初始化代码使用。阴影区域每个阴影区域是全局寄存器的一个“视图”或“窗口”。通过DMA区域访问使能寄存器DRAEm和QDMA区域访问使能寄存器QRAEm可以为每个阴影区域分配独占的DMA/QDMA通道和TCC代码。DRAEm和QRAEm中的每一位对应一个通道或TCC。置1表示该资源对该阴影区域可见和可操作置0则对该区域“隐藏”写操作被忽略读操作返回0。工作原理每个核心或主设备被分配到一个特定的阴影区域地址空间。它们只能看到和操作自己被授权DRAEm/QRAEm中对应位为1的通道和中断资源。这样核A可以安全地使用通道0-15而核B使用通道16-31彼此互不干扰。配置示例如输入材料中Example 18-1 假设双核系统核0Region 0需要通道0-15和QDMA通道0核1Region 1需要通道16-31和QDMA通道1-7。核0的配置DRAE0 0x0000FFFF(低16位通道使能)QRAE0 0x00000001(仅QDMA通道0使能)。核1的配置DRAE1 0xFFFF0000(高16位通道使能)QRAE1 0x000000FE(QDMA通道1-7使能位1-7为1)。这样两个核在各自的地址窗口Shadow Region 0/1中操作寄存器时就像在独享整个EDMA3一样极大地简化了多核编程的复杂性。6. 常见问题与实战调试技巧在实际使用EDMA3时你一定会遇到各种问题。以下是我踩过的一些坑和总结的排查思路。6.1 传输未启动或数据错误检查事件是否被正确捕获查询事件寄存器ER。对应通道位是否为1如果不是检查外设事件是否生成或手动触发ESR是否执行。如果ER为1但传输没动静检查事件使能寄存器EER是否已使能。检查事件丢失寄存器EMR。如果对应位为1说明事件被丢弃通常是因为PaRAM是空集或者前一个事件还未处理完。必须清除EMR位后才能接收新事件。检查PaRAM配置地址对齐特别注意常数寻址模式SAM/DAM1的要求源或目的地址必须256位对齐B索引BIDX必须是32字节的偶数倍。在C674x/OMAP-L1x等处理器上通常没有外设支持常数寻址模式建议始终使用增量寻址模式SAM/DAM0并通过合理设置ACNT、BIDX等参数来实现所需的数据布局。计数递减理解ACNT、BCNT、CCNT的递减逻辑。在A-同步模式下每个事件使BCNT递减当BCNT减到0时CCNT减1BCNT从BCNTRLD重载。确保你的总数据量ACNT * BCNT * CCNT与预期一致。链接地址确保LINK字段指向一个有效的、已初始化的PaRAM集地址或者为0xFFFF空链接。错误的链接地址会导致加载到无意义的配置进而引发总线错误或传输混乱。检查QDMA触发确认QCHMAPn寄存器已正确配置将QDMA通道映射到了一个未被DMA占用的PaRAM集。确认对触发字OPT/SRC/DST的写操作是32位访问。在C语言中确保你操作的变量是volatile uint32_t*类型并且赋值是32位操作避免被编译器优化或拆分成多个字节操作。6.2 中断不产生或链式触发失败检查OPT字段配置TCINTEN/ITCINTEN或TCCHEN/ITCCHEN是否使能TCC字段的值是否正确这个值决定了IPR或CER的哪一位被置位。TCCMODE设置是否合理如果你需要等待数据搬运完成再中断用正常完成如果为了快速链式用提前完成。检查中断/链式事件是否被屏蔽对于中断检查EDMA3CC的中断使能寄存器IER对应TCC位是否使能。同时检查设备全局中断控制器INTC是否已配置并开启该中断线。对于链式检查目标通道的EER是否使能。链式事件是通过CER产生一个“软事件”目标通道仍需使能才能响应。查询状态寄存器中断挂起寄存器IPR和链式事件寄存器CER是只读的直接反映了硬件状态。在调试时定期读取这些寄存器看预期的位是否被置起是定位问题的直接方法。6.3 性能优化与高级技巧利用提前完成TCCMODE1进行流水线操作对于连续的、多步骤的数据处理链将前一个通道设置为提前完成并链式触发下一个通道。这样当前一个通道的TR提交给TC后下一个通道就可以立即开始准备甚至提交自己的TR与上一个通道的实际数据传输时间重叠显著提升吞吐量。合理使用QDMA进行动态调度对于非周期性的、参数多变的数据搬运任务不要用光宝贵的DMA通道。使用一个或几个QDMA通道配合多个预配置的PaRAM集。当需要搬运时CPU只需将合适的PaRAM集索引写入QCHMAPn如果需要改变映射然后向触发字写入数据即可启动。这比重新配置整个DMA通道寄存器要快得多。注意总线竞争和带宽EDMA3TC通过系统总线访问内存和外设。当多个TC同时工作或者CPU也在频繁访问内存时会产生总线竞争。在设计高带宽数据传输时需要考虑内存的布局尽量使用片内RAM、总线的仲裁优先级以及可能的内存访问冲突。有时调整传输的维度ACNT/BCNT/CCNT来匹配内存的突发Burst访问特性也能带来性能提升。调试利器事件/中断日志在复杂系统中为关键的DMA传输配置中断并在中断服务程序ISR中记录简单的日志如缓冲区索引、时间戳是追踪数据流、发现丢帧或顺序错误的最有效手段之一。

相关新闻