1*1b2596b5SMatthias Ringwald /** 2*1b2596b5SMatthias Ringwald * \file 3*1b2596b5SMatthias Ringwald * 4*1b2596b5SMatthias Ringwald * \brief Global interrupt management for 8- and 32-bit AVR 5*1b2596b5SMatthias Ringwald * 6*1b2596b5SMatthias Ringwald * Copyright (c) 2010-2015 Atmel Corporation. All rights reserved. 7*1b2596b5SMatthias Ringwald * 8*1b2596b5SMatthias Ringwald * \asf_license_start 9*1b2596b5SMatthias Ringwald * 10*1b2596b5SMatthias Ringwald * \page License 11*1b2596b5SMatthias Ringwald * 12*1b2596b5SMatthias Ringwald * Redistribution and use in source and binary forms, with or without 13*1b2596b5SMatthias Ringwald * modification, are permitted provided that the following conditions are met: 14*1b2596b5SMatthias Ringwald * 15*1b2596b5SMatthias Ringwald * 1. Redistributions of source code must retain the above copyright notice, 16*1b2596b5SMatthias Ringwald * this list of conditions and the following disclaimer. 17*1b2596b5SMatthias Ringwald * 18*1b2596b5SMatthias Ringwald * 2. Redistributions in binary form must reproduce the above copyright notice, 19*1b2596b5SMatthias Ringwald * this list of conditions and the following disclaimer in the documentation 20*1b2596b5SMatthias Ringwald * and/or other materials provided with the distribution. 21*1b2596b5SMatthias Ringwald * 22*1b2596b5SMatthias Ringwald * 3. The name of Atmel may not be used to endorse or promote products derived 23*1b2596b5SMatthias Ringwald * from this software without specific prior written permission. 24*1b2596b5SMatthias Ringwald * 25*1b2596b5SMatthias Ringwald * 4. This software may only be redistributed and used in connection with an 26*1b2596b5SMatthias Ringwald * Atmel microcontroller product. 27*1b2596b5SMatthias Ringwald * 28*1b2596b5SMatthias Ringwald * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED 29*1b2596b5SMatthias Ringwald * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 30*1b2596b5SMatthias Ringwald * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE 31*1b2596b5SMatthias Ringwald * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR 32*1b2596b5SMatthias Ringwald * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 33*1b2596b5SMatthias Ringwald * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 34*1b2596b5SMatthias Ringwald * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 35*1b2596b5SMatthias Ringwald * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 36*1b2596b5SMatthias Ringwald * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 37*1b2596b5SMatthias Ringwald * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 38*1b2596b5SMatthias Ringwald * POSSIBILITY OF SUCH DAMAGE. 39*1b2596b5SMatthias Ringwald * 40*1b2596b5SMatthias Ringwald * \asf_license_stop 41*1b2596b5SMatthias Ringwald * 42*1b2596b5SMatthias Ringwald */ 43*1b2596b5SMatthias Ringwald /* 44*1b2596b5SMatthias Ringwald * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a> 45*1b2596b5SMatthias Ringwald */ 46*1b2596b5SMatthias Ringwald #ifndef UTILS_INTERRUPT_H 47*1b2596b5SMatthias Ringwald #define UTILS_INTERRUPT_H 48*1b2596b5SMatthias Ringwald 49*1b2596b5SMatthias Ringwald #include <parts.h> 50*1b2596b5SMatthias Ringwald 51*1b2596b5SMatthias Ringwald #if XMEGA || MEGA || TINY 52*1b2596b5SMatthias Ringwald # include "interrupt/interrupt_avr8.h" 53*1b2596b5SMatthias Ringwald #elif UC3 54*1b2596b5SMatthias Ringwald # include "interrupt/interrupt_avr32.h" 55*1b2596b5SMatthias Ringwald #elif SAM 56*1b2596b5SMatthias Ringwald # include "interrupt/interrupt_sam_nvic.h" 57*1b2596b5SMatthias Ringwald #else 58*1b2596b5SMatthias Ringwald # error Unsupported device. 59*1b2596b5SMatthias Ringwald #endif 60*1b2596b5SMatthias Ringwald 61*1b2596b5SMatthias Ringwald /** 62*1b2596b5SMatthias Ringwald * \defgroup interrupt_group Global interrupt management 63*1b2596b5SMatthias Ringwald * 64*1b2596b5SMatthias Ringwald * This is a driver for global enabling and disabling of interrupts. 65*1b2596b5SMatthias Ringwald * 66*1b2596b5SMatthias Ringwald * @{ 67*1b2596b5SMatthias Ringwald */ 68*1b2596b5SMatthias Ringwald 69*1b2596b5SMatthias Ringwald #if defined(__DOXYGEN__) 70*1b2596b5SMatthias Ringwald /** 71*1b2596b5SMatthias Ringwald * \def CONFIG_INTERRUPT_FORCE_INTC 72*1b2596b5SMatthias Ringwald * \brief Force usage of the ASF INTC driver 73*1b2596b5SMatthias Ringwald * 74*1b2596b5SMatthias Ringwald * Predefine this symbol when preprocessing to force the use of the ASF INTC driver. 75*1b2596b5SMatthias Ringwald * This is useful to ensure compatibility across compilers and shall be used only when required 76*1b2596b5SMatthias Ringwald * by the application needs. 77*1b2596b5SMatthias Ringwald */ 78*1b2596b5SMatthias Ringwald # define CONFIG_INTERRUPT_FORCE_INTC 79*1b2596b5SMatthias Ringwald #endif 80*1b2596b5SMatthias Ringwald 81*1b2596b5SMatthias Ringwald //! \name Global interrupt flags 82*1b2596b5SMatthias Ringwald //@{ 83*1b2596b5SMatthias Ringwald /** 84*1b2596b5SMatthias Ringwald * \typedef irqflags_t 85*1b2596b5SMatthias Ringwald * \brief Type used for holding state of interrupt flag 86*1b2596b5SMatthias Ringwald */ 87*1b2596b5SMatthias Ringwald 88*1b2596b5SMatthias Ringwald /** 89*1b2596b5SMatthias Ringwald * \def cpu_irq_enable 90*1b2596b5SMatthias Ringwald * \brief Enable interrupts globally 91*1b2596b5SMatthias Ringwald */ 92*1b2596b5SMatthias Ringwald 93*1b2596b5SMatthias Ringwald /** 94*1b2596b5SMatthias Ringwald * \def cpu_irq_disable 95*1b2596b5SMatthias Ringwald * \brief Disable interrupts globally 96*1b2596b5SMatthias Ringwald */ 97*1b2596b5SMatthias Ringwald 98*1b2596b5SMatthias Ringwald /** 99*1b2596b5SMatthias Ringwald * \fn irqflags_t cpu_irq_save(void) 100*1b2596b5SMatthias Ringwald * \brief Get and clear the global interrupt flags 101*1b2596b5SMatthias Ringwald * 102*1b2596b5SMatthias Ringwald * Use in conjunction with \ref cpu_irq_restore. 103*1b2596b5SMatthias Ringwald * 104*1b2596b5SMatthias Ringwald * \return Current state of interrupt flags. 105*1b2596b5SMatthias Ringwald * 106*1b2596b5SMatthias Ringwald * \note This function leaves interrupts disabled. 107*1b2596b5SMatthias Ringwald */ 108*1b2596b5SMatthias Ringwald 109*1b2596b5SMatthias Ringwald /** 110*1b2596b5SMatthias Ringwald * \fn void cpu_irq_restore(irqflags_t flags) 111*1b2596b5SMatthias Ringwald * \brief Restore global interrupt flags 112*1b2596b5SMatthias Ringwald * 113*1b2596b5SMatthias Ringwald * Use in conjunction with \ref cpu_irq_save. 114*1b2596b5SMatthias Ringwald * 115*1b2596b5SMatthias Ringwald * \param flags State to set interrupt flag to. 116*1b2596b5SMatthias Ringwald */ 117*1b2596b5SMatthias Ringwald 118*1b2596b5SMatthias Ringwald /** 119*1b2596b5SMatthias Ringwald * \fn bool cpu_irq_is_enabled_flags(irqflags_t flags) 120*1b2596b5SMatthias Ringwald * \brief Check if interrupts are globally enabled in supplied flags 121*1b2596b5SMatthias Ringwald * 122*1b2596b5SMatthias Ringwald * \param flags Currents state of interrupt flags. 123*1b2596b5SMatthias Ringwald * 124*1b2596b5SMatthias Ringwald * \return True if interrupts are enabled. 125*1b2596b5SMatthias Ringwald */ 126*1b2596b5SMatthias Ringwald 127*1b2596b5SMatthias Ringwald /** 128*1b2596b5SMatthias Ringwald * \def cpu_irq_is_enabled 129*1b2596b5SMatthias Ringwald * \brief Check if interrupts are globally enabled 130*1b2596b5SMatthias Ringwald * 131*1b2596b5SMatthias Ringwald * \return True if interrupts are enabled. 132*1b2596b5SMatthias Ringwald */ 133*1b2596b5SMatthias Ringwald //@} 134*1b2596b5SMatthias Ringwald 135*1b2596b5SMatthias Ringwald //! @} 136*1b2596b5SMatthias Ringwald 137*1b2596b5SMatthias Ringwald /** 138*1b2596b5SMatthias Ringwald * \ingroup interrupt_group 139*1b2596b5SMatthias Ringwald * \defgroup interrupt_deprecated_group Deprecated interrupt definitions 140*1b2596b5SMatthias Ringwald */ 141*1b2596b5SMatthias Ringwald 142*1b2596b5SMatthias Ringwald #endif /* UTILS_INTERRUPT_H */ 143