本文仅为翻译手册,留以自己查看,若需要深入交流,可以在个人分类中查找解析与实践内容(可能未发布),或与作者联系
增强型直接内存访问(EDMA3)控制器的主要用途是为您在设备上的两个内存映射从端点之间编程的数据传输提供服务。
典型用法包括但不限于以下内容:
•服务软件驱动的分页传输(例如,从外部存储器(如SDRAM)传输到内部器件存储器,如DSP L2 SRAM)
•维护事件驱动的外设,例如串行端口
•执行各种数据结构的排序或子帧提取
•有关可通过EDMA3控制器访问的特定外设,请参见设备特定的数据手册
EDMA3控制器由两个主要模块组成:
•EDMA3通道控制器:EDMA3_CC m
•EDMA3传输控制器:EDMA3_ m_TC n
设备可以有多个EDMA3通道控制器实例,每个实例与多个EDMA3传输控制器相关联。这里'm'表示EDMA3CC实例编号,'n'表示EDMA3TC编号。有关设备中可用的EDMA3CC和EDMA3TC的数量,请参阅设备特定的数据手册。
EDMA3通道控制器用作EDMA3控制器的用户界面。EDMA3CC包括参数RAM(PaRAM),通道控制寄存器和中断控制寄存器。EDMA3CC用于对来自外围设备的传入软件请求或事件进行优先级排序,并将传输请求(TR)提交给EDMA3传输控制器。
EDMA3传输控制器负责数据移动。由EDMA3CC提交的传输请求包(TRP)包含传输上下文,基于该传输上下文,传输控制器向为给定传输编程的源和目的地地址发出读/写命令。
EDMA3通道控制器(EDMA3CC)具有以下功能:
•完全正交的转移描述
- 3个传输尺寸
- A同步传输:每个事件服务1个维度
- AB同步传输:每个事件服务2个维度
- 源和目的地的独立索引
- 链接功能允许基于单个事件进行3-D传输
•灵活的转移定义
- 增量或恒定寻址模式
- 链接机制允许自动PaRAM设置更新
- 链接允许多个传输在一个事件中执行
•以下中断生成:
- 转移完成
- 错误条件
•调试可见性
- 队列水标记/阈值
- 错误和状态记录,以方便调试
•多个DMA通道。有关每个EDMA3CC可用的DMA通道数,请参阅设备特定的数据手册
- 事件同步
- 手动同步(DSP写入事件集寄存器)
- 链同步(完成一次传输会触发另一次传输)
•多个QDMA频道。有关每个EDMA3CC可用的QDMA通道数,请参阅设备特定数据手册
- 当您写入PaRAM设置条目时,QDMA通道会自动触发
- 支持可编程DMA通道和QDMA通道到PaRAM映射
•多个PaRAM集。有关每个EDMA3CC可用的PaRAM集数量,请参阅设备特定数据手册
- 每个PaRAM集可用于DMA通道,QDMA通道或链路集
•每个事件队列有16个事件条目
•内存保护支持
- TR提交的代理内存保护
- 用于访问PaRAM和寄存器的活动内存保护
EDMA3传输控制器(EDMA3TC)具有以下功能:
•支持源和目标上具有独立索引的二维传输(EDMA3CC管理第三维)
•最多4个飞行中转移请求(TR)
•每个传输控制器相对于彼此和系统中其他主站的可编程优先级
•支持增量或恒定寻址模式传输
•中断和错误支持
•小端或大端操作
•无论Endianess如何,存储器映射寄存器(MMR)位域都是32位MMR中的固定位置
EDMA3CC的主要部分
DMA / QDMA通道逻辑:该块包含捕获可用于启动事件触发传输的外部系统或外设事件的逻辑,还包括允许配置DMA / QDMA通道的寄存器(队列映射,PaRAM条目映射)。它包括用于启用/禁用事件以及监视事件状态的不同触发类型(手动,外部事件,链接和自动触发)的所有寄存器。
•参数RAM(PaRAM):维护通道和重载参数集的参数集条目。需要使用所需通道和链接参数集的传输上下文来写入PaRAM。
•事件队列:这些构成事件检测逻辑和传输请求提交逻辑之间的接口。
•传输请求提交逻辑:该逻辑基于提交到事件队列的触发事件处理PaRAM集,并将传输请求(TR)提交给与事件队列相关联的传输控制器。
•EDMA3事件和中断处理寄存器:允许将事件映射到参数集,启用/禁用事件,启用/禁用中断条件以及清除中断。
•完成检测:该块检测EDMA3TC和/或从外设完成传输。完成传输可以选择用于链接触发新传输或断言中断。逻辑包括中断处理寄存器,用于启用/禁用中断(发送到DSP),中断状态/清除寄存器。
•存储器保护寄存器:存储器保护寄存器定义允许访问DMA通道阴影区域视图和PaRAM区域的访问(特权级别和请求者)。
其他功能包括:
•区域寄存器:区域寄存器允许将DMA资源(DMA通道和中断)分配给唯一的区域,这些区域可由独特的EDMA编程器(多核设备的使用模型)或独特的任务/线程拥有 (单核设备的使用模型)。
•调试寄存器:调试寄存器通过提供寄存器来读取队列状态,通道控制器状态和错过的事件状态,从而实现调试可见性。
QDMA和EDMA区别
触发方式不同
一旦识别出触发事件,事件类型/通道就会在相应的EDMA3CC事件队列中排队。将每个DMA / QDMA通道分配给事件队列是可编程的。每个队列都是16
当事件队列空间可用时,映射到完整队列的其他挂起事件将排队。见2.11节。
如果同时检测到不同信道上的事件,则事件基于固定优先级仲裁方案排队,其中DMA信道是比QDMA信道更高优先级的事件。
在两组频道中,编号最小的频道是最高优先级。
事件队列中的每个事件都按FIFO顺序处理。到达队列的头部时,读取与该通道相关联的PaRAM以确定传输细节。
EDMA3TC接收请求并负责传输请求包(TRP)中指定的数据移动,以及其他必要的任务,如缓冲,确保尽可能以最佳方式执行传输。
在完成当前传输时,您可能已选择接收中断或链接到另一个通道,在这种情况下,EDMA3TC在传输完成后向EDMA3CC完成检测逻辑发出完成信号。当TR离开EDMA3CC边界时,您可以选择触发完成,而不是等待所有数据传输完成。根据EDMA3CC中断寄存器的设置,完成中断产生逻辑负责为DSP产生EDMA3CC完成中断。
EDMA_TC
EDMA3TC的主要模块包括:
•DMA程序寄存器组:DMA程序寄存器组存储从EDMA3通道控制器(EDMA3CC)接收的传输请求。
•DMA源活动寄存器集:DMA源活动寄存器集存储读取控制器中当前正在进行的DM A传输请求的上下文。
•读取控制器:读取控制器向源地址发出读取命令。
•目标FIFO寄存器集:目标(DST)FIFO寄存器集存储写控制器中当前正在进行的DMA传输请求的上下文。
•写入控制器:写入控制器向目标从站发出写入命令/写入数据。
•数据FIFO:存在用于保存临时飞行中数据的数据FIFO。
•完成接口:完成接口在传输完成时将完成代码发送到EDMA3CC,并生成中断和链接事件(有关传输完成报告的更多信息,请参见第2.1.2节)。
当EDMA3TC空闲并接收到其第一个TR时,TR在DMA程序寄存器组中被接收,在那里它转换到DMA源激活集并立即设置目标FIFO寄存器。源活动寄存器组跟踪传输源端的命令,目标FIFO寄存器组跟踪传输目标端的命令。第二个TR(如果从EDMA3CC挂起)被加载到DMA程序集中,确保它可以在主动传输(源激活集中的传输)完成时尽快启动。一旦当前有效集耗尽,TR就会从DMA程序寄存器集加载到DMA源有效寄存器集以及目标FIFO寄存器集中的相应条目。
读取控制器发出由命令碎片和优化规则控制的读取命令。仅当数据FIFO具有可用于读取数据的空间时才会发出这些。发出的读命令数取决于TR传输大小。一旦在数据FIFO中读取了足够的数据,TC写控制器就开始发出写命令,以便写控制器按照命令分段和优化的规则发出最佳大小的写命令。有关命令碎片和优化的详细信息,请参见第2.12.1.2节。
DSTREGDEPTH参数(对于给定的传输控制器是固定的)确定Dst FIFO寄存器集中的条目数。条目数决定了给定TC可能的TR流水线操作量。写控制器可以管理Dst FIFO寄存器组中的条目数的写上下文。这允许读控制器继续并为后续TR发出读命令,而Dst FIFO寄存器组管理前一TR的写命令和数据。总之,如果DSTREGDEPTH为n,则读控制器能够在写控制器之前处理最多nTR。
但是,整个TR流水线操作还受数据FIFO中可用空间量的限制。
EDMA传输类型
EDMA3转移总是根据三个维度定义。图2-4显示了EDMA3传输使用的三个维度。这三个维度定义为:
•第一维或数组(A):传输中的第一维由ACNT连续字节组成。
•第二维或框架(B):传输中的第二维由ACNT字节的BCNT阵列组成。
第二维中的每个阵列传输通过使用SRCBIDX或DSTBIDX编程的索引彼此分开。
•第三维或块(C):传输中的第三维由ACNT字节的BCNT数组的CCNT帧组成。通过使用SRCCIDX或DSTCIDX编程的索引将第三维中的每个传输与先前的传输分开。
请注意,索引的参考点取决于同步类型。接收到触发/同步事件时传输的数据量由同步类型(OPT中的SYNCDIM位)控制。在这三个维度中,仅支持两种同步类型:同步传输和AB同步传输。
在A同步传输中,每个EDMA3同步事件启动第一维ACNT字节或一个ACNT字节数组的传输。换句话说,每个事件/ TR分组仅传送一个阵列的传输信息。因此,需要BCNT×CCNT事件来完全服务PaRAM集。
数组总是由SRCBIDX和DSTBIDX分隔,如图2-5所示,其中数组N的起始地址等于数组N-1的起始地址加上源(SRC)或目的地(DST)BIDX。
帧始终由SRCCIDX和DSTCIDX分隔。对于A同步传输,在帧耗尽后,通过将SRCCIDX / DSTCIDX添加到帧中最后一个数组的起始地址来更新地址。如图2-5所示,SRCCIDX / DSTCIDX是帧0阵列3的开始与帧1阵列0的开始之间的差异。
图2-5显示了n(ACNT)字节的4(BCNT)阵列的3(CCNT)帧的A同步传输。
在该示例中,总共12个同步事件(BCNT×CCNT)耗尽PaRAM集。
在AB同步传输中,每个EDMA3同步事件启动2维或一帧的传输。
换句话说,每个事件/ TR分组传送ACNT字节的BCNT阵列的整个帧的信息。
因此,需要CCNT事件来完全服务PaRAM集。
数组总是由SRCBIDX和DSTBIDX分隔,如图2-6所示。
帧始终由SRCCIDX和DSTCIDX分隔。
请注意,对于AB同步传输,在提交帧的TR之后,地址更新是将SRCCIDX / DSTCIDX添加到帧中起始数组的起始地址。
这与A-synchronized传输不同,其中通过将SRCCIDX / DSTCIDX添加到帧中最后一个数组的起始地址来更新地址。
有关参数集更新的详细信息,请参见第2.3.6节。
图2-6显示了n(ACNT)字节的4(BCNT)阵列的3(CCNT)帧的AB同步传输。
在这个例子中,总共3个同步事件(CCNT)耗尽了PaRAM集; 也就是说,总共3个传输的4个阵列各自完成传输。
PA RAM
EDMA3控制器是基于RAM的架构。DMA或QDMA通道的传输上下文(源/目标地址,计数,索引等)在EDMA3CC内的参数RAM表中编程,称为PaRAM。PaRAM表被分段为多个PaRAM集。每个PaRAM集包括8个4字节PaRAM集条目(每个PaRAM集合总共32个字节),其中包括典型的DMA传输参数,如源地址,目标地址,传输计数,索引,选项等。
PaRAM结构支持灵活的乒乓,循环缓冲,通道链接和自动重载(链接)。前n个PaRAM集直接映射到DMA通道(其中n是特定器件的EDMA3CC中支持的DMA通道数)。剩余的PaRAM集可用于链接条目或与QDMA通道相关联。此外,如果未使用DMA通道,则与未使用的DMA通道关联的PaRAM集也可用于链接条目或QDMA通道。
PaRAM的内容包括:
•多个PaRAM集。有关支持的PaRAM集数量及其地址,请参见特定于设备的数据手册。
•任何PaRAM条目都可用于DMA,QDMA或链接集
•默认情况下,所有通道都映射到PaRAM集0.这些应重新映射使用前。
每个外设都有寄存器,EDMA的寄存器如下:
ESEL:设置EDMA事件与通道的映射关系(有些dsp型号是固定映射的);
PQSR:表示状态,表示传输寄存器在每个优先级水平上是否为空;
CIPR:表示通道中断待定状态;
CIER:使能或屏蔽通道中断;
CCER:使能或屏蔽通道连锁;
ER:表示状态,表示捕获的事件;
EER:使能或屏蔽ER中的每一个事件;
ECR:清除已触发的事件;
ESR:触发传输请求。
PRIV 编程此PaRAM集的主机/ DSP / DMA的权限级别(管理程序与用户)。当写入PaRAM集的任何部分时,使用EDMA3主机的权限值设置该值。0h =用户级别权限1h =超级用户级别权限
PRIVID 对此PaRAM集进行编程的外部主机/ DSP / DMA的权限标识。当写入PaRAM集的任何部分时,使用EDMA3主机的权限标识值设置该值。值= 0-Fh
ITCCHEN 中间传输完成链接启用。
0h =禁用中间传输完成链接1h =启用中间传输完成链接启用后,链接事件寄存器(CER / CERH)位在每个中间链接传输完成时设置(在PaRAM集合中的每个中间TR完成时,除外 PaRAM集中的最终TR)。CER或CERH中设置的位(位置)是指定的TCC值。
TCCHEN 传输完整链接启用。
0h =禁用传输完成链接1h =启用传输完成链接启用后,链接事件寄存器(CER / CERH)位在最终链接传输完成时设置(完成PaRAM集中的最终TR)。CER或CERH中设置的位(位置)是指定的TCC值。
ITCINTEN 中间传输完成中断使能。
0h =禁用中间传输完成中断1h =使能中间传输完成 中断使能时,每次中间传输完成时中断暂挂寄存器(IPR / IPRH)位置1(PaRAM集中的每个中间TR完成后,除了 PaRAM集中的最终TR)。IPR或IPRH中设置的位(位置)是指定的TCC值。
要为DSP生成完成中断,必须设置相应的IER [TCC] / IERH [TCC]位。
TCINTEN传输完成中断使能。
0h =禁止传输完成中断1h =使能传输完成中断使能时,中断未决寄存器(IPR / IPRH)位在传输完成时置1(在PaRAM集中最终TR完成时)。IPR或IPRH中设置的位(位置)是指定的TCC值。要为DSP生成完成中断,必须设置相应的IER [TCC] / IERH [TCC]位。
TCC 传输完成code。该6位代码设置链接使能寄存器(CER [TCC] / CERH [TCC])中的相关位用于链接或中断暂挂寄存器(IPR [TCC] / IPRH [TCC])中断。值= 0-3Fh
TCCMODE 指示传输被认为已完成链接和中断生成的点。
0h =正常完成:数据传输后认为传输已完成。
1h =提前完成:在EDMA3CC向EDMA3TC提交TR后,认为转移已完成。
当触发中断/链时,TC可能仍在传输数据。
FWID FIFO宽度。适用于SAM或DAM设置为常量寻址模式的情况。
STATIC 静态集。
0h =设置不是静态的。提交TR后,PaRAM集将更新或链接。值为0应用于DMA通道和QDMA传输链接列表中的非最终传输。
1h = Set是静态的。提交TR后,PaRAM集不会更新或链接。值1应用于隔离QDMA传输或QDMA传输链接列表中的最终传输。
SYNCDIM 选择A模式或AB模式
DAM 目标地址模式。
0h =增量(INCR)模式。数组内的目标寻址递增。目的地不是FIFO。
1h =恒定寻址(CONST)模式。达到FIFO宽度时,数组内的目标寻址会回绕。
SAM
32位源地址参数指定源的起始字节地址。对于增量模式下的SAM,EDMA3没有对齐限制。对于恒定寻址模式下的SAM,必须将源地址编程为与256位对齐地址对齐(地址的5 LSB必须为0)。如果违反此规则,EDMA3TC将发出错误信号。
32位目标地址参数指定目标的起始字节地址。对于增量模式下的DAM,EDMA3没有对齐限制。对于恒定寻址模式下的DAM,必须将目标地址编程为与256位对齐的地址对齐(地址的5 LSB必须为0)。如果违反此规则,EDMA3TC将发出错误信号。
EDMA3CC提供了一种称为链接的机制,用于在新的PaRAM集合的自然终止(即,在计数字段递减为0之后)重新加载当前PaRAM集合。16位参数LINK指定PaRAM中的字节地址偏移量,EDMA3CC在链接期间从中加载/重新加载下一个PaRAM集。
您必须将链接地址编程为指向有效的对齐32字节PaRAM集。LINK字段的5个LSB应清除为0。
EDMA3CC忽略LINK条目的高2位,允许程序员灵活地将链接地址编程为绝对/字面字节地址或使用PaRAM基础相对偏移地址。因此,如果您使用范围从4000h到7FFFh的文字地址,它将被视为PaRAM基础相对值0000h到3FFFh。
您应该确保正确编程LINK字段,以便从PaRAM地址请求链接更新,该地址落在设备上可用的PaRAM地址范围内。
RSVD
Null PaRAM Set
空PaRAM集定义为PaRAM集,其中所有计数字段(ACNT,BCNT和CCNT)被清除为0.如果与通道关联的PaRAM集是NULL集,则当由EDMA3CC服务时,该位对应在相关的事件遗漏寄存器(EMR,EMRH或QEMR)中设置到通道。该位保持在相关的辅助事件寄存器(SER,SERH或QSER)中。这意味着EDMA3CC会忽略同一通道上的任何未来事件,并且您需要清除该通道的SER,SERH或QSER位。这被视为错误条件,因为在配置为空传输的通道上不期望事件。有关SER和EMR寄存器的更多信息,请分别参见第4.2.6.8节和第4.2.2.1节。
Dummy PaRAM Set
伪PaRAM集被定义为PaRAM集,其中至少一个计数字段(ACNT,BCNT或CCNT)被清除为0并且至少一个计数字段是非零的。
如果与通道关联的PaRAM集是虚设置,那么当由EDMA3CC服务时,它不会在事件未命中寄存器(EMR,EMRH或QEMR)中设置与通道(DMA / QDMA)对应的位和 辅助事件寄存器(SER,SERH或QSER)位被清除,类似于正常传输。
该频道的未来事件得到了服务。
虚拟传输是0字节的合法传输。
Parameter Set Updates
当针对给定的DMA / QDMA通道及其对应的PaRAM集提交TR时,EDMA3CC负责在预期下一个触发事件时更新PaRAM集。对于非最终事件,这包括地址和计数更新;对于最终事件,这包括链接更新。
更新的特定PaRAM设置条目取决于信道的同步类型(A同步或B同步)和PaRAM集的当前状态。B更新是指在提交连续TR之后在A-同步传输的情况下BCNT的递减。C更新是指在提交ACNT字节传输的BCNT TR之后,在A同步传输的情况下CCNT的递减。对于AB同步传输,C更新是指在提交每个传输请求后递减CCNT。
请注意,PaRAM更新仅适用于将下一个传输请求正确提交给EDMA3TC所需的信息。在传输控制器中移动数据时发生的更新将在传输控制器中进行跟踪,详见第2.12节。对于A同步传输,EDMA3CC始终为ACNT字节提交TRP(BCNT = 1且CCNT = 1)。对于AB同步传输,EDMA3CC总是为ACNT字节的BCNT阵列(CCNT = 1)提交TRP。EDMA3TC负责根据ACNT和FWID(在OPT中)更新阵列中的源地址和目标地址。对于AB同步传输,EDMA3TC还负责根据SRCBIDX和DSTBIDX更新阵列之间的源地址和目标地址。
Linking Transfers
EDMA3CC提供了一种称为链接的机制,它允许从PaRAM存储器映射内的位置(对于DMA和QDMA通道)重新加载整个PaRAM集。链接对于维护乒乓缓冲区,循环缓冲以及无DSP干预的重复/连续传输特别有用。完成传输后,将使用16位链接地址字段(当前参数集)指向的参数集重新加载当前传输参数。仅当OPT中的STATIC位清零时才会发生链接。
在当前PaRAM设置事件参数用尽之后发生链接更新。当EDMA3通道控制器提交了与PaRAM集相关的所有传输时,事件的参数将耗尽。
根据OPT和LINK字段中STATIC位的状态,对空和虚拟传输进行链路更新。在两种情况下(空或虚),如果LINK的值是FFFFh,则将空PaRAM集(全0和LINK设置为FFFFh)写入当前PaRAM集。同样,如果LINK设置为FFFFh以外的值,则LINK指向的相应PaRAM位置将复制到当前PaRAM集。
一旦事件满足通道完成条件,位于链接地址的传输参数将加载到当前DMA或QDMA通道的相关参数集中。EDMA3CC从LINK指定的PaRAM集中读取整个PaRAM集(8个字),并将所有8个字写入与当前通道关联的PaRAM集。图2-9显示了链接传输的示例。
PaRAM中设置的任何PaRAM都可以用作链接/重载参数集;但是,如果禁用与映射到该PaRAM集的通道隔离的同步事件,则建议仅与外设同步事件关联的PaRAM集(参见第2.6节)用于链接。
链接到自身传输复制了自动初始化的行为,这有助于使用循环缓冲和重复传输。在EDMA3通道耗尽其当前PaRAM集后,它将从另一个PaRAM集重新加载所有参数集条目,该PaRAM集使用与原始PaRAM集相同的值进行初始化。图2-10显示了链接到自身转移的示例。这里,PaRAM集合255具有指向参数集255(链接到自身)的地址的链接字段。
如果SAM或DAM设置为1(常量寻址模式)(极少使用),则源或目标地址必须分别与256位对齐地址对齐,相应的BIDX应为32字节(256位)的偶数倍。EDMA3CC在此处无法识别错误,但如果不是这样,则EDMA3TC会发出错误。见2.12.3节。
EDMA3控制器不使用元素大小和元素索引。相反,所有转移都是根据所有三个维度来定义的:ACNT,BCNT和CCNT。通过将ACNT编程为元素的大小并且将BCNT编程为需要传输的元素的数量来逻辑地实现元素索引传输。例如,如果您有16位数据和256个必须传输到串行端口的样本,则只能通过编程ACNT = 2(2个字节)和BCNT = 256来完成此操作。
2.4
使用EDMA3通道控制器可以通过多种方式启动编程数据传输。
DMA通道上的传输由三个源启动。
它们列出如下:“事件触发的传输请求(这是EDMA3的更典型用法):外围设备,系统或外部生成的事件触发传输请求。
“手动触发的传输请求:DSP通过将1写入事件设置寄存器(ESR / ESRH)中的相应位来手动触发传输。
- 链接触发转移请求:在完成另一次转移或子转移时触发转移。
QDMA频道上的转移由两个来源发起。它们如下:“自动触发传输请求:写入编程的触发字会触发传输。
链接触发的传输请求:写入触发字会在发生链接时触发传输。
事件触发的传输请求
当从外设或器件引脚置位事件时,它将被锁存在事件寄存器的相应位中(ER.E n = 1)。
如果启用了事件启用寄存器(EER)中的相应事件(EER.E n = 1),则EDMA3CC会在适当的事件队列中对事件进行优先级排序和排队。
当事件到达队列的头部时,将评估其作为传输请求提交给传输控制器。
如果PaRAM集有效(不是NULL集),则传输请求包(TRP)被提交给EDMA3TC并且ER中的E n位被清除。
此时,EDMA3CC可以安全地接收新事件。
如果与通道关联的PaRAM集是NULL集(参见第2.3.3节),则不提交传输请求(TR),并清除ER中相应的E n位,同时在事件中设置相应的通道位 未命中寄存器(EMR.E n = 1)表示由于空TR被服务而丢弃了该事件。
良好的编程实践应包括在重新触发DMA通道之前清除事件遗漏错误。
收到事件时,无论EER.E n的状态如何,都会设置事件寄存器中的相应事件位(ER.E n = 1)。
如果在收到外部事件时禁用事件(ER.E n = 1且EER.E n = 0),则ER.E n位保持置1。
如果随后启用了事件(EER.E n = 1),则EDMA3CC处理待处理事件并处理/提交TR,之后清除ER.E n位。
如果正在处理事件(优先级或在事件队列中)并且在原始清除之前收到同一频道的另一个同步事件(ER.E n!= 0),则第二个事件被注册为错过 在事件丢失寄存器的相应位中的事件(EMR.E n = 1)。
手动触发
通过DSP(或任何EDMA编程器)对事件集寄存器(ESR)的写入来启动DMA传输。
将1写入ESR中的事件位会导致事件在适当的事件队列中被优先化/排队,而不管EER.E n位的状态如何。
当事件到达队列的头部时,将评估其作为传输请求提交给传输控制器。
与事件触发的传输一样,如果与通道关联的PaRAM集有效(它不是空集),则TR将提交给关联的EDMA3TC,并且可以再次触发通道。
如果与通道关联的PaRAM集是NULL集(参见第2.3.3节),则不提交传输请求(TR),并清除ER中相应的E n位,同时在事件中设置相应的通道位 未命中寄存器(EMR.E n = 1)表示由于空TR被服务而丢弃了该事件。
良好的编程习惯应包括在重新触发DMA通道之前清除事件遗漏错误。
如果正在处理事件(优先级或在事件队列中),则在原始清除之前通过写入事件集寄存器(ESR.E n = 1)的相应通道位手动设置相同的通道( ESR.E n = 0),然后第二个事件被注册为事件遗漏寄存器(EMR.E n = 1)的相应位中的遗漏事件。
完成传输时触发传输
链接是一种机制,通过该机制,一次传输的完成会自动为另一个频道设置事件。
当检测到链接完成代码时,其值由传输完成代码(与通道关联的PaRAM集的OPT中的TCC [5:0])决定,它将导致链接事件寄存器中的相应位( CER)待定(CER.E [TCC] = 1)。
一旦在CER中设置了一个位,EDMA3CC就会在适当的事件队列中对事件进行优先级排序。
当事件到达队列的头部时,将评估其作为传输请求提交给传输控制器。
与事件触发的传输一样,如果与通道关联的PaRAM集有效(它不是空集),则TR将提交给关联的EDMA3TC,并且可以再次触发通道。
如果与通道关联的PaRAM集是NULL集(参见第2.3.3节),则不提交传输请求(TR)并清除CER中相应的En位,同时在事件未命中设置相应的通道位 寄存器(EMR.E n = 1)表示由于空TR被服务而丢弃了该事件。
在这种情况下,必须先清除错误条件,然后才能重新触发DMA通道。
良好的编程实践可能包括在重新触发DMA通道之前清除事件遗漏错误。
如果正在处理(优先排序或排队)链接事件,并且在原始清除之前接收到相同通道的另一个链接事件(CER.E n!= 0),则第二个链接事件被注册为错过事件。
事件丢失寄存器的相应通道位(EMR.E n = 1)。
2.5
当提交所需数量的传输请求时(基于接收同步事件的数量),完成给定通道的参数集。对于两种同步类型,以及在提交最终TR之前设置的PaRAM的状态,表2-6中显示了非空/非虚拟传输的预期TR数。当计数(BCNT和/或CCNT)为此值时,下一个TR将导致:
•最终链接或中断代码由传输控制器发送。
•链接更新(链接到null或其他有效链接集)。
必须使用特定的传输完成代码(TCC)以及其他OPT字段(TCCHEN,TCINTEN,ITCCHEN和ITCINTEN位)对PaRAM OPT字段进行编程,以指示是否将完成代码用于生成链式事件或/ 并在传输完成时产生中断。
编程的特定TCC值(6位二进制值)指示链事件寄存器(CER [TCC])和/或中断挂起寄存器(IPR [TCC])中的哪64位设置。
有关中断的详细信息,请参见第2.9节;有关链接的详细信息,请参见第2.8节。
您还可以选择性地编程传输控制器是否在参数集(TCCHEN或TCINTEN)的最终传输请求(TR)完成时发送回完成代码,除了参数集的最终传输请求(TR)之外的所有请求(ITCCHEN或 ITCINTEN),或参数集的所有TR(两者)。
有关链接(中间/最终链接)的详细信息,请参见第2.8节;有关中间/最终中断完成的详细信息,请参见第2.9节。
EDMA3通道控制器和传输控制器之间存在完成检测接口。
该接口将信息从传输控制器发送回信道控制器,以指示特定传输已完成。
所有DMA / QDMA PaRAM集还必须指定链接地址值。
对于乒乓缓冲区等重复传输,链接地址值应指向另一个预定义的PaRAM集。
或者,非重复传输应将链接地址值设置为空链接值。
空链接值定义为FFFFh。
在正常完成模式(OPT中的TCCMODE = 0)时,当EDMA3通道控制器从EDMA3传输控制器接收完成代码时,认为传输或子传输完成。在此模式下,通道控制器的完成代码在收到来自目标外设的信号后由传输控制器发布。正常完成通常用于生成中断,以通知DSP一组数据已准备好进行处理。
在早期完成模式(OPT中的TCCMODE = 1)中,当EDMA3通道控制器将传输请求(TR)提交给EDMA3传输控制器时,认为传输完成。在此模式下,通道控制器在内部生成完成代码。早期完成通常对链接有用,因为它允许后续传输被链接触发,而先前的传输仍在传输控制器内进行,从而最大化传输集的总吞吐量。
这是早期完成的变体。虚拟或空完成与虚拟集(第2.3.4节)或空集(第2.3.3节)相关联。在这两种情况下,EDMA3通道控制器都不会向EDMA3传输控制器提交相关的传输请求。但是,如果set(dummy / null)的OPT字段被编程为返回完成代码(中间/最终中断/链接完成),那么它将在中断挂起寄存器(IPR / IPRH)或链式事件寄存器中设置相应的位(CER / CERH)。通道控制器使用内部早期完成路径在内部返回完成代码(即,EDMA3CC生成完成代码)。
2.6
大多数DMA通道都与特定的硬件外设事件相关联,因此允许来自设备外设或外部硬件的事件触发传输。
DMA通道通常在接收到事件时请求数据传输(除了手动触发,链触发和其他传输)。
每个同步事件传输的数据量取决于信道的配置(ACNT,BCNT,CCNT等)和同步类型(A同步或AB同步)。
事件与频道的关联是固定的。
每个DMA通道都有一个与之关联的特定事件。
有关与每个可编程DMA通道关联的同步事件,请参阅特定于设备的数据手册以确定事件到通道映射。
在应用程序中,如果某个通道未使用关联的同步事件,或者它没有关联的同步事件(未使用),则该通道可用于手动触发或链接触发的传输,链接/重新加载,或作为 QDMA频道。
DMA通道编号和PaRAM集之间的映射是可编程的。EDMA3CC中的DMA通道n映射寄存器(DCHMAP n)提供可编程性,允许您将DMA通道映射到PaRAM存储器映射中的任何PaRAM集。图2-11说明了DCHMAP的使用。每个通道有一个DCHMAP寄存器。
2.7
EDMA3通道控制器(EDMA3CC)将其地址空间划分为多个区域。将各个信道资源分配给特定区域,其中每个区域通常被分配给特定的EDMA编程器。.
EDMA3CC存储器映射寄存器分为三大类:1。全局寄存器2.全局区域通道寄存器3.阴影区域通道寄存器全局寄存器位于EDMA3CC存储器映射中的单个/固定位置。这些寄存器控制EDMA3资源映射并提供调试可见性和错误跟踪信息。有关EDMA3CC存储器映射,请参见特定于器件的数据手册。
通道寄存器(包括DMA,QDMA和中断寄存器)可通过全局通道区域地址范围或阴影n通道区域地址范围访问。例如,事件启用寄存器(EER)在全局区域寄存器空间中在偏移1020h处可见,或者在区域0处偏移2020h处的区域地址,对于区域1而言是2220h,对于区域7而言是偏移2E20h。
可通过阴影区域地址空间(IEVAL n除外)访问的基础控制寄存器位由DMA区域访问启用寄存器(DRAE m)和QDMA区域访问启用寄存器(QRAE m)控制。表2-7列出了阴影区memory-map中的寄存器。有关完整的全局和阴影区域存储器映射,请参阅EDMA3CC存储器映射(表4-1)。
对于每个EDMA3阴影区域(和相关的存储器映射),存在与阴影区域相关联的一组寄存器,其允许DMA / QDMA通道和中断完成代码与该区域的关联。这些寄存器是按区域用户编程的,用于将DMA / QDMA通道和TCC值的所有权分配给一个区域。
•DRAE m和DRAEH m:每个阴影区域都有一个寄存器对。每个寄存器对中的位数与DMA通道的数量相匹配。需要对这些寄存器进行编程,以将DMA通道和中断(或TCC代码)的所有权分配给相应的区域。通过阴影区域地址映射对DMA事件寄存器和中断寄存器的访问通过DRAE / DRAEH对进行过滤。相应的DRAE(H)位中的值1意味着可以访问相应的DMA /中断通道;相应的DRAE(H)位中的值为0会强制丢弃写入,并为读取返回值0。
•MPPA n和MPPAG:每个区域都有一个寄存器。该寄存器定义了允许区域内存映射寄存器的特权级别,请求者和访问类型。
应用程序通常将DMA / QDMA通道(以及因此给定的位位置)唯一分配给给定区域。
阴影区域的使用允许通过设置或清除DRAE / QRAE寄存器中的位来限制对系统中任务的EDMA3资源(DMA通道,QDMA通道,TCC,中断)的访问。如果某个区域需要对任何给定通道/ TCC代码进行独占访问,则只有该区域的DRAE / QRAE应具有相关的位集。
除了EDMA3CC全局完成中断之外,还有一个额外的完成中断(EDMA3CC_INT n,其中n表示阴影区域编号),它与每个阴影区域相关联。对于多核器件,各种影子区域中断可能与不同内核的中断控制器相关联。对于单核设备,所有阴影区中断都将路由到设备中断控制器。有关设备中断控制器的阴影区域中断连接,请参见特定于设备的数据手册。与每个阴影区域相关联的DRAE充当辅助中断启用以及用于相应阴影区域中断的中断启用寄存器(IER)。
有关中断的更多信息,请参见第2.9节。
2.8
EDMA3的通道链接功能允许完成EDMA3通道传输以触发另一个EDMA3通道传输。目的是允许您通过一个事件发生链接多个事件。
链接与链接不同(第2.3.7节)。EDMA3链接功能使用链接参数集重新加载当前通道参数集。EDMA3链接功能不会修改或更新任何通道参数集;它为链接通道提供同步事件(有关链触发传输请求,请参见第2.4.1.3节)。
链接在当前频道的最终传输完成或中间传输完成或两者中实现。考虑链接到通道n所需的通道m(DMA / QDMA)。需要将通道号n编程到通道m通道选项参数(OPT)设置的TCC位中。
•如果启用了最终传输完成链接(OPT中的TCCHEN = 1),则在通道m的最后一次传输请求提交(提前完成)或完成(正常完成)之后发生链触发事件。
•如果启用了中间传输完成链接(OPT中的ITCCHEN = 1),则在通道m的每个中间传输请求提交(提前完成)或完成(正常完成)之后发生链触发事件。
•如果启用了最终和中间传输完成链(TCCHEN = 1且OPT中的ITCCHEN = 1),则在提交(提前完成)或完成(正常完成)通道m的每个传输请求之后发生链触发事件。。
2.9
EDMA3CC负责为DSP生成传输完成中断。EDMA3为每个阴影区域生成一个完成中断,并为代表所有DMA / QDMA通道的全局区域生成一个完成中断。各种控制寄存器和位字段有助于生成EDMA3中断。
对于给定的DMA / QDMA通道,软件架构应使用全局中断或阴影中断,但不能同时使用两者。
传输完成代码(TCC)值直接映射到中断暂挂寄存器(IPR / IPRH)的位。例如,如果TCC = 10 0001b,则在传输完成后设置IPRH [1],如果为DSP启用了完成中断,则会导致向DSP产生中断。有关启用EDMA3传输完成中断的详细信息,请参见第2.9.1.1节。
当返回完成代码时(由于早期或正常完成),如果在通道选项参数(OPT)中为与PaRAM集相关联的传输完成中断(最终/中间)启用,则会设置IPR / IPRH中的相应位随着转移。
传输完成代码(TCC)可以编程为DMA / QDMA通道的任何值。不需要存在信道号和传输完成码值之间的直接关系。这允许具有相同传输完成码值的多个信道使DSP对不同信道执行相同的中断服务例程(ISR)。
通道选项参数(OPT)中的TCC字段是一个6位字段,可以编程为0-64之间的任何值。对于具有16/32 DMA通道的器件,TCC应具有0到15/31之间的值,以便在IPR中设置适当的位(0到15/31)(并且可以在启用IER时中断DSP)寄存器位(0-15 / 31))。
如果在阴影区域的上下文中使用该通道并且您打算声明阴影区域中断,则确保在IER / IERH和相应阴影区域的DMA区域访问寄存器中启用与TCC代码对应的位(DRAE / DRAEH)
2.9.1.1
要使EDMA3通道控制器向外部世界断言传输完成,必须在EDMA3CC中启用中断。这是在相关PaRAM集的OPT中设置TCINTEN和ITCINTEN位的补充。
EDMA3通道控制器具有中断使能寄存器(IER / IERH),IER / IERH中的每个位位置用作相应中断挂起寄存器(IPR / IPRH)的主要使能位。
所有中断寄存器(IER,IESR,IECR和IPR)可以从全局DMA通道区域操作,也可以通过DMA通道阴影区域操作。阴影区域提供了全局区域中同一组物理寄存器的视图。
EDMA3通道控制器具有分层完成中断方案,该方案使用一组中断挂起寄存器(IPR / IPRH)和一组中断使能寄存器(IER / IERH)。可编程DMA区域访问使能寄存器(DRAE / DRAEH)提供第二级中断屏蔽。全局区域中断输出基于IER提供的启用掩码进行门控。
区域中断输出由IER和与该区域相关联的特定DRAE / DRAEH门控。
见图2-13。
通过将1写入中断暂挂清除寄存器(ICR / ICRH)中的相应位,可以清除锁存到中断暂挂寄存器(IPR / IPRH)的传输完成中断。例如,向ICR.E0写入1将清除IPR.E0中的挂起中断。
2.9.2
完成传输(早期或正常完成)后,EDMA3通道控制器根据传输完成代码的规定设置中断暂挂寄存器(IPR / IPRH)中的相应位。如果完成中断已正确启用,则DSP进入完成中断被置位时的中断服务程序(ISR)。
在服务中断之后,ISR应清除IPR / IPRH中的相应位,从而能够识别未来的中断。当所有IPR / IPRH位清零时,EDMA3CC仅断言额外的完成中断。
当一个中断被服务时,许多其他传输完成可能导致在IPR / IPRH中设置附加位,从而导致额外的中断。IPR / IPRH中的每个比特可能需要不同类型的服务;因此,ISR可以检查所有挂起的中断并继续,直到所有发布的中断都得到适当的服务。
EDMA3CC具有存在于全局区域和每个阴影区域中的中断评估寄存器(IEVAL)。阴影区域中的寄存器是DMA通道阴影区域存储器映射中唯一不受DMA区域访问启用寄存器(DRAE / DRAEH)设置影响的寄存器。如果任何使能中断(通过IER / IERH)仍处于未决状态(IPR / IPRH),则将1写入与特定阴影区域关联的寄存器中的EVAL位会导致相关区域中断(全局或阴影)产生脉冲。如果软件架构选择不使用所有中断,则该寄存器确保DSP不会错过中断(或与阴影区域相关联的EDMA3主机)。有关在EDMA3中断服务程序(ISR)中使用IEVAL的信息,请参见第2.9.2.2节。
2.9.4
EDMA3CC错误寄存器提供区分错误条件(错过事件,超出阈值等)的功能。此外,设置这些寄存器中的错误位会导致EDMA3CC错误中断。如果在器件中断控制器中使能了EDMA3CC错误中断,则它允许DSP处理错误条件。
EDMA3CC具有单个错误中断(EDMA3_CC m_ERRINT),该中断针对所有EDMA3CC错误条件而置位。有四种情况会导致错误中断产生脉冲:•DMA错过事件:适用于所有DMA通道。DMA丢失事件被锁存在事件丢失寄存器(EMR / EMRH)中。
•QDMA错过事件:适用于所有QDMA频道。QDMA漏报事件被锁存在QDMA事件遗漏寄存器(QEMR)中。
•阈值超过:适用于所有事件队列。它们被锁存在EDMA3CC错误寄存器(CCERR)中。
•TCC错误:对于预期返回完成代码的未完成传输请求(OPT中的TCCHEN或TCINTEN位设置为1)超过n-1的最大限制,其中n是EDMA3CC支持的DMA通道数。它也被锁存在EDMA3CC错误寄存器(CCERR)中。
图2-14说明了EDMA3CC错误中断产生操作。
如果由于任何错误条件而在错误寄存器中设置了任何位,则EDMA3_CC m_ERRINT始终置位,因为没有用于屏蔽这些错误事件的启用。与传输完成中断类似,仅当错误中断条件从没有设置错误的状态转换到设置至少一个错误位的状态时,错误中断也是脉冲的。如果在清除原始错误位之前锁存了其他错误事件,则EDMA3CC不会产生额外的中断脉冲。
为了减轻软件负担,类似于中断评估寄存器(IEVAL),有一个错误评估寄存器(EEVAL),允许重新评估未决的设置错误事件/位。这可以使用,以便DSP不会错过任何错误事件。
2.10
EDMA3通道控制器支持两种内存保护:主动和代理。
active
active存储器保护功能允许或阻止(通过任何EDMA3编程器)对EDMA3CC寄存器的读写访问(基于您编程的权限特性)。通过一组内存保护权限属性(MPPA)寄存器实现活动内存保护。
八个阴影区域中的每一个都具有关联的MPPA寄存器(MPPA n),其定义了允许到区域资源的特定请求者和请求的类型。
全局通道区域也受内存映射寄存器(MPPAG)保护。
代理存储器保护允许由给定EDMA3编程器编程的EDMA3传输使其权限通过EDMA3TC传输。权限与读取事务一起传递到源,写入事务传递到目标端点。当写入PaRAM集的任何部分时,通道选项参数(OPT)中的PRIV位和PRIVID位分别使用EDMA3编程器的PRIV值和PRIVID值进行设置。
事件队列
事件队列是EDMA3通道控制器的一部分。事件队列形成EDMA3CC中的事件检测逻辑与EDMA3CC的传输请求(TR)提交逻辑之间的接口。每个队列深度为16个条目;因此,每个事件队列最多可以排队16个事件。如果有超过16个事件,则在事件队列中找不到位置的事件将保留在关联的事件寄存器中,并且DSP不会停止。
EDMA3CC中的事件队列数决定了连接到EDMA3CC的传输控制器的数量。默认情况下,队列和传输控制器之间存在一对一映射。因此,与Q0中的事件相关联的传输请求(TR)被提交给TC0。同样,与Q1中事件相关的传输请求也会提交给TC1,依此类推。
赢得针对其他DMA和/或QDMA待决事件的优先级的事件被放置在适当事件队列的尾部。每个事件队列按FIFO顺序进行服务。一旦事件到达其队列的头部并且相应的传输控制器准备好接收另一个TR,则该事件被排队并且对应于所述出队事件的PaRAM集被处理并作为传输请求分组(TRP)提交。到相关的EDMA3传输控制器。
较低编号的队列具有比较高编号的队列更高的出队优先级。例如,Q0的优先级高于Q1,如果Q0和Q1都至少有一个事件条目,并且如果TC0和TC1都可以接受传输请求,则Q0中的事件首先被排队并且其关联的PaRAM集被处理并且作为转移请求(TR)提交给TC0。
有关系统级性能注意事项,请参见第2.11.4节。通过访问事件队列条目寄存器(Q xE y),所有事件队列中的所有事件条目都是软件可读的(不可写)。每个事件条目寄存器根据事件类型(手动,事件,链接或自动触发)和事件编号来表征排队事件。有关队列事件条目寄存器中位字段的说明,请参见第4.2.4.1节。
每个DMA通道和QDMA通道都是独立编程的,使用DMA队列号寄存器(DMAQNUM n)和QDMA队列号寄存器(QDMANUM)映射到特定队列。DMA / QDMA通道的映射对于实现EDMA的期望性能水平至关重要,最重要的是满足实时期限。见2.11.4节。
每个事件队列有16个条目。这16个条目以循环FIFO方式管理。所有事件队列的所有事件队列条目都是事件队列条目寄存器(Q xE y)可读的软件。另外,对于每个队列,存在队列状态寄存器(QSTAT n)。
这些寄存器提供用户可见性,在调试涉及多个事件和事件源的实时问题(通常是事后)时可能会有所帮助。
使用EDMA3CC存储器映射寄存器读取事件队列中的16个条目中的每一个。通过读取事件队列,您可以看到EDMA3在给定队列上处理的最后16个TR的历史记录。这提供了用户/软件可见性,有助于调试涉及多个事件和事件源的实时问题(通常是事后验证)。
事件队列条目寄存器(Q xE y)唯一标识特定事件类型(事件触发,手动触发,链触发和QDMA事件)以及队列中的事件编号(对于DMA / QDMA通道)或已被排队(通过队列)。
队列状态寄存器(QSTAT n)包括起始指针(STRTPTR)的字段,该字段为事件的头条目提供偏移。它还包括NUMVAL字段,该字段提供在给定时刻驻留在事件队列中的有效条目的总数。STRTPTR字段可用于适当地索引到16个事件条目中。从STRTPTR开始的NUMVAL条目数表示仍在相应队列中排队的事件。可以读取剩余的条目以确定哪些事件已经被排队并提交给相关的传输控制器。
EDMA3CC事件队列包括水印/阈值逻辑,允许您跟踪所有事件队列的最大使用情况。这对于调试可能由给定EDMA3事件队列上的行头阻塞导致的实时截止时间违规非常有用。
您可以通过编程队列水印阈值A寄存器(QWMTHRA)中的阈值(0到15之间)来编程可以在事件队列中排队的最大事件数。最大队列使用率主动记录在队列状态寄存器(QSTAT n)的水印(WM)字段中,该字段根据有效条目数量的比较不断更新,这在QSTAT n和NUMSTAL位中也可见。最大条目数(QSTAT中的WM位)。
如果超出队列使用,则在EDMA3CC寄存器中可以看到此状态:通道控制器错误寄存器(CCERR)中的QTHRXCD n位和QSTAT n中的THRXCD位,其中n代表事件队列号。在CCERR中设置的任何位也会产生EDMA3CC错误中断。
主要的TeraNet交换结构(参见设备专用数据手册)将来自所有主设备(如DSP内核,EMAC,SRIO等)的总线请求仲裁到共享从属资源(外围设备和存储器)。
使用队列优先级寄存器(QUEPRI)对来自EDMA3传输控制器的传输请求(读和写命令)相对于系统交叉开关内的其他主控的优先级进行编程。QUEPRI编程事件队列的优先级(或间接,TC n,因为Q n传输请求被提交给TC n)。
因此,与EDMA3TC执行的传输优先级相比,卸载队列的优先级具有次要影响(由使用QUEPRI设置的优先级决定)。
2.12
EDMA3通道控制器是EDMA3的用户界面,EDMA3传输控制器(EDMA3TC)是EDMA3的数据移动引擎。EDMA3CC向EDMA3TC提交转移请求(TR),EDMA3TC执行TR规定的数据转移;因此,EDMA3TC是EDMA3CC的从属设备。
设备上的每个传输控制器根据性能要求,系统拓扑(如主TeraNet总线宽度,外部存储器总线宽度),门数等因素进行不同的设计。
确定TC配置的参数包括:
•FIFOSIZE:确定数据FIFO的大小(以字节为单位),数据FIFO是飞行中数据的临时缓冲区。数据FIFO是TC读取控制器从源端点读取的读取返回数据被存储并随后由TC写入控制器写出到目标端点的位置。
•BUSWIDTH:分别为TC读写控制器的读写数据总线宽度(以字节为单位)。这通常等于主TeraNet接口的总线宽度。
•默认突发大小(DBS):DBS是传输控制器发出的每个读/写命令的最大字节数。
•DSTREGDEPTH:确定目标FIFO寄存器集的数量。为传输控制器设置的目标FIFO寄存器的数量确定未完成的传输请求的最大数量(TR流水线)。
以上四个参数在给定设备的设计中是固定的。有关每个EDMA3传输控制器支持的配置,请参阅特定于设备的数据手册。
TC读写控制器与源和目标寄存器组一起负责对从端点发出最佳大小的读写操作。最佳大小的命令由传输控制器默认突发大小(DBS)定义。有关每个EDMA3TC支持的DBS值,请参阅特定于设备的数据手册。
EDMA3TC尝试发出尽可能大的命令大小,受DBS值或TR的ACNT / BCNT值的限制。EDMA3TC遵循以下规则:
•读/写控制器始终发出小于或等于DBS绑定值的命令。
•始终发出1D传输的第一个命令,以便后续命令与DBS连接值对齐。
例2-2显示了64字节DBS的命令碎片。总之,如果ACNT值大于DBS值,则EDMA3TC将ACNT阵列分解为源/目标地址的DBS大小的命令。然后连续地为每个BCNT数量的阵列提供服务。
对于ACNT字节的BCNT阵列(即,2D传输),如果ACNT值小于或等于DBS值,则可以将TR优化为1D传输以便最大化效率。如果EDMA3TC识别出2D传输被组织为单个维度(ACNT == BIDX)并且ACNT值是2的幂,则进行优化。表2-16总结了执行优化的条件。
传输控制器可以发出背对背传输请求(TR)。TC的未完成TR的数量受到由DSTREGDEPTH参数控制的目标FIFO寄存器条目的数量的限制(在给定传输控制器的设计中是固定的)。TR流水线操作指的是TC读取控制器为后续TR发出读取命令的能力,而TC写入控制器仍在执行先前TR的写入。考虑2个TR的情况(TR0后跟TR1),由于TR流水线操作,TC读取控制器可以在发出最后一个TR0读命令后立即开始发出TR1的读命令,同时写命令和写数据对于TR0,由目标FIFO寄存器跟踪。总之,TC读控制器能够在写控制器之前处理n个TR,其中n是目标FIFO寄存器条目的数量(通常为4)。
TR流水线操作对于保持背靠背小TR的吞吐量非常有用。它最小化了启动开销,因为读取在先前TR写入的后台开始。
应该注意的是,背靠背TR的目标是不同的端点,即使两个TR的读取返回数据可能无序返回(也就是说,TR1的读取数据可能在TR0的读取数据之前进入),传输控制器按顺序发出写命令(即TR1的写命令将在TR1的写命令之前发出)。
默认情况下,读取尽可能快地发出。在某些情况下,EDMA3TC发出的读取可以填充从站的可用命令缓冲,从而延迟其他(可能更高优先级)主站成功向该从站提交命令。EDMA3TC发出读命令的速率由RDRATE寄存器控制。RDRATE寄存器定义EDMA3TC读控制器在发出给定TR的后续命令之前等待的周期数,从而最小化EDMA3TC消耗所有可用从属资源的机会。如果传输控制器的目标是高优先级传输,则RDRATE值应设置为相对较小的值;如果传输控制器的目标是低优先级传输,则应将RDRATE值设置为较高的值。
相反,写接口没有任何性能转动旋钮,因为写命令总是在命令之间有间隔,因为写命令与相关的写数据一起提交。
传输控制器在处理代理内存保护方面起着重要作用。有两种与传输相关联的访问属性:例如,启动传输的主服务器的权限id(分配给主服务器的系统范围标识),以及用于对传输进行编程的权限级别(用户与主管)。在通道控制器中编程时,此信息在PaRAM集中保留。当TR被提交给传输控制器时,该信息可供EDMA3TC使用,并在发出读写命令时由EDMA3TC使用。读或写命令具有与通道控制器中EDMA3传输中编程的权限标识相同的权限标识和权限级别。
与通道控制器类似,传输控制器能够检测和报告多个错误情况。在三个主要条件下生成TC错误:
“BUSERR:TC读取或写入控制器检测由源或目标地址发出的错误。有关错误类型的其他详细信息也会记录在ERRDET寄存器中,该寄存器指示是读取错误(源地址错误)还是写入错误(目标地址错误)。
“MMRAERR:尝试读取或写入EDMA3CC / TC存储器映射中的无效/保留地址。
“TRERR:检测到传输请求数据包违反常量寻址模式传输规则(源/目标地址和源/目标索引必须与32个字节对齐)。
您可以轮询错误,因为可以从ERRSTAT寄存器中读取错误的状态。
此外,如果ERREN寄存器中的错误位被使能,则ERRSTAT中设置的位将导致错误条件中断DSP。您可以决定启用/禁用其中一种或所有错误类型。
DMA程序寄存器组,DMA源有效寄存器组和目标FIFO寄存器组用于获取通过传输控制器服务的TR的简要历史。
此外,EDMA3TC状态寄存器(TCSTAT)具有专用位字段,用于指示传输控制器不同部分内的持续活动:•SRCACTV位指示源活动集是否处于活动状态。
•DSTACTV位指示驻留在给定实例的活动集中的目标寄存器中的TR数。
•PROGBUSY位指示DMA程序集中是否存在有效TR。
如果TR正在进行中,必须谨慎使用,并且您必须意识到从EDMA3TC状态寄存器读取的值有可能不一致,因为EDMA3TC可能会因正在进行的活动而更改这些寄存器的值。
建议您确保不向EDMA3TC提交TR,以便于调试。
目标FIFO寄存器指针实现为循环缓冲区,其起始指针为DFSTRTPTR,缓冲区深度通常为2或4. EDMA3TC在TCSTAT中维护两个重要的状态详细信息,如有必要,可在高级调试期间使用。DFSTRTPTR是一个起始指针,即目标FIFO寄存器头部的索引。DSTACTV是有效(占用)条目数的计数器。这些寄存器可用于获取转移的简要历史。
2.13
本节总结了单个事件的数据流,从事件被锁存到通道控制器的时间到返回传输完成代码的时间。以下步骤列出了EDMA3CC活动的顺序:
1.事件从外部源(外设或外部中断)置位。对于手动触发,链接触发或QDMA触发的事件,这也类似。该事件被锁存到ER.E n / ERH.E n(或CER.E n / CERH.E n,ESR.E n /ESRH.E n,QER.E n)位。
2.一旦事件被优先排序并排队到适当的事件队列,SER.E n / SERH.E n(或QSER.E n)位被设置为通知事件优先级/处理逻辑忽略此事件,因为它是 已经在队列中。或者,如果传输控制器和事件队列为空,则事件绕过队列。
3. EDMA3CC处理和提交逻辑评估适当的PaRAM集合并确定它是否是非空和非虚拟传输请求(TR)。
4. EDMA3CC一旦确定TR为非null就立即清除ER.E n / ERH.E n(或CER.E n / CERH.E n,ESR.E n / ESRH.E n,QER.E n)位和SER.E n / SERH.E n。在空集的情况下,SER.E n / SERH.E n位保持置位。它将非空/非虚拟TR提交给相关的传输控制器。
如果TR被编程为提前完成,则EDMA3CC立即设置中断挂起寄存器(IPR.I [TCC] /IPRH.I [TCC] -32)。
5.如果TR被编程为正常完成,当EDMA3TC通知EDMA3CC传输完成时(返回传输完成代码),EDMA3CC设置中断暂挂寄存器(IPR.I [TCC] /IPRH.I [TCC])。
6. EDMA3CC使用TR对相关的EDMA3TC n的程序寄存器组进行编程。
7.如果两个寄存器组都可用,则TR被传递到源激活集和Dst FIFO寄存器集。
8.读控制器通过向源从端点发出读命令来处理TR。读数据位于EDMA3TC n的数据FIFO中。
9.只要有足够的数据,写控制器就会通过向目标从端点发出写命令来开始处理TR。
10.这一直持续到TR完成,然后EDMA3TC n向EDMA3CC发出完成状态信号。
2.14
EDMA3控制器有许多实现规则来处理并发事件/通道,传输等。以下小节详细说明了每当可能发生并发活动时的各种仲裁细节。图2-17显示了EDMA3优先级发挥作用的不同位置。
DMA事件寄存器(ER和ERH)捕获连接到EDMA3CC的所有外部/外设事件;同样,QDMA事件寄存器(QER)捕获所有QDMA信道的QDMA事件;因此,事件可能同时发生在DMA / QDMA事件输入上。对于同时到达的事件,与最低通道号关联的事件优先级以提交给事件队列(对于DMA事件,通道0具有最高优先级,通道n具有最低优先级,其中n是支持的DMA通道数。EDMA3CC;类似地,对于QDMA事件,信道0具有最高优先级,信道m具有最低优先级,其中m是EDMA3CC中支持的QDMA信道的数量。此机制仅对提交到事件队列的同时事件进行排序。
如果DMA和QDMA事件同时发生,则DMA事件始终具有针对QDMA事件的优先级,以便提交到事件队列。
如果DMA通道与多个触发源关联(事件触发,手动触发和链触发),并且同一通道同时设置多个事件(ER.E n = 1,ESR.E n = 1, CER.E n = 1),然后EDMA3CC始终按以下优先级顺序服务这些事件:事件触发(通过ER)优先于链触发(通过CER),链触发优先于手动触发(通过ESR) 。
这意味着如果对于通道0,同时ER.E0 = 1和CER.E0 = 1,则ER.E0事件始终在CER.E0事件之前排队。
通过哪个事件队列用于事件提交(由DMAQNUM n和QDMAQNUM指示)进一步减轻了相关传输请求(TR)的优先级。为了向传输控制器提交TR,事件需要从事件队列中出列。较低编号的队列具有比较高编号的队列更高的出队优先级。例如,如果Q0和Q1中存在事件且各个传输控制器(TC0和TC1)准备好从EDMA3CC接收下一个TR,那么与Q0中的事件相关联的传输请求将在任何传输之前提交给TC0与Q1中的事件相关的请求被提交给TC1。
每个传输控制器都有一个编程的系统优先级(通过QUEPRI编程)(图2-17),当系统中的多个主站竞争相同的端点时实现。通过传输控制器的系统优先级设置进一步减轻相关传输请求(TR)的优先级。当几个主系统向主TeraNet提交请求时,此优先级在TeraNet中发挥作用。
所有TC的默认优先级相同(0或其他主设备的最高优先级)。如果应用程序要求EDMA3同时为实时(紧急)和非实时传输提供服务,则建议更改此优先级。
硬件复位会复位EDMA3(EDMA3CC和EDMA3TC)和EDMA3配置寄存器。
器件复位后,PaRAM存储器内容未定义,您不应依赖参数重置为已知状态。必须在使用之前将PaRAM集初始化为所需的值。
在使用仿真器的调试期间,DSP可以在执行数据包边界上暂停,以进行单步执行,基准测试,分析或其他调试目的。在仿真停止期间,EDMA3通道控制器和传输控制器操作继续。事件继续被锁存和处理,转移请求继续提交和服务。
由于EDMA3涉及为多个主从外设提供服务,因此EDMA3具有独立的仿真停止行为是不可行的。EDMA3功能将与其正在服务的外围设备耦合,在仿真停止期间可能具有不同的行为。例如,如果在仿真访问期间(FREE = 0且SOFT = 0或SPI寄存器中为1)暂停串行端口接口(SPI),SPI将停止向EDMA生成接收或发送事件(REVT或XEVT)。从SPI的角度来看,EDMA3被暂停,但是其他外设(例如,定时器)仍然断言事件并且将由EDMA服务。
3
3.1块移动示例
EDMA3执行的最基本传输是块移动。在器件操作期间,通常需要将数据块从一个位置传输到另一个位置,通常是在片上和片外存储器之间。
在此示例中,将一部分数据从外部存储器复制到内部L2 SRAM。驻留在地址8000 0000h(外部存储器)的256字的数据块需要传输到内部地址0080 0000h(L2),如图3-1所示。图3-2显示了此传输的参数。
传输的源地址设置为外部存储器中数据块的起始位置,目标地址设置为L2中数据块的起始位置。如果数据块小于64K字节,则图3-2中所示的PaRAM配置保持为真,同步类型设置为A-synchronized,索引清除为0.如果数据量大于64K字节,则BCNT和需要在同步类型设置为AB-synchronized的情况下适当设置B索引。OPT中的STATIC位设置为阻止链接。
也可以使用QDMA来设置该传输示例。对于具有类似性质的连续传输提交,用于提交传输的周期数较少,这取决于改变传输参数的数量。您可以将QDMA触发字编程为经历更改的PaRAM集中编号最大的偏移。
3.2子帧提取示例
EDMA3可以从更大的数据帧中有效地提取小帧数据。通过执行2D到1D传输,EDMA3检索要处理的DSP的一部分数据。在此示例中,640×480像素的视频数据帧存储在外部存储器中。每个像素由16位半字表示。
DSP提取图像的16×12像素子帧以进行处理。为了通过DSP实现更有效的处理时间,EDMA3将子帧置于内部L2 SRAM中。图3-3显示了子帧从外部存储器到L2的传输。图3-4显示了此传输的参数。
相同的PaRAM条目选项用于QDMA通道以及DMA通道。OPT中的STATIC位设置为阻止链接。对于连续传输,只需在触发通道之前编程已更改的参数。
3.3数据排序示例
许多应用程序需要使用多个数据阵列;通常希望使阵列排列成使得每个阵列的第一元件相邻,第二元件相邻,等等。
通常,这不是数据如何呈现给设备。数据通过外设传输,数据阵列一个接一个地到达,或者数组位于存储器中,每个阵列占据一部分连续的存储空间。对于这些实例,EDMA3可以将数据重新组织成所需的格式。图3-5显示了数据排序。
要确定参数集值,需要考虑以下因素:
同步类型需要AB同步,STATIC位为0以允许更新参数集。建议使用普通的EDMA3通道进行分类。
无法使用单个触发事件对此进行排序。相反,可以将通道编程为链接到自身。在对BCNT元素进行排序之后,可以使用中间链接来再次触发通道,从而导致下一个BCNT元素的传输,等等。图3-6显示了此传输的参数集编程,假设通道0和4字节的元素大小。
3.4外设维护示例
EDMA3通道控制器还在DSP操作的背景下为外设提供服务,无需任何DSP干预。通过正确初始化EDMA3通道,它们可以配置为在整个器件操作中持续服务片上和片外外设。EDMA3可用的每个事件都有自己的专用通道,所有通道同时运行。
唯一的要求是使用适当的通道进行特定传输,并在事件使能寄存器(EER)中启用通道事件。当编程EDMA3通道以服务外围设备时,有必要知道如何将数据呈现给DSP。始终向数据提供某种同步事件,作为每个事件的一个元素(非突发)或每个事件的多个元素(突发)。
3.4.1
EDMA3独立处理非突发外设发送和接收数据流。发送和接收数据流可以具有完全不同的计数,数据大小和格式。图3-7显示了处理传入的非突发外设数据。
要将输入数据流传输到L2存储器中的适当位置,必须将EDMA3通道设置为使用A同步进行1D到1D传输。因为在到达时为每个单词生成接收事件(REVT),所以必须让EDMA3单独发出每个单元的传输请求。图3-8显示了此传输的参数。EDMA3通道的源地址设置为非突发外设的数据接收寄存器地址,目标地址设置为L2中数据块的起始位置。由于数据接收寄存器的地址是固定的,因此源B索引被清除为0(无修改),目标B索引被设置为01b(增量)。
3.4.2
更高带宽的应用要求将多个数据元素呈现给DSP以进行不同步事件。该数据帧可以来自同时工作的多个源,也可以来自向DSP传输数据的单个高吞吐量外设。
在此示例中,端口正在从摄像机接收视频帧,并一次将其呈现给DSP一个阵列。视频图像是640×480像素,每个像素由16位元素表示。图像将存储在外部存储器中。图3-9显示了这个例子。
要根据EVTn一次一个阵列将数据从外部外设传输到外部缓冲区,必须配置通道n。由于数据的性质(由像素阵列组成的视频帧),目的地本质上是2D实体。图3-10显示了使用AB同步通过1D到2D传输服务传入数据的参数。源地址设置为视频成帧器外围设备的位置,目标地址设置为数据缓冲区的起始位置。由于输入地址是静态的,因此SRCBIDX为0(不修改源地址)。目的地由连续的线性元素阵列组成;因此,DSTBIDX设置为像素大小,2个字节。ANCT等于像素大小,2个字节。BCNT设置为数组中的像素数640.CCNT等于块中的数组总数480. SRCCIDX为0,因为源地址没有增量。
3.4.4
虽然先前的配置允许EDMA3连续服务外围设备,但它对DSP提出了许多限制。由于输入和输出缓冲器不断被填充/清空,因此DSP必须非常接近地匹配EDMA3的速度以处理数据。在DSP访问之前,EDMA3接收数据必须始终放在存储器中,DSP必须在EDMA3传输之前提供输出数据。虽然并非不可能,但这是一项不必要的挑战。在2级缓存方案中尤其困难。
乒乓缓冲是一种简单的技术,可以让DSP活动远离EDMA3活动。这意味着所有传入和传出数据流都有多组(通常是两组)数据缓冲区。当EDMA3将数据传入和传出ping缓冲区时,DSP会处理pong缓冲区中的数据。当DSP和EDMA3活动完成时,它们会切换。然后EDMA3写入旧的输入数据并传输新的输出数据。图3-14显示了此示例的乒乓方案。
为了改变连续操作示例,使得乒乓缓冲方案,EDMA3信道仅需要适度的改变。而不是一个参数集,有两个; 一个用于向/从ping缓冲区传输数据,一个用于向/从pong缓冲区传输数据。只要一次传输完成,通道就会为另一次传输加载PaRAM集,并继续进行数据传输。图3-15显示了所需的EDMA3通道配置。
每个通道都有两个参数集,ping和pong。EDMA3通道最初加载了ping参数(图3-15)。ping集的链接地址设置为pong参数集的PaRAM偏移量(图3-16)。pong set的链接地址设置为ping参数集的PaRAM偏移量(图3-17)。每个通道的ping和pong参数之间的通道选项,计数值和索引值都是相同的。唯一的区别是提供的链接地址和数据缓冲区的地址。
为了利用乒乓缓冲技术,系统必须向DSP发出信号,以便何时开始访问新数据集。DSP完成输入缓冲区(ping)处理后,等待EDMA3完成,然后切换到备用(pong)缓冲区。在此示例中,两个通道都将其通道编号作为其报告字,并将TCINTEN位置1以在完成后生成中断。当通道13填充输入缓冲器时,中断挂起寄存器(IPR)中的E13位置1;当通道12清空输出缓冲区时,IPR中的E12位置位。DSP必须手动清除这些位。通过设置通道参数,DSP轮询IPR以确定何时切换。可选地,EDMA3和DSP可以被配置为使得信道完成中断DSP。通过这样做,DSP可以在等待EDMA3完成的同时为后台任务提供服务。
3.5
以下示例说明了中间传输完整链接功能。
许多系统需要使用一对必须以相同速率进行服务的外部FIFO。一个FIFO缓冲数据输入,另一个FIFO缓冲数据输出。为这些FIFO提供服务的EDMA3通道可以设置为AB同步传输。虽然每个FIFO都使用不同的参数集进行服务,但两者都可以从单个事件发出信号。例如,外部中断引脚可以连接到其中一个FIFO的状态标志。当此事件到来时,EDMA3需要为输入和输出流执行服务。如果没有中间传输完整链接功能,则需要两个事件,因此需要两个外部中断引脚。中间传输完整链接功能允许使用单个外部事件(例如,GPIO事件)。图3-18显示了此示例的EDMA3设置和说明。
GPIO事件(在本例中为GPINT0)触发数组传输。完成通道48的每个中间阵列传输后,中间传输完成链接在链接事件寄存器(CER)中设置E8位(由TCC指定为8)并向通道8提供同步事件。完成最后一次数组传输后通道48,传输完全链接 - 非中间传输完成链接 - 设置CER中的E8位(由TCCMODE:TCC指定)并向通道8提供同步事件。通道8的完成设置I8位(由TCCMODE指定:TCC)在中断挂起寄存器(IPR)中,如果中断允许寄存器(IER)中的I8位置1,它可以产生DSP的中断。
3.4.5.2用中间链来分解大量转移
中间转移链(ITCCHEN)的另一个特征是分解大量转移。大转移可以在转移期间锁定相同优先级的其他转移。例如,使用EMIF从内部存储器到外部存储器的队列0上的大量传输可能使同一队列上的其他EDMA3传输饿死。此外,这种大的高优先级传输可以长时间阻止EMIF服务于其他较低优先级的传输。当大转移被认为是高优先级时,应将其拆分为多个较小的转移。图3-19显示了EDMA3设置和示例单个大块传输的说明。
中间传输链启用(ITCCHEN)提供了一种将大量传输分解为较小传输的方法。例如,为了移动单个大块存储器(16K字节),EDMA3执行A同步传输。元素计数设置为合理的值,其中合理的值来自移动此较小数据量所需的时间量。假设在这个例子中1Kbyte是一个合理的小转移。EDMA3设置为传输16个1 KB字节的数组,总共16K字节元素。通道选项参数(OPT)中的TCC字段设置为与通道编号相同的值,并设置ITCCHEN。在此示例中,使用EDMA3通道25并且TCC也设置为25.当传输最后1K字节阵列时,TCINTEN也可以设置为触发中断25。DSP通过写入事件设置寄存器(ESR.E25)的相应位来启动EDMA3传输。EDMA3传输第一个1 KB的阵列。完成第一个阵列后,中间传输完成代码链产生一个同步事件到通道25,这是由TCC字段指定的值。该中间传输完成链接事件使EDMA3信道25传输下一个1K字节阵列。此过程一直持续到传输参数耗尽为止,此时EDMA3已完成16K字节传输。该方法将大的转移分解成较小的分组,从而在转移中提供自然时间片,使得可以处理其他事件。图3-20显示了EDMA3设置和分解的较小数据包传输的说明。