123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708 |
- /**
- * \file
- *
- * \brief SAM External Interrupt Driver
- *
- * Copyright (C) 2012-2016 Atmel Corporation. All rights reserved.
- *
- * \asf_license_start
- *
- * \page License
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * 3. The name of Atmel may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * 4. This software may only be redistributed and used in connection with an
- * Atmel microcontroller product.
- *
- * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
- * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * \asf_license_stop
- *
- */
- /*
- * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
- */
- #ifndef EXTINT_H_INCLUDED
- #define EXTINT_H_INCLUDED
- /**
- * \defgroup asfdoc_sam0_extint_group SAM External Interrupt (EXTINT) Driver
- *
- * This driver for Atmel® | SMART ARM®-based microcontrollers provides
- * an interface for the configuration and management of external interrupts
- * generated by the physical device pins, including edge detection.
- * The following driver API modes are covered by this
- * manual:
- *
- * - Polled APIs
- * \if EXTINT_CALLBACK_MODE
- * - Callback APIs
- * \endif
- *
- * The following peripheral is used by this module:
- * - EIC (External Interrupt Controller)
- *
- * The following devices can use this module:
- * - Atmel | SMART SAM D20/D21
- * - Atmel | SMART SAM R21
- * - Atmel | SMART SAM D09/D10/D11
- * - Atmel | SMART SAM L21/L22
- * - Atmel | SMART SAM DA1
- * - Atmel | SMART SAM C20/C21
- * - Atmel | SMART SAM HA1
- *
- * The outline of this documentation is as follows:
- * - \ref asfdoc_sam0_extint_prerequisites
- * - \ref asfdoc_sam0_extint_module_overview
- * - \ref asfdoc_sam0_extint_special_considerations
- * - \ref asfdoc_sam0_extint_extra_info
- * - \ref asfdoc_sam0_extint_examples
- * - \ref asfdoc_sam0_extint_api_overview
- *
- *
- * \section asfdoc_sam0_extint_prerequisites Prerequisites
- *
- * There are no prerequisites for this module.
- *
- *
- * \section asfdoc_sam0_extint_module_overview Module Overview
- *
- * The External Interrupt (EXTINT) module provides a method of asynchronously
- * detecting rising edge, falling edge, or specific level detection on individual
- * I/O pins of a device. This detection can then be used to trigger a software
- * interrupt or event, or polled for later use if required. External interrupts
- * can also optionally be used to automatically wake up the device from sleep
- * mode, allowing the device to conserve power while still being able to react
- * to an external stimulus in a timely manner.
- *
- * \subsection asfdoc_sam0_extint_logical_channels Logical Channels
- * The External Interrupt module contains a number of logical channels, each of
- * which is capable of being individually configured for a given pin routing,
- * detection mode, and filtering/wake up characteristics.
- *
- * Each individual logical external interrupt channel may be routed to a single
- * physical device I/O pin in order to detect a particular edge or level of the
- * incoming signal.
- *
- * \subsection asfdoc_sam0_extint_module_overview_nmi_chanel NMI Channels
- *
- * One or more Non Maskable Interrupt (NMI) channels are provided within each
- * physical External Interrupt Controller module, allowing a single physical pin
- * of the device to fire a single NMI interrupt in response to a particular
- * edge or level stimulus. An NMI cannot, as the name suggests, be disabled in
- * firmware and will take precedence over any in-progress interrupt sources.
- *
- * NMIs can be used to implement critical device features such as forced
- * software reset or other functionality where the action should be executed in
- * preference to all other running code with a minimum amount of latency.
- *
- * \subsection asfdoc_sam0_extint_module_overview_filtering Input Filtering and Detection
- *
- * To reduce the possibility of noise or other transient signals causing
- * unwanted device wake-ups, interrupts, and/or events via an external interrupt
- * channel. A hardware signal filter can be enabled on individual channels. This
- * filter provides a Majority-of-Three voter filter on the incoming signal, so
- * that the input state is considered to be the majority vote of three
- * subsequent samples of the pin input buffer. The possible sampled input and
- * resulting filtered output when the filter is enabled is shown in
- * \ref asfdoc_sam0_extint_filter_table "the table below".
- *
- * \anchor asfdoc_sam0_extint_filter_table
- * <table>
- * <caption>Sampled Input and Resulting Filtered Output</caption>
- * <tr>
- * <th>Input Sample 1</th>
- * <th>Input Sample 2</th>
- * <th>Input Sample 3</th>
- * <th>Filtered Output</th>
- * </tr>
- * <tr>
- * <td>0</td> <td>0</td> <td>0</td> <td>0</td>
- * </tr>
- * <tr>
- * <td>0</td> <td>0</td> <td>1</td> <td>0</td>
- * </tr>
- * <tr>
- * <td>0</td> <td>1</td> <td>0</td> <td>0</td>
- * </tr>
- * <tr>
- * <td>0</td> <td>1</td> <td>1</td> <td>1</td>
- * </tr>
- * <tr>
- * <td>1</td> <td>0</td> <td>0</td> <td>0</td>
- * </tr>
- * <tr>
- * <td>1</td> <td>0</td> <td>1</td> <td>1</td>
- * </tr>
- * <tr>
- * <td>1</td> <td>1</td> <td>0</td> <td>1</td>
- * </tr>
- * <tr>
- * <td>1</td> <td>1</td> <td>1</td> <td>1</td>
- * </tr>
- * </table>
- *
- * \subsection asfdoc_sam0_extint_module_overview_events Events and Interrupts
- *
- * Channel detection states may be polled inside the application for synchronous
- * detection, or events and interrupts may be used for asynchronous behavior.
- * Each channel can be configured to give an asynchronous hardware event (which
- * may in turn trigger actions in other hardware modules) or an asynchronous
- * software interrupt.
- *
- * \note The connection of events between modules requires the use of the
- * \ref asfdoc_sam0_events_group "SAM Event System Driver (EVENTS)"
- * to route output event of one module to the input event of another.
- * For more information on event routing, refer to the event driver
- * documentation.
- *
- * \subsection asfdoc_sam0_extint_module_overview_physical Physical Connection
- *
- * \ref asfdoc_sam0_extint_int_connections "The diagram below" shows how this
- * module is interconnected within the device.
- *
- * \anchor asfdoc_sam0_extint_int_connections
- * \dot
- * digraph overview {
- * node [label="Port Pad" shape=square] pad;
- *
- * subgraph driver {
- * node [label="Peripheral MUX" shape=trapezium] pinmux;
- * node [label="EIC Module" shape=ellipse] eic;
- * node [label="Other Peripheral Modules" shape=ellipse style=filled fillcolor=lightgray] peripherals;
- * }
- *
- * pinmux -> eic;
- * pad -> pinmux;
- * pinmux -> peripherals;
- * }
- * \enddot
- *
- * \section asfdoc_sam0_extint_special_considerations Special Considerations
- *
- * Not all devices support disabling of the NMI channel(s) detection mode - see
- * your device datasheet.
- *
- *
- * \section asfdoc_sam0_extint_extra_info Extra Information
- *
- * For extra information, see \ref asfdoc_sam0_extint_extra. This includes:
- * - \ref asfdoc_sam0_extint_extra_acronyms
- * - \ref asfdoc_sam0_extint_extra_dependencies
- * - \ref asfdoc_sam0_extint_extra_errata
- * - \ref asfdoc_sam0_extint_extra_history
- *
- *
- * \section asfdoc_sam0_extint_examples Examples
- *
- * For a list of examples related to this driver, see
- * \ref asfdoc_sam0_extint_exqsg.
- *
- *
- * \section asfdoc_sam0_extint_api_overview API Overview
- * @{
- */
- #include <compiler.h>
- #include <pinmux.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- /**
- * \brief External interrupt edge detection configuration enum.
- *
- * Enum for the possible signal edge detection modes of the External
- * Interrupt Controller module.
- */
- enum extint_detect {
- /** No edge detection. Not allowed as a NMI detection mode on some
- * devices. */
- EXTINT_DETECT_NONE = 0,
- /** Detect rising signal edges */
- EXTINT_DETECT_RISING = 1,
- /** Detect falling signal edges */
- EXTINT_DETECT_FALLING = 2,
- /** Detect both signal edges */
- EXTINT_DETECT_BOTH = 3,
- /** Detect high signal levels */
- EXTINT_DETECT_HIGH = 4,
- /** Detect low signal levels */
- EXTINT_DETECT_LOW = 5,
- };
- /**
- * \brief External interrupt internal pull configuration enum.
- *
- * Enum for the possible pin internal pull configurations.
- *
- * \note Disabling the internal pull resistor is not recommended if the driver
- * is used in interrupt (callback) mode, due the possibility of floating
- * inputs generating continuous interrupts.
- */
- enum extint_pull {
- /** Internal pull-up resistor is enabled on the pin */
- EXTINT_PULL_UP = SYSTEM_PINMUX_PIN_PULL_UP,
- /** Internal pull-down resistor is enabled on the pin */
- EXTINT_PULL_DOWN = SYSTEM_PINMUX_PIN_PULL_DOWN,
- /** Internal pull resistor is disconnected from the pin */
- EXTINT_PULL_NONE = SYSTEM_PINMUX_PIN_PULL_NONE,
- };
- /** The EIC is clocked by GCLK_EIC. */
- #define EXTINT_CLK_GCLK 0
- /** The EIC is clocked by CLK_ULP32K. */
- #define EXTINT_CLK_ULP32K 1
- /**
- * \brief External Interrupt Controller channel configuration structure.
- *
- * Configuration structure for the edge detection mode of an external
- * interrupt channel.
- */
- struct extint_chan_conf {
- /** GPIO pin the NMI should be connected to */
- uint32_t gpio_pin;
- /** MUX position the GPIO pin should be configured to */
- uint32_t gpio_pin_mux;
- /** Internal pull to enable on the input pin */
- enum extint_pull gpio_pin_pull;
- #if (SAML21) || (SAML22) || (SAMC20) || (SAMC21) || (SAMR30)
- /** Enable asynchronous edge detection. */
- bool enable_async_edge_detection;
- #else
- /** Wake up the device if the channel interrupt fires during sleep mode */
- bool wake_if_sleeping;
- #endif
- /** Filter the raw input signal to prevent noise from triggering an
- * interrupt accidentally, using a three sample majority filter */
- bool filter_input_signal;
- /** Edge detection mode to use */
- enum extint_detect detection_criteria;
- };
- /**
- * \brief External Interrupt event enable/disable structure.
- *
- * Event flags for the \ref extint_enable_events() and
- * \ref extint_disable_events().
- */
- struct extint_events {
- /** If \c true, an event will be generated when an external interrupt
- * channel detection state changes */
- bool generate_event_on_detect[32 * EIC_INST_NUM];
- };
- /**
- * \brief External Interrupt Controller NMI configuration structure.
- *
- * Configuration structure for the edge detection mode of an external
- * interrupt NMI channel.
- */
- struct extint_nmi_conf {
- /** GPIO pin the NMI should be connected to */
- uint32_t gpio_pin;
- /** MUX position the GPIO pin should be configured to */
- uint32_t gpio_pin_mux;
- /** Internal pull to enable on the input pin */
- enum extint_pull gpio_pin_pull;
- /** Filter the raw input signal to prevent noise from triggering an
- * interrupt accidentally, using a three sample majority filter */
- bool filter_input_signal;
- /** Edge detection mode to use. Not all devices support all possible
- * detection modes for NMIs.
- */
- enum extint_detect detection_criteria;
- #if (SAML21) || (SAML22) || (SAMC20) || (SAMC21) || (SAMR30)
- /** Enable asynchronous edge detection. */
- bool enable_async_edge_detection;
- #endif
- };
- #if EXTINT_CALLBACK_MODE == true
- /** Type definition for an EXTINT module callback function */
- typedef void (*extint_callback_t)(void);
- #ifndef EIC_NUMBER_OF_INTERRUPTS
- # define EIC_NUMBER_OF_INTERRUPTS 16
- #endif
- #endif
- #if !defined(__DOXYGEN__)
- /** \internal
- * Internal EXTINT module device instance structure definition.
- */
- struct _extint_module
- {
- # if EXTINT_CALLBACK_MODE == true
- /** Asynchronous channel callback table, for user-registered handlers */
- extint_callback_t callbacks[EIC_NUMBER_OF_INTERRUPTS];
- # else
- /** Dummy value to ensure the struct has at least one member */
- uint8_t _dummy;
- # endif
- };
- /**
- * \brief Retrieves the base EIC module address from a given channel number.
- *
- * Retrieves the base address of a EIC hardware module associated with the
- * given external interrupt channel.
- *
- * \param[in] channel External interrupt channel index to convert
- *
- * \return Base address of the associated EIC module.
- */
- static inline Eic * _extint_get_eic_from_channel(
- const uint8_t channel)
- {
- uint8_t eic_index = (channel / 32);
- if (eic_index < EIC_INST_NUM) {
- /* Array of available EICs */
- Eic *const eics[EIC_INST_NUM] = EIC_INSTS;
- return eics[eic_index];
- } else {
- Assert(false);
- return NULL;
- }
- }
- /**
- * \brief Retrieves the base EIC module address from a given NMI channel number.
- *
- * Retrieves the base address of a EIC hardware module associated with the
- * given non-maskable external interrupt channel.
- *
- * \param[in] nmi_channel Non-Maskable interrupt channel index to convert
- *
- * \return Base address of the associated EIC module.
- */
- static inline Eic * _extint_get_eic_from_nmi(
- const uint8_t nmi_channel)
- {
- uint8_t eic_index = nmi_channel;
- if (eic_index < EIC_INST_NUM) {
- /* Array of available EICs */
- Eic *const eics[EIC_INST_NUM] = EIC_INSTS;
- return eics[eic_index];
- } else {
- Assert(false);
- return NULL;
- }
- }
- #endif
- /** \name Event Management
- * @{
- */
- void extint_enable_events(
- struct extint_events *const events);
- void extint_disable_events(
- struct extint_events *const events);
- /** @} */
- /** \name Configuration and Initialization (Channel)
- * @{
- */
- void extint_chan_get_config_defaults(
- struct extint_chan_conf *const config);
- void extint_chan_set_config(
- const uint8_t channel,
- const struct extint_chan_conf *const config);
- /** @} */
- /** \name Configuration and Initialization (NMI)
- * @{
- */
- /**
- * \brief Initializes an External Interrupt NMI channel configuration structure to defaults.
- *
- * Initializes a given External Interrupt NMI channel configuration structure
- * to a set of known default values. This function should be called on all new
- * instances of these configuration structures before being modified by the
- * user application.
- *
- * The default configuration is as follows:
- * \li Input filtering disabled
- * \li Detect falling edges of a signal
- * \li Asynchronous edge detection is disabled
- *
- * \param[out] config Configuration structure to initialize to default values
- */
- static inline void extint_nmi_get_config_defaults(
- struct extint_nmi_conf *const config)
- {
- /* Sanity check arguments */
- Assert(config);
- /* Default configuration values */
- config->gpio_pin = 0;
- config->gpio_pin_mux = 0;
- config->gpio_pin_pull = EXTINT_PULL_UP;
- config->filter_input_signal = false;
- config->detection_criteria = EXTINT_DETECT_FALLING;
- #if (SAML21) || (SAML22) || (SAMC20) || (SAMC21) || (SAMR30)
- config->enable_async_edge_detection = false;
- #endif
- }
- enum status_code extint_nmi_set_config(
- const uint8_t nmi_channel,
- const struct extint_nmi_conf *const config);
- /** @} */
- /** \name Detection testing and clearing (channel)
- * @{
- */
- /**
- * \brief Retrieves the edge detection state of a configured channel.
- *
- * Reads the current state of a configured channel, and determines
- * if the detection criteria of the channel has been met.
- *
- * \param[in] channel External Interrupt channel index to check
- *
- * \return Status of the requested channel's edge detection state.
- * \retval true If the channel's edge/level detection criteria was met
- * \retval false If the channel has not detected its configured criteria
- */
- static inline bool extint_chan_is_detected(
- const uint8_t channel)
- {
- Eic *const eic_module = _extint_get_eic_from_channel(channel);
- uint32_t eic_mask = (1UL << (channel % 32));
- return (eic_module->INTFLAG.reg & eic_mask);
- }
- /**
- * \brief Clears the edge detection state of a configured channel.
- *
- * Clears the current state of a configured channel, readying it for
- * the next level or edge detection.
- *
- * \param[in] channel External Interrupt channel index to check
- */
- static inline void extint_chan_clear_detected(
- const uint8_t channel)
- {
- Eic *const eic_module = _extint_get_eic_from_channel(channel);
- uint32_t eic_mask = (1UL << (channel % 32));
- eic_module->INTFLAG.reg = eic_mask;
- }
- /** @} */
- /** \name Detection Testing and Clearing (NMI)
- * @{
- */
- /**
- * \brief Retrieves the edge detection state of a configured NMI channel.
- *
- * Reads the current state of a configured NMI channel, and determines
- * if the detection criteria of the NMI channel has been met.
- *
- * \param[in] nmi_channel External Interrupt NMI channel index to check
- *
- * \return Status of the requested NMI channel's edge detection state.
- * \retval true If the NMI channel's edge/level detection criteria was met
- * \retval false If the NMI channel has not detected its configured criteria
- */
- static inline bool extint_nmi_is_detected(
- const uint8_t nmi_channel)
- {
- Eic *const eic_module = _extint_get_eic_from_nmi(nmi_channel);
- return (eic_module->NMIFLAG.reg & EIC_NMIFLAG_NMI);
- }
- /**
- * \brief Clears the edge detection state of a configured NMI channel.
- *
- * Clears the current state of a configured NMI channel, readying it for
- * the next level or edge detection.
- *
- * \param[in] nmi_channel External Interrupt NMI channel index to check
- */
- static inline void extint_nmi_clear_detected(
- const uint8_t nmi_channel)
- {
- Eic *const eic_module = _extint_get_eic_from_nmi(nmi_channel);
- eic_module->NMIFLAG.reg = EIC_NMIFLAG_NMI;
- }
- /** @} */
- #ifdef __cplusplus
- }
- #endif
- /** @} */
- #if EXTINT_CALLBACK_MODE == true
- # include "extint_callback.h"
- #endif
- /**
- * \page asfdoc_sam0_extint_extra Extra Information for EXTINT Driver
- *
- * \section asfdoc_sam0_extint_extra_acronyms Acronyms
- * The table below presents the acronyms used in this module:
- *
- * <table>
- * <tr>
- * <th>Acronym</th>
- * <th>Description</th>
- * </tr>
- * <tr>
- * <td>EIC</td>
- * <td>External Interrupt Controller</td>
- * </tr>
- * <tr>
- * <td>MUX</td>
- * <td>Multiplexer</td>
- * </tr>
- * <tr>
- * <td>NMI</td>
- * <td>Non-Maskable Interrupt</td>
- * </tr>
- * </table>
- *
- *
- * \section asfdoc_sam0_extint_extra_dependencies Dependencies
- * This driver has the following dependencies:
- *
- * - \ref asfdoc_sam0_system_pinmux_group "System Pin Multiplexer Driver"
- *
- *
- * \section asfdoc_sam0_extint_extra_errata Errata
- * There are no errata related to this driver.
- *
- *
- * \section asfdoc_sam0_extint_extra_history Module History
- * An overview of the module history is presented in the table below, with
- * details on the enhancements and fixes made to the module since its first
- * release. The current version of this corresponds to the newest version in
- * the table.
- *
- * <table>
- * <tr>
- * <th>Changelog</th>
- * </tr>
- * <tr>
- * <td>
- * \li Driver updated to follow driver type convention
- * \li Removed \c %extint_reset(), \c %extint_disable() and
- * \c extint_enable() functions. Added internal function
- * \c %_system_extint_init().
- * \li Added configuration EXTINT_CLOCK_SOURCE in conf_extint.h
- * \li Removed configuration EXTINT_CALLBACKS_MAX in conf_extint.h, and
- * added channel parameter in the register functions
- * \c %extint_register_callback() and \c %extint_unregister_callback()
- * </td>
- * </tr>
- * <tr>
- * <td>Updated interrupt handler to clear interrupt flag before calling
- * callback function</td>
- * </tr>
- * <tr>
- * <td>Updated initialization function to also enable the digital interface
- * clock to the module if it is disabled</td>
- * </tr>
- * <tr>
- * <td>Initial Release</td>
- * </tr>
- * </table>
- */
- /**
- * \page asfdoc_sam0_extint_exqsg Examples for EXTINT Driver
- *
- * This is a list of the available Quick Start guides (QSGs) and example
- * applications for \ref asfdoc_sam0_extint_group.
- * QSGs are simple examples with step-by-step instructions to configure and
- * use this driver in a selection of use cases. Note that a QSG can be compiled
- * as a standalone application or be added to the user application.
- *
- * - \subpage asfdoc_sam0_extint_basic_use_case
- * \if EXTINT_CALLBACK_MODE
- * - \subpage asfdoc_sam0_extint_callback_use_case
- * \endif
- *
- * \page asfdoc_sam0_extint_document_revision_history Document Revision History
- *
- * <table>
- * <tr>
- * <th>Doc. Rev.</th>
- * <th>Date</th>
- * <th>Comments</th>
- * </tr>
- * <tr>
- * <td>42112E</td>
- * <td>12/2015</td>
- * <td>Added support for SAM L21/L22, SAM C21, SAM D09, and SAM DA1</td>
- * </tr>
- * <tr>
- * <td>42112D</td>
- * <td>12/2014</td>
- * <td>Added support for SAM R21 and SAM D10/D11</td>
- * </tr>
- * <tr>
- * <td>42112C</td>
- * <td>01/2014</td>
- * <td>Added support for SAM D21</td>
- * </tr>
- * <tr>
- * <td>42112B</td>
- * <td>06/2013</td>
- * <td>Added additional documentation on the event system. Corrected
- * documentation typos.</td>
- * </tr>
- * <tr>
- * <td>42112A</td>
- * <td>06/2013</td>
- * <td>Initial release</td>
- * </tr>
- * </table>
- */
- #endif
|