Other Parts Discussed in Thread: MSP430FR2311
您好!
我有一个 SPI 主器件、它通过 SPI 向从器件 MSP430FR2311发送数据。 我能够毫无问题地获得单字节中的数据、但我无法获得多个字节。 我已使用单独的器件验证主器件正在发送正确的数据。 当前我使用 CS 引脚中断、打开 RX 中断、然后在 RX 中断中获取数据。 有一个示例代码用于占用多个字节、但所有这些示例代码都在字节之间休眠、我必须在接收数据时保持正常运行。 我在 RX 中断中尝试了几种方式来接收数据、但我始终会获取垃圾数据或重复数据。
以下是我尝试过的几个代码示例、供参考:
示例1:
#pragma vector=USCI_A0_Vector
_interrupt void USCI_A0_ISR (void)
{
RXBUF[CMD_index]= UCA0RXBUF;
CMD_index++;
if (cmd_index >= RXBuf[0]) //检查所有字节 RX
{
CMD_INDEX = 0;
P1IE |= BIT3; // 启用 CS 线路
UCA0IE = 0; //禁用 USCI_A0 RX 中断
//_bis_SR_register_ON_EXIT (LPM3_BITS | GIE);
}
} //结束 USCI_A0_Vector
示例2:
#pragma vector=USCI_A0_Vector
_interrupt void USCI_A0_ISR (void)
{
RX_COUNT = 0;
开关(RX_COUNT)
{
情况0: // RX 字节1:数据包长度
lengthSPI = UCA0RXBUF;
RX_COUNT += 1;
中断;
情况1: // RX 字节2:校验和
校验和= UCA0RXBUF;
RX_COUNT += 1;
中断;
情况2: // RX 字节3:RTCMOD 低字节
命令= UCA0RXBUF;
RX_COUNT +=1;
中断;
案例3:
增量 High = UCA0RXBUF;
RX_COUNT +=1;
中断;
案例4:
增量低= UCA0RXBUF;
RX_COUNT +=1;
中断;
情况5:
RTCMODHigh = UCA0RXBUF;
RX_COUNT +=1;
中断;
案例6:
RTCMODLOW = UCA0RXBUF;
RX_COUNT +=1;
中断;
}
if (RX_COUNT >= lengthSPI) //检查所有字节 RX
{
RX_COUNT = 0;
P1IE |= BIT3; // 启用 CS 线路
UCA0IE = 0; //禁用 USCI_A0 RX 中断
//_bis_SR_register_ON_EXIT (LPM3_BITS | GIE);
}
} //结束 USCI_A0_Vector
感谢您的帮助!