专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
DSP
C64X DSP EDMA/QDMA小结
2019-07-13 17:15
发布
生成海报
站内文章
/
DSP
15063
0
1193
C64X DSP EDMA/QDMA小结 2007-04-09 11:34
1
)
EDMA
概要
①
EDMA
数据传输有两种发起方式:
ü
CPU
发起的
EMDA
数据传输(非同步方式):需要传输时,
CPU
设置
ESR
寄存器的相应位为
1
,从而触发一个
EDMA
事件的产生,事件对应的通道参数被送往地址硬件并且完成相应的处理,这种非同步方式的实时数据传输无需设定
EER
寄存器;
ü
事件触发方式
EDMA
数据传输(同步方式):
ER
寄存器保存外设发送过来的事件,一旦
CPU
设置
EER
寄存器的相应位为
1
后,
ER
中的事件才会提交给事件编码器(
Event Encoder
),并且进一步引起相关的传输参数的发送给地址产生硬件;如果
EER
中对应于某事件的位没有置
1
,则
ER
寄存器中的事件将保留,一旦置
1
则触发
EDMA
的传输,这种特性可以应用到
EDMA Chain
传输,需要
EER
和
CCER
结合使用;
②
EDMA
每个通道是和特定的系统事件绑定的,如下表所示:
③
EDMA Chain Transfer
:一个通道传完继续传另一个通道;
④
EDMA Link Tansfer
:设定参数后,通道的数据传输传完,再载入这个通道的其他参数设定,再进行数据传输;
(
2
)
EDMA
数据传输类型:
EDMA
有两种类型的数据传输:
1D
和
2D
的(
OPT.2DS
和
OPT.DDS
标示源地址和目的地址的数据传输类型,即有
4
种组合方式);数据的维数表明了数据的组成方式:
①
1D
数据
数据组成是“块
->
帧
->
元素”;一个块中的每帧数据是独立处理(即可以理解亦为
2D
数据,但是第二维永远是
1
),每次处理是一个元素,因此一帧中的数据元素可以是在同一个内存地址、连续的地址或者是与同一帧中的前面的数据元素地址具有一定偏移(
Offset
,由
ELEIDX
通道参数指定)的某地址;不同帧之间的内存地址偏移由
FRMIDX
通道参数指定(两帧的第一个元素之间的偏移或者后一帧的第一个元素的地址与前一帧的最后一个元素地址的偏移,具体依赖于通道参数
FS
的设定);每帧的数据元素个数可以不同,由通道参数
ELECNT
指定,传完一帧数据后由
ELERLD
重新载入块中的下一帧的数据元素个数
ELECNT
;块中的帧的个数由通道参数
FRMCNT
指定;
1D
数据传输有两种同步方式:
OPT.FS
=
0
,元素同步方式;
OPT.FS=1
,帧同步方式;
元素同步时
,一次同步事件引起一帧中的一个元素的传输,每传输一次
ELECNT
递减
1
;当同步事件触发时,
ELECNT
=
1
表明是一帧的最后一个数据元素,此时
EDMA
控制器除了完成最后这个元素的传输外,还需要重新载入
ELECNT
(通过
ELERLD
)并且
FRMCNT
递减
1
;
ELEIDX
表示元素之间的偏移,
FRMIDX
表示一帧的最后一个元素和下一帧的第一个元素之间的偏移;如果
OPT.LINK=1
时,传输完成中断产生(
FRMCNT
=
0
)就重新从
PRAM
中载入当前通道的其他参数;
帧同步时
,一次同步事件引起一帧数据的传输,
FRMIDX
表示两帧的第一个元素之间的偏移;
②
2D
数据
数据组成为“块
->
数组
->
元素”,同一数组中的元素是连续存放的,因此
ELEIDX
无意义;数组中的元素素引表示
2D
的第一维,块中的数组索引表示
2D
的第二维;
FRMIDX
的值依赖于
OPT.FS
的设定;
OPT.FS=0
:表示一次同步事件传输一个数组,此时
FRMIDX
是数组首地址之间的偏移;每传完一个数组,
FRMCNT
递减
1
;当
OPT.LINK
=
1
并且
FRMCNT
递减至
0
时,从
PRAM
的中重新载入当前通道的其他参数;
OPT.FS=1
:表示一次同步事件传输一个块;
FRMIDX
表示前一个数组的最后一个元素的地址与后一个数组的第一个元素的地址之间的偏移;如果
OPT.LINK
等于
1
,则当整块数据传完时,重新从
PRAM
中为当前通道载入新的参数;
(
3
)
EDMA
传输过程的源
/
目的地址的修改
在每次同步事件触发
EDMA
数据传输,并且传输完成后,需要对源
/
目的地址进行更新;地址的更新方式由
SUM/DUM
进行设定,并且和
2DS
、
2DD
以及
FS
是密切相关的;
(
4
)数据元素大小和对齐方式
源
/
目的地址是在元素大小的边界对齐的,因此要注意指向源
/
目的地址的指针的类型需要和
OPT.ESIZE
匹配;
(
5
)
FRMCNT
和
ELEMCNT
的更新
QUESTION
:每次进行计数更新时,
ELERLD
的值哪里来的??
(
6
)
EDMA Linking Transfer
当传输完成时(根据当前通道参数设定已经传完所有数据了,具体条件如下表所示),并且
OPT.LINK=1
,
EDMA
控制器会根据通道参数
LINK
(非
OPT.LINK
,
16bits
)从
PaRAM
中的其他位置(以
24
个字节对齐,因为通道参数为
6WORD
)重新载入当前传输通道的参数;可以链接到一个空的通道参数集(
NULL Parameter
)来停止
EDMA
传输,也可以自链接(用于循环缓冲处理或者重复的数据传输);
Linking
过程中不对相关寄存器作判定;
(
7
)
EDMA
中断
C64X DSP
的
EDMA
控制器的所有
64
个通道只产生一种中断:
EDMA_INT
。如果需要让第
n
个
EDMA
通道(或者
QDMA
请求)可以在传输完成时可以产生中断通知
CPU
的话,应该如下设定:
u
OPT.TCINT=1
:表示启用传输完成中断
u
OPT.TCC=n
:在传输完成时,
CIPR[TCC]=1
,用于标记对应通道的传输完成,即便对应的
CIER
位没有启动,传输完成事件还是会在
CIPR
记录,即挂起的含义所在;
u
OPT.CIER[n]=1
:表示立即允许挂起的第
n
个通道传输完成事件触发
EDMA_INT
中断发送给
CPU
;
其中,
TCC
用于表示的通道的位数不够时,可以扩展使用
TCCM
(即
TCCM:TCC
),
CIPR
和
CIER
均由两个寄存器组成:
CIPRL
+
CIPRH
以及
CIERL
+
CIERH
。
中断服务例程
ISR
读取
CIPR
,确定哪一个通道完成了数据传输,进行相应的处理。
ISR
在进行处理之前需要清除
CIPR
中确定了通道的位(写入
1
到相关位清除,写入
0
不起作用),目的是记录以后的传输完成事件的发生。在中断服务例程对某通道的传输完成中断进行服务后,因为期间有可能有其他通道传输完成了,也已经设置了
CIPR
中的相应位,或者也有可能本来有好几个中断挂起了并且现在触发了,因此中断服务例程必须检查所有的
CIPR
并全部完成中断服务才行。当
CIPR[n]&CIER[n]=1
时,则设置对应的
IFR
为
1
,防止在退出
ISR
时丢失中断并且使得可以多次调用
ISR
。中断服务例程的一个任务是清除
CIPR
和
CIER
中的与通道对应的位。
C64X DSP
除了传输完成中断外,还有交替性传输完成中断,即在传输过程中完成一个传输子过程(如传完一个数据元素、传完一个帧
/
数组数据;
2D
帧同步传输没有交替性传输完成中断)给
CPU
发送一个中断,相应的设定由
OPT.ATINT
、
OPT.ATCC
设定,处理过程和传输完成中断雷同,区别只是在传输还没全部完成的过程中进行中断处理而已。
(
8
)
QDMA
QDMA
数据传输总是帧同步的,即对于
1D
数据传输而言每次同步事件传输一帧数据,对于
2D
数据传输而言每次同步事件传输一块数据。因此,
QOPT.FS
对于
QDMA
是无意义的。另外,
QDMA
是一次性快速传输的,因此也没有中间传输过程这个概念,即没有交替性传输完成中断。
QDMA
没有
Linking
方式的传输,但是有
Chaining
方式的传输。
QDMA
有两组内存映射寄存器用于设定通道参数,如下图所示:
其中,
QDMA
寄存器集只用于配置,
QDMA psedudo
寄存器集可以用于提交
QDMA
请求。
(
9
)
EDMA
控制器的请求提交
请求包括
L2
控制器(
Cache
服务、访问未
Cache
的内存以及
QDMA
传输)、
EDMA
通道、
HPI/PCI
。
Transfer Crossbar
为请求排定优先级。
(10) Event Encoder
事件编码器
事件寄存器
ER
(包括
ERL
和
ERH
)用于捕获对应于
64
个
EDMA
通道的事件。在事件编码器中只是负责提交请求,事件的优先局依赖于
EDMA
通道参数的设定,并且在
Transfer Crossbar
中才正式排定。
(
11
)
Parameter RAM
Parameter RAM
位于
EDMA
控制器内部,只有设备总线可以对之进行访问。
PRAM
表大小为
2KB
,其组成为:
①
64
个
24
字节(即每项
6
个
32bits
的字
WORD
)的表项,用于保存
64
个通道的参数,也可作为保存
Linking
时候需要进行重载的通道参数;
②
21
个
24
字节(即每项
6
个
32bits
的字
WORD
)的表项,用于保存
Linking
时候需要进行重载的通道参数;
③
剩余的
8
个字节;
每个通道参数(
6WORDS
)如下:
(
12
)
EDMA Chaining
传输
Chaining
传输的含义是当一个
EDMA
通道传输完成时,触发另一个
EDMA
通道的传输。
TCINT
需要设为
1
,根据当前通道的(
TCCM
:)
TCC
值,设定
CCER
(
CCERL
+
CCERH
)的)(
TCCM
:)
TCC
位的值,表示当前通道传输完成后触发(
TCCM:
)
TCC
通道的数据传输。
Chaining
传输也可以交替性传输完成,使用
ATTC
指定要触发的通道。
转自
http://hi.baidu.com/yutou410/blog/item/0fbb72e799e26d2fb93820e8.html
谢谢原作者
Ta的文章
更多
>>
C64X DSP EDMA/QDMA小结
0 个评论
DSP C6678调试SylixOS程序
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