|
3 S& ]: X+ C+ S9 B8 a5 Y) I
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
, c X2 W: }- v- F0 \# U) w1 Fstatic void UPPInit(void)
- i6 I1 O9 A8 ]9 N{
7 C+ H! A) l x4 w7 r unsigned int temp_reg = 0;% ^7 C4 |4 W* K: Y* t I, ^* _$ t. T
% n5 D" x! L, _5 E
// Channel B params8 Q5 n$ P& C, m9 L
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
: Y% s7 ~# y0 A/ h- L# @ CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
% I, c' z$ x; z6 v% W/ z0 M CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 80 n8 Y' W P9 i& b" V
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate( j& ]) i# g: y1 A
3 @ L5 t" s1 v8 m1 g% m // Channel A params
6 `" j/ k) t8 \( C( f CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
% _, U* ?5 X' j3 `) s$ K CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface# b) |5 D0 \; H/ Z( L9 c9 C
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
8 H8 l8 E. |; D q2 f0 d, j3 e5 m CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
3 c& v/ s8 V4 d' i' B" G+ E6 H" K0 U
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
. \* O+ ~2 @6 M& K5 Z CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
4 R! y+ n8 Q- }. h
- ?# e0 \) n; G m upp_reg_hdl->UPCTL = temp_reg;8 f; \0 {) p, c" i: @
. S% y$ K, J4 n5 V6 x+ \! s; I
temp_reg = 0;
6 v. z( `5 k' w/ ^' @& D
8 L* i% [ s0 a E: e // Channel A params
E5 s V& j# }* g! ^ //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
# H1 o7 i# ~+ [7 E6 Y //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
; z6 l2 f: [: x1 ]4 m6 p CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
4 y( B9 q$ ?3 i: ?1 p' n. |( _ CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable$ @- q: ?; P6 L& T+ h9 T
' K# K3 r* ~1 L5 {3 }
// Channel B params% j, t. p$ h8 R& }& ^5 w
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
q( s6 N3 @' A r2 K) J2 U# d6 Y CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
' r2 a5 C" y. W1 T CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
F) r9 H4 m; X3 R+ u
3 \7 L* w) c0 g5 l3 @ upp_reg_hdl->UPICR = temp_reg;* u, a" L) P1 A
/ H$ C+ m v; a) G& |' S$ {
//temp_reg = 0;
4 X: m- ~8 h# b: A9 G [6 u3 X- r3 x* l% s! M) D
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value0 G# M7 o! ^( d5 J. y
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value8 s- \* a) H0 T z/ h$ h: O
' Q: i" s" }4 g# g. c- \# v2 r //upp_reg_hdl->UPIVR = temp_reg;/ S/ ~& c8 U$ E. |
- e# z% S5 r0 X) e$ Y
//temp_reg = 0;
# O1 X, Z+ D/ Z; o9 J0 F/ Z8 a+ v/ j! w
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
! V8 }; z* j9 ^ //upp_reg_hdl->UPTCR = temp_reg;( f) |( E) b& o
* Q3 A# Q' T N" w1 O0 j
//temp_reg = 0;- p: [0 }, m4 }/ C: \5 X- x
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable$ F$ b9 M( R" Q- R) f% X- ^+ O
//upp_reg_hdl->UPDLB = temp_reg;+ \# ?5 H: j1 B8 A) ^
8 ^/ f0 D$ {& i
} |
|