|
! B/ X0 Q6 h$ b( d9 u1 |
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
1 a" S% Y" D% F: ~4 \$ g' W; V0 z1 sstatic void UPPInit(void)! g( i. r$ J4 e6 {2 `4 t
{; v2 u0 z- r H5 ^' o! F1 X
unsigned int temp_reg = 0;
( n7 N( J) r1 t/ |1 `4 _* Y: y$ P, n- q4 r
// Channel B params+ g( d$ j* s4 t7 ?+ L2 E, R7 e
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
e% w' ]4 v( R6 M& l {0 \ CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
+ M% z4 @+ D8 F" R) |# ~ CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 82 l }5 c8 H6 q
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate, I. g( N) v) n8 b6 a% ^
4 B9 W1 ~5 g2 U8 e$ U
// Channel A params0 S$ [/ ^2 T, C* u0 n( A- b% p
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
1 t. N( }6 k' o. u$ R) m3 K CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface% a0 }# g( D- n5 B$ ]/ {3 A6 V$ `. G
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
# W* x0 P( [: \/ r CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate/ K2 O8 _8 ~5 s% A, }( x6 C7 W m
7 z0 i% f4 n# E7 @% F4 N* T: S" U8 w
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.6 W/ o) o& e) W& r
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive( [ ^, p r* [) f5 K1 c) H. p1 p
5 @4 @$ A* L$ y& r upp_reg_hdl->UPCTL = temp_reg;
K1 I: h9 g7 Y8 n( X% m* E* \: @
; B! ^" W' f1 m1 @ temp_reg = 0; # K; b$ J8 q% c: B
2 x' h+ `( T" H5 X // Channel A params1 S$ {- f0 i" H0 C6 E8 m, C4 q, t
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle f( Y5 w( g. Y6 ~# O
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor- Q! U" G- F7 ~, @ [
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.$ ]; y O+ O, S5 ?0 Y$ D: `
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
3 P( Q* _5 J; Z, j) s* \5 w
+ w% w6 i# k. m3 E // Channel B params
$ y+ m2 y$ R6 J; R) N) M8 | CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);" v" r) W0 z2 |& D+ ~- p' \
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
! n7 W/ C5 J1 C# t( u CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable6 B6 O: `' k/ s: C: g( \. S2 l
: G- h6 h% |( }7 y/ a! O# q
upp_reg_hdl->UPICR = temp_reg;
1 g% p; ~4 |( z% W+ J3 N
& |* _& B. l3 M) f( M6 d2 U //temp_reg = 0;# b% r, X& A9 l/ [; d3 M3 z3 f- V2 d
- M0 z2 s9 P- Q //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
: ~' Q4 R" v" J, M //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value, B6 Z# |* A! _2 s
0 C) i: f$ Y* B
//upp_reg_hdl->UPIVR = temp_reg;& i1 O* `$ K1 u) O! m) s P) X
6 j& B4 ~ _0 X, O F' ^
//temp_reg = 0;7 _0 c6 M8 F1 U8 z& a8 l
( b9 _! y. @$ g% {- z6 j" ]) b //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I , t! }- {( g7 l( j p0 C' F3 P% [+ j- b0 D
//upp_reg_hdl->UPTCR = temp_reg;
a( S0 w3 y! O% H5 ^% t( I7 Z' Z0 D
//temp_reg = 0;: ?1 v/ n+ _2 r+ w' ]& W
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable Z3 q& y! ]4 ?# j4 j2 f
//upp_reg_hdl->UPDLB = temp_reg;
5 ^9 T e1 ^& B; j H3 ?: [ 2 Y' Z) O" J7 `. Q' T; f |4 q1 B% S
} |
|