文档库 最新最全的文档下载
当前位置:文档库 › TMS320系列DSP与C51单片机之间一种全新串行通信模式

TMS320系列DSP与C51单片机之间一种全新串行通信模式

TMS320系列DSP与C51单片机之间一种全新串行通信模式
TMS320系列DSP与C51单片机之间一种全新串行通信模式

TMS320系列DSP与C51单片机之间一种全新串行通信模式

霍 毅 杨 苹

华南理工大学电力学院, 广州510640

摘要单片机与DSP之间通信问题一直是大家关注得焦点,目前已出现的不少解决方案但大多针对于5V工作电压的DSP系统,笔者对诸方案进行详细比较分析,发现多数并未从根本上解决不同系统之间通信的电平转换问题,面对工作电压并不唯一的DSP芯片系列,在此提出一种全新的串行通信模式,经济有效地解决了通信中电平转换问题可靠地实现数据交换,并且在实际开发的直流无刷电机变频器人机界面与控制核心TMS320LF2407 DSP之间串行通信中验证了其可行性。

关键词串行通信,单片机,TMS320LF2407

A new serial communication method between TMS320 DSP and C51 MCU

Huo Yi Yang Ping

Electric Power College ,South China University of Technology,Guangzhou, 510640 Abstract:The problem of communication between DSP and MCU has been focused on for many years. Lots of solutions have been proposalled by now, but most of them just suit to the DSP of 5V operation voltage and haven’t settled the voltage-converting problem in deed .The solutions appeared will be discussed in detail in this paper. We will proposal a new serial-communication method at the end, which has resolved the voltage-converting problem effectively. The feasibility of this method has been proved by practice already.

Key words: serial communication MCU TMS320LF2407

1.引言

DSP采用改进的哈佛总线结构,流水线工作方式和硬件乘法器等技术,具有很强的数据处理能力。一个实时控制系统一般需要完成数据采集、模/ 数(数/模)转换、数据计算、键盘输入、实时过程控制以及显示等任务,仅依靠一片DSP来完成这些工作势必会大大延长系统对控制对象的控制周期,从而影响整个系统的性能。所以在实际工程中我们常添加一个单片机,负责数据采集、模/ 数转换、过程控制以及人机接口等任务,使DSP 专注于系统控制算法的实现,充分利用它的高速数据处理能力。如何处理好单片机与DSP之间的数据通信问题就值得大家的认真探讨。本文先就已出现的几种串行通信方案进行介绍比较分析,最后提出一种全新的且经济可靠的串行通信模式。

2.常用DSP与单片机之间串行通信

此处以AT89C51系统与TMS320F240系统之间进行异步串行通讯为例,该电路符合RS-485总线接口标准。

图1 常用串行通信接口电路

其接口电路(如图1)中采用的接口芯片是Maxim公司的。MAX488收发器采用平衡收发和差分接受,具有抑制共模干扰的能力,适合远距离通信,通信距离可达到几十米到上千米。该芯片同时具有抗静电冲击能力,不需外接暂态抑制二极管和高容性负载。

该方案利用AT89C51单片机所具有的串行通信引脚RXD(串行数据接受端)和引脚TXD(串行数据发送端)与TMS320F240数字信号处理器所具有的两个引脚

SCIRXD(串行数据接受端)和SCITXD(串行数据发送

端)进行串行通讯。

在串行异步通信的方式中,要求收、发双方必须首先进行初始化设置,即通过程序规定字符传输的帧格式和相同的波特率。

该方案硬件接口电路较为简单,但用到了两片MAX488芯片,成本较高.并且只能用于DSP与单片机为同一工作电压(此处为5V)的场合,无法实现电平转换与电路隔离。但具有抗干扰能力强,适合较远距离系统之间的数据交换。

3.单片机I/O端口模拟DSP的SPI端口进行通信

图 2

通常DSP都具有高速同步串行I/O端口SPI。SPI是在真正同步方式下工作,即要求DSP与MCU在同一时钟下工作。SPI通过一根时钟线将主机和从机严格同步,因此它的串行数据交换不需要增加起始位、停止位等用于同步的格式位,直接将数据写入到主机的SPI模式发送数据寄存器。在同一同步时钟和同步帧的节拍下主、从机通过寄存器将数据一位一位接收或者发送。由于51系列的单片机不带SPI串行总线接口,所以使用软件方法来模拟SPI的串行时钟、数据输人和数据输出。这里我们通过编程用单片机的I/O口来模拟SPI端口,同时设置DSP为从工作方式,单片机为主工作方式,且同步时钟由主机提供,就可以实现其之间的通信(如图2所示)。

