|
' S6 Y/ p# g8 v, f8 Z" {寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):) c" J8 L! h# K9 l0 g: I! H: b$ M
static void UPPInit(void)3 ?' ^' \+ F- X; u4 n Q% q
{
. \( p/ D5 ^- U ] y5 c unsigned int temp_reg = 0;7 X& f( R" j0 f& l4 V4 X( k
1 g; u( w; e, s7 V s. l0 r! N# a
// Channel B params$ E' N) @, ^* a& X
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
5 v9 R' x6 @9 F y! a# { CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
* s' _5 r) ~- { CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8. P+ m4 ~! u' j9 m. M; @4 Y; M
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
6 r" m! _6 n1 v. v; j3 U! l" E* ~
// Channel A params: }5 `* X/ I) \$ v0 \
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled- F& ^- c* ^) p% F `% x
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface. A+ h" _" P- t7 i# ^
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 89 w% h+ v+ j# d; I/ H1 V
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
) O7 `( d% c K. w& Y: f, @. y) y4 ?" [+ d c. a1 ~
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
, A, B0 {! R) S: a7 {% V8 `9 Y5 l5 U CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
2 J: ]+ B" G( i1 r" M, g1 M; L/ f* d3 h
upp_reg_hdl->UPCTL = temp_reg;
1 h; }: G# [# M _/ U, P
4 }5 P$ ~2 C' V: |# V. d temp_reg = 0; 0 k% Z* }( t" v
1 J: g2 @5 n, l$ [9 l9 [' N- v
// Channel A params
2 P: v, d7 e; ^2 u: g //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
- H8 ^: Q D$ j6 x5 g2 { //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
% v; ]1 ^( Y* y6 O5 `+ F- M! o CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.! H$ C- P' J9 d
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable3 S- k( O: M- i4 P% Z
1 x( I* A+ Q' V; Z6 v9 V
// Channel B params. A1 @: K/ `* |! u; O- E. y
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
# }+ h' B D# D; g G CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
4 u$ l0 Y2 [1 e1 W6 S7 Y/ \ CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
+ b; y# Y0 B4 s$ F8 t: E* t; x+ X7 r3 V, u3 P
upp_reg_hdl->UPICR = temp_reg;
; o! B$ F9 }4 [! F& {6 c2 l: f
2 _$ m& S7 {: ?: F/ _4 | //temp_reg = 0;+ q0 r* A% U3 s# |
, y% A0 O U- u9 X1 J& c! Q
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value! `" X# k! q0 J; a, {0 H
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
0 X* J& v. N+ @; a1 W
8 x" T) B2 o) m# {1 a4 A. Q //upp_reg_hdl->UPIVR = temp_reg;5 K; v. H8 T0 O; [) e1 [( U# o
, a6 b$ l z- L k //temp_reg = 0;
. ]$ |- c3 p1 K; n2 |/ V) ]. x! b: q1 `, u, _9 F+ A
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
: J" N0 b# q }; e% K4 o, t //upp_reg_hdl->UPTCR = temp_reg;, T, o* I6 L" c* J& R
U8 @( l" G/ `$ s8 e5 _. a( y
//temp_reg = 0;2 w" U& Q1 F& }% e
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
' Q5 F) b8 A" D3 m H/ m% ` //upp_reg_hdl->UPDLB = temp_reg;+ i, _( p0 }1 r) t, \ O9 N
8 A: |0 L+ R0 X, {1 O} |
|