嵌入式开发者社区

标题: 关于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信号,才开始接收数据呢?
1 Q) f7 W; q# o0 y8 F( |- E
作者: weibo1988821    时间: 2015-5-14 19:40
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40
( u, n  J; I, z/ R你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
' a1 o1 G; S3 [6 K
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40
. B; @4 O8 ~' Q  v1 {" m" M你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

: R  `* ~% O9 F数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:34
weibo1988821 发表于 2015-5-14 19:408 ~, A) s' R, P5 {" |
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
5 T) E1 l" l2 Q
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: weibo1988821    时间: 2015-5-15 15:19
378087736 发表于 2015-5-15 11:34
% ^1 ?7 @, A( k. n0 h数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了 ...
- u0 I1 ~3 \! @2 Y0 W
DDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可
作者: 叶子wy    时间: 2015-5-18 10:56
weibo1988821 发表于 2015-5-15 15:190 I5 T) x) t0 _  T. g% D
DDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可 ...

6 P! ]. t: C7 I5 B$ r你好,”接收数组放在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* J8 @& e, Z/ v
l楼主你好,我最近也在做FPGA与DSP之间的图像数据的传输,我想请教一下,请问这个CLOCK START ENABLE 配置 ...
7 d/ \+ s( Q5 P, v7 A
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):4 J" [, _7 I( D, d0 x
static void UPPInit(void)
1 F8 Z; X- F3 W7 f6 j6 g, s1 ?# u$ d{9 p; R0 q! V- a
    unsigned int temp_reg = 0;; k% E9 l, q# q- D- C; V0 I

! [. ]3 f4 L0 P2 d. m6 v+ `6 Q- i    // Channel B params
) d; c$ i  x; E5 n, d# [' Z    CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF);     //Left-justified, zero filled: U/ T" {+ |- v# W5 a
    CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT);      //8-bit interface
% }1 T6 p% \; T    CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL);     //Channel B bit width = 8. d+ ?; o" R2 Y" F% f3 u
    CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE);    //Single data rate$ _/ S. f2 b7 s+ w! |
3 P1 X9 v3 t. _
    // Channel A params. d, l5 p5 t6 o9 S. q4 V- N
    CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF);     //Left-justified, zero filled0 d6 G2 O, H9 y* x
    CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT);      //8-bit interface
' O, r- Z3 S  a+ ?! x" k    CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL);     //Channel A bit width = 8
" P6 |* j7 l7 D1 l    CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE);    //Single data rate5 a3 K1 K, R7 d+ Y6 j

1 ?$ X" G( m- f. r    CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO);       //Channel A and Channel B are both active.
1 l9 @# R, Q6 r' A; A" Y    CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0);  //Channel B transmit Channel A receive8 B& n; b  c& d' A
8 b" y2 y9 G5 d
    upp_reg_hdl->UPCTL = temp_reg;
% f) H/ M( g5 Z, [
7 M* D9 ]9 r0 r0 U6 T    temp_reg = 0;   3 \: ]" w7 R6 U+ ~& i6 R& @
) X4 T- c- D" [6 j% m# {
    // Channel A params: l7 |; R8 I, A
    //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE);  //Channel A data pins are in a high-impedance state while idle
7 h: v* X# t6 [    //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
$ a- `+ l8 k: P; f8 d/ A3 J0 a( G    CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
( ^  S3 b/ Q, l5 j; s3 s! B" L5 P! I    CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE);   //Channel A ENABLE Signal Enable  }+ g% n& B2 ^* L* l4 j4 u
. u1 o) Q8 u6 H/ `/ Z3 X  Q6 Y: f2 |
    // Channel B params6 B! h* J% V/ [: n; d8 T# p  T
    CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
7 ^4 K5 Q* d9 m; A* u1 u+ F* q) Q& T    CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
  l9 \. ~4 g6 r4 k4 w! Y    CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE);  //Channel B ENABLE Signal Enable1 _. w+ |4 }9 I* Z

8 ?8 c* [, i) h6 f& a    upp_reg_hdl->UPICR = temp_reg;
' G7 ^) l1 k$ O- ^8 C- Y, [4 X* n- r, Q' D; M# D) z5 k
    //temp_reg = 0;8 g6 Z1 x& I# G% y% j
2 S% C2 f4 E$ M- R0 G
    //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b);   //Channel B idle value2 D- x( W5 C3 ^) _* Q, y+ f
    //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f);   //Channel A idle value
$ S: B; g; K" h* m7 U# R
3 g$ K. I7 T# o/ s7 u    //upp_reg_hdl->UPIVR = temp_reg;
( W0 R* W0 R0 l: j3 o7 T- `
; X: p6 M+ T6 W6 M1 J6 r    //temp_reg = 0;" n1 u1 @$ ~+ g3 U
* b& o0 w! z+ q0 |7 v* e& T
    //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B);  //set 256B DMA I
& }) ^  y& w# A+ ~0 B) S    //upp_reg_hdl->UPTCR = temp_reg;" q  o% B+ ]& h7 A8 j
9 h& N  p0 v0 B4 C( v
    //temp_reg = 0;0 y' Z7 a0 f, \7 s. L8 p
    //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE);  //B to A loopback mode enable  [' z% H8 o$ z# x: F
    //upp_reg_hdl->UPDLB = temp_reg;
" G8 q( v1 a$ ^2 s0 S% R4 g, M4 O , l% ?# L. S; h5 ~& E( A
}




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