工具/软件:Code Composer Studio
您好!
我使用 MSP430FR2433作为 SPI 主器件从 SPI 从器件读取数据、从 UCA0RXBUF 获取的值为0x00、这与我从逻辑分析仪观察到的值不匹配。
我将发送16位、第一个8位作为地址(0x06)发送到 SPI 从器件、第二个8位作为0x00的虚拟值。 在逻辑分析仪中、我在 SOMI 上观察到的值是0x52、这是正确的、但在 UCA0RXBUF 中看不到。
请帮助。
#include
unsigned char RXData = 0xFF;
unsigned char TXData;
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
PM5CTL0 &=~LOCKLPM5;//禁用 GPIO 上电默认高阻抗模式
P1DIR |= BIT7;
P1OUT |= BIT7;// CSn
P1SEL0 |= BIT4 | BIT4 | BIT6;//将3-SPI 引脚设置为第二功能
UCA0CTLW0 |= UCSWRST;//**将状态机置于复位状态**
UCA0CTLW0 |= UCMST|UCSYNC|UCCKPL|UCMSB|UCMODE_0;// 3引脚、8位 SPI 主器件
//时钟极性高,MSB
UCA0CTLW0 |= UCSSEL_SMCLK;// SMCLK
UCA0BR0 = 0x01;///2、fBitClock = fBRCLK/(UCBRx+1)。
UCA0BR1 = 0;//
UCA0MCTLW = 0;//无调制
UCA0CTLW0 &=~UCSWRST;//**初始化 USCI 状态机**
UCA0IE |= UCRXIE;
P1OUT &=~BIT7;
P1OUT |= BIT7;
while (1)
{
UCA0IE |= UCTXIE;//启用 TX 中断
P1OUT &=~BIT7;
UCA0TXBUF = 0x06;
while (!(UCA0IFG & UCTXIFG));// USCI_A0 TX 缓冲器准备就绪?
RXData=UCA0RXBUF;//回显接收到的数据
UCA0TXBUF = 0x00;
while (!(UCA0IFG & UCTXIFG));// USCI_A0 TX 缓冲器准备就绪?
RXData=UCA0RXBUF;//回显接收到的数据
_DELAY_CYCLES (5);//下次传输前延迟
P1OUT |= BIT7;
__DELAY_CYCLES (2000);//下次传输前延迟
}
}
