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;
}
/******************************************************************
现在我用msp430AFE253的SPI接口和和mcp2515通讯,程序总是不能运行,请帮忙看下msp430AFE253的SPI设置是否有问题(加黑部分为需要移植的程序),程序如下:
/******************************************************************
函数名称: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:
程序运行正常