|
|
4 y! F! ^, W: X& e G; A寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):' z m' }$ x/ @0 ~3 u& h* U
static void UPPInit(void)# i& ^, l4 [" c6 G6 Q) F
{
* ~/ c" \7 {; h; X& H0 ^ unsigned int temp_reg = 0;4 P7 P4 b3 w4 }0 V# E& ]; Z% y$ O9 v
& a9 ]- f6 l7 O
// Channel B params# S" }! L4 o: v8 R1 d/ ]" Y0 F6 S
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled0 y |9 k& _# G& ?
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
M' C! f6 P) q& } CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
/ T; Q5 z' V: [) C CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
- I5 R) R- _4 [) I/ ]( Z, v1 O, @& o( }8 Q: ^6 q1 F3 [
// Channel A params: V" }- Y$ L! d' V% P: Z7 q& X
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled$ A0 H+ f3 I; M
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface& u o7 M3 ]8 G6 \3 z' \2 E- ?
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
+ y* ?+ P: Z! V0 I7 p% P% w CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate% Z Z# C' j0 ?% C& o
, n# _' t& r6 S0 V! o3 `* d. P" {
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
) J) w" u. g, A+ Z& ]' U CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
* _: v; t7 g& V4 V- ?1 z" v0 t
4 L7 }* H, W, X upp_reg_hdl->UPCTL = temp_reg;
7 S% y7 ]8 ^* U. @( z I8 G0 b3 |5 N! Y# d( r; Z" h+ k: p
temp_reg = 0;
/ o, M( ]# M+ X9 I( t/ Y+ M( x9 K0 T2 a! n2 g
// Channel A params3 A9 l5 E% P, H- S' P- I# e
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
. U0 W# W8 O5 Y3 i //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
) C6 f1 w( Q: g+ V CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.7 M0 z! k3 v$ `7 u6 h# B" ^! O
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
1 R; O) {1 \8 D, D
( Z" ~. y! r7 `( b ^- F1 z+ P8 f // Channel B params
8 @; N, h9 _/ D# c5 N CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
R$ D6 Q7 X# t- v' w% o$ t( j* Y CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.0 w; z* X; r% _4 `) _
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
6 B) H# p4 `& W1 e
6 _3 o- A) e: g B: L5 L upp_reg_hdl->UPICR = temp_reg;
( G0 t; ]$ \5 P$ o8 Z9 L5 L
+ ^* u% ~, \% B' Z% [6 T/ p //temp_reg = 0;
' L& N9 x3 x1 O+ w0 p5 ^- E2 Y% l- n4 b/ W
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
' B* m0 {, t) X/ x //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
2 i0 B( e L! [0 A' s. L( b( V1 w( ]1 u0 y' o* B9 {1 L
//upp_reg_hdl->UPIVR = temp_reg;7 D- C, J# J+ g3 \) C2 {! {
* i5 a$ ?9 ?4 ?, g% A8 S" A
//temp_reg = 0; Y4 N3 C6 C+ u$ ]; ~2 Q
Y- X% X( Z3 s, G
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
1 S/ F* f: t. y! g //upp_reg_hdl->UPTCR = temp_reg;
" G) C+ ~$ q8 N r" e8 p& y2 \( e. L& r! m6 Y9 o
//temp_reg = 0;
( [# x8 b! @4 ]* r/ Y //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable) b9 z: e6 z' n- G h6 R/ V; r
//upp_reg_hdl->UPDLB = temp_reg;. c t" w/ m0 V
' U6 K( h5 w0 h0 D5 N" M} |
|