|
' Z) m3 h8 O: i/ q
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):4 J2 N0 M, X: X6 _4 m
static void UPPInit(void)
+ H% h5 i! ], {/ @1 N{
' D. d/ m. L5 n0 q5 R/ w6 c( b unsigned int temp_reg = 0;( J+ F8 m( s! h( D
0 s6 k, \; C: ?) ]% z2 m3 G+ ~
// Channel B params3 b: k8 F+ d( c
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
1 F# J' |3 B% g/ K CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface) `5 w- M5 s+ S
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
: W! B% ~- e8 |: C- R. {* K CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
. \) m" D" d* Y- t% i
$ w4 @+ j: ?3 d4 u! B0 _# ^ // Channel A params* `% p' U$ F6 a6 D( Y
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
6 h k& n( p# w j7 o CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface5 s6 \6 `9 N/ x2 n3 w" X
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
" v' ?3 p4 s h5 R CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
/ a( C. W" H( L5 S" V' \
7 I: k* P( \4 |9 r0 E CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
4 L. j8 o- \2 Q9 F CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive3 }. _. ~3 P; }. @, M' @
1 T3 Y7 @5 V! b# X8 S
upp_reg_hdl->UPCTL = temp_reg;
: I, i# \! X& L: @ N" n
Y! T% A0 h) W8 Z$ \; m& v temp_reg = 0;
r9 V% _3 e9 M1 j+ Q
* O# {+ `5 E# a E& e9 L# S M4 m) ] // Channel A params5 M& t3 }1 H o2 L# ~8 x% @7 z6 J
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
- o) b9 U. i' i2 v9 g //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
5 Q1 t0 V1 Y5 a) X% N CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.1 G0 O0 Q% U ] O; f
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable) _% _( \* T$ F2 a& T5 @' b, w9 A; z8 l
3 X; w1 k1 O0 `* R( N
// Channel B params% s- p* Q. A) S) N. x( m
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);/ v& T4 |* u# `# ^" w/ O& D F! u
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
+ B& r$ w% E. {# \6 O CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable2 _+ S: A4 q, I. U* A. | _1 [
5 L1 K9 h7 I, W- F8 x upp_reg_hdl->UPICR = temp_reg;
$ I/ c9 T+ N' B
Q8 {- D* A7 d% @2 `( z+ i //temp_reg = 0;
x! g0 z+ K, q2 R6 \1 U; x# [- z2 T% ~2 Y G% w' F8 M
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value3 D4 q* R* C! M+ ^, C& i) M
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value( @7 r+ b8 h, v
, i$ D( o7 m# m9 G( q. [$ ] //upp_reg_hdl->UPIVR = temp_reg;
) }/ ?2 I, J3 |7 k3 Y. a0 `1 X/ o# o) r
//temp_reg = 0;
% p& U0 b; M6 j
4 a; N' [8 K' _5 F; G //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
, T1 R7 f: l, Z; h/ ]/ \ //upp_reg_hdl->UPTCR = temp_reg;
9 E0 X8 J8 Z. r8 e- P$ i. l/ ]
6 h: R& M& M% V4 [ //temp_reg = 0;/ z3 j& B! [; o$ i& e
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
# p- m# v& H7 l //upp_reg_hdl->UPDLB = temp_reg;$ p& k) }1 f' A5 y& O5 \
; d$ e( m$ c6 e; ~7 {
} |
|