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_Gpio.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 This file provides all the low level API to manage SPIRIT GPIO.
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_Gpio.h"
rosarium 0:2ddc0583bcec 41 #include "MCU_Interface.h"
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 /** @addtogroup SPIRIT_Gpio
rosarium 0:2ddc0583bcec 50 * @{
rosarium 0:2ddc0583bcec 51 */
rosarium 0:2ddc0583bcec 52
rosarium 0:2ddc0583bcec 53
rosarium 0:2ddc0583bcec 54 /** @defgroup Gpio_Private_TypesDefinitions GPIO Private Types Definitions
rosarium 0:2ddc0583bcec 55 * @{
rosarium 0:2ddc0583bcec 56 */
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 /** @defgroup Gpio_Private_Defines GPIO Private Defines
rosarium 0:2ddc0583bcec 65 * @{
rosarium 0:2ddc0583bcec 66 */
rosarium 0:2ddc0583bcec 67
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 /** @defgroup Gpio_Private_Macros GPIO Private Macros
rosarium 0:2ddc0583bcec 76 * @{
rosarium 0:2ddc0583bcec 77 */
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 /** @defgroup Gpio_Private_Variables GPIO Private Variables
rosarium 0:2ddc0583bcec 87 * @{
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 /** @defgroup Gpio_Private_FunctionPrototypes GPIO Private Function Prototypes
rosarium 0:2ddc0583bcec 98 * @{
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 Gpio_Private_Functions GPIO Private Functions
rosarium 0:2ddc0583bcec 109 * @{
rosarium 0:2ddc0583bcec 110 */
rosarium 0:2ddc0583bcec 111
rosarium 0:2ddc0583bcec 112 /**
rosarium 0:2ddc0583bcec 113 * @brief Initializes the SPIRIT GPIOx according to the specified
rosarium 0:2ddc0583bcec 114 * parameters in the pxGpioInitStruct.
rosarium 0:2ddc0583bcec 115 * @param pxGpioInitStruct pointer to a SGpioInit structure that
rosarium 0:2ddc0583bcec 116 * contains the configuration information for the specified SPIRIT GPIO.
rosarium 0:2ddc0583bcec 117 * @retval None.
rosarium 0:2ddc0583bcec 118 */
rosarium 0:2ddc0583bcec 119 void SpiritGpioInit(SGpioInit* pxGpioInitStruct)
rosarium 0:2ddc0583bcec 120 {
rosarium 0:2ddc0583bcec 121 uint8_t tempRegValue = 0x00;
rosarium 0:2ddc0583bcec 122
rosarium 0:2ddc0583bcec 123 /* Check the parameters */
rosarium 0:2ddc0583bcec 124 s_assert_param(IS_SPIRIT_GPIO(pxGpioInitStruct->xSpiritGpioPin));
rosarium 0:2ddc0583bcec 125 s_assert_param(IS_SPIRIT_GPIO_MODE(pxGpioInitStruct->xSpiritGpioMode));
rosarium 0:2ddc0583bcec 126 s_assert_param(IS_SPIRIT_GPIO_IO(pxGpioInitStruct->xSpiritGpioIO));
rosarium 0:2ddc0583bcec 127
rosarium 0:2ddc0583bcec 128 tempRegValue = ((uint8_t)(pxGpioInitStruct->xSpiritGpioMode) | (uint8_t)(pxGpioInitStruct->xSpiritGpioIO));
rosarium 0:2ddc0583bcec 129
rosarium 0:2ddc0583bcec 130 g_xStatus = SpiritSpiWriteRegisters(pxGpioInitStruct->xSpiritGpioPin, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 131
rosarium 0:2ddc0583bcec 132 }
rosarium 0:2ddc0583bcec 133
rosarium 0:2ddc0583bcec 134
rosarium 0:2ddc0583bcec 135 /**
rosarium 0:2ddc0583bcec 136 * @brief Enables or Disables the output of temperature sensor on SPIRIT GPIO_0.
rosarium 0:2ddc0583bcec 137 * @param xNewState new state for temperature sensor.
rosarium 0:2ddc0583bcec 138 * This parameter can be: S_ENABLE or S_DISABLE.
rosarium 0:2ddc0583bcec 139 * @retval None.
rosarium 0:2ddc0583bcec 140 */
rosarium 0:2ddc0583bcec 141 void SpiritGpioTemperatureSensor(SpiritFunctionalState xNewState)
rosarium 0:2ddc0583bcec 142 {
rosarium 0:2ddc0583bcec 143 uint8_t tempRegValue = 0x00;
rosarium 0:2ddc0583bcec 144 uint8_t gpio0tempRegValue = 0x00;
rosarium 0:2ddc0583bcec 145
rosarium 0:2ddc0583bcec 146 /* Check the parameters */
rosarium 0:2ddc0583bcec 147 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
rosarium 0:2ddc0583bcec 148
rosarium 0:2ddc0583bcec 149 /* Reads the ANA_FUNC_CONF0 register and mask the result to enable or disable the
rosarium 0:2ddc0583bcec 150 temperature sensor */
rosarium 0:2ddc0583bcec 151 g_xStatus = SpiritSpiReadRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 152 if(xNewState == S_ENABLE)
rosarium 0:2ddc0583bcec 153 {
rosarium 0:2ddc0583bcec 154 tempRegValue |= TEMPERATURE_SENSOR_MASK;
rosarium 0:2ddc0583bcec 155 }
rosarium 0:2ddc0583bcec 156 else
rosarium 0:2ddc0583bcec 157 {
rosarium 0:2ddc0583bcec 158 tempRegValue &= (~TEMPERATURE_SENSOR_MASK);
rosarium 0:2ddc0583bcec 159 gpio0tempRegValue = 0x0A; /* Default value */
rosarium 0:2ddc0583bcec 160 }
rosarium 0:2ddc0583bcec 161 g_xStatus = SpiritSpiWriteRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 162
rosarium 0:2ddc0583bcec 163 /* Sets the SPIRIT GPIO_0 according to input request */
rosarium 0:2ddc0583bcec 164 g_xStatus = SpiritSpiWriteRegisters(GPIO0_CONF_BASE, 1, &gpio0tempRegValue);
rosarium 0:2ddc0583bcec 165
rosarium 0:2ddc0583bcec 166 }
rosarium 0:2ddc0583bcec 167
rosarium 0:2ddc0583bcec 168
rosarium 0:2ddc0583bcec 169 /**
rosarium 0:2ddc0583bcec 170 * @brief Forces SPIRIT GPIO_x configured as digital output, to VDD or GND.
rosarium 0:2ddc0583bcec 171 * @param xGpioX Specifies the GPIO to be configured.
rosarium 0:2ddc0583bcec 172 * This parameter can be one of following parameters:
rosarium 0:2ddc0583bcec 173 * @arg SPIRIT_GPIO_0: SPIRIT GPIO_0
rosarium 0:2ddc0583bcec 174 * @arg SPIRIT_GPIO_1: SPIRIT GPIO_1
rosarium 0:2ddc0583bcec 175 * @arg SPIRIT_GPIO_2: SPIRIT GPIO_2
rosarium 0:2ddc0583bcec 176 * @arg SPIRIT_GPIO_3: SPIRIT GPIO_3
rosarium 0:2ddc0583bcec 177 * @param xLevel Specifies the level.
rosarium 0:2ddc0583bcec 178 * This parameter can be: HIGH or LOW.
rosarium 0:2ddc0583bcec 179 * @retval None.
rosarium 0:2ddc0583bcec 180 */
rosarium 0:2ddc0583bcec 181 void SpiritGpioSetLevel(SpiritGpioPin xGpioX, OutputLevel xLevel)
rosarium 0:2ddc0583bcec 182 {
rosarium 0:2ddc0583bcec 183 uint8_t tempRegValue = 0x00;
rosarium 0:2ddc0583bcec 184
rosarium 0:2ddc0583bcec 185 /* Check the parameters */
rosarium 0:2ddc0583bcec 186 s_assert_param(IS_SPIRIT_GPIO(xGpioX));
rosarium 0:2ddc0583bcec 187 s_assert_param(IS_SPIRIT_GPIO_LEVEL(xLevel));
rosarium 0:2ddc0583bcec 188
rosarium 0:2ddc0583bcec 189 /* Reads the SPIRIT_GPIOx register and mask the GPIO_SELECT field */
rosarium 0:2ddc0583bcec 190 g_xStatus = SpiritSpiReadRegisters(xGpioX, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 191 tempRegValue &= 0x04;
rosarium 0:2ddc0583bcec 192
rosarium 0:2ddc0583bcec 193 /* Sets the value of the SPIRIT GPIO register according to the specified level */
rosarium 0:2ddc0583bcec 194 if(xLevel == HIGH)
rosarium 0:2ddc0583bcec 195 {
rosarium 0:2ddc0583bcec 196 tempRegValue |= (uint8_t)SPIRIT_GPIO_DIG_OUT_VDD | (uint8_t)SPIRIT_GPIO_MODE_DIGITAL_OUTPUT_HP;
rosarium 0:2ddc0583bcec 197 }
rosarium 0:2ddc0583bcec 198 else
rosarium 0:2ddc0583bcec 199 {
rosarium 0:2ddc0583bcec 200 tempRegValue |= (uint8_t)SPIRIT_GPIO_DIG_OUT_GND | (uint8_t)SPIRIT_GPIO_MODE_DIGITAL_OUTPUT_HP;
rosarium 0:2ddc0583bcec 201 }
rosarium 0:2ddc0583bcec 202
rosarium 0:2ddc0583bcec 203 /* Writes the SPIRIT GPIO register */
rosarium 0:2ddc0583bcec 204 g_xStatus = SpiritSpiWriteRegisters(xGpioX, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 205
rosarium 0:2ddc0583bcec 206 }
rosarium 0:2ddc0583bcec 207
rosarium 0:2ddc0583bcec 208
rosarium 0:2ddc0583bcec 209 /**
rosarium 0:2ddc0583bcec 210 * @brief Returns output value (VDD or GND) of SPIRIT GPIO_x, when it is configured as digital output.
rosarium 0:2ddc0583bcec 211 * @param xGpioX Specifies the GPIO to be read.
rosarium 0:2ddc0583bcec 212 * This parameter can be one of following parameters:
rosarium 0:2ddc0583bcec 213 * @arg SPIRIT_GPIO_0: SPIRIT GPIO_0
rosarium 0:2ddc0583bcec 214 * @arg SPIRIT_GPIO_1: SPIRIT GPIO_1
rosarium 0:2ddc0583bcec 215 * @arg SPIRIT_GPIO_2: SPIRIT GPIO_2
rosarium 0:2ddc0583bcec 216 * @arg SPIRIT_GPIO_3: SPIRIT GPIO_3
rosarium 0:2ddc0583bcec 217 * @retval OutputLevel Logical level of selected GPIO configured as digital output.
rosarium 0:2ddc0583bcec 218 * This parameter can be: HIGH or LOW.
rosarium 0:2ddc0583bcec 219 */
rosarium 0:2ddc0583bcec 220 OutputLevel SpiritGpioGetLevel(SpiritGpioPin xGpioX)
rosarium 0:2ddc0583bcec 221 {
rosarium 0:2ddc0583bcec 222 uint8_t tempRegValue = 0x00;
rosarium 0:2ddc0583bcec 223 OutputLevel level;
rosarium 0:2ddc0583bcec 224
rosarium 0:2ddc0583bcec 225 /* Check the parameters */
rosarium 0:2ddc0583bcec 226 s_assert_param(IS_SPIRIT_GPIO(xGpioX));
rosarium 0:2ddc0583bcec 227
rosarium 0:2ddc0583bcec 228 /* Reads the SPIRIT_GPIOx register */
rosarium 0:2ddc0583bcec 229 g_xStatus = SpiritSpiReadRegisters(xGpioX, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 230
rosarium 0:2ddc0583bcec 231 /* Mask the GPIO_SELECT field and returns the value according */
rosarium 0:2ddc0583bcec 232 tempRegValue &= 0xF8;
rosarium 0:2ddc0583bcec 233 if(tempRegValue == SPIRIT_GPIO_DIG_OUT_VDD)
rosarium 0:2ddc0583bcec 234 {
rosarium 0:2ddc0583bcec 235 level = HIGH;
rosarium 0:2ddc0583bcec 236 }
rosarium 0:2ddc0583bcec 237 else
rosarium 0:2ddc0583bcec 238 {
rosarium 0:2ddc0583bcec 239 level = LOW;
rosarium 0:2ddc0583bcec 240 }
rosarium 0:2ddc0583bcec 241
rosarium 0:2ddc0583bcec 242 return level;
rosarium 0:2ddc0583bcec 243
rosarium 0:2ddc0583bcec 244 }
rosarium 0:2ddc0583bcec 245
rosarium 0:2ddc0583bcec 246
rosarium 0:2ddc0583bcec 247 /**
rosarium 0:2ddc0583bcec 248 * @brief Enables or Disables the MCU clock output.
rosarium 0:2ddc0583bcec 249 * @param xNewState new state for the MCU clock output.
rosarium 0:2ddc0583bcec 250 * This parameter can be: S_ENABLE or S_DISABLE.
rosarium 0:2ddc0583bcec 251 * @retval None.
rosarium 0:2ddc0583bcec 252 */
rosarium 0:2ddc0583bcec 253 void SpiritGpioClockOutput(SpiritFunctionalState xNewState)
rosarium 0:2ddc0583bcec 254 {
rosarium 0:2ddc0583bcec 255 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 256
rosarium 0:2ddc0583bcec 257 /* Check the parameters */
rosarium 0:2ddc0583bcec 258 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
rosarium 0:2ddc0583bcec 259
rosarium 0:2ddc0583bcec 260 /* Reads the MCU_CK_CONF register and mask the result to enable or disable the clock output */
rosarium 0:2ddc0583bcec 261 g_xStatus = SpiritSpiReadRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 262
rosarium 0:2ddc0583bcec 263 if(xNewState)
rosarium 0:2ddc0583bcec 264 {
rosarium 0:2ddc0583bcec 265 tempRegValue |= MCU_CK_ENABLE;
rosarium 0:2ddc0583bcec 266 }
rosarium 0:2ddc0583bcec 267 else
rosarium 0:2ddc0583bcec 268 {
rosarium 0:2ddc0583bcec 269 tempRegValue &= (~MCU_CK_ENABLE);
rosarium 0:2ddc0583bcec 270 }
rosarium 0:2ddc0583bcec 271
rosarium 0:2ddc0583bcec 272 /* Writes the MCU_CK_CONF register */
rosarium 0:2ddc0583bcec 273 g_xStatus = SpiritSpiWriteRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 274
rosarium 0:2ddc0583bcec 275 }
rosarium 0:2ddc0583bcec 276
rosarium 0:2ddc0583bcec 277
rosarium 0:2ddc0583bcec 278 /**
rosarium 0:2ddc0583bcec 279 * @brief Initializes the SPIRIT Clock Output according to the specified
rosarium 0:2ddc0583bcec 280 * parameters in the xClockOutputInitStruct.
rosarium 0:2ddc0583bcec 281 * @param pxClockOutputInitStruct pointer to a ClockOutputInit structure that
rosarium 0:2ddc0583bcec 282 * contains the configuration information for the SPIRIT Clock Output.
rosarium 0:2ddc0583bcec 283 * @retval None.
rosarium 0:2ddc0583bcec 284 * @note The function SpiritGpioClockOutput() must be called in order to enable
rosarium 0:2ddc0583bcec 285 * or disable the MCU clock dividers.
rosarium 0:2ddc0583bcec 286 */
rosarium 0:2ddc0583bcec 287 void SpiritGpioClockOutputInit(ClockOutputInit* pxClockOutputInitStruct)
rosarium 0:2ddc0583bcec 288 {
rosarium 0:2ddc0583bcec 289 uint8_t tempRegValue = 0x00;
rosarium 0:2ddc0583bcec 290
rosarium 0:2ddc0583bcec 291 /* Check the parameters */
rosarium 0:2ddc0583bcec 292 s_assert_param(IS_SPIRIT_CLOCK_OUTPUT_XO(pxClockOutputInitStruct->xClockOutputXOPrescaler));
rosarium 0:2ddc0583bcec 293 s_assert_param(IS_SPIRIT_CLOCK_OUTPUT_RCO(pxClockOutputInitStruct->xClockOutputRCOPrescaler));
rosarium 0:2ddc0583bcec 294 s_assert_param(IS_SPIRIT_CLOCK_OUTPUT_EXTRA_CYCLES(pxClockOutputInitStruct->xExtraClockCycles));
rosarium 0:2ddc0583bcec 295
rosarium 0:2ddc0583bcec 296 /* Calculates the register value to write according to the specified configuration */
rosarium 0:2ddc0583bcec 297 tempRegValue = ((uint8_t)(pxClockOutputInitStruct->xClockOutputXOPrescaler) | (uint8_t)(pxClockOutputInitStruct->xClockOutputRCOPrescaler) | \
rosarium 0:2ddc0583bcec 298 (uint8_t)(pxClockOutputInitStruct->xExtraClockCycles));
rosarium 0:2ddc0583bcec 299
rosarium 0:2ddc0583bcec 300 /* Writes the MCU_CLOCK register */
rosarium 0:2ddc0583bcec 301 g_xStatus = SpiritSpiWriteRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 302
rosarium 0:2ddc0583bcec 303 }
rosarium 0:2ddc0583bcec 304
rosarium 0:2ddc0583bcec 305
rosarium 0:2ddc0583bcec 306 /**
rosarium 0:2ddc0583bcec 307 * @brief Sets the XO ratio as clock output.
rosarium 0:2ddc0583bcec 308 * @param xXOPrescaler the XO prescaler to be used as clock output.
rosarium 0:2ddc0583bcec 309 * This parameter can be any value of @ref ClockOutputXOPrescaler .
rosarium 0:2ddc0583bcec 310 * @retval None
rosarium 0:2ddc0583bcec 311 */
rosarium 0:2ddc0583bcec 312 void SpiritGpioSetXOPrescaler(ClockOutputXOPrescaler xXOPrescaler)
rosarium 0:2ddc0583bcec 313 {
rosarium 0:2ddc0583bcec 314 uint8_t tempRegValue = 0x00;
rosarium 0:2ddc0583bcec 315
rosarium 0:2ddc0583bcec 316 /* Check the parameters */
rosarium 0:2ddc0583bcec 317 s_assert_param(IS_SPIRIT_CLOCK_OUTPUT_XO(xXOPrescaler));
rosarium 0:2ddc0583bcec 318
rosarium 0:2ddc0583bcec 319 /* Reads the MCU_CLK_CONFIG register */
rosarium 0:2ddc0583bcec 320 g_xStatus = SpiritSpiReadRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 321
rosarium 0:2ddc0583bcec 322 /* Mask the XO_RATIO field and writes the new value */
rosarium 0:2ddc0583bcec 323 tempRegValue &= 0x61;
rosarium 0:2ddc0583bcec 324 tempRegValue |= ((uint8_t)xXOPrescaler);
rosarium 0:2ddc0583bcec 325
rosarium 0:2ddc0583bcec 326 /* Writes the new XO prescaler in the MCU_CLOCK register */
rosarium 0:2ddc0583bcec 327 g_xStatus = SpiritSpiWriteRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 328
rosarium 0:2ddc0583bcec 329 }
rosarium 0:2ddc0583bcec 330
rosarium 0:2ddc0583bcec 331
rosarium 0:2ddc0583bcec 332 /**
rosarium 0:2ddc0583bcec 333 * @brief Returns the settled XO prescaler as clock output.
rosarium 0:2ddc0583bcec 334 * @param None.
rosarium 0:2ddc0583bcec 335 * @retval ClockOutputXOPrescaler Settled XO prescaler used for clock
rosarium 0:2ddc0583bcec 336 * output. This parameter can be a value of @ref ClockOutputXOPrescaler .
rosarium 0:2ddc0583bcec 337 */
rosarium 0:2ddc0583bcec 338 ClockOutputXOPrescaler SpiritGpioGetXOPrescaler(void)
rosarium 0:2ddc0583bcec 339 {
rosarium 0:2ddc0583bcec 340 uint8_t tempRegValue = 0x00;
rosarium 0:2ddc0583bcec 341
rosarium 0:2ddc0583bcec 342 /* Reads the MCU_CLK_CONFIG register */
rosarium 0:2ddc0583bcec 343 g_xStatus = SpiritSpiReadRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 344
rosarium 0:2ddc0583bcec 345 /* Mask the XO_RATIO field and return the value */
rosarium 0:2ddc0583bcec 346 return ((ClockOutputXOPrescaler)(tempRegValue & 0x1E));
rosarium 0:2ddc0583bcec 347
rosarium 0:2ddc0583bcec 348 }
rosarium 0:2ddc0583bcec 349
rosarium 0:2ddc0583bcec 350
rosarium 0:2ddc0583bcec 351 /**
rosarium 0:2ddc0583bcec 352 * @brief Sets the RCO ratio as clock output
rosarium 0:2ddc0583bcec 353 * @param xRCOPrescaler the RCO prescaler to be used as clock output.
rosarium 0:2ddc0583bcec 354 * This parameter can be any value of @ref ClockOutputRCOPrescaler .
rosarium 0:2ddc0583bcec 355 * @retval None.
rosarium 0:2ddc0583bcec 356 */
rosarium 0:2ddc0583bcec 357 void SpiritGpioSetRCOPrescaler(ClockOutputRCOPrescaler xRCOPrescaler)
rosarium 0:2ddc0583bcec 358 {
rosarium 0:2ddc0583bcec 359 uint8_t tempRegValue = 0x00;
rosarium 0:2ddc0583bcec 360
rosarium 0:2ddc0583bcec 361 /* Check the parameters */
rosarium 0:2ddc0583bcec 362 s_assert_param(IS_SPIRIT_CLOCK_OUTPUT_RCO(xRCOPrescaler));
rosarium 0:2ddc0583bcec 363
rosarium 0:2ddc0583bcec 364 /* Reads the MCU_CLK_CONFIG register */
rosarium 0:2ddc0583bcec 365 g_xStatus = SpiritSpiReadRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 366
rosarium 0:2ddc0583bcec 367 /* Mask the RCO_RATIO field and writes the new value */
rosarium 0:2ddc0583bcec 368 tempRegValue &= 0xFE;
rosarium 0:2ddc0583bcec 369 tempRegValue |= ((uint8_t)xRCOPrescaler);
rosarium 0:2ddc0583bcec 370
rosarium 0:2ddc0583bcec 371 /* Writes the new RCO prescaler in the MCU_CLOCK register */
rosarium 0:2ddc0583bcec 372 g_xStatus = SpiritSpiWriteRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 373
rosarium 0:2ddc0583bcec 374 }
rosarium 0:2ddc0583bcec 375
rosarium 0:2ddc0583bcec 376
rosarium 0:2ddc0583bcec 377 /**
rosarium 0:2ddc0583bcec 378 * @brief Returns the settled RCO prescaler as clock output.
rosarium 0:2ddc0583bcec 379 * @param None.
rosarium 0:2ddc0583bcec 380 * @retval ClockOutputRCOPrescaler Settled RCO prescaler used for clock
rosarium 0:2ddc0583bcec 381 * output. This parameter can be a value of @ref ClockOutputRCOPrescaler.
rosarium 0:2ddc0583bcec 382 */
rosarium 0:2ddc0583bcec 383 ClockOutputRCOPrescaler SpiritGpioGetRCOPrescaler(void)
rosarium 0:2ddc0583bcec 384 {
rosarium 0:2ddc0583bcec 385 uint8_t tempRegValue = 0x00;
rosarium 0:2ddc0583bcec 386
rosarium 0:2ddc0583bcec 387 /* Reads the MCU_CLK_CONFIG register */
rosarium 0:2ddc0583bcec 388 g_xStatus = SpiritSpiReadRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 389
rosarium 0:2ddc0583bcec 390 /* Mask the RCO_RATIO field and returns the value */
rosarium 0:2ddc0583bcec 391 return ((ClockOutputRCOPrescaler)(tempRegValue & 0x01));
rosarium 0:2ddc0583bcec 392
rosarium 0:2ddc0583bcec 393 }
rosarium 0:2ddc0583bcec 394
rosarium 0:2ddc0583bcec 395
rosarium 0:2ddc0583bcec 396 /**
rosarium 0:2ddc0583bcec 397 * @brief Sets the RCO ratio as clock output.
rosarium 0:2ddc0583bcec 398 * @param xExtraCycles the number of extra clock cycles provided before switching
rosarium 0:2ddc0583bcec 399 * to STANDBY state. This parameter can be any value of @ref ExtraClockCycles .
rosarium 0:2ddc0583bcec 400 * @retval None.
rosarium 0:2ddc0583bcec 401 */
rosarium 0:2ddc0583bcec 402 void SpiritGpioSetExtraClockCycles(ExtraClockCycles xExtraCycles)
rosarium 0:2ddc0583bcec 403 {
rosarium 0:2ddc0583bcec 404 uint8_t tempRegValue = 0x00;
rosarium 0:2ddc0583bcec 405
rosarium 0:2ddc0583bcec 406 /* Check the parameters */
rosarium 0:2ddc0583bcec 407 s_assert_param(IS_SPIRIT_CLOCK_OUTPUT_EXTRA_CYCLES(xExtraCycles));
rosarium 0:2ddc0583bcec 408
rosarium 0:2ddc0583bcec 409 /* Reads the MCU_CLK_CONFIG register */
rosarium 0:2ddc0583bcec 410 g_xStatus = SpiritSpiReadRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 411
rosarium 0:2ddc0583bcec 412 /* Mask the CLOCK_TAIL field and writes the new value */
rosarium 0:2ddc0583bcec 413 tempRegValue &= 0x9F;
rosarium 0:2ddc0583bcec 414 tempRegValue |= ((uint8_t)xExtraCycles);
rosarium 0:2ddc0583bcec 415
rosarium 0:2ddc0583bcec 416 /* Writes the new number of extra clock cycles in the MCU_CLOCK register */
rosarium 0:2ddc0583bcec 417 g_xStatus = SpiritSpiWriteRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 418
rosarium 0:2ddc0583bcec 419 }
rosarium 0:2ddc0583bcec 420
rosarium 0:2ddc0583bcec 421
rosarium 0:2ddc0583bcec 422 /**
rosarium 0:2ddc0583bcec 423 * @brief Returns the settled RCO prescaler as clock output.
rosarium 0:2ddc0583bcec 424 * @param None.
rosarium 0:2ddc0583bcec 425 * @retval ExtraClockCycles Settled number of extra clock cycles
rosarium 0:2ddc0583bcec 426 * provided before switching to STANDBY state. This parameter can be
rosarium 0:2ddc0583bcec 427 * any value of @ref ExtraClockCycles .
rosarium 0:2ddc0583bcec 428 */
rosarium 0:2ddc0583bcec 429 ExtraClockCycles SpiritGpioGetExtraClockCycles(void)
rosarium 0:2ddc0583bcec 430 {
rosarium 0:2ddc0583bcec 431 uint8_t tempRegValue = 0x00;
rosarium 0:2ddc0583bcec 432
rosarium 0:2ddc0583bcec 433 /* Reads the MCU_CLK_CONFIG register */
rosarium 0:2ddc0583bcec 434 g_xStatus = SpiritSpiReadRegisters(MCU_CK_CONF_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 435
rosarium 0:2ddc0583bcec 436 /* Mask the CLOCK_TAIL field and returns the value */
rosarium 0:2ddc0583bcec 437 return ((ExtraClockCycles)(tempRegValue & 0x60));
rosarium 0:2ddc0583bcec 438
rosarium 0:2ddc0583bcec 439 }
rosarium 0:2ddc0583bcec 440
rosarium 0:2ddc0583bcec 441
rosarium 0:2ddc0583bcec 442 /**
rosarium 0:2ddc0583bcec 443 * @}
rosarium 0:2ddc0583bcec 444 */
rosarium 0:2ddc0583bcec 445
rosarium 0:2ddc0583bcec 446
rosarium 0:2ddc0583bcec 447 /**
rosarium 0:2ddc0583bcec 448 * @}
rosarium 0:2ddc0583bcec 449 */
rosarium 0:2ddc0583bcec 450
rosarium 0:2ddc0583bcec 451
rosarium 0:2ddc0583bcec 452 /**
rosarium 0:2ddc0583bcec 453 * @}
rosarium 0:2ddc0583bcec 454 */
rosarium 0:2ddc0583bcec 455
rosarium 0:2ddc0583bcec 456
rosarium 0:2ddc0583bcec 457
rosarium 0:2ddc0583bcec 458 /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/