|
|
) {, r& V/ f4 d& F; Q: f1 X
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
* {" z v8 q2 c0 n v9 O% ?4 gstatic void UPPInit(void)
6 T* p- g' j' X{
: }: z+ A* Q! Z* k unsigned int temp_reg = 0;
r- z9 a& k: i+ a. E% Y
6 L3 D! n% d f/ i // Channel B params1 `) {& I0 O& R
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled! j& z7 F% W+ t1 J
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
( p: L; Q; T6 \+ b CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
6 ]& @9 u; ]/ i+ N7 d CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate2 E" p( Z$ O; g' V2 b [/ o
0 X6 @6 Q I$ [9 p$ q5 [& f/ _" j
// Channel A params1 d( t2 l! |9 ?3 {2 f) G5 E7 F
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
8 l5 n/ N) _% {( r4 R CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
4 w1 p4 c! n1 `8 z3 h+ u CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
6 R* p8 P) L; ^- S3 N7 U; `7 x CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
' i+ R D7 H3 J; M
1 p5 T* Z( {" M% E CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.8 C4 h5 C9 b* [5 s
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
5 z1 x7 I! `/ k- H! m" B2 f
! U: c( F8 k7 L upp_reg_hdl->UPCTL = temp_reg;( N6 J) t" h6 S5 M4 U$ |
; [. f, S4 ^3 ^: E temp_reg = 0; . E, J3 U5 H. q- \" B- y B
4 k) {5 R2 V4 F$ e2 m // Channel A params
, W4 o ]" e: T% a //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
& a$ S1 @) ]" g+ o //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor% o8 u' C! T0 G, }
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
% {) Y9 w2 X4 V" n5 k CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
; s: p" ?& N/ I+ E k
- J3 A: c5 H( V: G // Channel B params( H" a8 H8 X- f1 ^' r
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);3 C% L" A/ ~2 {+ ~1 G0 z/ R- Z# O
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
) i' }% g3 X9 u; @ CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
3 U3 p* D6 _4 N9 g9 C: F
. x) `8 \ @* E" G% } upp_reg_hdl->UPICR = temp_reg;) q1 G2 a l* b" _5 I
( Q" f. b- u4 ]( j5 o& c4 z //temp_reg = 0;1 A: e/ Z, m5 |1 `" k$ }- d8 a
/ a( k0 n7 @: @8 l
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value6 x- F3 n) w5 T" j
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
. {9 h9 G* l* x$ @( P7 [* |; q+ \. x
//upp_reg_hdl->UPIVR = temp_reg;
1 g e7 s5 Z. A, ~ b$ [ p! K' C# N; h$ N% Q0 N) Q' L
//temp_reg = 0;
% u4 B! s" Y( x$ l0 Y6 o& e- X" E9 Q0 D, j, z S, E5 T
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I 6 v) K+ m( ~+ ?; H5 [
//upp_reg_hdl->UPTCR = temp_reg;; i! m4 m9 X' m8 e/ Z
; @) M W" s4 W3 c" G //temp_reg = 0;
5 @! m- I5 i/ h9 M% ~* s" ^ //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable0 ?& [) [6 m8 r! p( D/ { t4 [& a
//upp_reg_hdl->UPDLB = temp_reg;
% V. o7 n0 F& D/ k9 } 0 y5 p4 z& r8 C6 `$ ^
} |
|