|
8 \* Z7 f" x4 j: Z0 q! r- b
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):) f, R; ]. x2 ?8 ]+ W6 s2 f
static void UPPInit(void)
2 Q! R$ q" o7 p( U: G8 W{
8 s& _) g- G7 p' v4 A unsigned int temp_reg = 0;
! W2 K/ k7 {2 E( J& u5 o! w& t& w& o* z
// Channel B params
. M) z1 X) w& V* w% G CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled3 z e/ ?& w% w6 c% k, {& D
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface9 _1 L* {" t/ `: H7 G( s: k4 R
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
* Z0 o8 S+ t" v& y3 @+ y CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate8 T7 d A# L& S. `% e- i3 v1 P9 x3 i
4 H* e8 f1 E" \( F% E$ v! E
// Channel A params
, x3 b, c: s! d. S w0 S CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
, r& ~& N% m2 W8 i0 Q: n4 _ CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
. G; v; b6 G0 ] CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
* @) B/ y" O, p* ^# w/ m CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate& T8 x: n' M. w# u' h2 @7 } j
; h& h8 n* \! r5 l! Y0 s. m) O! M( X
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
/ E. a& X1 q- Y9 R3 A9 J CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive; m7 {/ p# Q, m# w: |
8 P& e9 k$ r' |5 P1 R2 ? upp_reg_hdl->UPCTL = temp_reg; k; }2 u# w! F5 \2 {5 g5 s
8 E1 _: _1 l9 K, j, N. j r temp_reg = 0; : o* Z3 P% x& F- Z: T
: h. q+ U/ H% {% H* m) ~
// Channel A params5 J/ S8 Z( k" U. c- a
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle0 m/ q2 r7 Y x" W0 C, r! Z: X+ i
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
) {! W* {$ ^4 Q3 k0 G CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
! v5 ]; v& \1 n, s, W- E CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
% V9 @! G* s7 M: i2 g1 `/ T
! q( M2 T' V/ o0 V // Channel B params- \: }1 k$ j8 u* T5 B% \9 F }+ k
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);; w# H6 E- z2 G* p' r
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
) L% j& A; q: E3 `7 `# y {7 A9 B CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
K( `$ K3 W+ z" z5 s5 ^( H9 j5 A \4 ?" A
upp_reg_hdl->UPICR = temp_reg;
, O7 V0 K& y& I8 w0 m; j7 ^# k; p' v8 c' T# ?& T3 Q4 D
//temp_reg = 0;
% p. ?0 w. j6 {9 ]" U4 ]: d) w" m4 N! N# g: ]+ O0 g
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value# p* L: D' [6 z( `# K% o- P
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
- k0 P( C0 C1 L; A
! `& ?, @& \' e4 z+ a" N //upp_reg_hdl->UPIVR = temp_reg;: f- _& a$ r/ l7 A! [3 x" S* L
$ y- t" n. S$ F" f( P* ? //temp_reg = 0;
* h$ x U) d: T# W, A+ }7 L- ? z1 ?' m9 e9 l! Q
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
2 Z# Z. k5 ^+ \( {) S //upp_reg_hdl->UPTCR = temp_reg;
6 r! V; X/ d: |. _0 C, Z) H6 M% o
//temp_reg = 0;
/ U% [+ ^1 C$ K# H: q //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable' m4 ^8 o2 K$ b9 x/ u
//upp_reg_hdl->UPDLB = temp_reg;
0 m& e8 Z+ @8 Y Y) v. b. b/ K) w7 i
} |
|