DSP为从工作方式,其SPISIMO为收数据口,SPISOMI为发送数据口,SPICLK为串行外设同步时钟接口,时钟由主机提供。AT89C51的为主工作方式,TXD用于产生同步时钟,RXD 则和SPISIMO、SPISOMI连在一起,进行数据传输。为避免在RXD上传输的数据冲突,采用了两片8位双向三态缓冲芯片74LS245来控制RXD上的数据方向。

用到两片74LS245,成本较高,编程复杂,仅适用与DSP系统工作电压同样为5V的通信场合,未解决电平转换问题且不能用于多机通信。 4.全新的利用快速光耦实现串行通信模式

在庞大的DSP芯片系列中,其工作电压并不唯一。电机控制主流芯片中有以TMS320F240为代表的5V工作电压,同样也存在着以TMS320LF2407为代表的3.3V 工作电压。由于TMS320LF2407与TMS320F240相比,具有了一些新的技术优点:采用了高性能静态CMOS技术,供电电压降低为3.3V,减小了功耗,同时指令执行周期缩短到33ns,从而提高了控制器的实时处理能力等等,其事件管理器模块的强大功能在交流感应电机、无刷直流电机、开关磁阻电机、步进电机、多级电机和逆变器的控制方面得到广泛运用。但由于单片机为5V电压工作系统,在通信的中我们不得不进行电平转换。就笔者目前所了解的情况,大多采用电平转换芯片,如采用74LVC164244实现3.3V与5V电平的转换等。采用转换芯片使得外围电路复杂且成本较高,且目前的可供选择的合适芯片也不多。如何有效、便捷的解决DSP与单片机之间通信的电平转换?在这里我们采用快速光耦来搭建之间通信接口电路,很好地实现3.3V到5V的电平转换与电路隔离,性价比高的同时通信质量也得到了保证。

项目中采用的快速光耦PC817,其具有高的电流转换率(CTR:MIN.50%);高的输入输出隔离电压

rms

iso

V

V5000

:)等优点,最高关断频率可达80KHz。

即使串行通信波特率高达38400bsp都可以稳定工作。

利用PC817配合合适上拉电阻搭建的TMS320LF2407与AT89C51之间串行通信的硬件接口电路如下图(图3

)所示。

图3

上图中左侧SCIRXD、SCITXD分别为TMS320LF2407串行数据的输入、输出端,该DSP芯片工作电压为3.3V。右侧RXD、TXD分别为AT89C51串行数据的输入、输出端,该MCU的工作电压为5V。利用快速光耦元件(PC817),就可以轻松实现电路的隔离、电平转换,进行串行通信。

具体过程如下:当数据由AT89C51到

TMS320LF2407,TXD端输出低电平“0”时,发光二极管导通,通过快速光耦作用使得PC817的引脚3与引脚4立即导通,TMS320LF2407的SCIRXD端直接接到3.3GND,SCIRXD状态为低电平“0”,这样信号“0”就由TXD传到了SCIRXD; TXD端输出为高电平“1”时,发光二极管被截止,故PC817引脚3与引脚4断开,SCIRXD通过电阻直接接到+3.3V,状态为高电平“1”,同理信号“1”就由TXD传到了SCIRXD。当数据由TMS320LF2407到AT89C51时,如法炮制。

在此硬件连接的基础上,实现TMS320LF2407与AT89C51串行通信的各自部分源程序如下(规定波特率为4800bps且均采用中断方式接受、发送数据):

TMS320LF2407初始化程序:

void SCI_initial()

{

asm (" SETC INTM "); //禁止中断

asm (" SETC SXM "); //符号位扩展有效

*IFR=0xffff; //清楚全部中断标志

*SCSR1=0x83fe; //DSP主频设置30M

*WDCR=0x0e8; //不使能看门狗

*SCICCR=0x7; //规定帧格式,数据传输模式

*SCICTL1=0x13; //发送/接受使能

*SCICTL2=0x3; //使能接受和发送中断

*SCIHBAUD=0x03;

*SCILBAUD=0x0c; //波特率=4800bps

*SCICTL1=0x33; //使SCI脱离复位状态

*SCIPRI=0x60; //接受、发送均为低优先级中断

*MCRA=0x3; //使能SCIRXD,SCITXD

*PADATDIR=0x100;

*IMR=0x10; //使能低优先级模式

asm(" CLRC INTM "); //使能总中断

}

