📄 spi.c
字号:
#include <MSP430x12x2.h>
#include "SPI.h"
#include "define.h"
//*************************************************************//
//SPI的初始化;
//SPI的接收采用中断方式,发送采用查询方式;
/**************************************************************/
void Init_SPI(void)
{
WDTCTL =WDTPW+WDTHOLD; //关闭看门狗;
ME2 |=USPIE0; //SPI0模块使能;
U0CTL =0X00; //寄存器的内容清零;
U0CTL =CHAR+SYNC+MM+SWRST; //8位SPI,主模式;
U0TCTL =0X00; //寄存器的内容清零;
U0TCTL =SSEL1+SSEL0+STC; //时钟源为SMCLK,3线模式;
UBR0_0 =0X02;
UBR1_0 =0X00; //传输的时钟为SMCLK/4;
UMCTL_0=0X00; //调整寄存器没有调整;
U0CTL &= ~SWRST; //SPI使能;
IE1 &=!UTXIE0; //发送中断关闭;
IE1 |=URXIE0; //接收中断使能;
_EINT(); //使能总中断;
}
/**************************************************************/
//用SPI接口向Zigbee的一个地址发送一个或者多个字节的数据;
//addr表示发送数据的目的地址;
//n表示发送数据的字节数;
//*data表示存放发送数据的数组的指针;
//发送的时候先发高8位
/**************************************************************/
void SPI_Write(uchar addr,uchar n,uchar *data)
{
uchar temp;
TXBUF0= addr&0x3f; //发送header;
for(temp=0;temp<n;n++)
{
//查IFG1与IFG2的区别?
TXBUF0= data[temp]; //发送第一个字节;
while ((IFG1 & UTXIFG0) == 0); //检查发送的数据是否准备好;
}
}
/**************************************************************/
/*************从zigbee的某一地址中读出数据*************/
//数据的读取采用中断方式;
//addr表示要读取的地址;
//读取的数据存放在Read_Data[2]中;
/**************************************************************/
void SPI_Read(uchar addr)
{
uchar temp;
Rece_Len=2; //读取数据的个数;
TXBUF0=addr&0x3f|0x80; //发送header;
while ((IFG1 & UTXIFG0) == 0);
for(temp=0;temp<Rece_Len;Rece_Len++)
{
TXBUF0=addr; //发送地址信息;
while ((IFG2 & UTXIFG0) == 0);
}
while(1)
{
if(Rece_Complete)
{
Rece_Complete=0;
break;
}
}
}
/**************************************************************/
//SPI接收中断服务程序;
/**************************************************************/
#pragma vector=USART0RX_VECTOR
__interrupt void SPI0_rx (void)
{
while ((IFG2 & UTXIFG0) == 0); // 检查数据是否发送完成;
Rece_buf[Rece_buf_Len]=RXBUF0;
Rece_buf_Len++;
if(Rece_buf_Len>=Rece_Len) // 数据接收完成,长度清零;接收完成标志为置1.
{
Rece_Len=0;
Rece_buf_Len=0;
Rece_Complete=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -