大家好,
我正在尝试 通过SPI在MSP432 (作为从属设备)和TMS320F2.8027万-C2000启动2000启动板(作为主设备)之间进行通信。
-SPI从机(msp432) 使用4线模式与SPI主机(F2.8027万)进行对话,并 启用从机选择。在代码中,主机将0x81数据传输到从机。 如果从主中继器接收到的数据为0x81,则从中继器将向主中继器发送0x88,否则将发送0xAA。
当我调试代码时,msp432不能接收数据0x81,而是接收虚拟数据0xFF和传输0xFF。当我暂停代码数据在缓冲区中传输时,0xAA是正确的,因为条件不满足。 但在示波器上,它在miso线上显示0xFF。
我要附上一个代码以供参考:-
MSP432P401R (从机):-
静态uint8_t RXDATA = 0;
void InitSPI(void)
{
P10->SEL0 || BIT0 | BIT1 | BIT2 | BIT3;//将4-SPI引脚设置为第二个函数
EUSCI_B3->CTLW0 |= EUSCI_B_CTLW0_SWRST;//将状态机置于复位状态
EUSCI_B3->CTLW0 = EUSCI_B_CTLW0_SWRST |
EUSCI_B_CTLW0_SYNC |//同步模式
EUSCI_B_CTLW0_CKPL |//时钟极性高
EUSCI_B_CTLW0_MSB |// MSB优先
EUSCI_B_CTLW0_MODE_1 |// 4引脚SPI模式
EUSCI_B_CTLW0_STEM;// STE模式选择
EUSCI_B3->CTLW0 |= EUSCI_B_CTLW0_sel__SMCLK;// ACLK
EUSCI_B3->BRW = 0x01;///2,fBitClock = fBRCLK/(UCBRx+1)。
EUSCI_B3->CTLW0 &=~EUSCI_B_CTLW0_SWRST;//初始化USCI状态机
EUSCI_B3->IE |= EUSCI_B_IE_RXIE;//启用USI_B3 RX中断
//在NVIC模块中启用eUSI_B3中断
NVIC->ISER[0]=1<<(EUSIB3_IRQn)和31);
}
// SPI中断服务例程
void EUSCIB3_IRQHandler (void)
{
IF (EUSCI_B3->IFG和EUSCI_B_IFG_RXIFG)
{
// USI_B0 TX缓冲器准备就绪?
while (!(EUSSCI_B3->IFG & EUSCI_B_IFG_TXIFG));
//回显接收到的数据
RXDATA=EUSI_B3->RXBUF;
如果(RXDATA = 0x81)
{
// USI_B0 TX缓冲器准备就绪?
while (!(EUSSCI_B3->IFG & EUSCI_B_IFG_TXIFG));
//回显接收到的数据
EUSCI_B3->TXBUF = 0x88;
}
否则
{
// USI_B0 TX缓冲器准备就绪?
while (!(EUSSCI_B3->IFG & EUSCI_B_IFG_TXIFG));
//回显接收到的数据
EUSCI_B3->TXBUF =0xAA;
}
//清除接收中断标志
EUSCI_B3->IFG &=~EUSCI_B_IFG_RXIFG;
}
}
F2.8027万 (主):-