|
! p* m0 x( D4 i* j V2 Q2 `寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):+ M5 ~7 U, t, }' F& `
static void UPPInit(void)
& S+ J8 ?: O5 T' q. |( P3 U{: ?/ m2 F" J$ Z. e4 Y
unsigned int temp_reg = 0;& P4 K8 n, P! o. s8 ?
. n# W0 e/ F9 c' [: \8 w! z0 X& {, | // Channel B params
; [8 i' r- n7 p8 L2 B' B5 o y CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
0 X. C+ \# G2 z1 [" M CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface) t$ p( Q- N& g1 k" f2 h
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
9 _2 r* t; z6 _% `2 Y, k- a CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
4 G; t8 w6 S, A. ]; ^# I
0 k/ ^7 F* z" g+ e! Z // Channel A params* Y: E0 B) h" T6 y
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled1 X- E) Q" o3 L: Q0 `1 L( U# u
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface! q( Q* n# p; X/ e
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
7 q4 k' h4 V- N V0 e CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate: w. b1 n( {! D" b3 O
% A& @1 \6 H. M& \: e CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
. G( t a* x+ m! I* ^1 ?+ [. U CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
! s, S1 g0 ]2 t1 ]0 B
: N- Q3 o' T" I upp_reg_hdl->UPCTL = temp_reg;
0 t6 m5 `, y" ~" Z8 M; O1 f( S) O( h0 S9 }% ^4 o5 i8 ?' x! z
temp_reg = 0; 9 ~ g% w* f M3 w, |: R, K( d7 y
% p/ Q8 a. J# A
// Channel A params
3 q3 x9 y- b: y //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
* X1 e0 u$ {8 ]8 X- F+ s _ //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor6 h5 T' I% @( I3 a& V5 u0 u
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
( h+ V! y; m! Y( b, `. ]9 _9 @' S CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
. L! w. e$ \8 C% T" l$ s- E' n7 M7 f/ w
3 N; j. o7 a- e+ b9 r; p5 j5 a4 E // Channel B params7 S5 Z. Y& F2 w- j. i! q/ y
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
( D! s+ b$ Z: T+ j CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.: n, D* q6 N8 F* h$ d, X% F+ F/ F
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
' E, \. Y9 Z( E8 e! P2 \' p, \
; P) n. s8 {9 U# \6 U; z. J+ @ upp_reg_hdl->UPICR = temp_reg;
( N2 ]" x3 b6 ?6 q$ ?6 I0 p/ A5 _
7 b* L* L4 q: S5 L //temp_reg = 0;! o \( _* L) [4 q% L
$ O" ~' M2 p6 j. E, ?% C* t- j- E //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value+ O2 }% K# U. K
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
( \& U5 y* N5 x9 U8 M8 f, y7 A
8 }& G E- f! g3 O //upp_reg_hdl->UPIVR = temp_reg;
5 T9 @0 e4 h1 z9 [# d
; A+ M1 J& C2 m$ y //temp_reg = 0;: A/ Y% u( n$ j# x' l
( f- y! i: f; z% b
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
/ _7 Q& P! M' G* [; P+ i4 \) F" [ //upp_reg_hdl->UPTCR = temp_reg;
( s h4 d& d" I" f
3 T5 W( s7 {- p- [# h% y8 G0 v& Q //temp_reg = 0;& h6 d6 V% W: h- a. {1 e" X
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
3 z) z0 C5 x* Z- M //upp_reg_hdl->UPDLB = temp_reg;# T7 {7 S( G# c0 B' i
5 z- [, R8 [. E$ X2 U' V
} |
|