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

📄 spptest.c

📁 基于cc1010的设计实例
💻 C
字号:
/*****************************************************************************
 *                                                                           *
 *        **********                                                         *
 *       ************                                                        *
 *      ***        ***                                                       *
 *      ***   +++   ***                                                      *
 *      ***   + +   ***                                                      *
 *      ***   +                    CHIPCON CC1010 EXAMPLE PROGRAM            *
 *      ***   + +   ***       Simple Packet Protocol (SPP) test program      *
 *      ***   +++   ***                                                      *
 *      ***       ***                                                        *
 *       ***********                                                         *
 *        *********                                                          *
 *                                                                           *
 *****************************************************************************
 * This program demonstrates the use of the simple packet protocol (SPP).    *
 *                                                                           *
 * Use the CC1010EB switches (1-4) to transmit messages:                     *
 *   SW1:  Send packet with ack (timeout)                                    *
 *   SW2:  Send packet without ack                                           *
 *   SW3:  Send broadcast packet                                             *
 *   SW4:  Send too long packet with ack                                     *
 *   None: Receive packets (with timeout)                                    *
 *                                                                           *
 * CC1010EB LEDs:                                                            *
 *   Green:  Successful transmission/reception                               *
 *   Yellow: Timeout                                                         *
 *   Red:    Packet too long / received invalid ack                          *
 *****************************************************************************
 * Author:              JOL                                                  *
 *****************************************************************************
 * Revision history:                                                         *
 * 1.0  2002/08/29      First Public Release                                 *
 *                                                                           *
 * $Log: sppTest.c,v $
 * Revision 1.3  2003/04/03 12:34:57  tos
 * Modified for compatibility with CUL version 1.3.
 *
 * Revision 1.2  2002/11/19 15:23:45  kht
 * Added startup macros
 *
 * Revision 1.1  2002/10/14 11:02:04  tos
 * Initial version in CVS.
 *
 *                                                                           *
 ****************************************************************************/


#include <chipcon/cc1010eb.h>
#include <chipcon/cul.h>
#include <stdlib.h> // srand(), rand()


// Test packet
#define TEST_DATA_LENGTH    254

#define MY_ADDRESS          255
#define DEST_ADDRESS        255

// SPP variables
SPP_SETTINGS xdata sppSettings;

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

    int n;
    SPP_RX_INFO xdata RXI;
    SPP_TX_INFO xdata TXI;
    byte xdata pRXData[TEST_DATA_LENGTH];
    byte xdata pTXData[TEST_DATA_LENGTH];


#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: 19.2 kBaud
// Data Format: NRZ
// RF output power: 4 dBm
// IF/RSSI: RSSI Enabled

