嵌入式开发者社区

标题: 关于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信号,才开始接收数据呢?9 h0 x1 f1 ^* ^& a4 j% i1 o4 S! Y: B4 e

作者: weibo1988821    时间: 2015-5-14 19:40
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40
, U6 K' ?9 |& u, J' z; A你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

; N7 i1 v) W+ o$ g数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40$ r' b7 B* y* ?3 |- P
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
6 a+ N( t) Z& }/ t9 {! v7 |3 b
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:34
weibo1988821 发表于 2015-5-14 19:40, p0 D' Z& k+ a/ J
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
7 T  C3 w$ b9 T! c
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: weibo1988821    时间: 2015-5-15 15:19
378087736 发表于 2015-5-15 11:346 V. R: M; P4 ?* f/ ^. F
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了 ...
$ c+ o6 E. c" k" [+ Q+ V
DDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可
作者: 叶子wy    时间: 2015-5-18 10:56
weibo1988821 发表于 2015-5-15 15:19. M) o9 e  b  u0 r5 @& r. g
DDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可 ...

8 v" L0 C' W+ m5 |1 v你好,”接收数组放在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: k6 |* P9 ]! I4 }2 a8 {* ?
l楼主你好,我最近也在做FPGA与DSP之间的图像数据的传输,我想请教一下,请问这个CLOCK START ENABLE 配置 ...
# P4 ^1 }' i8 t& f
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):5 h5 b5 R- p. n* g/ y* b1 ?
static void UPPInit(void)" x' X# O( {5 T9 ^
{
: }/ X6 S% l! e5 Y0 ~0 q4 A4 H' \    unsigned int temp_reg = 0;: g7 c# s! F: H

) O# E$ H: w& U2 ^/ Y$ ^3 d! n% o    // Channel B params
) a& T' [% U" F+ U' O/ {    CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF);     //Left-justified, zero filled( O+ ?9 ~8 r4 D/ F) q7 P
    CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT);      //8-bit interface0 F3 p- u. T" H
    CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL);     //Channel B bit width = 80 c/ g% l4 f7 X- ?8 H) j
    CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE);    //Single data rate( b( q$ N5 W- c0 U& L

4 m) q( O- Z( [. D0 U    // Channel A params) q2 s$ W! ~2 S5 T  c3 G. l6 ~
    CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF);     //Left-justified, zero filled6 a" u, p7 U) u% ?
    CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT);      //8-bit interface
8 L$ g/ p; z+ R  O; |! w+ }9 t    CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL);     //Channel A bit width = 80 v- o1 v1 ?# X
    CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE);    //Single data rate1 K2 |5 P. [9 x* e, l* k
; r7 B. N3 b- \2 [9 m5 X' a
    CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO);       //Channel A and Channel B are both active.. V) m+ F$ ~  o6 ~3 N( r4 G
    CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0);  //Channel B transmit Channel A receive% y5 e7 f7 m3 u

- ]. I# i4 {' @9 K    upp_reg_hdl->UPCTL = temp_reg;( V1 J4 c. v# A9 t/ b  A2 T4 q1 x
: Y; Q* K. i/ I) j
    temp_reg = 0;   , Y( n2 t8 H8 q" u/ s

' _, f( D  p# F" a8 q) c% N    // Channel A params% V* n  K3 T7 w/ `' s+ w
    //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE);  //Channel A data pins are in a high-impedance state while idle
% H% B+ J$ w" z; {    //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
( s) Z: N& K* O9 l- Z! f* c1 J    CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.3 T! T$ l% }2 V; h5 i
    CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE);   //Channel A ENABLE Signal Enable4 u! r2 ?, Z, g# ]
* g3 b) T5 F8 Z% j6 R
    // Channel B params
' S* K  I: n/ Z! k, s    CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);" H- K6 W2 c: ]/ Q
    CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.9 [4 h7 Z9 _( E' \
    CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE);  //Channel B ENABLE Signal Enable
) j/ V( J# Q; V. j! R+ u6 U& R7 l; f8 S; j5 [. i( t) ^2 Y, d
    upp_reg_hdl->UPICR = temp_reg;4 f8 g! Y* H5 b2 l
! e+ }# F+ ^9 }+ h2 Z$ y
    //temp_reg = 0;
4 X$ i  r5 L# ^, C$ W  w5 L8 B4 {" G- |  v# z7 Y0 h$ g) o& L
    //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b);   //Channel B idle value
& N* |; _$ {  E* v7 U( e8 b7 Y    //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f);   //Channel A idle value( T( m0 _! H9 B  b: b* `, N
* r! H, }& r& ?2 t5 [
    //upp_reg_hdl->UPIVR = temp_reg;
2 N$ X  H/ a) K) G# B  ]; [4 v/ W3 K$ ^' A; ~
    //temp_reg = 0;
1 s  a- k& ^& W2 F6 o! i2 r8 a1 @! ~7 x: B' ?1 r
    //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B);  //set 256B DMA I
1 g! [. L: ~4 U7 _0 w- X, l    //upp_reg_hdl->UPTCR = temp_reg;/ s; b) e* q2 u; L+ [7 U9 p
' g% i2 @* k5 Z! B6 q+ z
    //temp_reg = 0;
; X2 N. p6 ^1 r% s* D3 L) I    //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE);  //B to A loopback mode enable
( I  O2 p2 o! b# d3 S+ @3 J    //upp_reg_hdl->UPDLB = temp_reg;" R+ Z" o1 v8 w) @8 @) M# ~

0 j7 i( E6 |: U}




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