|
$ W8 `3 E" S6 @4 n; U t6 F
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
4 u0 [/ P4 m# i) vstatic void UPPInit(void)
M( v. X; ^6 s) t, K6 g{# U. A: ~, f- ?, e3 [ l
unsigned int temp_reg = 0;" S B" _2 P- E- T2 T- b& z; R6 R
" W$ K& w7 T5 R5 I2 {' t4 |
// Channel B params
0 s8 D* v, E- {' X' o& T CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled9 a3 S7 k3 {7 ]
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface, P+ q" A4 q* L" N0 x' q Z
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
; N0 K+ W) K/ y2 U/ G: @2 U9 A CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate7 J% m' A6 T6 F& t0 o
$ r% E0 ?9 x6 V/ L9 \6 F
// Channel A params
- U0 i9 ~' W- U' l! }% g CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled, ?; s3 G6 |% L
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface+ Z+ w) X) \5 ?3 L
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8- q# ]% v$ H$ u7 J Y2 D" v# s4 I
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
3 s8 Z7 f8 W* K/ `; C! t2 m1 h% p5 P. y1 p* @3 S6 }
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active. R/ k& C1 V0 ?! T, t& G
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
1 L6 H2 h8 ~* }+ y) `" D3 A8 F9 T+ K; D2 B u0 `. Q
upp_reg_hdl->UPCTL = temp_reg;8 y" e9 {5 \6 m' X* ]
. z+ W7 Y. _* b
temp_reg = 0; 1 I2 }$ }8 T+ I p( t& }: g- m+ q
, O, I. g1 w" h0 U) b: y$ H6 l
// Channel A params5 b. D! P$ J5 y1 `- R& ?
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
" g/ m- s, Q4 ~! j //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor5 v9 A, _* m5 E: r7 m% G" _
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.- v# H' ~6 k. [7 Z! S
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable8 T; y3 N q: }" H% C$ n
- J3 K, l% a; |7 B9 t- R' e9 }* p // Channel B params
! w* K% r4 h' e6 i* j- Q* ] CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);6 Q, B( Q, ^% W& U
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable. W" h/ d( {) w1 Z. P% o1 S6 q
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
. L2 U+ z0 b8 G9 K8 Y4 }. l) {# x: U3 L( \
upp_reg_hdl->UPICR = temp_reg;; `1 l+ B7 K2 Q4 b8 g9 a/ u- z- J
3 w* O/ A4 t) o //temp_reg = 0;3 M L9 X& s& Y; H' p
" N$ H' N- x) v4 z- w } //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value$ J1 o- i9 J! ^9 Z* y" }% W: ]4 ~
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
0 d- U/ w. g# O2 K6 I- U O& }
/ j: W8 X! R T. ~* O7 [ //upp_reg_hdl->UPIVR = temp_reg;
9 |1 @( j6 s v4 n' z( g m2 r( ]7 |9 c
//temp_reg = 0;
$ C7 T A- |: H3 X9 b( ?! [0 Z: D6 S4 \3 N
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
+ T0 l* x8 S/ b1 G; D //upp_reg_hdl->UPTCR = temp_reg;
! Z6 f2 S$ L s( G" A
5 {# P- ^: J0 Y5 L- R9 i' ]& E //temp_reg = 0;
4 M7 q' P2 }" d //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable4 z4 Z( _, m# m8 x
//upp_reg_hdl->UPDLB = temp_reg;1 ]. ~5 v7 _) o/ p2 m2 R
* @2 x7 U: ?& Y' ]- d} |
|