#include
#include
#include
unsigned char MST_Data;
unsigned char SLV_Data;
/**
* main.c
*
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
P1OUT |= BIT5;
P1DIR |= BIT5;
P1SEL = BIT1 | BIT2 | BIT4;
P1SEL2 = BIT1 | BIT2 | BIT4;
UCA0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC;// 3引脚、8位 SPI 主器件
UCA0CTL1 |= UCSSEL_2;// SMCLK
UCA0BR0 |= 0x02;///2
UCA0BR1 = 0;//
UCA0MCTL = 0;//无调制
UCA0CTL1 &=~UCSWRST;//**初始化 USCI 状态机**
IE2 |= UCA0RXIE;//启用 USCI0 RX 中断
P1OUT &=~BIT4;//现在 SPI 信号已初始化、
P1OUT |= BIT5;//复位从器件
_DELAY_CYCLES (75);//等待从器件初始化
MST_Data = 0x01;//初始化数据值
SLV_Data = 0x00;
UCA0TXBUF = MST_Data;//发送第一个字符
_bis_SR_register (LPM0_bits + GIE);// CPU 关闭、启用中断
}
//测试有效的 RX 和 TX 字符
#pragma vector=USCIAB0RX_vector
_interrupt void USCIA0RX_ISR (void)
{
volatile unsigned int i;
while (!(IFG2 & UCA0TXIFG));// USCI_A0 TX 缓冲器准备就绪?
if (UCA0RXBUF == SLV_Data)//测试正确的字符 RXd
P1OUT |= BIT0;//如果正确,亮起 LED
其他
P1OUT &=~BIT0;//如果不正确,清除 LED
MST_Data++;//递增主值
SLV_Data++;//递增预期从器件值
UCA0TXBUF = MST_Data;//发送下一个值
__DELAY_CYCLES (50);//将传输之间的时间添加到
}//确保从设备可以保持正常运行
因此、我将此 MPU6050加速计作为 MSP430g2553微控制器的 SPI 从器件进行测试、并尝试使用上述代码来测试 SPI 连接。 运行代码时、TX 注册表数据会递增、直至达到某个十六进制限制、但 Rx 注册表不会从0xff 更改。 在这个网站上的论坛帖子中、我发现上面的大多数代码都有一个答案、其中提到从器件返回一个0xff 值作为空闲值、但没有说明发生这种情况时该怎么办。 请提供任何帮助