|
' w+ l1 ^7 _; d4 ]
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):5 a' B/ _& n: o4 o! x6 A' s* J
static void UPPInit(void)2 y( g) @* D: j3 e4 h
{
2 W1 ^- ^( Y2 N5 l+ F/ S unsigned int temp_reg = 0;
6 ?( C4 l+ @, t( |5 _$ j4 k# m5 O3 J; ]* l
// Channel B params
3 x5 y! B/ b- | CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
( m& @6 X5 m7 S, a1 h' i CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
( W2 }1 P4 B* C+ P5 X CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
- V/ r% f b7 V3 x9 g/ z0 w CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate G1 O0 I$ q( e3 r
/ S4 P! J; A9 u
// Channel A params5 { h1 I" n- M. {: {/ U
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
$ ]* x# l; X' d CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
5 Z" [. c3 R" \, O5 Y' x0 W7 e* { CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
( i2 i! f1 Y: D [/ V/ p2 u9 n9 _ CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
% g3 m( J g% k. A! v
5 H S6 i8 z. R+ y! T. Q4 u8 K CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.2 h% h7 G5 E0 m4 i0 u$ D
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
& I$ W% }: @/ D' w
* J+ T) z, ]/ |! u& S3 D upp_reg_hdl->UPCTL = temp_reg;
) p1 C: z, k- L
; \2 K' E% W0 \" @ temp_reg = 0;
+ g0 j, O2 @$ K; v+ ]+ H3 q/ `
7 j/ F2 Q7 U/ i7 }: e7 D9 p2 J // Channel A params% E ?. Q% Z! e- Y' J8 x0 `
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
8 w6 a3 B2 k' E3 W6 w7 ~3 [8 l //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
5 \. Q) {$ a* Y! c CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.. b* D6 v/ v$ Z, f# J: I
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
- S w" @. d. e' R/ L
; c1 ?3 A3 R# A1 N m. W0 f- l // Channel B params
$ M4 [ i, q M3 s1 S" r F/ f CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);; z4 X/ T6 p2 c) ` H
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
! c# i% s% {& f" T7 d- b) N7 u: n CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable% C n, N$ ?$ i: |- m
( ?( m0 _! h# Z# |0 J upp_reg_hdl->UPICR = temp_reg;2 K, L! p P3 N, Y. {) Z
7 X: d" Y0 I7 ^/ {- ^
//temp_reg = 0;
. N5 ^7 ?* A/ w: n
" y6 c @% v8 f2 y5 V% N$ T" G //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value" N4 m, M# o O8 }# x9 M
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value( P+ L! }7 i0 a
5 k7 M+ ] Z0 E# }% R
//upp_reg_hdl->UPIVR = temp_reg;
* @. R: H. A- R- o6 i( D" f1 N
6 r! ]# Z. [+ D' i3 T; e //temp_reg = 0;
8 X6 n9 f; t x1 D+ x! B+ i$ s$ T& b3 ]" D' {1 n' j' l7 e
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I . ]* t: n9 E2 Z, m+ R3 ]; v# o
//upp_reg_hdl->UPTCR = temp_reg;
8 Y- m: n* {% H8 L V6 J1 [6 H# c8 `# N9 i0 |( L: Z3 f$ v
//temp_reg = 0;1 N; y3 u+ Z+ m; {( U3 d$ r& v
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
$ N5 m' P1 v! W1 P+ m$ v$ X# Y //upp_reg_hdl->UPDLB = temp_reg;
% x/ f5 W9 j: @) X3 A. z" r 2 }+ e; ~( B6 S8 _9 Z) T) q4 C
} |
|