|
+ ~9 F7 A2 h# o4 c寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
7 X' U+ e3 z, nstatic void UPPInit(void)1 N& Y! t( X6 W! P- S
{
$ H+ j8 I1 R4 l unsigned int temp_reg = 0;
N5 V) R# _8 ^3 s7 R- l. ^$ N/ ^, U# I0 k3 g2 F3 n9 G
// Channel B params3 A! Q, ]9 b F9 R$ `0 z
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
- ]- A) x4 U: R+ T7 s: M8 T CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface$ j/ C' f9 P: S0 s& _9 J9 W2 f4 |
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
. m2 n; C$ K- K' A8 e% y9 O6 r CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate) h+ F# F# M4 H. O
8 o" i8 E" a. D7 P0 G7 I2 w& i4 d // Channel A params: |6 x/ r# D7 H8 T9 |. d3 b
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled9 l: A' M+ t" Q5 P
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface3 H' `/ h5 J: n. r2 U
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
" S0 H" T/ W1 G3 Y7 Y' ` CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
0 b4 K9 q' _4 I5 c0 X
3 G. i! `# R6 L- Q CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
/ N7 P- Z" P: @5 E* N. W4 s CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
0 ?: z: L7 ]; L M9 C/ R/ p9 {' [ ?, C4 t; F/ w
upp_reg_hdl->UPCTL = temp_reg;5 Q7 Q. k7 e. I5 z1 q% {* _: W
7 L9 p2 d( o: O temp_reg = 0;
1 G; a) F, L& {8 [* i" }0 R
3 @9 I3 A- V, W7 c3 Y) M& G* p2 T' ~1 ] // Channel A params
! `, `- |, x# o8 P+ x& j //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
: y$ J9 g- y( J; M# h- V0 ? k //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
. q/ S2 Y6 L- Z( Q ? CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.( @- D: c0 W- O j; X* g
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable3 M. Z; v' }* d. N- v
% \1 u1 g% k' ^6 X8 M# v$ i
// Channel B params; g( k- D2 A$ l4 G* t: Y; v2 }
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);: k8 z) i2 J l' m( _4 f/ K
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.) Z; x9 i! f* ?4 w8 i& x+ X
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
# R4 _2 W+ _/ y1 c8 f, @1 X( n& i& h9 |- A9 n! g% ~
upp_reg_hdl->UPICR = temp_reg;
( j5 Q4 e: i1 a0 Y4 ~
; L" r v1 h" U. R' G8 U //temp_reg = 0;2 H2 B& S5 |! y
. q/ W; u! C1 l) Z4 E5 B. ^ //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value% ]5 u$ L( ^5 u- J5 F; S0 X
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value0 N! V2 l' S. a' Y3 K3 G; r7 e
1 L6 ?( W4 _" X( h9 p" A @ //upp_reg_hdl->UPIVR = temp_reg;# c7 i: @) c1 O
3 j3 `/ W1 B7 j7 S7 L3 c
//temp_reg = 0;
- k, F& y- }. D* P! m" }! m
" F" I9 ?; M( e //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
$ a' [% t E% [& {6 z1 P //upp_reg_hdl->UPTCR = temp_reg;( x$ _( X' V( r
1 G4 r7 V7 D: `* a, T //temp_reg = 0;5 X5 T) a+ o- j" m+ ]3 Y
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
0 a- n: w+ C& t6 ~ //upp_reg_hdl->UPDLB = temp_reg;
9 ~$ T: W& F7 |+ p
0 \% p+ N: j" t, D, A' D2 `. n} |
|