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 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