📄 rfconfig.c
字号:
/*------------------------------------------------------------------------------
Filename: rfConfig.c
Target: cc2430, cc2431, cc1110, cc2510, cc2511
Revised: 26/10-2005
Revision: 0.1
------------------------------------------------------------------------------*/
#include "hal.h"
//-----------------------------------------------------------------------------
// See hal.h for a description of this function.
//-----------------------------------------------------------------------------
bool halRfConfig(uint32 frequency)
{
bool status;
//Turning on crystal oscillator
SET_MAIN_CLOCK_SOURCE(CRYSTAL);
// Setting the frequency
halRfSetRadioFrequency(frequency);
#if (chip == 2430 || chip == 2431)
// Checking that the entered frequency is valid
if (frequency > 2047000)
{
// turning on power to analog part of radio and waiting for voltage regulator.
RFPWR = 0x04;
while( RFPWR & 0x10 );
// Turning off Address Decoding
MDMCTRL0H &= ~ADR_DECODE;
// Setting for AUTO CRC
MDMCTRL0L |= AUTO_CRC;
// Turning on AUTO_TX2RX
FSMTC1 = ((FSMTC1 & (~AUTO_TX2RX_OFF & ~RX2RX_TIME_OFF)) | ACCEPT_ACKPKT);
// Turning off abortRxOnSrxon.
FSMTC1 &= ~0x20;
#endif
#if (chip == 1110)
if (frequency < 1000000)
{
// 315 MHz band
if (frequency < 400000)
{
PA_TABLE0 = 0x63;
}
// 433 MHz band
else if (frequency < 800000)
{
PA_TABLE0 = 0xC0;
}
// 868 MHz band
else if (frequency < 890000)
{
PA_TABLE0 = 0x66;
}
// 915 MHz band
else
{
PA_TABLE0 = 0x66;
}
/**********************************************************************
* *
* 250 kbps MSK setup (for other data rates or modulation formats, *
* please see SmartRF Studio). *
* *
**********************************************************************/
/*
// Dynamic packet length
PKTLEN = 0xFF;
PKTCTRL0 = 0x05;
// Append status
PKTCTRL1 = 0x84;
// IF frequency
FSCTRL1 = 0x0B;
//
// FSCTRL0 = 0x00;
// filter BW, data rate,
// MDMCFG4 = 0x0E;
MDMCFG4 = 0x2D;
MDMCFG3 = 0x3B;
// Modulation format, detection level
MDMCFG2 = 0x73;
MDMCFG1 = 0x42;
// MDMCFG1 = 0x22;
// Deviation setting
DEVIATN = 0x00;
// Calibration synth
MCSM0 = 0x10;
// Frequency offset compensation configuration
FOCCFG = 0x1D;
// Bit synchronization
BSCFG = 0x1C;
// AGC and front end settings (from SmartRf04)
AGCCTRL2 = 0xC7;
// AGCCTRL1 = 0x40;
AGCCTRL1 = 0x00;
AGCCTRL0 = 0xB2;
FREND1 = 0xB6;
FSCAL3 = 0xEA;
// Synth calibration
// FSCAL0 = 0x19;
FSCAL0 = 0x11;
// PA_TABLE0 = 0xC3; */
FREQ2 = 0x10; // Actually 433.923 MHz to fit band
FREQ1 = 0x7C;
FREQ0 = 0x0F;
FSCTRL1 = 0x06; // Frequency synthesizer control.
FSCTRL0 = 0x00; // Frequency synthesizer control.
MDMCFG4 = 0xF5; // Modem configuration.
MDMCFG3 = 0x83; // Modem configuration.
MDMCFG2 = 0x03; // Modem configuration.
MDMCFG1 = 0x22; // Modem configuration.
MDMCFG0 = 0xF8; // Modem configuration.
CHANNR = 0X00; //one channel
DEVIATN = 0x24; // Modem deviation setting (when FSK modulation is enabled).
FREND0 = 0x10; // Front end RX configuration.
FREND1 = 0x56; // Front end RX configuration.
MCSM0 = 0x18; // Main Radio Control State Machine configuration.
FOCCFG = 0x16; // Frequency Offset Compensation Configuration.
BSCFG = 0x6C; // Bit synchronization Configuration.
AGCCTRL2 = 0x03; // AGC control.
AGCCTRL1 = 0x40; // AGC control.
AGCCTRL0 = 0x91; // AGC control.
FSCAL3 = 0xE9; // Frequency synthesizer calibration.
// Freq. dependent value: 433 MHz band vs 868/915 MHz band:
FSCAL2 = 0x0A ;
FSCAL1 = 0x00 ;
FSCAL0 = 0x1F; // Frequency synthesizer calibration.
TEST2 = 0x81; // Various test settings.
TEST1 = 0x35; // Various test settings.
TEST0 = 0x0B; // Various test settings.
SYNC1 = 0xD3;
SYNC1 = 0x91;
ADDR = 0X00;
PKTLEN = 0xFF;
PKTCTRL1 = 0x04;
PKTCTRL0 = 0x05;
// Calibrating synth.
SIDLE();
SCAL();
while(MARCSTATE != 0x01);
INT_SETFLAG(INUM_RFTXRX,INT_CLR);
#endif
#if (chip == 1111)
if (frequency < 1000000)
{
// 315 MHz band
if (frequency < 400000)
{
PA_TABLE0 = 0x63;
}
// 433 MHz band
else if (frequency < 800000)
{
PA_TABLE0 = 0x33;
}
// 868 MHz band
else if (frequency < 890000)
{
PA_TABLE0 = 0x66;
}
// 915 MHz band
else
{
PA_TABLE0 = 0x66;
}
/**********************************************************************
* *
* 250 kbps MSK setup (for other data rates or modulation formats, *
* please see SmartRF Studio). *
* *
**********************************************************************/
// Dynamic packet length
PKTLEN = 0xFF;
PKTCTRL0 = 0x05;
// Append status
PKTCTRL1 = 0x04;
// IF frequency
FSCTRL1 = 0x0A;
FSCTRL0 = 0x00;
// filter BW, data rate,
MDMCFG4 = 0x1D;
MDMCFG3 = 0x55;
// Modulation format, detection level
MDMCFG2 = 0x73;
MDMCFG1 = 0x23;
MDMCFG0 = 0x11;
// Deviation setting
DEVIATN = 0x00;
// Calibration synth
MCSM2 = 0x07;
MCSM1 = 0x30;
MCSM0 = 0x10;
// Frequency offset compensation configuration
FOCCFG = 0x1D;
// Bit synchronization
BSCFG = 0x1C;
// AGC and front end settings (from SmartRf04)
AGCCTRL2 = 0xC7;
AGCCTRL1 = 0x00;
AGCCTRL0 = 0xB2;
FREND1 = 0xB6;
// Synth calibration
FSCAL3 = 0xEA;
FSCAL0 = 0x11;
// Are these needed ?
// From Smart RF Studio
FOCCFG = 0x1D;
BSCFG = 0x1C;
//FSTEST = 0x59;
//PTEST = 0x7F;
//AGCTEST = 0x3F;
TEST2 = 0x88;
TEST1 = 0x31;
TEST0 = 0x0B;
// Calibrating synth.
SIDLE();
SCAL();
while(MARCSTATE != 0x01);
INT_SETFLAG(INUM_RFTXRX,INT_CLR);
#endif
#if(chip == 2510)
if (frequency > 2400000)
{
/**********************************************************************
* *
* 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 = 0x0B;
// Output power
PA_TABLE0 = 0xFF;
// Calibrating synth.
SIDLE();
SCAL();
while(MARCSTATE != 0x01);
INT_SETFLAG(INUM_RFTXRX,INT_CLR);
#endif
#if(chip == 2511)
if (frequency > 2400000)
{
/**********************************************************************
* *
* 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 = 0x1D;
MDMCFG3 = 0x55;
// Modulation format, detection level
MDMCFG2 = 0x73;
MDMCFG1 = 0x23;
MDMCFG0 = 0xF8;
// Deviation setting
DEVIATN = 0x00;
// Calibration synth
MCSM0 = 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 = 0x0B;
// Output power
PA_TABLE0 = 0xFF;
// Calibrating synth.
SIDLE();
SCAL();
while(MARCSTATE != 0x01);
INT_SETFLAG(INUM_RFTXRX,INT_CLR);
#endif
status = true;
}
else {
status = false;
}
return status;
}
/*------------------------------------------------------------------------------
0ooo
ooo0 ( )
( ) ) /
\ ( (_/
\_) Modify By:cuiqingwei [gary]
------------------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -