|
; v) ]4 r- }; G; e0 h5 }" r寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
& z" a& J# }7 M# |# n5 K) R5 s+ Cstatic void UPPInit(void)9 ~" g9 a% v5 X% D T2 Y
{1 O2 M& Q9 {$ ^ w+ a
unsigned int temp_reg = 0;
6 m) ?* P) H/ a2 b7 t
) I+ E# o' D! r // Channel B params. c ~: y! q/ O' i
CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled
N# \0 b5 K U1 t: a CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface9 G0 ?, ~3 T& g. `
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
: @( A. ^4 b6 i# x+ Q CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate
! V; H6 B g4 P& e! _" a
, C0 j' G# q" }! g // Channel A params* O, f3 _" ]# K% e+ A3 c# b, [2 P
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled& |/ v* g1 z0 R8 h) f; l
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
3 G s8 L) ]& m2 _7 `8 A5 m8 U CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
. M, w# P. R7 g9 [0 b CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate
8 o5 J* k! T4 l {- S2 h1 O
3 c4 s" ~, n) I CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
5 j: W9 d( [- A M9 H) A# [8 ] CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive7 {. D8 Q# I" v, W( @9 }- e
! w( z2 r/ ?) q9 f1 q" b upp_reg_hdl->UPCTL = temp_reg;& l* G) o9 q D3 U/ n8 c( C* u; e
+ g, q, c& m2 l! R temp_reg = 0; , `# b9 [2 g' v/ X8 A7 N7 }; C! T
* p2 d7 z( Q; @* M+ A // Channel A params8 S* P6 ?0 i' `% D
//CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle* t: {' ~8 a' d- `) s" U
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor' q# F' }0 f8 j0 @, R
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.) o3 Z @: m3 |- S) ]: d L
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
g4 [, z. d9 d. w) c' f
( Q S" Q/ ]+ B* o/ a2 R // Channel B params
4 `0 i/ x5 n: Z2 ]0 \9 h CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);! j' z/ Y, F% Z; r
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.$ A/ v% a6 r2 U, v3 C
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable0 |6 u' x- L }# h4 C1 }
) W+ @- c, X! ^
upp_reg_hdl->UPICR = temp_reg;
- m( ?7 a, p2 y( @$ }7 A% z! \% C1 v% [4 D: R0 {$ Z
//temp_reg = 0;
$ `0 S5 a* A0 u" I! E8 |' l
4 ?# J' ^1 }( X0 r8 ` //CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value% ?7 v" _; {1 `2 z0 ^% R u' v
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
9 H8 C w5 _% _# N3 y a- ]5 h f3 S# k7 m$ M, m+ M* v1 M. W# _
//upp_reg_hdl->UPIVR = temp_reg;
$ Y1 c' h& Q J9 M7 M/ Z3 ^$ G f( l Z% s6 F- _/ |; E% f9 D. }
//temp_reg = 0;
. T6 A* A" W6 o. x! `, y" ~
5 ]" `+ r( |1 b$ o& S' y+ Y0 d //CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I 2 s! x1 _" v& x4 f" `
//upp_reg_hdl->UPTCR = temp_reg;
7 Z* d% X: N5 h- X, H1 T5 s: l' H7 e. Z) x
//temp_reg = 0;
: D* ]9 e0 g, u //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
& e+ {/ N# c* m1 X //upp_reg_hdl->UPDLB = temp_reg;; G* i3 [3 `8 C8 D, l0 K' ?
: Q3 Y: n& y& T! g} |
|