|
. x. M& j8 A% g& `9 |1 n寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
* S2 j, k7 i0 W, |, z# Z, [static void UPPInit(void)0 J- f' y4 B3 t+ U7 s# H+ p
{
: k7 y9 L4 m& r/ V unsigned int temp_reg = 0;+ }5 `$ P7 @. Y% s9 P6 Z
( j$ R4 x4 O" q. K4 t- x
// Channel B params" x' }: D6 ?" M0 V
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
2 G( B. Y9 u( v; [. j& G; j6 S+ l( ^ CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
, @. i- ^! a5 P% {3 D5 I CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
! S7 g, A% e2 e d CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
- T5 }4 S5 R [
+ Q' k8 ^/ R( Y1 M6 @% ]/ J+ e // Channel A params! d* U7 w5 t. H: g7 F ^, I$ O/ o
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled- y+ K4 J& F6 E( ~
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
! ?5 S$ L" x8 q9 ?; @9 H5 [$ L CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
, V5 r8 B, q! u) C CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate1 k- _/ ~& H7 P) }3 ^. N* ]3 c t) Z
0 g n/ h7 ]( r" @) s" h
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
: \7 [- l% o* l: s3 S8 s CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
0 J2 a9 j7 o/ Y0 J, u# E3 n: a
& C; ?4 q* p2 Y upp_reg_hdl->UPCTL = temp_reg;) s, M6 @: \, L1 r+ ^; f7 T
/ U& L) z+ z: X+ h/ x, y
temp_reg = 0;
1 M* j$ r `6 H5 [4 A7 n
8 Z$ q. ?$ Z- u // Channel A params) Q" x* s/ p5 l2 k" B( L) J
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
4 v) m: w9 Y5 r# q //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor1 i+ Q" \8 L. T$ G2 d& X# ^
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.: F4 j* w( e5 [" y! x t G' B
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable" G# m" Y9 k8 P# U9 w, k" M
. y' B0 k0 l6 S9 U // Channel B params
! l7 r, K3 ?- a) u CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);3 Q/ d! Q: k* Z! F
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.& d4 c1 k/ J0 Z
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable `8 W4 a& ]2 f: t8 h3 p
6 h# Z$ S: _( g& e2 r
upp_reg_hdl->UPICR = temp_reg;6 J: _( x0 X5 v& p% B% w/ z4 \
" q! c, ]5 |# l+ O# x9 u$ ~ //temp_reg = 0;* Y5 v: \$ p3 [6 u9 t4 G* D7 p
, T& i$ ^7 T4 z4 X% T //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
3 ~9 O+ h4 i3 W( C% e //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value! [) q1 B3 [1 t7 q9 ]
; G4 N/ b, O+ G6 z N //upp_reg_hdl->UPIVR = temp_reg;
, R- _( W1 I# i' f% \5 \" i
# F2 J6 _+ b, e# n( [ //temp_reg = 0; E5 g8 h. P8 H8 B
/ e) a3 b9 }8 }: D: v, o //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I ! ]; _9 B/ D/ Q2 a( S
//upp_reg_hdl->UPTCR = temp_reg;
& Y! g, D( v9 o, [( K3 t% y9 s% m! {! g. c
//temp_reg = 0;
4 h# I! U; y9 b6 N+ ?0 S' g* A/ w //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable6 ]) N( a h1 n
//upp_reg_hdl->UPDLB = temp_reg;# X: R7 G* K$ M5 ~
; `8 I( I# |( o5 U. Y} |
|