|
|
( I! k, @$ r0 L寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
% }5 M4 W0 U1 t1 E1 pstatic void UPPInit(void)
9 Q3 C) {( l2 v A{3 e" K1 ]$ S& j" L0 C. [) b
unsigned int temp_reg = 0;
; G$ j6 [) W1 Z8 ]# m [
. R. k9 ]. }* ~ // Channel B params
- [, L$ H0 U0 P( M0 K, K CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
+ t8 |/ v/ X! [ CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface! ~4 _7 z0 Z: }+ T
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8* n% }+ f+ [" K; ]! q
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
4 p: j0 c5 R8 `2 v4 W4 x& ~
9 I7 V) y: f9 v% D9 |" f3 E // Channel A params
$ Y2 a& D( u& {& I" b CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
4 Y0 ?( @! \. i1 J+ A" P% } CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
) J. U, s$ ]8 s, c l" A CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8; n/ Y8 Q9 ^- s6 n# [
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
5 y9 r3 B& \+ p% [
/ b# G# k- D" G CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
( o4 l; v* \* u/ K! z CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
# _% L2 k% a( ~3 K+ V/ [( L, t7 Q8 ?& ~* m
upp_reg_hdl->UPCTL = temp_reg;- n S3 p1 w7 l
) T- [% {. y& F! [' k temp_reg = 0;
0 Y7 {# K2 d% Z- {
3 D$ G/ a9 Q( D1 ?4 B8 |9 f, [0 K% B // Channel A params
" e6 Y" s$ @0 m) ~/ F7 W2 s) ~ //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle6 U3 }% G/ h: z( P% L* D n2 M. b
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
7 n4 W4 Q6 ~/ B# E7 x1 d CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
4 r2 w" [7 D0 G$ R' R CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
$ @" A/ E8 X; }# Y' z4 A1 g
8 f/ ~ T, f0 F // Channel B params
. E$ F! O, k" ` CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);
6 d: E9 ?9 P- D' @! G# i3 K CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
( Y7 e7 A, X8 u3 w, y3 f! x, S0 ~* L CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable& K x1 F2 _, P+ P Y
+ t# @0 Y6 q7 r& i2 a5 g upp_reg_hdl->UPICR = temp_reg;
3 o- ^1 R5 S/ K9 |; ?; L* n7 f. R4 ^2 R' A7 b
//temp_reg = 0; V0 Q+ ]* [: Q9 l7 @7 `, x
9 ^1 G$ B& B5 q: c' p, x
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
# N' \ L6 K' v6 ]7 i //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value7 M0 n, y1 d3 V% v
# Y) l) w( q: s: M4 d) z
//upp_reg_hdl->UPIVR = temp_reg;; Q1 a* W/ \# f
: t5 L2 q; X) W# j. k //temp_reg = 0;
" q# M/ W8 Q; e( q
; T [, R% ~. B" p) c' W //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I 0 O# X) ?9 ]) [ t# l
//upp_reg_hdl->UPTCR = temp_reg;
. _' O% v5 D6 q, y* y# f' R. @8 i0 N! H7 y
//temp_reg = 0;
: j4 \' {" o; E' a$ B" e, O //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable! H. T/ u0 a" B8 c; O
//upp_reg_hdl->UPDLB = temp_reg;
7 p) j7 B7 {- n! d/ m2 N
$ X7 A" p0 K( ^} |
|