找回密码
 注册
关于网站域名变更的通知
查看: 299|回复: 1
打印 上一主题 下一主题

如何实现DSP与PC机之间的串行通信

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-11-2 10:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
1 引言- ~; o0 g  g0 ~9 @3 M
DSP 既是Digital Signal Pricessing 的缩写,也是Digital Signal Pricessor 的缩写。前者是指数字信号处理的理论和方法,后者则是指用于数字信号处理的可编程微处理器。TMS320F240 系列是在TMS320F2000TM 平台下的一种定点DSP 芯片,是专为数字电机控制和其他控制应用系统而设计的16位定点运算的DSP。它集合了DSP 的高速运算功能与电机的强大控制能力,为控制系统应用提供了一种理想的解决方案。TMS320F240 片内外设有一个16 位的同步串行外围接口(SPI),一个用于串行通讯接口的SCI 模块,双10 位A/D 转换器,带中断的看门狗定时器模块(WDT),带有锁相环(PLL)时钟发生器。另外,还集成了两个事件管理模块EVA 和EVB。因此,TMS320F240 不仅具有高速数据处理能力,还具有控制和事件管理能力,可完成人机界面、与上位机进行串行通信等功能。. s' g' }' N7 G6 k! I
2 串行通讯接口(SCI)模块4 W/ K1 |/ L  {# Q3 d
SCI接收器和发送器是双缓冲的,每一个都有他自己单独的使能和中断标志位。两者可单独工作,或在全双工的方式下同时工作。为了确保数据的完整性,SCI 对接收到的数据进行间断检测、奇偶性校验、超时和帧出错的检查。通过一个16 位的波特率选择寄存器,数据传输的速度可以被编程为65535多种不同的方式。SCI 的串行通信接口包括SCIRXD(串行通信数据接收)和SCITXD(串行通信数据发送),在不使用SCI 时,这两个引脚也可作通用I/O 口。发送和接收的操作可以利用状态标志位通过中断驱动或查询算法来完成。与之相关的主要寄存器:发送缓冲寄存器SCITXBUF、接收缓冲寄存器 SCIRCBUF、接收仿真缓冲寄存器SCIRXEMU;通信控制寄存器SCICCR、中断使能和内部时钟使能SCICTL1 和SCICTL2 、波特率选择高字节寄存器SCIHBAUD、波特率选择低字节寄存器SCILBAUD、优先级控制寄存器SCIPRI、引脚控制功能SCIPC2 以及反映通信状态SCIXST 等。7 S5 v' C- O, J3 S+ l
串行通信接口模块有两个多处理器通信协议:空闲线多处理器模式和地址多处理器模式。空闲线模式在地址前留有一个固定空间,该模式没有附加的地址 /数据位,它在处理包含多于10 个字节的数据块方面比地址位模式更有效;地址位模式在每个字节中加入一个额外位(地址位)来区分地址和数据,这种模式在处理多个小数据块时更有效。* V- I& \+ w2 g8 m  _
3 RS-485串口通信
) S6 e" r/ w2 s& ?1 L" e4 X& |RS-232 虽然被广泛接受,但其数据传送的速度慢、在现代网络通信中已暴露出的接口处各信号间容易产生干扰等明显的缺点。RS-232 只能传输15 米,不能满足远距离传输要求,而RS-485 最大传输距离为1200 米,最大传送速率可达10Mb/s。因此,RS-485 在远程通信和多机总线系统中具有很大吸引力。MAX48X/49X 系列收发器芯片适合于RS 一422/RS 485 通信标准。其主要有以下特点:" t- O9 F3 ?6 V2 Q5 _# C" S6 d

1 u! a# q' M/ B: q! H5 P# Q$ q 5 ]8 V! ]/ {/ U  y, B
7 h. W6 R+ w$ i4 v) q4 ]
·  单+5V 电源供电;
  t& O) s) V! _1 M7 S·  低功耗:工作电流120~ 500μA :% q: o% h1 P; H* ?, u
·  驱动过载保护;
" d; z0 B% }1 {; u7 D7 E# z2 S·  通信传输线上可挂32 个收发器方便组成半双工通信电路;4 S6 \' s; O3 \# G$ D  T
·  共模输入电压范围:-7V ~ + l2V# O2 d& m: n( T, _" a& M0 T
MAX485 为8 脚封装,引脚配置如图l 所示,各引脚功能说明如表l 所示。
2 X8 x9 M3 ]" D5 s) ^表18 v! |. e" r5 g. n% F" l

