|
|
& K# R- U5 r2 s* l* O( ^
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
5 O( _8 L" A n0 D* cstatic void UPPInit(void)) y% n" L- W$ N# X+ W6 E: N0 d
{6 v0 F8 e% A' g$ z
unsigned int temp_reg = 0;
6 _* j$ ? @5 W3 U: k; C
7 q. _5 |$ u7 |7 l8 ] // Channel B params* B7 c6 V9 C. D
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled/ d7 I7 }* f# r, I5 i
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface( F/ y" b+ i2 M% Q
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
# F5 f% z8 M! `$ U$ T CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate! Y1 Z/ R, d) ]3 V6 j
. n4 |, D, Y9 Y$ |" ^& f* y // Channel A params t* T. h* |$ o
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled+ F6 S9 `+ ?* i5 s1 q" {3 b" I
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface2 p" V+ {$ O3 j; H1 R+ U# A
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8/ }; p# A6 n+ ~3 y' G
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate6 g- \$ D" W) `/ T7 d& c
% B2 L; T5 B2 F4 L" P! j
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
. w, h/ ]. T5 v9 T CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
8 s* k- e8 @7 J/ b5 q+ [. ]3 R# T* ]! Z; X2 b8 Z+ d8 n
upp_reg_hdl->UPCTL = temp_reg;
z- T0 d# D9 X6 }2 Z% J
$ y' w3 t: w8 S' P; k2 e temp_reg = 0;
. l% Q9 S+ f# ^( o# b1 q8 O" x2 p5 V& K. R
// Channel A params
+ C' ^& [- E# R, a- f" H //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle6 d" Y% b7 K/ O) g% L0 s. p
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
8 k) ?. l# a. S- t6 n CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.0 y7 M2 \5 ~, |# z
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable0 U3 V% \* v3 n/ k
% y( x8 C8 ^1 Y6 l( s/ C // Channel B params% U) u9 Q0 ]/ [2 X; n* ^$ E
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);8 A. ^7 o0 M. }, W# a( ~# s
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
: A( g4 ?' |; e0 X CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable' _7 f B0 M; p2 R1 F% g
3 m; v8 ?5 @& \6 k$ W upp_reg_hdl->UPICR = temp_reg;5 Z& y0 v* J; U9 }1 X; p
; S7 a: B- e- P; o2 ? //temp_reg = 0;
3 s) z& F4 n5 k" M4 A. ]
3 F" ]4 i/ X/ E( ?; a7 d //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value
2 E* _. z1 p- R4 k; P8 ?. f //CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value7 e1 i2 o* ]* V+ `7 ~
6 W8 v3 H$ L3 [1 K% ^
//upp_reg_hdl->UPIVR = temp_reg;, a5 c0 U+ o+ o% N
# d4 x; E) d$ E //temp_reg = 0;( }- C" a' }9 K# D/ y
0 @. c# K' }/ d
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I 1 o3 _& w% B8 N' ~
//upp_reg_hdl->UPTCR = temp_reg;" O0 Q% T* A8 L
8 e2 c1 B& n4 h1 l* o% Q& B
//temp_reg = 0;
5 O8 U' h! a. G) e1 E# F //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable# _2 ?9 w, P8 x
//upp_reg_hdl->UPDLB = temp_reg;1 V/ l4 P% o8 S9 m9 K( E
! B" w* o0 E/ D1 V9 {} |
|