嵌入式开发者社区

标题: 关于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信号,才开始接收数据呢?
5 G8 N* v  v) K" l0 u
作者: weibo1988821    时间: 2015-5-14 19:40
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40
5 ?( p9 M# F7 H你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
% Z) l" G/ B: J) q' g
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40
# e2 W/ q$ r$ {. x" t8 h你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
' \. x/ n6 l. b" c1 e: U, a
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:34
weibo1988821 发表于 2015-5-14 19:40
, k- X3 Z; y. R. y" ?( K9 a你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
5 k$ [- a* L8 e3 w1 T/ D  a. |  g
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: weibo1988821    时间: 2015-5-15 15:19
378087736 发表于 2015-5-15 11:34
1 c( i/ S! ~: ]! E* @9 R数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了 ...
# S4 x( t0 b: p+ r! c" e
DDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可
作者: 叶子wy    时间: 2015-5-18 10:56
weibo1988821 发表于 2015-5-15 15:19% [: @3 i) r0 ?+ j/ I
DDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可 ...

# D6 z- L& T- i9 q- t! L- S- L8 x8 y你好,”接收数组放在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/ L- x2 G/ D5 c0 }9 J8 J' |& R
l楼主你好,我最近也在做FPGA与DSP之间的图像数据的传输,我想请教一下,请问这个CLOCK START ENABLE 配置 ...

. h7 G) {) t/ q, v$ @0 F9 M0 r) b" K寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):2 S. a1 Z. ~( c/ M( K
static void UPPInit(void)
1 c) c& }& c) a: B% w  h{4 q2 V/ q; \0 `0 W2 O
    unsigned int temp_reg = 0;
$ m. z0 z6 B4 X( `/ r, y+ ~2 \( d$ i
1 j0 n5 Q5 y! L& H, ?    // Channel B params) q" K; V7 [, Y
    CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF);     //Left-justified, zero filled0 x1 z" }( P2 |  E7 N0 z( u# J* X0 J
    CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT);      //8-bit interface  E0 ?) f, E, k+ _$ G; ^9 @$ N
    CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL);     //Channel B bit width = 8
* g* ]* F4 l/ g. w& T2 A- s    CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE);    //Single data rate& E+ l0 H) V  v  S

' l# J# U6 d; ]2 t3 q' J    // Channel A params
. I1 u& Y  f" n" Z% i/ a    CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF);     //Left-justified, zero filled
7 m% x3 K  ~/ ^- N( a    CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT);      //8-bit interface7 P- N5 `% G4 C# L/ {
    CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL);     //Channel A bit width = 8
* `2 |4 `2 r7 Y# ^* P7 O    CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE);    //Single data rate8 |4 o  p8 o' `. v' ]

- R& i8 U0 l3 b/ Q3 S    CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO);       //Channel A and Channel B are both active.
7 k) o8 M( O% [* _    CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0);  //Channel B transmit Channel A receive
: n; H" g  s; z. h; b, S) T. k5 I3 w
% L' ^5 C( f" S4 \8 G4 t    upp_reg_hdl->UPCTL = temp_reg;9 \* B( Y5 w9 [1 S
6 `( J0 u1 Q/ o/ [6 H* x
    temp_reg = 0;   - R, _  F& A1 Y+ Q# @- F) B

& I, C! `& ]7 F  p; _/ A# N6 Y4 W    // Channel A params
/ w) M( I1 q5 U0 T) I    //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE);  //Channel A data pins are in a high-impedance state while idle
+ ~0 h' q) [2 }% h* K' v+ p7 O% B    //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
2 m* D  c  T; g" s    CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.  N( Q* z) \1 l3 h- v
    CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE);   //Channel A ENABLE Signal Enable
8 Q, |7 A5 o  _0 {$ e; D6 ]! P7 f) ?2 c: o* N  Y+ U
    // Channel B params: c) k# b# U  N. C. ^
    CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
- l5 _- _; x8 c5 f7 R5 ^    CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.) }% p$ L: t3 j' i' F- j
    CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE);  //Channel B ENABLE Signal Enable
, ], [' N* e( Z
7 I* I+ Q& c: y. O    upp_reg_hdl->UPICR = temp_reg;
4 z; \# P; a6 `6 r; D
" s- |& k: g- K2 j+ M    //temp_reg = 0;
1 x6 {0 @- a* u3 o' G5 l
3 b0 g$ N" u$ j" }' n; ~    //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b);   //Channel B idle value  _2 `8 i" |9 ]* g# E! k6 z8 \* J
    //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f);   //Channel A idle value
+ C* L' C# k4 e( ~% w0 n( [1 Y$ l  R( f) s+ O
    //upp_reg_hdl->UPIVR = temp_reg;
' P5 q2 w  H1 O8 D; y4 u) A# y$ }3 W
    //temp_reg = 0;
$ D: Y" W' H8 ^2 m" {6 e4 q
& t, S& Q4 k* N) A: U7 K2 X    //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B);  //set 256B DMA I
2 x, d" q5 m# W* a3 g- d( y+ n    //upp_reg_hdl->UPTCR = temp_reg;5 O* s- W6 l( _$ }" D

1 g$ b; c; b; A, Z. [0 X    //temp_reg = 0;
7 t' x* Z. v  }# O    //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE);  //B to A loopback mode enable
4 C7 q2 t% }  ~% L! ^    //upp_reg_hdl->UPDLB = temp_reg;9 C0 W' W. L! d
1 b  }+ X% V% M1 A; m$ n: f8 F+ B9 P
}




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