|
5 q |7 e1 n& B% o4 }3 ?& g* \
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
, y$ E# ~3 e) _static void UPPInit(void)
! F- C4 {. z* ~% ]) i{1 v2 c, \7 H7 J1 ^9 _/ g. Y( q
unsigned int temp_reg = 0;' [' a" T! h4 { F5 Z
- b* ~) n3 }# Q+ f) v! _
// Channel B params5 \/ D, o3 I4 ~7 B+ r3 c# y% J. v
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled1 ?" Y. t0 V$ P/ ]1 j
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
, L) t& T- t6 p4 g- j CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
0 B1 Q( X2 I3 ?; I& m- z CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate6 |7 V( U: q* u$ b$ U, l
/ |# j7 N9 g6 X# |" ` X3 [, n // Channel A params
+ v) e0 h3 ^" k* N CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled, Y' A! R4 J. k2 a
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface# ~/ u0 e$ [( ~! s9 p" |0 S! Z" i9 `
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8, ], X6 U6 r4 @" L7 `) c& {. T
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
! n! F6 N* r Y9 [! X
1 n. k! w0 T' t9 I G9 V3 I V; b/ S CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
. P# d3 ~% c& i' C J CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
- `4 J" m; a$ V$ ]" T! g
5 d0 c6 f h6 e upp_reg_hdl->UPCTL = temp_reg;% J# Y2 {8 T7 G5 {$ K
' D& k) f4 h f H& Q temp_reg = 0;
- T8 E% c# O7 X: p2 |/ X& d* R. |) V$ D7 H
// Channel A params
1 D: _: M$ I3 a: _) v4 K1 y //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle$ ^. w" L$ v* Y* N: F
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
, r' q. C/ E2 E8 B: D" x CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
9 G- \7 O# o0 W1 L CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
9 m, H$ q' l5 l- j" C5 l9 l" A& N$ U) j
// Channel B params% \" J6 a+ b$ ~2 J
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
7 u! q% f6 ~& S& V/ g3 R0 m% C- h CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
1 ?/ g" X/ N. s% ~/ d, U+ I0 |- Q) A CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable7 Y9 l: B8 T" s3 ]. k2 W; c
" g b* o1 G6 Q& d5 \ upp_reg_hdl->UPICR = temp_reg;- D6 f, o, j+ G+ T' Y7 q
( j& L6 s6 I, R% R# ^2 |$ m
//temp_reg = 0;
$ n+ U# n( \, U7 n" M0 n
7 j1 s% q2 N3 b //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
- V1 a, X1 p4 C5 g8 T' f+ R2 W //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
. I( K. \" C* `& [' o9 H" q8 t. \+ S% n9 O
//upp_reg_hdl->UPIVR = temp_reg; u6 {# p: [) c3 A3 [ z5 M7 g
" L* k8 V( Y+ Y+ I+ h# }
//temp_reg = 0;
& Q4 `+ H& n% O: K$ [& [: ?* ]2 S) p, S) l, V
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
& @$ b. W* t! x5 p, l) f8 _ //upp_reg_hdl->UPTCR = temp_reg;
' @! z) o" ^/ z5 @% X0 i6 j6 q4 Q+ B3 c3 R0 \
//temp_reg = 0;
# |5 }1 Z5 e c5 @1 W. v# d9 d //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
8 \. Q/ Y( \+ _ p. U2 h //upp_reg_hdl->UPDLB = temp_reg;/ y9 r% r' O# L
: }* }7 l" r; q) |% C, W} |
|