|
6 I$ P3 ^9 ^3 [8 S$ r
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
% o% Q: [3 x! Q6 @# O0 R! }6 w3 Tstatic void UPPInit(void). C% G/ M9 M! L; O
{
8 S& c9 F: `; o/ d5 w8 g: b' c unsigned int temp_reg = 0;
: r; }7 W- w: P: F1 g& i/ e) n
1 p3 r. s' Q; o; ?$ y3 g+ B, P% v& k$ W // Channel B params
9 u1 ]& @7 L) d/ G CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
4 N! u N* G0 i% u' _5 S$ ? CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
m$ ~! ~' r6 Y) q6 R7 f CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
5 L7 H: d' A" X CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate1 [7 X: b* _( u' P5 P
# b% k, d( S8 S7 y# H- }& L // Channel A params% x0 ~# f! c l6 [6 m% g+ E! y
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled; t/ Q8 U5 h. i' U0 ?
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
/ v1 I$ Z8 {3 @0 v. e CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 87 T& N$ Z' E/ O- u, l; w q$ m
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate v( o- L3 f' C' F/ l: Y4 D: G
! c& R8 `4 c; H
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.0 {/ o( d- `7 v( W2 C
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
+ l) h" c% v0 L. p! j F2 w5 J8 E. h
upp_reg_hdl->UPCTL = temp_reg;. m# t) ?9 u% r3 m
8 e7 G0 A5 ~1 S3 y& } temp_reg = 0;
" f4 W; ?/ K, E X6 ?7 d$ q
' D2 x5 H* g' z4 ~ // Channel A params& H5 Y# m( w; p. Z8 R4 s2 `7 F! Y
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle! a6 x1 Y* ~) J* J! j1 z4 H
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
. f0 B0 L& t3 b- n' e CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.- w r# P0 U0 a0 j, O
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable0 A4 Y# V- U2 }' d9 n
% W1 Q. E3 G! p# M2 f: ~! z
// Channel B params
( R$ T; Z$ V$ E. k, `! N3 x CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
& U6 ]+ v- P! i/ Z3 v# C. i CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
) N# c& M/ o: E7 W CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
& z7 O. p$ k! n! z: o/ X `* l3 w
! [- [ g4 G( m- y/ r upp_reg_hdl->UPICR = temp_reg;
9 ~- g9 Y9 J- g$ k1 W1 r+ M5 c, L. y8 ? R t
//temp_reg = 0;! C2 l" Q) h% L
& H4 I) f5 _& I* m7 m& [& n3 O //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value* j" P6 g3 Y2 V
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
; P6 B1 T, x* F' T7 a9 R! O, B% R u
//upp_reg_hdl->UPIVR = temp_reg;
u) m1 ?6 y; V8 Y1 ]
( ?, D" D4 { e1 O1 G9 ?% [/ |+ A //temp_reg = 0;
' T0 Z( @# T. p/ X" ^: f4 ~; r0 y, t% Y# ]% x
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I ! |5 M1 J6 Q6 V) f, d$ V6 E) o
//upp_reg_hdl->UPTCR = temp_reg;+ d5 s( `/ W- R
, s: y, U- A3 K, b0 v2 d
//temp_reg = 0;+ W: u! `# R1 y" h1 u, S7 e
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
$ f& B# s* N6 H5 Z( H: j2 j: k //upp_reg_hdl->UPDLB = temp_reg;
8 ] h, s# `( ?; T6 H- i ; K1 g6 S2 W3 v
} |
|