|
w9 q& ~9 R0 w! U: z) o
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):* B) G$ [; x! n
static void UPPInit(void)
8 j' S. ]: s( }) |5 B{; z- ~! |( A, N' t6 j1 o
unsigned int temp_reg = 0;
2 i1 A7 ~. w0 u' n% G$ c7 D7 e+ B8 C$ E; h" m( D. y& ^# | {
// Channel B params
# V7 Q2 e% i2 n3 p& B- p; c CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
# o( [2 i5 y- c2 u* h- o7 Q CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
. r; r7 Q, C! k7 z CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
5 v: z, s: B' k; ]- X CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate# q* [8 `3 E, d6 q/ y& w
( `* [5 e0 }) t, K% \
// Channel A params8 Y+ d2 P' z$ Y O$ u- k: r
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled
0 y! U3 |7 c0 X. x CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface4 H% L: f8 w; |
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
: s2 V/ }. l1 d6 L CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate, a& w8 }; {# f- {$ u/ Z
7 D- U4 H7 }- l; j CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
# w0 p8 a! w) Z$ Z- U; _' B CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
, s) `) Y5 L, }, G6 w. i7 d0 ^3 R; t( F
upp_reg_hdl->UPCTL = temp_reg;
y6 C/ r* x5 |2 d/ v
$ |6 M: U, ?4 @2 m4 X9 Z8 I4 Y7 U temp_reg = 0;
4 U1 V; U/ X$ W" _3 o0 e, e. C( B) S( c
// Channel A params/ |) S, f$ D2 R0 O8 I7 @% B" v7 \
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
' c& S* N: Y7 O$ b; S% ? //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor+ t; y/ a$ T5 A3 k$ [1 ?
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
' Z" e+ }! O7 ?; A. r7 W: T CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
* q( [* h: ^- p7 w0 u
7 K1 j5 L5 Y1 z8 f) x! D; i6 f- o // Channel B params
6 n8 _& @' P# W% j CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);- j& [! S u% c5 x
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable." f; u# z0 V$ y3 ?. ?* E. q3 M
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
( q- P* |+ X: u( U5 ?) Y9 D v6 ^1 ]2 i( P
upp_reg_hdl->UPICR = temp_reg;& m6 v! ~! S/ x0 }/ w& ] Q* C
( N/ k; m7 {5 C //temp_reg = 0;
+ @2 f# J; z1 q3 J6 z. B, g
- {7 f& V A5 G //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value8 p$ \1 f" ?# g0 I' l# w
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
! l$ x9 H3 ^7 s# P# ]6 i3 ]( d2 [( _2 y$ k% i/ {
//upp_reg_hdl->UPIVR = temp_reg;
7 Q2 }$ J `+ v. I
; S5 v, v' C8 L0 Z' T! g //temp_reg = 0;; h% a+ L" C. Y* I
. `0 p0 ~) q2 l& p
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
7 y4 M% q- W1 H# E6 X //upp_reg_hdl->UPTCR = temp_reg;
. _3 w8 j0 q& u! n' Q5 a: B6 N. m3 [6 F
//temp_reg = 0;3 I$ m9 R+ Q9 z6 n4 c
//CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
7 u% a7 {' ~& k* f K- O9 }. D" L //upp_reg_hdl->UPDLB = temp_reg;
5 Q9 b: m& ^1 D$ {# w; b 9 t9 S0 D7 M9 K# R
} |
|