|
|
8 H8 M/ o4 l- O0 R- I' L寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):# ]+ s+ d7 Y* A+ M0 M( o6 h# W
static void UPPInit(void)
2 W/ w8 ~- z; }" H w6 N0 }{
) v0 ^& S/ ^, x1 ~( K7 ? unsigned int temp_reg = 0;( s% _4 s* X. ]5 {% k4 ^
- b: s, A. ^$ s( }( V) B$ E9 U
// Channel B params
% a% k" U; ~; j9 U CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled k: F" [. u9 u! X$ d
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface7 S+ Z- n( i. g( ^
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8! O* q" {3 {! i& T
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate8 [5 \" n6 f- E9 i
3 L7 o; J4 A5 M" D! c0 Q // Channel A params
R$ E. u0 E3 u CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
9 ]) r! A4 a9 d5 m6 C CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface- r/ \4 P* s* w% T
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
2 `% W* h' S; G# g* n: i CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate' u. v3 ^5 P$ h6 w- S& v5 y
5 g S \- u# f! Q CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
# e- z4 }5 o# y0 N/ U; I CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
/ c2 r8 {" V- }' t* k. a B3 ~$ U I7 z2 j
upp_reg_hdl->UPCTL = temp_reg;0 C: M0 ~# ]7 m: b0 I R# l
+ a. B! t/ {5 G
temp_reg = 0;
- L+ E" c3 S; ]& L) o7 @+ q" \$ k- v" K0 [0 z+ \
// Channel A params- Q$ o: W' R9 ?; @5 U
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle0 M E3 A5 |6 f; A
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor( G8 c* u5 @/ i9 K
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
4 I+ Q" n6 H9 |) z0 a% K9 i0 b CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
+ F7 P# k0 J m4 G0 g1 o' A+ i
$ }9 k: |! U+ r: }0 W // Channel B params
' X4 }' ~* s* Z% X( p! [8 c7 b0 i CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
, g) F; @- o+ i- u CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.- @) e+ w/ j; E$ ^ \+ X0 q
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
0 \# D2 h2 G$ k$ b1 Z% L2 j) l9 ~) w) u7 e) d7 L6 p0 }" g: j
upp_reg_hdl->UPICR = temp_reg;' }( a$ q! Z! B, C; k
. v0 ~9 F& X; X1 c" o5 F
//temp_reg = 0;
( k, x9 G: f6 ^- A
$ w/ F5 e" U2 f //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
, g: b* C ?1 V/ t3 n2 k7 U //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
$ d, o1 F' B" _" h! q2 {- z7 |6 x. E$ k3 y" s2 G
//upp_reg_hdl->UPIVR = temp_reg;9 R# ]7 _+ ?9 h {; v/ |, `1 }9 |% r
4 M Q$ e& g* b9 {: Q- I+ [ //temp_reg = 0;8 t% j( V3 Z' @% W" T: z5 R
0 S! G/ M2 h: N; d& L, D9 _9 k/ H //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
' S, c0 b. l$ C* ^4 l: L //upp_reg_hdl->UPTCR = temp_reg;
$ g) Z$ q3 G& S1 @: ]+ K- p
, y3 f2 E4 o1 O' { m6 C //temp_reg = 0;
) P1 F# t6 s9 N( u //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
/ E& w4 H( c; P" V0 b5 }% b //upp_reg_hdl->UPDLB = temp_reg;* |1 u) [# s7 `& Q" i% C
1 }3 m$ P" [8 ?} |
|