新闻中心

EEPW首页>嵌入式系统>设计应用> MCU与DSP的SPI通信设计

MCU与DSP的SPI通信设计

作者: 时间:2012-04-13 来源:网络 收藏

2 软件设计

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

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

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;k6;k++) {//传输的数据个数

P5OUT = 0x1f;

while((U1IFG UTXIFG1) != UTXIFG1);

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

while((UTCTL10x01)==0);//发送完成

delay(10);

P5OUT = 0x2f;

}

2.4 DSP接收数据

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

MCU与DSP的SPI通信设计

图2 DSP中断程序流程



关键词:MCUDSP

评论


相关推荐

技术专区

关闭