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_Management.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 The management layer for SPIRIT1 library.
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_Management.h"
rosarium 0:2ddc0583bcec 41
rosarium 0:2ddc0583bcec 42 /**
rosarium 0:2ddc0583bcec 43 * @addtogroup SPIRIT_Libraries
rosarium 0:2ddc0583bcec 44 * @{
rosarium 0:2ddc0583bcec 45 */
rosarium 0:2ddc0583bcec 46
rosarium 0:2ddc0583bcec 47
rosarium 0:2ddc0583bcec 48 /**
rosarium 0:2ddc0583bcec 49 * @defgroup SPIRIT_MANAGEMENT SPIRIT Management
rosarium 0:2ddc0583bcec 50 * @{
rosarium 0:2ddc0583bcec 51 */
rosarium 0:2ddc0583bcec 52
rosarium 0:2ddc0583bcec 53 /**
rosarium 0:2ddc0583bcec 54 * @brief BS value to write in the SYNT0 register according to the selected band
rosarium 0:2ddc0583bcec 55 */
rosarium 0:2ddc0583bcec 56 static const uint8_t s_vectcBandRegValue[4]={SYNT0_BS_6, SYNT0_BS_12, SYNT0_BS_16, SYNT0_BS_32};
rosarium 0:2ddc0583bcec 57
rosarium 0:2ddc0583bcec 58 #define COMMUNICATION_STATE_TX 0
rosarium 0:2ddc0583bcec 59 #define COMMUNICATION_STATE_RX 1
rosarium 0:2ddc0583bcec 60 #define COMMUNICATION_STATE_NONE 2
rosarium 0:2ddc0583bcec 61
rosarium 0:2ddc0583bcec 62 static uint32_t s_nDesiredFrequency;
rosarium 0:2ddc0583bcec 63
rosarium 0:2ddc0583bcec 64 static volatile uint8_t s_cCommunicationState = COMMUNICATION_STATE_NONE;
rosarium 0:2ddc0583bcec 65
rosarium 0:2ddc0583bcec 66
rosarium 0:2ddc0583bcec 67 /**
rosarium 0:2ddc0583bcec 68 * @brief Factor is: B/2 used in the formula for SYNTH word calculation
rosarium 0:2ddc0583bcec 69 */
rosarium 0:2ddc0583bcec 70 static const uint8_t s_vectcBHalfFactor[4]={(HIGH_BAND_FACTOR/2), (MIDDLE_BAND_FACTOR/2), (LOW_BAND_FACTOR/2), (VERY_LOW_BAND_FACTOR/2)};
rosarium 0:2ddc0583bcec 71
rosarium 0:2ddc0583bcec 72
rosarium 0:2ddc0583bcec 73 /**
rosarium 0:2ddc0583bcec 74 * @defgroup SPIRIT_MANAGEMENT_FUNCTIONS SPIRIT Management Functions
rosarium 0:2ddc0583bcec 75 * @{
rosarium 0:2ddc0583bcec 76 */
rosarium 0:2ddc0583bcec 77
rosarium 0:2ddc0583bcec 78
rosarium 0:2ddc0583bcec 79 /**
rosarium 0:2ddc0583bcec 80 * @defgroup WORKAROUND_FUNCTIONS SPIRIT Management Workaround Functions
rosarium 0:2ddc0583bcec 81 * @{
rosarium 0:2ddc0583bcec 82 */
rosarium 0:2ddc0583bcec 83
rosarium 0:2ddc0583bcec 84 /**
rosarium 0:2ddc0583bcec 85 * @brief Private SpiritRadioSetFrequencyBase function only used in SpiritManagementWaVcoCalibration.
rosarium 0:2ddc0583bcec 86 * @param lFBase the base carrier frequency expressed in Hz as unsigned word.
rosarium 0:2ddc0583bcec 87 * @retval None.
rosarium 0:2ddc0583bcec 88 */
rosarium 0:2ddc0583bcec 89 void SpiritManagementSetFrequencyBase(uint32_t lFBase)
rosarium 0:2ddc0583bcec 90 {
rosarium 0:2ddc0583bcec 91 uint32_t synthWord, Fc;
rosarium 0:2ddc0583bcec 92 uint8_t band = 0, anaRadioRegArray[4], wcp;
rosarium 0:2ddc0583bcec 93
rosarium 0:2ddc0583bcec 94 /* Check the parameter */
rosarium 0:2ddc0583bcec 95 s_assert_param(IS_FREQUENCY_BAND(lFBase));
rosarium 0:2ddc0583bcec 96
rosarium 0:2ddc0583bcec 97 /* Search the operating band */
rosarium 0:2ddc0583bcec 98 if(IS_FREQUENCY_BAND_HIGH(lFBase))
rosarium 0:2ddc0583bcec 99 {
rosarium 0:2ddc0583bcec 100 band = HIGH_BAND;
rosarium 0:2ddc0583bcec 101 }
rosarium 0:2ddc0583bcec 102 else if(IS_FREQUENCY_BAND_MIDDLE(lFBase))
rosarium 0:2ddc0583bcec 103 {
rosarium 0:2ddc0583bcec 104 band = MIDDLE_BAND;
rosarium 0:2ddc0583bcec 105 }
rosarium 0:2ddc0583bcec 106 else if(IS_FREQUENCY_BAND_LOW(lFBase))
rosarium 0:2ddc0583bcec 107 {
rosarium 0:2ddc0583bcec 108 band = LOW_BAND;
rosarium 0:2ddc0583bcec 109 }
rosarium 0:2ddc0583bcec 110 else if(IS_FREQUENCY_BAND_VERY_LOW(lFBase))
rosarium 0:2ddc0583bcec 111 {
rosarium 0:2ddc0583bcec 112 band = VERY_LOW_BAND;
rosarium 0:2ddc0583bcec 113 }
rosarium 0:2ddc0583bcec 114
rosarium 0:2ddc0583bcec 115 int32_t FOffset = SpiritRadioGetFrequencyOffset();
rosarium 0:2ddc0583bcec 116 uint32_t lChannelSpace = SpiritRadioGetChannelSpace();
rosarium 0:2ddc0583bcec 117 uint8_t cChannelNum = SpiritRadioGetChannel();
rosarium 0:2ddc0583bcec 118
rosarium 0:2ddc0583bcec 119 /* Calculates the channel center frequency */
rosarium 0:2ddc0583bcec 120 Fc = lFBase + FOffset + lChannelSpace*cChannelNum;
rosarium 0:2ddc0583bcec 121
rosarium 0:2ddc0583bcec 122 /* Reads the reference divider */
rosarium 0:2ddc0583bcec 123 uint8_t cRefDiv = (uint8_t)SpiritRadioGetRefDiv()+1;
rosarium 0:2ddc0583bcec 124
rosarium 0:2ddc0583bcec 125 switch(band)
rosarium 0:2ddc0583bcec 126 {
rosarium 0:2ddc0583bcec 127 case VERY_LOW_BAND:
rosarium 0:2ddc0583bcec 128 if(Fc<161281250)
rosarium 0:2ddc0583bcec 129 {
rosarium 0:2ddc0583bcec 130 SpiritCalibrationSelectVco(VCO_L);
rosarium 0:2ddc0583bcec 131 }
rosarium 0:2ddc0583bcec 132 else
rosarium 0:2ddc0583bcec 133 {
rosarium 0:2ddc0583bcec 134 SpiritCalibrationSelectVco(VCO_H);
rosarium 0:2ddc0583bcec 135 }
rosarium 0:2ddc0583bcec 136 break;
rosarium 0:2ddc0583bcec 137
rosarium 0:2ddc0583bcec 138 case LOW_BAND:
rosarium 0:2ddc0583bcec 139 if(Fc<322562500)
rosarium 0:2ddc0583bcec 140 {
rosarium 0:2ddc0583bcec 141 SpiritCalibrationSelectVco(VCO_L);
rosarium 0:2ddc0583bcec 142 }
rosarium 0:2ddc0583bcec 143 else
rosarium 0:2ddc0583bcec 144 {
rosarium 0:2ddc0583bcec 145 SpiritCalibrationSelectVco(VCO_H);
rosarium 0:2ddc0583bcec 146 }
rosarium 0:2ddc0583bcec 147 break;
rosarium 0:2ddc0583bcec 148
rosarium 0:2ddc0583bcec 149 case MIDDLE_BAND:
rosarium 0:2ddc0583bcec 150 if(Fc<430083334)
rosarium 0:2ddc0583bcec 151 {
rosarium 0:2ddc0583bcec 152 SpiritCalibrationSelectVco(VCO_L);
rosarium 0:2ddc0583bcec 153 }
rosarium 0:2ddc0583bcec 154 else
rosarium 0:2ddc0583bcec 155 {
rosarium 0:2ddc0583bcec 156 SpiritCalibrationSelectVco(VCO_H);
rosarium 0:2ddc0583bcec 157 }
rosarium 0:2ddc0583bcec 158 break;
rosarium 0:2ddc0583bcec 159
rosarium 0:2ddc0583bcec 160 case HIGH_BAND:
rosarium 0:2ddc0583bcec 161 if(Fc<860166667)
rosarium 0:2ddc0583bcec 162 {
rosarium 0:2ddc0583bcec 163 SpiritCalibrationSelectVco(VCO_L);
rosarium 0:2ddc0583bcec 164 }
rosarium 0:2ddc0583bcec 165 else
rosarium 0:2ddc0583bcec 166 {
rosarium 0:2ddc0583bcec 167 SpiritCalibrationSelectVco(VCO_H);
rosarium 0:2ddc0583bcec 168 }
rosarium 0:2ddc0583bcec 169 }
rosarium 0:2ddc0583bcec 170
rosarium 0:2ddc0583bcec 171 /* Search the VCO charge pump word and set the corresponding register */
rosarium 0:2ddc0583bcec 172 wcp = SpiritRadioSearchWCP(Fc);
rosarium 0:2ddc0583bcec 173
rosarium 0:2ddc0583bcec 174 synthWord = (uint32_t)(lFBase*(((double)(FBASE_DIVIDER*cRefDiv*s_vectcBHalfFactor[band]))/SpiritRadioGetXtalFrequency()));
rosarium 0:2ddc0583bcec 175
rosarium 0:2ddc0583bcec 176 /* Build the array of registers values for the analog part */
rosarium 0:2ddc0583bcec 177 anaRadioRegArray[0] = (uint8_t)(((synthWord>>21)&(0x0000001F))|(wcp<<5));
rosarium 0:2ddc0583bcec 178 anaRadioRegArray[1] = (uint8_t)((synthWord>>13)&(0x000000FF));
rosarium 0:2ddc0583bcec 179 anaRadioRegArray[2] = (uint8_t)((synthWord>>5)&(0x000000FF));
rosarium 0:2ddc0583bcec 180 anaRadioRegArray[3] = (uint8_t)(((synthWord&0x0000001F)<<3)| s_vectcBandRegValue[band]);
rosarium 0:2ddc0583bcec 181
rosarium 0:2ddc0583bcec 182 /* Configures the needed Analog Radio registers */
rosarium 0:2ddc0583bcec 183 g_xStatus = SpiritSpiWriteRegisters(SYNT3_BASE, 4, anaRadioRegArray);
rosarium 0:2ddc0583bcec 184 }
rosarium 0:2ddc0583bcec 185
rosarium 0:2ddc0583bcec 186 uint8_t SpiritManagementWaVcoCalibration(void)
rosarium 0:2ddc0583bcec 187 {
rosarium 0:2ddc0583bcec 188 uint8_t s_cVcoWordRx;
rosarium 0:2ddc0583bcec 189 uint8_t s_cVcoWordTx;
rosarium 0:2ddc0583bcec 190 uint32_t nFreq;
rosarium 0:2ddc0583bcec 191 uint8_t cRestore = 0;
rosarium 0:2ddc0583bcec 192 uint8_t cStandby = 0;
rosarium 0:2ddc0583bcec 193 uint32_t xtal_frequency = SpiritRadioGetXtalFrequency();
rosarium 0:2ddc0583bcec 194
rosarium 0:2ddc0583bcec 195 /* Enable the reference divider if the XTAL is between 48 and 52 MHz */
rosarium 0:2ddc0583bcec 196 if(xtal_frequency>DOUBLE_XTAL_THR)
rosarium 0:2ddc0583bcec 197 {
rosarium 0:2ddc0583bcec 198 if(!SpiritRadioGetRefDiv())
rosarium 0:2ddc0583bcec 199 {
rosarium 0:2ddc0583bcec 200 cRestore = 1;
rosarium 0:2ddc0583bcec 201 nFreq = SpiritRadioGetFrequencyBase();
rosarium 0:2ddc0583bcec 202 SpiritRadioSetRefDiv(S_ENABLE);
rosarium 0:2ddc0583bcec 203 SpiritManagementSetFrequencyBase(nFreq);
rosarium 0:2ddc0583bcec 204 }
rosarium 0:2ddc0583bcec 205 }
rosarium 0:2ddc0583bcec 206 nFreq = SpiritRadioGetFrequencyBase();
rosarium 0:2ddc0583bcec 207
rosarium 0:2ddc0583bcec 208 /* Increase the VCO current */
rosarium 0:2ddc0583bcec 209 uint8_t tmp = 0x19; SpiritSpiWriteRegisters(0xA1,1,&tmp);
rosarium 0:2ddc0583bcec 210
rosarium 0:2ddc0583bcec 211 SpiritCalibrationVco(S_ENABLE);
rosarium 0:2ddc0583bcec 212
rosarium 0:2ddc0583bcec 213 SpiritRefreshStatus();
rosarium 0:2ddc0583bcec 214 if(g_xStatus.MC_STATE == MC_STATE_STANDBY)
rosarium 0:2ddc0583bcec 215 {
rosarium 0:2ddc0583bcec 216 cStandby = 1;
rosarium 0:2ddc0583bcec 217 SpiritCmdStrobeReady();
rosarium 0:2ddc0583bcec 218 do{
rosarium 0:2ddc0583bcec 219 SpiritRefreshStatus();
rosarium 0:2ddc0583bcec 220 if(g_xStatus.MC_STATE == 0x13)
rosarium 0:2ddc0583bcec 221 {
rosarium 0:2ddc0583bcec 222 return 1;
rosarium 0:2ddc0583bcec 223 }
rosarium 0:2ddc0583bcec 224 }while(g_xStatus.MC_STATE != MC_STATE_READY);
rosarium 0:2ddc0583bcec 225 }
rosarium 0:2ddc0583bcec 226
rosarium 0:2ddc0583bcec 227 SpiritCmdStrobeLockTx();
rosarium 0:2ddc0583bcec 228
rosarium 0:2ddc0583bcec 229 do{
rosarium 0:2ddc0583bcec 230 SpiritRefreshStatus();
rosarium 0:2ddc0583bcec 231 if(g_xStatus.MC_STATE == 0x13)
rosarium 0:2ddc0583bcec 232 {
rosarium 0:2ddc0583bcec 233 return 1;
rosarium 0:2ddc0583bcec 234 }
rosarium 0:2ddc0583bcec 235 }while(g_xStatus.MC_STATE != MC_STATE_LOCK);
rosarium 0:2ddc0583bcec 236
rosarium 0:2ddc0583bcec 237 s_cVcoWordTx = SpiritCalibrationGetVcoCalData();
rosarium 0:2ddc0583bcec 238
rosarium 0:2ddc0583bcec 239 SpiritCmdStrobeReady();
rosarium 0:2ddc0583bcec 240
rosarium 0:2ddc0583bcec 241 do{
rosarium 0:2ddc0583bcec 242 SpiritRefreshStatus();
rosarium 0:2ddc0583bcec 243 }while(g_xStatus.MC_STATE != MC_STATE_READY);
rosarium 0:2ddc0583bcec 244
rosarium 0:2ddc0583bcec 245
rosarium 0:2ddc0583bcec 246 SpiritCmdStrobeLockRx();
rosarium 0:2ddc0583bcec 247
rosarium 0:2ddc0583bcec 248 do{
rosarium 0:2ddc0583bcec 249 SpiritRefreshStatus();
rosarium 0:2ddc0583bcec 250 if(g_xStatus.MC_STATE == 0x13)
rosarium 0:2ddc0583bcec 251 {
rosarium 0:2ddc0583bcec 252 return 1;
rosarium 0:2ddc0583bcec 253 }
rosarium 0:2ddc0583bcec 254 }while(g_xStatus.MC_STATE != MC_STATE_LOCK);
rosarium 0:2ddc0583bcec 255
rosarium 0:2ddc0583bcec 256 s_cVcoWordRx = SpiritCalibrationGetVcoCalData();
rosarium 0:2ddc0583bcec 257
rosarium 0:2ddc0583bcec 258 SpiritCmdStrobeReady();
rosarium 0:2ddc0583bcec 259
rosarium 0:2ddc0583bcec 260 do{
rosarium 0:2ddc0583bcec 261 SpiritRefreshStatus();
rosarium 0:2ddc0583bcec 262 if(g_xStatus.MC_STATE == 0x13)
rosarium 0:2ddc0583bcec 263 {
rosarium 0:2ddc0583bcec 264 return 1;
rosarium 0:2ddc0583bcec 265 }
rosarium 0:2ddc0583bcec 266 }while(g_xStatus.MC_STATE != MC_STATE_READY);
rosarium 0:2ddc0583bcec 267
rosarium 0:2ddc0583bcec 268 if(cStandby == 1)
rosarium 0:2ddc0583bcec 269 {
rosarium 0:2ddc0583bcec 270 SpiritCmdStrobeStandby();
rosarium 0:2ddc0583bcec 271 }
rosarium 0:2ddc0583bcec 272 SpiritCalibrationVco(S_DISABLE);
rosarium 0:2ddc0583bcec 273
rosarium 0:2ddc0583bcec 274 /* Disable the reference divider if the XTAL is between 48 and 52 MHz */
rosarium 0:2ddc0583bcec 275 if(cRestore)
rosarium 0:2ddc0583bcec 276 {
rosarium 0:2ddc0583bcec 277 SpiritRadioSetRefDiv(S_DISABLE);
rosarium 0:2ddc0583bcec 278 SpiritManagementSetFrequencyBase(nFreq);
rosarium 0:2ddc0583bcec 279 }
rosarium 0:2ddc0583bcec 280
rosarium 0:2ddc0583bcec 281 /* Restore the VCO current */
rosarium 0:2ddc0583bcec 282 tmp = 0x11; SpiritSpiWriteRegisters(0xA1,1,&tmp);
rosarium 0:2ddc0583bcec 283
rosarium 0:2ddc0583bcec 284 SpiritCalibrationSetVcoCalDataTx(s_cVcoWordTx);
rosarium 0:2ddc0583bcec 285 SpiritCalibrationSetVcoCalDataRx(s_cVcoWordRx);
rosarium 0:2ddc0583bcec 286
rosarium 0:2ddc0583bcec 287 return 0;
rosarium 0:2ddc0583bcec 288 }
rosarium 0:2ddc0583bcec 289
rosarium 0:2ddc0583bcec 290
rosarium 0:2ddc0583bcec 291 void SpiritManagementWaCmdStrobeTx(void)
rosarium 0:2ddc0583bcec 292 {
rosarium 0:2ddc0583bcec 293 if(s_cCommunicationState != COMMUNICATION_STATE_TX)
rosarium 0:2ddc0583bcec 294 {
rosarium 0:2ddc0583bcec 295 //uint32_t xtal_frequency = SpiritRadioGetXtalFrequency();
rosarium 0:2ddc0583bcec 296
rosarium 0:2ddc0583bcec 297 /* To achive the max output power */
rosarium 0:2ddc0583bcec 298 if(s_nDesiredFrequency>=150000000 && s_nDesiredFrequency<=470000000)
rosarium 0:2ddc0583bcec 299 {
rosarium 0:2ddc0583bcec 300 /* Optimal setting for Tx mode only */
rosarium 0:2ddc0583bcec 301 SpiritRadioSetPACwc(LOAD_3_6_PF);
rosarium 0:2ddc0583bcec 302 }
rosarium 0:2ddc0583bcec 303 else
rosarium 0:2ddc0583bcec 304 {
rosarium 0:2ddc0583bcec 305 /* Optimal setting for Tx mode only */
rosarium 0:2ddc0583bcec 306 SpiritRadioSetPACwc(LOAD_0_PF);
rosarium 0:2ddc0583bcec 307 }
rosarium 0:2ddc0583bcec 308
rosarium 0:2ddc0583bcec 309 uint8_t tmp = 0x11; SpiritSpiWriteRegisters(0xa9, 1, &tmp); /* Enable VCO_L buffer */
rosarium 0:2ddc0583bcec 310 tmp = 0x20; SpiritSpiWriteRegisters(PM_CONFIG1_BASE, 1, &tmp); /* Set SMPS switching frequency */
rosarium 0:2ddc0583bcec 311
rosarium 0:2ddc0583bcec 312 s_cCommunicationState = COMMUNICATION_STATE_TX;
rosarium 0:2ddc0583bcec 313 }
rosarium 0:2ddc0583bcec 314 }
rosarium 0:2ddc0583bcec 315
rosarium 0:2ddc0583bcec 316
rosarium 0:2ddc0583bcec 317 void SpiritManagementWaCmdStrobeRx(void)
rosarium 0:2ddc0583bcec 318 {
rosarium 0:2ddc0583bcec 319 if(s_cCommunicationState != COMMUNICATION_STATE_RX)
rosarium 0:2ddc0583bcec 320 {
rosarium 0:2ddc0583bcec 321 uint8_t tmp = 0x98; SpiritSpiWriteRegisters(PM_CONFIG1_BASE, 1, &tmp); /* Set SMPS switching frequency */
rosarium 0:2ddc0583bcec 322 SpiritRadioSetPACwc(LOAD_0_PF); /* Set the correct CWC parameter */
rosarium 0:2ddc0583bcec 323
rosarium 0:2ddc0583bcec 324 s_cCommunicationState = COMMUNICATION_STATE_RX;
rosarium 0:2ddc0583bcec 325 }
rosarium 0:2ddc0583bcec 326 }
rosarium 0:2ddc0583bcec 327
rosarium 0:2ddc0583bcec 328 void SpiritManagementWaTRxFcMem(uint32_t nDesiredFreq)
rosarium 0:2ddc0583bcec 329 {
rosarium 0:2ddc0583bcec 330 s_cCommunicationState = COMMUNICATION_STATE_NONE;
rosarium 0:2ddc0583bcec 331 s_nDesiredFrequency = nDesiredFreq;
rosarium 0:2ddc0583bcec 332 }
rosarium 0:2ddc0583bcec 333
rosarium 0:2ddc0583bcec 334
rosarium 0:2ddc0583bcec 335 void SpiritManagementWaExtraCurrent(void)
rosarium 0:2ddc0583bcec 336 {
rosarium 0:2ddc0583bcec 337 uint8_t tmp= 0xCA;SpiritSpiWriteRegisters(0xB2, 1, &tmp);
rosarium 0:2ddc0583bcec 338 tmp= 0x04;SpiritSpiWriteRegisters(0xA8, 1, &tmp);
rosarium 0:2ddc0583bcec 339 /* just a read to loose some microsecs more */
rosarium 0:2ddc0583bcec 340 SpiritSpiReadRegisters(0xA8, 1, &tmp);
rosarium 0:2ddc0583bcec 341 tmp= 0x00;SpiritSpiWriteRegisters(0xA8, 1, &tmp);
rosarium 0:2ddc0583bcec 342 }
rosarium 0:2ddc0583bcec 343
rosarium 0:2ddc0583bcec 344 /**
rosarium 0:2ddc0583bcec 345 * @}
rosarium 0:2ddc0583bcec 346 */
rosarium 0:2ddc0583bcec 347
rosarium 0:2ddc0583bcec 348
rosarium 0:2ddc0583bcec 349
rosarium 0:2ddc0583bcec 350 /**
rosarium 0:2ddc0583bcec 351 * @}
rosarium 0:2ddc0583bcec 352 */
rosarium 0:2ddc0583bcec 353
rosarium 0:2ddc0583bcec 354
rosarium 0:2ddc0583bcec 355 /**
rosarium 0:2ddc0583bcec 356 * @}
rosarium 0:2ddc0583bcec 357 */
rosarium 0:2ddc0583bcec 358
rosarium 0:2ddc0583bcec 359 /**
rosarium 0:2ddc0583bcec 360 * @}
rosarium 0:2ddc0583bcec 361 */
rosarium 0:2ddc0583bcec 362
rosarium 0:2ddc0583bcec 363
rosarium 0:2ddc0583bcec 364 /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/