|
|
0 m2 w! {/ I6 h0 _
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收): F, l; w2 e4 J) b
static void UPPInit(void)
; m& ?/ u% E9 z n7 y& [0 r5 ?{
- d! K" X! [2 j5 l( c unsigned int temp_reg = 0;# B0 O5 g6 k8 H4 K4 f, W+ A" D$ B
) I1 L; F3 M/ _& X& I5 W: a4 x* R // Channel B params
4 K) q0 t4 f, \" b8 I CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled! ]5 u0 Q$ Y. f8 e# @ d. o9 D9 l
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface& E/ }. P. L4 d+ J0 M
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
- D4 C4 |3 e+ G D CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
# i! H6 U# Z* a; O* S; _, `. x1 ?0 z! b
// Channel A params# m- |$ D& s" S
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled2 }6 a8 L6 n# D/ I
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
1 F0 j& r" A" V6 C% \ CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
0 V* r/ t* ]- U) K2 z) m0 j CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
6 V3 |3 x- A' X' {. X8 G1 l; l4 e
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
" }& v- L* \; j' z z0 K CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
! j8 r* O! C1 l0 y- |: Y C5 D0 Y; n, n* X ^5 P2 H+ P
upp_reg_hdl->UPCTL = temp_reg;6 g [7 _6 X& e
! P7 U, R7 J3 _5 }0 u2 N2 e
temp_reg = 0; 1 t2 |3 z1 D3 r# A9 G! i7 Z
9 w2 v4 H: U: Y1 _$ e1 W8 o
// Channel A params, F6 m9 K% H- _- m' f
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
6 f+ Y2 C d) i' h7 h //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
1 J8 a b" u$ J" H( B( a CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
! R# H7 V. }. G* D s. L! y. U CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable, u3 I7 F( X1 i2 [! B( l$ ~
7 z5 K: |& \) i5 f* S' Q& ~
// Channel B params
+ s* j+ X4 {) H, L6 K CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);2 e4 e& o3 a* a! P1 E
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
, Y, Y8 X4 z. X+ E& R7 N/ H CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable; i6 P s$ n! {7 M1 k% ]
: S" p' {2 X. x/ n/ z upp_reg_hdl->UPICR = temp_reg;
+ i; B! M$ F. ~
: w7 J3 u7 M+ [. p3 Q* K //temp_reg = 0;" O1 O" x2 U0 t, ~4 x
& w9 g. f; v! b- v //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value. d3 L$ ]6 s& m1 ^
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
( x. }% Q% z r; o6 T1 b: @! D1 B$ A" T" T/ ~0 P3 O0 ]( W
//upp_reg_hdl->UPIVR = temp_reg;0 y/ p, ^1 K% V
5 Q9 r; [9 ?6 n) z% V2 `& p
//temp_reg = 0;! ]/ v$ i5 K) q
" H ^: x" N+ D& g! U7 G4 [0 K
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I ) h/ u! o; @0 ^, Q
//upp_reg_hdl->UPTCR = temp_reg;
4 Y% M1 H1 m2 o( \) L
6 R( F. v6 u. |3 E5 ^* h //temp_reg = 0;
& {, {- M+ X6 k0 N. Y1 M //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable* s! q' d0 O1 Y C7 B& H, W$ g& i3 g
//upp_reg_hdl->UPDLB = temp_reg;
) q+ e. v' K1 v% o; \- s
5 w3 k" d9 D9 b" x} |
|