|
0 S$ d. ^$ r$ p4 X0 |: W8 y
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):, O5 h! R5 n8 F
static void UPPInit(void)
: ]; L2 x4 l7 _4 Z{( n) w. H0 Q( A% \+ [3 P/ m5 ]1 e
unsigned int temp_reg = 0;
' A1 u; S" E4 R# K; Z( m0 \, W
2 g/ c9 i; L- ? // Channel B params7 u' c1 V& W# e u
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
' P9 r& \, j, z, f' D3 v( { CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
; h& ?4 E k$ }+ Y! {/ } CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8$ i O1 M1 n6 C" J2 B! l1 K
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
+ Q* M; y! m1 h4 |0 N# w8 N1 _+ Y8 k& ` z! Y
// Channel A params( W2 L# K% X6 a4 I0 X
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled9 W# i" ]7 ?4 ~: ^6 N5 W; X7 u
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface1 T: a$ X. b! T) b6 A9 [
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
+ F A+ V. @' a) Z9 n CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate* g* D0 r- F& Z0 Y
4 T2 f* E; g+ Q. ~* X1 U W
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
/ `2 h* M6 h6 W* T8 T3 }5 v CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive3 W5 D6 l0 C( P- k6 s
5 i) S3 o7 U6 B% Q; _2 Z
upp_reg_hdl->UPCTL = temp_reg;9 G& x$ h- g4 t3 U
% T9 |+ X3 s& B$ d* o
temp_reg = 0; , F, U& O @8 i" e9 z6 }
* |/ n: O( }# b' a
// Channel A params
& s0 F1 {6 j* t1 D: J //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle9 R; o9 S1 H. T1 _9 n: D8 E* h
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor# i5 b. u3 M2 G& n
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
) t/ Q+ E6 O) H# d) e CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
$ h) h. S+ S1 J" m) F2 n% Y5 L) k8 ^! t \, @0 o
// Channel B params9 w: O; L. K' \' z
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
9 R8 e: q9 A8 R( c" H r CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
8 w! X& F/ c$ B7 J! X CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
# K' \2 @; H: q9 m3 p$ b+ ]2 e
0 c9 V( g* T7 A \ K upp_reg_hdl->UPICR = temp_reg;+ ^. G7 [8 N6 Y% j5 ~5 F
2 o, a6 U% L, S* t //temp_reg = 0;; D$ D& b: u; a
$ |4 Y6 j, [. a% n( j
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
& H% C2 d. g: L4 i) Z- D8 o8 K //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
, [3 ]! X# J- u: I& ]" b' e* F+ Z/ \8 m3 r- e( J( T1 R- M
//upp_reg_hdl->UPIVR = temp_reg;3 F$ l) A* n$ k T9 l
3 f0 D( _% N) v( j3 \
//temp_reg = 0;
! u. o0 t* S, t5 {+ i8 h, B. g2 V% c! g7 m
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I 4 `/ c* O5 I3 H; F
//upp_reg_hdl->UPTCR = temp_reg;$ r5 l y7 I) O, U, ^
% Y" ^- c) Y2 Y //temp_reg = 0;8 n( A' L: e/ l6 O' v
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
2 z& ~7 o) E. `. m7 p //upp_reg_hdl->UPDLB = temp_reg;+ J' b3 ^; t" o$ @# v0 f
+ r: c& F# P' v4 Z$ A
} |
|