深入解析TI IVA2.2 EDMA架构:TPCC与TPTC协同工作原理
1. 项目概述:从CPU的“搬运工”到自主的“物流系统”
在嵌入式系统开发,尤其是涉及大量数据搬移的应用(比如视频编解码、音频处理、高速数据采集)中,CPU如果亲自去处理每一个字节的搬运,就像让公司的CEO去楼下收发室取快递,效率低下且严重浪费核心资源。直接内存访问(DMA)技术就是为了解决这个问题而生的。它本质上是在系统内部建立了一个独立的“物流部门”——DMA控制器。这个部门有自己的一套指令(传输参数)和运输车队(通道),一旦接到任务(触发事件),就能独立完成从仓库A(源地址)到仓库B(目的地址)的货物(数据)搬运,全程无需CEO(CPU)插手,只在任务开始和结束时打个招呼即可。
然而,随着系统复杂度提升,简单的DMA控制器就像只有一个调度员和几辆卡车的物流站,难以应对多线路、高并发、带复杂装卸规则(如二维数组搬运、乒乓缓冲)的现代需求。德州仪器(TI)在其高性能多媒体处理器(如基于C64x+ DSP核的IVA2.2子系统)中引入的增强型DMA(EDMA)架构,特别是其核心的第三方通道控制器(TPCC)和传输控制器(TPTC),就是将这个“物流站”升级为了一个智能化的“现代物流中心”。TPCC就是这个中心的“智能调度中心”,负责接收订单(事件)、分配任务(通道)、规划路线(参数集);而TPTC则是具体执行运输任务的“自动化车队”。理解这两者的协同工作原理,是解锁嵌入式系统极致数据吞吐性能的关键。
2. EDMA架构总览:TPCC与TPTC的分工与协作
在IVA2.2子系统中,EDMA并非一个单一模块,而是一个由TPCC和两个TPTC实例(TPTC0和TPTC1)组成的子系统。这种架构体现了清晰的责任分离思想。
TPCC(Third-Party Channel Controller):它是用户(CPU或其它主设备)的接口和总调度器。你可以把它想象成物流中心的“客服与调度台”。它的核心职责包括:
- 通道管理:提供多达64个DMA逻辑通道和8个QDMA通道,每个通道可以独立响应不同的事件。
- 参数管理:维护一个包含128个条目的参数RAM(PaRAM)。每个条目都是一个完整的“运输任务单”,详细定义了源地址、目的地址、传输数量(ACNT, BCNT)、地址索引步长等所有上下文信息。
- 事件处理:接收并仲裁来自外部外设(如McBSP的发送/接收事件)、软件手动写入或链式完成等多种触发信号,决定哪个传输请求(TR)优先被执行。
- 队列调度:拥有两个事件队列(Q0和Q1),用于缓存等待处理的传输请求,并按照优先级进行调度,提交给下游空闲的TPTC。
TPTC(Third-Party Transfer Controller):它是实际的“运输车队”。一旦从TPCC接收到一个“运输任务单”(TR数据包),TPTC就会接管后续所有具体的“装卸货”操作。它的核心组件包括:
- 程序寄存器组:接收并暂存来自TPCC的新传输请求。
- 源/目的活动寄存器组:分别跟踪当前正在执行的读操作(从源地址取数据)和写操作(向目的地址存数据)的实时状态。
- 通道FIFO:作为数据中转缓冲区,暂存从源端读取但尚未写入目的端的数据,解耦读写速度,实现流水线操作。
- 读/写控制器及本地互连接口:负责生成符合总线协议的高效读写命令,以64字节为突发传输单位进行数据搬运。
它们之间的协作流程可以概括为:事件触发 -> TPCC仲裁并锁定对应PaRAM条目 -> 生成TR包 -> 提交给空闲的TPTC -> TPTC执行传输 -> 完成后通过完成接口通知TPCC -> TPCC可能触发链式事件或中断。这个流程完全在硬件层面自动完成,CPU仅在初始配置和最终处理中断时参与。
2.1 核心硬件参数解读
在深入细节前,了解一些关键的硬件固定参数有助于建立直观认识。根据技术文档,IVA2.2的EDMA子系统有如下关键规格:
| 模块 | 参数 | 值 | 说明 |
|---|---|---|---|
| TPTC | TPTC0 FIFO 大小 | 256 字节 | 用于缓存传输中的数据,TPTC0的缓冲区更大。 |
| TPTC1 FIFO 大小 | 128 字节 | TPTC1的缓冲区较小。 | |
| 数据总线宽度 | 64 位 | 每次通过本地互连读写的数据宽度是8字节。 | |
| TPTC0 TR流水线深度 | 4 | TPTC0可以同时处理最多4个传输请求的读操作。 | |
| TPTC1 TR流水线深度 | 2 | TPTC1可以同时处理最多2个传输请求的读操作。 | |
| 突发传输大小 | 64 字节 | 与总线架构相关,是优化的传输单元。 | |
| TPCC | DMA通道数量 | 64 | 支持64个由事件/手动/链式触发的标准通道。 |
| QDMA通道数量 | 8 | 支持8个由特定内存写入自动触发的快速通道。 | |
| PaRAM条目数 | 128 | 可以存储128套完整的传输参数集。 | |
| 事件队列数量 | 2 | 两个优先级队列(Q0和Q1)。 | |
| TPTC实例数量 | 2 | 两个并行的传输控制器。 |
注意:TR流水线深度决定了在一个传输通道中,源端控制器可以提前处理多少个后续传输请求的读操作,而无需等待目的端控制器完成前一个请求的写操作。这直接影响系统的数据吞吐能力和延迟隐藏效果。TPTC0深度为4,性能通常优于TPTC1。
3. TPCC深度解析:智能调度中心的工作原理
TPCC是整个EDMA系统的“大脑”,其复杂性体现在灵活的通道映射、多种触发机制和高效的调度算法上。
3.1 PaRAM:传输任务的“蓝图库”
PaRAM是TPCC的核心存储单元,共有128个条目,每个条目占8个32位字(32字节)。这128个条目被划分为三种用途:
- DMA条目:最多64个,对应64个DMA通道。每个通道固定或动态映射到一个PaRAM条目。
- QDMA条目:最多8个,对应8个QDMA通道。
- 链接条目:剩余的条目(128 - 64 - 8 = 56个)可用作“链接”条目,用于实现参数集的自动重载,构建复杂的链式或循环传输。
一个典型的PaRAM条目结构如下表所示(以字节地址偏移表示):
| 偏移量 | 名称 | 描述 |
|---|---|---|
| +0x0 | OPT | 选项字。包含传输完成码(TCC)、中断使能、链使能、源/目的地址模式、同步维度等关键控制位。 |
| +0x4 | SRC | 源起始地址(字节地址)。 |
| +0x8 | DST | 目的起始地址(字节地址)。 |
| +0xC | BCNT | 传输计数寄存器(低16位为ACNT,高16位为BCNT)。 |
| +0x10 | Reserved | 保留。 |
| +0x14 | CCNT | 链接计数。用于3D传输或链式传输中帧的计数。 |
| +0x18 | DSTBIDX | 目的B维度索引(字节偏移)。在1D同步传输中,用于分隔同一帧内的不同数组。 |
| +0x1C | SRCBIDX | 源B维度索引(字节偏移)。 |
| +0x20 | BCNTRLD | BCNT重载值。当BCNT减到0时,用于重载BCNT(在链式或循环传输中)。 |
| +0x24 | LINK | 链接地址。指向下一个PaRAM条目的地址,用于实现传输链。 |
关键点:PaRAM条目中的字段排列和OPT字段的位定义,必须与TPTC所期望的TR数据包格式严格匹配。TPCC在提交TR时,本质上就是将整个PaRAM条目的内容打包发送给TPTC。
3.2 通道映射:为事件分配“任务单”
64个DMA通道和8个QDMA通道并不是硬连线到固定的PaRAM条目。这种灵活性通过通道映射寄存器(TPCC_DCHMAPi和TPCC_QCHMAPj)实现。
- DMA通道映射:每个DMA通道(0-63)对应一个
DCHMAP寄存器。其中的PAENTRY字段(9位)指定该通道使用PaRAM中的哪个条目(0-127)。当该��道被触发时,TPCC就去读取PAENTRY指定的那个条目,生成TR。 - QDMA通道映射:每个QDMA通道(0-7)对应一个
QCHMAP寄存器。除了PAENTRY,它还有一个TRWORD字段(3位),指向PaRAM条目内的特定“触发字”。当CPU通过IDMA向这个“触发字”所在的地址执行写入操作时,就会自动触发一次QDMA传输。
这种设计带来了巨大的配置灵活性。例如,你可以让多个DMA通道(响应不同外设事件)共享同一套传输参数(指向同一个PaRAM条目),实现“多事件触发,同一搬运任务”。也可以为同一个物理外设准备多套参数(多个PaRAM条目),通过动态修改通道映射来切换不同的传输模式。
3.3 触发与同步机制:如何启动一次传输
TPCC支持三种DMA触发方式和两种QDMA触发方式,这是EDMA灵活性的核心。
DMA触发源(优先级从高到低):
- 事件触发:由外部外设(如McBSP的TX/RX事件)硬件信号置位事件寄存器(
TPCC_ER)的相应位。前提是该通道的事件使能寄存器(TPCC_EER)对应位也已使能。这是最常用的实时触发方式。 - 链式触发:当某个传输完成时,如果其PaRAM中设置了链使能(
TCCHEN)并指定了一个完成码(TCC),TPCC会自动置位链事件寄存器(TPCC_CER)的对应位。无需使能,直接触发。用于构建自动化的传输流水线。 - 手动触发:由CPU软件直接写事件置位寄存器(
TPCC_ESR)的相应位。无需使能,直接触发。用于软件主动发起传输。
QDMA触发源:
- 自动触发:当CPU使用IDMA向
QCHMAP寄存器所定义的“触发字”地址执行写入时,如果该QDMA通道已使能(TPCC_QEER),则自动触发一次传输。这是为CPU快速配置DMA而优化的“写即触发”模式。 - 链接触发:当对一个PaRAM条目执行链接更新(Link Update)操作,且更新的地址匹配某个QDMA通道的
QCHMAP设置时,也会触发该QDMA通道。
实操心得:优先级与“踩坑”点理解DMA三种触发源的优先级非常重要。假设你为一个通道同时使能了外部事件和手动触发,并且正在用链式传输。如果外部事件频繁发生,它总是优先被响应,可能导致你手动写入
ESR的触发信号被“淹没”而得不到及时执行。在设计复杂传输链时,需要仔细规划触发源,避免冲突。 另外,事件触发必须使能(EER),而链式和手动触发无需使能,这个区别很容易在调试时被忽略。如果配置了外部事件但传输不启动,第一个要检查的就是EER寄存器。
3.4 传输类型与同步维度:一维、二维与逻辑三维
EDMA的传输几何结构由三个维度定义:ACNT(数组内字节数)、BCNT(每帧的数组数量)、CCNT(帧数)。但硬件同步层面只支持到二维。
- 1D同步传输:每次触发(一个同步事件)传输一个数组(ACNT个字节)。这是最基本模式。例如,每次ADC转换完成事件触发,搬运一个采样点的数据(假设ACNT=4字节)。
- 地址更新:完成一个数组后,源/目的地址根据
SRCBIDX/DSTBIDX更新,指向下一个数组的起点。当一帧(BCNT个数组)传输完后,地址再根据SRCCIDX/DSTCIDX更新到下一帧的起始数组。注意:CIDX的参考点是上一帧的最后一个数组的起始地址。
- 地址更新:完成一个数组后,源/目的地址根据
- 2D同步传输:每次触发传输一整帧(BCNT个数组,每个数组ACNT字节)。这适用于搬运一个完整的二维数据块,比如一幅图像的一行。
- 地址更新:每传输完一帧,源/目的地址直接根据
SRCCIDX/DSTCIDX更新到下一帧的第一个数组的起始地址。BIDX在帧内各个数组间起间隔作用。
- 地址更新:每传输完一帧,源/目的地址直接根据
如何实现逻辑上的3D传输?通过链式(Chaining)功能。你可以配置一个2D传输(搬运一帧),在其完成时,通过链式触发自动加载下一个PaRAM条目(其中包含了更新后的源/目的地址,以及新的BCNT/ACNT参数),开始下一帧的传输。如此循环CCNT次,就实现了三维数据块(例如,连续的多帧图像)的搬运。CCNT的值通常存储在PaRAM的CCNT字段或通过链接计数控制。
3.5 事件队列与调度算法
TPCC内部有两个事件队列(Q0和Q1),每个队列可深度为16。其调度规则是理解EDMA实时行为的关键:
- 事件仲裁:当多个DMA/QDMA事件同时到来时,TPCC先用一个64:1的固定优先级编码器处理DMA事件(通道号越小优先级越高),再用一个4:1的编码器处理QDMA事件。DMA事件的优先级永远高于QDMA事件。
- 队列服务:高优先级的事件被放入事件队列等待。队列以FIFO方式服务。TPCC会优先将事件提交给空闲的TPTC。如果两个TPTC都空闲,则优先服务Q0队列,再服务Q1队列。
- 旁路路径:这是一个重要的优化。如果一个事件到达时,它所属的事件队列和目标TPTC的通道都为空,则该事件可以绕过队列,直接进入PaRAM处理逻辑,提交给TPTC。这减少了低负载时的调度延迟。但是,如果TR总线/PaRAM处理逻辑正忙,则无法使用旁路。
4. TPTC深度解析:高效执行引擎的运作细节
TPTC是“干活”的单元,它的设计目标是以最高效率执行TPCC下发的传输请求。
4.1 内部结构与流水线
TPTC内部包含多组寄存器,以实现流水线操作,这是其高性能的保障:
- 程序寄存器组:用于接收和存储来自TPCC的新TR。它只是一个缓冲,TPTC不会修改它。
- 源活动寄存器组:跟踪当前正在执行的读操作的实时状态,包括下一个要读取的源地址(
SRC)、剩余的字节数(CNT)等。 - 目的FIFO寄存器组:跟踪当前正在执行或排队等待的写操作的实时状态。之所以需要独立的“FIFO”寄存器组,是因为读写可以并行。当源端已经开始读取下一个TR的数据时,目的端可能还在处理上一个TR的写入。TPTC0支持4级这样的读写流水线,TPTC1支持2级。
传输流程:
- TPCC将TR写入TPTC的程序寄存器组。
- 当TPTC的源活动寄存器组空闲时,程序寄存器组的内容被加载到源活动寄存器组和目的FIFO寄存器组。
- 读控制器根据源活动寄存器组的
SRC和CNT,以64字节为突发单位,通过本地互连接口发起读操作,数据存入通道FIFO。 - 写控制器根据目的FIFO寄存器组的
DST和CNT,从通道FIFO取出数据,以64字节为突发单位,发起写操作。 - 读写过程中,
SRC、DST、CNT等字段会实时更新。当一个数组(ACNT)传输完成,CNT.ACNT会从CNTRLD重载,地址根据BIDX更新。当一帧(BCNT个数组)传输完成,地址根据CIDX更新。 - 整个TR(可能包含多个数组)完成后,TPTC通过完成接口通知TPCC。
4.2 传输完成与中断/链式反馈
传输完成是EDMA与CPU或其他通道交互的关键节点。
- 完成码(TCC):在PaRAM的
OPT字段中,有一个6位的传输完成码(TCC,位17:12)。这是一个用户自定义的标签。 - 完成使能:
OPT字段中还有两个关键位:TCINTEN:置1表示该传输完成时,需要产生一个中断。TCCHEN���置1表示该传输完成时,需要产生一个链式事件。
- 完成检测与映射:当TPTC完成一个TR,它会将TCC值发送回TPCC。TPCC根据这个TCC值,去设置一个64位的中断挂起寄存器(IPR)的对应位,和/或设置链事件寄存器(CER)的对应���。
- 中断产生:如果
TCINTEN=1,且CPU使能了IPR中该位对应的中断线(通过IER寄存器),则CPU会收到一个EDMA中断。CPU查询IPR即可知道是哪个TCC对应的传输完成了。 - 链式触发:如果
TCCHEN=1,TPCC会查找CER中对应TCC的位,如果该位映射到了某个DMA通道(通过CER到通道的映射),则会触发那个通道的下一次传输。这里的关键是,TCC与通道号没有固定关系。你可以让通道0的传输完成,去触发通道1的传输,只需将通道0的TCC设为X,并配置通道1由链事件X触发即可。这提供了极大的灵活性。
- 中断产生:如果
注意事项:理解“活动”与“完成”TPTC内部有多个状态位(
PROGBUSY,SRCACTV,DSTACTV,WSACTV)来指示寄存器组的忙闲状态。一个常见的误解是“DSTACTV变空闲就代表传输完成”。实际上,传输完成的定义是整个TR的所有数据都已从源端读出并写入目的端。TPTC会在此时置位TRDONE状态并发送完成信息。在调试时,应依赖TPCC的中断或链式事件来确认传输完成,而不是轮询TPTC的DSTACTV。
5. DMA vs QDMA:两种配置哲学
DMA和QDMA在传输能力上没有区别,它们的核心差异在于触发方式和配置哲学。
- DMA通道:需要显式配置。你通过CPU写一系列寄存器来设置PaRAM条目,然后通过写
ESR(手动)、等待外部事件或链式事件来触发。适用于周期性、事件驱动的传输,比如外设数据收发。 - QDMA通道:隐式触发。你仍然需要配置PaRAM条目,但触发是通过CPU向一个特定的“触发字”地址执行一次IDMA写入操作来实现的。这个写入操作本身的数据内容不重要,重要的是写入这个动作和地址。QDMA的映射寄存器(
QCHMAP)就是用来定义这个“触发地址”的。
QDMA的优势场景: 假设你需要频繁地、动态地发起一些小的、零散的DMA传输。如果使用传统DMA,每次都需要:1) 配置PaRAM(可能多个寄存器);2) 手动触发(写ESR)。步骤较多。 使用QDMA,你可以:1) 预先配置好PaRAM;2) 当需要触发时,只需用IDMA向QCHMAP定义的地址执行一次写入。IDMA是CPU内部的高效数据搬运器,这次写入本身很快。这特别适合CPU需要主动、快速发起DMA传输的场景,能减少CPU的配置开销。
选择建议:
- 固定模式、外设驱动的传输 -> 用DMA,配置好事件触发,一劳永逸。
- CPU主动、不规则发起的传输 -> 考虑QDMA,简化触发流程。
6. 实战配置指南与常见问题排查
6.1 一个典型的1D同步DMA传输配置流程
假设我们需要配置DMA通道10,每当UART收到数据(事件19)时,将数据从UART接收缓冲区(地址0x4806A000)搬运到内存中的一块区域(地址0x80000000),每次搬运4字节(ACNT=4),共搬运100次(BCNT=100,构成一帧)。
选择并配置PaRAM条目:假设我们使用PaRAM条目5。
- 写
TPCC_DCHMAP10:设置PAENTRY = 5,将通道10映射到条目5。 - 配置PaRAM条目5:
OPT:设置源/目的地址模式为递增,同步维度为1D,根据需求设置TCC(例如0x01),并决定是否使能中断(TCINTEN)或链(TCCHEN)。SRC= 0x4806A000 (UART DRR寄存器地址)DST= 0x80000000BCNT= 0x0064 (高16位BCNT=1? 这里注意:对于1D同步,每次触发搬一个数组(ACNT),但PaRAM中的BCNT字段实际包含ACNT和BCNT。通常寄存器是CNT,其低16位是ACNT,高16位是BCNT。所以这里CNT= (1 << 16) | 4?不对。需要澄清:在1D同步下,每次触发传输ACNT字节,但PaRAM中的BCNT字段指的是每帧中的数组个数。对于简单的连续搬运100次,我们可以设置ACNT=4, BCNT=100,并使用1D同步。这样每次事件触发搬运4字节,需要触发100次才能搬完一帧。或者,我们也可以使用2D同步,设置ACNT=4, BCNT=100,这样一次触发就搬运400字节。这里以1D同步为例。)- 更准确的配置:
ACNT=4,BCNT=100。CNT寄存器值应为 (100 << 16) | 4 = 0x00640004。 SRCBIDX= 4 (每次数组搬运后,源地址递增4字节,指向UART DRR寄存器,对于外设FIFO地址,通常设为0,但UART DRR是只读寄存器,读操作不会自动递增硬件指针,所以源地址应固定?这里是个关键点。对于外设寄存器作为源,地址模式通常设为“常量”,SAM=常数地址,SRCBIDX=0。)DSTBIDX= 4 (每次数组搬运后,目的地址递增4字节,在内存中连续存放)。
- 写
配置触发:
- 写
TPCC_EER:使能通道10的事件(设置bit 10为1)。 - 确认外部事件19已经正确路由到DMA通道10(这通常由系统集成或引脚复用寄存器控制,需要查阅具体芯片手册)。
- 写
启动传输:
- 外部事件(UART接收数据)发生时,TPCC的
ER[10]被置位。 - 由于
EER[10]已使能,该事件被识别为一次传输同步。 - TPCC读取PaRAM条目5,生成TR,提交给TPTC执行。
- 每次事件触发,搬运4字节。100次事件后,完成400字节的搬运。
- 外部事件(UART接收数据)发生时,TPCC的
6.2 常见问题与排查技巧实录
问题1:配置了DMA,但传输从未启动。
- 检查清单:
- 事件使能了吗?这是最常见错误。确认
TPCC_EER对应通道位已置1。 - 事件来了吗?查看
TPCC_ER寄存器,对应位是否被置位。如果没有,问题可能出在外部事件源或事件路由上。 - 通道映射正确吗?确认
TPCC_DCHMAPx中的PAENTRY指向了一个已正确配置的PaRAM条目。 - PaRAM配置正确吗?特别是
OPT字段中的同步类型、地址模式等。使用调试器或内存查看工具检查PaRAM区域的内容。 - TPTC忙吗?检查TPTC的状态寄存器(
TPTCj_TCSTAT),看PROGBUSY,SRCACTV,DSTACTV是否都为0(空闲)。如果TPTC一直忙,可能是前一个传输卡住了。
- 事件使能了吗?这是最常见错误。确认
问题2:传输启动了,但数据搬运错了位置或数量不对。
- 检查清单:
- 地址和索引:仔细核对
SRC,DST,SRCBIDX,DSTBIDX,SRCCIDX,DSTCIDX。确保索引值的单位是字节。一个常见错误是将数组元素个数当成了字节偏移。 - 计数寄存器:
CNT寄存器是BCNT和ACNT的组合。确认ACNT(低16位)和BCNT(高16位)的值符合预期。ACNT是每个数组的字节数。 - 同步维度:确认
OPT中的同步类型(1D/2D)与你的BCNT设置匹配。如果你期望每次触发搬一个数组(ACNT),应使用1D同步。如果你期望每次触发搬一整帧(BCNT*ACNT),应使用2D同步。
- 地址和索引:仔细核对
问题3:使用了链式触发,但后续传输没有自动启动。
- 检查清单:
- 前一个传输的TCC设置了吗?确保前一个传输的PaRAM中
OPT.TCC字段设置了一个值(例如0x01)。 - 前一个传输的链使能打开了吗?确保
OPT.TCCHEN位为1。 - 后一个通道的触发配置正确吗?后一个通道必须配置为由链事件触发,并且其链事件使能寄存器(
TPCC_CER)中对应TCC的位应该被映射到该通道(通常通过TPCC_CER和TPCC_CERH寄存器配置,但具体映射方式需查手册)。简单说,你需要告诉TPCC:“当TCC为0x01的传输完成时,去触发通道Y”。 - TCC冲突了吗?确保你使用的TCC值是唯一的,或者你清楚多个通道共享同一个TCC时的链式触发行为。
- 前一个传输的TCC设置了吗?确保前一个传输的PaRAM中
问题4:使能了传输完成中断,但CPU收不到中断。
- 检查清单:
- TPCC级别使能了吗?确保传输的PaRAM中
OPT.TCINTEN=1。 - 中断挂起了吗?传输完成后,查看
TPCC_IPR寄存器,对应TCC的位是否被置1。如果没有,说明TPTC未正确发送完成信号,或TPCC未正确处理。 - CPU中断使能了吗?
TPCC_IPR置位只是TPCC内部挂起。你还需要在TPCC的中断使能寄存器(TPCC_IER)中使能该中断位,并且确保该中断线已连接到CPU并被CPU全局使能。 - 中断服务程序(ISR)清除了中断吗?在ISR中,必须向
TPCC_ICR寄存器写入相应的值来清除IPR中的挂起位,否则会持续产生中断。
- TPCC级别使能了吗?确保传输的PaRAM中
问题5:使用QDMA时,向触发字地址写数据后没有触发传输。
- 检查清单:
- QDMA通道使能了吗?检查
TPCC_QEER寄存器对应位。 - 触发字地址写对了吗?确认CPU写入的地址与
TPCC_QCHMAPj寄存器中定义的地址完全匹配。这个地址是PaRAM基地址 + PAENTRY * 32 + TRWORD * 4。 - 使用的是IDMA吗?QDMA的自动触发通常要求使用IDMA(内部DMA)进行写入,而不是普通的CPU存储指令。确认你的写操作是通过IDMA通道0发起的。
- QDMA通道使能了吗?检查
掌握以上原理和排查思路,你就能驾驭IVA2.2中这套强大的EDMA系统,让它成为你嵌入式应用数据处理的得力助手,将CPU从繁重的数据搬运中彻底解放出来。
