|
0 D6 z( ?) P$ v2 W5 f% M/ l
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
: Y' T8 `) G4 m6 p! wstatic void UPPInit(void)' \/ c/ u0 B# S' D0 a& a0 T$ W
{$ ^$ o$ I: b$ f8 k' S
unsigned int temp_reg = 0;1 }. _. b, T9 \9 y$ E$ G& L
" V% e$ a( `" B% r
// Channel B params1 E; t" [1 j( i: E: F3 C2 F' q0 \
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
* l, a) n* F F7 N5 c9 q) Y0 i9 W CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
# N% K* i: L+ L8 p- A. r CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8, R+ ], d$ l/ N c: k8 ?3 Q
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
0 ?# f1 Y1 E8 O0 O' _" {- M% M
- F* }7 `. S2 X# R1 s6 W" x0 t& m // Channel A params0 E8 [- ] M& @
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled9 T O3 B8 |: A- Y* F& g+ @
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface! R$ {4 }) M. @1 }& U" U
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8% h& X9 C: F, G: \4 F0 J8 `, Q1 T
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate" C d/ c' H) d
, G. @% _* ]* a CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.8 c# I m4 z0 A5 k. c; G' b( X
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
5 n5 X8 b3 [2 N9 Q
2 q$ t" o* r1 R3 \ upp_reg_hdl->UPCTL = temp_reg;6 U* r {3 j7 K5 q2 b; ]5 o
6 L7 U, I3 a x( p3 x
temp_reg = 0;
' \+ }9 U8 V3 F! L4 j/ W, y5 c$ h! C" C/ e
// Channel A params& c( H0 m2 _/ g0 O5 @( U
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle+ H" R: b. n7 a1 d) e/ y7 c
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor% a3 y; @( I9 p9 ~
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
* \ c! [6 p. l6 g- I* q CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
8 c2 }8 o; [# D; T1 N; b
3 F- N8 J- v- ?& k* I$ B$ U // Channel B params
: w% i% C5 X* l! H CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
+ E- X+ G/ j, M3 q- i2 u7 N& @' N. J CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
1 U; ^1 [( _; g5 \3 j+ [ CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
$ t/ Q' b* i" t2 a; Q
& G+ x! Y1 n2 Z) I1 Y/ G upp_reg_hdl->UPICR = temp_reg;
Z4 c; \7 d/ ~, e
- A& f: j0 ^! H( x! E. ?/ I //temp_reg = 0;6 ~2 T6 R6 z- f9 B- U" P# L" F; S
, q- ?7 _: H3 J% K9 i //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
" R. N. o! J& d5 _. j8 E: ` //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value2 k" O v. x/ M, Q
9 |, Q3 b/ F/ V7 ]2 l9 Q //upp_reg_hdl->UPIVR = temp_reg;6 G& u2 t% v& H( o
# S! t1 g6 i6 L! C% q
//temp_reg = 0;
) u4 X$ p" b d! M3 Z- V" o1 I+ T/ C0 w
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
5 [$ e; z0 \8 V4 G0 l+ @; U //upp_reg_hdl->UPTCR = temp_reg;
+ |* C8 Y- {+ J: i6 N7 r3 P4 p5 d0 `. m
//temp_reg = 0;( D) S! k) Z# }. p0 N: Y5 C) M
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable9 w. g5 ~1 N+ m5 }; \
//upp_reg_hdl->UPDLB = temp_reg;
. ]. f( N- D/ D+ U D1 D( O* R9 E, m' r: L
} |
|