265 lines
10 KiB
C
265 lines
10 KiB
C
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
// <20><>Ȩ: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD>Źɷ<C5B9><C9B7><EFBFBD><EFBFBD><EFBFBD>˾
|
|||
|
|
// <20>ļ<EFBFBD><C4BC><EFBFBD>:
|
|||
|
|
// <20>汾<EFBFBD><E6B1BE> v2.0
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IAR v5.30
|
|||
|
|
// <20><><EFBFBD><EFBFBD>: <20>ں<EFBFBD><DABA><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 2013.12
|
|||
|
|
// <20><><EFBFBD><EFBFBD>: API
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>:
|
|||
|
|
// <20><EFBFBD><DEB8><EFBFBD>־<EFBFBD><D6BE>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
#include <stdint.h>
|
|||
|
|
#include <stdbool.h>
|
|||
|
|
#include "sx1276-LoRa.h"
|
|||
|
|
#include "sx1276-f4152-Hal.h"
|
|||
|
|
#include "LSD_RF_SX1276.h"
|
|||
|
|
//===================================<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================================================
|
|||
|
|
float G_BandWidthKHz = 500.0;//<2F><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>Symbol<6F><6C><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
|||
|
|
float G_TsXms = 1.024;//1.024ms
|
|||
|
|
S_LoRaConfig G_LoRaConfig = {
|
|||
|
|
470000000,
|
|||
|
|
BW500KHZ,
|
|||
|
|
SF08,
|
|||
|
|
CR_4_5,
|
|||
|
|
15,
|
|||
|
|
true,
|
|||
|
|
true,
|
|||
|
|
true,
|
|||
|
|
64,
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
bool LoRaConfig_Check()
|
|||
|
|
{
|
|||
|
|
if((G_LoRaConfig.LoRa_Freq<137000000)||(G_LoRaConfig.LoRa_Freq>525000000))
|
|||
|
|
return false;
|
|||
|
|
G_LoRaConfig.BandWidth = (t_BandWidth)(G_LoRaConfig.BandWidth&0xF0);
|
|||
|
|
if(G_LoRaConfig.BandWidth>BW500KHZ)
|
|||
|
|
return false;
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>BandWidth
|
|||
|
|
switch(G_LoRaConfig.BandWidth){
|
|||
|
|
case BW500KHZ:G_BandWidthKHz = 500.0;break;
|
|||
|
|
case BW250KHZ:G_BandWidthKHz = 250.0;break;
|
|||
|
|
case BW125KHZ:G_BandWidthKHz = 125.0;break;
|
|||
|
|
case BW62_50KHZ:G_BandWidthKHz = 62.5;break;
|
|||
|
|
case BW41_66KHZ:G_BandWidthKHz = 41.66;break;
|
|||
|
|
case BW31_25KHZ:G_BandWidthKHz = 31.25;break;
|
|||
|
|
case BW20_83KHZ:G_BandWidthKHz = 20.83;break;
|
|||
|
|
case BW15_62KHZ:G_BandWidthKHz = 15.62;break;
|
|||
|
|
case BW10_41KHZ:G_BandWidthKHz = 10.41;break;
|
|||
|
|
case BW7_81KHZ:G_BandWidthKHz = 7.81;break;
|
|||
|
|
}
|
|||
|
|
G_LoRaConfig.SpreadingFactor = (t_SpreadingFactor)(G_LoRaConfig.SpreadingFactor&0xF0);
|
|||
|
|
if((G_LoRaConfig.SpreadingFactor>SF12)||(G_LoRaConfig.SpreadingFactor<SF06))
|
|||
|
|
return false;
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>LoRa<52><61>Ԫ<EFBFBD><D4AA><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>λms
|
|||
|
|
G_TsXms = (2<<((G_LoRaConfig.SpreadingFactor>>4)-1))/G_BandWidthKHz;
|
|||
|
|
|
|||
|
|
G_LoRaConfig.CodingRate = (t_CodingRate)(G_LoRaConfig.CodingRate&0x0E);
|
|||
|
|
if((G_LoRaConfig.CodingRate>CR_4_8)||(G_LoRaConfig.CodingRate<CR_4_5))
|
|||
|
|
return false;
|
|||
|
|
if(G_LoRaConfig.PowerCfig>15)
|
|||
|
|
return false;
|
|||
|
|
if(G_LoRaConfig.PayloadLength>127)
|
|||
|
|
return false;
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
//===================================<3D>Ӻ<EFBFBD><D3BA><EFBFBD>===================================================
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : RF<52><46>ʼ<EFBFBD><CABC>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : tSX127xInitPara initPara <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Init_LoRa_0_8K, Init_LoRa_4_8K , Init_LoRa_10k,
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> : tSX127xError <20><><EFBFBD><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// ˵<><CBB5> : <20><>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>ʼ<EFBFBD><CABC>Ĭ<EFBFBD><C4AC>Ϊ0<CEAA>ŵ<EFBFBD>
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
tSX127xError SX127x_init()
|
|||
|
|
{
|
|||
|
|
if(false==LoRaConfig_Check()) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
return PARAMETER_INVALID; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
SX1276InitIo(); // PAIO<49>ڳ<EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
|
SX1276Reset(); //<2F><>λRF
|
|||
|
|
SX1276SPISetup(); //SPI<50><49>ʼ<EFBFBD><CABC>
|
|||
|
|
|
|||
|
|
//<2F>л<EFBFBD><D0BB><EFBFBD>LoRamode<64><65>standby״̬
|
|||
|
|
SX1276Write( REG_LR_OPMODE, RFLR_OPMODE_SLEEP );
|
|||
|
|
SX1276Write( REG_LR_OPMODE, 0x80|RFLR_OPMODE_SLEEP );
|
|||
|
|
SX1276Write( REG_LR_OPMODE, 0x80|RFLR_OPMODE_STANDBY );
|
|||
|
|
|
|||
|
|
/*------------------------------------------------
|
|||
|
|
SPI <EFBFBD><EFBFBD>֤ */
|
|||
|
|
uint8_t test = 0;
|
|||
|
|
SX1276Write( REG_LR_HOPPERIOD,0x91 );//ѡһ<D1A1><D2BB><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤
|
|||
|
|
SX1276Read( REG_LR_HOPPERIOD,&test);
|
|||
|
|
if(test!=0x91)
|
|||
|
|
return SPI_READCHECK_WRONG;
|
|||
|
|
SX1276Write( REG_LR_DIOMAPPING2, RFLR_DIOMAPPING2_DIO4_01);
|
|||
|
|
//Frequency Configuration
|
|||
|
|
LSD_RF_FreqSet(); //<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>
|
|||
|
|
|
|||
|
|
//PA Configuration
|
|||
|
|
LSD_RF_PoutSet();
|
|||
|
|
SX1276Write( REG_LR_PARAMP,RFLR_PARAMP_0100_US);
|
|||
|
|
// <20><>PA Ramp<6D><70>ʱ<EFBFBD>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>LDO<44><4F><EFBFBD>ܿ<EFBFBD><DCBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD>PA Rampʱ<70><CAB1>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Rampʱ<70><CAB1><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD><CCB3><EFBFBD><EFBFBD><EFBFBD>LDO<44><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>TX<54><58><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RF<52>źŲ<C5BA><C5B2><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
SX1276Write( REG_LR_OCP,0x20|RFLR_OCP_TRIM_240_MA);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD> Over Current Protection
|
|||
|
|
|
|||
|
|
//PayloadLength <20><>ʼ<EFBFBD><CABC>
|
|||
|
|
SX1276Write( REG_LR_PAYLOADLENGTH,G_LoRaConfig.PayloadLength);
|
|||
|
|
//ע<>⣬<EFBFBD><E2A3AC>ͷģʽ<C4A3><CABD>Implicit Header<65><72>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>涨<EFBFBD><E6B6A8><EFBFBD>շ<EFBFBD>˫<EFBFBD><CBAB><EFBFBD><EFBFBD>PL
|
|||
|
|
|
|||
|
|
//BW<42><57>CR<43><52>Header<65><72><EFBFBD>ޣ<EFBFBD><DEA3><EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
|
SX1276Write( REG_LR_MODEMCONFIG1,\
|
|||
|
|
(((uint8_t)G_LoRaConfig.BandWidth)|((uint8_t)G_LoRaConfig.CodingRate))|(\
|
|||
|
|
(true==G_LoRaConfig.ExplicitHeaderOn)?0x00:0x01));
|
|||
|
|
|
|||
|
|
//SF<53><46>CRC<52><43>ʼ<EFBFBD><CABC>
|
|||
|
|
SX1276Write( REG_LR_MODEMCONFIG2,\
|
|||
|
|
((uint8_t)G_LoRaConfig.SpreadingFactor)|(\
|
|||
|
|
(true==G_LoRaConfig.CRCON)?0x04:0x00));
|
|||
|
|
if(SF06==G_LoRaConfig.SpreadingFactor){ //<2F><><EFBFBD><EFBFBD>SF = 6<><36><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
uint8_t temp = 0;
|
|||
|
|
SX1276Read( 0x31,&temp);
|
|||
|
|
SX1276Write( 0x31,(temp& 0xF8)|0x05);
|
|||
|
|
SX1276Write( 0x37,0x0C);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AutoAGCĬ<43>Ͽ<EFBFBD><CFBF><EFBFBD>
|
|||
|
|
SX1276Write( REG_LR_MODEMCONFIG3,((G_TsXms>16.0)?\
|
|||
|
|
RFLR_MODEMCONFIG3_LOWDATARATEOPTIMIZE_ON:RFLR_MODEMCONFIG3_LOWDATARATEOPTIMIZE_OFF\
|
|||
|
|
)|RFLR_MODEMCONFIG3_AGCAUTO_ON);
|
|||
|
|
return NORMAL;
|
|||
|
|
}
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : RF<52><46><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : uint8_t*data<74><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> : <20><>
|
|||
|
|
// ˵<><CBB5> : <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD> preamble<6C>Ļ<EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
void SX1276_TxPacket(uint8_t*data)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
SX1276Write( REG_LR_OPMODE, 0x80|RFLR_OPMODE_STANDBY );
|
|||
|
|
SX1276Write( REG_LR_PREAMBLEMSB,0);
|
|||
|
|
SX1276Write( REG_LR_PREAMBLELSB,10);
|
|||
|
|
SX1276Write( REG_LR_PAYLOADLENGTH,G_LoRaConfig.PayloadLength);
|
|||
|
|
SX1276WriteRxTx(true);
|
|||
|
|
SX1276Write( REG_LR_FIFOADDRPTR,0x80);
|
|||
|
|
SX1276WriteBuffer(REG_LR_FIFO,data,G_LoRaConfig.PayloadLength);
|
|||
|
|
SX1276Write(REG_LR_IRQFLAGS,0xff);
|
|||
|
|
SX1276Write( REG_LR_IRQFLAGSMASK, ~(RFLR_IRQFLAGS_TXDONE));
|
|||
|
|
SX1276Write( REG_LR_DIOMAPPING1, RFLR_DIOMAPPING1_DIO0_01 );
|
|||
|
|
SX1276Write( REG_LR_OPMODE, 0x80|RFLR_OPMODE_TRANSMITTER );
|
|||
|
|
}
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : RF<52><46><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> :
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> : <20><>
|
|||
|
|
// ˵<><CBB5> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>պ<EFBFBD>preamble<6C><65><EFBFBD>û<EFBFBD>Ĭ<EFBFBD><C4AC>ֵΪ
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
void Rx_mode()
|
|||
|
|
{
|
|||
|
|
SX1276Write( REG_LR_OPMODE, 0x80|RFLR_OPMODE_STANDBY );
|
|||
|
|
SX1276Write( REG_LR_PREAMBLEMSB,0);
|
|||
|
|
SX1276Write( REG_LR_PREAMBLELSB,10);
|
|||
|
|
SX1276Write( REG_LR_PAYLOADLENGTH,G_LoRaConfig.PayloadLength);
|
|||
|
|
SX1276Write( REG_LR_IRQFLAGSMASK, ~(RFLR_IRQFLAGS_RXDONE));
|
|||
|
|
SX1276Write( REG_LR_DIOMAPPING1, RFLR_DIOMAPPING1_DIO0_00 );
|
|||
|
|
SX1276WriteRxTx(false);
|
|||
|
|
SX1276Write( REG_LR_FIFOADDRPTR,0x00);
|
|||
|
|
SX1276Write(REG_LR_IRQFLAGS,0xff);
|
|||
|
|
SX1276Write( REG_LR_OPMODE, 0x80|RFLR_OPMODE_RECEIVER );
|
|||
|
|
}
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : RF<52><46><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : uint8_t*cbuf<75><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> : <20><>
|
|||
|
|
// ˵<><CBB5> :
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
void LSD_RF_RxPacket(uint8_t*cbuf)
|
|||
|
|
{
|
|||
|
|
if(true==G_LoRaConfig.ExplicitHeaderOn){
|
|||
|
|
//<2F><>ͷ<EFBFBD><CDB7>ô<EFBFBD>ӼĴ<D3BC><C4B4><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>G_LoRaConfig<69><67><EFBFBD>ó<EFBFBD><C3B3>ȶ<EFBFBD>ȡFIFO
|
|||
|
|
SX1276Read(REG_LR_NBRXBYTES,&G_LoRaConfig.PayloadLength);
|
|||
|
|
SX1276Write( REG_LR_FIFOADDRPTR,0x00);
|
|||
|
|
}
|
|||
|
|
SX1276ReadFifo(cbuf,G_LoRaConfig.PayloadLength);
|
|||
|
|
SX1276Write(REG_LR_IRQFLAGS,0xff);
|
|||
|
|
}
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : RF<52><46><EFBFBD><EFBFBD>SLEEP״̬
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><>
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> : <20><>
|
|||
|
|
// ˵<><CBB5> :
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
void LSD_RF_SleepMode(void)
|
|||
|
|
{
|
|||
|
|
SX1276Write( REG_LR_OPMODE, 0x80|RFLR_OPMODE_STANDBY );
|
|||
|
|
SX1276Write( REG_LR_OPMODE, 0x80|RFLR_OPMODE_SLEEP );
|
|||
|
|
}
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : RF<52><46><EFBFBD><EFBFBD>standby״̬
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><>
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> : <20><>
|
|||
|
|
// ˵<><CBB5> :
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
void LSD_RF_StandbyMode(void)
|
|||
|
|
{
|
|||
|
|
SX1276Write( REG_LR_OPMODE, 0x80|RFLR_OPMODE_STANDBY );
|
|||
|
|
}
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : RF<52><46><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><>
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> : <20><>
|
|||
|
|
// ˵<><CBB5> :
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
tSX127xError LSD_RF_FreqSet()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if((G_LoRaConfig.LoRa_Freq>525000000)||(G_LoRaConfig.LoRa_Freq<137000000))
|
|||
|
|
return PARAMETER_INVALID;
|
|||
|
|
uint32_t freq_reg = (uint32_t)(G_LoRaConfig.LoRa_Freq/FREQ_STEP);
|
|||
|
|
uint8_t test_FRFMSB = 0,test_FRFMID=0,test_FRFLSB=0;
|
|||
|
|
LSD_RF_StandbyMode();
|
|||
|
|
// FREQ = 474.6MHz
|
|||
|
|
SX1276Write( REG_LR_FRFMSB, (uint8_t)(freq_reg>>16));//Carrier Freq 470M
|
|||
|
|
SX1276Write( REG_LR_FRFMID, (uint8_t)(freq_reg>>8) );
|
|||
|
|
SX1276Write( REG_LR_FRFLSB, (uint8_t)(freq_reg) );
|
|||
|
|
|
|||
|
|
SX1276Read(REG_LR_FRFMSB,&test_FRFMSB);
|
|||
|
|
SX1276Read(REG_LR_FRFMID,&test_FRFMID);
|
|||
|
|
SX1276Read(REG_LR_FRFLSB,&test_FRFLSB);
|
|||
|
|
|
|||
|
|
if(test_FRFMSB != (uint8_t)(freq_reg>>16))
|
|||
|
|
return SPI_READCHECK_WRONG;
|
|||
|
|
if(test_FRFMID != (uint8_t)(freq_reg>>8))
|
|||
|
|
return SPI_READCHECK_WRONG;
|
|||
|
|
if(test_FRFLSB != (uint8_t)(freq_reg))
|
|||
|
|
return SPI_READCHECK_WRONG;
|
|||
|
|
return NORMAL;
|
|||
|
|
}
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : RF<52><46><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><>
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> : <20><>
|
|||
|
|
// ˵<><CBB5> :
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
tSX127xError LSD_RF_PoutSet()
|
|||
|
|
{
|
|||
|
|
if(G_LoRaConfig.PowerCfig>15)
|
|||
|
|
return PARAMETER_INVALID;
|
|||
|
|
LSD_RF_StandbyMode();
|
|||
|
|
SX1276Write( REG_LR_PACONFIG, 0xf0|G_LoRaConfig.PowerCfig);
|
|||
|
|
uint8_t test = 0;
|
|||
|
|
SX1276Read(REG_LR_PACONFIG,&test);
|
|||
|
|
if((0xf0|G_LoRaConfig.PowerCfig)!=test)
|
|||
|
|
return SPI_READCHECK_WRONG;
|
|||
|
|
if(true==G_LoRaConfig.MaxPowerOn)
|
|||
|
|
SX1276Write( REG_LR_PADAC, 0x80|RFLR_PADAC_20DBM_ON );
|
|||
|
|
else
|
|||
|
|
SX1276Write( REG_LR_PADAC, 0x80|RFLR_PADAC_20DBM_OFF );
|
|||
|
|
return NORMAL;
|
|||
|
|
}
|