|
|
& H7 a; s% _% u( I9 R4 H* w寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
" K4 q( E: }5 a- ostatic void UPPInit(void)
+ }+ F/ p0 {' i" r& r) P! a{
9 @ [* m5 Z) E: u0 }" _ unsigned int temp_reg = 0;# g0 } `7 u6 n) v1 `& k1 `
- ?1 |! l/ r& U0 R
// Channel B params |* {) O- n* F0 @! M+ Q
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
6 D. O( J- I" a1 a1 r CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface0 Y+ k; |* l% K& G& d; q8 v
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
3 F* V# H0 d2 R' v7 I) O CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
$ v" r4 c9 `% A z' `+ K% V4 \$ z c* k, v# S% N
// Channel A params1 g& ~' G4 |6 k! v$ l6 V* u3 Z- g
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
5 b7 S) K( r7 U4 \0 v CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface! |- ?$ }/ |# e p3 r( `2 G; w, g
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8, `5 |$ _; q5 i( m
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
( K8 b8 p5 s9 p# Y" X7 a
3 l# ^- c8 e6 t! Y, v% {$ B CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.% U; T7 M* V! D1 z- l3 N0 r8 b
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
2 E8 z+ {) w8 F6 z( U2 [1 P6 @# i. s6 D& E3 J& X- J% c/ l
upp_reg_hdl->UPCTL = temp_reg;* u2 l+ @7 l9 k8 F
' C7 p& q; s" O$ m' `+ f temp_reg = 0; . @+ d$ A+ a5 y) j4 Y6 M
, x. i6 t7 A+ U0 ]& y' C0 z // Channel A params
v/ |% l+ ~* d' X //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
1 j6 J+ I+ p2 \# G9 r! K //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor. K3 R5 }" O5 [5 q& J. w9 f, E# M4 r5 D
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable. g& M; B# A3 {( h. l4 H; ^+ S
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
+ K9 n# H0 a% n2 c. ^; S" v5 V$ f$ i/ j9 P0 U5 f
// Channel B params
9 L8 e9 u g6 r) K CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
: z+ l) O$ l. H3 H CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
0 j( C; P' b- l- I3 Y% L, x, y$ Q CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
) b0 ]; E2 a0 n1 e# y% V
- l4 z) |+ \1 P3 B! r: t9 _ upp_reg_hdl->UPICR = temp_reg;
. T8 g" m: F9 b& C$ A6 S- _9 R6 O2 Q3 T' x/ Z0 L4 C
//temp_reg = 0;
6 J$ h$ r: o! f0 O5 k p) e% f
8 W6 I: f. o( b' X( ^( {+ @/ G* ? //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value, {* b- N( _6 G/ w9 w: V5 F7 w
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value) @. b& [5 K# K8 t& y4 S% q
3 o, j- i& k$ [0 B0 I. }) g. M //upp_reg_hdl->UPIVR = temp_reg;
( Y2 p3 J# G/ c
0 L" |; ^6 s; o+ g* c/ f //temp_reg = 0;% a+ |0 ]4 D- Q8 ^; _, `5 L
0 D$ C& C% g* R6 p2 y q- T
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I ; ?0 `0 k' f1 s
//upp_reg_hdl->UPTCR = temp_reg;. N R* a8 \/ x) N
0 _1 e8 J7 t1 t( u2 ] //temp_reg = 0;
7 V ]3 d( M9 o( E6 j //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable/ \: Q* ]8 F' N! H# E7 q
//upp_reg_hdl->UPDLB = temp_reg;: I' p% M+ @: B1 ~/ `+ Z) O3 v9 T6 `
z1 ]2 e, G+ c4 x5 a
} |
|