嵌入式开发者社区

标题: 关于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信号,才开始接收数据呢?
* v$ R! \8 v* D
作者: weibo1988821    时间: 2015-5-14 19:40
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40- F* i% e8 ^) }
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

; {6 V( A3 l" c7 n# w4 H8 t$ y数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40
* V5 {4 d8 Y( S9 n& G你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

6 E# e8 i0 r8 v数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:34
weibo1988821 发表于 2015-5-14 19:40( x! ]' q% k/ Q: P' E
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
# e: E$ I% S/ c" C
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: weibo1988821    时间: 2015-5-15 15:19
378087736 发表于 2015-5-15 11:346 W$ p; S0 X+ j0 l- B9 {
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了 ...
( M, z% p: N- N
DDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可
作者: 叶子wy    时间: 2015-5-18 10:56
weibo1988821 发表于 2015-5-15 15:19/ ?& C% s% h' D; m$ Q
DDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可 ...
2 N) E% v6 [- `2 r& i
你好,”接收数组放在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 v& |0 X% N5 M" P1 y! b9 E
l楼主你好,我最近也在做FPGA与DSP之间的图像数据的传输,我想请教一下,请问这个CLOCK START ENABLE 配置 ...
6 R  V1 s9 B5 V& @! ]
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):& z8 ~7 D1 l9 q
static void UPPInit(void)) \3 \" O7 x6 S9 D4 V
{
4 r& Y( r; o  G; w, X' f2 b    unsigned int temp_reg = 0;
/ {5 m" X+ ?7 Y6 |! C4 j  d: [1 Q2 O0 a1 k7 _% m; T, k1 ]
    // Channel B params
- H$ t& K# [- h. h    CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF);     //Left-justified, zero filled/ ~/ \; l9 u6 K6 B4 V, i4 E
    CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT);      //8-bit interface; S- N3 n1 ^7 c1 r" q2 k# _1 r
    CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL);     //Channel B bit width = 8
6 L! s4 R( h! ~8 d& Q9 f: o" I    CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE);    //Single data rate
* z* F, \# I# w1 ?0 P: M2 B* C
    // Channel A params, D5 ^- _. W& G/ q- B
    CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF);     //Left-justified, zero filled6 T3 s1 Y4 g. o
    CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT);      //8-bit interface' S; V0 f4 h# t8 e) Q
    CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL);     //Channel A bit width = 8
1 h8 g- [9 W6 @4 S$ k8 J    CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE);    //Single data rate( t/ I) H) X# c' L% }% M! \' v

! F/ @% ^( n8 L7 m6 F    CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO);       //Channel A and Channel B are both active./ d8 F+ Y6 I6 J4 z( \
    CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0);  //Channel B transmit Channel A receive6 n4 d4 R7 S- z9 p$ ^  u2 E9 |

. P. H' ~7 _+ i" g$ [; P* C: h    upp_reg_hdl->UPCTL = temp_reg;3 A) f9 d; p: m

. s2 z1 b  W# p! t# ?3 ]    temp_reg = 0;   : L1 G) c6 l6 Q9 ^* b, e8 j
) q6 P, [! c6 [& @" X% M. I
    // Channel A params
: D' ], u- v3 T! z' d$ g    //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE);  //Channel A data pins are in a high-impedance state while idle
: B9 o3 |3 u6 ~) u* h6 Q5 l1 ?5 j    //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor. u/ d) o) Z! v
    CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.. L5 ~: n% z' j. L0 t* K
    CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE);   //Channel A ENABLE Signal Enable
$ T, [" j$ w* E+ c- g# L% y
. ^  D8 K6 A9 l2 [    // Channel B params
. d- _8 ?: `* f6 B    CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);( n* Y+ ?, j/ S
    CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.( g/ H0 u2 E3 a' Y
    CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE);  //Channel B ENABLE Signal Enable
2 E7 @' \! K# y6 ]/ y$ p, `, |, Z% @1 w$ H$ V
    upp_reg_hdl->UPICR = temp_reg;
6 X, r& d2 b+ u! q& g$ C
% i0 _1 j+ w3 g0 {  c    //temp_reg = 0;
7 x* O/ b  Y' a; z$ D
9 n/ x, D& X$ {, `5 s9 m    //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b);   //Channel B idle value/ V! Z* ^9 C5 Z
    //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f);   //Channel A idle value( |" j% t  y- d) U

" ], |% L6 t8 |( Z    //upp_reg_hdl->UPIVR = temp_reg;
4 T" O5 i# B! _1 R5 R: R8 ^0 K+ B
    //temp_reg = 0;
/ @0 H# c1 y; d% h/ b
) }3 e$ t0 e# m7 S' @9 L7 W# ?    //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B);  //set 256B DMA I 3 K0 Q; t4 K0 B: d  C6 Q5 W9 s
    //upp_reg_hdl->UPTCR = temp_reg;
/ ?  W: n, o4 V) b7 ^
: L9 @0 S0 C: L! Z9 h1 A    //temp_reg = 0;& o8 I: O2 L" I5 e* m, P! b; X  X
    //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE);  //B to A loopback mode enable
! Y; t; ]& i: @% L5 e    //upp_reg_hdl->UPDLB = temp_reg;
- h  ?1 T$ v. C5 z6 Y7 W ) E1 I2 `( K2 M% K5 e5 c
}




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