|
|
, `4 g, F9 R: ]寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):8 j) f5 L5 G; l% C: T2 H" t* Z4 h
static void UPPInit(void); d7 a* n5 s8 E. `5 B
{
' `7 Z9 i" @' b$ `9 n" ] unsigned int temp_reg = 0;
# k) B/ F1 Q4 e
6 B8 O, [0 G4 `1 ~% D // Channel B params
4 ^3 h- y- h$ f3 q4 S- S/ J0 a5 ]' A CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
* N7 r- J' Z \ g/ _+ |6 J CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface
3 L8 V1 i$ t0 B! P CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8; T6 R5 H- C$ J/ [. z" p2 N, L
CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate, h0 g' `: w) ?: M& s7 h
& \. J; r7 P* i- i: [6 h+ H8 L( [ // Channel A params
9 \8 a; y" t! C: j/ Q) A0 g$ d% ` CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled. i8 o! W8 I5 o3 U. u0 |
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface$ g0 a# Q! B- D* V, V( f
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8' B+ a1 Z9 L" b ], E* a* |
CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
2 F( b5 n. i. x) B/ ?9 w9 w6 E1 N7 M; ^0 O+ Q( @" X* z0 f
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
$ x0 ~, d# |4 r! T% g* k CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
; K2 O3 B" _, P) T" _
8 X9 u1 x# V5 u* M' \! f upp_reg_hdl->UPCTL = temp_reg;
3 H+ l3 \9 r" [
! z$ u1 K. B, p2 @8 B8 p3 J temp_reg = 0; ' Y+ n/ |# E' g) _
6 r, q. W3 s2 W9 x' R9 x5 H$ S
// Channel A params
: Q3 t) D% x/ s9 C) b //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
. h6 R _! S2 H6 T( U //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
5 E) d2 ]8 d4 \6 A1 g% d1 E ~ CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
# q6 Z2 n; I% h1 Y# y4 B5 e' Y CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
9 R: k& { A5 Q2 T0 t; F' [3 s) ^" C8 z" W+ l
// Channel B params
+ w1 K; S4 ?9 L) g! I6 l6 W CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);# W' [- n$ S0 W2 N! Y3 j
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.+ r4 r4 `/ p$ g( H+ c) Q* A$ M
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
. i, e% H i# ?
7 p5 E. ?9 o% g i upp_reg_hdl->UPICR = temp_reg;* s& o) Q' m; P* T* h q: Q9 H. R
3 Q' }4 o* a* l! h) d4 l& w" Y
//temp_reg = 0;% _ l* ~) R' g+ r7 g
: l+ F9 g5 x1 u' A( j" m3 V
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value, \' S C. G% h3 j0 F+ l
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value. E" _7 s# y. \; z5 p. [" j
0 X m `7 w* {4 ~+ ] //upp_reg_hdl->UPIVR = temp_reg;; ]% J% r2 k/ |. U Y
4 p/ v9 r6 ~" i4 y' B
//temp_reg = 0;- J0 h% B6 n! j0 w+ G
$ C M- a, g* v //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I % _# o& r- @1 Z) g
//upp_reg_hdl->UPTCR = temp_reg;( t( w6 Y; q) w$ o8 @" @
6 r! V c4 L+ z# x. `: P; {4 E //temp_reg = 0;
2 [) p8 R, |0 F1 i. s7 } //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
7 K8 N0 w( Q* B* p- h- q" o //upp_reg_hdl->UPDLB = temp_reg;$ y/ N, {% D7 R8 Z; b4 o8 @
" K* d c0 ?# i) H& e) }
} |
|