MCU与DSP的SPI通信设计

发布者:幸福满溢最新更新时间:2012-04-13 来源: 单片机与嵌入式系统应用关键字:MCU  DSP  SPI通信 手机看文章 扫描二维码
随时随地手机看文章

引言

现今的工控系统中,为了提高系统的实时性和适用性,一般采用DSP来完成核心算法与控制,而使用MCU来实现人机对话,以实现实时控制功能。这样,DSP和MCU需要一种高效的数据总线来完成它们之间的大量数据传送。SPI总线由于占用的接口线少,通信效率高,并且大部分处理器芯片都支持,因而是一种理想的设计方案。

针对交流伺服系统实际使用的要求,采用TI公司的高性能DSP控制器TMS320LF2407A(简称“2407A”)作为控制核心;选用TI公司生产的MSP430系列单片机中的MSP430F149作为人机界面的控制芯片,来实现按键和数据采集以及显示的功能;采用SPI串口通信实现单片机与DSP之间的数据传输。

1 系统硬件的构成

1.1 MSP430

MSP430系列单片机是TI公司近几年开发的新一代单片机。该单片机在设计上打破常规采用了全新的概念,其突出的优点是低电源电压、超低功耗、多种功能。由于其功能远远超过其他系列单片机的功能,因而又称为“混合型单片机”。MSP430具有非常高的集成度,单片集成了多通道的12位A/D转换、片内精密比较器、多个具有PWM功能的定时器、片内USART、看门狗定时器、片内数控振荡器、大量的I/O端口以及大容量的片内存储器。同时,MSP430F149是Flash存储器型单片机,具有良好的仿真开发技术,设置有JTAG仿真接口和高级语言编译器。在系统支持软件下,在线实现对目标系统的硬件调试及软件开发,包括汇编语言、C语言、连接及动态调试,具有单步、多断点和跟踪,并且开放全部存储器、寄存器,可以方便、可靠地对系统进行软硬件开发[12]。

基于以上特点,该系列单片机在便携式仪表、智能传感器、实用检测仪器、电机控制、家庭自动化等领域的应用较为普遍。

1.2 TMS320LF2407A

2407A是TI公司为满足工业控制应用,尤其是电机控制而设计的。把一个高性能的 DSP核和许多外围设备集成到单片内。2407A的40 MIPS的处理速度可以满足快速地处理大量数据和算法的需要。

2407A具有丰富的外设模块: 3K字的Flash程序存储器、1.5K字的数据/程序RAM、544字双口RAM(DARAM)和2K字的单口RAM(SARAM)、2个事件管理器EVA和EVB、16通道输入的A/D转换器,具有看门狗定时器模块(WDT)、串行通信接口(SCI)、16位的串行外设接口模块(SPI)、控制器局域网络(CAN)2.0B模块、基于锁相环的时钟发生器、高达40个可单独编程或复用的通用输入/输出引脚、5个外部中断。由此可以看出,2407A确实有着很强的实时处理能力,不失为高性能伺服驱动控制的理想器件之一[3]。

1.3 硬件接口设计与SPI通信的实现

SPI通信设备在硬件连接上只需要将主机的发送与从机的接收相连,将主机的接收与从机的发送相连,将主机产生的时钟信号输出至从机的时钟引脚上。单片机与外设的硬件连接如图1所示。

图1 MSP430F149与DSP的接口连接电路

单片机MSP430F149作为串行通信的主机, DSP 2407A则作为从机(slave)。其中,SPICLK为SPI时钟引脚, SPISIMO为SPI从动输入/主动输出,SPISOMI为从动输出/主动输入,SPISTE为从动发送使能。

从图1可以看出,SPI通过一根时钟引线将主机和从机同步,因此,它的串行数据交换不需要增加起始位、停止位等用于同步的格式位,直接将要传送的数据写入主机的SPI发送数据寄存器。这个写入过程自动启动主机的发送过程,即在同步时钟SPICLK的节拍下把SPITXBUF的内容一位一位地移到引脚SPISIMO;对于从机,同样在SPICLK的节拍下将出现在引脚SPISIMO上的数据一位一位地移到从机的移位寄存器,当接收完一个完整的数据块后,设置中断标志通知从机这个数据块已接收完毕,并同时将移位寄存器接收到的内容复制到从机的SPI接收数据寄存器SPIRXBUF。可以看出,用户编程只需在发送数据时写数据到SPI发送数据寄存器,在接收数据时读SPI接收数据寄存器,其余的工作都由SPI模块自动完成[4]。[page]