RF_RXTXPAIR_SETTINGS code RF_SETTINGS = {
    0xA3, 0x2F, 0x15,    // Modem 0, 1 and 2
    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: 19.2 kBaud
// Data Format: NRZ
// RF output power: 4 dBm
// IF/RSSI: RSSI Enabled

RF_RXTXPAIR_SETTINGS code RF_SETTINGS = {
    0xA3, 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: 19.2 kBaud
// Data Format: NRZ
// RF output power: 10 dBm
// IF/RSSI: RSSI Enabled

RF_RXTXPAIR_SETTINGS code RF_SETTINGS = {
    0xA3, 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);

    // Local settings
    sppSettings.myAddress = MY_ADDRESS;
    sppSettings.rxTimeout = 30;
    sppSettings.txAckTimeout = 2;
    sppSettings.txAttempts = 4;
    sppSettings.txPreambleByteCount = 7;

    // RF setup
    sppSetupRF(&RF_SETTINGS, &RF_CALDATA, TRUE);

    // Initialize the SPP timer
    sppStartTimer(CC1010EB_CLKFREQ);
    SPP_INIT_TIMEOUTS();

    // Prepare TX data
    srand(0x1234);
    for (n = 0; n < TEST_DATA_LENGTH; n++) { 
        pTXData[n] = rand();
    }

    TXI.flags = 0x00;

    // Test loop:
    while (TRUE) {
        if (SW1_PRESSED) {

            // Prepare to transmit
            TXI.destination = DEST_ADDRESS;
            TXI.flags |= SPP_ACK_REQ;
            TXI.pDataBuffer = pTXData;
            TXI.dataLen = TEST_DATA_LENGTH;

            if (sppSend(&TXI) == SPP_TX_STARTED) {
                // Wait
                do { /* nothing */ } while (SPP_STATUS() != SPP_IDLE_MODE);
                if (TXI.status == SPP_TX_ACK_INVALID) {
                    RLED = LED_ON;
                } else if (TXI.status == SPP_TX_ACK_TIMEOUT) {
                    YLED = LED_ON;
                } else if (TXI.status == SPP_TX_FINISHED) {
                    GLED = LED_ON;
                }
            }

        } else if (SW2_PRESSED) {

            // Prepare to transmit
            TXI.destination = DEST_ADDRESS;
            TXI.flags &= ~SPP_ACK_REQ;
            TXI.pDataBuffer = pTXData;
            TXI.dataLen = TEST_DATA_LENGTH;

            if (sppSend(&TXI) == SPP_TX_STARTED) {
                // Wait
                do { /* nothing */ } while (SPP_STATUS() != SPP_IDLE_MODE);
                if (TXI.status == SPP_TX_ACK_INVALID) {
                    RLED = LED_ON;
                } else if (TXI.status == SPP_TX_ACK_TIMEOUT) {
                    YLED = LED_ON;
                } else if (TXI.status == SPP_TX_FINISHED) {
                    GLED = LED_ON;
                }
            }

        } else if (SW3_PRESSED) {

            // Prepare to transmit
            TXI.destination = SPP_BROADCAST;
            TXI.flags &= ~SPP_ACK_REQ;		
            TXI.pDataBuffer = pTXData;
            TXI.dataLen = 15;

            if (sppSend(&TXI) == SPP_TX_STARTED) {
                // Wait
                do { /* nothing */ } while (SPP_STATUS() != SPP_IDLE_MODE);
                if (TXI.status == SPP_TX_ACK_INVALID) {
                    RLED = LED_ON;
                } else if (TXI.status == SPP_TX_ACK_TIMEOUT) {
                    YLED = LED_ON;
                } else if (TXI.status == SPP_TX_FINISHED) {
                    GLED = LED_ON;
                }
            }

        } else if (SW4_PRESSED) {

            // Prepare to transmit
            TXI.destination = DEST_ADDRESS;
            TXI.flags |= SPP_ACK_REQ;		
            TXI.pDataBuffer = pTXData;
            TXI.dataLen = TEST_DATA_LENGTH + 1;

            if (sppSend(&TXI) == SPP_TX_STARTED) {
                // Wait
                do { /* nothing */ } while (SPP_STATUS() != SPP_IDLE_MODE);
                if (TXI.status == SPP_TX_ACK_INVALID) {
                    RLED = LED_ON;
                } else if (TXI.status == SPP_TX_ACK_TIMEOUT) {
                    YLED = LED_ON;
                } else if (TXI.status == SPP_TX_FINISHED) {
                    GLED = LED_ON;
                }
            }

        } else { // RX

            // Prepare to receive
            RXI.pDataBuffer = pRXData;
            RXI.maxDataLen = TEST_DATA_LENGTH;			
            if (sppReceive(&RXI) == SPP_RX_STARTED) {
                // Wait
                do { /* nothing */ } while (SPP_STATUS() != SPP_IDLE_MODE);
                if (RXI.status == SPP_RX_TIMEOUT) {
                    YLED = LED_ON;
                } else if (RXI.status == SPP_RX_TOO_LONG) {
                    RLED = LED_ON;
                } else if (RXI.status == SPP_RX_FINISHED) {
                    GLED = LED_ON;
					if (RXI.flags & SPP_SEQUENCE_BIT) {
						BLED = LED_ON;
					}
                } 
            }
        }

        // Wait, then turn off LEDs
        halWait(20, CC1010EB_CLKFREQ);
        GLED = LED_OFF;
        RLED = LED_OFF;
        YLED = LED_OFF;
		BLED = LED_OFF;
    }
} // main

⌨️ 快捷键说明

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