void PHY_Init(const sPHY_Init *pInit)
{
pPHY_InitStruct=pInit;
PHY_Status=PHY_S_IDLE;
// Reset the SX1280
PHY_SX1280_SetResetPin(FALSE);
SYS_DelayUs(1000);
PHY_SX1280_SetResetPin(TRUE);
SYS_DelayUs(1000);
// Wait for the calibration end
printf("PHY_Init\r\n");
while (PHY_SX1280_IsBusy())
;
// Initialize the common registers
{
const unsigned char *pInitReg;
pInitReg=PHY_SX1280_InitRegisters;
while (*pInitReg)
{
SPI_TransferWait(pInitReg+1,NULL,*pInitReg);
pInitReg+=1+*pInitReg;
}
}
PHY_Initialized=TRUE;
return;
}
BOOL PHY_IsChannelUsable(unsigned long ChannelNb,unsigned long RFBandLow,unsigned long RFBandHigh)
{
if (ChannelNb<PHY_SX1280_FirstHighChannelNb)
ChannelNb=PHY_SX1280_MIN_FREQUENCY_1+PHY_ChannelBandwidth/2+ChannelNb*PHY_ChannelSpacing;
else
ChannelNb=PHY_SX1280_MIN_FREQUENCY_2+PHY_ChannelBandwidth/2+(ChannelNb-PHY_SX1280_FirstHighChannelNb)*PHY_ChannelSpacing;
return ((RFBandLow!=0 && ChannelNb-PHY_ChannelBandwidth/2<RFBandLow) || (RFBandHigh!=0 && ChannelNb+PHY_ChannelBandwidth/2>RFBandHigh))?FALSE:TRUE;
}
// Resume reception only if in reception mode
void PHY_ResumeRX(void)
{
if (!PHY_Initialized ||
PHY_SX1280_ResetStatus!=PHY_SX1280_RS_IDLE ||
PHY_Status!=PHY_S_RX_PAUSED)
return;
PHY_Status=PHY_S_RX;
PHY_SetPAMode(PHY_PAM_RX);
PHY_SX1280_CallSPITransfer(PHY_SX1280_Cmd_ClearIRQStatusTXRXDone,NULL,sizeof(PHY_SX1280_Cmd_ClearIRQStatusTXRXDone),PHY_ResumeRXCallback);
PHY_ResumeRXCallback();
return;
}
static void PHY_ResumeRXCallback(void)
{
PHY_SX1280_CallSPITransfer(PHY_SX1280_Cmd_SetRX,NULL,sizeof(PHY_SX1280_Cmd_SetRX),NULL);
return;
}
void PHY_RX(sPHY_RXConfig *pRXConfig)
{
if (!PHY_Initialized)
return;
pPHY_SX1280_RXConfig=pRXConfig;
// The RF chip has been reset, continue reset and initialization
if (PHY_SX1280_ResetStatus!=PHY_SX1280_RS_IDLE)
{
if (!PHY_SX1280_ContinueResetAndInit())
{
PHY_RXSetResetTimings();
return;
}
}
// Normal reception
if (!PHY_SX1280_HasBeenReset())
{
PHY_Status=PHY_S_PRE_RX;
LNKTIM_SetNextCompareIRQTime(pPHY_SX1280_RXConfig->AdditionalPreRXTime+PHY_SX1280_PREPARE_RX_TIME+PHY_SX1280_STBY_TO_FS_TIME);
PHY_SetPayloadLength((pPHY_SX1280_Config->PacketType==PACKET_TYPE_PHY_SX1280_LORA)?
pPHY_SX1280_Config->PhyRXPayloadLength+4:pPHY_SX1280_Config->PhyRXPayloadLength,PHY_RXCallback1);
}
// The RF chip has been reset, start reset and initialization
else
{
PHY_RXSetResetTimings();
if (pPHY_SX1280_RXConfig->RXDuration!=PHY_RX_DURATION_INFINITE)
PHY_SX1280_StartResetAndInit();
}
return;
}
10224程序节
于 2024-10-24 16:28:47 首次发布