|
. e5 R" R( X. M& Z5 p寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):: \% |6 ]3 q8 m( `6 u2 \1 Q* M
static void UPPInit(void)
( k! C6 z% E1 v' S3 j2 d8 x{' T+ R( E( J: ~" G
unsigned int temp_reg = 0;, w N( c9 o7 J& e* P. L7 k
9 o2 T6 t) k2 Q // Channel B params
1 I% x+ J0 n' D r& K! k7 c CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
+ _/ z) ~% [1 Q2 Q% R$ a+ ^, A4 V CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface2 }, n# [; o& n4 J5 G
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
: f( ~* s9 W3 ]( r CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate4 b" p1 i! ~& E8 L6 w% e
4 D' F9 K- R& J
// Channel A params3 p& Z. e! x6 V
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled" t4 Y' H( Q' k3 n! ?+ ]+ S$ e7 M
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface8 x! ^+ W j& u2 f
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
& X' h/ G- E: {+ n) o2 h CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate& ~1 c# D6 k% B0 u3 v
' X' f; c# u. l% ]0 @: j \ CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active./ ^( k+ g1 E2 A3 X3 j% }# D7 M. c
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive) R; a( A6 Y' k7 C/ R3 n
* m3 g* A& E/ [3 K
upp_reg_hdl->UPCTL = temp_reg;
% b: n/ m x6 p3 g9 [) X) @4 X# A8 j$ [3 c Y5 b k! [
temp_reg = 0;
3 W6 [4 m1 T! B$ C- M8 C
. f* k; }9 G: e# V1 s1 Q // Channel A params+ l4 H9 ?1 n# K
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
q) c* ~" d! x //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor8 @, V& B Y2 k6 A$ \ ]) Y
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.! @. Z0 p# L; L
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
- C' j1 N+ D* t) J8 |, J0 @5 L* ~' k* r, f6 o+ X& h
// Channel B params, z+ u, ~) H& _3 d
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
1 A- Q q: U X% O U- k' U+ g CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.* ^1 r' |4 z C( G3 t4 c
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
# G9 j5 ]5 y7 T* l% A5 ~3 a" L' F1 l! y5 h( _
upp_reg_hdl->UPICR = temp_reg;
: P' ~& _! F- q% H+ H/ y
, {6 S+ D7 Q8 k, z //temp_reg = 0;
1 i& x2 G# ~( }; Z8 L- i
1 M: _1 v2 H/ ~8 E //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
# R6 U& R! ]4 x //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value/ N' B# L7 W O2 A3 O$ n# l
2 c4 p' a2 ?1 q6 r
//upp_reg_hdl->UPIVR = temp_reg;
) X, f- }; F5 e' m; J
; z r. _/ u5 ` //temp_reg = 0;
& c n1 ^! S. h- p1 w" Q- X: v
) g+ {" _0 U2 a4 j) {. B //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
4 ]% z2 k# t. w- [9 o1 o q //upp_reg_hdl->UPTCR = temp_reg;
7 Q! B- G: H- N. N) O1 U+ c) O( d& ~5 m# I7 e, M7 G
//temp_reg = 0;1 ~) F* V, H! k) |* ]: c/ Y) t
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
4 Y# m5 W& z$ G4 s! Z# `- D4 Z //upp_reg_hdl->UPDLB = temp_reg;& a4 ]% P3 X. d( _
, ~% _7 H. L; X. `8 Q3 a
} |
|