嵌入式开发者社区

标题: 关于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信号,才开始接收数据呢?. N: b. I: k$ A' ^5 L

作者: weibo1988821    时间: 2015-5-14 19:40
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40
- i! F( A0 [5 w你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
" @, ^( O2 q- F% o
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:407 _- W* Q# I  v' J0 d0 x2 A" S/ Z
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

8 ]9 I8 Y; o: j. [7 q  T数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:34
weibo1988821 发表于 2015-5-14 19:400 m- q+ j7 V" {
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

9 \/ G6 U& J& u" E数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: weibo1988821    时间: 2015-5-15 15:19
378087736 发表于 2015-5-15 11:34
( `+ U% n* W' u# r" d! G% B* a数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了 ...

) r( _4 Z. K* \7 P5 F( v$ WDDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可
作者: 叶子wy    时间: 2015-5-18 10:56
weibo1988821 发表于 2015-5-15 15:19
, ]) o! d4 h- ?DDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可 ...
) O, X- y, m6 ^5 J  B6 E
你好,”接收数组放在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:546 r- ?2 k8 w; p* d( D
l楼主你好,我最近也在做FPGA与DSP之间的图像数据的传输,我想请教一下,请问这个CLOCK START ENABLE 配置 ...
. ~3 p  M) H. `
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):8 K0 D- h; v, B! M
static void UPPInit(void)
4 o% O1 n/ j" q" M0 J8 g# h& X3 ]{
$ r6 E4 A* ^* X( }# r* B9 y- e    unsigned int temp_reg = 0;* R- n( R8 U' w) I

) @8 {9 [. h7 d+ c8 m) f0 N! L% ~    // Channel B params3 J+ {- t* S/ a9 o4 }
    CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF);     //Left-justified, zero filled
& Z" s  f% |6 [7 S0 S2 e    CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT);      //8-bit interface
5 Z- T4 I7 N7 m) d; L; b    CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL);     //Channel B bit width = 8
1 d# m: {$ n* A    CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE);    //Single data rate( _( F+ ]* y/ h7 I1 a
3 F( v2 Y0 K! l0 m& L
    // Channel A params
4 _. ?* H" `6 o' m5 p    CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF);     //Left-justified, zero filled0 ~/ }# b: c% G# C0 L8 ]& @1 g
    CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT);      //8-bit interface& w* ~+ w; r# q. p4 b
    CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL);     //Channel A bit width = 8+ r- S: W3 X1 g
    CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE);    //Single data rate
9 w! j# u7 S: K% ]* V% e# A6 W/ X( m; l' E, a+ X
    CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO);       //Channel A and Channel B are both active.! x) R3 z+ O2 M$ n" @8 G: B# s
    CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0);  //Channel B transmit Channel A receive
2 `9 u( a  m. O8 q, C& S
0 a+ G) D3 r5 h2 Z    upp_reg_hdl->UPCTL = temp_reg;
3 _( y; c8 ?! k4 p& g) Y* |% M; Y- }  K" j' e- |
    temp_reg = 0;   ! \: v, [2 c" v: z- w9 x5 P' T
- f! U, Y( W3 V* Y" L
    // Channel A params+ t* N8 h0 o  M8 E
    //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE);  //Channel A data pins are in a high-impedance state while idle. a8 I9 W: ]4 n, F6 @5 ^, R( ?
    //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
% F5 t( {8 p5 @% u/ B$ O7 O, A    CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
0 m+ }9 y+ m( }% M6 h& T    CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE);   //Channel A ENABLE Signal Enable
, g$ r7 W5 r( N: }1 z# P
6 l9 I  g$ c& h6 [    // Channel B params9 Y' N8 o- A+ Z( B# S
    CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
- }* y" Q7 w, U0 u6 `    CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
9 w* p' N# W; o( U+ E- F4 x0 r    CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE);  //Channel B ENABLE Signal Enable
& _( j% a7 i, m2 l: Q5 V3 g0 R2 i! G/ M3 O' l6 L6 ^
    upp_reg_hdl->UPICR = temp_reg;
9 i3 D! \9 C) X$ v& [
2 p, z- ~3 m9 x( |7 k# F4 s# P6 P1 c    //temp_reg = 0;; }( l5 T- ?, g
) h7 d0 E% `# d) B5 z3 D; Z4 W
    //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b);   //Channel B idle value
$ X( \7 j8 [" ]3 X    //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f);   //Channel A idle value; Z$ o0 c+ r% H, U
6 a; w: \% a! M8 [5 }* Q
    //upp_reg_hdl->UPIVR = temp_reg;0 y( k; O$ d% B
$ n- o2 k) t, R
    //temp_reg = 0;9 p( o- u; E. r

# y& u! |0 }4 v5 m5 Q    //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B);  //set 256B DMA I / E! z, ^! ~. P+ |0 P
    //upp_reg_hdl->UPTCR = temp_reg;
6 Z# B2 V, U! p+ O# ~+ L  Z  D! G: @/ X5 x" `
    //temp_reg = 0;5 R2 y9 V/ D- H1 z6 V
    //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE);  //B to A loopback mode enable/ I2 _8 f8 Y2 s) g. z; ~
    //upp_reg_hdl->UPDLB = temp_reg;
, j" X. g. h4 V% d+ _$ X2 O
. [" y9 C8 |6 `}




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