|
7 A& _7 _3 Q, H( k寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):6 _- V( r; `. j2 o
static void UPPInit(void), {. L$ o# `& n
{
1 H! ]4 D/ w9 _7 V9 F5 s- | unsigned int temp_reg = 0;; k, N$ x+ n& \- Z, P$ y$ u
! U2 k5 E9 c4 Y0 `% U8 \* A // Channel B params- o) y3 l* v: ?0 e* Y3 k8 r
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled7 O8 ^ }+ b3 \" {
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface4 e; O. }3 L$ | ~ S( _
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8' K$ C6 v) H: ?- Q
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate: u" y" E' \ N
5 Q O/ V4 R" \. K: Y( ]8 _" V2 w // Channel A params! c2 I# o8 j9 k! J7 Q
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled# L( ]; M+ {1 E# @4 k1 r2 {' h
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface- [+ W' ], d1 o% R }1 {8 Y
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
. ^/ E+ c j4 w- A ] CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
2 R9 b' c3 `# m3 @4 b: m5 V) x% q! D& C& |
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
2 q g I6 d I CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
8 P- I' P b I6 u( r! d
" l) V" s9 A: k1 x6 V( D upp_reg_hdl->UPCTL = temp_reg;- {( s" K* a" j& M
1 Z1 A; h4 T; g0 j
temp_reg = 0;
1 H' u: R- p- e8 J8 F$ \
- V; F& C: G R3 \ // Channel A params. n7 [- A% q9 s3 t, N0 ], P
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
: `: U& ?/ F# R% w% R //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
7 i. g3 O' J! ]& t CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
' R! c t% Y6 U CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
) L& H" z: ]# }! f* n6 L; c, Y
9 [9 u2 F+ L8 G // Channel B params2 t1 `4 f( }# L5 O) a1 P' T$ b
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);& n3 E {, n! q/ E# `- U
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.0 T6 o0 Q& E" n+ d3 G8 z
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
9 _3 N: M6 _) ]& \+ Z* y3 m6 s. j2 |# o; E& l6 L
upp_reg_hdl->UPICR = temp_reg;1 r- U M% G* c/ J2 T
t6 l$ D3 t8 e @ //temp_reg = 0;
3 i% h" a! e3 K2 d4 B9 `# c: n% k% D9 N
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value2 w8 T7 \7 X2 z: B* t2 _9 T
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value, U' M/ Y+ O) d3 D0 z
& z. \5 d- T" d. D //upp_reg_hdl->UPIVR = temp_reg;' T( T( {0 {& c( K
' D" l- h7 U5 a* }3 [6 L1 _$ L& o //temp_reg = 0;3 C8 s, x0 n& T0 s* {0 G
$ _% Q, u# ?. b% F //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I * O1 Q% Q( Z2 B j2 }
//upp_reg_hdl->UPTCR = temp_reg;
8 z) t9 @! g" }- C
F2 _" w7 H$ e B( }( A1 D) F5 ` //temp_reg = 0;
! M8 b" Y, l( Y. ]9 ? //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable# X5 G; Z. o( k) ~; f
//upp_reg_hdl->UPDLB = temp_reg;3 I7 R: f D$ Q* S) t
3 {2 T# U0 m( u- y} |
|