|
|
, a- @9 N3 |( \5 Y寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
0 ?0 Y$ G- p; u" {/ j. J* a" g- Tstatic void UPPInit(void)
* @- n. _( k) x- G{) w4 _" I# @4 r u+ e, s
unsigned int temp_reg = 0;
9 U7 O8 t% B6 O# J8 P! W" e* E5 N l' S1 z/ ^: b! v; F q
// Channel B params" f6 k M3 A0 }8 a
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
/ c, |: O6 m0 t) {4 _" X9 Z1 e3 P CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
$ x6 {5 ^2 I1 \8 e! S CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8/ I' T9 F) A9 }
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate$ x4 L* f; _0 j: J6 a7 N, k# c
5 g1 r' _1 m8 A' u2 A" x
// Channel A params- g3 T# a, S6 N( n& V
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
6 d% D7 T g+ B3 Y CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface! `+ U+ p% t$ r7 C( y$ R
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8/ F0 V' w% q( ?7 F
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate7 d% b+ @7 q w9 N) U" d7 l
$ z5 N! q! P- [: g
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.8 m. k, `$ Y* L* a
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive, C( \; Q* |- E
. \) z) \2 F! W" p- B K upp_reg_hdl->UPCTL = temp_reg;
8 M4 o) I; N- E* i- r
- H) T. X5 j/ F: e temp_reg = 0;
/ R5 `% b# ]* p& [, G$ [# o G* J# K6 [8 b
// Channel A params, t7 L: f" U v6 V" L
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle1 b& |$ `9 \8 ]
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
# y! `! S( B$ ] CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.- e; P: R2 A0 A7 @
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
* U+ C4 u9 Q2 `+ R
; ^1 N3 r* j% t5 t/ G6 Y2 K+ ? // Channel B params
& M* m, R* z/ @& a8 R CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
3 y! o2 P* O5 Q8 f CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.$ ~( o1 E1 M }5 a
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
* a# S( V" t' _0 c7 O
0 B/ p/ x, [! L) ^ upp_reg_hdl->UPICR = temp_reg;
6 b! E" `1 N ?2 M; x y* U0 v4 i3 x" y0 }
//temp_reg = 0;/ S# J% x' E0 [' i6 g
/ }0 z9 B4 I* H5 V- s. {4 q //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value$ E$ a+ @1 \, Q. r5 j
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
! p# S) y N/ k" q6 Q1 x% Z$ R0 D- F, V/ o
//upp_reg_hdl->UPIVR = temp_reg;7 V5 P( y/ w* O! V
+ B- Z" {) ^+ C1 K9 T, A+ G5 Y
//temp_reg = 0;4 Y5 D& @+ w8 C. V$ I5 d4 C! y
! _% f9 y, r) I: ^7 {# T, `9 q/ F
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I 5 \. v0 ]& ~. x3 w& }$ C7 j
//upp_reg_hdl->UPTCR = temp_reg;
4 ]& ^. w1 \5 C% [$ [/ b% [( R. N; K+ P- T) M
//temp_reg = 0;" Z7 _/ _: ?5 A w0 M% i' H
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
; a) a/ m0 ^/ u: D! E //upp_reg_hdl->UPDLB = temp_reg;) A# V4 ~3 X, v
, q9 I# K! J/ }2 ?& b; v} |
|