EDA365电子论坛网

标题: DSP与单片机通信的多种方案设计 [打印本页]

作者: geronimo123    时间: 2021-6-1 14:16
标题: DSP与单片机通信的多种方案设计
       将DSP和单片机构成双CPU处理器平台,可以充分利用DSP对大容量数据和复杂算法的处理能力,以及单片机接口的控制能力。而DSP与单片机之间快速正确的通信是构建双CPU处理器的关键问题。下面就此问题分别设计串行SCI、SPI和并行HPI三种连接方式。
+ V$ s. L! Z% ^/ L! s9 Z
  e8 n1 x% T1 n7 M2 X6 \1 串行通信设计与实现
* M. p- w6 S8 u4 ?/ ?. T0 |3 M- R, L2 C6 E
1 1 SCI串行通信设计
4 y$ N* J, |( q% w! N& ~& V
" g0 f1 R& q% z, l! _1.1.1 多通道缓冲串行口McBSP原理
# f# \3 L- f/ W8 m) h. {- a3 Y
7 g0 `3 ~% X& R. @9 ?       TMS320VC5402(简称VC5402)提供了2个支持高速、全双工、带缓冲、多种数据格式等优点的多通道缓冲串行口McBSP。MCESP分为数据通路和控制通路。①数据通路负责完成数据的收发。CPU或DMAC能够向数据发送寄存器DXR写入数据,DXR中的数据通过发送移位寄存器XSR输出到DX引脚。DR引脚接收数据到接收移位寄存器RSR,再复制到接收缓冲寄存器RBR,最后复制到数据接收寄存器DRR。这两种数据多级缓冲方式使得数据搬移和片外数据通信能够同时进行。②控制通路负责内部时钟产生,帧同步信号产生,信号控制和多通道选择。另外.还具有向CPU发送中断信号和向DMAC发送同步事件的功能。MCBSP时钟和帧同步信号通过CLKR、CLKX、FXR、FSX引脚进行控制,接收器和发送器可以相互独立地选择外部时钟和帧同步信号,也可以选择由内部采样率发生器产生时钟和帧同步信号。帧同步脉冲有效表示传输的开始。! [, _: `# @$ b* o. }
: y) d  K4 Q. `) a) c3 g5 ~" \
1.1.2 SCI串行接口设计
+ ]3 T' ?/ Z" h1 F4 y5 L: ?: S+ t
$ s. T  \* s) ?9 ^6 ^       设置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所示。

4 E3 f6 N  R5 o1 l9 w1 ?7 m

) P8 D  ~" @: h
1.1.3 波特率不一致的处理( i4 t5 o5 n" ?  n8 V
+ R$ U  B3 T8 r( l. L
VC5402初始化(以图1为例):, O. C$ c6 k. J( ^6 M0 u

% }) O2 j, B+ c+ a$ nSTM#SRGRl,SPSAl
) B2 o& i: H% r+ d0 i3 j
7 o- Z  ~! K% s" c, r. rSTM#ooFEH,SPSDl;FSG帧同步脉冲宽度位为1个CLKG" S! M. O) m0 e4 X) |

0 j: g- O! ~" T1 g; l8 A6 `: E;波特率为100 MHz/(0X(OFF)=392 156 b/s7 N; s3 C: P* ]

