|
$ L) \, {- ? C6 F9 Y( s2 j) M: p
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):8 T ]6 Q" T1 Z, w
static void UPPInit(void). l5 F4 a% l C: o; o! c9 ?
{3 H0 l3 v T$ C$ I' k
unsigned int temp_reg = 0; Z0 ^* K& s" w4 D) l2 z; B% m
& X- m4 Z J% U6 o/ p3 }4 Z // Channel B params& j% E. A" h1 I& L
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
U+ ~7 k9 \) x( U+ G+ P6 \ CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface) W Q+ R: q4 S/ z- `& c4 V
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8) o J& K& l" h
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
4 R1 Y" o; b9 a2 T3 U& f7 I+ K" R1 n; K! F+ D+ E1 Y
// Channel A params
+ n6 w8 _) a% F- S CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled" ?' M9 L( Z b" B0 b; f2 }
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface* g0 b' t& A @ l
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8+ P2 F1 n7 t4 q( S$ Y- Y* b, e! U P
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
# e7 r0 @6 k- T4 H$ f( S2 n8 B# p, f7 m/ X' g- R8 p- t
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
+ M7 B) z7 v5 |! W) W( M+ I- r CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
$ z( _. ~( T8 n! ]+ }9 h1 ~! e- k9 c3 N
upp_reg_hdl->UPCTL = temp_reg;1 D r$ E* p$ k2 `
7 D+ T+ ~7 F3 K* T
temp_reg = 0; ( ^ P I( C9 O. o$ ^/ O
1 g$ }5 z/ y K, ^ // Channel A params
5 i* l* V# a3 b' @; b. r //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
1 h2 D9 I' V! e( s/ E: Y3 q //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
# N0 A( Q! x0 s0 G CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.) g& b7 z2 R; b" u
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
8 F4 R/ t: t+ k
6 F( o( _0 {3 J5 h/ W S. D // Channel B params r+ J/ v" Q7 H2 w! @
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
- s& [/ ^( d& H: O/ _% ~ CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.& k: S. o. H1 m$ H0 L! }) R# P
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
4 R* O/ {! T. o, X5 o; s
) R1 U2 [+ {6 Q9 `3 J0 C upp_reg_hdl->UPICR = temp_reg;6 g+ r- D. I1 _6 d' |4 @1 R4 D3 ?
8 Y- u( m9 z* t) K6 c
//temp_reg = 0;8 j/ |% C& M& Z) K5 @
) J$ A! j9 J8 D. N //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
. v; ?$ x: O9 p$ Q- n5 f //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
, n ?+ r( t& ~8 x- L3 B: S1 }
! T- o/ D3 J6 Y2 j //upp_reg_hdl->UPIVR = temp_reg; c8 I8 y* P! z" V% ]
3 F2 D& [( o$ j6 x% m
//temp_reg = 0;- P3 v4 B- Q" [2 d- M$ L" x5 K
4 U9 b3 I3 I* A, N. L //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
3 j+ N& x+ _; k" ? //upp_reg_hdl->UPTCR = temp_reg;" q2 Q v$ l" D2 r8 ~/ M" T/ a
! \) U9 L S* V* j
//temp_reg = 0;
# V* s% U0 q h0 [ //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
7 m9 Q3 X; ]3 W* I/ v8 C/ r //upp_reg_hdl->UPDLB = temp_reg;# o1 a9 o% D" y' h
: y; C. S# Q) P} |
|