嵌入式开发者社区

标题: 关于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信号,才开始接收数据呢?
: f' I: X+ `2 `+ Y) r6 _" }7 z% ^
作者: weibo1988821    时间: 2015-5-14 19:40
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:400 s# }+ J. r$ Q$ N  S
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

8 v8 W2 Q( E* U数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40
: I# V& o7 ?' [" ^; `) [. l你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

  ^" `" i. `. S5 s; w- p) `, x9 b数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:34
weibo1988821 发表于 2015-5-14 19:407 C3 E4 b$ q6 t! z4 g/ B
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
: y" J8 \) F, g+ u
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: weibo1988821    时间: 2015-5-15 15:19
378087736 发表于 2015-5-15 11:34
$ L: d% u% S4 N$ ^% e9 ]数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了 ...

* ^) E' O7 w0 K* x( JDDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可
作者: 叶子wy    时间: 2015-5-18 10:56
weibo1988821 发表于 2015-5-15 15:19
" @- f" K7 R0 m# U1 dDDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可 ...

! w% p1 T8 M  O2 i. S( h' I+ O你好,”接收数组放在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:543 b% }1 U3 m! J8 [* b* b* L
l楼主你好,我最近也在做FPGA与DSP之间的图像数据的传输,我想请教一下,请问这个CLOCK START ENABLE 配置 ...

7 E& X4 ?5 ~: r' p1 C2 B, V& c# [寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
( e* Y( ~# N; R  a' {static void UPPInit(void)+ t) [# v4 V6 Z" x# k  X3 Y  @" R
{. S/ ?2 `; s9 A  O; _  B& X
    unsigned int temp_reg = 0;# _0 G9 ~* J) a& G3 w& t2 w

/ e) L2 D6 A+ ?+ b, q8 j0 W    // Channel B params; Z2 w5 V7 q. X" X+ l
    CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF);     //Left-justified, zero filled4 u% e6 z* O9 F" E& r8 @% q; n* }( B
    CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT);      //8-bit interface; F: p4 y  `% J# b  g
    CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL);     //Channel B bit width = 8
* A5 C0 X, l7 V4 t5 m5 t( |    CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE);    //Single data rate& a# G: K( E1 R# L
. T# E& [' c. j* T# x" b1 y
    // Channel A params2 C. Q9 N6 Q. t! C
    CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF);     //Left-justified, zero filled% C- ^: W! ]! }. w& D
    CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT);      //8-bit interface
9 ^: O: s% [" Q( K    CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL);     //Channel A bit width = 89 h6 x1 |6 d' v: f- U' i8 A- _
    CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE);    //Single data rate
. N0 e( A& _$ L, y4 T0 `$ e& M, ]3 b  }
# M& [; _- k0 m    CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO);       //Channel A and Channel B are both active.; ~) }! }8 Y4 _7 t8 J- N
    CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0);  //Channel B transmit Channel A receive
& o3 I' _+ j. k4 @- P. B& L! F$ g  X4 p. Z, S1 Y/ X
    upp_reg_hdl->UPCTL = temp_reg;
1 l2 ?; d  C: s- L+ r' {% t' V& j$ H9 J2 s* ?+ B# p/ T
    temp_reg = 0;   
5 C. l, p' G( k* d7 }( L3 T
9 t, D% w, Z9 Q9 e1 M4 m& k7 f! C    // Channel A params% `+ V5 m, R# a
    //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE);  //Channel A data pins are in a high-impedance state while idle  O" O6 t2 F, u3 m$ F
    //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
  ^: F2 g/ A  Q+ S" }* }    CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
4 E% F2 ?/ X) b1 d7 N6 _2 [' ]    CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE);   //Channel A ENABLE Signal Enable
, }7 x: y! M) _& K& T9 Y7 `7 \- Z7 Y5 [& b. S+ A' w( {
    // Channel B params
) W9 t2 b+ f4 j! H9 V- H    CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);& {5 b' N1 T% f# G0 V+ A. o
    CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.8 g# @2 N3 {: e" z! M
    CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE);  //Channel B ENABLE Signal Enable
8 A( S* {, R5 ?/ s/ p8 _. |# u% k
* |; T6 V( a- @    upp_reg_hdl->UPICR = temp_reg;3 r* b" y* I9 o2 I+ i

( I4 t. e+ G6 L- N" Q3 q- N- [    //temp_reg = 0;8 o8 Q; U  T. B) y5 }5 n
* y/ t$ k* X/ U( g& L9 ^
    //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b);   //Channel B idle value
  z% a6 i5 H6 L. o1 q6 B    //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f);   //Channel A idle value
) N  M$ l/ x; v" W% _( ?! D4 J% J6 x; ~- s' O( j& j1 C9 [
    //upp_reg_hdl->UPIVR = temp_reg;) Y. o4 t" `* J+ l; P5 j* g

  `( d8 l/ i3 l0 X; X, ?    //temp_reg = 0;) g, f* S) T* S2 l$ h0 [

9 U- k3 ^5 L* n  F5 [0 Q    //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B);  //set 256B DMA I
" I- Q! X4 \. J/ p) ^    //upp_reg_hdl->UPTCR = temp_reg;! r+ x, X" [2 u1 W. F) S# g
2 M4 h9 |: l. Z. o4 Y+ d9 ?( f7 {
    //temp_reg = 0;
: Z; F, g1 g* s# i( X3 M    //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE);  //B to A loopback mode enable$ {% n9 ^1 X% V; h# P, E$ N7 Z; d9 m# e
    //upp_reg_hdl->UPDLB = temp_reg;
; @* D0 n9 u4 L; \! T * N7 b, b- r7 K7 E) @
}




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