: ?' z. y  G( U* O3 USTM#SRGR2,SPSAl
' V& Y7 f$ F' H/ f' J5 U& q* O1 t3 b1 ^, ^7 p6 e7 K
STM#3D00H,SPSDl;内部采样率发生器时钟由CPU驱动6 a5 ~  _3 H7 {, I8 k' g% S
0 L8 s! Q' I5 j1 w) L5 s6 m
C51初始化:
/ n- d* F6 `1 t+ D# P4 A: l% s
( |7 C' l- T* y  p. SMOV TMOD,#20H- u; Q. S+ G( U9 Q: }

) o% Y1 \* x/ C6 ~/ ^MOVTLl,#FFH: [% s* m. L( {5 _3 K: h% i
5 z$ W0 [& C, T3 Y: N" r$ G2 L
MOVTHl,#FFH ;C51波特率=(2SMOD/32)*(fosc/12)[1/(256一初值)]一24 509 b/s5 k: T6 X+ \! i; O9 a
6 j6 `1 S6 e% a, [% Q/ K
MOV SCON,#50H ;置串口方式l,每一帧10位数据.允许接收- o0 ~, @* l  t4 r9 w: g
$ ?# {/ `1 l: `7 h& T; ?
MOV PCON,#80H ;设置SMOD=1
' I" r- D+ `: ?  F) S; D5 _  [- v$ Q7 E3 o
VC5402波特率/C51波特率=(392 156/24 509)=16.000 49 6 w0 U. a2 ?: h# z: }) j, A

* T! h! w& \4 N# t+ S
$ s9 [6 D) r2 c. p* M4 v0 N1 }+ k2 z       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 [! P( F& }- g7 ?/ d1 o% g6 d7 X9 L" [# I
       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位数据。 3 V7 y# f+ c8 h( X" x
- @  r# M$ m7 ?) `+ t& T( L
       为了不让CPU频繁地被数据接收和发送打断,将DMA和MCBSP联合使用来控制数据的接收和发送。RRDY直接驱动MCBSP向DMAC接收数据事件(REVENT事件),XRDY直接驱动MCBSP向DMAC发送数据事件(XEVENT事件)。
' m9 z$ \% O5 R6 i2 m, b' j8 L  K: O
SCI通信协议如图2所示

5 ~. O9 y4 {8 X9 B- d2 ]
1. 2 SPI串行通信设计 ( ^. a* h0 b. A2 L8 K' z1 t
* p# }$ j- L6 T
       将C51置为主机,VC5402为从机。McBSP的时钟停止模式(CLKSTP=1X)兼容SPI模式,接收部分和发送部分内部同步。McBSP可以作为SPI的从机或主机。发送时钟BCLKX作为SPI协议的移位时钟SCK使用,发送帧同步信号BFSX作为从机使能信号nSS使用,接收时钟BCLKR和接收帧同步信号BFSR不使用。它们在内部分别与BCLKX和BFSX直接连接。BDX作为MISO,而BDR作为MOSI,发送和接收具有相同字长。
& y( S% r) E+ A3 `! q& d& ^; k
/ _: P2 @) ?2 }% P       C51中的并口P1.1和P1.2作为扩展串行SPI输人输出口与VC5402连接,P1.0作为串行时钟输出口,P1.3作为帧同步信号输出口_。0 a& A, Q: A; g

2 i; w+ a+ E+ \5 {' `5 @SPI串口连接如图3所示。
$ y' |# x! s- j

+ b. ?% ]. ^" J( p/ F& X
VC5402初始化程序(以图3为例): 3 s" w* A; r/ m# F" A) n

9 k7 s* \" t6 g8 kSTM#SPCRll,SPSAl;设置时钟停止位进入MCBSP的SPI模式% p0 }. N$ u" ]7 i

7 N8 ?. W* d/ KSTM#0X1000,SPSDl;时钟开始于上升沿(无延迟)4 b# x% h- q2 x9 M- M/ n