2 软件设计

MSP430F149和DSP都允许用户用C语言和汇编语言进行编程。系统中DSP对电机实现实时控制,对运行速度要求严格,所以程序采用汇编语言实现。MSP430实现按键显示、数据管理和指令传输等功能,对运行速度要求不高,所以采用C语言实现。

软件设计的主要任务是:初始化相应的寄存器;单片机在相应的界面发送数据;DSP及时接收到达串口的数据,识别并保存数据。

2.1 通信协议的设置

两个设备之间要实现相互通信,首先必须规定用以传输数据的协议。一般来说,主机发送命令和配置信息给从机,而从机则向主机发送反馈信息。系统主要实现的是单片机向DSP发送数据信息,单片机首先发送指令数据表示主机发送数据的过程开始。如果发送的是0,则标志着该过程的开始。为了避免误操作指令数据发送两次,DSP接收的两个数据都是0时进行相应的操作,否则重新传输指令数据。然后把单片机需要传输的数据存放在一个数组里面依次传送,比如要传输3个数据,则定义数组a[0]和a[1]存放指令数据,a[2]到a[4]存放需要传送的数组。

2.2 串行口的初始化

单片机的SPI初始化包括:把相应的I/O口配置成具有SPI特殊功能的接口,时钟模式的选定,波特率的选择,发送接收数据长度的选择,内部相对应的时钟使能。所有设置都是通过设计相对应的SPI控制寄存器实现的[5]。

初始化程序如下:

WDTCTL=WDTPW+WDTHOLD;//关闭看门狗

BCSCTL1 = RSEL0 + RSEL1 + RSEL2; // XT2on

BCSCTL2 = SELM1 + SELS;//选择高速晶体振荡器作为时钟源

UCTL1=CHAR + SYNC + MM + SWRST;//SPIZ主模式8位数据,单片机作为主动模式

UTCTL1=STC+SSEL1+CKPL ;//数据在下降沿输出,系统主时钟,三线模式

UBR01=0x02;

UBR11=0x00;//波特率设为fclk/2

UMCTL1=0x00;

ME2=USPIE1;//模块使能2

P5SEL|=0x0F;//低4位为模块端口功能

P5OUT|=0xf0;

UCTL1&= ~SWRST;//复位结束

2407A的SPI初始化与单片机的初始化相类似,但是DSP作为从器件,所以其波特率由主器件决定不需要再进行设计。

2.3 MSP430发送数据

系统具有薄膜按键和液晶显示,可以方便地在需要的时候发送数据。比如,在设计完参数后就会出现一个选择界面,让操作者选择是进行参数保存、参数备份还是传递参数给DSP,操作者可以根据自己不同的需要选择相应的功能。如果选择参数传递功能,则单片机会跳到相应的程序段执行参数传递的任务。发送数据程序如下:

P5OUT &= 0x1f;//片选DSP芯片

while((U1IFG & UTXIFG1) != UTXIFG1);

for(k=0;k<6;k++) {//传输的数据个数

P5OUT &= 0x1f;

while((U1IFG & UTXIFG1) != UTXIFG1);

TXBUF1=a[k];//发送数据

while((UTCTL1&0x01)==0);//发送完成

delay(10);

P5OUT &= 0x2f;

}

2.4 DSP接收数据

DSP接收单片机发送过来的数据是通过中断方式实现的,每传输一个数据就发生一次中断。主程序完成对DSP的初始化后进入等待状态,一旦接收到单片机的中断信号,DSP就进入中断服务子程序,将接收到的数据存放在70H开始的存储单元中。当所有数据传输完成后,将这些数据赋给相应的变量。这里要注意的是,DSP的SPIRXBUF是16位,而单片机发送的数据是8位,所以在DSP接收到数据以后需要做处理,把高8位屏蔽掉。可以通过与00FF相与来达到这个目的。中断程序流程如图2所示。

