|
0 m* i$ B x4 T8 S9 w. s2 @寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):* t9 ^; o. x2 h) P
static void UPPInit(void)
$ _8 i7 p" V) `: L: _* x- P7 W{) b/ c( {/ Y, S# h8 }5 X
unsigned int temp_reg = 0;: Z3 H I/ Q) V/ X/ d3 c0 {
# b# c3 t; ^$ } // Channel B params1 ^: R" M* J5 Z
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled, s* Y+ w8 M8 w1 ~+ d+ x
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface& {+ D* Q# G* a4 p/ U5 T2 X
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8; r" W i$ x: b
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
% E1 x* X4 Q+ O& Y# M/ R5 K0 O8 L" l' {
// Channel A params
, z% e2 U. N' _- k CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
& P4 Y, N- @5 u) ~7 | CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
8 D# ~! @* V9 u0 ] CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8* z- T, M K1 A9 ^
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate0 O$ F/ Q6 \8 S! `2 }
, b' T8 w+ b% Q; ]6 S CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active./ y! p/ F: B. Z; }3 {2 J7 i
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
5 C* T* B$ A, n7 C3 F6 L h* E6 H7 x3 ~6 f) g4 |
upp_reg_hdl->UPCTL = temp_reg;+ p% b$ j/ e& g- r6 q
7 k5 L: l$ n! C9 s! ]0 E& Y) I
temp_reg = 0; : g2 e% g4 Z* `( M2 x; n8 ?
- ], J+ E3 z R/ f& [( z* m
// Channel A params. q$ U$ ? D% P0 S2 p
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
6 X3 M8 p: \$ \' `! d8 j //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor0 W! {8 G8 s% k9 s- `
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
- k! P& g! S$ c) x3 J CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable5 f! C; Q2 C/ P+ z
/ p5 o+ f) A8 M1 J6 v // Channel B params# i0 `* X, m0 G
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
6 M4 b* v% W0 D4 w2 I" ~: N0 _ CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.. Q) k5 e* C) a* S& Q: H
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
/ z" e9 x3 O C9 B- x2 N) h/ L: Z
8 w [5 S: L' }, e6 i upp_reg_hdl->UPICR = temp_reg;$ h; ^: T" a, z2 Y( ^! K1 W% V. w
" x# Y1 ^9 P6 w% w; O
//temp_reg = 0; X, f' O# K, c4 t1 O+ ^8 S% g5 l
6 q8 y, T; L/ A9 V
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
2 x: P6 h7 K5 L7 N4 Y J //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
3 U8 u. k- X. ?. _; ]$ ~3 m5 D _+ d8 f0 L( |# K5 s9 b9 \
//upp_reg_hdl->UPIVR = temp_reg; e7 x4 C/ K3 R: L. b% K* a, {
5 T& A) S; W/ H( h9 v3 _. e/ [6 t: E6 Z
//temp_reg = 0;8 r. [4 w n7 M. C! g4 y" i6 q
. g3 s' g, Z& j
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I 3 l2 d3 E$ ^7 E \5 m
//upp_reg_hdl->UPTCR = temp_reg;
2 ~2 t4 _" d$ _) a( p9 p- |/ B/ M9 X* E0 `! ?9 }' a
//temp_reg = 0;( ^7 y) v# U C6 h) I" ^6 @
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
3 h! H5 i* {$ M; P J2 [ //upp_reg_hdl->UPDLB = temp_reg;
. Y' Q0 P" N5 ? " u6 s' r* R4 s& H( _
} |
|