TMS320LF2407中断服务程序:

void interrupt sci()

{

switch(*PIVR)

{

case 6:rec(); break;

case 7:sent();break;

}

}

AT89C51 初始化程序:

void COM_ initial()

{ TMOD = 0x20; //定时器T1使用工作方式2

TH1 = 244; //波特率4800bps

TL1 = 244;

TR1 = 1; //开始计时

PCON = 0x80; //SMOD = 1

CON = 0x50; //工作方式1,允许接收

ES = 1; //开串口中断

EA = 1; //允许中断

TI = 0; //发送中断标志清“0”

RI = 0; //接受中断标志清“0”

}

AT89C51 中断服务程序:

void serial_int() interrupt 4 using 2

{

uint n;

if(TI == 1) //发送中断

{

TI = 0; //清发送标志位

SBUF=Send[n]; //发送数据

}

if(RI == 1) // 接受中断

{

Receive[n]=SBUF; //接收数据

RI = 0; //清接收标志位

}

}

值得注意的是:当串行通信选择不同的波特率时,只需适当调整R1、R2、R3和R4上拉电阻的阻值,以使得光耦工作稳定。根据实际经验,波特率较大时应该适当下调上拉电阻阻值。

此方案已经在笔者从事开发的直流无刷电机变频器人机界面与控制核心DSP之间串行通信中得到了验证和运用,实践证明其具有可靠的通信质量,可实现多机通信,强大的性价比优势,相信会在其他的场合得到更加广泛运用。

参考文献

[1] 苏凯,刘庆国,陈国.MCS-51系列单片机系统原理与设

计.冶金工业出版社,2003.

[2] 汪进进,苏建徽,徐科军,赵为.DSP与单片机之间串行通

信的实现[J].电子技术,2002(2)

[3] 张锐.一种通过SPI接口协议实现DSP与其它设备通信

的方法[J].电子工程师,2003,1(3)

[4] 舒忠林,曾国宏.DSP与单片机的一种高速通信实现方案

[J].今日电子,2003(9);

51单片机中断系统详解

的定时器中断后便认为是1s,这样便可精确控制定时时间啦。要计50000个数时,TH0和TL0中应该装入的总数是65536-50000=15536.,把15536对256求模:15536/256=60装入TH0中,把15536对256求余:15536/256=176装入TL0中。 以上就是定时器初值的计算法,总结后得出如下结论:当用定时器的方式1时,设机器周期为T CY,定时器产生一次中断的时间为t,那么需要计数的个数为N=t/T CY ,装入THX和TLX中的数分别为: THX=(65536-N)/256 , TLX=(65536-N)%256 中断服务程序的写法 void 函数名()interrupt 中断号using 工作组 { 中断服务程序内容 } 在写单片机的定时器程序时,在程序开始处需要对定时器及中断寄存器做初始化设置,通常定时器初始化过程如下: (1)对TMOD赋值,以确定T0和 T1的工作方式。 (2)计算初值,并将初值写入TH0、TL0或TH1、TL1。 (3)中断方式时,则对IE赋值,开放中断。 (4)使TR0和TR1置位,启动定时器/计数器定时或计数。 例:利用定时器0工作方式1,实现一个发光管以1s亮灭闪烁。 程序代码如下: #include #define uchar unsigned char #define uint unsigned int sbit led1=P1^0; uchar num; void main() { TMOD=0x01; //设置定时器0位工作模式1(M1,M0位0,1) TH0=(65536-45872)/256; //装初值11.0592M晶振定时50ms数为45872 TL0=(65536-45872)%256; EA=1; //开总中断 ET0=1; //开定时器0中断 TR0=1; //启动定时器0 while(1) { if(num==20) //如果到了20次,说明1秒时间 { led1=~led1; //让发光管状态取反 num=0; } } } void T0_time()interrupt 1

51单片机中断系统程序实例

