mbed library sources. Supersedes mbed-src.

Fork of mbed-dev by mbed official

Committer:
screamer
Date:
Tue Aug 02 14:07:36 2016 +0000
Revision:
144:423e1876dc07
Parent:
15:a81a8d6c1dfe
Added targets.json file for the supported targets in the release

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