|
0 K d9 @9 x% ]0 H
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):9 ]6 h2 r- i, d6 u: `9 R8 m
static void UPPInit(void)
/ i0 o- h+ I; \7 l# d9 }1 @{4 |) b# S! N! K" [5 m
unsigned int temp_reg = 0;# J( j/ E) o7 k9 g) S6 x9 R
. _+ _, c$ p, N& s9 M0 @& } // Channel B params) e8 [3 E4 i! i8 c# W, x8 ]
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
2 g, D+ b& G/ R" l: H CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
3 T5 t- S% b. L: E/ W CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8$ f5 E0 T" v. j' X4 Q1 v( o
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate# p$ |0 _$ e& {1 V" E5 w* N
. y1 m/ X% E4 k6 Z1 r
// Channel A params- C$ K9 J* w0 d" z) a) ?: R9 T" r% v
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled4 b0 }( O9 X1 ^% l" o) B' b
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
0 d9 l' `0 l% h, E$ ~ CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
v: V4 C# x& q$ ~ CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
! C$ S- n) U/ |
" U' {4 Z$ ^! a. G( O% g CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
7 t% g% }" _# `9 } CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive+ F7 _# }. J- F+ R/ C* X( x
4 f, L6 I& M. G0 J3 k! J* k upp_reg_hdl->UPCTL = temp_reg; a3 M8 c# N9 u U- K
! w( X/ V$ ]' f) s/ }6 O! R temp_reg = 0; 6 A3 _1 i# z8 c1 }* X
1 d" M, F, p8 _% p* P5 f8 H // Channel A params
2 V1 w- W) k% u+ D //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle9 \( ^ m1 \- w# ?
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor* s2 [' X- _0 U/ \2 _$ y. [
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
8 j. J5 r( C8 C% ~) f CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
) V+ s' G0 l5 j' z, [& L5 \# p8 x( x1 V, e
// Channel B params
9 K* ^4 r% ]) |, N+ S CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);( W I9 p M+ Z1 e* _; K7 @
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.; i; j7 h; y% r) v
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable! d8 N, e b1 c+ j$ M7 {
) T1 y/ u4 P X/ j$ H* {- G( |; g upp_reg_hdl->UPICR = temp_reg;4 L" w: Q7 Z9 N5 q6 B
6 \5 V/ j6 v3 O9 ]; E //temp_reg = 0;7 ^- g0 u0 P" ]3 X+ O* A6 B* _
! j1 M9 x4 S* l w; V
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
# ^/ W) p% H" N) e7 e //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
& a/ z! d) I K$ @
' u) v+ F9 v( U( B7 a //upp_reg_hdl->UPIVR = temp_reg;
1 y# p( D: o1 I6 N5 U* _$ l" a. n% s3 i
//temp_reg = 0;4 K- e. r7 c- m
1 G. {% F8 P$ Y
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
% {8 H5 z% `3 M; @. ^ //upp_reg_hdl->UPTCR = temp_reg;
. v+ |2 Z) w4 V8 w/ B$ J% j3 P7 t* a' n5 e
//temp_reg = 0;3 r/ O+ r1 w1 E! }
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
3 j" e( b: f, r# n5 |0 r //upp_reg_hdl->UPDLB = temp_reg;
2 q' m8 w2 i6 r5 v0 M. c ; d" o5 Z: R9 Y# ^4 y
} |
|