HelloWorld_IDS01A4 mbed application for Spirit1 P2P demo.

Dependencies:   mbed

Fork of HelloWorld_IDS01A5_Program by rosarium pila

mbed 2.0 (a.k.a classic) HelloWorld example for Spirit1 to transfer data from one node to another.
To send the predefined data packet from the sender to the receiver, user needs to press User Button on the board. The LED on the receiver expansion board will toggle on reception of data successfully.
Data packets sent and received can be seen on USB serial terminal.

EVALUATION BOARDS RF FREQUENCY DESCRIPTION :
X-NUCLEO-IDS01A4 868 MHz 868 MHz RF expansion board based on SPIRIT1

Committer:
rosarium
Date:
Thu May 25 16:38:55 2017 +0000
Revision:
0:2ddc0583bcec
First draft version of HelloWorld_IDS01A5

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rosarium 0:2ddc0583bcec 1 /**
rosarium 0:2ddc0583bcec 2 ******************************************************************************
rosarium 0:2ddc0583bcec 3 * @file SPIRIT_Csma.c
rosarium 0:2ddc0583bcec 4 * @author VMA division - AMS
rosarium 0:2ddc0583bcec 5 * @version 3.2.2
rosarium 0:2ddc0583bcec 6 * @date 08-July-2015
rosarium 0:2ddc0583bcec 7 * @brief Configuration and management of SPIRIT CSMA.
rosarium 0:2ddc0583bcec 8 * @details
rosarium 0:2ddc0583bcec 9 * @attention
rosarium 0:2ddc0583bcec 10 *
rosarium 0:2ddc0583bcec 11 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
rosarium 0:2ddc0583bcec 12 *
rosarium 0:2ddc0583bcec 13 * Redistribution and use in source and binary forms, with or without modification,
rosarium 0:2ddc0583bcec 14 * are permitted provided that the following conditions are met:
rosarium 0:2ddc0583bcec 15 * 1. Redistributions of source code must retain the above copyright notice,
rosarium 0:2ddc0583bcec 16 * this list of conditions and the following disclaimer.
rosarium 0:2ddc0583bcec 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
rosarium 0:2ddc0583bcec 18 * this list of conditions and the following disclaimer in the documentation
rosarium 0:2ddc0583bcec 19 * and/or other materials provided with the distribution.
rosarium 0:2ddc0583bcec 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
rosarium 0:2ddc0583bcec 21 * may be used to endorse or promote products derived from this software
rosarium 0:2ddc0583bcec 22 * without specific prior written permission.
rosarium 0:2ddc0583bcec 23 *
rosarium 0:2ddc0583bcec 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
rosarium 0:2ddc0583bcec 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
rosarium 0:2ddc0583bcec 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
rosarium 0:2ddc0583bcec 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
rosarium 0:2ddc0583bcec 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
rosarium 0:2ddc0583bcec 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
rosarium 0:2ddc0583bcec 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
rosarium 0:2ddc0583bcec 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
rosarium 0:2ddc0583bcec 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
rosarium 0:2ddc0583bcec 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
rosarium 0:2ddc0583bcec 34 *
rosarium 0:2ddc0583bcec 35 ******************************************************************************
rosarium 0:2ddc0583bcec 36 */
rosarium 0:2ddc0583bcec 37
rosarium 0:2ddc0583bcec 38 /* Includes ------------------------------------------------------------------*/
rosarium 0:2ddc0583bcec 39 #include "SPIRIT_Csma.h"
rosarium 0:2ddc0583bcec 40 #include "MCU_Interface.h"
rosarium 0:2ddc0583bcec 41
rosarium 0:2ddc0583bcec 42
rosarium 0:2ddc0583bcec 43 /**
rosarium 0:2ddc0583bcec 44 * @addtogroup SPIRIT_Libraries
rosarium 0:2ddc0583bcec 45 * @{
rosarium 0:2ddc0583bcec 46 */
rosarium 0:2ddc0583bcec 47
rosarium 0:2ddc0583bcec 48
rosarium 0:2ddc0583bcec 49 /**
rosarium 0:2ddc0583bcec 50 * @addtogroup SPIRIT_Csma
rosarium 0:2ddc0583bcec 51 * @{
rosarium 0:2ddc0583bcec 52 */
rosarium 0:2ddc0583bcec 53
rosarium 0:2ddc0583bcec 54
rosarium 0:2ddc0583bcec 55 /**
rosarium 0:2ddc0583bcec 56 * @defgroup Csma_Private_TypesDefinitions CSMA Private TypesDefinitions
rosarium 0:2ddc0583bcec 57 * @{
rosarium 0:2ddc0583bcec 58 */
rosarium 0:2ddc0583bcec 59
rosarium 0:2ddc0583bcec 60
rosarium 0:2ddc0583bcec 61 /**
rosarium 0:2ddc0583bcec 62 *@}
rosarium 0:2ddc0583bcec 63 */
rosarium 0:2ddc0583bcec 64
rosarium 0:2ddc0583bcec 65
rosarium 0:2ddc0583bcec 66 /**
rosarium 0:2ddc0583bcec 67 * @defgroup Csma_Private_Defines CSMA Private Defines
rosarium 0:2ddc0583bcec 68 * @{
rosarium 0:2ddc0583bcec 69 */
rosarium 0:2ddc0583bcec 70
rosarium 0:2ddc0583bcec 71 /**
rosarium 0:2ddc0583bcec 72 *@}
rosarium 0:2ddc0583bcec 73 */
rosarium 0:2ddc0583bcec 74
rosarium 0:2ddc0583bcec 75
rosarium 0:2ddc0583bcec 76 /**
rosarium 0:2ddc0583bcec 77 * @defgroup Csma_Private_Macros CSMA Private Macros
rosarium 0:2ddc0583bcec 78 * @{
rosarium 0:2ddc0583bcec 79 */
rosarium 0:2ddc0583bcec 80
rosarium 0:2ddc0583bcec 81 /**
rosarium 0:2ddc0583bcec 82 *@}
rosarium 0:2ddc0583bcec 83 */
rosarium 0:2ddc0583bcec 84
rosarium 0:2ddc0583bcec 85
rosarium 0:2ddc0583bcec 86 /**
rosarium 0:2ddc0583bcec 87 * @defgroup Csma_Private_Variables CSMA Private Variables
rosarium 0:2ddc0583bcec 88 * @{
rosarium 0:2ddc0583bcec 89 */
rosarium 0:2ddc0583bcec 90
rosarium 0:2ddc0583bcec 91 /**
rosarium 0:2ddc0583bcec 92 *@}
rosarium 0:2ddc0583bcec 93 */
rosarium 0:2ddc0583bcec 94
rosarium 0:2ddc0583bcec 95
rosarium 0:2ddc0583bcec 96
rosarium 0:2ddc0583bcec 97 /**
rosarium 0:2ddc0583bcec 98 * @defgroup Csma_Private_FunctionPrototypes CSMA Private FunctionPrototypes
rosarium 0:2ddc0583bcec 99 * @{
rosarium 0:2ddc0583bcec 100 */
rosarium 0:2ddc0583bcec 101
rosarium 0:2ddc0583bcec 102 /**
rosarium 0:2ddc0583bcec 103 *@}
rosarium 0:2ddc0583bcec 104 */
rosarium 0:2ddc0583bcec 105
rosarium 0:2ddc0583bcec 106
rosarium 0:2ddc0583bcec 107 /**
rosarium 0:2ddc0583bcec 108 * @defgroup Csma_Private_Functions CSMA Private Functions
rosarium 0:2ddc0583bcec 109 * @{
rosarium 0:2ddc0583bcec 110 */
rosarium 0:2ddc0583bcec 111
rosarium 0:2ddc0583bcec 112
rosarium 0:2ddc0583bcec 113 /**
rosarium 0:2ddc0583bcec 114 * @brief Initializes the SPIRIT CSMA according to the specified parameters in the CsmaInit.
rosarium 0:2ddc0583bcec 115 * @param pxCsmaInit Csma init structure.
rosarium 0:2ddc0583bcec 116 * This parameter is a pointer to @ref CsmaInit.
rosarium 0:2ddc0583bcec 117 * @retval None.
rosarium 0:2ddc0583bcec 118 */
rosarium 0:2ddc0583bcec 119 void SpiritCsmaInit(CsmaInit* pxCsmaInit)
rosarium 0:2ddc0583bcec 120 {
rosarium 0:2ddc0583bcec 121 uint8_t tempRegValue[5];
rosarium 0:2ddc0583bcec 122
rosarium 0:2ddc0583bcec 123 /* Check the parameters */
rosarium 0:2ddc0583bcec 124 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxCsmaInit->xCsmaPersistentMode));
rosarium 0:2ddc0583bcec 125 s_assert_param(IS_CCA_PERIOD(pxCsmaInit->xMultiplierTbit));
rosarium 0:2ddc0583bcec 126 s_assert_param(IS_CSMA_LENGTH(pxCsmaInit->xCcaLength));
rosarium 0:2ddc0583bcec 127 s_assert_param(IS_BU_COUNTER_SEED(pxCsmaInit->nBuCounterSeed));
rosarium 0:2ddc0583bcec 128 s_assert_param(IS_BU_PRESCALER(pxCsmaInit->cBuPrescaler));
rosarium 0:2ddc0583bcec 129 s_assert_param(IS_CMAX_NB(pxCsmaInit->cMaxNb));
rosarium 0:2ddc0583bcec 130
rosarium 0:2ddc0583bcec 131 /* CSMA BU counter seed (MSB) config */
rosarium 0:2ddc0583bcec 132 tempRegValue[0] = (uint8_t)(pxCsmaInit->nBuCounterSeed >> 8);
rosarium 0:2ddc0583bcec 133
rosarium 0:2ddc0583bcec 134 /* CSMA BU counter seed (LSB) config */
rosarium 0:2ddc0583bcec 135 tempRegValue[1] = (uint8_t) pxCsmaInit->nBuCounterSeed;
rosarium 0:2ddc0583bcec 136
rosarium 0:2ddc0583bcec 137 /* CSMA BU prescaler config and CCA period config */
rosarium 0:2ddc0583bcec 138 tempRegValue[2] = (pxCsmaInit->cBuPrescaler << 2) | pxCsmaInit->xMultiplierTbit;
rosarium 0:2ddc0583bcec 139
rosarium 0:2ddc0583bcec 140 /* CSMA CCA length config and max number of back-off */
rosarium 0:2ddc0583bcec 141 tempRegValue[3] = (pxCsmaInit->xCcaLength | pxCsmaInit->cMaxNb);
rosarium 0:2ddc0583bcec 142
rosarium 0:2ddc0583bcec 143 /* Reads the PROTOCOL1_BASE register value, to write the SEED_RELOAD and CSMA_PERS_ON fields */
rosarium 0:2ddc0583bcec 144 g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue[4]);
rosarium 0:2ddc0583bcec 145
rosarium 0:2ddc0583bcec 146 /* Writes the new value for persistent mode */
rosarium 0:2ddc0583bcec 147 if(pxCsmaInit->xCsmaPersistentMode==S_ENABLE)
rosarium 0:2ddc0583bcec 148 {
rosarium 0:2ddc0583bcec 149 tempRegValue[4] |= PROTOCOL1_CSMA_PERS_ON_MASK;
rosarium 0:2ddc0583bcec 150 }
rosarium 0:2ddc0583bcec 151 else
rosarium 0:2ddc0583bcec 152 {
rosarium 0:2ddc0583bcec 153 tempRegValue[4] &= ~PROTOCOL1_CSMA_PERS_ON_MASK;
rosarium 0:2ddc0583bcec 154 }
rosarium 0:2ddc0583bcec 155
rosarium 0:2ddc0583bcec 156 /* Writes PROTOCOL1_BASE register */
rosarium 0:2ddc0583bcec 157 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 1, &tempRegValue[4]);
rosarium 0:2ddc0583bcec 158
rosarium 0:2ddc0583bcec 159 /* Writes CSMA_CONFIGx_BASE registers */
rosarium 0:2ddc0583bcec 160 g_xStatus = SpiritSpiWriteRegisters(CSMA_CONFIG3_BASE, 4, tempRegValue);
rosarium 0:2ddc0583bcec 161
rosarium 0:2ddc0583bcec 162 }
rosarium 0:2ddc0583bcec 163
rosarium 0:2ddc0583bcec 164
rosarium 0:2ddc0583bcec 165 /**
rosarium 0:2ddc0583bcec 166 * @brief Returns the fitted structure CsmaInit starting from the registers values.
rosarium 0:2ddc0583bcec 167 * @param pxCsmaInit Csma structure to be fitted.
rosarium 0:2ddc0583bcec 168 * This parameter is a pointer to @ref CsmaInit.
rosarium 0:2ddc0583bcec 169 * @retval None.
rosarium 0:2ddc0583bcec 170 */
rosarium 0:2ddc0583bcec 171 void SpiritCsmaGetInfo(CsmaInit* pxCsmaInit)
rosarium 0:2ddc0583bcec 172 {
rosarium 0:2ddc0583bcec 173 uint8_t tempRegValue[5];
rosarium 0:2ddc0583bcec 174
rosarium 0:2ddc0583bcec 175 /* Reads PROTOCOL1_BASE register */
rosarium 0:2ddc0583bcec 176 g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue[4]);
rosarium 0:2ddc0583bcec 177
rosarium 0:2ddc0583bcec 178 /* Reads CSMA_CONFIGx_BASE registers */
rosarium 0:2ddc0583bcec 179 g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG3_BASE, 4, tempRegValue);
rosarium 0:2ddc0583bcec 180
rosarium 0:2ddc0583bcec 181 /* Reads the bu counter seed */
rosarium 0:2ddc0583bcec 182 pxCsmaInit->nBuCounterSeed = (uint16_t)tempRegValue[1] | ((uint16_t)(tempRegValue[0] << 8));
rosarium 0:2ddc0583bcec 183
rosarium 0:2ddc0583bcec 184 /* Reads the bu prescaler */
rosarium 0:2ddc0583bcec 185 pxCsmaInit->cBuPrescaler = tempRegValue[2]>>2;
rosarium 0:2ddc0583bcec 186
rosarium 0:2ddc0583bcec 187 /* Reads the Cca period */
rosarium 0:2ddc0583bcec 188 pxCsmaInit->xMultiplierTbit = (CcaPeriod)(tempRegValue[2] & 0x03);
rosarium 0:2ddc0583bcec 189
rosarium 0:2ddc0583bcec 190 /* Reads the Cca length */
rosarium 0:2ddc0583bcec 191 pxCsmaInit->xCcaLength = (CsmaLength)(tempRegValue[3]&0xF0);
rosarium 0:2ddc0583bcec 192
rosarium 0:2ddc0583bcec 193 /* Reads the max number of back off */
rosarium 0:2ddc0583bcec 194 pxCsmaInit->cMaxNb = tempRegValue[3] & 0x07;
rosarium 0:2ddc0583bcec 195
rosarium 0:2ddc0583bcec 196 /* Reads the persistent mode enable bit */
rosarium 0:2ddc0583bcec 197 pxCsmaInit->xCsmaPersistentMode = (SpiritFunctionalState)((tempRegValue[4]>>1) & 0x01);
rosarium 0:2ddc0583bcec 198
rosarium 0:2ddc0583bcec 199 }
rosarium 0:2ddc0583bcec 200
rosarium 0:2ddc0583bcec 201
rosarium 0:2ddc0583bcec 202 /**
rosarium 0:2ddc0583bcec 203 * @brief Enables or Disables the CSMA.
rosarium 0:2ddc0583bcec 204 * @param xNewState the state of the CSMA mode.
rosarium 0:2ddc0583bcec 205 * This parameter can be: S_ENABLE or S_DISABLE.
rosarium 0:2ddc0583bcec 206 * @retval None.
rosarium 0:2ddc0583bcec 207 */
rosarium 0:2ddc0583bcec 208 void SpiritCsma(SpiritFunctionalState xNewState)
rosarium 0:2ddc0583bcec 209 {
rosarium 0:2ddc0583bcec 210 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 211
rosarium 0:2ddc0583bcec 212 /* Check the parameters */
rosarium 0:2ddc0583bcec 213 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
rosarium 0:2ddc0583bcec 214
rosarium 0:2ddc0583bcec 215 /* Reads the PROTOCOL1 register value */
rosarium 0:2ddc0583bcec 216 g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 217
rosarium 0:2ddc0583bcec 218 /* Sets or resets the CSMA enable bit */
rosarium 0:2ddc0583bcec 219 if(xNewState==S_ENABLE)
rosarium 0:2ddc0583bcec 220 {
rosarium 0:2ddc0583bcec 221 tempRegValue |= PROTOCOL1_CSMA_ON_MASK;
rosarium 0:2ddc0583bcec 222 }
rosarium 0:2ddc0583bcec 223 else
rosarium 0:2ddc0583bcec 224 {
rosarium 0:2ddc0583bcec 225 tempRegValue &= ~PROTOCOL1_CSMA_ON_MASK;
rosarium 0:2ddc0583bcec 226 }
rosarium 0:2ddc0583bcec 227
rosarium 0:2ddc0583bcec 228 /* Writes the new value on the PROTOCOL1 register */
rosarium 0:2ddc0583bcec 229 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 230
rosarium 0:2ddc0583bcec 231 }
rosarium 0:2ddc0583bcec 232
rosarium 0:2ddc0583bcec 233 /**
rosarium 0:2ddc0583bcec 234 * @brief Gets the CSMA mode. Says if it is enabled or disabled.
rosarium 0:2ddc0583bcec 235 * @param None.
rosarium 0:2ddc0583bcec 236 * @retval SpiritFunctionalState: CSMA mode.
rosarium 0:2ddc0583bcec 237 */
rosarium 0:2ddc0583bcec 238 SpiritFunctionalState SpiritCsmaGetCsma(void)
rosarium 0:2ddc0583bcec 239 {
rosarium 0:2ddc0583bcec 240 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 241
rosarium 0:2ddc0583bcec 242 /* Reads the PROTOCOL1 register value */
rosarium 0:2ddc0583bcec 243 g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 244
rosarium 0:2ddc0583bcec 245 /* Return if set or reset */
rosarium 0:2ddc0583bcec 246 if(tempRegValue & PROTOCOL1_CSMA_ON_MASK)
rosarium 0:2ddc0583bcec 247 {
rosarium 0:2ddc0583bcec 248 return S_ENABLE;
rosarium 0:2ddc0583bcec 249 }
rosarium 0:2ddc0583bcec 250 else
rosarium 0:2ddc0583bcec 251 {
rosarium 0:2ddc0583bcec 252 return S_DISABLE;
rosarium 0:2ddc0583bcec 253 }
rosarium 0:2ddc0583bcec 254
rosarium 0:2ddc0583bcec 255 }
rosarium 0:2ddc0583bcec 256
rosarium 0:2ddc0583bcec 257 /**
rosarium 0:2ddc0583bcec 258 * @brief Enables or Disables the persistent CSMA mode.
rosarium 0:2ddc0583bcec 259 * @param xNewState the state of the persistent CSMA mode.
rosarium 0:2ddc0583bcec 260 * This parameter can be: S_ENABLE or S_DISABLE.
rosarium 0:2ddc0583bcec 261 * @retval None.
rosarium 0:2ddc0583bcec 262 */
rosarium 0:2ddc0583bcec 263 void SpiritCsmaPersistentMode(SpiritFunctionalState xNewState)
rosarium 0:2ddc0583bcec 264 {
rosarium 0:2ddc0583bcec 265 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 266
rosarium 0:2ddc0583bcec 267 /* Check the parameters */
rosarium 0:2ddc0583bcec 268 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
rosarium 0:2ddc0583bcec 269
rosarium 0:2ddc0583bcec 270 /* Reads the PROTOCOL1 register value */
rosarium 0:2ddc0583bcec 271 g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 272
rosarium 0:2ddc0583bcec 273 /* Enables/disables the CSMA persistent mode */
rosarium 0:2ddc0583bcec 274 if(xNewState==S_ENABLE)
rosarium 0:2ddc0583bcec 275 {
rosarium 0:2ddc0583bcec 276 tempRegValue |= PROTOCOL1_CSMA_PERS_ON_MASK;
rosarium 0:2ddc0583bcec 277 }
rosarium 0:2ddc0583bcec 278 else
rosarium 0:2ddc0583bcec 279 {
rosarium 0:2ddc0583bcec 280 tempRegValue &= ~PROTOCOL1_CSMA_PERS_ON_MASK;
rosarium 0:2ddc0583bcec 281 }
rosarium 0:2ddc0583bcec 282
rosarium 0:2ddc0583bcec 283 /* Writes the new vaue on the PROTOCOL1 register */
rosarium 0:2ddc0583bcec 284 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 285
rosarium 0:2ddc0583bcec 286 }
rosarium 0:2ddc0583bcec 287
rosarium 0:2ddc0583bcec 288
rosarium 0:2ddc0583bcec 289 /**
rosarium 0:2ddc0583bcec 290 * @brief Gets the persistent CSMA mode.
rosarium 0:2ddc0583bcec 291 * @param None.
rosarium 0:2ddc0583bcec 292 * @retval SpiritFunctionalState: CSMA persistent mode.
rosarium 0:2ddc0583bcec 293 */
rosarium 0:2ddc0583bcec 294 SpiritFunctionalState SpiritCsmaGetPersistentMode(void)
rosarium 0:2ddc0583bcec 295 {
rosarium 0:2ddc0583bcec 296 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 297
rosarium 0:2ddc0583bcec 298 /* Reads the PROTOCOL1 register value */
rosarium 0:2ddc0583bcec 299 g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 300
rosarium 0:2ddc0583bcec 301 /* Return if set or reset */
rosarium 0:2ddc0583bcec 302 if(tempRegValue & PROTOCOL1_CSMA_PERS_ON_MASK)
rosarium 0:2ddc0583bcec 303 {
rosarium 0:2ddc0583bcec 304 return S_ENABLE;
rosarium 0:2ddc0583bcec 305 }
rosarium 0:2ddc0583bcec 306 else
rosarium 0:2ddc0583bcec 307 {
rosarium 0:2ddc0583bcec 308 return S_DISABLE;
rosarium 0:2ddc0583bcec 309 }
rosarium 0:2ddc0583bcec 310
rosarium 0:2ddc0583bcec 311 }
rosarium 0:2ddc0583bcec 312
rosarium 0:2ddc0583bcec 313
rosarium 0:2ddc0583bcec 314 /**
rosarium 0:2ddc0583bcec 315 * @brief Enables or Disables the seed reload mode (if enabled it reloads the back-off generator seed using the value written in the BU_COUNTER_SEED register).
rosarium 0:2ddc0583bcec 316 * @param xNewState the state of the seed reload mode.
rosarium 0:2ddc0583bcec 317 * This parameter can be: S_ENABLE or S_DISABLE.
rosarium 0:2ddc0583bcec 318 * @retval None.
rosarium 0:2ddc0583bcec 319 */
rosarium 0:2ddc0583bcec 320 void SpiritCsmaSeedReloadMode(SpiritFunctionalState xNewState)
rosarium 0:2ddc0583bcec 321 {
rosarium 0:2ddc0583bcec 322 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 323
rosarium 0:2ddc0583bcec 324 /* Check the parameters */
rosarium 0:2ddc0583bcec 325 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
rosarium 0:2ddc0583bcec 326
rosarium 0:2ddc0583bcec 327 /* Reads the PROTOCOL1 register value */
rosarium 0:2ddc0583bcec 328 g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 329
rosarium 0:2ddc0583bcec 330 /* Enables/disables the seed reload mode */
rosarium 0:2ddc0583bcec 331 if(xNewState==S_ENABLE)
rosarium 0:2ddc0583bcec 332 {
rosarium 0:2ddc0583bcec 333 tempRegValue |= PROTOCOL1_SEED_RELOAD_MASK;
rosarium 0:2ddc0583bcec 334 }
rosarium 0:2ddc0583bcec 335 else
rosarium 0:2ddc0583bcec 336 {
rosarium 0:2ddc0583bcec 337 tempRegValue &= ~PROTOCOL1_SEED_RELOAD_MASK;
rosarium 0:2ddc0583bcec 338 }
rosarium 0:2ddc0583bcec 339
rosarium 0:2ddc0583bcec 340 /* Writes the new value on the PROTOCOL1 register */
rosarium 0:2ddc0583bcec 341 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 342
rosarium 0:2ddc0583bcec 343 }
rosarium 0:2ddc0583bcec 344
rosarium 0:2ddc0583bcec 345
rosarium 0:2ddc0583bcec 346 /**
rosarium 0:2ddc0583bcec 347 * @brief Gets the seed reload mode.
rosarium 0:2ddc0583bcec 348 * @param None.
rosarium 0:2ddc0583bcec 349 * @retval SpiritFunctionalState: CSMA seed reload mode.
rosarium 0:2ddc0583bcec 350 */
rosarium 0:2ddc0583bcec 351 SpiritFunctionalState SpiritCsmaGetSeedReloadMode(void)
rosarium 0:2ddc0583bcec 352 {
rosarium 0:2ddc0583bcec 353 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 354
rosarium 0:2ddc0583bcec 355 /* Reads the PROTOCOL1 register value */
rosarium 0:2ddc0583bcec 356 g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 357
rosarium 0:2ddc0583bcec 358 /* Return if set or reset */
rosarium 0:2ddc0583bcec 359 if(tempRegValue & PROTOCOL1_SEED_RELOAD_MASK)
rosarium 0:2ddc0583bcec 360 {
rosarium 0:2ddc0583bcec 361 return S_ENABLE;
rosarium 0:2ddc0583bcec 362 }
rosarium 0:2ddc0583bcec 363 else
rosarium 0:2ddc0583bcec 364 {
rosarium 0:2ddc0583bcec 365 return S_DISABLE;
rosarium 0:2ddc0583bcec 366 }
rosarium 0:2ddc0583bcec 367 }
rosarium 0:2ddc0583bcec 368
rosarium 0:2ddc0583bcec 369
rosarium 0:2ddc0583bcec 370 /**
rosarium 0:2ddc0583bcec 371 * @brief Sets the BU counter seed (BU_COUNTER_SEED register). The CSMA back off time is given by the formula: BO = rand(2^NB)*BU.
rosarium 0:2ddc0583bcec 372 * @param nBuCounterSeed seed of the random number generator used to apply the BBE algorithm.
rosarium 0:2ddc0583bcec 373 * This parameter is an uint16_t.
rosarium 0:2ddc0583bcec 374 * @retval None.
rosarium 0:2ddc0583bcec 375 */
rosarium 0:2ddc0583bcec 376 void SpiritCsmaSetBuCounterSeed(uint16_t nBuCounterSeed)
rosarium 0:2ddc0583bcec 377 {
rosarium 0:2ddc0583bcec 378 uint8_t tempRegValue[2];
rosarium 0:2ddc0583bcec 379
rosarium 0:2ddc0583bcec 380 /* Check parameters */
rosarium 0:2ddc0583bcec 381 s_assert_param(IS_BU_COUNTER_SEED(nBuCounterSeed));
rosarium 0:2ddc0583bcec 382
rosarium 0:2ddc0583bcec 383 /* Build value (MSB)*/
rosarium 0:2ddc0583bcec 384 tempRegValue[0]=(uint8_t)(nBuCounterSeed>>8);
rosarium 0:2ddc0583bcec 385 /* Build value (LSB) */
rosarium 0:2ddc0583bcec 386 tempRegValue[1]=(uint8_t)nBuCounterSeed;
rosarium 0:2ddc0583bcec 387
rosarium 0:2ddc0583bcec 388 /* Writes the CSMA_CONFIG3 registers */
rosarium 0:2ddc0583bcec 389 g_xStatus = SpiritSpiWriteRegisters(CSMA_CONFIG3_BASE, 2, tempRegValue);
rosarium 0:2ddc0583bcec 390
rosarium 0:2ddc0583bcec 391 }
rosarium 0:2ddc0583bcec 392
rosarium 0:2ddc0583bcec 393 /**
rosarium 0:2ddc0583bcec 394 * @brief Returns the BU counter seed (BU_COUNTER_SEED register).
rosarium 0:2ddc0583bcec 395 * @param None.
rosarium 0:2ddc0583bcec 396 * @retval uint16_t Seed of the random number generator used to apply the BBE algorithm.
rosarium 0:2ddc0583bcec 397 */
rosarium 0:2ddc0583bcec 398 uint16_t SpiritCsmaGetBuCounterSeed(void)
rosarium 0:2ddc0583bcec 399 {
rosarium 0:2ddc0583bcec 400 uint8_t tempRegValue[2];
rosarium 0:2ddc0583bcec 401
rosarium 0:2ddc0583bcec 402 /* Reads the CSMA_CONFIGx registers value */
rosarium 0:2ddc0583bcec 403 g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG3_BASE, 2, tempRegValue);
rosarium 0:2ddc0583bcec 404
rosarium 0:2ddc0583bcec 405 /* Build the counter seed and return it */
rosarium 0:2ddc0583bcec 406 return ((uint16_t)tempRegValue[1] + (((uint16_t)tempRegValue[0])<<8));
rosarium 0:2ddc0583bcec 407
rosarium 0:2ddc0583bcec 408 }
rosarium 0:2ddc0583bcec 409
rosarium 0:2ddc0583bcec 410
rosarium 0:2ddc0583bcec 411 /**
rosarium 0:2ddc0583bcec 412 * @brief Sets the BU prescaler. The CSMA back off time is given by the formula: BO = rand(2^NB)*BU.
rosarium 0:2ddc0583bcec 413 * @param cBuPrescaler used to program the back-off unit BU.
rosarium 0:2ddc0583bcec 414 * This parameter is an uint8_t.
rosarium 0:2ddc0583bcec 415 * @retval None.
rosarium 0:2ddc0583bcec 416 */
rosarium 0:2ddc0583bcec 417 void SpiritCsmaSetBuPrescaler(uint8_t cBuPrescaler)
rosarium 0:2ddc0583bcec 418 {
rosarium 0:2ddc0583bcec 419 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 420
rosarium 0:2ddc0583bcec 421 /* Check parameters */
rosarium 0:2ddc0583bcec 422 s_assert_param(IS_BU_PRESCALER(cBuPrescaler));
rosarium 0:2ddc0583bcec 423
rosarium 0:2ddc0583bcec 424 /* Reads the CSMA_CONFIG1 register value */
rosarium 0:2ddc0583bcec 425 g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 426
rosarium 0:2ddc0583bcec 427 /* Build the new value for the BU prescaler */
rosarium 0:2ddc0583bcec 428 tempRegValue &= 0x03;
rosarium 0:2ddc0583bcec 429 tempRegValue |= (cBuPrescaler<<2);
rosarium 0:2ddc0583bcec 430
rosarium 0:2ddc0583bcec 431 /* Writes the new value on the CSMA_CONFIG1_BASE register */
rosarium 0:2ddc0583bcec 432 g_xStatus = SpiritSpiWriteRegisters(CSMA_CONFIG1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 433
rosarium 0:2ddc0583bcec 434 }
rosarium 0:2ddc0583bcec 435
rosarium 0:2ddc0583bcec 436
rosarium 0:2ddc0583bcec 437 /**
rosarium 0:2ddc0583bcec 438 * @brief Returns the BU prescaler.
rosarium 0:2ddc0583bcec 439 * @param None.
rosarium 0:2ddc0583bcec 440 * @retval uint8_t Value back-off unit (BU).
rosarium 0:2ddc0583bcec 441 */
rosarium 0:2ddc0583bcec 442 uint8_t SpiritCsmaGetBuPrescaler(void)
rosarium 0:2ddc0583bcec 443 {
rosarium 0:2ddc0583bcec 444 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 445
rosarium 0:2ddc0583bcec 446 /* Reads the CSMA_CONFIG1 register value */
rosarium 0:2ddc0583bcec 447 g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 448
rosarium 0:2ddc0583bcec 449 /* Build and return the BU prescaler value */
rosarium 0:2ddc0583bcec 450 return (tempRegValue >> 2);
rosarium 0:2ddc0583bcec 451
rosarium 0:2ddc0583bcec 452 }
rosarium 0:2ddc0583bcec 453
rosarium 0:2ddc0583bcec 454
rosarium 0:2ddc0583bcec 455 /**
rosarium 0:2ddc0583bcec 456 * @brief Sets the CCA period.
rosarium 0:2ddc0583bcec 457 * @param xMultiplierTbit value of CCA period to store.
rosarium 0:2ddc0583bcec 458 * This parameter can be a value of @ref CcaPeriod.
rosarium 0:2ddc0583bcec 459 * @retval None.
rosarium 0:2ddc0583bcec 460 */
rosarium 0:2ddc0583bcec 461 void SpiritCsmaSetCcaPeriod(CcaPeriod xMultiplierTbit)
rosarium 0:2ddc0583bcec 462 {
rosarium 0:2ddc0583bcec 463 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 464
rosarium 0:2ddc0583bcec 465 /* Check the parameters */
rosarium 0:2ddc0583bcec 466 s_assert_param(IS_CCA_PERIOD(xMultiplierTbit));
rosarium 0:2ddc0583bcec 467
rosarium 0:2ddc0583bcec 468 /* Reads the CSMA_CONFIG1 register value */
rosarium 0:2ddc0583bcec 469 g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 470
rosarium 0:2ddc0583bcec 471 /* Build the new value setting the the CCA period */
rosarium 0:2ddc0583bcec 472 tempRegValue &= 0xFC;
rosarium 0:2ddc0583bcec 473 tempRegValue |= xMultiplierTbit;
rosarium 0:2ddc0583bcec 474
rosarium 0:2ddc0583bcec 475 /* Writes the new value on the CSMA_CONFIG1 register */
rosarium 0:2ddc0583bcec 476 g_xStatus = SpiritSpiWriteRegisters(CSMA_CONFIG1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 477
rosarium 0:2ddc0583bcec 478 }
rosarium 0:2ddc0583bcec 479
rosarium 0:2ddc0583bcec 480
rosarium 0:2ddc0583bcec 481 /**
rosarium 0:2ddc0583bcec 482 * @brief Returns the CCA period.
rosarium 0:2ddc0583bcec 483 * @param None.
rosarium 0:2ddc0583bcec 484 * @retval CcaPeriod CCA period.
rosarium 0:2ddc0583bcec 485 */
rosarium 0:2ddc0583bcec 486 CcaPeriod SpiritCsmaGetCcaPeriod(void)
rosarium 0:2ddc0583bcec 487 {
rosarium 0:2ddc0583bcec 488 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 489
rosarium 0:2ddc0583bcec 490 /* Reads the CSMA_CONFIG1 register value */
rosarium 0:2ddc0583bcec 491 g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 492
rosarium 0:2ddc0583bcec 493 /* Build and return the CCA period value */
rosarium 0:2ddc0583bcec 494 return (CcaPeriod)(tempRegValue & 0x03);
rosarium 0:2ddc0583bcec 495
rosarium 0:2ddc0583bcec 496 }
rosarium 0:2ddc0583bcec 497
rosarium 0:2ddc0583bcec 498
rosarium 0:2ddc0583bcec 499 /**
rosarium 0:2ddc0583bcec 500 * @brief Sets the CCA length.
rosarium 0:2ddc0583bcec 501 * @param xCcaLength the CCA length (a value between 1 and 15 that multiplies the CCA period).
rosarium 0:2ddc0583bcec 502 * This parameter can be any value of @ref CsmaLength.
rosarium 0:2ddc0583bcec 503 * @retval None.
rosarium 0:2ddc0583bcec 504 */
rosarium 0:2ddc0583bcec 505 void SpiritCsmaSetCcaLength(CsmaLength xCcaLength)
rosarium 0:2ddc0583bcec 506 {
rosarium 0:2ddc0583bcec 507 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 508
rosarium 0:2ddc0583bcec 509 /* Check the parameters */
rosarium 0:2ddc0583bcec 510 s_assert_param(IS_CSMA_LENGTH(xCcaLength));
rosarium 0:2ddc0583bcec 511
rosarium 0:2ddc0583bcec 512 /* Reads the CSMA_CONFIG0 register value */
rosarium 0:2ddc0583bcec 513 g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG0_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 514
rosarium 0:2ddc0583bcec 515 /* Build the value of CCA length to be set */
rosarium 0:2ddc0583bcec 516 tempRegValue &= 0x0F;
rosarium 0:2ddc0583bcec 517 tempRegValue |= xCcaLength;
rosarium 0:2ddc0583bcec 518
rosarium 0:2ddc0583bcec 519 /* Writes the new value on the CSMA_CONFIG0 register */
rosarium 0:2ddc0583bcec 520 g_xStatus = SpiritSpiWriteRegisters(CSMA_CONFIG0_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 521
rosarium 0:2ddc0583bcec 522 }
rosarium 0:2ddc0583bcec 523
rosarium 0:2ddc0583bcec 524
rosarium 0:2ddc0583bcec 525 /**
rosarium 0:2ddc0583bcec 526 * @brief Returns the CCA length.
rosarium 0:2ddc0583bcec 527 * @param None.
rosarium 0:2ddc0583bcec 528 * @retval uint8_t CCA length.
rosarium 0:2ddc0583bcec 529 */
rosarium 0:2ddc0583bcec 530 uint8_t SpiritCsmaGetCcaLength(void)
rosarium 0:2ddc0583bcec 531 {
rosarium 0:2ddc0583bcec 532 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 533
rosarium 0:2ddc0583bcec 534 /* Reads the CSMA_CONFIG0 register value */
rosarium 0:2ddc0583bcec 535 g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG0_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 536
rosarium 0:2ddc0583bcec 537 /* Build and return the CCA length */
rosarium 0:2ddc0583bcec 538 return tempRegValue >> 4;
rosarium 0:2ddc0583bcec 539
rosarium 0:2ddc0583bcec 540 }
rosarium 0:2ddc0583bcec 541
rosarium 0:2ddc0583bcec 542
rosarium 0:2ddc0583bcec 543 /**
rosarium 0:2ddc0583bcec 544 * @brief Sets the max number of back-off. If reached Spirit stops the transmission.
rosarium 0:2ddc0583bcec 545 * @param cMaxNb the max number of back-off.
rosarium 0:2ddc0583bcec 546 * This parameter is an uint8_t.
rosarium 0:2ddc0583bcec 547 * @retval None.
rosarium 0:2ddc0583bcec 548 */
rosarium 0:2ddc0583bcec 549 void SpiritCsmaSetMaxNumberBackoff(uint8_t cMaxNb)
rosarium 0:2ddc0583bcec 550 {
rosarium 0:2ddc0583bcec 551 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 552
rosarium 0:2ddc0583bcec 553 /* Check the parameters */
rosarium 0:2ddc0583bcec 554 s_assert_param(IS_CMAX_NB(cMaxNb));
rosarium 0:2ddc0583bcec 555
rosarium 0:2ddc0583bcec 556 /* Reads the CSMA_CONFIG0 register value */
rosarium 0:2ddc0583bcec 557 g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG0_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 558
rosarium 0:2ddc0583bcec 559 /* Build the value of max back off to be set */
rosarium 0:2ddc0583bcec 560 tempRegValue &= 0xF8;
rosarium 0:2ddc0583bcec 561 tempRegValue |= cMaxNb;
rosarium 0:2ddc0583bcec 562
rosarium 0:2ddc0583bcec 563 /* Writes the new value on the CSMA_CONFIG0 register */
rosarium 0:2ddc0583bcec 564 g_xStatus = SpiritSpiWriteRegisters(CSMA_CONFIG0_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 565 }
rosarium 0:2ddc0583bcec 566
rosarium 0:2ddc0583bcec 567 /**
rosarium 0:2ddc0583bcec 568 * @brief Returns the max number of back-off.
rosarium 0:2ddc0583bcec 569 * @param None.
rosarium 0:2ddc0583bcec 570 * @retval uint8_t Max number of back-off.
rosarium 0:2ddc0583bcec 571 */
rosarium 0:2ddc0583bcec 572 uint8_t SpiritCsmaGetMaxNumberBackoff(void)
rosarium 0:2ddc0583bcec 573 {
rosarium 0:2ddc0583bcec 574 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 575
rosarium 0:2ddc0583bcec 576 /* Reads the CSMA_CONFIG0 register value */
rosarium 0:2ddc0583bcec 577 g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG0_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 578
rosarium 0:2ddc0583bcec 579 /* Build and return the max number of back-off */
rosarium 0:2ddc0583bcec 580 return (tempRegValue & 0x07);
rosarium 0:2ddc0583bcec 581
rosarium 0:2ddc0583bcec 582 }
rosarium 0:2ddc0583bcec 583
rosarium 0:2ddc0583bcec 584
rosarium 0:2ddc0583bcec 585 /**
rosarium 0:2ddc0583bcec 586 *@}
rosarium 0:2ddc0583bcec 587 */
rosarium 0:2ddc0583bcec 588
rosarium 0:2ddc0583bcec 589 /**
rosarium 0:2ddc0583bcec 590 *@}
rosarium 0:2ddc0583bcec 591 */
rosarium 0:2ddc0583bcec 592
rosarium 0:2ddc0583bcec 593
rosarium 0:2ddc0583bcec 594 /**
rosarium 0:2ddc0583bcec 595 *@}
rosarium 0:2ddc0583bcec 596 */
rosarium 0:2ddc0583bcec 597
rosarium 0:2ddc0583bcec 598
rosarium 0:2ddc0583bcec 599
rosarium 0:2ddc0583bcec 600 /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/