10224程序节

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值