|
: c9 g- \8 c' n \6 n, S0 s+ z寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
9 y" y$ d8 r. O0 h) r+ G4 a9 I+ estatic void UPPInit(void)& U6 p# q3 C* |; o
{5 ^( S# G% \8 H( O3 t1 a* d' N) ~# |
unsigned int temp_reg = 0;
. `/ U1 @5 [! \6 ^9 ^& u: f0 r/ s5 K" N# N5 T
// Channel B params, l; [4 A( V C/ C3 a9 V
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled+ _+ [2 d" E U' z: I5 S9 ?5 w, B: R
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
6 n5 x) B8 S) D1 | CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 82 e+ f2 l& d4 j$ G" d; H
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate9 Z7 W$ r, a: u o- y$ S# s) d
$ E. u$ ?2 o3 T+ f' n7 k. i# Q // Channel A params* |/ V8 R+ f* l8 l: K
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
2 T/ |* r6 X; m; l' a L: o CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface W( d+ l+ E. _! L9 i
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
3 |* l& |3 W# {0 Y$ P$ L CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate, F5 h7 n9 `$ [ V! d% s
# e4 P, H& a! V
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.9 I9 Y: b" v( U0 D% z, H
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
/ z! |5 Q" s! ^+ t2 H; J( m7 G
2 t3 o0 o2 x# I8 w. t& R: _ upp_reg_hdl->UPCTL = temp_reg;4 I! m0 X6 }6 N
' O2 h1 D2 i" L5 \
temp_reg = 0;
5 U) X3 i8 t5 _/ t# k+ H) t/ z7 a
0 q7 Z% J7 P% L // Channel A params
$ h4 I0 H9 A1 Y" X7 M6 p& u ^ //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle5 E, k! K4 z( w* ~
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor# t3 ?, G- U! |- H' j
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
, l# a& k% }/ b$ P* j2 B! l CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
" z( e% P7 @2 k( d9 {2 T9 X7 h% i' J& ?1 J# N- v) y
// Channel B params
; ?, v' j( ]' f! ~5 m& I CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
}+ ^2 I( ]& E5 Z6 O CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
! y. \) H s# X U: J/ c2 A CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
! F: I& l0 c0 D2 V* ?" F8 i6 W3 ?3 K# V; p" s! F7 O
upp_reg_hdl->UPICR = temp_reg;7 S3 M( E5 B0 N* P
; k r1 R4 V: N; {+ r$ A
//temp_reg = 0;
" S: C: }3 p! O2 W. v9 B! Y+ m" }
) \3 S( k' ^5 i g i [* b4 ]5 X& @ //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
8 T! x% i* _$ ^4 \0 q+ C" t+ w //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value1 ~7 w. r1 `/ W8 O) d
. S$ m( m$ S$ Z9 v9 D, @
//upp_reg_hdl->UPIVR = temp_reg;0 Y0 _) Q! @) X4 C4 y) }$ }
/ b* ?/ @$ \1 \. Z# I# @
//temp_reg = 0;
' G' e& T* e7 Q# P; A
1 {2 ?! T) i6 D3 q% J //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
- |) B V$ u E) o //upp_reg_hdl->UPTCR = temp_reg;
+ F0 ?1 V4 i1 `: Q
0 n9 `0 q' ~0 j9 w //temp_reg = 0;
4 f7 v, Z3 Y$ ?: l; u" P/ g3 O //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
) p' o9 [& z) s; q. I# n! S4 J, W //upp_reg_hdl->UPDLB = temp_reg;7 T% t* S0 O# x
$ ] z; [5 d0 ]
} |
|