|
|
: m) A1 ?$ |' G; c. G
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
+ y/ E3 v( ^6 ystatic void UPPInit(void)
$ S5 @0 W. ^7 O{
2 `! i. Z8 S: r" n unsigned int temp_reg = 0; P1 X" P7 v1 @; g7 n+ O, n
7 @; D( v7 F3 s& I3 u c) [0 }% h // Channel B params
" ?& F, r' S! a9 ]& }5 Z CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled3 Q" P. _# d5 |" [* I) B
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface6 A. g7 t) j5 q& S w7 @% b
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8+ c% S+ L& H3 y7 t% K# f) g
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
; \$ ^) y8 p9 R0 W( L, R" C. E) {5 b% X
// Channel A params
; ^* J* x0 _, C: I9 i& S0 ~( { CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
' `, g1 n% g' I1 T% Q' t+ i CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
% G* ~# S3 Q% H% I* j( E( G CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8/ Y+ u1 W6 \; I! W) Z
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate) y( ]1 i- ]" ~8 a/ [+ a% z4 f
2 v& T+ r2 ]. [% F8 a& L) l2 g CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.2 E t0 Q; ~5 C0 w2 `* G7 ?
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive1 F, J6 [) T) W0 W7 Y
8 h+ L2 U9 O$ E
upp_reg_hdl->UPCTL = temp_reg;: X% o2 |, J( [
+ F4 {7 M. b; Q1 f/ u( F. O" }/ Q temp_reg = 0; ) \) B! c% }/ q9 |+ y: |
, I9 k2 n; Q( n7 X" i; X
// Channel A params8 H! Q5 m/ B5 l& B
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle# a. h& z% }+ G9 ?
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor# G0 p) d: ]# r# w; h
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
C& L! ~% K7 Z% F1 {% m CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable. ]+ ^/ T- D' @
" y# ?( [8 Y* q0 }6 x4 H
// Channel B params
9 H+ k! x; A: r# x# o6 v% b, X* A$ F CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
! N, I" G( c" t( s: V, N3 J( T CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
: w9 g" ]4 C% E% G- g CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
: J! A8 d! I! r0 F# ~' E) G, g* z+ L; f% j
upp_reg_hdl->UPICR = temp_reg;
3 a" P$ W/ t c/ R% x! \8 H0 V" r# t( O# V$ j
//temp_reg = 0;, M% J' I& ^; u4 Y6 b; h
- o, a$ U4 i& T+ ]3 ^ //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
1 Y* e- y: J, B' a+ k l //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value/ Q8 Y6 o. g9 Y/ D1 B
1 r- ~3 @$ H* c8 P x9 a //upp_reg_hdl->UPIVR = temp_reg;
9 r. A0 T% ]9 Z
* M2 J. R( M V! R, {# R- s //temp_reg = 0;
# T- [3 { o- Q$ v
/ |8 G1 a4 \6 ~- b //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
& Z( S2 d( i: N4 g, N //upp_reg_hdl->UPTCR = temp_reg;* f" S6 }! C; P2 j7 i# S
i" J+ o- k1 g/ z //temp_reg = 0; G6 h, K; P5 I! v7 t: Z$ ]7 X
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
8 N5 I0 z+ ^ J r: `5 l" u, t+ `& z //upp_reg_hdl->UPDLB = temp_reg;
: ~8 E( D) c1 y# k& Y2 G 5 P( W$ J4 s/ ?- P
} |
|