嵌入式开发者社区

标题: 关于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信号,才开始接收数据呢?4 S- O- a" @6 @5 Y+ D

作者: weibo1988821    时间: 2015-5-14 19:40
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40
5 v- {9 E  G4 Z, L你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

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

8 e/ r7 |, C# W$ z) `数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:34
weibo1988821 发表于 2015-5-14 19:40$ `  U2 y  W" ~% C4 i% Z
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
; y0 S4 c2 ?7 X: g
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: weibo1988821    时间: 2015-5-15 15:19
378087736 发表于 2015-5-15 11:34
6 c) u8 z4 B, v6 F6 \数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了 ...
5 z9 [" M) P0 k% s! H# W0 I. F
DDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可
作者: 叶子wy    时间: 2015-5-18 10:56
weibo1988821 发表于 2015-5-15 15:19
3 o/ T- t0 m' `- G0 m" y9 aDDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可 ...
1 m( J4 Q; u' h
你好,”接收数组放在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- I$ X" m- o3 I4 N; p* U* M
l楼主你好,我最近也在做FPGA与DSP之间的图像数据的传输,我想请教一下,请问这个CLOCK START ENABLE 配置 ...

! Z; C& R& p2 N, W: B$ d1 L寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
# }" e1 H: a+ \2 V' t" K, ~static void UPPInit(void)
1 d/ X2 \; F( A5 _" g  D  P3 X{
) r& s+ j1 t) g2 W' E- I+ l+ d    unsigned int temp_reg = 0;, W$ M. M0 j; Z& H  q9 W

6 g7 N; v4 ]! V    // Channel B params
7 d+ a) A  D3 `. B. c% l    CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF);     //Left-justified, zero filled
8 P/ L2 S& t. G) O6 K    CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT);      //8-bit interface7 w+ ~9 L& {* B, S* `
    CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL);     //Channel B bit width = 8
8 p% O# s+ r$ ^1 X& g  l$ o3 P    CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE);    //Single data rate  q, r( K' D* `9 c

* ?' x0 I5 {% \( t- V    // Channel A params
2 G& }" i4 y5 r    CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF);     //Left-justified, zero filled
! d5 c& n3 v8 C$ K    CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT);      //8-bit interface. A% Y! [% N! F2 K" `& m+ y
    CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL);     //Channel A bit width = 8/ n4 M1 u. j, k( V$ f
    CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE);    //Single data rate
+ b# y+ u- H; u+ i
  s* u' j8 R" A) ]5 G    CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO);       //Channel A and Channel B are both active.0 Y" m/ G/ }$ |5 l7 K( T
    CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0);  //Channel B transmit Channel A receive7 C* j& H5 r, ]$ z
" G- x5 ^/ R1 {; T5 |
    upp_reg_hdl->UPCTL = temp_reg;
7 t- c2 t; L# [& x. Y! R/ f  V
) `9 U8 _+ \- {" f, T; j/ \    temp_reg = 0;   . \3 V  O0 `# P/ H- J# r+ R) Z

- b0 e, g8 J+ M. T    // Channel A params
# }) q0 s  m% X! A    //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE);  //Channel A data pins are in a high-impedance state while idle
) ~& {0 X9 X5 @* f    //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor  u$ l* s- T6 o1 T) c. o
    CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.% n" H* q4 W9 u  x4 |* k
    CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE);   //Channel A ENABLE Signal Enable" l6 J: B+ ?0 Q* z0 F
& `& O* R$ |. C1 ]7 P
    // Channel B params6 R% S3 o5 u! t1 a
    CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);9 X4 }- X0 r. n1 B4 _
    CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.1 P, o/ _' n5 n# ]4 L
    CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE);  //Channel B ENABLE Signal Enable3 w" |7 y; m& W; u, B

" F0 A$ |+ b7 T5 W! U0 ^, X/ w: `5 ~3 u" W    upp_reg_hdl->UPICR = temp_reg;
, ]; L  d/ ~. J
0 |- @0 s% l; T; s$ m4 i# Z    //temp_reg = 0;: z6 l; k$ p9 ^8 {/ }

- R6 Y/ V9 Q) a    //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b);   //Channel B idle value
+ r+ v& \* K- V3 ~8 d$ C    //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f);   //Channel A idle value
  Y+ A3 R% }. f4 V. X2 I+ F6 o) Y8 |( [
    //upp_reg_hdl->UPIVR = temp_reg;
! j" Z& |9 h* L/ ~6 l, H
" ^9 T, E9 h, B* n. P6 ~. ^2 M( T    //temp_reg = 0;
$ |2 @, m8 R1 @& d& F& Z
, _3 O" i' t! Z7 u8 |: n    //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B);  //set 256B DMA I
+ e% K5 I8 l, z    //upp_reg_hdl->UPTCR = temp_reg;$ g/ ~0 [8 i+ m9 Y8 q
* G* Q, }: j+ v
    //temp_reg = 0;
9 c# P1 D, u6 T& j2 T    //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE);  //B to A loopback mode enable' s7 z, f9 C4 G" B" L
    //upp_reg_hdl->UPDLB = temp_reg;( j+ l* s  d& A1 T  {9 m; E8 I

' `: k. h% U7 i7 g}




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