|
& n$ r5 U. A9 D2 n
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):+ i) C! k' g. a4 T2 k' d
static void UPPInit(void)
0 D* t$ f$ a- z6 r# w( s; K{* \/ q) A. a9 v8 X
unsigned int temp_reg = 0; P1 }& M. F5 q& m* f
! }5 Z5 u5 Z( T! C! d7 w* h z // Channel B params
. ~& J( K, e2 X' k0 L% K CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled, X8 `: p: f) ? n7 Y8 a" s
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
& i5 w4 b& Q M& j( G CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8* O5 Y% O1 K; j1 G7 N
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
( Q- }$ s# K1 x P0 V& |* K; r. A+ L. q
// Channel A params
5 K. m8 J; A7 c8 V) L! _/ L CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
! E- t- v; n# W! M. O2 a- y CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
2 z$ y% ~3 h7 J* s9 Z6 u# |1 m+ i( j CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
( [5 r/ R7 ^; v: D; t: f+ u CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate5 j! a+ n& S T+ c
: b- ^. h* J) _2 I, S- Q" J CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
$ z# e- }+ W3 y! w* m CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive+ b! D$ p4 h1 e# e# F
+ B6 o2 B1 O6 w) {+ @, p upp_reg_hdl->UPCTL = temp_reg;
( f3 b! O/ `" |+ K4 m) T8 K+ C. C1 B& h: Z5 ]' q
temp_reg = 0; : b' ~$ z3 x: X ?" R5 Z0 X
2 D/ Z8 X# i8 ], F8 ?
// Channel A params
' y% [8 p; X" @% C1 ~: S //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle; y0 b+ L) x1 a8 [" V: x) O
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
4 L0 k- P' M1 g6 o" e, _2 Z CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.& ?! C* ?% `+ I/ B/ I. `6 ^& T1 R
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable; C$ m: y8 Z5 ?7 i
0 u8 Y. V L8 _; [! ^2 b // Channel B params* }2 i+ D, d* a
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
' c* f+ ~3 j+ }! F5 ]: H CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.6 r' Q; d- Z0 }4 E* k& Z* L
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
% d* T) W2 d. Z, T7 P& W) l' V o; @% Q
upp_reg_hdl->UPICR = temp_reg;
- B7 H2 s6 u z9 ]; j, |' j* c% N' C& T& w7 V5 A. C
//temp_reg = 0;( b0 r4 X: J5 G: }; b" t
) H0 q' c: V) h* [2 l
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
& E( K+ v+ H5 K' R //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value( [, |/ t; e3 ], y
^0 G, j7 } L- t/ |
//upp_reg_hdl->UPIVR = temp_reg;
) J3 M/ J. g) Q$ W( Q, R4 C* |3 O
$ h4 P1 k% Q* H) X; n //temp_reg = 0;
+ y9 w$ C3 h" w/ T5 w- v( z& x7 z3 o
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I 6 v% s$ i* Y S1 F7 [# c3 a7 f/ }
//upp_reg_hdl->UPTCR = temp_reg;& E e( Z' {1 V( ]4 g! q
& c7 x p2 u, C. h Y8 k. j0 L) E5 E //temp_reg = 0;
. g( [3 ?& t+ [& X- e4 S! i, j //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
- B2 u; J7 d I: ~% ^ //upp_reg_hdl->UPDLB = temp_reg;
. g/ U# b _. L2 \7 r6 ^ 8 y+ O5 @& s0 T; x. G' P2 ]% Y
} |
|