1*150812a8SEvalZero /* 2*150812a8SEvalZero * Copyright (c) 2017 - 2018, Nordic Semiconductor ASA 3*150812a8SEvalZero * All rights reserved. 4*150812a8SEvalZero * 5*150812a8SEvalZero * Redistribution and use in source and binary forms, with or without 6*150812a8SEvalZero * modification, are permitted provided that the following conditions are met: 7*150812a8SEvalZero * 8*150812a8SEvalZero * 1. Redistributions of source code must retain the above copyright notice, this 9*150812a8SEvalZero * list of conditions and the following disclaimer. 10*150812a8SEvalZero * 11*150812a8SEvalZero * 2. Redistributions in binary form must reproduce the above copyright 12*150812a8SEvalZero * notice, this list of conditions and the following disclaimer in the 13*150812a8SEvalZero * documentation and/or other materials provided with the distribution. 14*150812a8SEvalZero * 15*150812a8SEvalZero * 3. Neither the name of the copyright holder nor the names of its 16*150812a8SEvalZero * contributors may be used to endorse or promote products derived from this 17*150812a8SEvalZero * software without specific prior written permission. 18*150812a8SEvalZero * 19*150812a8SEvalZero * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20*150812a8SEvalZero * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21*150812a8SEvalZero * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22*150812a8SEvalZero * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 23*150812a8SEvalZero * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24*150812a8SEvalZero * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25*150812a8SEvalZero * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26*150812a8SEvalZero * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27*150812a8SEvalZero * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28*150812a8SEvalZero * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29*150812a8SEvalZero * POSSIBILITY OF SUCH DAMAGE. 30*150812a8SEvalZero */ 31*150812a8SEvalZero 32*150812a8SEvalZero #ifndef NRFX_GLUE_H__ 33*150812a8SEvalZero #define NRFX_GLUE_H__ 34*150812a8SEvalZero 35*150812a8SEvalZero // THIS IS A TEMPLATE FILE. 36*150812a8SEvalZero // It should be copied to a suitable location within the host environment into 37*150812a8SEvalZero // which nrfx is integrated, and the following macros should be provided with 38*150812a8SEvalZero // appropriate implementations. 39*150812a8SEvalZero // And this comment should be removed from the customized file. 40*150812a8SEvalZero 41*150812a8SEvalZero #ifdef __cplusplus 42*150812a8SEvalZero extern "C" { 43*150812a8SEvalZero #endif 44*150812a8SEvalZero 45*150812a8SEvalZero int NVIC_IRQ_IS_ENABLED(unsigned int irq); 46*150812a8SEvalZero unsigned int nrfx_enter_critical(void); 47*150812a8SEvalZero void nrfx_exit_critical(unsigned int ctx); 48*150812a8SEvalZero 49*150812a8SEvalZero /** 50*150812a8SEvalZero * @defgroup nrfx_glue nrfx_glue.h 51*150812a8SEvalZero * @{ 52*150812a8SEvalZero * @ingroup nrfx 53*150812a8SEvalZero * 54*150812a8SEvalZero * @brief This file contains macros that should be implemented according to 55*150812a8SEvalZero * the needs of the host environment into which @em nrfx is integrated. 56*150812a8SEvalZero */ 57*150812a8SEvalZero 58*150812a8SEvalZero // Uncomment this line to use the standard MDK way of binding IRQ handlers 59*150812a8SEvalZero // at linking time. 60*150812a8SEvalZero //#include <soc/nrfx_irqs.h> 61*150812a8SEvalZero 62*150812a8SEvalZero //------------------------------------------------------------------------------ 63*150812a8SEvalZero 64*150812a8SEvalZero /** 65*150812a8SEvalZero * @brief Macro for placing a runtime assertion. 66*150812a8SEvalZero * 67*150812a8SEvalZero * @param expression Expression to evaluate. 68*150812a8SEvalZero */ 69*150812a8SEvalZero #define NRFX_ASSERT(expression) 70*150812a8SEvalZero 71*150812a8SEvalZero /** 72*150812a8SEvalZero * @brief Macro for placing a compile time assertion. 73*150812a8SEvalZero * 74*150812a8SEvalZero * @param expression Expression to evaluate. 75*150812a8SEvalZero */ 76*150812a8SEvalZero #define NRFX_STATIC_ASSERT(expression) 77*150812a8SEvalZero 78*150812a8SEvalZero //------------------------------------------------------------------------------ 79*150812a8SEvalZero 80*150812a8SEvalZero /** 81*150812a8SEvalZero * @brief Macro for setting the priority of a specific IRQ. 82*150812a8SEvalZero * 83*150812a8SEvalZero * @param irq_number IRQ number. 84*150812a8SEvalZero * @param priority Priority to set. 85*150812a8SEvalZero */ 86*150812a8SEvalZero #define NRFX_IRQ_PRIORITY_SET(irq_number, priority) NVIC_SetPriority(irq_number, priority) 87*150812a8SEvalZero 88*150812a8SEvalZero /** 89*150812a8SEvalZero * @brief Macro for enabling a specific IRQ. 90*150812a8SEvalZero * 91*150812a8SEvalZero * @param irq_number IRQ number. 92*150812a8SEvalZero */ 93*150812a8SEvalZero #define NRFX_IRQ_ENABLE(irq_number) NVIC_EnableIRQ(irq_number) 94*150812a8SEvalZero 95*150812a8SEvalZero /** 96*150812a8SEvalZero * @brief Macro for checking if a specific IRQ is enabled. 97*150812a8SEvalZero * 98*150812a8SEvalZero * @param irq_number IRQ number. 99*150812a8SEvalZero * 100*150812a8SEvalZero * @retval true If the IRQ is enabled. 101*150812a8SEvalZero * @retval false Otherwise. 102*150812a8SEvalZero */ 103*150812a8SEvalZero #define NRFX_IRQ_IS_ENABLED(irq_number) NVIC_IRQ_IS_ENABLED(irq_number) 104*150812a8SEvalZero 105*150812a8SEvalZero /** 106*150812a8SEvalZero * @brief Macro for disabling a specific IRQ. 107*150812a8SEvalZero * 108*150812a8SEvalZero * @param irq_number IRQ number. 109*150812a8SEvalZero */ 110*150812a8SEvalZero #define NRFX_IRQ_DISABLE(irq_number) NVIC_DisableIRQ(irq_number) 111*150812a8SEvalZero 112*150812a8SEvalZero /** 113*150812a8SEvalZero * @brief Macro for setting a specific IRQ as pending. 114*150812a8SEvalZero * 115*150812a8SEvalZero * @param irq_number IRQ number. 116*150812a8SEvalZero */ 117*150812a8SEvalZero #define NRFX_IRQ_PENDING_SET(irq_number) NVIC_SetPendingIRQ(irq_number) 118*150812a8SEvalZero 119*150812a8SEvalZero /** 120*150812a8SEvalZero * @brief Macro for clearing the pending status of a specific IRQ. 121*150812a8SEvalZero * 122*150812a8SEvalZero * @param irq_number IRQ number. 123*150812a8SEvalZero */ 124*150812a8SEvalZero #define NRFX_IRQ_PENDING_CLEAR(irq_number) NVIC_ClearPendingIRQ(irq_number) 125*150812a8SEvalZero 126*150812a8SEvalZero /** 127*150812a8SEvalZero * @brief Macro for checking the pending status of a specific IRQ. 128*150812a8SEvalZero * 129*150812a8SEvalZero * @retval true If the IRQ is pending. 130*150812a8SEvalZero * @retval false Otherwise. 131*150812a8SEvalZero */ 132*150812a8SEvalZero #define NRFX_IRQ_IS_PENDING(irq_number) NVIC_GetPendingIRQ(irq_number) 133*150812a8SEvalZero 134*150812a8SEvalZero /** 135*150812a8SEvalZero * @brief Macro for entering into a critical section. 136*150812a8SEvalZero */ 137*150812a8SEvalZero #define NRFX_CRITICAL_SECTION_ENTER() {unsigned int ctx; ctx = nrfx_enter_critical(); 138*150812a8SEvalZero 139*150812a8SEvalZero /** 140*150812a8SEvalZero * @brief Macro for exiting from a critical section. 141*150812a8SEvalZero */ 142*150812a8SEvalZero #define NRFX_CRITICAL_SECTION_EXIT() nrfx_exit_critical(ctx);} 143*150812a8SEvalZero 144*150812a8SEvalZero //------------------------------------------------------------------------------ 145*150812a8SEvalZero 146*150812a8SEvalZero /** 147*150812a8SEvalZero * @brief When set to a non-zero value, this macro specifies that 148*150812a8SEvalZero * @ref nrfx_coredep_delay_us uses a precise DWT-based solution. 149*150812a8SEvalZero * A compilation error is generated if the DWT unit is not present 150*150812a8SEvalZero * in the SoC used. 151*150812a8SEvalZero */ 152*150812a8SEvalZero #define NRFX_DELAY_DWT_BASED 0 153*150812a8SEvalZero 154*150812a8SEvalZero /** 155*150812a8SEvalZero * @brief Macro for delaying the code execution for at least the specified time. 156*150812a8SEvalZero * 157*150812a8SEvalZero * @param us_time Number of microseconds to wait. 158*150812a8SEvalZero */ 159*150812a8SEvalZero #define NRFX_DELAY_US(us_time) 160*150812a8SEvalZero 161*150812a8SEvalZero //------------------------------------------------------------------------------ 162*150812a8SEvalZero 163*150812a8SEvalZero /** 164*150812a8SEvalZero * @brief Atomic 32-bit unsigned type. 165*150812a8SEvalZero */ 166*150812a8SEvalZero #define nrfx_atomic_t 167*150812a8SEvalZero 168*150812a8SEvalZero /** 169*150812a8SEvalZero * @brief Macro for storing a value to an atomic object and returning its previous value. 170*150812a8SEvalZero * 171*150812a8SEvalZero * @param[in] p_data Atomic memory pointer. 172*150812a8SEvalZero * @param[in] value Value to store. 173*150812a8SEvalZero * 174*150812a8SEvalZero * @return Previous value of the atomic object. 175*150812a8SEvalZero */ 176*150812a8SEvalZero #define NRFX_ATOMIC_FETCH_STORE(p_data, value) 177*150812a8SEvalZero 178*150812a8SEvalZero /** 179*150812a8SEvalZero * @brief Macro for running a bitwise OR operation on an atomic object and returning its previous value. 180*150812a8SEvalZero * 181*150812a8SEvalZero * @param[in] p_data Atomic memory pointer. 182*150812a8SEvalZero * @param[in] value Value of the second operand in the OR operation. 183*150812a8SEvalZero * 184*150812a8SEvalZero * @return Previous value of the atomic object. 185*150812a8SEvalZero */ 186*150812a8SEvalZero #define NRFX_ATOMIC_FETCH_OR(p_data, value) 187*150812a8SEvalZero 188*150812a8SEvalZero /** 189*150812a8SEvalZero * @brief Macro for running a bitwise AND operation on an atomic object 190*150812a8SEvalZero * and returning its previous value. 191*150812a8SEvalZero * 192*150812a8SEvalZero * @param[in] p_data Atomic memory pointer. 193*150812a8SEvalZero * @param[in] value Value of the second operand in the AND operation. 194*150812a8SEvalZero * 195*150812a8SEvalZero * @return Previous value of the atomic object. 196*150812a8SEvalZero */ 197*150812a8SEvalZero #define NRFX_ATOMIC_FETCH_AND(p_data, value) 198*150812a8SEvalZero 199*150812a8SEvalZero /** 200*150812a8SEvalZero * @brief Macro for running a bitwise XOR operation on an atomic object 201*150812a8SEvalZero * and returning its previous value. 202*150812a8SEvalZero * 203*150812a8SEvalZero * @param[in] p_data Atomic memory pointer. 204*150812a8SEvalZero * @param[in] value Value of the second operand in the XOR operation. 205*150812a8SEvalZero * 206*150812a8SEvalZero * @return Previous value of the atomic object. 207*150812a8SEvalZero */ 208*150812a8SEvalZero #define NRFX_ATOMIC_FETCH_XOR(p_data, value) 209*150812a8SEvalZero 210*150812a8SEvalZero /** 211*150812a8SEvalZero * @brief Macro for running an addition operation on an atomic object 212*150812a8SEvalZero * and returning its previous value. 213*150812a8SEvalZero * 214*150812a8SEvalZero * @param[in] p_data Atomic memory pointer. 215*150812a8SEvalZero * @param[in] value Value of the second operand in the ADD operation. 216*150812a8SEvalZero * 217*150812a8SEvalZero * @return Previous value of the atomic object. 218*150812a8SEvalZero */ 219*150812a8SEvalZero #define NRFX_ATOMIC_FETCH_ADD(p_data, value) 220*150812a8SEvalZero 221*150812a8SEvalZero /** 222*150812a8SEvalZero * @brief Macro for running a subtraction operation on an atomic object 223*150812a8SEvalZero * and returning its previous value. 224*150812a8SEvalZero * 225*150812a8SEvalZero * @param[in] p_data Atomic memory pointer. 226*150812a8SEvalZero * @param[in] value Value of the second operand in the SUB operation. 227*150812a8SEvalZero * 228*150812a8SEvalZero * @return Previous value of the atomic object. 229*150812a8SEvalZero */ 230*150812a8SEvalZero #define NRFX_ATOMIC_FETCH_SUB(p_data, value) 231*150812a8SEvalZero 232*150812a8SEvalZero //------------------------------------------------------------------------------ 233*150812a8SEvalZero 234*150812a8SEvalZero /** 235*150812a8SEvalZero * @brief When set to a non-zero value, this macro specifies that the 236*150812a8SEvalZero * @ref nrfx_error_codes and the @ref nrfx_err_t type itself are defined 237*150812a8SEvalZero * in a customized way and the default definitions from @c <nrfx_error.h> 238*150812a8SEvalZero * should not be used. 239*150812a8SEvalZero */ 240*150812a8SEvalZero #define NRFX_CUSTOM_ERROR_CODES 0 241*150812a8SEvalZero 242*150812a8SEvalZero //------------------------------------------------------------------------------ 243*150812a8SEvalZero 244*150812a8SEvalZero /** 245*150812a8SEvalZero * @brief Bitmask defining DPPI channels reserved to be used outside of nrfx. 246*150812a8SEvalZero */ 247*150812a8SEvalZero #define NRFX_DPPI_CHANNELS_USED 0 248*150812a8SEvalZero 249*150812a8SEvalZero /** 250*150812a8SEvalZero * @brief Bitmask defining DPPI groups reserved to be used outside of nrfx. 251*150812a8SEvalZero */ 252*150812a8SEvalZero #define NRFX_DPPI_GROUPS_USED 0 253*150812a8SEvalZero 254*150812a8SEvalZero /** 255*150812a8SEvalZero * @brief Bitmask defining PPI channels reserved to be used outside of nrfx. 256*150812a8SEvalZero */ 257*150812a8SEvalZero #define NRFX_PPI_CHANNELS_USED 0 258*150812a8SEvalZero 259*150812a8SEvalZero /** 260*150812a8SEvalZero * @brief Bitmask defining PPI groups reserved to be used outside of nrfx. 261*150812a8SEvalZero */ 262*150812a8SEvalZero #define NRFX_PPI_GROUPS_USED 0 263*150812a8SEvalZero 264*150812a8SEvalZero /** 265*150812a8SEvalZero * @brief Bitmask defining SWI instances reserved to be used outside of nrfx. 266*150812a8SEvalZero */ 267*150812a8SEvalZero #define NRFX_SWI_USED 0 268*150812a8SEvalZero 269*150812a8SEvalZero /** 270*150812a8SEvalZero * @brief Bitmask defining TIMER instances reserved to be used outside of nrfx. 271*150812a8SEvalZero */ 272*150812a8SEvalZero #define NRFX_TIMERS_USED 0 273*150812a8SEvalZero 274*150812a8SEvalZero /** @} */ 275*150812a8SEvalZero 276*150812a8SEvalZero #ifdef __cplusplus 277*150812a8SEvalZero } 278*150812a8SEvalZero #endif 279*150812a8SEvalZero 280*150812a8SEvalZero #endif // NRFX_GLUE_H__ 281