Prototype RF driver for STM Sub-1 GHz RF expansion board based on the SPSGRF-868 module for STM32 Nucleo.

Prototype RF Driver for STM Sub-1 GHz RF Expansion Boards based on the SPSGRF-868 and SPSGRF-915 Modules for STM32 Nucleo

Currently supported boards:

Note, in order to use expansion board X-NUCLEO-IDS01A4 in mbed you need to perform the following HW modifications on the board:

  • Unmount resistor R4
  • Mount resistor R7

Furthermore, on some Nucleo development boards (e.g. the NUCLEO_F429ZI), in order to be able to use Ethernet together with these Sub-1 GHz RF expansion boards, you need to compile this driver with macro SPIRIT1_SPI_MOSI=PB_5 defined, while the development board typically requires some HW modification as e.g. described here!

This driver can be used together with the 6LoWPAN stack (a.k.a. Nanostack).

Committer:
Wolfgang Betz
Date:
Thu Jul 06 11:13:31 2017 +0200
Revision:
67:93bec0baf1de
Parent:
34:edda6a7238ec
Clarify some comments

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Wolfgang Betz 67:93bec0baf1de 1 /**
Wolfgang Betz 67:93bec0baf1de 2 ******************************************************************************
Wolfgang Betz 67:93bec0baf1de 3 * @file SPIRIT_Radio.h
Wolfgang Betz 67:93bec0baf1de 4 * @author VMA division - AMS
Wolfgang Betz 67:93bec0baf1de 5 * @version 3.2.2
Wolfgang Betz 67:93bec0baf1de 6 * @date 08-July-2015
Wolfgang Betz 67:93bec0baf1de 7 * @brief This file provides all the low level API to manage Analog and Digital
Wolfgang Betz 67:93bec0baf1de 8 * radio part of SPIRIT.
Wolfgang Betz 67:93bec0baf1de 9 * @details
Wolfgang Betz 67:93bec0baf1de 10 *
Wolfgang Betz 67:93bec0baf1de 11 * In order to configure the Radio main parameters, the user can
Wolfgang Betz 67:93bec0baf1de 12 * fit <i>SRadioInit</i> structure the and call the <i>SpiritRadioInit()</i>
Wolfgang Betz 67:93bec0baf1de 13 * function passing its pointer as an argument.
Wolfgang Betz 67:93bec0baf1de 14 *
Wolfgang Betz 67:93bec0baf1de 15 * <b>Example:</b>
Wolfgang Betz 67:93bec0baf1de 16 * @code
Wolfgang Betz 67:93bec0baf1de 17 *
Wolfgang Betz 67:93bec0baf1de 18 * SRadioInit radioInit = {
Wolfgang Betz 67:93bec0baf1de 19 * 0, // Xtal offset in ppm
Wolfgang Betz 67:93bec0baf1de 20 * 433.4e6, // base frequency
Wolfgang Betz 67:93bec0baf1de 21 * 20e3, // channel space
Wolfgang Betz 67:93bec0baf1de 22 * 0, // channel number
Wolfgang Betz 67:93bec0baf1de 23 * FSK, // modulation select
Wolfgang Betz 67:93bec0baf1de 24 * 38400, // datarate
Wolfgang Betz 67:93bec0baf1de 25 * 20e3, // frequency deviation
Wolfgang Betz 67:93bec0baf1de 26 * 100.5e3 // channel filter bandwidth
Wolfgang Betz 67:93bec0baf1de 27 * };
Wolfgang Betz 67:93bec0baf1de 28 *
Wolfgang Betz 67:93bec0baf1de 29 * ...
Wolfgang Betz 67:93bec0baf1de 30 *
Wolfgang Betz 67:93bec0baf1de 31 * SpiritRadioInit(&radioInit);
Wolfgang Betz 67:93bec0baf1de 32 * @endcode
Wolfgang Betz 67:93bec0baf1de 33 *
Wolfgang Betz 67:93bec0baf1de 34 * Another important parameter for the radio configuration is the
Wolfgang Betz 67:93bec0baf1de 35 * transmission power.
Wolfgang Betz 67:93bec0baf1de 36 * The user is allowed to configure it using the function <i>SpiritRadioSetPALeveldBm()</i>
Wolfgang Betz 67:93bec0baf1de 37 * which sets the PA LEVEL specified by the first argument to the
Wolfgang Betz 67:93bec0baf1de 38 * power expressed in dBm by the second parameter.
Wolfgang Betz 67:93bec0baf1de 39 *
Wolfgang Betz 67:93bec0baf1de 40 * <b>Example:</b>
Wolfgang Betz 67:93bec0baf1de 41 * @code
Wolfgang Betz 67:93bec0baf1de 42 *
Wolfgang Betz 67:93bec0baf1de 43 * SpiritRadioSetPALeveldBm(0 , 10.0);
Wolfgang Betz 67:93bec0baf1de 44 *
Wolfgang Betz 67:93bec0baf1de 45 * @endcode
Wolfgang Betz 67:93bec0baf1de 46 *
Wolfgang Betz 67:93bec0baf1de 47 *
Wolfgang Betz 67:93bec0baf1de 48 * @note The effective power that is set can be a little different from the
Wolfgang Betz 67:93bec0baf1de 49 * passed argument in dBm because the function performs an approximation.
Wolfgang Betz 67:93bec0baf1de 50 *
Wolfgang Betz 67:93bec0baf1de 51
Wolfgang Betz 67:93bec0baf1de 52 * @attention
Wolfgang Betz 67:93bec0baf1de 53 *
Wolfgang Betz 67:93bec0baf1de 54 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
Wolfgang Betz 67:93bec0baf1de 55 *
Wolfgang Betz 67:93bec0baf1de 56 * Redistribution and use in source and binary forms, with or without modification,
Wolfgang Betz 67:93bec0baf1de 57 * are permitted provided that the following conditions are met:
Wolfgang Betz 67:93bec0baf1de 58 * 1. Redistributions of source code must retain the above copyright notice,
Wolfgang Betz 67:93bec0baf1de 59 * this list of conditions and the following disclaimer.
Wolfgang Betz 67:93bec0baf1de 60 * 2. Redistributions in binary form must reproduce the above copyright notice,
Wolfgang Betz 67:93bec0baf1de 61 * this list of conditions and the following disclaimer in the documentation
Wolfgang Betz 67:93bec0baf1de 62 * and/or other materials provided with the distribution.
Wolfgang Betz 67:93bec0baf1de 63 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Wolfgang Betz 67:93bec0baf1de 64 * may be used to endorse or promote products derived from this software
Wolfgang Betz 67:93bec0baf1de 65 * without specific prior written permission.
Wolfgang Betz 67:93bec0baf1de 66 *
Wolfgang Betz 67:93bec0baf1de 67 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Wolfgang Betz 67:93bec0baf1de 68 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Wolfgang Betz 67:93bec0baf1de 69 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Wolfgang Betz 67:93bec0baf1de 70 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Wolfgang Betz 67:93bec0baf1de 71 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Wolfgang Betz 67:93bec0baf1de 72 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Wolfgang Betz 67:93bec0baf1de 73 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Wolfgang Betz 67:93bec0baf1de 74 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Wolfgang Betz 67:93bec0baf1de 75 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Wolfgang Betz 67:93bec0baf1de 76 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Wolfgang Betz 67:93bec0baf1de 77 *
Wolfgang Betz 67:93bec0baf1de 78 ******************************************************************************
Wolfgang Betz 67:93bec0baf1de 79 */
Wolfgang Betz 67:93bec0baf1de 80
Wolfgang Betz 67:93bec0baf1de 81 /* Define to prevent recursive inclusion -------------------------------------*/
Wolfgang Betz 67:93bec0baf1de 82 #ifndef __SPIRIT_RADIO_H
Wolfgang Betz 67:93bec0baf1de 83 #define __SPIRIT_RADIO_H
Wolfgang Betz 67:93bec0baf1de 84
Wolfgang Betz 67:93bec0baf1de 85
Wolfgang Betz 67:93bec0baf1de 86 /* Includes ------------------------------------------------------------------*/
Wolfgang Betz 67:93bec0baf1de 87
Wolfgang Betz 67:93bec0baf1de 88 #include "SPIRIT_Regs.h"
Wolfgang Betz 67:93bec0baf1de 89 #include "SPIRIT_Types.h"
Wolfgang Betz 67:93bec0baf1de 90 #include "SPIRIT_Config.h"
Wolfgang Betz 67:93bec0baf1de 91
Wolfgang Betz 67:93bec0baf1de 92
Wolfgang Betz 67:93bec0baf1de 93 #ifdef __cplusplus
Wolfgang Betz 67:93bec0baf1de 94 extern "C" {
Wolfgang Betz 67:93bec0baf1de 95 #endif
Wolfgang Betz 67:93bec0baf1de 96
Wolfgang Betz 67:93bec0baf1de 97
Wolfgang Betz 67:93bec0baf1de 98 /** @addtogroup SPIRIT_Libraries
Wolfgang Betz 67:93bec0baf1de 99 * @{
Wolfgang Betz 67:93bec0baf1de 100 */
Wolfgang Betz 67:93bec0baf1de 101
Wolfgang Betz 67:93bec0baf1de 102
Wolfgang Betz 67:93bec0baf1de 103 /** @defgroup SPIRIT_Radio Radio
Wolfgang Betz 67:93bec0baf1de 104 * @brief Configuration and management of SPIRIT RF Analog and Digital part.
Wolfgang Betz 67:93bec0baf1de 105 * @details See the file <i>@ref SPIRIT_Radio.h</i> for more details.
Wolfgang Betz 67:93bec0baf1de 106 * @{
Wolfgang Betz 67:93bec0baf1de 107 */
Wolfgang Betz 67:93bec0baf1de 108
Wolfgang Betz 67:93bec0baf1de 109
Wolfgang Betz 67:93bec0baf1de 110
Wolfgang Betz 67:93bec0baf1de 111 /** @defgroup Radio_Exported_Types Radio Exported Types
Wolfgang Betz 67:93bec0baf1de 112 * @{
Wolfgang Betz 67:93bec0baf1de 113 */
Wolfgang Betz 67:93bec0baf1de 114
Wolfgang Betz 67:93bec0baf1de 115
Wolfgang Betz 67:93bec0baf1de 116 /**
Wolfgang Betz 67:93bec0baf1de 117 * @brief SPIRIT XTAL frequency enumeration
Wolfgang Betz 67:93bec0baf1de 118 */
Wolfgang Betz 67:93bec0baf1de 119 typedef enum
Wolfgang Betz 67:93bec0baf1de 120 {
Wolfgang Betz 67:93bec0baf1de 121 XTAL_FLAG_24_MHz = 0x00, /*!< 24 MHz Xtal selected */
Wolfgang Betz 67:93bec0baf1de 122 XTAL_FLAG_26_MHz = 0x01 /*!< 26 MHz Xtal selected */
Wolfgang Betz 67:93bec0baf1de 123
Wolfgang Betz 67:93bec0baf1de 124 }XtalFlag;
Wolfgang Betz 67:93bec0baf1de 125
Wolfgang Betz 67:93bec0baf1de 126
Wolfgang Betz 67:93bec0baf1de 127 #define IS_XTAL_FLAG(FLAG) (((FLAG) == XTAL_FLAG_24_MHz) || \
Wolfgang Betz 67:93bec0baf1de 128 ((FLAG) == XTAL_FLAG_26_MHz))
Wolfgang Betz 67:93bec0baf1de 129
Wolfgang Betz 67:93bec0baf1de 130 /**
Wolfgang Betz 67:93bec0baf1de 131 * @brief SPIRIT Band enumeration
Wolfgang Betz 67:93bec0baf1de 132 */
Wolfgang Betz 67:93bec0baf1de 133 typedef enum
Wolfgang Betz 67:93bec0baf1de 134 {
Wolfgang Betz 67:93bec0baf1de 135 HIGH_BAND = 0x00, /*!< High_Band selected: from 779 MHz to 915 MHz */
Wolfgang Betz 67:93bec0baf1de 136 MIDDLE_BAND = 0x01, /*!< Middle Band selected: from 387 MHz to 470 MHz */
Wolfgang Betz 67:93bec0baf1de 137 LOW_BAND = 0x02, /*!< Low Band selected: from 300 MHz to 348 MHz */
Wolfgang Betz 67:93bec0baf1de 138 VERY_LOW_BAND = 0x03 /*!< Vary low Band selected: from 150 MHz to 174 MHz */
Wolfgang Betz 67:93bec0baf1de 139 }BandSelect;
Wolfgang Betz 67:93bec0baf1de 140
Wolfgang Betz 67:93bec0baf1de 141
Wolfgang Betz 67:93bec0baf1de 142 #define IS_BAND_SELECTED(BAND) ((BAND == HIGH_BAND) || \
Wolfgang Betz 67:93bec0baf1de 143 (BAND == MIDDLE_BAND) || \
Wolfgang Betz 67:93bec0baf1de 144 (BAND == LOW_BAND) || \
Wolfgang Betz 67:93bec0baf1de 145 (BAND == VERY_LOW_BAND))
Wolfgang Betz 67:93bec0baf1de 146
Wolfgang Betz 67:93bec0baf1de 147 /**
Wolfgang Betz 67:93bec0baf1de 148 * @brief SPIRIT Modulation enumeration
Wolfgang Betz 67:93bec0baf1de 149 */
Wolfgang Betz 67:93bec0baf1de 150 typedef enum
Wolfgang Betz 67:93bec0baf1de 151 {
Wolfgang Betz 67:93bec0baf1de 152 FSK = 0x00, /*!< 2-FSK modulation selected */
Wolfgang Betz 67:93bec0baf1de 153 GFSK_BT05 = 0x50, /*!< GFSK modulation selected with BT=0.5 */
Wolfgang Betz 67:93bec0baf1de 154 GFSK_BT1 = 0x10, /*!< GFSK modulation selected with BT=1 */
Wolfgang Betz 67:93bec0baf1de 155 ASK_OOK = 0x20, /*!< ASK or OOK modulation selected. ASK will use power ramping */
Wolfgang Betz 67:93bec0baf1de 156 MSK = 0x30 /*!< MSK modulation selected */
Wolfgang Betz 67:93bec0baf1de 157
Wolfgang Betz 67:93bec0baf1de 158 }ModulationSelect;
Wolfgang Betz 67:93bec0baf1de 159
Wolfgang Betz 67:93bec0baf1de 160
Wolfgang Betz 67:93bec0baf1de 161 #define IS_MODULATION_SELECTED(MOD) (((MOD) == FSK) || \
Wolfgang Betz 67:93bec0baf1de 162 ((MOD) == GFSK_BT05) || \
Wolfgang Betz 67:93bec0baf1de 163 ((MOD) == GFSK_BT1) || \
Wolfgang Betz 67:93bec0baf1de 164 ((MOD) == ASK_OOK) || \
Wolfgang Betz 67:93bec0baf1de 165 ((MOD) == MSK))
Wolfgang Betz 67:93bec0baf1de 166
Wolfgang Betz 67:93bec0baf1de 167
Wolfgang Betz 67:93bec0baf1de 168 /**
Wolfgang Betz 67:93bec0baf1de 169 * @brief SPIRIT PA additional load capacitors bank enumeration
Wolfgang Betz 67:93bec0baf1de 170 */
Wolfgang Betz 67:93bec0baf1de 171 typedef enum
Wolfgang Betz 67:93bec0baf1de 172 {
Wolfgang Betz 67:93bec0baf1de 173 LOAD_0_PF = PA_POWER0_CWC_0, /*!< No additional PA load capacitor */
Wolfgang Betz 67:93bec0baf1de 174 LOAD_1_2_PF = PA_POWER0_CWC_1_2P, /*!< 1.2pF additional PA load capacitor */
Wolfgang Betz 67:93bec0baf1de 175 LOAD_2_4_PF = PA_POWER0_CWC_2_4P, /*!< 2.4pF additional PA load capacitor */
Wolfgang Betz 67:93bec0baf1de 176 LOAD_3_6_PF = PA_POWER0_CWC_3_6P /*!< 3.6pF additional PA load capacitor */
Wolfgang Betz 67:93bec0baf1de 177
Wolfgang Betz 67:93bec0baf1de 178 }PALoadCapacitor;
Wolfgang Betz 67:93bec0baf1de 179
Wolfgang Betz 67:93bec0baf1de 180 #define IS_PA_LOAD_CAP(CWC) (((CWC) == LOAD_0_PF) || \
Wolfgang Betz 67:93bec0baf1de 181 ((CWC) == LOAD_1_2_PF) || \
Wolfgang Betz 67:93bec0baf1de 182 ((CWC) == LOAD_2_4_PF) || \
Wolfgang Betz 67:93bec0baf1de 183 ((CWC) == LOAD_3_6_PF))
Wolfgang Betz 67:93bec0baf1de 184
Wolfgang Betz 67:93bec0baf1de 185
Wolfgang Betz 67:93bec0baf1de 186 /**
Wolfgang Betz 67:93bec0baf1de 187 * @brief SPIRIT AFC Mode selection
Wolfgang Betz 67:93bec0baf1de 188 */
Wolfgang Betz 67:93bec0baf1de 189 typedef enum
Wolfgang Betz 67:93bec0baf1de 190 {
Wolfgang Betz 67:93bec0baf1de 191 AFC_SLICER_CORRECTION = AFC2_AFC_MODE_SLICER, /*!< AFC loop closed on slicer */
Wolfgang Betz 67:93bec0baf1de 192 AFC_2ND_IF_CORRECTION = AFC2_AFC_MODE_MIXER /*!< AFC loop closed on 2nd conversion stage */
Wolfgang Betz 67:93bec0baf1de 193
Wolfgang Betz 67:93bec0baf1de 194 }AFCMode;
Wolfgang Betz 67:93bec0baf1de 195
Wolfgang Betz 67:93bec0baf1de 196 #define IS_AFC_MODE(MODE) ((MODE) == AFC_SLICER_CORRECTION || (MODE) == AFC_2ND_IF_CORRECTION)
Wolfgang Betz 67:93bec0baf1de 197
Wolfgang Betz 67:93bec0baf1de 198
Wolfgang Betz 67:93bec0baf1de 199 /**
Wolfgang Betz 67:93bec0baf1de 200 * @brief SPIRIT AGC Mode selection
Wolfgang Betz 67:93bec0baf1de 201 */
Wolfgang Betz 67:93bec0baf1de 202 typedef enum
Wolfgang Betz 67:93bec0baf1de 203 {
Wolfgang Betz 67:93bec0baf1de 204 AGC_LINEAR_MODE = AGCCTRL0_AGC_MODE_LINEAR, /*!< AGC works in linear mode */
Wolfgang Betz 67:93bec0baf1de 205 AGC_BINARY_MODE = AGCCTRL0_AGC_MODE_BINARY /*!< AGC works in binary mode */
Wolfgang Betz 67:93bec0baf1de 206
Wolfgang Betz 67:93bec0baf1de 207 }AGCMode;
Wolfgang Betz 67:93bec0baf1de 208
Wolfgang Betz 67:93bec0baf1de 209 #define IS_AGC_MODE(MODE) ((MODE) == AGC_LINEAR_MODE || (MODE) == AGC_BINARY_MODE)
Wolfgang Betz 67:93bec0baf1de 210
Wolfgang Betz 67:93bec0baf1de 211
Wolfgang Betz 67:93bec0baf1de 212 /**
Wolfgang Betz 67:93bec0baf1de 213 * @brief SPIRIT Clock Recovery Mode selection
Wolfgang Betz 67:93bec0baf1de 214 */
Wolfgang Betz 67:93bec0baf1de 215 typedef enum
Wolfgang Betz 67:93bec0baf1de 216 {
Wolfgang Betz 67:93bec0baf1de 217 CLK_REC_PLL = FDEV0_CLOCK_REG_ALGO_SEL_PLL, /*!< PLL alogrithm for clock recovery */
Wolfgang Betz 67:93bec0baf1de 218 CLK_REC_DLL = FDEV0_CLOCK_REG_ALGO_SEL_DLL /*!< DLL alogrithm for clock recovery */
Wolfgang Betz 67:93bec0baf1de 219
Wolfgang Betz 67:93bec0baf1de 220 }ClkRecMode;
Wolfgang Betz 67:93bec0baf1de 221
Wolfgang Betz 67:93bec0baf1de 222 #define IS_CLK_REC_MODE(MODE) ((MODE) == CLK_REC_PLL || (MODE) == CLK_REC_DLL)
Wolfgang Betz 67:93bec0baf1de 223
Wolfgang Betz 67:93bec0baf1de 224
Wolfgang Betz 67:93bec0baf1de 225 /**
Wolfgang Betz 67:93bec0baf1de 226 * @brief SPIRIT Postfilter length
Wolfgang Betz 67:93bec0baf1de 227 */
Wolfgang Betz 67:93bec0baf1de 228 typedef enum
Wolfgang Betz 67:93bec0baf1de 229 {
Wolfgang Betz 67:93bec0baf1de 230 PSTFLT_LENGTH_8 = 0x00, /*!< Postfilter length is 8 symbols */
Wolfgang Betz 67:93bec0baf1de 231 PSTFLT_LENGTH_16 = 0x10 /*!< Postfilter length is 16 symbols */
Wolfgang Betz 67:93bec0baf1de 232
Wolfgang Betz 67:93bec0baf1de 233 }PstFltLength;
Wolfgang Betz 67:93bec0baf1de 234
Wolfgang Betz 67:93bec0baf1de 235 #define IS_PST_FLT_LENGTH(LENGTH) ((LENGTH) == PSTFLT_LENGTH_8 || (LENGTH) == PSTFLT_LENGTH_16)
Wolfgang Betz 67:93bec0baf1de 236
Wolfgang Betz 67:93bec0baf1de 237
Wolfgang Betz 67:93bec0baf1de 238 /**
Wolfgang Betz 67:93bec0baf1de 239 * @brief SPIRIT OOK Peak Decay
Wolfgang Betz 67:93bec0baf1de 240 */
Wolfgang Betz 67:93bec0baf1de 241 typedef enum
Wolfgang Betz 67:93bec0baf1de 242 {
Wolfgang Betz 67:93bec0baf1de 243 FAST_DECAY = 0x00, /*!< Peak decay control for OOK: fast decay */
Wolfgang Betz 67:93bec0baf1de 244 MEDIUM_FAST_DECAY = 0x01, /*!< Peak decay control for OOK: medium_fast decay */
Wolfgang Betz 67:93bec0baf1de 245 MEDIUM_SLOW_DECAY = 0x02, /*!< Peak decay control for OOK: medium_fast decay */
Wolfgang Betz 67:93bec0baf1de 246 SLOW_DECAY = 0x03 /*!< Peak decay control for OOK: slow decay */
Wolfgang Betz 67:93bec0baf1de 247
Wolfgang Betz 67:93bec0baf1de 248 }OokPeakDecay;
Wolfgang Betz 67:93bec0baf1de 249
Wolfgang Betz 67:93bec0baf1de 250 #define IS_OOK_PEAK_DECAY(DECAY) (((DECAY) == FAST_DECAY) ||\
Wolfgang Betz 67:93bec0baf1de 251 ((DECAY) == MEDIUM_FAST_DECAY) ||\
Wolfgang Betz 67:93bec0baf1de 252 ((DECAY) == MEDIUM_SLOW_DECAY) ||\
Wolfgang Betz 67:93bec0baf1de 253 ((DECAY) == SLOW_DECAY))
Wolfgang Betz 67:93bec0baf1de 254
Wolfgang Betz 67:93bec0baf1de 255
Wolfgang Betz 67:93bec0baf1de 256 /**
Wolfgang Betz 67:93bec0baf1de 257 * @brief SPIRIT Radio Init structure definition
Wolfgang Betz 67:93bec0baf1de 258 */
Wolfgang Betz 67:93bec0baf1de 259 typedef struct
Wolfgang Betz 67:93bec0baf1de 260 {
Wolfgang Betz 67:93bec0baf1de 261 int16_t nXtalOffsetPpm; /*!< Specifies the offset frequency (in ppm)
Wolfgang Betz 67:93bec0baf1de 262 to compensate crystal inaccuracy expressed
Wolfgang Betz 67:93bec0baf1de 263 as signed value.*/
Wolfgang Betz 67:93bec0baf1de 264
Wolfgang Betz 67:93bec0baf1de 265 uint32_t lFrequencyBase; /*!< Specifies the base carrier frequency (in Hz),
Wolfgang Betz 67:93bec0baf1de 266 i.e. the carrier frequency of channel #0.
Wolfgang Betz 67:93bec0baf1de 267 This parameter can be in one of the following ranges:
Wolfgang Betz 67:93bec0baf1de 268 High_Band: from 779 MHz to 915 MHz
Wolfgang Betz 67:93bec0baf1de 269 Middle Band: from 387 MHz to 470 MHz
Wolfgang Betz 67:93bec0baf1de 270 Low Band: from 300 MHz to 348 MHz */
Wolfgang Betz 67:93bec0baf1de 271 uint32_t nChannelSpace; /*!< Specifies the channel spacing expressed in Hz.
Wolfgang Betz 67:93bec0baf1de 272 The channel spacing is expressed as:
Wolfgang Betz 67:93bec0baf1de 273 NxFREQUENCY_STEPS, where FREQUENCY STEPS
Wolfgang Betz 67:93bec0baf1de 274 is F_Xo/2^15.
Wolfgang Betz 67:93bec0baf1de 275 This parameter can be in the range: [0, F_Xo/2^15*255] Hz */
Wolfgang Betz 67:93bec0baf1de 276 uint8_t cChannelNumber; /*!< Specifies the channel number. This value
Wolfgang Betz 67:93bec0baf1de 277 is multiplied by the channel spacing and
Wolfgang Betz 67:93bec0baf1de 278 added to synthesizer base frequency to
Wolfgang Betz 67:93bec0baf1de 279 generate the actual RF carrier frequency */
Wolfgang Betz 67:93bec0baf1de 280 ModulationSelect xModulationSelect; /*!< Specifies the modulation. This
Wolfgang Betz 67:93bec0baf1de 281 parameter can be any value of
Wolfgang Betz 67:93bec0baf1de 282 @ref ModulationSelect */
Wolfgang Betz 67:93bec0baf1de 283 uint32_t lDatarate; /*!< Specifies the datarate expressed in bps.
Wolfgang Betz 67:93bec0baf1de 284 This parameter can be in the range between
Wolfgang Betz 67:93bec0baf1de 285 100 bps and 500 kbps */
Wolfgang Betz 67:93bec0baf1de 286 uint32_t lFreqDev; /*!< Specifies the frequency deviation expressed in Hz.
Wolfgang Betz 67:93bec0baf1de 287 This parameter can be in the range: [F_Xo*8/2^18, F_Xo*7680/2^18] Hz */
Wolfgang Betz 67:93bec0baf1de 288 uint32_t lBandwidth; /*!< Specifies the channel filter bandwidth
Wolfgang Betz 67:93bec0baf1de 289 expressed in Hz. This parameter can be
Wolfgang Betz 67:93bec0baf1de 290 in the range between 1100 and 800100 Hz */
Wolfgang Betz 67:93bec0baf1de 291
Wolfgang Betz 67:93bec0baf1de 292 }SRadioInit;
Wolfgang Betz 67:93bec0baf1de 293
Wolfgang Betz 67:93bec0baf1de 294 /**
Wolfgang Betz 67:93bec0baf1de 295 * @}
Wolfgang Betz 67:93bec0baf1de 296 */
Wolfgang Betz 67:93bec0baf1de 297
Wolfgang Betz 67:93bec0baf1de 298
Wolfgang Betz 67:93bec0baf1de 299
Wolfgang Betz 67:93bec0baf1de 300 /** @defgroup Radio_Exported_Constants Radio Exported Constants
Wolfgang Betz 67:93bec0baf1de 301 * @{
Wolfgang Betz 67:93bec0baf1de 302 */
Wolfgang Betz 67:93bec0baf1de 303
Wolfgang Betz 67:93bec0baf1de 304 /** @defgroup Radio_Band
Wolfgang Betz 67:93bec0baf1de 305 * @{
Wolfgang Betz 67:93bec0baf1de 306 */
Wolfgang Betz 67:93bec0baf1de 307
Wolfgang Betz 67:93bec0baf1de 308 #define FBASE_DIVIDER 262144 /*!< 2^18 factor dividing fxo in fbase formula */
Wolfgang Betz 67:93bec0baf1de 309
Wolfgang Betz 67:93bec0baf1de 310 #define HIGH_BAND_FACTOR 6 /*!< Band select factor for high band. Factor B in the equation 2 */
Wolfgang Betz 67:93bec0baf1de 311 #define MIDDLE_BAND_FACTOR 12 /*!< Band select factor for middle band. Factor B in the equation 2 */
Wolfgang Betz 67:93bec0baf1de 312 #define LOW_BAND_FACTOR 16 /*!< Band select factor for low band. Factor B in the equation 2 */
Wolfgang Betz 67:93bec0baf1de 313 #define VERY_LOW_BAND_FACTOR 32 /*!< Band select factor for very low band. Factor B in the equation 2 */
Wolfgang Betz 67:93bec0baf1de 314
Wolfgang Betz 67:93bec0baf1de 315 #define HIGH_BAND_LOWER_LIMIT 778000000 /*!< Lower limit of the high band: 779 MHz */
Wolfgang Betz 67:93bec0baf1de 316 #define HIGH_BAND_UPPER_LIMIT 957100000 /*!< Upper limit of the high band: 956 MHz */
Wolfgang Betz 67:93bec0baf1de 317 #define MIDDLE_BAND_LOWER_LIMIT 386000000 /*!< Lower limit of the middle band: 387 MHz */
Wolfgang Betz 67:93bec0baf1de 318 #define MIDDLE_BAND_UPPER_LIMIT 471100000 /*!< Upper limit of the middle band: 470 MHz */
Wolfgang Betz 67:93bec0baf1de 319 #define LOW_BAND_LOWER_LIMIT 299000000 /*!< Lower limit of the low band: 300 MHz */
Wolfgang Betz 67:93bec0baf1de 320 #define LOW_BAND_UPPER_LIMIT 349100000 /*!< Upper limit of the low band: 348 MHz */
Wolfgang Betz 67:93bec0baf1de 321 #define VERY_LOW_BAND_LOWER_LIMIT 149000000 /*!< Lower limit of the very low band: 150 MHz */
Wolfgang Betz 67:93bec0baf1de 322 #define VERY_LOW_BAND_UPPER_LIMIT 175100000 /*!< Upper limit of the very low band: 174 MHz */
Wolfgang Betz 67:93bec0baf1de 323
Wolfgang Betz 67:93bec0baf1de 324 #define IS_FREQUENCY_BAND_HIGH(FREQUENCY) ((FREQUENCY)>=HIGH_BAND_LOWER_LIMIT && \
Wolfgang Betz 67:93bec0baf1de 325 (FREQUENCY)<=HIGH_BAND_UPPER_LIMIT)
Wolfgang Betz 67:93bec0baf1de 326
Wolfgang Betz 67:93bec0baf1de 327 #define IS_FREQUENCY_BAND_MIDDLE(FREQUENCY) ((FREQUENCY)>=MIDDLE_BAND_LOWER_LIMIT && \
Wolfgang Betz 67:93bec0baf1de 328 (FREQUENCY)<=MIDDLE_BAND_UPPER_LIMIT)
Wolfgang Betz 67:93bec0baf1de 329
Wolfgang Betz 67:93bec0baf1de 330 #define IS_FREQUENCY_BAND_LOW(FREQUENCY) ((FREQUENCY)>=LOW_BAND_LOWER_LIMIT && \
Wolfgang Betz 67:93bec0baf1de 331 (FREQUENCY)<=LOW_BAND_UPPER_LIMIT)
Wolfgang Betz 67:93bec0baf1de 332
Wolfgang Betz 67:93bec0baf1de 333 #define IS_FREQUENCY_BAND_VERY_LOW(FREQUENCY) ((FREQUENCY)>=VERY_LOW_BAND_LOWER_LIMIT && \
Wolfgang Betz 67:93bec0baf1de 334 (FREQUENCY)<=VERY_LOW_BAND_UPPER_LIMIT)
Wolfgang Betz 67:93bec0baf1de 335
Wolfgang Betz 67:93bec0baf1de 336 #define IS_FREQUENCY_BAND(FREQUENCY) (IS_FREQUENCY_BAND_HIGH(FREQUENCY)|| \
Wolfgang Betz 67:93bec0baf1de 337 IS_FREQUENCY_BAND_MIDDLE(FREQUENCY)|| \
Wolfgang Betz 67:93bec0baf1de 338 IS_FREQUENCY_BAND_LOW(FREQUENCY)|| \
Wolfgang Betz 67:93bec0baf1de 339 IS_FREQUENCY_BAND_VERY_LOW(FREQUENCY))
Wolfgang Betz 67:93bec0baf1de 340
Wolfgang Betz 67:93bec0baf1de 341 /**
Wolfgang Betz 67:93bec0baf1de 342 * @}
Wolfgang Betz 67:93bec0baf1de 343 */
Wolfgang Betz 67:93bec0baf1de 344
Wolfgang Betz 67:93bec0baf1de 345
Wolfgang Betz 67:93bec0baf1de 346 /** @defgroup Radio_IF_Offset Radio IF Offset
Wolfgang Betz 67:93bec0baf1de 347 * @{
Wolfgang Betz 67:93bec0baf1de 348 */
Wolfgang Betz 67:93bec0baf1de 349 #define IF_OFFSET_ANA(F_Xo) (lroundf(480140.0/(F_Xo)*12288-64.0)) /*!< It represents the IF_OFFSET_ANA in order
Wolfgang Betz 67:93bec0baf1de 350 to have an intermediate frequency of 480 kHz */
Wolfgang Betz 67:93bec0baf1de 351 /**
Wolfgang Betz 67:93bec0baf1de 352 * @}
Wolfgang Betz 67:93bec0baf1de 353 */
Wolfgang Betz 67:93bec0baf1de 354
Wolfgang Betz 67:93bec0baf1de 355
Wolfgang Betz 67:93bec0baf1de 356 /** @defgroup Radio_FC_Offset Radio FC Offset
Wolfgang Betz 67:93bec0baf1de 357 * @{
Wolfgang Betz 67:93bec0baf1de 358 */
Wolfgang Betz 67:93bec0baf1de 359 #define F_OFFSET_DIVIDER 262144 /*!< 2^18 factor dividing fxo in foffset formula */
Wolfgang Betz 67:93bec0baf1de 360 #define PPM_FACTOR 1000000 /*!< 10^6 factor to use with Xtal_offset_ppm */
Wolfgang Betz 67:93bec0baf1de 361
Wolfgang Betz 67:93bec0baf1de 362
Wolfgang Betz 67:93bec0baf1de 363 #define F_OFFSET_LOWER_LIMIT(F_Xo) ((-(int32_t)F_Xo)/F_OFFSET_DIVIDER*2048)
Wolfgang Betz 67:93bec0baf1de 364 #define F_OFFSET_UPPER_LIMIT(F_Xo) ((int32_t)(F_Xo/F_OFFSET_DIVIDER*2047))
Wolfgang Betz 67:93bec0baf1de 365
Wolfgang Betz 67:93bec0baf1de 366 #define IS_FREQUENCY_OFFSET(OFFSET, F_Xo) (OFFSET>=F_OFFSET_LOWER_LIMIT(F_Xo) && OFFSET<=F_OFFSET_UPPER_LIMIT(F_Xo))
Wolfgang Betz 67:93bec0baf1de 367
Wolfgang Betz 67:93bec0baf1de 368
Wolfgang Betz 67:93bec0baf1de 369 /**
Wolfgang Betz 67:93bec0baf1de 370 * @}
Wolfgang Betz 67:93bec0baf1de 371 */
Wolfgang Betz 67:93bec0baf1de 372
Wolfgang Betz 67:93bec0baf1de 373
Wolfgang Betz 67:93bec0baf1de 374 /** @defgroup Radio_Channel_Space Radio Channel Space
Wolfgang Betz 67:93bec0baf1de 375 * @{
Wolfgang Betz 67:93bec0baf1de 376 */
Wolfgang Betz 67:93bec0baf1de 377
Wolfgang Betz 67:93bec0baf1de 378
Wolfgang Betz 67:93bec0baf1de 379 #define CHSPACE_DIVIDER 32768 /*!< 2^15 factor dividing fxo in channel space formula */
Wolfgang Betz 67:93bec0baf1de 380
Wolfgang Betz 67:93bec0baf1de 381 #define IS_CHANNEL_SPACE(CHANNELSPACE, F_Xo) (CHANNELSPACE<=(F_Xo/32768*255))
Wolfgang Betz 67:93bec0baf1de 382
Wolfgang Betz 67:93bec0baf1de 383
Wolfgang Betz 67:93bec0baf1de 384
Wolfgang Betz 67:93bec0baf1de 385
Wolfgang Betz 67:93bec0baf1de 386
Wolfgang Betz 67:93bec0baf1de 387 /**
Wolfgang Betz 67:93bec0baf1de 388 * @}
Wolfgang Betz 67:93bec0baf1de 389 */
Wolfgang Betz 67:93bec0baf1de 390
Wolfgang Betz 67:93bec0baf1de 391
Wolfgang Betz 67:93bec0baf1de 392 /** @defgroup Radio_Datarate Radio Datarate
Wolfgang Betz 67:93bec0baf1de 393 * @{
Wolfgang Betz 67:93bec0baf1de 394 */
Wolfgang Betz 67:93bec0baf1de 395 #define MINIMUM_DATARATE 100 /*!< Minimum datarate supported by SPIRIT1 100 bps */
Wolfgang Betz 67:93bec0baf1de 396 #define MAXIMUM_DATARATE 510000 /*!< Maximum datarate supported by SPIRIT1 500 kbps */
Wolfgang Betz 67:93bec0baf1de 397
Wolfgang Betz 67:93bec0baf1de 398 #define IS_DATARATE(DATARATE) (DATARATE>=MINIMUM_DATARATE && DATARATE<=MAXIMUM_DATARATE)
Wolfgang Betz 67:93bec0baf1de 399
Wolfgang Betz 67:93bec0baf1de 400 /**
Wolfgang Betz 67:93bec0baf1de 401 * @}
Wolfgang Betz 67:93bec0baf1de 402 */
Wolfgang Betz 67:93bec0baf1de 403
Wolfgang Betz 67:93bec0baf1de 404
Wolfgang Betz 67:93bec0baf1de 405 /** @defgroup Radio_Frequency_Deviation Radio Frequency Deviation
Wolfgang Betz 67:93bec0baf1de 406 * @{
Wolfgang Betz 67:93bec0baf1de 407 */
Wolfgang Betz 67:93bec0baf1de 408 #define F_DEV_MANTISSA_UPPER_LIMIT 7 /*!< Maximum value for the mantissa in frequency deviation formula */
Wolfgang Betz 67:93bec0baf1de 409 #define F_DEV_EXPONENT_UPPER_LIMIT 9 /*!< Maximum value for the exponent in frequency deviation formula */
Wolfgang Betz 67:93bec0baf1de 410
Wolfgang Betz 67:93bec0baf1de 411 #define F_DEV_LOWER_LIMIT(F_Xo) (F_Xo>>16)
Wolfgang Betz 67:93bec0baf1de 412 #define F_DEV_UPPER_LIMIT(F_Xo) ((F_Xo*15)>>10)
Wolfgang Betz 67:93bec0baf1de 413
Wolfgang Betz 67:93bec0baf1de 414 #define IS_F_DEV(FDEV,F_Xo) (FDEV>=F_DEV_LOWER_LIMIT(F_Xo) && FDEV<=F_DEV_UPPER_LIMIT(F_Xo))
Wolfgang Betz 67:93bec0baf1de 415
Wolfgang Betz 67:93bec0baf1de 416
Wolfgang Betz 67:93bec0baf1de 417 /**
Wolfgang Betz 67:93bec0baf1de 418 * @}
Wolfgang Betz 67:93bec0baf1de 419 */
Wolfgang Betz 67:93bec0baf1de 420
Wolfgang Betz 67:93bec0baf1de 421
Wolfgang Betz 67:93bec0baf1de 422 /** @defgroup Radio_Channel_Bandwidth Radio Channel Bandwidth
Wolfgang Betz 67:93bec0baf1de 423 * @{
Wolfgang Betz 67:93bec0baf1de 424 */
Wolfgang Betz 67:93bec0baf1de 425 #define CH_BW_LOWER_LIMIT(F_Xo) 1100*(F_Xo/1000000)/26 /*!< Minimum value of the channel filter bandwidth */
Wolfgang Betz 67:93bec0baf1de 426 #define CH_BW_UPPER_LIMIT(F_Xo) 800100*(F_Xo/1000000)/26 /*!< Maximum value of the channel filter bandwidth */
Wolfgang Betz 67:93bec0baf1de 427
Wolfgang Betz 67:93bec0baf1de 428 #define IS_CH_BW(BW,F_Xo) ((BW)>=CH_BW_LOWER_LIMIT(F_Xo) && (BW)<=CH_BW_UPPER_LIMIT(F_Xo))
Wolfgang Betz 67:93bec0baf1de 429
Wolfgang Betz 67:93bec0baf1de 430 /**
Wolfgang Betz 67:93bec0baf1de 431 * @}
Wolfgang Betz 67:93bec0baf1de 432 */
Wolfgang Betz 67:93bec0baf1de 433
Wolfgang Betz 67:93bec0baf1de 434
Wolfgang Betz 67:93bec0baf1de 435 /** @defgroup Radio_Power_Amplifier Radio Power Amplifier
Wolfgang Betz 67:93bec0baf1de 436 * @{
Wolfgang Betz 67:93bec0baf1de 437 */
Wolfgang Betz 67:93bec0baf1de 438
Wolfgang Betz 67:93bec0baf1de 439 #define IS_PA_MAX_INDEX(INDEX) ((INDEX)<=7)
Wolfgang Betz 67:93bec0baf1de 440 #define IS_PAPOWER_DBM(PATABLE) ((PATABLE)>= (-31) && (PATABLE)<=(12))
Wolfgang Betz 67:93bec0baf1de 441 #define IS_PAPOWER(PATABLE) ((PATABLE)<=90)
Wolfgang Betz 67:93bec0baf1de 442 #define IS_PA_STEP_WIDTH(WIDTH) ((WIDTH)>=1 && (WIDTH)<=4)
Wolfgang Betz 67:93bec0baf1de 443
Wolfgang Betz 67:93bec0baf1de 444 /**
Wolfgang Betz 67:93bec0baf1de 445 * @}
Wolfgang Betz 67:93bec0baf1de 446 */
Wolfgang Betz 67:93bec0baf1de 447
Wolfgang Betz 67:93bec0baf1de 448
Wolfgang Betz 67:93bec0baf1de 449 /** @defgroup Radio_Automatic_Frequency_Correction Radio Automatic Frequency Correction
Wolfgang Betz 67:93bec0baf1de 450 * @{
Wolfgang Betz 67:93bec0baf1de 451 */
Wolfgang Betz 67:93bec0baf1de 452
Wolfgang Betz 67:93bec0baf1de 453 #define IS_AFC_FAST_GAIN(GAIN) ((GAIN)<=15)
Wolfgang Betz 67:93bec0baf1de 454 #define IS_AFC_SLOW_GAIN(GAIN) ((GAIN)<=15)
Wolfgang Betz 67:93bec0baf1de 455 #define IS_AFC_PD_LEAKAGE(LEAKAGE) ((LEAKAGE)<=31)
Wolfgang Betz 67:93bec0baf1de 456
Wolfgang Betz 67:93bec0baf1de 457 /**
Wolfgang Betz 67:93bec0baf1de 458 * @}
Wolfgang Betz 67:93bec0baf1de 459 */
Wolfgang Betz 67:93bec0baf1de 460
Wolfgang Betz 67:93bec0baf1de 461 /** @defgroup Radio_Automatic_Gain_Control Radio Automatic Gain Control
Wolfgang Betz 67:93bec0baf1de 462 * @{
Wolfgang Betz 67:93bec0baf1de 463 */
Wolfgang Betz 67:93bec0baf1de 464
Wolfgang Betz 67:93bec0baf1de 465 #define AGC_MEASURE_TIME_UPPER_LIMIT_US(F_Xo) (393216.0/F_Xo)
Wolfgang Betz 67:93bec0baf1de 466
Wolfgang Betz 67:93bec0baf1de 467 #define IS_AGC_MEASURE_TIME_US(TIME, F_Xo) (TIME<=AGC_MEASURE_TIME_UPPER_LIMIT_US(F_Xo))
Wolfgang Betz 67:93bec0baf1de 468
Wolfgang Betz 67:93bec0baf1de 469 #define IS_AGC_MEASURE_TIME(TIME) (TIME<=15)
Wolfgang Betz 67:93bec0baf1de 470
Wolfgang Betz 67:93bec0baf1de 471 #define AGC_HOLD_TIME_UPPER_LIMIT_US(F_Xo) (756.0/F_Xo)
Wolfgang Betz 67:93bec0baf1de 472
Wolfgang Betz 67:93bec0baf1de 473 #define IS_AGC_HOLD_TIME_US(TIME,F_Xo) (TIME<=AGC_HOLD_TIME_UPPER_LIMIT_US(F_Xo))
Wolfgang Betz 67:93bec0baf1de 474
Wolfgang Betz 67:93bec0baf1de 475
Wolfgang Betz 67:93bec0baf1de 476 #define IS_AGC_HOLD_TIME(TIME) (TIME<=63)
Wolfgang Betz 67:93bec0baf1de 477
Wolfgang Betz 67:93bec0baf1de 478 #define IS_AGC_THRESHOLD(THRESHOLD) (THRESHOLD<=15)
Wolfgang Betz 67:93bec0baf1de 479
Wolfgang Betz 67:93bec0baf1de 480 /**
Wolfgang Betz 67:93bec0baf1de 481 * @}
Wolfgang Betz 67:93bec0baf1de 482 */
Wolfgang Betz 67:93bec0baf1de 483
Wolfgang Betz 67:93bec0baf1de 484
Wolfgang Betz 67:93bec0baf1de 485 /** @defgroup Radio_Clock_Recovery Radio Clock Recovery
Wolfgang Betz 67:93bec0baf1de 486 * @{
Wolfgang Betz 67:93bec0baf1de 487 */
Wolfgang Betz 67:93bec0baf1de 488
Wolfgang Betz 67:93bec0baf1de 489 #define IS_CLK_REC_P_GAIN(GAIN) ((GAIN)<=7)
Wolfgang Betz 67:93bec0baf1de 490 #define IS_CLK_REC_I_GAIN(GAIN) ((GAIN)<=15)
Wolfgang Betz 67:93bec0baf1de 491
Wolfgang Betz 67:93bec0baf1de 492 /**
Wolfgang Betz 67:93bec0baf1de 493 * @}
Wolfgang Betz 67:93bec0baf1de 494 */
Wolfgang Betz 67:93bec0baf1de 495
Wolfgang Betz 67:93bec0baf1de 496 /**
Wolfgang Betz 67:93bec0baf1de 497 * @}
Wolfgang Betz 67:93bec0baf1de 498 */
Wolfgang Betz 67:93bec0baf1de 499
Wolfgang Betz 67:93bec0baf1de 500
Wolfgang Betz 67:93bec0baf1de 501
Wolfgang Betz 67:93bec0baf1de 502 /** @defgroup Radio_Exported_Macros Radio Exported Macros
Wolfgang Betz 67:93bec0baf1de 503 * @{
Wolfgang Betz 67:93bec0baf1de 504 */
Wolfgang Betz 67:93bec0baf1de 505
Wolfgang Betz 67:93bec0baf1de 506
Wolfgang Betz 67:93bec0baf1de 507 /**
Wolfgang Betz 67:93bec0baf1de 508 * @}
Wolfgang Betz 67:93bec0baf1de 509 */
Wolfgang Betz 67:93bec0baf1de 510
Wolfgang Betz 67:93bec0baf1de 511 /** @defgroup Radio_Exported_Functions Radio Exported Functions
Wolfgang Betz 67:93bec0baf1de 512 * @{
Wolfgang Betz 67:93bec0baf1de 513 */
Wolfgang Betz 67:93bec0baf1de 514
Wolfgang Betz 67:93bec0baf1de 515 uint8_t SpiritRadioInit(SRadioInit* pxSRadioInitStruct);
Wolfgang Betz 67:93bec0baf1de 516 void SpiritRadioGetInfo(SRadioInit* pxSRadioInitStruct);
Wolfgang Betz 67:93bec0baf1de 517 void SpiritRadioSetXtalFlag(XtalFlag xXtal);
Wolfgang Betz 67:93bec0baf1de 518 XtalFlag SpiritRadioGetXtalFlag(void);
Wolfgang Betz 67:93bec0baf1de 519 uint8_t SpiritRadioSearchWCP(uint32_t lFc);
Wolfgang Betz 67:93bec0baf1de 520 void SpiritRadioSetSynthWord(uint32_t lSynthWord);
Wolfgang Betz 67:93bec0baf1de 521 uint32_t SpiritRadioGetSynthWord(void);
Wolfgang Betz 67:93bec0baf1de 522 void SpiritRadioSetBand(BandSelect xBand);
Wolfgang Betz 67:93bec0baf1de 523 BandSelect SpiritRadioGetBand(void);
Wolfgang Betz 67:93bec0baf1de 524 void SpiritRadioSetChannel(uint8_t cChannel);
Wolfgang Betz 67:93bec0baf1de 525 uint8_t SpiritRadioGetChannel(void);
Wolfgang Betz 67:93bec0baf1de 526 void SpiritRadioSetChannelSpace(uint32_t lChannelSpace);
Wolfgang Betz 67:93bec0baf1de 527 uint32_t SpiritRadioGetChannelSpace(void);
Wolfgang Betz 67:93bec0baf1de 528 void SpiritRadioSetFrequencyOffsetPpm(int16_t nXtalPpm);
Wolfgang Betz 67:93bec0baf1de 529 void SpiritRadioSetFrequencyOffset(int32_t lFOffset);
Wolfgang Betz 67:93bec0baf1de 530 int32_t SpiritRadioGetFrequencyOffset(void);
Wolfgang Betz 67:93bec0baf1de 531 void SpiritRadioVcoCalibrationWAFB(SpiritFunctionalState xNewstate);
Wolfgang Betz 67:93bec0baf1de 532 uint8_t SpiritRadioSetFrequencyBase(uint32_t lFBase);
Wolfgang Betz 67:93bec0baf1de 533 uint32_t SpiritRadioGetFrequencyBase(void);
Wolfgang Betz 67:93bec0baf1de 534 uint32_t SpiritRadioGetCenterFrequency(void);
Wolfgang Betz 67:93bec0baf1de 535 void SpiritRadioSearchDatarateME(uint32_t lDatarate, uint8_t* pcM, uint8_t* pcE);
Wolfgang Betz 67:93bec0baf1de 536 void SpiritRadioSearchFreqDevME(uint32_t lFDev, uint8_t* pcM, uint8_t* pcE);
Wolfgang Betz 67:93bec0baf1de 537 void SpiritRadioSearchChannelBwME(uint32_t lBandwidth, uint8_t* pcM, uint8_t* pcE);
Wolfgang Betz 67:93bec0baf1de 538 void SpiritRadioSetDatarate(uint32_t lDatarate);
Wolfgang Betz 67:93bec0baf1de 539 uint32_t SpiritRadioGetDatarate(void);
Wolfgang Betz 67:93bec0baf1de 540 void SpiritRadioSetFrequencyDev(uint32_t lFDev);
Wolfgang Betz 67:93bec0baf1de 541 uint32_t SpiritRadioGetFrequencyDev(void);
Wolfgang Betz 67:93bec0baf1de 542 void SpiritRadioSetChannelBW(uint32_t lBandwidth);
Wolfgang Betz 67:93bec0baf1de 543 uint32_t SpiritRadioGetChannelBW(void);
Wolfgang Betz 67:93bec0baf1de 544 void SpiritRadioSetModulation(ModulationSelect xModulation);
Wolfgang Betz 67:93bec0baf1de 545 ModulationSelect SpiritRadioGetModulation(void);
Wolfgang Betz 67:93bec0baf1de 546 void SpiritRadioCWTransmitMode(SpiritFunctionalState xNewState);
Wolfgang Betz 67:93bec0baf1de 547 void SpiritRadioSetOokPeakDecay(OokPeakDecay xOokDecay);
Wolfgang Betz 67:93bec0baf1de 548 OokPeakDecay SpiritRadioGetOokPeakDecay(void);
Wolfgang Betz 67:93bec0baf1de 549 uint8_t SpiritRadioGetdBm2Reg(uint32_t lFBase, float fPowerdBm);
Wolfgang Betz 67:93bec0baf1de 550 float SpiritRadioGetReg2dBm(uint32_t lFBase, uint8_t cPowerReg);
Wolfgang Betz 67:93bec0baf1de 551 void SpiritRadioSetPATabledBm(uint8_t cPALevelMaxIndex, uint8_t cWidth, PALoadCapacitor xCLoad, float* pfPAtabledBm);
Wolfgang Betz 67:93bec0baf1de 552 void SpiritRadioGetPATabledBm(uint8_t* pcPALevelMaxIndex, float* pfPAtabledBm);
Wolfgang Betz 67:93bec0baf1de 553 void SpiritRadioSetPATable(uint8_t cPALevelMaxIndex, uint8_t cWidth, PALoadCapacitor xCLoad, uint8_t* pcPAtable);
Wolfgang Betz 67:93bec0baf1de 554 void SpiritRadioGetPATable(uint8_t* pcPALevelMaxIndex, uint8_t* pcPAtable);
Wolfgang Betz 67:93bec0baf1de 555 void SpiritRadioSetPALeveldBm(uint8_t cIndex, float fPowerdBm);
Wolfgang Betz 67:93bec0baf1de 556 float SpiritRadioGetPALeveldBm(uint8_t cIndex);
Wolfgang Betz 67:93bec0baf1de 557 void SpiritRadioSetPALevel(uint8_t cIndex, uint8_t cPower);
Wolfgang Betz 67:93bec0baf1de 558 uint8_t SpiritRadioGetPALevel(uint8_t cIndex);
Wolfgang Betz 67:93bec0baf1de 559 void SpiritRadioSetPACwc(PALoadCapacitor xCLoad);
Wolfgang Betz 67:93bec0baf1de 560 PALoadCapacitor SpiritRadioGetPACwc(void);
Wolfgang Betz 67:93bec0baf1de 561 void SpiritRadioSetPALevelMaxIndex(uint8_t cIndex);
Wolfgang Betz 67:93bec0baf1de 562 uint8_t SpiritRadioGetPALevelMaxIndex(void);
Wolfgang Betz 67:93bec0baf1de 563 void SpiritRadioSetPAStepWidth(uint8_t cWidth);
Wolfgang Betz 67:93bec0baf1de 564 uint8_t SpiritRadioGetPAStepWidth(void);
Wolfgang Betz 67:93bec0baf1de 565 void SpiritRadioPARamping(SpiritFunctionalState xNewState);
Wolfgang Betz 67:93bec0baf1de 566 SpiritFunctionalState SpiritRadioGetPARamping(void);
Wolfgang Betz 67:93bec0baf1de 567 void SpiritRadioAFC(SpiritFunctionalState xNewState);
Wolfgang Betz 67:93bec0baf1de 568 void SpiritRadioAFCFreezeOnSync(SpiritFunctionalState xNewState);
Wolfgang Betz 67:93bec0baf1de 569 void SpiritRadioSetAFCMode(AFCMode xMode);
Wolfgang Betz 67:93bec0baf1de 570 AFCMode SpiritRadioGetAFCMode(void);
Wolfgang Betz 67:93bec0baf1de 571 void SpiritRadioSetAFCPDLeakage(uint8_t cLeakage);
Wolfgang Betz 67:93bec0baf1de 572 uint8_t SpiritRadioGetAFCPDLeakage(void);
Wolfgang Betz 67:93bec0baf1de 573 void SpiritRadioSetAFCFastPeriod(uint8_t cLength);
Wolfgang Betz 67:93bec0baf1de 574 uint8_t SpiritRadioGetAFCFastPeriod(void);
Wolfgang Betz 67:93bec0baf1de 575 void SpiritRadioSetAFCFastGain(uint8_t cGain);
Wolfgang Betz 67:93bec0baf1de 576 uint8_t SpiritRadioGetAFCFastGain(void);
Wolfgang Betz 67:93bec0baf1de 577 void SpiritRadioSetAFCSlowGain(uint8_t cGain);
Wolfgang Betz 67:93bec0baf1de 578 uint8_t SpiritRadioGetAFCSlowGain(void);
Wolfgang Betz 67:93bec0baf1de 579 int8_t SpiritRadioGetAFCCorrectionReg(void);
Wolfgang Betz 67:93bec0baf1de 580 int32_t SpiritRadioGetAFCCorrectionHz(void);
Wolfgang Betz 67:93bec0baf1de 581 void SpiritRadioAGC(SpiritFunctionalState xNewState);
Wolfgang Betz 67:93bec0baf1de 582 void SpiritRadioSetAGCMode(AGCMode xMode);
Wolfgang Betz 67:93bec0baf1de 583 AGCMode SpiritRadioGetAGCMode(void);
Wolfgang Betz 67:93bec0baf1de 584 void SpiritRadioAGCFreezeOnSteady(SpiritFunctionalState xNewState);
Wolfgang Betz 67:93bec0baf1de 585 void SpiritRadioAGCFreezeOnSync(SpiritFunctionalState xNewState);
Wolfgang Betz 67:93bec0baf1de 586 void SpiritRadioAGCStartMaxAttenuation(SpiritFunctionalState xNewState);
Wolfgang Betz 67:93bec0baf1de 587 void SpiritRadioSetAGCMeasureTimeUs(uint16_t nTime);
Wolfgang Betz 67:93bec0baf1de 588 uint16_t SpiritRadioGetAGCMeasureTimeUs(void);
Wolfgang Betz 67:93bec0baf1de 589 void SpiritRadioSetAGCMeasureTime(uint8_t cTime);
Wolfgang Betz 67:93bec0baf1de 590 uint8_t SpiritRadioGetAGCMeasureTime(void);
Wolfgang Betz 67:93bec0baf1de 591 void SpiritRadioSetAGCHoldTimeUs(uint8_t cTime);
Wolfgang Betz 67:93bec0baf1de 592 uint8_t SpiritRadioGetAGCHoldTimeUs(void);
Wolfgang Betz 67:93bec0baf1de 593 void SpiritRadioSetAGCHoldTime(uint8_t cTime);
Wolfgang Betz 67:93bec0baf1de 594 uint8_t SpiritRadioGetAGCHoldTime(void);
Wolfgang Betz 67:93bec0baf1de 595 void SpiritRadioSetAGCHighThreshold(uint8_t cHighThreshold);
Wolfgang Betz 67:93bec0baf1de 596 uint8_t SpiritRadioGetAGCHighThreshold(void);
Wolfgang Betz 67:93bec0baf1de 597 void SpiritRadioSetAGCLowThreshold(uint8_t cLowThreshold);
Wolfgang Betz 67:93bec0baf1de 598 uint8_t SpiritRadioGetAGCLowThreshold(void);
Wolfgang Betz 67:93bec0baf1de 599 void SpiritRadioSetClkRecMode(ClkRecMode xMode);
Wolfgang Betz 67:93bec0baf1de 600 ClkRecMode SpiritRadioGetClkRecMode(void);
Wolfgang Betz 67:93bec0baf1de 601 void SpiritRadioSetClkRecPGain(uint8_t cPGain);
Wolfgang Betz 67:93bec0baf1de 602 uint8_t SpiritRadioGetClkRecPGain(void);
Wolfgang Betz 67:93bec0baf1de 603 void SpiritRadioSetClkRecIGain(uint8_t cIGain);
Wolfgang Betz 67:93bec0baf1de 604 uint8_t SpiritRadioGetClkRecIGain(void);
Wolfgang Betz 67:93bec0baf1de 605 void SpiritRadioSetClkRecPstFltLength(PstFltLength xLength);
Wolfgang Betz 67:93bec0baf1de 606 PstFltLength SpiritRadioGetClkRecPstFltLength(void);
Wolfgang Betz 67:93bec0baf1de 607 void SpiritRadioCsBlanking(SpiritFunctionalState xNewState);
Wolfgang Betz 67:93bec0baf1de 608 void SpiritRadioPersistenRx(SpiritFunctionalState xNewState);
Wolfgang Betz 67:93bec0baf1de 609 uint32_t SpiritRadioGetXtalFrequency(void);
Wolfgang Betz 67:93bec0baf1de 610 void SpiritRadioSetXtalFrequency(uint32_t lXtalFrequency);
Wolfgang Betz 67:93bec0baf1de 611 void SpiritRadioSetRefDiv(SpiritFunctionalState xNewState);
Wolfgang Betz 67:93bec0baf1de 612 SpiritFunctionalState SpiritRadioGetRefDiv(void);
Wolfgang Betz 67:93bec0baf1de 613 void SpiritRadioSetDigDiv(SpiritFunctionalState xNewState);
Wolfgang Betz 67:93bec0baf1de 614 SpiritFunctionalState SpiritRadioGetDigDiv(void);
Wolfgang Betz 67:93bec0baf1de 615 /**
Wolfgang Betz 67:93bec0baf1de 616 * @}
Wolfgang Betz 67:93bec0baf1de 617 */
Wolfgang Betz 67:93bec0baf1de 618
Wolfgang Betz 67:93bec0baf1de 619 /**
Wolfgang Betz 67:93bec0baf1de 620 * @}
Wolfgang Betz 67:93bec0baf1de 621 */
Wolfgang Betz 67:93bec0baf1de 622
Wolfgang Betz 67:93bec0baf1de 623
Wolfgang Betz 67:93bec0baf1de 624 /**
Wolfgang Betz 67:93bec0baf1de 625 * @}
Wolfgang Betz 67:93bec0baf1de 626 */
Wolfgang Betz 67:93bec0baf1de 627
Wolfgang Betz 67:93bec0baf1de 628
Wolfgang Betz 67:93bec0baf1de 629
Wolfgang Betz 67:93bec0baf1de 630 #ifdef __cplusplus
Wolfgang Betz 67:93bec0baf1de 631 }
Wolfgang Betz 67:93bec0baf1de 632 #endif
Wolfgang Betz 67:93bec0baf1de 633
Wolfgang Betz 67:93bec0baf1de 634 #endif
Wolfgang Betz 67:93bec0baf1de 635
Wolfgang Betz 67:93bec0baf1de 636 /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/