|
|
3 T0 f4 @! o: x$ q1 A& t
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
0 a! i/ o4 J2 U, w- ystatic void UPPInit(void)9 I* P7 S3 A/ E) n# r
{4 @" ]0 ^/ j. S4 a% O7 T
unsigned int temp_reg = 0;
5 e$ n S# J( `% w1 |. z2 v8 p) K
// Channel B params# i* D; m1 e/ {6 n! d6 v1 U. Z2 [5 l. f
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
. x4 n2 U, m5 {5 w3 m" A" b4 e CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
( |6 U0 _+ ] i CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 81 I6 ], o D$ e; ? \" Z- r
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate( d5 _4 B# e- V
8 b( ?. Y X. T6 e6 I- L // Channel A params" ?/ x/ F- ^5 g2 W, P
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled( G$ y' Y& l; ]+ O. i
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface) }/ W" ~5 [- i! W& H
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 88 Y: K9 K; f6 a6 p5 _" w
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate/ q( v. y- f: t' O s& _# t5 j
, V; }9 \( U& r% R
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
7 G# N" R; m3 }+ b; _+ } CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive$ y) ^3 e( r5 Z E9 x2 Z
E3 F7 U) @/ y0 m$ b
upp_reg_hdl->UPCTL = temp_reg;
$ U$ F: a) ^5 c3 O& a
I8 O3 D3 ?3 ?. b" r2 [' y; n temp_reg = 0; 5 x3 X$ [* Q3 s3 H- j8 M n" i
) P. e: S' E/ [7 M
// Channel A params2 I- U! g A, ]( Y4 D
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle$ G; G% k7 O$ `$ Q) A. Z2 v. b" p
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor0 E& j, B" g- g) X0 b9 [/ Z
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.8 j8 T9 R! ^& ~0 u1 S
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
) _2 K* }/ _ d9 g: P% d
! S5 I6 I d2 p // Channel B params
0 Q# q. v1 V0 L2 j6 @ CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);7 [' |6 B9 ]9 w& ]
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.; w" K. _7 P7 w* \7 U3 B) n/ K
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable& d% G" b; `+ h
% C: T8 g0 E( H$ E! E7 S$ v3 Z) } upp_reg_hdl->UPICR = temp_reg;
/ D$ M& C! y" w
" w7 H9 U; F+ r- {! t8 D9 Q //temp_reg = 0;( y+ z, D% X, t
@2 p8 ^4 G9 N7 r0 B2 {1 @0 i! | //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value- C. }- @- L% v9 Y
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value7 Q0 z- L2 o$ D2 C4 e
1 v& O% ^ d6 d" ^( i //upp_reg_hdl->UPIVR = temp_reg;
3 ~# v) o0 K- P3 k" w9 W; ]1 R% u0 w: p2 }: w' ?
//temp_reg = 0;
8 u8 \; i z1 q. G+ w3 W0 J9 Z! B7 F6 j! i! p' Y( b* Y. }* ]0 F
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
" @' p9 s. \# `) l7 w5 y; U //upp_reg_hdl->UPTCR = temp_reg;0 U \5 y9 ^4 l6 Q- h7 x s
& c5 G$ m" u1 [/ y; y9 r/ B
//temp_reg = 0;
+ a0 D/ _( p) i: X: Y0 E //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
. C% u1 W! e" E9 W( q0 |5 B2 @0 H+ o //upp_reg_hdl->UPDLB = temp_reg;: f/ D% e9 M! F6 ?
0 k) b# e |5 o* t- j* H
} |
|