我的SPI代码是和例程那样配置的,CC430的 USCIB0 4线SPI 配置代码如下:
char UCB0_MasterSPI_init (void)
{
char comres = 0;
// Enable SW reset
UCB0CTL1 = UCSWRST;
// 4-pin, 8-bit SPI master Clock polarity high, MSB
UCB0CTL0 |=UCMST+UCSYNC+UCCKPL+UCMSB+UCMODE0+UCCKPH; //add by jh.du 2014.05.22 spi configuration
// Select SMCLK Clock and hold SW reset
UCB0CTL1 = USCI_B0_CLK;
// set prescaler
UCB0BRW = USCI_B0_BAUD;
// Clear SW reset, resume operation
UCB0CTL1 &= ~UCSWRST;
UCB0IE |= UCRXIE
return(comres);
}
读写的程序如下:
void SPI_Write(unsigned char spi_data)
{
while (!(UCB0IFG&UCTXIFG)); // USCI_B0 TX buffer ready?
UCB0TXBUF =spi_data; // Send first value
// __delay_cycles(40);
}
unsigned char ADXL_Read(unsigned char reg) //ADXL345读取数据
{
while (!(UCB0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?
UCB0TXBUF =reg; // Send next value
return UCB0RXBUF;
}
程序能够进入接收中断,代表收发完成,但是读取的数据总是0,读取ADXL345的ID也是0,这是不正常的正确应该是0Xe5
请指教,谢谢!
kqian0327:
你好,
这个版块是负责MSP430的技术咨询,如果有关于CC430方面的技术问题,请把帖子放到无线部门。
从你的问题来看 ,我建议你检查两个问题:
1.spi时钟设置的多少,是不是太快?
2.spi主从模式是不是设置的一致。