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_LinearFifo.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 Fifo.
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_LinearFifo.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 * @addtogroup SPIRIT_Libraries
Wolfgang Betz 34:edda6a7238ec 46 * @{
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 * @addtogroup SPIRIT_LinearFifo
Wolfgang Betz 34:edda6a7238ec 52 * @{
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 * @defgroup LinearFifo_Private_TypesDefinitions Linear FIFO Private Types Definitions
Wolfgang Betz 34:edda6a7238ec 58 * @{
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 * @defgroup LinearFifo_Private_Defines Linear FIFO Private Defines
Wolfgang Betz 34:edda6a7238ec 68 * @{
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 * @defgroup LinearFifo_Private_Macros Linear FIFO Private Macros
Wolfgang Betz 34:edda6a7238ec 78 * @{
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 * @defgroup LinearFifo_Private_Variables Linear FIFO Private Variables
Wolfgang Betz 34:edda6a7238ec 88 * @{
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 * @defgroup LinearFifo_Private_FunctionPrototypes Linear FIFO Private Function Prototypes
Wolfgang Betz 34:edda6a7238ec 98 * @{
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 * @defgroup LinearFifo_Private_Functions Linear FIFO Private Functions
Wolfgang Betz 34:edda6a7238ec 108 * @{
Wolfgang Betz 34:edda6a7238ec 109 */
Wolfgang Betz 34:edda6a7238ec 110
Wolfgang Betz 34:edda6a7238ec 111 /**
Wolfgang Betz 34:edda6a7238ec 112 * @brief Returns the number of elements in the Rx FIFO.
Wolfgang Betz 34:edda6a7238ec 113 * @param None.
Wolfgang Betz 34:edda6a7238ec 114 * @retval uint8_t Number of elements in the Rx FIFO.
Wolfgang Betz 34:edda6a7238ec 115 */
Wolfgang Betz 34:edda6a7238ec 116 uint8_t SpiritLinearFifoReadNumElementsRxFifo(void)
Wolfgang Betz 34:edda6a7238ec 117 {
Wolfgang Betz 34:edda6a7238ec 118 uint8_t tempRegValue;
Wolfgang Betz 34:edda6a7238ec 119
Wolfgang Betz 34:edda6a7238ec 120 /* Reads the register value */
Wolfgang Betz 34:edda6a7238ec 121 g_xStatus = SpiritSpiReadRegisters(LINEAR_FIFO_STATUS0_BASE, 1, &tempRegValue);
Wolfgang Betz 34:edda6a7238ec 122
Wolfgang Betz 34:edda6a7238ec 123 /* Build and return value */
Wolfgang Betz 34:edda6a7238ec 124 return (tempRegValue & 0x7F);
Wolfgang Betz 34:edda6a7238ec 125
Wolfgang Betz 34:edda6a7238ec 126 }
Wolfgang Betz 34:edda6a7238ec 127
Wolfgang Betz 34:edda6a7238ec 128
Wolfgang Betz 34:edda6a7238ec 129 /**
Wolfgang Betz 34:edda6a7238ec 130 * @brief Returns the number of elements in the Tx FIFO.
Wolfgang Betz 34:edda6a7238ec 131 * @param None.
Wolfgang Betz 34:edda6a7238ec 132 * @retval uint8_t Number of elements in the Tx FIFO.
Wolfgang Betz 34:edda6a7238ec 133 */
Wolfgang Betz 34:edda6a7238ec 134 uint8_t SpiritLinearFifoReadNumElementsTxFifo(void)
Wolfgang Betz 34:edda6a7238ec 135 {
Wolfgang Betz 34:edda6a7238ec 136 uint8_t tempRegValue;
Wolfgang Betz 34:edda6a7238ec 137
Wolfgang Betz 34:edda6a7238ec 138 /* Reads the number of elements in TX FIFO and return the value */
Wolfgang Betz 34:edda6a7238ec 139 g_xStatus = SpiritSpiReadRegisters(LINEAR_FIFO_STATUS1_BASE, 1, &tempRegValue);
Wolfgang Betz 34:edda6a7238ec 140
Wolfgang Betz 34:edda6a7238ec 141 /* Build and return value */
Wolfgang Betz 34:edda6a7238ec 142 return (tempRegValue & 0x7F);
Wolfgang Betz 34:edda6a7238ec 143 }
Wolfgang Betz 34:edda6a7238ec 144
Wolfgang Betz 34:edda6a7238ec 145
Wolfgang Betz 34:edda6a7238ec 146 /**
Wolfgang Betz 34:edda6a7238ec 147 * @brief Sets the almost full threshold for the Rx FIFO. When the number of elements in RX FIFO reaches this value an interrupt can be generated to the MCU.
Wolfgang Betz 34:edda6a7238ec 148 * @note The almost full threshold is encountered from the top of the FIFO. For example, if it is set to 7 the almost
Wolfgang Betz 34:edda6a7238ec 149 * full FIFO irq will be raised when the number of elements is equals to 96-7 = 89.
Wolfgang Betz 34:edda6a7238ec 150 * @param cThrRxFifo almost full threshold.
Wolfgang Betz 34:edda6a7238ec 151 * This parameter is an uint8_t.
Wolfgang Betz 34:edda6a7238ec 152 * @retval None.
Wolfgang Betz 34:edda6a7238ec 153 */
Wolfgang Betz 34:edda6a7238ec 154 void SpiritLinearFifoSetAlmostFullThresholdRx(uint8_t cThrRxFifo)
Wolfgang Betz 34:edda6a7238ec 155 {
Wolfgang Betz 34:edda6a7238ec 156 uint8_t tempRegValue;
Wolfgang Betz 34:edda6a7238ec 157
Wolfgang Betz 34:edda6a7238ec 158 /* Check the parameters */
Wolfgang Betz 34:edda6a7238ec 159 s_assert_param(IS_FIFO_THR(cThrRxFifo));
Wolfgang Betz 34:edda6a7238ec 160
Wolfgang Betz 34:edda6a7238ec 161 /* Build the register value */
Wolfgang Betz 34:edda6a7238ec 162 tempRegValue = cThrRxFifo & 0x7F;
Wolfgang Betz 34:edda6a7238ec 163
Wolfgang Betz 34:edda6a7238ec 164 /* Writes the Almost Full threshold for RX in the corresponding register */
Wolfgang Betz 34:edda6a7238ec 165 g_xStatus = SpiritSpiWriteRegisters(FIFO_CONFIG3_RXAFTHR_BASE, 1, &tempRegValue);
Wolfgang Betz 34:edda6a7238ec 166
Wolfgang Betz 34:edda6a7238ec 167 }
Wolfgang Betz 34:edda6a7238ec 168
Wolfgang Betz 34:edda6a7238ec 169
Wolfgang Betz 34:edda6a7238ec 170 /**
Wolfgang Betz 34:edda6a7238ec 171 * @brief Returns the almost full threshold for RX FIFO.
Wolfgang Betz 34:edda6a7238ec 172 * @note The almost full threshold is encountered from the top of the FIFO. For example, if it is 7 the almost
Wolfgang Betz 34:edda6a7238ec 173 * full FIFO irq will be raised when the number of elements is equals to 96-7 = 89.
Wolfgang Betz 34:edda6a7238ec 174 * @param None.
Wolfgang Betz 34:edda6a7238ec 175 * @retval uint8_t Almost full threshold for Rx FIFO.
Wolfgang Betz 34:edda6a7238ec 176 */
Wolfgang Betz 34:edda6a7238ec 177 uint8_t SpiritLinearFifoGetAlmostFullThresholdRx(void)
Wolfgang Betz 34:edda6a7238ec 178 {
Wolfgang Betz 34:edda6a7238ec 179 uint8_t tempRegValue;
Wolfgang Betz 34:edda6a7238ec 180
Wolfgang Betz 34:edda6a7238ec 181 /* Reads the almost full threshold for RX FIFO and return the value */
Wolfgang Betz 34:edda6a7238ec 182 g_xStatus = SpiritSpiReadRegisters(FIFO_CONFIG3_RXAFTHR_BASE, 1, &tempRegValue);
Wolfgang Betz 34:edda6a7238ec 183
Wolfgang Betz 34:edda6a7238ec 184 /* Build and return value */
Wolfgang Betz 34:edda6a7238ec 185 return (tempRegValue & 0x7F);
Wolfgang Betz 34:edda6a7238ec 186
Wolfgang Betz 34:edda6a7238ec 187 }
Wolfgang Betz 34:edda6a7238ec 188
Wolfgang Betz 34:edda6a7238ec 189
Wolfgang Betz 34:edda6a7238ec 190 /**
Wolfgang Betz 34:edda6a7238ec 191 * @brief Sets the almost empty threshold for the Rx FIFO. When the number of elements in RX FIFO reaches this value an interrupt can be generated to the MCU.
Wolfgang Betz 34:edda6a7238ec 192 * @param cThrRxFifo almost empty threshold.
Wolfgang Betz 34:edda6a7238ec 193 * This parameter is an uint8_t.
Wolfgang Betz 34:edda6a7238ec 194 * @retval None.
Wolfgang Betz 34:edda6a7238ec 195 */
Wolfgang Betz 34:edda6a7238ec 196 void SpiritLinearFifoSetAlmostEmptyThresholdRx(uint8_t cThrRxFifo)
Wolfgang Betz 34:edda6a7238ec 197 {
Wolfgang Betz 34:edda6a7238ec 198 uint8_t tempRegValue;
Wolfgang Betz 34:edda6a7238ec 199
Wolfgang Betz 34:edda6a7238ec 200 /* Check the parameters */
Wolfgang Betz 34:edda6a7238ec 201 s_assert_param(IS_FIFO_THR(cThrRxFifo));
Wolfgang Betz 34:edda6a7238ec 202
Wolfgang Betz 34:edda6a7238ec 203 /* Build the register value */
Wolfgang Betz 34:edda6a7238ec 204 tempRegValue = cThrRxFifo & 0x7F;
Wolfgang Betz 34:edda6a7238ec 205
Wolfgang Betz 34:edda6a7238ec 206 /* Writes the Almost Empty threshold for RX in the corresponding register */
Wolfgang Betz 34:edda6a7238ec 207 g_xStatus = SpiritSpiWriteRegisters(FIFO_CONFIG2_RXAETHR_BASE, 1, &tempRegValue);
Wolfgang Betz 34:edda6a7238ec 208
Wolfgang Betz 34:edda6a7238ec 209 }
Wolfgang Betz 34:edda6a7238ec 210
Wolfgang Betz 34:edda6a7238ec 211
Wolfgang Betz 34:edda6a7238ec 212 /**
Wolfgang Betz 34:edda6a7238ec 213 * @brief Returns the almost empty threshold for Rx FIFO.
Wolfgang Betz 34:edda6a7238ec 214 * @param None.
Wolfgang Betz 34:edda6a7238ec 215 * @retval uint8_t Almost empty threshold for Rx FIFO.
Wolfgang Betz 34:edda6a7238ec 216 */
Wolfgang Betz 34:edda6a7238ec 217 uint8_t SpiritLinearFifoGetAlmostEmptyThresholdRx(void)
Wolfgang Betz 34:edda6a7238ec 218 {
Wolfgang Betz 34:edda6a7238ec 219 uint8_t tempRegValue;
Wolfgang Betz 34:edda6a7238ec 220
Wolfgang Betz 34:edda6a7238ec 221 /* Reads the almost empty threshold for RX FIFO and returns the value */
Wolfgang Betz 34:edda6a7238ec 222 g_xStatus = SpiritSpiReadRegisters(FIFO_CONFIG2_RXAETHR_BASE, 1, &tempRegValue);
Wolfgang Betz 34:edda6a7238ec 223
Wolfgang Betz 34:edda6a7238ec 224 /* Build and return value */
Wolfgang Betz 34:edda6a7238ec 225 return (tempRegValue & 0x7F);
Wolfgang Betz 34:edda6a7238ec 226
Wolfgang Betz 34:edda6a7238ec 227 }
Wolfgang Betz 34:edda6a7238ec 228
Wolfgang Betz 34:edda6a7238ec 229
Wolfgang Betz 34:edda6a7238ec 230 /**
Wolfgang Betz 34:edda6a7238ec 231 * @brief Sets the almost full threshold for the Tx FIFO. When the number of elements in TX FIFO reaches this value an interrupt can be generated to the MCU.
Wolfgang Betz 34:edda6a7238ec 232 * @note The almost full threshold is encountered from the top of the FIFO. For example, if it is set to 7 the almost
Wolfgang Betz 34:edda6a7238ec 233 * full FIFO irq will be raised when the number of elements is equals to 96-7 = 89.
Wolfgang Betz 34:edda6a7238ec 234 * @param cThrTxFifo almost full threshold.
Wolfgang Betz 34:edda6a7238ec 235 * This parameter is an uint8_t.
Wolfgang Betz 34:edda6a7238ec 236 * @retval None.
Wolfgang Betz 34:edda6a7238ec 237 */
Wolfgang Betz 34:edda6a7238ec 238 void SpiritLinearFifoSetAlmostFullThresholdTx(uint8_t cThrTxFifo)
Wolfgang Betz 34:edda6a7238ec 239 {
Wolfgang Betz 34:edda6a7238ec 240 uint8_t tempRegValue;
Wolfgang Betz 34:edda6a7238ec 241
Wolfgang Betz 34:edda6a7238ec 242 /* Check the parameters */
Wolfgang Betz 34:edda6a7238ec 243 s_assert_param(IS_FIFO_THR(cThrTxFifo));
Wolfgang Betz 34:edda6a7238ec 244
Wolfgang Betz 34:edda6a7238ec 245 /* Reads the register value */
Wolfgang Betz 34:edda6a7238ec 246 g_xStatus = SpiritSpiReadRegisters(FIFO_CONFIG1_TXAFTHR_BASE, 1, &tempRegValue);
Wolfgang Betz 34:edda6a7238ec 247
Wolfgang Betz 34:edda6a7238ec 248 /* Build the register value */
Wolfgang Betz 34:edda6a7238ec 249 tempRegValue &= 0x80;
Wolfgang Betz 34:edda6a7238ec 250 tempRegValue |= cThrTxFifo;
Wolfgang Betz 34:edda6a7238ec 251
Wolfgang Betz 34:edda6a7238ec 252 /* Writes the Almost Full threshold for Tx in the corresponding register */
Wolfgang Betz 34:edda6a7238ec 253 g_xStatus = SpiritSpiWriteRegisters(FIFO_CONFIG1_TXAFTHR_BASE, 1, &tempRegValue);
Wolfgang Betz 34:edda6a7238ec 254
Wolfgang Betz 34:edda6a7238ec 255 }
Wolfgang Betz 34:edda6a7238ec 256
Wolfgang Betz 34:edda6a7238ec 257
Wolfgang Betz 34:edda6a7238ec 258 /**
Wolfgang Betz 34:edda6a7238ec 259 * @brief Returns the almost full threshold for Tx FIFO.
Wolfgang Betz 34:edda6a7238ec 260 * @note The almost full threshold is encountered from the top of the FIFO. For example, if it is set to 7 the almost
Wolfgang Betz 34:edda6a7238ec 261 * full FIFO irq will be raised when the number of elements is equals to 96-7 = 89.
Wolfgang Betz 34:edda6a7238ec 262 * @param None.
Wolfgang Betz 34:edda6a7238ec 263 * @retval uint8_t Almost full threshold for Tx FIFO.
Wolfgang Betz 34:edda6a7238ec 264 */
Wolfgang Betz 34:edda6a7238ec 265 uint8_t SpiritLinearFifoGetAlmostFullThresholdTx(void)
Wolfgang Betz 34:edda6a7238ec 266 {
Wolfgang Betz 34:edda6a7238ec 267 uint8_t tempRegValue;
Wolfgang Betz 34:edda6a7238ec 268
Wolfgang Betz 34:edda6a7238ec 269 /* Reads the almost full threshold for Tx FIFO and returns the value */
Wolfgang Betz 34:edda6a7238ec 270 g_xStatus = SpiritSpiReadRegisters(FIFO_CONFIG1_TXAFTHR_BASE, 1, &tempRegValue);
Wolfgang Betz 34:edda6a7238ec 271
Wolfgang Betz 34:edda6a7238ec 272 /* Build and returns value */
Wolfgang Betz 34:edda6a7238ec 273 return (tempRegValue & 0x7F);
Wolfgang Betz 34:edda6a7238ec 274
Wolfgang Betz 34:edda6a7238ec 275 }
Wolfgang Betz 34:edda6a7238ec 276
Wolfgang Betz 34:edda6a7238ec 277
Wolfgang Betz 34:edda6a7238ec 278 /**
Wolfgang Betz 34:edda6a7238ec 279 * @brief Sets the almost empty threshold for the Tx FIFO. When the number of elements in Tx FIFO reaches this value an interrupt can can be generated to the MCU.
Wolfgang Betz 34:edda6a7238ec 280 * @param cThrTxFifo: almost empty threshold.
Wolfgang Betz 34:edda6a7238ec 281 * This parameter is an uint8_t.
Wolfgang Betz 34:edda6a7238ec 282 * @retval None.
Wolfgang Betz 34:edda6a7238ec 283 */
Wolfgang Betz 34:edda6a7238ec 284 void SpiritLinearFifoSetAlmostEmptyThresholdTx(uint8_t cThrTxFifo)
Wolfgang Betz 34:edda6a7238ec 285 {
Wolfgang Betz 34:edda6a7238ec 286 uint8_t tempRegValue;
Wolfgang Betz 34:edda6a7238ec 287
Wolfgang Betz 34:edda6a7238ec 288 /* Check the parameters */
Wolfgang Betz 34:edda6a7238ec 289 s_assert_param(IS_FIFO_THR(cThrTxFifo));
Wolfgang Betz 34:edda6a7238ec 290
Wolfgang Betz 34:edda6a7238ec 291 /* Reads the register value */
Wolfgang Betz 34:edda6a7238ec 292 g_xStatus = SpiritSpiReadRegisters(FIFO_CONFIG0_TXAETHR_BASE, 1, &tempRegValue);
Wolfgang Betz 34:edda6a7238ec 293
Wolfgang Betz 34:edda6a7238ec 294 /* Build the register value */
Wolfgang Betz 34:edda6a7238ec 295 tempRegValue &= 0x80;
Wolfgang Betz 34:edda6a7238ec 296 tempRegValue |= cThrTxFifo;
Wolfgang Betz 34:edda6a7238ec 297
Wolfgang Betz 34:edda6a7238ec 298 /* Writes the Almost Empty threshold for Tx in the corresponding register */
Wolfgang Betz 34:edda6a7238ec 299 g_xStatus = SpiritSpiWriteRegisters(FIFO_CONFIG0_TXAETHR_BASE, 1, &tempRegValue);
Wolfgang Betz 34:edda6a7238ec 300
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 * @brief Returns the almost empty threshold for Tx FIFO.
Wolfgang Betz 34:edda6a7238ec 306 * @param None.
Wolfgang Betz 34:edda6a7238ec 307 * @retval uint8_t Almost empty threshold for Tx FIFO.
Wolfgang Betz 34:edda6a7238ec 308 */
Wolfgang Betz 34:edda6a7238ec 309 uint8_t SpiritLinearFifoGetAlmostEmptyThresholdTx(void)
Wolfgang Betz 34:edda6a7238ec 310 {
Wolfgang Betz 34:edda6a7238ec 311 uint8_t tempRegValue;
Wolfgang Betz 34:edda6a7238ec 312
Wolfgang Betz 34:edda6a7238ec 313 /* Reads the almost empty threshold for TX FIFO and returns the value */
Wolfgang Betz 34:edda6a7238ec 314 g_xStatus = SpiritSpiReadRegisters(FIFO_CONFIG0_TXAETHR_BASE, 1, &tempRegValue);
Wolfgang Betz 34:edda6a7238ec 315
Wolfgang Betz 34:edda6a7238ec 316 /* Build and return value */
Wolfgang Betz 34:edda6a7238ec 317 return (tempRegValue & 0x7F);
Wolfgang Betz 34:edda6a7238ec 318
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 */
Wolfgang Betz 34:edda6a7238ec 325
Wolfgang Betz 34:edda6a7238ec 326 /**
Wolfgang Betz 34:edda6a7238ec 327 *@}
Wolfgang Betz 34:edda6a7238ec 328 */
Wolfgang Betz 34:edda6a7238ec 329
Wolfgang Betz 34:edda6a7238ec 330
Wolfgang Betz 34:edda6a7238ec 331 /**
Wolfgang Betz 34:edda6a7238ec 332 *@}
Wolfgang Betz 34:edda6a7238ec 333 */
Wolfgang Betz 34:edda6a7238ec 334
Wolfgang Betz 34:edda6a7238ec 335
Wolfgang Betz 34:edda6a7238ec 336
Wolfgang Betz 34:edda6a7238ec 337 /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/