mbed library sources

Fork of mbed-src by mbed official

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 Pin Multiplexer 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 PINMUX_H_INCLUDED
mbed_official 579:53297373a894 47 #define PINMUX_H_INCLUDED
mbed_official 579:53297373a894 48
mbed_official 579:53297373a894 49 /**
mbed_official 579:53297373a894 50 * \defgroup asfdoc_sam0_system_pinmux_group SAM System Pin Multiplexer Driver (SYSTEM PINMUX)
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 the device's physical I/O Pins, to alter the direction and
mbed_official 579:53297373a894 54 * input/drive characteristics as well as to configure the pin peripheral
mbed_official 579:53297373a894 55 * multiplexer selection.
mbed_official 579:53297373a894 56 *
mbed_official 579:53297373a894 57 * The following peripherals are used by this module:
mbed_official 579:53297373a894 58 * - PORT (Port I/O Management)
mbed_official 579:53297373a894 59 *
mbed_official 579:53297373a894 60 * The following devices can use this module:
mbed_official 579:53297373a894 61 * - Atmel | SMART SAM D20/D21
mbed_official 579:53297373a894 62 * - Atmel | SMART SAM R21
mbed_official 579:53297373a894 63 * - Atmel | SMART SAM D10/D11
mbed_official 579:53297373a894 64 * - Atmel | SMART SAM L21
mbed_official 579:53297373a894 65 *
mbed_official 579:53297373a894 66 * Physically, the modules are interconnected within the device as shown in the
mbed_official 579:53297373a894 67 * following diagram:
mbed_official 579:53297373a894 68 *
mbed_official 579:53297373a894 69 * The outline of this documentation is as follows:
mbed_official 579:53297373a894 70 * - \ref asfdoc_sam0_system_pinmux_prerequisites
mbed_official 579:53297373a894 71 * - \ref asfdoc_sam0_system_pinmux_module_overview
mbed_official 579:53297373a894 72 * - \ref asfdoc_sam0_system_pinmux_special_considerations
mbed_official 579:53297373a894 73 * - \ref asfdoc_sam0_system_pinmux_extra_info
mbed_official 579:53297373a894 74 * - \ref asfdoc_sam0_system_pinmux_examples
mbed_official 579:53297373a894 75 * - \ref asfdoc_sam0_system_pinmux_api_overview
mbed_official 579:53297373a894 76 *
mbed_official 579:53297373a894 77 *
mbed_official 579:53297373a894 78 * \section asfdoc_sam0_system_pinmux_prerequisites Prerequisites
mbed_official 579:53297373a894 79 *
mbed_official 579:53297373a894 80 * There are no prerequisites for this module.
mbed_official 579:53297373a894 81 *
mbed_official 579:53297373a894 82 *
mbed_official 579:53297373a894 83 * \section asfdoc_sam0_system_pinmux_module_overview Module Overview
mbed_official 579:53297373a894 84 *
mbed_official 579:53297373a894 85 * The SAM devices contain a number of General Purpose I/O pins, used to
mbed_official 579:53297373a894 86 * interface the user application logic and internal hardware peripherals to
mbed_official 579:53297373a894 87 * an external system. The Pin Multiplexer (PINMUX) driver provides a method
mbed_official 579:53297373a894 88 * of configuring the individual pin peripheral multiplexers to select
mbed_official 579:53297373a894 89 * alternate pin functions.
mbed_official 579:53297373a894 90 *
mbed_official 579:53297373a894 91 * \subsection asfdoc_sam0_system_pinmux_features Driver Feature Macro Definition
mbed_official 579:53297373a894 92 * <table>
mbed_official 579:53297373a894 93 * <tr>
mbed_official 579:53297373a894 94 * <th>Driver Feature Macro</th>
mbed_official 579:53297373a894 95 * <th>Supported devices</th>
mbed_official 579:53297373a894 96 * </tr>
mbed_official 579:53297373a894 97 * <tr>
mbed_official 579:53297373a894 98 * <td>FEATURE_SYSTEM_PINMUX_DRIVE_STRENGTH</td>
mbed_official 579:53297373a894 99 * <td>SAML21</td>
mbed_official 579:53297373a894 100 * </tr>
mbed_official 579:53297373a894 101 * </table>
mbed_official 579:53297373a894 102 * \note The specific features are only available in the driver when the
mbed_official 579:53297373a894 103 * selected device supports those features.
mbed_official 579:53297373a894 104 *
mbed_official 579:53297373a894 105 * \subsection asfdoc_sam0_system_pinmux_physical_logical_pins Physical and Logical GPIO Pins
mbed_official 579:53297373a894 106 * SAM devices use two naming conventions for the I/O pins in the device; one
mbed_official 579:53297373a894 107 * physical and one logical. Each physical pin on a device package is assigned
mbed_official 579:53297373a894 108 * both a physical port and pin identifier (e.g. "PORTA.0") as well as a
mbed_official 579:53297373a894 109 * monotonically incrementing logical GPIO number (e.g. "GPIO0"). While the
mbed_official 579:53297373a894 110 * former is used to map physical pins to their physical internal device module
mbed_official 579:53297373a894 111 * counterparts, for simplicity the design of this driver uses the logical GPIO
mbed_official 579:53297373a894 112 * numbers instead.
mbed_official 579:53297373a894 113 *
mbed_official 579:53297373a894 114 * \subsection asfdoc_sam0_system_pinmux_peripheral_muxing Peripheral Multiplexing
mbed_official 579:53297373a894 115 * SAM devices contain a peripheral MUX, which is individually controllable
mbed_official 579:53297373a894 116 * for each I/O pin of the device. The peripheral MUX allows you to select the
mbed_official 579:53297373a894 117 * function of a physical package pin - whether it will be controlled as a user
mbed_official 579:53297373a894 118 * controllable GPIO pin, or whether it will be connected internally to one of
mbed_official 579:53297373a894 119 * several peripheral modules (such as an I<SUP>2</SUP>C module). When a pin is
mbed_official 579:53297373a894 120 * configured in GPIO mode, other peripherals connected to the same pin will be
mbed_official 579:53297373a894 121 * disabled.
mbed_official 579:53297373a894 122 *
mbed_official 579:53297373a894 123 * \subsection asfdoc_sam0_system_pinmux_pad_characteristics Special Pad Characteristics
mbed_official 579:53297373a894 124 * There are several special modes that can be selected on one or more I/O pins
mbed_official 579:53297373a894 125 * of the device, which alter the input and output characteristics of the pad.
mbed_official 579:53297373a894 126 *
mbed_official 579:53297373a894 127 * \subsubsection asfdoc_sam0_system_pinmux_drive_strength Drive Strength
mbed_official 579:53297373a894 128 * The Drive Strength configures the strength of the output driver on the
mbed_official 579:53297373a894 129 * pad. Normally, there is a fixed current limit that each I/O pin can safely
mbed_official 579:53297373a894 130 * drive, however some I/O pads offer a higher drive mode which increases this
mbed_official 579:53297373a894 131 * limit for that I/O pin at the expense of an increased power consumption.
mbed_official 579:53297373a894 132 *
mbed_official 579:53297373a894 133 * \subsubsection asfdoc_sam0_system_pinmux_slew_rate Slew Rate
mbed_official 579:53297373a894 134 * The Slew Rate configures the slew rate of the output driver, limiting the
mbed_official 579:53297373a894 135 * rate at which the pad output voltage can change with time.
mbed_official 579:53297373a894 136 *
mbed_official 579:53297373a894 137 * \subsubsection asfdoc_sam0_system_pinmux_input_sample_mode Input Sample Mode
mbed_official 579:53297373a894 138 * The Input Sample Mode configures the input sampler buffer of the pad. By
mbed_official 579:53297373a894 139 * default, the input buffer is only sampled "on-demand", i.e. when the user
mbed_official 579:53297373a894 140 * application attempts to read from the input buffer. This mode is the most
mbed_official 579:53297373a894 141 * power efficient, but increases the latency of the input sample by two clock
mbed_official 579:53297373a894 142 * cycles of the port clock. To reduce latency, the input sampler can instead
mbed_official 579:53297373a894 143 * be configured to always sample the input buffer on each port clock cycle, at
mbed_official 579:53297373a894 144 * the expense of an increased power consumption.
mbed_official 579:53297373a894 145 *
mbed_official 579:53297373a894 146 * \subsection asfdoc_sam0_system_pinmux_module_overview_physical Physical Connection
mbed_official 579:53297373a894 147 *
mbed_official 579:53297373a894 148 * \ref asfdoc_sam0_system_pinmux_intconnections "The diagram below" shows
mbed_official 579:53297373a894 149 * how this module is interconnected within the device:
mbed_official 579:53297373a894 150 *
mbed_official 579:53297373a894 151 * \anchor asfdoc_sam0_system_pinmux_intconnections
mbed_official 579:53297373a894 152 * \dot
mbed_official 579:53297373a894 153 * digraph overview {
mbed_official 579:53297373a894 154 * node [label="Port Pad" shape=square] pad;
mbed_official 579:53297373a894 155 *
mbed_official 579:53297373a894 156 * subgraph driver {
mbed_official 579:53297373a894 157 * node [label="Peripheral MUX" shape=trapezium] pinmux;
mbed_official 579:53297373a894 158 * node [label="GPIO Module" shape=ellipse shape=ellipse style=filled fillcolor=lightgray] gpio;
mbed_official 579:53297373a894 159 * node [label="Other Peripheral Modules" shape=ellipse style=filled fillcolor=lightgray] peripherals;
mbed_official 579:53297373a894 160 * }
mbed_official 579:53297373a894 161 *
mbed_official 579:53297373a894 162 * pinmux -> gpio;
mbed_official 579:53297373a894 163 * pad -> pinmux;
mbed_official 579:53297373a894 164 * pinmux -> peripherals;
mbed_official 579:53297373a894 165 * }
mbed_official 579:53297373a894 166 * \enddot
mbed_official 579:53297373a894 167 *
mbed_official 579:53297373a894 168 * \section asfdoc_sam0_system_pinmux_special_considerations Special Considerations
mbed_official 579:53297373a894 169 *
mbed_official 579:53297373a894 170 * The SAM port pin input sampling mode is set in groups of four physical
mbed_official 579:53297373a894 171 * pins; setting the sampling mode of any pin in a sub-group of eight I/O pins
mbed_official 579:53297373a894 172 * will configure the sampling mode of the entire sub-group.
mbed_official 579:53297373a894 173 *
mbed_official 579:53297373a894 174 * High Drive Strength output driver mode is not available on all device pins -
mbed_official 579:53297373a894 175 * refer to your device specific datasheet.
mbed_official 579:53297373a894 176 *
mbed_official 579:53297373a894 177 *
mbed_official 579:53297373a894 178 * \section asfdoc_sam0_system_pinmux_extra_info Extra Information
mbed_official 579:53297373a894 179 *
mbed_official 579:53297373a894 180 * For extra information, see \ref asfdoc_sam0_system_pinmux_extra. This includes:
mbed_official 579:53297373a894 181 * - \ref asfdoc_sam0_system_pinmux_extra_acronyms
mbed_official 579:53297373a894 182 * - \ref asfdoc_sam0_system_pinmux_extra_dependencies
mbed_official 579:53297373a894 183 * - \ref asfdoc_sam0_system_pinmux_extra_errata
mbed_official 579:53297373a894 184 * - \ref asfdoc_sam0_system_pinmux_extra_history
mbed_official 579:53297373a894 185 *
mbed_official 579:53297373a894 186 *
mbed_official 579:53297373a894 187 * \section asfdoc_sam0_system_pinmux_examples Examples
mbed_official 579:53297373a894 188 *
mbed_official 579:53297373a894 189 * For a list of examples related to this driver, see
mbed_official 579:53297373a894 190 * \ref asfdoc_sam0_system_pinmux_exqsg.
mbed_official 579:53297373a894 191 *
mbed_official 579:53297373a894 192 *
mbed_official 579:53297373a894 193 * \section asfdoc_sam0_system_pinmux_api_overview API Overview
mbed_official 579:53297373a894 194 * @{
mbed_official 579:53297373a894 195 */
mbed_official 579:53297373a894 196
mbed_official 579:53297373a894 197 #include <compiler.h>
mbed_official 579:53297373a894 198
mbed_official 579:53297373a894 199 #ifdef __cplusplus
mbed_official 579:53297373a894 200 extern "C" {
mbed_official 579:53297373a894 201 #endif
mbed_official 579:53297373a894 202
mbed_official 579:53297373a894 203 /*@{*/
mbed_official 579:53297373a894 204 #if (SAML21) || defined(__DOXYGEN__)
mbed_official 579:53297373a894 205 /** Output Driver Strength Selection feature support. */
mbed_official 579:53297373a894 206 # define FEATURE_SYSTEM_PINMUX_DRIVE_STRENGTH
mbed_official 579:53297373a894 207 #endif
mbed_official 579:53297373a894 208 /*@}*/
mbed_official 579:53297373a894 209
mbed_official 579:53297373a894 210 /** Peripheral multiplexer index to select GPIO mode for a pin. */
mbed_official 579:53297373a894 211 #define SYSTEM_PINMUX_GPIO (1 << 7)
mbed_official 579:53297373a894 212
mbed_official 579:53297373a894 213 /**
mbed_official 579:53297373a894 214 * \brief Port pin direction configuration enum.
mbed_official 579:53297373a894 215 *
mbed_official 579:53297373a894 216 * Enum for the possible pin direction settings of the port pin configuration
mbed_official 579:53297373a894 217 * structure, to indicate the direction the pin should use.
mbed_official 579:53297373a894 218 */
mbed_official 579:53297373a894 219 enum system_pinmux_pin_dir {
mbed_official 579:53297373a894 220 /** The pin's input buffer should be enabled, so that the pin state can
mbed_official 579:53297373a894 221 * be read. */
mbed_official 579:53297373a894 222 SYSTEM_PINMUX_PIN_DIR_INPUT,
mbed_official 579:53297373a894 223 /** The pin's output buffer should be enabled, so that the pin state can
mbed_official 579:53297373a894 224 * be set (but not read back). */
mbed_official 579:53297373a894 225 SYSTEM_PINMUX_PIN_DIR_OUTPUT,
mbed_official 579:53297373a894 226 /** The pin's output and input buffers should both be enabled, so that the
mbed_official 579:53297373a894 227 * pin state can be set and read back. */
mbed_official 579:53297373a894 228 SYSTEM_PINMUX_PIN_DIR_OUTPUT_WITH_READBACK,
mbed_official 579:53297373a894 229 };
mbed_official 579:53297373a894 230
mbed_official 579:53297373a894 231 /**
mbed_official 579:53297373a894 232 * \brief Port pin input pull configuration enum.
mbed_official 579:53297373a894 233 *
mbed_official 579:53297373a894 234 * Enum for the possible pin pull settings of the port pin configuration
mbed_official 579:53297373a894 235 * structure, to indicate the type of logic level pull the pin should use.
mbed_official 579:53297373a894 236 */
mbed_official 579:53297373a894 237 enum system_pinmux_pin_pull {
mbed_official 579:53297373a894 238 /** No logical pull should be applied to the pin. */
mbed_official 579:53297373a894 239 SYSTEM_PINMUX_PIN_PULL_NONE,
mbed_official 579:53297373a894 240 /** Pin should be pulled up when idle. */
mbed_official 579:53297373a894 241 SYSTEM_PINMUX_PIN_PULL_UP,
mbed_official 579:53297373a894 242 /** Pin should be pulled down when idle. */
mbed_official 579:53297373a894 243 SYSTEM_PINMUX_PIN_PULL_DOWN,
mbed_official 579:53297373a894 244 };
mbed_official 579:53297373a894 245
mbed_official 579:53297373a894 246 /**
mbed_official 579:53297373a894 247 * \brief Port pin digital input sampling mode enum.
mbed_official 579:53297373a894 248 *
mbed_official 579:53297373a894 249 * Enum for the possible input sampling modes for the port pin configuration
mbed_official 579:53297373a894 250 * structure, to indicate the type of sampling a port pin should use.
mbed_official 579:53297373a894 251 */
mbed_official 579:53297373a894 252 enum system_pinmux_pin_sample {
mbed_official 579:53297373a894 253 /** Pin input buffer should continuously sample the pin state. */
mbed_official 579:53297373a894 254 SYSTEM_PINMUX_PIN_SAMPLE_CONTINUOUS,
mbed_official 579:53297373a894 255 /** Pin input buffer should be enabled when the IN register is read. */
mbed_official 579:53297373a894 256 SYSTEM_PINMUX_PIN_SAMPLE_ONDEMAND,
mbed_official 579:53297373a894 257 };
mbed_official 579:53297373a894 258
mbed_official 579:53297373a894 259 /**
mbed_official 579:53297373a894 260 * \brief Port pin configuration structure.
mbed_official 579:53297373a894 261 *
mbed_official 579:53297373a894 262 * Configuration structure for a port pin instance. This structure should be
mbed_official 579:53297373a894 263 * structure should be initialized by the
mbed_official 579:53297373a894 264 * \ref system_pinmux_get_config_defaults() function before being modified by
mbed_official 579:53297373a894 265 * the user application.
mbed_official 579:53297373a894 266 */
mbed_official 579:53297373a894 267 struct system_pinmux_config {
mbed_official 579:53297373a894 268 /** MUX index of the peripheral that should control the pin, if peripheral
mbed_official 579:53297373a894 269 * control is desired. For GPIO use, this should be set to
mbed_official 579:53297373a894 270 * \ref SYSTEM_PINMUX_GPIO. */
mbed_official 579:53297373a894 271 uint8_t mux_position;
mbed_official 579:53297373a894 272
mbed_official 579:53297373a894 273 /** Port buffer input/output direction. */
mbed_official 579:53297373a894 274 enum system_pinmux_pin_dir direction;
mbed_official 579:53297373a894 275
mbed_official 579:53297373a894 276 /** Logic level pull of the input buffer. */
mbed_official 579:53297373a894 277 enum system_pinmux_pin_pull input_pull;
mbed_official 579:53297373a894 278
mbed_official 579:53297373a894 279 /** Enable lowest possible powerstate on the pin.
mbed_official 579:53297373a894 280 *
mbed_official 579:53297373a894 281 * \note All other configurations will be ignored, the pin will be disabled.
mbed_official 579:53297373a894 282 */
mbed_official 579:53297373a894 283 bool powersave;
mbed_official 579:53297373a894 284 };
mbed_official 579:53297373a894 285
mbed_official 579:53297373a894 286 /** \name Configuration and Initialization
mbed_official 579:53297373a894 287 * @{
mbed_official 579:53297373a894 288 */
mbed_official 579:53297373a894 289
mbed_official 579:53297373a894 290 /**
mbed_official 579:53297373a894 291 * \brief Initializes a Port pin configuration structure to defaults.
mbed_official 579:53297373a894 292 *
mbed_official 579:53297373a894 293 * Initializes a given Port pin configuration structure to a set of
mbed_official 579:53297373a894 294 * known default values. This function should be called on all new
mbed_official 579:53297373a894 295 * instances of these configuration structures before being modified by the
mbed_official 579:53297373a894 296 * user application.
mbed_official 579:53297373a894 297 *
mbed_official 579:53297373a894 298 * The default configuration is as follows:
mbed_official 579:53297373a894 299 * \li Non peripheral (i.e. GPIO) controlled
mbed_official 579:53297373a894 300 * \li Input mode with internal pull-up enabled
mbed_official 579:53297373a894 301 *
mbed_official 579:53297373a894 302 * \param[out] config Configuration structure to initialize to default values
mbed_official 579:53297373a894 303 */
mbed_official 579:53297373a894 304 static inline void system_pinmux_get_config_defaults(
mbed_official 579:53297373a894 305 struct system_pinmux_config *const config)
mbed_official 579:53297373a894 306 {
mbed_official 579:53297373a894 307 /* Sanity check arguments */
mbed_official 579:53297373a894 308 Assert(config);
mbed_official 579:53297373a894 309
mbed_official 579:53297373a894 310 /* Default configuration values */
mbed_official 579:53297373a894 311 config->mux_position = SYSTEM_PINMUX_GPIO;
mbed_official 579:53297373a894 312 config->direction = SYSTEM_PINMUX_PIN_DIR_INPUT;
mbed_official 579:53297373a894 313 config->input_pull = SYSTEM_PINMUX_PIN_PULL_UP;
mbed_official 579:53297373a894 314 config->powersave = false;
mbed_official 579:53297373a894 315 }
mbed_official 579:53297373a894 316
mbed_official 579:53297373a894 317 void system_pinmux_pin_set_config(
mbed_official 579:53297373a894 318 const uint8_t gpio_pin,
mbed_official 579:53297373a894 319 const struct system_pinmux_config *const config);
mbed_official 579:53297373a894 320
mbed_official 579:53297373a894 321 void system_pinmux_group_set_config(
mbed_official 579:53297373a894 322 PortGroup *const port,
mbed_official 579:53297373a894 323 const uint32_t mask,
mbed_official 579:53297373a894 324 const struct system_pinmux_config *const config);
mbed_official 579:53297373a894 325
mbed_official 579:53297373a894 326 /** @} */
mbed_official 579:53297373a894 327
mbed_official 579:53297373a894 328 /** \name Special Mode Configuration (Physical Group Orientated)
mbed_official 579:53297373a894 329 * @{
mbed_official 579:53297373a894 330 */
mbed_official 579:53297373a894 331
mbed_official 579:53297373a894 332 /**
mbed_official 579:53297373a894 333 * \brief Retrieves the PORT module group instance from a given GPIO pin number.
mbed_official 579:53297373a894 334 *
mbed_official 579:53297373a894 335 * Retrieves the PORT module group instance associated with a given logical
mbed_official 579:53297373a894 336 * GPIO pin number.
mbed_official 579:53297373a894 337 *
mbed_official 579:53297373a894 338 * \param[in] gpio_pin Index of the GPIO pin to convert
mbed_official 579:53297373a894 339 *
mbed_official 579:53297373a894 340 * \return Base address of the associated PORT module.
mbed_official 579:53297373a894 341 */
mbed_official 579:53297373a894 342 static inline PortGroup* system_pinmux_get_group_from_gpio_pin(
mbed_official 579:53297373a894 343 const uint8_t gpio_pin)
mbed_official 579:53297373a894 344 {
mbed_official 579:53297373a894 345 uint8_t port_index = (gpio_pin / 128);
mbed_official 579:53297373a894 346 uint8_t group_index = (gpio_pin / 32);
mbed_official 579:53297373a894 347
mbed_official 579:53297373a894 348 /* Array of available ports. */
mbed_official 579:53297373a894 349 Port *const ports[PORT_INST_NUM] = PORT_INSTS;
mbed_official 579:53297373a894 350
mbed_official 579:53297373a894 351 if (port_index < PORT_INST_NUM) {
mbed_official 579:53297373a894 352 return &(ports[port_index]->Group[group_index]);
mbed_official 579:53297373a894 353 } else {
mbed_official 579:53297373a894 354 Assert(false);
mbed_official 579:53297373a894 355 return NULL;
mbed_official 579:53297373a894 356 }
mbed_official 579:53297373a894 357 }
mbed_official 579:53297373a894 358
mbed_official 579:53297373a894 359 void system_pinmux_group_set_input_sample_mode(
mbed_official 579:53297373a894 360 PortGroup *const port,
mbed_official 579:53297373a894 361 const uint32_t mask,
mbed_official 579:53297373a894 362 const enum system_pinmux_pin_sample mode);
mbed_official 579:53297373a894 363
mbed_official 579:53297373a894 364 /** @} */
mbed_official 579:53297373a894 365
mbed_official 579:53297373a894 366 /** \name Special Mode Configuration (Logical Pin Orientated)
mbed_official 579:53297373a894 367 * @{
mbed_official 579:53297373a894 368 */
mbed_official 579:53297373a894 369
mbed_official 579:53297373a894 370 /**
mbed_official 579:53297373a894 371 * \brief Retrieves the currently selected MUX position of a logical pin.
mbed_official 579:53297373a894 372 *
mbed_official 579:53297373a894 373 * Retrieves the selected MUX peripheral on a given logical GPIO pin.
mbed_official 579:53297373a894 374 *
mbed_official 579:53297373a894 375 * \param[in] gpio_pin Index of the GPIO pin to configure
mbed_official 579:53297373a894 376 *
mbed_official 579:53297373a894 377 * \return Currently selected peripheral index on the specified pin.
mbed_official 579:53297373a894 378 */
mbed_official 579:53297373a894 379 static inline uint8_t system_pinmux_pin_get_mux_position(
mbed_official 579:53297373a894 380 const uint8_t gpio_pin)
mbed_official 579:53297373a894 381 {
mbed_official 579:53297373a894 382 PortGroup *const port = system_pinmux_get_group_from_gpio_pin(gpio_pin);
mbed_official 579:53297373a894 383 uint32_t pin_index = (gpio_pin % 32);
mbed_official 579:53297373a894 384
mbed_official 579:53297373a894 385 if (!(port->PINCFG[pin_index].reg & PORT_PINCFG_PMUXEN)) {
mbed_official 579:53297373a894 386 return SYSTEM_PINMUX_GPIO;
mbed_official 579:53297373a894 387 }
mbed_official 579:53297373a894 388
mbed_official 579:53297373a894 389 uint32_t pmux_reg = port->PMUX[pin_index / 2].reg;
mbed_official 579:53297373a894 390
mbed_official 579:53297373a894 391 if (pin_index & 1) {
mbed_official 579:53297373a894 392 return (pmux_reg & PORT_PMUX_PMUXO_Msk) >> PORT_PMUX_PMUXO_Pos;
mbed_official 579:53297373a894 393 } else {
mbed_official 579:53297373a894 394 return (pmux_reg & PORT_PMUX_PMUXE_Msk) >> PORT_PMUX_PMUXE_Pos;
mbed_official 579:53297373a894 395 }
mbed_official 579:53297373a894 396 }
mbed_official 579:53297373a894 397
mbed_official 579:53297373a894 398 /**
mbed_official 579:53297373a894 399 * \brief Configures the input sampling mode for a GPIO pin.
mbed_official 579:53297373a894 400 *
mbed_official 579:53297373a894 401 * Configures the input sampling mode for a GPIO input, to
mbed_official 579:53297373a894 402 * control when the physical I/O pin value is sampled and
mbed_official 579:53297373a894 403 * stored inside the microcontroller.
mbed_official 579:53297373a894 404 *
mbed_official 579:53297373a894 405 * \param[in] gpio_pin Index of the GPIO pin to configure
mbed_official 579:53297373a894 406 * \param[in] mode New pin sampling mode to configure
mbed_official 579:53297373a894 407 */
mbed_official 579:53297373a894 408 static inline void system_pinmux_pin_set_input_sample_mode(
mbed_official 579:53297373a894 409 const uint8_t gpio_pin,
mbed_official 579:53297373a894 410 const enum system_pinmux_pin_sample mode)
mbed_official 579:53297373a894 411 {
mbed_official 579:53297373a894 412 PortGroup* const port = system_pinmux_get_group_from_gpio_pin(gpio_pin);
mbed_official 579:53297373a894 413 uint32_t pin_index = (gpio_pin % 32);
mbed_official 579:53297373a894 414
mbed_official 579:53297373a894 415 if (mode == SYSTEM_PINMUX_PIN_SAMPLE_ONDEMAND) {
mbed_official 579:53297373a894 416 port->CTRL.reg |= (1 << pin_index);
mbed_official 579:53297373a894 417 } else {
mbed_official 579:53297373a894 418 port->CTRL.reg &= ~(1 << pin_index);
mbed_official 579:53297373a894 419 }
mbed_official 579:53297373a894 420 }
mbed_official 579:53297373a894 421
mbed_official 579:53297373a894 422 /** @} */
mbed_official 579:53297373a894 423
mbed_official 579:53297373a894 424 #ifdef FEATURE_SYSTEM_PINMUX_DRIVE_STRENGTH
mbed_official 579:53297373a894 425 /**
mbed_official 579:53297373a894 426 * \brief Port pin drive output strength enum.
mbed_official 579:53297373a894 427 *
mbed_official 579:53297373a894 428 * Enum for the possible output drive strengths for the port pin
mbed_official 579:53297373a894 429 * configuration structure, to indicate the driver strength the pin should
mbed_official 579:53297373a894 430 * use.
mbed_official 579:53297373a894 431 */
mbed_official 579:53297373a894 432 enum system_pinmux_pin_strength {
mbed_official 579:53297373a894 433 /** Normal output driver strength. */
mbed_official 579:53297373a894 434 SYSTEM_PINMUX_PIN_STRENGTH_NORMAL,
mbed_official 579:53297373a894 435 /** High current output driver strength. */
mbed_official 579:53297373a894 436 SYSTEM_PINMUX_PIN_STRENGTH_HIGH,
mbed_official 579:53297373a894 437 };
mbed_official 579:53297373a894 438
mbed_official 579:53297373a894 439 /**
mbed_official 579:53297373a894 440 * \brief Configures the output driver strength mode for a GPIO pin.
mbed_official 579:53297373a894 441 *
mbed_official 579:53297373a894 442 * Configures the output drive strength for a GPIO output, to
mbed_official 579:53297373a894 443 * control the amount of current the pad is able to sink/source.
mbed_official 579:53297373a894 444 *
mbed_official 579:53297373a894 445 * \param[in] gpio_pin Index of the GPIO pin to configure
mbed_official 579:53297373a894 446 * \param[in] mode New output driver strength mode to configure
mbed_official 579:53297373a894 447 */
mbed_official 579:53297373a894 448 static inline void system_pinmux_pin_set_output_strength(
mbed_official 579:53297373a894 449 const uint8_t gpio_pin,
mbed_official 579:53297373a894 450 const enum system_pinmux_pin_strength mode)
mbed_official 579:53297373a894 451 {
mbed_official 579:53297373a894 452 PortGroup* const port = system_pinmux_get_group_from_gpio_pin(gpio_pin);
mbed_official 579:53297373a894 453 uint32_t pin_index = (gpio_pin % 32);
mbed_official 579:53297373a894 454
mbed_official 579:53297373a894 455 if (mode == SYSTEM_PINMUX_PIN_STRENGTH_HIGH) {
mbed_official 579:53297373a894 456 port->PINCFG[pin_index].reg |= PORT_PINCFG_DRVSTR;
mbed_official 579:53297373a894 457 } else {
mbed_official 579:53297373a894 458 port->PINCFG[pin_index].reg &= ~PORT_PINCFG_DRVSTR;
mbed_official 579:53297373a894 459 }
mbed_official 579:53297373a894 460 }
mbed_official 579:53297373a894 461
mbed_official 579:53297373a894 462 void system_pinmux_group_set_output_strength(
mbed_official 579:53297373a894 463 PortGroup *const port,
mbed_official 579:53297373a894 464 const uint32_t mask,
mbed_official 579:53297373a894 465 const enum system_pinmux_pin_strength mode);
mbed_official 579:53297373a894 466 #endif
mbed_official 579:53297373a894 467
mbed_official 579:53297373a894 468 #ifdef FEATURE_SYSTEM_PINMUX_SLEWRATE_LIMITER
mbed_official 579:53297373a894 469 /**
mbed_official 579:53297373a894 470 * \brief Port pin output slew rate enum.
mbed_official 579:53297373a894 471 *
mbed_official 579:53297373a894 472 * Enum for the possible output drive slew rates for the port pin
mbed_official 579:53297373a894 473 * configuration structure, to indicate the driver slew rate the pin should
mbed_official 579:53297373a894 474 * use.
mbed_official 579:53297373a894 475 */
mbed_official 579:53297373a894 476 enum system_pinmux_pin_slew_rate {
mbed_official 579:53297373a894 477 /** Normal pin output slew rate. */
mbed_official 579:53297373a894 478 SYSTEM_PINMUX_PIN_SLEW_RATE_NORMAL,
mbed_official 579:53297373a894 479 /** Enable slew rate limiter on the pin. */
mbed_official 579:53297373a894 480 SYSTEM_PINMUX_PIN_SLEW_RATE_LIMITED,
mbed_official 579:53297373a894 481 };
mbed_official 579:53297373a894 482
mbed_official 579:53297373a894 483 /**
mbed_official 579:53297373a894 484 * \brief Configures the output slew rate mode for a GPIO pin.
mbed_official 579:53297373a894 485 *
mbed_official 579:53297373a894 486 * Configures the output slew rate mode for a GPIO output, to
mbed_official 579:53297373a894 487 * control the speed at which the physical output pin can react to
mbed_official 579:53297373a894 488 * logical changes of the I/O pin value.
mbed_official 579:53297373a894 489 *
mbed_official 579:53297373a894 490 * \param[in] gpio_pin Index of the GPIO pin to configure
mbed_official 579:53297373a894 491 * \param[in] mode New pin slew rate mode to configure
mbed_official 579:53297373a894 492 */
mbed_official 579:53297373a894 493 static inline void system_pinmux_pin_set_output_slew_rate(
mbed_official 579:53297373a894 494 const uint8_t gpio_pin,
mbed_official 579:53297373a894 495 const enum system_pinmux_pin_slew_rate mode)
mbed_official 579:53297373a894 496 {
mbed_official 579:53297373a894 497 PortGroup* const port = system_pinmux_get_group_from_gpio_pin(gpio_pin);
mbed_official 579:53297373a894 498 uint32_t pin_index = (gpio_pin % 32);
mbed_official 579:53297373a894 499
mbed_official 579:53297373a894 500 if (mode == SYSTEM_PINMUX_PIN_SLEW_RATE_LIMITED) {
mbed_official 579:53297373a894 501 port->PINCFG[pin_index].reg |= PORT_PINCFG_SLEWLIM;
mbed_official 579:53297373a894 502 } else {
mbed_official 579:53297373a894 503 port->PINCFG[pin_index].reg &= ~PORT_PINCFG_SLEWLIM;
mbed_official 579:53297373a894 504 }
mbed_official 579:53297373a894 505 }
mbed_official 579:53297373a894 506
mbed_official 579:53297373a894 507 void system_pinmux_group_set_output_slew_rate(
mbed_official 579:53297373a894 508 PortGroup *const port,
mbed_official 579:53297373a894 509 const uint32_t mask,
mbed_official 579:53297373a894 510 const enum system_pinmux_pin_slew_rate mode);
mbed_official 579:53297373a894 511 #endif
mbed_official 579:53297373a894 512
mbed_official 579:53297373a894 513 #ifdef FEATURE_SYSTEM_PINMUX_OPEN_DRAIN
mbed_official 579:53297373a894 514 /**
mbed_official 579:53297373a894 515 * \brief Port pin output drive mode enum.
mbed_official 579:53297373a894 516 *
mbed_official 579:53297373a894 517 * Enum for the possible output drive modes for the port pin configuration
mbed_official 579:53297373a894 518 * structure, to indicate the output mode the pin should use.
mbed_official 579:53297373a894 519 */
mbed_official 579:53297373a894 520 enum system_pinmux_pin_drive {
mbed_official 579:53297373a894 521 /** Use totem pole output drive mode. */
mbed_official 579:53297373a894 522 SYSTEM_PINMUX_PIN_DRIVE_TOTEM,
mbed_official 579:53297373a894 523 /** Use open drain output drive mode. */
mbed_official 579:53297373a894 524 SYSTEM_PINMUX_PIN_DRIVE_OPEN_DRAIN,
mbed_official 579:53297373a894 525 };
mbed_official 579:53297373a894 526
mbed_official 579:53297373a894 527 /**
mbed_official 579:53297373a894 528 * \brief Configures the output driver mode for a GPIO pin.
mbed_official 579:53297373a894 529 *
mbed_official 579:53297373a894 530 * Configures the output driver mode for a GPIO output, to
mbed_official 579:53297373a894 531 * control the pad behavior.
mbed_official 579:53297373a894 532 *
mbed_official 579:53297373a894 533 * \param[in] gpio_pin Index of the GPIO pin to configure
mbed_official 579:53297373a894 534 * \param[in] mode New pad output driver mode to configure
mbed_official 579:53297373a894 535 */
mbed_official 579:53297373a894 536 static inline void system_pinmux_pin_set_output_drive(
mbed_official 579:53297373a894 537 const uint8_t gpio_pin,
mbed_official 579:53297373a894 538 const enum system_pinmux_pin_drive mode)
mbed_official 579:53297373a894 539 {
mbed_official 579:53297373a894 540 PortGroup* const port = system_pinmux_get_group_from_gpio_pin(gpio_pin);
mbed_official 579:53297373a894 541 uint32_t pin_index = (gpio_pin % 32);
mbed_official 579:53297373a894 542
mbed_official 579:53297373a894 543 if (mode == SYSTEM_PINMUX_PIN_DRIVE_OPEN_DRAIN) {
mbed_official 579:53297373a894 544 port->PINCFG[pin_index].reg |= PORT_PINCFG_ODRAIN;
mbed_official 579:53297373a894 545 } else {
mbed_official 579:53297373a894 546 port->PINCFG[pin_index].reg &= ~PORT_PINCFG_ODRAIN;
mbed_official 579:53297373a894 547 }
mbed_official 579:53297373a894 548 }
mbed_official 579:53297373a894 549
mbed_official 579:53297373a894 550 void system_pinmux_group_set_output_drive(
mbed_official 579:53297373a894 551 PortGroup *const port,
mbed_official 579:53297373a894 552 const uint32_t mask,
mbed_official 579:53297373a894 553 const enum system_pinmux_pin_drive mode);
mbed_official 579:53297373a894 554 #endif
mbed_official 579:53297373a894 555
mbed_official 579:53297373a894 556 #ifdef __cplusplus
mbed_official 579:53297373a894 557 }
mbed_official 579:53297373a894 558 #endif
mbed_official 579:53297373a894 559
mbed_official 579:53297373a894 560 /** @} */
mbed_official 579:53297373a894 561
mbed_official 579:53297373a894 562 /**
mbed_official 579:53297373a894 563 * \page asfdoc_sam0_system_pinmux_extra Extra Information for SYSTEM PINMUX Driver
mbed_official 579:53297373a894 564 *
mbed_official 579:53297373a894 565 * \section asfdoc_sam0_system_pinmux_extra_acronyms Acronyms
mbed_official 579:53297373a894 566 * The table below presents the acronyms used in this module:
mbed_official 579:53297373a894 567 *
mbed_official 579:53297373a894 568 * <table>
mbed_official 579:53297373a894 569 * <tr>
mbed_official 579:53297373a894 570 * <th>Acronym</th>
mbed_official 579:53297373a894 571 * <th>Description</th>
mbed_official 579:53297373a894 572 * </tr>
mbed_official 579:53297373a894 573 * <tr>
mbed_official 579:53297373a894 574 * <td>GPIO</td>
mbed_official 579:53297373a894 575 * <td>General Purpose Input/Output</td>
mbed_official 579:53297373a894 576 * </tr>
mbed_official 579:53297373a894 577 * <tr>
mbed_official 579:53297373a894 578 * <td>MUX</td>
mbed_official 579:53297373a894 579 * <td>Multiplexer</td>
mbed_official 579:53297373a894 580 * </tr>
mbed_official 579:53297373a894 581 * </table>
mbed_official 579:53297373a894 582 *
mbed_official 579:53297373a894 583 *
mbed_official 579:53297373a894 584 * \section asfdoc_sam0_system_pinmux_extra_dependencies Dependencies
mbed_official 579:53297373a894 585 * This driver has the following dependencies:
mbed_official 579:53297373a894 586 *
mbed_official 579:53297373a894 587 * - None
mbed_official 579:53297373a894 588 *
mbed_official 579:53297373a894 589 *
mbed_official 579:53297373a894 590 * \section asfdoc_sam0_system_pinmux_extra_errata Errata
mbed_official 579:53297373a894 591 * There are no errata related to this driver.
mbed_official 579:53297373a894 592 *
mbed_official 579:53297373a894 593 *
mbed_official 579:53297373a894 594 * \section asfdoc_sam0_system_pinmux_extra_history Module History
mbed_official 579:53297373a894 595 * An overview of the module history is presented in the table below, with
mbed_official 579:53297373a894 596 * details on the enhancements and fixes made to the module since its first
mbed_official 579:53297373a894 597 * release. The current version of this corresponds to the newest version in
mbed_official 579:53297373a894 598 * the table.
mbed_official 579:53297373a894 599 *
mbed_official 579:53297373a894 600 * <table>
mbed_official 579:53297373a894 601 * <tr>
mbed_official 579:53297373a894 602 * <th>Changelog</th>
mbed_official 579:53297373a894 603 * </tr>
mbed_official 579:53297373a894 604 * <tr>
mbed_official 579:53297373a894 605 * <td>Add SAML21 support.</td>
mbed_official 579:53297373a894 606 * </tr>
mbed_official 579:53297373a894 607 * <tr>
mbed_official 579:53297373a894 608 * <td>Removed code of open drain, slew limit and drive strength
mbed_official 579:53297373a894 609 * features</td>
mbed_official 579:53297373a894 610 * </tr>
mbed_official 579:53297373a894 611 * <tr>
mbed_official 579:53297373a894 612 * <td>Fixed broken sampling mode function implementations, which wrote
mbed_official 579:53297373a894 613 * corrupt configuration values to the device registers</td>
mbed_official 579:53297373a894 614 * </tr>
mbed_official 579:53297373a894 615 * <tr>
mbed_official 579:53297373a894 616 * <td>Added missing NULL pointer asserts to the PORT driver functions</td>
mbed_official 579:53297373a894 617 * </tr>
mbed_official 579:53297373a894 618 * <tr>
mbed_official 579:53297373a894 619 * <td>Initial Release</td>
mbed_official 579:53297373a894 620 * </tr>
mbed_official 579:53297373a894 621 * </table>
mbed_official 579:53297373a894 622 */
mbed_official 579:53297373a894 623
mbed_official 579:53297373a894 624 /**
mbed_official 579:53297373a894 625 * \page asfdoc_sam0_system_pinmux_exqsg Examples for SYSTEM PINMUX Driver
mbed_official 579:53297373a894 626 *
mbed_official 579:53297373a894 627 * This is a list of the available Quick Start guides (QSGs) and example
mbed_official 579:53297373a894 628 * applications for \ref asfdoc_sam0_system_pinmux_group. QSGs are simple
mbed_official 579:53297373a894 629 * examples with step-by-step instructions to configure and use this driver in a
mbed_official 579:53297373a894 630 * selection of use cases. Note that QSGs can be compiled as a standalone
mbed_official 579:53297373a894 631 * application or be added to the user application.
mbed_official 579:53297373a894 632 *
mbed_official 579:53297373a894 633 * - \subpage asfdoc_sam0_system_pinmux_basic_use_case
mbed_official 579:53297373a894 634 *
mbed_official 579:53297373a894 635 * \page asfdoc_sam0_system_pinmux_document_revision_history Document Revision History
mbed_official 579:53297373a894 636 *
mbed_official 579:53297373a894 637 * <table>
mbed_official 579:53297373a894 638 * <tr>
mbed_official 579:53297373a894 639 * <th>Doc. Rev.</td>
mbed_official 579:53297373a894 640 * <th>Date</td>
mbed_official 579:53297373a894 641 * <th>Comments</td>
mbed_official 579:53297373a894 642 * </tr>
mbed_official 579:53297373a894 643 * <tr>
mbed_official 579:53297373a894 644 * <td>F</td>
mbed_official 579:53297373a894 645 * <td>11/2014</td>
mbed_official 579:53297373a894 646 * <td>Add support for SAML21.</td>
mbed_official 579:53297373a894 647 * </tr>
mbed_official 579:53297373a894 648 * <tr>
mbed_official 579:53297373a894 649 * <td>E</td>
mbed_official 579:53297373a894 650 * <td>12/2014</td>
mbed_official 579:53297373a894 651 * <td>Add support for SAMR21 and SAMD10/D11</td>
mbed_official 579:53297373a894 652 * </tr>
mbed_official 579:53297373a894 653 * <tr>
mbed_official 579:53297373a894 654 * <td>D</td>
mbed_official 579:53297373a894 655 * <td>01/2014</td>
mbed_official 579:53297373a894 656 * <td>Add support for SAMD21</td>
mbed_official 579:53297373a894 657 * </tr>
mbed_official 579:53297373a894 658 * <tr>
mbed_official 579:53297373a894 659 * <td>C</td>
mbed_official 579:53297373a894 660 * <td>09/2013</td>
mbed_official 579:53297373a894 661 * <td>Fixed incorrect documentation for the device pin sampling mode.</td>
mbed_official 579:53297373a894 662 * </tr>
mbed_official 579:53297373a894 663 * <tr>
mbed_official 579:53297373a894 664 * <td>B</td>
mbed_official 579:53297373a894 665 * <td>06/2013</td>
mbed_official 579:53297373a894 666 * <td>Corrected documentation typos.</td>
mbed_official 579:53297373a894 667 * </tr>
mbed_official 579:53297373a894 668 * <tr>
mbed_official 579:53297373a894 669 * <td>A</td>
mbed_official 579:53297373a894 670 * <td>06/2013</td>
mbed_official 579:53297373a894 671 * <td>Initial release</td>
mbed_official 579:53297373a894 672 * </tr>
mbed_official 579:53297373a894 673 * </table>
mbed_official 579:53297373a894 674 */
mbed_official 579:53297373a894 675
mbed_official 579:53297373a894 676 #endif