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_Qi.c
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 Configuration and management of SPIRIT QI.
Wolfgang Betz 67:93bec0baf1de 8 * @details
Wolfgang Betz 67:93bec0baf1de 9 *
Wolfgang Betz 67:93bec0baf1de 10 * @attention
Wolfgang Betz 67:93bec0baf1de 11 *
Wolfgang Betz 67:93bec0baf1de 12 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
Wolfgang Betz 67:93bec0baf1de 13 *
Wolfgang Betz 67:93bec0baf1de 14 * Redistribution and use in source and binary forms, with or without modification,
Wolfgang Betz 67:93bec0baf1de 15 * are permitted provided that the following conditions are met:
Wolfgang Betz 67:93bec0baf1de 16 * 1. Redistributions of source code must retain the above copyright notice,
Wolfgang Betz 67:93bec0baf1de 17 * this list of conditions and the following disclaimer.
Wolfgang Betz 67:93bec0baf1de 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
Wolfgang Betz 67:93bec0baf1de 19 * this list of conditions and the following disclaimer in the documentation
Wolfgang Betz 67:93bec0baf1de 20 * and/or other materials provided with the distribution.
Wolfgang Betz 67:93bec0baf1de 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Wolfgang Betz 67:93bec0baf1de 22 * may be used to endorse or promote products derived from this software
Wolfgang Betz 67:93bec0baf1de 23 * without specific prior written permission.
Wolfgang Betz 67:93bec0baf1de 24 *
Wolfgang Betz 67:93bec0baf1de 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Wolfgang Betz 67:93bec0baf1de 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Wolfgang Betz 67:93bec0baf1de 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Wolfgang Betz 67:93bec0baf1de 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Wolfgang Betz 67:93bec0baf1de 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Wolfgang Betz 67:93bec0baf1de 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Wolfgang Betz 67:93bec0baf1de 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Wolfgang Betz 67:93bec0baf1de 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Wolfgang Betz 67:93bec0baf1de 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Wolfgang Betz 67:93bec0baf1de 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Wolfgang Betz 67:93bec0baf1de 35 *
Wolfgang Betz 67:93bec0baf1de 36 ******************************************************************************
Wolfgang Betz 67:93bec0baf1de 37 */
Wolfgang Betz 67:93bec0baf1de 38
Wolfgang Betz 67:93bec0baf1de 39 /* Includes ------------------------------------------------------------------*/
Wolfgang Betz 67:93bec0baf1de 40 #include "SPIRIT_Qi.h"
Wolfgang Betz 67:93bec0baf1de 41 #include "MCU_Interface.h"
Wolfgang Betz 67:93bec0baf1de 42
Wolfgang Betz 67:93bec0baf1de 43
Wolfgang Betz 67:93bec0baf1de 44
Wolfgang Betz 67:93bec0baf1de 45 /**
Wolfgang Betz 67:93bec0baf1de 46 * @addtogroup SPIRIT_Libraries
Wolfgang Betz 67:93bec0baf1de 47 * @{
Wolfgang Betz 67:93bec0baf1de 48 */
Wolfgang Betz 67:93bec0baf1de 49
Wolfgang Betz 67:93bec0baf1de 50
Wolfgang Betz 67:93bec0baf1de 51 /**
Wolfgang Betz 67:93bec0baf1de 52 * @addtogroup SPIRIT_Qi
Wolfgang Betz 67:93bec0baf1de 53 * @{
Wolfgang Betz 67:93bec0baf1de 54 */
Wolfgang Betz 67:93bec0baf1de 55
Wolfgang Betz 67:93bec0baf1de 56
Wolfgang Betz 67:93bec0baf1de 57 /**
Wolfgang Betz 67:93bec0baf1de 58 * @defgroup Qi_Private_TypesDefinitions QI Private Types Definitions
Wolfgang Betz 67:93bec0baf1de 59 * @{
Wolfgang Betz 67:93bec0baf1de 60 */
Wolfgang Betz 67:93bec0baf1de 61
Wolfgang Betz 67:93bec0baf1de 62 /**
Wolfgang Betz 67:93bec0baf1de 63 *@}
Wolfgang Betz 67:93bec0baf1de 64 */
Wolfgang Betz 67:93bec0baf1de 65
Wolfgang Betz 67:93bec0baf1de 66
Wolfgang Betz 67:93bec0baf1de 67 /**
Wolfgang Betz 67:93bec0baf1de 68 * @defgroup Qi_Private_Defines QI Private Defines
Wolfgang Betz 67:93bec0baf1de 69 * @{
Wolfgang Betz 67:93bec0baf1de 70 */
Wolfgang Betz 67:93bec0baf1de 71
Wolfgang Betz 67:93bec0baf1de 72 /**
Wolfgang Betz 67:93bec0baf1de 73 *@}
Wolfgang Betz 67:93bec0baf1de 74 */
Wolfgang Betz 67:93bec0baf1de 75
Wolfgang Betz 67:93bec0baf1de 76
Wolfgang Betz 67:93bec0baf1de 77 /**
Wolfgang Betz 67:93bec0baf1de 78 * @defgroup Qi_Private_Macros QI Private Macros
Wolfgang Betz 67:93bec0baf1de 79 * @{
Wolfgang Betz 67:93bec0baf1de 80 */
Wolfgang Betz 67:93bec0baf1de 81
Wolfgang Betz 67:93bec0baf1de 82 /**
Wolfgang Betz 67:93bec0baf1de 83 *@}
Wolfgang Betz 67:93bec0baf1de 84 */
Wolfgang Betz 67:93bec0baf1de 85
Wolfgang Betz 67:93bec0baf1de 86
Wolfgang Betz 67:93bec0baf1de 87 /**
Wolfgang Betz 67:93bec0baf1de 88 * @defgroup Qi_Private_Variables QI Private Variables
Wolfgang Betz 67:93bec0baf1de 89 * @{
Wolfgang Betz 67:93bec0baf1de 90 */
Wolfgang Betz 67:93bec0baf1de 91
Wolfgang Betz 67:93bec0baf1de 92 /**
Wolfgang Betz 67:93bec0baf1de 93 *@}
Wolfgang Betz 67:93bec0baf1de 94 */
Wolfgang Betz 67:93bec0baf1de 95
Wolfgang Betz 67:93bec0baf1de 96
Wolfgang Betz 67:93bec0baf1de 97 /**
Wolfgang Betz 67:93bec0baf1de 98 * @defgroup Qi_Private_FunctionPrototypes QI Private Function Prototypes
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 *@}
Wolfgang Betz 67:93bec0baf1de 104 */
Wolfgang Betz 67:93bec0baf1de 105
Wolfgang Betz 67:93bec0baf1de 106
Wolfgang Betz 67:93bec0baf1de 107 /**
Wolfgang Betz 67:93bec0baf1de 108 * @defgroup Qi_Private_Functions QI Private Functions
Wolfgang Betz 67:93bec0baf1de 109 * @{
Wolfgang Betz 67:93bec0baf1de 110 */
Wolfgang Betz 67:93bec0baf1de 111
Wolfgang Betz 67:93bec0baf1de 112 /**
Wolfgang Betz 67:93bec0baf1de 113 * @brief Enables/Disables the PQI Preamble Quality Indicator check. The running peak PQI is
Wolfgang Betz 67:93bec0baf1de 114 * compared to a threshold value and the preamble valid IRQ is asserted as soon as the threshold is passed.
Wolfgang Betz 67:93bec0baf1de 115 * @param xNewState new state for PQI check.
Wolfgang Betz 67:93bec0baf1de 116 * This parameter can be: S_ENABLE or S_DISABLE.
Wolfgang Betz 67:93bec0baf1de 117 * @retval None.
Wolfgang Betz 67:93bec0baf1de 118 */
Wolfgang Betz 67:93bec0baf1de 119 void SpiritQiPqiCheck(SpiritFunctionalState xNewState)
Wolfgang Betz 67:93bec0baf1de 120 {
Wolfgang Betz 67:93bec0baf1de 121 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 122
Wolfgang Betz 67:93bec0baf1de 123 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 124 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
Wolfgang Betz 67:93bec0baf1de 125
Wolfgang Betz 67:93bec0baf1de 126 /* Reads the QI register value */
Wolfgang Betz 67:93bec0baf1de 127 g_xStatus = SpiritSpiReadRegisters(QI_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 128
Wolfgang Betz 67:93bec0baf1de 129 /* Enables or disables the PQI Check bit on the QI_BASE register */
Wolfgang Betz 67:93bec0baf1de 130 if(xNewState == S_ENABLE)
Wolfgang Betz 67:93bec0baf1de 131 {
Wolfgang Betz 67:93bec0baf1de 132 tempRegValue |= QI_PQI_MASK;
Wolfgang Betz 67:93bec0baf1de 133 }
Wolfgang Betz 67:93bec0baf1de 134 else
Wolfgang Betz 67:93bec0baf1de 135 {
Wolfgang Betz 67:93bec0baf1de 136 tempRegValue &= ~QI_PQI_MASK;
Wolfgang Betz 67:93bec0baf1de 137 }
Wolfgang Betz 67:93bec0baf1de 138
Wolfgang Betz 67:93bec0baf1de 139 /* Writes value on the QI register */
Wolfgang Betz 67:93bec0baf1de 140 g_xStatus = SpiritSpiWriteRegisters(QI_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 141
Wolfgang Betz 67:93bec0baf1de 142 }
Wolfgang Betz 67:93bec0baf1de 143
Wolfgang Betz 67:93bec0baf1de 144
Wolfgang Betz 67:93bec0baf1de 145 /**
Wolfgang Betz 67:93bec0baf1de 146 * @brief Enables/Disables the Synchronization Quality Indicator check. The running peak SQI is
Wolfgang Betz 67:93bec0baf1de 147 * compared to a threshold value and the sync valid IRQ is asserted as soon as the threshold is passed.
Wolfgang Betz 67:93bec0baf1de 148 * @param xNewState new state for SQI check.
Wolfgang Betz 67:93bec0baf1de 149 * This parameter can be: S_ENABLE or S_DISABLE.
Wolfgang Betz 67:93bec0baf1de 150 * @retval None.
Wolfgang Betz 67:93bec0baf1de 151 */
Wolfgang Betz 67:93bec0baf1de 152 void SpiritQiSqiCheck(SpiritFunctionalState xNewState)
Wolfgang Betz 67:93bec0baf1de 153 {
Wolfgang Betz 67:93bec0baf1de 154 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 155
Wolfgang Betz 67:93bec0baf1de 156 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 157 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
Wolfgang Betz 67:93bec0baf1de 158
Wolfgang Betz 67:93bec0baf1de 159 /* Reads the QI register value */
Wolfgang Betz 67:93bec0baf1de 160 g_xStatus = SpiritSpiReadRegisters(QI_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 161
Wolfgang Betz 67:93bec0baf1de 162 /* Enables or disables the SQI Check bit on the QI_BASE register */
Wolfgang Betz 67:93bec0baf1de 163 if(xNewState == S_ENABLE)
Wolfgang Betz 67:93bec0baf1de 164 {
Wolfgang Betz 67:93bec0baf1de 165 tempRegValue |= QI_SQI_MASK;
Wolfgang Betz 67:93bec0baf1de 166 }
Wolfgang Betz 67:93bec0baf1de 167 else
Wolfgang Betz 67:93bec0baf1de 168 {
Wolfgang Betz 67:93bec0baf1de 169 tempRegValue &= ~QI_SQI_MASK;
Wolfgang Betz 67:93bec0baf1de 170 }
Wolfgang Betz 67:93bec0baf1de 171
Wolfgang Betz 67:93bec0baf1de 172 /* Writes value on the QI register */
Wolfgang Betz 67:93bec0baf1de 173 g_xStatus = SpiritSpiWriteRegisters(QI_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 174
Wolfgang Betz 67:93bec0baf1de 175 }
Wolfgang Betz 67:93bec0baf1de 176
Wolfgang Betz 67:93bec0baf1de 177
Wolfgang Betz 67:93bec0baf1de 178 /**
Wolfgang Betz 67:93bec0baf1de 179 * @brief Sets the PQI threshold. The preamble quality threshold is 4*PQI_TH (PQI_TH = 0..15).
Wolfgang Betz 67:93bec0baf1de 180 * @param xPqiThr parameter of the formula above.
Wolfgang Betz 67:93bec0baf1de 181 * This variable is a @ref PqiThreshold.
Wolfgang Betz 67:93bec0baf1de 182 * @retval None.
Wolfgang Betz 67:93bec0baf1de 183 */
Wolfgang Betz 67:93bec0baf1de 184 void SpiritQiSetPqiThreshold(PqiThreshold xPqiThr)
Wolfgang Betz 67:93bec0baf1de 185 {
Wolfgang Betz 67:93bec0baf1de 186 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 187
Wolfgang Betz 67:93bec0baf1de 188 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 189 s_assert_param(IS_PQI_THR(xPqiThr));
Wolfgang Betz 67:93bec0baf1de 190
Wolfgang Betz 67:93bec0baf1de 191 /* Reads the QI register value */
Wolfgang Betz 67:93bec0baf1de 192 g_xStatus = SpiritSpiReadRegisters(QI_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 193
Wolfgang Betz 67:93bec0baf1de 194 /* Build the PQI threshold value to be written */
Wolfgang Betz 67:93bec0baf1de 195 tempRegValue &= 0xC3;
Wolfgang Betz 67:93bec0baf1de 196 tempRegValue |= ((uint8_t)xPqiThr);
Wolfgang Betz 67:93bec0baf1de 197
Wolfgang Betz 67:93bec0baf1de 198 /* Writes value on the QI register */
Wolfgang Betz 67:93bec0baf1de 199 g_xStatus = SpiritSpiWriteRegisters(QI_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 200
Wolfgang Betz 67:93bec0baf1de 201 }
Wolfgang Betz 67:93bec0baf1de 202
Wolfgang Betz 67:93bec0baf1de 203
Wolfgang Betz 67:93bec0baf1de 204 /**
Wolfgang Betz 67:93bec0baf1de 205 * @brief Returns the PQI threshold. The preamble quality threshold is 4*PQI_TH (PQI_TH = 0..15).
Wolfgang Betz 67:93bec0baf1de 206 * @param None.
Wolfgang Betz 67:93bec0baf1de 207 * @retval PqiThreshold PQI threshold (PQI_TH of the formula above).
Wolfgang Betz 67:93bec0baf1de 208 */
Wolfgang Betz 67:93bec0baf1de 209 PqiThreshold SpiritQiGetPqiThreshold(void)
Wolfgang Betz 67:93bec0baf1de 210 {
Wolfgang Betz 67:93bec0baf1de 211 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 212
Wolfgang Betz 67:93bec0baf1de 213 /* Reads the QI register value */
Wolfgang Betz 67:93bec0baf1de 214 g_xStatus = SpiritSpiReadRegisters(QI_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 215
Wolfgang Betz 67:93bec0baf1de 216 /* Rebuild and return the PQI threshold value */
Wolfgang Betz 67:93bec0baf1de 217 return (PqiThreshold)(tempRegValue & 0x3C);
Wolfgang Betz 67:93bec0baf1de 218
Wolfgang Betz 67:93bec0baf1de 219 }
Wolfgang Betz 67:93bec0baf1de 220
Wolfgang Betz 67:93bec0baf1de 221
Wolfgang Betz 67:93bec0baf1de 222 /**
Wolfgang Betz 67:93bec0baf1de 223 * @brief Sets the SQI threshold. The synchronization quality
Wolfgang Betz 67:93bec0baf1de 224 * threshold is equal to 8 * SYNC_LEN - 2 * SQI_TH with SQI_TH = 0..3. When SQI_TH is 0 perfect match is required; when
Wolfgang Betz 67:93bec0baf1de 225 * SQI_TH = 1, 2, 3 then 1, 2, or 3 bit errors are respectively accepted. It is recommended that the SQI check is always
Wolfgang Betz 67:93bec0baf1de 226 * enabled.
Wolfgang Betz 67:93bec0baf1de 227 * @param xSqiThr parameter of the formula above.
Wolfgang Betz 67:93bec0baf1de 228 * This parameter is a @ref SqiThreshold.
Wolfgang Betz 67:93bec0baf1de 229 * @retval None.
Wolfgang Betz 67:93bec0baf1de 230 */
Wolfgang Betz 67:93bec0baf1de 231 void SpiritQiSetSqiThreshold(SqiThreshold xSqiThr)
Wolfgang Betz 67:93bec0baf1de 232 {
Wolfgang Betz 67:93bec0baf1de 233 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 234
Wolfgang Betz 67:93bec0baf1de 235 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 236 s_assert_param(IS_SQI_THR(xSqiThr));
Wolfgang Betz 67:93bec0baf1de 237
Wolfgang Betz 67:93bec0baf1de 238 /* Reads the QI register value */
Wolfgang Betz 67:93bec0baf1de 239 g_xStatus = SpiritSpiReadRegisters(QI_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 240
Wolfgang Betz 67:93bec0baf1de 241 /* Build the SQI threshold value to be written */
Wolfgang Betz 67:93bec0baf1de 242 tempRegValue &= 0x3F;
Wolfgang Betz 67:93bec0baf1de 243 tempRegValue |= ((uint8_t)xSqiThr);
Wolfgang Betz 67:93bec0baf1de 244
Wolfgang Betz 67:93bec0baf1de 245 /* Writes the new value on the QI register */
Wolfgang Betz 67:93bec0baf1de 246 g_xStatus = SpiritSpiWriteRegisters(QI_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 247
Wolfgang Betz 67:93bec0baf1de 248 }
Wolfgang Betz 67:93bec0baf1de 249
Wolfgang Betz 67:93bec0baf1de 250
Wolfgang Betz 67:93bec0baf1de 251 /**
Wolfgang Betz 67:93bec0baf1de 252 * @brief Returns the SQI threshold. The synchronization quality threshold is equal to 8 * SYNC_LEN - 2 * SQI_TH with SQI_TH = 0..3.
Wolfgang Betz 67:93bec0baf1de 253 * @param None.
Wolfgang Betz 67:93bec0baf1de 254 * @retval SqiThreshold SQI threshold (SQI_TH of the formula above).
Wolfgang Betz 67:93bec0baf1de 255 */
Wolfgang Betz 67:93bec0baf1de 256 SqiThreshold SpiritQiGetSqiThreshold(void)
Wolfgang Betz 67:93bec0baf1de 257 {
Wolfgang Betz 67:93bec0baf1de 258 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 259
Wolfgang Betz 67:93bec0baf1de 260 /* Reads the QI register value */
Wolfgang Betz 67:93bec0baf1de 261 g_xStatus = SpiritSpiReadRegisters(QI_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 262
Wolfgang Betz 67:93bec0baf1de 263 /* Rebuild and return the SQI threshold value */
Wolfgang Betz 67:93bec0baf1de 264 return (SqiThreshold)(tempRegValue & 0xC0);
Wolfgang Betz 67:93bec0baf1de 265
Wolfgang Betz 67:93bec0baf1de 266 }
Wolfgang Betz 67:93bec0baf1de 267
Wolfgang Betz 67:93bec0baf1de 268
Wolfgang Betz 67:93bec0baf1de 269 /**
Wolfgang Betz 67:93bec0baf1de 270 * @brief Returns the PQI value.
Wolfgang Betz 67:93bec0baf1de 271 * @param None.
Wolfgang Betz 67:93bec0baf1de 272 * @retval uint8_t PQI value.
Wolfgang Betz 67:93bec0baf1de 273 */
Wolfgang Betz 67:93bec0baf1de 274 uint8_t SpiritQiGetPqi(void)
Wolfgang Betz 67:93bec0baf1de 275 {
Wolfgang Betz 67:93bec0baf1de 276 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 277
Wolfgang Betz 67:93bec0baf1de 278 /* Reads the LINK_QUALIF2 register value */
Wolfgang Betz 67:93bec0baf1de 279 g_xStatus = SpiritSpiReadRegisters(LINK_QUALIF2_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 280
Wolfgang Betz 67:93bec0baf1de 281 /* Returns the PQI value */
Wolfgang Betz 67:93bec0baf1de 282 return tempRegValue;
Wolfgang Betz 67:93bec0baf1de 283
Wolfgang Betz 67:93bec0baf1de 284 }
Wolfgang Betz 67:93bec0baf1de 285
Wolfgang Betz 67:93bec0baf1de 286
Wolfgang Betz 67:93bec0baf1de 287 /**
Wolfgang Betz 67:93bec0baf1de 288 * @brief Returns the SQI value.
Wolfgang Betz 67:93bec0baf1de 289 * @param None.
Wolfgang Betz 67:93bec0baf1de 290 * @retval uint8_t SQI value.
Wolfgang Betz 67:93bec0baf1de 291 */
Wolfgang Betz 67:93bec0baf1de 292 uint8_t SpiritQiGetSqi(void)
Wolfgang Betz 67:93bec0baf1de 293 {
Wolfgang Betz 67:93bec0baf1de 294 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 295
Wolfgang Betz 67:93bec0baf1de 296 /* Reads the register LINK_QUALIF1 value */
Wolfgang Betz 67:93bec0baf1de 297 g_xStatus = SpiritSpiReadRegisters(LINK_QUALIF1_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 298
Wolfgang Betz 67:93bec0baf1de 299 /* Rebuild and return the SQI value */
Wolfgang Betz 67:93bec0baf1de 300 return (tempRegValue & 0x7F);
Wolfgang Betz 67:93bec0baf1de 301
Wolfgang Betz 67:93bec0baf1de 302 }
Wolfgang Betz 67:93bec0baf1de 303
Wolfgang Betz 67:93bec0baf1de 304
Wolfgang Betz 67:93bec0baf1de 305 /**
Wolfgang Betz 67:93bec0baf1de 306 * @brief Returns the LQI value.
Wolfgang Betz 67:93bec0baf1de 307 * @param None.
Wolfgang Betz 67:93bec0baf1de 308 * @retval uint8_t LQI value.
Wolfgang Betz 67:93bec0baf1de 309 */
Wolfgang Betz 67:93bec0baf1de 310 uint8_t SpiritQiGetLqi(void)
Wolfgang Betz 67:93bec0baf1de 311 {
Wolfgang Betz 67:93bec0baf1de 312 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 313
Wolfgang Betz 67:93bec0baf1de 314 /* Reads the LINK_QUALIF0 register value */
Wolfgang Betz 67:93bec0baf1de 315 g_xStatus = SpiritSpiReadRegisters(LINK_QUALIF0_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 316
Wolfgang Betz 67:93bec0baf1de 317 /* Rebuild and return the LQI value */
Wolfgang Betz 67:93bec0baf1de 318 return ((tempRegValue & 0xF0)>> 4);
Wolfgang Betz 67:93bec0baf1de 319
Wolfgang Betz 67:93bec0baf1de 320 }
Wolfgang Betz 67:93bec0baf1de 321
Wolfgang Betz 67:93bec0baf1de 322
Wolfgang Betz 67:93bec0baf1de 323 /**
Wolfgang Betz 67:93bec0baf1de 324 * @brief Returns the CS status.
Wolfgang Betz 67:93bec0baf1de 325 * @param None.
Wolfgang Betz 67:93bec0baf1de 326 * @retval SpiritFlagStatus CS value (S_SET or S_RESET).
Wolfgang Betz 67:93bec0baf1de 327 */
Wolfgang Betz 67:93bec0baf1de 328 SpiritFlagStatus SpiritQiGetCs(void)
Wolfgang Betz 67:93bec0baf1de 329 {
Wolfgang Betz 67:93bec0baf1de 330 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 331
Wolfgang Betz 67:93bec0baf1de 332 /* Reads the LINK_QUALIF1 register value */
Wolfgang Betz 67:93bec0baf1de 333 g_xStatus = SpiritSpiReadRegisters(LINK_QUALIF1_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 334
Wolfgang Betz 67:93bec0baf1de 335 /* Rebuild and returns the CS status value */
Wolfgang Betz 67:93bec0baf1de 336 if((tempRegValue & 0x80) == 0)
Wolfgang Betz 67:93bec0baf1de 337 {
Wolfgang Betz 67:93bec0baf1de 338 return S_RESET;
Wolfgang Betz 67:93bec0baf1de 339 }
Wolfgang Betz 67:93bec0baf1de 340 else
Wolfgang Betz 67:93bec0baf1de 341 {
Wolfgang Betz 67:93bec0baf1de 342 return S_SET;
Wolfgang Betz 67:93bec0baf1de 343 }
Wolfgang Betz 67:93bec0baf1de 344
Wolfgang Betz 67:93bec0baf1de 345 }
Wolfgang Betz 67:93bec0baf1de 346
Wolfgang Betz 67:93bec0baf1de 347
Wolfgang Betz 67:93bec0baf1de 348 /**
Wolfgang Betz 67:93bec0baf1de 349 * @brief Returns the RSSI value. The measured power is reported in steps of half a dB from 0 to 255 and is offset in such a way that -120 dBm corresponds
Wolfgang Betz 67:93bec0baf1de 350 * to 20.
Wolfgang Betz 67:93bec0baf1de 351 * @param None.
Wolfgang Betz 67:93bec0baf1de 352 * @retval uint8_t RSSI value.
Wolfgang Betz 67:93bec0baf1de 353 */
Wolfgang Betz 67:93bec0baf1de 354 uint8_t SpiritQiGetRssi(void)
Wolfgang Betz 67:93bec0baf1de 355 {
Wolfgang Betz 67:93bec0baf1de 356 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 357
Wolfgang Betz 67:93bec0baf1de 358 /* Reads the RSSI_LEVEL register value */
Wolfgang Betz 67:93bec0baf1de 359 g_xStatus = SpiritSpiReadRegisters(RSSI_LEVEL_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 360
Wolfgang Betz 67:93bec0baf1de 361 /* Returns the RSSI value */
Wolfgang Betz 67:93bec0baf1de 362 return tempRegValue;
Wolfgang Betz 67:93bec0baf1de 363
Wolfgang Betz 67:93bec0baf1de 364 }
Wolfgang Betz 67:93bec0baf1de 365
Wolfgang Betz 67:93bec0baf1de 366
Wolfgang Betz 67:93bec0baf1de 367 /**
Wolfgang Betz 67:93bec0baf1de 368 * @brief Sets the RSSI threshold.
Wolfgang Betz 67:93bec0baf1de 369 * @param cRssiThr RSSI threshold reported in steps of half a dBm with a -130 dBm offset.
Wolfgang Betz 67:93bec0baf1de 370 * This parameter must be a uint8_t.
Wolfgang Betz 67:93bec0baf1de 371 * @retval None.
Wolfgang Betz 67:93bec0baf1de 372 */
Wolfgang Betz 67:93bec0baf1de 373 void SpiritQiSetRssiThreshold(uint8_t cRssiThr)
Wolfgang Betz 67:93bec0baf1de 374 {
Wolfgang Betz 67:93bec0baf1de 375 /* Writes the new value on the RSSI_TH register */
Wolfgang Betz 67:93bec0baf1de 376 g_xStatus = SpiritSpiWriteRegisters(RSSI_TH_BASE, 1, &cRssiThr);
Wolfgang Betz 67:93bec0baf1de 377
Wolfgang Betz 67:93bec0baf1de 378 }
Wolfgang Betz 67:93bec0baf1de 379
Wolfgang Betz 67:93bec0baf1de 380
Wolfgang Betz 67:93bec0baf1de 381 /**
Wolfgang Betz 67:93bec0baf1de 382 * @brief Returns the RSSI threshold.
Wolfgang Betz 67:93bec0baf1de 383 * @param None.
Wolfgang Betz 67:93bec0baf1de 384 * @retval uint8_t RSSI threshold.
Wolfgang Betz 67:93bec0baf1de 385 */
Wolfgang Betz 67:93bec0baf1de 386 uint8_t SpiritQiGetRssiThreshold(void)
Wolfgang Betz 67:93bec0baf1de 387 {
Wolfgang Betz 67:93bec0baf1de 388 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 389
Wolfgang Betz 67:93bec0baf1de 390 /* Reads the RSSI_TH register value */
Wolfgang Betz 67:93bec0baf1de 391 g_xStatus = SpiritSpiReadRegisters(RSSI_TH_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 392
Wolfgang Betz 67:93bec0baf1de 393 /* Returns RSSI threshold */
Wolfgang Betz 67:93bec0baf1de 394 return tempRegValue;
Wolfgang Betz 67:93bec0baf1de 395
Wolfgang Betz 67:93bec0baf1de 396 }
Wolfgang Betz 67:93bec0baf1de 397
Wolfgang Betz 67:93bec0baf1de 398
Wolfgang Betz 67:93bec0baf1de 399 /**
Wolfgang Betz 67:93bec0baf1de 400 * @brief Computes the RSSI threshold from its dBm value according to the formula: (RSSI[Dbm] + 130)/0.5
Wolfgang Betz 67:93bec0baf1de 401 * @param nDbmValue RSSI threshold reported in dBm.
Wolfgang Betz 67:93bec0baf1de 402 * This parameter must be a sint16_t.
Wolfgang Betz 67:93bec0baf1de 403 * @retval uint8_t RSSI threshold corresponding to dBm value.
Wolfgang Betz 67:93bec0baf1de 404 */
Wolfgang Betz 67:93bec0baf1de 405 uint8_t SpiritQiComputeRssiThreshold(int nDbmValue)
Wolfgang Betz 67:93bec0baf1de 406 {
Wolfgang Betz 67:93bec0baf1de 407 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 408 s_assert_param(IS_RSSI_THR_DBM(nDbmValue));
Wolfgang Betz 67:93bec0baf1de 409
Wolfgang Betz 67:93bec0baf1de 410 /* Computes the RSSI threshold for register */
Wolfgang Betz 67:93bec0baf1de 411 return 2*(nDbmValue+130);
Wolfgang Betz 67:93bec0baf1de 412
Wolfgang Betz 67:93bec0baf1de 413 }
Wolfgang Betz 67:93bec0baf1de 414
Wolfgang Betz 67:93bec0baf1de 415 /**
Wolfgang Betz 67:93bec0baf1de 416 * @brief Sets the RSSI threshold from its dBm value according to the formula: (RSSI[Dbm] + 130)/0.5.
Wolfgang Betz 67:93bec0baf1de 417 * @param nDbmValue RSSI threshold reported in dBm.
Wolfgang Betz 67:93bec0baf1de 418 * This parameter must be a sint16_t.
Wolfgang Betz 67:93bec0baf1de 419 * @retval None.
Wolfgang Betz 67:93bec0baf1de 420 */
Wolfgang Betz 67:93bec0baf1de 421 void SpiritQiSetRssiThresholddBm(int nDbmValue)
Wolfgang Betz 67:93bec0baf1de 422 {
Wolfgang Betz 67:93bec0baf1de 423 uint8_t tempRegValue=2*(nDbmValue+130);
Wolfgang Betz 67:93bec0baf1de 424
Wolfgang Betz 67:93bec0baf1de 425 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 426 s_assert_param(IS_RSSI_THR_DBM(nDbmValue));
Wolfgang Betz 67:93bec0baf1de 427
Wolfgang Betz 67:93bec0baf1de 428 /* Writes the new value on the RSSI_TH register */
Wolfgang Betz 67:93bec0baf1de 429 g_xStatus = SpiritSpiWriteRegisters(RSSI_TH_BASE, 1, &tempRegValue);
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 * @brief Sets the RSSI filter gain. This parameter sets the bandwidth of a low pass IIR filter (RSSI_FLT register, allowed values 0..15), a
Wolfgang Betz 67:93bec0baf1de 435 * lower values gives a faster settling of the measurements but lower precision. The recommended value for such parameter is 14.
Wolfgang Betz 67:93bec0baf1de 436 * @param xRssiFg RSSI filter gain value.
Wolfgang Betz 67:93bec0baf1de 437 * This parameter can be any value of @ref RssiFilterGain.
Wolfgang Betz 67:93bec0baf1de 438 * @retval None.
Wolfgang Betz 67:93bec0baf1de 439 */
Wolfgang Betz 67:93bec0baf1de 440 void SpiritQiSetRssiFilterGain(RssiFilterGain xRssiFg)
Wolfgang Betz 67:93bec0baf1de 441 {
Wolfgang Betz 67:93bec0baf1de 442 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 443
Wolfgang Betz 67:93bec0baf1de 444 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 445 s_assert_param(IS_RSSI_FILTER_GAIN(xRssiFg));
Wolfgang Betz 67:93bec0baf1de 446
Wolfgang Betz 67:93bec0baf1de 447 /* Reads the RSSI_FLT register */
Wolfgang Betz 67:93bec0baf1de 448 g_xStatus = SpiritSpiReadRegisters(RSSI_FLT_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 449
Wolfgang Betz 67:93bec0baf1de 450 /* Sets the specified filter gain */
Wolfgang Betz 67:93bec0baf1de 451 tempRegValue &= 0x0F;
Wolfgang Betz 67:93bec0baf1de 452 tempRegValue |= ((uint8_t)xRssiFg);
Wolfgang Betz 67:93bec0baf1de 453
Wolfgang Betz 67:93bec0baf1de 454 /* Writes the new value on the RSSI_FLT register */
Wolfgang Betz 67:93bec0baf1de 455 g_xStatus = SpiritSpiWriteRegisters(RSSI_FLT_BASE, 1, &tempRegValue);
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 * @brief Returns the RSSI filter gain.
Wolfgang Betz 67:93bec0baf1de 462 * @param None.
Wolfgang Betz 67:93bec0baf1de 463 * @retval RssiFilterGain RSSI filter gain.
Wolfgang Betz 67:93bec0baf1de 464 */
Wolfgang Betz 67:93bec0baf1de 465 RssiFilterGain SpiritQiGetRssiFilterGain(void)
Wolfgang Betz 67:93bec0baf1de 466 {
Wolfgang Betz 67:93bec0baf1de 467 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 468
Wolfgang Betz 67:93bec0baf1de 469 /* Reads the RSSI_FLT register */
Wolfgang Betz 67:93bec0baf1de 470 g_xStatus = SpiritSpiReadRegisters(RSSI_FLT_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 471
Wolfgang Betz 67:93bec0baf1de 472 /* Rebuild and returns the filter gain value */
Wolfgang Betz 67:93bec0baf1de 473 return (RssiFilterGain)(tempRegValue & 0xF0);
Wolfgang Betz 67:93bec0baf1de 474
Wolfgang Betz 67:93bec0baf1de 475 }
Wolfgang Betz 67:93bec0baf1de 476
Wolfgang Betz 67:93bec0baf1de 477
Wolfgang Betz 67:93bec0baf1de 478 /**
Wolfgang Betz 67:93bec0baf1de 479 * @brief Sets the CS Mode. When static carrier sensing is used (cs_mode = 0), the carrier sense signal is asserted when the measured RSSI is above the
Wolfgang Betz 67:93bec0baf1de 480 * value specified in the RSSI_TH register and is deasserted when the RSSI falls 3 dB below the same threshold.
Wolfgang Betz 67:93bec0baf1de 481 * When dynamic carrier sense is used (cs_mode = 1, 2, 3), the carrier sense signal is asserted if the signal is above the
Wolfgang Betz 67:93bec0baf1de 482 * threshold and a fast power increase of 6, 12 or 18 dB is detected; it is deasserted if a power fall of the same amplitude is
Wolfgang Betz 67:93bec0baf1de 483 * detected.
Wolfgang Betz 67:93bec0baf1de 484 * @param xCsMode CS mode selector.
Wolfgang Betz 67:93bec0baf1de 485 * This parameter can be any value of @ref CSMode.
Wolfgang Betz 67:93bec0baf1de 486 * @retval None.
Wolfgang Betz 67:93bec0baf1de 487 */
Wolfgang Betz 67:93bec0baf1de 488 void SpiritQiSetCsMode(CSMode xCsMode)
Wolfgang Betz 67:93bec0baf1de 489 {
Wolfgang Betz 67:93bec0baf1de 490 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 491
Wolfgang Betz 67:93bec0baf1de 492 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 493 s_assert_param(IS_CS_MODE(xCsMode));
Wolfgang Betz 67:93bec0baf1de 494
Wolfgang Betz 67:93bec0baf1de 495 /* Reads the RSSI_FLT register */
Wolfgang Betz 67:93bec0baf1de 496 g_xStatus = SpiritSpiReadRegisters(RSSI_FLT_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 497
Wolfgang Betz 67:93bec0baf1de 498 /* Sets bit to select the CS mode */
Wolfgang Betz 67:93bec0baf1de 499 tempRegValue &= ~0x0C;
Wolfgang Betz 67:93bec0baf1de 500 tempRegValue |= ((uint8_t)xCsMode);
Wolfgang Betz 67:93bec0baf1de 501
Wolfgang Betz 67:93bec0baf1de 502 /* Writes the new value on the RSSI_FLT register */
Wolfgang Betz 67:93bec0baf1de 503 g_xStatus = SpiritSpiWriteRegisters(RSSI_FLT_BASE, 1, &tempRegValue);
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 * @brief Returns the CS Mode.
Wolfgang Betz 67:93bec0baf1de 510 * @param None.
Wolfgang Betz 67:93bec0baf1de 511 * @retval CSMode CS mode.
Wolfgang Betz 67:93bec0baf1de 512 */
Wolfgang Betz 67:93bec0baf1de 513 CSMode SpiritQiGetCsMode(void)
Wolfgang Betz 67:93bec0baf1de 514 {
Wolfgang Betz 67:93bec0baf1de 515 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 516
Wolfgang Betz 67:93bec0baf1de 517 /* Reads the RSSI_FLT register */
Wolfgang Betz 67:93bec0baf1de 518 g_xStatus = SpiritSpiReadRegisters(RSSI_FLT_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 519
Wolfgang Betz 67:93bec0baf1de 520 /* Rebuild and returns the CS mode value */
Wolfgang Betz 67:93bec0baf1de 521 return (CSMode)(tempRegValue & 0x0C);
Wolfgang Betz 67:93bec0baf1de 522
Wolfgang Betz 67:93bec0baf1de 523 }
Wolfgang Betz 67:93bec0baf1de 524
Wolfgang Betz 67:93bec0baf1de 525 /**
Wolfgang Betz 67:93bec0baf1de 526 * @brief Enables/Disables the CS Timeout Mask. If enabled CS value contributes to timeout disabling.
Wolfgang Betz 67:93bec0baf1de 527 * @param xNewState new state for CS Timeout Mask.
Wolfgang Betz 67:93bec0baf1de 528 * This parameter can be S_ENABLE or S_DISABLE.
Wolfgang Betz 67:93bec0baf1de 529 * @retval None.
Wolfgang Betz 67:93bec0baf1de 530 */
Wolfgang Betz 67:93bec0baf1de 531 void SpiritQiCsTimeoutMask(SpiritFunctionalState xNewState)
Wolfgang Betz 67:93bec0baf1de 532 {
Wolfgang Betz 67:93bec0baf1de 533 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 534
Wolfgang Betz 67:93bec0baf1de 535 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 536 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
Wolfgang Betz 67:93bec0baf1de 537
Wolfgang Betz 67:93bec0baf1de 538 /* Reads the PROTOCOL2 register value */
Wolfgang Betz 67:93bec0baf1de 539 g_xStatus = SpiritSpiReadRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 540
Wolfgang Betz 67:93bec0baf1de 541 /* Enables or disables the CS timeout mask */
Wolfgang Betz 67:93bec0baf1de 542 if(xNewState == S_ENABLE)
Wolfgang Betz 67:93bec0baf1de 543 {
Wolfgang Betz 67:93bec0baf1de 544 tempRegValue |= PROTOCOL2_CS_TIMEOUT_MASK;
Wolfgang Betz 67:93bec0baf1de 545 }
Wolfgang Betz 67:93bec0baf1de 546 else
Wolfgang Betz 67:93bec0baf1de 547 {
Wolfgang Betz 67:93bec0baf1de 548 tempRegValue &= ~PROTOCOL2_CS_TIMEOUT_MASK;
Wolfgang Betz 67:93bec0baf1de 549 }
Wolfgang Betz 67:93bec0baf1de 550
Wolfgang Betz 67:93bec0baf1de 551 /* Writes the new value on the PROTOCOL2 register */
Wolfgang Betz 67:93bec0baf1de 552 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 553
Wolfgang Betz 67:93bec0baf1de 554 }
Wolfgang Betz 67:93bec0baf1de 555
Wolfgang Betz 67:93bec0baf1de 556
Wolfgang Betz 67:93bec0baf1de 557 /**
Wolfgang Betz 67:93bec0baf1de 558 * @brief Enables/Disables the PQI Timeout Mask. If enabled PQI value contributes to timeout disabling.
Wolfgang Betz 67:93bec0baf1de 559 * @param xNewState new state for PQI Timeout Mask.
Wolfgang Betz 67:93bec0baf1de 560 * This parameter can be S_ENABLE or S_DISABLE.
Wolfgang Betz 67:93bec0baf1de 561 * @retval None.
Wolfgang Betz 67:93bec0baf1de 562 */
Wolfgang Betz 67:93bec0baf1de 563 void SpiritQiPqiTimeoutMask(SpiritFunctionalState xNewState)
Wolfgang Betz 67:93bec0baf1de 564 {
Wolfgang Betz 67:93bec0baf1de 565 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 566
Wolfgang Betz 67:93bec0baf1de 567 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 568 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
Wolfgang Betz 67:93bec0baf1de 569
Wolfgang Betz 67:93bec0baf1de 570 /* Reads the PROTOCOL2 register */
Wolfgang Betz 67:93bec0baf1de 571 g_xStatus = SpiritSpiReadRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 572
Wolfgang Betz 67:93bec0baf1de 573 /* Enables or disables the PQI timeout mask */
Wolfgang Betz 67:93bec0baf1de 574 if(xNewState == S_ENABLE)
Wolfgang Betz 67:93bec0baf1de 575 {
Wolfgang Betz 67:93bec0baf1de 576 tempRegValue |= PROTOCOL2_PQI_TIMEOUT_MASK;
Wolfgang Betz 67:93bec0baf1de 577 }
Wolfgang Betz 67:93bec0baf1de 578 else
Wolfgang Betz 67:93bec0baf1de 579 {
Wolfgang Betz 67:93bec0baf1de 580 tempRegValue &= ~PROTOCOL2_PQI_TIMEOUT_MASK;
Wolfgang Betz 67:93bec0baf1de 581 }
Wolfgang Betz 67:93bec0baf1de 582
Wolfgang Betz 67:93bec0baf1de 583 /* Writes the new value on the PROTOCOL2 register */
Wolfgang Betz 67:93bec0baf1de 584 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 585
Wolfgang Betz 67:93bec0baf1de 586 }
Wolfgang Betz 67:93bec0baf1de 587
Wolfgang Betz 67:93bec0baf1de 588
Wolfgang Betz 67:93bec0baf1de 589 /**
Wolfgang Betz 67:93bec0baf1de 590 * @brief Enables/Disables the SQI Timeout Mask. If enabled SQI value contributes to timeout disabling.
Wolfgang Betz 67:93bec0baf1de 591 * @param xNewState new state for SQI Timeout Mask.
Wolfgang Betz 67:93bec0baf1de 592 * This parameter can be S_ENABLE or S_DISABLE.
Wolfgang Betz 67:93bec0baf1de 593 * @retval None.
Wolfgang Betz 67:93bec0baf1de 594 */
Wolfgang Betz 67:93bec0baf1de 595 void SpiritQiSqiTimeoutMask(SpiritFunctionalState xNewState)
Wolfgang Betz 67:93bec0baf1de 596 {
Wolfgang Betz 67:93bec0baf1de 597 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 598
Wolfgang Betz 67:93bec0baf1de 599 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 600 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
Wolfgang Betz 67:93bec0baf1de 601
Wolfgang Betz 67:93bec0baf1de 602 /* Reads the PROTOCOL2 register */
Wolfgang Betz 67:93bec0baf1de 603 g_xStatus = SpiritSpiReadRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 604
Wolfgang Betz 67:93bec0baf1de 605 /* Enables or disables the SQI timeout mask */
Wolfgang Betz 67:93bec0baf1de 606 if(xNewState == S_ENABLE)
Wolfgang Betz 67:93bec0baf1de 607 {
Wolfgang Betz 67:93bec0baf1de 608 tempRegValue |= PROTOCOL2_SQI_TIMEOUT_MASK;
Wolfgang Betz 67:93bec0baf1de 609 }
Wolfgang Betz 67:93bec0baf1de 610 else
Wolfgang Betz 67:93bec0baf1de 611 {
Wolfgang Betz 67:93bec0baf1de 612 tempRegValue &= ~PROTOCOL2_SQI_TIMEOUT_MASK;
Wolfgang Betz 67:93bec0baf1de 613 }
Wolfgang Betz 67:93bec0baf1de 614
Wolfgang Betz 67:93bec0baf1de 615 /* Writes the new value on the PROTOCOL2 register */
Wolfgang Betz 67:93bec0baf1de 616 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
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 /**
Wolfgang Betz 67:93bec0baf1de 631 *@}
Wolfgang Betz 67:93bec0baf1de 632 */
Wolfgang Betz 67:93bec0baf1de 633
Wolfgang Betz 67:93bec0baf1de 634
Wolfgang Betz 67:93bec0baf1de 635
Wolfgang Betz 67:93bec0baf1de 636 /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/