|
. l$ E7 o6 B* w) c+ N# W: m寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
# j& e" `0 V4 q1 A9 Jstatic void UPPInit(void)1 y4 ~, f) H' r' L
{
" U6 z4 L4 c: I9 C m W& q unsigned int temp_reg = 0;; `* P1 X6 ~. l; B p: n
( ^# i/ ~- N1 G$ B
// Channel B params3 t2 D; g/ p4 ?1 e& y1 j0 R
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
; n' `; V; b5 ~8 I8 r; {( P9 {2 P. o. C' ] CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface/ b$ `& U8 n( e" ^0 [
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
& f9 O2 I- K8 j& ^/ r$ d CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
, O; D F" Z& g, M* i$ Z W
/ V/ A, Z9 l* _ // Channel A params
* v6 V, d8 z7 O! q0 _3 | CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled# | D# w( e! n( y4 J) D' B }
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
1 ^4 H3 R, K- a& v8 I" P CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 86 {% s" h" r" ~' B4 V
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate/ w: H- h2 k! x: E4 i
6 C) R/ v3 O3 t( K# o' R2 H1 y# {. x CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
* e7 I# X2 q# g% c. {/ d CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
! L/ _$ _/ H' D5 G5 Q+ G" @ E% V
. p. {( T' E/ a- P1 f/ s9 F0 Z upp_reg_hdl->UPCTL = temp_reg;
0 |' v! M+ d" F0 s; Z' X! G6 w4 A, U2 B5 K
temp_reg = 0;
7 v& @1 f, W! ]1 f5 ?" |( `* K& J; i: q. O; X' F
// Channel A params# |$ J% `/ e H8 d6 N5 X6 ~' E
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle7 T6 R- J I5 n
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor; M7 J0 G9 K. x6 q
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.$ |% j0 t" x0 _0 }' @; a0 U3 v2 H
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
3 d7 ^8 F& o+ r9 \" w2 m$ P
; V# V3 @2 L8 I3 z! Y- y // Channel B params$ { w# X% r; t6 ~6 g. a
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);6 a# ~7 ~7 P6 M" o$ _; E& a* U* C
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
8 n) q6 T. q4 w6 s CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable k0 V& l$ Z- b% n2 t7 K5 _
6 l' L! m5 k, X5 M [) L/ n upp_reg_hdl->UPICR = temp_reg;9 S% O2 C; g, M3 L: r ~* f1 ~+ g" K1 t& a
4 p4 ~% G4 ~* B- Z# X //temp_reg = 0;
" a( {7 C- z( _, c! b4 s2 m, K" b. j4 `& v
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
# ^4 a$ f$ F5 J6 F- O4 V //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
. B1 D# w r' ?( h6 r
$ Z1 y/ s! @3 A //upp_reg_hdl->UPIVR = temp_reg;
, j- w# F( ]# J, G2 U. a) `# C: o9 Y! L1 z( G, O
//temp_reg = 0;. k: }* `- |" g9 {9 N/ o
, \1 p1 \) Y" L' X
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
: a3 E* N6 _9 i) O //upp_reg_hdl->UPTCR = temp_reg;
( H0 Q1 [' D: z; Q# W4 r' f, `, d8 T% i+ {7 b s
//temp_reg = 0;: |/ m6 V7 O9 Z# O5 f
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
5 w. v. S1 e& {0 g: w //upp_reg_hdl->UPDLB = temp_reg;
( Y! o ?3 C' h 3 w, |$ X; m. L; u v
} |
|