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:
Tue Nov 22 11:40:10 2016 +0100
Revision:
34:edda6a7238ec
Child:
67:93bec0baf1de
Perform re-naming

Who changed what in which revision?

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