|
- Z- l4 \5 m% T% B2 }7 J1 s寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):! Y) |- a1 q/ h* q0 L
static void UPPInit(void)
) B$ O5 T( R5 \0 q{
4 d4 Z: B: G( U$ ?3 d4 }! r* { unsigned int temp_reg = 0;$ S3 e1 t/ o! Z' H
! z) [& J5 f$ H+ v+ Q // Channel B params6 k2 k5 ?" m7 B
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
: |$ m( d. e3 J- A CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface1 X8 d8 ?5 F6 S0 z
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
; E: l* X$ X) h CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
, |" U( v% X' N/ a, H. b1 w2 s
$ o9 D: C; p- [ // Channel A params
. w0 ?% x" d; @ CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
+ u' J2 M" ^8 n0 M2 P8 ^ CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
' ]; \/ |: G* o. E4 u: Y: Z+ e CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
' H8 ^. x* G1 C8 _* r; n6 y CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
6 o, g! r, c0 U% I# J
8 h' Z' K# l/ H1 i CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
+ L2 U- o0 f, c9 W, I- H# M CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive" z! d# e( L! r" C& p
/ t. K4 Y( U( z, t upp_reg_hdl->UPCTL = temp_reg;
! Z: \( h1 g! y, t {- S) h. n$ B/ c4 g* R
temp_reg = 0; 0 u; g7 I8 ^! {0 o
% d# M- W# i/ [7 m
// Channel A params
: i8 R, L% v6 r0 o: o //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle9 D" G9 I: B5 ]4 A8 f2 Q# O$ ]
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor+ R7 H- @$ l( O+ W5 F
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.* w( Y% |( P' I; w2 \
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable1 C; h. R& y( u0 o0 \# g
4 ~2 j0 _8 R2 |
// Channel B params4 S- u" i$ g/ Y& e2 G
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);1 |; X& T" H" t/ M# ^5 s5 T5 N" S
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
4 L/ x L* {$ [0 {. o* t) i1 x CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable( n: }# @. ]. T6 ]4 n
# E. c" Y! a. q* s
upp_reg_hdl->UPICR = temp_reg;3 Q" Z3 j5 ]/ O3 `% \" U) t
$ H, P1 J7 E+ @' l" y0 Q
//temp_reg = 0;
/ G4 ?! e) l4 L, |7 O; d" [( a2 m3 a {* Y+ X( [
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
9 u- z+ m4 X# I" t8 b //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value# b! `5 }& J0 U2 ?6 P e* m
0 j: v6 v! S. a3 H/ ^
//upp_reg_hdl->UPIVR = temp_reg;! z ]8 E, i% v, I
8 D" x1 ^$ u5 X1 Q //temp_reg = 0;5 `7 m, {- i5 I0 M
8 k2 K# R# `3 x$ B
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I * P A) q% t x# v5 X3 y0 f; G( W: P. Y
//upp_reg_hdl->UPTCR = temp_reg;
( x( V' m( W4 w/ i6 S1 A3 c/ @7 y9 y+ E% O- n% T5 W) f% N% `
//temp_reg = 0;
/ r7 u3 i* ^9 x9 @5 L6 ^/ N //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable- P# o: Z2 @% B0 t) z
//upp_reg_hdl->UPDLB = temp_reg;( i3 @3 }1 Q0 X i1 q, w- L5 ^- E
2 M+ V* w B( S# \} |
|