|
: k% @& b7 Y2 q. M! g: B4 Z, {
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):2 n r7 u* O. }. o) s
static void UPPInit(void)' [. h. M, S/ G1 a1 @
{. T8 k6 d; d3 ?0 m, @
unsigned int temp_reg = 0;& L6 x2 p& m I" S
" w# L3 m/ s5 S+ \, z+ v$ X // Channel B params# S- O# h0 J. a7 t- x7 g5 M
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled4 ~% E# O$ y4 X5 e# K% G* O
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface, Q4 x: [' Y0 K2 h2 I9 Q
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
. g4 L% H7 U$ Z6 m CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate3 w& n5 b6 @! ~, s7 g6 u1 O) I
0 u$ E1 R: B- w1 [5 E5 ` // Channel A params- e' ?5 U3 i5 `% N' T
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
5 g1 o: x1 k/ r9 s, y CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface0 d, H T% @6 q
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
: Z* X4 k/ m% o" A5 w CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate4 A, y; q8 {- X
% h: W/ n8 {- h% T( w u
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.+ ]: L9 c$ b: ~, e
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
. e! ?( c& k! P3 i9 }( `2 `+ G9 Y9 k$ e: L' f
upp_reg_hdl->UPCTL = temp_reg;/ o Z) d$ j3 r6 W+ L
1 g" y+ }& g4 D$ D- z0 f0 q4 s( ^0 {
temp_reg = 0;
9 t( ` x. h! s: n. t
$ P8 y/ z+ l2 q" ? // Channel A params o( T. s/ ]- z1 ~
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
* r2 W* x: f3 c) a: D o2 \ //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
! ]3 A. v* q' W CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
5 c) s9 I$ \0 ^. p s4 o% E CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable9 r6 |2 z/ l" l5 H! q3 ~
1 B& B; S: R6 a. z* E
// Channel B params. l* M6 A- T5 x
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);& Y+ } \3 [- @+ i7 G
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.0 k4 R4 s4 h0 B9 ^+ B
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable9 m/ z- v8 C4 U
$ z) T! L7 J. b; I3 k- Z! O upp_reg_hdl->UPICR = temp_reg;9 Q8 t8 s( ^: l; o$ h
( y: Y5 w6 T( {/ b c# g
//temp_reg = 0;
) v& p# a- L! K" c
5 Y* l0 f8 d# y7 j //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
) `4 A# ]! [' j' ^6 B8 K; J) b //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value: E2 d( f( x9 s% ?+ S
# e, P# j# ]+ w3 Y" s9 _8 G //upp_reg_hdl->UPIVR = temp_reg;4 F* u# M' U) I. {
8 m; O7 k: m. D' Q! c+ n //temp_reg = 0;( S0 c+ y% Z- H4 F: O
" \, y! y* p/ s( ?7 u //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I ) T+ ]/ u( q; g
//upp_reg_hdl->UPTCR = temp_reg;# P; Z9 @& _3 N" X( @
& a# j' B9 \7 ?; x5 c7 m
//temp_reg = 0;0 `) J0 O% ]+ H8 l/ Y& @
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
$ O! Z n0 M" {3 t q //upp_reg_hdl->UPDLB = temp_reg;
H& b: d: c6 }5 c* v. ?5 g$ W 2 P& a3 |- @3 M7 b( u0 L% b- U M; o/ @
} |
|