// $Id: CC1000Const.h,v 1.15.2.5 2003/09/19 00:48:29 philipb Exp $ /* tab:4 * "Copyright (c) 2000-2003 The Regents of the University of California. * All rights reserved. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose, without fee, and without written agreement is * hereby granted, provided that the above copyright notice, the following * two paragraphs and the author appear in all copies of this software. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." * * Copyright (c) 2002-2003 Intel Corporation * All rights reserved. * * This file is distributed under the terms in the attached INTEL-LICENSE * file. If you do not find these files, copies can be found by writing to * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, * 94704. Attention: Intel License Inquiry. */ /* * * Authors: Phil Buonadonna * Date last modified: $Id: CC1000Const.h,v 1.15.2.5 2003/09/19 00:48:29 philipb Exp $ * */ /** * @author Phil Buonadonna */ #ifndef _CC1KCONST_H #define _CC1KCONST_H #include /* Constants defined for CC1K */ /* Register addresses */ #define CC1K_MAIN 0x00 #define CC1K_FREQ_2A 0x01 #define CC1K_FREQ_1A 0x02 #define CC1K_FREQ_0A 0x03 #define CC1K_FREQ_2B 0x04 #define CC1K_FREQ_1B 0x05 #define CC1K_FREQ_0B 0x06 #define CC1K_FSEP1 0x07 #define CC1K_FSEP0 0x08 #define CC1K_CURRENT 0x09 #define CC1K_FRONT_END 0x0A //10 #define CC1K_PA_POW 0x0B //11 #define CC1K_PLL 0x0C //12 #define CC1K_LOCK 0x0D //13 #define CC1K_CAL 0x0E //14 #define CC1K_MODEM2 0x0F //15 #define CC1K_MODEM1 0x10 //16 #define CC1K_MODEM0 0x11 //17 #define CC1K_MATCH 0x12 //18 #define CC1K_FSCTRL 0x13 //19 #define CC1K_FSHAPE7 0x14 //20 #define CC1K_FSHAPE6 0x15 //21 #define CC1K_FSHAPE5 0x16 //22 #define CC1K_FSHAPE4 0x17 //23 #define CC1K_FSHAPE3 0x18 //24 #define CC1K_FSHAPE2 0x19 //25 #define CC1K_FSHAPE1 0x1A //26 #define CC1K_FSDELAY 0x1B //27 #define CC1K_PRESCALER 0x1C //28 #define CC1K_TEST6 0x40 //64 #define CC1K_TEST5 0x41 //66 #define CC1K_TEST4 0x42 //67 #define CC1K_TEST3 0x43 //68 #define CC1K_TEST2 0x44 //69 #define CC1K_TEST1 0x45 //70 #define CC1K_TEST0 0x46 //71 // MAIN Register Bit Posititions #define CC1K_RXTX 7 #define CC1K_F_REG 6 #define CC1K_RX_PD 5 #define CC1K_TX_PD 4 #define CC1K_FS_PD 3 #define CC1K_CORE_PD 2 #define CC1K_BIAS_PD 1 #define CC1K_RESET_N 0 // CURRENT Register Bit Positions #define CC1K_VCO_CURRENT 4 #define CC1K_LO_DRIVE 2 #define CC1K_PA_DRIVE 0 // FRONT_END Register Bit Positions #define CC1K_BUF_CURRENT 5 #define CC1K_LNA_CURRENT 3 #define CC1K_IF_RSSI 1 #define CC1K_XOSC_BYPASS 0 // PA_POW Register Bit Positions #define CC1K_PA_HIGHPOWER 4 #define CC1K_PA_LOWPOWER 0 // PLL Register Bit Positions #define CC1K_EXT_FILTER 7 #define CC1K_REFDIV 3 #define CC1K_ALARM_DISABLE 2 #define CC1K_ALARM_H 1 #define CC1K_ALARM_L 0 // LOCK Register Bit Positions #define CC1K_LOCK_SELECT 4 #define CC1K_PLL_LOCK_ACCURACY 3 #define CC1K_PLL_LOCK_LENGTH 2 #define CC1K_LOCK_INSTANT 1 #define CC1K_LOCK_CONTINUOUS 0 // CAL Register Bit Positions #define CC1K_CAL_START 7 #define CC1K_CAL_DUAL 6 #define CC1K_CAL_WAIT 5 #define CC1K_CAL_CURRENT 4 #define CC1K_CAL_COMPLETE 3 #define CC1K_CAL_ITERATE 0 // MODEM2 Register Bit Positions #define CC1K_PEAKDETECT 7 #define CC1K_PEAK_LEVEL_OFFSET 0 // MODEM1 Register Bit Positions #define CC1K_MLIMIT 5 #define CC1K_LOCK_AVG_IN 4 #define CC1K_LOCK_AVG_MODE 3 #define CC1K_SETTLING 1 #define CC1K_MODEM_RESET_N 0 // MODEM0 Register Bit Positions #define CC1K_BAUDRATE 4 #define CC1K_DATA_FORMAT 2 #define CC1K_XOSC_FREQ 0 // MATCH Register Bit Positions #define CC1K_RX_MATCH 4 #define CC1K_TX_MATCH 0 // FSCTLR Register Bit Positions #define CC1K_DITHER1 3 #define CC1K_DITHER0 2 #define CC1K_SHAPE 1 #define CC1K_FS_RESET_N 0 // PRESCALER Register Bit Positions #define CC1K_PRE_SWING 6 #define CC1K_PRE_CURRENT 4 #define CC1K_IF_INPUT 3 #define CC1K_IF_FRONT 2 // TEST6 Register Bit Positions #define CC1K_LOOPFILTER_TP1 7 #define CC1K_LOOPFILTER_TP2 6 #define CC1K_CHP_OVERRIDE 5 #define CC1K_CHP_CO 0 // TEST5 Register Bit Positions #define CC1K_CHP_DISABLE 5 #define CC1K_VCO_OVERRIDE 4 #define CC1K_VCO_AO 0 // TEST3 Register Bit Positions #define CC1K_BREAK_LOOP 4 #define CC1K_CAL_DAC_OPEN 0 /* * CC1K Register Parameters Table * * This table follows the same format order as the CC1K register * set EXCEPT for the last entry in the table which is the * CURRENT register value for TX mode. * * NOTE: To save RAM space, this table resides in program memory (flash). * This has two important implications: * 1) You can't write to it (duh!) * 2) You must read it using the PRG_RDB(addr) macro. IT CANNOT BE ACCESSED AS AN ORDINARY C ARRAY. * * Add/remove individual entries below to suit your RF tastes. * */ #define CC1K_433_002_MHZ 0x00 #define CC1K_915_998_MHZ 0x01 #define CC1K_434_845_MHZ 0x02 #define CC1K_914_077_MHZ 0x03 #define CC1K_315_178_MHZ 0x04 #ifdef CC1K_DEFAULT_FREQ #define CC1K_DEF_PRESET (CC1K_DEFAULT_FREQ) #endif #ifdef CC1K_MANUAL_FREQ #define CC1K_DEF_FREQ (CC1K_MANUAL_FREQ) #endif #ifndef CC1K_DEF_PRESET #define CC1K_DEF_PRESET (CC1K_433_002_MHZ) #endif #define CC1K_LPL_STATES 7 #define CC1K_LPL_PACKET_TIME 16 // duty cycle max packets effective throughput // ----------------- ----------------- ----------------- // 100% duty cycle 42.93 packets/sec 12.364kbps // 35.5% duty cycle 19.69 packets/sec 5.671kbps // 11.5% duty cycle 8.64 packets/sec 2.488kbps // 7.53% duty cycle 6.03 packets/sec 1.737kbps // 5.61% duty cycle 4.64 packets/sec 1.336kbps // 2.22% duty cycle 1.94 packets/sec 0.559kbps // 1.00% duty cycle 0.89 packets/sec 0.258kbps static const prog_uchar CC1K_LPL_PreambleLength[CC1K_LPL_STATES*2] = { 0, 28, //28 0, 94, //94 0, 250, //250 0x01, 0x73, //371, 0x01, 0xEA, //490, 0x04, 0xBC, //1212 0x0A, 0x5E //2654 }; static const prog_uchar CC1K_LPL_ValidPrecursor[CC1K_LPL_STATES] = { 5, 2, 2, 2, 2, 2, 2 }; static const prog_uchar CC1K_LPL_SleepTime[CC1K_LPL_STATES*2] = { 0, 0, //0 0, 20, //20 0, 85, //85 0, 135, //135 0, 185, //185 0x01, 0xE5, //485 0x04, 0x3D //1085 }; static const prog_uchar CC1K_LPL_SleepPreamble[CC1K_LPL_STATES] = { 0, 8, 8, 8, 8, 8, 8 }; static const prog_uchar CC1K_LPL_SquelchInit[CC1K_LPL_STATES] = { 0xAE, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF }; static const prog_uchar CC1K_Params[6][31] = { // (0) 433.002 MHz channel, 19.2 Kbps data, Manchester Encoding, High Side LO { // MAIN 0x00 0x31, // FREQ2A,FREQ1A,FREQ0A 0x01-0x03 0x58,0x00,0x00, // FREQ2B,FREQ1B,FREQ0B 0x04-0x06 0x57,0xf6,0x85, //XBOW // FSEP1, FSEP0 0x07-0x08 0X03,0x55, // CURRENT (RX MODE VALUE) 0x09 (also see below) ((4<