|
l, |. W( W5 x" \9 r% h
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
) r. l& P, r9 r& E3 i" ~static void UPPInit(void), M* Q8 e# Q) m
{
5 R* a2 w: J/ S, G unsigned int temp_reg = 0;
( ?. U$ }/ G( H1 Q' L3 U# M/ y
; l- s: @- ]/ ?$ \# u6 r // Channel B params
$ a6 N+ \9 L. Y( t CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled" R% f% Q$ |2 r6 k5 r% B% T1 N
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface/ A' k! K: O' @; r, x1 e
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 86 j6 w, o( U6 [) _$ e, _
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate' D, h! D+ S! q* \
% _# w3 T- h- m( x8 n1 [& { // Channel A params' u' a+ E8 g, C4 }' F, r
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
" K3 \9 b0 [' { CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
' W* V5 a% P, W' f CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
' t$ W$ q4 i! |( z: G CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
4 \* N6 `% @* ~
/ ]4 ~1 Y8 n7 G6 m CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.6 G% P1 S3 }3 @- s0 i1 f$ j' V% n
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
) G! I6 }+ p9 Z$ q5 ^3 a/ Z# n9 U: D8 W: ?; ]8 `
upp_reg_hdl->UPCTL = temp_reg;. q8 {8 S; V2 E8 |4 r
0 s" q2 [. b6 Y( t
temp_reg = 0; ' N( N- a! x: e/ ^" D
5 l; C5 M u& g; B' i8 E. C // Channel A params
& d, o3 e6 V2 r. H4 L* w% | //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
/ k3 H! e4 R5 m* T+ J //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor- Q7 G" ^) u* |7 ?$ ~( @7 k
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
3 L; v$ I' |2 q9 A1 r CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
: e8 w$ Q9 ^6 z) I6 D+ m' \! L! I; @& u4 b" t
// Channel B params' v. c8 w! P: {2 q2 z. k
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
$ y* ?; z5 G! T" z7 E7 D1 w CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.+ U5 c9 u3 u, y. d) I
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
& u, P* U+ a5 q+ H1 Y- `7 h. D- G+ S6 j! B5 ]: O4 ~. l( i) h9 D
upp_reg_hdl->UPICR = temp_reg;6 C) V# C8 ^0 ^7 u; F" v' }
1 t6 H3 ?: `) F0 t1 b& [" u
//temp_reg = 0;) o) h/ Z9 ?7 p& n+ I1 \
- q% G# B4 e5 `3 [$ j o$ H //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
3 ~4 }# o; L1 h0 z2 A0 H //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value" X; W5 B( }/ y) ` \# v
4 I4 A8 \+ t5 u a0 r( \2 f @
//upp_reg_hdl->UPIVR = temp_reg;
1 G9 Y( B, H r* d& d
5 I9 Z5 j- d- [8 u7 ?1 ^ //temp_reg = 0;
5 T( u$ U' p" @! ^2 {5 M; e, Q* V6 p* R M( o9 `/ E( }& B
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I ! T! a3 m) `, s) g
//upp_reg_hdl->UPTCR = temp_reg;# ?4 w7 Y2 H5 W' L# E
/ F( V& I" a" F* [ //temp_reg = 0;$ P: l; K" ~$ L1 Y0 e
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
5 K1 S+ \! I/ n# ] Y //upp_reg_hdl->UPDLB = temp_reg;8 D7 f% m4 o" I( U* A' E
2 E- d3 a8 _2 L} |
|