mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Wed Jul 01 09:45:11 2015 +0100
Revision:
579:53297373a894
Child:
592:a274ee790e56
Synchronized with git revision d5b4d2ab9c47edb4dc5776e7177b0c2263459081

Full URL: https://github.com/mbedmicro/mbed/commit/d5b4d2ab9c47edb4dc5776e7177b0c2263459081/

Initial version of drivers for SAMR21

Who changed what in which revision?

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