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).
source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_Irq.h@34:edda6a7238ec, 2016-11-22 (annotated)
- Committer:
- Wolfgang Betz
- Date:
- Tue Nov 22 11:40:10 2016 +0100
- Revision:
- 34:edda6a7238ec
- Child:
- 42:92a60a905ee7
Perform re-naming
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Wolfgang Betz |
34:edda6a7238ec | 1 | /** |
Wolfgang Betz |
34:edda6a7238ec | 2 | ****************************************************************************** |
Wolfgang Betz |
34:edda6a7238ec | 3 | * @file SPIRIT_Irq.h |
Wolfgang Betz |
34:edda6a7238ec | 4 | * @author VMA division - AMS |
Wolfgang Betz |
34:edda6a7238ec | 5 | * @version 3.2.2 |
Wolfgang Betz |
34:edda6a7238ec | 6 | * @date 08-July-2015 |
Wolfgang Betz |
34:edda6a7238ec | 7 | * @brief Configuration and management of SPIRIT IRQs. |
Wolfgang Betz |
34:edda6a7238ec | 8 | * |
Wolfgang Betz |
34:edda6a7238ec | 9 | * @details |
Wolfgang Betz |
34:edda6a7238ec | 10 | * |
Wolfgang Betz |
34:edda6a7238ec | 11 | * On the Spirit side specific IRQs can be enabled by setting a specific bitmask. |
Wolfgang Betz |
34:edda6a7238ec | 12 | * The Spirit libraries allow the user to do this in two different ways: |
Wolfgang Betz |
34:edda6a7238ec | 13 | * <ul> |
Wolfgang Betz |
34:edda6a7238ec | 14 | * |
Wolfgang Betz |
34:edda6a7238ec | 15 | * <li>The first enables the IRQs one by one, i.e. using an SPI transaction for each |
Wolfgang Betz |
34:edda6a7238ec | 16 | * IRQ to enable. |
Wolfgang Betz |
34:edda6a7238ec | 17 | * |
Wolfgang Betz |
34:edda6a7238ec | 18 | * <b>Example:</b> |
Wolfgang Betz |
34:edda6a7238ec | 19 | * @code |
Wolfgang Betz |
34:edda6a7238ec | 20 | * |
Wolfgang Betz |
34:edda6a7238ec | 21 | * SpiritIrqDeInit(NULL); // this call is used to reset the IRQ mask registers |
Wolfgang Betz |
34:edda6a7238ec | 22 | * SpiritIrq(RX_DATA_READY , S_ENABLE); |
Wolfgang Betz |
34:edda6a7238ec | 23 | * SpiritIrq(VALID_SYNC , S_ENABLE); |
Wolfgang Betz |
34:edda6a7238ec | 24 | * SpiritIrq(RX_TIMEOUT , S_ENABLE); |
Wolfgang Betz |
34:edda6a7238ec | 25 | * |
Wolfgang Betz |
34:edda6a7238ec | 26 | * @endcode |
Wolfgang Betz |
34:edda6a7238ec | 27 | * |
Wolfgang Betz |
34:edda6a7238ec | 28 | * </li> |
Wolfgang Betz |
34:edda6a7238ec | 29 | * |
Wolfgang Betz |
34:edda6a7238ec | 30 | * <li>The second strategy is to set the IRQ bitfields structure. So, during the initialization the user |
Wolfgang Betz |
34:edda6a7238ec | 31 | * has to fill the @ref SpiritIrqs structure setting to one the single field related to the IRQ he |
Wolfgang Betz |
34:edda6a7238ec | 32 | * wants to enable, and to zero the single field related to all the IRQs he wants to disable. |
Wolfgang Betz |
34:edda6a7238ec | 33 | * |
Wolfgang Betz |
34:edda6a7238ec | 34 | * <b>Example:</b> |
Wolfgang Betz |
34:edda6a7238ec | 35 | * @code |
Wolfgang Betz |
34:edda6a7238ec | 36 | * |
Wolfgang Betz |
34:edda6a7238ec | 37 | * SpiritIrqs irqMask; |
Wolfgang Betz |
34:edda6a7238ec | 38 | * |
Wolfgang Betz |
34:edda6a7238ec | 39 | * ... |
Wolfgang Betz |
34:edda6a7238ec | 40 | * |
Wolfgang Betz |
34:edda6a7238ec | 41 | * SpiritIrqDeInit(&irqMask); // this call is used to reset the IRQ mask registers |
Wolfgang Betz |
34:edda6a7238ec | 42 | * // and to set to 0x00000000 the irq mask in order to disable |
Wolfgang Betz |
34:edda6a7238ec | 43 | * // all IRQs (disabled by default on startup) |
Wolfgang Betz |
34:edda6a7238ec | 44 | * irqMask.IRQ_RX_DATA_READY = 1; |
Wolfgang Betz |
34:edda6a7238ec | 45 | * irqMask.IRQ_VALID_SYNC = 1; |
Wolfgang Betz |
34:edda6a7238ec | 46 | * irqMask.IRQ_RX_TIMEOUT = 1; |
Wolfgang Betz |
34:edda6a7238ec | 47 | * |
Wolfgang Betz |
34:edda6a7238ec | 48 | * ... |
Wolfgang Betz |
34:edda6a7238ec | 49 | * @endcode |
Wolfgang Betz |
34:edda6a7238ec | 50 | * </li> |
Wolfgang Betz |
34:edda6a7238ec | 51 | * </ul> |
Wolfgang Betz |
34:edda6a7238ec | 52 | * |
Wolfgang Betz |
34:edda6a7238ec | 53 | * The most applications will require a Spirit IRQ notification on an microcontroller EXTI line. |
Wolfgang Betz |
34:edda6a7238ec | 54 | * Then, the user can check which IRQ has been raised using two different ways. |
Wolfgang Betz |
34:edda6a7238ec | 55 | * |
Wolfgang Betz |
34:edda6a7238ec | 56 | * On the ISR of the EXTI line phisically linked to the Spirit pin configured for IRQ: |
Wolfgang Betz |
34:edda6a7238ec | 57 | * |
Wolfgang Betz |
34:edda6a7238ec | 58 | * <ul> |
Wolfgang Betz |
34:edda6a7238ec | 59 | * <li> Check <b>only one</b> Spirit IRQ (because the Spirit IRQ status register automatically blanks itself |
Wolfgang Betz |
34:edda6a7238ec | 60 | * after an SPI reading) into the ISR. |
Wolfgang Betz |
34:edda6a7238ec | 61 | * |
Wolfgang Betz |
34:edda6a7238ec | 62 | * <b>Example:</b> |
Wolfgang Betz |
34:edda6a7238ec | 63 | * @code |
Wolfgang Betz |
34:edda6a7238ec | 64 | * |
Wolfgang Betz |
34:edda6a7238ec | 65 | * if(SpiritIrqCheckFlag(RX_DATA_READY)) |
Wolfgang Betz |
34:edda6a7238ec | 66 | * { |
Wolfgang Betz |
34:edda6a7238ec | 67 | * // do something... |
Wolfgang Betz |
34:edda6a7238ec | 68 | * } |
Wolfgang Betz |
34:edda6a7238ec | 69 | * |
Wolfgang Betz |
34:edda6a7238ec | 70 | * @endcode |
Wolfgang Betz |
34:edda6a7238ec | 71 | * </li> |
Wolfgang Betz |
34:edda6a7238ec | 72 | * |
Wolfgang Betz |
34:edda6a7238ec | 73 | * <li> Check more than one Spirit IRQ status by storing the entire IRQ status registers into a bitfields <i>@ref SpiritIrqs</i> structure |
Wolfgang Betz |
34:edda6a7238ec | 74 | * and then check the interested bits. |
Wolfgang Betz |
34:edda6a7238ec | 75 | * |
Wolfgang Betz |
34:edda6a7238ec | 76 | * <b>Example:</b> |
Wolfgang Betz |
34:edda6a7238ec | 77 | * @code |
Wolfgang Betz |
34:edda6a7238ec | 78 | * |
Wolfgang Betz |
34:edda6a7238ec | 79 | * SpiritIrqGetStatus(&irqStatus); |
Wolfgang Betz |
34:edda6a7238ec | 80 | * |
Wolfgang Betz |
34:edda6a7238ec | 81 | * if(irqStatus.IRQ_RX_DATA_READY) |
Wolfgang Betz |
34:edda6a7238ec | 82 | * { |
Wolfgang Betz |
34:edda6a7238ec | 83 | * // do something... |
Wolfgang Betz |
34:edda6a7238ec | 84 | * } |
Wolfgang Betz |
34:edda6a7238ec | 85 | * if(irqStatus.IRQ_VALID_SYNC) |
Wolfgang Betz |
34:edda6a7238ec | 86 | * { |
Wolfgang Betz |
34:edda6a7238ec | 87 | * // do something... |
Wolfgang Betz |
34:edda6a7238ec | 88 | * } |
Wolfgang Betz |
34:edda6a7238ec | 89 | * if(irqStatus.RX_TIMEOUT) |
Wolfgang Betz |
34:edda6a7238ec | 90 | * { |
Wolfgang Betz |
34:edda6a7238ec | 91 | * // do something... |
Wolfgang Betz |
34:edda6a7238ec | 92 | * } |
Wolfgang Betz |
34:edda6a7238ec | 93 | * |
Wolfgang Betz |
34:edda6a7238ec | 94 | * @endcode |
Wolfgang Betz |
34:edda6a7238ec | 95 | * </li> |
Wolfgang Betz |
34:edda6a7238ec | 96 | * </ul> |
Wolfgang Betz |
34:edda6a7238ec | 97 | * |
Wolfgang Betz |
34:edda6a7238ec | 98 | |
Wolfgang Betz |
34:edda6a7238ec | 99 | * @attention |
Wolfgang Betz |
34:edda6a7238ec | 100 | * |
Wolfgang Betz |
34:edda6a7238ec | 101 | * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> |
Wolfgang Betz |
34:edda6a7238ec | 102 | * |
Wolfgang Betz |
34:edda6a7238ec | 103 | * Redistribution and use in source and binary forms, with or without modification, |
Wolfgang Betz |
34:edda6a7238ec | 104 | * are permitted provided that the following conditions are met: |
Wolfgang Betz |
34:edda6a7238ec | 105 | * 1. Redistributions of source code must retain the above copyright notice, |
Wolfgang Betz |
34:edda6a7238ec | 106 | * this list of conditions and the following disclaimer. |
Wolfgang Betz |
34:edda6a7238ec | 107 | * 2. Redistributions in binary form must reproduce the above copyright notice, |
Wolfgang Betz |
34:edda6a7238ec | 108 | * this list of conditions and the following disclaimer in the documentation |
Wolfgang Betz |
34:edda6a7238ec | 109 | * and/or other materials provided with the distribution. |
Wolfgang Betz |
34:edda6a7238ec | 110 | * 3. Neither the name of STMicroelectronics nor the names of its contributors |
Wolfgang Betz |
34:edda6a7238ec | 111 | * may be used to endorse or promote products derived from this software |
Wolfgang Betz |
34:edda6a7238ec | 112 | * without specific prior written permission. |
Wolfgang Betz |
34:edda6a7238ec | 113 | * |
Wolfgang Betz |
34:edda6a7238ec | 114 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
Wolfgang Betz |
34:edda6a7238ec | 115 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
Wolfgang Betz |
34:edda6a7238ec | 116 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
Wolfgang Betz |
34:edda6a7238ec | 117 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
Wolfgang Betz |
34:edda6a7238ec | 118 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
Wolfgang Betz |
34:edda6a7238ec | 119 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
Wolfgang Betz |
34:edda6a7238ec | 120 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
Wolfgang Betz |
34:edda6a7238ec | 121 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
Wolfgang Betz |
34:edda6a7238ec | 122 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
Wolfgang Betz |
34:edda6a7238ec | 123 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
Wolfgang Betz |
34:edda6a7238ec | 124 | * |
Wolfgang Betz |
34:edda6a7238ec | 125 | ****************************************************************************** |
Wolfgang Betz |
34:edda6a7238ec | 126 | */ |
Wolfgang Betz |
34:edda6a7238ec | 127 | |
Wolfgang Betz |
34:edda6a7238ec | 128 | /* Define to prevent recursive inclusion -------------------------------------*/ |
Wolfgang Betz |
34:edda6a7238ec | 129 | #ifndef __SPIRIT1_IRQ_H |
Wolfgang Betz |
34:edda6a7238ec | 130 | #define __SPIRIT1_IRQ_H |
Wolfgang Betz |
34:edda6a7238ec | 131 | |
Wolfgang Betz |
34:edda6a7238ec | 132 | |
Wolfgang Betz |
34:edda6a7238ec | 133 | /* Includes ------------------------------------------------------------------*/ |
Wolfgang Betz |
34:edda6a7238ec | 134 | |
Wolfgang Betz |
34:edda6a7238ec | 135 | #include "SPIRIT_Regs.h" |
Wolfgang Betz |
34:edda6a7238ec | 136 | #include "SPIRIT_Types.h" |
Wolfgang Betz |
34:edda6a7238ec | 137 | |
Wolfgang Betz |
34:edda6a7238ec | 138 | |
Wolfgang Betz |
34:edda6a7238ec | 139 | #ifdef __cplusplus |
Wolfgang Betz |
34:edda6a7238ec | 140 | extern "C" { |
Wolfgang Betz |
34:edda6a7238ec | 141 | #endif |
Wolfgang Betz |
34:edda6a7238ec | 142 | |
Wolfgang Betz |
34:edda6a7238ec | 143 | |
Wolfgang Betz |
34:edda6a7238ec | 144 | /** |
Wolfgang Betz |
34:edda6a7238ec | 145 | * @addtogroup SPIRIT_Libraries |
Wolfgang Betz |
34:edda6a7238ec | 146 | * @{ |
Wolfgang Betz |
34:edda6a7238ec | 147 | */ |
Wolfgang Betz |
34:edda6a7238ec | 148 | |
Wolfgang Betz |
34:edda6a7238ec | 149 | |
Wolfgang Betz |
34:edda6a7238ec | 150 | /** |
Wolfgang Betz |
34:edda6a7238ec | 151 | * @defgroup SPIRIT_Irq IRQ |
Wolfgang Betz |
34:edda6a7238ec | 152 | * @brief Configuration and management of SPIRIT IRQs. |
Wolfgang Betz |
34:edda6a7238ec | 153 | * @details See the file <i>@ref SPIRIT_Irq.h</i> for more details. |
Wolfgang Betz |
34:edda6a7238ec | 154 | * @{ |
Wolfgang Betz |
34:edda6a7238ec | 155 | */ |
Wolfgang Betz |
34:edda6a7238ec | 156 | |
Wolfgang Betz |
34:edda6a7238ec | 157 | /** |
Wolfgang Betz |
34:edda6a7238ec | 158 | * @defgroup Irq_Exported_Types IRQ Exported Types |
Wolfgang Betz |
34:edda6a7238ec | 159 | * @{ |
Wolfgang Betz |
34:edda6a7238ec | 160 | */ |
Wolfgang Betz |
34:edda6a7238ec | 161 | |
Wolfgang Betz |
34:edda6a7238ec | 162 | |
Wolfgang Betz |
34:edda6a7238ec | 163 | /** |
Wolfgang Betz |
34:edda6a7238ec | 164 | * @brief IRQ bitfield structure for SPIRIT. This structure is used to read or write the single IRQ bit. |
Wolfgang Betz |
34:edda6a7238ec | 165 | * During the initialization the user has to fill this structure setting to one the single field related |
Wolfgang Betz |
34:edda6a7238ec | 166 | * to the IRQ he wants to enable, and to zero the single field related to all the IRQs he wants to disable. |
Wolfgang Betz |
34:edda6a7238ec | 167 | * The same structure can be used to retrieve all the IRQ events from the IRQ registers IRQ_STATUS[3:0], |
Wolfgang Betz |
34:edda6a7238ec | 168 | * and read if one or more specific IRQ raised. |
Wolfgang Betz |
34:edda6a7238ec | 169 | * @note The fields order in the structure depends on used endianness (little or big |
Wolfgang Betz |
34:edda6a7238ec | 170 | * endian). The actual definition is valid ONLY for LITTLE ENDIAN mode. Be sure to |
Wolfgang Betz |
34:edda6a7238ec | 171 | * change opportunely the fields order when use a different endianness. |
Wolfgang Betz |
34:edda6a7238ec | 172 | */ |
Wolfgang Betz |
34:edda6a7238ec | 173 | typedef struct |
Wolfgang Betz |
34:edda6a7238ec | 174 | { |
Wolfgang Betz |
34:edda6a7238ec | 175 | SpiritFlagStatus IRQ_SYNTH_LOCK_TIMEOUT:1; /*!< IRQ: only for debug; LOCK state timeout */ |
Wolfgang Betz |
34:edda6a7238ec | 176 | SpiritFlagStatus IRQ_SYNTH_LOCK_STARTUP:1; /*!< IRQ: only for debug; see CALIBR_START_COUNTER */ |
Wolfgang Betz |
34:edda6a7238ec | 177 | SpiritFlagStatus IRQ_SYNTH_CAL_TIMEOUT:1; /*!< IRQ: only for debug; SYNTH calibration timeout */ |
Wolfgang Betz |
34:edda6a7238ec | 178 | SpiritFlagStatus IRQ_TX_START_TIME:1; /*!< IRQ: only for debug; TX circuitry startup time; see TX_START_COUNTER */ |
Wolfgang Betz |
34:edda6a7238ec | 179 | SpiritFlagStatus IRQ_RX_START_TIME:1; /*!< IRQ: only for debug; RX circuitry startup time; see TX_START_COUNTER */ |
Wolfgang Betz |
34:edda6a7238ec | 180 | SpiritFlagStatus IRQ_RX_TIMEOUT:1; /*!< IRQ: RX operation timeout */ |
Wolfgang Betz |
34:edda6a7238ec | 181 | SpiritFlagStatus IRQ_AES_END:1; /*!< IRQ: AES End of operation */ |
Wolfgang Betz |
34:edda6a7238ec | 182 | SpiritFlagStatus :1; /*!< Reserved bit */ |
Wolfgang Betz |
34:edda6a7238ec | 183 | |
Wolfgang Betz |
34:edda6a7238ec | 184 | SpiritFlagStatus IRQ_READY:1; /*!< IRQ: READY state */ |
Wolfgang Betz |
34:edda6a7238ec | 185 | SpiritFlagStatus IRQ_STANDBY_DELAYED:1; /*!< IRQ: STANDBY state after MCU_CK_CONF_CLOCK_TAIL_X clock cycles */ |
Wolfgang Betz |
34:edda6a7238ec | 186 | SpiritFlagStatus IRQ_LOW_BATT_LVL:1; /*!< IRQ: Battery level below threshold*/ |
Wolfgang Betz |
34:edda6a7238ec | 187 | SpiritFlagStatus IRQ_POR:1; /*!< IRQ: Power On Reset */ |
Wolfgang Betz |
34:edda6a7238ec | 188 | SpiritFlagStatus IRQ_BOR:1; /*!< IRQ: Brown out event (both accurate and inaccurate)*/ |
Wolfgang Betz |
34:edda6a7238ec | 189 | SpiritFlagStatus IRQ_LOCK:1; /*!< IRQ: LOCK state */ |
Wolfgang Betz |
34:edda6a7238ec | 190 | SpiritFlagStatus IRQ_PM_COUNT_EXPIRED:1; /*!< IRQ: only for debug; Power Management startup timer expiration (see reg PM_START_COUNTER, 0xB5) */ |
Wolfgang Betz |
34:edda6a7238ec | 191 | SpiritFlagStatus IRQ_XO_COUNT_EXPIRED:1; /*!< IRQ: only for debug; Crystal oscillator settling time counter expired */ |
Wolfgang Betz |
34:edda6a7238ec | 192 | |
Wolfgang Betz |
34:edda6a7238ec | 193 | SpiritFlagStatus IRQ_TX_FIFO_ALMOST_EMPTY:1; /*!< IRQ: TX FIFO almost empty */ |
Wolfgang Betz |
34:edda6a7238ec | 194 | SpiritFlagStatus IRQ_RX_FIFO_ALMOST_FULL:1; /*!< IRQ: RX FIFO almost full */ |
Wolfgang Betz |
34:edda6a7238ec | 195 | SpiritFlagStatus IRQ_RX_FIFO_ALMOST_EMPTY:1; /*!< IRQ: RX FIFO almost empty */ |
Wolfgang Betz |
34:edda6a7238ec | 196 | SpiritFlagStatus IRQ_MAX_BO_CCA_REACH:1; /*!< IRQ: Max number of back-off during CCA */ |
Wolfgang Betz |
34:edda6a7238ec | 197 | SpiritFlagStatus IRQ_VALID_PREAMBLE:1; /*!< IRQ: Valid preamble detected */ |
Wolfgang Betz |
34:edda6a7238ec | 198 | SpiritFlagStatus IRQ_VALID_SYNC:1; /*!< IRQ: Sync word detected */ |
Wolfgang Betz |
34:edda6a7238ec | 199 | SpiritFlagStatus IRQ_RSSI_ABOVE_TH:1; /*!< IRQ: RSSI above threshold */ |
Wolfgang Betz |
34:edda6a7238ec | 200 | SpiritFlagStatus IRQ_WKUP_TOUT_LDC:1; /*!< IRQ: Wake-up timeout in LDC mode */ |
Wolfgang Betz |
34:edda6a7238ec | 201 | |
Wolfgang Betz |
34:edda6a7238ec | 202 | SpiritFlagStatus IRQ_RX_DATA_READY:1; /*!< IRQ: RX data ready */ |
Wolfgang Betz |
34:edda6a7238ec | 203 | SpiritFlagStatus IRQ_RX_DATA_DISC:1; /*!< IRQ: RX data discarded (upon filtering) */ |
Wolfgang Betz |
34:edda6a7238ec | 204 | SpiritFlagStatus IRQ_TX_DATA_SENT:1; /*!< IRQ: TX data sent */ |
Wolfgang Betz |
34:edda6a7238ec | 205 | SpiritFlagStatus IRQ_MAX_RE_TX_REACH:1; /*!< IRQ: Max re-TX reached */ |
Wolfgang Betz |
34:edda6a7238ec | 206 | SpiritFlagStatus IRQ_CRC_ERROR:1; /*!< IRQ: CRC error */ |
Wolfgang Betz |
34:edda6a7238ec | 207 | SpiritFlagStatus IRQ_TX_FIFO_ERROR:1; /*!< IRQ: TX FIFO underflow/overflow error */ |
Wolfgang Betz |
34:edda6a7238ec | 208 | SpiritFlagStatus IRQ_RX_FIFO_ERROR:1; /*!< IRQ: RX FIFO underflow/overflow error */ |
Wolfgang Betz |
34:edda6a7238ec | 209 | SpiritFlagStatus IRQ_TX_FIFO_ALMOST_FULL:1; /*!< IRQ: TX FIFO almost full */ |
Wolfgang Betz |
34:edda6a7238ec | 210 | |
Wolfgang Betz |
34:edda6a7238ec | 211 | } SpiritIrqs; |
Wolfgang Betz |
34:edda6a7238ec | 212 | |
Wolfgang Betz |
34:edda6a7238ec | 213 | |
Wolfgang Betz |
34:edda6a7238ec | 214 | /** |
Wolfgang Betz |
34:edda6a7238ec | 215 | * @brief IRQ list enumeration for SPIRIT. This enumeration type can be used to address a |
Wolfgang Betz |
34:edda6a7238ec | 216 | * specific IRQ. |
Wolfgang Betz |
34:edda6a7238ec | 217 | */ |
Wolfgang Betz |
34:edda6a7238ec | 218 | typedef enum |
Wolfgang Betz |
34:edda6a7238ec | 219 | { |
Wolfgang Betz |
34:edda6a7238ec | 220 | RX_DATA_READY = 0x00000001, /*!< IRQ: RX data ready */ |
Wolfgang Betz |
34:edda6a7238ec | 221 | RX_DATA_DISC = 0x00000002, /*!< IRQ: RX data discarded (upon filtering) */ |
Wolfgang Betz |
34:edda6a7238ec | 222 | TX_DATA_SENT = 0x00000004, /*!< IRQ: TX data sent */ |
Wolfgang Betz |
34:edda6a7238ec | 223 | MAX_RE_TX_REACH = 0x00000008, /*!< IRQ: Max re-TX reached */ |
Wolfgang Betz |
34:edda6a7238ec | 224 | CRC_ERROR = 0x00000010, /*!< IRQ: CRC error */ |
Wolfgang Betz |
34:edda6a7238ec | 225 | TX_FIFO_ERROR = 0x00000020, /*!< IRQ: TX FIFO underflow/overflow error */ |
Wolfgang Betz |
34:edda6a7238ec | 226 | RX_FIFO_ERROR = 0x00000040, /*!< IRQ: RX FIFO underflow/overflow error */ |
Wolfgang Betz |
34:edda6a7238ec | 227 | TX_FIFO_ALMOST_FULL = 0x00000080, /*!< IRQ: TX FIFO almost full */ |
Wolfgang Betz |
34:edda6a7238ec | 228 | TX_FIFO_ALMOST_EMPTY = 0x00000100, /*!< IRQ: TX FIFO almost empty */ |
Wolfgang Betz |
34:edda6a7238ec | 229 | RX_FIFO_ALMOST_FULL = 0x00000200, /*!< IRQ: RX FIFO almost full */ |
Wolfgang Betz |
34:edda6a7238ec | 230 | RX_FIFO_ALMOST_EMPTY = 0x00000400, /*!< IRQ: RX FIFO almost empty */ |
Wolfgang Betz |
34:edda6a7238ec | 231 | MAX_BO_CCA_REACH = 0x00000800, /*!< IRQ: Max number of back-off during CCA */ |
Wolfgang Betz |
34:edda6a7238ec | 232 | VALID_PREAMBLE = 0x00001000, /*!< IRQ: Valid preamble detected */ |
Wolfgang Betz |
34:edda6a7238ec | 233 | VALID_SYNC = 0x00002000, /*!< IRQ: Sync word detected */ |
Wolfgang Betz |
34:edda6a7238ec | 234 | RSSI_ABOVE_TH = 0x00004000, /*!< IRQ: RSSI above threshold */ |
Wolfgang Betz |
34:edda6a7238ec | 235 | WKUP_TOUT_LDC = 0x00008000, /*!< IRQ: Wake-up timeout in LDC mode */ |
Wolfgang Betz |
34:edda6a7238ec | 236 | READY = 0x00010000, /*!< IRQ: READY state */ |
Wolfgang Betz |
34:edda6a7238ec | 237 | STANDBY_DELAYED = 0x00020000, /*!< IRQ: STANDBY state after MCU_CK_CONF_CLOCK_TAIL_X clock cycles */ |
Wolfgang Betz |
34:edda6a7238ec | 238 | LOW_BATT_LVL = 0x00040000, /*!< IRQ: Battery level below threshold*/ |
Wolfgang Betz |
34:edda6a7238ec | 239 | POR = 0x00080000, /*!< IRQ: Power On Reset */ |
Wolfgang Betz |
34:edda6a7238ec | 240 | BOR = 0x00100000, /*!< IRQ: Brown out event (both accurate and inaccurate)*/ |
Wolfgang Betz |
34:edda6a7238ec | 241 | LOCK = 0x00200000, /*!< IRQ: LOCK state */ |
Wolfgang Betz |
34:edda6a7238ec | 242 | PM_COUNT_EXPIRED = 0x00400000, /*!< IRQ: only for debug; Power Management startup timer expiration (see reg PM_START_COUNTER, 0xB5) */ |
Wolfgang Betz |
34:edda6a7238ec | 243 | XO_COUNT_EXPIRED = 0x00800000, /*!< IRQ: only for debug; Crystal oscillator settling time counter expired */ |
Wolfgang Betz |
34:edda6a7238ec | 244 | SYNTH_LOCK_TIMEOUT = 0x01000000, /*!< IRQ: only for debug; LOCK state timeout */ |
Wolfgang Betz |
34:edda6a7238ec | 245 | SYNTH_LOCK_STARTUP = 0x02000000, /*!< IRQ: only for debug; see CALIBR_START_COUNTER */ |
Wolfgang Betz |
34:edda6a7238ec | 246 | SYNTH_CAL_TIMEOUT = 0x04000000, /*!< IRQ: only for debug; SYNTH calibration timeout */ |
Wolfgang Betz |
34:edda6a7238ec | 247 | TX_START_TIME = 0x08000000, /*!< IRQ: only for debug; TX circuitry startup time; see TX_START_COUNTER */ |
Wolfgang Betz |
34:edda6a7238ec | 248 | RX_START_TIME = 0x10000000, /*!< IRQ: only for debug; RX circuitry startup time; see TX_START_COUNTER */ |
Wolfgang Betz |
34:edda6a7238ec | 249 | RX_TIMEOUT = 0x20000000, /*!< IRQ: RX operation timeout */ |
Wolfgang Betz |
34:edda6a7238ec | 250 | AES_END = 0x40000000, /*!< IRQ: AES End of operation */ |
Wolfgang Betz |
34:edda6a7238ec | 251 | ALL_IRQ = 0x7FFFFFFF /*!< All the above mentioned IRQs */ |
Wolfgang Betz |
34:edda6a7238ec | 252 | |
Wolfgang Betz |
34:edda6a7238ec | 253 | } IrqList; |
Wolfgang Betz |
34:edda6a7238ec | 254 | |
Wolfgang Betz |
34:edda6a7238ec | 255 | #define IS_SPIRIT_IRQ_LIST(VALUE) ((VALUE == RX_DATA_READY) || \ |
Wolfgang Betz |
34:edda6a7238ec | 256 | (VALUE == RX_DATA_DISC) || \ |
Wolfgang Betz |
34:edda6a7238ec | 257 | (VALUE == TX_DATA_SENT) || \ |
Wolfgang Betz |
34:edda6a7238ec | 258 | (VALUE == MAX_RE_TX_REACH) || \ |
Wolfgang Betz |
34:edda6a7238ec | 259 | (VALUE == CRC_ERROR) || \ |
Wolfgang Betz |
34:edda6a7238ec | 260 | (VALUE == TX_FIFO_ERROR) || \ |
Wolfgang Betz |
34:edda6a7238ec | 261 | (VALUE == RX_FIFO_ERROR) || \ |
Wolfgang Betz |
34:edda6a7238ec | 262 | (VALUE == TX_FIFO_ALMOST_FULL) || \ |
Wolfgang Betz |
34:edda6a7238ec | 263 | (VALUE == TX_FIFO_ALMOST_EMPTY) || \ |
Wolfgang Betz |
34:edda6a7238ec | 264 | (VALUE == RX_FIFO_ALMOST_FULL) || \ |
Wolfgang Betz |
34:edda6a7238ec | 265 | (VALUE == RX_FIFO_ALMOST_EMPTY) || \ |
Wolfgang Betz |
34:edda6a7238ec | 266 | (VALUE == MAX_BO_CCA_REACH) || \ |
Wolfgang Betz |
34:edda6a7238ec | 267 | (VALUE == VALID_PREAMBLE) || \ |
Wolfgang Betz |
34:edda6a7238ec | 268 | (VALUE == VALID_SYNC) || \ |
Wolfgang Betz |
34:edda6a7238ec | 269 | (VALUE == RSSI_ABOVE_TH) || \ |
Wolfgang Betz |
34:edda6a7238ec | 270 | (VALUE == WKUP_TOUT_LDC) || \ |
Wolfgang Betz |
34:edda6a7238ec | 271 | (VALUE == READY) || \ |
Wolfgang Betz |
34:edda6a7238ec | 272 | (VALUE == STANDBY_DELAYED) || \ |
Wolfgang Betz |
34:edda6a7238ec | 273 | (VALUE == LOW_BATT_LVL) || \ |
Wolfgang Betz |
34:edda6a7238ec | 274 | (VALUE == POR) || \ |
Wolfgang Betz |
34:edda6a7238ec | 275 | (VALUE == BOR) || \ |
Wolfgang Betz |
34:edda6a7238ec | 276 | (VALUE == LOCK) || \ |
Wolfgang Betz |
34:edda6a7238ec | 277 | (VALUE == PM_COUNT_EXPIRED) || \ |
Wolfgang Betz |
34:edda6a7238ec | 278 | (VALUE == XO_COUNT_EXPIRED) || \ |
Wolfgang Betz |
34:edda6a7238ec | 279 | (VALUE == SYNTH_LOCK_TIMEOUT) || \ |
Wolfgang Betz |
34:edda6a7238ec | 280 | (VALUE == SYNTH_LOCK_STARTUP) || \ |
Wolfgang Betz |
34:edda6a7238ec | 281 | (VALUE == SYNTH_CAL_TIMEOUT) || \ |
Wolfgang Betz |
34:edda6a7238ec | 282 | (VALUE == TX_START_TIME) || \ |
Wolfgang Betz |
34:edda6a7238ec | 283 | (VALUE == RX_START_TIME) || \ |
Wolfgang Betz |
34:edda6a7238ec | 284 | (VALUE == RX_TIMEOUT) || \ |
Wolfgang Betz |
34:edda6a7238ec | 285 | (VALUE == AES_END) || \ |
Wolfgang Betz |
34:edda6a7238ec | 286 | (VALUE == ALL_IRQ )) |
Wolfgang Betz |
34:edda6a7238ec | 287 | |
Wolfgang Betz |
34:edda6a7238ec | 288 | |
Wolfgang Betz |
34:edda6a7238ec | 289 | /** |
Wolfgang Betz |
34:edda6a7238ec | 290 | * @} |
Wolfgang Betz |
34:edda6a7238ec | 291 | */ |
Wolfgang Betz |
34:edda6a7238ec | 292 | |
Wolfgang Betz |
34:edda6a7238ec | 293 | |
Wolfgang Betz |
34:edda6a7238ec | 294 | /** |
Wolfgang Betz |
34:edda6a7238ec | 295 | * @defgroup Irq_Exported_Constants IRQ Exported Constants |
Wolfgang Betz |
34:edda6a7238ec | 296 | * @{ |
Wolfgang Betz |
34:edda6a7238ec | 297 | */ |
Wolfgang Betz |
34:edda6a7238ec | 298 | |
Wolfgang Betz |
34:edda6a7238ec | 299 | |
Wolfgang Betz |
34:edda6a7238ec | 300 | /** |
Wolfgang Betz |
34:edda6a7238ec | 301 | * @} |
Wolfgang Betz |
34:edda6a7238ec | 302 | */ |
Wolfgang Betz |
34:edda6a7238ec | 303 | |
Wolfgang Betz |
34:edda6a7238ec | 304 | |
Wolfgang Betz |
34:edda6a7238ec | 305 | /** |
Wolfgang Betz |
34:edda6a7238ec | 306 | * @defgroup Irq_Exported_Macros IRQ Exported Macros |
Wolfgang Betz |
34:edda6a7238ec | 307 | * @{ |
Wolfgang Betz |
34:edda6a7238ec | 308 | */ |
Wolfgang Betz |
34:edda6a7238ec | 309 | |
Wolfgang Betz |
34:edda6a7238ec | 310 | |
Wolfgang Betz |
34:edda6a7238ec | 311 | /** |
Wolfgang Betz |
34:edda6a7238ec | 312 | * @} |
Wolfgang Betz |
34:edda6a7238ec | 313 | */ |
Wolfgang Betz |
34:edda6a7238ec | 314 | |
Wolfgang Betz |
34:edda6a7238ec | 315 | |
Wolfgang Betz |
34:edda6a7238ec | 316 | /** |
Wolfgang Betz |
34:edda6a7238ec | 317 | * @defgroup Irq_Exported_Functions IRQ Exported Functions |
Wolfgang Betz |
34:edda6a7238ec | 318 | * @{ |
Wolfgang Betz |
34:edda6a7238ec | 319 | */ |
Wolfgang Betz |
34:edda6a7238ec | 320 | |
Wolfgang Betz |
34:edda6a7238ec | 321 | void SpiritIrqDeInit(SpiritIrqs* pxIrqInit); |
Wolfgang Betz |
34:edda6a7238ec | 322 | void SpiritIrqInit(SpiritIrqs* pxIrqInit); |
Wolfgang Betz |
34:edda6a7238ec | 323 | void SpiritIrq(IrqList xIrq, SpiritFunctionalState xNewState); |
Wolfgang Betz |
34:edda6a7238ec | 324 | void SpiritIrqGetMask(SpiritIrqs* pxIrqMask); |
Wolfgang Betz |
34:edda6a7238ec | 325 | void SpiritIrqGetStatus(SpiritIrqs* pxIrqStatus); |
Wolfgang Betz |
34:edda6a7238ec | 326 | void SpiritIrqClearStatus(void); |
Wolfgang Betz |
34:edda6a7238ec | 327 | SpiritBool SpiritIrqCheckFlag(IrqList xFlag); |
Wolfgang Betz |
34:edda6a7238ec | 328 | |
Wolfgang Betz |
34:edda6a7238ec | 329 | /** |
Wolfgang Betz |
34:edda6a7238ec | 330 | * @} |
Wolfgang Betz |
34:edda6a7238ec | 331 | */ |
Wolfgang Betz |
34:edda6a7238ec | 332 | |
Wolfgang Betz |
34:edda6a7238ec | 333 | /** |
Wolfgang Betz |
34:edda6a7238ec | 334 | * @} |
Wolfgang Betz |
34:edda6a7238ec | 335 | */ |
Wolfgang Betz |
34:edda6a7238ec | 336 | |
Wolfgang Betz |
34:edda6a7238ec | 337 | |
Wolfgang Betz |
34:edda6a7238ec | 338 | /** |
Wolfgang Betz |
34:edda6a7238ec | 339 | * @} |
Wolfgang Betz |
34:edda6a7238ec | 340 | */ |
Wolfgang Betz |
34:edda6a7238ec | 341 | |
Wolfgang Betz |
34:edda6a7238ec | 342 | |
Wolfgang Betz |
34:edda6a7238ec | 343 | #ifdef __cplusplus |
Wolfgang Betz |
34:edda6a7238ec | 344 | } |
Wolfgang Betz |
34:edda6a7238ec | 345 | #endif |
Wolfgang Betz |
34:edda6a7238ec | 346 | |
Wolfgang Betz |
34:edda6a7238ec | 347 | #endif |
Wolfgang Betz |
34:edda6a7238ec | 348 | |
Wolfgang Betz |
34:edda6a7238ec | 349 | /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/ |