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

📄 halrftest.c

📁 基于cc1010的设计实例
💻 C
字号:
/*****************************************************************************
 *                                                                           *
 *        **********                                                         *
 *       ************                                                        *
 *      ***        ***                                                       *
 *      ***   +++   ***                                                      *
 *      ***   + +   ***                                                      *
 *      ***   +                    CHIPCON CC1010 EXAMPLE PROGRAM            *
 *      ***   + +   ***                 HAL RF test program                  *
 *      ***   +++   ***                                                      *
 *      ***       ***                                                        *
 *       ***********                                                         *
 *        *********                                                          *
 *                                                                           *
 *****************************************************************************
 * This program demonstrates the use of the HAL RF functions.                *
 *                                                                           *
 * Use the CC1010EB switches (1-4) to transmit a standard packet.            *
 *                                                                           *
 * CC1010EB LEDs:                                                            *
 *   Blue:   Transmitting                                                    *
 *   Yellow: Receiving                                                       *
 *   Red:    Transmission/reception failed                                   *
 *   Green:  Transmission/reception OK                                       *
 *****************************************************************************
 * Author:              JOL                                                  *
 *****************************************************************************
 * Revision history:                                                         *
 * 1.0  2002/08/29      First Public Release                                 *
 * 1.1  2002/09/13      Added 433, 868 and 915 MHz versions                  *
 *                                                                           *
 * $Log: halRFtest.c,v $
 * Revision 1.4  2003/08/18 12:08:44  tos
 * Synchronisation with library update (reentry issue).
 *
 * Revision 1.3  2003/05/12 11:01:31  tos
 * Increased preamble to support higher datarates.
 *
 * Revision 1.2  2002/11/19 14:36:51  kht
 * Added startup macros
 *
 * Revision 1.1  2002/10/14 10:53:19  tos
 * Initial version in CVS.
 *
 *                                                                           *
 ****************************************************************************/
#include <chipcon/reg1010.h>
#include <chipcon/cc1010eb.h>
#include <chipcon/hal.h>

// Protocol constants

#define PREAMBLE_BYTE_COUNT 7
#define PREAMBLE_BITS_SENSE 16

// Test packet
#define TEST_STRING_LENGTH 10
#define ACK_LENGTH 1
#define ACK_BYTE 0x42

byte testString[TEST_STRING_LENGTH];
byte ackString[ACK_LENGTH];
byte receivedString[TEST_STRING_LENGTH];


/*****************************************************************************
    MAIN PROGRAM
*****************************************************************************/
void main(void) {

    int n;
    byte result;


#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: 64 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, 0x15,    // Modem 0, 1 and 2: Manchester, 2.4 kBaud
    //0x43, 0x2F, 0x15,    // Modem 0, 1 and 2: NRZ, 2.4 kBaud
    //0xA1, 0x2F, 0x29,    // Modem 0, 1 and 2: NRZ, 38.4 kBaud
    //0xA0, 0x2F, 0x52,    // Modem 0, 1 and 2: NRZ, 76.8 kBaud
    0x75, 0xA0, 0x00,    // Freq A
    0x58, 0x32, 0x8D,    // Freq B
    0x01, 0xAB,          // 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: 64 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, 0x15,    // Modem 0, 1 and 2
    0xAA, 0x80, 0x00,    // Freq A
    0x5C, 0xF4, 0x02,    // Freq B
    0x01, 0xAB,          // 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: 64 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, 0x0E,    // Modem 0, 1 and 2
    0x58, 0x00, 0x00,    // Freq A
    0x41, 0xFC, 0x9C,    // Freq B
    0x02, 0x80,          // 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;




    // Initialize peripherals
    WDT_ENABLE(FALSE);
    RLED_OE(TRUE);
    YLED_OE(TRUE);
    GLED_OE(TRUE);
    BLED_OE(TRUE);

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

    // Ready for acknowledge
    ackString[0] = ACK_BYTE;

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

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

    while (TRUE) {
        if (SW1_PRESSED || SW2_PRESSED || SW3_PRESSED || SW4_PRESSED) { // TX
            YLED = LED_OFF;
            BLED = LED_ON;

            // Build test packet
            for (n = 0; n < TEST_STRING_LENGTH; n++) { 
                testString[n] = n;
            }

            // Turn on RF, send packet
            halRFSetRxTxOff(RF_TX, &RF_SETTINGS, &RF_CALDATA);
            halRFSendPacket(PREAMBLE_BYTE_COUNT, &testString[0], TEST_STRING_LENGTH);

            // Turn on RF, receive ACK, turn off RF
            halRFSetRxTxOff(RF_RX, &RF_SETTINGS, &RF_CALDATA);
            result = halRFReceivePacket(100/10, &receivedString[0], ACK_LENGTH, 0, CC1010EB_CLKFREQ);

            // Success/failure indicators
            if ((result == ACK_LENGTH) && (receivedString[0] == ACK_BYTE)) {
                RLED = LED_OFF;
                GLED = LED_ON;
            } else {
                RLED = LED_ON;
            }

            // Wait, then turn off LEDs
            halWait(40, CC1010EB_CLKFREQ);
            GLED = LED_OFF;
            RLED = LED_OFF;

        } else { // RX
            YLED = LED_ON;
            BLED = LED_OFF;

            // Turn on RF, receive test string packet, turn off RF
            result = halRFReceivePacket(500/10, &receivedString[0], TEST_STRING_LENGTH, 0, CC1010EB_CLKFREQ);

            // Success/failure indicators
            if (result == TEST_STRING_LENGTH) {
                GLED = LED_ON;
                halRFSetRxTxOff(RF_TX, &RF_SETTINGS, &RF_CALDATA);
                halRFSendPacket(PREAMBLE_BYTE_COUNT, &ackString[0], ACK_LENGTH);
                halRFSetRxTxOff(RF_RX, &RF_SETTINGS, &RF_CALDATA); // Back to RX
            };

            // Wait, then turn off LEDs
            halWait(10, CC1010EB_CLKFREQ);
            GLED = LED_OFF;
            RLED = LED_OFF;
        }
    }
} // end of main()

⌨️ 快捷键说明

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