请教各位老师
我使用msp430f5341搭建加速度计数据采集模块,由于spi四线制存在问题,改选用三线制,手动控制片选端置低,spi选用B0组,P2.7引脚为B0组spi片选,下面是我的读数据过程,0x80为加速度计某个寄存器的地址,希望将读回的数据存在temp中备用。
现在的现象是时钟片选可以看到置低,但是0x80发送到第六位的时候片选就置高了,这是为什么呢?
我的时钟端经过测试没有问题,数据输出端也能发出理想的数值。
我的spi配置程序也附在后面,请您看一下这样有什么不妥吗?
谢谢
while(1)
{
P2OUT = 0x00;
while (!(UCB0IFG&UCTXIFG)); //询问B0TXbuffer 是否准备好
UCB0TXBUF = 0x80; // 把地址写入振动传感器,最高位置1,写好后为0,发送完毕置1
while (!(UCB0IFG&UCTXIFG)); // 看是否发送完毕
while (!(UCB0IFG&UCRXIFG)); // 看RXBUF是否接收完毕
temp = UCB0RXBUF; // TX -> RXed character,发出数据
P2OUT = 0x80;
__delay_cycles(80);
}
spi初始化过程:
P3SEL |= BIT0+BIT1; // P3.0,1,2,选为外围模式。
P3SEL |= BIT2; // P3.2 SPI时钟
UCB0CTL1 |= UCSWRST; // **Put state machine in reset**,软件复位使能,时钟选为SMCLK。 // it is not yet in SPI mode
UCB0CTL1 |= UCSSEL__ACLK; // 时钟选为SMCLK。
UCB0CTL0 |= UCCKPL+UCMSB+UCMST+UCSYNC; // mode1=0x40,3-pin, 8-bit SPI master,片选为低电平有效。
// UCSYNC=1同步模式使能,UCCKPL=1下降沿触发,UCMST=1主模式,UCMSB=1MSB先高后低八位。
P2SEL &= ~BIT7;
P2DIR |= BIT7;
UCB0BR0 = 0x02; // /2,必须倍频,BR0控制低8,BR1控制高8位
UCB0BR1 = 0;
UCB0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCB0IE |= UCRXIE; // Enable USCI_A0 RX interrupt,接收中断使能