|
Z, k5 h; J5 [0 ]6 e
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):0 t( h2 [$ J) L: T* }
static void UPPInit(void)1 A A& c% T' O- s8 S i, R; ? y/ X
{' x* F; \+ h: z! |" s J7 [2 R
unsigned int temp_reg = 0;
' o; a2 N. m2 s$ Y: E
3 g2 Q- m$ N, R! B) ]) P. ?3 d // Channel B params
: b8 ~% @. h" T CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
S- u6 d9 d! V1 X6 A3 x) n) b CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
5 H% w1 J% I- V CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
! {* s2 A) x0 z+ X' P6 n CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
2 L( s8 ~% i3 A- ~# A! x
4 R$ K' j& j" E: n# W+ p // Channel A params
7 v4 c) o* X8 A% n7 p! P CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
- `% n7 q# N2 O CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface, ^+ W$ T0 K7 S1 `
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8& w; o6 B# H: W* E& f) I
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate) p2 n4 z: T, R
8 B7 U' c+ X6 X: f/ G8 _ CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
: U" k) d$ ~4 R& c8 J) E CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive g. v* h, a, K: y
' Q: N. ?3 S& {2 A
upp_reg_hdl->UPCTL = temp_reg;
9 n, T! ~9 f/ [5 k' N: i6 Y* f+ ^' I3 }
temp_reg = 0; ) Y7 B1 h) E% [" [" P C! i
! G& `" @5 v( T2 d( `7 a // Channel A params
; F& l7 R4 B h0 e) z& P //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle% W1 P w5 { z+ z8 w! X
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor* F- N9 B6 j; s
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
1 F) p& h' M& ]. a) z! H- p CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable- E u! |/ i: Q
5 l8 L) z+ N, M
// Channel B params% ~% P! y& ] ~. R& o- |
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
4 B" s# Y% S2 S/ C' _- [2 C4 A CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
_/ V1 r/ f! t! Z2 u6 x CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable4 M% C" d" s4 ^* I" E0 y
1 `# n0 A0 i' Z, [ upp_reg_hdl->UPICR = temp_reg;! @6 ?1 S* q1 f7 w$ K0 r# [/ J
$ C5 c J- V$ J: @" h //temp_reg = 0;
) R$ C3 \, l7 f( |2 \+ M
6 \, H) ^. [9 J$ R //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
# t; l6 V& ]7 d //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value8 {8 z% E5 w9 y* o" N4 ^7 I3 N
/ k' Y/ w/ M$ T# Z6 K //upp_reg_hdl->UPIVR = temp_reg;7 C% s" T/ G3 O) ^2 e% v% ]
, W' a( k# t( D) P //temp_reg = 0;
' q) x! J5 J$ ~0 c- @" ~
1 p9 e) e y: j' x) `0 \' r //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
+ C8 S& @- ~8 c- \* @" ] //upp_reg_hdl->UPTCR = temp_reg;. {3 y/ x- L& s h) X
7 C5 M6 A3 i: B //temp_reg = 0;. d& n$ D h1 ~; h9 ]+ }2 _
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
+ n4 O& S" J9 [/ d; V( K; p& m q% n# M //upp_reg_hdl->UPDLB = temp_reg;0 A4 X8 b+ Y$ F. L: d
! j& ?+ A2 b$ ]8 S2 Y. U
} |
|