📄 cc1000const.h
字号:
// $Id: CC1000Const.h,v 1.5 2008/06/11 00:46:23 razvanm Exp $
/* -*- Mode: C; c-basic-indent: 2; indent-tabs-mode: nil -*- */
/*
* IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By
* downloading, copying, installing or using the software you agree to
* this license. If you do not agree to this license, do not download,
* install, copy or use the software.
*
* Intel Open Source License
*
* Copyright (c) 2002 Intel Corporation
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the Intel Corporation nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*
*/
/*
* Constants for CC1000 radio
*
* @author Phil Buonadonna
*/
#ifndef CC1000CONST_H
#define CC1000CONST_H
/* Constants defined for CC1K */
/* Register addresses */
enum {
CC1K_MAIN = 0x00,
CC1K_FREQ_2A = 0x01,
CC1K_FREQ_1A = 0x02,
CC1K_FREQ_0A = 0x03,
CC1K_FREQ_2B = 0x04,
CC1K_FREQ_1B = 0x05,
CC1K_FREQ_0B = 0x06,
CC1K_FSEP1 = 0x07,
CC1K_FSEP0 = 0x08,
CC1K_CURRENT = 0x09,
CC1K_FRONT_END = 0x0A, //10
CC1K_PA_POW = 0x0B, //11
CC1K_PLL = 0x0C, //12
CC1K_LOCK = 0x0D, //13
CC1K_CAL = 0x0E, //14
CC1K_MODEM2 = 0x0F, //15
CC1K_MODEM1 = 0x10, //16
CC1K_MODEM0 = 0x11, //17
CC1K_MATCH = 0x12, //18
CC1K_FSCTRL = 0x13, //19
CC1K_FSHAPE7 = 0x14, //20
CC1K_FSHAPE6 = 0x15, //21
CC1K_FSHAPE5 = 0x16, //22
CC1K_FSHAPE4 = 0x17, //23
CC1K_FSHAPE3 = 0x18, //24
CC1K_FSHAPE2 = 0x19, //25
CC1K_FSHAPE1 = 0x1A, //26
CC1K_FSDELAY = 0x1B, //27
CC1K_PRESCALER = 0x1C, //28
CC1K_TEST6 = 0x40, //64
CC1K_TEST5 = 0x41, //66
CC1K_TEST4 = 0x42, //67
CC1K_TEST3 = 0x43, //68
CC1K_TEST2 = 0x44, //69
CC1K_TEST1 = 0x45, //70
CC1K_TEST0 = 0x46, //71
// MAIN Register Bit Posititions
CC1K_RXTX = 7,
CC1K_F_REG = 6,
CC1K_RX_PD = 5,
CC1K_TX_PD = 4,
CC1K_FS_PD = 3,
CC1K_CORE_PD = 2,
CC1K_BIAS_PD = 1,
CC1K_RESET_N = 0,
// CURRENT Register Bit Positions
CC1K_VCO_CURRENT = 4,
CC1K_LO_DRIVE = 2,
CC1K_PA_DRIVE = 0,
// FRONT_END Register Bit Positions
CC1K_BUF_CURRENT = 5,
CC1K_LNA_CURRENT = 3,
CC1K_IF_RSSI = 1,
CC1K_XOSC_BYPASS = 0,
// PA_POW Register Bit Positions
CC1K_PA_HIGHPOWER = 4,
CC1K_PA_LOWPOWER = 0,
// PLL Register Bit Positions
CC1K_EXT_FILTER = 7,
CC1K_REFDIV = 3,
CC1K_ALARM_DISABLE = 2,
CC1K_ALARM_H = 1,
CC1K_ALARM_L = 0,
// LOCK Register Bit Positions
CC1K_LOCK_SELECT = 4,
CC1K_PLL_LOCK_ACCURACY = 3,
CC1K_PLL_LOCK_LENGTH = 2,
CC1K_LOCK_INSTANT = 1,
CC1K_LOCK_CONTINUOUS = 0,
// CAL Register Bit Positions
CC1K_CAL_START = 7,
CC1K_CAL_DUAL = 6,
CC1K_CAL_WAIT = 5,
CC1K_CAL_CURRENT = 4,
CC1K_CAL_COMPLETE = 3,
CC1K_CAL_ITERATE = 0,
// MODEM2 Register Bit Positions
CC1K_PEAKDETECT = 7,
CC1K_PEAK_LEVEL_OFFSET = 0,
// MODEM1 Register Bit Positions
CC1K_MLIMIT = 5,
CC1K_LOCK_AVG_IN = 4,
CC1K_LOCK_AVG_MODE = 3,
CC1K_SETTLING = 1,
CC1K_MODEM_RESET_N = 0,
// MODEM0 Register Bit Positions
CC1K_BAUDRATE = 4,
CC1K_DATA_FORMAT = 2,
CC1K_XOSC_FREQ = 0,
// MATCH Register Bit Positions
CC1K_RX_MATCH = 4,
CC1K_TX_MATCH = 0,
// FSCTLR Register Bit Positions
CC1K_DITHER1 = 3,
CC1K_DITHER0 = 2,
CC1K_SHAPE = 1,
CC1K_FS_RESET_N = 0,
// PRESCALER Register Bit Positions
CC1K_PRE_SWING = 6,
CC1K_PRE_CURRENT = 4,
CC1K_IF_INPUT = 3,
CC1K_IF_FRONT = 2,
// TEST6 Register Bit Positions
CC1K_LOOPFILTER_TP1 = 7,
CC1K_LOOPFILTER_TP2 = 6,
CC1K_CHP_OVERRIDE = 5,
CC1K_CHP_CO = 0,
// TEST5 Register Bit Positions
CC1K_CHP_DISABLE = 5,
CC1K_VCO_OVERRIDE = 4,
CC1K_VCO_AO = 0,
// TEST3 Register Bit Positions
CC1K_BREAK_LOOP = 4,
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.
*
*/
CC1K_433_002_MHZ = 0x00,
CC1K_915_998_MHZ = 0x01,
CC1K_434_845_MHZ = 0x02,
CC1K_914_077_MHZ = 0x03,
CC1K_315_178_MHZ = 0x04,
//#define CC1K_SquelchInit 0x02F8 // 0.90V using the bandgap reference
CC1K_SquelchInit = 0x120,
CC1K_SquelchTableSize = 9,
CC1K_MaxRSSISamples = 5,
CC1K_Settling = 1,
CC1K_ValidPrecursor = 2,
CC1K_SquelchIntervalFast = 128,
CC1K_SquelchIntervalSlow = 2560,
CC1K_SquelchCount = 30,
CC1K_SquelchBuffer = 12,
CC1K_LPL_STATES = 9,
CC1K_LPL_PACKET_TIME = 16,
CC1K_LPL_CHECK_TIME = 16, /* In tenth's of milliseconds, this should
be an approximation of the on-time for
a LPL check rather than the total check
time. */
CC1K_LPL_MIN_INTERVAL = 5, /* In milliseconds, the minimum interval
between low-power-listening checks */
CC1K_LPL_MAX_INTERVAL = 10000 /* In milliseconds, the maximum interval
between low-power-listening checks.
Arbitrary value, but must be at
most 32767 because of the way
sleep interval is stored in outgoing
messages */
};
#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_434_845_MHZ)
#endif
static const_uint8_t CC1K_Params[6][20] = {
// (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 << CC1K_VCO_CURRENT | 1 << CC1K_LO_DRIVE,
// FRONT_END 0x0a
1 << CC1K_IF_RSSI,
// PA_POW 0x0b
0x0 << CC1K_PA_HIGHPOWER | 0xf << CC1K_PA_LOWPOWER,
// PLL 0x0c
12 << CC1K_REFDIV,
// LOCK 0x0d
0xe << CC1K_LOCK_SELECT,
// CAL 0x0e
1 << CC1K_CAL_WAIT | 6 << CC1K_CAL_ITERATE,
// MODEM2 0x0f
0 << CC1K_PEAKDETECT | 28 << CC1K_PEAK_LEVEL_OFFSET,
// MODEM1 0x10
3 << CC1K_MLIMIT | 1 << CC1K_LOCK_AVG_MODE | CC1K_Settling << CC1K_SETTLING | 1 << CC1K_MODEM_RESET_N,
// MODEM0 0x11
5 << CC1K_BAUDRATE | 1 << CC1K_DATA_FORMAT | 1 << CC1K_XOSC_FREQ,
// MATCH 0x12
0x7 << CC1K_RX_MATCH | 0x0 << CC1K_TX_MATCH,
// tx current (extra)
8 << CC1K_VCO_CURRENT | 1 << CC1K_PA_DRIVE,
},
// 1 915.9988 MHz channel, 19.2 Kbps data, Manchester Encoding, High Side LO
{ // MAIN 0x00
0x31,
// FREQ2A,FREQ1A,FREQ0A 0x01-0x03
0x7c,0x00,0x00,
// FREQ2B,FREQ1B,FREQ0B 0x04-0x06
0x7b,0xf9,0xae,
// FSEP1, FSEP0 0x07-0x8
0x02,0x38,
// CURRENT RX MODE VALUE 0x09 also see below
8 << CC1K_VCO_CURRENT | 3 << CC1K_LO_DRIVE,
//0x8C,
// FRONT_END 0x0a
1 << CC1K_BUF_CURRENT | 2 << CC1K_LNA_CURRENT | 1 << CC1K_IF_RSSI,
//0x32,
// PA_POW 0x0b
0x8 << CC1K_PA_HIGHPOWER | 0x0 << CC1K_PA_LOWPOWER,
//0xff,
// PLL 0xc
8 << CC1K_REFDIV,
//0x40,
// LOCK 0xd
0x1 << CC1K_LOCK_SELECT,
//0x10,
// CAL 0xe
1 << CC1K_CAL_WAIT | 6 << CC1K_CAL_ITERATE,
//0x26,
// MODEM2 0xf
1 << CC1K_PEAKDETECT | 33 << CC1K_PEAK_LEVEL_OFFSET,
//0xA1,
// MODEM1 0x10
3 << CC1K_MLIMIT | 1 << CC1K_LOCK_AVG_MODE | CC1K_Settling << CC1K_SETTLING | 1 << CC1K_MODEM_RESET_N,
//0x6f,
// MODEM0 0x11
5 << CC1K_BAUDRATE | 1 << CC1K_DATA_FORMAT | 1 << CC1K_XOSC_FREQ,
//0x55,
// MATCH 0x12
0x1 << CC1K_RX_MATCH | 0x0 << CC1K_TX_MATCH,
// tx current (extra)
15 << CC1K_VCO_CURRENT | 3 << CC1K_PA_DRIVE,
},
// 2 434.845200 MHz channel, 19.2 Kbps data, Manchester Encoding, High Side LO
{ // MAIN 0x00
0x31,
// FREQ2A,FREQ1A,FREQ0A 0x01-0x03
0x51,0x00,0x00,
// FREQ2B,FREQ1B,FREQ0B 0x04-0x06
0x50,0xf7,0x4F, //XBOW
// FSEP1, FSEP0 0x07-0x08
0X03,0x0E,
// CURRENT RX MODE VALUE 0x09 also see below
4 << CC1K_VCO_CURRENT | 1 << CC1K_LO_DRIVE,
// FRONT_END 0x0a
1 << CC1K_IF_RSSI,
// PA_POW 0x0b
0x0 << CC1K_PA_HIGHPOWER | 0xf << CC1K_PA_LOWPOWER,
// PLL 0x0c
11 << CC1K_REFDIV,
// LOCK 0x0d
0xe << CC1K_LOCK_SELECT,
// CAL 0x0e
1 << CC1K_CAL_WAIT | 6 << CC1K_CAL_ITERATE,
// MODEM2 0x0f
1 << CC1K_PEAKDETECT | 33 << CC1K_PEAK_LEVEL_OFFSET,
// MODEM1 0x10
3 << CC1K_MLIMIT | 1 << CC1K_LOCK_AVG_MODE | CC1K_Settling << CC1K_SETTLING | 1 << CC1K_MODEM_RESET_N,
// MODEM0 0x11
5 << CC1K_BAUDRATE | 1 << CC1K_DATA_FORMAT | 1 << CC1K_XOSC_FREQ,
// MATCH 0x12
0x7 << CC1K_RX_MATCH | 0x0 << CC1K_TX_MATCH,
// tx current (extra)
8 << CC1K_VCO_CURRENT | 1 << CC1K_PA_DRIVE,
},
// 3 914.077 MHz channel, 19.2 Kbps data, Manchester Encoding, High Side LO
{ // MAIN 0x00
0x31,
// FREQ2A,FREQ1A,FREQ0A 0x01-0x03
0x5c,0xe0,0x00,
// FREQ2B,FREQ1B,FREQ0B 0x04-0x06
0x5c,0xdb,0x42,
// FSEP1, FSEP0 0x07-0x8
0x01,0xAA,
// CURRENT RX MODE VALUE 0x09 also see below
8 << CC1K_VCO_CURRENT | 3 << CC1K_LO_DRIVE,
//0x8C,
// FRONT_END 0x0a
1 << CC1K_BUF_CURRENT | 2 << CC1K_LNA_CURRENT | 1 << CC1K_IF_RSSI,
//0x32,
// PA_POW 0x0b
0x8 << CC1K_PA_HIGHPOWER | 0x0 << CC1K_PA_LOWPOWER,
//0xff,
// PLL 0xc
6 << CC1K_REFDIV,
//0x40,
// LOCK 0xd
0x1 << CC1K_LOCK_SELECT,
//0x10,
// CAL 0xe
1 << CC1K_CAL_WAIT | 6 << CC1K_CAL_ITERATE,
//0x26,
// MODEM2 0xf
1 << CC1K_PEAKDETECT | 33 << CC1K_PEAK_LEVEL_OFFSET,
//0xA1,
// MODEM1 0x10
3 << CC1K_MLIMIT | 1 << CC1K_LOCK_AVG_MODE | CC1K_Settling << CC1K_SETTLING | 1 << CC1K_MODEM_RESET_N,
//0x6f,
// MODEM0 0x11
5 << CC1K_BAUDRATE | 1 << CC1K_DATA_FORMAT | 1 << CC1K_XOSC_FREQ,
//0x55,
// MATCH 0x12
0x1 << CC1K_RX_MATCH | 0x0 << CC1K_TX_MATCH,
// tx current (extra)
15 << CC1K_VCO_CURRENT | 3 << CC1K_PA_DRIVE,
},
// 4 315.178985 MHz channel, 38.4 Kbps data, Manchester Encoding, High Side LO
{ // MAIN 0x00
0x31,
// FREQ2A,FREQ1A,FREQ0A 0x01-0x03
0x45,0x60,0x00,
// FREQ2B,FREQ1B,FREQ0B 0x04-0x06
0x45,0x55,0xBB,
// FSEP1, FSEP0 0x07-0x08
0X03,0x9C,
// CURRENT RX MODE VALUE 0x09 also see below
8 << CC1K_VCO_CURRENT | 0 << CC1K_LO_DRIVE,
// FRONT_END 0x0a
1 << CC1K_IF_RSSI,
// PA_POW 0x0b
0x0 << CC1K_PA_HIGHPOWER | 0xf << CC1K_PA_LOWPOWER,
// PLL 0x0c
13 << CC1K_REFDIV,
// LOCK 0x0d
0xe << CC1K_LOCK_SELECT,
// CAL 0x0e
1 << CC1K_CAL_WAIT | 6 << CC1K_CAL_ITERATE,
// MODEM2 0x0f
1 << CC1K_PEAKDETECT | 33 << CC1K_PEAK_LEVEL_OFFSET,
// MODEM1 0x10
3 << CC1K_MLIMIT | 1 << CC1K_LOCK_AVG_MODE | CC1K_Settling << CC1K_SETTLING | 1 << CC1K_MODEM_RESET_N,
// MODEM0 0x11
5 << CC1K_BAUDRATE | 1 << CC1K_DATA_FORMAT | 0 << CC1K_XOSC_FREQ,
// MATCH 0x12
0x7 << CC1K_RX_MATCH | 0x0 << CC1K_TX_MATCH,
// tx current (extra)
8 << CC1K_VCO_CURRENT | 1 << CC1K_PA_DRIVE,
},
// 5 Spare
{ // 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
8 << CC1K_VCO_CURRENT | 4 << CC1K_LO_DRIVE,
// FRONT_END 0x0a
1 << CC1K_IF_RSSI,
// PA_POW 0x0b
0x0 << CC1K_PA_HIGHPOWER | 0xf << CC1K_PA_LOWPOWER,
// PLL 0x0c
12 << CC1K_REFDIV,
// LOCK 0x0d
0xe << CC1K_LOCK_SELECT,
// CAL 0x0e
1 << CC1K_CAL_WAIT | 6 << CC1K_CAL_ITERATE,
// MODEM2 0x0f
1 << CC1K_PEAKDETECT | 33 << CC1K_PEAK_LEVEL_OFFSET,
// MODEM1 0x10
3 << CC1K_MLIMIT | 1 << CC1K_LOCK_AVG_MODE | CC1K_Settling << CC1K_SETTLING | 1 << CC1K_MODEM_RESET_N, // MODEM0 0x11
5 << CC1K_BAUDRATE | 1 << CC1K_DATA_FORMAT | 1 << CC1K_XOSC_FREQ,
// MATCH 0x12
0x7 << CC1K_RX_MATCH | 0x0 << CC1K_TX_MATCH,
// tx current (extra)
8 << CC1K_VCO_CURRENT | 1 << CC1K_PA_DRIVE,
},
};
#define UQ_CC1000_RSSI "CC1000RssiP.Rssi"
#endif /* CC1000CONST_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -