|
|
! P$ j9 j! H" a, i7 Z. ^寄存器初始化那里就给出来了啊,如果DSP要发数据给FPGA, 那么CLOCK是由DSP去控制的,如果DSP要接收FPGA的数据,则CLOCK是由FPGA控制的,START跟ENABLE信号是用来控制发送使能的。这是我的初始化配置(我是用8位宽度通信的,对于DSP来说,B是发送,A是接收):/ Q" z9 i3 q/ C& ?- C
static void UPPInit(void)) W: g" ^: h. Y+ v- }
{* Z3 e' n# d4 b/ x, X; e5 M: F
unsigned int temp_reg = 0;( ?# [( j# `0 o" m" R7 Y
4 u/ b$ L, M& m8 T. m) f& w // Channel B params
; D3 x/ A6 |( y CSL_FINST(temp_reg, UPP_UPCTL_DPFB, LJZF); //Left-justified, zero filled5 X4 }* h9 d' Q& P: r2 A, ^6 M' |0 q/ F
CSL_FINST(temp_reg, UPP_UPCTL_IWB, 8BIT); //8-bit interface' _' t! _; u9 F- L6 R6 L% N
CSL_FINST(temp_reg, UPP_UPCTL_DPWB, FULL); //Channel B bit width = 8
7 p$ ?' j* U$ |1 _4 s# d+ n CSL_FINST(temp_reg, UPP_UPCTL_DRB, SINGLE); //Single data rate6 j, ~, V& r4 V; D9 m
+ |7 q" a- ?* s+ C8 Y
// Channel A params
7 ]! U' p$ ~, Y8 S CSL_FINST(temp_reg, UPP_UPCTL_DPFA, LJZF); //Left-justified, zero filled! u/ Q: i( j9 x7 Y
CSL_FINST(temp_reg, UPP_UPCTL_IWA, 8BIT); //8-bit interface- a1 q, ?1 E- |6 t
CSL_FINST(temp_reg, UPP_UPCTL_DPWA, FULL); //Channel A bit width = 8
2 ?$ l& T8 }$ W$ e" Z0 U) p8 j CSL_FINST(temp_reg, UPP_UPCTL_DRA, SINGLE); //Single data rate0 F, W; I; g) Z8 ]4 ^) B
8 \0 L" ?% ]- [$ c
CSL_FINST(temp_reg, UPP_UPCTL_CHN, TWO); //Channel A and Channel B are both active., [" M0 F) O: T& }( t
CSL_FINST(temp_reg, UPP_UPCTL_MODE, DUPLEX0); //Channel B transmit Channel A receive7 g2 Z+ e( e& W8 {9 F. t! p
7 F G1 G( g6 j upp_reg_hdl->UPCTL = temp_reg;
6 D. N( p8 Y, E6 h3 `: d: m" l, ~% }$ n+ f
temp_reg = 0;
$ v2 H- v7 z( H; \
. e% c5 J: f$ R# {- o& { // Channel A params
" e5 c4 V# g0 d- \9 { //CSL_FINST(temp_reg, UPP_UPICR_TRISA, ENABLE); //Channel A data pins are in a high-impedance state while idle |+ Y0 j7 r: v
//CSL_FINS(temp_reg, UPP_UPICR_CLKDIVA, UPP_CLOCK_DIV); //Clock divisor, L: E. b: v9 @) B
CSL_FINST(temp_reg, UPP_UPICR_STARTA, ENABLE); //Channel A START Signal Enable.. F' Z! x7 f0 _4 f( ^8 J6 ?
CSL_FINST(temp_reg, UPP_UPICR_ENAA, ENABLE); //Channel A ENABLE Signal Enable
2 `, k, Q) k( c5 b% D" |
* ^$ P4 X$ r7 W8 P5 K' l // Channel B params3 L3 v: j- v& ^* w1 p
CSL_FINS(temp_reg, UPP_UPICR_CLKDIVB, UPP_CLOCK_DIV);+ t; A0 E1 o7 {( @4 T# E$ M4 T/ Q, ?
CSL_FINST(temp_reg, UPP_UPICR_STARTB, ENABLE); //Channel B START Signal Enable.
5 A5 I/ C* \! U9 e4 }6 E3 @ CSL_FINST(temp_reg, UPP_UPICR_ENAB, ENABLE); //Channel B ENABLE Signal Enable
0 i1 b% f7 ?2 B* a" D8 w' j+ ~8 a5 _4 N) f- h. k) z
upp_reg_hdl->UPICR = temp_reg;
1 F4 v0 z7 ]+ b0 Y* F5 B' d& N% u: M, w9 \! B L) N
//temp_reg = 0;/ C7 ~+ ]: r/ W( }0 w% P
, O8 L, ^4 ]/ N- ` d# M
//CSL_FINS(temp_reg, UPP_UPIVR_VALB, 0x7b7b); //Channel B idle value) Q; k" f. s: K' \. c2 y. p" r. Z
//CSL_FINS(temp_reg, UPP_UPIVR_VALA, 0x7f7f); //Channel A idle value
2 y3 [* K$ w) @. m# v2 |5 ^6 l E3 H9 b9 @0 r! X S3 a
//upp_reg_hdl->UPIVR = temp_reg;# M5 O% m t$ R$ s( s
1 |+ O5 X7 Y/ T- K" h4 w //temp_reg = 0;: Q5 J" q8 u8 J2 ]8 N q
3 n1 [( f7 E" m }
//CSL_FINST(temp_reg, UPP_UPTCR_RDSIZEI, 256B); //set 256B DMA I 7 k* e) I' C' w1 N4 _
//upp_reg_hdl->UPTCR = temp_reg;# X5 `' {! {) d Q
( N* @) k3 t9 {
//temp_reg = 0;
( M+ E) R" @ P2 {* {5 P //CSL_FINST(temp_reg, UPP_UPDLB_BA, ENABLE); //B to A loopback mode enable
0 M3 w s j7 M //upp_reg_hdl->UPDLB = temp_reg;
5 Y& ~( V% Y0 ~% Z* g5 i . D- `9 T: G- x1 l& \* N
} |
|