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_Calibration.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 VCO-RCO calibration.
rosarium 0:2ddc0583bcec 8 *
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_Calibration.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
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_Calibration
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 Calibration_Private_TypesDefinitions Calibration 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 Calibration_Private_Defines Calibration 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 /**
rosarium 0:2ddc0583bcec 79 * @defgroup Calibration_Private_Macros Calibration Private Macros
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 /**
rosarium 0:2ddc0583bcec 89 * @defgroup Calibration_Private_Variables Calibration Private Variables
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 /**
rosarium 0:2ddc0583bcec 100 * @defgroup Calibration_Private_FunctionPrototypes Calibration Private Function Prototypes
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 /**
rosarium 0:2ddc0583bcec 110 * @defgroup Calibration_Private_Functions Calibration Private Functions
rosarium 0:2ddc0583bcec 111 * @{
rosarium 0:2ddc0583bcec 112 */
rosarium 0:2ddc0583bcec 113
rosarium 0:2ddc0583bcec 114 /**
rosarium 0:2ddc0583bcec 115 * @brief Enables or Disables the RCO calibration.
rosarium 0:2ddc0583bcec 116 * @param xNewState new state for RCO calibration.
rosarium 0:2ddc0583bcec 117 This parameter can be S_ENABLE or S_DISABLE.
rosarium 0:2ddc0583bcec 118 * @retval None.
rosarium 0:2ddc0583bcec 119 */
rosarium 0:2ddc0583bcec 120 void SpiritCalibrationRco(SpiritFunctionalState xNewState)
rosarium 0:2ddc0583bcec 121 {
rosarium 0:2ddc0583bcec 122 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 123
rosarium 0:2ddc0583bcec 124 /* Check the parameters */
rosarium 0:2ddc0583bcec 125 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
rosarium 0:2ddc0583bcec 126
rosarium 0:2ddc0583bcec 127 /* Reads the register value */
rosarium 0:2ddc0583bcec 128 g_xStatus = SpiritSpiReadRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 129
rosarium 0:2ddc0583bcec 130 /* Build new value for the register */
rosarium 0:2ddc0583bcec 131 if(xNewState==S_ENABLE)
rosarium 0:2ddc0583bcec 132 {
rosarium 0:2ddc0583bcec 133 tempRegValue |= PROTOCOL2_RCO_CALIBRATION_MASK;
rosarium 0:2ddc0583bcec 134 }
rosarium 0:2ddc0583bcec 135 else
rosarium 0:2ddc0583bcec 136 {
rosarium 0:2ddc0583bcec 137 tempRegValue &= ~PROTOCOL2_RCO_CALIBRATION_MASK;
rosarium 0:2ddc0583bcec 138 }
rosarium 0:2ddc0583bcec 139
rosarium 0:2ddc0583bcec 140 /* Writes register to enable or disable the RCO calibration */
rosarium 0:2ddc0583bcec 141 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 142
rosarium 0:2ddc0583bcec 143 }
rosarium 0:2ddc0583bcec 144
rosarium 0:2ddc0583bcec 145
rosarium 0:2ddc0583bcec 146 /**
rosarium 0:2ddc0583bcec 147 * @brief Enables or Disables the VCO calibration.
rosarium 0:2ddc0583bcec 148 * @param xNewState new state for VCO calibration.
rosarium 0:2ddc0583bcec 149 This parameter can be S_ENABLE or S_DISABLE.
rosarium 0:2ddc0583bcec 150 * @retval None.
rosarium 0:2ddc0583bcec 151 */
rosarium 0:2ddc0583bcec 152 void SpiritCalibrationVco(SpiritFunctionalState xNewState)
rosarium 0:2ddc0583bcec 153 {
rosarium 0:2ddc0583bcec 154 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 155
rosarium 0:2ddc0583bcec 156 /* Check the parameters */
rosarium 0:2ddc0583bcec 157 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
rosarium 0:2ddc0583bcec 158
rosarium 0:2ddc0583bcec 159 /* Reads the register value */
rosarium 0:2ddc0583bcec 160 g_xStatus = SpiritSpiReadRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 161
rosarium 0:2ddc0583bcec 162 /* Build new value for the register */
rosarium 0:2ddc0583bcec 163 if(xNewState==S_ENABLE)
rosarium 0:2ddc0583bcec 164 tempRegValue |= PROTOCOL2_VCO_CALIBRATION_MASK;
rosarium 0:2ddc0583bcec 165 else
rosarium 0:2ddc0583bcec 166 tempRegValue &= ~PROTOCOL2_VCO_CALIBRATION_MASK;
rosarium 0:2ddc0583bcec 167
rosarium 0:2ddc0583bcec 168 /* Writes register to enable or disable the VCO calibration */
rosarium 0:2ddc0583bcec 169 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 170
rosarium 0:2ddc0583bcec 171 }
rosarium 0:2ddc0583bcec 172
rosarium 0:2ddc0583bcec 173
rosarium 0:2ddc0583bcec 174 /**
rosarium 0:2ddc0583bcec 175 * @brief Sets the RCO calibration words.
rosarium 0:2ddc0583bcec 176 * @param cRwt RWT word for RCO calibration.
rosarium 0:2ddc0583bcec 177 * This parameter can be a value of uint8_t.
rosarium 0:2ddc0583bcec 178 * @param cRfb RFB word for RCO calibration.
rosarium 0:2ddc0583bcec 179 * This parameter can be a value of uint8_t.
rosarium 0:2ddc0583bcec 180 * @retval None.
rosarium 0:2ddc0583bcec 181 */
rosarium 0:2ddc0583bcec 182 void SpiritCalibrationSetRcoCalWords(uint8_t cRwt, uint8_t cRfb)
rosarium 0:2ddc0583bcec 183 {
rosarium 0:2ddc0583bcec 184 uint8_t tempRegValue[2];
rosarium 0:2ddc0583bcec 185
rosarium 0:2ddc0583bcec 186 /* Build the value of RWT and the MSbits of the RFB word */
rosarium 0:2ddc0583bcec 187 tempRegValue[0] = (cRwt << 4) | (cRfb >> 1);
rosarium 0:2ddc0583bcec 188
rosarium 0:2ddc0583bcec 189 /* Reads the register value to update the LSbit of RFB */
rosarium 0:2ddc0583bcec 190 g_xStatus = SpiritSpiReadRegisters(RCO_VCO_CALIBR_IN1_BASE, 1, &tempRegValue[1]);
rosarium 0:2ddc0583bcec 191
rosarium 0:2ddc0583bcec 192 /* Build new value for the register */
rosarium 0:2ddc0583bcec 193 tempRegValue[1] = (tempRegValue[1] & 0x7F) | (cRfb<<7);
rosarium 0:2ddc0583bcec 194
rosarium 0:2ddc0583bcec 195 /* Writes the new value for RCO calibration words */
rosarium 0:2ddc0583bcec 196 g_xStatus = SpiritSpiWriteRegisters(RCO_VCO_CALIBR_IN2_BASE, 2, tempRegValue);
rosarium 0:2ddc0583bcec 197
rosarium 0:2ddc0583bcec 198 }
rosarium 0:2ddc0583bcec 199
rosarium 0:2ddc0583bcec 200
rosarium 0:2ddc0583bcec 201 /**
rosarium 0:2ddc0583bcec 202 * @brief Returns the RCO calibration words.
rosarium 0:2ddc0583bcec 203 * @param pcRwt pointer to the variable in which the RWT word has to be stored.
rosarium 0:2ddc0583bcec 204 * This parameter is a variable of uint8_t*.
rosarium 0:2ddc0583bcec 205 * @param pcRfb pointer to the variable in which the RFB word has to be stored.
rosarium 0:2ddc0583bcec 206 * This parameter is a variable of uint8_t*.
rosarium 0:2ddc0583bcec 207 * @retval None.
rosarium 0:2ddc0583bcec 208 */
rosarium 0:2ddc0583bcec 209 void SpiritCalibrationGetRcoCalWords(uint8_t* pcRwt, uint8_t* pcRfb)
rosarium 0:2ddc0583bcec 210 {
rosarium 0:2ddc0583bcec 211 uint8_t tempRegValue[2];
rosarium 0:2ddc0583bcec 212
rosarium 0:2ddc0583bcec 213 /* Reads the registers values */
rosarium 0:2ddc0583bcec 214 g_xStatus = SpiritSpiReadRegisters(RCO_VCO_CALIBR_OUT1_BASE, 2, tempRegValue);
rosarium 0:2ddc0583bcec 215
rosarium 0:2ddc0583bcec 216 /* Build the RWT value */
rosarium 0:2ddc0583bcec 217 (*pcRwt) = tempRegValue[0] >> 4;
rosarium 0:2ddc0583bcec 218 /* Build the RFB value */
rosarium 0:2ddc0583bcec 219 (*pcRfb) = (tempRegValue[0] & 0x0F)<<1 | (tempRegValue[1]>>7);
rosarium 0:2ddc0583bcec 220
rosarium 0:2ddc0583bcec 221 }
rosarium 0:2ddc0583bcec 222
rosarium 0:2ddc0583bcec 223
rosarium 0:2ddc0583bcec 224 /**
rosarium 0:2ddc0583bcec 225 * @brief Returns the VCO calibration data from internal VCO calibrator.
rosarium 0:2ddc0583bcec 226 * @param None.
rosarium 0:2ddc0583bcec 227 * @retval uint8_t VCO calibration data word.
rosarium 0:2ddc0583bcec 228 */
rosarium 0:2ddc0583bcec 229 uint8_t SpiritCalibrationGetVcoCalData(void)
rosarium 0:2ddc0583bcec 230 {
rosarium 0:2ddc0583bcec 231 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 232
rosarium 0:2ddc0583bcec 233 /* Reads the register value */
rosarium 0:2ddc0583bcec 234 g_xStatus = SpiritSpiReadRegisters(RCO_VCO_CALIBR_OUT0_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 235
rosarium 0:2ddc0583bcec 236 /* Build and returns the VCO calibration data value */
rosarium 0:2ddc0583bcec 237 return (tempRegValue & 0x7F);
rosarium 0:2ddc0583bcec 238
rosarium 0:2ddc0583bcec 239 }
rosarium 0:2ddc0583bcec 240
rosarium 0:2ddc0583bcec 241
rosarium 0:2ddc0583bcec 242 /**
rosarium 0:2ddc0583bcec 243 * @brief Sets the VCO calibration data to be used in TX mode.
rosarium 0:2ddc0583bcec 244 * @param cVcoCalData calibration data word to be set.
rosarium 0:2ddc0583bcec 245 * This parameter is a variable of uint8_t.
rosarium 0:2ddc0583bcec 246 * @retval None.
rosarium 0:2ddc0583bcec 247 */
rosarium 0:2ddc0583bcec 248 void SpiritCalibrationSetVcoCalDataTx(uint8_t cVcoCalData)
rosarium 0:2ddc0583bcec 249 {
rosarium 0:2ddc0583bcec 250 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 251
rosarium 0:2ddc0583bcec 252 /* Reads the register value */
rosarium 0:2ddc0583bcec 253 g_xStatus = SpiritSpiReadRegisters(RCO_VCO_CALIBR_IN1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 254
rosarium 0:2ddc0583bcec 255 /* Build the value to be written */
rosarium 0:2ddc0583bcec 256 tempRegValue &= 0x80;
rosarium 0:2ddc0583bcec 257 tempRegValue |= cVcoCalData;
rosarium 0:2ddc0583bcec 258
rosarium 0:2ddc0583bcec 259 /* Writes the new value of calibration data in TX */
rosarium 0:2ddc0583bcec 260 g_xStatus = SpiritSpiWriteRegisters(RCO_VCO_CALIBR_IN1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 261
rosarium 0:2ddc0583bcec 262 }
rosarium 0:2ddc0583bcec 263
rosarium 0:2ddc0583bcec 264
rosarium 0:2ddc0583bcec 265 /**
rosarium 0:2ddc0583bcec 266 * @brief Returns the actual VCO calibration data used in TX mode.
rosarium 0:2ddc0583bcec 267 * @param None.
rosarium 0:2ddc0583bcec 268 * @retval uint8_t Calibration data word used in TX mode.
rosarium 0:2ddc0583bcec 269 */
rosarium 0:2ddc0583bcec 270 uint8_t SpiritCalibrationGetVcoCalDataTx(void)
rosarium 0:2ddc0583bcec 271 {
rosarium 0:2ddc0583bcec 272 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 273
rosarium 0:2ddc0583bcec 274 /* Reads the register containing the calibration data word used in TX mode */
rosarium 0:2ddc0583bcec 275 g_xStatus = SpiritSpiReadRegisters(RCO_VCO_CALIBR_IN1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 276
rosarium 0:2ddc0583bcec 277 /* Mask the VCO_CALIBR_TX field and returns the value */
rosarium 0:2ddc0583bcec 278 return (tempRegValue & 0x7F);
rosarium 0:2ddc0583bcec 279
rosarium 0:2ddc0583bcec 280 }
rosarium 0:2ddc0583bcec 281
rosarium 0:2ddc0583bcec 282
rosarium 0:2ddc0583bcec 283 /**
rosarium 0:2ddc0583bcec 284 * @brief Sets the VCO calibration data to be used in RX mode.
rosarium 0:2ddc0583bcec 285 * @param cVcoCalData calibration data word to be set.
rosarium 0:2ddc0583bcec 286 * This parameter is a variable of uint8_t.
rosarium 0:2ddc0583bcec 287 * @retval None.
rosarium 0:2ddc0583bcec 288 */
rosarium 0:2ddc0583bcec 289 void SpiritCalibrationSetVcoCalDataRx(uint8_t cVcoCalData)
rosarium 0:2ddc0583bcec 290 {
rosarium 0:2ddc0583bcec 291 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 292
rosarium 0:2ddc0583bcec 293 /* Reads the register value */
rosarium 0:2ddc0583bcec 294 g_xStatus = SpiritSpiReadRegisters(RCO_VCO_CALIBR_IN0_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 295
rosarium 0:2ddc0583bcec 296 /* Build the value to be written */
rosarium 0:2ddc0583bcec 297 tempRegValue &= 0x80;
rosarium 0:2ddc0583bcec 298 tempRegValue |= cVcoCalData;
rosarium 0:2ddc0583bcec 299
rosarium 0:2ddc0583bcec 300 /* Writes the new value of calibration data in RX */
rosarium 0:2ddc0583bcec 301 g_xStatus = SpiritSpiWriteRegisters(RCO_VCO_CALIBR_IN0_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 Returns the actual VCO calibration data used in RX mode.
rosarium 0:2ddc0583bcec 308 * @param None.
rosarium 0:2ddc0583bcec 309 * @retval uint8_t Calibration data word used in RX mode.
rosarium 0:2ddc0583bcec 310 */
rosarium 0:2ddc0583bcec 311 uint8_t SpiritCalibrationGetVcoCalDataRx(void)
rosarium 0:2ddc0583bcec 312 {
rosarium 0:2ddc0583bcec 313 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 314
rosarium 0:2ddc0583bcec 315 /* Reads the register containing the calibration data word used in TX mode */
rosarium 0:2ddc0583bcec 316 g_xStatus = SpiritSpiReadRegisters(RCO_VCO_CALIBR_IN0_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 317
rosarium 0:2ddc0583bcec 318 /* Mask the VCO_CALIBR_RX field and returns the value */
rosarium 0:2ddc0583bcec 319 return (tempRegValue & 0x7F);
rosarium 0:2ddc0583bcec 320
rosarium 0:2ddc0583bcec 321 }
rosarium 0:2ddc0583bcec 322
rosarium 0:2ddc0583bcec 323
rosarium 0:2ddc0583bcec 324 /**
rosarium 0:2ddc0583bcec 325 * @brief Sets the VCO calibration window.
rosarium 0:2ddc0583bcec 326 * @param xRefWord value of REFWORD corresponding to the Ref_period according to the formula: CALIBRATION_WIN = 11*Ref_period/fxo.
rosarium 0:2ddc0583bcec 327 This parameter can be a value of @ref VcoWin.
rosarium 0:2ddc0583bcec 328 * @retval None.
rosarium 0:2ddc0583bcec 329 */
rosarium 0:2ddc0583bcec 330 void SpiritCalibrationSetVcoWindow(VcoWin xRefWord)
rosarium 0:2ddc0583bcec 331 {
rosarium 0:2ddc0583bcec 332 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 333
rosarium 0:2ddc0583bcec 334 /* Check the parameters */
rosarium 0:2ddc0583bcec 335 s_assert_param(IS_VCO_WIN(xRefWord));
rosarium 0:2ddc0583bcec 336
rosarium 0:2ddc0583bcec 337 /* Reads the register value */
rosarium 0:2ddc0583bcec 338 g_xStatus = SpiritSpiReadRegisters(SYNTH_CONFIG1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 339
rosarium 0:2ddc0583bcec 340 /* Build the values to be written */
rosarium 0:2ddc0583bcec 341 tempRegValue &= 0xFC;
rosarium 0:2ddc0583bcec 342 tempRegValue |= xRefWord;
rosarium 0:2ddc0583bcec 343
rosarium 0:2ddc0583bcec 344 /* Writes the new value of VCO calibration window */
rosarium 0:2ddc0583bcec 345 g_xStatus = SpiritSpiWriteRegisters(SYNTH_CONFIG1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 346
rosarium 0:2ddc0583bcec 347 }
rosarium 0:2ddc0583bcec 348
rosarium 0:2ddc0583bcec 349
rosarium 0:2ddc0583bcec 350 /**
rosarium 0:2ddc0583bcec 351 * @brief Returns the VCO calibration window.
rosarium 0:2ddc0583bcec 352 * @param None.
rosarium 0:2ddc0583bcec 353 * @retval VcoWin Value of REFWORD corresponding to the Ref_period according to the formula: CALIBRATION_WIN = 11*Ref_period/fxo.
rosarium 0:2ddc0583bcec 354 * This parameter can be a value of @ref VcoWin.
rosarium 0:2ddc0583bcec 355 */
rosarium 0:2ddc0583bcec 356 VcoWin SpiritCalibrationGetVcoWindow(void)
rosarium 0:2ddc0583bcec 357 {
rosarium 0:2ddc0583bcec 358 uint8_t tempRegValue1, tempRegValue2;
rosarium 0:2ddc0583bcec 359 VcoWin refWord;
rosarium 0:2ddc0583bcec 360
rosarium 0:2ddc0583bcec 361 /* Reads the register containing the REFWORD value */
rosarium 0:2ddc0583bcec 362 g_xStatus = SpiritSpiReadRegisters(SYNTH_CONFIG1_BASE, 1, &tempRegValue1);
rosarium 0:2ddc0583bcec 363
rosarium 0:2ddc0583bcec 364 /* Reads the Xtal configuration */
rosarium 0:2ddc0583bcec 365 g_xStatus = SpiritSpiReadRegisters(ANA_FUNC_CONF0_BASE, 1, &tempRegValue2);
rosarium 0:2ddc0583bcec 366
rosarium 0:2ddc0583bcec 367 /* Mask the REFWORD field */
rosarium 0:2ddc0583bcec 368 tempRegValue1 &= 0x03;
rosarium 0:2ddc0583bcec 369
rosarium 0:2ddc0583bcec 370 /* Mask the 24_26_MHz_SELECT field */
rosarium 0:2ddc0583bcec 371 tempRegValue2 = ((tempRegValue2 & 0x40)>>6);
rosarium 0:2ddc0583bcec 372
rosarium 0:2ddc0583bcec 373 /* In case of 26 MHz crystal */
rosarium 0:2ddc0583bcec 374 if(tempRegValue2)
rosarium 0:2ddc0583bcec 375 {
rosarium 0:2ddc0583bcec 376 switch(tempRegValue1)
rosarium 0:2ddc0583bcec 377 {
rosarium 0:2ddc0583bcec 378 case 0:
rosarium 0:2ddc0583bcec 379 refWord = CALIB_TIME_6_77_US_26MHZ;
rosarium 0:2ddc0583bcec 380 break;
rosarium 0:2ddc0583bcec 381 case 1:
rosarium 0:2ddc0583bcec 382 refWord = CALIB_TIME_13_54_US_26MHZ;
rosarium 0:2ddc0583bcec 383 break;
rosarium 0:2ddc0583bcec 384 case 2:
rosarium 0:2ddc0583bcec 385 refWord = CALIB_TIME_27_08_US_26MHZ;
rosarium 0:2ddc0583bcec 386 break;
rosarium 0:2ddc0583bcec 387 case 3:
rosarium 0:2ddc0583bcec 388 refWord = CALIB_TIME_54_15_US_26MHZ;
rosarium 0:2ddc0583bcec 389 break;
rosarium 0:2ddc0583bcec 390 }
rosarium 0:2ddc0583bcec 391 }
rosarium 0:2ddc0583bcec 392
rosarium 0:2ddc0583bcec 393 /* In case of 24 MHz crystal */
rosarium 0:2ddc0583bcec 394 else
rosarium 0:2ddc0583bcec 395 {
rosarium 0:2ddc0583bcec 396 switch(tempRegValue1)
rosarium 0:2ddc0583bcec 397 {
rosarium 0:2ddc0583bcec 398 case 0:
rosarium 0:2ddc0583bcec 399 refWord = CALIB_TIME_7_33_US_24MHZ;
rosarium 0:2ddc0583bcec 400 break;
rosarium 0:2ddc0583bcec 401 case 1:
rosarium 0:2ddc0583bcec 402 refWord = CALIB_TIME_14_67_US_24MHZ;
rosarium 0:2ddc0583bcec 403 break;
rosarium 0:2ddc0583bcec 404 case 2:
rosarium 0:2ddc0583bcec 405 refWord = CALIB_TIME_29_33_US_24MHZ;
rosarium 0:2ddc0583bcec 406 break;
rosarium 0:2ddc0583bcec 407 case 3:
rosarium 0:2ddc0583bcec 408 refWord = CALIB_TIME_58_67_US_24MHZ;
rosarium 0:2ddc0583bcec 409 break;
rosarium 0:2ddc0583bcec 410 }
rosarium 0:2ddc0583bcec 411 }
rosarium 0:2ddc0583bcec 412
rosarium 0:2ddc0583bcec 413 return refWord;
rosarium 0:2ddc0583bcec 414
rosarium 0:2ddc0583bcec 415 }
rosarium 0:2ddc0583bcec 416
rosarium 0:2ddc0583bcec 417 /**
rosarium 0:2ddc0583bcec 418 * @brief Selects a VCO.
rosarium 0:2ddc0583bcec 419 * @param xVco can be VCO_H or VCO_L according to which VCO select.
rosarium 0:2ddc0583bcec 420 * This parameter can be a value of @ref VcoSel.
rosarium 0:2ddc0583bcec 421 * @retval None.
rosarium 0:2ddc0583bcec 422 */
rosarium 0:2ddc0583bcec 423 void SpiritCalibrationSelectVco(VcoSel xVco)
rosarium 0:2ddc0583bcec 424 {
rosarium 0:2ddc0583bcec 425 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 426
rosarium 0:2ddc0583bcec 427 /* Check the parameter */
rosarium 0:2ddc0583bcec 428 s_assert_param(IS_VCO_SEL(xVco));
rosarium 0:2ddc0583bcec 429
rosarium 0:2ddc0583bcec 430 SpiritSpiReadRegisters(SYNTH_CONFIG1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 431
rosarium 0:2ddc0583bcec 432 tempRegValue &= 0xF9;
rosarium 0:2ddc0583bcec 433
rosarium 0:2ddc0583bcec 434 if(xVco == VCO_H)
rosarium 0:2ddc0583bcec 435 {
rosarium 0:2ddc0583bcec 436 tempRegValue |= 0x02;
rosarium 0:2ddc0583bcec 437
rosarium 0:2ddc0583bcec 438 }
rosarium 0:2ddc0583bcec 439 else
rosarium 0:2ddc0583bcec 440 {
rosarium 0:2ddc0583bcec 441 tempRegValue |= 0x04;
rosarium 0:2ddc0583bcec 442 }
rosarium 0:2ddc0583bcec 443 SpiritSpiWriteRegisters(SYNTH_CONFIG1_BASE, 1, &tempRegValue);
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 * @brief Returns the VCO selected.
rosarium 0:2ddc0583bcec 451 * @param void.
rosarium 0:2ddc0583bcec 452 * @retval VCO_H or VCO_L according to which VCO selected.
rosarium 0:2ddc0583bcec 453 * This parameter can be a value of @ref VcoSel.
rosarium 0:2ddc0583bcec 454 */
rosarium 0:2ddc0583bcec 455 VcoSel SpiritCalibrationGetVcoSelecttion(void)
rosarium 0:2ddc0583bcec 456 {
rosarium 0:2ddc0583bcec 457 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 458
rosarium 0:2ddc0583bcec 459 SpiritSpiReadRegisters(SYNTH_CONFIG1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 460
rosarium 0:2ddc0583bcec 461 tempRegValue = (tempRegValue>>1)&0x3;
rosarium 0:2ddc0583bcec 462
rosarium 0:2ddc0583bcec 463 if(tempRegValue == 0x01)
rosarium 0:2ddc0583bcec 464 {
rosarium 0:2ddc0583bcec 465 return VCO_H;
rosarium 0:2ddc0583bcec 466
rosarium 0:2ddc0583bcec 467 }
rosarium 0:2ddc0583bcec 468 else
rosarium 0:2ddc0583bcec 469 {
rosarium 0:2ddc0583bcec 470 return VCO_L;
rosarium 0:2ddc0583bcec 471 }
rosarium 0:2ddc0583bcec 472
rosarium 0:2ddc0583bcec 473 }
rosarium 0:2ddc0583bcec 474
rosarium 0:2ddc0583bcec 475
rosarium 0:2ddc0583bcec 476 /**
rosarium 0:2ddc0583bcec 477 *@}
rosarium 0:2ddc0583bcec 478 */
rosarium 0:2ddc0583bcec 479
rosarium 0:2ddc0583bcec 480 /**
rosarium 0:2ddc0583bcec 481 *@}
rosarium 0:2ddc0583bcec 482 */
rosarium 0:2ddc0583bcec 483
rosarium 0:2ddc0583bcec 484
rosarium 0:2ddc0583bcec 485 /**
rosarium 0:2ddc0583bcec 486 *@}
rosarium 0:2ddc0583bcec 487 */
rosarium 0:2ddc0583bcec 488
rosarium 0:2ddc0583bcec 489
rosarium 0:2ddc0583bcec 490
rosarium 0:2ddc0583bcec 491 /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/