图2 DSP中断程序流程[page]

中断程序如下:

LDP #6

LACC K;K=K+1

ADD #1

SACL K

MAR *,AR2;AR2为存储单元地址指针

LDP #DP_PF1

LACC SPIRXBUF

AND #00FFH;高位屏蔽掉

SACL *+

LDP #6

LACC K

SUB #1;判断是否为指令数据

BCND L1,NEQ

LDP #0

LACC #70H

SUB #0

BCND L3,NEQ;不是0则跳到L3

BL2;是0则跳到L2

L1: …;判断是否是第2个数据

L4: LACCK;判断数据是否传送完毕

SUB #05H

BCND L5,EQ

BL2

L5:LDP #0;数据全部发送完毕

LACC 72H

LDP #6

SACL SPEED;赋值给相应变量

……

L3: SPLK K,0;K=0

LDP #0

LAR AR2,#70H;地址指针指回70H

L2: CLRC INTM;开中断

RET

3 结论

实验证明,应用SPI通信进行MSP430单片机与DSP之间的串口通信完全满足伺服系统实时性的要求。同时,由于SPI接口功能比较完善,通信协议清晰,时序简单,无须外加其他元器件即可方便地实现DSP与主机之间数据的串行通信,简化了系统设计,增强系统的实时处理能力和应用范围。结构灵活性强,便于扩展,同时减轻了主CPU负担,提高了系统的可靠性。

参考文献

[1] 胡大可.MSP430系列超低功耗16位单片机原理与应用[M].北京:北京航空航天大学出版社,2000.

[2] Texas Instruments.MSP430x1xx Family Users Guide (SLAU049B.pdf),2002.

[3] 刘和平,严利平,张学锋,等.TMS320LF240X DSP结构、原理及应用[M].北京:北京航空航天大学出版社,2002.

[4] 任志斌,车长征.串行外设接口SPI的应用[J] .电子技术应用,2002,29(10):2022.

[5] 魏小龙.MSP430系列单片机接口技术及系统设计实例[M].北京:北京航空航天大学出版社,2002.

关键字:MCU  DSP  SPI通信 引用地址:MCU与DSP的SPI通信设计

上一篇:基于DDS的短波射频频率源设计与实现
下一篇:基于MSP430F41的IC卡式智能水表工作原理

推荐阅读最新更新时间:2024-03-16 12:57