3 Z( b% C- {& ], @* y& [' n/ L
, k' z3 Z5 o% j! h+ Q" c( `* e1 _6 k  |8 a
本设计以PC 机为主机,TMS320F240 为从机,主从机之间进行串口通信。TMS320F240 与PC 机之间采用RS 一485 标准进行半双工通信的接口电路如图2 所示。其中,接收器和驱动器的选择由TMS320F240 的XF/IOPC2 引脚控制。由于一般PC 机上提供的是标准的RS 232 C 串行接口,因此,需要RS 232C/RS485 转换器进行接口转换。
: h2 [2 z/ v: }
. X$ H# H" a2 j2 y  n" m+ d% Y# p
6 E0 t$ j  L5 K& `: L* k7 W3 B) S8 J& W  D5 @! T6 |
4 上位机PC机的软件设计6 K9 Y: _1 o6 l$ h# J
上位机PC 采用高级语言C,在用C 语言开发DSP 应用程序时,需要嵌入一句或几句汇编语言,如在程序的初始化阶段对INTM、SXM 等位的配置。用asm 的方式就可以实现单句汇编语言的嵌入。
, T' g+ L+ i! F2 ]. B4 v3 LCode Composer Studio 简称CCS,是TI 公司推出的为开发TMS320 系列DSP 软件的集成开发环境(IDE)。CCS 工作在Windows 操作系统下,类似于VC++的集成开发环境,采用图形接口界面,提供有编辑工具和工程管理工具。在CC 环境下串行通信有两种方式:即同步方式和异步方式,在此仅讨论异步方式中的串行通信。PC 串行口发送器输出端和接收器输入端的数据格式为帧信息格式,与TMS320F240的SCI 口格式相同。通信时,双方必须约定通信数据传输格式、传输速率及各自工作方式等。本文设计,当上位机请求通讯时,先发请求通讯命令,下位机有效接收并判断,确认后向上位机发响应码。上位机在收到响应码后,再发操作命令。双方约定:波特率208h;8 位字符,一位停止位,无校验;传送方式:PC 机采用查询方式接收数据,TMS320F240 采用中断方式接收数据。$ s' ?, ?1 V7 I/ G% g
5 DSP软件设计- h3 @* M. h, H. c# Y8 p" J% Y
5.1 串口初始化0 p7 l4 l8 P9 S" i
首先对寄存器地址、波特率、数据位、停止位、奇偶校验位进行设置。
/ d# f8 N* X- Cvoid Set()
6 _6 W, m  C# D$ Z/ d6 i& H$ ]{8 ~' v7 F2 i+ c5 }
*SCICCR=0x7; //8 位字符,1 停止位,无校验: x; N- O$ r1 D- E  V
*SCICTL1=0X13; //使能发送和接受! m$ M5 Q* N. n3 u1 L  O$ ?: [
*SCICTL2=0x03; //使能接受和发送中断& `: m3 w4 I. P+ a5 z
*SCIHBAUD=0x02; //波特率=208h,40MHZ. \+ D0 H! C/ T/ p/ F, T% w
*SCILBAUD=0x08; //208h=40*106/(9600*8)-14 }/ P+ u4 D; D" `
*SCICTL1=0x33; //使能发送和接受,复位
6 ]) r% t# d6 C3 l& _( c*SCIPRI=0X60; //SCI 中断(接受和发送中断)为低优先级中断' o) u: f( o& S# y/ p3 B
}/ ~) x8 \0 A3 E$ t5 o
5.2 中断初始化
- v  m6 Y$ Q; h+ Xa)禁止总中断子程序8 P2 B2 j! q+ j) B7 P
void inline disable()
; y7 F0 s5 h" a{* w1 A2 Q0 S- ~# G
asm("setc INTM");' z3 b2 U, d) k
asm("setc SXM");
& w6 g+ W+ {- x$ p9 v( M0 b3 i}4 u! o; h! T9 j8 q
b)使能总中断子程序! E5 t0 ^! u! f( `
void inline enable()
4 L8 B  |# y& v{
9 n$ k  w1 ~( \/ W8 Wasm("clrc INTM") ;; b6 d7 B- S8 b( `( ?; @
}
% z3 I+ S  Z8 E( s% ]/ Bc)中断服务程序
( ]3 Y! A3 ^+ e! j0 Nvoid interrupt uarttr(){9 {: _! g: L: q& C. [' ~0 A
switch (*PVIR){8 X; N3 _) U1 Y$ g- M
//根据中断向量寄存器PVIR 的值区别是接收还是发送中断
& ~0 i1 q; ~, n. b, j) Jcase 6:UartRec();
$ D, D7 L% S. O- e6 f- S% c//如果PVIR=6,则发生了接受中断,执行接受中断服务程序
: M3 E' H/ Q8 ]8 ?; i* m* o3 T}
7 J5 ]; K' R2 ]( }! n}
* ?6 M, X; T2 i7 J$ Zd)当由于干扰而引起其它中断时,中断进入此程序直接返回主程序
5 Y8 [2 [  n- E# S! [5 \void interrupt nothing(){6 g' j/ \+ S; j4 W/ c6 `" I* [  s& n. I
return; }
1 r" M' S* S& L3 r  S# y5.3中断处理
' m) z3 Q( }: M* g! Jvoid UartRec(){9 Y, L& Q" R4 j- u- f2 r' V
unsigned int uwork;
  t6 K+ m6 a& i5 s1 E% _int I, k;2 T3 A: `1 L$ ~2 p" L8 |% Z- J2 x
k=0;- {/ s' m+ C1 W0 n
while(1) {
* T+ k. N2 P! _2 ?* L- N5 fdo{
1 l# I" \; B, Uuwork=(*SCIRXST);
$ b0 n. ]7 D. D8 f}while((uwork&0x40= =0));5 d3 ]& t" e% v9 O$ a2 b
cReceive=(*SCIRXBUF);' t4 A9 [2 R* G; O* r% I
cBuffer[k]= cReceive;
" a4 M1 w  h; I' s' a' gif(cReceive= =’。’) {1 q: q6 N& A( ?* s' G2 i
cBuffer[k+1]=’’;
: r1 U2 x( a- k1 R3 B' g* mnlen=k+1;/ r0 K: _" S1 s5 H; f' u
Set();: ^7 ?- l9 [7 N' s
Break;
: u" D& T! N0 L$ j0 v}& V# R/ ~7 {5 d7 w0 x  K3 t
k++; k%=16;# f& l7 @8 s# b& G9 |
}
' O+ w0 J' \5 _4 s% y}
4 s( q8 C  T' W) a  ^, K# b% g5.4程序初始化* N" g1 o6 J$ D  n
# include "2407c.h"
& B% Q9 x9 s- P//初始化子程序: l; G# w, V8 k0 o  r  V
IniTIal(){. s" z/ i" [- q' l* R
*IFR=0xFFFF; //清除中断标志8 s$ v/ R* E: p0 O0 n+ x
*WDCR=0Xe8; //不使能看门狗
1 K7 ?9 ^2 ?. U! X' [( {*SCSR1=0x81FE; //CLKIN=6M, CLKOUT=24M
2 G# F+ N. |, V- L) X3 O$ e: \*MCRA=0x3; //use SCITXD, SCIRXD3 K9 D7 H& k. Y% H" \
*PADATDIR=0x100; //设置ADIR 为输出口3 c( X" \2 q4 m+ u: s" F
}
& X# A2 q) b3 ]" t8 @# f% @5.5主程序
7 l- W/ S" F3 H- N0 u9 \; {Main(){% N2 A- d! B9 H, S2 M3 D
Set();1 K* `/ m+ o$ m  P
Disable(); //屏蔽所有中断
, J3 d9 j. c3 @: l2 _+ H4 uIniTIal(); //系统初始化
2 L/ x% z0 }% r+ T/ T0 H; H% iEnable(); //使能总中断0 N: w. p7 H# C8 m1 b* N) Q
While(1) {
% z$ ~( C  Z! U" r# z1 y7 G/ c' bunsigned int uwork;
& w/ |; o' V6 v8 XFor (inTI=0;I《10;I++){
/ S, D+ y1 Q! z6 o8 W; MDo{
6 b( ]$ v0 }+ zUwork=(*SCICTL2);
$ P  N% [7 k3 m; ]}while (uwork&0x0c0!=0x0c0);0 G; M; G* h. a' a! ]% u2 {
(*SCITXBUF)=cAnswer[i];8 B: L- a( h5 D+ p* W; P7 d0 B
*IFR=0x0010;2 D! ^6 h7 i# \1 d- s4 Y, v
Enable();
" a( ^7 {' O- p7 k& T! ?}, U& y/ v+ p; Y* i  a
Do{
# u/ e& d* D1 E0 {( Y4 CUwork=(*SCICTL2);7 E  ?* j" c0 q' C- _
}while (uwork&0x0c0!=0x0c0);
7 C7 s8 }9 N0 x3 G  o(*SCITXBUF)=‘“’;1 K7 _4 g9 M8 T6 ~
}1 g9 u; I1 ?9 r- x1 {7 D0 E
For(;;){
9 U! [) E* D0 Q1 V' V# R
0 t+ x# T8 {9 I4 G3 R}% E5 [' K$ z" F2 _# r) r
}
" O. W3 C' [! l$ F$ O2 }. M6结束语& d, S7 d, T9 x6 [/ ~" I
利用DSP 的串行通信接口(SCI)和功能强大的开发环境CCS,可以方便地实现DSP 与PC 机间的单机或多机串行通信。通过实际运行表明,利用TMS320 的SCI 模块实现DSP 之间或与PC 机的通信,与传统的C51 单片机相比,其电路简单、设置灵活、运行速度快,性能可靠稳定。3 \0 h# |  c/ j2 m; h% A/ D
  • TA的每日心情
    开心
    2023-1-3 15:10
  • 签到天数: 2 天

    [LV.1]初来乍到

    2#
    发表于 2020-11-2 13:06 | 只看该作者
    DSP 既是Digital Signal Pricessing 的缩写,也是Digital Signal Pricessor 的缩写
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-6-26 13:28 , Processed in 0.078125 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表