嵌入式开发者社区

标题: 关于UPP速度问题 [打印本页]

作者: 378087736    时间: 2015-5-14 19:31
标题: 关于UPP速度问题
      小弟最近在用138的UPP跟FPGA通信,使用的是8位数据线宽,单速率模式,每1ms从FPGA端发送2K左右字节的数据,DSP端接收数据,每次写完DMA的三个寄存器后直到DMA传输完成,接收这2KBytes需要的时间竟然用了1.7ms左右,不知道为什么会这么慢?FPGA发送的时钟为20MHZ。请问DSP的UPP侧不是不每次收到FPGA发的start信号,才开始接收数据呢?. p$ p) J+ E6 ]) _" b4 h# W

作者: weibo1988821    时间: 2015-5-14 19:40
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40+ L( ?. P; X9 B: h/ u# u7 Q
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

2 j3 t+ b9 Z/ p" u数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:408 T7 d5 i5 K6 s
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

0 g: F/ F' P, s8 E# _数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:34
weibo1988821 发表于 2015-5-14 19:40
5 B0 `( ~  I$ K, A你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

9 y" A4 |- ]$ s; {! O: K# }7 V  U数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: weibo1988821    时间: 2015-5-15 15:19
378087736 发表于 2015-5-15 11:34
( t! W, ^2 `& g) ?+ v5 k数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了 ...
1 b9 @  a5 i4 z
DDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可
作者: 叶子wy    时间: 2015-5-18 10:56
weibo1988821 发表于 2015-5-15 15:19
7 F: T1 `1 Y& W% jDDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可 ...

# A% W0 ~1 k' j; r6 B你好,”接收数组放在L2区“语句怎样实现?
作者: zhuma    时间: 2015-9-11 09:54
l楼主你好,我最近也在做FPGA与DSP之间的图像数据的传输,我想请教一下,请问这个CLOCK START ENABLE 配置是怎么样弄得,我研究了创龙给的事例程序,感觉没有在里面找到关于这几个信号的配置信息,楼主能不能指点一下?
作者: Lewis    时间: 2015-11-3 09:33
CLOCK需要配置频率,START和ENABLE配置使能或者禁用,还有极性
作者: 378087736    时间: 2015-11-10 18:53
zhuma 发表于 2015-9-11 09:54
  @6 F% N0 [: {* C& n; Vl楼主你好,我最近也在做FPGA与DSP之间的图像数据的传输,我想请教一下,请问这个CLOCK START ENABLE 配置 ...

8 z/ U6 B7 T- N寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):$ r* X) P! t) q& r$ a% V& N" b  E
static void UPPInit(void)
" s* C  @* _# g  {! m) q{1 H( a: F7 g% [( S) f/ y
    unsigned int temp_reg = 0;6 k- B' m) |- m8 y1 y+ j( X

) M: x! @  _/ Q; T" ^    // Channel B params
4 U+ r( p+ |! ]+ Z. `    CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF);     //Left-justified, zero filled1 _2 n0 b; J+ L( }7 R+ Z! p
    CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT);      //8-bit interface! L4 u+ g: K) T, O1 ?! R. G/ l
    CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL);     //Channel B bit width = 8/ _8 _! _$ A+ I
    CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE);    //Single data rate
, ~( _6 }% O" l
  N  l5 e* t' S4 V/ _3 P" o$ y    // Channel A params% p; e, u4 {  L- m
    CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF);     //Left-justified, zero filled. c# T5 P# f4 t- g9 p; W
    CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT);      //8-bit interface# b3 _, H4 N$ d* x0 u
    CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL);     //Channel A bit width = 8
2 Y  M& C- E7 r: M; G6 a! G    CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE);    //Single data rate
" H7 J5 P. \- J/ T+ S# @# U1 V2 R
. V: U& O+ t* Q: ^1 k    CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO);       //Channel A and Channel B are both active.; J3 h2 G( t- }  O6 Y* W
    CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0);  //Channel B transmit Channel A receive6 e9 ^" G- L0 ~3 W9 Z

0 o, t( X& r: y    upp_reg_hdl->UPCTL = temp_reg;
+ }; L/ P% E: r* W; E$ x- K' {& h. g( I9 d1 ^2 {
    temp_reg = 0;   6 ~- K& K# |2 }. t

/ b2 J! U$ j8 j; N) `1 z, {    // Channel A params
# Z& F- ^. |3 l: z8 V    //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE);  //Channel A data pins are in a high-impedance state while idle
/ R/ w8 M4 \/ H& V" x' m    //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor9 }$ g. K8 t" L7 [
    CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
9 ~  n0 T; Z! k1 l    CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE);   //Channel A ENABLE Signal Enable  S. ?1 m  m/ C# @: {% o

  M/ M6 U% n8 U" f3 u    // Channel B params
, e( W8 m: I( Q- e$ g    CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);. @$ t5 i. O% ^) Q! M' m" Y
    CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.# j! A" r6 z8 o. J: O0 o* I! b
    CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE);  //Channel B ENABLE Signal Enable+ O3 t# Q% O2 I! o" |) k& w( {5 }4 |

# l$ O/ \5 T4 `: S) N3 |% B! g    upp_reg_hdl->UPICR = temp_reg;
1 v/ i, W* Q+ r8 [
) C1 l( Y. m) d, r    //temp_reg = 0;& A. S) G6 l8 d, `4 n/ B3 z+ t
0 O$ C5 v) X' w3 ^8 X; ^! v" f
    //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b);   //Channel B idle value
$ A6 A7 S" o& q+ {! Z    //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f);   //Channel A idle value1 {& X& k# W' r, c
" Z4 }( g* x- T* y% b7 A3 p5 q7 W
    //upp_reg_hdl->UPIVR = temp_reg;
! ~5 s+ U. k8 }8 {* t# l& Q% _; @/ P. J" r
    //temp_reg = 0;1 ~0 u& {5 D% A/ l9 B, S
+ i) h8 }" {* {8 B" n% j: H4 ^
    //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B);  //set 256B DMA I
. o+ E( y/ \7 t    //upp_reg_hdl->UPTCR = temp_reg;7 @- Y$ @! t! G+ n- i$ {0 ~
  {8 \) n8 o. q: O6 @
    //temp_reg = 0;
3 s' t9 `  ^( ~3 Z: f+ H    //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE);  //B to A loopback mode enable
; a/ a& G% m( \) T5 b    //upp_reg_hdl->UPDLB = temp_reg;# D- E; [# a; p6 U# p8 `# v

: u+ z# Z8 v- \) n& {2 m# Q: C* z$ w}




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4