嵌入式开发者社区

标题: 关于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信号,才开始接收数据呢?3 M% \/ n" |, R1 y6 W

作者: weibo1988821    时间: 2015-5-14 19:40
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40
! d2 y' s) G7 z. h* d( k3 I4 P& a你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

% J: l4 H# U& @+ Y" k6 R数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40  k5 ?) Y: U8 g
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

8 z" }1 A: M/ p$ R+ h, v数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:34
weibo1988821 发表于 2015-5-14 19:40
6 b4 G' n! S! I+ u9 J你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

) y- X# @; @9 I! P0 }2 c数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: weibo1988821    时间: 2015-5-15 15:19
378087736 发表于 2015-5-15 11:34. c/ ]; _  @; `2 B6 M. q
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了 ...
: x6 |6 c, _( i. I3 O
DDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可
作者: 叶子wy    时间: 2015-5-18 10:56
weibo1988821 发表于 2015-5-15 15:19" q# E& c! g4 k' u3 S
DDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可 ...
( M6 U) b5 `- x: M2 T9 }
你好,”接收数组放在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 \! L, r: E$ @( ~4 i) x: J
l楼主你好,我最近也在做FPGA与DSP之间的图像数据的传输,我想请教一下,请问这个CLOCK START ENABLE 配置 ...
0 c4 k. _) [6 L, t: i
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):- c  V6 G" Q/ m3 V3 D7 Y3 C
static void UPPInit(void)
2 E  O% Q3 t: i- Z{
. {4 v, A' M+ Q6 c% y2 k  e    unsigned int temp_reg = 0;
! L: E* a1 y2 k* E& S6 K" s, D7 g- p" ?/ m/ H" m0 @1 U# f
    // Channel B params
. A. {" s0 O- \    CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF);     //Left-justified, zero filled
  N& \8 q) O# K2 c: K- u% y7 {    CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT);      //8-bit interface
# K/ z8 i" Q8 s( g( i5 e/ s* i    CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL);     //Channel B bit width = 88 B/ a7 ~3 c$ h5 w" m
    CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE);    //Single data rate
( U" q2 C0 R- ]+ S! e. z. V* r4 \* d( n! w0 y" v9 u
    // Channel A params
. z/ r9 Y4 j) T- ^/ z" W    CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF);     //Left-justified, zero filled
6 R3 P. T! a' J- M8 L- B    CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT);      //8-bit interface
/ V+ X, ^- a  c+ y; }5 c& ]; ?/ @    CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL);     //Channel A bit width = 8/ I$ e( A! v/ H
    CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE);    //Single data rate% K% S1 M) Y' L5 X/ F/ Q

, @/ J5 j! N3 }' f. C2 q0 c# d    CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO);       //Channel A and Channel B are both active.( n3 T1 Z7 p5 {/ |2 o
    CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0);  //Channel B transmit Channel A receive" S! K. J* Q  F0 ?; h" @. Q2 B' P# y

6 y( ]2 {/ Y' d- Y, f, p9 x    upp_reg_hdl->UPCTL = temp_reg;
( `. U) E2 X6 k! t  v; s
  d8 F( C) d- H8 z6 w    temp_reg = 0;   
5 g& F0 H; a3 T
: N9 _. {  C7 P, f: g8 R: Y    // Channel A params
/ M' M$ B( \+ j0 U6 u    //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE);  //Channel A data pins are in a high-impedance state while idle
4 V+ p" K4 ]2 Y3 c& v    //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
0 Q/ x$ M' s& S; J2 Q" o    CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
  A0 r3 J8 P1 D5 D! ~& ~    CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE);   //Channel A ENABLE Signal Enable
. I$ N9 G' v& |9 s/ X6 i4 H
% E5 o* Q7 U: o* ]    // Channel B params. q7 G  i. q% x8 F! V
    CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);3 [  u3 x9 q) @: ^) o" U& J. g
    CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.! e$ k$ E* l; T; |+ a. [* W& t
    CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE);  //Channel B ENABLE Signal Enable1 P$ z( S. p! R* F

. V: S. u; e# e* Z$ U    upp_reg_hdl->UPICR = temp_reg;
+ c6 u8 N4 U$ B  \/ n* w3 |/ l) Y5 b! u
    //temp_reg = 0;. \* x& i+ l+ o" v

+ R% w2 f& s2 A: \8 N6 A    //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b);   //Channel B idle value, R5 o; o5 e3 ^; v2 e: O
    //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f);   //Channel A idle value
7 A0 c, @  x; w1 g9 q7 t# C
8 g$ Z+ D3 Q$ r    //upp_reg_hdl->UPIVR = temp_reg;+ c+ l" E" h3 G6 ?# L4 U8 [
% m- T0 g* }# f. C; }9 h
    //temp_reg = 0;
$ m) p& `# H" V6 `& \, V# ~
! l. J7 P3 W1 w+ T    //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B);  //set 256B DMA I
) \1 [5 p- L' n6 w9 o    //upp_reg_hdl->UPTCR = temp_reg;! d# r4 L9 d/ g* L; E

" `$ `$ L5 Q& O' C4 p/ T1 _    //temp_reg = 0;
" U* B1 f  d2 f    //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE);  //B to A loopback mode enable1 C' O: l; H9 ~% S3 q
    //upp_reg_hdl->UPDLB = temp_reg;
$ X: m+ l# p# V! G/ E" w 9 ?: b( o( I7 ?/ \
}




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