Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Prototype RF Driver for STM Sub-1 GHz RF Expansion Boards based on the SPSGRF-868 and SPSGRF-915 Modules for STM32 Nucleo
Currently supported boards:
Note, in order to use expansion board X-NUCLEO-IDS01A4 in mbed you need to perform the following HW modifications on the board:
- Unmount resistor
R4 - Mount resistor
R7
Furthermore, on some Nucleo development boards (e.g. the NUCLEO_F429ZI), in order to be able to use Ethernet together with these Sub-1 GHz RF expansion boards, you need to compile this driver with macro SPIRIT1_SPI_MOSI=PB_5 defined, while the development board typically requires some HW modification as e.g. described here!
This driver can be used together with the 6LoWPAN stack (a.k.a. Nanostack).
libs/spirit1/SPIRIT1_Library/Src/SPIRIT_Timer.c@0:4fb29d9ee571, 2016-10-13 (annotated)
- Committer:
- Wolfgang Betz
- Date:
- Thu Oct 13 15:41:39 2016 +0200
- Revision:
- 0:4fb29d9ee571
First compiling version (without warnings)
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Wolfgang Betz |
0:4fb29d9ee571 | 1 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 2 | ****************************************************************************** |
| Wolfgang Betz |
0:4fb29d9ee571 | 3 | * @file SPIRIT_Timer.c |
| Wolfgang Betz |
0:4fb29d9ee571 | 4 | * @author VMA division - AMS |
| Wolfgang Betz |
0:4fb29d9ee571 | 5 | * @version 3.2.2 |
| Wolfgang Betz |
0:4fb29d9ee571 | 6 | * @date 08-July-2015 |
| Wolfgang Betz |
0:4fb29d9ee571 | 7 | * @brief Configuration and management of SPIRIT timers. |
| Wolfgang Betz |
0:4fb29d9ee571 | 8 | * @details |
| Wolfgang Betz |
0:4fb29d9ee571 | 9 | * |
| Wolfgang Betz |
0:4fb29d9ee571 | 10 | * @attention |
| Wolfgang Betz |
0:4fb29d9ee571 | 11 | * |
| Wolfgang Betz |
0:4fb29d9ee571 | 12 | * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> |
| Wolfgang Betz |
0:4fb29d9ee571 | 13 | * |
| Wolfgang Betz |
0:4fb29d9ee571 | 14 | * Redistribution and use in source and binary forms, with or without modification, |
| Wolfgang Betz |
0:4fb29d9ee571 | 15 | * are permitted provided that the following conditions are met: |
| Wolfgang Betz |
0:4fb29d9ee571 | 16 | * 1. Redistributions of source code must retain the above copyright notice, |
| Wolfgang Betz |
0:4fb29d9ee571 | 17 | * this list of conditions and the following disclaimer. |
| Wolfgang Betz |
0:4fb29d9ee571 | 18 | * 2. Redistributions in binary form must reproduce the above copyright notice, |
| Wolfgang Betz |
0:4fb29d9ee571 | 19 | * this list of conditions and the following disclaimer in the documentation |
| Wolfgang Betz |
0:4fb29d9ee571 | 20 | * and/or other materials provided with the distribution. |
| Wolfgang Betz |
0:4fb29d9ee571 | 21 | * 3. Neither the name of STMicroelectronics nor the names of its contributors |
| Wolfgang Betz |
0:4fb29d9ee571 | 22 | * may be used to endorse or promote products derived from this software |
| Wolfgang Betz |
0:4fb29d9ee571 | 23 | * without specific prior written permission. |
| Wolfgang Betz |
0:4fb29d9ee571 | 24 | * |
| Wolfgang Betz |
0:4fb29d9ee571 | 25 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| Wolfgang Betz |
0:4fb29d9ee571 | 26 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| Wolfgang Betz |
0:4fb29d9ee571 | 27 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| Wolfgang Betz |
0:4fb29d9ee571 | 28 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
| Wolfgang Betz |
0:4fb29d9ee571 | 29 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| Wolfgang Betz |
0:4fb29d9ee571 | 30 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
| Wolfgang Betz |
0:4fb29d9ee571 | 31 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
| Wolfgang Betz |
0:4fb29d9ee571 | 32 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
| Wolfgang Betz |
0:4fb29d9ee571 | 33 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| Wolfgang Betz |
0:4fb29d9ee571 | 34 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| Wolfgang Betz |
0:4fb29d9ee571 | 35 | * |
| Wolfgang Betz |
0:4fb29d9ee571 | 36 | ****************************************************************************** |
| Wolfgang Betz |
0:4fb29d9ee571 | 37 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 38 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 39 | /* Includes ------------------------------------------------------------------*/ |
| Wolfgang Betz |
0:4fb29d9ee571 | 40 | #include "SPIRIT_Timer.h" |
| Wolfgang Betz |
0:4fb29d9ee571 | 41 | #include "SPIRIT_Radio.h" |
| Wolfgang Betz |
0:4fb29d9ee571 | 42 | #include "MCU_Interface.h" |
| Wolfgang Betz |
0:4fb29d9ee571 | 43 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 44 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 45 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 46 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 47 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 48 | * @addtogroup SPIRIT_Libraries |
| Wolfgang Betz |
0:4fb29d9ee571 | 49 | * @{ |
| Wolfgang Betz |
0:4fb29d9ee571 | 50 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 51 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 52 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 53 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 54 | * @addtogroup SPIRIT_Timer |
| Wolfgang Betz |
0:4fb29d9ee571 | 55 | * @{ |
| Wolfgang Betz |
0:4fb29d9ee571 | 56 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 57 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 58 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 59 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 60 | * @defgroup Timer_Private_TypesDefinitions Timer Private Types Definitions |
| Wolfgang Betz |
0:4fb29d9ee571 | 61 | * @{ |
| Wolfgang Betz |
0:4fb29d9ee571 | 62 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 63 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 64 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 65 | *@} |
| Wolfgang Betz |
0:4fb29d9ee571 | 66 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 67 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 68 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 69 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 70 | * @defgroup Timer_Private_Defines Timer Private Defines |
| Wolfgang Betz |
0:4fb29d9ee571 | 71 | * @{ |
| Wolfgang Betz |
0:4fb29d9ee571 | 72 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 73 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 74 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 75 | *@} |
| Wolfgang Betz |
0:4fb29d9ee571 | 76 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 77 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 78 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 79 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 80 | * @defgroup Timer_Private_Macros Timer Private Macros |
| Wolfgang Betz |
0:4fb29d9ee571 | 81 | * @{ |
| Wolfgang Betz |
0:4fb29d9ee571 | 82 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 83 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 84 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 85 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 86 | *@} |
| Wolfgang Betz |
0:4fb29d9ee571 | 87 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 88 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 89 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 90 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 91 | * @defgroup Timer_Private_Variables Timer Private Variables |
| Wolfgang Betz |
0:4fb29d9ee571 | 92 | * @{ |
| Wolfgang Betz |
0:4fb29d9ee571 | 93 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 94 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 95 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 96 | *@} |
| Wolfgang Betz |
0:4fb29d9ee571 | 97 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 98 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 99 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 100 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 101 | * @defgroup Timer_Private_FunctionPrototypes Timer Private Function Prototypes |
| Wolfgang Betz |
0:4fb29d9ee571 | 102 | * @{ |
| Wolfgang Betz |
0:4fb29d9ee571 | 103 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 104 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 105 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 106 | *@} |
| Wolfgang Betz |
0:4fb29d9ee571 | 107 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 108 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 109 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 110 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 111 | * @defgroup Timer_Private_Functions Timer Private Functions |
| Wolfgang Betz |
0:4fb29d9ee571 | 112 | * @{ |
| Wolfgang Betz |
0:4fb29d9ee571 | 113 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 114 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 115 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 116 | * @brief Enables or Disables the LDCR mode. |
| Wolfgang Betz |
0:4fb29d9ee571 | 117 | * @param xNewState new state for LDCR mode. |
| Wolfgang Betz |
0:4fb29d9ee571 | 118 | * This parameter can be: S_ENABLE or S_DISABLE. |
| Wolfgang Betz |
0:4fb29d9ee571 | 119 | * @retval None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 120 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 121 | void SpiritTimerLdcrMode(SpiritFunctionalState xNewState) |
| Wolfgang Betz |
0:4fb29d9ee571 | 122 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 123 | uint8_t tempRegValue; |
| Wolfgang Betz |
0:4fb29d9ee571 | 124 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 125 | /* Reads the register value */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 126 | g_xStatus = SpiritSpiReadRegisters(PROTOCOL2_BASE, 1, &tempRegValue); |
| Wolfgang Betz |
0:4fb29d9ee571 | 127 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 128 | /* Mask the read value to enable or disable the LDC mode */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 129 | if(xNewState==S_ENABLE) |
| Wolfgang Betz |
0:4fb29d9ee571 | 130 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 131 | tempRegValue |= PROTOCOL2_LDC_MODE_MASK; |
| Wolfgang Betz |
0:4fb29d9ee571 | 132 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 133 | else |
| Wolfgang Betz |
0:4fb29d9ee571 | 134 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 135 | tempRegValue &= ~PROTOCOL2_LDC_MODE_MASK; |
| Wolfgang Betz |
0:4fb29d9ee571 | 136 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 137 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 138 | /* Writes the register to Enable or Disable the LDCR mode */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 139 | g_xStatus = SpiritSpiWriteRegisters(PROTOCOL2_BASE, 1, &tempRegValue); |
| Wolfgang Betz |
0:4fb29d9ee571 | 140 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 141 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 142 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 143 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 144 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 145 | * @brief Enables or Disables the LDCR timer reloading with the value stored in the LDCR_RELOAD registers. |
| Wolfgang Betz |
0:4fb29d9ee571 | 146 | * @param xNewState new state for LDCR reloading. |
| Wolfgang Betz |
0:4fb29d9ee571 | 147 | * This parameter can be: S_ENABLE or S_DISABLE. |
| Wolfgang Betz |
0:4fb29d9ee571 | 148 | * @retval None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 149 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 150 | void SpiritTimerLdcrAutoReload(SpiritFunctionalState xNewState) |
| Wolfgang Betz |
0:4fb29d9ee571 | 151 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 152 | uint8_t tempRegValue; |
| Wolfgang Betz |
0:4fb29d9ee571 | 153 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 154 | /* Reads the register value */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 155 | g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue); |
| Wolfgang Betz |
0:4fb29d9ee571 | 156 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 157 | /* Mask te read value to enable or disable the reload on sync mode */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 158 | if(xNewState==S_ENABLE) |
| Wolfgang Betz |
0:4fb29d9ee571 | 159 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 160 | tempRegValue |= PROTOCOL1_LDC_RELOAD_ON_SYNC_MASK; |
| Wolfgang Betz |
0:4fb29d9ee571 | 161 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 162 | else |
| Wolfgang Betz |
0:4fb29d9ee571 | 163 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 164 | tempRegValue &= ~PROTOCOL1_LDC_RELOAD_ON_SYNC_MASK; |
| Wolfgang Betz |
0:4fb29d9ee571 | 165 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 166 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 167 | /* Writes the register to Enable or Disable the Auto Reload */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 168 | g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 1, &tempRegValue); |
| Wolfgang Betz |
0:4fb29d9ee571 | 169 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 170 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 171 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 172 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 173 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 174 | * @brief Returns the LDCR timer reload bit. |
| Wolfgang Betz |
0:4fb29d9ee571 | 175 | * @param None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 176 | * @retval SpiritFunctionalState: value of the reload bit. |
| Wolfgang Betz |
0:4fb29d9ee571 | 177 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 178 | SpiritFunctionalState SpiritTimerLdcrGetAutoReload(void) |
| Wolfgang Betz |
0:4fb29d9ee571 | 179 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 180 | uint8_t tempRegValue; |
| Wolfgang Betz |
0:4fb29d9ee571 | 181 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 182 | /* Reads the register value */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 183 | g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue); |
| Wolfgang Betz |
0:4fb29d9ee571 | 184 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 185 | return (SpiritFunctionalState)(tempRegValue & 0x80); |
| Wolfgang Betz |
0:4fb29d9ee571 | 186 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 187 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 188 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 189 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 190 | * @brief Sets the RX timeout timer initialization registers with the values of COUNTER and PRESCALER according to the formula: Trx=PRESCALER*COUNTER*Tck. |
| Wolfgang Betz |
0:4fb29d9ee571 | 191 | * Remember that it is possible to have infinite RX_Timeout writing 0 in the RX_Timeout_Counter and/or RX_Timeout_Prescaler registers. |
| Wolfgang Betz |
0:4fb29d9ee571 | 192 | * @param cCounter value for the timer counter. |
| Wolfgang Betz |
0:4fb29d9ee571 | 193 | * This parameter must be an uint8_t. |
| Wolfgang Betz |
0:4fb29d9ee571 | 194 | * @param cPrescaler value for the timer prescaler. |
| Wolfgang Betz |
0:4fb29d9ee571 | 195 | * This parameter must be an uint8_t. |
| Wolfgang Betz |
0:4fb29d9ee571 | 196 | * @retval None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 197 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 198 | void SpiritTimerSetRxTimeout(uint8_t cCounter , uint8_t cPrescaler) |
| Wolfgang Betz |
0:4fb29d9ee571 | 199 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 200 | uint8_t tempRegValue[2]={cPrescaler,cCounter}; |
| Wolfgang Betz |
0:4fb29d9ee571 | 201 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 202 | /* Writes the prescaler and counter value for RX timeout in the corresponding register */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 203 | g_xStatus = SpiritSpiWriteRegisters(TIMERS5_RX_TIMEOUT_PRESCALER_BASE, 2, tempRegValue); |
| Wolfgang Betz |
0:4fb29d9ee571 | 204 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 205 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 206 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 207 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 208 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 209 | * @brief Sets the RX timeout timer counter and prescaler from the desired value in ms. it is possible to fix the RX_Timeout to |
| Wolfgang Betz |
0:4fb29d9ee571 | 210 | * a minimum value of 50.417us to a maximum value of about 3.28 s. |
| Wolfgang Betz |
0:4fb29d9ee571 | 211 | * @param fDesiredMsec desired timer value. |
| Wolfgang Betz |
0:4fb29d9ee571 | 212 | * This parameter must be a float. |
| Wolfgang Betz |
0:4fb29d9ee571 | 213 | * @retval None |
| Wolfgang Betz |
0:4fb29d9ee571 | 214 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 215 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 216 | void SpiritTimerSetRxTimeoutMs(float fDesiredMsec) |
| Wolfgang Betz |
0:4fb29d9ee571 | 217 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 218 | uint8_t tempRegValue[2]; |
| Wolfgang Betz |
0:4fb29d9ee571 | 219 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 220 | /* Computes the counter and prescaler value */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 221 | SpiritTimerComputeRxTimeoutValues(fDesiredMsec , &tempRegValue[1] , &tempRegValue[0]); |
| Wolfgang Betz |
0:4fb29d9ee571 | 222 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 223 | /* Writes the prescaler and counter value for RX timeout in the corresponding register */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 224 | g_xStatus = SpiritSpiWriteRegisters(TIMERS5_RX_TIMEOUT_PRESCALER_BASE, 2, tempRegValue); |
| Wolfgang Betz |
0:4fb29d9ee571 | 225 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 226 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 227 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 228 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 229 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 230 | * @brief Sets the RX timeout timer counter. If it is equal to 0 the timeout is infinite. |
| Wolfgang Betz |
0:4fb29d9ee571 | 231 | * @param cCounter value for the timer counter. |
| Wolfgang Betz |
0:4fb29d9ee571 | 232 | * This parameter must be an uint8_t. |
| Wolfgang Betz |
0:4fb29d9ee571 | 233 | * @retval None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 234 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 235 | void SpiritTimerSetRxTimeoutCounter(uint8_t cCounter) |
| Wolfgang Betz |
0:4fb29d9ee571 | 236 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 237 | /* Writes the counter value for RX timeout in the corresponding register */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 238 | g_xStatus = SpiritSpiWriteRegisters(TIMERS4_RX_TIMEOUT_COUNTER_BASE, 1, &cCounter); |
| Wolfgang Betz |
0:4fb29d9ee571 | 239 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 240 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 241 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 242 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 243 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 244 | * @brief Sets the RX timeout timer prescaler. If it is equal to 0 the timeout is infinite. |
| Wolfgang Betz |
0:4fb29d9ee571 | 245 | * @param cPrescaler value for the timer prescaler. |
| Wolfgang Betz |
0:4fb29d9ee571 | 246 | * This parameter must be an uint8_t. |
| Wolfgang Betz |
0:4fb29d9ee571 | 247 | * @retval None |
| Wolfgang Betz |
0:4fb29d9ee571 | 248 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 249 | void SpiritTimerSetRxTimeoutPrescaler(uint8_t cPrescaler) |
| Wolfgang Betz |
0:4fb29d9ee571 | 250 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 251 | /* Writes the prescaler value for RX timeout in the corresponding register */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 252 | g_xStatus = SpiritSpiWriteRegisters(TIMERS5_RX_TIMEOUT_PRESCALER_BASE, 1, &cPrescaler); |
| Wolfgang Betz |
0:4fb29d9ee571 | 253 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 254 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 255 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 256 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 257 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 258 | * @brief Returns the RX timeout timer. |
| Wolfgang Betz |
0:4fb29d9ee571 | 259 | * @param pfTimeoutMsec pointer to the variable in which the timeout expressed in milliseconds has to be stored. |
| Wolfgang Betz |
0:4fb29d9ee571 | 260 | * If the returned value is 0, it means that the RX_Timeout is infinite. |
| Wolfgang Betz |
0:4fb29d9ee571 | 261 | * This parameter must be a float*. |
| Wolfgang Betz |
0:4fb29d9ee571 | 262 | * @param pcCounter pointer to the variable in which the timer counter has to be stored. |
| Wolfgang Betz |
0:4fb29d9ee571 | 263 | * This parameter must be an uint8_t*. |
| Wolfgang Betz |
0:4fb29d9ee571 | 264 | * @param pcPrescaler pointer to the variable in which the timer prescaler has to be stored. |
| Wolfgang Betz |
0:4fb29d9ee571 | 265 | * This parameter must be an uint8_t*. |
| Wolfgang Betz |
0:4fb29d9ee571 | 266 | * @retval None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 267 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 268 | void SpiritTimerGetRxTimeout(float* pfTimeoutMsec, uint8_t* pcCounter , uint8_t* pcPrescaler) |
| Wolfgang Betz |
0:4fb29d9ee571 | 269 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 270 | uint8_t tempRegValue[2]; |
| Wolfgang Betz |
0:4fb29d9ee571 | 271 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 272 | /* Reads the RX timeout registers value */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 273 | g_xStatus = SpiritSpiReadRegisters(TIMERS5_RX_TIMEOUT_PRESCALER_BASE, 2, tempRegValue); |
| Wolfgang Betz |
0:4fb29d9ee571 | 274 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 275 | /* Returns values */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 276 | (*pcPrescaler) = tempRegValue[0]; |
| Wolfgang Betz |
0:4fb29d9ee571 | 277 | (*pcCounter) = tempRegValue[1]; |
| Wolfgang Betz |
0:4fb29d9ee571 | 278 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 279 | float nXtalFrequency = (float)SpiritRadioGetXtalFrequency(); |
| Wolfgang Betz |
0:4fb29d9ee571 | 280 | if(nXtalFrequency>DOUBLE_XTAL_THR) { |
| Wolfgang Betz |
0:4fb29d9ee571 | 281 | nXtalFrequency /= 2.0; |
| Wolfgang Betz |
0:4fb29d9ee571 | 282 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 283 | nXtalFrequency /= 1000.0; |
| Wolfgang Betz |
0:4fb29d9ee571 | 284 | *pfTimeoutMsec = (float)((tempRegValue[0]+1)*tempRegValue[1]*(1210.0/nXtalFrequency)); |
| Wolfgang Betz |
0:4fb29d9ee571 | 285 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 286 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 287 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 288 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 289 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 290 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 291 | * @brief Sets the LDCR wake up timer initialization registers with the values of |
| Wolfgang Betz |
0:4fb29d9ee571 | 292 | * COUNTER and PRESCALER according to the formula: Twu=(PRESCALER +1)*(COUNTER+1)*Tck, where |
| Wolfgang Betz |
0:4fb29d9ee571 | 293 | * Tck = 28.818 us. The minimum vale of the wakeup timeout is 28.818us (PRESCALER and |
| Wolfgang Betz |
0:4fb29d9ee571 | 294 | * COUNTER equals to 0) and the maximum value is about 1.89 s (PRESCALER anc COUNTER equals |
| Wolfgang Betz |
0:4fb29d9ee571 | 295 | * to 255). |
| Wolfgang Betz |
0:4fb29d9ee571 | 296 | * @param cCounter value for the timer counter. |
| Wolfgang Betz |
0:4fb29d9ee571 | 297 | * This parameter must be an uint8_t. |
| Wolfgang Betz |
0:4fb29d9ee571 | 298 | * @param cPrescaler value for the timer prescaler. |
| Wolfgang Betz |
0:4fb29d9ee571 | 299 | * This parameter must be an uint8_t. |
| Wolfgang Betz |
0:4fb29d9ee571 | 300 | * @retval None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 301 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 302 | void SpiritTimerSetWakeUpTimer(uint8_t cCounter , uint8_t cPrescaler) |
| Wolfgang Betz |
0:4fb29d9ee571 | 303 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 304 | uint8_t tempRegValue[2]={cPrescaler,cCounter}; |
| Wolfgang Betz |
0:4fb29d9ee571 | 305 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 306 | /* Writes the counter and prescaler value of wake-up timer in the corresponding register */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 307 | g_xStatus = SpiritSpiWriteRegisters(TIMERS3_LDC_PRESCALER_BASE, 2, tempRegValue); |
| Wolfgang Betz |
0:4fb29d9ee571 | 308 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 309 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 310 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 311 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 312 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 313 | * @brief Sets the LDCR wake up timer counter and prescaler from the desired value in ms, |
| Wolfgang Betz |
0:4fb29d9ee571 | 314 | * according to the formula: Twu=(PRESCALER +1)*(COUNTER+1)*Tck, where Tck = 28.818 us. |
| Wolfgang Betz |
0:4fb29d9ee571 | 315 | * The minimum vale of the wakeup timeout is 28.818us (PRESCALER and COUNTER equals to 0) |
| Wolfgang Betz |
0:4fb29d9ee571 | 316 | * and the maximum value is about 1.89 s (PRESCALER anc COUNTER equals to 255). |
| Wolfgang Betz |
0:4fb29d9ee571 | 317 | * @param fDesiredMsec desired timer value. |
| Wolfgang Betz |
0:4fb29d9ee571 | 318 | * This parameter must be a float. |
| Wolfgang Betz |
0:4fb29d9ee571 | 319 | * @retval None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 320 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 321 | void SpiritTimerSetWakeUpTimerMs(float fDesiredMsec) |
| Wolfgang Betz |
0:4fb29d9ee571 | 322 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 323 | uint8_t tempRegValue[2]; |
| Wolfgang Betz |
0:4fb29d9ee571 | 324 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 325 | /* Computes counter and prescaler */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 326 | SpiritTimerComputeWakeUpValues(fDesiredMsec , &tempRegValue[1] , &tempRegValue[0]); |
| Wolfgang Betz |
0:4fb29d9ee571 | 327 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 328 | /* Writes the counter and prescaler value of wake-up timer in the corresponding register */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 329 | g_xStatus = SpiritSpiWriteRegisters(TIMERS3_LDC_PRESCALER_BASE, 2, tempRegValue); |
| Wolfgang Betz |
0:4fb29d9ee571 | 330 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 331 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 332 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 333 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 334 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 335 | * @brief Sets the LDCR wake up timer counter. Remember that this value is incresead by one in the Twu calculation. |
| Wolfgang Betz |
0:4fb29d9ee571 | 336 | * Twu=(PRESCALER +1)*(COUNTER+1)*Tck, where Tck = 28.818 us |
| Wolfgang Betz |
0:4fb29d9ee571 | 337 | * @param cCounter value for the timer counter. |
| Wolfgang Betz |
0:4fb29d9ee571 | 338 | * This parameter must be an uint8_t. |
| Wolfgang Betz |
0:4fb29d9ee571 | 339 | * @retval None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 340 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 341 | void SpiritTimerSetWakeUpTimerCounter(uint8_t cCounter) |
| Wolfgang Betz |
0:4fb29d9ee571 | 342 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 343 | /* Writes the counter value for Wake_Up timer in the corresponding register */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 344 | g_xStatus = SpiritSpiWriteRegisters(TIMERS2_LDC_COUNTER_BASE, 1, &cCounter); |
| Wolfgang Betz |
0:4fb29d9ee571 | 345 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 346 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 347 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 348 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 349 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 350 | * @brief Sets the LDCR wake up timer prescaler. Remember that this value is incresead by one in the Twu calculation. |
| Wolfgang Betz |
0:4fb29d9ee571 | 351 | * Twu=(PRESCALER +1)*(COUNTER+1)*Tck, where Tck = 28.818 us |
| Wolfgang Betz |
0:4fb29d9ee571 | 352 | * @param cPrescaler value for the timer prescaler. |
| Wolfgang Betz |
0:4fb29d9ee571 | 353 | * This parameter must be an uint8_t. |
| Wolfgang Betz |
0:4fb29d9ee571 | 354 | * @retval None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 355 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 356 | void SpiritTimerSetWakeUpTimerPrescaler(uint8_t cPrescaler) |
| Wolfgang Betz |
0:4fb29d9ee571 | 357 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 358 | /* Writes the prescaler value for Wake_Up timer in the corresponding register */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 359 | g_xStatus = SpiritSpiWriteRegisters(TIMERS3_LDC_PRESCALER_BASE, 1, &cPrescaler); |
| Wolfgang Betz |
0:4fb29d9ee571 | 360 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 361 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 362 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 363 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 364 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 365 | * @brief Returns the LDCR wake up timer, according to the formula: Twu=(PRESCALER +1)*(COUNTER+1)*Tck, where Tck = 28.818 us. |
| Wolfgang Betz |
0:4fb29d9ee571 | 366 | * @param pfWakeUpMsec pointer to the variable in which the wake-up time expressed in milliseconds has to be stored. |
| Wolfgang Betz |
0:4fb29d9ee571 | 367 | * This parameter must be a float*. |
| Wolfgang Betz |
0:4fb29d9ee571 | 368 | * @param pcCounter pointer to the variable in which the timer counter has to be stored. |
| Wolfgang Betz |
0:4fb29d9ee571 | 369 | * This parameter must be an uint8_t*. |
| Wolfgang Betz |
0:4fb29d9ee571 | 370 | * @param pcPrescaler pointer to the variable in which the timer prescaler has to be stored. |
| Wolfgang Betz |
0:4fb29d9ee571 | 371 | * This parameter must be an uint8_t*. |
| Wolfgang Betz |
0:4fb29d9ee571 | 372 | * @retval None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 373 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 374 | void SpiritTimerGetWakeUpTimer(float* pfWakeUpMsec, uint8_t* pcCounter , uint8_t* pcPrescaler) |
| Wolfgang Betz |
0:4fb29d9ee571 | 375 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 376 | uint8_t tempRegValue[2]; |
| Wolfgang Betz |
0:4fb29d9ee571 | 377 | //uint32_t xtal=SpiritRadioGetXtalFrequency(); |
| Wolfgang Betz |
0:4fb29d9ee571 | 378 | float rco_freq; |
| Wolfgang Betz |
0:4fb29d9ee571 | 379 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 380 | rco_freq=(float)SpiritTimerGetRcoFrequency(); |
| Wolfgang Betz |
0:4fb29d9ee571 | 381 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 382 | /* Reads the Wake_Up timer registers value */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 383 | g_xStatus = SpiritSpiReadRegisters(TIMERS3_LDC_PRESCALER_BASE, 2, tempRegValue); |
| Wolfgang Betz |
0:4fb29d9ee571 | 384 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 385 | /* Returns values */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 386 | (*pcPrescaler)=tempRegValue[0]; |
| Wolfgang Betz |
0:4fb29d9ee571 | 387 | (*pcCounter)=tempRegValue[1]; |
| Wolfgang Betz |
0:4fb29d9ee571 | 388 | *pfWakeUpMsec = (float)((((*pcPrescaler)+1)*((*pcCounter)+1)*(1000.0/rco_freq))); |
| Wolfgang Betz |
0:4fb29d9ee571 | 389 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 390 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 391 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 392 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 393 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 394 | * @brief Sets the LDCR wake up timer reloading registers with the values of |
| Wolfgang Betz |
0:4fb29d9ee571 | 395 | * COUNTER and PRESCALER according to the formula: Twu=(PRESCALER +1)*(COUNTER+1)*Tck, where |
| Wolfgang Betz |
0:4fb29d9ee571 | 396 | * Tck = 28.818 us. The minimum vale of the wakeup timeout is 28.818us (PRESCALER and |
| Wolfgang Betz |
0:4fb29d9ee571 | 397 | * COUNTER equals to 0) and the maximum value is about 1.89 s (PRESCALER anc COUNTER equals |
| Wolfgang Betz |
0:4fb29d9ee571 | 398 | * to 255). |
| Wolfgang Betz |
0:4fb29d9ee571 | 399 | * @param cCounter reload value for the timer counter. |
| Wolfgang Betz |
0:4fb29d9ee571 | 400 | * This parameter must be an uint8_t. |
| Wolfgang Betz |
0:4fb29d9ee571 | 401 | * @param cPrescaler reload value for the timer prescaler. |
| Wolfgang Betz |
0:4fb29d9ee571 | 402 | * This parameter must be an uint8_t. |
| Wolfgang Betz |
0:4fb29d9ee571 | 403 | * @retval None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 404 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 405 | void SpiritTimerSetWakeUpTimerReload(uint8_t cCounter , uint8_t cPrescaler) |
| Wolfgang Betz |
0:4fb29d9ee571 | 406 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 407 | uint8_t tempRegValue[2]={cPrescaler,cCounter}; |
| Wolfgang Betz |
0:4fb29d9ee571 | 408 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 409 | /* Writes the counter and prescaler value of reload wake-up timer in the corresponding register */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 410 | g_xStatus = SpiritSpiWriteRegisters(TIMERS1_LDC_RELOAD_PRESCALER_BASE, 2, tempRegValue); |
| Wolfgang Betz |
0:4fb29d9ee571 | 411 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 412 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 413 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 414 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 415 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 416 | * @brief Sets the LDCR wake up reload timer counter and prescaler from the desired value in ms, |
| Wolfgang Betz |
0:4fb29d9ee571 | 417 | * according to the formula: Twu=(PRESCALER +1)*(COUNTER+1)*Tck, where Tck = 28.818 us. |
| Wolfgang Betz |
0:4fb29d9ee571 | 418 | * The minimum vale of the wakeup timeout is 28.818us (PRESCALER and COUNTER equals to 0) |
| Wolfgang Betz |
0:4fb29d9ee571 | 419 | * and the maximum value is about 1.89 s (PRESCALER anc COUNTER equals to 255). |
| Wolfgang Betz |
0:4fb29d9ee571 | 420 | * @param fDesiredMsec desired timer value. |
| Wolfgang Betz |
0:4fb29d9ee571 | 421 | * This parameter must be a float. |
| Wolfgang Betz |
0:4fb29d9ee571 | 422 | * @retval None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 423 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 424 | void SpiritTimerSetWakeUpTimerReloadMs(float fDesiredMsec) |
| Wolfgang Betz |
0:4fb29d9ee571 | 425 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 426 | uint8_t tempRegValue[2]; |
| Wolfgang Betz |
0:4fb29d9ee571 | 427 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 428 | /* Computes counter and prescaler */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 429 | SpiritTimerComputeWakeUpValues(fDesiredMsec , &tempRegValue[1] , &tempRegValue[0]); |
| Wolfgang Betz |
0:4fb29d9ee571 | 430 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 431 | /* Writes the counter and prescaler value of reload wake-up timer in the corresponding register */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 432 | g_xStatus = SpiritSpiWriteRegisters(TIMERS1_LDC_RELOAD_PRESCALER_BASE, 2, tempRegValue); |
| Wolfgang Betz |
0:4fb29d9ee571 | 433 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 434 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 435 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 436 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 437 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 438 | * @brief Sets the LDCR wake up timer reload counter. Remember that this value is incresead by one in the Twu calculation. |
| Wolfgang Betz |
0:4fb29d9ee571 | 439 | * Twu=(PRESCALER +1)*(COUNTER+1)*Tck, where Tck = 28.818 us |
| Wolfgang Betz |
0:4fb29d9ee571 | 440 | * @param cCounter value for the timer counter. |
| Wolfgang Betz |
0:4fb29d9ee571 | 441 | * This parameter must be an uint8_t. |
| Wolfgang Betz |
0:4fb29d9ee571 | 442 | * @retval None |
| Wolfgang Betz |
0:4fb29d9ee571 | 443 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 444 | void SpiritTimerSetWakeUpTimerReloadCounter(uint8_t cCounter) |
| Wolfgang Betz |
0:4fb29d9ee571 | 445 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 446 | /* Writes the counter value for reload Wake_Up timer in the corresponding register */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 447 | g_xStatus = SpiritSpiWriteRegisters(TIMERS0_LDC_RELOAD_COUNTER_BASE, 1, &cCounter); |
| Wolfgang Betz |
0:4fb29d9ee571 | 448 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 449 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 450 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 451 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 452 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 453 | * @brief Sets the LDCR wake up timer reload prescaler. Remember that this value is incresead by one in the Twu calculation. |
| Wolfgang Betz |
0:4fb29d9ee571 | 454 | * Twu=(PRESCALER +1)*(COUNTER+1)*Tck, where Tck = 28.818 us |
| Wolfgang Betz |
0:4fb29d9ee571 | 455 | * @param cPrescaler value for the timer prescaler. |
| Wolfgang Betz |
0:4fb29d9ee571 | 456 | * This parameter must be an uint8_t. |
| Wolfgang Betz |
0:4fb29d9ee571 | 457 | * @retval None |
| Wolfgang Betz |
0:4fb29d9ee571 | 458 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 459 | void SpiritTimerSetWakeUpTimerReloadPrescaler(uint8_t cPrescaler) |
| Wolfgang Betz |
0:4fb29d9ee571 | 460 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 461 | /* Writes the prescaler value for reload Wake_Up timer in the corresponding register */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 462 | g_xStatus = SpiritSpiWriteRegisters(TIMERS1_LDC_RELOAD_PRESCALER_BASE, 1, &cPrescaler); |
| Wolfgang Betz |
0:4fb29d9ee571 | 463 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 464 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 465 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 466 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 467 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 468 | * @brief Returns the LDCR wake up reload timer, according to the formula: Twu=(PRESCALER +1)*(COUNTER+1)*Tck, where Tck = 28.818 us. |
| Wolfgang Betz |
0:4fb29d9ee571 | 469 | * @param pfWakeUpReloadMsec pointer to the variable in which the wake-up reload time expressed in milliseconds has to be stored. |
| Wolfgang Betz |
0:4fb29d9ee571 | 470 | * This parameter must be a float*. |
| Wolfgang Betz |
0:4fb29d9ee571 | 471 | * @param pcCounter pointer to the variable in which the timer counter has to be stored. |
| Wolfgang Betz |
0:4fb29d9ee571 | 472 | * This parameter must be an uint8_t*. |
| Wolfgang Betz |
0:4fb29d9ee571 | 473 | * @param pcPrescaler pointer to the variable in which the timer prescaler has to be stored. |
| Wolfgang Betz |
0:4fb29d9ee571 | 474 | * This parameter must be an uint8_t*. |
| Wolfgang Betz |
0:4fb29d9ee571 | 475 | * @retval None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 476 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 477 | void SpiritTimerGetWakeUpTimerReload(float* pfWakeUpReloadMsec, uint8_t* pcCounter , uint8_t* pcPrescaler) |
| Wolfgang Betz |
0:4fb29d9ee571 | 478 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 479 | uint8_t tempRegValue[2]; |
| Wolfgang Betz |
0:4fb29d9ee571 | 480 | //uint32_t xtal=SpiritRadioGetXtalFrequency(); |
| Wolfgang Betz |
0:4fb29d9ee571 | 481 | float rco_freq; |
| Wolfgang Betz |
0:4fb29d9ee571 | 482 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 483 | rco_freq=(float)SpiritTimerGetRcoFrequency(); |
| Wolfgang Betz |
0:4fb29d9ee571 | 484 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 485 | /* Reads the reload Wake_Up timer registers value */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 486 | g_xStatus = SpiritSpiReadRegisters(TIMERS1_LDC_RELOAD_PRESCALER_BASE, 2, tempRegValue); |
| Wolfgang Betz |
0:4fb29d9ee571 | 487 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 488 | /* Returns values */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 489 | (*pcPrescaler)=tempRegValue[0]; |
| Wolfgang Betz |
0:4fb29d9ee571 | 490 | (*pcCounter)=tempRegValue[1]; |
| Wolfgang Betz |
0:4fb29d9ee571 | 491 | *pfWakeUpReloadMsec = (float)((((*pcPrescaler)+1)*((*pcCounter)+1)*(1000.0/rco_freq))); |
| Wolfgang Betz |
0:4fb29d9ee571 | 492 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 493 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 494 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 495 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 496 | * @brief Computes and returns the RCO frequency. |
| Wolfgang Betz |
0:4fb29d9ee571 | 497 | * This frequency depends on the xtal frequency and the XTAL bit in register 0x01. |
| Wolfgang Betz |
0:4fb29d9ee571 | 498 | * @retval RCO frequency in Hz as an uint16_t. |
| Wolfgang Betz |
0:4fb29d9ee571 | 499 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 500 | uint16_t SpiritTimerGetRcoFrequency(void) |
| Wolfgang Betz |
0:4fb29d9ee571 | 501 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 502 | uint16_t rco_freq=34700; |
| Wolfgang Betz |
0:4fb29d9ee571 | 503 | uint32_t xtal=SpiritRadioGetXtalFrequency(); |
| Wolfgang Betz |
0:4fb29d9ee571 | 504 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 505 | if(xtal>30000000) xtal/=2; |
| Wolfgang Betz |
0:4fb29d9ee571 | 506 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 507 | if(xtal==25000000) |
| Wolfgang Betz |
0:4fb29d9ee571 | 508 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 509 | uint8_t xtal_flag; |
| Wolfgang Betz |
0:4fb29d9ee571 | 510 | SpiritSpiReadRegisters(0x01, 1, &xtal_flag); |
| Wolfgang Betz |
0:4fb29d9ee571 | 511 | xtal_flag=(xtal_flag&0x40); |
| Wolfgang Betz |
0:4fb29d9ee571 | 512 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 513 | if(xtal_flag==0) |
| Wolfgang Betz |
0:4fb29d9ee571 | 514 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 515 | rco_freq=36100; |
| Wolfgang Betz |
0:4fb29d9ee571 | 516 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 517 | else |
| Wolfgang Betz |
0:4fb29d9ee571 | 518 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 519 | rco_freq=33300; |
| Wolfgang Betz |
0:4fb29d9ee571 | 520 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 521 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 522 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 523 | return rco_freq; |
| Wolfgang Betz |
0:4fb29d9ee571 | 524 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 525 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 526 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 527 | * @brief Computes the values of the wakeup timer counter and prescaler from the user time expressed in millisecond. |
| Wolfgang Betz |
0:4fb29d9ee571 | 528 | * The prescaler and the counter values are computed maintaining the prescaler value as |
| Wolfgang Betz |
0:4fb29d9ee571 | 529 | * small as possible in order to obtain the best resolution, and in the meantime minimizing the error. |
| Wolfgang Betz |
0:4fb29d9ee571 | 530 | * @param fDesiredMsec desired wakeup timeout in millisecs. |
| Wolfgang Betz |
0:4fb29d9ee571 | 531 | * This parameter must be a float. Since the counter and prescaler are 8 bit registers the maximum |
| Wolfgang Betz |
0:4fb29d9ee571 | 532 | * reachable value is maxTime = fTclk x 256 x 256. |
| Wolfgang Betz |
0:4fb29d9ee571 | 533 | * @param pcCounter pointer to the variable in which the value for the wakeup timer counter has to be stored. |
| Wolfgang Betz |
0:4fb29d9ee571 | 534 | * This parameter must be a uint8_t*. |
| Wolfgang Betz |
0:4fb29d9ee571 | 535 | * @param pcPrescaler pointer to the variable in which the value for the wakeup timer prescaler has to be stored. |
| Wolfgang Betz |
0:4fb29d9ee571 | 536 | * This parameter must be an uint8_t*. |
| Wolfgang Betz |
0:4fb29d9ee571 | 537 | * @retval None |
| Wolfgang Betz |
0:4fb29d9ee571 | 538 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 539 | void SpiritTimerComputeWakeUpValues(float fDesiredMsec , uint8_t* pcCounter , uint8_t* pcPrescaler) |
| Wolfgang Betz |
0:4fb29d9ee571 | 540 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 541 | float rco_freq,err; |
| Wolfgang Betz |
0:4fb29d9ee571 | 542 | uint32_t n; |
| Wolfgang Betz |
0:4fb29d9ee571 | 543 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 544 | rco_freq=((float)SpiritTimerGetRcoFrequency())/1000; |
| Wolfgang Betz |
0:4fb29d9ee571 | 545 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 546 | /* N cycles in the time base of the timer: |
| Wolfgang Betz |
0:4fb29d9ee571 | 547 | - clock of the timer is RCO frequency |
| Wolfgang Betz |
0:4fb29d9ee571 | 548 | - divide times 1000 more because we have an input in ms (variable rco_freq is already this frequency divided by 1000) |
| Wolfgang Betz |
0:4fb29d9ee571 | 549 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 550 | n=(uint32_t)(fDesiredMsec*rco_freq); |
| Wolfgang Betz |
0:4fb29d9ee571 | 551 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 552 | /* check if it is possible to reach that target with prescaler and counter of spirit1 */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 553 | if(n/0xFF>0xFD) |
| Wolfgang Betz |
0:4fb29d9ee571 | 554 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 555 | /* if not return the maximum possible value */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 556 | (*pcCounter) = 0xFF; |
| Wolfgang Betz |
0:4fb29d9ee571 | 557 | (*pcPrescaler) = 0xFF; |
| Wolfgang Betz |
0:4fb29d9ee571 | 558 | return; |
| Wolfgang Betz |
0:4fb29d9ee571 | 559 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 560 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 561 | /* prescaler is really 2 as min value */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 562 | (*pcPrescaler)=(n/0xFF)+2; |
| Wolfgang Betz |
0:4fb29d9ee571 | 563 | (*pcCounter) = n / (*pcPrescaler); |
| Wolfgang Betz |
0:4fb29d9ee571 | 564 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 565 | /* check if the error is minimum */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 566 | err=S_ABS((float)(*pcCounter)*(*pcPrescaler)/rco_freq-fDesiredMsec); |
| Wolfgang Betz |
0:4fb29d9ee571 | 567 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 568 | if((*pcCounter)<=254) |
| Wolfgang Betz |
0:4fb29d9ee571 | 569 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 570 | if(S_ABS((float)((*pcCounter)+1)*(*pcPrescaler)/rco_freq-fDesiredMsec)<err) |
| Wolfgang Betz |
0:4fb29d9ee571 | 571 | (*pcCounter)=(*pcCounter)+1; |
| Wolfgang Betz |
0:4fb29d9ee571 | 572 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 573 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 574 | /* decrement prescaler and counter according to the logic of this timer in spirit1 */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 575 | (*pcPrescaler)--; |
| Wolfgang Betz |
0:4fb29d9ee571 | 576 | if((*pcCounter)>1) |
| Wolfgang Betz |
0:4fb29d9ee571 | 577 | (*pcCounter)--; |
| Wolfgang Betz |
0:4fb29d9ee571 | 578 | else |
| Wolfgang Betz |
0:4fb29d9ee571 | 579 | (*pcCounter)=1; |
| Wolfgang Betz |
0:4fb29d9ee571 | 580 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 581 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 582 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 583 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 584 | * @brief Computes the values of the rx_timeout timer counter and prescaler from the user time expressed in millisecond. |
| Wolfgang Betz |
0:4fb29d9ee571 | 585 | * The prescaler and the counter values are computed maintaining the prescaler value as |
| Wolfgang Betz |
0:4fb29d9ee571 | 586 | * small as possible in order to obtain the best resolution, and in the meantime minimizing the error. |
| Wolfgang Betz |
0:4fb29d9ee571 | 587 | * @param fDesiredMsec desired rx_timeout in millisecs. |
| Wolfgang Betz |
0:4fb29d9ee571 | 588 | * This parameter must be a float. Since the counter and prescaler are 8 bit registers the maximum |
| Wolfgang Betz |
0:4fb29d9ee571 | 589 | * reachable value is maxTime = fTclk x 255 x 255. |
| Wolfgang Betz |
0:4fb29d9ee571 | 590 | * @param pcCounter pointer to the variable in which the value for the rx_timeout counter has to be stored. |
| Wolfgang Betz |
0:4fb29d9ee571 | 591 | * This parameter must be a uint8_t*. |
| Wolfgang Betz |
0:4fb29d9ee571 | 592 | * @param pcPrescaler pointer to the variable in which the value for the rx_timeout prescaler has to be stored. |
| Wolfgang Betz |
0:4fb29d9ee571 | 593 | * This parameter must be an uint8_t*. |
| Wolfgang Betz |
0:4fb29d9ee571 | 594 | * @retval None |
| Wolfgang Betz |
0:4fb29d9ee571 | 595 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 596 | void SpiritTimerComputeRxTimeoutValues(float fDesiredMsec , uint8_t* pcCounter , uint8_t* pcPrescaler) |
| Wolfgang Betz |
0:4fb29d9ee571 | 597 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 598 | uint32_t nXtalFrequency = SpiritRadioGetXtalFrequency(); |
| Wolfgang Betz |
0:4fb29d9ee571 | 599 | uint32_t n; |
| Wolfgang Betz |
0:4fb29d9ee571 | 600 | float err; |
| Wolfgang Betz |
0:4fb29d9ee571 | 601 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 602 | /* if xtal is doubled divide it by 2 */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 603 | if(nXtalFrequency>DOUBLE_XTAL_THR) { |
| Wolfgang Betz |
0:4fb29d9ee571 | 604 | nXtalFrequency >>= 1; |
| Wolfgang Betz |
0:4fb29d9ee571 | 605 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 606 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 607 | /* N cycles in the time base of the timer: |
| Wolfgang Betz |
0:4fb29d9ee571 | 608 | - clock of the timer is xtal/1210 |
| Wolfgang Betz |
0:4fb29d9ee571 | 609 | - divide times 1000 more because we have an input in ms |
| Wolfgang Betz |
0:4fb29d9ee571 | 610 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 611 | n=(uint32_t)(fDesiredMsec*nXtalFrequency/1210000); |
| Wolfgang Betz |
0:4fb29d9ee571 | 612 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 613 | /* check if it is possible to reach that target with prescaler and counter of spirit1 */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 614 | if(n/0xFF>0xFD) |
| Wolfgang Betz |
0:4fb29d9ee571 | 615 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 616 | /* if not return the maximum possible value */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 617 | (*pcCounter) = 0xFF; |
| Wolfgang Betz |
0:4fb29d9ee571 | 618 | (*pcPrescaler) = 0xFF; |
| Wolfgang Betz |
0:4fb29d9ee571 | 619 | return; |
| Wolfgang Betz |
0:4fb29d9ee571 | 620 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 621 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 622 | /* prescaler is really 2 as min value */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 623 | (*pcPrescaler)=(n/0xFF)+2; |
| Wolfgang Betz |
0:4fb29d9ee571 | 624 | (*pcCounter) = n / (*pcPrescaler); |
| Wolfgang Betz |
0:4fb29d9ee571 | 625 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 626 | /* check if the error is minimum */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 627 | err=S_ABS((float)(*pcCounter)*(*pcPrescaler)*1210000/nXtalFrequency-fDesiredMsec); |
| Wolfgang Betz |
0:4fb29d9ee571 | 628 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 629 | if((*pcCounter)<=254) |
| Wolfgang Betz |
0:4fb29d9ee571 | 630 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 631 | if(S_ABS((float)((*pcCounter)+1)*(*pcPrescaler)*1210000/nXtalFrequency-fDesiredMsec)<err) |
| Wolfgang Betz |
0:4fb29d9ee571 | 632 | (*pcCounter)=(*pcCounter)+1; |
| Wolfgang Betz |
0:4fb29d9ee571 | 633 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 634 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 635 | /* decrement prescaler and counter according to the logic of this timer in spirit1 */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 636 | (*pcPrescaler)--; |
| Wolfgang Betz |
0:4fb29d9ee571 | 637 | if((*pcCounter)>1) |
| Wolfgang Betz |
0:4fb29d9ee571 | 638 | (*pcCounter)--; |
| Wolfgang Betz |
0:4fb29d9ee571 | 639 | else |
| Wolfgang Betz |
0:4fb29d9ee571 | 640 | (*pcCounter)=1; |
| Wolfgang Betz |
0:4fb29d9ee571 | 641 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 642 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 643 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 644 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 645 | * @brief Sets the RX timeout stop conditions. |
| Wolfgang Betz |
0:4fb29d9ee571 | 646 | * @param xStopCondition new stop condition. |
| Wolfgang Betz |
0:4fb29d9ee571 | 647 | * This parameter can be any value of @ref RxTimeoutStopCondition. |
| Wolfgang Betz |
0:4fb29d9ee571 | 648 | * @retval None |
| Wolfgang Betz |
0:4fb29d9ee571 | 649 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 650 | void SpiritTimerSetRxTimeoutStopCondition(RxTimeoutStopCondition xStopCondition) |
| Wolfgang Betz |
0:4fb29d9ee571 | 651 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 652 | uint8_t tempRegValue[2]; |
| Wolfgang Betz |
0:4fb29d9ee571 | 653 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 654 | /* Check the parameters */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 655 | s_assert_param(IS_RX_TIMEOUT_STOP_CONDITION(xStopCondition)); |
| Wolfgang Betz |
0:4fb29d9ee571 | 656 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 657 | /* Reads value on the PKT_FLT_OPTIONS and PROTOCOL2 register */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 658 | g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 2, tempRegValue); |
| Wolfgang Betz |
0:4fb29d9ee571 | 659 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 660 | tempRegValue[0] &= 0xBF; |
| Wolfgang Betz |
0:4fb29d9ee571 | 661 | tempRegValue[0] |= ((xStopCondition & 0x08) << 3); |
| Wolfgang Betz |
0:4fb29d9ee571 | 662 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 663 | tempRegValue[1] &= 0x1F; |
| Wolfgang Betz |
0:4fb29d9ee571 | 664 | tempRegValue[1] |= (xStopCondition << 5); |
| Wolfgang Betz |
0:4fb29d9ee571 | 665 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 666 | /* Writes value on the PKT_FLT_OPTIONS and PROTOCOL2 register */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 667 | g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 2, tempRegValue); |
| Wolfgang Betz |
0:4fb29d9ee571 | 668 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 669 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 670 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 671 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 672 | * @brief Sends the LDC_RELOAD command to SPIRIT. Reload the LDC timer with the value stored in the LDC_PRESCALER / COUNTER registers. |
| Wolfgang Betz |
0:4fb29d9ee571 | 673 | * @param None. |
| Wolfgang Betz |
0:4fb29d9ee571 | 674 | * @retval None |
| Wolfgang Betz |
0:4fb29d9ee571 | 675 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 676 | void SpiritTimerReloadStrobe(void) |
| Wolfgang Betz |
0:4fb29d9ee571 | 677 | { |
| Wolfgang Betz |
0:4fb29d9ee571 | 678 | /* Sends the CMD_LDC_RELOAD command */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 679 | g_xStatus = SpiritSpiCommandStrobes(COMMAND_LDC_RELOAD); |
| Wolfgang Betz |
0:4fb29d9ee571 | 680 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 681 | } |
| Wolfgang Betz |
0:4fb29d9ee571 | 682 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 683 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 684 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 685 | *@} |
| Wolfgang Betz |
0:4fb29d9ee571 | 686 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 687 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 688 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 689 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 690 | *@} |
| Wolfgang Betz |
0:4fb29d9ee571 | 691 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 692 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 693 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 694 | /** |
| Wolfgang Betz |
0:4fb29d9ee571 | 695 | *@} |
| Wolfgang Betz |
0:4fb29d9ee571 | 696 | */ |
| Wolfgang Betz |
0:4fb29d9ee571 | 697 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 698 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 699 | |
| Wolfgang Betz |
0:4fb29d9ee571 | 700 | /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/ |
X-NUCLEO-IDS01A4 Sub-1GHz RF Expansion Board