|
|
! K. ~- f9 F/ Q$ U9 H) S6 W: |寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):+ T7 g4 }% I7 d$ n8 I
static void UPPInit(void)- _6 J4 \! Q9 H5 J# ?. n
{5 m7 R% O( I& `9 a) R3 K' k
unsigned int temp_reg = 0;
+ z& g$ C& V4 X# C: O5 y4 Y5 i( U! \& q, r5 \: E- ?" K. d1 k' W U2 \
// Channel B params
! f" _: V5 T/ n CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
) o4 c4 t1 T1 ]& y. z CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
% r( h! _ `/ T. I, S% w, { CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8# H2 [1 K7 x# L9 z# N! j
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate7 S7 E, `6 r1 {+ v
( F$ T o! P! l |
// Channel A params
) `' G% b" n% n CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
# u9 x8 R! x9 c CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
2 N/ q. d `3 K O2 d CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8' m+ f% q1 F4 w
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate2 x1 Z+ F z, ^# X* R
2 W+ g2 w9 P# _
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
: L- D, H1 p; I8 S CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
$ r: a8 l! M& j3 y' k8 M( |/ ]* x1 l' r( w& `1 i6 n9 k' c; \) y8 ^
upp_reg_hdl->UPCTL = temp_reg;
# n7 m5 q* T. g$ e! u7 N2 |7 s
! z- V0 N( n; f2 m6 e9 u7 r4 e+ q+ l temp_reg = 0;
& n& y% @7 c7 Y% a) @0 M0 ]' j5 ]& p- @, v/ C% P/ e
// Channel A params
! g+ o; F6 X4 \ U) Z, m4 m4 I0 ] //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle U' @0 U1 X, T/ B; |" I) i
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
- _* d/ w+ v2 I: A$ L( Q CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.; |1 T! D: \0 N. `" C; }3 `# B# l
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
* L n6 B) D3 S$ o# R: t
/ r$ x& ~7 l+ `) g4 ^6 y // Channel B params! ]# N. J; h5 _* V
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
) T% _, \- \: O0 D& u CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable." N( P" k" `7 x" [, C4 a4 b
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable( J1 @8 H. ]1 E x
1 o: D8 I7 @( f upp_reg_hdl->UPICR = temp_reg;- Y9 k( q: A, X# x0 S! r- h' T
) Q' i1 D/ M# R- }8 n
//temp_reg = 0;
5 c+ j7 f& |' j* S$ V& @
3 D1 I* z T. j$ z+ O/ |0 y //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value6 o- B( n( L3 ]1 g- U
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value! i- h; X' r2 V7 u) G
5 l! L- p! d0 V W- E //upp_reg_hdl->UPIVR = temp_reg;% v( Z' B Y+ f. V3 A" i2 j
0 j: \1 g! h p# H: ~/ }- h
//temp_reg = 0;9 J- j) Q0 |) H2 S, m& J0 O
& C! y8 R. X6 {# H6 N0 h
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I ) a- f4 T3 H7 V) u/ f
//upp_reg_hdl->UPTCR = temp_reg;% P4 s8 @% E( [
: `) Y: q7 z2 S9 `2 Y
//temp_reg = 0;) c. f L4 Z B& v1 C; U9 {
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable* V5 E" R( v/ T5 w2 h
//upp_reg_hdl->UPDLB = temp_reg;
) ]6 c' d* J E! c2 M + e- B4 O! f" o% T
} |
|