嵌入式开发者社区

标题: 关于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信号,才开始接收数据呢?
" P- L  i+ `, L/ O5 [; [( o% q. S; v
作者: weibo1988821    时间: 2015-5-14 19:40
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:409 [9 `0 e8 _/ [1 L; U4 i
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

! U$ h' ?+ u3 x数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40: \# g9 a% q5 C! o! m, F# B
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
+ ~8 y+ O8 {8 w# [  f; h
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:34
weibo1988821 发表于 2015-5-14 19:40
+ w6 i: `9 C6 E, z7 C你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
$ q9 b: h& p& L; ^3 v$ b
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: weibo1988821    时间: 2015-5-15 15:19
378087736 发表于 2015-5-15 11:34
- }9 ?6 u  t/ {' z3 Q8 {0 a: E数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了 ...

1 F8 `/ j/ a1 b8 jDDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可
作者: 叶子wy    时间: 2015-5-18 10:56
weibo1988821 发表于 2015-5-15 15:19
8 D7 y9 x) h: c) |$ bDDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可 ...
7 ^4 U7 z# v# 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:54
1 m' E" `* P, [* rl楼主你好,我最近也在做FPGA与DSP之间的图像数据的传输,我想请教一下,请问这个CLOCK START ENABLE 配置 ...
* h2 x7 _( \2 U) X) N" }& V
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):3 E$ U+ l& L# p# e" _- J
static void UPPInit(void)& X( Q& T" \3 h! m; ^
{
$ v6 A& X: ^7 ~2 E1 @    unsigned int temp_reg = 0;
& k! ?& |  v% P% H2 ?
9 [7 T" a% n$ _8 |" b. `    // Channel B params" Q) |5 |3 |0 @; S* p* N
    CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF);     //Left-justified, zero filled
  N+ O4 N8 X5 o# ~* h    CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT);      //8-bit interface  R* s5 Z$ [% F# I6 w9 X/ H; ]
    CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL);     //Channel B bit width = 8# `8 U' _- O4 r# M# e$ l
    CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE);    //Single data rate
; y& p- P$ D3 X6 K. F; r  K
; e, t# H4 k6 u4 X5 g! f    // Channel A params+ I) k; w. n2 O- B7 u
    CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF);     //Left-justified, zero filled8 M3 s7 a3 P0 u$ u; k) U" z* r
    CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT);      //8-bit interface
8 B. w/ l( G& Y0 G& k1 z. B+ O. d) v    CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL);     //Channel A bit width = 8
: @0 H& @8 ^& ^2 v8 u, o    CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE);    //Single data rate6 S( @2 w0 I9 a% Y

7 E  |& I. z1 U8 F  b# f" s9 s3 l    CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO);       //Channel A and Channel B are both active.
* d: ^1 }* A5 w7 @4 a    CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0);  //Channel B transmit Channel A receive
$ @) F+ d5 a4 j; d! N6 _% G) i3 t$ S5 @# x0 R( `0 y
    upp_reg_hdl->UPCTL = temp_reg;
; v6 y! v7 j; N+ e: f* C, Y/ c: k6 l$ p
    temp_reg = 0;   , Z- o: `2 {5 @: |  y: l- C

! b! Y" J$ y% w: A5 Z% E) c; K    // Channel A params6 @+ j" H$ u' O) W
    //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE);  //Channel A data pins are in a high-impedance state while idle
) G& z; e! H0 i( c    //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
- j& b& F+ J' a( _$ h6 l. |    CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
$ B# M/ ?6 P; z1 h* @  s* l    CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE);   //Channel A ENABLE Signal Enable
" s2 K* v/ O0 \- F8 M8 y9 V/ _9 V5 D0 k
    // Channel B params$ o# c, f' s) @+ w2 f
    CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
; U. E* Y; N$ A/ L+ @) e: y    CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
5 w+ t4 k4 [0 o    CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE);  //Channel B ENABLE Signal Enable
. k: ]8 f9 R8 [) O0 f. v: C8 m: h# A& f+ h& `. S
    upp_reg_hdl->UPICR = temp_reg;5 k- G$ @; s, f1 V  |
, m4 N' c" k8 x, Z
    //temp_reg = 0;
" J( p. l( N$ [  M/ [/ K) T, C% q% w
    //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b);   //Channel B idle value. L6 ^8 @0 S; K3 Y1 S0 P2 O
    //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f);   //Channel A idle value& R7 @# l/ U* g' [& B

* z: V& o0 [7 Y7 l0 J    //upp_reg_hdl->UPIVR = temp_reg;6 t( ?' _) `+ l8 f' R3 T, R

0 ]! z) z) S  D  g    //temp_reg = 0;
& j* ]1 K5 x; @( r5 K* R( H1 A1 U5 Q2 g
    //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B);  //set 256B DMA I & H: [. R6 t( T
    //upp_reg_hdl->UPTCR = temp_reg;
! q! Z8 a! L7 s- S
0 i" t5 z  N) I  Q) J    //temp_reg = 0;
2 M5 H1 n: J$ Q' G; d# \) @    //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE);  //B to A loopback mode enable
& }' a8 ~2 J5 T; g! o    //upp_reg_hdl->UPDLB = temp_reg;( ^" m3 A& Q& W8 c4 f. ^# m* @8 x

8 s0 j2 m1 N* ~7 {# z}




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