|
; _* E, l7 Y+ j2 U寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):" ~4 r8 I$ ^2 z9 f7 _
static void UPPInit(void)
4 V# n5 I& k( l; `3 r( c q% z( c{
' R# |5 C- p2 W$ a! ?. \9 C( V9 N% G unsigned int temp_reg = 0;/ a+ n1 T* O7 j
8 i7 o/ ]) Z& i( n" ?
// Channel B params o% f6 K$ {* a: n2 k) z
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
9 d5 h9 J# i, r5 W- m6 G CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
7 V% [& H v7 ~9 ?: I CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 82 ?$ c% W: @* t1 S8 I: J* x
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate+ [, c+ w& P+ W! [3 f: |8 ?; S
6 g+ D" @0 G- ~, O& M8 l8 k // Channel A params
. s$ c z+ {3 X& s# z0 y6 k+ ]" P CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled' o* C \6 ^) a! l: y7 }
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface# Z* d+ I9 q. @7 o4 U3 r4 v
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
6 q: ~ E, W# C. o8 B9 k9 d CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate) E/ \$ H2 w3 W7 O- _# M; g
! ~0 k5 B, N9 h$ M
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
2 r; z0 W- \9 t CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
: _5 q b* f5 d) n; I, x' u( c8 g r0 ]7 h% N. e
upp_reg_hdl->UPCTL = temp_reg;' {) R5 h7 @3 C6 R) Z% S3 @+ x
C& k& ?4 ^" N% _/ y1 q( m/ f temp_reg = 0;
3 ^& `5 x) w" Z, _! U# h$ ~* N% E8 f; ~6 P$ U
// Channel A params4 @" ?2 ]- P* I0 T3 j# q
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle' M2 l }4 E( R; I
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor* y0 e/ _# I! E( n
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
. B/ L8 `8 \4 H- j- J CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable! m& w$ `$ l6 c4 V5 v
* F O7 }6 o: ~& f' _% o
// Channel B params
* \6 O- J9 h. k3 G9 I0 K' p, ? CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
" S; r4 A c9 N! D+ F& f2 ` CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.1 }" P% Q9 _* U: J2 X1 Q7 L
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
* {7 A2 O" V' t g# T+ p- G1 V9 ~. x: p+ x" U
upp_reg_hdl->UPICR = temp_reg;
$ D0 p: l' M8 e. e% t4 z. Z& T/ d: C9 W" V$ U' n
//temp_reg = 0;" N- E! b0 m4 x: G' Y
) r' r6 W; \9 _- C. u+ o) m
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
" z8 N X3 y( a" M- |! C //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value1 P% c9 J; V9 L2 u) y" L$ B
- w$ u3 H2 L& D O; w! k
//upp_reg_hdl->UPIVR = temp_reg;
- f0 N3 [# i5 L
4 F, _7 @9 P0 N //temp_reg = 0;9 d) Y& L6 F4 [. N* W2 N. T* W' K
7 w8 p) x) ^! Z" x# p* Q //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
& [( l, Q, u$ { //upp_reg_hdl->UPTCR = temp_reg;2 Q5 h# z& c/ ^; J% Q2 K
* Q( ?7 e7 k, |/ I# X( n' x //temp_reg = 0;; X" J5 z$ R: Y0 Y9 F& w
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable1 ?9 K/ v1 ^; e# a4 N9 b( B7 q
//upp_reg_hdl->UPDLB = temp_reg;/ u. c6 V% s3 T# o3 }- ]
2 Y5 p( M+ e" N+ j% D1 v
} |
|