这是切换的函数,单片机准备好发送的数据后切换到Master模式,发送完切换到Slave模式等待应答,超时(200ms)没有收到应答包则重试5,重试5次失败则判定为通信失败。
void set_spi_mode(uint8_t bMaster)
{
bSwitchCnt.bitval.isNeedSwitch = TRUE;
bSwitchCnt.bitval.bTimeOut = 2;
while(SPI_SR & (1 << SPI_BUSY))
{
if(!bSwitchCnt.bitval.isNeedSwitch)
break ;
}
SPI_CR1 &= (~SPI_ENABLE);
if(bMaster)
{
SPI_CR1 = /*LSBFIRST + */BRCTRL + MASTER + PHASE_CTRL;
SPI_CR2 = /*BDM_EN + BDOE_EN +*/ SSM_EN + SSI_EN; //SSM = 1, SSI = 1 Master Mode
SPI_ICR = 0; //Enable RX/TX interrupt
SPI_CR1 |= SPI_ENABLE;
}
else
{
SPI_CR1 = /*LSBFIRST + */BRCTRL + PHASE_CTRL;
SPI_CR2 = /*BDM_EN + RX_ONLY + */SSM_EN; //SSM = 1, SSI = 0 Slave Mode
SPI_ICR = 0x40; //Enable RX/TX interrupt
SPI_CR1 |= SPI_ENABLE;
}
}
|