|
. g( y2 o' ?3 m. ~
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
5 F- [- Q) Q, v+ a0 U9 k% Kstatic void UPPInit(void)# y6 Y+ D& N" c' q2 M# P
{
J' E: M5 \; O" f0 t unsigned int temp_reg = 0;
8 P8 N+ @4 L2 J' d+ V# o! T8 V: m5 i
// Channel B params
" \* F( ?0 x: Q" r" m% W2 o0 X CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled6 b# @0 j9 H. c$ N8 c
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
9 \, ]0 \& {* i1 f4 D5 J CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8! i% r) R6 B4 K) S# A% v
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
f: p2 K! M& I7 h3 V9 ?: ^8 s4 h, m5 m2 E% E" X+ r) |
// Channel A params4 p- B0 |4 [! |$ y
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled" }& M: Q7 {5 ?! N7 b
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
: ^7 h0 B% s) V9 _; P! m CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
* ^4 [0 m- o. V6 Q5 U* o7 N CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
# Z% f$ U; c$ v& c! E- f
2 B0 P4 @" k3 n* B9 F/ j: ^ CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.2 Y- |. e% T0 C- U6 x& }
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
! H# C7 W* J+ Z2 m2 Y
" M% I8 M7 f6 r/ G0 A; F2 X5 ^8 I& o upp_reg_hdl->UPCTL = temp_reg;+ k. [8 P0 y- J& y
- x: f/ @5 R$ j) @8 {4 t
temp_reg = 0; + M- \0 d! ~$ \ v# l5 n- t6 d j
7 W/ r" M- R9 z: e
// Channel A params
0 D+ b+ |+ e5 w+ l //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
' ]) |9 v) C) }3 k //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor; k! b; d; `7 y
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
y: w0 K% | ?4 h: a. ? CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable5 ~7 g' t' P- \4 ~' N9 w
8 _8 E" {" n, ^' H' u: c // Channel B params
# u9 @1 V1 u( a2 h- S+ u CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);8 E) X/ g+ ~, K
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
N4 R: g% E7 X$ g' D; x5 Q; y CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable0 R+ Z8 }& ?. U/ Z3 u8 K4 [
" B6 G- `) Q: r; z
upp_reg_hdl->UPICR = temp_reg;+ e6 J/ A7 N8 |1 p" f6 w
9 I* R( l& f$ w
//temp_reg = 0; ?; J3 e* i( M; ~/ e6 h
) V, c+ s% _! N/ R8 [
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value4 k3 ^% |, N' T: X2 W
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value; t3 L" i6 k. [# ^/ f8 J) B
( D4 Y9 j- M! }; e+ x i
//upp_reg_hdl->UPIVR = temp_reg;
( X2 I; s6 t$ U! r9 n& P+ M! l/ U+ V, A1 M6 N
//temp_reg = 0;
. {3 e1 P: W/ ]
8 q4 S( t* s6 s7 M& I //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I : z4 j8 | t' M5 `
//upp_reg_hdl->UPTCR = temp_reg;
8 u% ?+ D0 l+ j# K" t4 z& O
) R$ |/ x6 Q. ~9 i& d //temp_reg = 0;# Q, X$ _- ? k9 u+ ]" A
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
9 X$ D v, Y3 j //upp_reg_hdl->UPDLB = temp_reg;
7 C! v! B- m$ d6 K4 e' p) Z2 C& p/ n
/ u8 s8 M- [2 p8 U5 P} |
|