$ p5 H$ {& Z) Q3 M* n6 B: ASTM#SPCRl2,SPSAl
- [% f# I) q4 g6 N* G  y# ~8 k* Y. i- \* _; N: Y) i
STM#0X0040,SPSDl;XINT由XRDY(即字尾)驱动! C4 L9 w+ x; `8 t8 v1 v" I4 }
+ d: i1 D/ E7 y3 ~& y# H! W; h
STM#PCRl,SPSAl5 B$ N* T$ R; i: C7 Q. p1 w

2 m$ O$ x# k4 W: CSTM#0X000C,SPSDl;对发送和接收时钟,同步帧进行设置' F) l- h+ H' e  [, a  [! P( _8 D

9 y+ x' ?% z) k3 l, _4 FSTM#RCRll.SPSAl
. }& M7 V" X6 ^. l- w; ?' t0 f% w' K0 [% t
STM#0X0000,SPSDl;接收数据l帧1字.1字8位
$ z8 \8 [" o6 p* k0 B0 \3 \6 D/ V- v7 @, B% W: h' ^
STM#XCRll,SPSAl
( t0 p7 m" e- `
4 f$ q( d$ X6 ]; X9 dSTM#0X0000,SPSDl;;发送数据1帧1字.1字8位;
3 r* G4 c5 x/ t. U9 y4 v/ U* I, N2 O8 A% n$ ^
P1.0发送到VC5402的移位时钟是保证DSP正确采样接收和发送数据的时钟。它要保证和C51的采样接收和发送数据的时钟一致.才能使主从机同步。
2 g: l- I  b. y' t9 R
& Q0 E; z; q4 ?8 ^2 并行通信设计与实现: t4 ?8 ^; U' {0 _, O

4 v* H* r9 T* a7 f% ~2 z2.1 VC5402的HPI接口原理
9 U2 i- R( u6 j7 t5 H
$ d9 e& G: ~6 d$ T- a  W1 P       HPI一8是一个8位(HD0~HD7)的连接DSP与主机设备或主处理器的并行接口。DSP与主机通过DSP的片内RAM交换数据,整个片内RAM都可以作为HPI一8的存储器。HPIA地址寄存器只能由主机直接访问,存放当前寻址的存储器的地址;HPID数据锁存器只能由主机直接访问,存放当前要写入或读出的数据;HPIC控制寄存器可以被主机和VC5402共同访问。HPI本身的硬件中断逻辑可以完成主从设备之间的握手,主机通过置HPIC中的特定位产生DSP中断,同样DSP通过nHINT引脚对主机产生中断。HRDY引脚用于自动调节主机访问HPI的速度,使慢速外部主机与DSP能很好地匹配。HRDY由HCS使能,即当HCS为高时HRDY一直为高,而当EMUl/nOFF为低时,HDRY输出高阻。
HPI连接如图4所示。
2.2 并行接口设计
2 e+ X2 A8 R8 V) I2 x3 J3 c1 b/ F$ |. X
       将C51置为主机,VC5402置为从机。C51的PO口和HPI的8位数据线HD0~HD7相连作为数据传输通道,P1.0~P1.3设置为输出控制HPI口的操作。其中P1.0作为读写控制选通信号连接HR/W;P1.1连接字节识别信号HBIL,控制读写数据是属于16位字的第1还是第2字节;P1.2和P1.3分别连接HCNTL0和HCNTLl,以实现对HPIC、HPIA和HPID寄存器的访问;nRD和nWR连接nHDSl和nHDS2作为数据选通信号来锁存有效的HCNTLO/1、HBIL和HR/W信号。nINTl作为输入,与HPI口的主机中断信号nHINT相连。nHCS一直接地,而nHAS口和ALE口相连接,在HCNTL0/I、HBIL和HR/W信号有效之后,设置nHDSl为低电平,则实现了读写的数据选通,从而完成C51对VC5402 HPI口的读写操作。在数据交换过程中,C51向HPI发送数据时,通过置VC5402的HPI控制寄存器HPIC中的DSPINT位为l来中断VC5402。C51接收来自HPI的数据时通过查询方式,当VC5402 DSP准备发送数据时,置nHINT信号为低;C51查询到nlNTl为低时,调用接收数据子程序来实现数据的接收。
C51与VC5402的并行连接如图5所示。

, ^. T* z# ~! Q

; ^8 ?2 O. B& S$ t; f
主机接收和发送初始化程序(以图5连接为例):+ V: @) |( I; E) l2 Y& f  O7 H8 Q

3 E" s' b& I* g8 [3 aRTITEADDRESS: ;写入VC5402存储器地址信息8 W: ]% Z" I1 s( ^

9 J1 d  i, m" T! Q( M( O# L5 ]CLR P1.2# p% f; ^6 s3 m) p; p- N4 G- A
, }8 l2 o2 d3 ~' G1 s
注:①HBlL脚在传输过程中指示当前字节为第l还是第2字节。) z+ _/ m) m$ G  S4 N

) a4 r4 `2 i4 v, {4 C②为方便DSP自举引导加载程序.常采用将nHlNT脚直接与INT2! x! v8 A" X6 i

2 E- m( F8 m+ x' g9 r脚相连。- a5 @1 m/ H$ c
4 g$ n" {+ t$ w
6 b. [# `, t- X1 Y% `
图5 AT89C51与V05402的并行连接
+ f4 |4 h, H+ q0 H  t0 ]
! o' {, D; ~& ^5 w0 P; ~( b, SS$ s. F, P; g+ r% v
ETB P1.3 ;主机可读写HPlA地址寄存器
) K3 ?. R) {1 H( L' l$ ?# t" d
' B6 t7 u' {+ @; L3 j7 i  c: f2 GCLR P1.0 ;主机要求写选通HPI一8' ]5 M  v! L6 g
1 d$ G. q4 l. j# W1 F, c. x
MOV P0,A ;写入8位地址' `" Z& H  O0 q9 A4 V

  B! ?5 z+ G% [CALL DELAY ;等待地址写入完成) \8 {/ N& M, _1 Y. n* x$ F, S% x

1 ]( g+ s# t1 F( q1 VREADDATA: ;读出VC5402存储器数据信息  X  A) ~9 E+ H

5 f" C3 g$ r" i2 M9 X( }8 U7 s3 K) eSETB P1.2
5 m4 X9 Y- X9 J% L2 B  t2 e) c7 W! L4 G; Q) K3 U3 N+ C
CLR P1.3 ;主机可读写HPID数据寄存器6 r1 g  t5 u/ y! \0 U

