|
8 |; N( f! e# V3 ~
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
1 W8 ^/ t+ v9 _5 ?! w$ Ustatic void UPPInit(void)
5 p4 r. ^' j2 V4 Q. h- i{( O* A" @) s4 Z
unsigned int temp_reg = 0;
9 r3 { Z" r) m% J) E% A
+ {, Q) l! ?6 t2 p, h, F // Channel B params
% Y1 _/ T+ t4 b# r CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
% O2 Z- R$ s O CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
% H) X; w' w2 P. q3 ^ C7 H Q CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8$ x7 {5 x* ^$ @" q4 r
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate; \ `1 l$ \ I5 {
0 G7 ]! f8 c7 g* [% b# {. u* f) h7 T
// Channel A params
8 E8 X K5 l: _/ Y CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled, \: e% S% W0 ?0 ~0 k* |* F
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface* X' y/ T* u% \0 M# a; v
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
$ S$ F K3 ?& _& `2 l CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
% x4 k" H3 k0 I! [/ Y* s9 L8 _0 }: A* Q4 L- ?' ?8 R8 B( B. ?# }8 ?
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active." t: B& Q: E Z
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
9 T# b4 Q; C8 X$ c. D, _) t6 ^9 R: B
upp_reg_hdl->UPCTL = temp_reg;
+ J ^: r# L" B1 Y* v+ M
) G% L* B( R$ g w1 q4 O, X! ~8 T temp_reg = 0; 2 f: a+ W; K/ ~2 C" r% A$ P' a4 _
& H5 e, m: Z& d+ X9 C# f
// Channel A params) P& ` b+ r% F
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle, T& e9 ^4 ]2 K' H
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
" G0 \4 O- ^/ W: n CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.+ `( o# A$ g% C$ _; N" L/ f: j3 {
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
/ `9 {; }' ~% e( |- @$ `2 v) y, ?) f: p7 D0 S% C
// Channel B params
% A9 F0 I2 I4 C$ I# x5 ?3 z CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
_6 H T( {( I7 f% p* J% p CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable." c/ U2 p4 v6 ?7 W2 p8 x& e
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
) O+ D: a( K( M$ q2 b6 Y, ^6 b
4 g* r; { ]% |( K5 {5 x upp_reg_hdl->UPICR = temp_reg;
5 q& z$ ]: e# i) |+ ?9 U8 @5 `# T# z o1 [ L, P. e
//temp_reg = 0;) k T2 U$ O: `- S
$ l* w- b$ ^3 c) X9 L0 W
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
% g1 W( r8 m5 b //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
6 m" H* c, q. |7 ?
% r% m' G6 W% a8 v) U$ D" g //upp_reg_hdl->UPIVR = temp_reg;; `) {2 Y0 T, v9 O: x
8 D3 C+ q1 W9 [4 l) F# f4 b //temp_reg = 0;7 r3 [6 @1 [( A1 }) M9 y5 M
) I: u, w1 a2 s% U1 Z //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I ) ~3 ^9 C% q- G6 `3 U0 ~; ^' A5 T1 M5 v9 X4 f
//upp_reg_hdl->UPTCR = temp_reg;* ^1 C+ q, D# l8 ^# z# _2 {% V
/ D( ]: t) ?& B: u/ i
//temp_reg = 0;; E% @, P* f: e( B0 n! Q9 {+ V
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
: Z: k) n5 x8 {* R! l2 b //upp_reg_hdl->UPDLB = temp_reg;) U) @) V: {0 L/ G ~( x
( t2 |. R$ `3 _ @& Z
} |
|