|
3 h5 ?& g( E# @/ |, O寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):4 }$ N: A) D" G! F
static void UPPInit(void)
8 Q3 S- q1 V8 t) v{! W6 e( m% o8 {9 m- l
unsigned int temp_reg = 0;
9 F2 u/ {& T, O7 O' F$ D8 V* O
L" H/ o8 C( H' \) f& ?) o; | // Channel B params
3 o# A- U2 B) V' t* h: Y3 h CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled3 g/ S) ?& |0 [ w/ t9 p4 a2 X. H
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
2 ^- h! i% e0 N. J CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 81 |4 {, k; n8 D& s
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
' o' e, `% \+ b. C6 ]+ i
+ |! n c+ M, |( P // Channel A params
' H: c! ^0 q/ u2 w8 F2 d/ P CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
2 g, W% U/ T( j" r CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
* p9 d2 x z1 X& W$ t$ G2 [ CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
9 X5 o8 E0 S. }* L6 |( q$ l- n CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
1 Y3 h% z$ S C7 v! n8 A
' D2 j s, x: Z* D' ~7 \ CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
) D0 W) O8 b4 x5 F. w: J% p( V CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
a- x A4 V, T0 l& a5 V
% R6 E% i: k5 ^, F upp_reg_hdl->UPCTL = temp_reg;0 h' C4 @! M" R- \3 i; a
% Q" m$ ~: H- Q8 S5 t! n" n' P temp_reg = 0;
9 L2 L: [: I! F- P; p$ o4 P' ^1 v* D7 c; S
// Channel A params& B4 t, D( H1 U3 ]- o9 n0 \
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
, r0 [: c! h" T9 L, n( h //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
6 k5 J3 E. ~. v+ Y/ K* A CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
' F! h4 L% \* J# z CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
4 ~( E: D! `# v4 [
" ~/ W& T' @& c& c. V' g0 G // Channel B params0 v" O; G) e# T
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
7 N2 S9 K) y0 `6 r( l$ q: N CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
! Q0 ]" _) `( X6 O/ m& l CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable5 e# a0 k8 s9 O+ i' d" j
! n$ A" T5 {0 c+ G" h
upp_reg_hdl->UPICR = temp_reg;
1 u! i/ Z% x D2 H3 |* C: l! S0 R+ O1 ?
//temp_reg = 0;0 K4 l: c3 ~- V; Q. q+ D! j- n
" _8 g& Y) A% ]8 W3 v, a. b. L //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value) `, o- J: l8 I3 d' [% A
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value: ~6 g. K/ c1 u" I* D6 O
) l0 i7 p' L: X# F6 i
//upp_reg_hdl->UPIVR = temp_reg;" X% Q$ C" G) N d3 E0 ~
7 w6 Q* Z2 N, G# O
//temp_reg = 0;
. q# m( n Q e/ I4 d6 D3 d9 q; M; I! s" Z' f! M/ w9 M
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I 3 P# H# V, }) Q1 s6 p' R1 ]. E# w1 Z
//upp_reg_hdl->UPTCR = temp_reg;' g# j1 X3 \, z$ U9 J% d( M
' h7 T7 m9 x: Z, p' W0 M
//temp_reg = 0;
5 J2 @0 L6 ?. X* m/ [ //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
5 V/ _! [$ z9 a //upp_reg_hdl->UPDLB = temp_reg;6 G: [; X, ]! o5 P, f" H, ?9 t
9 F6 }1 y% _' l6 J4 D# @% w6 a
} |
|