' D9 C" c# k- OSET P1.0 ;主机要求读选通HPI一8' H4 m1 Z" u8 y9 a, ]1 B' |' O7 b
9 S. v6 k+ W( F" t: _; J) h
MOVA,P0 ;读出8位数据
2 i3 S; H$ `5 a' B/ p/ [( ^" Z0 q, z
CALL DELAY ;等待数据读出完成
; l3 w; U% Q. j1 [2 q% `0 z& e( o7 v. \
WRITEDATA: ;写入VC5402存储器数据信息
0 `& z2 S& i# n6 f3 @2 u: `' l" B) q+ q; V, G
SETB Pl.2% t% x$ |; j# |" ?( f' s  H
3 l: p: ]7 Z1 t+ h$ ~! Q
CLR P1.3 ;主机可读写HPID数据寄存器
4 P, |" v' e0 h! S7 q& d+ ^8 a+ ~' b3 B, A/ c3 b/ q/ g* \
CLR P1.0 ;主机要求写选通HPI一8
' T8 L4 p  @; c7 F. ^" j& }/ D" b  a  C  S5 H$ f; b1 Y
MOV P0,A ;写入8位数据, T2 q- M4 Y4 ^4 \4 Q2 K& g
1 e+ g6 h. w/ r2 X- [/ P* o
CALL DELAY ;等待数据写入完成
0 Q4 }" @) v8 Z$ h1 P4 C" b4 O7 T
       不管是串行连接还是并行连接,都要考虑到VC5402是采用3.3 V供电,C51采用5 V供电。两者之间存在信号电平的差异而不能直接相连,应互连接口隔离器件。1 q  p7 w- c: p, _* r

7 _; p( h+ T) ]结 语
( w; H: `: I6 K7 b1 a, d# ]1 d$ Q& K: M; R  R- i, b- e& F7 h
       在SCI串行通信调试中,发现由于DSP的运行频率在100 MHz左右,造成内部数据时钟CLKG过快,不能与C51串口采样频率保持一致,需要软件加以处理,这样会额外消耗DSP资源。因此可以考虑将发送时钟CLKX和接收时钟CLKR接外部时钟源(慢于DSP时钟),以保证与C51串口采样频率的一致。另外在并行通信的调试中,可以知道通过HPI-8口并行通信完全没有硬件和软件开销,由DSP自身的硬件来协调冲突,因此HPI-8口使用于与单片机构件较好的主从双CPU处理器平台。

$ A2 ?8 }% J. R/ r
/ C  L' a3 Y; V6 S" b+ Y

9 h( o$ A3 e0 A" W* F8 d/ g5 J! y
- B7 V% y' s; B+ P; ^6 l" R' y
作者: shapeofyou888    时间: 2021-6-1 14:51
MCESP分为数据通路和控制通路
作者: modengxian111    时间: 2021-6-1 16:04
DSP与单片机通信
作者: justlikethisis    时间: 2021-6-1 16:53
VC5402每发送16位数据,C51只采样1位数据




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2