|
|
3 }, [0 \( j3 Q+ b( v寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
1 N0 e# |4 u/ E5 e- O! M' `; I g) |static void UPPInit(void)5 q' N0 l6 }5 V
{
& L1 I9 K+ r3 `& v, V4 p unsigned int temp_reg = 0;% Q, f% h, j1 K. o# j& D0 K
& w* W8 E, Q8 h( m7 {2 M7 Y' j
// Channel B params
& N; i7 t; i, a- I. M& a4 E CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled; |- y0 X" u& F; i k# ~
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
5 R0 Y- S- \( z0 j3 j4 @0 v5 F CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
3 d) i, f0 J5 z0 D- {* c) X CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate3 ]1 C* h! C1 P* M% k
' I& i; r8 F8 D& V
// Channel A params0 A0 d q' o6 h0 m5 b! Z9 f2 I
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
, ]1 Z7 S9 _+ t u9 I CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface: G0 b, a+ C: C/ N
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8: Y) t7 C3 s" \# @0 S( B9 s' y& B) E
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate0 b2 m# p" c5 ^8 l! O
) I1 S3 r) c. d' x7 Y0 r CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.( S" l$ L0 d8 [ d8 H* L2 s
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive) a7 E( ]; L+ k+ u& H2 t' i
* O3 j* p8 f! T4 o
upp_reg_hdl->UPCTL = temp_reg;
) k, j- g' G4 Z* p+ r, G0 o0 [8 d- w" s* Z2 f7 c
temp_reg = 0;
; g) N1 ~8 K) z1 s3 c
4 O# ]2 O1 w* w' `# u8 Z // Channel A params6 \* B* g' x4 c& O
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle* A. y) n; _5 d6 _: v
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor5 ]5 b- U9 h6 _
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.# P* D/ ]. h1 y# \7 M
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable/ R" }) ]# \6 g, r8 H# ]
4 s3 |! A1 x6 e2 r" K1 R* h% J // Channel B params B( \' y) x2 |9 q+ n K
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
: {% ^9 @7 }0 O+ P' ^& D CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
( p$ h3 ~! g" a& L j3 e CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable& z( o$ g3 \2 A) ^2 Q1 _" K0 f
$ z3 R. K4 ~, X! s) g upp_reg_hdl->UPICR = temp_reg;: i2 o* Y @2 K4 C
; O. [5 o, c! q" h2 a: M c0 _
//temp_reg = 0;! I# N8 R4 N# m- ]* Q. d- H6 g# s
; l( N' H, } m$ K6 Z //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value |1 ~" z& q1 ]& y& K
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value o7 L* N" e$ L a j. G! y6 z% }
+ X% f& B& i! m8 N1 O/ E& k& A
//upp_reg_hdl->UPIVR = temp_reg;
8 Y d8 W. j" m$ Z' ]( |+ g
2 V7 q( R* l* s) ] //temp_reg = 0; u% ^, j& K% H. P3 z b
# F5 z; C' E: u j
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I - p! k; G5 `" U- t" B" Z
//upp_reg_hdl->UPTCR = temp_reg;
! @+ f( N- I8 d' A {' h4 E$ t. Z4 N- ~8 v1 S( n3 m; }! g, ~
//temp_reg = 0;
3 _! L. q8 I4 @$ n4 | //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
# B# s9 Y- {8 t6 B //upp_reg_hdl->UPDLB = temp_reg;
. B, t$ {5 T$ m' N. n; X
7 H% x# w7 [% C4 O4 y; D} |
|