📄 cc1000const.h
字号:
/* -*- Mode: C; c-basic-indent: 2; indent-tabs-mode: nil -*- */ /* tab:4 * 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. * * *//* * * Authors: Phil Buonadonna * Date last modified: 1/10/03 * *//** * @author Phil Buonadonna */#ifndef _CC1KCONST_H#define _CC1KCONST_H#include <avr/pgmspace.h>/* 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#define CC1K_436_951_MHZ 0x05#define CC1K_439_058_MHZ 0x06#define CC1K_440_098_MHZ 0x07#define CC1K_430_875_MHZ 0x08#define CC1K_429_052_MHZ 0x09#define CC1K_426_945_MHZ 0x0A#define CC1K_425_014_MHZ 0x0B#define CC1K_423_048_MHZ 0x0C// Aditional 900Mhz Frequencies#define CC1K_908_547_MHZ 0x0D#define CC1K_910_390_MHZ 0x0E#define CC1K_912_066_MHZ 0x0F#define CC1K_917_763_MHZ 0x10#define CC1K_919_606_MHZ 0x11#define CC1K_921_449_MHZ 0x12// Additional 433Mhz Frequencies#define CC1K_421_152_MHZ 0x13#define CC1K_442_217_MHZ 0x14#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_436_951_MHZ)#endif //#define CC1K_SquelchInit 0x02F8 // 0.90V using the bandgap reference#define CC1K_SquelchInit 0x120#define CC1K_SquelchTableSize 9 #define CC1K_MaxRSSISamples 5#define CC1K_Settling 3#define CC1K_ValidPrecursor 2#define CC1K_SquelchIntervalFast 128#define CC1K_SquelchIntervalSlow 2560#define CC1K_SquelchCount 30#define CC1K_SquelchBuffer 16#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.258kbpsstatic const prog_uchar CC1K_LPL_PreambleLength[CC1K_LPL_STATES*2] = { 0, 5, //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_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_Params[21][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<<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) | (3<<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)), // FSCTRL 0x13 ((1<<CC1K_FS_RESET_N)), // FSHAPE7 - FSHAPE1 0x14-0x1a 0x00,0x00,0x00,0x00,0x00,0x00,0x00, // FSDELAY 0x1b 0x00, // PRESCALER 0x1c 0x00, // CURRENT (TX MODE VALUE) 0x1d ((8<<CC1K_VCO_CURRENT) | (1<<CC1K_PA_DRIVE)), // High side LO 0x1e (i.e. do we need to invert the data?) TRUE }, // (1) 914.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) | (3<<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)), //0x10, // FSCTRL 0x13 ((1<<CC1K_FS_RESET_N)), //0x01, // FSHAPE7 - FSHAPE1 0x14..0x1a 0x00,0x00,0x00,0x00,0x00,0x00,0x00, // FSDELAY 0x1b 0x00, // PRESCALER 0x1c 0x00, // CURRENT (TX MODE VALUE) 0x1d ((15<<CC1K_VCO_CURRENT) | (3<<CC1K_PA_DRIVE)), //0xf3, // High side LO 0x1e (i.e. do we need to invert the data?) TRUE }, // (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) | (3<<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)), // FSCTRL 0x13 ((1<<CC1K_FS_RESET_N)), // FSHAPE7 - FSHAPE1 0x14-0x1a 0x00,0x00,0x00,0x00,0x00,0x00,0x00, // FSDELAY 0x1b 0x00, // PRESCALER 0x1c 0x00, // CURRENT (TX MODE VALUE) 0x1d ((8<<CC1K_VCO_CURRENT) | (1<<CC1K_PA_DRIVE)), // High side LO 0x1e (i.e. do we need to invert the data?) TRUE }, // (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)),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -