|
9 h J6 V; u/ O* ^; n1 K寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):; H2 Y5 L% s, ?! ~
static void UPPInit(void)6 k, b6 X* o/ y( J7 m' I
{. Q% u) [; @! b! ~$ Y% O4 R
unsigned int temp_reg = 0;
3 A7 P: O9 c, |' c2 N' q8 p& A* x( k# l
// Channel B params
) l8 G# H' L5 C' b: v- d! E CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
7 r$ X5 }/ s8 w4 U* H( I CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
* h& ?5 F, Z6 \ CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8# b' c. S; ]9 F' J
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate" {! K% w. C& R& V
* G* Y4 Q$ |( ]5 h // Channel A params2 H3 T1 \& V# _! z3 F
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
/ C' ~/ n' X9 @' r; u3 @8 K' a CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
5 k0 k4 K# \' v: E4 E CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 84 s; T5 U8 \7 e9 ~
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate; U; V# D& m. w1 P
& d+ J, C; ~2 c/ c, c
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active." \: O- ?/ V* ], d% l
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive' p- b4 h7 E9 T7 T1 V: |5 L
$ B- S1 D' T1 S; [. R" u
upp_reg_hdl->UPCTL = temp_reg;& `& o- E/ Q9 t6 I0 K- r" ~0 O! U, S
% e6 B& y/ ^( m# L
temp_reg = 0;
; t+ c5 r9 s ]) i0 g( [- R/ l! N4 t1 `
// Channel A params
) n; |8 b N- F$ B //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
4 H* H% [& g, I( m% W! V //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
; C, |5 q% ]% M& u: D o CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
3 j$ ^9 V U# D' X9 t; z' h3 m/ @ CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
- i& x. c! G* Z
/ r. \. t- c$ n! I: ]3 r2 _ // Channel B params
! N5 K: u k& Y+ e. o CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
/ K7 [; f3 v+ q; T6 w) | CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
! S; W" m) P: S' G# t6 M8 r! D& v CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable# O" u( u: F; v8 H* ?+ [
% r# r ?: k! s) y! h2 y upp_reg_hdl->UPICR = temp_reg;2 a0 d& a! b/ X3 {2 s# C
: k% P1 k; v) e5 \2 J7 ]. l" m. ]
//temp_reg = 0;
, D4 R3 \4 M3 o) x$ j
1 A+ p+ G1 e1 b% ]/ P //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value* A5 @! @# z/ \/ L6 H
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value- O/ u- t( B& K
- I U2 p% Y1 I/ p" _3 Z& b1 p //upp_reg_hdl->UPIVR = temp_reg;1 r' Y7 S5 }2 i+ p2 `3 V
6 C4 l# ~! ]4 o. s9 t# {. y6 _1 k; z4 C
//temp_reg = 0;/ F5 B8 ~9 b; u$ f. _7 d6 @
2 ~' n9 p, c5 x" C& I //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
3 k+ S' b& X8 i4 I5 p! V //upp_reg_hdl->UPTCR = temp_reg;
3 y4 b: w1 T2 Q/ ~0 |3 x
% \% j" o* G. l8 |7 N z0 X; p% i //temp_reg = 0;
' H- I0 [ A; V' ] //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable, Y) `1 Z/ j) r/ y$ s- f2 m& d
//upp_reg_hdl->UPDLB = temp_reg;; j7 e' M2 t6 H1 I, S. B6 E+ w
! T5 C! H. Z9 K, A J9 g} |
|