⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfconfig.c

📁 TI的CC1110、CC2510、CC2430射频SOC的驱动程序
💻 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 + -