|
! ]" ?8 C5 V, p1 F2 e) ]寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):- U+ H, l+ D8 r$ z
static void UPPInit(void)
0 Q$ j9 f- z# h! r3 @; L1 a{
9 j" ?% G2 I* |( }% U- f9 T unsigned int temp_reg = 0;
. e3 B3 r3 E: E" P; ?7 I
1 Z" S9 {' m2 u% l4 I // Channel B params
/ d( G0 O \( s CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
4 L- E. f) h; {6 ^, r, m+ g e/ `- Y CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
6 e2 r: g- h( L0 Y" b CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8: I5 ]$ g0 b5 s# r7 j
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate/ }8 \' a5 I% \5 |1 Y
4 o+ B9 z) e0 G8 k& D% I // Channel A params
' _! l. Y% [* `8 m CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
" ]7 I( e" M( V* w6 z$ w4 F CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
9 H8 v# |$ p+ Q; F3 V CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
. Y; e+ [; Q+ h( W+ W" k1 {; Y CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
$ @% u' m3 [5 X+ g3 O! i) f0 q
$ r7 |; a/ x& I" Z# Y _# {% ]1 N9 P CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
* |+ G1 ?1 q$ e& V9 C CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
1 O+ V* J- w" F; e/ G' X
2 H' ^$ Z0 R, O# a w3 L) U upp_reg_hdl->UPCTL = temp_reg;+ s( ]% m) f* Y, |" K5 |3 q
% J M1 S' R5 I0 b7 I7 F) a `# Q# N temp_reg = 0; 6 e3 |2 m# _5 w/ R3 O
2 N: Y; [6 d7 |' G" C // Channel A params7 c0 j. b q( v1 z! W _+ d
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle9 d! s6 w$ p K9 R7 g% f6 [
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
* @, W4 L: V( M1 c: ]2 Q CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
* u" Z7 \% e3 W9 J9 M. H CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
0 c, G: J3 C2 z3 `+ }7 [% h" d+ T
2 q/ C% ], p6 _( @5 B8 D c( S // Channel B params
e1 Q( H2 p' _* \ CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
; R" I7 x0 J6 u' \ CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.: H" n. |' D( ]( H f h) K6 T; o
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
. e2 x( Q" W% l- P D& _2 Z! F* S" N) y; B, B. B: s' D
upp_reg_hdl->UPICR = temp_reg;
$ w3 Q+ @# h: g% S* S5 h6 B( a6 ^) g. W
//temp_reg = 0;
# N% }* O }) Y d5 m- {7 q- c6 |" h. c* X2 Q$ x
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value4 {* N" E8 y2 B% i3 E( _
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
1 g/ G- t+ @' x4 @, f& T& H% U7 H& T% q! Z% x8 D1 y: R
//upp_reg_hdl->UPIVR = temp_reg;
: q5 \ S/ P3 G8 g& p
4 [& I! x! }, g k' j //temp_reg = 0;! Y' @: q/ ?) u* G5 v! P% |/ r
* T6 T; {- V/ Z! b3 A5 g* w
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
! o6 z. I5 v+ Y6 @6 W //upp_reg_hdl->UPTCR = temp_reg;
; t! y+ c- ]+ C2 h; i0 ]7 Q
1 l+ q% r- `& W- V% H# e, W //temp_reg = 0;9 `: [* z- n+ V: d# h0 r
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable s* o8 U. W' t
//upp_reg_hdl->UPDLB = temp_reg;
; e2 h+ g% G8 k3 | U/ W: B9 u5 ] : l0 k/ }2 y4 s8 E t2 A; A
} |
|