51单片机中断系统程序实例(STC89C52RC) 51单片机有了中断,在程序设计中就可以做到,在做某件事的过程中,停下来先去响应中断,做别的事情,做好别的事情再继续原来的事情。中断优先级是可以给要做的事情排序。 单片机的学习不难,只要掌握学习方法,学起来并不难。什么是好的学习方法呢,一定要掌握二个要点: 1. 要知道寄存器的英文全拼,比如IE = interrupt中断 不知道全拼,要去猜,去查。这样就可以理解为什么是这个名称,理解了以后就不用记忆了。 2. 每个知识点要有形像的出处 比如看到TF0,脑子里马上要形像地定位到TCON寄存器的某位 看到ET0, 马上要形像地定位到IE寄存器的第2位 https://www.wendangku.net/doc/912952644.html,/tuenhai/独家揭秘:形像是记忆的最大技巧。当人眼看到某个图时,是把视觉信号转化成电信号,再转化成人能理解的形像。当我们回忆形像时,就是在重新检索原先那个视觉信号,并放大。在学习过程中,不断练习检索、放大信号,我们的学习能力就会越来越强。 写程序代码时,也要把尽量把每行代码形像化。 51单片机内中断源 8051有五个中断源,有两个优先级。与中断系统有关的特殊功能寄存器有IE(中断允许寄存器)、IP(中断优先级控制寄存器)、中断源控制寄存器(如TCON、SCON的有关位)。51单片机的中断系统结构如下图(注意,IF0应为TF0):

8052有6个中断源,它比8051多一个定时器/计数器T2中断源。 8051五个中断源分别是: (1)51单片机外部中断源 8051有两个外部中断源,分别是INT0和INT1,分别从P3.2和P3.3两个引脚引入中断请求信号,两个中断源的中断触发允许由TCON的低4位控制,TCON的高4位控制运行和溢出标志。 INT0也就是Interrupt 0。在这里应该看一下你的51单片机开发板的电路原理图。离开形像的记忆是没有意义的。读到上面这句,你应该回忆起原理图上的连接。任何记忆都转化为形像,这是学习的根本原理,我们通过学习单片机要学会这种学习方法,会让你一辈子受益无穷。 TCON的结构如下图: (a)定时器T0的运行控制位TR0

AT89C51单片机中断系统

第 5 章 AT89C51单片机中断系统 难点 ?中断优先级控制原则 ?中断响应过程 要求 掌握: ?中断控制的专用寄存器 ?中断响应过程 了解: ?中断的概念 ?单片机的单步执行方式 5.1 中断的基本概念 5.2 MCS-51 单片机的中断系统 5.3 中断系统的应用举例 5.1 中断的基本概念 在CPU 与外设交换信息时,存在着一个快速的CPU 与慢速的外设之间的矛盾。为解决这个问题,发展了中断的概念。 单片机在某一时刻只能处理一个任务,当多个任务同时要求单片机处理时,这一要求应该怎么实现呢?通过中断可以实现多个任务的资源共享。 中断现象在现实生活中也会经常遇到,例如,你在看书——手机响了——你在书上作个记号——你接通电话和对方聊天——谈话结束——从书上的记号处继续看书。这就是一个中断过程。通过中断,你一个人在一特定的时刻,同时完成了看书和打电话两件事情。用计算机语言来描述,所谓的中断就是,当CPU 正在处理某项事务的时候,如果外界或者内部发生了紧急事件,要求CPU 暂停正在处理工作而去处理这个紧急事件,待处理完后,再回到原来中断的地方,继续执行原来被中断的程序,这个过程称作中断。 从中断的定义我们可以看到中断应具备中断源、中断响应、中断返回这样三个要素。中断源发出中断请求,单片机对中断请求进行响应,当中断响应完成后应进行中断返回,返回被中断的地方继续执行原来被中断的程序。 5.2 MCS-51单片机的中断系统 5.2.1 MCS-51单片机的中断源 MCS-51单片机的中断源共有两类,它们分别是:外部中断和内部中断 1. 外部中断源 ●外部中断0( ):来自P3.2引脚,采集到低电平或者下降沿时,产生中断请求。 ●外部中断1( ):来自P3.3引脚,采集到低电平或者下降沿时,产生中断请求。 2. 内部中断源 ●定时器∕计数器0(T ):定时功能时,计数脉冲来自片内;计数功能时,计数脉冲来自片外P3.4引 脚。发生溢出时,产生中断请求。 ●定时器∕计数器1(T ):定时功能时,计数脉冲来自片内;计数功能时,计数脉冲来自片外P3.5引 1 脚。发生溢出时,产生中断请求。 ●串行口:为完成串行数据传送而设置。单片机完成接受或发送一组数据时,产生中断请求。 5.2.2 中断控制的专用寄存器 MCS-51单片机为用户提供了四个专用寄存器,来控制单片机的中断系统。

相关文档
相关文档 最新文档