如何计算给单片机寄存器赋的值
在以前的文章中,我提到过,单片机在电学里面,属于很简单的一种器件,外表看,就是一个芯片,长着很多的脚。内部,就是一堆寄存器。不同的单片机,外部表现就是形状和引脚数量和引脚名称可能不一样,内部,就是寄存器名称不一样。 我们要做的,就是写程序控制单片机里面的寄存器,然后通过引脚表现出来完成各种电子产品。 所以,你在看别人写的程序的时候,会经常看到给单片机寄存器赋值的语句。下面就以最简单的控制51单片机引脚高低电平来说明一下。(不要总是存在51单片机已经淘汰的想法,51单片机至今任然是出货量最大的单片机,并且各大公司每年都有新款的51单片机推出,功能越来越强劲,做产品,要选最合适的单片机,而不要总想用牛逼的单片机。) 例如,
[单片机]
如何计算给<font color='red'>单片机</font>寄存器赋的值
如何使用PIC单片机来调试LCD控制器
使用PIC来调试LCD应用可能会有两个方面的问题。第一,LCD控制器会在器件暂停时停止。第二,在PIC16F946/917/916/914/913 MCU上ICD引脚与段共用。 在进行调试时,器件会在断点处和用户按暂停按钮时暂停。如果ICD配置为暂停器件的外设,则LCD控制器将暂停,并向LCD显示屏施加直流电压。 随着时间的推移,直流电压会对显示屏造成损坏:但对于大多数调试情形,不需要考虑这一点。 PIC18F LCD MCU具有一个特性,允许当器件在调试期间暂停时,LCD模块继续工作。对于要在器件暂停时检查显示图像,以及防止在器件暂停很长时间的情况下损坏显示屏.该特性很有用。 PIC16F946/917/916
[单片机]
如何使用PIC<font color='red'>单片机</font>来调试LCD控制器
pic单片机,链接描述文件(*.lkr)含义
结合18f4620.lkr来说明链接描述文件中代码的含义 // $Id: 18f4620.lkr,v 1.3 2004/04/26 18:09:00 curtiss Exp $ // File: 18f4620.lkr // Sample linker script for the PIC18F4620 processor //将当前目录library/object搜索路径,.代表当前目录 LIBPATH . //FILES伪指令指定链接的目标或库文件 //注:可以在一个单独的 FILES 伪指令中指定多个目标或库文件。 FILES c018i.o FILES clib.lib FILES p18f4620.l
[单片机]
PIC单片机数码管计数器示例程序
P IC   单片机   数码管 计数器示例程序 ;**************************************************   __CONFIG 3F39H;设置配置位中振荡方式为XT,其它全部禁止或关闭 ;************************************************ PCL       EQU    02H  ;定义程序计数器低字节寄存器地址 STATUS    EQU    03H  ;定义状态寄存器地址 PORTA     EQU    05H  ;定义RA口数据寄存器地址 PORTB     EQU    06H  ;定义RB口数据寄存器地址 PORTC  
[单片机]
PIC16C54单片机简单例程
Microchip 公司推出的 PIC 系列 8 位单片机是业界率先采用精简指令集计算机 (RISC-Reduced Instruction Set Computer) 结构,具有高性价比的嵌入式控制器。 PIC 系列单片机具有高速度,低工作电压,较大的输入输出直接驱动能力(可直接驱动 LED 负载),低价一次性编程 (OTP-One Time Programmable) 技术,低功耗,小体积等优点。 PIC16C5X 系列是 PIC 系列的基础级产品,现在,介绍该系列的典型芯片 PIC16C54 。 一、 PIC16C54 概述: 1)结构图: 程序存储器EPROM   定
[单片机]
PIC16C54<font color='red'>单片机</font>简单例程
基于嵌入式WinCE与MSP430单片机多串口通信设计
摘要:在远程监控和工业自动化系统中,串口通信因其具有连接简单、使用方便、可靠性高的优点,得到越来越广泛的应用。讨论了采用WinCE嵌入式与MSP430单片机构建串口多机通信系统的问题,在分析了WinCE操作系统与MSP430单片机串口模块特性的基础上,给出了进行串口通信的总体框图,针对实际串口通信存在的问题制定串行通信协议,然后在该系统硬件基础上根据需要定制WinCE系统内核,最后实现串口通信设计。实验结果表明:该系统能够达到多串口通信的要求。 关键词:WinCE;MSP430;TCP/IP;串口通信协议 目前WinCE嵌入式与MSP430单片机在仪器仪表、工业控制、移动设备等有着广泛的应用。在很多复杂的应用场合比如多点温
[工业控制]
基于嵌入式WinCE与MSP430<font color='red'>单片机</font>多串口<font color='red'>通信</font>设计
STMCU应用过程中与电源相关的案例分享
我们在从事STM32单片机的应用开发及调试过程中,往往会碰到各类异常。其中有不少比例的问题跟电源有关。对于一个电子产品而言,电源部分很关键、很重要,但在实际开发调试中,我们偶尔会有意无意的忽视它。这里分享几个实际案例,以加强刺激,加深印象。 毕竟因为电源问题可能导致的异常很多很多,这里分享几个案例算是抛砖引玉,希望大家在调试中对电源方面加以重视。个人认为,往往电源出问题时导致的异常时并不太好分析。多数时候异常表现得更为诡异或没章法。 注:下面提到的案例中异常原因都与电源有关,但并不是说出现类似异常时一定是电源的原因。 下面主要分享五个基于STM32应用的案例。 案例1:STM32芯片的PLL无法正常工作。 有人使用STM3
[单片机]
STMCU应用过程中与电源相关的案例分享
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved