|
' V# S* c& u1 n' G9 i$ b寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):+ f; M1 Y' Z P* ]1 m0 @5 g" {) {
static void UPPInit(void)
( h# R1 }8 |9 p# L: {& C{
* ]( _7 J# S7 C# c2 y unsigned int temp_reg = 0;
% G1 _. N) m% y/ P3 ]) d- m4 [ z. e3 ~* G9 D* p
// Channel B params
# _% L5 }% j+ R. E CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
5 r& P5 `+ ^8 f# | CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface; a' U& c* U$ d. |+ N
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8& R) s( F5 p }9 I: J. u, s
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
, a% H f- s' ?; ^4 m: p5 a$ C' h2 }: X S7 N Y+ c0 w1 N
// Channel A params$ W2 [% J& @# C J3 l
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled+ y/ S5 G$ @3 R, S+ p7 a! g+ @; G) ^
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface# l) x; k2 S7 R' j& u8 J
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8 k: U3 F8 G3 Z/ U" N& g7 s+ g6 g
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate3 @+ U3 C5 K0 U9 v
: D' p* m) |6 r' W CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.! e/ [; l8 H( [" V% {1 \6 d
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
. H3 c# O2 `- T! _# _4 |6 V3 ?( L) G1 }
upp_reg_hdl->UPCTL = temp_reg;
' Y0 z! B4 c9 P8 n
$ u- {" n& M* Q7 v& s temp_reg = 0; ' ?( c- e3 g. Y8 x* B6 _1 r
, M$ W4 l! ^8 c0 V
// Channel A params
/ A- {6 Q8 C* Z+ t1 h/ W //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle3 r/ R$ h% i/ l' r/ R: S. Q! `! g
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor' }7 C: @$ J( N, ]5 r
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
) A$ O' X( V4 e CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable# A9 N, v4 o9 M# Y3 V) U
6 ~6 ~4 J- Z% O9 Q1 k: {. F! i
// Channel B params, j; F# S1 T) ~3 [/ Q# a0 M
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
4 R9 p$ s- X) w6 O2 m( n) b! s CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
( ?- P+ u) w8 t% _: f CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable% f' o- d: E$ {# D
) W; f4 r* e& `& B7 C upp_reg_hdl->UPICR = temp_reg;1 Y6 h# T+ N1 H J
6 y7 P1 ], f7 j: v
//temp_reg = 0;; F; g3 c" T5 g2 l& J
" C) Q5 w$ i& E" U
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
2 m( A. T* a' y: s6 O //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value' [% X, v8 Y A! G v8 M1 ?
; ]" |; |& x9 @3 X1 o
//upp_reg_hdl->UPIVR = temp_reg;
; g3 o" f1 D& Z1 G3 s" j) ?/ `+ S0 ]5 N
//temp_reg = 0;0 G$ p( y# A& G! n3 E
2 J5 y& v, M4 z. n" I; U- a //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I ( L8 R% y* U9 `' h. T
//upp_reg_hdl->UPTCR = temp_reg;* o# c2 x) k/ J$ H' X9 P
( D/ o& T P- l/ C6 l0 P
//temp_reg = 0;7 z* t( ^4 u( \- l/ R6 r3 l8 K
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
6 b$ N2 z# |, {; [( }' L6 C //upp_reg_hdl->UPDLB = temp_reg;
: z, E) R. }+ G1 X & [7 ?5 R+ s6 g: Q7 X! ?
} |
|