|
|
* O, P! t% J8 f/ f* ^# n; o寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
! R1 h( `4 c, ]static void UPPInit(void)
+ O" y6 A$ P5 A4 M; a$ z8 O{
0 {4 T8 m4 j+ M5 V+ I# @; { unsigned int temp_reg = 0;. F. K2 z8 `. L# Z# e
+ ^9 ?: q) P! q# Q // Channel B params/ w! R# D& c, c: W3 f
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
- d: R# [1 _8 B CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
6 S" F& d" b" j% G5 ^* j* R) a CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
' J* X+ i4 H; V1 s2 x' Y CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
4 q) I* {+ _9 i! j# D& x1 U7 X( |- V5 x* ~, ]! s% h% h
// Channel A params
( a+ S) ^1 j( i+ K N7 K CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
9 U" s8 u$ {+ O& f$ J y% P1 z CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface: C0 o: H7 J* X, A( t8 @2 D
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8+ R9 }0 G1 k) i" U# a
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate. G& S2 Y6 T5 ?7 e, q# h. Z
9 E& a1 @. m' X CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
J8 _, ]( F" A3 M! D. @6 O; z CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive* X- T0 W& Q% [
( Q) N$ v: L' p- G6 U' B upp_reg_hdl->UPCTL = temp_reg;
6 D, {" B+ {- o0 A. a. p' z+ E3 I3 N
temp_reg = 0;
; M6 [3 B; t5 _! ?" Z" T! \. \( ~& W; B
// Channel A params
* C c" L5 A7 ?+ \+ B //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle* H; s$ A5 p% h" p/ t
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor! C/ l8 j- k4 t, k2 e
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable., \( T, v, G7 c6 k) S2 p# {& W
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
8 f# I# j# o. X) |$ ~3 \0 G
% a. G( c: c$ {# B. t8 ?! E$ { // Channel B params
2 I* ^' u$ s( [7 [ CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
/ x5 |1 }3 [$ n: @6 X6 `* g CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable., k1 b5 n3 s6 U1 m5 i
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable" x$ o q i: S8 s& v5 A6 u
\" s. B: k8 A- U+ b
upp_reg_hdl->UPICR = temp_reg;0 W# [+ N! K- |& o: n* Z% q
5 B+ s5 W2 I- Z- E( C* k9 M6 P4 b" A //temp_reg = 0;- F' J% @4 z! [* q0 K
, k- _% g8 n& X( ^ //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value2 U! z3 F* c% K" n7 L5 i0 {
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value% e0 i& }7 r$ c
2 q) Z5 I# D2 \0 K9 I4 E //upp_reg_hdl->UPIVR = temp_reg;
5 H* |* z" F* A& @# D. h6 R
6 F& ^ q/ E T$ m2 k' a //temp_reg = 0;
+ q: S/ D1 B- p& v0 L; W8 q5 }8 @7 W
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I 4 \) {' w# x8 Y$ l
//upp_reg_hdl->UPTCR = temp_reg;
% g) Y3 u2 B6 F
0 Y* X7 c+ Y' N, D, }" d& O0 k //temp_reg = 0;& W+ ~; |/ O/ Y& s
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable4 [' H( P+ M7 `4 ]4 n: ~- F! \
//upp_reg_hdl->UPDLB = temp_reg;+ Z }9 C9 R# i0 a) y
1 k6 B/ V2 j0 k
} |
|