|
8 N' W& d* @. F. l
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
2 E! Q4 s. _& n0 L8 r' hstatic void UPPInit(void)) g& N# a, l( _% q
{
! \! s+ e5 P7 T8 n6 f9 d" \ unsigned int temp_reg = 0;
3 T4 @4 t. ?+ N
) @# |; K4 J. k* y2 `8 [$ `( @ // Channel B params
5 Y. a% g S3 L% x2 d, T CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
. I0 U# Y) ?) H CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
6 s* r. T& D3 {4 | CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
. i: G6 V2 P, I7 |( t' u# l CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate# i5 C n9 K/ g+ P: ~2 V7 w: N+ J0 A
) @" H( q9 Q4 n0 R ]7 L // Channel A params U; f3 M# P! o( f5 I( M
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled4 p: l% C/ r6 q; C% I8 l
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
! s0 A% h. h# A7 I a, V CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8) |9 n+ \; j$ W& Y, A
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate0 S4 U- C; F9 N( j$ z* ^& N% l9 |
) X! J7 [( a5 x
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.9 }; G" q' J. F; N1 E& z% s0 t
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
# M/ ~6 j+ G( [7 ?9 E7 `6 f3 z+ V2 g3 K8 \3 f
upp_reg_hdl->UPCTL = temp_reg;3 G' `! j: a W- o1 T. m- x& c
/ Y8 H* B" {8 s( Z temp_reg = 0;
- u: g. K! a+ c( p* Q" b. A+ [7 I$ P9 o2 c" k4 }# r3 |+ ?. K4 j/ e! M( `
// Channel A params
/ h n$ L) M& d. F$ H0 Q //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
) S2 X5 v7 J/ b9 ]0 j2 } //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
, Y( o- ~$ }4 v8 _2 k CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
" k. `* O+ Z% l2 o! \2 y0 z$ ? CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable* L: L! w8 M' p: r" p* ]7 h
6 v$ I$ z" E o# H // Channel B params
2 p) T1 P1 x5 O: ~: Z/ [/ P, z CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV); |* ]+ R. ?- e# {/ \
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
- ^: F- o1 F1 _4 L CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable$ m$ E# _' e! t& R. g0 H* e
* b: r% Y7 k/ P7 ?0 T3 S. W" I upp_reg_hdl->UPICR = temp_reg;/ n- Y% m8 s; y6 K) }
6 k4 e& ` l3 [9 c. ~. P //temp_reg = 0;+ i' M$ v: s" t6 M7 j8 C" z
4 L6 u* G( b2 B; w- } u
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
1 I" w4 d, ^/ B8 y) O. Z% c //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value! T5 Z( S+ s* o: c. a% {, G: F8 t
I" y7 x3 m2 B+ _4 {- ?* m* ` //upp_reg_hdl->UPIVR = temp_reg;
$ _* k. Y) ?# `3 ?5 v7 o6 z
4 g! ^7 P3 n" G6 ~ a8 _0 |7 ^ //temp_reg = 0;' r( @9 z# |+ A3 Q8 z
1 U' V. C! @7 Z: ~/ u
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
0 J; U- q6 G; F+ h8 F. ^ //upp_reg_hdl->UPTCR = temp_reg;
. a& G# }; o% a, G1 s$ z1 q' K6 i) C" z! R. g$ p
//temp_reg = 0;, k. M: O6 s8 f. T. h& P- r y
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
- z; C0 i+ M1 n //upp_reg_hdl->UPDLB = temp_reg;
1 Q/ l5 H1 `% t$ v' t$ K- t
+ W1 p; Y/ C, c0 ^1 L5 z* @# o! t} |
|