|
% X0 z' w# V {( ? L寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
7 t7 _& o. v7 n4 ], Fstatic void UPPInit(void)
& e% M! i- }& x( l9 V{( Y$ F7 l6 T$ z% w
unsigned int temp_reg = 0;
; s$ P4 X0 l- F9 b
7 [0 m3 p% |3 F5 O // Channel B params
/ U- s) T1 Q! w2 U7 @' S* v CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled7 ~2 \3 h) ]2 i
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface0 M/ w0 i# v* E7 [' q1 R! Y- B
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8/ i( g8 u' Y& {' \. C8 [6 X
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
t4 x7 g0 R* r
) G6 m( J+ S) `* i; u; B, e // Channel A params
+ L4 ~6 Z2 k7 p2 v* B CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
# _( K. |' ?- s' Y+ { CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface( S! V, N0 L+ t/ g2 }
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
) i4 }- j, l9 u0 Q CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
" H( ]! C, A+ N1 S; b0 w! s2 v
1 M- s0 ]: g$ A7 a2 u CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
% |8 E5 ?. X) [* t) y CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
) z) y5 D% R' p. H/ Z/ S9 y! `! `9 S" [* W
& r: l, y& \6 @& G% s: R1 { ~( r upp_reg_hdl->UPCTL = temp_reg;
2 f+ ?# `5 q5 I5 }8 W. O% A5 n S" [/ B) I8 K! a
temp_reg = 0;
. Z! C0 U: v5 Y/ ~; [4 h
7 y3 h4 r* `& Z% N. b8 I // Channel A params# R' ]( s& c7 K9 W* M/ l" a
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle. [- U' X8 H7 D2 S2 T+ \- `
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
# d& p" c7 }' ^: Y( R CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
1 M2 J3 p7 @8 w CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
" P, R3 \( z7 N% l" N9 b
6 y* ^' e# l. S: k( j# b) T // Channel B params" T& \0 j7 y3 m, a
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
" h# t; |: R4 [ CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.* r* j* g2 H$ y1 m1 u
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
$ y2 b; a9 ^- u7 m; B" z! s* x6 C$ W# _- G7 s
upp_reg_hdl->UPICR = temp_reg;0 l2 S# _+ z `) }5 B/ r' R! Q
; i& v% F( H4 z. o5 a //temp_reg = 0;
/ r* e4 y& V2 K# C! f2 {
6 m+ ?, {$ Z, i3 Q+ ]4 ~ //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value: P& c9 @0 ~6 R6 M- G) p4 L7 b
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value9 b- ~; I8 X% r; B- u* ~) ?' B0 S7 G
Q' s9 c: p! b //upp_reg_hdl->UPIVR = temp_reg;) x+ d& e k3 u" x. s! t
+ T1 A4 J3 }+ r6 J% s+ }4 h- s
//temp_reg = 0;
+ V7 q% W. l2 _; K9 X5 Y( a, |" @4 Z- O9 N
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
0 ?8 M( O4 l. | //upp_reg_hdl->UPTCR = temp_reg;
, o8 r- w4 t* `+ Y3 A5 R
( t3 V$ q' P1 w6 J+ M //temp_reg = 0;
- M* K1 E8 | U5 Y7 M% H //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
9 ]% |9 I) A% `. I //upp_reg_hdl->UPDLB = temp_reg;
/ X1 P; @2 Y3 \/ o 4 M% m: K# F# E. c9 ^, {
} |
|