本文转自
http://volvet.blogbus.com/logs/8270502.html
(1) Transfer Request
1)
Transfer Request
每次数据传输都是由
Transfer Request(TR)发起的,
TR包含了所有数据传输所需要的信息:源地址,目标地址,优先级,传输的元素个数等等。
TR根据不同的优先级被塞入相应的队列中,每次排于队列首位的
TR被传入
EDMA 控制器中,实际的数据传输就开始了。
(2) L2 Memory/Cache Controller
Level 2 Memory/Cache Controller要实现很多种控制:允许
CPU直接访问数据,递交
QDMA申请(
Quick
DMA Request),维护
L1 Cache和
L2 Cache的一致性
(Coherence),另外所有
Memory-Mapped
Peripherals和
CPU的通信也是通过
L2 Memory Controller的。
L2 Memory Controller 的
QDMA Request 的申请可能是以下几种情况:
CPU主动发起
QDMA
Request, CPU访问不能
Cache的片外内存,
L2 Cache读取可以被
Cache的片外内存,
L2
Cache 上的内容失效时候(把
L2 Cache的数据写回片外内存),用户的一些
Cache操作。
(3) Transfer ControllerTransfer Request 按照优先级不同分
4个队列 ,分别是
Q0(Urgent),
Q1(High),,
Q2(Medium),
Q3(Low),每个队列的长度是
16,就是说可以放入
16个
TR, 这里要注意的是并不是把
TR的优先级设为最高,数据就能优先得到传输的,
因为对不同队列
TR的处理是并发的,所以要把
TR均匀的分步到
4个队列中,才能得到最优的数据传输性能。
EDMA控制寄存器是内存映射模式的,
EDMA的
Channel参数表是一块
2k Bytes的片内内存
(
Parameter RAM -
PaRAM )。每一个
Channel的参数长度为
24Bytes , 因为
C64x
CPU有
64个
Channel , 所以
C64x CPU有
64×
24
Bytes作为
EDMA到参数表,剩下的部分内存作为
Link Parameter Set。
EDMA的
PaRAM的地址是:
0x01A00000-
0x01A00017 Parameter For Event
1
0x01A00018-
0x01A0002F Parameter For Event 2
………
0x01A005E8-
0x01A005FF Parameter For Event 63
EDMA Parameter的格式如下:
Option -
4 Bytes EDMA Transfer Configuration Option
Source Address -
4 Bytes 源地址
Array/Frame Count -
2 Bytes 需要传输的
Frame或者
Array的个数
( Frame指
1D,Array指
2D )
Element Count -
2 Bytes 每个
Frame 或者
Array 中
Element 的个数
Destination Address -
4 Bytes 目的地址
Frame/Array Index -
2 Bytes 1D时候是指被拷贝到目标地址的每个
Frame之间的偏移
, 2D时候是指每个
Array的偏移。
Element Index -
2 Bytes 1D时候有效,
2D时候被
ignore,是指被拷贝到目的地址的
Frame中每个
Element的偏移。
Element Count Reload -
2 Bytes
Link Address -
2 Bytes
要完成多种功能的数据拷贝功能 比如说数据重排等等, 往往需要借助
Frame/Array Index和
Element Index的合理设置。
EMDA Transfer Configuration Option 的定义如下:
Bits 31-28 Priority -
000:
Urgent
001:
High
010:
Medium
011:
Low
Others:
Reserved
Bits 28-27 ESize -
00:
32 Bits Element
01:
16 Bits Element
10:
8 Bits Element
11:
Reserved
Bits 26 2DS -
0:
Source 1D模式
1:
Source 2D 模式
Bits 25-24 SUM -
00:
Same Source Address, 是指用相同值填充目标地址的情况
, 类似
DAT操作时候
DAT_fill的情况。
01:
Increment Source Address , 拷贝完一个值后
,Source Address + 1。
10:
Decrement Source Address, 拷贝完一个之后,
Source Address – 1。
11:
Index 模式
, 在
2D模式下这个值无效果,会导致不可预料的情况,在
1D模式下,表示拷贝完一个值后
,Source
Address + Element Index。
Bits 23 2DD -
0:
Destination 1D模式
1:
Destination 2D 模式
Bits 22-21 DUM -
Destination Address Update Mode , 与
SUM 的定义相同。
Bits 20 TCINT -
0: Transfer Complete Interrupt Disable
1: Transfer Complete Interrupt Enable
Bits 19-16 TCC -
Transfer Complete Interrupt Code 的低
4位
Bits 15 -
Reserved
Bits 14-13 TCCM -
Transfer Complete Code的高
2位。这个值等同与传输结束时候的事件代号。
Bits 12 ATCCINT -
Alternate Transfer Complete Interrupt
Bits 11 -
Reserved
Bits 10-5 ATCC -
Alternate Transfer Complete Interrupt Code
Bits 4 -
Reserved
Bits 3 PDTS -
Peripheral Device Transfer Mode for Source
Bits 2 PDTD -
Peripheral Device Transfer Mode for Destination
Bits 1 Link -
1:
Link Enable
0:
Link Disable
Bits 0 FS -
0:
Channel is Element/Array synchronization
1:
Channel is Frame/Block synchronization
QDMA跟
EDMA很象,不同之处就是
QDMA的
Parameter中没有
Element Count Reload和
Link Address ,
QDMA 的
Parameter的长度是
20
Bytes。另外
QDMA
的
Transfer Configuration Option没有
ATCCINT,
ATCC,
PDTS,PDTD,
Link等参数
,这说明
QDMA不能用来做外围设备跟
RAM之间的数据传输, 仅仅是
L2 Memory跟
Extern Memory
之间的数据传输。