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_Irq.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 IRQs.
rosarium 0:2ddc0583bcec 8 * @details
rosarium 0:2ddc0583bcec 9 *
rosarium 0:2ddc0583bcec 10 * @attention
rosarium 0:2ddc0583bcec 11 *
rosarium 0:2ddc0583bcec 12 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
rosarium 0:2ddc0583bcec 13 *
rosarium 0:2ddc0583bcec 14 * Redistribution and use in source and binary forms, with or without modification,
rosarium 0:2ddc0583bcec 15 * are permitted provided that the following conditions are met:
rosarium 0:2ddc0583bcec 16 * 1. Redistributions of source code must retain the above copyright notice,
rosarium 0:2ddc0583bcec 17 * this list of conditions and the following disclaimer.
rosarium 0:2ddc0583bcec 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
rosarium 0:2ddc0583bcec 19 * this list of conditions and the following disclaimer in the documentation
rosarium 0:2ddc0583bcec 20 * and/or other materials provided with the distribution.
rosarium 0:2ddc0583bcec 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
rosarium 0:2ddc0583bcec 22 * may be used to endorse or promote products derived from this software
rosarium 0:2ddc0583bcec 23 * without specific prior written permission.
rosarium 0:2ddc0583bcec 24 *
rosarium 0:2ddc0583bcec 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
rosarium 0:2ddc0583bcec 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
rosarium 0:2ddc0583bcec 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
rosarium 0:2ddc0583bcec 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
rosarium 0:2ddc0583bcec 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
rosarium 0:2ddc0583bcec 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
rosarium 0:2ddc0583bcec 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
rosarium 0:2ddc0583bcec 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
rosarium 0:2ddc0583bcec 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
rosarium 0:2ddc0583bcec 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
rosarium 0:2ddc0583bcec 35 *
rosarium 0:2ddc0583bcec 36 ******************************************************************************
rosarium 0:2ddc0583bcec 37 */
rosarium 0:2ddc0583bcec 38
rosarium 0:2ddc0583bcec 39 /* Includes ------------------------------------------------------------------*/
rosarium 0:2ddc0583bcec 40 #include "SPIRIT_Irq.h"
rosarium 0:2ddc0583bcec 41 #include "MCU_Interface.h"
rosarium 0:2ddc0583bcec 42
rosarium 0:2ddc0583bcec 43
rosarium 0:2ddc0583bcec 44
rosarium 0:2ddc0583bcec 45 /**
rosarium 0:2ddc0583bcec 46 * @addtogroup SPIRIT_Libraries
rosarium 0:2ddc0583bcec 47 * @{
rosarium 0:2ddc0583bcec 48 */
rosarium 0:2ddc0583bcec 49
rosarium 0:2ddc0583bcec 50
rosarium 0:2ddc0583bcec 51 /**
rosarium 0:2ddc0583bcec 52 * @addtogroup SPIRIT_Irq
rosarium 0:2ddc0583bcec 53 * @{
rosarium 0:2ddc0583bcec 54 */
rosarium 0:2ddc0583bcec 55
rosarium 0:2ddc0583bcec 56
rosarium 0:2ddc0583bcec 57 /**
rosarium 0:2ddc0583bcec 58 * @defgroup Irq_Private_TypesDefinitions IRQ Private Types Definitions
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 /**
rosarium 0:2ddc0583bcec 68 * @defgroup Irq_Private_Defines IRQ Private Defines
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 /**
rosarium 0:2ddc0583bcec 78 * @defgroup Irq_Private_Macros IRQ Private Macros
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 /**
rosarium 0:2ddc0583bcec 88 * @defgroup Irq_Private_Variables IRQ Private Variables
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 /**
rosarium 0:2ddc0583bcec 99 * @defgroup Irq_Private_FunctionPrototypes IRQ Private Function Prototypes
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 /**
rosarium 0:2ddc0583bcec 109 * @defgroup Irq_Private_Functions IRQ Private Functions
rosarium 0:2ddc0583bcec 110 * @{
rosarium 0:2ddc0583bcec 111 */
rosarium 0:2ddc0583bcec 112
rosarium 0:2ddc0583bcec 113
rosarium 0:2ddc0583bcec 114 /**
rosarium 0:2ddc0583bcec 115 * @brief De initializate the SpiritIrqs structure setting all the bitfield to 0.
rosarium 0:2ddc0583bcec 116 * Moreover, it sets the IRQ mask registers to 0x00000000, disabling all IRQs.
rosarium 0:2ddc0583bcec 117 * @param pxIrqInit pointer to a variable of type @ref SpiritIrqs, in which all the
rosarium 0:2ddc0583bcec 118 * bitfields will be settled to zero.
rosarium 0:2ddc0583bcec 119 * @retval None.
rosarium 0:2ddc0583bcec 120 */
rosarium 0:2ddc0583bcec 121 void SpiritIrqDeInit(SpiritIrqs* pxIrqInit)
rosarium 0:2ddc0583bcec 122 {
rosarium 0:2ddc0583bcec 123 uint8_t tempRegValue[4]={0x00,0x00,0x00,0x00};
rosarium 0:2ddc0583bcec 124
rosarium 0:2ddc0583bcec 125 if(pxIrqInit!=NULL)
rosarium 0:2ddc0583bcec 126 {
rosarium 0:2ddc0583bcec 127 /* Sets the bitfields of passed structure to one */
rosarium 0:2ddc0583bcec 128 *(uint32_t*)pxIrqInit = 0x0;
rosarium 0:2ddc0583bcec 129 }
rosarium 0:2ddc0583bcec 130
rosarium 0:2ddc0583bcec 131 /* Writes the IRQ_MASK registers */
rosarium 0:2ddc0583bcec 132 g_xStatus = SpiritSpiWriteRegisters(IRQ_MASK3_BASE, 4, tempRegValue);
rosarium 0:2ddc0583bcec 133 }
rosarium 0:2ddc0583bcec 134
rosarium 0:2ddc0583bcec 135
rosarium 0:2ddc0583bcec 136 /**
rosarium 0:2ddc0583bcec 137 * @brief Enables all the IRQs according to the user defined pxIrqInit structure.
rosarium 0:2ddc0583bcec 138 * @param pxIrqInit pointer to a variable of type @ref SpiritIrqs, through which the
rosarium 0:2ddc0583bcec 139 * user enable specific IRQs. This parameter is a pointer to a SpiritIrqs.
rosarium 0:2ddc0583bcec 140 * For example suppose to enable only the two IRQ Low Battery Level and Tx Data Sent:
rosarium 0:2ddc0583bcec 141 * @code
rosarium 0:2ddc0583bcec 142 * SpiritIrqs myIrqInit = {0};
rosarium 0:2ddc0583bcec 143 * myIrqInit.IRQ_LOW_BATT_LVL = 1;
rosarium 0:2ddc0583bcec 144 * myIrqInit.IRQ_TX_DATA_SENT = 1;
rosarium 0:2ddc0583bcec 145 * SpiritIrqInit(&myIrqInit);
rosarium 0:2ddc0583bcec 146 * @endcode
rosarium 0:2ddc0583bcec 147 * @retval None.
rosarium 0:2ddc0583bcec 148 */
rosarium 0:2ddc0583bcec 149 void SpiritIrqInit(SpiritIrqs* pxIrqInit)
rosarium 0:2ddc0583bcec 150 {
rosarium 0:2ddc0583bcec 151 /* Writes the IRQ_MASK registers */
rosarium 0:2ddc0583bcec 152 g_xStatus = SpiritSpiWriteRegisters(IRQ_MASK3_BASE, 4, (uint8_t*)pxIrqInit);
rosarium 0:2ddc0583bcec 153
rosarium 0:2ddc0583bcec 154 }
rosarium 0:2ddc0583bcec 155
rosarium 0:2ddc0583bcec 156
rosarium 0:2ddc0583bcec 157 /**
rosarium 0:2ddc0583bcec 158 * @brief Enables or disables a specific IRQ.
rosarium 0:2ddc0583bcec 159 * @param xIrq IRQ to enable or disable.
rosarium 0:2ddc0583bcec 160 * This parameter can be any value of @ref IrqList.
rosarium 0:2ddc0583bcec 161 * @param xNewState new state for the IRQ.
rosarium 0:2ddc0583bcec 162 * This parameter can be: S_ENABLE or S_DISABLE.
rosarium 0:2ddc0583bcec 163 * @retval None.
rosarium 0:2ddc0583bcec 164 */
rosarium 0:2ddc0583bcec 165 void SpiritIrq(IrqList xIrq, SpiritFunctionalState xNewState)
rosarium 0:2ddc0583bcec 166 {
rosarium 0:2ddc0583bcec 167 uint8_t tempRegValue[4];
rosarium 0:2ddc0583bcec 168 uint32_t tempValue = 0;
rosarium 0:2ddc0583bcec 169
rosarium 0:2ddc0583bcec 170 /* Check the parameters */
rosarium 0:2ddc0583bcec 171 s_assert_param(IS_SPIRIT_IRQ_LIST(xIrq));
rosarium 0:2ddc0583bcec 172 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
rosarium 0:2ddc0583bcec 173
rosarium 0:2ddc0583bcec 174 /* Reads the IRQ_MASK registers */
rosarium 0:2ddc0583bcec 175 g_xStatus = SpiritSpiReadRegisters(IRQ_MASK3_BASE, 4, tempRegValue);
rosarium 0:2ddc0583bcec 176
rosarium 0:2ddc0583bcec 177 /* Build the IRQ mask word */
rosarium 0:2ddc0583bcec 178 for(uint8_t i=0; i<4; i++)
rosarium 0:2ddc0583bcec 179 {
rosarium 0:2ddc0583bcec 180 tempValue += ((uint32_t)tempRegValue[i])<<(8*(3-i));
rosarium 0:2ddc0583bcec 181 }
rosarium 0:2ddc0583bcec 182
rosarium 0:2ddc0583bcec 183 /* Rebuild the new mask according to user request */
rosarium 0:2ddc0583bcec 184 if(xNewState == S_DISABLE)
rosarium 0:2ddc0583bcec 185 {
rosarium 0:2ddc0583bcec 186 tempValue &= (~xIrq);
rosarium 0:2ddc0583bcec 187 }
rosarium 0:2ddc0583bcec 188 else
rosarium 0:2ddc0583bcec 189 {
rosarium 0:2ddc0583bcec 190 tempValue |= (xIrq);
rosarium 0:2ddc0583bcec 191 }
rosarium 0:2ddc0583bcec 192
rosarium 0:2ddc0583bcec 193 /* Build the array of bytes to write in the IRQ_MASK registers */
rosarium 0:2ddc0583bcec 194 for(uint8_t j=0; j<4; j++)
rosarium 0:2ddc0583bcec 195 {
rosarium 0:2ddc0583bcec 196 tempRegValue[j] = (uint8_t)(tempValue>>(8*(3-j)));
rosarium 0:2ddc0583bcec 197 }
rosarium 0:2ddc0583bcec 198
rosarium 0:2ddc0583bcec 199 /* Writes the new IRQ mask in the corresponding registers */
rosarium 0:2ddc0583bcec 200 g_xStatus = SpiritSpiWriteRegisters(IRQ_MASK3_BASE, 4, tempRegValue);
rosarium 0:2ddc0583bcec 201
rosarium 0:2ddc0583bcec 202 }
rosarium 0:2ddc0583bcec 203
rosarium 0:2ddc0583bcec 204
rosarium 0:2ddc0583bcec 205 /**
rosarium 0:2ddc0583bcec 206 * @brief Fills a pointer to a structure of SpiritIrqs type reading the IRQ_MASK registers.
rosarium 0:2ddc0583bcec 207 * @param pxIrqMask pointer to a variable of type @ref SpiritIrqs, through which the
rosarium 0:2ddc0583bcec 208 * user can read which IRQs are enabled. All the bitfields equals to zero correspond
rosarium 0:2ddc0583bcec 209 * to enabled IRQs, while all the bitfields equals to one correspond to disabled IRQs.
rosarium 0:2ddc0583bcec 210 * This parameter is a pointer to a SpiritIrqs.
rosarium 0:2ddc0583bcec 211 * For example suppose that the Power On Reset and RX Data ready are the only enabled IRQs.
rosarium 0:2ddc0583bcec 212 * @code
rosarium 0:2ddc0583bcec 213 * SpiritIrqs myIrqMask;
rosarium 0:2ddc0583bcec 214 * SpiritIrqGetStatus(&myIrqMask);
rosarium 0:2ddc0583bcec 215 * @endcode
rosarium 0:2ddc0583bcec 216 * Then
rosarium 0:2ddc0583bcec 217 * myIrqMask.IRQ_POR and myIrqMask.IRQ_RX_DATA_READY are equal to 0
rosarium 0:2ddc0583bcec 218 * while all the other bitfields are equal to one.
rosarium 0:2ddc0583bcec 219 * @retval None.
rosarium 0:2ddc0583bcec 220 */
rosarium 0:2ddc0583bcec 221 void SpiritIrqGetMask(SpiritIrqs* pxIrqMask)
rosarium 0:2ddc0583bcec 222 {
rosarium 0:2ddc0583bcec 223 /* Reads IRQ_MASK registers */
rosarium 0:2ddc0583bcec 224 g_xStatus = SpiritSpiReadRegisters(IRQ_MASK3_BASE, 4, (uint8_t*)pxIrqMask);
rosarium 0:2ddc0583bcec 225 }
rosarium 0:2ddc0583bcec 226
rosarium 0:2ddc0583bcec 227
rosarium 0:2ddc0583bcec 228 /**
rosarium 0:2ddc0583bcec 229 * @brief Filla a pointer to a structure of SpiritIrqs type reading the IRQ_STATUS registers.
rosarium 0:2ddc0583bcec 230 * @param pxIrqStatus pointer to a variable of type @ref SpiritIrqs, through which the
rosarium 0:2ddc0583bcec 231 * user can read the status of all the IRQs. All the bitfields equals to one correspond
rosarium 0:2ddc0583bcec 232 * to the raised interrupts. This parameter is a pointer to a SpiritIrqs.
rosarium 0:2ddc0583bcec 233 * For example suppose that the XO settling timeout is raised as well as the Sync word
rosarium 0:2ddc0583bcec 234 * detection.
rosarium 0:2ddc0583bcec 235 * @code
rosarium 0:2ddc0583bcec 236 * SpiritIrqs myIrqStatus;
rosarium 0:2ddc0583bcec 237 * SpiritIrqGetStatus(&myIrqStatus);
rosarium 0:2ddc0583bcec 238 * @endcode
rosarium 0:2ddc0583bcec 239 * Then
rosarium 0:2ddc0583bcec 240 * myIrqStatus.IRQ_XO_COUNT_EXPIRED and myIrqStatus.IRQ_VALID_SYNC are equals to 1
rosarium 0:2ddc0583bcec 241 * while all the other bitfields are equals to zero.
rosarium 0:2ddc0583bcec 242 * @retval None.
rosarium 0:2ddc0583bcec 243 */
rosarium 0:2ddc0583bcec 244 void SpiritIrqGetStatus(SpiritIrqs* pxIrqStatus)
rosarium 0:2ddc0583bcec 245 {
rosarium 0:2ddc0583bcec 246 /* Reads IRQ_STATUS registers */
rosarium 0:2ddc0583bcec 247 g_xStatus = SpiritSpiReadRegisters(IRQ_STATUS3_BASE, 4, (uint8_t*)pxIrqStatus);
rosarium 0:2ddc0583bcec 248 }
rosarium 0:2ddc0583bcec 249
rosarium 0:2ddc0583bcec 250
rosarium 0:2ddc0583bcec 251 /**
rosarium 0:2ddc0583bcec 252 * @brief Clear the IRQ status registers.
rosarium 0:2ddc0583bcec 253 * @param None.
rosarium 0:2ddc0583bcec 254 * @retval None.
rosarium 0:2ddc0583bcec 255 */
rosarium 0:2ddc0583bcec 256 void SpiritIrqClearStatus(void)
rosarium 0:2ddc0583bcec 257 {
rosarium 0:2ddc0583bcec 258 uint8_t tempRegValue[4];
rosarium 0:2ddc0583bcec 259
rosarium 0:2ddc0583bcec 260 /* Reads the IRQ_STATUS registers clearing all the flags */
rosarium 0:2ddc0583bcec 261 g_xStatus = SpiritSpiReadRegisters(IRQ_STATUS3_BASE, 4, tempRegValue);
rosarium 0:2ddc0583bcec 262
rosarium 0:2ddc0583bcec 263 }
rosarium 0:2ddc0583bcec 264
rosarium 0:2ddc0583bcec 265
rosarium 0:2ddc0583bcec 266 /**
rosarium 0:2ddc0583bcec 267 * @brief Verifies if a specific IRQ has been generated.
rosarium 0:2ddc0583bcec 268 * The call resets all the IRQ status, so it can't be used in case of multiple raising interrupts.
rosarium 0:2ddc0583bcec 269 * @param xFlag IRQ flag to be checked.
rosarium 0:2ddc0583bcec 270 * This parameter can be any value of @ref IrqList.
rosarium 0:2ddc0583bcec 271 * @retval SpiritBool S_TRUE or S_FALSE.
rosarium 0:2ddc0583bcec 272 */
rosarium 0:2ddc0583bcec 273 SpiritBool SpiritIrqCheckFlag(IrqList xFlag)
rosarium 0:2ddc0583bcec 274 {
rosarium 0:2ddc0583bcec 275 uint8_t tempRegValue[4];
rosarium 0:2ddc0583bcec 276 uint32_t tempValue = 0;
rosarium 0:2ddc0583bcec 277 SpiritBool flag;
rosarium 0:2ddc0583bcec 278
rosarium 0:2ddc0583bcec 279 /* Check the parameters */
rosarium 0:2ddc0583bcec 280 s_assert_param(IS_SPIRIT_IRQ_LIST(xFlag));
rosarium 0:2ddc0583bcec 281
rosarium 0:2ddc0583bcec 282 /* Reads registers and build the status word */
rosarium 0:2ddc0583bcec 283 g_xStatus = SpiritSpiReadRegisters(IRQ_STATUS3_BASE, 4, tempRegValue);
rosarium 0:2ddc0583bcec 284 for(uint8_t i=0; i<4; i++)
rosarium 0:2ddc0583bcec 285 {
rosarium 0:2ddc0583bcec 286 tempValue += ((uint32_t)tempRegValue[i])<<(8*(3-i));
rosarium 0:2ddc0583bcec 287 }
rosarium 0:2ddc0583bcec 288
rosarium 0:2ddc0583bcec 289 if(tempValue & xFlag)
rosarium 0:2ddc0583bcec 290 {
rosarium 0:2ddc0583bcec 291 flag = S_TRUE;
rosarium 0:2ddc0583bcec 292 }
rosarium 0:2ddc0583bcec 293 else
rosarium 0:2ddc0583bcec 294 {
rosarium 0:2ddc0583bcec 295 flag = S_FALSE;
rosarium 0:2ddc0583bcec 296 }
rosarium 0:2ddc0583bcec 297
rosarium 0:2ddc0583bcec 298 return flag;
rosarium 0:2ddc0583bcec 299
rosarium 0:2ddc0583bcec 300 }
rosarium 0:2ddc0583bcec 301
rosarium 0:2ddc0583bcec 302
rosarium 0:2ddc0583bcec 303 /**
rosarium 0:2ddc0583bcec 304 *@}
rosarium 0:2ddc0583bcec 305 */
rosarium 0:2ddc0583bcec 306
rosarium 0:2ddc0583bcec 307
rosarium 0:2ddc0583bcec 308 /**
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 */
rosarium 0:2ddc0583bcec 316
rosarium 0:2ddc0583bcec 317
rosarium 0:2ddc0583bcec 318
rosarium 0:2ddc0583bcec 319
rosarium 0:2ddc0583bcec 320 /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/