历史上的今天
今天是:2025年04月21日(星期一)
2021年04月21日 | MCU与DSP的SPI通信设计
2021-04-21 来源:eefocus
引言
现今的工控系统中,为了提高系统的实时性和适用性,一般采用DSP来完成核心算法与控制,而使用MCU来实现人机对话,以实现实时控制功能。这样,DSP和MCU需要一种高效的数据总线来完成它们之间的大量数据传送。SPI总线由于占用的接口线少,通信效率高,并且大部分处理器芯片都支持,因而是一种理想的设计方案。
针对交流伺服系统实际使用的要求,采用TI公司的高性能DSP控制器TMS320LF2407A(简称“2407A”)作为控制核心;选用TI公司生产的MSP430系列单片机中的MSP430F149作为人机界面的控制芯片,来实现按键和数据采集以及显示的功能;采用SPI串口通信实现单片机与DSP之间的数据传输。
1系统硬件的构成
1.1MSP430
MSP430系列单片机是TI公司近几年开发的新一代单片机。该单片机在设计上打破常规采用了全新的概念,其突出的优点是低电源电压、超低功耗、多种功能。由于其功能远远超过其他系列单片机的功能,因而又称为“混合型单片机”。MSP430具有非常高的集成度,单片集成了多通道的12位A/D转换、片内精密比较器、多个具有PWM功能的定时器、片内USART、看门狗定时器、片内数控振荡器、大量的I/O端口以及大容量的片内存储器。同时,MSP430F149是Flash存储器型单片机,具有良好的仿真开发技术,设置有JTAG仿真接口和高级语言编译器。在系统支持软件下,在线实现对目标系统的硬件调试及软件开发,包括汇编语言、C语言、连接及动态调试,具有单步、多断点和跟踪,并且开放全部存储器、寄存器,可以方便、可靠地对系统进行软硬件开发[12]。
基于以上特点,该系列单片机在便携式仪表、智能传感器、实用检测仪器、电机控制、家庭自动化等领域的应用较为普遍。
1.2TMS320LF2407A
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所示。

图1MSP430F149与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]。
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.3MSP430发送数据
系统具有薄膜按键和液晶显示,可以方便地在需要的时候发送数据。比如,在设计完参数后就会出现一个选择界面,让操作者选择是进行参数保存、参数备份还是传递参数给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.4DSP接收数据
DSP接收单片机发送过来的数据是通过中断方式实现的,每传输一个数据就发生一次中断。主程序完成对DSP的初始化后进入等待状态,一旦接收到单片机的中断信号,DSP就进入中断服务子程序,将接收到的数据存放在70H开始的存储单元中。当所有数据传输完成后,将这些数据赋给相应的变量。这里要注意的是,DSP的SPIRXBUF是16位,而单片机发送的数据是8位,所以在DSP接收到数据以后需要做处理,把高8位屏蔽掉。可以通过与00FF相与来达到这个目的。中断程序流程如图2所示。

图2DSP中断程序流程
中断程序如下:
LDP#6
LACCK;K=K+1
ADD#1
SACLK
MAR*,AR2;AR2为存储单元地址指针
LDP#DP_PF1
LACCSPIRXBUF
AND#00FFH;高位屏蔽掉
SACL*+
LDP#6
LACCK
SUB#1;判断是否为指令数据
BCNDL1,NEQ
LDP#0
LACC#70H
SUB#0
BCNDL3,NEQ;不是0则跳到L3
BL2;是0则跳到L2
L1: …;判断是否是第2个数据
L4: LACCK;判断数据是否传送完毕
SUB#05H
BCNDL5,EQ
BL2
L5:LDP#0;数据全部发送完毕
LACC72H
LDP#6
SACLSPEED;赋值给相应变量
……
L3: SPLKK,0;K=0
LDP#0
LARAR2,#70H;地址指针指回70H
L2: CLRCINTM;开中断
RET
3结论
实验证明,应用SPI通信进行MSP430单片机与DSP之间的串口通信完全满足伺服系统实时性的要求。同时,由于SPI接口功能比较完善,通信协议清晰,时序简单,无须外加其他元器件即可方便地实现DSP与主机之间数据的串行通信,简化了系统设计,增强系统的实时处理能力和应用范围。结构灵活性强,便于扩展,同时减轻了主CPU负担,提高了系统的可靠性。
参考文献
[1] 胡大可.MSP430系列超低功耗16位单片机原理与应用[M].北京:北京航空航天大学出版社,2000.
[2] Texas Instruments.MSP430x1xx Family Users Guide (SLAU049B.pdf),2002.
[3] 刘和平,严利平,张学锋,等.TMS320LF240X DSP结构、原理及应用[M].北京:北京航空航天大学出版社,2002.
[4] 任志斌,车长征.串行外设接口SPI的应用[J] .电子技术应用,2002,29(10):2022.
[5] 魏小龙.MSP430系列单片机接口技术及系统设计实例[M].北京:北京航空航天大学出版社,2002.
朱广斌(硕士研究生),主要研究方向为交流伺服系统。
史海拾趣
|
LPC1000系列ARM 世界上功耗最低的Cortex-M3 CPU LPC1000系列ARM是以第二代Cortex-M3为内核的微控制器,用于处理要求高度集成和低功耗的嵌入式应用。采用3级流水线和哈佛结构,其运行速度高达100MHz,带独立的本地指令和数据总线以及用于外设的 ...… 查看全部问答> |
|
if(down_interruptible(&dev->sem)) return -ERESTARTSYS; 其中dev->sem是用于实现互斥的信号量 请问这两行代码是什么意思?因为down_interruptible正常情况下是返回0的,这里它不是正常返回,到底是因为没能拿到信号量,还是因为 ...… 查看全部问答> |
|
一个简单的上升沿检测代码:reg RS_r1,RS_r2;always @ (posedge CLKIN or posedge RESET) if(RESET) RS_r1 <= 1\'b0; else RS_r1 <= RS ...… 查看全部问答> |
|
用的XS128中心对齐和左对齐比如哪个精度更高一些 极性有区别吗 [ 本帖最后由 50572209 于 2011-3-9 23:13 编辑 ]… 查看全部问答> |
|
在程序中用了sprintf函数后,编译没有错,但下载时出现以下错误提示,求解释。 Error[e104]: Failed to fit all segments into specified ranges. Problem discovered in segment CODE. Unable to place 77 block(s) (0x1cec byte(s) total) in 0x754 byte(s) of memory. The problem occurred while processing the ...… 查看全部问答> |




