TI中文支持网
TI专业的中文技术问题搜集分享网站

msp430AFE253的SPI接口 和mcp2515通讯问题

TI工程师:

您好!

我用msp430f2272芯片通过SPI和mcp2515实现通讯,程序运行很好,如下:

 

/******************************************************************

函数名称:UCB0_SPI_Init

函数功能:UCB0初始化

入口参数:BRX —SPI时钟分频值

返回参数:无

函数说明:初始化UCB0模块的SPI模式

默认情况下分频值配置为0X20,即32分频

******************************************************************/

void UCB0_SPI_Init(uint BRX)  

{

      P3DIR |= BIT0;      //P3.0引脚作为片选引脚,控制外设

      P3SEL |= BIT1 + BIT2 + BIT3;     //引脚工作在USCI模式下 

      UCB0CTL0 = UCMST  + UCMSB + UCCKPL; //UCMSB , 3线,8位SPI主机模式,MSB 1st ,0 0 模式

      UCB0CTL1 |= UCSSEL_2;     //SMCLK

      UCB0BR0 = BRX & 0XFF;       //32分频

      UCB0BR1 = BRX >> 8;

      UCB0CTL1 &= ~UCSWRST;     //退出复位

}

/******************************************************************

函数名称:UCB0_SPI_WriteByte

函数功能:通过SPI口主机发送一个字节给从机

入口参数:发出的一个字节

返回参数:读回来的一个字节

函数说明:无

******************************************************************/

uchar UCB0_SPI_WriteByte(uchar data)

{

      while((IFG2 &  BIT3) == 0);        //等待发送缓冲器空

      UCB0TXBUF  = data;

      while((IFG2 &  BIT2) == 0);        //等待接收缓冲器

      return UCB0RXBUF ;

}

/******************************************************************

函数名称:UCB0_SPI_ReadByte

函数功能:主机通过SPI口读一个字节的数据

入口参数:无

返回参数:RX_data

函数说明:无

******************************************************************/

uchar UCB0_SPI_ReadByte(void)

{

        uchar RX_data;

        RX_data = UCB0_SPI_WriteByte(0X00);

        return RX_data;

}

 

/******************************************************************

 

 

 

现在我用msp430AFE253SPI接口和和mcp2515通讯,程序总是不能运行,请帮忙看下msp430AFE253SPI设置是否有问题(加黑部分为需要移植的程序),程序如下:

/******************************************************************

函数名称:UCB0_SPI_Init

函数功能:UCB0初始化

入口参数:BRX —SPI时钟分频值

返回参数:无

函数说明:初始化UCB0模块的SPI模式

默认情况下分频值配置为0X20,即32分频

******************************************************************/

void UCB0_SPI_Init(uint BRX)  

{

     P1DIR |= BIT2;      //P1.2引脚作为片选引脚,控制外设

      P1SEL |= BIT5 + BIT6 + BIT7;     //引脚工作在USCI模式下 

      P1SEL2 = 0x00;

//SPI寄存器配置

U0CTL = SWRST;  // Software reset enable

delay_us(5);

U0CTL = MM+CHAR+ SYNC;  // MASTER  MODE,8-bit,SPI mode

U0TCTL =  STC+CKPL+SSEL1; //3-wire,The inactive state is high,SMCLK

//波特率设置

U0BR0 = BRX & 0XFF;       //32分频

U0BR1 = BRX >> 8;

U0MCTL = 0x000;

ME1 |= USPIE0; // USART0 SPI enable

U0CTL &= ~SWRST; // SPI Software reset DISable

}

 

 

 

/******************************************************************

函数名称:UCB0_SPI_WriteByte

函数功能:通过SPI口主机发送一个字节给从机

入口参数:发出的一个字节

返回参数:读回来的一个字节

函数说明:无

******************************************************************/

uchar UCB0_SPI_WriteByte(uchar data)

{

     while((IFG1 &  BIT7) == 0);        //等待发送缓冲器空,发送中断

      U0TXBUF  = data;

      while((IFG1 &  BIT6) == 0);        //等待接收缓冲器,接收中断

      return U0RXBUF ;

}

/******************************************************************

函数名称:UCB0_SPI_ReadByte

函数功能:主机通过SPI口读一个字节的数据

入口参数:无

返回参数:RX_data

函数说明:无

******************************************************************/

uchar UCB0_SPI_ReadByte(void)

{

        uchar RX_data;

        RX_data = UCB0_SPI_WriteByte(0X00);

        return RX_data;

}

Maka Luo:

会不会是硬件上的问题,软件上没看出有啥问题。

hui li2:

回复 niu niu1:

程序运行正常

赞(0)
未经允许不得转载:TI中文支持网 » msp430AFE253的SPI接口 和mcp2515通讯问题
分享到: 更多 (0)