嵌入式开发者社区

标题: 关于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信号,才开始接收数据呢?) |) @, M7 E% D+ i

作者: weibo1988821    时间: 2015-5-14 19:40
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40
9 i# ^0 a" ]0 X- j- f) v你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

- N$ n; x# I  z" ^5 x! e数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40
0 S' \, j3 I. Q5 y0 f你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

  S. q; ]4 q0 n7 {数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:34
weibo1988821 发表于 2015-5-14 19:407 P$ f9 [, A9 H1 e
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

  O9 U. C/ v5 g( A0 L4 S数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: weibo1988821    时间: 2015-5-15 15:19
378087736 发表于 2015-5-15 11:34
2 l/ q: p7 n; G& l, H& J# s. ^, R数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了 ...

" x: t7 [9 R' S# @DDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可
作者: 叶子wy    时间: 2015-5-18 10:56
weibo1988821 发表于 2015-5-15 15:19
( v% Y& r& p! _% V& J0 d2 N5 p3 QDDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可 ...
& l, P3 C6 f3 g6 f0 e" H
你好,”接收数组放在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) W. G; P" ?8 l, z( d7 I9 k
l楼主你好,我最近也在做FPGA与DSP之间的图像数据的传输,我想请教一下,请问这个CLOCK START ENABLE 配置 ...

  H& d( Y' t5 c1 Z; h- v5 r寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
9 H* z: e* X$ z- istatic void UPPInit(void)3 R6 e% n8 E" M9 A- ]6 c
{, X0 l( K6 \9 ~% m, s/ ?. O1 @
    unsigned int temp_reg = 0;
7 ~. y+ d8 c3 j3 x/ r9 y$ h+ U) a2 a# O9 M* M) D
    // Channel B params
& D8 L# A) S5 Z& a7 k# }% \    CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF);     //Left-justified, zero filled
0 c% C9 S2 ~( b- s2 [- V: I    CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT);      //8-bit interface9 n) a  j' y: K8 V
    CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL);     //Channel B bit width = 8; n' Y- i4 A. B2 F8 {& ?! U8 I$ x
    CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE);    //Single data rate
# b: g& o+ R2 p$ H# f! S$ P2 M" P. }9 ]
    // Channel A params8 J7 Y1 q0 |: M3 a/ v& Z1 M
    CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF);     //Left-justified, zero filled
2 d0 ?3 v7 j5 B  G. _) [    CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT);      //8-bit interface
9 t; ?5 e6 m. r  ~4 E! l    CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL);     //Channel A bit width = 8$ W4 X7 z+ _4 W6 z
    CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE);    //Single data rate& B. i$ ?( X* [7 W! n- Y
$ ?! C- P; U1 R  h# t# M& @* a
    CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO);       //Channel A and Channel B are both active.3 B, F/ x) i4 [# S4 f
    CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0);  //Channel B transmit Channel A receive" e$ p9 U% W; T% s
1 A0 ]5 d! L! f+ H$ B! |/ C4 f, c
    upp_reg_hdl->UPCTL = temp_reg;
1 ~% o4 E6 g) x/ Q9 @+ I: J
9 U! s- T& T! a! w) v% a4 e    temp_reg = 0;   6 Z0 U' y/ ?+ ~3 E) V& x# t$ M! k

% C: c$ ~; X, h6 Y    // Channel A params
8 e: x% P+ g& h2 X0 T    //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE);  //Channel A data pins are in a high-impedance state while idle
8 ^! K# O# O; R; t1 W    //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor' Y* I# i7 \* K0 }& D, v. P% v* ~
    CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.5 C" N- E" X2 B) d1 H1 e" A% ^5 w, \
    CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE);   //Channel A ENABLE Signal Enable
: y: A0 @, N* @7 H2 Y% A- C0 l1 t2 `# C- X! n2 S% r
    // Channel B params8 H* E1 j! ^9 M2 C2 C6 U/ D* ^
    CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
& o5 w: i/ u( N  ?/ L9 D* }    CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.3 N+ v, g8 D; Z9 r2 O
    CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE);  //Channel B ENABLE Signal Enable
3 r9 S: w2 N( @
3 X2 O" _8 ^+ \1 U, f' T$ [* x    upp_reg_hdl->UPICR = temp_reg;
, T! h& \1 R$ P, N0 q' D( ?+ w' F8 N" j2 m3 C! l/ G; Z' g) N: q
    //temp_reg = 0;5 E7 c! x: y8 w/ {  l* d
9 S$ j( s+ U2 z  H( D, Z
    //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b);   //Channel B idle value( Z( _7 f. N' _1 f8 N0 J2 n# s
    //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f);   //Channel A idle value
. l9 K4 }  u6 d0 H8 R4 C6 c9 }  `  H9 r
    //upp_reg_hdl->UPIVR = temp_reg;# x, V% T9 Y; R  e
7 y; [* M% x7 ^% [
    //temp_reg = 0;% M/ e8 j0 S: T( |+ c( S

+ s. q0 A, S7 m1 {4 v+ S" K& |    //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B);  //set 256B DMA I $ v) i- Q  H9 Y; V9 g/ o3 y
    //upp_reg_hdl->UPTCR = temp_reg;5 O( ]. z. L! M

; d, e4 q2 v0 \4 b    //temp_reg = 0;/ Z) k; q) E6 n  `$ R
    //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE);  //B to A loopback mode enable/ N! h: O! @  o  J4 I# [
    //upp_reg_hdl->UPDLB = temp_reg;7 ]6 t  p4 B) V: l! C* Q

% W! Q- g8 F/ V/ @) V' z! u- t}




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