我设置了 SPI -我发送2个字节- 0x0F 和一个虚拟字节。
我读取 RXBUF 并不断返回0xFF。
有人有代码吗?
我使用 TMS320成功地查询传感器。 现在我有一个 MSP430项目、器件没有响应。
///初始化 SPI
UCB0CTL1 |= UCSWRST;//**将状态机置于复位状态**
UCB0CTL0 = UCSYNC + UCMSB + UCMODE_0 + UCMST + UCCKPH;//主器件、同步模式
//时钟极性高、MSB 优先
UCB0CTL1 = UCSSEL_2;//使用 SMCLK
UCB0BR0 = 12;// fSCL = SMCLK/12 =~ 100kHz
UCB0TXBUF = 0x01;
(笑声)
(笑声)
#define SPI_buffer_size 5 /*字节*/
#define SPI_buffer_initial{0x00、0x00、0x00、0x00、0x00}
空 Init_MEMS (空)
{
字 init = 0、BTX、BRX = 0;
BTX = 0xAA0F;// whoami - AA 是虚拟字节
DoSPI_IO (&BTX、&BRX、2);
如果(BRX==0x33)
{
INIT = 1;
}
}
/**
*它通过 SPI 针对给定数量的输入和输出执行数据交换
*@传输缓冲区的 param TX 指针或0。 如果为0、则发送虚拟字节(0x81)
*@param RX 指针到接收缓冲区或0
*@param IOcount 接收和发送字节的总数
*
void DoSPI_IO (bytes* TX、bytes* RX、byte IOcount)
{
字节虚拟= 0x81;
字节 RXCOUNT、TXCOUNT;
RXcount = TXcount = IOcount;
if ((TX =0)&&(RX =0)) return;
P2OUT |= 0x20;//P5.5
P2OUT &=~0x02;// CS 低电平有效
//
//延迟(500);
while (RXcount > 0 || TXcount > 0)
{
while (!(UCB0IFG & UCTXIFG));// USCI_B0 TX 缓冲区准备就绪?
// if (UCB0IFG & UCTXIFG)
{
if (TX = 0 || TXcount = 0)
{
UCB0TXBUF =虚拟;//虚拟写入
}
其他
{
UCB0TXBUF =* TX++;
TXCOUNT--;
}
}
//延迟(20);//将传输之间的时间添加到
//确保从机可以处理信息
while (!(UCB0IFG & UCRXIFG));// USCI_B0 TX 缓冲区准备好了?
// if (UCB0IFG & UCRXIFG)
{
if (RX =0 || RXcount =0)
{
虚拟= UCB0RXBUF;//虚拟读取
}
其他
{
* RX++= UCB0RXBUF;
RXCOUNT--;
}
}
}
while (UCBUSY 和 UCB0STAT);//等待 SPI 不再忙
//虚拟= UCB0RXBUF;//虚拟读取以清空 RX 缓冲区中的任何剩余数据
//
延迟(500);
P2OUT &=~0x20;//P5.5
}



