|
# I1 L! C9 y0 V; p寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
9 h a! X0 J7 o1 bstatic void UPPInit(void)$ |" k7 u# M" R' _
{( w! r4 D5 {1 U- I q- Z& `4 ?
unsigned int temp_reg = 0;2 {$ I8 R0 J" V, `! a+ s0 G
& D9 F Z3 q9 _: `- h! Q8 |
// Channel B params9 p, H# t# @2 A$ ~/ I" E
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
% `8 d) r' ~/ H1 G- V7 c1 ] CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
! r# D. C; S, a* } CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
1 G! m. s* i9 _/ w; q CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate0 N$ h) n) e- V! s
8 B, u2 a0 V: d" t7 b* [ // Channel A params
4 X3 @. n. E q e CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled( x& d- {6 e/ Z! Y6 u6 }
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
7 i9 h# ^$ Y, `% t$ j5 |5 p CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8) y5 g, z6 f. Y9 H
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
/ j) ]% |$ P7 A, |9 x* j& |# h6 G) a/ B. i5 n) u7 V
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.% ~7 q$ h6 E5 _5 w) j- n0 q* t0 K
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
6 @+ h4 ?5 J, U+ y% U* m& N! \- T
, c+ h$ f) ]: p9 T upp_reg_hdl->UPCTL = temp_reg;+ O2 ^! K$ A, y' q: \6 h- f$ ~
5 y- A1 g' x+ A* i; ?% M- ~. v: v temp_reg = 0; 2 T( v/ F" Z9 C( f" `1 b
1 N' f5 h* C0 @' ^; e/ e% ~ // Channel A params
( v" U, Z% Z+ K; P //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
# ]" A1 b. i+ H/ L- Z6 M //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor+ g3 p1 e/ m+ F; I8 y0 E- O8 m
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable. a2 U. f( }& c+ `2 }7 N$ z& X" i& V$ f
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable( p5 y+ h$ S; R2 e M! n
* d3 Z; C( x3 r; J
// Channel B params$ }7 u9 Q' R- n
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
! ~# x! J- K0 N$ L$ s# T6 {5 f$ o CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
8 q: R% Z+ s7 l) B CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable( T$ ]; o; [9 z V
# L4 U- m5 _, g3 J upp_reg_hdl->UPICR = temp_reg;% _6 m- V# o z: u3 V% ?% C# A) g j
( R* Z7 n: l7 h. S7 _6 {
//temp_reg = 0;
+ G7 a' W" L2 t+ L) B& K4 U: G, f! c+ a( q, A
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
, J7 e( S; f+ ?0 s$ V //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value! G/ g& N p5 a$ G8 A" {
3 U5 k* t+ x. W; |) f //upp_reg_hdl->UPIVR = temp_reg;8 W$ G0 r* w- v# o: G" O
! ?' {& i. [. ^# H. v1 z) \ //temp_reg = 0;
9 ? B8 g) a+ x* ^ F) D2 D( _
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I , {) X8 Z9 z4 P' _
//upp_reg_hdl->UPTCR = temp_reg;4 ?& S5 S: W% o1 F/ v
7 E; K& V+ G* E, s6 A1 m1 } //temp_reg = 0;
5 F k8 l7 I6 c //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable* U. U& Q: M' V& V+ T; u/ G
//upp_reg_hdl->UPDLB = temp_reg;
; S# p' F6 {9 L# D ) O) G0 e! m6 s- V( i w
} |
|