|
% n+ J6 R/ p: R+ U% P6 R
寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):
" V) J" d( y9 p0 z5 V3 K1 V9 ]4 astatic void UPPInit(void)
) g. s% [ ?/ N& G5 o# c7 S) X1 d{
+ K* P. C+ s! W" h/ h unsigned int temp_reg = 0;
: _4 O. @& s$ P% x7 X) Y, p/ Q& J, `
// Channel B params
; e- t/ v' e' s$ }7 _ CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled7 ?1 u5 B* y; D. B. D- c' i
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface6 R/ E1 S; R; F: F
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
0 o6 X( g" p$ Z8 f5 d4 y CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate4 G( g0 B; R- E/ |1 b5 O4 v
9 L$ q5 ^1 `" F // Channel A params8 F; w) E/ v+ |: |" M
CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled; R" f5 E5 f9 x3 l4 |4 i$ O$ h: ^
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface
/ ?7 H- s5 W* @+ }. g7 F; @ CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
$ U7 R; K, T) r% m/ j/ a CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate1 ]$ @2 f* ^* g2 J+ T! j- a) E9 \
4 V4 q$ c" ]7 i+ t CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active.
{( j N" P. K: F CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive
$ q+ x; E) R j2 Z
1 L& o+ [8 E. X% m, B9 S upp_reg_hdl->UPCTL = temp_reg;
1 X. \9 L% `& ~$ y7 B8 y( ?; O! ~. I
temp_reg = 0;
- n- p7 `3 |) w
! s L6 z: \, q/ V( i // Channel A params
+ F# s" O- T, b8 w //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle
: [$ T3 j* s- L; ?- ~ //CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor
/ P6 ~7 V+ p4 t7 x+ q* D CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.
7 J7 T; v) n- j) W CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
' n( o5 k' z5 o I- Z7 I: q5 b9 K& ?+ U. i
// Channel B params
' [; f% {0 z3 _ CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);( S6 W8 O/ V G7 ^& ]6 m
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.0 E2 ?9 t! I4 J& a+ V
CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable+ M5 q( c9 i7 d+ I* A
+ `5 v! t+ p# |% s
upp_reg_hdl->UPICR = temp_reg; j- }; r1 G. G' ]# W
+ u, t4 [# m+ [% R9 T
//temp_reg = 0;: M4 L! l4 k% ], {1 \. T4 D
3 k. `3 C' t1 `* I1 O# c
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value- T' C9 m |% D* @( X2 ]# l) \
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value4 k5 ^3 L, w$ M2 X3 `
# m& d+ N# K& e) W
//upp_reg_hdl->UPIVR = temp_reg;
4 I# ^5 b+ z" D6 S' j
, N. [: q3 o z+ I //temp_reg = 0;" {0 c- |/ t% d+ d
) e8 M3 z: E) o0 A5 h6 g% F
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I " j* o, p( n- Q+ L
//upp_reg_hdl->UPTCR = temp_reg;; y8 ^ h5 o4 X2 J3 _. b0 ?
% ~* D( L* T' h. }7 L3 K6 r //temp_reg = 0;
$ H7 s. e/ t; r1 D6 q% [- L" O //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
5 {1 a) \5 L. W+ ]& L //upp_reg_hdl->UPDLB = temp_reg;
- v, V" e v9 \8 y
# [" P# X% k b7 w5 o) T r5 F} |
|