|
0 @1 j6 `& W: h寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):% H: V C" R0 n7 g0 v
static void UPPInit(void). D; z9 i" U. C' g
{
0 _8 \" j' P; j. w c! {8 a( i unsigned int temp_reg = 0;
' l9 Y, ]' ^! X& g( _9 P$ `. r3 m# F0 ?( J5 B" c q8 F5 m
// Channel B params
" ?$ W. g. O$ o! f CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
' l! ]+ N, `# a5 }5 ^ CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
6 ~& J' k! J$ t: P CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 85 h% q0 D8 |; _( L4 h9 u7 W
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate. x; o$ H: j9 h! o% O! U7 q
* j/ ^, Y& D2 d& U, D // Channel A params: u' m/ s. S+ \ C
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled. g0 s* k1 b$ d
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
4 ~* E+ R* l6 `7 T CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8/ d+ l& h- z3 _& l
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
! J, o, l1 \* z6 b* Z3 h- W9 |# O( P
! ~5 @. p# x# Z9 T CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
* \ U& M: N, |1 u2 H CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
% F! i2 x i4 } D8 J* A) T( A
4 V, s, m. c$ ~9 v upp_reg_hdl->UPCTL = temp_reg;
# D+ K( z5 }. @: s) i! K( F3 c' S2 G. b/ f
temp_reg = 0; # N0 s6 g# N# B8 X4 D. s7 t
% w3 {; s% ?; x) \
// Channel A params3 p4 \4 T$ n/ y: a' z; m+ C
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle: Q, Y ^0 ^& t7 L0 \& N
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
2 W3 M* z& B$ l. b- a; G1 d CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
0 B% L: v1 l3 C) q! U0 Y1 Q/ K* Z CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
+ [; t! e2 @! c( A( m1 a- C- | c
// Channel B params
7 o8 r9 y$ B, D x: S CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
8 \5 m8 u6 Z. T. I CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
4 k# R, T8 V& ?* V$ [4 h" V CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable2 @ i; p- u @" |
, W$ a( o" _2 o1 ?; c upp_reg_hdl->UPICR = temp_reg;- T) S! F ~& b
5 }$ ]# d/ k! K+ O0 J //temp_reg = 0;
! T: O% v8 t. d5 ?: Z
% O$ T: F8 C6 V6 Z //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value4 u; e" {1 I9 i \
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
- w/ |$ X7 g* P& j. y+ U$ e1 k1 E* r. M5 l; a! v# Y% s4 s8 ]
//upp_reg_hdl->UPIVR = temp_reg;9 t0 \: M* J7 J$ E- k' R, R6 h
1 I X6 j! `5 Z
//temp_reg = 0;, u2 t W+ i! d' j9 l/ c, z
- f, C* A7 `- C //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I 9 l% t0 Y: M: |. Y6 H
//upp_reg_hdl->UPTCR = temp_reg; M8 g* `5 Y' A, L" X; \+ O2 C, d
$ d) p2 I1 } F4 z4 [0 H9 W. l. E
//temp_reg = 0;2 ?. }6 q! j# v" P( m4 Q
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
) |$ G& S3 Z& F1 |9 w5 X //upp_reg_hdl->UPDLB = temp_reg;/ ?- h( [" d! c
( t. f' S& c E} |
|