|
1 y* U2 S8 g; j5 a7 q* _
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
, f! u2 U" _; H' O Cstatic void UPPInit(void)
+ X% U1 c3 v7 W2 d! H{
# l$ y; e5 s5 V- }- ^) \' L unsigned int temp_reg = 0;; l% h: ^3 {3 ?4 F
; g; e7 H7 Y! R$ K* v- a" v // Channel B params
6 k0 Z4 V& ?- m/ U, ]9 [" z* J CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
: T* g* f& s% @: y CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
. d0 ]; u: d1 k CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
; G% P6 w) o3 G" g CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
4 S1 v+ V, k/ T( }* t
3 c8 P; J J; O9 l // Channel A params( V; O5 h5 Z3 P3 \! L' A" l
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
, C, v4 f, I$ A$ S& I CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface6 i. G% N& I! \$ R* U# ?
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
( d$ t+ J. n8 X j9 g- K1 H CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
+ R. A3 T. L7 e# y: n
* P# T% j s8 V9 n' ^- I( Z CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
% r P/ ?" Q. ]: ?% N CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive. E3 B! ^# b3 }& V9 g" h$ A! T
$ ^" G% ?3 v7 Q5 F. v5 G upp_reg_hdl->UPCTL = temp_reg;
7 e2 C9 c8 P' c6 `7 I
4 @; c1 _4 C$ y2 d6 F2 b6 | temp_reg = 0;
! ?! {' n/ Q; E* q0 `9 P: e, @& K* t, z1 ^
// Channel A params4 x9 s3 R! o5 m8 W/ D {
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle9 h* l; I6 p0 ^! \; x& _
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
! F8 P% n$ r2 E, b CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
$ \6 o% G u/ o' d CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
# u+ V9 X$ r$ f8 j: I& M( H& s; c, A- K2 F2 g3 {
// Channel B params
& R& y. p, @9 L" ^! D* w CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);" m0 k7 P" Y9 i7 z- p* v( c- l
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.. b) m" T) P, U% ^ _& [2 }
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
' O4 j# `& Z4 Z( I( }9 r7 ?" l
9 \( f+ J9 p) v' @) r+ ?2 f2 R upp_reg_hdl->UPICR = temp_reg;
0 E3 w" w' q9 n9 M9 z( C1 S% ^4 f7 D( U7 l4 y9 {
//temp_reg = 0;8 }& s% j- G: T8 b
$ E, ^, I" t' O2 O
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
( H0 L( @. P, @5 A n# k //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
. `) p% |) v2 B" o
; ]' B( A$ N# B* H //upp_reg_hdl->UPIVR = temp_reg;
- @ |& r3 ?9 x* N: }6 |3 K! c* }* B- I0 J* s
//temp_reg = 0;
: D# e. w" ~! V% C) x* v5 l3 l4 U: c0 C) v
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I 2 t0 m5 B) @" [, U# K3 Z' Q6 a
//upp_reg_hdl->UPTCR = temp_reg;
) D5 u4 V2 t) [% c3 o3 w- ~: u' I
//temp_reg = 0;) ?# N8 E! g( J& L P! I
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
, d$ ?( [3 K& N) B! z //upp_reg_hdl->UPDLB = temp_reg; K# u1 N# C Y( s( v5 U( ]/ v
( q' Q. D9 ~- e" H} |
|