|
, L t) n- V# `1 q' _
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
/ ?$ m `: @& ^( mstatic void UPPInit(void)+ @3 d' @8 m2 q g& U* w: _# M1 r
{
# ?" j. g% n- P: e unsigned int temp_reg = 0;* j3 K1 z. P# A! Z
/ h. ~2 Y+ D6 A7 `
// Channel B params
4 v3 | N/ p* b) p CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled! G. u; B. w; T1 h: C
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
7 m+ C; w+ _- d CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
7 K# @ ?6 F0 E3 j CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate. Q& t6 G; i: @ ~) g0 `' _7 X& }
3 Z' F# l1 K8 e& ] // Channel A params) x" ]6 }. ?% F/ p
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled3 U' s f4 {0 W$ e2 r# R; M
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
0 v L' t& o1 o4 ]8 X. l CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8. G; a- Y! H* V
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate/ W u' t' F$ O
9 A) _. @# ^/ f! ?8 ^/ v CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.9 L9 P) [3 l, P* m: I/ x
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive8 Q- \( w+ v) }7 T% g0 N0 I
. Z# E* l, Z8 e6 O upp_reg_hdl->UPCTL = temp_reg;4 b2 G+ _! n) K# H. {- H2 h5 |7 n
5 `1 H: H# }8 @
temp_reg = 0;
e5 E* R3 z; N% n
, T H* o# S+ u0 O$ \8 P // Channel A params7 y ?# w' Z' s: q0 ^8 E
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
! U" |* ~0 y" Q$ v" [% T6 x% h! I //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
3 B3 ^; Q0 g9 f4 W CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
3 Z$ x! @% f: R* Z CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
& |; w" B$ y! c0 a8 H. H) y3 `+ J
// Channel B params% N6 d( v. j0 W" ]: }' J
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
/ S8 Q% D+ p% C) r: O; K8 p) H; n. P CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.; [8 j, o; e" {4 q# l
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
+ i# g! I4 U( @8 ?/ ~- F+ p, |1 s! X6 ^% k- C$ J6 q4 l( |0 b+ G
upp_reg_hdl->UPICR = temp_reg;/ j- c$ {: q8 d# z( n
; b' e' i4 r- }. S& i& H" ? //temp_reg = 0;
/ ~1 T/ j9 M9 I% b7 J. c0 V% O9 D' f) q% m' O$ @ g: u( I
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value |- o$ ]6 }$ {# n
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
! q: ^ j" Z6 C9 g. t; Y5 ?4 ^
. ~0 d+ Y: y0 C9 ~# Q //upp_reg_hdl->UPIVR = temp_reg;
3 u0 a8 B& S* ^( v- r% r9 [* x& u
//temp_reg = 0;
* o! K9 X/ D5 T7 u6 _
$ m! U" \# p t6 E# M2 @ //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I " ]' R! m6 I9 ?
//upp_reg_hdl->UPTCR = temp_reg;
7 |$ c9 c2 ^8 ?! V8 \+ H& a+ f# v8 b( M) h0 a+ F" x0 ~6 {/ b* j+ K
//temp_reg = 0;8 J/ f( { q: |: R! G" Y
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
( U4 H0 K- a2 V, g) y! v# T/ ^/ P. V //upp_reg_hdl->UPDLB = temp_reg;
, p: P9 P5 |* f# }% y n3 _- V8 V: d) r) f \
} |
|