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

📄 main.c

📁 基于cc1010的设计实例
💻 C
字号:
/*****************************************************************************
 *                                                                           *
 *        **********                                                         *
 *       ************                                                        *
 *      ***        ***                                                       *
 *      ***   +++   ***                                                      *
 *      ***   + +   ***                                                      *
 *      ***   +                    CHIPCON CC1010 EXAMPLE PROGRAM            *
 *      ***   + +   ***              SIMPLE+FAST RX/TX SWITCHING             *
 *      ***   +++   ***                                                      *
 *      ***       ***                                                        *
 *       ***********                                                         *
 *        *********                                                          *
 *                                                                           *
 *****************************************************************************
 * This program makes the CC1010 automatically switch between RX/TX          *
 * at high rate.                                                             *
 *****************************************************************************
 * Author:              TOS                                                  *
 *****************************************************************************
 * Revision history:                                                         *
 *                                                                           *
 * $Log: main.c,v $
 * Revision 1.2  2003/05/12 11:11:10  tos
 * Configured TESTMUX to output frequency synthesizer clock on pin0.1.
 *
 * Revision 1.1  2003/04/28 14:24:54  tos
 * Initial version in CVS.
 *
 *
 *                                                                           *
 ****************************************************************************/

#include <chipcon/reg1010.h>
#include <chipcon/cc1010eb.h>
#include <chipcon/hal.h>


// Note: Separation is set to zero for all RF settings, this is done so that the
// user can measure on an unmodulated carrier in TX mode

#ifdef FREQ868

// X-tal frequency: 14.745600 MHz
// RF frequency A: 868.277200 MHz	Rx
// RF frequency B: 868.277200 MHz	Tx
// RX Mode: Low side LO
// Frequency separation:  0 kHz
// Data rate: 2.4 kBaud
// Data Format: Manchester
// RF output power: 4 dBm
// IF/RSSI: RSSI Enabled

RF_RXTXPAIR_SETTINGS code RF_SETTINGS = {
    0x4B, 0x2F, 0x0F,    // Modem 0, 1 and 2
    0x75, 0xA0, 0x00,    // Freq A
    0x58, 0x33, 0x63,    // Freq B
    0x00, 0x00,          // FSEP 1 and 0
    0x40,                // PLL_RX
    0x30,                // PLL_TX
    0x6C,                // CURRENT_RX
    0xF3,                // CURRENT_TX
    0x32,                // FREND
    0xFF,                // PA_POW
    0x00,                // MATCH
    0x00,                // PRESCALER
    };

#endif

#ifdef FREQ915

// X-tal frequency: 14.745600 MHz
// RF frequency A: 915.027455 MHz	Rx
// RF frequency B: 915.027455 MHz	Tx
// RX Mode: Low side LO
// Frequency separation:  0 kHz
// Data rate: 2.4 kBaud
// Data Format: Manchester
// RF output power: 4 dBm
// IF/RSSI: RSSI Enabled

RF_RXTXPAIR_SETTINGS code RF_SETTINGS = {
    0x4B, 0x2F, 0x0F,    // Modem 0, 1 and 2
    0xAA, 0x80, 0x00,    // Freq A
    0x5C, 0xF4, 0xD7,    // Freq B
    0x00, 0x00,          // FSEP 1 and 0
    0x58,                // PLL_RX
    0x30,                // PLL_TX
    0x6C,                // CURRENT_RX
    0xF3,                // CURRENT_TX
    0x32,                // FREND
    0xFF,                // PA_POW
    0x00,                // MATCH
    0x00,                // PRESCALER
    };

#endif

#ifdef FREQ433

// X-tal frequency: 14.745600 MHz
// RF frequency A: 433.302000 MHz	Rx
// RF frequency B: 433.302000 MHz	Tx
// RX Mode: Low side LO
// Frequency separation:  0 kHz
// Data rate: 2.4 kBaud
// Data Format: Manchester
// RF output power: 10 dBm
// IF/RSSI: RSSI Enabled

RF_RXTXPAIR_SETTINGS code RF_SETTINGS = {
    0x4B, 0x2F, 0x0A,    // Modem 0, 1 and 2
    0x58, 0x00, 0x00,    // Freq A
    0x41, 0xFD, 0xDC,    // Freq B
    0x00, 0x00,          // FSEP 1 and 0
    0x60,                // PLL_RX
    0x48,                // PLL_TX
    0x44,                // CURRENT_RX
    0x81,                // CURRENT_TX
    0x0A,                // FREND
    0xFF,                // PA_POW
    0xC0,                // MATCH
    0x00,                // PRESCALER
    };

#endif

// Calibration data
RF_RXTXPAIR_CALDATA xdata RF_CALDATA;


ulong timeout;
word  tCounter;
char state;
int int_cntr;

void main() {
    
    // Disable watchdog timer
    WDT_ENABLE(FALSE);

    // Set optimum settings for speed and low power consumption
    MEM_NO_WAIT_STATES();
    FLASH_SET_POWER_MODE(FLASH_STANDBY_BETWEEN_READS);

    // Calibrate
    halRFCalib(&RF_SETTINGS, &RF_CALDATA);

    // Turn on RF for RX
    halRFSetRxTxOff(RF_RX, &RF_SETTINGS, &RF_CALDATA);

    // Enable bitmode, start RX
    RF_SET_BITMODE();
    RF_START_RX();

    BLED_OE(TRUE); BLED = LED_OFF;
    GLED_OE(TRUE); GLED = LED_OFF;

    RLED_OE(TRUE); RLED = LED_OFF;
    YLED_OE(TRUE); YLED = LED_ON;

    // Set port0 pin 1 direction
    halSetPortBitDir(0, 1, POUT);

    // Set up so that internal synth.clock is present on p0.1
    TESTMUX = 0x01;

    // Configure timer 0 to generate an interrupt after 6 msec.
    int_cntr = 0;
    timeout = 5000; // usec
    halConfigTimer01(TIMER0 | TIMER01_INT_TIMER, timeout, CC1010EB_CLKFREQ, &tCounter);
    INT_ENABLE(INUM_TIMER0, INT_ON);
    TIMER0_RUN(TRUE);
    INT_GLOBAL_ENABLE(TRUE);

    while(1){
    }
}



//----------------------------------------------------------------------------
//  Timer 0 interrupt service routine:
//----------------------------------------------------------------------------
void TIMER0_ISR() interrupt INUM_TIMER0 {

    // Reset the timer to generate another interrupt
    INT_SETFLAG (INUM_TIMER0, INT_CLR);
    ISR_TIMER0_ADJUST(tCounter);        

    if(state == 1){
        state=0;
        halRFSetRxTxOff(RF_TX, &RF_SETTINGS, &RF_CALDATA);
        RF_START_TX();
    }else{
        state=1;
        halRFSetRxTxOff(RF_RX, &RF_SETTINGS, &RF_CALDATA);
        RF_START_RX();
    }

    // Toggle LEDs
    if(int_cntr-- < 0){
        int_cntr = 0x0010;
        RLED = ~RLED;   
        YLED = ~YLED;
    }

} // TIMER0_ISR

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -