嵌入式开发者社区

标题: 关于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信号,才开始接收数据呢?
- J# q* O! U7 v* d
作者: weibo1988821    时间: 2015-5-14 19:40
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40. P) v- B2 A/ O5 o
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
& A5 l+ j2 ^4 \6 x7 q" D
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:33
weibo1988821 发表于 2015-5-14 19:40/ L# M& l/ r/ l  P$ r8 l' c
你的数据是写入L2区还是DDR?DDR的数据读写是很慢的

; T) g* M7 q- V7 g" b( ^数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: 378087736    时间: 2015-5-15 11:34
weibo1988821 发表于 2015-5-14 19:40
! l. C# k1 R3 f  _你的数据是写入L2区还是DDR?DDR的数据读写是很慢的
5 H# c/ y7 B' r$ o
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了,呵呵,大侠,如果要用32K 的L2 Cache存UPP接收数据的话,应该怎么用啊?
作者: weibo1988821    时间: 2015-5-15 15:19
378087736 发表于 2015-5-15 11:34: g5 Q) h5 h- m5 r2 x# I* S
数据是写到DDR的呢,我在16M的DSP内存开了一段收UPP数据的,原因是DDR慢啊,我程序中实在是找不到原因了 ...

; ~% V: j7 Y! uDDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可
作者: 叶子wy    时间: 2015-5-18 10:56
weibo1988821 发表于 2015-5-15 15:19. |, O( |  ^3 I% r
DDR存储数据慢是必然的,L2不用开缓存使用,直接使用就行,把你的接收数组放在L2区即可 ...
0 J! h; F# q. Y2 S
你好,”接收数组放在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
  W$ m2 i) Z) l& d, k+ g) V6 c" `  il楼主你好,我最近也在做FPGA与DSP之间的图像数据的传输,我想请教一下,请问这个CLOCK START ENABLE 配置 ...

. q9 N5 s. z9 j& \7 Q寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):5 P( B, [- F+ N$ x
static void UPPInit(void)
! B7 s! W! x& f. o1 L, Z% h{
/ q6 l) C& C1 c    unsigned int temp_reg = 0;' C, g& l( f0 F1 m6 J# U5 M

* `+ c4 [( T) z. W    // Channel B params
. U1 m& D' W3 N6 B, G8 b  Z    CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF);     //Left-justified, zero filled: L( {: W" V6 r5 w9 f/ f# L
    CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT);      //8-bit interface" h% A0 p' J: z* r0 ~) ]% ]8 U9 ^0 P9 ?
    CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL);     //Channel B bit width = 8
! E! z, g7 |0 S# e' m2 X4 F+ M, ^( S    CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE);    //Single data rate
- k7 b7 U  P/ W' l
1 w  `1 u6 j" D    // Channel A params! H/ w7 Z$ `' h6 J" |% O1 N2 W, U
    CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF);     //Left-justified, zero filled
" W1 F+ {- @& r- _4 }; s" ?+ X4 F2 }3 V- n    CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT);      //8-bit interface
, @+ z) c4 u' I3 o    CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL);     //Channel A bit width = 8
7 D1 Z! Q0 F; h    CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE);    //Single data rate! U+ S" f6 a3 J& j: g+ @8 U

+ ^7 }( t! w  E& R1 d' T  X    CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO);       //Channel A and Channel B are both active.( ]3 s6 l7 Q1 B# y: L5 ~2 n8 |' I# F
    CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0);  //Channel B transmit Channel A receive
) p  [9 L7 h) ~1 q& `
$ D% E9 O% D* U' ^    upp_reg_hdl->UPCTL = temp_reg;0 H9 \. O. u1 C1 e1 ~8 n

0 ^* _# \' n$ h9 _8 H: P, ]( z* g; R    temp_reg = 0;   
1 @& q9 L2 P& ]8 ~5 s6 U: I# y$ ?  y7 k- s4 F* m+ U( [
    // Channel A params8 n# c$ J  d. N- G& S4 E4 ~# d8 L
    //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE);  //Channel A data pins are in a high-impedance state while idle3 Z% [0 h5 H& c! ~
    //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
5 C, A; H; F) {; X" K% N! p; t# H1 G    CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.4 L5 L* y$ ^% m; l- b1 `
    CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE);   //Channel A ENABLE Signal Enable! {* ~& m  [# l4 Z: q; K' z

9 u2 c3 W; e; M, r% M9 N4 X. P# T    // Channel B params
* O$ l; Y6 l3 O7 r3 N: n    CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);; @6 \7 l' p+ N; D$ e
    CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.! h$ t% `( b! V& {6 V6 M
    CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE);  //Channel B ENABLE Signal Enable
& o* B4 ~! A! g, L5 e" H7 O4 l
& R3 n, k- W) ~$ m; V  @; V    upp_reg_hdl->UPICR = temp_reg;
8 Z- e( e5 M7 h/ J2 k# q/ v: S# p! z5 ~) o' L* F
    //temp_reg = 0;
8 Y$ X0 V4 P7 x+ N# Y8 w
! U% a$ @# e; o3 a# g0 ]6 |2 L! M    //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b);   //Channel B idle value* e" U6 R0 R, e% Y+ Y) r
    //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f);   //Channel A idle value) d: F. o! m3 z8 d9 o, _
; i7 n, S( m' c$ l' Z8 {4 x
    //upp_reg_hdl->UPIVR = temp_reg;
* J' F# A6 ~. r3 h4 B& @2 J  o# v6 |% ~5 m% [
    //temp_reg = 0;0 t+ [6 I; X5 \% R
: |5 F: |; W9 H5 {9 }8 g$ A
    //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B);  //set 256B DMA I % v/ m& y9 j, ~8 E/ m% ]" v& z
    //upp_reg_hdl->UPTCR = temp_reg;
" x6 ~8 F6 t+ d8 V6 s% v1 y: k: @
    //temp_reg = 0;
% ?; Q- t5 o4 w8 S    //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE);  //B to A loopback mode enable8 ?$ Z! f$ h: W$ U5 T1 h
    //upp_reg_hdl->UPDLB = temp_reg;
9 g8 C( b; X4 _' Y* z( ] 5 p% c  h2 ]5 h9 M' x& B5 v
}




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