|
5 _# v2 X* _; ~( ^
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):6 M. I+ ?# A- K" r' K7 u# @; l
static void UPPInit(void): b+ Z) Y+ a/ O' Z+ ?
{
) R1 c9 |6 g/ }# O+ L- A! s/ O, d unsigned int temp_reg = 0;+ k I: n+ v( r2 Z) I/ {
$ L% E* Z5 k2 w0 M" ~
// Channel B params
4 ]' l1 Z9 j- `2 C8 h0 F CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
; n1 {8 Q% a/ B& v. N6 [ CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface% x2 E; Z8 k: m' B. {) h7 U
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 83 Y: _ q5 a0 ^& Q& M7 M n
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate7 R# O; `9 w1 c' c( \7 M
6 Y3 ]/ A- B: L% |5 U
// Channel A params+ X! r# T5 u/ S8 Y4 A8 V3 n, O7 `
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled$ R3 s8 {# k8 G5 K% M( `
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
Q6 H' H* S0 p CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8! ?0 L8 w! g+ m% l/ C
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate/ g" L# J- @+ Q( g' N, I! o
+ Z. E9 \8 `+ s0 I' W+ g CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.& w$ s8 h1 Z4 j6 y# \1 N
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
; r( N) e- G: B* v7 \2 G) u
! j2 o6 g/ {. A( s3 r upp_reg_hdl->UPCTL = temp_reg;
1 F: k$ }1 O, n9 D
7 D. C8 `7 T+ v9 j- f# M- n7 B" G6 y) g temp_reg = 0; 7 A' u s) Z7 @ T4 i
% Z0 R7 B9 X" @
// Channel A params9 H6 m. n1 ~, M( t9 Q+ c: ?: P
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle8 q7 z, ]+ X7 Y# u0 Z" D" m
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor6 Y4 o6 }: \3 g0 y, c Y
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.) G4 _0 T: Q7 s# J
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
' Z9 \& s2 E: b' ~. }: S) A7 q
/ C1 S. [8 B4 b) @$ T+ T: } // Channel B params
3 a K |2 U2 Y CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);4 j: _* o% b2 L* e* C7 ^& K
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
/ r: W: h. m* w9 J" R CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
, k4 G, F( [0 ~/ i' e( E8 N/ I$ u! `- G/ _' K. k0 K: Z4 D( C
upp_reg_hdl->UPICR = temp_reg;
, o8 Z; S) a* D8 b
[: x; n/ {( E1 I h6 A; t V6 x //temp_reg = 0;
7 n6 M3 B$ R% s% H% E; ?; i' B+ H: Y% W
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
" g7 B. T7 O! p" b; [: b //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
4 h3 A: v5 Z2 ^$ v# ^0 s! q; F. A. ~6 L% ]6 w0 R3 {" M% B) @- o0 o0 Y
//upp_reg_hdl->UPIVR = temp_reg;
2 h/ ~2 a8 N) m3 x) P+ Z7 b; {6 ~$ j! e b9 w V% z
//temp_reg = 0;
+ i- f- H2 R& P/ ~, F1 K( ]
" ?0 m. F8 C# V //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I
& ^* m, y3 ?; z //upp_reg_hdl->UPTCR = temp_reg;
- x( b3 S) r" Y+ X
0 x6 M! b$ c6 Z$ s7 Q //temp_reg = 0;
0 }: o$ G1 ~/ T0 ]! v$ z" A4 p //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
) X$ ?$ c! ]8 p$ X6 O! r0 i0 A5 q z //upp_reg_hdl->UPDLB = temp_reg;
# [/ i. H! }' V# s* S/ H
/ I; z2 s/ [+ n; R6 U2 ^5 V} |
|