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_Timer.h
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 timers.
rosarium 0:2ddc0583bcec 8 * @details
rosarium 0:2ddc0583bcec 9 *
rosarium 0:2ddc0583bcec 10 * This module provides API to configure the Spirit timing mechanisms.
rosarium 0:2ddc0583bcec 11 * They allow the user to set the timer registers using raw values or
rosarium 0:2ddc0583bcec 12 * compute them since the desired timer value is expressed in ms.
rosarium 0:2ddc0583bcec 13 * Moreover the management of the Spirit LDCR mode can be done using
rosarium 0:2ddc0583bcec 14 * these API.
rosarium 0:2ddc0583bcec 15 *
rosarium 0:2ddc0583bcec 16 * <b>Example:</b>
rosarium 0:2ddc0583bcec 17 * @code
rosarium 0:2ddc0583bcec 18 * ...
rosarium 0:2ddc0583bcec 19 *
rosarium 0:2ddc0583bcec 20 * SpiritTimerSetRxTimeoutMs(50.0);
rosarium 0:2ddc0583bcec 21 * SpiritTimerSetWakeUpTimerMs(150.0);
rosarium 0:2ddc0583bcec 22 *
rosarium 0:2ddc0583bcec 23 * // IRQ configuration for RX_TIMEOUT and WAKEUP_TIMEOUT
rosarium 0:2ddc0583bcec 24 * ...
rosarium 0:2ddc0583bcec 25 *
rosarium 0:2ddc0583bcec 26 * SpiritTimerLdcrMode(S_ENABLE);
rosarium 0:2ddc0583bcec 27 *
rosarium 0:2ddc0583bcec 28 * ...
rosarium 0:2ddc0583bcec 29 *
rosarium 0:2ddc0583bcec 30 * @endcode
rosarium 0:2ddc0583bcec 31 *
rosarium 0:2ddc0583bcec 32 *
rosarium 0:2ddc0583bcec 33 * @attention
rosarium 0:2ddc0583bcec 34 *
rosarium 0:2ddc0583bcec 35 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
rosarium 0:2ddc0583bcec 36 *
rosarium 0:2ddc0583bcec 37 * Redistribution and use in source and binary forms, with or without modification,
rosarium 0:2ddc0583bcec 38 * are permitted provided that the following conditions are met:
rosarium 0:2ddc0583bcec 39 * 1. Redistributions of source code must retain the above copyright notice,
rosarium 0:2ddc0583bcec 40 * this list of conditions and the following disclaimer.
rosarium 0:2ddc0583bcec 41 * 2. Redistributions in binary form must reproduce the above copyright notice,
rosarium 0:2ddc0583bcec 42 * this list of conditions and the following disclaimer in the documentation
rosarium 0:2ddc0583bcec 43 * and/or other materials provided with the distribution.
rosarium 0:2ddc0583bcec 44 * 3. Neither the name of STMicroelectronics nor the names of its contributors
rosarium 0:2ddc0583bcec 45 * may be used to endorse or promote products derived from this software
rosarium 0:2ddc0583bcec 46 * without specific prior written permission.
rosarium 0:2ddc0583bcec 47 *
rosarium 0:2ddc0583bcec 48 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
rosarium 0:2ddc0583bcec 49 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
rosarium 0:2ddc0583bcec 50 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
rosarium 0:2ddc0583bcec 51 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
rosarium 0:2ddc0583bcec 52 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
rosarium 0:2ddc0583bcec 53 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
rosarium 0:2ddc0583bcec 54 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
rosarium 0:2ddc0583bcec 55 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
rosarium 0:2ddc0583bcec 56 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
rosarium 0:2ddc0583bcec 57 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
rosarium 0:2ddc0583bcec 58 *
rosarium 0:2ddc0583bcec 59 ******************************************************************************
rosarium 0:2ddc0583bcec 60 */
rosarium 0:2ddc0583bcec 61
rosarium 0:2ddc0583bcec 62 /* Define to prevent recursive inclusion -------------------------------------*/
rosarium 0:2ddc0583bcec 63 #ifndef __SPIRIT1_TIMER_H
rosarium 0:2ddc0583bcec 64 #define __SPIRIT1_TIMER_H
rosarium 0:2ddc0583bcec 65
rosarium 0:2ddc0583bcec 66
rosarium 0:2ddc0583bcec 67 /* Includes ------------------------------------------------------------------*/
rosarium 0:2ddc0583bcec 68
rosarium 0:2ddc0583bcec 69 #include "SPIRIT_Regs.h"
rosarium 0:2ddc0583bcec 70 #include "SPIRIT_Types.h"
rosarium 0:2ddc0583bcec 71
rosarium 0:2ddc0583bcec 72
rosarium 0:2ddc0583bcec 73 #ifdef __cplusplus
rosarium 0:2ddc0583bcec 74 extern "C" {
rosarium 0:2ddc0583bcec 75 #endif
rosarium 0:2ddc0583bcec 76
rosarium 0:2ddc0583bcec 77
rosarium 0:2ddc0583bcec 78 /**
rosarium 0:2ddc0583bcec 79 * @addtogroup SPIRIT_Libraries
rosarium 0:2ddc0583bcec 80 * @{
rosarium 0:2ddc0583bcec 81 */
rosarium 0:2ddc0583bcec 82
rosarium 0:2ddc0583bcec 83
rosarium 0:2ddc0583bcec 84 /**
rosarium 0:2ddc0583bcec 85 * @defgroup SPIRIT_Timer Timer
rosarium 0:2ddc0583bcec 86 * @brief Configuration and management of SPIRIT Timers.
rosarium 0:2ddc0583bcec 87 * @details See the file <i>@ref SPIRIT_Timer.h</i> for more details.
rosarium 0:2ddc0583bcec 88 * @{
rosarium 0:2ddc0583bcec 89 */
rosarium 0:2ddc0583bcec 90
rosarium 0:2ddc0583bcec 91
rosarium 0:2ddc0583bcec 92 /**
rosarium 0:2ddc0583bcec 93 * @defgroup Timer_Exported_Types Timer Exported Types
rosarium 0:2ddc0583bcec 94 * @{
rosarium 0:2ddc0583bcec 95 */
rosarium 0:2ddc0583bcec 96
rosarium 0:2ddc0583bcec 97 /**
rosarium 0:2ddc0583bcec 98 * @brief All the possible RX timeout stop conditions enumeration.
rosarium 0:2ddc0583bcec 99 */
rosarium 0:2ddc0583bcec 100 typedef enum{
rosarium 0:2ddc0583bcec 101
rosarium 0:2ddc0583bcec 102 NO_TIMEOUT_STOP = 0x00, /*!< Timeout never stopped */
rosarium 0:2ddc0583bcec 103 TIMEOUT_ALWAYS_STOPPED = 0x08, /*!< Timeout always stopped (default) */
rosarium 0:2ddc0583bcec 104 RSSI_ABOVE_THRESHOLD = 0x04, /*!< Timeout stopped on RSSI above threshold */
rosarium 0:2ddc0583bcec 105 SQI_ABOVE_THRESHOLD = 0x02, /*!< Timeout stopped on SQI above threshold */
rosarium 0:2ddc0583bcec 106 PQI_ABOVE_THRESHOLD = 0x01, /*!< Timeout stopped on PQI above threshold */
rosarium 0:2ddc0583bcec 107 RSSI_AND_SQI_ABOVE_THRESHOLD = 0x06, /*!< Timeout stopped on both RSSI and SQI above threshold */
rosarium 0:2ddc0583bcec 108 RSSI_AND_PQI_ABOVE_THRESHOLD = 0x05, /*!< Timeout stopped on both RSSI and PQI above threshold */
rosarium 0:2ddc0583bcec 109 SQI_AND_PQI_ABOVE_THRESHOLD = 0x03, /*!< Timeout stopped on both SQI and PQI above threshold */
rosarium 0:2ddc0583bcec 110 ALL_ABOVE_THRESHOLD = 0x07, /*!< Timeout stopped only if RSSI, SQI and PQI are above threshold */
rosarium 0:2ddc0583bcec 111 RSSI_OR_SQI_ABOVE_THRESHOLD = 0x0E, /*!< Timeout stopped if one between RSSI or SQI are above threshold */
rosarium 0:2ddc0583bcec 112 RSSI_OR_PQI_ABOVE_THRESHOLD = 0x0D, /*!< Timeout stopped if one between RSSI or PQI are above threshold */
rosarium 0:2ddc0583bcec 113 SQI_OR_PQI_ABOVE_THRESHOLD = 0x0B, /*!< Timeout stopped if one between SQI or PQI are above threshold */
rosarium 0:2ddc0583bcec 114 ANY_ABOVE_THRESHOLD = 0x0F /*!< Timeout stopped if one among RSSI, SQI or SQI are above threshold */
rosarium 0:2ddc0583bcec 115
rosarium 0:2ddc0583bcec 116 } RxTimeoutStopCondition;
rosarium 0:2ddc0583bcec 117
rosarium 0:2ddc0583bcec 118
rosarium 0:2ddc0583bcec 119 #define IS_RX_TIMEOUT_STOP_CONDITION(COND) ( COND == NO_TIMEOUT_STOP || \
rosarium 0:2ddc0583bcec 120 COND == TIMEOUT_ALWAYS_STOPPED || \
rosarium 0:2ddc0583bcec 121 COND == RSSI_ABOVE_THRESHOLD || \
rosarium 0:2ddc0583bcec 122 COND == SQI_ABOVE_THRESHOLD || \
rosarium 0:2ddc0583bcec 123 COND == PQI_ABOVE_THRESHOLD || \
rosarium 0:2ddc0583bcec 124 COND == RSSI_AND_SQI_ABOVE_THRESHOLD || \
rosarium 0:2ddc0583bcec 125 COND == RSSI_AND_PQI_ABOVE_THRESHOLD || \
rosarium 0:2ddc0583bcec 126 COND == SQI_AND_PQI_ABOVE_THRESHOLD || \
rosarium 0:2ddc0583bcec 127 COND == ALL_ABOVE_THRESHOLD || \
rosarium 0:2ddc0583bcec 128 COND == RSSI_OR_SQI_ABOVE_THRESHOLD || \
rosarium 0:2ddc0583bcec 129 COND == RSSI_OR_PQI_ABOVE_THRESHOLD || \
rosarium 0:2ddc0583bcec 130 COND == SQI_OR_PQI_ABOVE_THRESHOLD || \
rosarium 0:2ddc0583bcec 131 COND == ANY_ABOVE_THRESHOLD )
rosarium 0:2ddc0583bcec 132
rosarium 0:2ddc0583bcec 133
rosarium 0:2ddc0583bcec 134
rosarium 0:2ddc0583bcec 135 /**
rosarium 0:2ddc0583bcec 136 * @}
rosarium 0:2ddc0583bcec 137 */
rosarium 0:2ddc0583bcec 138
rosarium 0:2ddc0583bcec 139
rosarium 0:2ddc0583bcec 140 /**
rosarium 0:2ddc0583bcec 141 * @defgroup Timer_Exported_Constants Timer Exported Constants
rosarium 0:2ddc0583bcec 142 * @{
rosarium 0:2ddc0583bcec 143 */
rosarium 0:2ddc0583bcec 144
rosarium 0:2ddc0583bcec 145 /**
rosarium 0:2ddc0583bcec 146 * @brief It represents the Time Step for RX_Timeout timer in case of 24 MHz Crystal, expressed in us.
rosarium 0:2ddc0583bcec 147 * It is equal to 1210/(24*10^6). With this time step it is possible to fix the RX_Timeout to
rosarium 0:2ddc0583bcec 148 * a minimum value of 50.417us to a maximum value of about 3.278 s.
rosarium 0:2ddc0583bcec 149 * Remember that it is possible to have infinite RX_Timeout writing 0 in the RX_Timeout_Counter and/or RX_Timeout_Prescaler registers.
rosarium 0:2ddc0583bcec 150 */
rosarium 0:2ddc0583bcec 151 #define RX_TCLK_24MHz 50.417f
rosarium 0:2ddc0583bcec 152 #define IS_RX_TIMEOUT_24MHz(TIMEOUT) (TIMEOUT*1000)>=RX_TCLK_24MHz
rosarium 0:2ddc0583bcec 153
rosarium 0:2ddc0583bcec 154 /**
rosarium 0:2ddc0583bcec 155 * @brief It represents the Time Step for RX_Timeout timer in case of 26 MHz Crystal, expressed in us.
rosarium 0:2ddc0583bcec 156 * It is equal to 1210/(26*10^6). With this time step it is possible to fix the RX_Timeout to
rosarium 0:2ddc0583bcec 157 * a minimum value of 46.538us to a maximum value of about 3.026 s.
rosarium 0:2ddc0583bcec 158 * Remember that it is possible to have infinite RX_Timeout writing 0 in the RX_Timeout_Counter register.
rosarium 0:2ddc0583bcec 159 */
rosarium 0:2ddc0583bcec 160 #define RX_TCLK_26MHz 46.538f
rosarium 0:2ddc0583bcec 161 #define IS_RX_TIMEOUT_26MHz(TIMEOUT) (TIMEOUT*1000)>=RX_TCLK_26MHz
rosarium 0:2ddc0583bcec 162
rosarium 0:2ddc0583bcec 163 /**
rosarium 0:2ddc0583bcec 164 * @brief It represents the Time Step for RX_Wakeup timer expressed in us. This timer is based on RCO (about 34.7 kHZ).
rosarium 0:2ddc0583bcec 165 * With this time step it is possible to fix the Wakeup_Timeout to a minimum value of 28.818us to a maximum
rosarium 0:2ddc0583bcec 166 * value of about 1.888 s.
rosarium 0:2ddc0583bcec 167 */
rosarium 0:2ddc0583bcec 168 #define WAKEUP_TCLK 28.818f
rosarium 0:2ddc0583bcec 169 #define IS_WKUP_TIMEOUT(TIMEOUT) (TIMEOUT*1000)>=WAKEUP_TCLK
rosarium 0:2ddc0583bcec 170
rosarium 0:2ddc0583bcec 171
rosarium 0:2ddc0583bcec 172
rosarium 0:2ddc0583bcec 173 /**
rosarium 0:2ddc0583bcec 174 * @}
rosarium 0:2ddc0583bcec 175 */
rosarium 0:2ddc0583bcec 176
rosarium 0:2ddc0583bcec 177
rosarium 0:2ddc0583bcec 178 /**
rosarium 0:2ddc0583bcec 179 * @defgroup Timer_Exported_Macros Timer Exported Macros
rosarium 0:2ddc0583bcec 180 * @{
rosarium 0:2ddc0583bcec 181 */
rosarium 0:2ddc0583bcec 182
rosarium 0:2ddc0583bcec 183 #define SET_INFINITE_RX_TIMEOUT() SpiritTimerSetRxTimeoutCounter(0)
rosarium 0:2ddc0583bcec 184
rosarium 0:2ddc0583bcec 185 /**
rosarium 0:2ddc0583bcec 186 * @}
rosarium 0:2ddc0583bcec 187 */
rosarium 0:2ddc0583bcec 188
rosarium 0:2ddc0583bcec 189
rosarium 0:2ddc0583bcec 190 /**
rosarium 0:2ddc0583bcec 191 * @defgroup Timer_Exported_Functions Timer Exported Functions
rosarium 0:2ddc0583bcec 192 * @{
rosarium 0:2ddc0583bcec 193 */
rosarium 0:2ddc0583bcec 194
rosarium 0:2ddc0583bcec 195 void SpiritTimerLdcrMode(SpiritFunctionalState xNewState);
rosarium 0:2ddc0583bcec 196 void SpiritTimerLdcrAutoReload(SpiritFunctionalState xNewState);
rosarium 0:2ddc0583bcec 197 SpiritFunctionalState SpiritTimerLdcrGetAutoReload(void);
rosarium 0:2ddc0583bcec 198 void SpiritTimerSetRxTimeout(uint8_t cCounter , uint8_t cPrescaler);
rosarium 0:2ddc0583bcec 199 void SpiritTimerSetRxTimeoutMs(float fDesiredMsec);
rosarium 0:2ddc0583bcec 200 void SpiritTimerSetRxTimeoutCounter(uint8_t cCounter);
rosarium 0:2ddc0583bcec 201 void SpiritTimerSetRxTimeoutPrescaler(uint8_t cPrescaler);
rosarium 0:2ddc0583bcec 202 void SpiritTimerGetRxTimeout(float* pfTimeoutMsec, uint8_t* pcCounter , uint8_t* pcPrescaler);
rosarium 0:2ddc0583bcec 203 void SpiritTimerSetWakeUpTimer(uint8_t cCounter , uint8_t cPrescaler);
rosarium 0:2ddc0583bcec 204 void SpiritTimerSetWakeUpTimerMs(float fDesiredMsec);
rosarium 0:2ddc0583bcec 205 void SpiritTimerSetWakeUpTimerCounter(uint8_t cCounter);
rosarium 0:2ddc0583bcec 206 void SpiritTimerSetWakeUpTimerPrescaler(uint8_t cPrescaler);
rosarium 0:2ddc0583bcec 207 void SpiritTimerSetWakeUpTimerReloadMs(float fDesiredMsec);
rosarium 0:2ddc0583bcec 208 void SpiritTimerGetWakeUpTimer(float* pfWakeUpMsec, uint8_t* pcCounter , uint8_t* pcPrescaler);
rosarium 0:2ddc0583bcec 209 void SpiritTimerSetWakeUpTimerReload(uint8_t cCounter , uint8_t cPrescaler);
rosarium 0:2ddc0583bcec 210 void SpiritTimerSetWakeUpTimerReloadCounter(uint8_t cCounter);
rosarium 0:2ddc0583bcec 211 void SpiritTimerSetWakeUpTimerReloadPrescaler(uint8_t cPrescaler);
rosarium 0:2ddc0583bcec 212 void SpiritTimerGetWakeUpTimerReload(float* pfWakeUpReloadMsec, uint8_t* pcCounter , uint8_t* pcPrescaler);
rosarium 0:2ddc0583bcec 213 void SpiritTimerComputeWakeUpValues(float fDesiredMsec , uint8_t* pcCounter , uint8_t* pcPrescaler);
rosarium 0:2ddc0583bcec 214 void SpiritTimerComputeRxTimeoutValues(float fDesiredMsec , uint8_t* pcCounter , uint8_t* pcPrescaler);
rosarium 0:2ddc0583bcec 215 void SpiritTimerSetRxTimeoutStopCondition(RxTimeoutStopCondition xStopCondition);
rosarium 0:2ddc0583bcec 216 void SpiritTimerReloadStrobe(void);
rosarium 0:2ddc0583bcec 217 uint16_t SpiritTimerGetRcoFrequency(void);
rosarium 0:2ddc0583bcec 218
rosarium 0:2ddc0583bcec 219 /**
rosarium 0:2ddc0583bcec 220 * @}
rosarium 0:2ddc0583bcec 221 */
rosarium 0:2ddc0583bcec 222
rosarium 0:2ddc0583bcec 223 /**
rosarium 0:2ddc0583bcec 224 * @}
rosarium 0:2ddc0583bcec 225 */
rosarium 0:2ddc0583bcec 226
rosarium 0:2ddc0583bcec 227
rosarium 0:2ddc0583bcec 228 /**
rosarium 0:2ddc0583bcec 229 * @}
rosarium 0:2ddc0583bcec 230 */
rosarium 0:2ddc0583bcec 231
rosarium 0:2ddc0583bcec 232 #ifdef __cplusplus
rosarium 0:2ddc0583bcec 233 }
rosarium 0:2ddc0583bcec 234 #endif
rosarium 0:2ddc0583bcec 235
rosarium 0:2ddc0583bcec 236 #endif
rosarium 0:2ddc0583bcec 237
rosarium 0:2ddc0583bcec 238 /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
rosarium 0:2ddc0583bcec 239