|
& x2 k) L0 Y: ~! |3 c- @0 l6 j寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):' ~# R5 j; p ^# y" q- Z
static void UPPInit(void)# P' b. [) h6 [8 @% ~& p- V
{
2 g. Q1 k2 T5 `) K( J8 | unsigned int temp_reg = 0;
6 E5 ?% T5 ^9 j" w5 C* p# N2 O Y7 [/ X+ l* X
// Channel B params# F% Z1 ?3 i- Z/ \' L( F
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled8 F- E& x. s) \$ [9 C' I" K; v I. S
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
. T/ x5 e6 ^; W! a5 q; j CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
2 B" o% L3 u5 D# f, w0 g: B CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate% y9 ?2 u$ h& w8 H* S; `
4 m; [: Y3 |6 @# F8 h3 M
// Channel A params
5 H7 M8 g: O. G; d0 k) o5 Z CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled N2 C" E; K) T3 i. p
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
U+ j0 t7 K/ x9 A/ }! C1 v2 W CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8; i+ X) u1 J0 `4 }
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
+ N' c" @! M9 b. X" @# l2 c, I) i7 w: C: P1 Q/ v# @; Y/ ?
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
! z) J4 h1 K2 Y$ u) C; C CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
% Y, M4 x$ ~4 \) N) p: t* d& R, }+ Q1 Q3 w- G
upp_reg_hdl->UPCTL = temp_reg;9 {! I7 n/ W( L# Y* f( ^/ s# @
# r- @7 u [% X% a4 U0 Y temp_reg = 0; 0 y# M7 r5 J4 L8 p5 R1 u
0 U/ d& O* }* I% V$ Y' S2 P
// Channel A params
: h& }$ C- E: n$ Y9 B //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
3 Y8 w2 L. T$ M, }. {7 m$ @1 l- d( } //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor: l/ @) S' {4 Y7 c7 n0 _
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.' x- S0 b" ]! R# S
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable* P* j/ D2 Q' g( t, L h
2 Y ]# q6 g0 d) P& t8 K7 _* m+ @; A+ A // Channel B params) ?" p+ }& Q* D; L- A' D/ o
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
L3 f4 N! h1 ~1 ~2 g- ], N CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
# r1 V% ^, i$ B' r" Y CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
) w: V+ ]1 g5 ?0 v* G
5 o3 b# }/ Z1 h4 J) P% b8 z; ? upp_reg_hdl->UPICR = temp_reg;& u! ?8 z9 Z4 @$ l/ a
4 n# M, G( c7 ] //temp_reg = 0;3 k% m' f% U, F' h: L, u, ]4 s7 t! Q
' b ~4 x8 O- P( q
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
8 p% Z, H1 p9 d/ f //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
5 T- Q* P% ?2 K3 |* C2 b: B& A7 F/ ]& n
//upp_reg_hdl->UPIVR = temp_reg;, G' k) f# v& ]# c7 e
2 p% ~6 v @& D0 h' c$ i
//temp_reg = 0;
: H7 d% z' T/ i9 h; y& q% d( v* v5 [) S6 E3 y4 V
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
. R- l p) x8 d1 b7 p/ N7 ~' l //upp_reg_hdl->UPTCR = temp_reg;9 l- o- K) r/ f) Y
# I4 F$ {/ a; \+ U$ S& J. u0 e
//temp_reg = 0;# t. \8 q9 P2 X
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable) V& [/ H0 @4 S% b6 N4 y( f
//upp_reg_hdl->UPDLB = temp_reg;0 t7 m: `- B: m, b0 d2 X: Z
: H. x) @, x& L/ B$ ^8 U
} |
|