EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
将DSP和单片机构成双CPU处理器平台,可以充分利用DSP对大容量数据和复杂算法的处理能力,以及单片机接口的控制能力。而DSP与单片机之间快速正确的通信是构建双CPU处理器的关键问题。下面就此问题分别设计串行SCI、SPI和并行HPI三种连接方式。- |7 ?! ~* w' R9 O. w& t
, c c4 L2 a/ g8 L3 X1 串行通信设计与实现- k3 H8 ?. Y( N/ K }5 l/ p
( Y7 _8 h! ]5 I1 m. G1 1 SCI串行通信设计; |: F2 I8 ]4 d) `
" A) r, J4 [% }1.1.1 多通道缓冲串行口McBSP原理 - r$ c7 g' b0 l) l+ o$ R" W( o
1 |. z7 S0 K+ X i# h' q+ n4 J6 d
TMS320VC5402(简称VC5402)提供了2个支持高速、全双工、带缓冲、多种数据格式等优点的多通道缓冲串行口McBSP。MCESP分为数据通路和控制通路。①数据通路负责完成数据的收发。CPU或DMAC能够向数据发送寄存器DXR写入数据,DXR中的数据通过发送移位寄存器XSR输出到DX引脚。DR引脚接收数据到接收移位寄存器RSR,再复制到接收缓冲寄存器RBR,最后复制到数据接收寄存器DRR。这两种数据多级缓冲方式使得数据搬移和片外数据通信能够同时进行。②控制通路负责内部时钟产生,帧同步信号产生,信号控制和多通道选择。另外.还具有向CPU发送中断信号和向DMAC发送同步事件的功能。MCBSP时钟和帧同步信号通过CLKR、CLKX、FXR、FSX引脚进行控制,接收器和发送器可以相互独立地选择外部时钟和帧同步信号,也可以选择由内部采样率发生器产生时钟和帧同步信号。帧同步脉冲有效表示传输的开始。
3 F' L1 J/ H" ]+ `% U$ s
- k& z& x' S# I, Y4 Y' }7 t1.1.2 SCI串行接口设计
, y5 k3 z3 b: N" Z4 t) T5 P6 ?" X/ ~1 N, O$ @ r
设置VC5402的McRSP输出时钟和帧同步信号由内部采样率发生器产生,内部数据时钟CLKG和帧同步信号FSG驱动发送时钟CLKX和帧同步FSX(CLKXM=l,FSXM=l,FSGM=1),输入时钟也由内部采样率发生器产生,内部数据时钟CLKG驱动接收时钟CLKR(CLKRM=1),同时由CPU时钟驱动采样率发生器(CLKSM=1)。考虑到AT89C51(简称C51)串口发送数据帧中第l位为起始位,因此可以利用该位驱动输入帧同步信号FSR,同时要置忽略帧同步信号标志为1。其中FSG帧同步脉冲宽度=(FWID+1)·CLKG;FSG帧同步脉冲周期=(FPER+1)·CLKG;采样率发生器分频系数(采样率=波特率)=FIN/(CLKGDV+1)。 SCI串口连接如图l所示。 ) u# H, {' U% D# \
9 ]5 i3 |4 h) {& `9 {" M) e
1.1.3 波特率不一致的处理. v4 t( k. y2 f6 C% g9 ^+ h& c
0 O$ m, H7 h$ d" L
VC5402初始化(以图1为例):
( z( x- E, }- V7 g9 x+ p) E* D* K5 n" f' m9 p+ z
STM#SRGRl,SPSAl
; y% o; o* _7 m0 f: z; R/ i) h: d! b$ B3 A* G
STM#ooFEH,SPSDl;FSG帧同步脉冲宽度位为1个CLKG" n" F( W9 x$ X9 q! u: B
( R5 j+ w& j, `; ^$ C5 I;波特率为100 MHz/(0X(OFF)=392 156 b/s: M5 ?7 A- n1 w, }( N4 ^
* ^0 A7 j* P% l% u! {1 I. aSTM#SRGR2,SPSAl4 l" G& }, ]0 w0 g
# t# X. h6 W+ F3 l3 j+ A( T
STM#3D00H,SPSDl;内部采样率发生器时钟由CPU驱动( ~' G7 ~7 u: B) A
* Z: E p/ p/ l/ H. p
C51初始化:3 n; i* W* s* z
+ K8 M5 d; l: X) o- w' b C
MOV TMOD,#20H
. b+ b9 R. ?1 [7 z( U& z) Z' \9 t! S0 }
- R( u0 E1 S- K" t; p3 G" f) _2 QMOVTLl,#FFH* ?9 A, b% _/ v( S+ D* p9 m
3 y! |7 T: `7 r7 Q0 G% o% bMOVTHl,#FFH ;C51波特率=(2SMOD/32)*(fosc/12)[1/(256一初值)]一24 509 b/s: H+ n6 B1 A* G: m9 L5 X! N9 o
( }; _8 D% J% f; z; v4 mMOV SCON,#50H ;置串口方式l,每一帧10位数据.允许接收
8 F# s4 T0 [7 r4 {0 t$ T2 [( G3 Y$ n9 }. t
MOV PCON,#80H ;设置SMOD=19 q3 u9 P! b( b+ t" Q1 U. t( {# V7 `
/ l: b, h) C1 }9 G/ \* x+ u8 D; @
VC5402波特率/C51波特率=(392 156/24 509)=16.000 49 % ?; ?% O) l& z- C; E$ S
8 F9 z8 z/ ~! a, `9 n' c/ r5 h
. S7 ~% B6 f/ n" u h% k' n, P; @# i' d
VC5402每发送16位数据,C51只采样1位数据。在VC5402存储器中开辟一个空间对每次发送的8位数据进行扩展,1位扩为16位,0为0000H,l为FFFFH,共扩为128位。在数据头部填加16位起始位0000H,数据尾部填加停止位FFFFH。在VC5402发送控制寄存器XCR中设置XWDLEN=000(1字含8位),即可将要发送的8位数据封装成1帧10字的数据。这也符合C51串口1方式下1帧10位的数据格式。C51以1/16的VC5402采样速率接收数据,0000H采样为0,FFFFH采样为1,由此可以将接收到的200位恢复为8位数据,停止位进入RB8。
5 C% o' f3 D4 _+ Y7 P8 O. f
?9 P" J1 T9 `7 ~/ i3 ?/ i8 M/ j3 V7 x C51每发送1位数据,VC5402要采样为16位数据。C51一次发送的10位数据的起始位触发VC5402的接收帧同步。由于VC5402以16倍C51的采样速率接收数据,1位采样为16位,0采样为0000H,1采样为FFFFH.只采样发送来的10位中的前9位,9位封装成144位,即接收的1帧数据完成。VC5402将收到的144位数据在开辟的存储器空间存放,抛弃前16位,在剩下的128位里分成8组,每组16位。比较其中间的8位,若有4位以上为1,则该16位为1,反之则为0。由此将接收到的144位恢复为8位数据。 $ N; L5 j: d+ m1 M; K: |
) w7 ~9 k& V: ~ v
为了不让CPU频繁地被数据接收和发送打断,将DMA和MCBSP联合使用来控制数据的接收和发送。RRDY直接驱动MCBSP向DMAC接收数据事件(REVENT事件),XRDY直接驱动MCBSP向DMAC发送数据事件(XEVENT事件)。9 C& | e# |' g1 M5 j
6 b7 V2 [9 N! T
SCI通信协议如图2所示
2 Q& c5 ~8 H" p8 y% L$ s- T( @
1. 2 SPI串行通信设计 ) U9 n4 z! ]; a0 h1 n+ ]+ O
- D% H5 S3 ~! z2 Z( f2 E- H
将C51置为主机,VC5402为从机。McBSP的时钟停止模式(CLKSTP=1X)兼容SPI模式,接收部分和发送部分内部同步。McBSP可以作为SPI的从机或主机。发送时钟BCLKX作为SPI协议的移位时钟SCK使用,发送帧同步信号BFSX作为从机使能信号nSS使用,接收时钟BCLKR和接收帧同步信号BFSR不使用。它们在内部分别与BCLKX和BFSX直接连接。BDX作为MISO,而BDR作为MOSI,发送和接收具有相同字长。 8 r- Z& Z5 s6 O
/ t* M3 e; Z6 j2 R C51中的并口P1.1和P1.2作为扩展串行SPI输人输出口与VC5402连接,P1.0作为串行时钟输出口,P1.3作为帧同步信号输出口_。
7 a: X7 P- Q/ q" q5 \7 Y0 [! B5 a& i2 f
SPI串口连接如图3所示。 & [% K: n8 p. f. j+ ~" j
% D' Y, x5 y7 b3 e0 f
VC5402初始化程序(以图3为例): 9 ]% ?+ X# p; s, J) F) E# W
' y8 @+ o4 e; ^ e; E6 t" s0 TSTM#SPCRll,SPSAl;设置时钟停止位进入MCBSP的SPI模式5 J. U. Y9 ]3 \8 V" _% ~$ y
& y! @7 u3 F/ P* D- ?STM#0X1000,SPSDl;时钟开始于上升沿(无延迟)
: L9 _4 R/ l$ N, a, h
. ]) {5 B" W( N" M. Q$ MSTM#SPCRl2,SPSAl
; A0 ~ D. }+ A4 s0 [) s+ n {
/ i5 {0 P$ R X# r! j* }! l+ QSTM#0X0040,SPSDl;XINT由XRDY(即字尾)驱动( N2 }& y) t2 K5 t6 D
7 J% U: \& R, @) V; C2 G: f1 a* XSTM#PCRl,SPSAl
' L2 a$ `6 l. y% R7 d
2 H# ?4 n L% [' P. \STM#0X000C,SPSDl;对发送和接收时钟,同步帧进行设置4 }" K! I2 q3 T4 u6 f6 }; j2 K) m
" ~! G; M/ @: p( C* U' BSTM#RCRll.SPSAl
$ f$ W- A0 W5 c+ r% H) p; M4 Z- U
* ?3 E5 F6 j1 ~+ X9 VSTM#0X0000,SPSDl;接收数据l帧1字.1字8位, V5 L9 O9 T- Y
0 |' }$ T/ L- [ Q4 H
STM#XCRll,SPSAl
' |! e( ~3 l o6 p+ Z3 d6 K$ m; \ S& r
# [' Q J: T0 K$ w& ASTM#0X0000,SPSDl;;发送数据1帧1字.1字8位;6 w' [0 g1 }" v+ Z
- P9 L! z8 u( U$ |
P1.0发送到VC5402的移位时钟是保证DSP正确采样接收和发送数据的时钟。它要保证和C51的采样接收和发送数据的时钟一致.才能使主从机同步。 |