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