|
$ k1 I- W% u& F& b: e" W z, M寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):, s: q& }$ x$ H b5 @
static void UPPInit(void)0 z f) u; d8 F) g5 x: I8 q$ a8 F
{" o5 J7 A/ v U: y( l6 X! C' W
unsigned int temp_reg = 0;% }2 b0 D2 X6 E8 n1 ]
& J& J. _2 q: a4 p // Channel B params
+ w9 m+ C3 u. D. b3 a i CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled2 E$ }0 m$ p2 H7 k* j& v* j$ p
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
6 S: b7 g1 I. a( B. q CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
|* ?. [) B! U$ Z CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
. d5 n+ Q8 b- K3 k+ F8 r) Z
( c4 k. T( y/ y! D" `3 @; \# C4 w9 P // Channel A params
7 D7 `5 l. F4 }, J c# n: G CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled" d& e5 T- j( t. Q2 M4 _. `% _
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
" L$ M/ U! S6 Z+ P, \& G CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
% x. O# P) ^% x2 ]# n CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate5 z: ?+ q7 l; R( A+ r
, j; f$ n( {6 D8 c* c CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
0 i/ e3 R+ p& _$ Z1 ? CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive3 k: f/ S; _! k& L4 y4 L
: v4 s# ^) s& `- B [! @: U& {
upp_reg_hdl->UPCTL = temp_reg;
5 ]! Q0 ^$ D; b
" v- J3 G# m2 Q6 {' I temp_reg = 0;
{1 R- ]: b: n! V
' K- Q- P$ g9 X9 G9 r // Channel A params
. t4 @* m# G+ H- f4 V8 s //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
. B) S) \7 _; w/ Y //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor0 L# y6 c; j9 D- }; D
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.2 Y) a% i# q' |8 }- o+ E
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
6 e1 n$ O& p: H4 z }# o8 t
: R1 N- H* W: h: X% L9 j/ V5 o3 A // Channel B params
: e& p i* u! [2 a2 z/ s2 h0 z CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);6 s2 H/ Q$ q2 w8 `5 S7 k l+ X2 _
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
$ V5 a, f& w9 w0 Q4 W CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable; {( f; [2 Y2 J( k
^; d3 M" h0 q6 }7 ~ upp_reg_hdl->UPICR = temp_reg;5 f3 k9 T6 Z! k+ u9 I2 _
: W( o! z/ H& K
//temp_reg = 0;4 L" Y9 ]8 y/ N& f* z" r5 Z. Q" f
2 p" L: \+ s# x# A
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value4 Y$ M) K7 m. q$ q) _$ V
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value* o1 v) i, N" Z- M6 O
9 x6 ^2 z0 X( P" q( Q
//upp_reg_hdl->UPIVR = temp_reg;" Z" w9 L0 u$ A4 |% r" z
: _# n- X( Y. i0 I+ \( k: j
//temp_reg = 0;
1 S* d# R$ }8 i% P5 {# \" M5 M$ ?4 A! t( \
# b* Q5 z+ p* Y8 k8 ` //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
4 u0 l, j/ q) h3 m/ e" X' X //upp_reg_hdl->UPTCR = temp_reg;8 J5 P" H1 y, S# C8 M+ n9 X4 h
1 D q" n0 k, ~, L6 B3 R H //temp_reg = 0;
. B5 x5 ^4 y$ P; u$ K //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable9 n6 Q' y% s# c) A' e
//upp_reg_hdl->UPDLB = temp_reg;, Y; R0 e2 V E
0 @8 _' ^ U9 I: M+ I# Y' D
} |
|