|
1 c, f$ F7 p8 n* p6 u- s" h5 k; e' w' r寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
. ]0 K: A8 x* O6 }static void UPPInit(void)
- n6 `& C+ s2 o/ C4 i8 D9 H* w{1 ~. [. T# G7 o; Q4 r9 k
unsigned int temp_reg = 0;" r, r L: ~ ~- `' e2 K
* b5 i; m7 i9 x. k# i1 Z* C2 O
// Channel B params& [( s! v& W* B3 d! u$ w; k
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
& u; Z8 ^5 o4 ~" ? CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
8 F! g* @/ h& d7 Z2 Q" M/ N6 M CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8 |! a3 S' r3 G1 r1 {" K
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate* w, F" I$ e6 p
, z3 F7 [- ]# G& }2 J
// Channel A params
# L5 W: j5 u \/ N* O# l' j CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
; v4 a& p- R$ q! l* P# J$ | CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface- ?% ^# i1 E5 q0 f. h
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
f5 Z2 _6 G+ t% r3 F CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
F! U0 P1 Z9 D" h. O' j; y% L/ r$ j& Z6 j2 M7 u( u, v
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
. P0 [5 Y3 G4 j$ k CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
5 F* [/ W; a) J# X% U3 `. l6 r. C: e- @) n4 q1 ~1 ]
upp_reg_hdl->UPCTL = temp_reg; i+ U3 }; K2 {* T
) ^9 r2 U) r7 S" y, }
temp_reg = 0; & k$ i- t3 `4 C
5 i* F$ m/ C0 o8 L
// Channel A params
* J9 N3 x5 ^/ @6 e/ \& a //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
# w; E. x9 H9 w" J2 o( p //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor2 E4 S0 g! [6 r; B; K
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.. Y0 ^& k! T9 a4 \: A3 @
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable4 R/ t5 D* u# ~
+ Q9 M$ t- e5 U // Channel B params
% p! @4 h3 u' I" Y8 w# ~! Z- w; u! f CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
* |( F* Z7 q) q' B: Z CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
, }$ P2 Z }" f6 B CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable& E# q# l% j7 B9 _9 a: j( E( s Y
* K, h* W: m: o) u- p$ |4 [0 p
upp_reg_hdl->UPICR = temp_reg;2 V9 |! l; R S0 ^- f! l- k
7 X" |# ]: c8 H0 s# {
//temp_reg = 0;
6 i, [# F( w6 u% `) x8 ?$ n+ u) K6 k6 ~- f o6 q3 {
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value. \) z5 |5 H7 G9 h4 l( o5 T
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
W) g, f1 e; R, D% ]3 X
) o/ s* n4 z7 `" F E" J: B$ L //upp_reg_hdl->UPIVR = temp_reg;
$ M0 U+ e, ~. ?0 V1 h/ H4 u; D+ b8 `
//temp_reg = 0;6 \( C% C/ {4 a
; y& b4 q( _, Z ` //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I 0 J: s- C2 r5 s& E( t: w- a
//upp_reg_hdl->UPTCR = temp_reg;
S( m1 Z- \6 U0 s% S- `
3 p1 A7 l' `# i5 h% J* R" g //temp_reg = 0;
* ?. K2 @4 j8 b1 e //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable. \, P l' P6 G3 f$ D
//upp_reg_hdl->UPDLB = temp_reg;. s! k2 l' m5 P
2 l2 s: b$ ]& U5 \' t, S2 |1 l} |
|