Код
//ÑабоÑа Ñ CCxxx0
#include "sx1231portirovanieH.h"
#include "__DELAY_H.h"
#include"Mod_UART.h"
#include <p24FJ64GA002.h>
unsigned char RegistersCfg[] = { // SX1231 configuration registers values
DEF_FIFO, // Left for convenience, not to be changed
DEF_OPMODE | RF_OPMODE_SEQUENCER_ON | RF_OPMODE_LISTEN_OFF | RF_OPMODE_STANDBY,
DEF_DATAMODUL | RF_DATAMODUL_DATAMODE_PACKET | RF_DATAMODUL_MODULATIONTYPE_FSK | RF_DATAMODUL_MODULATIONSHAPING_00,
DEF_BITRATEMSB | RF_BITRATEMSB_1200,
DEF_BITRATELSB | RF_BITRATELSB_1200,
DEF_FDEVMSB | RF_FDEVMSB_5000,
DEF_FDEVLSB | RF_FDEVLSB_5000,
DEF_FRFMSB | RF_FRFMSB_865,
DEF_FRFMID | RF_FRFMID_865,
DEF_FRFLSB | RF_FRFLSB_865,
DEF_OSC1,
DEF_OSC2,
DEF_LOWBAT | RF_LOWBAT_OFF | RF_LOWBAT_TRIM_1835,
DEF_LISTEN1 | RF_LISTEN1_RESOL_4100 | RF_LISTEN1_CRITERIA_RSSI | RF_LISTEN1_END_01,
DEF_LISTEN2 | RF_LISTEN2_COEFIDLE_VALUE,
DEF_LISTEN3 | RF_LISTEN3_COEFRX_VALUE,
DEF_VERSION, // Read Only
DEF_PALEVEL | RF_PALEVEL_PA0_ON | RF_PALEVEL_PA1_OFF | RF_PALEVEL_PA2_OFF | RF_PALEVEL_OUTPUTPOWER_11111,
DEF_PARAMP | RF_PARAMP_40,
DEF_OCP | RF_OCP_ON | RF_OCP_TRIM_100,
DEF_AGCREF | RF_AGCREF_AUTO_ON | RF_AGCREF_LEVEL_MINUS80,
DEF_AGCTHRESH1 | RF_AGCTHRESH1_SNRMARGIN_101 | RF_AGCTHRESH1_STEP1_16,
DEF_AGCTHRESH2 | RF_AGCTHRESH2_STEP2_3 | RF_AGCTHRESH2_STEP3_11,
DEF_AGCTHRESH3 | RF_AGCTHRESH3_STEP4_9 | RF_AGCTHRESH3_STEP5_11,
DEF_LNA | RF_LNA_ZIN_200 | RF_LNA_LOWPOWER_OFF | RF_LNA_GAINSELECT_AUTO,
DEF_RXBW | RF_RXBW_DCCFREQ_010 | RF_RXBW_MANT_24 | RF_RXBW_EXP_4,
DEF_AFCBW | RF_AFCBW_DCCFREQAFC_100 | RF_AFCBW_MANTAFC_20 | RF_AFCBW_EXPAFC_3,
DEF_OOKPEAK | RF_OOKPEAK_THRESHTYPE_PEAK | RF_OOKPEAK_PEAKTHRESHSTEP_000 | RF_OOKPEAK_PEAKTHRESHDEC_000,
DEF_OOKAVG | RF_OOKAVG_AVERAGETHRESHFILT_10,
DEF_OOKFIX | RF_OOKFIX_FIXEDTHRESH_VALUE,
DEF_AFCFEI | RF_AFCFEI_AFCAUTOCLEAR_OFF | RF_AFCFEI_AFCAUTO_OFF,
DEF_AFCMSB, // Read Only
DEF_AFCLSB, // Read Only
DEF_FEIMSB, // Read Only
DEF_FEILSB, // Read Only
DEF_RSSICONFIG | RF_RSSI_FASTRX_OFF,
DEF_RSSIVALUE, // Read Only
DEF_DIOMAPPING1 | RF_DIOMAPPING1_DIO0_00 | RF_DIOMAPPING1_DIO1_00 | RF_DIOMAPPING1_DIO2_00 | RF_DIOMAPPING1_DIO3_00,
DEF_DIOMAPPING2 | RF_DIOMAPPING2_DIO4_00 | RF_DIOMAPPING2_DIO5_01 | RF_DIOMAPPING2_CLKOUT_OFF,
DEF_IRQFLAGS1,
DEF_IRQFLAGS2,
DEF_RSSITHRESH | 228, // Must be set to (-Sensitivity x 2)
DEF_RXTIMEOUT1 | RF_RXTIMEOUT1_RXSTART_VALUE,
DEF_RXTIMEOUT2 | RF_RXTIMEOUT2_RSSITHRESH_VALUE,
DEF_PREAMBLEMSB | RF_PREAMBLESIZE_MSB_VALUE,
DEF_PREAMBLELSB | RF_PREAMBLESIZE_LSB_VALUE,
DEF_SYNCCONFIG | RF_SYNC_OFF | RF_SYNC_FIFOFILL_AUTO | RF_SYNC_SIZE_4 | RF_SYNC_TOL_0,
DEF_SYNCVALUE1 | 0x69,
DEF_SYNCVALUE2 | 0x81,
DEF_SYNCVALUE3 | 0x7E,
DEF_SYNCVALUE4 | 0x96,
DEF_SYNCVALUE5 | RF_SYNC_BYTE5_VALUE,
DEF_SYNCVALUE6 | RF_SYNC_BYTE6_VALUE,
DEF_SYNCVALUE7 | RF_SYNC_BYTE7_VALUE,
DEF_SYNCVALUE8 | RF_SYNC_BYTE8_VALUE,
DEF_PACKETCONFIG1 | RF_PACKET1_FORMAT_VARIABLE | RF_PACKET1_DCFREE_OFF | RF_PACKET1_CRC_OFF | RF_PACKET1_CRCAUTOCLEAR_ON | RF_PACKET1_ADRSFILTERING_OFF,
DEF_PAYLOADLENGTH | 255,
DEF_NODEADRS | RF_NODEADDRESS_VALUE,
DEF_BROADCASTADRS | RF_BROADCASTADDRESS_VALUE,
DEF_AUTOMODES | RF_AUTOMODES_ENTER_OFF | RF_AUTOMODES_EXIT_OFF | RF_AUTOMODES_INTERMEDIATE_SLEEP,
DEF_FIFOTHRESH | RF_FIFOTHRESH_TXSTART_FIFONOTEMPTY | RF_FIFOTHRESH_VALUE,
DEF_PACKETCONFIG2 | RF_PACKET2_RXRESTARTDELAY_1BIT | RF_PACKET2_AUTORXRESTART_OFF | RF_PACKET2_AES_OFF,
DEF_AESKEY1 | RF_AESKEY1_VALUE,
DEF_AESKEY2 | RF_AESKEY2_VALUE,
DEF_AESKEY3 | RF_AESKEY3_VALUE,
DEF_AESKEY4 | RF_AESKEY4_VALUE,
DEF_AESKEY5 | RF_AESKEY5_VALUE,
DEF_AESKEY6 | RF_AESKEY6_VALUE,
DEF_AESKEY7 | RF_AESKEY7_VALUE,
DEF_AESKEY8 | RF_AESKEY8_VALUE,
DEF_AESKEY9 | RF_AESKEY9_VALUE,
DEF_AESKEY10 | RF_AESKEY10_VALUE,
DEF_AESKEY11 | RF_AESKEY11_VALUE,
DEF_AESKEY12 | RF_AESKEY12_VALUE,
DEF_AESKEY13 | RF_AESKEY13_VALUE,
DEF_AESKEY14 | RF_AESKEY14_VALUE,
DEF_AESKEY15 | RF_AESKEY15_VALUE,
DEF_AESKEY16 | RF_AESKEY16_VALUE,
DEF_TEMP1 | RF_TEMP1_ADCLOWPOWER_ON,
DEF_TEMP2
};
//*****************************************************************************
unsigned char txbuff[16];
unsigned char rxbuff[16];
unsigned char LENG;
//----------------------------------------------------------------------------------------------------------------------
unsigned char While_SO(void)
{
unsigned int TWait;
TWait=512;
while(SO && TWait) { Nop(); TWait--; }
if(TWait) return 1;
else return 0;
}
//----------------------------------------------------------------------------------------------------------------------
unsigned char SPI_Byte_RW(unsigned char Data)
{
unsigned char i;
unsigned char Rz;
Rz=0;
SCLK=0;
for(i=0;i<8;i++)
{
if(Data & 0b10000000) SI=1; else SI=0;
Rz<<=1;
SCLK=1;
if(SO) Rz|=0b00000001;
SCLK=0;
Data<<=1;
}
return Rz;
}
//----------------------------------------------------------------------------------------------------------------------
void halSpiWriteReg(unsigned char Adr,unsigned char Data)
{
CSN=0;
if(While_SO())
{
SPI_Byte_RW(Adr | 0b10000000);
SPI_Byte_RW(Data);
}
CSN=1;
}
//----------------------------------------------------------------------------------------------------------------------
unsigned char halSpiReadReg(unsigned char Addr)
{
unsigned char X;
CSN=0;
if(While_SO())
{
SPI_Byte_RW(Addr & 0b01111111);
X=SPI_Byte_RW(0x00);
}
else X=0;
CSN=1;
return X;
}
//----------------------------------------------------------------------------------------------------------------------
void halSpiStrobe(unsigned char Komm)
{
CSN=0;
if(While_SO())
{
halSpiWriteReg(REG_OPMODE, (RegistersCfg[REG_OPMODE] & 0xE3) | Komm);
while ((halSpiReadReg(REG_IRQFLAGS1) & RF_IRQFLAGS1_MODEREADY) == 0x00);
}
CSN=1;
}
//----------------------------------------------------------------------------------------------------------------------
void halSpiWriteBurstReg(unsigned char Addr,unsigned char *Buffer,unsigned char Count)
{
unsigned char i;
CSN=0;
if(While_SO())
{
SPI_Byte_RW(Addr | 0b10000000);
for(i=0;i<Count;i++) SPI_Byte_RW(Buffer[i]);
}
CSN=1;
}
//----------------------------------------------------------------------------------------------------------------------
void halSpiReadBurstReg(unsigned char Addr,unsigned char *buffer,unsigned char count)
{
unsigned char i;
CSN=0;
if(While_SO())
{
SPI_Byte_RW(Addr | 0b01111111);
for(i=0;i<count;i++) buffer[i]=SPI_Byte_RW(0x00);
}
CSN=1;
}
//----------------------------------------------------------------------------------------------------------------------
void POWER_UP_RESET_SX1231(void)
{
unsigned char i;
CSN=1;
delay_us(1);
CSN=0;
delay_us(1);
CSN=1;
i=40;
while(i) {delay_us(250); i--; }
halSpiStrobe(RF_STANDBY);
}
//----------------------------------------------------------------------------------------------------------------------
void halRfWriteRfSettings(void)
{
unsigned char i;
for(i = 1; i <= REG_TEMP2; i++)
{
halSpiWriteReg(i, RegistersCfg[i]);
}
halSpiStrobe(RF_STANDBY);
}
//----------------------------------------------------------------------------------------------------------------------
void halRfSendPacket(unsigned char *txBuffer,unsigned char size)
{
unsigned short Wait;
halSpiStrobe(RF_STANDBY);
halSpiWriteBurstReg(REG_FIFO, txBuffer, size);
halSpiStrobe(RF_TRANSMITTER);
Wait=200;
// while(Wait)
// {
// if((halSpiReadReg(REG_IRQFLAGS2)&RF_IRQFLAGS2_PACKETSENT)==0) { delay_us(100); Wait--; }
// else break; // Wait for GDO0 to be set -> sync transmitted
// }
while((halSpiReadReg(REG_IRQFLAGS2)&RF_IRQFLAGS2_PACKETSENT)==0);
halSpiStrobe(RF_STANDBY);
// halSpiStrobe(RF_RECEIVER);
}
//----------------------------------------------------------------------------------------------------------------------
unsigned char halRfReceivePacket(unsigned char *rxBuffer)
{
unsigned char PacketLength;
if((halSpiReadReg(REG_IRQFLAGS2) & RF_IRQFLAGS2_FIFONOTEMPTY))
//if((halSpiReadReg(REG_IRQFLAGS2) & RF_IRQFLAGS2_PAYLOADREADY))
{
PacketLength = halSpiReadReg(REG_FIFO);
if(PacketLength <= LENG) //Read data from RX FIFO and store in rxBuffer
{
halSpiReadBurstReg(REG_FIFO,rxBuffer,PacketLength);
return (1);
}
else
{
halSpiStrobe(RF_STANDBY);
halSpiStrobe(RF_RECEIVER);
return 0;
}
}
else
{
halSpiStrobe(RF_RECEIVER);
return 0;
}
}
// -----------------------------------------------------------------------------
void init_SX1231(void)
{
SO_TRIS=1;
SCLK_TRIS=0;
SI_TRIS=0;
CSN_TRIS=0;
RESET_TRIS=0;
CSN=1;
RESET_=0;
POWER_UP_RESET_SX1231();
halRfWriteRfSettings();
halSpiStrobe(RF_RECEIVER);
// LENG=sizeof(rxbuff);
}
//-----------------------------------------------------------------------------
unsigned int ReadRssi(void)
{ // Must be called while in RX
unsigned int value;
halSpiWriteReg(REG_RSSICONFIG, RegistersCfg[REG_RSSICONFIG] | RF_RSSI_START); // Triggers RSSI measurement
while ((halSpiReadReg(REG_RSSICONFIG) & RF_RSSI_DONE) == 0x00); // Waits for RSSI measurement to be completed
value = halSpiReadReg(REG_RSSIVALUE); // Reads the RSSI result
return value;
}
/*******************************************************************
** ReadFei : Triggers FEI measurement and returns its value **
********************************************************************
** In : - **
** Out : value **
*******************************************************************/
signed int ReadFei(void)
{ // Must be called while in RX
signed int value;
halSpiWriteReg(REG_AFCFEI, RegistersCfg[REG_AFCFEI] | RF_AFCFEI_FEI_START); // Triggers FEI measurement
while ((halSpiReadReg(REG_AFCFEI) & RF_AFCFEI_FEI_DONE) == 0x00); // Waits for FEI measurement to be completed
value = ((halSpiReadReg(REG_FEIMSB) << 8) | halSpiReadReg(REG_FEILSB)); // Reads the FEI result
return value;
}
#include "sx1231portirovanieH.h"
#include "__DELAY_H.h"
#include"Mod_UART.h"
#include <p24FJ64GA002.h>
unsigned char RegistersCfg[] = { // SX1231 configuration registers values
DEF_FIFO, // Left for convenience, not to be changed
DEF_OPMODE | RF_OPMODE_SEQUENCER_ON | RF_OPMODE_LISTEN_OFF | RF_OPMODE_STANDBY,
DEF_DATAMODUL | RF_DATAMODUL_DATAMODE_PACKET | RF_DATAMODUL_MODULATIONTYPE_FSK | RF_DATAMODUL_MODULATIONSHAPING_00,
DEF_BITRATEMSB | RF_BITRATEMSB_1200,
DEF_BITRATELSB | RF_BITRATELSB_1200,
DEF_FDEVMSB | RF_FDEVMSB_5000,
DEF_FDEVLSB | RF_FDEVLSB_5000,
DEF_FRFMSB | RF_FRFMSB_865,
DEF_FRFMID | RF_FRFMID_865,
DEF_FRFLSB | RF_FRFLSB_865,
DEF_OSC1,
DEF_OSC2,
DEF_LOWBAT | RF_LOWBAT_OFF | RF_LOWBAT_TRIM_1835,
DEF_LISTEN1 | RF_LISTEN1_RESOL_4100 | RF_LISTEN1_CRITERIA_RSSI | RF_LISTEN1_END_01,
DEF_LISTEN2 | RF_LISTEN2_COEFIDLE_VALUE,
DEF_LISTEN3 | RF_LISTEN3_COEFRX_VALUE,
DEF_VERSION, // Read Only
DEF_PALEVEL | RF_PALEVEL_PA0_ON | RF_PALEVEL_PA1_OFF | RF_PALEVEL_PA2_OFF | RF_PALEVEL_OUTPUTPOWER_11111,
DEF_PARAMP | RF_PARAMP_40,
DEF_OCP | RF_OCP_ON | RF_OCP_TRIM_100,
DEF_AGCREF | RF_AGCREF_AUTO_ON | RF_AGCREF_LEVEL_MINUS80,
DEF_AGCTHRESH1 | RF_AGCTHRESH1_SNRMARGIN_101 | RF_AGCTHRESH1_STEP1_16,
DEF_AGCTHRESH2 | RF_AGCTHRESH2_STEP2_3 | RF_AGCTHRESH2_STEP3_11,
DEF_AGCTHRESH3 | RF_AGCTHRESH3_STEP4_9 | RF_AGCTHRESH3_STEP5_11,
DEF_LNA | RF_LNA_ZIN_200 | RF_LNA_LOWPOWER_OFF | RF_LNA_GAINSELECT_AUTO,
DEF_RXBW | RF_RXBW_DCCFREQ_010 | RF_RXBW_MANT_24 | RF_RXBW_EXP_4,
DEF_AFCBW | RF_AFCBW_DCCFREQAFC_100 | RF_AFCBW_MANTAFC_20 | RF_AFCBW_EXPAFC_3,
DEF_OOKPEAK | RF_OOKPEAK_THRESHTYPE_PEAK | RF_OOKPEAK_PEAKTHRESHSTEP_000 | RF_OOKPEAK_PEAKTHRESHDEC_000,
DEF_OOKAVG | RF_OOKAVG_AVERAGETHRESHFILT_10,
DEF_OOKFIX | RF_OOKFIX_FIXEDTHRESH_VALUE,
DEF_AFCFEI | RF_AFCFEI_AFCAUTOCLEAR_OFF | RF_AFCFEI_AFCAUTO_OFF,
DEF_AFCMSB, // Read Only
DEF_AFCLSB, // Read Only
DEF_FEIMSB, // Read Only
DEF_FEILSB, // Read Only
DEF_RSSICONFIG | RF_RSSI_FASTRX_OFF,
DEF_RSSIVALUE, // Read Only
DEF_DIOMAPPING1 | RF_DIOMAPPING1_DIO0_00 | RF_DIOMAPPING1_DIO1_00 | RF_DIOMAPPING1_DIO2_00 | RF_DIOMAPPING1_DIO3_00,
DEF_DIOMAPPING2 | RF_DIOMAPPING2_DIO4_00 | RF_DIOMAPPING2_DIO5_01 | RF_DIOMAPPING2_CLKOUT_OFF,
DEF_IRQFLAGS1,
DEF_IRQFLAGS2,
DEF_RSSITHRESH | 228, // Must be set to (-Sensitivity x 2)
DEF_RXTIMEOUT1 | RF_RXTIMEOUT1_RXSTART_VALUE,
DEF_RXTIMEOUT2 | RF_RXTIMEOUT2_RSSITHRESH_VALUE,
DEF_PREAMBLEMSB | RF_PREAMBLESIZE_MSB_VALUE,
DEF_PREAMBLELSB | RF_PREAMBLESIZE_LSB_VALUE,
DEF_SYNCCONFIG | RF_SYNC_OFF | RF_SYNC_FIFOFILL_AUTO | RF_SYNC_SIZE_4 | RF_SYNC_TOL_0,
DEF_SYNCVALUE1 | 0x69,
DEF_SYNCVALUE2 | 0x81,
DEF_SYNCVALUE3 | 0x7E,
DEF_SYNCVALUE4 | 0x96,
DEF_SYNCVALUE5 | RF_SYNC_BYTE5_VALUE,
DEF_SYNCVALUE6 | RF_SYNC_BYTE6_VALUE,
DEF_SYNCVALUE7 | RF_SYNC_BYTE7_VALUE,
DEF_SYNCVALUE8 | RF_SYNC_BYTE8_VALUE,
DEF_PACKETCONFIG1 | RF_PACKET1_FORMAT_VARIABLE | RF_PACKET1_DCFREE_OFF | RF_PACKET1_CRC_OFF | RF_PACKET1_CRCAUTOCLEAR_ON | RF_PACKET1_ADRSFILTERING_OFF,
DEF_PAYLOADLENGTH | 255,
DEF_NODEADRS | RF_NODEADDRESS_VALUE,
DEF_BROADCASTADRS | RF_BROADCASTADDRESS_VALUE,
DEF_AUTOMODES | RF_AUTOMODES_ENTER_OFF | RF_AUTOMODES_EXIT_OFF | RF_AUTOMODES_INTERMEDIATE_SLEEP,
DEF_FIFOTHRESH | RF_FIFOTHRESH_TXSTART_FIFONOTEMPTY | RF_FIFOTHRESH_VALUE,
DEF_PACKETCONFIG2 | RF_PACKET2_RXRESTARTDELAY_1BIT | RF_PACKET2_AUTORXRESTART_OFF | RF_PACKET2_AES_OFF,
DEF_AESKEY1 | RF_AESKEY1_VALUE,
DEF_AESKEY2 | RF_AESKEY2_VALUE,
DEF_AESKEY3 | RF_AESKEY3_VALUE,
DEF_AESKEY4 | RF_AESKEY4_VALUE,
DEF_AESKEY5 | RF_AESKEY5_VALUE,
DEF_AESKEY6 | RF_AESKEY6_VALUE,
DEF_AESKEY7 | RF_AESKEY7_VALUE,
DEF_AESKEY8 | RF_AESKEY8_VALUE,
DEF_AESKEY9 | RF_AESKEY9_VALUE,
DEF_AESKEY10 | RF_AESKEY10_VALUE,
DEF_AESKEY11 | RF_AESKEY11_VALUE,
DEF_AESKEY12 | RF_AESKEY12_VALUE,
DEF_AESKEY13 | RF_AESKEY13_VALUE,
DEF_AESKEY14 | RF_AESKEY14_VALUE,
DEF_AESKEY15 | RF_AESKEY15_VALUE,
DEF_AESKEY16 | RF_AESKEY16_VALUE,
DEF_TEMP1 | RF_TEMP1_ADCLOWPOWER_ON,
DEF_TEMP2
};
//*****************************************************************************
unsigned char txbuff[16];
unsigned char rxbuff[16];
unsigned char LENG;
//----------------------------------------------------------------------------------------------------------------------
unsigned char While_SO(void)
{
unsigned int TWait;
TWait=512;
while(SO && TWait) { Nop(); TWait--; }
if(TWait) return 1;
else return 0;
}
//----------------------------------------------------------------------------------------------------------------------
unsigned char SPI_Byte_RW(unsigned char Data)
{
unsigned char i;
unsigned char Rz;
Rz=0;
SCLK=0;
for(i=0;i<8;i++)
{
if(Data & 0b10000000) SI=1; else SI=0;
Rz<<=1;
SCLK=1;
if(SO) Rz|=0b00000001;
SCLK=0;
Data<<=1;
}
return Rz;
}
//----------------------------------------------------------------------------------------------------------------------
void halSpiWriteReg(unsigned char Adr,unsigned char Data)
{
CSN=0;
if(While_SO())
{
SPI_Byte_RW(Adr | 0b10000000);
SPI_Byte_RW(Data);
}
CSN=1;
}
//----------------------------------------------------------------------------------------------------------------------
unsigned char halSpiReadReg(unsigned char Addr)
{
unsigned char X;
CSN=0;
if(While_SO())
{
SPI_Byte_RW(Addr & 0b01111111);
X=SPI_Byte_RW(0x00);
}
else X=0;
CSN=1;
return X;
}
//----------------------------------------------------------------------------------------------------------------------
void halSpiStrobe(unsigned char Komm)
{
CSN=0;
if(While_SO())
{
halSpiWriteReg(REG_OPMODE, (RegistersCfg[REG_OPMODE] & 0xE3) | Komm);
while ((halSpiReadReg(REG_IRQFLAGS1) & RF_IRQFLAGS1_MODEREADY) == 0x00);
}
CSN=1;
}
//----------------------------------------------------------------------------------------------------------------------
void halSpiWriteBurstReg(unsigned char Addr,unsigned char *Buffer,unsigned char Count)
{
unsigned char i;
CSN=0;
if(While_SO())
{
SPI_Byte_RW(Addr | 0b10000000);
for(i=0;i<Count;i++) SPI_Byte_RW(Buffer[i]);
}
CSN=1;
}
//----------------------------------------------------------------------------------------------------------------------
void halSpiReadBurstReg(unsigned char Addr,unsigned char *buffer,unsigned char count)
{
unsigned char i;
CSN=0;
if(While_SO())
{
SPI_Byte_RW(Addr | 0b01111111);
for(i=0;i<count;i++) buffer[i]=SPI_Byte_RW(0x00);
}
CSN=1;
}
//----------------------------------------------------------------------------------------------------------------------
void POWER_UP_RESET_SX1231(void)
{
unsigned char i;
CSN=1;
delay_us(1);
CSN=0;
delay_us(1);
CSN=1;
i=40;
while(i) {delay_us(250); i--; }
halSpiStrobe(RF_STANDBY);
}
//----------------------------------------------------------------------------------------------------------------------
void halRfWriteRfSettings(void)
{
unsigned char i;
for(i = 1; i <= REG_TEMP2; i++)
{
halSpiWriteReg(i, RegistersCfg[i]);
}
halSpiStrobe(RF_STANDBY);
}
//----------------------------------------------------------------------------------------------------------------------
void halRfSendPacket(unsigned char *txBuffer,unsigned char size)
{
unsigned short Wait;
halSpiStrobe(RF_STANDBY);
halSpiWriteBurstReg(REG_FIFO, txBuffer, size);
halSpiStrobe(RF_TRANSMITTER);
Wait=200;
// while(Wait)
// {
// if((halSpiReadReg(REG_IRQFLAGS2)&RF_IRQFLAGS2_PACKETSENT)==0) { delay_us(100); Wait--; }
// else break; // Wait for GDO0 to be set -> sync transmitted
// }
while((halSpiReadReg(REG_IRQFLAGS2)&RF_IRQFLAGS2_PACKETSENT)==0);
halSpiStrobe(RF_STANDBY);
// halSpiStrobe(RF_RECEIVER);
}
//----------------------------------------------------------------------------------------------------------------------
unsigned char halRfReceivePacket(unsigned char *rxBuffer)
{
unsigned char PacketLength;
if((halSpiReadReg(REG_IRQFLAGS2) & RF_IRQFLAGS2_FIFONOTEMPTY))
//if((halSpiReadReg(REG_IRQFLAGS2) & RF_IRQFLAGS2_PAYLOADREADY))
{
PacketLength = halSpiReadReg(REG_FIFO);
if(PacketLength <= LENG) //Read data from RX FIFO and store in rxBuffer
{
halSpiReadBurstReg(REG_FIFO,rxBuffer,PacketLength);
return (1);
}
else
{
halSpiStrobe(RF_STANDBY);
halSpiStrobe(RF_RECEIVER);
return 0;
}
}
else
{
halSpiStrobe(RF_RECEIVER);
return 0;
}
}
// -----------------------------------------------------------------------------
void init_SX1231(void)
{
SO_TRIS=1;
SCLK_TRIS=0;
SI_TRIS=0;
CSN_TRIS=0;
RESET_TRIS=0;
CSN=1;
RESET_=0;
POWER_UP_RESET_SX1231();
halRfWriteRfSettings();
halSpiStrobe(RF_RECEIVER);
// LENG=sizeof(rxbuff);
}
//-----------------------------------------------------------------------------
unsigned int ReadRssi(void)
{ // Must be called while in RX
unsigned int value;
halSpiWriteReg(REG_RSSICONFIG, RegistersCfg[REG_RSSICONFIG] | RF_RSSI_START); // Triggers RSSI measurement
while ((halSpiReadReg(REG_RSSICONFIG) & RF_RSSI_DONE) == 0x00); // Waits for RSSI measurement to be completed
value = halSpiReadReg(REG_RSSIVALUE); // Reads the RSSI result
return value;
}
/*******************************************************************
** ReadFei : Triggers FEI measurement and returns its value **
********************************************************************
** In : - **
** Out : value **
*******************************************************************/
signed int ReadFei(void)
{ // Must be called while in RX
signed int value;
halSpiWriteReg(REG_AFCFEI, RegistersCfg[REG_AFCFEI] | RF_AFCFEI_FEI_START); // Triggers FEI measurement
while ((halSpiReadReg(REG_AFCFEI) & RF_AFCFEI_FEI_DONE) == 0x00); // Waits for FEI measurement to be completed
value = ((halSpiReadReg(REG_FEIMSB) << 8) | halSpiReadReg(REG_FEILSB)); // Reads the FEI result
return value;
}
передаю
Код
halRfSendPacket((char*)&txbuff,2);
принимаю
Код
if(halRfReceivePacket(&rxbuff))
{
Led_set(&LedState,100,0,2);
}
{
Led_set(&LedState,100,0,2);
}