|
1 q6 c4 H9 i4 t! _1 A3 B' Y8 `$ F
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
" L. H, O# L3 W4 Q4 p) ]+ Q% hstatic void UPPInit(void)
% L2 {5 u$ D, o: q3 E{
$ X7 V: u: b: [4 J unsigned int temp_reg = 0;% \6 l6 G$ Z+ n9 S
' g/ a, m, J0 m! D1 g/ n // Channel B params. g0 H8 e* l! h9 B/ I
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled E2 f6 ?+ g! C, X' M- @& J$ u
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface, L" K5 I- q# d4 c* c/ T
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
1 X7 [/ _5 W8 K CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate$ x2 C' _9 O! E F
( R3 s" p1 G5 k3 S5 R2 k1 F1 [
// Channel A params
- M- M2 I; j* t8 i2 Z8 X2 } CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
1 ?/ S2 B: |' j! g/ I+ Q CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface8 J2 Q2 S+ D7 J1 L0 z: `, S# l
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
4 S: s8 e& b# z. \' A8 I! \- d* c CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate- S0 K! g6 `" s3 o$ ?- w2 b
% p# w- l. R, ?$ S- y/ J% [
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.- H' }. f4 _. t
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
9 }4 X8 n8 N6 Y( ]; c5 e1 w/ x6 z3 ~+ S$ K
upp_reg_hdl->UPCTL = temp_reg;0 y$ r/ R7 d! Y1 z) Q, b/ [
0 o; X, @9 z7 P temp_reg = 0;
% q: [+ D2 v. e; ]; C! u- k, b" X1 z2 F% B w
// Channel A params
7 M Q" e0 m1 i- g) G9 N8 K //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle% `7 O. X- }1 c3 v4 p* A# k
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
$ [" e R6 A- A. S CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.4 o) h z2 x. T) H
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
7 w# }& u, @: a( h
0 E) F. r2 h x( M& Y# h8 p // Channel B params# M) H, Z/ W7 v8 m3 I0 M
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
: ^3 [# O: f3 R CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
- P. ?3 o8 s, w4 M CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
e$ V8 p* s. o; T: \+ u. j5 I' p6 y. r) g
upp_reg_hdl->UPICR = temp_reg;
% g8 J$ d# c5 W5 }- l6 i! M% Q$ L) t
//temp_reg = 0;3 d, T5 I, K+ j+ l- ?, h# R6 ]
7 \0 V |4 H/ p: @
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
& |+ _9 {0 m) q+ H- s- G //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value9 o# y& S- E2 e( o* p9 H6 W
$ m* Y( y) |2 u, C4 X
//upp_reg_hdl->UPIVR = temp_reg;0 Z$ J! Z! Y" @8 o
! u; R% e \9 `2 |. L7 p2 l //temp_reg = 0;
% S( K# ~9 t4 k; ]
- F+ U, q: Q& t" K+ s //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
7 [ z/ o' {9 [$ |; H+ X2 a \ //upp_reg_hdl->UPTCR = temp_reg;
( q" e; I" j* l/ [- ~4 l1 s' P" K+ U
//temp_reg = 0;: I" L# R: ?4 z0 g2 r
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable) X& g: g5 K Q" |, z# b8 }- F
//upp_reg_hdl->UPDLB = temp_reg;
0 U" E, X/ z( Z' B 9 A' p0 z7 ?( ? i7 B2 |8 l
} |
|