|
9 W3 s5 Q% X. k, c3 ?2 x
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):; N2 ^0 B8 w6 {
static void UPPInit(void)
& k8 ]+ C* n% C6 R- _{
3 f# i+ X1 w3 q, j. F unsigned int temp_reg = 0;. |" N: q/ x) y7 y
: _! P5 l5 u" C7 r // Channel B params
) l2 y4 z! M- [ CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
* v7 m6 Z( k ] CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface: O8 Q! }! b8 \- m) q1 c+ S
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
# `9 c+ e8 L. o# ` t8 z CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate" m( s. M, R4 B
- g, d% }; p9 ]( E8 ]$ Z" G // Channel A params
) R/ \8 n# z0 O CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
v; Y1 h7 A1 P& } CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface8 d2 X: D' u; x" y* U4 C
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
0 ]/ H' Y" n, \% F CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate* R+ L0 M; R" K4 z* _$ I$ k |8 o& f
0 }( S! y9 o9 x) A( L" y5 J' J6 n CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.. ]( y" @* o% [2 ]0 @% ]* c! f
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive8 v- _0 q; j* ?3 p" I: |
7 l( m% x3 t/ U e
upp_reg_hdl->UPCTL = temp_reg;
% | I" O/ { p, t, p" @' o v8 S* M, Z9 R ?% x
temp_reg = 0;
5 d* \; I5 {0 {( V
. Q5 |: Q2 Q, ~1 w. ~# O1 [& M. | // Channel A params0 h' Z" H; O/ K
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle& }9 K" Y4 |( X# @
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor# A" A' l# d0 B
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
' n- z# V7 s/ {$ b, C CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable* g% G& x1 j3 j1 U+ O1 D6 z$ `
+ x8 ~7 l+ u) l$ F
// Channel B params
$ Y6 i8 L' W2 ?; l" J) H CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);# x8 U: C( v8 [ N/ z+ @
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
! g, T: \ h: F CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable( M" A7 j u: K* c1 C6 X/ x+ {- @
: e1 l( i5 \8 _& n# c2 Q; H! X
upp_reg_hdl->UPICR = temp_reg;/ Y! a g; J, e+ W' V; O- A) f
2 C. {$ B$ ^' x) b6 Y- v
//temp_reg = 0;+ G# o4 x. |8 S
: t- e# Y2 F6 u& S6 U
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
4 n: ^. E3 c1 B$ a& C5 ~8 M. }7 B //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value) _) g- @7 i0 m# p Y) p |! A
( G/ @7 L5 m( |- o3 a2 E
//upp_reg_hdl->UPIVR = temp_reg;
& \. F# v b: x4 M2 T3 z+ j% U% B6 u* _) S
//temp_reg = 0;
2 S8 u8 g) Q5 c/ W$ Z( q1 H* A6 [2 R8 F$ L# H4 X0 G5 T
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
3 T( P- i, X- c" O! c, ?, [. | //upp_reg_hdl->UPTCR = temp_reg;0 N0 F7 t" i+ z9 w% V8 V
( g- j( V8 A3 D8 K7 x5 @* O0 n
//temp_reg = 0;
# M4 J% a9 Z. M2 N+ L //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
# _4 ]5 R+ p9 v" e4 G" ]# z //upp_reg_hdl->UPDLB = temp_reg;2 b/ v) p5 w' U; f3 _
% j/ L7 a( j- k: v5 C9 P' O) H
} |
|