?? radio.c
字號:
/*-------------------------------------*
* 頭文件 *
*---------------------------------------------------------------------------*/
#include "includes.h"
/*-------------------------------------*
* 變量定義 *
*---------------------------------------------------------------------------*/
byte __xdata radioPktBuffer[ 1 + PACKET_LENGTH + 2];
int16 perRssiOffset;
/*-------------------------------------*
* 函數定義 *
*---------------------------------------------------------------------------*/
void radioConfigure(uint32 dataRate, uint32 frequency)
{
//Turning on crystal oscillator
SET_MAIN_CLOCK_SOURCE(CRYSTAL);
// Setting the frequency
//halRfSetRadioFrequency(frequency);
FREQ2 = 0x5D; //Freqency : 2433Mhz
FREQ1 = 0x93;
FREQ0 = 0xB1;
/**********************************************************************
* *
* 250 kbps MSK setup (for other data rates or modulation formats, *
* please see SmartRF Studio). *
* *
*********************************************************************/
// Dynamic packet length and append status
PKTLEN = 0xFF;
PKTCTRL0 = 0x05;
PKTCTRL1 = 0x04;
// IF frequency
FSCTRL1 = 0x0A;
FSCTRL0 = 0x00;
// filter BW, data rate,
MDMCFG4 = 0x2D;
MDMCFG3 = 0x3B;
// Modulation format, detection level
MDMCFG2 = 0x73;
MDMCFG1 = 0x22;
MDMCFG0 = 0xF8;
// Deviation setting
DEVIATN = 0x00;
// Calibration synth
MCSM2 = 0x07;
MCSM1 = 0x30;
MCSM0 = 0x10;
// Frequency offset compensation configuration
FOCCFG = 0x1D;
// Bit synchronization
BSCFG = 0x1C;
// AGC settings
AGCCTRL2 = 0xC7;
AGCCTRL1 = 0x00;
AGCCTRL0 = 0xB2;
// Front end settings (from SmartRf04)
FREND1 = 0xB6;
FREND0 = 0x10;
// Synth calibration
FSCAL3 = 0xEA;
FSCAL2 = 0x0A;
FSCAL1 = 0x00;
FSCAL0 = 0x11;
// From Smart RF Studio
FOCCFG = 0x1D;
BSCFG = 0x1C;
// FSTEST = 0x59;
// PTEST = 0x7F;
// AGCTEST = 0x3F;
TEST2 = 0x88;
TEST1 = 0x31;
TEST0 = 0x09;
// Output power
PA_TABLE0 = 0xFF;
return;
}
/******************************************************************************
* @fn halRfConfig
*
* @brief
* This function configures the radio for simple send and receive operation.
* Advanced IEEE 802.15.4 functionality such as Address Decoding, AutoAck
* etc is not employed. CRC value is automatically calculated to enable
* detection of packet corruption. The desired frequency is set. The
* function returns TRUE if the configuration is successful.
*
* Parameters:
*
* @param UINT32 frequency
* The desired Radio Frequency in kHz.
*
* @return BOOL
* Returns TRUE if the configuration is successful and FALSE otherwise.
*
******************************************************************************/
void halRfConfig(void)
{
#if(chip == 1110)
PA_TABLE0 = 0xC0;
FREQ2 = 0x12; //Freqency : 470Mhz
FREQ1 = 0x13;
FREQ0 = 0xB1;
#endif
#if(chip == 2510)
PA_TABLE0 = 0xFF;
FREQ2 = 0x5D; //Freqency : 2433Mhz
FREQ1 = 0x93;
FREQ0 = 0xB1;
#endif
PKTLEN = 0xFF;
PKTCTRL1 = 0x04;
PKTCTRL0 = 0x05; //Append status
FSCTRL1 = 0x06; //20kbps
FSCTRL0 = 0x00; //20kbps
CHANNR = 0x02;
MDMCFG4 = 0xC9; //20kbps
MDMCFG3 = 0x93; //20kbps
MDMCFG2 = 0x03; //20kbps
MDMCFG1 = 0x22; //20kbps
MDMCFG0 = 0xF8; //20kbps
DEVIATN = 0x34; //20kbps
MCSM2 = 0x07; //20kbps
MCSM1 = 0x30; //20kbps
MCSM0 = 0x10; //20kbps
FOCCFG = 0x16; //20kbps
BSCFG = 0x6C; //20kbps
AGCCTRL2 = 0x43; //20kbps
AGCCTRL1 = 0x40; //20kbps
AGCCTRL0 = 0x91; //20kbps
FREND1 = 0x56; //20kbps
FREND0 = 0x10; //20kbps
FSCAL3 = 0xA9; //20kbps
FSCAL2 = 0x0A; //20kbps
FSCAL1 = 0x00; //20kbps
FSCAL0 = 0x11; //20kbps
FSTEST = 0x59; //20kbps
PTEST = 0x3F; //20kbps
AGCTEST = 0xE7; //20kbps
TEST2=0x81;
TEST1=0x35;
TEST0=0x0B;
//--------------------------------------------------------------
// Calibrating synth.
SIDLE();
SCAL();
while(MARCSTATE != 0x01);
RFTXRXIF = 0;
return;
}
bool pktCheckValidity(void)
{
// Check if received packet has correct CRC
if (pktCheckCrc())
{
return true;
}
// For wrong CRC
else
{
return false;
}
}
bool pktCheckCrc(void)
{
// Check if CRC_OK bit (bit 7) in the second status byte received is set
if(radioPktBuffer[radioPktBuffer[0] + 2] & 0x80){
radioPktBuffer[radioPktBuffer[0] + 2] = 0x00; // Clear status byte in buffer
return true;
}
else {
return false;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -