t

Fork of mbed-dev by mbed official

Committer:
<>
Date:
Fri Oct 28 11:17:30 2016 +0100
Revision:
149:156823d33999
Parent:
targets/hal/TARGET_Atmel/TARGET_SAM_CortexM0P/drivers/extint/extint.h@15:a81a8d6c1dfe
This updates the lib to the mbed lib v128

NOTE: This release includes a restructuring of the file and directory locations and thus some
include paths in your code may need updating accordingly.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 15:a81a8d6c1dfe 1 /**
mbed_official 15:a81a8d6c1dfe 2 * \file
mbed_official 15:a81a8d6c1dfe 3 *
mbed_official 15:a81a8d6c1dfe 4 * \brief SAM External Interrupt Driver
mbed_official 15:a81a8d6c1dfe 5 *
mbed_official 15:a81a8d6c1dfe 6 * Copyright (C) 2012-2015 Atmel Corporation. All rights reserved.
mbed_official 15:a81a8d6c1dfe 7 *
mbed_official 15:a81a8d6c1dfe 8 * \asf_license_start
mbed_official 15:a81a8d6c1dfe 9 *
mbed_official 15:a81a8d6c1dfe 10 * \page License
mbed_official 15:a81a8d6c1dfe 11 *
mbed_official 15:a81a8d6c1dfe 12 * Redistribution and use in source and binary forms, with or without
mbed_official 15:a81a8d6c1dfe 13 * modification, are permitted provided that the following conditions are met:
mbed_official 15:a81a8d6c1dfe 14 *
mbed_official 15:a81a8d6c1dfe 15 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 15:a81a8d6c1dfe 16 * this list of conditions and the following disclaimer.
mbed_official 15:a81a8d6c1dfe 17 *
mbed_official 15:a81a8d6c1dfe 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 15:a81a8d6c1dfe 19 * this list of conditions and the following disclaimer in the documentation
mbed_official 15:a81a8d6c1dfe 20 * and/or other materials provided with the distribution.
mbed_official 15:a81a8d6c1dfe 21 *
mbed_official 15:a81a8d6c1dfe 22 * 3. The name of Atmel may not be used to endorse or promote products derived
mbed_official 15:a81a8d6c1dfe 23 * from this software without specific prior written permission.
mbed_official 15:a81a8d6c1dfe 24 *
mbed_official 15:a81a8d6c1dfe 25 * 4. This software may only be redistributed and used in connection with an
mbed_official 15:a81a8d6c1dfe 26 * Atmel microcontroller product.
mbed_official 15:a81a8d6c1dfe 27 *
mbed_official 15:a81a8d6c1dfe 28 * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
mbed_official 15:a81a8d6c1dfe 29 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
mbed_official 15:a81a8d6c1dfe 30 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
mbed_official 15:a81a8d6c1dfe 31 * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
mbed_official 15:a81a8d6c1dfe 32 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 15:a81a8d6c1dfe 33 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
mbed_official 15:a81a8d6c1dfe 34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
mbed_official 15:a81a8d6c1dfe 35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
mbed_official 15:a81a8d6c1dfe 36 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
mbed_official 15:a81a8d6c1dfe 37 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
mbed_official 15:a81a8d6c1dfe 38 * POSSIBILITY OF SUCH DAMAGE.
mbed_official 15:a81a8d6c1dfe 39 *
mbed_official 15:a81a8d6c1dfe 40 * \asf_license_stop
mbed_official 15:a81a8d6c1dfe 41 *
mbed_official 15:a81a8d6c1dfe 42 */
mbed_official 15:a81a8d6c1dfe 43 /*
mbed_official 15:a81a8d6c1dfe 44 * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
mbed_official 15:a81a8d6c1dfe 45 */
mbed_official 15:a81a8d6c1dfe 46 #ifndef EXTINT_H_INCLUDED
mbed_official 15:a81a8d6c1dfe 47 #define EXTINT_H_INCLUDED
mbed_official 15:a81a8d6c1dfe 48
mbed_official 15:a81a8d6c1dfe 49 /**
mbed_official 15:a81a8d6c1dfe 50 * \defgroup asfdoc_sam0_extint_group SAM External Interrupt Driver (EXTINT)
mbed_official 15:a81a8d6c1dfe 51 *
mbed_official 15:a81a8d6c1dfe 52 * This driver for Atmel&reg; | SMART SAM devices provides an interface for the configuration
mbed_official 15:a81a8d6c1dfe 53 * and management of external interrupts generated by the physical device pins,
mbed_official 15:a81a8d6c1dfe 54 * including edge detection. The following driver API modes are covered by this
mbed_official 15:a81a8d6c1dfe 55 * manual:
mbed_official 15:a81a8d6c1dfe 56 *
mbed_official 15:a81a8d6c1dfe 57 * - Polled APIs
mbed_official 15:a81a8d6c1dfe 58 * \if EXTINT_CALLBACK_MODE
mbed_official 15:a81a8d6c1dfe 59 * - Callback APIs
mbed_official 15:a81a8d6c1dfe 60 * \endif
mbed_official 15:a81a8d6c1dfe 61 *
mbed_official 15:a81a8d6c1dfe 62 * The following peripherals are used by this module:
mbed_official 15:a81a8d6c1dfe 63 * - EIC (External Interrupt Controller)
mbed_official 15:a81a8d6c1dfe 64 *
mbed_official 15:a81a8d6c1dfe 65 * The following devices can use this module:
mbed_official 15:a81a8d6c1dfe 66 * - Atmel | SMART SAM D20/D21
mbed_official 15:a81a8d6c1dfe 67 * - Atmel | SMART SAM R21
mbed_official 15:a81a8d6c1dfe 68 * - Atmel | SMART SAM D10/D11
mbed_official 15:a81a8d6c1dfe 69 * - Atmel | SMART SAM L21
mbed_official 15:a81a8d6c1dfe 70 * - Atmel | SMART SAM DAx
mbed_official 15:a81a8d6c1dfe 71 * - Atmel | SMART SAM C20/C21
mbed_official 15:a81a8d6c1dfe 72 *
mbed_official 15:a81a8d6c1dfe 73 * The outline of this documentation is as follows:
mbed_official 15:a81a8d6c1dfe 74 * - \ref asfdoc_sam0_extint_prerequisites
mbed_official 15:a81a8d6c1dfe 75 * - \ref asfdoc_sam0_extint_module_overview
mbed_official 15:a81a8d6c1dfe 76 * - \ref asfdoc_sam0_extint_special_considerations
mbed_official 15:a81a8d6c1dfe 77 * - \ref asfdoc_sam0_extint_extra_info
mbed_official 15:a81a8d6c1dfe 78 * - \ref asfdoc_sam0_extint_examples
mbed_official 15:a81a8d6c1dfe 79 * - \ref asfdoc_sam0_extint_api_overview
mbed_official 15:a81a8d6c1dfe 80 *
mbed_official 15:a81a8d6c1dfe 81 *
mbed_official 15:a81a8d6c1dfe 82 * \section asfdoc_sam0_extint_prerequisites Prerequisites
mbed_official 15:a81a8d6c1dfe 83 *
mbed_official 15:a81a8d6c1dfe 84 * There are no prerequisites for this module.
mbed_official 15:a81a8d6c1dfe 85 *
mbed_official 15:a81a8d6c1dfe 86 *
mbed_official 15:a81a8d6c1dfe 87 * \section asfdoc_sam0_extint_module_overview Module Overview
mbed_official 15:a81a8d6c1dfe 88 *
mbed_official 15:a81a8d6c1dfe 89 * The External Interrupt (EXTINT) module provides a method of asynchronously
mbed_official 15:a81a8d6c1dfe 90 * detecting rising edge, falling edge or specific level detection on individual
mbed_official 15:a81a8d6c1dfe 91 * I/O pins of a device. This detection can then be used to trigger a software
mbed_official 15:a81a8d6c1dfe 92 * interrupt or event, or polled for later use if required. External interrupts
mbed_official 15:a81a8d6c1dfe 93 * can also optionally be used to automatically wake up the device from sleep
mbed_official 15:a81a8d6c1dfe 94 * mode, allowing the device to conserve power while still being able to react
mbed_official 15:a81a8d6c1dfe 95 * to an external stimulus in a timely manner.
mbed_official 15:a81a8d6c1dfe 96 *
mbed_official 15:a81a8d6c1dfe 97 * \subsection asfdoc_sam0_extint_logical_channels Logical Channels
mbed_official 15:a81a8d6c1dfe 98 * The External Interrupt module contains a number of logical channels, each of
mbed_official 15:a81a8d6c1dfe 99 * which is capable of being individually configured for a given pin routing,
mbed_official 15:a81a8d6c1dfe 100 * detection mode, and filtering/wake up characteristics.
mbed_official 15:a81a8d6c1dfe 101 *
mbed_official 15:a81a8d6c1dfe 102 * Each individual logical external interrupt channel may be routed to a single
mbed_official 15:a81a8d6c1dfe 103 * physical device I/O pin in order to detect a particular edge or level of the
mbed_official 15:a81a8d6c1dfe 104 * incoming signal.
mbed_official 15:a81a8d6c1dfe 105 *
mbed_official 15:a81a8d6c1dfe 106 * \subsection asfdoc_sam0_extint_module_overview_nmi_chanel NMI Channels
mbed_official 15:a81a8d6c1dfe 107 *
mbed_official 15:a81a8d6c1dfe 108 * One or more Non Maskable Interrupt (NMI) channels are provided within each
mbed_official 15:a81a8d6c1dfe 109 * physical External Interrupt Controller module, allowing a single physical pin
mbed_official 15:a81a8d6c1dfe 110 * of the device to fire a single NMI interrupt in response to a particular
mbed_official 15:a81a8d6c1dfe 111 * edge or level stimulus. A NMI cannot, as the name suggests, be disabled in
mbed_official 15:a81a8d6c1dfe 112 * firmware and will take precedence over any in-progress interrupt sources.
mbed_official 15:a81a8d6c1dfe 113 *
mbed_official 15:a81a8d6c1dfe 114 * NMIs can be used to implement critical device features such as forced
mbed_official 15:a81a8d6c1dfe 115 * software reset or other functionality where the action should be executed in
mbed_official 15:a81a8d6c1dfe 116 * preference to all other running code with a minimum amount of latency.
mbed_official 15:a81a8d6c1dfe 117 *
mbed_official 15:a81a8d6c1dfe 118 * \subsection asfdoc_sam0_extint_module_overview_filtering Input Filtering and Detection
mbed_official 15:a81a8d6c1dfe 119 *
mbed_official 15:a81a8d6c1dfe 120 * To reduce the possibility of noise or other transient signals causing
mbed_official 15:a81a8d6c1dfe 121 * unwanted device wake-ups, interrupts and/or events via an external interrupt
mbed_official 15:a81a8d6c1dfe 122 * channel, a hardware signal filter can be enabled on individual channels. This
mbed_official 15:a81a8d6c1dfe 123 * filter provides a Majority-of-Three voter filter on the incoming signal, so
mbed_official 15:a81a8d6c1dfe 124 * that the input state is considered to be the majority vote of three
mbed_official 15:a81a8d6c1dfe 125 * subsequent samples of the pin input buffer. The possible sampled input and
mbed_official 15:a81a8d6c1dfe 126 * resulting filtered output when the filter is enabled is shown in
mbed_official 15:a81a8d6c1dfe 127 * \ref asfdoc_sam0_extint_filter_table "the table below".
mbed_official 15:a81a8d6c1dfe 128 *
mbed_official 15:a81a8d6c1dfe 129 * \anchor asfdoc_sam0_extint_filter_table
mbed_official 15:a81a8d6c1dfe 130 * <table>
mbed_official 15:a81a8d6c1dfe 131 * <caption>Sampled Input and Rresulting Filtered Output</caption>
mbed_official 15:a81a8d6c1dfe 132 * <tr>
mbed_official 15:a81a8d6c1dfe 133 * <th>Input Sample 1</th>
mbed_official 15:a81a8d6c1dfe 134 * <th>Input Sample 2</th>
mbed_official 15:a81a8d6c1dfe 135 * <th>Input Sample 3</th>
mbed_official 15:a81a8d6c1dfe 136 * <th>Filtered Output</th>
mbed_official 15:a81a8d6c1dfe 137 * </tr>
mbed_official 15:a81a8d6c1dfe 138 * <tr>
mbed_official 15:a81a8d6c1dfe 139 * <td>0</td> <td>0</td> <td>0</td> <td>0</td>
mbed_official 15:a81a8d6c1dfe 140 * </tr>
mbed_official 15:a81a8d6c1dfe 141 * <tr>
mbed_official 15:a81a8d6c1dfe 142 * <td>0</td> <td>0</td> <td>1</td> <td>0</td>
mbed_official 15:a81a8d6c1dfe 143 * </tr>
mbed_official 15:a81a8d6c1dfe 144 * <tr>
mbed_official 15:a81a8d6c1dfe 145 * <td>0</td> <td>1</td> <td>0</td> <td>0</td>
mbed_official 15:a81a8d6c1dfe 146 * </tr>
mbed_official 15:a81a8d6c1dfe 147 * <tr>
mbed_official 15:a81a8d6c1dfe 148 * <td>0</td> <td>1</td> <td>1</td> <td>1</td>
mbed_official 15:a81a8d6c1dfe 149 * </tr>
mbed_official 15:a81a8d6c1dfe 150 * <tr>
mbed_official 15:a81a8d6c1dfe 151 * <td>1</td> <td>0</td> <td>0</td> <td>0</td>
mbed_official 15:a81a8d6c1dfe 152 * </tr>
mbed_official 15:a81a8d6c1dfe 153 * <tr>
mbed_official 15:a81a8d6c1dfe 154 * <td>1</td> <td>0</td> <td>1</td> <td>1</td>
mbed_official 15:a81a8d6c1dfe 155 * </tr>
mbed_official 15:a81a8d6c1dfe 156 * <tr>
mbed_official 15:a81a8d6c1dfe 157 * <td>1</td> <td>1</td> <td>0</td> <td>1</td>
mbed_official 15:a81a8d6c1dfe 158 * </tr>
mbed_official 15:a81a8d6c1dfe 159 * <tr>
mbed_official 15:a81a8d6c1dfe 160 * <td>1</td> <td>1</td> <td>1</td> <td>1</td>
mbed_official 15:a81a8d6c1dfe 161 * </tr>
mbed_official 15:a81a8d6c1dfe 162 * </table>
mbed_official 15:a81a8d6c1dfe 163 *
mbed_official 15:a81a8d6c1dfe 164 * \subsection asfdoc_sam0_extint_module_overview_events Events and Interrupts
mbed_official 15:a81a8d6c1dfe 165 *
mbed_official 15:a81a8d6c1dfe 166 * Channel detection states may be polled inside the application for synchronous
mbed_official 15:a81a8d6c1dfe 167 * detection, or events and interrupts may be used for asynchronous behavior.
mbed_official 15:a81a8d6c1dfe 168 * Each channel can be configured to give an asynchronous hardware event (which
mbed_official 15:a81a8d6c1dfe 169 * may in turn trigger actions in other hardware modules) or an asynchronous
mbed_official 15:a81a8d6c1dfe 170 * software interrupt.
mbed_official 15:a81a8d6c1dfe 171 *
mbed_official 15:a81a8d6c1dfe 172 * \note The connection of events between modules requires the use of the
mbed_official 15:a81a8d6c1dfe 173 * \ref asfdoc_sam0_events_group "SAM Event System Driver (EVENTS)"
mbed_official 15:a81a8d6c1dfe 174 * to route output event of one module to the input event of another.
mbed_official 15:a81a8d6c1dfe 175 * For more information on event routing, refer to the event driver
mbed_official 15:a81a8d6c1dfe 176 * documentation.
mbed_official 15:a81a8d6c1dfe 177 *
mbed_official 15:a81a8d6c1dfe 178 * \subsection asfdoc_sam0_extint_module_overview_physical Physical Connection
mbed_official 15:a81a8d6c1dfe 179 *
mbed_official 15:a81a8d6c1dfe 180 * \ref asfdoc_sam0_extint_int_connections "The diagram below" shows how this
mbed_official 15:a81a8d6c1dfe 181 * module is interconnected within the device.
mbed_official 15:a81a8d6c1dfe 182 *
mbed_official 15:a81a8d6c1dfe 183 * \anchor asfdoc_sam0_extint_int_connections
mbed_official 15:a81a8d6c1dfe 184 * \dot
mbed_official 15:a81a8d6c1dfe 185 * digraph overview {
mbed_official 15:a81a8d6c1dfe 186 * node [label="Port Pad" shape=square] pad;
mbed_official 15:a81a8d6c1dfe 187 *
mbed_official 15:a81a8d6c1dfe 188 * subgraph driver {
mbed_official 15:a81a8d6c1dfe 189 * node [label="Peripheral MUX" shape=trapezium] pinmux;
mbed_official 15:a81a8d6c1dfe 190 * node [label="EIC Module" shape=ellipse] eic;
mbed_official 15:a81a8d6c1dfe 191 * node [label="Other Peripheral Modules" shape=ellipse style=filled fillcolor=lightgray] peripherals;
mbed_official 15:a81a8d6c1dfe 192 * }
mbed_official 15:a81a8d6c1dfe 193 *
mbed_official 15:a81a8d6c1dfe 194 * pinmux -> eic;
mbed_official 15:a81a8d6c1dfe 195 * pad -> pinmux;
mbed_official 15:a81a8d6c1dfe 196 * pinmux -> peripherals;
mbed_official 15:a81a8d6c1dfe 197 * }
mbed_official 15:a81a8d6c1dfe 198 * \enddot
mbed_official 15:a81a8d6c1dfe 199 *
mbed_official 15:a81a8d6c1dfe 200 * \section asfdoc_sam0_extint_special_considerations Special Considerations
mbed_official 15:a81a8d6c1dfe 201 *
mbed_official 15:a81a8d6c1dfe 202 * Not all devices support disabling of the NMI channel(s) detection mode - see
mbed_official 15:a81a8d6c1dfe 203 * your device datasheet.
mbed_official 15:a81a8d6c1dfe 204 *
mbed_official 15:a81a8d6c1dfe 205 *
mbed_official 15:a81a8d6c1dfe 206 * \section asfdoc_sam0_extint_extra_info Extra Information
mbed_official 15:a81a8d6c1dfe 207 *
mbed_official 15:a81a8d6c1dfe 208 * For extra information, see \ref asfdoc_sam0_extint_extra. This includes:
mbed_official 15:a81a8d6c1dfe 209 * - \ref asfdoc_sam0_extint_extra_acronyms
mbed_official 15:a81a8d6c1dfe 210 * - \ref asfdoc_sam0_extint_extra_dependencies
mbed_official 15:a81a8d6c1dfe 211 * - \ref asfdoc_sam0_extint_extra_errata
mbed_official 15:a81a8d6c1dfe 212 * - \ref asfdoc_sam0_extint_extra_history
mbed_official 15:a81a8d6c1dfe 213 *
mbed_official 15:a81a8d6c1dfe 214 *
mbed_official 15:a81a8d6c1dfe 215 * \section asfdoc_sam0_extint_examples Examples
mbed_official 15:a81a8d6c1dfe 216 *
mbed_official 15:a81a8d6c1dfe 217 * For a list of examples related to this driver, see
mbed_official 15:a81a8d6c1dfe 218 * \ref asfdoc_sam0_extint_exqsg.
mbed_official 15:a81a8d6c1dfe 219 *
mbed_official 15:a81a8d6c1dfe 220 *
mbed_official 15:a81a8d6c1dfe 221 * \section asfdoc_sam0_extint_api_overview API Overview
mbed_official 15:a81a8d6c1dfe 222 * @{
mbed_official 15:a81a8d6c1dfe 223 */
mbed_official 15:a81a8d6c1dfe 224
mbed_official 15:a81a8d6c1dfe 225 #include <compiler.h>
mbed_official 15:a81a8d6c1dfe 226 #include <pinmux.h>
mbed_official 15:a81a8d6c1dfe 227
mbed_official 15:a81a8d6c1dfe 228 #ifdef __cplusplus
mbed_official 15:a81a8d6c1dfe 229 extern "C" {
mbed_official 15:a81a8d6c1dfe 230 #endif
mbed_official 15:a81a8d6c1dfe 231
mbed_official 15:a81a8d6c1dfe 232 /**
mbed_official 15:a81a8d6c1dfe 233 * \brief External interrupt edge detection configuration enum.
mbed_official 15:a81a8d6c1dfe 234 *
mbed_official 15:a81a8d6c1dfe 235 * Enum for the possible signal edge detection modes of the External
mbed_official 15:a81a8d6c1dfe 236 * Interrupt Controller module.
mbed_official 15:a81a8d6c1dfe 237 */
mbed_official 15:a81a8d6c1dfe 238 enum extint_detect {
mbed_official 15:a81a8d6c1dfe 239 /** No edge detection. Not allowed as a NMI detection mode on some
mbed_official 15:a81a8d6c1dfe 240 * devices. */
mbed_official 15:a81a8d6c1dfe 241 EXTINT_DETECT_NONE = 0,
mbed_official 15:a81a8d6c1dfe 242 /** Detect rising signal edges. */
mbed_official 15:a81a8d6c1dfe 243 EXTINT_DETECT_RISING = 1,
mbed_official 15:a81a8d6c1dfe 244 /** Detect falling signal edges. */
mbed_official 15:a81a8d6c1dfe 245 EXTINT_DETECT_FALLING = 2,
mbed_official 15:a81a8d6c1dfe 246 /** Detect both signal edges. */
mbed_official 15:a81a8d6c1dfe 247 EXTINT_DETECT_BOTH = 3,
mbed_official 15:a81a8d6c1dfe 248 /** Detect high signal levels. */
mbed_official 15:a81a8d6c1dfe 249 EXTINT_DETECT_HIGH = 4,
mbed_official 15:a81a8d6c1dfe 250 /** Detect low signal levels. */
mbed_official 15:a81a8d6c1dfe 251 EXTINT_DETECT_LOW = 5,
mbed_official 15:a81a8d6c1dfe 252 };
mbed_official 15:a81a8d6c1dfe 253
mbed_official 15:a81a8d6c1dfe 254 /**
mbed_official 15:a81a8d6c1dfe 255 * \brief External interrupt internal pull configuration enum.
mbed_official 15:a81a8d6c1dfe 256 *
mbed_official 15:a81a8d6c1dfe 257 * Enum for the possible pin internal pull configurations.
mbed_official 15:a81a8d6c1dfe 258 *
mbed_official 15:a81a8d6c1dfe 259 * \note Disabling the internal pull resistor is not recommended if the driver
mbed_official 15:a81a8d6c1dfe 260 * is used in interrupt (callback) mode, due the possibility of floating
mbed_official 15:a81a8d6c1dfe 261 * inputs generating continuous interrupts.
mbed_official 15:a81a8d6c1dfe 262 */
mbed_official 15:a81a8d6c1dfe 263 enum extint_pull {
mbed_official 15:a81a8d6c1dfe 264 /** Internal pull-up resistor is enabled on the pin. */
mbed_official 15:a81a8d6c1dfe 265 EXTINT_PULL_UP = SYSTEM_PINMUX_PIN_PULL_UP,
mbed_official 15:a81a8d6c1dfe 266 /** Internal pull-down resistor is enabled on the pin. */
mbed_official 15:a81a8d6c1dfe 267 EXTINT_PULL_DOWN = SYSTEM_PINMUX_PIN_PULL_DOWN,
mbed_official 15:a81a8d6c1dfe 268 /** Internal pull resistor is disconnected from the pin. */
mbed_official 15:a81a8d6c1dfe 269 EXTINT_PULL_NONE = SYSTEM_PINMUX_PIN_PULL_NONE,
mbed_official 15:a81a8d6c1dfe 270 };
mbed_official 15:a81a8d6c1dfe 271
mbed_official 15:a81a8d6c1dfe 272 /** The EIC is clocked by GCLK_EIC. */
mbed_official 15:a81a8d6c1dfe 273 #define EXTINT_CLK_GCLK 0
mbed_official 15:a81a8d6c1dfe 274 /** The EIC is clocked by CLK_ULP32K. */
mbed_official 15:a81a8d6c1dfe 275 #define EXTINT_CLK_ULP32K 1
mbed_official 15:a81a8d6c1dfe 276
mbed_official 15:a81a8d6c1dfe 277 /**
mbed_official 15:a81a8d6c1dfe 278 * \brief External Interrupt Controller channel configuration structure.
mbed_official 15:a81a8d6c1dfe 279 *
mbed_official 15:a81a8d6c1dfe 280 * Configuration structure for the edge detection mode of an external
mbed_official 15:a81a8d6c1dfe 281 * interrupt channel.
mbed_official 15:a81a8d6c1dfe 282 */
mbed_official 15:a81a8d6c1dfe 283 struct extint_chan_conf {
mbed_official 15:a81a8d6c1dfe 284 /** GPIO pin the NMI should be connected to. */
mbed_official 15:a81a8d6c1dfe 285 uint32_t gpio_pin;
mbed_official 15:a81a8d6c1dfe 286 /** MUX position the GPIO pin should be configured to. */
mbed_official 15:a81a8d6c1dfe 287 uint32_t gpio_pin_mux;
mbed_official 15:a81a8d6c1dfe 288 /** Internal pull to enable on the input pin. */
mbed_official 15:a81a8d6c1dfe 289 enum extint_pull gpio_pin_pull;
mbed_official 15:a81a8d6c1dfe 290 #if (SAML21) || (SAMC20) || (SAMC21)
mbed_official 15:a81a8d6c1dfe 291 /** Enable asynchronous edge detection. */
mbed_official 15:a81a8d6c1dfe 292 bool enable_async_edge_detection;
mbed_official 15:a81a8d6c1dfe 293 #else
mbed_official 15:a81a8d6c1dfe 294 /** Wake up the device if the channel interrupt fires during sleep mode. */
mbed_official 15:a81a8d6c1dfe 295 bool wake_if_sleeping;
mbed_official 15:a81a8d6c1dfe 296 #endif
mbed_official 15:a81a8d6c1dfe 297 /** Filter the raw input signal to prevent noise from triggering an
mbed_official 15:a81a8d6c1dfe 298 * interrupt accidentally, using a 3 sample majority filter. */
mbed_official 15:a81a8d6c1dfe 299 bool filter_input_signal;
mbed_official 15:a81a8d6c1dfe 300 /** Edge detection mode to use. */
mbed_official 15:a81a8d6c1dfe 301 enum extint_detect detection_criteria;
mbed_official 15:a81a8d6c1dfe 302 };
mbed_official 15:a81a8d6c1dfe 303
mbed_official 15:a81a8d6c1dfe 304 /**
mbed_official 15:a81a8d6c1dfe 305 * \brief External Interrupt event enable/disable structure.
mbed_official 15:a81a8d6c1dfe 306 *
mbed_official 15:a81a8d6c1dfe 307 * Event flags for the \ref extint_enable_events() and
mbed_official 15:a81a8d6c1dfe 308 * \ref extint_disable_events().
mbed_official 15:a81a8d6c1dfe 309 */
mbed_official 15:a81a8d6c1dfe 310 struct extint_events {
mbed_official 15:a81a8d6c1dfe 311 /** If \c true, an event will be generated when an external interrupt
mbed_official 15:a81a8d6c1dfe 312 * channel detection state changes. */
mbed_official 15:a81a8d6c1dfe 313 bool generate_event_on_detect[32 * EIC_INST_NUM];
mbed_official 15:a81a8d6c1dfe 314 };
mbed_official 15:a81a8d6c1dfe 315
mbed_official 15:a81a8d6c1dfe 316 /**
mbed_official 15:a81a8d6c1dfe 317 * \brief External Interrupt Controller NMI configuration structure.
mbed_official 15:a81a8d6c1dfe 318 *
mbed_official 15:a81a8d6c1dfe 319 * Configuration structure for the edge detection mode of an external
mbed_official 15:a81a8d6c1dfe 320 * interrupt NMI channel.
mbed_official 15:a81a8d6c1dfe 321 */
mbed_official 15:a81a8d6c1dfe 322 struct extint_nmi_conf {
mbed_official 15:a81a8d6c1dfe 323 /** GPIO pin the NMI should be connected to. */
mbed_official 15:a81a8d6c1dfe 324 uint32_t gpio_pin;
mbed_official 15:a81a8d6c1dfe 325 /** MUX position the GPIO pin should be configured to. */
mbed_official 15:a81a8d6c1dfe 326 uint32_t gpio_pin_mux;
mbed_official 15:a81a8d6c1dfe 327 /** Internal pull to enable on the input pin. */
mbed_official 15:a81a8d6c1dfe 328 enum extint_pull gpio_pin_pull;
mbed_official 15:a81a8d6c1dfe 329 /** Filter the raw input signal to prevent noise from triggering an
mbed_official 15:a81a8d6c1dfe 330 * interrupt accidentally, using a 3 sample majority filter. */
mbed_official 15:a81a8d6c1dfe 331 bool filter_input_signal;
mbed_official 15:a81a8d6c1dfe 332 /** Edge detection mode to use. Not all devices support all possible
mbed_official 15:a81a8d6c1dfe 333 * detection modes for NMIs.
mbed_official 15:a81a8d6c1dfe 334 */
mbed_official 15:a81a8d6c1dfe 335 enum extint_detect detection_criteria;
mbed_official 15:a81a8d6c1dfe 336 #if (SAML21) || (SAMC20) || (SAMC21)
mbed_official 15:a81a8d6c1dfe 337 /** Enable asynchronous edge detection. */
mbed_official 15:a81a8d6c1dfe 338 bool enable_async_edge_detection;
mbed_official 15:a81a8d6c1dfe 339 #endif
mbed_official 15:a81a8d6c1dfe 340 };
mbed_official 15:a81a8d6c1dfe 341
mbed_official 15:a81a8d6c1dfe 342 #if EXTINT_CALLBACK_MODE == true
mbed_official 15:a81a8d6c1dfe 343 /** Type definition for an EXTINT module callback function. */
mbed_official 15:a81a8d6c1dfe 344 typedef void (*extint_callback_t)(void);
mbed_official 15:a81a8d6c1dfe 345
mbed_official 15:a81a8d6c1dfe 346 #ifndef EIC_NUMBER_OF_INTERRUPTS
mbed_official 15:a81a8d6c1dfe 347 # define EIC_NUMBER_OF_INTERRUPTS 16
mbed_official 15:a81a8d6c1dfe 348 #endif
mbed_official 15:a81a8d6c1dfe 349 #endif
mbed_official 15:a81a8d6c1dfe 350
mbed_official 15:a81a8d6c1dfe 351 #if !defined(__DOXYGEN__)
mbed_official 15:a81a8d6c1dfe 352 /** \internal
mbed_official 15:a81a8d6c1dfe 353 * Internal EXTINT module device instance structure definition.
mbed_official 15:a81a8d6c1dfe 354 */
mbed_official 15:a81a8d6c1dfe 355 struct _extint_module {
mbed_official 15:a81a8d6c1dfe 356 # if EXTINT_CALLBACK_MODE == true
mbed_official 15:a81a8d6c1dfe 357 /** Asynchronous channel callback table, for user-registered handlers. */
mbed_official 15:a81a8d6c1dfe 358 extint_callback_t callbacks[EIC_NUMBER_OF_INTERRUPTS];
mbed_official 15:a81a8d6c1dfe 359 # else
mbed_official 15:a81a8d6c1dfe 360 /** Dummy value to ensure the struct has at least one member. */
mbed_official 15:a81a8d6c1dfe 361 uint8_t _dummy;
mbed_official 15:a81a8d6c1dfe 362 # endif
mbed_official 15:a81a8d6c1dfe 363 };
mbed_official 15:a81a8d6c1dfe 364
mbed_official 15:a81a8d6c1dfe 365 /**
mbed_official 15:a81a8d6c1dfe 366 * \brief Retrieves the base EIC module address from a given channel number.
mbed_official 15:a81a8d6c1dfe 367 *
mbed_official 15:a81a8d6c1dfe 368 * Retrieves the base address of a EIC hardware module associated with the
mbed_official 15:a81a8d6c1dfe 369 * given external interrupt channel.
mbed_official 15:a81a8d6c1dfe 370 *
mbed_official 15:a81a8d6c1dfe 371 * \param[in] channel External interrupt channel index to convert
mbed_official 15:a81a8d6c1dfe 372 *
mbed_official 15:a81a8d6c1dfe 373 * \return Base address of the associated EIC module.
mbed_official 15:a81a8d6c1dfe 374 */
mbed_official 15:a81a8d6c1dfe 375 static inline Eic * _extint_get_eic_from_channel(
mbed_official 15:a81a8d6c1dfe 376 const uint8_t channel)
mbed_official 15:a81a8d6c1dfe 377 {
mbed_official 15:a81a8d6c1dfe 378 uint8_t eic_index = (channel / 32);
mbed_official 15:a81a8d6c1dfe 379
mbed_official 15:a81a8d6c1dfe 380 if (eic_index < EIC_INST_NUM) {
mbed_official 15:a81a8d6c1dfe 381 /* Array of available EICs. */
mbed_official 15:a81a8d6c1dfe 382 Eic *const eics[EIC_INST_NUM] = EIC_INSTS;
mbed_official 15:a81a8d6c1dfe 383
mbed_official 15:a81a8d6c1dfe 384 return eics[eic_index];
mbed_official 15:a81a8d6c1dfe 385 } else {
mbed_official 15:a81a8d6c1dfe 386 Assert(false);
mbed_official 15:a81a8d6c1dfe 387 return NULL;
mbed_official 15:a81a8d6c1dfe 388 }
mbed_official 15:a81a8d6c1dfe 389 }
mbed_official 15:a81a8d6c1dfe 390
mbed_official 15:a81a8d6c1dfe 391 /**
mbed_official 15:a81a8d6c1dfe 392 * \brief Retrieves the base EIC module address from a given NMI channel number.
mbed_official 15:a81a8d6c1dfe 393 *
mbed_official 15:a81a8d6c1dfe 394 * Retrieves the base address of a EIC hardware module associated with the
mbed_official 15:a81a8d6c1dfe 395 * given non-maskable external interrupt channel.
mbed_official 15:a81a8d6c1dfe 396 *
mbed_official 15:a81a8d6c1dfe 397 * \param[in] nmi_channel Non-Maskable interrupt channel index to convert
mbed_official 15:a81a8d6c1dfe 398 *
mbed_official 15:a81a8d6c1dfe 399 * \return Base address of the associated EIC module.
mbed_official 15:a81a8d6c1dfe 400 */
mbed_official 15:a81a8d6c1dfe 401 static inline Eic * _extint_get_eic_from_nmi(
mbed_official 15:a81a8d6c1dfe 402 const uint8_t nmi_channel)
mbed_official 15:a81a8d6c1dfe 403 {
mbed_official 15:a81a8d6c1dfe 404 uint8_t eic_index = nmi_channel;
mbed_official 15:a81a8d6c1dfe 405
mbed_official 15:a81a8d6c1dfe 406 if (eic_index < EIC_INST_NUM) {
mbed_official 15:a81a8d6c1dfe 407 /* Array of available EICs. */
mbed_official 15:a81a8d6c1dfe 408 Eic *const eics[EIC_INST_NUM] = EIC_INSTS;
mbed_official 15:a81a8d6c1dfe 409
mbed_official 15:a81a8d6c1dfe 410 return eics[eic_index];
mbed_official 15:a81a8d6c1dfe 411 } else {
mbed_official 15:a81a8d6c1dfe 412 Assert(false);
mbed_official 15:a81a8d6c1dfe 413 return NULL;
mbed_official 15:a81a8d6c1dfe 414 }
mbed_official 15:a81a8d6c1dfe 415 }
mbed_official 15:a81a8d6c1dfe 416 #endif
mbed_official 15:a81a8d6c1dfe 417
mbed_official 15:a81a8d6c1dfe 418 /** \name Event Management
mbed_official 15:a81a8d6c1dfe 419 * @{
mbed_official 15:a81a8d6c1dfe 420 */
mbed_official 15:a81a8d6c1dfe 421
mbed_official 15:a81a8d6c1dfe 422 void extint_enable_events(
mbed_official 15:a81a8d6c1dfe 423 struct extint_events *const events);
mbed_official 15:a81a8d6c1dfe 424
mbed_official 15:a81a8d6c1dfe 425 void extint_disable_events(
mbed_official 15:a81a8d6c1dfe 426 struct extint_events *const events);
mbed_official 15:a81a8d6c1dfe 427
mbed_official 15:a81a8d6c1dfe 428 /** @} */
mbed_official 15:a81a8d6c1dfe 429
mbed_official 15:a81a8d6c1dfe 430 /** \name Configuration and Initialization (Channel)
mbed_official 15:a81a8d6c1dfe 431 * @{
mbed_official 15:a81a8d6c1dfe 432 */
mbed_official 15:a81a8d6c1dfe 433
mbed_official 15:a81a8d6c1dfe 434 void extint_chan_get_config_defaults(
mbed_official 15:a81a8d6c1dfe 435 struct extint_chan_conf *const config);
mbed_official 15:a81a8d6c1dfe 436
mbed_official 15:a81a8d6c1dfe 437 void extint_chan_set_config(
mbed_official 15:a81a8d6c1dfe 438 const uint8_t channel,
mbed_official 15:a81a8d6c1dfe 439 const struct extint_chan_conf *const config);
mbed_official 15:a81a8d6c1dfe 440
mbed_official 15:a81a8d6c1dfe 441 /** @} */
mbed_official 15:a81a8d6c1dfe 442
mbed_official 15:a81a8d6c1dfe 443 /** \name Configuration and Initialization (NMI)
mbed_official 15:a81a8d6c1dfe 444 * @{
mbed_official 15:a81a8d6c1dfe 445 */
mbed_official 15:a81a8d6c1dfe 446
mbed_official 15:a81a8d6c1dfe 447 /**
mbed_official 15:a81a8d6c1dfe 448 * \brief Initializes an External Interrupt NMI channel configuration structure to defaults.
mbed_official 15:a81a8d6c1dfe 449 *
mbed_official 15:a81a8d6c1dfe 450 * Initializes a given External Interrupt NMI channel configuration structure
mbed_official 15:a81a8d6c1dfe 451 * to a set of known default values. This function should be called on all new
mbed_official 15:a81a8d6c1dfe 452 * instances of these configuration structures before being modified by the
mbed_official 15:a81a8d6c1dfe 453 * user application.
mbed_official 15:a81a8d6c1dfe 454 *
mbed_official 15:a81a8d6c1dfe 455 * The default configuration is as follows:
mbed_official 15:a81a8d6c1dfe 456 * \li Input filtering disabled
mbed_official 15:a81a8d6c1dfe 457 * \li Detect falling edges of a signal
mbed_official 15:a81a8d6c1dfe 458 * \li Asynchronous edge detection is disabled
mbed_official 15:a81a8d6c1dfe 459 *
mbed_official 15:a81a8d6c1dfe 460 * \param[out] config Configuration structure to initialize to default values
mbed_official 15:a81a8d6c1dfe 461 */
mbed_official 15:a81a8d6c1dfe 462 static inline void extint_nmi_get_config_defaults(
mbed_official 15:a81a8d6c1dfe 463 struct extint_nmi_conf *const config)
mbed_official 15:a81a8d6c1dfe 464 {
mbed_official 15:a81a8d6c1dfe 465 /* Sanity check arguments */
mbed_official 15:a81a8d6c1dfe 466 Assert(config);
mbed_official 15:a81a8d6c1dfe 467
mbed_official 15:a81a8d6c1dfe 468 /* Default configuration values */
mbed_official 15:a81a8d6c1dfe 469 config->gpio_pin = 0;
mbed_official 15:a81a8d6c1dfe 470 config->gpio_pin_mux = 0;
mbed_official 15:a81a8d6c1dfe 471 config->gpio_pin_pull = EXTINT_PULL_UP;
mbed_official 15:a81a8d6c1dfe 472 config->filter_input_signal = false;
mbed_official 15:a81a8d6c1dfe 473 config->detection_criteria = EXTINT_DETECT_FALLING;
mbed_official 15:a81a8d6c1dfe 474 #if (SAML21) || (SAMC20) || (SAMC21)
mbed_official 15:a81a8d6c1dfe 475 config->enable_async_edge_detection = false;
mbed_official 15:a81a8d6c1dfe 476 #endif
mbed_official 15:a81a8d6c1dfe 477
mbed_official 15:a81a8d6c1dfe 478 }
mbed_official 15:a81a8d6c1dfe 479
mbed_official 15:a81a8d6c1dfe 480 enum status_code extint_nmi_set_config(
mbed_official 15:a81a8d6c1dfe 481 const uint8_t nmi_channel,
mbed_official 15:a81a8d6c1dfe 482 const struct extint_nmi_conf *const config);
mbed_official 15:a81a8d6c1dfe 483
mbed_official 15:a81a8d6c1dfe 484 /** @} */
mbed_official 15:a81a8d6c1dfe 485
mbed_official 15:a81a8d6c1dfe 486 /** \name Detection testing and clearing (channel)
mbed_official 15:a81a8d6c1dfe 487 * @{
mbed_official 15:a81a8d6c1dfe 488 */
mbed_official 15:a81a8d6c1dfe 489
mbed_official 15:a81a8d6c1dfe 490 /**
mbed_official 15:a81a8d6c1dfe 491 * \brief Retrieves the edge detection state of a configured channel.
mbed_official 15:a81a8d6c1dfe 492 *
mbed_official 15:a81a8d6c1dfe 493 * Reads the current state of a configured channel, and determines
mbed_official 15:a81a8d6c1dfe 494 * if the detection criteria of the channel has been met.
mbed_official 15:a81a8d6c1dfe 495 *
mbed_official 15:a81a8d6c1dfe 496 * \param[in] channel External Interrupt channel index to check
mbed_official 15:a81a8d6c1dfe 497 *
mbed_official 15:a81a8d6c1dfe 498 * \return Status of the requested channel's edge detection state.
mbed_official 15:a81a8d6c1dfe 499 * \retval true If the channel's edge/level detection criteria was met
mbed_official 15:a81a8d6c1dfe 500 * \retval false If the channel has not detected its configured criteria
mbed_official 15:a81a8d6c1dfe 501 */
mbed_official 15:a81a8d6c1dfe 502 static inline bool extint_chan_is_detected(
mbed_official 15:a81a8d6c1dfe 503 const uint8_t channel)
mbed_official 15:a81a8d6c1dfe 504 {
mbed_official 15:a81a8d6c1dfe 505 Eic *const eic_module = _extint_get_eic_from_channel(channel);
mbed_official 15:a81a8d6c1dfe 506 uint32_t eic_mask = (1UL << (channel % 32));
mbed_official 15:a81a8d6c1dfe 507
mbed_official 15:a81a8d6c1dfe 508 return (eic_module->INTFLAG.reg & eic_mask);
mbed_official 15:a81a8d6c1dfe 509 }
mbed_official 15:a81a8d6c1dfe 510
mbed_official 15:a81a8d6c1dfe 511 /**
mbed_official 15:a81a8d6c1dfe 512 * \brief Clears the edge detection state of a configured channel.
mbed_official 15:a81a8d6c1dfe 513 *
mbed_official 15:a81a8d6c1dfe 514 * Clears the current state of a configured channel, readying it for
mbed_official 15:a81a8d6c1dfe 515 * the next level or edge detection.
mbed_official 15:a81a8d6c1dfe 516 *
mbed_official 15:a81a8d6c1dfe 517 * \param[in] channel External Interrupt channel index to check
mbed_official 15:a81a8d6c1dfe 518 */
mbed_official 15:a81a8d6c1dfe 519 static inline void extint_chan_clear_detected(
mbed_official 15:a81a8d6c1dfe 520 const uint8_t channel)
mbed_official 15:a81a8d6c1dfe 521 {
mbed_official 15:a81a8d6c1dfe 522 Eic *const eic_module = _extint_get_eic_from_channel(channel);
mbed_official 15:a81a8d6c1dfe 523 uint32_t eic_mask = (1UL << (channel % 32));
mbed_official 15:a81a8d6c1dfe 524
mbed_official 15:a81a8d6c1dfe 525 eic_module->INTFLAG.reg = eic_mask;
mbed_official 15:a81a8d6c1dfe 526 }
mbed_official 15:a81a8d6c1dfe 527
mbed_official 15:a81a8d6c1dfe 528 /** @} */
mbed_official 15:a81a8d6c1dfe 529
mbed_official 15:a81a8d6c1dfe 530 /** \name Detection Testing and Clearing (NMI)
mbed_official 15:a81a8d6c1dfe 531 * @{
mbed_official 15:a81a8d6c1dfe 532 */
mbed_official 15:a81a8d6c1dfe 533
mbed_official 15:a81a8d6c1dfe 534 /**
mbed_official 15:a81a8d6c1dfe 535 * \brief Retrieves the edge detection state of a configured NMI channel.
mbed_official 15:a81a8d6c1dfe 536 *
mbed_official 15:a81a8d6c1dfe 537 * Reads the current state of a configured NMI channel, and determines
mbed_official 15:a81a8d6c1dfe 538 * if the detection criteria of the NMI channel has been met.
mbed_official 15:a81a8d6c1dfe 539 *
mbed_official 15:a81a8d6c1dfe 540 * \param[in] nmi_channel External Interrupt NMI channel index to check
mbed_official 15:a81a8d6c1dfe 541 *
mbed_official 15:a81a8d6c1dfe 542 * \return Status of the requested NMI channel's edge detection state.
mbed_official 15:a81a8d6c1dfe 543 * \retval true If the NMI channel's edge/level detection criteria was met
mbed_official 15:a81a8d6c1dfe 544 * \retval false If the NMI channel has not detected its configured criteria
mbed_official 15:a81a8d6c1dfe 545 */
mbed_official 15:a81a8d6c1dfe 546 static inline bool extint_nmi_is_detected(
mbed_official 15:a81a8d6c1dfe 547 const uint8_t nmi_channel)
mbed_official 15:a81a8d6c1dfe 548 {
mbed_official 15:a81a8d6c1dfe 549 Eic *const eic_module = _extint_get_eic_from_nmi(nmi_channel);
mbed_official 15:a81a8d6c1dfe 550
mbed_official 15:a81a8d6c1dfe 551 return (eic_module->NMIFLAG.reg & EIC_NMIFLAG_NMI);
mbed_official 15:a81a8d6c1dfe 552 }
mbed_official 15:a81a8d6c1dfe 553
mbed_official 15:a81a8d6c1dfe 554 /**
mbed_official 15:a81a8d6c1dfe 555 * \brief Clears the edge detection state of a configured NMI channel.
mbed_official 15:a81a8d6c1dfe 556 *
mbed_official 15:a81a8d6c1dfe 557 * Clears the current state of a configured NMI channel, readying it for
mbed_official 15:a81a8d6c1dfe 558 * the next level or edge detection.
mbed_official 15:a81a8d6c1dfe 559 *
mbed_official 15:a81a8d6c1dfe 560 * \param[in] nmi_channel External Interrupt NMI channel index to check
mbed_official 15:a81a8d6c1dfe 561 */
mbed_official 15:a81a8d6c1dfe 562 static inline void extint_nmi_clear_detected(
mbed_official 15:a81a8d6c1dfe 563 const uint8_t nmi_channel)
mbed_official 15:a81a8d6c1dfe 564 {
mbed_official 15:a81a8d6c1dfe 565 Eic *const eic_module = _extint_get_eic_from_nmi(nmi_channel);
mbed_official 15:a81a8d6c1dfe 566
mbed_official 15:a81a8d6c1dfe 567 eic_module->NMIFLAG.reg = EIC_NMIFLAG_NMI;
mbed_official 15:a81a8d6c1dfe 568 }
mbed_official 15:a81a8d6c1dfe 569
mbed_official 15:a81a8d6c1dfe 570 /** @} */
mbed_official 15:a81a8d6c1dfe 571
mbed_official 15:a81a8d6c1dfe 572 #ifdef __cplusplus
mbed_official 15:a81a8d6c1dfe 573 }
mbed_official 15:a81a8d6c1dfe 574 #endif
mbed_official 15:a81a8d6c1dfe 575
mbed_official 15:a81a8d6c1dfe 576 /** @} */
mbed_official 15:a81a8d6c1dfe 577
mbed_official 15:a81a8d6c1dfe 578 #if EXTINT_CALLBACK_MODE == true
mbed_official 15:a81a8d6c1dfe 579 # include "extint_callback.h"
mbed_official 15:a81a8d6c1dfe 580 #endif
mbed_official 15:a81a8d6c1dfe 581
mbed_official 15:a81a8d6c1dfe 582 /**
mbed_official 15:a81a8d6c1dfe 583 * \page asfdoc_sam0_extint_extra Extra Information for EXTINT Driver
mbed_official 15:a81a8d6c1dfe 584 *
mbed_official 15:a81a8d6c1dfe 585 * \section asfdoc_sam0_extint_extra_acronyms Acronyms
mbed_official 15:a81a8d6c1dfe 586 * The table below presents the acronyms used in this module:
mbed_official 15:a81a8d6c1dfe 587 *
mbed_official 15:a81a8d6c1dfe 588 * <table>
mbed_official 15:a81a8d6c1dfe 589 * <tr>
mbed_official 15:a81a8d6c1dfe 590 * <th>Acronym</th>
mbed_official 15:a81a8d6c1dfe 591 * <th>Description</th>
mbed_official 15:a81a8d6c1dfe 592 * </tr>
mbed_official 15:a81a8d6c1dfe 593 * <tr>
mbed_official 15:a81a8d6c1dfe 594 * <td>EIC</td>
mbed_official 15:a81a8d6c1dfe 595 * <td>External Interrupt Controller</td>
mbed_official 15:a81a8d6c1dfe 596 * </tr>
mbed_official 15:a81a8d6c1dfe 597 * <tr>
mbed_official 15:a81a8d6c1dfe 598 * <td>MUX</td>
mbed_official 15:a81a8d6c1dfe 599 * <td>Multiplexer</td>
mbed_official 15:a81a8d6c1dfe 600 * </tr>
mbed_official 15:a81a8d6c1dfe 601 * <tr>
mbed_official 15:a81a8d6c1dfe 602 * <td>NMI</td>
mbed_official 15:a81a8d6c1dfe 603 * <td>Non-Maskable Interrupt</td>
mbed_official 15:a81a8d6c1dfe 604 * </tr>
mbed_official 15:a81a8d6c1dfe 605 * </table>
mbed_official 15:a81a8d6c1dfe 606 *
mbed_official 15:a81a8d6c1dfe 607 *
mbed_official 15:a81a8d6c1dfe 608 * \section asfdoc_sam0_extint_extra_dependencies Dependencies
mbed_official 15:a81a8d6c1dfe 609 * This driver has the following dependencies:
mbed_official 15:a81a8d6c1dfe 610 *
mbed_official 15:a81a8d6c1dfe 611 * - \ref asfdoc_sam0_system_pinmux_group "System Pin Multiplexer Driver"
mbed_official 15:a81a8d6c1dfe 612 *
mbed_official 15:a81a8d6c1dfe 613 *
mbed_official 15:a81a8d6c1dfe 614 * \section asfdoc_sam0_extint_extra_errata Errata
mbed_official 15:a81a8d6c1dfe 615 * There are no errata related to this driver.
mbed_official 15:a81a8d6c1dfe 616 *
mbed_official 15:a81a8d6c1dfe 617 *
mbed_official 15:a81a8d6c1dfe 618 * \section asfdoc_sam0_extint_extra_history Module History
mbed_official 15:a81a8d6c1dfe 619 * An overview of the module history is presented in the table below, with
mbed_official 15:a81a8d6c1dfe 620 * details on the enhancements and fixes made to the module since its first
mbed_official 15:a81a8d6c1dfe 621 * release. The current version of this corresponds to the newest version in
mbed_official 15:a81a8d6c1dfe 622 * the table.
mbed_official 15:a81a8d6c1dfe 623 *
mbed_official 15:a81a8d6c1dfe 624 * <table>
mbed_official 15:a81a8d6c1dfe 625 * <tr>
mbed_official 15:a81a8d6c1dfe 626 * <th>Changelog</th>
mbed_official 15:a81a8d6c1dfe 627 * </tr>
mbed_official 15:a81a8d6c1dfe 628 * <tr>
mbed_official 15:a81a8d6c1dfe 629 * <td>
mbed_official 15:a81a8d6c1dfe 630 * \li Driver updated to follow driver type convention.
mbed_official 15:a81a8d6c1dfe 631 * \li Removed \c %extint_reset(), \c %extint_disable() and
mbed_official 15:a81a8d6c1dfe 632 * \c extint_enable() functions. Added internal function
mbed_official 15:a81a8d6c1dfe 633 * \c %_system_extint_init().
mbed_official 15:a81a8d6c1dfe 634 * \li Added configuration EXTINT_CLOCK_SOURCE in conf_extint.h.
mbed_official 15:a81a8d6c1dfe 635 * \li Removed configuration EXTINT_CALLBACKS_MAX in conf_extint.h, and
mbed_official 15:a81a8d6c1dfe 636 * added channel parameter in the register functions
mbed_official 15:a81a8d6c1dfe 637 * \c %extint_register_callback() and \c %extint_unregister_callback().
mbed_official 15:a81a8d6c1dfe 638 * </td>
mbed_official 15:a81a8d6c1dfe 639 * </tr>
mbed_official 15:a81a8d6c1dfe 640 * <tr>
mbed_official 15:a81a8d6c1dfe 641 * <td>Updated interrupt handler to clear interrupt flag before calling
mbed_official 15:a81a8d6c1dfe 642 * callback function.</td>
mbed_official 15:a81a8d6c1dfe 643 * </tr>
mbed_official 15:a81a8d6c1dfe 644 * <tr>
mbed_official 15:a81a8d6c1dfe 645 * <td>Updated initialization function to also enable the digital interface
mbed_official 15:a81a8d6c1dfe 646 * clock to the module if it is disabled.</td>
mbed_official 15:a81a8d6c1dfe 647 * </tr>
mbed_official 15:a81a8d6c1dfe 648 * <tr>
mbed_official 15:a81a8d6c1dfe 649 * <td>Initial Release</td>
mbed_official 15:a81a8d6c1dfe 650 * </tr>
mbed_official 15:a81a8d6c1dfe 651 * </table>
mbed_official 15:a81a8d6c1dfe 652 */
mbed_official 15:a81a8d6c1dfe 653
mbed_official 15:a81a8d6c1dfe 654 /**
mbed_official 15:a81a8d6c1dfe 655 * \page asfdoc_sam0_extint_exqsg Examples for EXTINT Driver
mbed_official 15:a81a8d6c1dfe 656 *
mbed_official 15:a81a8d6c1dfe 657 * This is a list of the available Quick Start guides (QSGs) and example
mbed_official 15:a81a8d6c1dfe 658 * applications for \ref asfdoc_sam0_extint_group.
mbed_official 15:a81a8d6c1dfe 659 * QSGs are simple examples with step-by-step instructions to configure and
mbed_official 15:a81a8d6c1dfe 660 * use this driver in a selection of use cases. Note that QSGs can be compiled
mbed_official 15:a81a8d6c1dfe 661 * as a standalone application or be added to the user application.
mbed_official 15:a81a8d6c1dfe 662 *
mbed_official 15:a81a8d6c1dfe 663 * - \subpage asfdoc_sam0_extint_basic_use_case
mbed_official 15:a81a8d6c1dfe 664 * \if EXTINT_CALLBACK_MODE
mbed_official 15:a81a8d6c1dfe 665 * - \subpage asfdoc_sam0_extint_callback_use_case
mbed_official 15:a81a8d6c1dfe 666 * \endif
mbed_official 15:a81a8d6c1dfe 667 *
mbed_official 15:a81a8d6c1dfe 668 * \page asfdoc_sam0_extint_document_revision_history Document Revision History
mbed_official 15:a81a8d6c1dfe 669 *
mbed_official 15:a81a8d6c1dfe 670 * <table>
mbed_official 15:a81a8d6c1dfe 671 * <tr>
mbed_official 15:a81a8d6c1dfe 672 * <th>Doc. Rev.</td>
mbed_official 15:a81a8d6c1dfe 673 * <th>Date</td>
mbed_official 15:a81a8d6c1dfe 674 * <th>Comments</td>
mbed_official 15:a81a8d6c1dfe 675 * </tr>
mbed_official 15:a81a8d6c1dfe 676 * <tr>
mbed_official 15:a81a8d6c1dfe 677 * <td>E</td>
mbed_official 15:a81a8d6c1dfe 678 * <td>06/2015</td>
mbed_official 15:a81a8d6c1dfe 679 * <td>Added support for SAML21, SAMC21, and SAMDAx.</td>
mbed_official 15:a81a8d6c1dfe 680 * </tr>
mbed_official 15:a81a8d6c1dfe 681 * <tr>
mbed_official 15:a81a8d6c1dfe 682 * <td>D</td>
mbed_official 15:a81a8d6c1dfe 683 * <td>12/2014</td>
mbed_official 15:a81a8d6c1dfe 684 * <td>Added support for SAMR21 and SAMD10/D11.</td>
mbed_official 15:a81a8d6c1dfe 685 * </tr>
mbed_official 15:a81a8d6c1dfe 686 * <tr>
mbed_official 15:a81a8d6c1dfe 687 * <td>C</td>
mbed_official 15:a81a8d6c1dfe 688 * <td>01/2014</td>
mbed_official 15:a81a8d6c1dfe 689 * <td>Added support for SAMD21.</td>
mbed_official 15:a81a8d6c1dfe 690 * </tr>
mbed_official 15:a81a8d6c1dfe 691 * <tr>
mbed_official 15:a81a8d6c1dfe 692 * <td>B</td>
mbed_official 15:a81a8d6c1dfe 693 * <td>06/2013</td>
mbed_official 15:a81a8d6c1dfe 694 * <td>Added additional documentation on the event system. Corrected
mbed_official 15:a81a8d6c1dfe 695 * documentation typos.</td>
mbed_official 15:a81a8d6c1dfe 696 * </tr>
mbed_official 15:a81a8d6c1dfe 697 * <tr>
mbed_official 15:a81a8d6c1dfe 698 * <td>A</td>
mbed_official 15:a81a8d6c1dfe 699 * <td>06/2013</td>
mbed_official 15:a81a8d6c1dfe 700 * <td>Initial release</td>
mbed_official 15:a81a8d6c1dfe 701 * </tr>
mbed_official 15:a81a8d6c1dfe 702 * </table>
mbed_official 15:a81a8d6c1dfe 703 */
mbed_official 15:a81a8d6c1dfe 704
mbed_official 15:a81a8d6c1dfe 705 #endif