嵌入式开发者社区

标题: 关于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 Q: ]; I) Q' T# B  O, U
作者: weibo1988821    时间: 2015-5-14 19:40
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40  @$ F( a! N8 u) b
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

( o. M! G. [/ H2 D# n2 b2 V数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40
2 m8 |; C0 Q/ a# n7 ]你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

& k0 n0 g& C) f* G; L% H: K0 G- S数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:34
weibo1988821 发表于 2015-5-14 19:406 s* H5 W/ s' \& c  ?5 P& c, E
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

. z4 b$ D7 Z0 _# p! V0 \7 r; f数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: weibo1988821    时间: 2015-5-15 15:19
378087736 发表于 2015-5-15 11:34/ z* c4 ~$ O# d" b% E
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了 ...

  D; P# J: e2 J1 \1 EDDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可
作者: 叶子wy    时间: 2015-5-18 10:56
weibo1988821 发表于 2015-5-15 15:19
: B: p3 x# a) A5 }8 a  Z6 G! uDDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可 ...
, U7 R4 F- j3 ^" t5 q
你好,”接收数组放在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:542 `4 W5 ~* z, A; C) Q& s
l楼主你好,我最近也在做FPGA与DSP之间的图像数据的传输,我想请教一下,请问这个CLOCK START ENABLE 配置 ...

- L  b$ [8 V+ U; K寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):, I! f8 a  J/ a
static void UPPInit(void)
' M8 @: B) @4 j+ y. o{
- F5 R6 k, a; M" B( @& Q6 |    unsigned int temp_reg = 0;" @7 D* u! @" M1 K8 w9 P3 r; G
: c! r  M: P% N& d' K. \
    // Channel B params. w8 h# T% i3 g6 r1 V; k; _+ M8 a, R
    CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF);     //Left-justified, zero filled
! c! e* V! K* k. B# `. R; ?$ T1 |( T    CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT);      //8-bit interface1 [8 J& b2 o% ?( A" {1 r" \& ~
    CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL);     //Channel B bit width = 8
- y' `( C% I# O/ A, M+ Z    CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE);    //Single data rate
* h0 h# a8 \7 @5 s2 M$ ~7 F4 N$ m, B4 R0 W" k- j  u' N
    // Channel A params
1 ~" Q+ e% u- I- N9 Y2 }# l# J) }    CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF);     //Left-justified, zero filled0 R8 w% B5 L% N' I( Q: K+ W, F
    CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT);      //8-bit interface
6 n5 j  m" @) i+ `* u7 a    CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL);     //Channel A bit width = 8% I# T* k7 i) k7 B; q# x
    CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE);    //Single data rate4 R. R. @( d; `/ @' F7 J9 A: t
/ B5 _! {$ M5 G, T
    CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO);       //Channel A and Channel B are both active.
4 m' ?% P1 M5 c7 K7 o# R' F! [- d    CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0);  //Channel B transmit Channel A receive
- K# ?" }& p, a2 I% \$ w- V/ r/ n7 B
    upp_reg_hdl->UPCTL = temp_reg;, K% f3 V, h0 I% D2 D- T

$ G9 o7 J* {9 V/ J    temp_reg = 0;   
- U/ y7 R; I! w" e, B- `8 e4 b& v- l  E7 Q
    // Channel A params
) `8 g) h. y: y) }    //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE);  //Channel A data pins are in a high-impedance state while idle" m3 d5 P, N0 t+ J% W# P
    //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor' {! ?7 r% m9 k) j
    CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
. K2 H  y5 L! E( S: ?    CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE);   //Channel A ENABLE Signal Enable; i. U( x) w. X2 t* A' f0 |7 {  z; }
1 y2 \- T& T2 G6 ?# b% k* P1 p
    // Channel B params! O" B6 u/ ?; Y8 ]- y8 Z
    CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);; t& L; f; p: V: n
    CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
- Q% h, O  U( H$ ^    CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE);  //Channel B ENABLE Signal Enable
# H; l/ ~3 Q1 R! d' G2 D3 R3 o
$ K3 Q. U7 \2 H% U% H) V0 ^7 e    upp_reg_hdl->UPICR = temp_reg;
" L9 N. Z* U8 v$ E
9 I9 O9 r4 z* n' a0 a) l9 \    //temp_reg = 0;0 z( \1 Q  s( z9 J$ [4 t9 F
& N( e% S6 _% R
    //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b);   //Channel B idle value! b5 \, Y4 {: s
    //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f);   //Channel A idle value0 @* Y# |; p+ n. w* a

: G: ~/ W& E3 }' F, Y6 b6 n3 e    //upp_reg_hdl->UPIVR = temp_reg;
- E: u! A& t5 g9 e* C) d' P% f' ~; A. L  [, _1 X5 Y7 N+ F# I
    //temp_reg = 0;
! n  s, L* ?3 M) V+ e' X9 U" e8 r; X* ?! w0 p& w4 f
    //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B);  //set 256B DMA I
- T2 G% R( m6 c6 U    //upp_reg_hdl->UPTCR = temp_reg;
9 i4 ^- L" B# s2 r/ F7 L. r: e' k0 F
    //temp_reg = 0;
: O8 C" I: B& ]6 h9 W) P. e    //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE);  //B to A loopback mode enable
  \, U6 Z2 G  w- p4 B    //upp_reg_hdl->UPDLB = temp_reg;
2 ~& n6 U( N$ s* j4 I
; C' [; Z4 [1 g* l}




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