|
- T! h% n$ O1 l; @- u) z i
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
+ V! L+ r- x. H" C. P& n3 Astatic void UPPInit(void)
0 y) z1 ^5 P* F0 N{' v* L: K4 `4 K* R3 g2 r
unsigned int temp_reg = 0;. a+ ]* [# J J6 S: p
; t8 L- \5 ? i c, p
// Channel B params: K# a9 |, J# m8 C& z" B( k; ?
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
5 ^- i, g# t d% E5 {% r& x8 U' z CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface! {/ ~% m2 i8 P5 q" g0 x5 n
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8' Y* g! d: @( I7 W1 H" u) @3 q
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
/ A2 Z$ P& n, o( x1 O% {+ {, [
+ R) {4 s$ ]6 B // Channel A params
|' s' Z" g2 f. y, O- \ CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
' c& ^5 c- s6 W$ ] CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface9 i9 P' E( R2 v3 Y1 W& ~
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 87 X A- R" {; q8 O
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate/ g: ]+ x1 p A1 B/ g
. _# k3 X: e% k6 Y
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.3 j E& g7 k7 R% l! g+ r
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive4 E0 M4 [: F, c8 p$ Z4 h" C
; x5 g6 A8 S8 I" m! ^& Q
upp_reg_hdl->UPCTL = temp_reg;0 Z9 v3 B$ H5 \8 t1 p
) p& F& v N1 I
temp_reg = 0;
X0 ? T: c: v. y$ E0 s! V$ P0 v
* t$ L; B1 z% O // Channel A params- o4 N# r! q1 P7 Z0 b3 L
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
. n( r# T5 P& O //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor+ | {& h, ]6 [7 o% `+ E
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.3 i9 C' t4 S1 r
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
' _3 n; A: O: Z; m8 v/ h( Q% S
// Channel B params
6 q& b- K, W! }& }' T1 g9 G! e) L CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
1 H( x3 k. z7 p0 h0 T4 w CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.: L' S8 I5 Z; I+ a( C4 F- g0 @
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
5 y8 {) ^, r( E; P
9 E9 b- {" s& s! A/ t2 N upp_reg_hdl->UPICR = temp_reg;
7 J( O7 r4 Q; w! U3 g1 H% U4 A. V5 x$ \; [0 L' s
//temp_reg = 0;1 M! _; b# [$ h/ R1 j c- v2 P
0 x5 k: h( O; P) J8 _; b+ S' }. R //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value2 F0 V. B7 {- O: ~1 P. Z: ~' z
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
; k [! o" \( {# ~* I' }, k0 |. n
, o' _5 i" Z, n. |5 x9 \ //upp_reg_hdl->UPIVR = temp_reg;. g6 p/ t" Z5 V. X% D" q
! Y( {9 p0 a1 `7 c5 T7 ~ //temp_reg = 0;) F9 X* l' G u$ J8 N
! T# X7 z1 U8 u+ q& k( w3 N9 q
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
7 M5 A) N4 q" w5 I9 I5 g //upp_reg_hdl->UPTCR = temp_reg;8 r- v1 T! {- [" ^& m4 D) o7 L
$ u0 q/ \' {7 F0 O( d //temp_reg = 0;, P K; m+ z/ X9 ?0 s! _+ V1 Q
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable, P- Z0 K! ]2 S; O/ b
//upp_reg_hdl->UPDLB = temp_reg;
0 \7 a5 ^. m' r* L! ? . r9 Q8 i/ Y* ]+ c' ~
} |
|