|
L( v! T) k$ b7 w `
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):# ~* m+ ?* _- s! s
static void UPPInit(void)
L2 ]9 E; k9 s8 J, B- \" I" w0 K{
9 |2 R/ y3 l; T' S2 {2 s unsigned int temp_reg = 0;
\3 m! h0 L' l& ]4 k# J3 \7 C! X1 z1 c1 [% Q
// Channel B params
0 L; X a% I9 h( y. G* a. J& Y7 s CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled, p$ Y: {' t4 m/ B3 m7 R. D
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
" _+ W2 S# B! A" c CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8) F0 E) F5 A: l: R- \9 r1 T5 A, P* U/ ]
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
' `' ]+ k. \' q* m6 z9 p8 K# q, i- `) J
// Channel A params
3 m7 x9 {' Z2 i$ e: Z6 C CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
3 Z. q& X5 X2 Y+ T% }" D, S( [- q! I CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface" e* p, d5 I) R, ^
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8% |: ?" i+ E# P* N* S3 m- a
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate# j5 {1 F' F( d6 W e
: R( z6 V* c/ ~$ {' l3 j CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active./ Z: w( \/ m4 A: _$ q+ q/ g
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
: t5 T. u ~) d+ l3 _6 d5 l; S% V* w! G
upp_reg_hdl->UPCTL = temp_reg;6 L: [ j* ^& c8 @
8 l, L% }# n* R5 L) ^% a5 r. f) }
temp_reg = 0; / J1 h! w6 P1 T9 l" `
, V+ T: H: E5 w! } // Channel A params
1 I# v/ W; \; Y5 d5 d //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle2 J( T* G& |( z) v
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor& ]& A9 q) M7 h4 e5 W+ } D% x
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable., d$ U+ e9 X: f5 c
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
! ~8 ]1 H3 }) P* A
7 a% r( ?+ t E5 g# [% l) N, o // Channel B params7 a9 b; d' M0 V d2 q7 U9 [, C
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
" @; y7 C: c6 y- y& }( l CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.2 d u. p& @: s3 {2 Y: T: {+ o
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable0 P% Z& R0 m+ N
* h9 B; i1 q, ?, b7 K; d& K
upp_reg_hdl->UPICR = temp_reg;
0 } }4 e! z2 @: w6 E
" V t ^4 \ ^* ? //temp_reg = 0;
1 A( j* w3 a7 B1 A V, A# T1 G& `7 z, J8 A# @1 V3 @
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value/ @ W$ ]; ]. I) c1 A G/ ?
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value1 u& o: O+ V1 Q% X9 H3 y: N$ [8 k
7 O5 k9 ?4 T1 A& s6 y7 \% W
//upp_reg_hdl->UPIVR = temp_reg;8 ~* z" b/ S# ^/ x
% ]/ I- i/ e# b. l" C3 ]5 \1 q$ }+ \
//temp_reg = 0;" o, O. f. S. C$ |3 K% X
- E4 C9 f. F& _
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
5 J: B1 W! q9 J+ @" [4 u //upp_reg_hdl->UPTCR = temp_reg;( w* E' |$ p1 b4 v
+ W$ y y+ y4 T9 I5 ?; L
//temp_reg = 0;$ H' ]1 g) `4 l
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
8 K6 q- l! P0 i4 }$ V5 R4 j //upp_reg_hdl->UPDLB = temp_reg;( E- Q# M8 A* P( T( V, m( Z9 q0 `
' F7 A0 e8 F/ N2 f! \' u
} |
|