嵌入式开发者社区

标题: 关于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& B3 d. Y0 N  @

作者: weibo1988821    时间: 2015-5-14 19:40
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:400 b2 y$ z9 @' B7 P! X  g8 m
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
/ A2 k' Z6 r- h
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40* A; h& m! _" }7 `0 U6 L# b
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

" U  F5 C0 ^! s数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:34
weibo1988821 发表于 2015-5-14 19:405 l( G: q0 K( d/ q$ a* p4 O8 b
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
2 K) b# P6 J, h  G3 F
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: weibo1988821    时间: 2015-5-15 15:19
378087736 发表于 2015-5-15 11:34
+ u4 Y% `" M& `4 q0 n数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了 ...

" o/ v4 G, n6 ^  FDDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可
作者: 叶子wy    时间: 2015-5-18 10:56
weibo1988821 发表于 2015-5-15 15:19* h) b7 m2 I8 T" s1 y( T5 r
DDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可 ...
1 D: B) H0 S& g" j
你好,”接收数组放在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
' _  |% ?( [* h6 o# cl楼主你好,我最近也在做FPGA与DSP之间的图像数据的传输,我想请教一下,请问这个CLOCK START ENABLE 配置 ...

) S1 V4 j# t# v& R$ F9 N' F9 i寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):- E4 y1 B8 {" r# s' n% ?/ w) L
static void UPPInit(void)
7 V6 R7 q% O+ k$ X/ X{$ i$ ~* ~8 ^# i$ |
    unsigned int temp_reg = 0;# o$ m: y7 ~& O0 U; H3 S" M
3 F0 Q$ b* M/ j2 w
    // Channel B params
1 u' z% c5 _6 G9 E    CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF);     //Left-justified, zero filled  Z: s) Q) p4 L2 ^9 |0 K
    CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT);      //8-bit interface
% b: C0 r* }3 t3 m    CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL);     //Channel B bit width = 8, h! V5 x9 n, K' G$ @
    CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE);    //Single data rate
( [! I2 ]1 ~7 u2 j" q# y* X$ A3 z5 v. n' o! N; n( w! c
    // Channel A params
8 [( q9 q" o1 Q+ M( k" X    CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF);     //Left-justified, zero filled
  z( Y7 a) y) h4 Z0 s( _7 h4 @  X    CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT);      //8-bit interface4 m. K! a' t. U& Y4 o- O
    CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL);     //Channel A bit width = 8  ]! U6 G% h0 E% Q
    CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE);    //Single data rate$ c4 |" o3 g; Z

! ~6 m5 n' N0 S- m    CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO);       //Channel A and Channel B are both active.1 U5 y* P2 n/ z7 Q, B
    CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0);  //Channel B transmit Channel A receive
8 b0 X, \4 R1 ~# A: ]* y* p/ b) u$ y$ M* k$ k$ S
    upp_reg_hdl->UPCTL = temp_reg;8 e" L7 T* I2 Z- x) W: V

( H3 m8 i3 D) Q    temp_reg = 0;   
- x! F; ?; r8 w; [% Y/ e
6 ]  c) {: m. }* w7 _2 W    // Channel A params6 a4 E$ U3 b1 s0 f. o7 S
    //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE);  //Channel A data pins are in a high-impedance state while idle3 e# {, J5 E/ |' b% t! C' K+ t
    //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
# T3 l4 w: `: r1 t2 W( Z! V    CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.5 ^5 s' i5 ^9 p
    CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE);   //Channel A ENABLE Signal Enable
( K. R9 e$ s- n
9 Y6 C! L6 F' W8 d7 F& H, ~    // Channel B params% y7 J$ b" M/ B3 \1 a
    CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
1 K( m; k% Y3 O    CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.  g/ H6 q5 r, d5 u3 n: f
    CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE);  //Channel B ENABLE Signal Enable  {+ O4 B# [4 K0 D  z( F

3 p3 A" x1 n- h9 w0 ?& w- \' }    upp_reg_hdl->UPICR = temp_reg;1 t  ~* ^" m: Y, z  d
. s+ ?/ J2 v3 P4 F9 p
    //temp_reg = 0;8 {, U% s2 S) ~; u% F% ?
" t; T3 r0 `. D# r6 X' j
    //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b);   //Channel B idle value! \5 Y  F. \* }3 O+ X5 d4 @
    //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f);   //Channel A idle value7 ]. {  _! L3 i- r* s  f& \8 `" N

. |0 j9 u. g2 Y% ]! D$ |% a& P! Y5 r    //upp_reg_hdl->UPIVR = temp_reg;
1 @$ }7 U# ?6 H; u, ]; A. b3 }; L6 x+ [, e# x
    //temp_reg = 0;
3 W9 o# n1 s& u. G& T9 H' C9 V1 }* m
    //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B);  //set 256B DMA I 7 Q% M4 h& P" A' X
    //upp_reg_hdl->UPTCR = temp_reg;& [& {, F! l# A5 R% l5 i# J

* H% P7 }9 k+ r% G$ n    //temp_reg = 0;/ R3 M2 ^* ?# ?+ B7 v( y) h3 z
    //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE);  //B to A loopback mode enable
" g5 I$ h- o6 w    //upp_reg_hdl->UPDLB = temp_reg;" o1 ~0 o$ v' t' C) n8 J
7 F8 ~; j2 n, n0 k* T
}




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