Starting point for the SAMD20 demo.
diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/common/boards/board.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/common/boards/board.h
new file mode 100644
index 0000000..c355c03
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/common/boards/board.h
@@ -0,0 +1,347 @@
+/**

+ * \file

+ *

+ * \brief Standard board header file.

+ *

+ * This file includes the appropriate board header file according to the

+ * defined board (parameter BOARD).

+ *

+ * Copyright (c) 2009-2013 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

+ *

+ */

+

+#ifndef _BOARD_H_

+#define _BOARD_H_

+

+/**

+ * \defgroup group_common_boards Generic board support

+ *

+ * The generic board support module includes board-specific definitions

+ * and function prototypes, such as the board initialization function.

+ *

+ * \{

+ */

+

+#include "compiler.h"

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+

+/*! \name Base Boards

+ */

+//! @{

+#define EVK1100                     1  //!< AT32UC3A EVK1100 board.

+#define EVK1101                     2  //!< AT32UC3B EVK1101 board.

+#define UC3C_EK                     3  //!< AT32UC3C UC3C_EK board.

+#define EVK1104                     4  //!< AT32UC3A3 EVK1104 board.

+#define EVK1105                     5  //!< AT32UC3A EVK1105 board.

+#define STK600_RCUC3L0              6  //!< STK600 RCUC3L0 board.

+#define UC3L_EK                     7  //!< AT32UC3L-EK board.

+#define XPLAIN                      8  //!< ATxmega128A1 Xplain board.

+#define STK600_RC064X              10  //!< ATxmega256A3 STK600 board.

+#define STK600_RC100X              11  //!< ATxmega128A1 STK600 board.

+#define UC3_A3_XPLAINED            13  //!< ATUC3A3 UC3-A3 Xplained board.

+#define UC3_L0_XPLAINED            15  //!< ATUC3L0 UC3-L0 Xplained board.

+#define STK600_RCUC3D              16  //!< STK600 RCUC3D board.

+#define STK600_RCUC3C0             17  //!< STK600 RCUC3C board.

+#define XMEGA_B1_XPLAINED          18  //!< ATxmega128B1 Xplained board.

+#define XMEGA_A1_XPLAINED          19  //!< ATxmega128A1 Xplain-A1 board.

+#define STK600_RCUC3L4             21  //!< ATUCL4 STK600 board

+#define UC3_L0_XPLAINED_BC         22  //!< ATUC3L0 UC3-L0 Xplained board controller board

+#define MEGA1284P_XPLAINED_BC      23  //!< ATmega1284P-Xplained board controller board

+#define STK600_RC044X              24  //!< STK600 with RC044X routing card board.

+#define STK600_RCUC3B0             25  //!< STK600 RCUC3B0 board.

+#define UC3_L0_QT600               26  //!< QT600 UC3L0 MCU board.

+#define XMEGA_A3BU_XPLAINED        27  //!< ATxmega256A3BU Xplained board.

+#define STK600_RC064X_LCDX         28  //!< XMEGAB3 STK600 RC064X LCDX board.

+#define STK600_RC100X_LCDX         29  //!< XMEGAB1 STK600 RC100X LCDX board.

+#define UC3B_BOARD_CONTROLLER      30  //!< AT32UC3B1 board controller for Atmel boards

+#define RZ600                      31  //!< AT32UC3A RZ600 MCU board

+#define SAM3S_EK                   32  //!< SAM3S-EK board.

+#define SAM3U_EK                   33  //!< SAM3U-EK board.

+#define SAM3X_EK                   34  //!< SAM3X-EK board.

+#define SAM3N_EK                   35  //!< SAM3N-EK board.

+#define SAM3S_EK2                  36  //!< SAM3S-EK2 board.

+#define SAM4S_EK                   37  //!< SAM4S-EK board.

+#define STK600_RCUC3A0             38  //!< STK600 RCUC3A0 board.

+#define STK600_MEGA                39  //!< STK600 MEGA board.

+#define MEGA_1284P_XPLAINED        40  //!< ATmega1284P Xplained board.

+#define SAM4S_XPLAINED             41  //!< SAM4S Xplained board.

+#define ATXMEGA128A1_QT600         42  //!< QT600 ATXMEGA128A1 MCU board.

+#define ARDUINO_DUE_X              43  //!< Arduino Due/X board.

+#define STK600_RCUC3L3             44  //!< ATUCL3 STK600 board

+#define SAM4L_EK                   45  //!< SAM4L-EK board.

+#define STK600_MEGA_RF             46  //!< STK600 MEGA RF EVK board.

+#define XMEGA_C3_XPLAINED          47  //!< ATxmega384C3 Xplained board.

+#define STK600_RC032X              48  //!< STK600 with RC032X routing card board.

+#define SAM4S_EK2                  49  //!< SAM4S-EK2 board.

+#define XMEGA_E5_XPLAINED          50  //!< ATxmega32E5 Xplained board.

+#define SAM4E_EK                   51  //!< SAM4E-EK board.

+#define ATMEGA256RFR2_XPLAINED_PRO 52  //!< ATmega256RFR2 Xplained Pro board.

+#define SAM4S_XPLAINED_PRO         53  //!< SAM4S Xplained Pro board.

+#define SAM4L_XPLAINED_PRO         54  //!< SAM4L Xplained Pro board.

+#define ATMEGA256RFR2_ZIGBIT       55  //!< ATmega256RFR2 zigbit

+#define XMEGA_RF233_ZIGBIT         56  //!< ATxmega256A3U with AT86RF233 zigbit

+#define XMEGA_RF212B_ZIGBIT        57  //!< ATxmega256A3U with AT86RF212B zigbit

+#define SAM4S_WPIR_RD              58  //!< SAM4S-WPIR-RD board.

+#define SAMD20_XPLAINED_PRO        59  //!< SAMD20 Xplained PRO board

+#define SAM4L8_XPLAINED_PRO        60  //!< SAM4L8 Xplained Pro board.

+#define SAM4N_XPLAINED_PRO         61  //!< SAM4N-XPLAINED-PRO board.

+#define XMEGA_A3_REB_CBB           62  //!< SAM4L8 Xplained Pro board.

+#define ATMEGARFX_RCB          	   63  //!< RFR2 & RFA1 RCB

+#define SIMULATOR_XMEGA_A1         97  //!< Simulator for XMEGA A1 devices

+#define AVR_SIMULATOR_UC3          98  //!< AVR SIMULATOR for AVR UC3 device family.

+#define USER_BOARD                 99  //!< User-reserved board (if any).

+#define DUMMY_BOARD               100  //!< Dummy board to support board-independent applications (e.g. bootloader)

+//! @}

+

+/*! \name Extension Boards

+ */

+//! @{

+#define EXT1102                      1  //!< AT32UC3B EXT1102 board

+#define MC300                        2  //!< AT32UC3 MC300 board

+#define SENSORS_XPLAINED_INERTIAL_1  3  //!< Xplained inertial sensor board 1

+#define SENSORS_XPLAINED_INERTIAL_2  4  //!< Xplained inertial sensor board 2

+#define SENSORS_XPLAINED_PRESSURE_1  5  //!< Xplained pressure sensor board

+#define SENSORS_XPLAINED_LIGHTPROX_1 6  //!< Xplained light & proximity sensor board

+#define SENSORS_XPLAINED_INERTIAL_A1 7  //!< Xplained inertial sensor board "A"

+#define RZ600_AT86RF231              8  //!< AT86RF231 RF board in RZ600

+#define RZ600_AT86RF230B             9  //!< AT86RF230B RF board in RZ600

+#define RZ600_AT86RF212             10  //!< AT86RF212 RF board in RZ600

+#define SENSORS_XPLAINED_BREADBOARD 11  //!< Xplained sensor development breadboard

+#define SECURITY_XPLAINED           12  //!< Xplained ATSHA204 board

+#define USER_EXT_BOARD              99  //!< User-reserved extension board (if any).

+//! @}

+

+#if BOARD == EVK1100

+#  include "evk1100/evk1100.h"

+#elif BOARD == EVK1101

+#  include "evk1101/evk1101.h"

+#elif BOARD == UC3C_EK

+#  include "uc3c_ek/uc3c_ek.h"

+#elif BOARD == EVK1104

+#  include "evk1104/evk1104.h"

+#elif BOARD == EVK1105

+#  include "evk1105/evk1105.h"

+#elif BOARD == STK600_RCUC3L0

+#  include "stk600/rcuc3l0/stk600_rcuc3l0.h"

+#elif BOARD == UC3L_EK

+#  include "uc3l_ek/uc3l_ek.h"

+#elif BOARD == STK600_RCUC3L4

+#  include "stk600/rcuc3l4/stk600_rcuc3l4.h"

+#elif BOARD == XPLAIN

+#  include "xplain/xplain.h"

+#elif BOARD == STK600_MEGA

+  /*No header-file to include*/

+#elif BOARD == STK600_MEGA_RF

+#  include "stk600.h"

+#elif BOARD == ATMEGA256RFR2_XPLAINED_PRO

+#  include "atmega256rfr2_xplained_pro/atmega256rfr2_xplained_pro.h"

+#elif BOARD == ATMEGA256RFR2_ZIGBIT

+#  include "atmega256rfr2_zigbit/atmega256rfr2_zigbit.h"

+#elif BOARD == STK600_RC032X

+#  include "stk600/rc032x/stk600_rc032x.h"

+#elif BOARD == STK600_RC044X

+#  include "stk600/rc044x/stk600_rc044x.h"

+#elif BOARD == STK600_RC064X

+#  include "stk600/rc064x/stk600_rc064x.h"

+#elif BOARD == STK600_RC100X

+#  include "stk600/rc100x/stk600_rc100x.h"

+#elif BOARD == UC3_A3_XPLAINED

+#  include "uc3_a3_xplained/uc3_a3_xplained.h"

+#elif BOARD == UC3_L0_XPLAINED

+#  include "uc3_l0_xplained/uc3_l0_xplained.h"

+#elif BOARD == STK600_RCUC3B0

+#  include "stk600/rcuc3b0/stk600_rcuc3b0.h"

+#elif BOARD == STK600_RCUC3D

+#  include "stk600/rcuc3d/stk600_rcuc3d.h"

+#elif BOARD == STK600_RCUC3C0

+#  include "stk600/rcuc3c0/stk600_rcuc3c0.h"

+#elif BOARD == XMEGA_B1_XPLAINED

+#  include "xmega_b1_xplained/xmega_b1_xplained.h"

+#elif BOARD == STK600_RC064X_LCDX

+#  include "stk600/rc064x_lcdx/stk600_rc064x_lcdx.h"

+#elif BOARD == STK600_RC100X_LCDX

+#  include "stk600/rc100x_lcdx/stk600_rc100x_lcdx.h"

+#elif BOARD == XMEGA_A1_XPLAINED

+#  include "xmega_a1_xplained/xmega_a1_xplained.h"

+#elif BOARD == UC3_L0_XPLAINED_BC

+#  include "uc3_l0_xplained_bc/uc3_l0_xplained_bc.h"

+#elif BOARD == SAM3S_EK

+#  include "sam3s_ek/sam3s_ek.h"

+#  include "system_sam3s.h"

+#elif BOARD == SAM3S_EK2

+#  include "sam3s_ek2/sam3s_ek2.h"

+#  include "system_sam3sd8.h"

+#elif BOARD == SAM3U_EK

+#  include "sam3u_ek/sam3u_ek.h"

+#  include "system_sam3u.h"

+#elif BOARD == SAM3X_EK

+#  include "sam3x_ek/sam3x_ek.h"

+#  include "system_sam3x.h"

+#elif BOARD == SAM3N_EK

+#  include "sam3n_ek/sam3n_ek.h"

+#  include "system_sam3n.h"

+#elif BOARD == SAM4S_EK

+#  include "sam4s_ek/sam4s_ek.h"

+#  include "system_sam4s.h"

+#elif BOARD == SAM4S_WPIR_RD

+#  include "sam4s_wpir_rd/sam4s_wpir_rd.h"

+#  include "system_sam4s.h"

+#elif BOARD == SAM4S_XPLAINED

+#  include "sam4s_xplained/sam4s_xplained.h"

+#  include "system_sam4s.h"

+#elif BOARD == SAM4S_EK2

+#  include "sam4s_ek2/sam4s_ek2.h"

+#  include "system_sam4s.h"

+#elif BOARD == MEGA_1284P_XPLAINED

+  /*No header-file to include*/

+#elif BOARD == ARDUINO_DUE_X

+#  include "arduino_due_x/arduino_due_x.h"

+#  include "system_sam3x.h"

+#elif BOARD == SAM4L_EK

+#  include "sam4l_ek/sam4l_ek.h"

+#elif BOARD == SAM4E_EK

+#  include "sam4e_ek/sam4e_ek.h"

+#elif BOARD == SAMD20_XPLAINED_PRO

+#  include "samd20_xplained_pro/samd20_xplained_pro.h"

+#elif BOARD == SAM4N_XPLAINED_PRO

+#  include "sam4n_xplained_pro/sam4n_xplained_pro.h"

+#elif BOARD == MEGA1284P_XPLAINED_BC

+#  include "mega1284p_xplained_bc/mega1284p_xplained_bc.h"

+#elif BOARD == UC3_L0_QT600

+#  include "uc3_l0_qt600/uc3_l0_qt600.h"

+#elif BOARD == XMEGA_A3BU_XPLAINED

+#  include "xmega_a3bu_xplained/xmega_a3bu_xplained.h"

+#elif BOARD == XMEGA_E5_XPLAINED

+#  include "xmega_e5_xplained/xmega_e5_xplained.h"

+#elif BOARD == UC3B_BOARD_CONTROLLER

+#  include "uc3b_board_controller/uc3b_board_controller.h"

+#elif BOARD == RZ600

+#  include "rz600/rz600.h"

+#elif BOARD == STK600_RCUC3A0

+#  include "stk600/rcuc3a0/stk600_rcuc3a0.h"

+#elif BOARD == ATXMEGA128A1_QT600

+#  include "atxmega128a1_qt600/atxmega128a1_qt600.h"

+#elif BOARD == STK600_RCUC3L3

+#  include "stk600/rcuc3l3/stk600_rcuc3l3.h"

+#elif BOARD == SAM4S_XPLAINED_PRO

+#  include "sam4s_xplained_pro/sam4s_xplained_pro.h"

+#elif BOARD == SAM4L_XPLAINED_PRO

+#  include "sam4l_xplained_pro/sam4l_xplained_pro.h"

+#elif BOARD == SAM4L8_XPLAINED_PRO

+#  include "sam4l8_xplained_pro/sam4l8_xplained_pro.h"

+#elif BOARD == SIMULATOR_XMEGA_A1

+#  include "simulator/xmega_a1/simulator_xmega_a1.h"

+#elif BOARD == XMEGA_C3_XPLAINED

+#  include "xmega_c3_xplained/xmega_c3_xplained.h"

+#elif BOARD == XMEGA_RF233_ZIGBIT

+#  include "xmega_rf233_zigbit/xmega_rf233_zigbit.h"

+#elif BOARD == XMEGA_A3_REB_CBB

+#  include "xmega_a3_reb_cbb/xmega_a3_reb_cbb.h"

+#elif BOARD == ATMEGARFX_RCB

+#  include "atmegarfx_rcb/atmegarfx_rcb.h"

+#elif BOARD == XMEGA_RF212B_ZIGBIT

+#  include "xmega_rf212b_zigbit/xmega_rf212b_zigbit.h"

+#elif BOARD == AVR_SIMULATOR_UC3

+#  include "avr_simulator_uc3/avr_simulator_uc3.h"

+#elif BOARD == USER_BOARD

+  // User-reserved area: #include the header file of your board here (if any).

+#  include "user_board.h"

+#elif BOARD == DUMMY_BOARD

+#  include "dummy/dummy_board.h"

+#else

+#  error No known Atmel board defined

+#endif

+

+#if (defined EXT_BOARD)

+#  if EXT_BOARD == MC300

+#    include "mc300/mc300.h"

+#  elif (EXT_BOARD == SENSORS_XPLAINED_INERTIAL_1)  || \

+        (EXT_BOARD == SENSORS_XPLAINED_INERTIAL_2)  || \

+        (EXT_BOARD == SENSORS_XPLAINED_INERTIAL_A1) || \

+        (EXT_BOARD == SENSORS_XPLAINED_PRESSURE_1)  || \

+        (EXT_BOARD == SENSORS_XPLAINED_LIGHTPROX_1) || \

+        (EXT_BOARD == SENSORS_XPLAINED_BREADBOARD)

+#    include "sensors_xplained/sensors_xplained.h"

+#  elif EXT_BOARD == RZ600_AT86RF231

+#     include "at86rf231/at86rf231.h"

+#  elif EXT_BOARD == RZ600_AT86RF230B

+#    include "at86rf230b/at86rf230b.h"

+#  elif EXT_BOARD == RZ600_AT86RF212

+#    include "at86rf212/at86rf212.h"

+#  elif EXT_BOARD == SECURITY_XPLAINED

+#    include "security_xplained.h"

+#  elif EXT_BOARD == USER_EXT_BOARD

+    // User-reserved area: #include the header file of your extension board here

+    // (if any).

+#  endif

+#endif

+

+

+#if (defined(__GNUC__) && defined(__AVR32__)) || (defined(__ICCAVR32__) || defined(__AAVR32__))

+#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling.

+

+/*! \brief This function initializes the board target resources

+ *

+ * This function should be called to ensure proper initialization of the target

+ * board hardware connected to the part.

+ */

+extern void board_init(void);

+

+#endif  // #ifdef __AVR32_ABI_COMPILER__

+#else

+/*! \brief This function initializes the board target resources

+ *

+ * This function should be called to ensure proper initialization of the target

+ * board hardware connected to the part.

+ */

+extern void board_init(void);

+#endif

+

+

+#ifdef __cplusplus

+}

+#endif

+

+/**

+ * \}

+ */

+

+#endif  // _BOARD_H_

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/common/services/serial/sam0_usart/usart_serial.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/common/services/serial/sam0_usart/usart_serial.h
new file mode 100644
index 0000000..7882828
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/common/services/serial/sam0_usart/usart_serial.h
@@ -0,0 +1,138 @@
+/**

+ * \file

+ *

+ * \brief USART Serial wrapper service for the SAM D20 devices.

+ *

+ * Copyright (c) 2009-2013 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

+ *

+ */

+#ifndef _USART_SERIAL_H_

+#define _USART_SERIAL_H_

+

+#include "compiler.h"

+#ifndef SAMD20

+# include "sysclk.h"

+#endif

+#include "status_codes.h"

+#include "usart.h"

+

+/*! \name Serial Management Configuration

+ */

+//! @{

+//#include "conf_usart_serial.h"

+//! @}

+

+typedef Sercom * usart_inst_t;

+

+struct usart_module usart;

+

+/*! \brief Initializes the Usart in master mode.

+ *

+ * \param usart       Base address of the USART instance.

+ * \param options     Options needed to set up RS232 communication (see \ref usart_serial_options_t).

+ *

+ * \retval true if the initialization was successful

+ * \retval false if initialization failed (error in baud rate calculation)

+ */

+static inline bool usart_serial_init(struct usart_module *const module,

+		usart_inst_t const hw, const struct usart_config *const config)

+{

+	if (usart_init(module, hw, config) == STATUS_OK) {

+		return true;

+	}

+	else {

+		return false;

+	}

+}

+

+/*! \brief Sends a character with the USART.

+ *

+ * \param usart   Base address of the USART instance.

+ * \param c       Character to write.

+ *

+ * \return Status code

+ */

+static inline enum status_code usart_serial_putchar(struct usart_module *const module,

+		uint8_t c)

+{

+	return usart_write_wait(module, c);

+}

+/*! \brief Waits until a character is received, and returns it.

+ *

+ * \param usart   Base address of the USART instance.

+ * \param data   Data to read

+ *

+ */

+static inline void usart_serial_getchar(struct usart_module *const module,

+		uint8_t *c)

+{

+	uint16_t temp;

+

+	usart_read_wait(module, &temp);

+

+	*c = temp;

+}

+

+/**

+ * \brief Send a sequence of bytes to USART device

+ *

+ * \param usart  Base address of the USART instance.

+ * \param data   Data buffer to read

+ * \param len    Length of data

+ *

+ */

+static inline enum status_code usart_serial_write_packet(struct usart_module *const module,

+		const uint8_t *tx_data, uint16_t length)

+{

+	return usart_write_buffer_wait(module, tx_data, length);

+}

+

+/**

+ * \brief Receive a sequence of bytes from USART device

+ *

+ * \param usart  Base address of the USART instance.

+ * \param data   Data buffer to write

+ * \param len    Length of data

+ *

+ */

+static inline enum status_code usart_serial_read_packet(struct usart_module *const module,

+		uint8_t *rx_data, uint16_t length)

+{

+	return usart_read_buffer_wait(module, rx_data, length);

+}

+

+#endif  // _USART_SERIAL_H_

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/common/services/serial/serial.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/common/services/serial/serial.h
new file mode 100644
index 0000000..959a0d6
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/common/services/serial/serial.h
@@ -0,0 +1,266 @@
+/**

+ * \file

+ *

+ * \brief Serial Mode management

+ *

+ * Copyright (c) 2010 - 2013 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

+ *

+ */

+#ifndef SERIAL_H_INCLUDED

+#define SERIAL_H_INCLUDED

+

+#include <parts.h>

+#include "status_codes.h"

+

+/**

+ * \typedef usart_if

+ *

+ * This type can be used independently to refer to USART module for the

+ * architecture used. It refers to the correct type definition for the

+ * architecture, ie. USART_t* for XMEGA or avr32_usart_t* for UC3.

+ */

+

+#if XMEGA

+# include "xmega_usart/usart_serial.h"

+#elif MEGA_RF

+# include "megarf_usart/usart_serial.h"

+#elif UC3

+# include "uc3_usart/usart_serial.h"

+#elif SAMD20

+#include "sam0_usart/usart_serial.h"

+#elif SAM

+# include "sam_uart/uart_serial.h"

+#else

+# error Unsupported chip type

+#endif

+

+/**

+ *

+ * \defgroup serial_group Serial Interface (Serial)

+ *

+ * See \ref serial_quickstart.

+ *

+ * This is the common API for serial interface. Additional features are available

+ * in the documentation of the specific modules.

+ *

+ * \section serial_group_platform Platform Dependencies

+ *

+ * The serial API is partially chip- or platform-specific. While all

+ * platforms provide mostly the same functionality, there are some

+ * variations around how different bus types and clock tree structures

+ * are handled.

+ *

+ * The following functions are available on all platforms, but there may

+ * be variations in the function signature (i.e. parameters) and

+ * behaviour. These functions are typically called by platform-specific

+ * parts of drivers, and applications that aren't intended to be

+ * portable:

+ *   - usart_serial_init()

+ *   - usart_serial_putchar()

+ *   - usart_serial_getchar()

+ *   - usart_serial_write_packet()

+ *   - usart_serial_read_packet()

+ *

+ *

+ * @{

+ */

+ 

+//! @}

+

+/**

+ * \page serial_quickstart Quick start guide for Serial Interface service

+ *

+ * This is the quick start guide for the \ref serial_group "Serial Interface module", with

+ * step-by-step instructions on how to configure and use the serial in a

+ * selection of use cases.

+ *

+ * The use cases contain several code fragments. The code fragments in the

+ * steps for setup can be copied into a custom initialization function, while

+ * the steps for usage can be copied into, e.g., the main application function.

+ *

+ * \section serial_use_cases Serial use cases

+ * - \ref serial_basic_use_case

+ * - \subpage serial_use_case_1

+ *

+ * \section serial_basic_use_case Basic use case - transmit a character

+ * In this use case, the serial module is configured for:

+ * - Using USARTD0

+ * - Baudrate: 9600

+ * - Character length: 8 bit

+ * - Parity mode: Disabled

+ * - Stop bit: None

+ * - RS232 mode

+ *

+ * The use case waits for a received character on the configured USART and

+ * echoes the character back to the same USART.

+ *

+ * \section serial_basic_use_case_setup Setup steps

+ *

+ * \subsection serial_basic_use_case_setup_prereq Prerequisites

+ * -# \ref sysclk_group "System Clock Management (sysclk)"

+ *

+ * \subsection serial_basic_use_case_setup_code Example code

+ * The following configuration must be added to the project (typically to a 

+ * conf_serial.h file, but it can also be added to your main application file.)

+ * \code

+ *    #define USART_SERIAL                     &USARTD0

+ *    #define USART_SERIAL_BAUDRATE            9600

+ *    #define USART_SERIAL_CHAR_LENGTH         USART_CHSIZE_8BIT_gc

+ *    #define USART_SERIAL_PARITY              USART_PMODE_DISABLED_gc

+ *    #define USART_SERIAL_STOP_BIT            false

+ * \endcode

+ *

+ * A variable for the received byte must be added:

+ * \code uint8_t received_byte; \endcode

+ *

+ * Add to application initialization:

+ * \code

+ *    sysclk_init();

+ *

+ *    static usart_serial_options_t usart_options = {

+ *       .baudrate = USART_SERIAL_BAUDRATE,

+ *       .charlength = USART_SERIAL_CHAR_LENGTH,

+ *       .paritytype = USART_SERIAL_PARITY,

+ *       .stopbits = USART_SERIAL_STOP_BIT

+ *    };

+ *

+ *    usart_serial_init(USART_SERIAL, &usart_options);

+ * \endcode

+ *

+ * \subsection serial_basic_use_case_setup_flow Workflow

+ * -# Initialize system clock:

+ *   - \code sysclk_init(); \endcode

+ * -# Create serial USART options struct:

+ *   - \code

+ *        static usart_serial_options_t usart_options = {

+ *           .baudrate = USART_SERIAL_BAUDRATE,

+ *           .charlength = USART_SERIAL_CHAR_LENGTH,

+ *           .paritytype = USART_SERIAL_PARITY,

+ *           .stopbits = USART_SERIAL_STOP_BIT

+ *        };

+ *     \endcode

+ * -# Initialize the serial service:

+ *   - \code usart_serial_init(USART_SERIAL, &usart_options);\endcode

+ *

+ * \section serial_basic_use_case_usage Usage steps

+ *

+ * \subsection serial_basic_use_case_usage_code Example code

+ * Add to application C-file:

+ * \code

+ *    usart_serial_getchar(USART_SERIAL, &received_byte);

+ *    usart_serial_putchar(USART_SERIAL, received_byte);

+ * \endcode

+ *

+ * \subsection serial_basic_use_case_usage_flow Workflow

+ * -# Wait for reception of a character:

+ *   - \code usart_serial_getchar(USART_SERIAL, &received_byte); \endcode

+ * -# Echo the character back:

+ *   - \code usart_serial_putchar(USART_SERIAL, received_byte); \endcode

+ */

+

+/**

+ * \page serial_use_case_1 Advanced use case - Send a packet of serial data

+ *

+ * In this use case, the USART module is configured for:

+ * - Using USARTD0

+ * - Baudrate: 9600

+ * - Character length: 8 bit

+ * - Parity mode: Disabled

+ * - Stop bit: None

+ * - RS232 mode

+ *

+ * The use case sends a string of text through the USART.

+ *

+ * \section serial_use_case_1_setup Setup steps

+ *

+ * \subsection serial_use_case_1_setup_prereq Prerequisites

+ * -# \ref sysclk_group "System Clock Management (sysclk)"

+ *

+ * \subsection serial_use_case_1_setup_code Example code

+ * The following configuration must be added to the project (typically to a 

+ * conf_serial.h file, but it can also be added to your main application file.):

+ * \code

+ *    #define USART_SERIAL                     &USARTD0

+ *    #define USART_SERIAL_BAUDRATE            9600

+ *    #define USART_SERIAL_CHAR_LENGTH         USART_CHSIZE_8BIT_gc

+ *    #define USART_SERIAL_PARITY              USART_PMODE_DISABLED_gc

+ *    #define USART_SERIAL_STOP_BIT            false

+ * \endcode

+ *

+ * Add to application initialization:

+ * \code

+ *    sysclk_init();

+ *

+ *    static usart_serial_options_t usart_options = {

+ *       .baudrate = USART_SERIAL_BAUDRATE,

+ *       .charlength = USART_SERIAL_CHAR_LENGTH,

+ *       .paritytype = USART_SERIAL_PARITY,

+ *       .stopbits = USART_SERIAL_STOP_BIT

+ *    };

+ *

+ *    usart_serial_init(USART_SERIAL, &usart_options);

+ * \endcode

+ *

+ * \subsection serial_use_case_1_setup_flow Workflow

+ * -# Initialize system clock:

+ *   - \code sysclk_init(); \endcode

+ * -# Create USART options struct:

+ *   - \code

+ *        static usart_serial_options_t usart_options = {

+ *           .baudrate = USART_SERIAL_BAUDRATE,

+ *           .charlength = USART_SERIAL_CHAR_LENGTH,

+ *           .paritytype = USART_SERIAL_PARITY,

+ *           .stopbits = USART_SERIAL_STOP_BIT

+ *        };

+ *     \endcode

+ * -# Initialize in RS232 mode:

+ *   - \code usart_serial_init(USART_SERIAL_EXAMPLE, &usart_options); \endcode

+ *

+ * \section serial_use_case_1_usage Usage steps

+ *

+ * \subsection serial_use_case_1_usage_code Example code

+ * Add to, e.g., main loop in application C-file:

+ * \code

+ *       usart_serial_write_packet(USART_SERIAL, "Test String", strlen("Test String"));

+ * \endcode

+ *

+ * \subsection serial_use_case_1_usage_flow Workflow

+ * -# Write a string of text to the USART:

+ *   - \code usart_serial_write_packet(USART_SERIAL, "Test String", strlen("Test String")); \endcode

+ */

+

+#endif /* SERIAL_H_INCLUDED */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/common/utils/interrupt.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/common/utils/interrupt.h
new file mode 100644
index 0000000..6774879
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/common/utils/interrupt.h
@@ -0,0 +1,139 @@
+/**

+ * \file

+ *

+ * \brief Global interrupt management for 8- and 32-bit AVR

+ *

+ * Copyright (c) 2010-2012 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

+ *

+ */

+#ifndef UTILS_INTERRUPT_H

+#define UTILS_INTERRUPT_H

+

+#include <parts.h>

+

+#if XMEGA || MEGA || TINY

+#  include "interrupt/interrupt_avr8.h"

+#elif UC3

+#  include "interrupt/interrupt_avr32.h"

+#elif SAM3S || SAM3N || SAM3XA || SAM3U || SAM4S || SAM4L || SAM4E || SAMD20 || SAM

+#  include "interrupt/interrupt_sam_nvic.h"

+#else

+#  error Unsupported device.

+#endif

+

+/**

+ * \defgroup interrupt_group Global interrupt management

+ *

+ * This is a driver for global enabling and disabling of interrupts.

+ *

+ * @{

+ */

+

+#if defined(__DOXYGEN__)

+/**

+ * \def CONFIG_INTERRUPT_FORCE_INTC

+ * \brief Force usage of the ASF INTC driver

+ *

+ * Predefine this symbol when preprocessing to force the use of the ASF INTC driver.

+ * This is useful to ensure compatibility across compilers and shall be used only when required

+ * by the application needs.

+ */

+#  define CONFIG_INTERRUPT_FORCE_INTC

+#endif

+

+//! \name Global interrupt flags

+//@{

+/**

+ * \typedef irqflags_t

+ * \brief Type used for holding state of interrupt flag

+ */

+

+/**

+ * \def cpu_irq_enable

+ * \brief Enable interrupts globally

+ */

+

+/**

+ * \def cpu_irq_disable

+ * \brief Disable interrupts globally

+ */

+

+/**

+ * \fn irqflags_t cpu_irq_save(void)

+ * \brief Get and clear the global interrupt flags

+ *

+ * Use in conjunction with \ref cpu_irq_restore.

+ *

+ * \return Current state of interrupt flags.

+ *

+ * \note This function leaves interrupts disabled.

+ */

+

+/**

+ * \fn void cpu_irq_restore(irqflags_t flags)

+ * \brief Restore global interrupt flags

+ *

+ * Use in conjunction with \ref cpu_irq_save.

+ *

+ * \param flags State to set interrupt flag to.

+ */

+

+/**

+ * \fn bool cpu_irq_is_enabled_flags(irqflags_t flags)

+ * \brief Check if interrupts are globally enabled in supplied flags

+ *

+ * \param flags Currents state of interrupt flags.

+ *

+ * \return True if interrupts are enabled.

+ */

+

+/**

+ * \def cpu_irq_is_enabled

+ * \brief Check if interrupts are globally enabled

+ *

+ * \return True if interrupts are enabled.

+ */

+//@}

+

+//! @}

+

+/**

+ * \ingroup interrupt_group

+ * \defgroup interrupt_deprecated_group Deprecated interrupt definitions

+ */

+

+#endif /* UTILS_INTERRUPT_H */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/common/utils/interrupt/interrupt_sam_nvic.c b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/common/utils/interrupt/interrupt_sam_nvic.c
new file mode 100644
index 0000000..37dd083
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/common/utils/interrupt/interrupt_sam_nvic.c
@@ -0,0 +1,83 @@
+/**

+ * \file

+ *

+ * \brief Global interrupt management for SAM D20, SAM3 and SAM4 (NVIC based)

+ *

+ * Copyright (c) 2012-2013 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

+ *

+ */

+

+#include "interrupt_sam_nvic.h"

+

+#if !defined(__DOXYGEN__)

+/* Deprecated - global flag to determine the global interrupt state. Required by

+ * QTouch library, however new applications should use cpu_irq_is_enabled()

+ * which probes the true global interrupt state from the CPU special registers.

+ */

+volatile bool g_interrupt_enabled = true;

+#endif

+

+void cpu_irq_enter_critical(void)

+{

+	if (cpu_irq_critical_section_counter == 0) {

+		if (cpu_irq_is_enabled()) {

+			cpu_irq_disable();

+			cpu_irq_prev_interrupt_state = true;

+		} else {

+			/* Make sure the to save the prev state as false */

+			cpu_irq_prev_interrupt_state = false;

+		}

+

+	}

+

+	cpu_irq_critical_section_counter++;

+}

+

+void cpu_irq_leave_critical(void)

+{

+	/* Check if the user is trying to leave a critical section when not in a critical section */

+	Assert(cpu_irq_critical_section_counter > 0);

+

+	cpu_irq_critical_section_counter--;

+

+	/* Only enable global interrupts when the counter reaches 0 and the state of the global interrupt flag

+	   was enabled when entering critical state */

+	if ((cpu_irq_critical_section_counter == 0) && (cpu_irq_prev_interrupt_state)) {

+		cpu_irq_enable();

+	}

+}

+

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/common/utils/interrupt/interrupt_sam_nvic.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/common/utils/interrupt/interrupt_sam_nvic.h
new file mode 100644
index 0000000..8dbe15e
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/common/utils/interrupt/interrupt_sam_nvic.h
@@ -0,0 +1,178 @@
+/**

+ * \file

+ *

+ * \brief Global interrupt management for SAM D20, SAM3 and SAM4 (NVIC based)

+ *

+ * Copyright (c) 2012-2013 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

+ *

+ */

+

+#ifndef UTILS_INTERRUPT_INTERRUPT_H

+#define UTILS_INTERRUPT_INTERRUPT_H

+

+#include <compiler.h>

+#include <parts.h>

+

+/**

+ * \weakgroup interrupt_group

+ *

+ * @{

+ */

+

+/**

+ * \name Interrupt Service Routine definition

+ *

+ * @{

+ */

+

+/**

+ * \brief Define service routine

+ *

+ * \note For NVIC devices the interrupt service routines are predefined to

+ *       add to vector table in binary generation, so there is no service

+ *       register at run time. The routine collections are in exceptions.h.

+ *

+ * Usage:

+ * \code

+ * ISR(foo_irq_handler)

+ * {

+ *      // Function definition

+ *      ...

+ * }

+ * \endcode

+ *

+ * \param func Name for the function.

+ */

+#  define ISR(func)   \

+	void func (void)

+

+/**

+ * \brief Initialize interrupt vectors

+ *

+ * For NVIC the interrupt vectors are put in vector table. So nothing

+ * to do to initialize them, except defined the vector function with

+ * right name.

+ *

+ * This must be called prior to \ref irq_register_handler.

+ */

+#  define irq_initialize_vectors()   \

+	do {                             \

+	} while(0)

+

+/**

+ * \brief Register handler for interrupt

+ *

+ * For NVIC the interrupt vectors are put in vector table. So nothing

+ * to do to register them, except defined the vector function with

+ * right name.

+ *

+ * Usage:

+ * \code

+ * irq_initialize_vectors();

+ * irq_register_handler(foo_irq_handler);

+ * \endcode

+ *

+ * \note The function \a func must be defined with the \ref ISR macro.

+ * \note The functions prototypes can be found in the device exception header

+ *       files (exceptions.h).

+ */

+#  define irq_register_handler(int_num, int_prio)                      \

+	NVIC_ClearPendingIRQ(    (IRQn_Type)int_num);                      \

+	NVIC_SetPriority(    (IRQn_Type)int_num, int_prio);                \

+	NVIC_EnableIRQ(      (IRQn_Type)int_num);                          \

+

+//@}

+

+#  define cpu_irq_enable()                     \

+	do {                                       \

+		g_interrupt_enabled = true;            \

+		__DMB();                               \

+		__enable_irq();                        \

+	} while (0)

+#  define cpu_irq_disable()                    \

+	do {                                       \

+		__disable_irq();                       \

+		__DMB();                               \

+		g_interrupt_enabled = false;           \

+	} while (0)

+

+typedef uint32_t irqflags_t;

+

+#if !defined(__DOXYGEN__)

+extern volatile bool g_interrupt_enabled;

+#endif

+

+#define cpu_irq_is_enabled()    (__get_PRIMASK() == 0)

+

+static volatile uint32_t cpu_irq_critical_section_counter;

+static volatile bool     cpu_irq_prev_interrupt_state;

+

+static inline irqflags_t cpu_irq_save(void)

+{

+	irqflags_t flags = cpu_irq_is_enabled();

+	cpu_irq_disable();

+	return flags;

+}

+

+static inline bool cpu_irq_is_enabled_flags(irqflags_t flags)

+{

+	return (flags);

+}

+

+static inline void cpu_irq_restore(irqflags_t flags)

+{

+	if (cpu_irq_is_enabled_flags(flags))

+		cpu_irq_enable();

+}

+

+void cpu_irq_enter_critical(void);

+void cpu_irq_leave_critical(void);

+

+/**

+ * \weakgroup interrupt_deprecated_group

+ * @{

+ */

+

+#define Enable_global_interrupt()            cpu_irq_enable()

+#define Disable_global_interrupt()           cpu_irq_disable()

+#define Is_global_interrupt_enabled()        cpu_irq_is_enabled()

+

+//@}

+

+//@}

+

+#endif /* UTILS_INTERRUPT_INTERRUPT_H */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/common/utils/parts.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/common/utils/parts.h
new file mode 100644
index 0000000..4f063a5
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/common/utils/parts.h
@@ -0,0 +1,949 @@
+/**

+ * \file

+ *

+ * \brief Atmel part identification macros

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+

+#ifndef ATMEL_PARTS_H

+#define ATMEL_PARTS_H

+

+/**

+ * \defgroup part_macros_group Atmel part identification macros

+ *

+ * This collection of macros identify which series and families that the various

+ * Atmel parts belong to. These can be used to select part-dependent sections of

+ * code at compile time.

+ *

+ * @{

+ */

+

+/**

+ * \name Convenience macros for part checking

+ * @{

+ */

+/* ! Check GCC and IAR part definition for 8-bit AVR */

+#define AVR8_PART_IS_DEFINED(part) \

+	(defined(__ ## part ## __) || defined(__AVR_ ## part ## __))

+

+/* ! Check GCC and IAR part definition for 32-bit AVR */

+#define AVR32_PART_IS_DEFINED(part) \

+	(defined(__AT32 ## part ## __) || defined(__AVR32_ ## part ## __))

+

+/* ! Check GCC and IAR part definition for SAM */

+#define SAM_PART_IS_DEFINED(part) (defined(__ ## part ## __))

+/** @} */

+

+/**

+ * \defgroup uc3_part_macros_group AVR UC3 parts

+ * @{

+ */

+

+/**

+ * \name AVR UC3 A series

+ * @{

+ */

+#define UC3A0 (	\

+		AVR32_PART_IS_DEFINED(UC3A0128) || \

+		AVR32_PART_IS_DEFINED(UC3A0256) || \

+		AVR32_PART_IS_DEFINED(UC3A0512)	\

+		)

+

+#define UC3A1 (	\

+		AVR32_PART_IS_DEFINED(UC3A1128) || \

+		AVR32_PART_IS_DEFINED(UC3A1256) || \

+		AVR32_PART_IS_DEFINED(UC3A1512)	\

+		)

+

+#define UC3A3 (	\

+		AVR32_PART_IS_DEFINED(UC3A364)   || \

+		AVR32_PART_IS_DEFINED(UC3A364S)  || \

+		AVR32_PART_IS_DEFINED(UC3A3128)  || \

+		AVR32_PART_IS_DEFINED(UC3A3128S) || \

+		AVR32_PART_IS_DEFINED(UC3A3256)  || \

+		AVR32_PART_IS_DEFINED(UC3A3256S) \

+		)

+

+#define UC3A4 (	\

+		AVR32_PART_IS_DEFINED(UC3A464)   || \

+		AVR32_PART_IS_DEFINED(UC3A464S)  || \

+		AVR32_PART_IS_DEFINED(UC3A4128)  || \

+		AVR32_PART_IS_DEFINED(UC3A4128S) || \

+		AVR32_PART_IS_DEFINED(UC3A4256)  || \

+		AVR32_PART_IS_DEFINED(UC3A4256S) \

+		)

+/** @} */

+

+/**

+ * \name AVR UC3 B series

+ * @{

+ */

+#define UC3B0 (	\

+		AVR32_PART_IS_DEFINED(UC3B064)  || \

+		AVR32_PART_IS_DEFINED(UC3B0128) || \

+		AVR32_PART_IS_DEFINED(UC3B0256) || \

+		AVR32_PART_IS_DEFINED(UC3B0512)	\

+		)

+

+#define UC3B1 (	\

+		AVR32_PART_IS_DEFINED(UC3B164)  || \

+		AVR32_PART_IS_DEFINED(UC3B1128) || \

+		AVR32_PART_IS_DEFINED(UC3B1256) || \

+		AVR32_PART_IS_DEFINED(UC3B1512)	\

+		)

+/** @} */

+

+/**

+ * \name AVR UC3 C series

+ * @{

+ */

+#define UC3C0 (	\

+		AVR32_PART_IS_DEFINED(UC3C064C)  || \

+		AVR32_PART_IS_DEFINED(UC3C0128C) || \

+		AVR32_PART_IS_DEFINED(UC3C0256C) || \

+		AVR32_PART_IS_DEFINED(UC3C0512C) \

+		)

+

+#define UC3C1 (	\

+		AVR32_PART_IS_DEFINED(UC3C164C)  || \

+		AVR32_PART_IS_DEFINED(UC3C1128C) || \

+		AVR32_PART_IS_DEFINED(UC3C1256C) || \

+		AVR32_PART_IS_DEFINED(UC3C1512C) \

+		)

+

+#define UC3C2 (	\

+		AVR32_PART_IS_DEFINED(UC3C264C)  || \

+		AVR32_PART_IS_DEFINED(UC3C2128C) || \

+		AVR32_PART_IS_DEFINED(UC3C2256C) || \

+		AVR32_PART_IS_DEFINED(UC3C2512C) \

+		)

+/** @} */

+

+/**

+ * \name AVR UC3 D series

+ * @{

+ */

+#define UC3D3 (	\

+		AVR32_PART_IS_DEFINED(UC64D3)  || \

+		AVR32_PART_IS_DEFINED(UC128D3) \

+		)

+

+#define UC3D4 (	\

+		AVR32_PART_IS_DEFINED(UC64D4)  || \

+		AVR32_PART_IS_DEFINED(UC128D4) \

+		)

+/** @} */

+

+/**

+ * \name AVR UC3 L series

+ * @{

+ */

+#define UC3L0 (	\

+		AVR32_PART_IS_DEFINED(UC3L016) || \

+		AVR32_PART_IS_DEFINED(UC3L032) || \

+		AVR32_PART_IS_DEFINED(UC3L064) \

+		)

+

+#define UC3L0128 ( \

+		AVR32_PART_IS_DEFINED(UC3L0128)	\

+		)

+

+#define UC3L0256 ( \

+		AVR32_PART_IS_DEFINED(UC3L0256)	\

+		)

+

+#define UC3L3 (	\

+		AVR32_PART_IS_DEFINED(UC64L3U)  || \

+		AVR32_PART_IS_DEFINED(UC128L3U) || \

+		AVR32_PART_IS_DEFINED(UC256L3U)	\

+		)

+

+#define UC3L4 (	\

+		AVR32_PART_IS_DEFINED(UC64L4U)  || \

+		AVR32_PART_IS_DEFINED(UC128L4U) || \

+		AVR32_PART_IS_DEFINED(UC256L4U)	\

+		)

+

+#define UC3L3_L4 (UC3L3 || UC3L4)

+/** @} */

+

+/**

+ * \name AVR UC3 families

+ * @{

+ */

+/** AVR UC3 A family */

+#define UC3A (UC3A0 || UC3A1 || UC3A3 || UC3A4)

+

+/** AVR UC3 B family */

+#define UC3B (UC3B0 || UC3B1)

+

+/** AVR UC3 C family */

+#define UC3C (UC3C0 || UC3C1 || UC3C2)

+

+/** AVR UC3 D family */

+#define UC3D (UC3D3 || UC3D4)

+

+/** AVR UC3 L family */

+#define UC3L (UC3L0 || UC3L0128 || UC3L0256 || UC3L3_L4)

+/** @} */

+

+/** AVR UC3 product line */

+#define UC3  (UC3A || UC3B || UC3C || UC3D || UC3L)

+

+/** @} */

+

+/**

+ * \defgroup xmega_part_macros_group AVR XMEGA parts

+ * @{

+ */

+

+/**

+ * \name AVR XMEGA A series

+ * @{

+ */

+#define XMEGA_A1 ( \

+		AVR8_PART_IS_DEFINED(ATxmega64A1)  || \

+		AVR8_PART_IS_DEFINED(ATxmega128A1) \

+		)

+

+#define XMEGA_A3 ( \

+		AVR8_PART_IS_DEFINED(ATxmega64A3)  || \

+		AVR8_PART_IS_DEFINED(ATxmega128A3) || \

+		AVR8_PART_IS_DEFINED(ATxmega192A3) || \

+		AVR8_PART_IS_DEFINED(ATxmega256A3) \

+		)

+

+#define XMEGA_A3B ( \

+		AVR8_PART_IS_DEFINED(ATxmega256A3B) \

+		)

+

+#define XMEGA_A4 ( \

+		AVR8_PART_IS_DEFINED(ATxmega16A4) || \

+		AVR8_PART_IS_DEFINED(ATxmega32A4) \

+		)

+/** @} */

+

+/**

+ * \name AVR XMEGA AU series

+ * @{

+ */

+#define XMEGA_A1U ( \

+		AVR8_PART_IS_DEFINED(ATxmega64A1U)  || \

+		AVR8_PART_IS_DEFINED(ATxmega128A1U) \

+		)

+

+#define XMEGA_A3U ( \

+		AVR8_PART_IS_DEFINED(ATxmega64A3U)  || \

+		AVR8_PART_IS_DEFINED(ATxmega128A3U) || \

+		AVR8_PART_IS_DEFINED(ATxmega192A3U) || \

+		AVR8_PART_IS_DEFINED(ATxmega256A3U) \

+		)

+

+#define XMEGA_A3BU ( \

+		AVR8_PART_IS_DEFINED(ATxmega256A3BU) \

+		)

+

+#define XMEGA_A4U ( \

+		AVR8_PART_IS_DEFINED(ATxmega16A4U)  || \

+		AVR8_PART_IS_DEFINED(ATxmega32A4U)  || \

+		AVR8_PART_IS_DEFINED(ATxmega64A4U)  || \

+		AVR8_PART_IS_DEFINED(ATxmega128A4U) \

+		)

+/** @} */

+

+/**

+ * \name AVR XMEGA B series

+ * @{

+ */

+#define XMEGA_B1  ( \

+		AVR8_PART_IS_DEFINED(ATxmega64B1)  || \

+		AVR8_PART_IS_DEFINED(ATxmega128B1) \

+		)

+

+#define XMEGA_B3  ( \

+		AVR8_PART_IS_DEFINED(ATxmega64B3)  || \

+		AVR8_PART_IS_DEFINED(ATxmega128B3) \

+		)

+/** @} */

+

+/**

+ * \name AVR XMEGA C series

+ * @{

+ */

+#define XMEGA_C3 ( \

+		AVR8_PART_IS_DEFINED(ATxmega384C3)  || \

+		AVR8_PART_IS_DEFINED(ATxmega256C3)  || \

+		AVR8_PART_IS_DEFINED(ATxmega192C3)  || \

+		AVR8_PART_IS_DEFINED(ATxmega128C3)  || \

+		AVR8_PART_IS_DEFINED(ATxmega64C3) \

+		)

+

+#define XMEGA_C4 ( \

+		AVR8_PART_IS_DEFINED(ATxmega32C4)  || \

+		AVR8_PART_IS_DEFINED(ATxmega16C4) \

+		)

+/** @} */

+

+/**

+ * \name AVR XMEGA D series

+ * @{

+ */

+#define XMEGA_D3 ( \

+		AVR8_PART_IS_DEFINED(ATxmega64D3)  || \

+		AVR8_PART_IS_DEFINED(ATxmega128D3) || \

+		AVR8_PART_IS_DEFINED(ATxmega192D3) || \

+		AVR8_PART_IS_DEFINED(ATxmega256D3) || \

+		AVR8_PART_IS_DEFINED(ATxmega384D3) \

+		)

+

+#define XMEGA_D4 ( \

+		AVR8_PART_IS_DEFINED(ATxmega16D4)  || \

+		AVR8_PART_IS_DEFINED(ATxmega32D4)  || \

+		AVR8_PART_IS_DEFINED(ATxmega64D4)  || \

+		AVR8_PART_IS_DEFINED(ATxmega128D4) \

+		)

+/** @} */

+

+/**

+ * \name AVR XMEGA E series

+ * @{

+ */

+#define XMEGA_E5 ( \

+		AVR8_PART_IS_DEFINED(ATxmega8E5)   || \

+		AVR8_PART_IS_DEFINED(ATxmega16E5)  || \

+		AVR8_PART_IS_DEFINED(ATxmega32E5)     \

+	)

+/** @} */

+

+

+/**

+ * \name AVR XMEGA families

+ * @{

+ */

+/** AVR XMEGA A family */

+#define XMEGA_A (XMEGA_A1 || XMEGA_A3 || XMEGA_A3B || XMEGA_A4)

+

+/** AVR XMEGA AU family */

+#define XMEGA_AU (XMEGA_A1U || XMEGA_A3U || XMEGA_A3BU || XMEGA_A4U)

+

+/** AVR XMEGA B family */

+#define XMEGA_B (XMEGA_B1 || XMEGA_B3)

+

+/** AVR XMEGA C family */

+#define XMEGA_C (XMEGA_C3 || XMEGA_C4)

+

+/** AVR XMEGA D family */

+#define XMEGA_D (XMEGA_D3 || XMEGA_D4)

+

+/** AVR XMEGA E family */

+#define XMEGA_E (XMEGA_E5)

+/** @} */

+

+

+/** AVR XMEGA product line */

+#define XMEGA (XMEGA_A || XMEGA_AU || XMEGA_B || XMEGA_C || XMEGA_D || XMEGA_E)

+

+/** @} */

+

+/**

+ * \defgroup mega_part_macros_group megaAVR parts

+ *

+ * \note These megaAVR groupings are based on the groups in AVR Libc for the

+ * part header files. They are not names of official megaAVR device series or

+ * families.

+ *

+ * @{

+ */

+

+/**

+ * \name ATmegaxx0/xx1 subgroups

+ * @{

+ */

+#define MEGA_XX0 ( \

+		AVR8_PART_IS_DEFINED(ATmega640)  || \

+		AVR8_PART_IS_DEFINED(ATmega1280) || \

+		AVR8_PART_IS_DEFINED(ATmega2560) \

+		)

+

+#define MEGA_XX1 ( \

+		AVR8_PART_IS_DEFINED(ATmega1281) || \

+		AVR8_PART_IS_DEFINED(ATmega2561) \

+		)

+/** @} */

+

+/**

+ * \name megaAVR groups

+ * @{

+ */

+/** ATmegaxx0/xx1 group */

+#define MEGA_XX0_1 (MEGA_XX0 || MEGA_XX1)

+

+/** ATmegaxx4 group */

+#define MEGA_XX4 ( \

+		AVR8_PART_IS_DEFINED(ATmega164A)  || \

+		AVR8_PART_IS_DEFINED(ATmega164PA) || \

+		AVR8_PART_IS_DEFINED(ATmega324A)  || \

+		AVR8_PART_IS_DEFINED(ATmega324PA) || \

+		AVR8_PART_IS_DEFINED(ATmega644)   || \

+		AVR8_PART_IS_DEFINED(ATmega644A)  || \

+		AVR8_PART_IS_DEFINED(ATmega644PA) || \

+		AVR8_PART_IS_DEFINED(ATmega1284P)   || \

+		AVR8_PART_IS_DEFINED(ATmega128RFA1) \

+		)

+

+/** ATmegaxx4 group */

+#define MEGA_XX4_A ( \

+		AVR8_PART_IS_DEFINED(ATmega164A)  || \

+		AVR8_PART_IS_DEFINED(ATmega164PA) || \

+		AVR8_PART_IS_DEFINED(ATmega324A)  || \

+		AVR8_PART_IS_DEFINED(ATmega324PA) || \

+		AVR8_PART_IS_DEFINED(ATmega644A)  || \

+		AVR8_PART_IS_DEFINED(ATmega644PA) || \

+		AVR8_PART_IS_DEFINED(ATmega1284P) \

+		)

+

+/** ATmegaxx8 group */

+#define MEGA_XX8 ( \

+		AVR8_PART_IS_DEFINED(ATmega48)    || \

+		AVR8_PART_IS_DEFINED(ATmega48A)   || \

+		AVR8_PART_IS_DEFINED(ATmega48PA)  || \

+		AVR8_PART_IS_DEFINED(ATmega88)    || \

+		AVR8_PART_IS_DEFINED(ATmega88A)   || \

+		AVR8_PART_IS_DEFINED(ATmega88PA)  || \

+		AVR8_PART_IS_DEFINED(ATmega168)   || \

+		AVR8_PART_IS_DEFINED(ATmega168A)  || \

+		AVR8_PART_IS_DEFINED(ATmega168PA) || \

+		AVR8_PART_IS_DEFINED(ATmega328)   || \

+		AVR8_PART_IS_DEFINED(ATmega328P) \

+		)

+

+/** ATmegaxx8A/P/PA group */

+#define MEGA_XX8_A ( \

+		AVR8_PART_IS_DEFINED(ATmega48A)   || \

+		AVR8_PART_IS_DEFINED(ATmega48PA)  || \

+		AVR8_PART_IS_DEFINED(ATmega88A)   || \

+		AVR8_PART_IS_DEFINED(ATmega88PA)  || \

+		AVR8_PART_IS_DEFINED(ATmega168A)  || \

+		AVR8_PART_IS_DEFINED(ATmega168PA) || \

+		AVR8_PART_IS_DEFINED(ATmega328P) \

+		)

+

+/** ATmegaxx group */

+#define MEGA_XX ( \

+		AVR8_PART_IS_DEFINED(ATmega16)   || \

+		AVR8_PART_IS_DEFINED(ATmega16A)  || \

+		AVR8_PART_IS_DEFINED(ATmega32)   || \

+		AVR8_PART_IS_DEFINED(ATmega32A)  || \

+		AVR8_PART_IS_DEFINED(ATmega64)   || \

+		AVR8_PART_IS_DEFINED(ATmega64A)  || \

+		AVR8_PART_IS_DEFINED(ATmega128)  || \

+		AVR8_PART_IS_DEFINED(ATmega128A) \

+		)

+

+/** ATmegaxxA/P/PA group */

+#define MEGA_XX_A ( \

+		AVR8_PART_IS_DEFINED(ATmega16A)  || \

+		AVR8_PART_IS_DEFINED(ATmega32A)  || \

+		AVR8_PART_IS_DEFINED(ATmega64A)  || \

+		AVR8_PART_IS_DEFINED(ATmega128A) \

+		)

+/** ATmegaxxRFA1 group */

+#define MEGA_RFA1 ( \

+		AVR8_PART_IS_DEFINED(ATmega128RFA1) \

+		)

+

+/** ATmegaxxRFR2 group */

+#define MEGA_RFR2 ( \

+		AVR8_PART_IS_DEFINED(ATmega64RFR2)  || \

+		AVR8_PART_IS_DEFINED(ATmega128RFR2) || \

+		AVR8_PART_IS_DEFINED(ATmega256RFR2) \

+		)

+

+

+/** ATmegaxxRFxx group */

+#define MEGA_RF (MEGA_RFA1 || MEGA_RFR2)

+

+/**

+ * \name ATmegaxx_un0/un1/un2 subgroups

+ * @{

+ */

+#define MEGA_XX_UN0 ( \

+		AVR8_PART_IS_DEFINED(ATmega16)    || \

+		AVR8_PART_IS_DEFINED(ATmega16A)   || \

+		AVR8_PART_IS_DEFINED(ATmega32)    || \

+		AVR8_PART_IS_DEFINED(ATmega32A)	\

+		)

+

+/** ATmegaxx group without power reduction and

+ *  And interrupt sense register.

+ */

+#define MEGA_XX_UN1 ( \

+		AVR8_PART_IS_DEFINED(ATmega64)    || \

+		AVR8_PART_IS_DEFINED(ATmega64A)   || \

+		AVR8_PART_IS_DEFINED(ATmega128)   || \

+		AVR8_PART_IS_DEFINED(ATmega128A) \

+		)

+

+/** ATmegaxx group without power reduction and

+ *  And interrupt sense register.

+ */

+#define MEGA_XX_UN2 ( \

+		AVR8_PART_IS_DEFINED(ATmega169P)  || \

+		AVR8_PART_IS_DEFINED(ATmega169PA) || \

+		AVR8_PART_IS_DEFINED(ATmega329P)  || \

+		AVR8_PART_IS_DEFINED(ATmega329PA) \

+		)

+

+/** Devices added to complete megaAVR offering.

+ *  Please do not use this group symbol as it is not intended

+ *  to be permanent: the devices should be regrouped.

+ */

+#define MEGA_UNCATEGORIZED ( \

+		AVR8_PART_IS_DEFINED(AT90CAN128)     || \

+		AVR8_PART_IS_DEFINED(AT90CAN32)      || \

+		AVR8_PART_IS_DEFINED(AT90CAN64)      || \

+		AVR8_PART_IS_DEFINED(AT90PWM1)       || \

+		AVR8_PART_IS_DEFINED(AT90PWM216)     || \

+		AVR8_PART_IS_DEFINED(AT90PWM2B)      || \

+		AVR8_PART_IS_DEFINED(AT90PWM316)     || \

+		AVR8_PART_IS_DEFINED(AT90PWM3B)      || \

+		AVR8_PART_IS_DEFINED(AT90PWM81)      || \

+		AVR8_PART_IS_DEFINED(AT90USB1286)    || \

+		AVR8_PART_IS_DEFINED(AT90USB1287)    || \

+		AVR8_PART_IS_DEFINED(AT90USB162)     || \

+		AVR8_PART_IS_DEFINED(AT90USB646)     || \

+		AVR8_PART_IS_DEFINED(AT90USB647)     || \

+		AVR8_PART_IS_DEFINED(AT90USB82)      || \

+		AVR8_PART_IS_DEFINED(ATmega1284)     || \

+		AVR8_PART_IS_DEFINED(ATmega162)      || \

+		AVR8_PART_IS_DEFINED(ATmega164P)     || \

+		AVR8_PART_IS_DEFINED(ATmega165A)     || \

+		AVR8_PART_IS_DEFINED(ATmega165P)     || \

+		AVR8_PART_IS_DEFINED(ATmega165PA)    || \

+		AVR8_PART_IS_DEFINED(ATmega168P)     || \

+		AVR8_PART_IS_DEFINED(ATmega169A)     || \

+		AVR8_PART_IS_DEFINED(ATmega16M1)     || \

+		AVR8_PART_IS_DEFINED(ATmega16U2)     || \

+		AVR8_PART_IS_DEFINED(ATmega16U4)     || \

+		AVR8_PART_IS_DEFINED(ATmega2564RFR2) || \

+		AVR8_PART_IS_DEFINED(ATmega256RFA2)  || \

+		AVR8_PART_IS_DEFINED(ATmega324P)     || \

+		AVR8_PART_IS_DEFINED(ATmega325)      || \

+		AVR8_PART_IS_DEFINED(ATmega3250)     || \

+		AVR8_PART_IS_DEFINED(ATmega3250A)    || \

+		AVR8_PART_IS_DEFINED(ATmega3250P)    || \

+		AVR8_PART_IS_DEFINED(ATmega3250PA)   || \

+		AVR8_PART_IS_DEFINED(ATmega325A)     || \

+		AVR8_PART_IS_DEFINED(ATmega325P)     || \

+		AVR8_PART_IS_DEFINED(ATmega325PA)    || \

+		AVR8_PART_IS_DEFINED(ATmega329)      || \

+		AVR8_PART_IS_DEFINED(ATmega3290)     || \

+		AVR8_PART_IS_DEFINED(ATmega3290A)    || \

+		AVR8_PART_IS_DEFINED(ATmega3290P)    || \

+		AVR8_PART_IS_DEFINED(ATmega3290PA)   || \

+		AVR8_PART_IS_DEFINED(ATmega329A)     || \

+		AVR8_PART_IS_DEFINED(ATmega32M1)     || \

+		AVR8_PART_IS_DEFINED(ATmega32U2)     || \

+		AVR8_PART_IS_DEFINED(ATmega32U4)     || \

+		AVR8_PART_IS_DEFINED(ATmega48P)      || \

+		AVR8_PART_IS_DEFINED(ATmega644P)     || \

+		AVR8_PART_IS_DEFINED(ATmega645)      || \

+		AVR8_PART_IS_DEFINED(ATmega6450)     || \

+		AVR8_PART_IS_DEFINED(ATmega6450A)    || \

+		AVR8_PART_IS_DEFINED(ATmega6450P)    || \

+		AVR8_PART_IS_DEFINED(ATmega645A)     || \

+		AVR8_PART_IS_DEFINED(ATmega645P)     || \

+		AVR8_PART_IS_DEFINED(ATmega649)      || \

+		AVR8_PART_IS_DEFINED(ATmega6490)     || \

+		AVR8_PART_IS_DEFINED(ATmega6490A)    || \

+		AVR8_PART_IS_DEFINED(ATmega6490P)    || \

+		AVR8_PART_IS_DEFINED(ATmega649A)     || \

+		AVR8_PART_IS_DEFINED(ATmega649P)     || \

+		AVR8_PART_IS_DEFINED(ATmega64M1)     || \

+		AVR8_PART_IS_DEFINED(ATmega64RFA2)   || \

+		AVR8_PART_IS_DEFINED(ATmega8)        || \

+		AVR8_PART_IS_DEFINED(ATmega8515)     || \

+		AVR8_PART_IS_DEFINED(ATmega8535)     || \

+		AVR8_PART_IS_DEFINED(ATmega88P)      || \

+		AVR8_PART_IS_DEFINED(ATmega8A)       || \

+		AVR8_PART_IS_DEFINED(ATmega8U2)         \

+	)

+

+/** Unspecified group */

+#define MEGA_UNSPECIFIED (MEGA_XX_UN0 || MEGA_XX_UN1 || MEGA_XX_UN2 || \

+	MEGA_UNCATEGORIZED)

+

+/** @} */

+

+/** megaAVR product line */

+#define MEGA (MEGA_XX0_1 || MEGA_XX4 || MEGA_XX8 || MEGA_XX || MEGA_RF || \

+	MEGA_UNSPECIFIED)

+

+/** @} */

+

+/**

+ * \defgroup tiny_part_macros_group tinyAVR parts

+ *

+ * @{

+ */

+

+/**

+ * \name tinyAVR groups

+ * @{

+ */

+

+/** Devices added to complete tinyAVR offering.

+ *  Please do not use this group symbol as it is not intended

+ *  to be permanent: the devices should be regrouped.

+ */

+#define TINY_UNCATEGORIZED ( \

+		AVR8_PART_IS_DEFINED(ATtiny10)    || \

+		AVR8_PART_IS_DEFINED(ATtiny13)    || \

+		AVR8_PART_IS_DEFINED(ATtiny13A)   || \

+		AVR8_PART_IS_DEFINED(ATtiny1634)  || \

+		AVR8_PART_IS_DEFINED(ATtiny167)   || \

+		AVR8_PART_IS_DEFINED(ATtiny20)    || \

+		AVR8_PART_IS_DEFINED(ATtiny2313)  || \

+		AVR8_PART_IS_DEFINED(ATtiny2313A) || \

+		AVR8_PART_IS_DEFINED(ATtiny24)    || \

+		AVR8_PART_IS_DEFINED(ATtiny24A)   || \

+		AVR8_PART_IS_DEFINED(ATtiny25)    || \

+		AVR8_PART_IS_DEFINED(ATtiny26)    || \

+		AVR8_PART_IS_DEFINED(ATtiny261)   || \

+		AVR8_PART_IS_DEFINED(ATtiny261A)  || \

+		AVR8_PART_IS_DEFINED(ATtiny4)     || \

+		AVR8_PART_IS_DEFINED(ATtiny40)    || \

+		AVR8_PART_IS_DEFINED(ATtiny4313)  || \

+		AVR8_PART_IS_DEFINED(ATtiny43U)   || \

+		AVR8_PART_IS_DEFINED(ATtiny44)    || \

+		AVR8_PART_IS_DEFINED(ATtiny44A)   || \

+		AVR8_PART_IS_DEFINED(ATtiny45)    || \

+		AVR8_PART_IS_DEFINED(ATtiny461)   || \

+		AVR8_PART_IS_DEFINED(ATtiny461A)  || \

+		AVR8_PART_IS_DEFINED(ATtiny48)    || \

+		AVR8_PART_IS_DEFINED(ATtiny5)     || \

+		AVR8_PART_IS_DEFINED(ATtiny828)   || \

+		AVR8_PART_IS_DEFINED(ATtiny84)    || \

+		AVR8_PART_IS_DEFINED(ATtiny84A)   || \

+		AVR8_PART_IS_DEFINED(ATtiny85)    || \

+		AVR8_PART_IS_DEFINED(ATtiny861)   || \

+		AVR8_PART_IS_DEFINED(ATtiny861A)  || \

+		AVR8_PART_IS_DEFINED(ATtiny87)    || \

+		AVR8_PART_IS_DEFINED(ATtiny88)    || \

+		AVR8_PART_IS_DEFINED(ATtiny9)        \

+	)

+

+/** @} */

+

+/** tinyAVR product line */

+#define TINY (TINY_UNCATEGORIZED)

+

+/** @} */

+

+/**

+ * \defgroup sam_part_macros_group SAM parts

+ * @{

+ */

+

+/**

+ * \name SAM3S series

+ * @{

+ */

+#define SAM3S1 ( \

+		SAM_PART_IS_DEFINED(SAM3S1A) ||	\

+		SAM_PART_IS_DEFINED(SAM3S1B) ||	\

+		SAM_PART_IS_DEFINED(SAM3S1C) \

+		)

+

+#define SAM3S2 ( \

+		SAM_PART_IS_DEFINED(SAM3S2A) ||	\

+		SAM_PART_IS_DEFINED(SAM3S2B) ||	\

+		SAM_PART_IS_DEFINED(SAM3S2C) \

+		)

+

+#define SAM3S4 ( \

+		SAM_PART_IS_DEFINED(SAM3S4A) ||	\

+		SAM_PART_IS_DEFINED(SAM3S4B) ||	\

+		SAM_PART_IS_DEFINED(SAM3S4C) \

+		)

+

+#define SAM3S8 ( \

+		SAM_PART_IS_DEFINED(SAM3S8B) ||	\

+		SAM_PART_IS_DEFINED(SAM3S8C) \

+		)

+

+#define SAM3SD8 ( \

+		SAM_PART_IS_DEFINED(SAM3SD8B) || \

+		SAM_PART_IS_DEFINED(SAM3SD8C) \

+		)

+/** @} */

+

+/**

+ * \name SAM3U series

+ * @{

+ */

+#define SAM3U1 ( \

+		SAM_PART_IS_DEFINED(SAM3U1C) ||	\

+		SAM_PART_IS_DEFINED(SAM3U1E) \

+		)

+

+#define SAM3U2 ( \

+		SAM_PART_IS_DEFINED(SAM3U2C) ||	\

+		SAM_PART_IS_DEFINED(SAM3U2E) \

+		)

+

+#define SAM3U4 ( \

+		SAM_PART_IS_DEFINED(SAM3U4C) ||	\

+		SAM_PART_IS_DEFINED(SAM3U4E) \

+		)

+/** @} */

+

+/**

+ * \name SAM3N series

+ * @{

+ */

+#define SAM3N1 ( \

+		SAM_PART_IS_DEFINED(SAM3N1A) ||	\

+		SAM_PART_IS_DEFINED(SAM3N1B) ||	\

+		SAM_PART_IS_DEFINED(SAM3N1C) \

+		)

+

+#define SAM3N2 ( \

+		SAM_PART_IS_DEFINED(SAM3N2A) ||	\

+		SAM_PART_IS_DEFINED(SAM3N2B) ||	\

+		SAM_PART_IS_DEFINED(SAM3N2C) \

+		)

+

+#define SAM3N4 ( \

+		SAM_PART_IS_DEFINED(SAM3N4A) ||	\

+		SAM_PART_IS_DEFINED(SAM3N4B) ||	\

+		SAM_PART_IS_DEFINED(SAM3N4C) \

+		)

+/** @} */

+

+/**

+ * \name SAM3X series

+ * @{

+ */

+#define SAM3X4 ( \

+		SAM_PART_IS_DEFINED(SAM3X4C) ||	\

+		SAM_PART_IS_DEFINED(SAM3X4E) \

+		)

+

+#define SAM3X8 ( \

+		SAM_PART_IS_DEFINED(SAM3X8C) ||	\

+		SAM_PART_IS_DEFINED(SAM3X8E) ||	\

+		SAM_PART_IS_DEFINED(SAM3X8H) \

+		)

+/** @} */

+

+/**

+ * \name SAM3A series

+ * @{

+ */

+#define SAM3A4 ( \

+		SAM_PART_IS_DEFINED(SAM3A4C) \

+		)

+

+#define SAM3A8 ( \

+		SAM_PART_IS_DEFINED(SAM3A8C) \

+		)

+/** @} */

+

+/**

+ * \name SAM4S series

+ * @{

+ */

+#define SAM4S8 ( \

+		SAM_PART_IS_DEFINED(SAM4S8B) ||	\

+		SAM_PART_IS_DEFINED(SAM4S8C) \

+		)

+

+#define SAM4S16 ( \

+		SAM_PART_IS_DEFINED(SAM4S16B) || \

+		SAM_PART_IS_DEFINED(SAM4S16C) \

+		)

+

+#define SAM4SA16 ( \

+		SAM_PART_IS_DEFINED(SAM4SA16B) || \

+		SAM_PART_IS_DEFINED(SAM4SA16C)    \

+	)

+

+#define SAM4SD16 ( \

+		SAM_PART_IS_DEFINED(SAM4SD16B) || \

+		SAM_PART_IS_DEFINED(SAM4SD16C)    \

+	)

+

+#define SAM4SD32 ( \

+		SAM_PART_IS_DEFINED(SAM4SD32B) || \

+		SAM_PART_IS_DEFINED(SAM4SD32C)    \

+	)

+/** @} */

+

+/**

+ * \name SAM4L series

+ * @{

+ */

+#define SAM4LS ( \

+		SAM_PART_IS_DEFINED(SAM4LS2A) || \

+		SAM_PART_IS_DEFINED(SAM4LS2B) || \

+		SAM_PART_IS_DEFINED(SAM4LS2C) || \

+		SAM_PART_IS_DEFINED(SAM4LS4A) || \

+		SAM_PART_IS_DEFINED(SAM4LS4B) || \

+		SAM_PART_IS_DEFINED(SAM4LS4C) || \

+		SAM_PART_IS_DEFINED(SAM4LS8A) || \

+		SAM_PART_IS_DEFINED(SAM4LS8B) || \

+		SAM_PART_IS_DEFINED(SAM4LS8C)    \

+		)

+

+#define SAM4LC ( \

+		SAM_PART_IS_DEFINED(SAM4LC2A) || \

+		SAM_PART_IS_DEFINED(SAM4LC2B) || \

+		SAM_PART_IS_DEFINED(SAM4LC2C) || \

+		SAM_PART_IS_DEFINED(SAM4LC4A) || \

+		SAM_PART_IS_DEFINED(SAM4LC4B) || \

+		SAM_PART_IS_DEFINED(SAM4LC4C) || \

+		SAM_PART_IS_DEFINED(SAM4LC8A) || \

+		SAM_PART_IS_DEFINED(SAM4LC8B) || \

+		SAM_PART_IS_DEFINED(SAM4LC8C)    \

+		)

+/** @} */

+

+/**

+ * \name SAMD20 series

+ * @{

+ */

+#define SAMD20J ( \

+		SAM_PART_IS_DEFINED(SAMD20J14) || \

+		SAM_PART_IS_DEFINED(SAMD20J15) || \

+		SAM_PART_IS_DEFINED(SAMD20J16) || \

+		SAM_PART_IS_DEFINED(SAMD20J17) || \

+		SAM_PART_IS_DEFINED(SAMD20J18) \

+	)

+

+#define SAMD20G ( \

+		SAM_PART_IS_DEFINED(SAMD20G14) || \

+		SAM_PART_IS_DEFINED(SAMD20G15) || \

+		SAM_PART_IS_DEFINED(SAMD20G16) || \

+		SAM_PART_IS_DEFINED(SAMD20G17) || \

+		SAM_PART_IS_DEFINED(SAMD20G18) \

+	)

+

+#define SAMD20E ( \

+		SAM_PART_IS_DEFINED(SAMD20E14) || \

+		SAM_PART_IS_DEFINED(SAMD20E15) || \

+		SAM_PART_IS_DEFINED(SAMD20E16) || \

+		SAM_PART_IS_DEFINED(SAMD20E17) || \

+		SAM_PART_IS_DEFINED(SAMD20E18) \

+	)

+/** @} */

+

+/**

+ * \name SAM4E series

+ * @{

+ */

+#define SAM4E8 ( \

+		SAM_PART_IS_DEFINED(SAM4E8E) \

+		)

+

+#define SAM4E16 ( \

+		SAM_PART_IS_DEFINED(SAM4E16E) \

+		)

+/** @} */

+

+/**

+ * \name SAM4N series

+ * @{

+ */

+#define SAM4N8 ( \

+		SAM_PART_IS_DEFINED(SAM4N8A) || \

+		SAM_PART_IS_DEFINED(SAM4N8B) || \

+		SAM_PART_IS_DEFINED(SAM4N8C) \

+		)

+

+#define SAM4N16 ( \

+		SAM_PART_IS_DEFINED(SAM4N16B) || \

+		SAM_PART_IS_DEFINED(SAM4N16C) \

+		)

+/** @} */

+

+/**

+ * \name SAM families

+ * @{

+ */

+/** SAM3S Family */

+#define SAM3S (SAM3S1 || SAM3S2 || SAM3S4 || SAM3S8 || SAM3SD8)

+

+/** SAM3U Family */

+#define SAM3U (SAM3U1 || SAM3U2 || SAM3U4)

+

+/** SAM3N Family */

+#define SAM3N (SAM3N1 || SAM3N2 || SAM3N4)

+

+/** SAM3XA Family */

+#define SAM3XA (SAM3X4 || SAM3X8 || SAM3A4 || SAM3A8)

+

+/** SAM4S Family */

+#define SAM4S (SAM4S8 || SAM4S16 || SAM4SA16 || SAM4SD16 || SAM4SD32)

+

+/** SAM4L Family */

+#define SAM4L (SAM4LS || SAM4LC)

+

+/** SAMD20 Family */

+#define SAMD20 (SAMD20J || SAMD20G || SAMD20E)

+/** @} */

+

+/** SAM4E Family */

+#define SAM4E (SAM4E8 || SAM4E16)

+

+/** SAM4N Family */

+#define SAM4N (SAM4N8 || SAM4N16)

+

+/** @} */

+

+/** SAM product line */

+#define SAM (SAM3S || SAM3U || SAM3N || SAM3XA || SAM4S || SAM4L || SAM4E || SAMD20 || SAM4N)

+

+/** @} */

+

+/** @} */

+

+/** @} */

+

+#endif /* ATMEL_PARTS_H */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/boards/samd20_xplained_pro/board_init.c b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/boards/samd20_xplained_pro/board_init.c
new file mode 100644
index 0000000..900277b
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/boards/samd20_xplained_pro/board_init.c
@@ -0,0 +1,70 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 Xplained Pro board initialization

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#include <compiler.h>

+#include <board.h>

+#include <conf_board.h>

+#include <port.h>

+

+#if defined(__GNUC__)

+void board_init(void) WEAK __attribute__((alias("system_board_init")));

+#elif defined(__ICCARM__)

+void board_init(void);

+#  pragma weak board_init=system_board_init

+#endif

+

+void system_board_init(void)

+{

+	struct port_config pin_conf;

+	port_get_config_defaults(&pin_conf);

+

+	/* Configure LEDs as outputs, turn them off */

+	pin_conf.direction  = PORT_PIN_DIR_OUTPUT;

+	port_pin_set_config(LED_0_PIN, &pin_conf);

+	port_pin_set_output_level(LED_0_PIN, LED_0_INACTIVE);

+

+	/* Set buttons as inputs */

+	pin_conf.direction  = PORT_PIN_DIR_INPUT;

+	pin_conf.input_pull = PORT_PIN_PULL_UP;

+	port_pin_set_config(BUTTON_0_PIN, &pin_conf);

+}

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/boards/samd20_xplained_pro/samd20_xplained_pro.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/boards/samd20_xplained_pro/samd20_xplained_pro.h
new file mode 100644
index 0000000..84d668d
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/boards/samd20_xplained_pro/samd20_xplained_pro.h
@@ -0,0 +1,521 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 Xplained Pro board definition

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef SAMD20_XPLAINED_PRO_H_INCLUDED

+#define SAMD20_XPLAINED_PRO_H_INCLUDED

+

+#include <conf_board.h>

+#include <compiler.h>

+

+/**

+ * \ingroup group_common_boards

+ * \defgroup samd20_xplained_pro_group SAM D20 Xplained Pro board

+ *

+ * @{

+ */

+

+void system_board_init(void);

+

+/**

+ * \defgroup samd20_xplained_pro_features_group Features

+ *

+ * Symbols that describe features and capabilities of the board.

+ *

+ * @{

+ */

+

+/** Name string macro */

+#define BOARD_NAME                "SAMD20_XPLAINED_PRO"

+

+/** \name Resonator definitions

+ *  @{ */

+#define BOARD_FREQ_SLCK_XTAL      (32768U)

+#define BOARD_FREQ_SLCK_BYPASS    (32768U)

+#define BOARD_FREQ_MAINCK_XTAL    0 /* Not Mounted */

+#define BOARD_FREQ_MAINCK_BYPASS  0 /* Not Mounted */

+#define BOARD_MCK                 CHIP_FREQ_CPU_MAX

+#define BOARD_OSC_STARTUP_US      15625

+/** @} */

+

+/** \name LED0 definitions

+ *  @{ */

+#define LED0_PIN                  PIN_PA14

+#define LED0_ACTIVE               false

+#define LED0_INACTIVE             !LED0_ACTIVE

+/** @} */

+

+/** \name SW0 definitions

+ *  @{ */

+#define SW0_PIN                   PIN_PA15

+#define SW0_ACTIVE                false

+#define SW0_INACTIVE              !SW0_ACTIVE

+#define SW0_EIC_PIN               PIN_PA15A_EIC_EXTINT15

+#define SW0_EIC_MUX               MUX_PA15A_EIC_EXTINT15

+#define SW0_EIC_PINMUX            PINMUX_PA15A_EIC_EXTINT15

+#define SW0_EIC_LINE              15

+/** @} */

+

+/**

+ * \name LED #0 definitions

+ *

+ * Wrapper macros for LED0, to ensure common naming across all Xplained Pro

+ * boards.

+ *

+ *  @{ */

+#define LED_0_NAME                "LED0 (yellow)"

+#define LED_0_PIN                 LED0_PIN

+#define LED_0_ACTIVE              LED0_ACTIVE

+#define LED_0_INACTIVE            LED0_INACTIVE

+/** @} */

+

+/** Number of on-board LEDs */

+#define LED_COUNT                 1

+

+/**

+ * \name Button #0 definitions

+ *

+ * Wrapper macros for SW0, to ensure common naming across all Xplained Pro

+ * boards.

+ *

+ *  @{ */

+#define BUTTON_0_NAME             "SW0"

+#define BUTTON_0_PIN              SW0_PIN

+#define BUTTON_0_ACTIVE           SW0_ACTIVE

+#define BUTTON_0_INACTIVE         SW0_INACTIVE

+#define BUTTON_0_EIC_PIN          SW0_EIC_PIN

+#define BUTTON_0_EIC_MUX          SW0_EIC_MUX

+#define BUTTON_0_EIC_PINMUX       SW0_EIC_PINMUX

+#define BUTTON_0_EIC_LINE         SW0_EIC_LINE

+/** @} */

+

+/** Number of on-board buttons */

+#define BUTTON_COUNT 1

+

+/** \name Extension header #1 pin definitions

+ *  @{

+ */

+#define EXT1_PIN_3                PIN_PB00

+#define EXT1_PIN_4                PIN_PB01

+#define EXT1_PIN_5                PIN_PB06

+#define EXT1_PIN_6                PIN_PB07

+#define EXT1_PIN_7                PIN_PB02

+#define EXT1_PIN_8                PIN_PB03

+#define EXT1_PIN_9                PIN_PB04

+#define EXT1_PIN_10               PIN_PB05

+#define EXT1_PIN_11               PIN_PA08

+#define EXT1_PIN_12               PIN_PA09

+#define EXT1_PIN_13               PIN_PB09

+#define EXT1_PIN_14               PIN_PB08

+#define EXT1_PIN_15               PIN_PA05

+#define EXT1_PIN_16               PIN_PA06

+#define EXT1_PIN_17               PIN_PA04

+#define EXT1_PIN_18               PIN_PA07

+/** @} */

+

+/** \name Extension header #1 pin definitions by function

+ *  @{

+ */

+#define EXT1_PIN_ADC_0            EXT1_PIN_3

+#define EXT1_PIN_ADC_1            EXT1_PIN_4

+#define EXT1_PIN_GPIO_0           EXT1_PIN_5

+#define EXT1_PIN_GPIO_1           EXT1_PIN_6

+#define EXT1_PIN_PWM_0            EXT1_PIN_7

+#define EXT1_PIN_PWM_1            EXT1_PIN_8

+#define EXT1_PIN_IRQ              EXT1_PIN_9

+#define EXT1_PIN_I2C_SDA          EXT1_PIN_11

+#define EXT1_PIN_I2C_SCL          EXT1_PIN_12

+#define EXT1_PIN_UART_RX          EXT1_PIN_13

+#define EXT1_PIN_UART_TX          EXT1_PIN_14

+#define EXT1_PIN_SPI_SS_1         EXT1_PIN_10

+#define EXT1_PIN_SPI_SS_0         EXT1_PIN_15

+#define EXT1_PIN_SPI_MOSI         EXT1_PIN_16

+#define EXT1_PIN_SPI_MISO         EXT1_PIN_17

+#define EXT1_PIN_SPI_SCK          EXT1_PIN_18

+/** @} */

+

+/** \name Extension header #1 ADC definitions

+ *  @{

+ */

+#define EXT1_ADC_MODULE           ADC

+#define EXT1_ADC_0_CHANNEL        8

+#define EXT1_ADC_0_PIN            PIN_PB00B_ADC_AIN8

+#define EXT1_ADC_0_MUX            MUX_PB00B_ADC_AIN8

+#define EXT1_ADC_0_PINMUX         PINMUX_PB00B_ADC_AIN8

+#define EXT1_ADC_1_CHANNEL        9

+#define EXT1_ADC_1_PIN            PIN_PB01B_ADC_AIN9

+#define EXT1_ADC_1_MUX            MUX_PB01B_ADC_AIN9

+#define EXT1_ADC_1_PINMUX         PINMUX_PB01B_ADC_AIN9

+/** @} */

+

+/** \name Extension header #1 PWM definitions

+ *  @{

+ */

+#define EXT1_PWM_MODULE           TC6

+#define EXT1_PWM_0_CHANNEL        0

+#define EXT1_PWM_0_PIN            PIN_PB02F_TC6_WO0

+#define EXT1_PWM_0_MUX            MUX_PB02F_TC6_WO0

+#define EXT1_PWM_0_PINMUX         PINMUX_PB02F_TC6_WO0

+#define EXT1_PWM_1_CHANNEL        1

+#define EXT1_PWM_1_PIN            PIN_PB03F_TC6_WO1

+#define EXT1_PWM_1_MUX            MUX_PB03F_TC6_WO1

+#define EXT1_PWM_1_PINMUX         PINMUX_PB03F_TC6_WO1

+/** @} */

+

+/** \name Extension header #1 IRQ/External interrupt definitions

+ *  @{

+ */

+#define EXT1_IRQ_MODULE           EIC

+#define EXT1_IRQ_INPUT            4

+#define EXT1_IRQ_PIN              PIN_PB04A_EIC_EXTINT4

+#define EXT1_IRQ_MUX              MUX_PB04A_EIC_EXTINT4

+#define EXT1_IRQ_PINMUX           PINMUX_PB04A_EIC_EXTINT4

+/** @} */

+

+/** \name Extension header #1 I2C definitions

+ *  @{

+ */

+#define EXT1_I2C_MODULE              SERCOM2

+#define EXT1_I2C_SERCOM_PINMUX_PAD0  PINMUX_PA08D_SERCOM2_PAD0

+#define EXT1_I2C_SERCOM_PINMUX_PAD1  PINMUX_PA09D_SERCOM2_PAD1

+/** @} */

+

+/** \name Extension header #1 UART definitions

+ *  @{

+ */

+#define EXT1_UART_MODULE              SERCOM4

+#define EXT1_UART_SERCOM_MUX_SETTING  USART_RX_1_TX_0_XCK_1

+#define EXT1_UART_SERCOM_PINMUX_PAD0  PINMUX_PB08D_SERCOM4_PAD0

+#define EXT1_UART_SERCOM_PINMUX_PAD1  PINMUX_PB09D_SERCOM4_PAD1

+#define EXT1_UART_SERCOM_PINMUX_PAD2  PINMUX_UNUSED

+#define EXT1_UART_SERCOM_PINMUX_PAD3  PINMUX_UNUSED

+/** @} */

+

+/** \name Extension header #1 SPI definitions

+ *  @{

+ */

+#define EXT1_SPI_MODULE              SERCOM0

+#define EXT1_SPI_SERCOM_MUX_SETTING  SPI_SIGNAL_MUX_SETTING_E

+#define EXT1_SPI_SERCOM_PINMUX_PAD0  PINMUX_PA04D_SERCOM0_PAD0

+#define EXT1_SPI_SERCOM_PINMUX_PAD1  PINMUX_PA05D_SERCOM0_PAD1

+#define EXT1_SPI_SERCOM_PINMUX_PAD2  PINMUX_PA06D_SERCOM0_PAD2

+#define EXT1_SPI_SERCOM_PINMUX_PAD3  PINMUX_PA07D_SERCOM0_PAD3

+/** @} */

+

+/** \name Extension header #2 pin definitions

+ *  @{

+ */

+#define EXT2_PIN_3                PIN_PA10

+#define EXT2_PIN_4                PIN_PA11

+#define EXT2_PIN_5                PIN_PA20

+#define EXT2_PIN_6                PIN_PA21

+#define EXT2_PIN_7                PIN_PA22

+#define EXT2_PIN_8                PIN_PA23

+#define EXT2_PIN_9                PIN_PB14

+#define EXT2_PIN_10               PIN_PB15

+#define EXT2_PIN_11               PIN_PA08

+#define EXT2_PIN_12               PIN_PA09

+#define EXT2_PIN_13               PIN_PB13

+#define EXT2_PIN_14               PIN_PB12

+#define EXT2_PIN_15               PIN_PA17

+#define EXT2_PIN_16               PIN_PA18

+#define EXT2_PIN_17               PIN_PA16

+#define EXT2_PIN_18               PIN_PA19

+/** @} */

+

+/** \name Extension header #2 pin definitions by function

+ *  @{

+ */

+#define EXT2_PIN_ADC_0            EXT2_PIN_3

+#define EXT2_PIN_ADC_1            EXT2_PIN_4

+#define EXT2_PIN_GPIO_0           EXT2_PIN_5

+#define EXT2_PIN_GPIO_1           EXT2_PIN_6

+#define EXT2_PIN_PWM_0            EXT2_PIN_7

+#define EXT2_PIN_PWM_1            EXT2_PIN_8

+#define EXT2_PIN_IRQ              EXT2_PIN_9

+#define EXT2_PIN_I2C_SDA          EXT2_PIN_11

+#define EXT2_PIN_I2C_SCL          EXT2_PIN_12

+#define EXT2_PIN_UART_RX          EXT2_PIN_13

+#define EXT2_PIN_UART_TX          EXT2_PIN_14

+#define EXT2_PIN_SPI_SS_1         EXT2_PIN_10

+#define EXT2_PIN_SPI_SS_0         EXT2_PIN_15

+#define EXT2_PIN_SPI_MOSI         EXT2_PIN_16

+#define EXT2_PIN_SPI_MISO         EXT2_PIN_17

+#define EXT2_PIN_SPI_SCK          EXT2_PIN_18

+/** @} */

+

+/** \name Extension header #2 ADC definitions

+ *  @{

+ */

+#define EXT2_ADC_MODULE           ADC

+#define EXT2_ADC_0_CHANNEL        18

+#define EXT2_ADC_0_PIN            PIN_PA10B_ADC_AIN18

+#define EXT2_ADC_0_MUX            MUX_PA10B_ADC_AIN18

+#define EXT2_ADC_0_PINMUX         PINMUX_PA10B_ADC_AIN18

+#define EXT2_ADC_1_CHANNEL        19

+#define EXT2_ADC_1_PIN            PIN_PA11B_ADC_AIN19

+#define EXT2_ADC_1_MUX            MUX_PA11B_ADC_AIN19

+#define EXT2_ADC_1_PINMUX         PINMUX_PA11B_ADC_AIN19

+/** @} */

+

+/** \name Extension header #2 PWM definitions

+ *  @{

+ */

+#define EXT2_PWM_MODULE           TC4

+#define EXT2_PWM_0_CHANNEL        0

+#define EXT2_PWM_0_PIN            PIN_PA22F_TC4_WO0

+#define EXT2_PWM_0_MUX            MUX_PA22F_TC4_WO0

+#define EXT2_PWM_0_PINMUX         PINMUX_PA22F_TC4_WO0

+#define EXT2_PWM_1_CHANNEL        1

+#define EXT2_PWM_1_PIN            PIN_PA23F_TC4_WO1

+#define EXT2_PWM_1_MUX            MUX_PA23F_TC4_WO1

+#define EXT2_PWM_1_PINMUX         PINMUX_PA23F_TC4_WO1

+/** @} */

+

+/** \name Extension header #2 IRQ/External interrupt definitions

+ *  @{

+ */

+#define EXT2_IRQ_MODULE           EIC

+#define EXT2_IRQ_INPUT            14

+#define EXT2_IRQ_PIN              PIN_PB14A_EIC_EXTINT14

+#define EXT2_IRQ_MUX              MUX_PB14A_EIC_EXTINT14

+#define EXT2_IRQ_PINMUX           PINMUX_PB14A_EIC_EXTINT14

+/** @} */

+

+ /** \name Extension header #2 I2C definitions

+ *  @{

+ */

+#define EXT2_I2C_MODULE              SERCOM2

+#define EXT2_I2C_SERCOM_PINMUX_PAD0  PINMUX_PA08D_SERCOM2_PAD0

+#define EXT2_I2C_SERCOM_PINMUX_PAD1  PINMUX_PA09D_SERCOM2_PAD1

+/** @} */

+

+/** \name Extension header #2 UART definitions

+ *  @{

+ */

+#define EXT2_UART_MODULE              SERCOM4

+#define EXT2_UART_SERCOM_MUX_SETTING  USART_RX_1_TX_0_XCK_1

+#define EXT2_UART_SERCOM_PINMUX_PAD0  PINMUX_PB12C_SERCOM4_PAD0

+#define EXT2_UART_SERCOM_PINMUX_PAD1  PINMUX_PB13C_SERCOM4_PAD1

+#define EXT2_UART_SERCOM_PINMUX_PAD2  PINMUX_UNUSED

+#define EXT2_UART_SERCOM_PINMUX_PAD3  PINMUX_UNUSED

+/** @} */

+

+/** \name Extension header #2 SPI definitions

+ *  @{

+ */

+#define EXT2_SPI_MODULE              SERCOM1

+#define EXT2_SPI_SERCOM_MUX_SETTING  SPI_SIGNAL_MUX_SETTING_E

+#define EXT2_SPI_SERCOM_PINMUX_PAD0  PINMUX_PA16C_SERCOM1_PAD0

+#define EXT2_SPI_SERCOM_PINMUX_PAD1  PINMUX_PA17C_SERCOM1_PAD1

+#define EXT2_SPI_SERCOM_PINMUX_PAD2  PINMUX_PA18C_SERCOM1_PAD2

+#define EXT2_SPI_SERCOM_PINMUX_PAD3  PINMUX_PA19C_SERCOM1_PAD3

+/** @} */

+

+/** \name Extension header #3 pin definitions

+ *  @{

+ */

+#define EXT3_PIN_3                PIN_PA02

+#define EXT3_PIN_4                PIN_PA03

+#define EXT3_PIN_5                PIN_PB30

+#define EXT3_PIN_6                PIN_PA15

+#define EXT3_PIN_7                PIN_PA12

+#define EXT3_PIN_8                PIN_PA13

+#define EXT3_PIN_9                PIN_PA28

+#define EXT3_PIN_10               PIN_PA27

+#define EXT3_PIN_11               PIN_PA08

+#define EXT3_PIN_12               PIN_PA09

+#define EXT3_PIN_13               PIN_PB11

+#define EXT3_PIN_14               PIN_PB10

+#define EXT3_PIN_15               PIN_PB17

+#define EXT3_PIN_16               PIN_PB22

+#define EXT3_PIN_17               PIN_PB16

+#define EXT3_PIN_18               PIN_PB23

+/** @} */

+

+/** \name Extension header #3 pin definitions by function

+ *  @{

+ */

+#define EXT3_PIN_ADC_0            EXT3_PIN_3

+#define EXT3_PIN_ADC_1            EXT3_PIN_4

+#define EXT3_PIN_GPIO_0           EXT3_PIN_5

+#define EXT3_PIN_GPIO_1           EXT3_PIN_6

+#define EXT3_PIN_PWM_0            EXT3_PIN_7

+#define EXT3_PIN_PWM_1            EXT3_PIN_8

+#define EXT3_PIN_IRQ              EXT3_PIN_9

+#define EXT3_PIN_I2C_SDA          EXT3_PIN_11

+#define EXT3_PIN_I2C_SCL          EXT3_PIN_12

+#define EXT3_PIN_UART_RX          EXT3_PIN_13

+#define EXT3_PIN_UART_TX          EXT3_PIN_14

+#define EXT3_PIN_SPI_SS_1         EXT3_PIN_10

+#define EXT3_PIN_SPI_SS_0         EXT3_PIN_15

+#define EXT3_PIN_SPI_MOSI         EXT3_PIN_16

+#define EXT3_PIN_SPI_MISO         EXT3_PIN_17

+#define EXT3_PIN_SPI_SCK          EXT3_PIN_18

+/** @} */

+

+/** \name Extension header #3 ADC definitions

+ *  @{

+ */

+#define EXT3_ADC_MODULE           ADC

+#define EXT3_ADC_0_CHANNEL        0

+#define EXT3_ADC_0_PIN            PIN_PA02B_ADC_AIN0

+#define EXT3_ADC_0_MUX            MUX_PA02B_ADC_AIN0

+#define EXT3_ADC_0_PINMUX         PINMUX_PA02B_ADC_AIN0

+#define EXT3_ADC_1_CHANNEL        1

+#define EXT3_ADC_1_PIN            PIN_PA03B_ADC_AIN1

+#define EXT3_ADC_1_MUX            MUX_PA03B_ADC_AIN1

+#define EXT3_ADC_1_PINMUX         PINMUX_PA03B_ADC_AIN1

+/** @} */

+

+/** \name Extension header #3 PWM definitions

+ *  @{

+ */

+#define EXT3_PWM_MODULE           TC2

+#define EXT3_PWM_0_CHANNEL        0

+#define EXT3_PWM_0_PIN            PIN_PA12E_TC2_WO0

+#define EXT3_PWM_0_MUX            MUX_PA12E_TC2_WO0

+#define EXT3_PWM_0_PINMUX         PINMUX_PA12E_TC2_WO0

+#define EXT3_PWM_1_CHANNEL        1

+#define EXT3_PWM_1_PIN            PIN_PA13E_TC2_WO1

+#define EXT3_PWM_1_MUX            MUX_PA13E_TC2_WO1

+#define EXT3_PWM_1_PINMUX         PINMUX_PA13E_TC2_WO1

+/** @} */

+

+/** \name Extension header #3 IRQ/External interrupt definitions

+ *  @{

+ */

+#define EXT3_IRQ_MODULE           EIC

+#define EXT3_IRQ_INPUT            8

+#define EXT3_IRQ_PIN              PIN_PA28A_EIC_EXTINT8

+#define EXT3_IRQ_MUX              MUX_PA28A_EIC_EXTINT8

+#define EXT3_IRQ_PINMUX           PINMUX_PA28A_EIC_EXTINT8

+/** @} */

+

+/** \name Extension header #3 I2C definitions

+ *  @{

+ */

+#define EXT3_I2C_MODULE              SERCOM2

+#define EXT3_I2C_SERCOM_PINMUX_PAD0  PINMUX_PA08D_SERCOM2_PAD0

+#define EXT3_I2C_SERCOM_PINMUX_PAD1  PINMUX_PA09D_SERCOM2_PAD1

+/** @} */

+

+/** \name Extension header #3 UART definitions

+ *  @{

+ */

+#define EXT3_UART_MODULE              SERCOM4

+#define EXT3_UART_SERCOM_MUX_SETTING  USART_RX_3_TX_2_XCK_3

+#define EXT3_UART_SERCOM_PINMUX_PAD0  PINMUX_UNUSED

+#define EXT3_UART_SERCOM_PINMUX_PAD1  PINMUX_UNUSED

+#define EXT3_UART_SERCOM_PINMUX_PAD2  PINMUX_PB10D_SERCOM4_PAD2

+#define EXT3_UART_SERCOM_PINMUX_PAD3  PINMUX_PB11D_SERCOM4_PAD3

+/** @} */

+

+/** \name Extension header #3 SPI definitions

+ *  @{

+ */

+#define EXT3_SPI_MODULE              SERCOM5

+#define EXT3_SPI_SERCOM_MUX_SETTING  SPI_SIGNAL_MUX_SETTING_E

+#define EXT3_SPI_SERCOM_PINMUX_PAD0  PINMUX_PB16C_SERCOM5_PAD0

+#define EXT3_SPI_SERCOM_PINMUX_PAD1  PINMUX_PB17C_SERCOM5_PAD1

+#define EXT3_SPI_SERCOM_PINMUX_PAD2  PINMUX_PB22D_SERCOM5_PAD2

+#define EXT3_SPI_SERCOM_PINMUX_PAD3  PINMUX_PB23D_SERCOM5_PAD3

+/** @} */

+

+/** \name Embedded debugger GPIO interface definitions

+ * @{

+ */

+#define EDBG_GPIO0_PIN            PIN_PA27

+#define EDBG_GPIO1_PIN            PIN_PA28

+#define EDBG_GPIO2_PIN            PIN_PA20

+#define EDBG_GPIO3_PIN            PIN_PA21

+/** @} */

+

+/** \name Embedded debugger USART interface definitions

+ * @{

+ */

+#define EDBG_UART_MODULE          -1 /* Not available on this board */

+#define EDBG_UART_RX_PIN          -1 /* Not available on this board */

+#define EDBG_UART_RX_MUX          -1 /* Not available on this board */

+#define EDBG_UART_RX_PINMUX       -1 /* Not available on this board */

+#define EDBG_UART_RX_SERCOM_PAD   -1 /* Not available on this board */

+#define EDBG_UART_TX_PIN          -1 /* Not available on this board */

+#define EDBG_UART_TX_MUX          -1 /* Not available on this board */

+#define EDBG_UART_TX_PINMUX       -1 /* Not available on this board */

+#define EDBG_UART_TX_SERCOM_PAD   -1 /* Not available on this board */

+/** @} */

+

+/** \name Embedded debugger I2C interface definitions

+ * @{

+ */

+#define EDBG_I2C_MODULE              SERCOM2

+#define EDBG_I2C_SERCOM_PINMUX_PAD0  PINMUX_PA08D_SERCOM2_PAD0

+#define EDBG_I2C_SERCOM_PINMUX_PAD1  PINMUX_PA09D_SERCOM2_PAD1

+/** @} */

+

+/** \name Embedded debugger SPI interface definitions

+ * @{

+ */

+#define EDBG_SPI_MODULE              SERCOM5

+#define EDBG_SPI_SERCOM_MUX_SETTING  SPI_SIGNAL_MUX_SETTING_E

+#define EDBG_SPI_SERCOM_PINMUX_PAD0  PINMUX_PB16C_SERCOM5_PAD0

+#define EDBG_SPI_SERCOM_PINMUX_PAD1  PINMUX_PB31D_SERCOM5_PAD1

+#define EDBG_SPI_SERCOM_PINMUX_PAD2  PINMUX_PB22D_SERCOM5_PAD2

+#define EDBG_SPI_SERCOM_PINMUX_PAD3  PINMUX_PB23D_SERCOM5_PAD3

+/** @} */

+

+/** \name Embedded debugger CDC Gateway USART interface definitions

+ * @{

+ */

+#define EDBG_CDC_MODULE              SERCOM3

+#define EDBG_CDC_SERCOM_MUX_SETTING  USART_RX_3_TX_2_XCK_3

+#define EDBG_CDC_SERCOM_PINMUX_PAD0  PINMUX_UNUSED

+#define EDBG_CDC_SERCOM_PINMUX_PAD1  PINMUX_UNUSED

+#define EDBG_CDC_SERCOM_PINMUX_PAD2  PINMUX_PA24C_SERCOM3_PAD2

+#define EDBG_CDC_SERCOM_PINMUX_PAD3  PINMUX_PA25C_SERCOM3_PAD3

+/** @} */

+

+/** @} */

+

+/** @} */

+

+#endif  /* SAMD20_XPLAINED_PRO_H_INCLUDED */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/port/port.c b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/port/port.c
new file mode 100644
index 0000000..44b7e16
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/port/port.c
@@ -0,0 +1,104 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 GPIO Port Driver

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+#include <port.h>

+

+/**

+ *  \brief Writes a Port pin configuration to the hardware module.

+ *

+ *  Writes out a given configuration of a Port pin configuration to the hardware

+ *  module.

+ *

+ *  \note If the pin direction is set as an output, the pull-up/pull-down input

+ *        configuration setting is ignored.

+ *

+ *  \param[in] gpio_pin  Index of the GPIO pin to configure.

+ *  \param[in] config    Configuration settings for the pin.

+ */

+void port_pin_set_config(

+		const uint8_t gpio_pin,

+		const struct port_config *const config)

+{

+	/* Sanity check arguments */

+	Assert(config);

+

+	struct system_pinmux_config pinmux_config;

+	system_pinmux_get_config_defaults(&pinmux_config);

+

+	pinmux_config.mux_position = SYSTEM_PINMUX_GPIO;

+	pinmux_config.direction    = (enum system_pinmux_pin_dir)config->direction;

+	pinmux_config.input_pull   = (enum system_pinmux_pin_pull)config->input_pull;

+

+	system_pinmux_pin_set_config(gpio_pin, &pinmux_config);

+}

+

+/**

+ *  \brief Writes a Port group configuration group to the hardware module.

+ *

+ *  Writes out a given configuration of a Port group configuration to the

+ *  hardware module.

+ *

+ *  \note If the pin direction is set as an output, the pull-up/pull-down input

+ *        configuration setting is ignored.

+ *

+ *  \param[out] port    Base of the PORT module to write to.

+ *  \param[in]  mask    Mask of the port pin(s) to configure.

+ *  \param[in]  config  Configuration settings for the pin group.

+ */

+void port_group_set_config(

+		PortGroup *const port,

+		const uint32_t mask,

+		const struct port_config *const config)

+{

+	/* Sanity check arguments */

+	Assert(port);

+	Assert(config);

+

+	struct system_pinmux_config pinmux_config;

+	system_pinmux_get_config_defaults(&pinmux_config);

+

+	pinmux_config.mux_position = SYSTEM_PINMUX_GPIO;

+	pinmux_config.direction    = (enum system_pinmux_pin_dir)config->direction;

+	pinmux_config.input_pull   = (enum system_pinmux_pin_pull)config->input_pull;

+

+	system_pinmux_group_set_config(port, mask, &pinmux_config);

+}

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/port/port.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/port/port.h
new file mode 100644
index 0000000..c5175de
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/port/port.h
@@ -0,0 +1,535 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 GPIO Port Driver

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+#ifndef PORT_H_INCLUDED

+#define PORT_H_INCLUDED

+

+/**

+ * \defgroup asfdoc_samd20_port_group SAM D20 Port Driver (PORT)

+ *

+ * This driver for SAM D20 devices provides an interface for the configuration

+ * and management of the device's General Purpose Input/Output (GPIO) pin

+ * functionality, for manual pin state reading and writing.

+ *

+ * The following peripherals are used by this module:

+ *

+ *  - PORT (GPIO Management)

+ *

+ * The outline of this documentation is as follows:

+ *  - \ref asfdoc_samd20_port_prerequisites

+ *  - \ref asfdoc_samd20_port_module_overview

+ *  - \ref asfdoc_samd20_port_special_considerations

+ *  - \ref asfdoc_samd20_port_extra_info

+ *  - \ref asfdoc_samd20_port_examples

+ *  - \ref asfdoc_samd20_port_api_overview

+ *

+ *

+ * \section asfdoc_samd20_port_prerequisites Prerequisites

+ *

+ * There are no prerequisites for this module.

+ *

+ *

+ * \section asfdoc_samd20_port_module_overview Module Overview

+ *

+ * The device GPIO (PORT) module provides an interface between the user

+ * application logic and external hardware peripherals, when general pin state

+ * manipulation is required. This driver provides an easy-to-use interface to

+ * the physical pin input samplers and output drivers, so that pins can be read

+ * from or written to for general purpose external hardware control.

+ *

+ * \subsection asfdoc_samd20_port_module_overview_pin_numbering Physical and Logical GPIO Pins

+ * SAM D20 devices use two naming conventions for the I/O pins in the device; one

+ * physical, and one logical. Each physical pin on a device package is assigned

+ * both a physical port and pin identifier (e.g. "PORTA.0") as well as a

+ * monotonically incrementing logical GPIO number (e.g. "GPIO0"). While the

+ * former is used to map physical pins to their physical internal device module

+ * counterparts, for simplicity the design of this driver uses the logical GPIO

+ * numbers instead.

+ *

+ * \subsection asfdoc_samd20_port_module_overview_physical Physical Connection

+ *

+ * \ref asfdoc_samd20_port_module_int_connections "The diagram below" shows how

+ * this module is interconnected within the device.

+ *

+ * \anchor asfdoc_samd20_port_module_int_connections

+ * \dot

+ * digraph overview {

+ *   node [label="Port Pad" shape=square] pad;

+ *

+ *   subgraph driver {

+ *     node [label="Peripheral Mux" shape=trapezium] pinmux;

+ *     node [label="GPIO Module" shape=ellipse] gpio;

+ *     node [label="Other Peripheral Modules" shape=ellipse style=filled fillcolor=lightgray] peripherals;

+ *   }

+ *

+ *   pinmux -> gpio;

+ *   pad    -> pinmux;

+ *   pinmux -> peripherals;

+ * }

+ * \enddot

+ *

+ *

+ * \section asfdoc_samd20_port_special_considerations Special Considerations

+ *

+ * The SAM D20 port pin input sampler can be disabled when the pin is configured

+ * in pure output mode to save power; reading the pin state of a pin configured

+ * in output-only mode will read the logical output state that was last set.

+ *

+ * \section asfdoc_samd20_port_extra_info Extra Information

+ *

+ * For extra information see \ref asfdoc_samd20_port_extra. This includes:

+ *  - \ref asfdoc_samd20_port_extra_acronyms

+ *  - \ref asfdoc_samd20_port_extra_dependencies

+ *  - \ref asfdoc_samd20_port_extra_errata

+ *  - \ref asfdoc_samd20_port_extra_history

+ *

+ *

+ * \section asfdoc_samd20_port_examples Examples

+ *

+ * For a list of examples related to this driver, see

+ * \ref asfdoc_samd20_port_exqsg.

+ *

+ *

+ * \section asfdoc_samd20_port_api_overview API Overview

+ * @{

+ */

+

+#include <compiler.h>

+#include <pinmux.h>

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+/** \name PORT Alias Macros

+ * @{

+ */

+

+/** Convenience definition for GPIO module group A on the device (if

+ *  available). */

+#if (PORT_GROUPS > 0) || defined(__DOXYGEN__)

+#  define PORTA             PORT->Group[0]

+#endif

+

+#if (PORT_GROUPS > 1) || defined(__DOXYGEN__)

+/** Convenience definition for GPIO module group B on the device (if

+ *  available). */

+#  define PORTB             PORT->Group[1]

+#endif

+

+#if (PORT_GROUPS > 2) || defined(__DOXYGEN__)

+/** Convenience definition for GPIO module group C on the device (if

+ *  available). */

+#  define PORTC             PORT->Group[2]

+#endif

+

+#if (PORT_GROUPS > 3) || defined(__DOXYGEN__)

+/** Convenience definition for GPIO module group D on the device (if

+ *  available). */

+#  define PORTD             PORT->Group[3]

+#endif

+

+/** @} */

+

+/**

+ *  \brief Port pin direction configuration enum.

+ *

+ *  Enum for the possible pin direction settings of the port pin configuration

+ *  structure, to indicate the direction the pin should use.

+ */

+enum port_pin_dir {

+	/** The pin's input buffer should be enabled, so that the pin state can

+	 *  be read. */

+	PORT_PIN_DIR_INPUT               = SYSTEM_PINMUX_PIN_DIR_INPUT,

+	/** The pin's output buffer should be enabled, so that the pin state can

+	 *  be set. */

+	PORT_PIN_DIR_OUTPUT              = SYSTEM_PINMUX_PIN_DIR_OUTPUT,

+	/** The pin's output and input buffers should be enabled, so that the pin

+	 *  state can be set and read back. */

+	PORT_PIN_DIR_OUTPUT_WTH_READBACK = SYSTEM_PINMUX_PIN_DIR_OUTPUT_WITH_READBACK,

+};

+

+/**

+ *  \brief Port pin input pull configuration enum.

+ *

+ *  Enum for the possible pin pull settings of the port pin configuration

+ *  structure, to indicate the type of logic level pull the pin should use.

+ */

+enum port_pin_pull {

+	/** No logical pull should be applied to the pin. */

+	PORT_PIN_PULL_NONE = SYSTEM_PINMUX_PIN_PULL_NONE,

+	/** Pin should be pulled up when idle. */

+	PORT_PIN_PULL_UP   = SYSTEM_PINMUX_PIN_PULL_UP,

+	/** Pin should be pulled down when idle. */

+	PORT_PIN_PULL_DOWN = SYSTEM_PINMUX_PIN_PULL_DOWN,

+};

+

+/**

+ *  \brief Port pin configuration structure.

+ *

+ *  Configuration structure for a port pin instance. This structure should be

+ *  initialized by the \ref port_get_config_defaults() function before being

+ *  modified by the user application.

+ */

+struct port_config {

+	/** Port buffer input/output direction. */

+	enum port_pin_dir  direction;

+

+	/** Port pull-up/pull-down for input pins. */

+	enum port_pin_pull input_pull;

+};

+

+/** \name State reading/writing (physical group orientated)

+ * @{

+ */

+

+/**

+ *  \brief Retrieves the PORT module group instance from a given GPIO pin number.

+ *

+ *  Retrieves the PORT module group instance associated with a given logical

+ *  GPIO pin number.

+ *

+ *  \param[in] gpio_pin  Index of the GPIO pin to convert.

+ *

+ *  \return Base address of the associated PORT module.

+ */

+static inline PortGroup* port_get_group_from_gpio_pin(

+		const uint8_t gpio_pin)

+{

+	return system_pinmux_get_group_from_gpio_pin(gpio_pin);

+}

+

+/**

+ *  \brief Retrieves the state of a group of port pins that are configured as inputs.

+ *

+ *  Reads the current logic level of a port module's pins and returns the

+ *  current levels as a bitmask.

+ *

+ *  \param[in] port  Base of the PORT module to read from.

+ *  \param[in] mask  Mask of the port pin(s) to read.

+ *

+ *  \return Status of the port pin(s) input buffers.

+ */

+static inline uint32_t port_group_get_input_level(

+		const PortGroup *const port,

+		const uint32_t mask)

+{

+	/* Sanity check arguments */

+	Assert(port);

+

+	return (port->IN.reg & mask);

+}

+

+/**

+ *  \brief Retrieves the state of a group of port pins that are configured as outputs.

+ *

+ *  Reads the current logical output level of a port module's pins and returns

+ *  the current levels as a bitmask.

+ *

+ *  \param[in] port  Base of the PORT module to read from.

+ *  \param[in] mask  Mask of the port pin(s) to read.

+ *

+ *  \return Status of the port pin(s) output buffers.

+ */

+static inline uint32_t port_group_get_output_level(

+		const PortGroup *const port,

+		const uint32_t mask)

+{

+	/* Sanity check arguments */

+	Assert(port);

+

+	return (port->OUT.reg & mask);

+}

+

+/**

+ *  \brief Sets the state of a group of port pins that are configured as outputs.

+ *

+ *  Sets the current output level of a port module's pins to a given logic

+ *  level.

+ *

+ *  \param[out] port        Base of the PORT module to write to.

+ *  \param[in]  mask        Mask of the port pin(s) to change.

+ *  \param[in]  level_mask  Mask of the port level(s) to set.

+ */

+static inline void port_group_set_output_level(

+		PortGroup *const port,

+		const uint32_t mask,

+		const uint32_t level_mask)

+{

+	/* Sanity check arguments */

+	Assert(port);

+

+	port->OUTSET.reg = (mask &  level_mask);

+	port->OUTCLR.reg = (mask & ~level_mask);

+}

+

+/**

+ *  \brief Toggles the state of a group of port pins that are configured as an outputs.

+ *

+ *  Toggles the current output levels of a port module's pins.

+ *

+ *  \param[out] port  Base of the PORT module to write to.

+ *  \param[in]  mask  Mask of the port pin(s) to toggle.

+ */

+static inline void port_group_toggle_output_level(

+		PortGroup *const port,

+		const uint32_t mask)

+{

+	/* Sanity check arguments */

+	Assert(port);

+

+	port->OUTTGL.reg = mask;

+}

+

+/** @} */

+

+/** \name Configuration and initialization

+ * @{

+ */

+

+/**

+ *  \brief Initializes a Port pin/group configuration structure to defaults.

+ *

+ *  Initializes a given Port pin/group 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 mode with internal pullup enabled

+ *

+ *  \param[out] config  Configuration structure to initialize to default values.

+ */

+static inline void port_get_config_defaults(

+		struct port_config *const config)

+{

+	/* Sanity check arguments */

+	Assert(config);

+

+	/* Default configuration values */

+	config->direction = PORT_PIN_DIR_INPUT;

+	config->input_pull = PORT_PIN_PULL_UP;

+}

+

+void port_pin_set_config(

+		const uint8_t gpio_pin,

+		const struct port_config *const config);

+

+void port_group_set_config(

+		PortGroup *const port,

+		const uint32_t mask,

+		const struct port_config *const config);

+

+/** @} */

+

+/** \name State reading/writing (logical pin orientated)

+ * @{

+ */

+

+/**

+ *  \brief Retrieves the state of a port pin that is configured as an input.

+ *

+ *  Reads the current logic level of a port pin and returns the current

+ *  level as a boolean value.

+ *

+ *  \param[in] gpio_pin  Index of the GPIO pin to read.

+ *

+ *  \return Status of the port pin's input buffer.

+ */

+static inline bool port_pin_get_input_level(

+		const uint8_t gpio_pin)

+{

+	PortGroup *const port_base = port_get_group_from_gpio_pin(gpio_pin);

+	uint32_t pin_mask  = (1UL << (gpio_pin % 32));

+

+	return (port_base->IN.reg & pin_mask);

+}

+

+/**

+ *  \brief Retrieves the state of a port pin that is configured as an output.

+ *

+ *  Reads the current logical output level of a port pin and returns the current

+ *  level as a boolean value.

+ *

+ *  \param[in] gpio_pin  Index of the GPIO pin to read.

+ *

+ *  \return Status of the port pin's output buffer.

+ */

+static inline bool port_pin_get_output_level(

+		const uint8_t gpio_pin)

+{

+	PortGroup *const port_base = port_get_group_from_gpio_pin(gpio_pin);

+	uint32_t pin_mask  = (1UL << (gpio_pin % 32));

+

+	return (port_base->OUT.reg & pin_mask);

+}

+

+/**

+ *  \brief Sets the state of a port pin that is configured as an output.

+ *

+ *  Sets the current output level of a port pin to a given logic level.

+ *

+ *  \param[in] gpio_pin  Index of the GPIO pin to write to.

+ *  \param[in] level     Logical level to set the given pin to.

+ */

+static inline void port_pin_set_output_level(

+		const uint8_t gpio_pin,

+		const bool level)

+{

+	PortGroup *const port_base = port_get_group_from_gpio_pin(gpio_pin);

+	uint32_t pin_mask  = (1UL << (gpio_pin % 32));

+

+	/* Set the pin to high or low atomically based on the requested level */

+	if (level) {

+		port_base->OUTSET.reg = pin_mask;

+	} else {

+		port_base->OUTCLR.reg = pin_mask;

+	}

+}

+

+/**

+ *  \brief Toggles the state of a port pin that is configured as an output.

+ *

+ *  Toggles the current output level of a port pin.

+ *

+ *  \param[in] gpio_pin  Index of the GPIO pin to toggle.

+ */

+static inline void port_pin_toggle_output_level(

+		const uint8_t gpio_pin)

+{

+	PortGroup *const port_base = port_get_group_from_gpio_pin(gpio_pin);

+	uint32_t pin_mask  = (1UL << (gpio_pin % 32));

+

+	/* Toggle pin output level */

+	port_base->OUTTGL.reg = pin_mask;

+}

+

+/** @} */

+

+#ifdef __cplusplus

+}

+#endif

+

+/** @} */

+

+/**

+ * \page asfdoc_samd20_port_extra Extra Information for PORT Driver

+ *

+ * \section asfdoc_samd20_port_extra_acronyms Acronyms

+ * Below is a table listing the acronyms used in this module, along with their

+ * intended meanings.

+ *

+ * <table>

+ *	<tr>

+ *		<th>Acronym</th>

+ *		<th>Description</th>

+ *	</tr>

+ *	<tr>

+ *		<td>GPIO</td>

+ *		<td>General Purpose Input/Output</td>

+ *	</tr>

+ *	<tr>

+ *		<td>MUX</td>

+ *		<td>Multiplexer</td>

+ *	</tr>

+ * </table>

+ *

+ *

+ * \section asfdoc_samd20_port_extra_dependencies Dependencies

+ * This driver has the following dependencies:

+ *

+ *  - \ref asfdoc_samd20_system_pinmux_group "System Pin Multiplexer Driver"

+ *

+ *

+ * \section asfdoc_samd20_port_extra_errata Errata

+ * There are no errata related to this driver.

+ *

+ *

+ * \section asfdoc_samd20_port_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>Initial Release</td>

+ *	</tr>

+ * </table>

+ */

+

+/**

+ * \page asfdoc_samd20_port_exqsg Examples for PORT Driver

+ *

+ * This is a list of the available Quick Start guides (QSGs) and example

+ * applications for \ref asfdoc_samd20_port_group. QSGs are simple examples with

+ * step-by-step instructions to configure and use this driver in a selection of

+ * use cases. Note that QSGs can be compiled as a standalone application or be

+ * added to the user application.

+ *

+ *  - \subpage asfdoc_samd20_port_basic_use_case

+ *

+ * \page asfdoc_samd20_port_document_revision_history Document Revision History

+ *

+ * <table>

+ *	<tr>

+ *		<th>Doc. Rev.</td>

+ *		<th>Date</td>

+ *		<th>Comments</td>

+ *	</tr>

+ *	<tr>

+ *		<td>B</td>

+ *		<td>06/2013</td>

+ *		<td>Corrected documentation typos.</td>

+ *	</tr>

+ *	<tr>

+ *		<td>A</td>

+ *		<td>06/2013</td>

+ *		<td>Initial release</td>

+ *	</tr>

+ * </table>

+ */

+

+#endif

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/port/quick_start/qs_port_basic.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/port/quick_start/qs_port_basic.h
new file mode 100644
index 0000000..f0bca5a
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/port/quick_start/qs_port_basic.h
@@ -0,0 +1,105 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 GPIO Port Driver Quick Start

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+

+/**

+ * \page asfdoc_samd20_port_basic_use_case Quick Start Guide for PORT - Basic

+ *

+ * In this use case, the PORT module is configured for:

+ *  \li One pin in input mode, with pull-up enabled

+ *  \li One pin in output mode

+ *

+ * This use case sets up the PORT to read the current state of a GPIO pin set as

+ * an input, and mirrors the opposite logical state on a pin configured as an

+ * output.

+ *

+ * \section asfdoc_samd20_port_basic_use_case_setup Setup

+ *

+ * \subsection asfdoc_samd20_port_basic_use_case_setup_prereq Prerequisites

+ * There are no special setup requirements for this use-case.

+ *

+ * \subsection asfdoc_samd20_port_basic_use_case_setup_code Code

+ * Copy-paste the following setup code to your user application:

+ * \snippet qs_port_basic.c setup

+ *

+ * Add to user application initialization (typically the start of \c main()):

+ * \snippet qs_port_basic.c setup_init

+ *

+ * \subsection asfdoc_samd20_port_basic_use_case_setup_flow Workflow

+ * -# Create a PORT module pin configuration struct, which can be filled out to

+ *    adjust the configuration of a single port pin.

+ *  \snippet qs_port_basic.c setup_1

+ * -# Initialize the pin configuration struct with the module's default values.

+ *    \note This should always be performed before using the configuration

+ *          struct to ensure that all values are initialized to known default

+ *          settings.

+ *

+ *  \snippet qs_port_basic.c setup_2

+ * -# Adjust the configuration struct to request an input pin.

+ *  \snippet qs_port_basic.c setup_3

+ * -# Configure GPIO10 with the initialized pin configuration struct, to enable

+ *    the input sampler on the pin.

+ *  \snippet qs_port_basic.c setup_4

+ * -# Adjust the configuration struct to request an output pin.

+ *    \note The existing configuration struct may be re-used, as long as any

+ *          values that have been altered from the default settings are taken

+ *          into account by the user application.

+ *

+ *  \snippet qs_port_basic.c setup_5

+ * -# Configure GPIO11 with the initialized pin configuration struct, to enable

+ *    the output driver on the pin.

+ *  \snippet qs_port_basic.c setup_6

+ *

+ * \section asfdoc_samd20_port_basic_use_case_use_main Use Case

+ *

+ * \subsection asfdoc_samd20_port_basic_use_case_code Code

+ * Copy-paste the following code to your user application:

+ * \snippet qs_port_basic.c main

+ *

+ * \subsection asfdoc_samd20_port_basic_use_case_flow Workflow

+ * -# Read in the current input sampler state of GPIO10, which has been

+ *    configured as an input in the use-case setup code.

+ *  \snippet qs_port_basic.c main_1

+ * -# Write the inverted pin level state to GPIO11, which has been configured as

+ *    an output in the use-case setup code.

+ *  \snippet qs_port_basic.c main_2

+ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/sercom.c b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/sercom.c
new file mode 100644
index 0000000..babb8c3
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/sercom.c
@@ -0,0 +1,209 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 Serial Peripheral Interface Driver

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+#include "sercom.h"

+

+#define SHIFT 32

+

+#if !defined(__DOXYGEN__)

+/**

+ * \internal Configuration structure to save current gclk status.

+ */

+struct _sercom_conf {

+	/* Status of gclk generator initialization. */

+	bool generator_is_set;

+	/* Sercom gclk generator used. */

+	enum gclk_generator generator_source;

+};

+

+static struct _sercom_conf _sercom_config;

+

+/**

+ * \internal Calculate synchronous baudrate value (SPI/UART)

+ */

+enum status_code _sercom_get_sync_baud_val(

+		const uint32_t baudrate,

+		const uint32_t external_clock,

+		uint16_t *const baudvalue)

+{

+	/* Baud value variable */

+	uint16_t baud_calculated = 0;

+

+	/* Check if baudrate is outside of valid range. */

+	if (baudrate > (external_clock / 2)) {

+		/* Return with error code */

+		return STATUS_ERR_BAUDRATE_UNAVAILABLE;

+	}

+

+	/* Calculate BAUD value from clock frequency and baudrate */

+	baud_calculated = (external_clock / (2 * baudrate)) - 1;

+

+	/* Check if BAUD value is more than 255, which is maximum

+	 * for synchronous mode */

+	if (baud_calculated > 0xFF) {

+		/* Return with an error code */

+		return STATUS_ERR_BAUDRATE_UNAVAILABLE;

+	} else {

+		*baudvalue = baud_calculated;

+		return STATUS_OK;

+	}

+}

+

+/**

+ * \internal Calculate asynchronous baudrate value (UART)

+*/

+enum status_code _sercom_get_async_baud_val(

+		const uint32_t baudrate,

+		const uint32_t peripheral_clock,

+		uint16_t *const baudval)

+{

+	/* Temporary variables  */

+	uint64_t ratio = 0;

+	uint64_t scale = 0;

+	uint64_t baud_calculated = 0;

+

+	/* Check if the baudrate is outside of valid range */

+	if ((baudrate * 16) >= peripheral_clock) {

+		/* Return with error code */

+		return STATUS_ERR_BAUDRATE_UNAVAILABLE;

+	}

+

+	/* Calculate the BAUD value */

+	ratio = ((16 * (uint64_t)baudrate) << SHIFT) / peripheral_clock;

+	scale = ((uint64_t)1 << SHIFT) - ratio;

+	baud_calculated = (65536 * scale) >> SHIFT;

+

+	*baudval = baud_calculated;

+

+	return STATUS_OK;

+}

+#endif

+

+/**

+ * \brief Set GCLK channel to generator.

+ *

+ * This will set the appropriate GCLK channel to the requested GCLK generator.

+ * This will set the generator for all SERCOM instances, and the user will thus

+ * only be able to set the same generator that has previously been set, if any.

+ *

+ * After the generator has been set the first time, the generator can be changed

+ * using the \c force_change flag.

+ *

+ * \param[in]  generator_source The generator to use for SERCOM.

+ * \param[in]  force_change     Force change the generator.

+ *

+ * \return Status code indicating the GCLK generator change operation.

+ * \retval STATUS_OK                       If the generator update request was

+ *                                         successful.

+ * \retval STATUS_ERR_ALREADY_INITIALIZED  If a generator was already configured

+ *                                         and the new configuration was not

+ *                                         forced.

+ */

+enum status_code sercom_set_gclk_generator(

+		const enum gclk_generator generator_source,

+		const bool force_change)

+{

+	/* Check if valid option. */

+	if (!_sercom_config.generator_is_set || force_change) {

+		/* Create and fill a GCLK configuration structure for the new config. */

+		struct system_gclk_chan_config gclk_chan_conf;

+		system_gclk_chan_get_config_defaults(&gclk_chan_conf);

+		gclk_chan_conf.source_generator = generator_source;

+		system_gclk_chan_set_config(SERCOM_GCLK_ID, &gclk_chan_conf);

+		system_gclk_chan_enable(SERCOM_GCLK_ID);

+

+		/* Save config. */

+		_sercom_config.generator_source = generator_source;

+		_sercom_config.generator_is_set = true;

+

+		return STATUS_OK;

+	} else if (generator_source == _sercom_config.generator_source) {

+		/* Return status OK if same config. */

+		return STATUS_OK;

+	}

+

+	/* Return invalid config to already initialized GCLK. */

+	return STATUS_ERR_ALREADY_INITIALIZED;

+}

+

+/** \internal

+ * Creates a switch statement case entry to convert a SERCOM instance and pad

+ * index to the default SERCOM pad MUX setting.

+ */

+#define _SERCOM_PAD_DEFAULTS_CASE(n, pad) \

+		case (uintptr_t)SERCOM##n: \

+			switch (pad) { \

+				case 0: \

+					return SERCOM##n##_PAD0_DEFAULT; \

+				case 1: \

+					return SERCOM##n##_PAD1_DEFAULT; \

+				case 2: \

+					return SERCOM##n##_PAD2_DEFAULT; \

+				case 3: \

+					return SERCOM##n##_PAD3_DEFAULT; \

+			} \

+			break;

+

+/**

+ * \internal Gets the default PAD pinout for a given SERCOM.

+ *

+ * Returns the PINMUX settings for the given SERCOM and pad. This is used

+ * for default configuration of pins.

+ *

+ * \param[in]  sercom_module   Pointer to the SERCOM module

+ * \param[in]  pad             PAD to get default pinout for

+ *

+ * \returns The default PINMUX for the given SERCOM instance and PAD

+ *

+ */

+uint32_t _sercom_get_default_pad(

+		Sercom *const sercom_module,

+		const uint8_t pad)

+{

+	switch ((uintptr_t)sercom_module) {

+		/* Auto-generate a lookup table for the default SERCOM pad defaults */

+		MREPEAT(SERCOM_INST_NUM, _SERCOM_PAD_DEFAULTS_CASE, pad)

+	}

+

+	Assert(false);

+	return 0;

+}

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/sercom.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/sercom.h
new file mode 100644
index 0000000..d91079c
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/sercom.h
@@ -0,0 +1,87 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 Serial Peripheral Interface Driver

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+

+#ifndef SERCOM_H_INCLUDED

+#define SERCOM_H_INCLUDED

+

+#include <compiler.h>

+#include <system.h>

+#include <clock.h>

+#include "sercom_interrupt.h"

+#include "sercom_pinout.h"

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+#if (SERCOM0_GCLK_ID_SLOW == SERCOM1_GCLK_ID_SLOW && \

+     SERCOM0_GCLK_ID_SLOW == SERCOM2_GCLK_ID_SLOW && \

+     SERCOM0_GCLK_ID_SLOW == SERCOM3_GCLK_ID_SLOW)

+#  define SERCOM_GCLK_ID SERCOM0_GCLK_ID_SLOW

+#else

+#  error "SERCOM modules must share the same slow GCLK channel ID."

+#endif

+

+enum status_code sercom_set_gclk_generator(

+		const enum gclk_generator generator_source,

+		const bool force_change);

+

+enum status_code _sercom_get_sync_baud_val(

+		const uint32_t baudrate,

+		const uint32_t external_clock,

+		uint16_t *const baudval);

+

+enum status_code _sercom_get_async_baud_val(

+		const uint32_t baudrate,

+		const uint32_t peripheral_clock,

+		uint16_t *const baudval);

+

+uint32_t _sercom_get_default_pad(

+		Sercom *const sercom_module,

+		const uint8_t pad);

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif //__SERCOM_H_INCLUDED

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/sercom_interrupt.c b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/sercom_interrupt.c
new file mode 100644
index 0000000..042e5b3
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/sercom_interrupt.c
@@ -0,0 +1,164 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 Serial Peripheral Interface Driver

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+#include "sercom_interrupt.h"

+

+void *_sercom_instances[SERCOM_INST_NUM];

+

+/** Save status of initialized handlers. */

+static bool _handler_table_initialized = false;

+

+/** Void pointers for saving device instance structures. */

+static void (*_sercom_interrupt_handlers[SERCOM_INST_NUM])(const uint8_t instance);

+

+/**

+ * \internal

+ * Default interrupt handler.

+ *

+ * \param[in] instance SERCOM instance used.

+ */

+static void _sercom_default_handler(

+		const uint8_t instance)

+{

+	Assert(false);

+}

+

+/**

+ * \internal

+ * Find index of given instance.

+ *

+ * \param[in] sercom_instance  Instance pointer.

+ *

+ * \return Index of given instance.

+ */

+uint8_t _sercom_get_sercom_inst_index(

+		Sercom *const sercom_instance)

+{

+	/* Save all available SERCOM instances for compare. */

+	Sercom *sercom_instances[SERCOM_INST_NUM] = SERCOM_INSTS;

+

+	/* Find index for sercom instance. */

+	for (uint32_t i = 0; i < SERCOM_INST_NUM; i++) {

+		if ((uintptr_t)sercom_instance == (uintptr_t)sercom_instances[i]) {

+			return i;

+		}

+	}

+

+	/* Invalid data given. */

+	Assert(false);

+	return 0;

+}

+

+/**

+ * \internal

+ * Saves the given callback handler.

+ *

+ * \param[in]  instance           Instance index.

+ * \param[in]  interrupt_handler  Pointer to instance callback handler.

+ */

+void _sercom_set_handler(

+		const uint8_t instance,

+		const sercom_handler_t interrupt_handler)

+{

+	/* Initialize handlers with default handler and device instances with 0. */

+	if (_handler_table_initialized == false) {

+		for (uint32_t i = 0; i < SERCOM_INST_NUM; i++) {

+			_sercom_interrupt_handlers[i] = &_sercom_default_handler;

+			_sercom_instances[i] = NULL;

+		}

+

+		_handler_table_initialized = true;

+	}

+

+	/* Save interrupt handler. */

+	_sercom_interrupt_handlers[instance] = interrupt_handler;

+}

+

+

+/** \internal

+ * Converts a given SERCOM index to its interrupt vector index.

+ */

+#define _SERCOM_INTERRUPT_VECT_NUM(n, unused) \

+		SYSTEM_INTERRUPT_MODULE_SERCOM##n,

+

+/** \internal

+ * Generates a SERCOM interrupt handler function for a given SERCOM index.

+ */

+#define _SERCOM_INTERRUPT_HANDLER(n, unused) \

+		void SERCOM##n##_Handler(void) \

+		{ \

+			_sercom_interrupt_handlers[n](n); \

+		}

+

+/**

+ * \internal

+ * Returns the system interrupt vector.

+ *

+ * \param[in]  sercom_instance  Instance pointer

+ *

+ * \return Enum of system interrupt vector

+ * \retval SYSTEM_INTERRUPT_MODULE_SERCOM0

+ * \retval SYSTEM_INTERRUPT_MODULE_SERCOM1

+ * \retval SYSTEM_INTERRUPT_MODULE_SERCOM2

+ * \retval SYSTEM_INTERRUPT_MODULE_SERCOM3

+ * \retval SYSTEM_INTERRUPT_MODULE_SERCOM4

+ * \retval SYSTEM_INTERRUPT_MODULE_SERCOM5

+ * \retval SYSTEM_INTERRUPT_MODULE_SERCOM6

+ * \retval SYSTEM_INTERRUPT_MODULE_SERCOM7

+ */

+enum system_interrupt_vector _sercom_get_interrupt_vector(

+		Sercom *const sercom_instance)

+{

+	const uint8_t sercom_int_vectors[SERCOM_INST_NUM] =

+		{

+			MREPEAT(SERCOM_INST_NUM, _SERCOM_INTERRUPT_VECT_NUM, ~)

+		};

+

+	/* Retrieve the index of the SERCOM being requested */

+	uint8_t instance_index = _sercom_get_sercom_inst_index(sercom_instance);

+

+	/* Get the vector number from the lookup table for the requested SERCOM */

+	return (enum system_interrupt_vector)sercom_int_vectors[instance_index];

+}

+

+/** Auto-generate a set of interrupt handlers for each SERCOM in the device */

+MREPEAT(SERCOM_INST_NUM, _SERCOM_INTERRUPT_HANDLER, ~)

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/sercom_interrupt.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/sercom_interrupt.h
new file mode 100644
index 0000000..3435bd7
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/sercom_interrupt.h
@@ -0,0 +1,64 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 Serial Peripheral Interface Driver

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+#ifndef SERCOM_INTERRUPT_H_INCLUDED

+#define SERCOM_INTERRUPT_H_INCLUDED

+

+#include "sercom.h"

+#include <system_interrupt.h>

+

+/* Look-up table for device instances. */

+extern void *_sercom_instances[SERCOM_INST_NUM];

+

+typedef void (*sercom_handler_t)(uint8_t instance);

+

+uint8_t _sercom_get_sercom_inst_index(

+		Sercom *const sercom_instance);

+

+enum system_interrupt_vector _sercom_get_interrupt_vector(

+		Sercom *const sercom_instance);

+

+void _sercom_set_handler(

+		const uint8_t instance,

+		const sercom_handler_t interrupt_handler);

+

+#endif /* SERCOM_INTERRUPT_H_INCLUDED */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/sercom_pinout.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/sercom_pinout.h
new file mode 100644
index 0000000..375d1e3
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/sercom_pinout.h
@@ -0,0 +1,84 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 SERCOM Module Pinout Definitions

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+#ifndef SERCOM_PINOUT_H_INCLUDED

+#define SERCOM_PINOUT_H_INCLUDED

+

+#include "sercom.h"

+

+/* SERCOM0 */

+#define SERCOM0_PAD0_DEFAULT      PINMUX_PA04D_SERCOM0_PAD0

+#define SERCOM0_PAD1_DEFAULT      PINMUX_PA05D_SERCOM0_PAD1

+#define SERCOM0_PAD2_DEFAULT      PINMUX_PA06D_SERCOM0_PAD2

+#define SERCOM0_PAD3_DEFAULT      PINMUX_PA07D_SERCOM0_PAD3

+

+/* SERCOM1 */

+#define SERCOM1_PAD0_DEFAULT      PINMUX_PA00D_SERCOM1_PAD0

+#define SERCOM1_PAD1_DEFAULT      PINMUX_PA01D_SERCOM1_PAD1

+#define SERCOM1_PAD2_DEFAULT      PINMUX_PA30D_SERCOM1_PAD2

+#define SERCOM1_PAD3_DEFAULT      PINMUX_PA31D_SERCOM1_PAD3

+

+/* SERCOM2 */

+#define SERCOM2_PAD0_DEFAULT      PINMUX_PA08D_SERCOM2_PAD0

+#define SERCOM2_PAD1_DEFAULT      PINMUX_PA09D_SERCOM2_PAD1

+#define SERCOM2_PAD2_DEFAULT      PINMUX_PA10D_SERCOM2_PAD2

+#define SERCOM2_PAD3_DEFAULT      PINMUX_PA11D_SERCOM2_PAD3

+

+/* SERCOM3 */

+#define SERCOM3_PAD0_DEFAULT      PINMUX_PA16D_SERCOM3_PAD0

+#define SERCOM3_PAD1_DEFAULT      PINMUX_PA17D_SERCOM3_PAD1

+#define SERCOM3_PAD2_DEFAULT      PINMUX_PA18D_SERCOM3_PAD2

+#define SERCOM3_PAD3_DEFAULT      PINMUX_PA19D_SERCOM3_PAD3

+

+/* SERCOM4 */

+#define SERCOM4_PAD0_DEFAULT      PINMUX_PA12D_SERCOM4_PAD0

+#define SERCOM4_PAD1_DEFAULT      PINMUX_PA13D_SERCOM4_PAD1

+#define SERCOM4_PAD2_DEFAULT      PINMUX_PA14D_SERCOM4_PAD2

+#define SERCOM4_PAD3_DEFAULT      PINMUX_PA15D_SERCOM4_PAD3

+

+/* SERCOM5 */

+#define SERCOM5_PAD0_DEFAULT      PINMUX_PA22D_SERCOM5_PAD0

+#define SERCOM5_PAD1_DEFAULT      PINMUX_PA23D_SERCOM5_PAD1

+#define SERCOM5_PAD2_DEFAULT      PINMUX_PA24D_SERCOM5_PAD2

+#define SERCOM5_PAD3_DEFAULT      PINMUX_PA25D_SERCOM5_PAD3

+

+#endif /* SERCOM_PINOUT_H_INCLUDED */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/usart/quick_start/qs_usart_basic_use.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/usart/quick_start/qs_usart_basic_use.h
new file mode 100644
index 0000000..4b6b57d
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/usart/quick_start/qs_usart_basic_use.h
@@ -0,0 +1,113 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 USART Interface Driver

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+

+/**

+ * \page asfdoc_samd20_sercom_usart_basic_use_case Quick Start Guide for SERCOM USART - Basic

+ *

+ * This quick start will echo back characters typed into the terminal. In this

+ * use case the USART will be configured with the following settings:

+ * - Asynchronous mode

+ * - 9600 Baudrate

+ * - 8-bits, No Parity and 1 Stop Bit

+ * - TX and RX enabled and connected to the Xplained PRO Embedded Debugger virtual COM port

+ *

+ * \section asfdoc_samd20_sercom_usart_basic_use_case_setup Setup

+ *

+ * \subsection asfdoc_samd20_sercom_usart_basic_use_case_prereq Prerequisites

+ * There are no special setup requirements for this use-case.

+ *

+ * \subsection asfdoc_samd20_usart_basic_use_case_setup_code Code

+ * Add to the main application source file, outside of any functions:

+ * \snippet qs_usart_basic_use.c module_inst

+ *

+ * Copy-paste the following setup code to your user application:

+ * \snippet qs_usart_basic_use.c setup

+ *

+ * Add to user application initialization (typically the start of \c main()):

+ * \snippet qs_usart_basic_use.c setup_init

+ *

+ * \subsection asfdoc_samd20_usart_basic_use_case_setup_flow Workflow

+ * -# Create a module software instance structure for the USART module to store

+ *    the USART driver state while it is in use.

+ *    \note This should never go out of scope as long as the module is in use.

+ *          In most cases, this should be global.

+ *

+ *    \snippet qs_usart_basic_use.c module_inst

+ * -# Configure the USART module.

+ *  -# Create a USART module configuration struct, which can be filled out to

+ *     adjust the configuration of a physical USART peripheral.

+ *     \snippet qs_usart_basic_use.c setup_config

+ *  -# Initialize the USART configuration struct with the module's default values.

+ *     \note This should always be performed before using the configuration

+ *           struct to ensure that all values are initialized to known default

+ *           settings.

+ *

+ *     \snippet qs_usart_basic_use.c setup_config_defaults

+ *  -# Alter the USART settings to configure the physical pinout, baud rate and

+ *     other relevant parameters.

+ *     \snippet qs_usart_basic_use.c setup_change_config

+ *  -# Configure the USART module with the desired settings, retrying while the

+ *     driver is busy until the configuration is stressfully set.

+ *     \snippet qs_usart_basic_use.c setup_set_config

+ *  -# Enable the USART module.

+ *     \snippet qs_usart_basic_use.c setup_enable

+ *

+ *

+ * \section asfdoc_samd20_usart_basic_use_case_main Use Case

+ *

+ * \subsection asfdoc_samd20_usart_basic_use_case_main_code Code

+ * Copy-paste the following code to your user application:

+ * \snippet qs_usart_basic_use.c main

+ *

+ * \subsection asfdoc_samd20_usart_basic_use_case_main_flow Workflow

+ * -# Send a string to the USART to show the demo is running, blocking until

+ *    all characters have been sent.

+ *  \snippet qs_usart_basic_use.c main_send_string

+ * -# Enter an infinite loop to continuously echo received values on the USART.

+ *  \snippet qs_usart_basic_use.c main_loop

+ * -# Perform a blocking read of the USART, storing the received character into

+ *    the previously declared temporary variable.

+ *  \snippet qs_usart_basic_use.c main_read

+ * -# Echo the received variable back to the USART via a blocking write.

+ *  \snippet qs_usart_basic_use.c main_write

+ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/usart/quick_start_callback/qs_usart_callback.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/usart/quick_start_callback/qs_usart_callback.h
new file mode 100644
index 0000000..2752266
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/usart/quick_start_callback/qs_usart_callback.h
@@ -0,0 +1,127 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 USART Interface Driver

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+

+/**

+ * \page asfdoc_samd20_sercom_usart_callback_use_case Quick Start Guide for SERCOM USART - Callback

+ *

+ * This quick start will echo back characters typed into the terminal, using

+ * asynchronous TX and RX callbacks from the USART peripheral. In this use case

+ * the USART will be configured with the following settings:

+ * - Asynchronous mode

+ * - 9600 Baudrate

+ * - 8-bits, No Parity and 1 Stop Bit

+ * - TX and RX enabled and connected to the Xplained PRO Embedded Debugger virtual COM port

+ *

+ * \section asfdoc_samd20_sercom_usart_callback_use_case_setup Setup

+ *

+ * \subsection asfdoc_samd20_sercom_usart_callback_use_case_prereq Prerequisites

+ * There are no special setup requirements for this use-case.

+ *

+ * \subsection asfdoc_samd20_usart_callback_use_case_setup_code Code

+ * Add to the main application source file, outside of any functions:

+ * \snippet qs_usart_callback.c module_inst

+ * \snippet qs_usart_callback.c rx_buffer_var

+ *

+ * Copy-paste the following callback function code to your user application:

+ * \snippet qs_usart_callback.c callback_funcs

+ *

+ * Copy-paste the following setup code to your user application:

+ * \snippet qs_usart_callback.c setup

+ *

+ * Add to user application initialization (typically the start of \c main()):

+ * \snippet qs_usart_callback.c setup_init

+ *

+ * \subsection asfdoc_samd20_usart_callback_use_case_setup_flow Workflow

+ * -# Create a module software instance structure for the USART module to store

+ *    the USART driver state while it is in use.

+ *    \note This should never go out of scope as long as the module is in use.

+ *          In most cases, this should be global.

+ *

+ *    \snippet qs_usart_callback.c module_inst

+ * -# Configure the USART module.

+ *  -# Create a USART module configuration struct, which can be filled out to

+ *     adjust the configuration of a physical USART peripheral.

+ *     \snippet qs_usart_callback.c setup_config

+ *  -# Initialize the USART configuration struct with the module's default values.

+ *     \note This should always be performed before using the configuration

+ *           struct to ensure that all values are initialized to known default

+ *           settings.

+ *

+ *     \snippet qs_usart_callback.c setup_config_defaults

+ *  -# Alter the USART settings to configure the physical pinout, baud rate and

+ *     other relevant parameters.

+ *     \snippet qs_usart_callback.c setup_change_config

+ *  -# Configure the USART module with the desired settings, retrying while the

+ *     driver is busy until the configuration is stressfully set.

+ *     \snippet qs_usart_callback.c setup_set_config

+ *  -# Enable the USART module.

+ *     \snippet qs_usart_callback.c setup_enable

+ * -# Configure the USART callbacks.

+ *  -# Register the TX and RX callback functions with the driver.

+ *     \snippet qs_usart_callback.c setup_register_callbacks

+ *  -# Enable the TX and RX callbacks so that they will be called by the driver

+ *     when appropriate.

+ *     \snippet qs_usart_callback.c setup_enable_callbacks

+ *

+ * \section asfdoc_samd20_usart_callback_use_case_main Use Case

+ *

+ * \subsection asfdoc_samd20_usart_callback_use_case_main_code Code

+ * Copy-paste the following code to your user application:

+ * \snippet qs_usart_callback.c main

+ *

+ * \subsection asfdoc_samd20_usart_callback_use_case_main_flow Workflow

+ * -# Enable global interrupts, so that the callbacks can be fired.

+ *  \snippet qs_usart_callback.c enable_global_interrupts

+ * -# Send a string to the USART to show the demo is running, blocking until

+ *    all characters have been sent.

+ *  \snippet qs_usart_callback.c main_send_string

+ * -# Enter an infinite loop to continuously echo received values on the USART.

+ *  \snippet qs_usart_callback.c main_loop

+ * -# Perform an asynchronous read of the USART, which will fire the registered

+ *    callback when characters are received.

+ *  \snippet qs_usart_callback.c main_read

+ */

+

+#include <asf.h>

+#include <conf_clocks.h>

+

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/usart/usart.c b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/usart/usart.c
new file mode 100644
index 0000000..f262a10
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/usart/usart.c
@@ -0,0 +1,779 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 SERCOM USART Driver

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+#include "usart.h"

+#include <pinmux.h>

+#if USART_CALLBACK_MODE == true

+#  include "usart_interrupt.h"

+#endif

+

+/**

+ * \internal Checks a USART config against current set config

+ *

+ * This function will check that the config does not alter the

+ * configuration of the module. If the new config changes any

+ * setting, the initialization will be discarded.

+ *

+ * \param[in]  module  Pointer to the software instance struct

+ * \param[in]  config  Pointer to the configuration struct

+ *

+ * \return The status of the configuration

+ * \retval STATUS_ERR_INVALID_ARG       If invalid argument(s) were provided.

+ * \retval STATUS_ERR_DENIED            If configuration was different from previous

+ * \retval STATUS_OK                    If the configuration was written

+ */

+static enum status_code _usart_check_config(

+		struct usart_module *const module,

+		const struct usart_config *const config)

+{

+		/* Sanity check arguments */

+	Assert(module);

+	Assert(module->hw);

+

+	SercomUsart *const usart_hw = &(module->hw->USART);

+	Sercom *const hw = (module->hw);

+

+	uint32_t pad0 = config->pinmux_pad0;

+	uint32_t pad1 = config->pinmux_pad1;

+	uint32_t pad2 = config->pinmux_pad2;

+	uint32_t pad3 = config->pinmux_pad3;

+

+	/* SERCOM PAD0 */

+	if (pad0 == PINMUX_DEFAULT) {

+		pad0 = _sercom_get_default_pad(hw, 0);

+	}

+	if ((pad0 != PINMUX_UNUSED) && ((pad0 & 0xFFFF)!=

+			system_pinmux_pin_get_mux_position(pad0 >> 16))) {

+		return STATUS_ERR_DENIED;

+	}

+

+	/* SERCOM PAD1 */

+	if (pad1 == PINMUX_DEFAULT) {

+		pad1 = _sercom_get_default_pad(hw, 1);

+	}

+	if ((pad1 != PINMUX_UNUSED) && ((pad1 & 0xFFFF) !=

+			system_pinmux_pin_get_mux_position(pad1 >> 16))) {

+		return STATUS_ERR_DENIED;

+	}

+

+	/* SERCOM PAD2 */

+	if (pad2 == PINMUX_DEFAULT) {

+		pad2 = _sercom_get_default_pad(hw, 2);

+	}

+	if ((pad2 != PINMUX_UNUSED) && ((pad2 & 0xFFFF) !=

+			system_pinmux_pin_get_mux_position(pad2 >> 16))) {

+		return STATUS_ERR_DENIED;

+	}

+

+	/* SERCOM PAD3 */

+	if (pad3 == PINMUX_DEFAULT) {

+		pad3 = _sercom_get_default_pad(hw, 3);

+	}

+	if ((pad3 != PINMUX_UNUSED) && ((pad3 & 0xFFFF) !=

+			system_pinmux_pin_get_mux_position(pad3 >> 16))) {

+		return STATUS_ERR_DENIED;

+	}

+

+	/* Find baud value and compare it */

+	uint16_t baud  = 0;

+	enum status_code status_code = STATUS_OK;

+

+	switch (config->transfer_mode)

+	{

+	case USART_TRANSFER_SYNCHRONOUSLY:

+		if (!config->use_external_clock) {

+			status_code = _sercom_get_sync_baud_val(config->baudrate,

+					system_gclk_chan_get_hz(SERCOM_GCLK_ID), &baud);

+		}

+

+		break;

+

+	case USART_TRANSFER_ASYNCHRONOUSLY:

+		if (config->use_external_clock) {

+			status_code =

+					_sercom_get_async_baud_val(config->baudrate,

+						config->ext_clock_freq, &baud);

+		} else {

+			status_code =

+					_sercom_get_async_baud_val(config->baudrate,

+						system_gclk_chan_get_hz(SERCOM_GCLK_ID), &baud);

+		}

+

+		break;

+	}

+

+	if (status_code != STATUS_OK) {

+		/* Baud rate calculation error, return status code */

+		return STATUS_ERR_DENIED;

+	}

+

+	if (usart_hw->BAUD.reg != baud) {

+		return STATUS_ERR_DENIED;

+	}

+

+	uint32_t ctrla = 0;

+	uint32_t ctrlb = 0;

+

+	/* Check sample mode, data order, internal muxing, and clock polarity */

+	ctrla = (uint32_t)config->data_order |

+		(uint32_t)config->mux_setting |

+		(uint32_t)config->transfer_mode |

+		SERCOM_USART_CTRLA_MODE(0) |

+		(config->clock_polarity_inverted << SERCOM_USART_CTRLA_CPOL_Pos);

+

+	/* set enable bit */

+	ctrla |= (SERCOM_USART_CTRLA_ENABLE);

+

+	if (config->use_external_clock == false) {

+		ctrla |= SERCOM_USART_CTRLA_MODE_USART_INT_CLK;

+	}

+	else {

+		ctrla |= SERCOM_USART_CTRLA_MODE_USART_EXT_CLK;

+	}

+

+	/* Check stopbits and character size */

+	ctrlb = (uint32_t)config->stopbits | (uint32_t)config->character_size |

+			(config->receiver_enable << SERCOM_USART_CTRLB_RXEN_Pos) |

+			(config->transmitter_enable << SERCOM_USART_CTRLB_TXEN_Pos);

+

+	/* Check parity mode bits */

+	if (config->parity != USART_PARITY_NONE) {

+		ctrla |= SERCOM_USART_CTRLA_FORM(1);

+		ctrlb |= config->parity;

+	} else {

+		ctrla |= SERCOM_USART_CTRLA_FORM(0);

+	}

+

+	if (usart_hw->CTRLA.reg == ctrla && usart_hw->CTRLB.reg == ctrlb) {

+		module->character_size = config->character_size;

+		return STATUS_OK;

+	} else {

+		module->hw = NULL;

+		return STATUS_ERR_DENIED;

+	}

+}

+

+/**

+ * \internal

+ * Set Configuration of the USART module

+ */

+static enum status_code _usart_set_config(

+		struct usart_module *const module,

+		const struct usart_config *const config)

+{

+	/* Sanity check arguments */

+	Assert(module);

+	Assert(module->hw);

+

+	/* Get a pointer to the hardware module instance */

+	SercomUsart *const usart_hw = &(module->hw->USART);

+

+	/* Index for generic clock */

+	uint32_t sercom_index = _sercom_get_sercom_inst_index(module->hw);

+	uint32_t gclk_index   = sercom_index + SERCOM0_GCLK_ID_CORE;

+

+	/* Cache new register values to minimize the number of register writes */

+	uint32_t ctrla = 0;

+	uint32_t ctrlb = 0;

+	uint16_t baud  = 0;

+

+	/* Set data order, internal muxing, and clock polarity */

+	ctrla = (uint32_t)config->data_order |

+		(uint32_t)config->mux_setting |

+		(config->clock_polarity_inverted << SERCOM_USART_CTRLA_CPOL_Pos);

+

+	enum status_code status_code = STATUS_OK;

+

+	/* Get baud value from mode and clock */

+	switch (config->transfer_mode)

+	{

+		case USART_TRANSFER_SYNCHRONOUSLY:

+			if (!config->use_external_clock) {

+				status_code = _sercom_get_sync_baud_val(config->baudrate,

+						system_gclk_chan_get_hz(gclk_index), &baud);

+			}

+

+			break;

+

+		case USART_TRANSFER_ASYNCHRONOUSLY:

+			if (config->use_external_clock) {

+				status_code =

+						_sercom_get_async_baud_val(config->baudrate,

+							config->ext_clock_freq, &baud);

+			} else {

+				status_code =

+						_sercom_get_async_baud_val(config->baudrate,

+							system_gclk_chan_get_hz(gclk_index), &baud);

+			}

+

+			break;

+	}

+

+	/* Check if calculating the baud rate failed */

+	if (status_code != STATUS_OK) {

+		/* Abort */

+		return status_code;

+	}

+

+	/* Wait until synchronization is complete */

+	_usart_wait_for_sync(module);

+

+	/*Set baud val */

+	usart_hw->BAUD.reg = baud;

+

+	/* Set sample mode */

+	ctrla |= config->transfer_mode;

+

+	if (config->use_external_clock == false) {

+		ctrla |= SERCOM_USART_CTRLA_MODE_USART_INT_CLK;

+	}

+	else {

+		ctrla |= SERCOM_USART_CTRLA_MODE_USART_EXT_CLK;

+	}

+

+	/* Set stopbits, character size and enable transceivers */

+	ctrlb = (uint32_t)config->stopbits | (uint32_t)config->character_size |

+			(config->receiver_enable << SERCOM_USART_CTRLB_RXEN_Pos) |

+			(config->transmitter_enable << SERCOM_USART_CTRLB_TXEN_Pos);

+

+	/* Set parity mode */

+	if (config->parity != USART_PARITY_NONE) {

+		ctrla |= SERCOM_USART_CTRLA_FORM(1);

+		ctrlb |= config->parity;

+	} else {

+		ctrla |= SERCOM_USART_CTRLA_FORM(0);

+	}

+

+	/* Set run mode during device sleep */

+	if (config->run_in_standby) {

+		/* Enable in sleep mode */

+		ctrla |= SERCOM_USART_CTRLA_RUNSTDBY;

+	}

+

+	/* Wait until synchronization is complete */

+	_usart_wait_for_sync(module);

+

+	/* Write configuration to CTRLB */

+	usart_hw->CTRLB.reg = ctrlb;

+

+	/* Wait until synchronization is complete */

+	_usart_wait_for_sync(module);

+

+	/* Write configuration to CTRLA */

+	usart_hw->CTRLA.reg = ctrla;

+

+	return STATUS_OK;

+}

+

+/**

+ * \brief Initializes the device

+ *

+ * Initializes the USART device based on the setting specified in the

+ * configuration struct.

+ *

+ * \param[out] module  Pointer to USART device

+ * \param[in]  hw      Pointer to USART hardware instance

+ * \param[in]  config  Pointer to configuration struct

+ *

+ * \return Status of the initialization

+ *

+ * \retval STATUS_OK                       The initialization was successful

+ * \retval STATUS_BUSY                     The USART module is busy

+ *                                         resetting

+ * \retval STATUS_ERR_DENIED               The USART have not been disabled in

+ *                                         advance of initialization

+ * \retval STATUS_ERR_INVALID_ARG          The configuration struct contains

+ *                                         invalid configuration

+ * \retval STATUS_ERR_ALREADY_INITIALIZED  The SERCOM instance has already been

+ *                                         initialized with different clock

+ *                                         configuration

+ * \retval STATUS_ERR_BAUD_UNAVAILABLE     The BAUD rate given by the

+ *                                         configuration

+ *                                         struct cannot be reached with

+ *                                         the current clock configuration

+ */

+enum status_code usart_init(

+		struct usart_module *const module,

+		Sercom *const hw,

+		const struct usart_config *const config)

+{

+	/* Sanity check arguments */

+	Assert(module);

+	Assert(hw);

+	Assert(config);

+

+	enum status_code status_code = STATUS_OK;

+

+	/* Assign module pointer to software instance struct */

+	module->hw = hw;

+

+	/* Get a pointer to the hardware module instance */

+	SercomUsart *const usart_hw = &(module->hw->USART);

+

+	uint32_t sercom_index = _sercom_get_sercom_inst_index(module->hw);

+	uint32_t pm_index     = sercom_index + PM_APBCMASK_SERCOM0_Pos;

+	uint32_t gclk_index   = sercom_index + SERCOM0_GCLK_ID_CORE;

+

+	if (usart_hw->CTRLA.reg & SERCOM_USART_CTRLA_SWRST) {

+		/* The module is busy resetting itself */

+		return STATUS_BUSY;

+	}

+

+	if (usart_hw->CTRLA.reg & SERCOM_USART_CTRLA_ENABLE) {

+		/* Check if the new setting are the same as the old */

+		return _usart_check_config(module, config);

+	}

+

+	/* Turn on module in PM */

+	system_apb_clock_set_mask(SYSTEM_CLOCK_APB_APBC, 1 << pm_index);

+

+	/* Set up the GCLK for the module */

+	struct system_gclk_chan_config gclk_chan_conf;

+	system_gclk_chan_get_config_defaults(&gclk_chan_conf);

+	gclk_chan_conf.source_generator = config->generator_source;

+	system_gclk_chan_set_config(gclk_index, &gclk_chan_conf);

+	system_gclk_chan_enable(gclk_index);

+	sercom_set_gclk_generator(config->generator_source, false);

+

+	/* Set character size */

+	module->character_size = config->character_size;

+

+	/* Set transmitter and receiver status */

+	module->receiver_enabled = config->receiver_enable;

+	module->transmitter_enabled = config->transmitter_enable;

+

+	/* Configure Pins */

+	struct system_pinmux_config pin_conf;

+	system_pinmux_get_config_defaults(&pin_conf);

+	pin_conf.direction = SYSTEM_PINMUX_PIN_DIR_INPUT;

+

+	/* Set configuration according to the config struct */

+	status_code = _usart_set_config(module, config);

+	if(status_code != STATUS_OK) {

+		return status_code;

+	}

+

+	uint32_t pad0 = config->pinmux_pad0;

+	uint32_t pad1 = config->pinmux_pad1;

+	uint32_t pad2 = config->pinmux_pad2;

+	uint32_t pad3 = config->pinmux_pad3;

+

+	/* SERCOM PAD0 */

+	if (pad0 == PINMUX_DEFAULT) {

+		pad0 = _sercom_get_default_pad(hw, 0);

+	}

+	if (pad0 != PINMUX_UNUSED) {

+		pin_conf.mux_position = pad0 & 0xFFFF;

+		system_pinmux_pin_set_config(pad0 >> 16, &pin_conf);

+	}

+

+	/* SERCOM PAD1 */

+	if (pad1 == PINMUX_DEFAULT) {

+		pad1 = _sercom_get_default_pad(hw, 1);

+	}

+	if (pad1 != PINMUX_UNUSED) {

+		pin_conf.mux_position = pad1 & 0xFFFF;

+		system_pinmux_pin_set_config(pad1 >> 16, &pin_conf);

+	}

+

+	/* SERCOM PAD2 */

+	if (pad2 == PINMUX_DEFAULT) {

+		pad2 = _sercom_get_default_pad(hw, 2);

+	}

+	if (pad2 != PINMUX_UNUSED) {

+		pin_conf.mux_position = pad2 & 0xFFFF;

+		system_pinmux_pin_set_config(pad2 >> 16, &pin_conf);

+	}

+

+	/* SERCOM PAD3 */

+	if (pad3 == PINMUX_DEFAULT) {

+		pad3 = _sercom_get_default_pad(hw, 3);

+	}

+	if (pad3 != PINMUX_UNUSED) {

+		pin_conf.mux_position = pad3 & 0xFFFF;

+		system_pinmux_pin_set_config(pad3 >> 16, &pin_conf);

+	}

+#if USART_CALLBACK_MODE == true

+	/* Initialize parameters */

+	for (uint32_t i = 0; i < USART_CALLBACK_N; i++) {

+		module->callback[i]            = NULL;

+	}

+

+	module->tx_buffer_ptr              = NULL;

+	module->rx_buffer_ptr              = NULL;

+	module->remaining_tx_buffer_length = 0x0000;

+	module->remaining_rx_buffer_length = 0x0000;

+	module->callback_reg_mask          = 0x00;

+	module->callback_enable_mask       = 0x00;

+	module->rx_status                  = STATUS_OK;

+	module->tx_status                  = STATUS_OK;

+

+	/* Set interrupt handler and register USART software module struct in

+	 * look-up table */

+	uint8_t instance_index = _sercom_get_sercom_inst_index(module->hw);

+	_sercom_set_handler(instance_index, _usart_interrupt_handler);

+	_sercom_instances[instance_index] = module;

+#endif

+	return status_code;

+}

+

+/**

+ * \brief Transmit a character via the USART

+ *

+ * This blocking function will transmit a single character via the

+ * USART.

+ *

+ * \param[in]  module   Pointer to the software instance struct

+ * \param[in]  tx_data  Data to transfer

+ *

+ * \return Status of the operation

+ * \retval STATUS_OK         If the operation was completed

+ * \retval STATUS_BUSY       If the operation was not completed, due to the USART

+ *                           module being busy.

+ * \retval STATUS_ERR_DENIED If the transmitter is not enabled

+ */

+enum status_code usart_write_wait(

+		struct usart_module *const module,

+		const uint16_t tx_data)

+{

+	/* Sanity check arguments */

+	Assert(module);

+	Assert(module->hw);

+

+	/* Get a pointer to the hardware module instance */

+	SercomUsart *const usart_hw = &(module->hw->USART);

+

+	/* Check that the transmitter is enabled */

+	if (!(module->transmitter_enabled)) {

+		return STATUS_ERR_DENIED;

+	}

+

+#if USART_CALLBACK_MODE == true

+	/* Check if the USART is busy doing asynchronous operation. */

+	if (module->remaining_tx_buffer_length > 0) {

+		return STATUS_BUSY;

+	}

+

+#else

+	/* Check if USART is ready for new data */

+	if (!(usart_hw->INTFLAG.reg & SERCOM_USART_INTFLAG_DRE)) {

+		/* Return error code */

+		return STATUS_BUSY;

+	}

+#endif

+

+	/* Wait until synchronization is complete */

+	_usart_wait_for_sync(module);

+

+	/* Write data to USART module */

+	usart_hw->DATA.reg = tx_data;

+

+	while (!(usart_hw->INTFLAG.reg & SERCOM_USART_INTFLAG_TXC)) {

+		/* Wait until data is sent */

+	}

+

+	return STATUS_OK;

+}

+

+/**

+ * \brief Receive a character via the USART

+ *

+ * This blocking function will receive a character via the USART.

+ *

+ * \param[in]   module   Pointer to the software instance struct

+ * \param[out]  rx_data  Pointer to received data

+ *

+ * \return Status of the operation

+ * \retval STATUS_OK                If the operation was completed

+ * \retval STATUS_BUSY              If the operation was not completed,

+ *                                  due to the USART module being busy

+ * \retval STATUS_ERR_BAD_FORMAT    If the operation was not completed,

+ *                                  due to configuration mismatch between USART

+ *                                  and the sender

+ * \retval STATUS_ERR_BAD_OVERFLOW  If the operation was not completed,

+ *                                  due to the baud rate being too low or the

+ *                                  system frequency being too high

+ * \retval STATUS_ERR_BAD_DATA      If the operation was not completed, due to

+ *                                  data being corrupted

+ * \retval STATUS_ERR_DENIED        If the receiver is not enabled

+ */

+enum status_code usart_read_wait(

+		struct usart_module *const module,

+		uint16_t *const rx_data)

+{

+	/* Sanity check arguments */

+	Assert(module);

+	Assert(module->hw);

+

+	/* Error variable */

+	uint8_t error_code;

+

+	/* Get a pointer to the hardware module instance */

+	SercomUsart *const usart_hw = &(module->hw->USART);

+

+	/* Check that the receiver is enabled */

+	if (!(module->receiver_enabled)) {

+		return STATUS_ERR_DENIED;

+	}

+

+#if USART_CALLBACK_MODE == true

+	/* Check if the USART is busy doing asynchronous operation. */

+	if (module->remaining_rx_buffer_length > 0) {

+		return STATUS_BUSY;

+	}

+

+#else

+	/* Check if USART has new data */

+	if (!(usart_hw->INTFLAG.reg & SERCOM_USART_INTFLAG_RXC)) {

+		/* Return error code */

+		return STATUS_BUSY;

+	}

+#endif

+

+	/* Wait until synchronization is complete */

+	_usart_wait_for_sync(module);

+

+	/* Read out the status code and mask away all but the 3 LSBs*/

+	error_code = (uint8_t)(usart_hw->STATUS.reg & SERCOM_USART_STATUS_MASK);

+

+	/* Check if an error has occurred during the receiving */

+	if (error_code) {

+		/* Check which error occurred */

+		if (error_code & SERCOM_USART_STATUS_FERR) {

+			/* Clear flag by writing a 1 to it and

+			 * return with an error code */

+			usart_hw->STATUS.reg = SERCOM_USART_STATUS_FERR;

+

+			return STATUS_ERR_BAD_FORMAT;

+		} else if (error_code & SERCOM_USART_STATUS_BUFOVF) {

+			/* Clear flag by writing a 1 to it and

+			 * return with an error code */

+			usart_hw->STATUS.reg = SERCOM_USART_STATUS_BUFOVF;

+

+			return STATUS_ERR_OVERFLOW;

+		} else if (error_code & SERCOM_USART_STATUS_PERR) {

+			/* Clear flag by writing a 1 to it and

+			 * return with an error code */

+			usart_hw->STATUS.reg = SERCOM_USART_STATUS_PERR;

+

+			return STATUS_ERR_BAD_DATA;

+		}

+	}

+

+	/* Read data from USART module */

+	*rx_data = usart_hw->DATA.reg;

+

+	return STATUS_OK;

+}

+

+/**

+ * \brief Transmit a buffer of characters via the USART

+ *

+ * This blocking function will transmit a block of \c length characters

+ * via the USART

+ *

+ * \note Using this function in combination with the interrupt (\c _job) functions is

+ *       not recommended as it has no functionality to check if there is an

+ *       ongoing interrupt driven operation running or not.

+ *

+ * \param[in]  module   Pointer to USART software instance struct

+ * \param[in]  tx_data  Pointer to data to transmit

+ * \param[in]  length   Number of characters to transmit

+ *

+ * \return Status of the operation

+ * \retval STATUS_OK              If operation was completed

+ * \retval STATUS_ERR_INVALID_ARG If operation was not completed, due to invalid

+ *                                arguments

+ * \retval STATUS_ERR_TIMEOUT     If operation was not completed, due to USART

+ *                                module timing out

+ * \retval STATUS_ERR_DENIED      If the transmitter is not enabled

+ */

+enum status_code usart_write_buffer_wait(

+		struct usart_module *const module,

+		const uint8_t *tx_data,

+		uint16_t length)

+{

+	/* Sanity check arguments */

+	Assert(module);

+	Assert(module->hw);

+

+	/* Check if the buffer length is valid */

+	if (length == 0) {

+		return STATUS_ERR_INVALID_ARG;

+	}

+

+	/* Check that the transmitter is enabled */

+	if (!(module->transmitter_enabled)) {

+		return STATUS_ERR_DENIED;

+	}

+

+	/* Get a pointer to the hardware module instance */

+	SercomUsart *const usart_hw = &(module->hw->USART);

+

+	/* Wait until synchronization is complete */

+	_usart_wait_for_sync(module);

+

+	uint16_t tx_pos = 0;

+

+	/* Blocks while buffer is being transferred */

+	while (length--) {

+		/* Wait for the USART to be ready for new data and abort

+		* operation if it doesn't get ready within the timeout*/

+		for (uint32_t i = 0; i <= USART_TIMEOUT; i++) {

+			if (usart_hw->INTFLAG.reg & SERCOM_USART_INTFLAG_DRE) {

+				break;

+			} else if (i == USART_TIMEOUT) {

+				return STATUS_ERR_TIMEOUT;

+			}

+		}

+

+		/* Data to send is at least 8 bits long */

+		uint16_t data_to_send = tx_data[tx_pos++];

+

+		/* Check if the character size exceeds 8 bit */

+		if (module->character_size == USART_CHARACTER_SIZE_9BIT) {

+			data_to_send |= (tx_data[tx_pos++] << 8);

+		}

+

+		/* Send the data through the USART module */

+		usart_write_wait(module, data_to_send);

+	}

+

+	/* Wait until Transmit is complete or timeout */

+	for (uint32_t i = 0; i <= USART_TIMEOUT; i++) {

+		if (usart_hw->INTFLAG.reg & SERCOM_USART_INTFLAG_TXC) {

+			break;

+		} else if (i == USART_TIMEOUT) {

+			return STATUS_ERR_TIMEOUT;

+		}

+	}

+

+	return STATUS_OK;

+}

+

+/**

+ * \brief Receive a buffer of \c length characters via the USART

+ *

+ * This blocking function will receive a block of \c length characters

+ * via the USART.

+ *

+ * \note Using this function in combination with the interrupt (\c *_job)

+ *       functions is not recommended as it has no functionality to check if

+ *       there is an ongoing interrupt driven operation running or not.

+ *

+ * \param[in]  module   Pointer to USART software instance struct

+ * \param[out] rx_data  Pointer to receive buffer

+ * \param[in]  length   Number of characters to receive

+ *

+ * \return Status of the operation.

+ * \retval STATUS_OK                If operation was completed

+ * \retval STATUS_ERR_INVALID_ARG   If operation was not completed, due to an

+ *                                  invalid argument being supplied

+ * \retval STATUS_ERR_TIMEOUT       If operation was not completed, due

+ *                                  to USART module timing out

+ * \retval STATUS_ERR_BAD_FORMAT    If the operation was not completed,

+ *                                  due to a configuration mismatch

+ *                                  between USART and the sender

+ * \retval STATUS_ERR_BAD_OVERFLOW  If the operation was not completed,

+ *                                  due to the baud rate being too low or the

+ *                                  system frequency being too high

+ * \retval STATUS_ERR_BAD_DATA      If the operation was not completed, due

+ *                                  to data being corrupted

+ * \retval STATUS_ERR_DENIED        If the receiver is not enabled

+ */

+enum status_code usart_read_buffer_wait(

+		struct usart_module *const module,

+		uint8_t *rx_data,

+		uint16_t length)

+{

+	/* Sanity check arguments */

+	Assert(module);

+	Assert(module->hw);

+

+	/* Check if the buffer length is valid */

+	if (length == 0) {

+		return STATUS_ERR_INVALID_ARG;

+	}

+

+	/* Check that the receiver is enabled */

+	if (!(module->receiver_enabled)) {

+		return STATUS_ERR_DENIED;

+	}

+

+	/* Get a pointer to the hardware module instance */

+	SercomUsart *const usart_hw = &(module->hw->USART);

+

+	uint16_t rx_pos = 0;

+

+	/* Blocks while buffer is being received */

+	while (length--) {

+		/* Wait for the USART to have new data and abort operation if it

+		 * doesn't get ready within the timeout*/

+		for (uint32_t i = 0; i <= USART_TIMEOUT; i++) {

+			if (usart_hw->INTFLAG.reg & SERCOM_USART_INTFLAG_RXC) {

+				break;

+			} else if (i == USART_TIMEOUT) {

+				return STATUS_ERR_TIMEOUT;

+			}

+		}

+

+		enum status_code retval;

+		uint16_t received_data = 0;

+

+		retval = usart_read_wait(module, &received_data);

+

+		if (retval != STATUS_OK) {

+			/* Overflow, abort */

+			return retval;

+		}

+

+		/* Read value will be at least 8-bits long */

+		rx_data[rx_pos++] = received_data;

+

+		/* If 9-bit data, write next received byte to the buffer */

+		if (module->character_size == USART_CHARACTER_SIZE_9BIT) {

+			rx_data[rx_pos++] = (received_data >> 8);

+		}

+	}

+

+	return STATUS_OK;

+}

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/usart/usart.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/usart/usart.h
new file mode 100644
index 0000000..1a26707
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/usart/usart.h
@@ -0,0 +1,1166 @@
+/**

+ *

+ * \file

+ *

+ * \brief SAM D20 SERCOM USART Driver

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+#ifndef USART_H_INCLUDED

+#define USART_H_INCLUDED

+

+/**

+ * \defgroup asfdoc_samd20_sercom_usart_group SAM D20 Serial USART Driver (SERCOM USART)

+ *

+ * This driver for SAM D20 devices provides an interface for the configuration

+ * and management of the SERCOM module in its USART mode to transfer or receive

+ * USART data frames. The following driver API modes are covered by this

+ * manual:

+ *

+ *  - Polled APIs

+ * \if USART_CALLBACK_MODE

+ *  - Callback APIs

+ * \endif

+ *

+ * The following peripherals are used by this module:

+ *

+ * - SERCOM (Serial Communication Interface)

+ *

+ * The outline of this documentation is as follows:

+ * - \ref asfdoc_samd20_sercom_usart_prerequisites

+ * - \ref asfdoc_samd20_sercom_usart_overview

+ * - \ref asfdoc_samd20_sercom_usart_special_considerations

+ * - \ref asfdoc_samd20_sercom_usart_extra_info

+ * - \ref asfdoc_samd20_sercom_usart_examples

+ * - \ref asfdoc_samd20_sercom_usart_api_overview

+ *

+ * \section asfdoc_samd20_sercom_usart_prerequisites Prerequisites

+ *

+ * To use the USART you need to have a GCLK generator enabled and running

+ * that can be used as the SERCOM clock source. This can either be configured

+ * in conf_clocks.h or by using the system clock driver.

+ *

+ * \section asfdoc_samd20_sercom_usart_overview Module Overview

+ *

+ * This driver will use one (or more) SERCOM interfaces on the system

+ * and configure it to run as a USART interface in either synchronous

+ * or asynchronous mode.

+ *

+ * \subsection asfdoc_samd20_sercom_usart_overview_frame_format Frame Format

+ *

+ * Communication is based on frames, where the frame format can be customized

+ * to accommodate a wide range of standards. A frame consists of a start bit,

+ * a number of data bits, an optional parity bit for error detection as well

+ * as a configurable length stop bit(s) - see

+ * \ref asfdoc_samd20_sercom_usart_frame_diagram "the figure below".

+ * \ref asfdoc_samd20_sercom_usart_frame_params "The table below" shows the

+ * available parameters you can change in a frame.

+ *

+ * \anchor asfdoc_samd20_sercom_usart_frame_params

+ * <table>

+ *  <caption>USART Frame Parameters</caption>

+ *  <tr>

+ *      <th>Parameter</th>

+ *      <th>Options</th>

+ *  </tr>

+ *  <tr>

+ *      <td>Start bit</td>

+ *      <td>1</td>

+ *  </tr>

+ *  <tr>

+ *      <td>Data bits</td>

+ *      <td>5, 6, 7, 8, 9</td>

+ *  </tr>

+ *  <tr>

+ *      <td>Parity bit</td>

+ *      <td>None, Even, Odd</td>

+ *  </tr>

+ *  <tr>

+ *      <td>Stop bits</td>

+ *      <td>1, 2</td>

+ *  </tr>

+ * </table>

+ *

+ * \anchor asfdoc_samd20_sercom_usart_frame_diagram

+ * \image html usart_frame.svg "USART Frame overview" width=100%

+ *

+ * \subsection asfdoc_samd20_sercom_usart_overview_sync Synchronous mode

+ *

+ * In synchronous mode a dedicated clock line is provided; either by the USART

+ * itself if in master mode, or by an external master if in slave mode.

+ * Maximum transmission speed is the same as the GCLK clocking the USART

+ * peripheral when in slave mode, and the GCLK divided by two if in

+ * master mode. In synchronous mode the interface needs three lines to

+ * communicate:

+ * - TX (Transmit pin)

+ * - RX (Receive pin)

+ * - XCK (Clock pin)

+ *

+ * \subsubsection asfdoc_samd20_sercom_usart_overview_sync_sampling Data sampling

+ * In synchronous mode the data is sampled on either the rising or falling edge

+ * of the clock signal. This is configured by setting the clock polarity in the

+ * configuration struct.

+ *

+ * \subsection asfdoc_samd20_sercom_usart_overview_async Asynchronous mode

+ *

+ * In asynchronous mode no dedicated clock line is used, and the communication

+ * is based on matching the clock speed on the transmitter and receiver. The

+ * clock is generated from the internal SERCOM baudrate generator, and the

+ * frames are synchronized by using the frame start bits. Maximum transmission

+ * speed is limited to the SERCOM GCLK divided by 16.

+ * In asynchronous mode the interface only needs two lines to communicate:

+ * - TX (Transmit pin)

+ * - RX (Receive pin)

+ *

+ * \subsubsection asfdoc_samd20_sercom_usart_overview_async_clock_matching Transmitter/receiver clock matching

+ *

+ * For successful transmit and receive using the asynchronous mode the receiver

+ * and transmitter clocks needs to be closely matched. When receiving a frame

+ * that does not match the selected baud rate closely enough the receiver will

+ * be unable to synchronize the frame(s), and garbage transmissions will

+ * result.

+ *

+ * \subsection asfdoc_samd20_sercom_usart_parity Parity

+ * Parity can be enabled to detect if a transmission was in error. This is done by

+ * counting the number of "1" bits in the frame. When using Even parity the

+ * parity bit will be set if the total number of "1"s in the frame are an even

+ * number. If using Odd parity the parity bit will be set if the total number

+ * of "1"s are Odd.

+ *

+ * When receiving a character the receiver will count the number of "1"s in the

+ * frame and give an error if the received frame and parity bit disagree.

+ *

+ * \subsection asfdoc_samd20_sercom_usart_overview_pin_configuration GPIO configuration

+ *

+ * the SERCOM module have four internal PADS where the RX pin can be placed at all

+ * the PADS, and the TX and XCK pins have two predefined positions that can be changed.

+ * The PADS can then be routed to an external GPIO pin using the normal pin

+ * multiplexing scheme on the SAM D20.

+ *

+ * For SERCOM pad multiplexer position documentation, see

+ * \ref asfdoc_samd20_sercom_usart_mux_settings.

+ *

+ * \section asfdoc_samd20_sercom_usart_special_considerations Special Considerations

+ *

+ * \if USART_CALLBACK_MODE

+ * Never execute large portions of code in the callbacks. These

+ * are run from the interrupt routine, and thus having long callbacks will

+ * keep the processor in the interrupt handler for an equally long time.

+ * A common way to handle this is to use global flags signaling the

+ * main application that an interrupt event has happened, and only do the

+ * minimal needed processing in the callback.

+ * \else

+ * No special considerations.

+ * \endif

+ *

+ * \section asfdoc_samd20_sercom_usart_extra_info Extra Information

+ *

+ * For extra information see \ref asfdoc_samd20_sercom_usart_extra. This includes:

+ * - \ref asfdoc_samd20_sercom_usart_extra_acronyms

+ * - \ref asfdoc_samd20_sercom_usart_extra_dependencies

+ * - \ref asfdoc_samd20_sercom_usart_extra_errata

+ * - \ref asfdoc_samd20_sercom_usart_extra_history

+ *

+ * \section asfdoc_samd20_sercom_usart_examples Examples

+ *

+ * For a list of examples related to this driver, see

+ * \ref asfdoc_samd20_sercom_usart_exqsg.

+ *

+ * \section asfdoc_samd20_sercom_usart_api_overview API Overview

+ * @{

+ */

+

+#include <sercom.h>

+#include <pinmux.h>

+

+#if USART_CALLBACK_MODE == true

+#  include <sercom_interrupt.h>

+#endif

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+#ifndef PINMUX_DEFAULT

+#  define PINMUX_DEFAULT 0

+#endif

+

+#ifndef PINMUX_UNUSED

+#  define PINMUX_UNUSED 0xFFFFFFFF

+#endif

+

+#ifndef USART_TIMEOUT

+#  define USART_TIMEOUT 0xFFFF

+#endif

+

+#if USART_CALLBACK_MODE == true

+/**

+ * \brief USART Callback enum

+ *

+ * Callbacks for the Asynchronous USART driver

+ */

+/* TODO: Add support for RX started interrupt. */

+enum usart_callback {

+	/** Callback for buffer transmitted */

+	USART_CALLBACK_BUFFER_TRANSMITTED,

+	/** Callback for buffer received */

+	USART_CALLBACK_BUFFER_RECEIVED,

+	/** Callback for error */

+	USART_CALLBACK_ERROR,

+#  if !defined(__DOXYGEN__)

+	/** Number of available callbacks. */

+	USART_CALLBACK_N,

+#  endif

+};

+#endif

+

+/**

+ * \brief USART Data Order enum

+ *

+ * The data order decides which of MSB or LSB is shifted out first when data is

+ * transferred

+ */

+enum usart_dataorder {

+	/** The MSB will be shifted out first during transmission,

+	 *  and shifted in first during reception */

+	USART_DATAORDER_MSB = 0,

+	/** The LSB will be shifted out first during transmission,

+	 *  and shifted in first during reception */

+	USART_DATAORDER_LSB = SERCOM_USART_CTRLA_DORD,

+};

+

+/**

+ * \brief USART Transfer mode enum

+ *

+ * Select USART transfer mode

+ */

+enum usart_transfer_mode {

+	/** Transfer of data is done synchronously */

+	USART_TRANSFER_SYNCHRONOUSLY = (SERCOM_USART_CTRLA_CMODE),

+	/** Transfer of data is done asynchronously */

+	USART_TRANSFER_ASYNCHRONOUSLY = 0

+};

+

+/**

+ * \brief USART Parity enum

+ *

+ * Select parity USART parity mode

+ */

+enum usart_parity {

+	/** For odd parity checking, the parity bit will be set if number of

+	 *  ones being transferred is even */

+	USART_PARITY_ODD  = SERCOM_USART_CTRLB_PMODE,

+

+	/** For even parity checking, the parity bit will be set if number of

+	 *  ones being received is odd */

+	USART_PARITY_EVEN = 0,

+

+	/** No parity checking will be executed, and there will be no parity bit

+	 *  in the received frame */

+	USART_PARITY_NONE = 0xFF,

+};

+

+/**

+ * \brief USART signal mux settings

+ *

+ * Set the functionality of the SERCOM pins.

+ */

+enum usart_signal_mux_settings {

+	/** See \ref asfdoc_samd20_sercom_usart_mux_setting_a */

+	USART_RX_0_TX_0_XCK_1 = (SERCOM_USART_CTRLA_RXPO(0)),

+	/** See \ref asfdoc_samd20_sercom_usart_mux_setting_b */

+	USART_RX_0_TX_2_XCK_3 = (SERCOM_USART_CTRLA_RXPO(0) | SERCOM_USART_CTRLA_TXPO),

+	/** See \ref asfdoc_samd20_sercom_usart_mux_setting_c */

+	USART_RX_1_TX_0_XCK_1 = (SERCOM_USART_CTRLA_RXPO(1)),

+	/** See \ref asfdoc_samd20_sercom_usart_mux_setting_d */

+	USART_RX_1_TX_2_XCK_3 = (SERCOM_USART_CTRLA_RXPO(1) | SERCOM_USART_CTRLA_TXPO),

+	/** See \ref asfdoc_samd20_sercom_usart_mux_setting_e */

+	USART_RX_2_TX_0_XCK_1 = (SERCOM_USART_CTRLA_RXPO(2)),

+	/** See \ref asfdoc_samd20_sercom_usart_mux_setting_f */

+	USART_RX_2_TX_2_XCK_3 = (SERCOM_USART_CTRLA_RXPO(2) | SERCOM_USART_CTRLA_TXPO),

+	/** See \ref asfdoc_samd20_sercom_usart_mux_setting_g */

+	USART_RX_3_TX_0_XCK_1 = (SERCOM_USART_CTRLA_RXPO(3)),

+	/** See \ref asfdoc_samd20_sercom_usart_mux_setting_h */

+	USART_RX_3_TX_2_XCK_3 = (SERCOM_USART_CTRLA_RXPO(3) | SERCOM_USART_CTRLA_TXPO),

+};

+

+/**

+ * \brief USART Stop Bits enum

+ *

+ * Number of stop bits for a frame.

+ */

+enum usart_stopbits {

+	/** Each transferred frame contains 1 stop bit */

+	USART_STOPBITS_1 = 0,

+	/** Each transferred frame contains 2 stop bits */

+	USART_STOPBITS_2 = SERCOM_USART_CTRLB_SBMODE,

+};

+

+/**

+ * \brief USART Character Size

+ *

+ * Number of bits for the character sent in a frame.

+ */

+enum usart_character_size {

+	/** The char being sent in a frame is 5 bits long */

+	USART_CHARACTER_SIZE_5BIT = SERCOM_USART_CTRLB_CHSIZE(5),

+	/** The char being sent in a frame is 6 bits long */

+	USART_CHARACTER_SIZE_6BIT = SERCOM_USART_CTRLB_CHSIZE(6),

+	/** The char being sent in a frame is 7 bits long */

+	USART_CHARACTER_SIZE_7BIT = SERCOM_USART_CTRLB_CHSIZE(7),

+	/** The char being sent in a frame is 8 bits long */

+	USART_CHARACTER_SIZE_8BIT = SERCOM_USART_CTRLB_CHSIZE(0),

+	/** The char being sent in a frame is 9 bits long */

+	USART_CHARACTER_SIZE_9BIT = SERCOM_USART_CTRLB_CHSIZE(1),

+};

+

+

+/**

+ * \brief USART Transceiver

+ *

+ * Select Receiver or Transmitter

+ */

+enum usart_transceiver_type {

+	/** The parameter is for the Receiver */

+	USART_TRANSCEIVER_RX,

+	/** The parameter is for the Transmitter */

+	USART_TRANSCEIVER_TX,

+};

+

+/**

+ * \brief USART configuration struct

+ *

+ * Configuration options for USART

+ */

+struct usart_config {

+	/** USART bit order (MSB or LSB first) */

+	enum usart_dataorder data_order;

+	/** USART in asynchronous or synchronous mode */

+	enum usart_transfer_mode transfer_mode;

+	/** USART parity */

+	enum usart_parity parity;

+	/** Number of stop bits */

+	enum usart_stopbits stopbits;

+	/** USART character size */

+	enum usart_character_size character_size;

+	/** USART pin out */

+	enum usart_signal_mux_settings mux_setting;

+	/** USART baud rate */

+	uint32_t baudrate;

+	/** Enable receiver */

+	bool receiver_enable;

+	/** Enable transmitter */

+	bool transmitter_enable;

+

+	/** USART Clock Polarity.

+	 * If true, data changes on falling XCK edge and

+	 * is sampled at rising edge.

+	 * If false, data changes on rising XCK edge and

+	 * is sampled at falling edge.

+	 * */

+	bool clock_polarity_inverted;

+

+	/** States whether to use the external clock applied to the XCK pin.

+	 * In synchronous mode the shift register will act directly on the XCK clock.

+	 * In asynchronous mode the XCK will be the input to the USART hardware module.

+	 */

+	bool use_external_clock;

+	/** External clock frequency in synchronous mode.

+	 * This must be set if \c use_external_clock is true. */

+	uint32_t ext_clock_freq;

+	/** If true the USART will be kept running in Standby sleep mode */

+	bool run_in_standby;

+	/** GCLK generator source */

+	enum gclk_generator generator_source;

+	/** PAD0 pinmux */

+	uint32_t pinmux_pad0;

+	/** PAD1 pinmux */

+	uint32_t pinmux_pad1;

+	/** PAD2 pinmux */

+	uint32_t pinmux_pad2;

+	/** PAD3 pinmux */

+	uint32_t pinmux_pad3;

+};

+

+#if USART_CALLBACK_MODE == true

+/* Forward Declaration for the device instance */

+struct usart_module;

+

+/* Type of the callback functions */

+typedef void (*usart_callback_t)(const struct usart_module *const module);

+#endif

+

+/**

+ * \brief SERCOM USART driver software device instance structure.

+ *

+ * SERCOM USART driver software instance structure, used to retain software

+ * state information of an associated hardware module instance.

+ *

+ * \note The fields of this structure should not be altered by the user

+ *       application; they are reserved for module-internal use only.

+ */

+struct usart_module {

+#if !defined(__DOXYGEN__)

+	/** Pointer to the hardware instance */

+	Sercom *hw;

+	/** Character size of the data being transferred */

+	enum usart_character_size character_size;

+	/** Receiver enabled */

+	bool receiver_enabled;

+	/** Transmitter enabled */

+	bool transmitter_enabled;

+#  if USART_CALLBACK_MODE == true

+	/** Array to store callback function pointers in */

+	usart_callback_t callback[USART_CALLBACK_N];

+	/** Buffer pointer to where the next received character will be put */

+	volatile uint8_t *rx_buffer_ptr;

+

+	/** Buffer pointer to where the next character will be transmitted from

+	**/

+	volatile uint8_t *tx_buffer_ptr;

+	/** Remaining characters to receive */

+	volatile uint16_t remaining_rx_buffer_length;

+	/** Remaining characters to transmit */

+	volatile uint16_t remaining_tx_buffer_length;

+	/** Bit mask for callbacks registered */

+	uint8_t callback_reg_mask;

+	/** Bit mask for callbacks enabled */

+	uint8_t callback_enable_mask;

+	/** Holds the status of the ongoing or last read operation */

+	volatile enum status_code rx_status;

+	/** Holds the status of the ongoing or last write operation */

+	volatile enum status_code tx_status;

+#  endif

+#endif

+};

+

+#if !defined (__DOXYGEN__)

+/**

+ * \internal

+ * Waits until synchronization is complete

+ */

+static inline void _usart_wait_for_sync(

+		const struct usart_module *const module)

+{

+	/* Get a pointer to the hardware module instance */

+	SercomUsart *const usart_hw = &(module->hw->USART);

+

+	while (usart_hw->STATUS.reg & SERCOM_USART_STATUS_SYNCBUSY) {

+		/* Wait until the synchronization is complete */

+	}

+}

+#endif

+

+/**

+ * \brief Check if peripheral is busy syncing registers across clock domains

+ *

+ * Return peripheral synchronization status. If doing a non-blocking

+ * implementation this function can be used to check the sync state and hold of

+ * any new actions until sync is complete. If this functions is not run; the

+ * functions will block until the sync has completed.

+ *

+ * \param[in]  module  Pointer to peripheral module

+ *

+ * \return Peripheral sync status

+ *

+ * \retval true   Peripheral is busy syncing

+ * \retval false  Peripheral is not busy syncing and can be read/written without

+ *                stalling the bus.

+ */

+static inline bool usart_is_syncing(

+		const struct usart_module *const module)

+{

+	/* Sanity check arguments */

+	Assert(module);

+	Assert(module->hw);

+

+	SercomUsart *const usart_hw = &(module->hw->USART);

+

+	if(usart_hw->STATUS.reg & SERCOM_USART_STATUS_SYNCBUSY) {

+		return true;

+	} else {

+		return false;

+	}

+}

+

+/**

+ * \brief Initializes the device to predefined defaults

+ *

+ * Initialize the USART device to predefined defaults:

+ * - 8-bit asynchronous USART

+ * - No parity

+ * - 1 stop bit

+ * - 9600 baud

+ * - Transmitter enabled

+ * - Receiver enabled

+ * - GCLK generator 0 as clock source

+ * - Default pin configuration

+ *

+ * The configuration struct will be updated with the default

+ * configuration.

+ *

+ * \param[in,out] config  Pointer to configuration struct

+ */

+static inline void usart_get_config_defaults(

+		struct usart_config *const config)

+{

+	/* Sanity check arguments */

+	Assert(config);

+

+	/* Set default config in the config struct */

+	config->data_order       = USART_DATAORDER_LSB;

+	config->transfer_mode    = USART_TRANSFER_ASYNCHRONOUSLY;

+	config->parity           = USART_PARITY_NONE;

+	config->stopbits         = USART_STOPBITS_1;

+	config->character_size   = USART_CHARACTER_SIZE_8BIT;

+	config->baudrate         = 9600;

+	config->receiver_enable  = true;

+	config->transmitter_enable = true;

+	config->clock_polarity_inverted = false;

+	config->use_external_clock = false;

+	config->ext_clock_freq   = 0;

+	config->mux_setting      = USART_RX_1_TX_2_XCK_3;

+	config->run_in_standby   = false;

+	config->generator_source = GCLK_GENERATOR_0;

+	config->pinmux_pad0      = PINMUX_DEFAULT;

+	config->pinmux_pad1      = PINMUX_DEFAULT;

+	config->pinmux_pad2      = PINMUX_DEFAULT;

+	config->pinmux_pad3      = PINMUX_DEFAULT;

+}

+

+enum status_code usart_init(

+		struct usart_module *const module,

+		Sercom *const hw,

+		const struct usart_config *const config);

+

+/**

+ * \brief Enable the module

+ *

+ * Enables the USART module

+ *

+ * \param[in]  module  Pointer to USART software instance struct

+ */

+static inline void usart_enable(

+		const struct usart_module *const module)

+{

+	/* Sanity check arguments */

+	Assert(module);

+	Assert(module->hw);

+

+	/* Get a pointer to the hardware module instance */

+	SercomUsart *const usart_hw = &(module->hw->USART);

+

+#if USART_CALLBACK_MODE == true

+	/* Enable Global interrupt for module */

+	system_interrupt_enable(_sercom_get_interrupt_vector(module->hw));

+#endif

+

+	/* Wait until synchronization is complete */

+	_usart_wait_for_sync(module);

+

+	/* Enable USART module */

+	usart_hw->CTRLA.reg |= SERCOM_USART_CTRLA_ENABLE;

+}

+

+/**

+ * \brief Disable module

+ *

+ * Disables the USART module

+ *

+ * \param[in]  module  Pointer to USART software instance struct

+ */

+static inline void usart_disable(

+		const struct usart_module *const module)

+{

+	/* Sanity check arguments */

+	Assert(module);

+	Assert(module->hw);

+

+	/* Get a pointer to the hardware module instance */

+	SercomUsart *const usart_hw = &(module->hw->USART);

+

+	/* Disable Global interrupt for module */

+	system_interrupt_disable(_sercom_get_interrupt_vector(module->hw));

+

+	/* Wait until synchronization is complete */

+	_usart_wait_for_sync(module);

+

+	/* Disable USART module */

+	usart_hw->CTRLA.reg &= ~SERCOM_USART_CTRLA_ENABLE;

+}

+

+/**

+ * \brief Resets the USART module

+ *

+ * Disables and resets the USART module.

+ *

+ * \param[in]  module  Pointer to the USART software instance struct

+ */

+static inline void usart_reset(

+		const struct usart_module *const module)

+{

+	/* Sanity check arguments */

+	Assert(module);

+	Assert(module->hw);

+

+	/* Get a pointer to the hardware module instance */

+	SercomUsart *const usart_hw = &(module->hw->USART);

+

+	usart_disable(module);

+

+	/* Wait until synchronization is complete */

+	_usart_wait_for_sync(module);

+

+	/* Reset module */

+	usart_hw->CTRLA.reg = SERCOM_USART_CTRLA_SWRST;

+}

+

+/**

+ * \name Writing and reading

+ * @{

+ */

+enum status_code usart_write_wait(

+		struct usart_module *const module,

+		const uint16_t tx_data);

+

+enum status_code usart_read_wait(

+		struct usart_module *const module,

+		uint16_t *const rx_data);

+

+enum status_code usart_write_buffer_wait(

+		struct usart_module *const module,

+		const uint8_t *tx_data,

+		uint16_t length);

+

+enum status_code usart_read_buffer_wait(

+		struct usart_module *const module,

+		uint8_t *rx_data,

+		uint16_t length);

+/** @} */

+

+/**

+ * \name Enabling/Disabling receiver and transmitter

+ * @{

+ */

+

+/**

+ * \brief Enable Transceiver

+ *

+ * Enable the given transceiver. Either RX or TX.

+ *

+ * \param[in]  module            Pointer to USART software instance struct

+ * \param[in]  transceiver_type  Transceiver type.

+ */

+static inline void usart_enable_transceiver(

+		struct usart_module *const module,

+		enum usart_transceiver_type transceiver_type)

+{

+	/* Sanity check arguments */

+	Assert(module);

+	Assert(module->hw);

+

+	/* Get a pointer to the hardware module instance */

+	SercomUsart *const usart_hw = &(module->hw->USART);

+

+	/* Wait until synchronization is complete */

+	_usart_wait_for_sync(module);

+

+	switch (transceiver_type) {

+		case USART_TRANSCEIVER_RX:

+			/* Enable RX */

+			usart_hw->CTRLB.reg |= SERCOM_USART_CTRLB_RXEN;

+			module->receiver_enabled = true;

+			break;

+

+		case USART_TRANSCEIVER_TX:

+			/* Enable TX */

+			usart_hw->CTRLB.reg |= SERCOM_USART_CTRLB_TXEN;

+			module->transmitter_enabled = true;

+			break;

+	}

+}

+

+/**

+ * \brief Disable Transceiver

+ *

+ * Disable the given transceiver (RX or TX).

+ *

+ * \param[in]  module            Pointer to USART software instance struct

+ * \param[in]  transceiver_type  Transceiver type.

+ */

+static inline void usart_disable_transceiver(

+		struct usart_module *const module,

+		enum usart_transceiver_type transceiver_type)

+{

+	/* Sanity check arguments */

+	Assert(module);

+	Assert(module->hw);

+

+	/* Get a pointer to the hardware module instance */

+	SercomUsart *const usart_hw = &(module->hw->USART);

+

+	/* Wait until synchronization is complete */

+	_usart_wait_for_sync(module);

+

+	switch (transceiver_type) {

+		case USART_TRANSCEIVER_RX:

+			/* Disable RX */

+			usart_hw->CTRLB.reg &= ~SERCOM_USART_CTRLB_RXEN;

+			module->receiver_enabled = false;

+			break;

+

+		case USART_TRANSCEIVER_TX:

+			/* Disable TX */

+			usart_hw->CTRLB.reg &= ~SERCOM_USART_CTRLB_TXEN;

+			module->transmitter_enabled = false;

+			break;

+	}

+}

+

+/** @} */

+

+#ifdef __cplusplus

+}

+#endif

+

+/** @} */

+

+/**

+* \page asfdoc_samd20_sercom_usart_extra Extra Information for SERCOM USART Driver

+*

+* \section asfdoc_samd20_sercom_usart_extra_acronyms Acronyms

+*

+* Below is a table listing the acronyms used in this module, along with their

+* intended meanings.

+*

+* <table>

+* <tr>

+* <th>Acronym</th>

+* <th>Description</th>

+* </tr>

+* <tr>

+* <td>SERCOM</td>

+* <td>Serial Communication Interface</td>

+* </tr>

+* <tr>

+* <td>USART</td>

+* <td>Universal Synchronous and Asynchronous Serial Receiver and Transmitter</td>

+* </tr>

+* <tr>

+* <td>LSB</td>

+* <td>Least Significant Bit</td>

+* </tr>

+* <tr>

+* <td>MSB</td>

+* <td>Most Significant Bit</td>

+* </tr>

+* </table>

+*

+*

+* \section asfdoc_samd20_sercom_usart_extra_dependencies Dependencies

+* This driver has the following dependencies:

+*

+* - \ref asfdoc_samd20_system_pinmux_group "System Pin Multiplexer Driver"

+* - \ref asfdoc_samd20_system_clock_group "System clock configuration"

+*

+*

+* \section asfdoc_samd20_sercom_usart_extra_errata Errata

+* There are no errata related to this driver.

+*

+*

+* \section asfdoc_samd20_sercom_usart_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 Added new \c transmitter_enable and \c receiver_enable boolean

+ *              values to \c struct usart_config.

+ *          \li Altered \c usart_write_* and usart_read_* functions to abort with

+ *              an error code if the relevant transceiver is not enabled.

+ *          \li Fixed \c usart_write_buffer_wait() and \c usart_read_buffer_wait()

+ *              not aborting correctly when a timeout condition occurs.</td>

+ *	</tr>

+ *	<tr>

+ *		<td>Initial Release</td>

+ *	</tr>

+ * </table>

+*/

+

+/**

+ * \page asfdoc_samd20_sercom_usart_exqsg Examples for SERCOM USART Driver

+ *

+ * This is a list of the available Quick Start guides (QSGs) and example

+ * applications for \ref asfdoc_samd20_sercom_usart_group. QSGs are simple examples with

+ * step-by-step instructions to configure and use this driver in a selection of

+ * use cases. Note that QSGs can be compiled as a standalone application or be

+ * added to the user application.

+ *

+ * - \subpage asfdoc_samd20_sercom_usart_basic_use_case

+ * \if USART_CALLBACK_MODE

+ * - \subpage asfdoc_samd20_sercom_usart_callback_use_case

+ * \endif

+ */

+

+/**

+ * \page asfdoc_samd20_sercom_usart_mux_settings SERCOM USART MUX Settings

+ *

+ * The different options for functionality of the SERCOM pads.

+ *

+ * \section asfdoc_samd20_sercom_usart_mux_setting_a MUX Setting A

+ *

+ * Enum: \ref USART_RX_0_TX_0_XCK_1

+ *

+ * <table>

+ *   <tr>

+ *      <th> Function </th>

+ *      <th> RX </th>

+ *      <th> TX </th>

+ *      <th> XCK </th>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD0 </td>

+ *      <td> x </td>

+ *      <td> x </td>

+ *      <td>  </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD1 </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *      <td> x </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD2 </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD3 </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *   </tr>

+ * </table>

+ *

+ * \section asfdoc_samd20_sercom_usart_mux_setting_b MUX Setting B

+ *

+ * Enum: \ref USART_RX_0_TX_2_XCK_3

+ *

+ * <table>

+ *   <tr>

+ *      <th> Function </th>

+ *      <th> RX </th>

+ *      <th> TX </th>

+ *      <th> XCK </th>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD0 </td>

+ *      <td> x </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD1 </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD2 </td>

+ *      <td>  </td>

+ *      <td> x </td>

+ *      <td>  </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD3 </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *      <td> x </td>

+ *   </tr>

+ * </table>

+ *

+ * \section asfdoc_samd20_sercom_usart_mux_setting_c MUX Setting C

+ *

+ * Enum: \ref USART_RX_1_TX_0_XCK_1

+ *

+ * <table>

+ *   <tr>

+ *      <th> Function </th>

+ *      <th> RX </th>

+ *      <th> TX </th>

+ *      <th> XCK </th>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD0 </td>

+ *      <td>  </td>

+ *      <td> x </td>

+ *      <td>  </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD1 </td>

+ *      <td> x </td>

+ *      <td>  </td>

+ *      <td> x </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD2 </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD3 </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *   </tr>

+ * </table>

+ *

+ * \section asfdoc_samd20_sercom_usart_mux_setting_d MUX Setting D

+ *

+ * Enum: \ref USART_RX_1_TX_2_XCK_3

+ *

+ * <table>

+ *   <tr>

+ *      <th> Function </th>

+ *      <th> RX </th>

+ *      <th> TX </th>

+ *      <th> XCK </th>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD0 </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD1 </td>

+ *      <td> x </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD2 </td>

+ *      <td>  </td>

+ *      <td> x </td>

+ *      <td>  </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD3 </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *      <td> x </td>

+ *   </tr>

+ * </table>

+ *

+ * \section asfdoc_samd20_sercom_usart_mux_setting_e MUX Setting E

+ *

+ * Enum: \ref USART_RX_2_TX_0_XCK_1

+ *

+ * <table>

+ *   <tr>

+ *      <th> Function </th>

+ *      <th> RX </th>

+ *      <th> TX </th>

+ *      <th> XCK </th>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD0 </td>

+ *      <td>  </td>

+ *      <td> x </td>

+ *      <td>  </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD1 </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *      <td> x </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD2 </td>

+ *      <td> x </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD3 </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *   </tr>

+ * </table>

+ *

+ * \section asfdoc_samd20_sercom_usart_mux_setting_f MUX Setting F

+ *

+ * Enum: \ref USART_RX_2_TX_2_XCK_3

+ *

+ * <table>

+ *   <tr>

+ *      <th> Function </th>

+ *      <th> RX </th>

+ *      <th> TX </th>

+ *      <th> XCK </th>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD0 </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD1 </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD2 </td>

+ *      <td> x </td>

+ *      <td> x </td>

+ *      <td>  </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD3 </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *      <td> x </td>

+ *   </tr>

+ * </table>

+ *

+ * \section asfdoc_samd20_sercom_usart_mux_setting_g MUX Setting G

+ *

+ * Enum: \ref USART_RX_3_TX_0_XCK_1

+ *

+ * <table>

+ *   <tr>

+ *      <th> Function </th>

+ *      <th> RX </th>

+ *      <th> TX </th>

+ *      <th> XCK </th>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD0 </td>

+ *      <td>  </td>

+ *      <td> x </td>

+ *      <td>  </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD1 </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *      <td> x </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD2 </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD3 </td>

+ *      <td> x </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *   </tr>

+ * </table>

+ *

+ * \section asfdoc_samd20_sercom_usart_mux_setting_h MUX Setting H

+ *

+ * Enum: \ref USART_RX_3_TX_2_XCK_3

+ *

+ * <table>

+ *   <tr>

+ *      <th> Function </th>

+ *      <th> RX </th>

+ *      <th> TX </th>

+ *      <th> XCK </th>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD0 </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD1 </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *      <td>  </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD2 </td>

+ *      <td>  </td>

+ *      <td> x </td>

+ *      <td>  </td>

+ *   </tr>

+ *   <tr>

+ *      <td> PAD3 </td>

+ *      <td> x </td>

+ *      <td>  </td>

+ *      <td> x </td>

+ *   </tr>

+ * </table>

+ *

+ * \page asfdoc_samd20_sercom_usart_document_revision_history Document Revision History

+ *

+ * <table>

+ *	<tr>

+ *		<th>Doc. Rev.</td>

+ *		<th>Date</td>

+ *		<th>Comments</td>

+ *	</tr>

+ *	<tr>

+ *		<td>B</td>

+ *		<td>06/2013</td>

+ *		<td>Corrected documentation typos.</td>

+ *	</tr>

+ *	<tr>

+ *		<td>A</td>

+ *		<td>06/2013</td>

+ *		<td>Initial release</td>

+ *	</tr>

+ * </table>

+ */

+#endif /* USART_H_INCLUDED */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/usart/usart_interrupt.c b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/usart/usart_interrupt.c
new file mode 100644
index 0000000..e0dec61
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/usart/usart_interrupt.c
@@ -0,0 +1,558 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 SERCOM USART Asynchronous Driver

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+

+#include "usart_interrupt.h"

+

+/**

+ * \internal

+ * Asynchronous write of a buffer with a given length

+ *

+ * \param[in]  module   Pointer to USART software instance struct

+ * \param[in]  tx_data  Pointer to data to be transmitted

+ * \param[in]  length   Length of data buffer

+ *

+ */

+void _usart_write_buffer(

+		struct usart_module *const module,

+		uint8_t *tx_data,

+		uint16_t length)

+{

+	/* Sanity check arguments */

+	Assert(module);

+	Assert(module->hw);

+

+	/* Get a pointer to the hardware module instance */

+	SercomUsart *const usart_hw = &(module->hw->USART);

+

+	/* Write parameters to the device instance */

+	module->remaining_tx_buffer_length = length;

+	module->tx_buffer_ptr              = tx_data;

+	module->tx_status                  = STATUS_BUSY;

+

+	/* Enable the Data Register Empty Interrupt */

+	usart_hw->INTENSET.reg = SERCOM_USART_INTFLAG_DRE;

+}

+

+/**

+ * \internal

+ * Asynchronous read of a buffer with a given length

+ *

+ * \param[in]  module   Pointer to USART software instance struct

+ * \param[in]  rx_data  Pointer to data to be received

+ * \param[in]  length   Length of data buffer

+ *

+ */

+void _usart_read_buffer(

+		struct usart_module *const module,

+		uint8_t *rx_data,

+		uint16_t length)

+{

+	/* Sanity check arguments */

+	Assert(module);

+	Assert(module->hw);

+

+	/* Get a pointer to the hardware module instance */

+	SercomUsart *const usart_hw = &(module->hw->USART);

+

+	/* Set length for the buffer and the pointer, and let

+	 * the interrupt handler do the rest */

+	module->remaining_rx_buffer_length = length;

+	module->rx_buffer_ptr              = rx_data;

+	module->rx_status                  = STATUS_BUSY;

+

+	/* Enable the RX Complete Interrupt */

+	usart_hw->INTENSET.reg = SERCOM_USART_INTFLAG_RXC;

+}

+

+/**

+ * \brief Registers a callback

+ *

+ * Registers a callback function which is implemented by the user.

+ *

+ * \note The callback must be enabled by \ref usart_enable_callback,

+ *       in order for the interrupt handler to call it when the conditions for

+ *       the callback type are met.

+ *

+ * \param[in]  module         Pointer to USART software instance struct

+ * \param[in]  callback_func  Pointer to callback function

+ * \param[in]  callback_type  Callback type given by an enum

+ *

+ */

+void usart_register_callback(

+		struct usart_module *const module,

+		usart_callback_t callback_func,

+		enum usart_callback callback_type)

+{

+	/* Sanity check arguments */

+	Assert(module);

+	Assert(callback_func);

+

+	/* Register callback function */

+	module->callback[callback_type] = callback_func;

+

+	/* Set the bit corresponding to the callback_type */

+	module->callback_reg_mask |= (1 << callback_type);

+}

+

+/**

+ * \brief Unregisters a callback

+ *

+ * Unregisters a callback function which is implemented by the user.

+ *

+ * \param[in,out]  module         Pointer to USART software instance struct

+ * \param[in]      callback_type  Callback type given by an enum

+ *

+ */

+void usart_unregister_callback(

+		struct usart_module *const module,

+		enum usart_callback callback_type)

+{

+	/* Sanity check arguments */

+	Assert(module);

+

+	/* Unregister callback function */

+	module->callback[callback_type] = NULL;

+

+	/* Clear the bit corresponding to the callback_type */

+	module->callback_reg_mask &= ~(1 << callback_type);

+}

+

+/**

+ * \brief Asynchronous write a single char

+ *

+ * Sets up the driver to write the data given. If registered and enabled,

+ * a callback function will be called when the transmit is completed.

+ *

+ * \param[in]  module   Pointer to USART software instance struct

+ * \param[in]  tx_data  Data to transfer

+ *

+ * \returns Status of the operation

+ * \retval STATUS_OK         If operation was completed

+ * \retval STATUS_BUSY       If operation was not completed, due to the

+ *                           USART module being busy

+ * \retval STATUS_ERR_DENIED If the transmitter is not enabled

+ */

+enum status_code usart_write_job(

+		struct usart_module *const module,

+		const uint16_t tx_data)

+{

+	/* Sanity check arguments */

+	Assert(module);

+	Assert(module->hw);

+	/* Check if the USART transmitter is busy */

+	if (module->remaining_tx_buffer_length > 0) {

+		return STATUS_BUSY;

+	}

+

+	/* Check that the transmitter is enabled */

+	if (!(module->transmitter_enabled)) {

+		return STATUS_ERR_DENIED;

+	}

+

+	/* Call internal write buffer function with length 1 */

+	_usart_write_buffer(module, (uint8_t *)&tx_data, 1);

+

+	return STATUS_OK;

+}

+

+/**

+ * \brief Asynchronous read a single char

+ *

+ * Sets up the driver to read data from the USART module to the data

+ * pointer given. If registered and enabled, a callback will be called

+ * when the receiving is completed.

+ *

+ * \param[in]   module   Pointer to USART software instance struct

+ * \param[out]  rx_data  Pointer to where received data should be put

+ *

+ * \returns Status of the operation

+ * \retval  STATUS_OK    If operation was completed

+ * \retval  STATUS_BUSY  If operation was not completed,

+ */

+enum status_code usart_read_job(

+		struct usart_module *const module,

+		uint16_t *const rx_data)

+{

+	/* Sanity check arguments */

+	Assert(module);

+

+	/* Check if the USART receiver is busy */

+	if (module->remaining_rx_buffer_length > 0) {

+		return STATUS_BUSY;

+	}

+

+	/* Call internal read buffer function with length 1 */

+	_usart_read_buffer(module, (uint8_t *)rx_data, 1);

+

+	return STATUS_OK;

+}

+

+/**

+ * \brief Asynchronous buffer write

+ *

+ * Sets up the driver to write a given buffer over the USART. If registered and

+ * enabled, a callback function will be called.

+ *

+ * \param[in]  module   Pointer to USART software instance struct

+ * \param[in]  tx_data  Pointer do data buffer to transmit

+ * \param[in]  length   Length of the data to transmit

+ *

+ * \returns Status of the operation

+ * \retval STATUS_OK              If operation was completed successfully.

+ * \retval STATUS_BUSY            If operation was not completed, due to the

+ *                                USART module being busy

+ * \retval STATUS_ERR_INVALID_ARG If operation was not completed, due to invalid

+ *                                arguments

+ * \retval STATUS_ERR_DENIED      If the transmitter is not enabled

+ */

+enum status_code usart_write_buffer_job(

+		struct usart_module *const module,

+		uint8_t *tx_data,

+		uint16_t length)

+{

+	/* Sanity check arguments */

+	Assert(module);

+

+	if (length == 0) {

+		return STATUS_ERR_INVALID_ARG;

+	}

+

+	/* Check if the USART transmitter is busy */

+	if (module->remaining_tx_buffer_length > 0) {

+		return STATUS_BUSY;

+	}

+	

+	/* Check that the receiver is enabled */

+	if (!(module->transmitter_enabled)) {

+		return STATUS_ERR_DENIED;

+	}

+

+	/* Issue internal asynchronous write */

+	_usart_write_buffer(module, tx_data, length);

+

+	return STATUS_OK;

+}

+

+/**

+ * \brief Asynchronous buffer read

+ *

+ * Sets up the driver to read from the USART to a given buffer. If registered

+ * and enabled, a callback function will be called.

+ *

+ * \param[in]  module   Pointer to USART software instance struct

+ * \param[out] rx_data  Pointer to data buffer to receive

+ * \param[in]  length   Data buffer length

+ *

+ * \returns Status of the operation

+ * \retval STATUS_OK              If operation was completed

+ * \retval STATUS_BUSY            If operation was not completed, due to the

+ *                                USART module being busy

+ * \retval STATUS_ERR_INVALID_ARG If operation was not completed, due to invalid

+ *                                arguments

+ * \retval STATUS_ERR_DENIED      If the transmitter is not enabled

+ */

+enum status_code usart_read_buffer_job(

+		struct usart_module *const module,

+		uint8_t *rx_data,

+		uint16_t length)

+{

+	/* Sanity check arguments */

+	Assert(module);

+	Assert(rx_data);

+

+	if (length == 0) {

+		return STATUS_ERR_INVALID_ARG;

+	}

+	

+	/* Check that the receiver is enabled */

+	if (!(module->receiver_enabled)) {

+		return STATUS_ERR_DENIED;

+	}

+

+	/* Check if the USART receiver is busy */

+	if (module->remaining_rx_buffer_length > 0) {

+		return STATUS_BUSY;

+	}

+

+	/* Issue internal asynchronous read */

+	_usart_read_buffer(module, rx_data, length);

+

+	return STATUS_OK;

+}

+

+/**

+ * \brief Cancels ongoing read/write operation

+ *

+ * Cancels the ongoing read/write operation modifying parameters in the

+ * USART software struct.

+ *

+ * \param[in]  module            Pointer to USART software instance struct

+ * \param[in]  transceiver_type  Transfer type to cancel

+ */

+void usart_abort_job(

+		struct usart_module *const module,

+		enum usart_transceiver_type transceiver_type)

+{

+	/* Sanity check arguments */

+	Assert(module);

+	Assert(module->hw);

+

+	/* Get a pointer to the hardware module instance */

+	SercomUsart *const usart_hw = &(module->hw->USART);

+

+	switch(transceiver_type) {

+		case USART_TRANSCEIVER_RX:

+			/* Clear the interrupt flag in order to prevent the receive

+			 * complete callback to fire */

+			usart_hw->INTFLAG.reg |= SERCOM_USART_INTFLAG_RXC;

+

+			/* Clear the software reception buffer */

+			module->remaining_rx_buffer_length = 0;

+

+			break;

+

+		case USART_TRANSCEIVER_TX:

+			/* Clear the interrupt flag in order to prevent the receive

+			 * complete callback to fire */

+			usart_hw->INTFLAG.reg |= SERCOM_USART_INTFLAG_TXC;

+

+			/* Clear the software reception buffer */

+			module->remaining_tx_buffer_length = 0;

+

+			break;

+	}

+}

+

+/**

+ * \brief Get status from the ongoing or last asynchronous transfer operation

+ *

+ * Returns the error from a given ongoing or last asynchronous transfer operation.

+ * Either from a read or write transfer.

+ *

+ * \param[in]  module            Pointer to USART software instance struct

+ * \param[in]  transceiver_type  Transfer type to check

+  *

+ * \return Status of the given job.

+ * \retval STATUS_OK               No error occurred during the last transfer

+ * \retval STATUS_BUSY             A transfer is ongoing

+ * \retval STATUS_ERR_BAD_DATA     The last operation was aborted due to a

+ *                                 parity error. The transfer could be affected

+ *                                 by external noise.

+ * \retval STATUS_ERR_BAD_FORMAT   The last operation was aborted due to a

+ *                                 frame error.

+ * \retval STATUS_ERR_OVERFLOW     The last operation was aborted due to a

+ *                                 buffer overflow.

+ * \retval STATUS_ERR_INVALID_ARG  An invalid transceiver enum given.

+ */

+enum status_code usart_get_job_status(

+		struct usart_module *const module,

+		enum usart_transceiver_type transceiver_type)

+{

+	/* Sanity check arguments */

+	Assert(module);

+

+	/* Variable for status code */

+	enum status_code status_code;

+

+	switch(transceiver_type) {

+	case USART_TRANSCEIVER_RX:

+			status_code = module->rx_status;

+			break;

+

+	case USART_TRANSCEIVER_TX:

+			status_code = module->tx_status;

+			break;

+

+	default:

+			status_code = STATUS_ERR_INVALID_ARG;

+			break;

+	}

+

+	return status_code;

+}

+

+/**

+ * \internal

+ * Handles interrupts as they occur, and it will run callback functions

+ * which are registered and enabled.

+ *

+ * \param[in]  instance  ID of the SERCOM instance calling the interrupt

+ *                       handler.

+ */

+void _usart_interrupt_handler(

+		uint8_t instance)

+{

+	/* Temporary variables */

+	uint16_t interrupt_status;

+	uint16_t callback_status;

+	uint8_t error_code;

+

+

+	/* Get device instance from the look-up table */

+	struct usart_module *module

+		= (struct usart_module *)_sercom_instances[instance];

+

+	/* Pointer to the hardware module instance */

+	SercomUsart *const usart_hw

+		= &(module->hw->USART);

+

+	/* Wait for the synchronization to complete */

+	_usart_wait_for_sync(module);

+

+	/* Read and mask interrupt flag register */

+	interrupt_status = usart_hw->INTFLAG.reg;

+	callback_status = module->callback_reg_mask

+			&module->callback_enable_mask;

+

+	/* Check if a DATA READY interrupt has occurred,

+	 * and if there is more to transfer */

+	if (interrupt_status & SERCOM_USART_INTFLAG_DRE) {

+		if (module->remaining_tx_buffer_length) {

+			/* Write value will be at least 8-bits long */

+			uint16_t data_to_send = *(module->tx_buffer_ptr);

+			/* Increment 8-bit pointer */

+			(module->tx_buffer_ptr)++;

+

+			if (module->character_size == USART_CHARACTER_SIZE_9BIT) {

+				data_to_send = (*(module->tx_buffer_ptr) << 8);

+				/* Increment 8-bit pointer */

+				(module->tx_buffer_ptr)++;

+			}

+			/* Write the data to send */

+			usart_hw->DATA.reg = (data_to_send & SERCOM_USART_DATA_MASK);

+

+			if (--(module->remaining_tx_buffer_length) == 0) {

+				/* Disable the Data Register Empty Interrupt */

+				usart_hw->INTENCLR.reg = SERCOM_USART_INTFLAG_DRE;

+				/* Enable Transmission Complete interrupt */

+				usart_hw->INTENSET.reg = SERCOM_USART_INTFLAG_TXC;

+

+			}

+		} else {

+			usart_hw->INTENCLR.reg = SERCOM_USART_INTFLAG_DRE;

+		}

+

+	/* Check if the Transmission Complete interrupt has occurred and

+	 * that the transmit buffer is empty */

+	}

+	if (interrupt_status & SERCOM_USART_INTFLAG_TXC) {

+

+		/* Disable TX Complete Interrupt, and set STATUS_OK */

+		usart_hw->INTENCLR.reg = SERCOM_USART_INTFLAG_TXC;

+		module->tx_status = STATUS_OK;

+

+		/* Run callback if registered and enabled */

+		if (callback_status & (1 << USART_CALLBACK_BUFFER_TRANSMITTED)) {

+			(*(module->callback[USART_CALLBACK_BUFFER_TRANSMITTED]))(module);

+		}

+

+	/* Check if the Receive Complete interrupt has occurred, and that

+	 * there's more data to receive */

+	}

+	if (interrupt_status & SERCOM_USART_INTFLAG_RXC) {

+

+		if (module->remaining_rx_buffer_length) {

+			/* Read out the status code and mask away all but the 4 LSBs*/

+			error_code = (uint8_t)(usart_hw->STATUS.reg & SERCOM_USART_STATUS_MASK);

+

+			/* Check if an error has occurred during the receiving */

+			if (error_code) {

+				/* Check which error occurred */

+				if (error_code & SERCOM_USART_STATUS_FERR) {

+					/* Store the error code and clear flag by writing 1 to it */

+					module->rx_status = STATUS_ERR_BAD_FORMAT;

+					usart_hw->STATUS.reg |= SERCOM_USART_STATUS_FERR;

+				} else if (error_code & SERCOM_USART_STATUS_BUFOVF) {

+					/* Store the error code and clear flag by writing 1 to it */

+					module->rx_status = STATUS_ERR_OVERFLOW;

+					usart_hw->STATUS.reg |= SERCOM_USART_STATUS_BUFOVF;

+				} else if (error_code & SERCOM_USART_STATUS_PERR) {

+					/* Store the error code and clear flag by writing 1 to it */

+					module->rx_status = STATUS_ERR_BAD_DATA;

+					usart_hw->STATUS.reg |= SERCOM_USART_STATUS_PERR;

+				}

+

+				/* Run callback if registered and enabled */

+				if (callback_status

+						& (1 << USART_CALLBACK_ERROR)) {

+					(*(module->callback[USART_CALLBACK_ERROR]))(module);

+				}

+

+			} else {

+

+				/* Read current packet from DATA register,

+				 * increment buffer pointer and decrement buffer length */

+				uint16_t received_data = (usart_hw->DATA.reg & SERCOM_USART_DATA_MASK);

+

+				/* Read value will be at least 8-bits long */

+				*(module->rx_buffer_ptr) = received_data;

+				/* Increment 8-bit pointer */

+				module->rx_buffer_ptr += 1;

+

+				if (module->character_size == USART_CHARACTER_SIZE_9BIT) {

+					/* 9-bit data, write next received byte to the buffer */

+					*(module->rx_buffer_ptr) = (received_data >> 8);

+					/* Increment 8-bit pointer */

+					module->rx_buffer_ptr += 1;

+				}

+

+				/* Check if the last character have been received */

+				if(--(module->remaining_rx_buffer_length) == 0) {

+					/* Disable RX Complete Interrupt,

+					 * and set STATUS_OK */

+					usart_hw->INTENCLR.reg = SERCOM_USART_INTFLAG_RXC;

+					module->rx_status = STATUS_OK;

+

+					/* Run callback if registered and enabled */

+					if (callback_status

+							& (1 << USART_CALLBACK_BUFFER_RECEIVED)) {

+						(*(module->callback[USART_CALLBACK_BUFFER_RECEIVED]))(module);

+					}

+				}

+			}

+		} else {

+			/* This should not happen. Disable Receive Complete interrupt. */

+			usart_hw->INTENCLR.reg = SERCOM_USART_INTFLAG_RXC;

+		}

+	}

+}

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/usart/usart_interrupt.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/usart/usart_interrupt.h
new file mode 100644
index 0000000..395fbb8
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/sercom/usart/usart_interrupt.h
@@ -0,0 +1,164 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 SERCOM USART Asynchronous Driver

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+#ifndef USART_INTERRUPT_H_INCLUDED

+#define USART_INTERRUPT_H_INCLUDED

+

+#include "usart.h"

+

+#if !defined(__DOXYGEN__)

+void _usart_write_buffer(

+		struct usart_module *const module,

+		uint8_t *tx_data,

+		uint16_t length);

+

+void _usart_read_buffer(

+		struct usart_module *const module,

+		uint8_t *rx_data,

+		uint16_t length);

+

+void _usart_interrupt_handler(

+		uint8_t instance);

+#endif

+

+/**

+ * \addtogroup asfdoc_samd20_sercom_usart_group

+ *

+ * @{

+ */

+

+/**

+ * \name Callback Management

+ * @{

+ */

+void usart_register_callback(

+		struct usart_module *const module,

+		usart_callback_t callback_func,

+		enum usart_callback callback_type);

+

+void usart_unregister_callback(

+		struct usart_module *module,

+		enum usart_callback callback_type);

+

+/**

+ * \brief Enables callback

+ *

+ * Enables the callback function registered by the \ref usart_register_callback.

+ * The callback function will be called from the interrupt handler when the

+ * conditions for the callback type are met.

+ *

+ * \param[in]  module         Pointer to USART software instance struct

+ * \param[in]  callback_type  Callback type given by an enum

+ */

+static inline void usart_enable_callback(

+		struct usart_module *const module,

+		enum usart_callback callback_type)

+{

+	/* Sanity check arguments */

+	Assert(module);

+

+	/* Enable callback */

+	module->callback_enable_mask |= (1 << callback_type);

+

+}

+

+/**

+ * \brief Disable callback

+ *

+ * Disables the callback function registered by the \ref usart_register_callback,

+ * and the callback will not be called from the interrupt routine.

+ *

+ * \param[in]  module         Pointer to USART software instance struct

+ * \param[in]  callback_type  Callback type given by an enum

+ */

+static inline void usart_disable_callback(

+		struct usart_module *const module,

+		enum usart_callback callback_type)

+{

+	/* Sanity check arguments */

+	Assert(module);

+

+	/* Disable callback */

+	module->callback_enable_mask &= ~(1 << callback_type);

+}

+

+/**

+ * @}

+ */

+

+/**

+ * \name Writing and reading

+ * @{

+ */

+enum status_code usart_write_job(

+		struct usart_module *const module,

+		const uint16_t tx_data);

+

+enum status_code usart_read_job(

+		struct usart_module *const module,

+		uint16_t *const rx_data);

+

+enum status_code usart_write_buffer_job(

+		struct usart_module *const module,

+		uint8_t *tx_data,

+		uint16_t length);

+

+enum status_code usart_read_buffer_job(

+		struct usart_module *const module,

+		uint8_t *rx_data,

+		uint16_t length);

+

+void usart_abort_job(

+		struct usart_module *const module,

+		enum usart_transceiver_type transceiver_type);

+

+enum status_code usart_get_job_status(

+		struct usart_module *const module,

+		enum usart_transceiver_type transceiver_type);

+/**

+ * @}

+ */

+

+/**

+ * @}

+ */

+#endif /* USART_INTERRUPT_H_INCLUDED */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/clock/clock.c b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/clock/clock.c
new file mode 100644
index 0000000..3f773e5
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/clock/clock.c
@@ -0,0 +1,748 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 Clock Driver

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+#include <clock.h>

+#include <conf_clocks.h>

+

+/**

+ * \internal

+ * \brief DFLL-specific data container

+ */

+struct _system_clock_dfll_config {

+	uint32_t control;

+	uint32_t val;

+	uint32_t mul;

+};

+

+/**

+ * \internal

+ * \brief XOSC-specific data container

+ */

+struct _system_clock_xosc_config {

+	uint32_t frequency;

+};

+

+/**

+ * \internal

+ * \brief System clock module data container

+ */

+struct _system_clock_module {

+	volatile struct _system_clock_dfll_config dfll;

+	volatile struct _system_clock_xosc_config xosc;

+	volatile struct _system_clock_xosc_config xosc32k;

+};

+

+/**

+ * \internal

+ * \brief Internal module instance to cache configuration values

+ */

+static struct _system_clock_module _system_clock_inst = {

+		.dfll = {

+			.control     = 0,

+			.val     = 0,

+			.mul     = 0,

+		},

+		.xosc = {

+			.frequency   = 0,

+		},

+		.xosc32k = {

+			.frequency   = 0,

+		},

+	};

+

+/**

+ * \internal

+ * \brief Wait for sync to the DFLL control registers

+ */

+static inline void _system_dfll_wait_for_sync(void)

+{

+	while (!(SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLRDY)) {

+		/* Wait for DFLL sync */

+	}

+}

+

+/**

+ * \internal

+ * \brief Wait for sync to the OSC32K control registers

+ */

+static inline void _system_osc32k_wait_for_sync(void)

+{

+	while (!(SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_OSC32KRDY)) {

+		/* Wait for OSC32K sync */

+	}

+}

+

+static inline void _system_clock_source_dfll_set_config_errata_9905(void)

+{

+

+	/* Disable ONDEMAND mode while writing configurations */

+	SYSCTRL->DFLLCTRL.reg = _system_clock_inst.dfll.control & ~SYSCTRL_DFLLCTRL_ONDEMAND;

+	_system_dfll_wait_for_sync();

+

+	SYSCTRL->DFLLMUL.reg = _system_clock_inst.dfll.mul;

+	SYSCTRL->DFLLVAL.reg = _system_clock_inst.dfll.val;

+

+	/* Write full configuration to DFLL control register */

+	SYSCTRL->DFLLCTRL.reg = _system_clock_inst.dfll.control;

+}

+

+/**

+ * \brief Retrieve the frequency of a clock source

+ *

+ * Determines the current operating frequency of a given clock source.

+ *

+ * \param[in] clock_source  Clock source to get the frequency of

+ *

+ * \returns Frequency of the given clock source, in Hz

+ */

+uint32_t system_clock_source_get_hz(

+		const enum system_clock_source clock_source)

+{

+	switch (clock_source) {

+	case SYSTEM_CLOCK_SOURCE_XOSC:

+		return _system_clock_inst.xosc.frequency;

+

+	case SYSTEM_CLOCK_SOURCE_OSC8M:

+		return 8000000UL >> SYSCTRL->OSC8M.bit.PRESC;

+

+	case SYSTEM_CLOCK_SOURCE_OSC32K:

+		return 32768UL;

+

+	case SYSTEM_CLOCK_SOURCE_ULP32K:

+		return 32768UL;

+

+	case SYSTEM_CLOCK_SOURCE_XOSC32K:

+		return _system_clock_inst.xosc32k.frequency;

+

+	case SYSTEM_CLOCK_SOURCE_DFLL:

+

+		/* Check if the DFLL has been configured */

+		if (!(_system_clock_inst.dfll.control & SYSCTRL_DFLLCTRL_ENABLE))

+			return 0;

+

+		/* Make sure that the DFLL module is ready */

+		_system_dfll_wait_for_sync();

+

+		/* Check if operating in closed loop mode */

+		if (_system_clock_inst.dfll.control & SYSCTRL_DFLLCTRL_MODE) {

+			return system_gclk_chan_get_hz(SYSCTRL_GCLK_ID_DFLL48) *

+					(_system_clock_inst.dfll.mul & 0xffff);

+		}

+

+		return 48000000UL;

+

+	default:

+		return 0;

+	}

+}

+

+/**

+ * \brief Configure the internal OSC8M oscillator clock source

+ *

+ * Configures the 8MHz (nominal) internal RC oscillator with the given

+ * configuration settings.

+ *

+ * \param[in] config  OSC8M configuration structure containing the new config

+ */

+void system_clock_source_osc8m_set_config(

+		struct system_clock_source_osc8m_config *const config)

+{

+	SYSCTRL_OSC8M_Type temp = SYSCTRL->OSC8M;

+

+	/* Use temporary struct to reduce register access */

+	temp.bit.PRESC = config->prescaler;

+	temp.bit.ONDEMAND = config->on_demand;

+	temp.bit.RUNSTDBY = config->run_in_standby;

+

+	SYSCTRL->OSC8M = temp;

+}

+

+/**

+ * \brief Configure the internal OSC32K oscillator clock source

+ *

+ * Configures the 32KHz (nominal) internal RC oscillator with the given

+ * configuration settings.

+ *

+ * \param[in] config  OSC32K configuration structure containing the new config

+ */

+void system_clock_source_osc32k_set_config(

+		struct system_clock_source_osc32k_config *const config)

+{

+	SYSCTRL_OSC32K_Type temp = SYSCTRL->OSC32K;

+

+	/* Update settings via a temporary struct to reduce register access */

+	temp.bit.EN1K     = config->enable_1khz_output;

+	temp.bit.EN32K    = config->enable_32khz_output;

+	temp.bit.STARTUP  = config->startup_time;

+	temp.bit.ONDEMAND = config->on_demand;

+	temp.bit.RUNSTDBY = config->run_in_standby;

+

+	SYSCTRL->OSC32K  = temp;

+}

+

+/**

+ * \brief Configure the external oscillator clock source

+ *

+ * Configures the external oscillator clock source with the given configuration

+ * settings.

+ *

+ * \param[in] config  External oscillator configuration structure containing

+ *                    the new config

+ */

+void system_clock_source_xosc_set_config(

+		struct system_clock_source_xosc_config *const config)

+{

+	SYSCTRL_XOSC_Type temp = SYSCTRL->XOSC;

+

+	temp.bit.STARTUP = config->startup_time;

+

+	if (config->external_clock == SYSTEM_CLOCK_EXTERNAL_CRYSTAL) {

+		temp.bit.XTALEN = 1;

+	} else {

+		temp.bit.XTALEN = 0;

+	}

+

+	temp.bit.AMPGC = config->auto_gain_control;

+

+	/* Set gain if automatic gain control is not selected */

+	if (!config->auto_gain_control) {

+		if (config->frequency <= 2000000) {

+			temp.bit.GAIN = 0;

+		} else if (config->frequency <= 4000000) {

+			temp.bit.GAIN = 1;

+		} else if (config->frequency <= 8000000) {

+			temp.bit.GAIN = 2;

+		} else if (config->frequency <= 16000000) {

+			temp.bit.GAIN = 3;

+		} else if (config->frequency <= 30000000) {

+			temp.bit.GAIN = 4;

+		}

+

+	}

+

+	temp.bit.ONDEMAND = config->on_demand;

+	temp.bit.RUNSTDBY = config->run_in_standby;

+

+	/* Store XOSC frequency for internal use */

+	_system_clock_inst.xosc.frequency = config->frequency;

+

+	SYSCTRL->XOSC = temp;

+}

+

+/**

+ * \brief Configure the XOSC32K external 32KHz oscillator clock source

+ *

+ * Configures the external 32KHz oscillator clock source with the given

+ * configuration settings.

+ *

+ * \param[in] config  XOSC32K configuration structure containing the new config

+ */

+void system_clock_source_xosc32k_set_config(

+		struct system_clock_source_xosc32k_config *const config)

+{

+	SYSCTRL_XOSC32K_Type temp = SYSCTRL->XOSC32K;

+

+	temp.bit.STARTUP = config->startup_time;

+

+	if (config->external_clock == SYSTEM_CLOCK_EXTERNAL_CRYSTAL) {

+		temp.bit.XTALEN = 1;

+	} else {

+		temp.bit.XTALEN = 0;

+	}

+

+	temp.bit.AAMPEN = config->auto_gain_control;

+	temp.bit.EN1K = config->enable_1khz_output;

+	temp.bit.EN32K = config->enable_32khz_output;

+

+	temp.bit.ONDEMAND = config->on_demand;

+	temp.bit.RUNSTDBY = config->run_in_standby;

+

+	/* Cache the new frequency in case the user needs to check the current

+	 * operating frequency later */

+	_system_clock_inst.xosc32k.frequency = config->frequency;

+

+	SYSCTRL->XOSC32K = temp;

+}

+

+/**

+ * \brief Configure the DFLL clock source

+ *

+ * Configures the Digital Frequency Locked Loop clock source with the given

+ * configuration settings.

+ *

+ * \note The DFLL will be running when this function returns, as the DFLL module

+ *       needs to be enabled in order to perform the module configuration.

+ *

+ * \param[in] config  DFLL configuration structure containing the new config

+ */

+void system_clock_source_dfll_set_config(

+		struct system_clock_source_dfll_config *const config)

+{

+	_system_clock_inst.dfll.val =

+			SYSCTRL_DFLLVAL_COARSE(config->coarse_value) |

+			SYSCTRL_DFLLVAL_FINE(config->fine_value);

+

+	_system_clock_inst.dfll.control =

+			(uint32_t)config->wakeup_lock     |

+			(uint32_t)config->stable_tracking |

+			(uint32_t)config->quick_lock      |

+			(uint32_t)config->chill_cycle     |

+			(uint32_t)config->run_in_standby << SYSCTRL_DFLLCTRL_RUNSTDBY_Pos |

+			(uint32_t)config->on_demand << SYSCTRL_DFLLCTRL_ONDEMAND_Pos;

+

+	if (config->loop_mode == SYSTEM_CLOCK_DFLL_LOOP_MODE_CLOSED) {

+		_system_clock_inst.dfll.mul =

+				SYSCTRL_DFLLMUL_CSTEP(config->coarse_max_step) |

+				SYSCTRL_DFLLMUL_FSTEP(config->fine_max_step)   |

+				SYSCTRL_DFLLMUL_MUL(config->multiply_factor);

+

+		/* Enable the closed loop mode */

+		_system_clock_inst.dfll.control |= config->loop_mode;

+	}

+}

+

+/**

+ * \brief Writes the calibration values for a given oscillator clock source

+ *

+ * Writes an oscillator calibration value to the given oscillator control

+ * registers. The acceptable ranges are:

+ *

+ * For OSC32K:

+ *  - 7 bits (max value 128)

+ * For OSC8MHZ:

+ *  - 8 bits (Max value 255)

+ * For OSCULP:

+ *  - 5 bits (Max value 32)

+ *

+ * \note The frequency range parameter applies only when configuring the 8MHz

+ *       oscillator and will be ignored for the other oscillators.

+ *

+ * \param[in] clock_source       Clock source to calibrate

+ * \param[in] calibration_value  Calibration value to write

+ * \param[in] freq_range         Frequency range (8MHz oscillator only)

+ *

+ * \retval STATUS_ERR_INVALID_ARG  The selected clock source is not available

+ */

+enum status_code system_clock_source_write_calibration(

+		const enum system_clock_source clock_source,

+		const uint16_t calibration_value,

+		const uint8_t freq_range)

+{

+	switch (clock_source) {

+	case SYSTEM_CLOCK_SOURCE_OSC8M:

+

+		if (calibration_value > 0xfff || freq_range > 4) {

+			return STATUS_ERR_INVALID_ARG;

+		}

+

+		SYSCTRL->OSC8M.bit.CALIB  = calibration_value;

+		SYSCTRL->OSC8M.bit.FRANGE = freq_range;

+		break;

+

+	case SYSTEM_CLOCK_SOURCE_OSC32K:

+

+		if (calibration_value > 128) {

+			return STATUS_ERR_INVALID_ARG;

+		}

+

+		_system_osc32k_wait_for_sync();

+		SYSCTRL->OSC32K.bit.CALIB = calibration_value;

+		break;

+

+	case SYSTEM_CLOCK_SOURCE_ULP32K:

+

+		if (calibration_value > 32) {

+			return STATUS_ERR_INVALID_ARG;

+		}

+

+		SYSCTRL->OSCULP32K.bit.CALIB = calibration_value;

+		break;

+

+	default:

+		Assert(false);

+		return STATUS_ERR_INVALID_ARG;

+		break;

+	}

+

+	return STATUS_OK;

+}

+

+/**

+ * \brief Enables a clock source

+ *

+ * Enables a clock source which has been previously configured.

+ *

+ * \param[in] clock_source       Clock source to enable

+ *

+ * \retval STATUS_OK               Clock source was enabled successfully and

+ *                                 is ready

+ * \retval STATUS_ERR_INVALID_ARG  The clock source is not available on this

+ *                                 device

+ *

+ * \retval STATUS_ERR_NOT_INITIALIZED DFLL configuration is not initialized

+ */

+enum status_code system_clock_source_enable(

+		const enum system_clock_source clock_source)

+{

+	switch (clock_source) {

+	case SYSTEM_CLOCK_SOURCE_OSC8M:

+		SYSCTRL->OSC8M.reg |= SYSCTRL_OSC8M_ENABLE;

+		return STATUS_OK;

+

+	case SYSTEM_CLOCK_SOURCE_OSC32K:

+		SYSCTRL->OSC32K.reg |= SYSCTRL_OSC32K_ENABLE;

+		break;

+

+	case SYSTEM_CLOCK_SOURCE_XOSC:

+		SYSCTRL->XOSC.reg |= SYSCTRL_XOSC_ENABLE;

+		break;

+

+	case SYSTEM_CLOCK_SOURCE_XOSC32K:

+		SYSCTRL->XOSC32K.reg |= SYSCTRL_XOSC32K_ENABLE;

+		break;

+

+	case SYSTEM_CLOCK_SOURCE_DFLL:

+		_system_clock_inst.dfll.control |= SYSCTRL_DFLLCTRL_ENABLE;

+		_system_clock_source_dfll_set_config_errata_9905();

+		break;

+

+	case SYSTEM_CLOCK_SOURCE_ULP32K:

+		/* Always enabled */

+		return STATUS_OK;

+

+	default:

+		Assert(false);

+		return STATUS_ERR_INVALID_ARG;

+	}

+

+	return STATUS_OK;

+}

+

+/**

+ * \brief Disables a clock source

+ *

+ * Disables a clock source that was previously enabled.

+ *

+ * \param[in] clock_source  Clock source to disable

+ *

+ * \retval STATUS_OK               Clock source was disabled successfully

+ * \retval STATUS_ERR_INVALID_ARG  An invalid or unavailable clock source was

+ *                                 given

+ */

+enum status_code system_clock_source_disable(

+		const enum system_clock_source clock_source)

+{

+	switch (clock_source) {

+	case SYSTEM_CLOCK_SOURCE_OSC8M:

+		SYSCTRL->OSC8M.reg &= ~SYSCTRL_OSC8M_ENABLE;

+		break;

+

+	case SYSTEM_CLOCK_SOURCE_OSC32K:

+		SYSCTRL->OSC32K.reg &= ~SYSCTRL_OSC32K_ENABLE;

+		break;

+

+	case SYSTEM_CLOCK_SOURCE_XOSC:

+		SYSCTRL->XOSC.reg &= ~SYSCTRL_XOSC_ENABLE;

+		break;

+

+	case SYSTEM_CLOCK_SOURCE_XOSC32K:

+		SYSCTRL->XOSC32K.reg &= ~SYSCTRL_XOSC32K_ENABLE;

+		break;

+

+	case SYSTEM_CLOCK_SOURCE_DFLL:

+		_system_clock_inst.dfll.control &= ~SYSCTRL_DFLLCTRL_ENABLE;

+		SYSCTRL->DFLLCTRL.reg = _system_clock_inst.dfll.control;

+		break;

+

+	case SYSTEM_CLOCK_SOURCE_ULP32K:

+		/* Not possible to disable */

+		return STATUS_ERR_INVALID_ARG;

+

+	default:

+		return STATUS_ERR_INVALID_ARG;

+	}

+

+	return STATUS_OK;

+}

+

+/**

+ * \brief Checks if a clock source is ready

+ *

+ * Checks if a given clock source is ready to be used.

+ *

+ * \param[in] clock_source  Clock source to check if ready

+ *

+ * \returns Ready state of the given clock source.

+ *

+ * \retval true   Clock source is enabled and ready

+ * \retval false  Clock source is disabled or not yet ready

+ */

+bool system_clock_source_is_ready(

+		const enum system_clock_source clock_source)

+{

+	uint32_t mask;

+

+	switch (clock_source) {

+	case SYSTEM_CLOCK_SOURCE_OSC8M:

+		mask = SYSCTRL_PCLKSR_OSC8MRDY;

+		break;

+

+	case SYSTEM_CLOCK_SOURCE_OSC32K:

+		mask = SYSCTRL_PCLKSR_OSC32KRDY;

+		break;

+

+	case SYSTEM_CLOCK_SOURCE_XOSC:

+		mask = SYSCTRL_PCLKSR_XOSCRDY;

+		break;

+

+	case SYSTEM_CLOCK_SOURCE_XOSC32K:

+		mask = SYSCTRL_PCLKSR_XOSC32KRDY;

+		break;

+

+	case SYSTEM_CLOCK_SOURCE_DFLL:

+		mask = SYSCTRL_PCLKSR_DFLLRDY;

+		break;

+

+	case SYSTEM_CLOCK_SOURCE_ULP32K:

+		/* Not possible to disable */

+		return true;

+

+	default:

+		return false;

+	}

+

+	return ((SYSCTRL->PCLKSR.reg & mask) != 0);

+}

+

+/* Include some checks for conf_clocks.h validation */

+#include "clock_config_check.h"

+

+#if !defined(__DOXYGEN__)

+/** \internal

+ *

+ * Configures a Generic Clock Generator with the configuration from \c conf_clocks.h.

+ */

+#  define _CONF_CLOCK_GCLK_CONFIG(n, unused) \

+	if (CONF_CLOCK_GCLK_##n##_ENABLE == true) { \

+		struct system_gclk_gen_config gclk_conf;                          \

+		system_gclk_gen_get_config_defaults(&gclk_conf);                  \

+		gclk_conf.source_clock    = CONF_CLOCK_GCLK_##n##_CLOCK_SOURCE;   \

+		gclk_conf.division_factor = CONF_CLOCK_GCLK_##n##_PRESCALER;      \

+		gclk_conf.run_in_standby  = CONF_CLOCK_GCLK_##n##_RUN_IN_STANDBY; \

+		gclk_conf.output_enable   = CONF_CLOCK_GCLK_##n##_OUTPUT_ENABLE;  \

+		system_gclk_gen_set_config(GCLK_GENERATOR_##n, &gclk_conf);       \

+		system_gclk_gen_enable(GCLK_GENERATOR_##n);                       \

+	}

+

+/** \internal

+ *

+ * Configures a Generic Clock Generator with the configuration from \c conf_clocks.h,

+ * provided that it is not the main Generic Clock Generator channel.

+ */

+#  define _CONF_CLOCK_GCLK_CONFIG_NONMAIN(n, unused) \

+		if (n > 0) { _CONF_CLOCK_GCLK_CONFIG(n, unused); }

+#endif

+

+/**

+ * \brief Initialize clock system based on the configuration in conf_clocks.h

+ *

+ * This function will apply the settings in conf_clocks.h when run from the user

+ * application. All clock sources and GCLK generators are running when this function

+ * returns.

+ */

+void system_clock_init(void)

+{

+        /* Workaround for errata 10558 */

+        SYSCTRL->INTFLAG.reg = SYSCTRL_INTFLAG_BOD12RDY | SYSCTRL_INTFLAG_BOD33RDY |

+                        SYSCTRL_INTFLAG_BOD12DET | SYSCTRL_INTFLAG_BOD33DET |

+                        SYSCTRL_INTFLAG_DFLLRDY;

+

+	system_flash_set_waitstates(CONF_CLOCK_FLASH_WAIT_STATES);

+

+	/* XOSC */

+#if CONF_CLOCK_XOSC_ENABLE == true

+	struct system_clock_source_xosc_config xosc_conf;

+	system_clock_source_xosc_get_config_defaults(&xosc_conf);

+

+	xosc_conf.external_clock    = CONF_CLOCK_XOSC_EXTERNAL_CRYSTAL;

+	xosc_conf.startup_time      = CONF_CLOCK_XOSC_STARTUP_TIME;

+	xosc_conf.auto_gain_control = CONF_CLOCK_XOSC_AUTO_GAIN_CONTROL;

+	xosc_conf.frequency         = CONF_CLOCK_XOSC_EXTERNAL_FREQUENCY;

+	xosc_conf.on_demand         = CONF_CLOCK_XOSC_ON_DEMAND;

+	xosc_conf.run_in_standby    = CONF_CLOCK_XOSC_RUN_IN_STANDBY;

+

+	system_clock_source_xosc_set_config(&xosc_conf);

+	system_clock_source_enable(SYSTEM_CLOCK_SOURCE_XOSC);

+#endif

+

+

+	/* XOSC32K */

+#if CONF_CLOCK_XOSC32K_ENABLE == true

+	struct system_clock_source_xosc32k_config xosc32k_conf;

+	system_clock_source_xosc32k_get_config_defaults(&xosc32k_conf);

+

+	xosc32k_conf.frequency           = 32768UL;

+	xosc32k_conf.external_clock      = CONF_CLOCK_XOSC32K_EXTERNAL_CRYSTAL;

+	xosc32k_conf.startup_time        = CONF_CLOCK_XOSC32K_STARTUP_TIME;

+	xosc32k_conf.auto_gain_control   = CONF_CLOCK_XOSC32K_AUTO_AMPLITUDE_CONTROL;

+	xosc32k_conf.enable_1khz_output  = CONF_CLOCK_XOSC32K_ENABLE_1KHZ_OUPUT;

+	xosc32k_conf.enable_32khz_output = CONF_CLOCK_XOSC32K_ENABLE_32KHZ_OUTPUT;

+	xosc32k_conf.on_demand           = CONF_CLOCK_XOSC32K_ON_DEMAND;

+	xosc32k_conf.run_in_standby      = CONF_CLOCK_XOSC32K_RUN_IN_STANDBY;

+

+	system_clock_source_xosc32k_set_config(&xosc32k_conf);

+	system_clock_source_enable(SYSTEM_CLOCK_SOURCE_XOSC32K);

+#endif

+

+

+	/* OSCK32K */

+#if CONF_CLOCK_OSC32K_ENABLE == true

+	SYSCTRL->OSC32K.bit.CALIB =

+			(*(uint32_t *)SYSCTRL_FUSES_OSC32KCAL_ADDR >> SYSCTRL_FUSES_OSC32KCAL_Pos);

+

+	struct system_clock_source_osc32k_config osc32k_conf;

+	system_clock_source_osc32k_get_config_defaults(&osc32k_conf);

+

+	osc32k_conf.startup_time        = CONF_CLOCK_OSC32K_STARTUP_TIME;

+	osc32k_conf.enable_1khz_output  = CONF_CLOCK_OSC32K_ENABLE_1KHZ_OUTPUT;

+	osc32k_conf.enable_32khz_output = CONF_CLOCK_OSC32K_ENABLE_32KHZ_OUTPUT;

+	osc32k_conf.on_demand           = CONF_CLOCK_OSC32K_ON_DEMAND;

+	osc32k_conf.run_in_standby      = CONF_CLOCK_OSC32K_RUN_IN_STANDBY;

+

+	system_clock_source_osc32k_set_config(&osc32k_conf);

+	system_clock_source_enable(SYSTEM_CLOCK_SOURCE_OSC32K);

+#endif

+

+

+	/* DFLL (Open and Closed Loop) */

+#if CONF_CLOCK_DFLL_ENABLE == true

+	struct system_clock_source_dfll_config dfll_conf;

+	system_clock_source_dfll_get_config_defaults(&dfll_conf);

+

+	dfll_conf.loop_mode      = CONF_CLOCK_DFLL_LOOP_MODE;

+	dfll_conf.on_demand      = CONF_CLOCK_DFLL_ON_DEMAND;

+	dfll_conf.run_in_standby = CONF_CLOCK_DFLL_RUN_IN_STANDBY;

+

+	if (CONF_CLOCK_DFLL_LOOP_MODE == SYSTEM_CLOCK_DFLL_LOOP_MODE_OPEN) {

+		dfll_conf.coarse_value = CONF_CLOCK_DFLL_COARSE_VALUE;

+		dfll_conf.fine_value   = CONF_CLOCK_DFLL_FINE_VALUE;

+	}

+

+#  if CONF_CLOCK_DFLL_QUICK_LOCK == true

+	dfll_conf.quick_lock = SYSTEM_CLOCK_DFLL_QUICK_LOCK_ENABLE;

+#  else

+	dfll_conf.quick_lock = SYSTEM_CLOCK_DFLL_QUICK_LOCK_DISABLE;

+#  endif

+

+#  if CONF_CLOCK_DFLL_TRACK_AFTER_FINE_LOCK == true

+	dfll_conf.stable_tracking = SYSTEM_CLOCK_DFLL_STABLE_TRACKING_TRACK_AFTER_LOCK;

+#  else

+	dfll_conf.stable_tracking = SYSTEM_CLOCK_DFLL_STABLE_TRACKING_FIX_AFTER_LOCK;

+#  endif

+

+#  if CONF_CLOCK_DFLL_KEEP_LOCK_ON_WAKEUP == true

+	dfll_conf.wakeup_lock = SYSTEM_CLOCK_DFLL_WAKEUP_LOCK_KEEP;

+#  else

+	dfll_conf.wakeup_lock = SYSTEM_CLOCK_DFLL_WAKEUP_LOCK_LOSE;

+#  endif

+

+#  if CONF_CLOCK_DFLL_ENABLE_CHILL_CYCLE == true

+	dfll_conf.chill_cycle = SYSTEM_CLOCK_DFLL_CHILL_CYCLE_ENABLE;

+#  else

+	dfll_conf.chill_cycle = SYSTEM_CLOCK_DFLL_CHILL_CYCLE_DISABLE;

+#  endif

+

+	if (CONF_CLOCK_DFLL_LOOP_MODE == SYSTEM_CLOCK_DFLL_LOOP_MODE_CLOSED) {

+		dfll_conf.multiply_factor = CONF_CLOCK_DFLL_MULTIPLY_FACTOR;

+	}

+

+	dfll_conf.coarse_max_step = CONF_CLOCK_DFLL_MAX_COARSE_STEP_SIZE;

+	dfll_conf.fine_max_step   = CONF_CLOCK_DFLL_MAX_FINE_STEP_SIZE;

+

+	system_clock_source_dfll_set_config(&dfll_conf);

+	system_clock_source_enable(SYSTEM_CLOCK_SOURCE_DFLL);

+#endif

+

+

+	/* OSC8M */

+	struct system_clock_source_osc8m_config osc8m_conf;

+	system_clock_source_osc8m_get_config_defaults(&osc8m_conf);

+

+	osc8m_conf.prescaler      = CONF_CLOCK_OSC8M_PRESCALER;

+	osc8m_conf.on_demand      = CONF_CLOCK_OSC8M_ON_DEMAND;

+	osc8m_conf.run_in_standby = CONF_CLOCK_OSC8M_RUN_IN_STANDBY;

+

+	system_clock_source_osc8m_set_config(&osc8m_conf);

+	system_clock_source_enable(SYSTEM_CLOCK_SOURCE_OSC8M);

+

+

+	/* GCLK */

+#if CONF_CLOCK_CONFIGURE_GCLK == true

+	system_gclk_init();

+

+	/* Configure all GCLK generators except for the main generator, which

+	 * is configured later after all other clock systems are set up */

+	MREPEAT(GCLK_GEN_NUM_MSB, _CONF_CLOCK_GCLK_CONFIG_NONMAIN, ~);

+

+#  if (CONF_CLOCK_DFLL_ENABLE)

+	/* Enable DFLL reference clock if in closed loop mode */

+	if (CONF_CLOCK_DFLL_LOOP_MODE == SYSTEM_CLOCK_DFLL_LOOP_MODE_CLOSED) {

+		struct system_gclk_chan_config dfll_gclk_chan_conf;

+

+		system_gclk_chan_get_config_defaults(&dfll_gclk_chan_conf);

+		dfll_gclk_chan_conf.source_generator = CONF_CLOCK_DFLL_SOURCE_GCLK_GENERATOR;

+		system_gclk_chan_set_config(SYSCTRL_GCLK_ID_DFLL48, &dfll_gclk_chan_conf);

+		system_gclk_chan_enable(SYSCTRL_GCLK_ID_DFLL48);

+	}

+#  endif

+

+	/* Configure the main GCLK last as it might depend on other generators */

+	_CONF_CLOCK_GCLK_CONFIG(0, ~);

+#endif

+

+

+	/* CPU and BUS clocks */

+	system_cpu_clock_set_divider(CONF_CLOCK_CPU_DIVIDER);

+	system_main_clock_set_failure_detect(CONF_CLOCK_CPU_CLOCK_FAILURE_DETECT);

+	system_apb_clock_set_divider(SYSTEM_CLOCK_APB_APBA, CONF_CLOCK_APBA_DIVIDER);

+	system_apb_clock_set_divider(SYSTEM_CLOCK_APB_APBB, CONF_CLOCK_APBB_DIVIDER);

+}

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/clock/clock.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/clock/clock.h
new file mode 100644
index 0000000..f9871b0
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/clock/clock.h
@@ -0,0 +1,1275 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 Clock Driver

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+#ifndef SYSTEM_CLOCK_H_INCLUDED

+#define SYSTEM_CLOCK_H_INCLUDED

+

+/**

+ * \defgroup asfdoc_samd20_system_clock_group SAM D20 System Clock Management Driver (SYSTEM CLOCK)

+ *

+ * This driver for SAM D20 devices provides an interface for the configuration

+ * and management of the device's clocking related functions. This includes

+ * the various clock sources, bus clocks and generic clocks within the device,

+ * with functions to manage the enabling, disabling, source selection and

+ * prescaling of clocks to various internal peripherals.

+ *

+ * The following peripherals are used by this module:

+ *

+ * - GCLK (Generic Clock Management)

+ * - PM (Power Management)

+ * - SYSCTRL (Clock Source Control)

+ *

+ * The outline of this documentation is as follows:

+ *  - \ref asfdoc_samd20_system_clock_prerequisites

+ *  - \ref asfdoc_samd20_system_clock_module_overview

+ *  - \ref asfdoc_samd20_system_clock_special_considerations

+ *  - \ref asfdoc_samd20_system_clock_extra_info

+ *  - \ref asfdoc_samd20_system_clock_examples

+ *  - \ref asfdoc_samd20_system_clock_api_overview

+ *

+ *

+ * \section asfdoc_samd20_system_clock_prerequisites Prerequisites

+ *

+ * There are no prerequisites for this module.

+ *

+ *

+ * \section asfdoc_samd20_system_clock_module_overview Module Overview

+ * The SAM D20 devices contain a sophisticated clocking system, which is designed

+ * to give the maximum flexibility to the user application. This system allows

+ * a system designer to tune the performance and power consumption of the device

+ * in a dynamic manner, to achieve the best trade-off between the two for a

+ * particular application.

+ *

+ * This driver provides a set of functions for the configuration and management

+ * of the various clock related functionality within the device.

+ *

+ * \subsection asfdoc_samd20_system_clock_module_overview_clock_sources Clock Sources

+ * The SAM D20 devices have a number of master clock source modules, each of

+ * which being capable of producing a stabilized output frequency which can then

+ * be fed into the various peripherals and modules within the device.

+ *

+ * Possible clock source modules include internal R/C oscillators, internal

+ * DFLL modules, as well as external crystal oscillators and/or clock inputs.

+ *

+ * \subsection asfdoc_samd20_system_clock_module_overview_cpu_clock CPU / Bus Clocks

+ * The CPU and AHB/APBx buses are clocked by the same physical clock source

+ * (referred in this module as the Main Clock), however the APBx buses may

+ * have additional prescaler division ratios set to give each peripheral bus a

+ * different clock speed.

+ *

+ * The general main clock tree for the CPU and associated buses is shown in

+ * \ref asfdoc_samd20_system_clock_module_clock_tree "the figure below".

+ *

+ * \anchor asfdoc_samd20_system_clock_module_clock_tree

+ * \dot

+ * digraph overview {

+ *   rankdir=LR;

+ *   clk_src [label="Clock Sources", shape=none, height=0];

+ *   node [label="CPU Bus" shape=ellipse] cpu_bus;

+ *   node [label="AHB Bus" shape=ellipse] ahb_bus;

+ *   node [label="APBA Bus" shape=ellipse] apb_a_bus;

+ *   node [label="APBB Bus" shape=ellipse] apb_b_bus;

+ *   node [label="APBC Bus" shape=ellipse] apb_c_bus;

+ *   node [label="Main Bus\nPrescaler" shape=square] main_prescaler;

+ *   node [label="APBA Bus\nPrescaler" shape=square] apb_a_prescaler;

+ *   node [label="APBB Bus\nPrescaler" shape=square] apb_b_prescaler;

+ *   node [label="APBC Bus\nPrescaler" shape=square] apb_c_prescaler;

+ *   node [label="", shape=polygon, sides=4, distortion=0.6, orientation=90, style=filled, fillcolor=black, height=0.9, width=0.2] main_clock_mux;

+ *

+ *   clk_src         -> main_clock_mux;

+ *   main_clock_mux  -> main_prescaler;

+ *   main_prescaler  -> cpu_bus;

+ *   main_prescaler  -> ahb_bus;

+ *   main_prescaler  -> apb_a_prescaler;

+ *   main_prescaler  -> apb_b_prescaler;

+ *   main_prescaler  -> apb_c_prescaler;

+ *   apb_a_prescaler -> apb_a_bus;

+ *   apb_b_prescaler -> apb_b_bus;

+ *   apb_c_prescaler -> apb_c_bus;

+ * }

+ * \enddot

+ *

+ * \subsection asfdoc_samd20_system_clock_module_overview_clock_masking Clock Masking

+ * To save power, the input clock to one or more peripherals on the AHB and APBx

+ * busses can be masked away - when masked, no clock is passed into the module.

+ * Disabling of clocks of unused modules will prevent all access to the masked

+ * module, but will reduce the overall device power consumption.

+ *

+ * \subsection asfdoc_samd20_system_clock_module_overview_gclk Generic Clocks

+ * Within the SAM D20 devices are a number of Generic Clocks; these are used to

+ * provide clocks to the various peripheral clock domains in the device in a

+ * standardized manner. One or more master source clocks can be selected as the

+ * input clock to a Generic Clock Generator, which can prescale down the input

+ * frequency to a slower rate for use in a peripheral.

+ *

+ * Additionally, a number of individually selectable Generic Clock Channels are

+ * provided, which multiplex and gate the various generator outputs for one or

+ * more peripherals within the device. This setup allows for a single common

+ * generator to feed one or more channels, which can then be enabled or disabled

+ * individually as required.

+ *

+ * \anchor asfdoc_samd20_system_clock_module_chain_overview

+ * \dot

+ * digraph overview {

+ *   rankdir=LR;

+ *   node [label="Clock\nSource a" shape=square] system_clock_source;

+ *   node [label="Generator 1" shape=square] clock_gen;

+ *   node [label="Channel x" shape=square] clock_chan0;

+ *   node [label="Channel y" shape=square] clock_chan1;

+ *   node [label="Peripheral x" shape=ellipse style=filled fillcolor=lightgray] peripheral0;

+ *   node [label="Peripheral y" shape=ellipse style=filled fillcolor=lightgray] peripheral1;

+ *

+ *   system_clock_source -> clock_gen;

+ *   clock_gen   -> clock_chan0;

+ *   clock_chan0 -> peripheral0;

+ *   clock_gen   -> clock_chan1;

+ *   clock_chan1 -> peripheral1;

+ * }

+ * \enddot

+ *

+ * \subsubsection asfdoc_samd20_system_clock_module_chain_example Clock Chain Example

+ * An example setup of a complete clock chain within the device is shown in

+ * \ref asfdoc_samd20_system_clock_module_chain_example_fig "the figure below".

+ *

+ * \anchor asfdoc_samd20_system_clock_module_chain_example_fig

+ * \dot

+ * digraph overview {

+ *   rankdir=LR;

+ *   node [label="External\nOscillator" shape=square] system_clock_source0;

+ *   node [label="Generator 0" shape=square] clock_gen0;

+ *   node [label="Channel x" shape=square] clock_chan0;

+ *   node [label="Core CPU" shape=ellipse  style=filled fillcolor=lightgray] peripheral0;

+ *

+ *   system_clock_source0 -> clock_gen0;

+ *   clock_gen0    -> clock_chan0;

+ *   clock_chan0   -> peripheral0;

+ *   node [label="8MHz R/C\nOscillator (OSC8M)" shape=square fillcolor=white] system_clock_source1;

+ *   node [label="Generator 1" shape=square] clock_gen1;

+ *   node [label="Channel y" shape=square] clock_chan1;

+ *   node [label="Channel z" shape=square] clock_chan2;

+ *   node [label="SERCOM\nModule" shape=ellipse  style=filled fillcolor=lightgray] peripheral1;

+ *   node [label="Timer\nModule" shape=ellipse  style=filled fillcolor=lightgray] peripheral2;

+ *

+ *   system_clock_source1 -> clock_gen1;

+ *   clock_gen1    -> clock_chan1;

+ *   clock_gen1    -> clock_chan2;

+ *   clock_chan1   -> peripheral1;

+ *   clock_chan2   -> peripheral2;

+ * }

+ * \enddot

+ *

+ * \subsubsection asfdoc_samd20_system_clock_module_overview_gclk_generators Generic Clock Generators

+ * Each Generic Clock generator within the device can source its input clock

+ * from one of the provided Source Clocks, and prescale the output for one or

+ * more Generic Clock Channels in a one-to-many relationship. The generators

+ * thus allow for several clocks to be generated of different frequencies,

+ * power usages and accuracies, which can be turned on and off individually to

+ * disable the clocks to multiple peripherals as a group.

+ *

+ * \subsubsection asfdoc_samd20_system_clock_module_overview_gclk_channels Generic Clock Channels

+ * To connect a Generic Clock Generator to a peripheral within the

+ * device, a Generic Clock Channel is used. Each peripheral or

+ * peripheral group has an associated Generic Clock Channel, which serves as the

+ * clock input for the peripheral(s). To supply a clock to the peripheral

+ * module(s), the associated channel must be connected to a running Generic

+ * Clock Generator and the channel enabled.

+ *

+ * \section asfdoc_samd20_system_clock_special_considerations Special Considerations

+ *

+ * There are no special considerations for this module.

+ *

+ *

+ * \section asfdoc_samd20_system_clock_extra_info Extra Information

+ *

+ * For extra information see \ref asfdoc_samd20_system_clock_extra. This includes:

+ *  - \ref asfdoc_samd20_system_clock_extra_acronyms

+ *  - \ref asfdoc_samd20_system_clock_extra_dependencies

+ *  - \ref asfdoc_samd20_system_clock_extra_errata

+ *  - \ref asfdoc_samd20_system_clock_extra_history

+ *

+ *

+ * \section asfdoc_samd20_system_clock_examples Examples

+ *

+ * For a list of examples related to this driver, see

+ * \ref asfdoc_samd20_system_clock_exqsg.

+ *

+ *

+ * \section asfdoc_samd20_system_clock_api_overview API Overview

+ * @{

+ */

+

+#include <compiler.h>

+#include <gclk.h>

+

+/**

+ * \brief Available start-up times for the XOSC32K

+ *

+ * Available external 32KHz oscillator start-up times, as a number of external

+ * clock cycles.

+ */

+enum system_xosc32k_startup {

+	/** Wait 0 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC32K_STARTUP_0,

+	/** Wait 32 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC32K_STARTUP_32,

+	/** Wait 2048 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC32K_STARTUP_2048,

+	/** Wait 4096 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC32K_STARTUP_4096,

+	/** Wait 16384 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC32K_STARTUP_16384,

+	/** Wait 32768 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC32K_STARTUP_32768,

+	/** Wait 65536 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC32K_STARTUP_65536,

+	/** Wait 131072 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC32K_STARTUP_131072,

+};

+

+/**

+ * \brief Available start-up times for the XOSC

+ *

+ * Available external oscillator start-up times, as a number of external clock

+ * cycles.

+ */

+enum system_xosc_startup {

+	/** Wait 1 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC_STARTUP_1,

+	/** Wait 2 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC_STARTUP_2,

+	/** Wait 4 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC_STARTUP_4,

+	/** Wait 8 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC_STARTUP_8,

+	/** Wait 16 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC_STARTUP_16,

+	/** Wait 32 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC_STARTUP_32,

+	/** Wait 64 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC_STARTUP_64,

+	/** Wait 128 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC_STARTUP_128,

+	/** Wait 256 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC_STARTUP_256,

+	/** Wait 512 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC_STARTUP_512,

+	/** Wait 1024 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC_STARTUP_1024,

+	/** Wait 2048 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC_STARTUP_2048,

+	/** Wait 4096 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC_STARTUP_4096,

+	/** Wait 8192 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC_STARTUP_8192,

+	/** Wait 16384 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC_STARTUP_16384,

+	/** Wait 32768 clock cycles until the clock source is considered stable */

+	SYSTEM_XOSC_STARTUP_32768,

+};

+

+/**

+ * \brief Available start-up times for the OSC32K

+ *

+ * Available internal 32KHz oscillator start-up times, as a number of internal

+ * OSC32K clock cycles.

+ */

+enum system_osc32k_startup {

+	/** Wait 0 clock cycles until the clock source is considered stable */

+	SYSTEM_OSC32K_STARTUP_0,

+	/** Wait 2 clock cycles until the clock source is considered stable */

+	SYSTEM_OSC32K_STARTUP_2,

+	/** Wait 4 clock cycles until the clock source is considered stable */

+	SYSTEM_OSC32K_STARTUP_4,

+	/** Wait 8 clock cycles until the clock source is considered stable */

+	SYSTEM_OSC32K_STARTUP_8,

+	/** Wait 16 clock cycles until the clock source is considered stable */

+	SYSTEM_OSC32K_STARTUP_16,

+	/** Wait 32 clock cycles until the clock source is considered stable */

+	SYSTEM_OSC32K_STARTUP_32,

+	/** Wait 64 clock cycles until the clock source is considered stable */

+	SYSTEM_OSC32K_STARTUP_64,

+	/** Wait 128 clock cycles until the clock source is considered stable */

+	SYSTEM_OSC32K_STARTUP_128,

+};

+

+/**

+ * \brief Division prescalers for the internal 8MHz system clock

+ *

+ * Available prescalers for the internal 8MHz (nominal) system clock.

+ */

+enum system_osc8m_div {

+	/** Do not divide the 8MHz RC oscillator output */

+	SYSTEM_OSC8M_DIV_1,

+	/** Divide the 8MHz RC oscillator output by 2 */

+	SYSTEM_OSC8M_DIV_2,

+	/** Divide the 8MHz RC oscillator output by 4 */

+	SYSTEM_OSC8M_DIV_4,

+	/** Divide the 8MHz RC oscillator output by 8 */

+	SYSTEM_OSC8M_DIV_8,

+};

+

+/**

+ * \brief Main CPU and APB/AHB bus clock source prescaler values

+ *

+ * Available division ratios for the CPU and APB/AHB bus clocks.

+ */

+enum system_main_clock_div {

+	/** Divide Main clock by 1 */

+	SYSTEM_MAIN_CLOCK_DIV_1,

+	/** Divide Main clock by 2 */

+	SYSTEM_MAIN_CLOCK_DIV_2,

+	/** Divide Main clock by 4 */

+	SYSTEM_MAIN_CLOCK_DIV_4,

+	/** Divide Main clock by 8 */

+	SYSTEM_MAIN_CLOCK_DIV_8,

+	/** Divide Main clock by 16 */

+	SYSTEM_MAIN_CLOCK_DIV_16,

+	/** Divide Main clock by 32 */

+	SYSTEM_MAIN_CLOCK_DIV_32,

+	/** Divide Main clock by 64 */

+	SYSTEM_MAIN_CLOCK_DIV_64,

+	/** Divide Main clock by 128 */

+	SYSTEM_MAIN_CLOCK_DIV_128,

+};

+

+/**

+ * \brief External clock source types.

+ *

+ * Available external clock source types.

+ */

+enum system_clock_external {

+	/** The external clock source is a crystal oscillator */

+	SYSTEM_CLOCK_EXTERNAL_CRYSTAL,

+	/** The connected clock source is an external logic level clock signal */

+	SYSTEM_CLOCK_EXTERNAL_CLOCK,

+};

+

+/**

+ * \brief Operating modes of the DFLL clock source.

+ *

+ * Available operating modes of the DFLL clock source module,

+ */

+enum system_clock_dfll_loop_mode {

+	/** The DFLL is operating in open loop mode with no feedback */

+	SYSTEM_CLOCK_DFLL_LOOP_MODE_OPEN,

+	/** The DFLL is operating in closed loop mode with frequency feedback from

+	 *  a low frequency reference clock

+	 */

+	SYSTEM_CLOCK_DFLL_LOOP_MODE_CLOSED = SYSCTRL_DFLLCTRL_MODE,

+};

+

+/**

+ * \brief Locking behavior for the DFLL during device wake-up

+ *

+ * DFLL lock behavior modes on device wake-up from sleep.

+ */

+enum system_clock_dfll_wakeup_lock {

+	/** Keep DFLL lock when the device wakes from sleep */

+	SYSTEM_CLOCK_DFLL_WAKEUP_LOCK_KEEP,

+	/** Lose DFLL lock when the devices wakes from sleep */

+	SYSTEM_CLOCK_DFLL_WAKEUP_LOCK_LOSE = SYSCTRL_DFLLCTRL_LLAW,

+};

+

+/**

+ * \brief Fine tracking behavior for the DFLL once a lock has been acquired

+ *

+ * DFLL fine tracking behavior modes after a lock has been acquired.

+ */

+enum system_clock_dfll_stable_tracking {

+	/** Keep tracking after the DFLL has gotten a fine lock */

+	SYSTEM_CLOCK_DFLL_STABLE_TRACKING_TRACK_AFTER_LOCK,

+	/** Stop tracking after the DFLL has gotten a fine lock */

+	SYSTEM_CLOCK_DFLL_STABLE_TRACKING_FIX_AFTER_LOCK = SYSCTRL_DFLLCTRL_STABLE,

+};

+

+/**

+ * \brief Chill-cycle behavior of the DFLL module

+ *

+ * DFLL chill-cycle behavior modes of the DFLL module. A chill cycle is a period

+ * of time when the DFLL output frequency is not measured by the unit, to allow

+ * the output to stabilize after a change in the input clock source.

+ */

+enum system_clock_dfll_chill_cycle {

+	/** Enable a chill cycle, where the DFLL output frequency is not measured */

+	SYSTEM_CLOCK_DFLL_CHILL_CYCLE_ENABLE,

+	/** Disable a chill cycle, where the DFLL output frequency is not measured */

+	SYSTEM_CLOCK_DFLL_CHILL_CYCLE_DISABLE = SYSCTRL_DFLLCTRL_CCDIS,

+};

+

+/**

+ * \brief QuickLock settings for the DFLL module

+ *

+ * DFLL QuickLock settings for the DFLL module, to allow for a faster lock of

+ * the DFLL output frequency at the expense of accuracy.

+ */

+enum system_clock_dfll_quick_lock {

+	/** Enable the QuickLock feature for looser lock requirements on the DFLL */

+	SYSTEM_CLOCK_DFLL_QUICK_LOCK_ENABLE,

+	/** Disable the QuickLock feature for strict lock requirements on the DFLL */

+	SYSTEM_CLOCK_DFLL_QUICK_LOCK_DISABLE = SYSCTRL_DFLLCTRL_QLDIS,

+};

+

+/**

+ * \brief List of APB peripheral buses

+ *

+ * Available bus clock domains on the APB bus.

+ */

+enum system_clock_apb_bus {

+	/** Peripheral bus A on the APB bus. */

+	SYSTEM_CLOCK_APB_APBA,

+	/** Peripheral bus B on the APB bus. */

+	SYSTEM_CLOCK_APB_APBB,

+	/** Peripheral bus C on the APB bus. */

+	SYSTEM_CLOCK_APB_APBC,

+};

+

+/**

+ * \brief Available clock sources in the system

+ *

+ * Clock sources available to the GCLK generators

+ */

+enum system_clock_source {

+	/** Internal 8MHz RC oscillator */

+	SYSTEM_CLOCK_SOURCE_OSC8M    = GCLK_SOURCE_OSC8M,

+	/** Internal 32kHz RC oscillator */

+	SYSTEM_CLOCK_SOURCE_OSC32K   = GCLK_SOURCE_OSC32K,

+	/** External oscillator */

+	SYSTEM_CLOCK_SOURCE_XOSC     = GCLK_SOURCE_XOSC ,

+	/** External 32kHz oscillator */

+	SYSTEM_CLOCK_SOURCE_XOSC32K  = GCLK_SOURCE_XOSC32K,

+	/** Digital Frequency Locked Loop (DFLL) */

+	SYSTEM_CLOCK_SOURCE_DFLL     = GCLK_SOURCE_DFLL48M,

+	/** Internal Ultra Low Power 32kHz oscillator */

+	SYSTEM_CLOCK_SOURCE_ULP32K   = GCLK_SOURCE_OSCULP32K,

+};

+

+/**

+ * \brief Configuration structure for XOSC

+ *

+ * External oscillator clock configuration structure.

+ */

+struct system_clock_source_xosc_config {

+	/** External clock type */

+	enum system_clock_external external_clock;

+	/** Crystal oscillator start-up time */

+	enum system_xosc_startup startup_time;

+	/** Enable automatic amplitude gain control */

+	bool auto_gain_control;

+	/** External clock/crystal frequency */

+	uint32_t frequency;

+	/** Keep the XOSC enabled in standby sleep mode */

+	bool run_in_standby;

+	/** Run On Demand. If this is set the XOSC won't run

+	 * until requested by a peripheral */

+	bool on_demand;

+};

+

+/**

+ * \brief Configuration structure for XOSC32K

+ *

+ * External 32KHz oscillator clock configuration structure.

+ */

+struct system_clock_source_xosc32k_config {

+	/** External clock type */

+	enum system_clock_external external_clock;

+	/** Crystal oscillator start-up time */

+	enum system_xosc32k_startup startup_time;

+	/** Enable automatic amplitude control */

+	bool auto_gain_control;

+	/** Enable 1kHz output */

+	bool enable_1khz_output;

+	/** Enable 32kHz output */

+	bool enable_32khz_output;

+	/** External clock/crystal frequency */

+	uint32_t frequency;

+	/** Keep the XOSC32K enabled in standby sleep mode */

+	bool run_in_standby;

+	/** Run On Demand. If this is set the XOSC32K won't run

+	 * until requested by a peripheral */

+	bool on_demand;

+};

+

+/**

+ * \brief Configuration structure for OSC8M

+ *

+ * Internal 8MHz (nominal) oscillator configuration structure.

+ */

+struct system_clock_source_osc8m_config {

+	/* Internal 8MHz RC oscillator prescaler */

+	enum system_osc8m_div prescaler;

+	/** Keep the OSC8M enabled in standby sleep mode */

+	bool run_in_standby;

+	/** Run On Demand. If this is set the OSC8M won't run

+	 * until requested by a peripheral */

+	bool on_demand;

+};

+

+/**

+ * \brief Configuration structure for OSC32K

+ *

+ * Internal 32KHz (nominal) oscillator configuration structure.

+ */

+struct system_clock_source_osc32k_config {

+	/** Startup time */

+	enum system_osc32k_startup startup_time;

+	/** Enable 1kHz output */

+	bool enable_1khz_output;

+	/** Enable 32kHz output */

+	bool enable_32khz_output;

+	/** Keep the OSC32K enabled in standby sleep mode */

+	bool run_in_standby;

+	/** Run On Demand. If this is set the OSC32K won't run

+	 * until requested by a peripheral */

+	bool on_demand;

+};

+

+/**

+ * \brief Configuration structure for DFLL

+ *

+ * DFLL oscillator configuration structure.

+ */

+struct system_clock_source_dfll_config {

+	/** Loop mode */

+	enum system_clock_dfll_loop_mode loop_mode;

+	/** Keep the DFLL enabled in standby sleep mode */

+	bool run_in_standby;

+	/** Run On Demand. If this is set the DFLL won't run

+	 * until requested by a peripheral */

+	bool on_demand;

+	/** Enable Quick Lock */

+	enum system_clock_dfll_quick_lock quick_lock;

+	/** Enable Chill Cycle */

+	enum system_clock_dfll_chill_cycle chill_cycle;

+	/** DFLL lock state on wakeup */

+	enum system_clock_dfll_wakeup_lock wakeup_lock;

+	/** DFLL tracking after fine lock */

+	enum system_clock_dfll_stable_tracking stable_tracking;

+	/** Coarse calibration value (Open loop mode) */

+	uint8_t coarse_value;

+	/** Fine calibration value (Open loop mode) */

+	uint8_t fine_value;

+	/** Coarse adjustment max step size (Closed loop mode) */

+	uint8_t coarse_max_step;

+	/** Fine adjustment max step size (Closed loop mode) */

+	uint8_t fine_max_step;

+	/** DFLL multiply factor (Closed loop mode */

+	uint16_t multiply_factor;

+};

+

+/**

+ * \name External Oscillator management

+ * @{

+ */

+

+/**

+ * \brief Retrieve the default configuration for XOSC

+ *

+ * Fills a configuration structure with the default configuration for an

+ * external oscillator module:

+ *   - External Crystal

+ *   - Start-up time of 16384 external clock cycles

+ *   - Automatic crystal gain control mode enabled

+ *   - Frequency of 12MHz

+ *   - Don't run in STANDBY sleep mode

+ *   - Run only when requested by peripheral (on demand)

+ *

+ * \param[out] config  Configuration structure to fill with default values

+ */

+static inline void system_clock_source_xosc_get_config_defaults(

+		struct system_clock_source_xosc_config *const config)

+{

+	Assert(config);

+

+	config->external_clock    = SYSTEM_CLOCK_EXTERNAL_CRYSTAL;

+	config->startup_time      = SYSTEM_XOSC_STARTUP_16384;

+	config->auto_gain_control = true;

+	config->frequency         = 12000000UL;

+	config->run_in_standby    = false;

+	config->on_demand         = true;

+}

+

+void system_clock_source_xosc_set_config(

+		struct system_clock_source_xosc_config *const config);

+

+/**

+ * @}

+ */

+

+

+/**

+ * \name External 32KHz Oscillator management

+ * @{

+ */

+

+/**

+ * \brief Retrieve the default configuration for XOSC32K

+ *

+ * Fills a configuration structure with the default configuration for an

+ * external 32KHz oscillator module:

+ *   - External Crystal

+ *   - Start-up time of 16384 external clock cycles

+ *   - Automatic crystal gain control mode enabled

+ *   - Frequency of 32.768KHz

+ *   - 1KHz clock output disabled

+ *   - 32KHz clock output enabled

+ *   - Don't run in STANDBY sleep mode

+ *   - Run only when requested by peripheral (on demand)

+ *

+ * \param[out] config  Configuration structure to fill with default values

+ */

+static inline void system_clock_source_xosc32k_get_config_defaults(

+		struct system_clock_source_xosc32k_config *const config)

+{

+	Assert(config);

+

+	config->external_clock      = SYSTEM_CLOCK_EXTERNAL_CRYSTAL;

+	config->startup_time        = SYSTEM_XOSC32K_STARTUP_16384;

+	config->auto_gain_control   = true;

+	config->frequency           = 32768UL;

+	config->enable_1khz_output  = false;

+	config->enable_32khz_output = true;

+	config->run_in_standby      = false;

+	config->on_demand           = true;

+}

+

+void system_clock_source_xosc32k_set_config(

+		struct system_clock_source_xosc32k_config *const config);

+/**

+ * @}

+ */

+

+

+/**

+ * \name Internal 32KHz Oscillator management

+ * @{

+ */

+

+/**

+ * \brief Retrieve the default configuration for OSC32K

+ *

+ * Fills a configuration structure with the default configuration for an

+ * internal 32KHz oscillator module:

+ *   - 1KHz clock output enabled

+ *   - 32KHz clock output enabled

+ *   - Don't run in STANDBY sleep mode

+ *   - Run only when requested by peripheral (on demand)

+ *

+ * \param[out] config  Configuration structure to fill with default values

+ */

+static inline void system_clock_source_osc32k_get_config_defaults(

+		struct system_clock_source_osc32k_config *const config)

+{

+	Assert(config);

+

+	config->enable_1khz_output  = true;

+	config->enable_32khz_output = true;

+	config->run_in_standby      = false;

+	config->on_demand           = true;

+}

+

+void system_clock_source_osc32k_set_config(

+		struct system_clock_source_osc32k_config *const config);

+

+/**

+ * @}

+ */

+

+

+/**

+ * \name Internal 8MHz Oscillator management

+ * @{

+ */

+

+/**

+ * \brief Retrieve the default configuration for OSC8M

+ *

+ * Fills a configuration structure with the default configuration for an

+ * internal 8MHz (nominal) oscillator module:

+ *   - Clock output frequency divided by a factor of 8

+ *   - Don't run in STANDBY sleep mode

+ *   - Run only when requested by peripheral (on demand)

+ *

+ * \param[out] config  Configuration structure to fill with default values

+ */

+static inline void system_clock_source_osc8m_get_config_defaults(

+		struct system_clock_source_osc8m_config *const config)

+{

+	Assert(config);

+

+	config->prescaler      = SYSTEM_OSC8M_DIV_8;

+	config->run_in_standby = false;

+	config->on_demand      = true;

+}

+

+void system_clock_source_osc8m_set_config(

+		struct system_clock_source_osc8m_config *const config);

+

+/**

+ * @}

+ */

+

+

+/**

+ * \name Internal DFLL management

+ * @{

+ */

+

+/**

+ * \brief Retrieve the default configuration for DFLL

+ *

+ * Fills a configuration structure with the default configuration for a

+ * DFLL oscillator module:

+ *   - Open loop mode

+ *   - QuickLock mode enabled

+ *   - Chill cycle enabled

+ *   - Output frequency lock maintained during device wake-up

+ *   - Continuous tracking of the output frequency

+ *   - Default tracking values at the mid-points for both coarse and fine

+ *     tracking parameters

+ *   - Don't run in STANDBY sleep mode

+ *   - Run only when requested by peripheral (on demand)

+ *

+ * \param[out] config  Configuration structure to fill with default values

+ */

+static inline void system_clock_source_dfll_get_config_defaults(

+		struct system_clock_source_dfll_config *const config)

+{

+	Assert(config);

+

+	config->loop_mode       = SYSTEM_CLOCK_DFLL_LOOP_MODE_OPEN;

+	config->quick_lock      = SYSTEM_CLOCK_DFLL_QUICK_LOCK_ENABLE;

+	config->chill_cycle     = SYSTEM_CLOCK_DFLL_CHILL_CYCLE_ENABLE;

+	config->wakeup_lock     = SYSTEM_CLOCK_DFLL_WAKEUP_LOCK_KEEP;

+	config->stable_tracking = SYSTEM_CLOCK_DFLL_STABLE_TRACKING_TRACK_AFTER_LOCK;

+	config->run_in_standby  = false;

+	config->on_demand       = true;

+

+	/* Open loop mode calibration value */

+	config->coarse_value    = 0x1f / 4; /* Midpoint */

+	config->fine_value      = 0xff / 4; /* Midpoint */

+

+	/* Closed loop mode */

+	config->coarse_max_step = 1;

+	config->fine_max_step   = 1;

+	config->multiply_factor = 6; /* Multiply 8MHz by 6 to get 48MHz */

+}

+

+void system_clock_source_dfll_set_config(

+		struct system_clock_source_dfll_config *const config);

+

+/**

+ * @}

+ */

+

+/**

+ * \name Clock source management

+ * @{

+ */

+enum status_code system_clock_source_write_calibration(

+		const enum system_clock_source system_clock_source,

+		const uint16_t calibration_value,

+		const uint8_t freq_range);

+

+enum status_code system_clock_source_enable(

+		const enum system_clock_source system_clock_source);

+

+enum status_code system_clock_source_disable(

+		const enum system_clock_source clk_source);

+

+bool system_clock_source_is_ready(

+		const enum system_clock_source clk_source);

+

+uint32_t system_clock_source_get_hz(

+		const enum system_clock_source clk_source);

+

+/**

+ * @}

+ */

+

+/**

+ * \name Main clock management

+ * @{

+ */

+

+/**

+ * \brief Enable or disable the main clock failure detection.

+ *

+ * This mechanism allows switching automatically the main clock to the safe

+ * RCSYS clock, when the main clock source is considered off.

+ *

+ * This may happen for instance when an external crystal is selected as the

+ * clock source of the main clock and the crystal dies. The mechanism is to

+ * detect, during a RCSYS period, at least one rising edge of the main clock.

+ * If no rising edge is seen the clock is considered failed.

+ * As soon as the detector is enabled, the clock failure detector

+ * CFD) will monitor the divided main clock. When a clock failure is detected,

+ * the main clock automatically switches to the RCSYS clock and the CFD

+ * interrupt is generated if enabled.

+ *

+ * \note The failure detect must be disabled if the system clock is the same or

+ *       slower than 32kHz as it will believe the system clock has failed with

+ *       a too-slow clock.

+ *

+ * \param[in] enable  Boolean \c true to enable, \c false to disable detection

+ */

+static inline void system_main_clock_set_failure_detect(

+		const bool enable)

+{

+	if (enable) {

+		PM->CTRL.reg |=  PM_CTRL_CFDEN;

+	} else {

+		PM->CTRL.reg &= ~PM_CTRL_CFDEN;

+	}

+}

+

+/**

+ * \brief Set main CPU clock divider.

+ *

+ * Sets the clock divider used on the main clock to provide the CPU clock.

+ *

+ * \param[in] divider  CPU clock divider to set

+ */

+static inline void system_cpu_clock_set_divider(

+		const enum system_main_clock_div divider)

+{

+	Assert(((uint32_t)divider & PM_CPUSEL_CPUDIV_Msk) == divider);

+	PM->CPUSEL.reg = (uint32_t)divider;

+}

+

+/**

+ * \brief Retrieves the current frequency of the CPU core.

+ *

+ * Retrieves the operating frequency of the CPU core, obtained from the main

+ * generic clock and the set CPU bus divider.

+ *

+ * \return Current CPU frequency in Hz.

+ */

+static inline uint32_t system_cpu_clock_get_hz(void)

+{

+	return (system_gclk_gen_get_hz(GCLK_GENERATOR_0) >> PM->CPUSEL.reg);

+}

+

+/**

+ * \brief Set APBx clock divider.

+ *

+ * Set the clock divider used on the main clock to provide the clock for the

+ * given APBx bus.

+ *

+ * \param[in] divider  APBx bus divider to set

+ * \param[in] bus      APBx bus to set divider for

+ *

+ * \returns Status of the clock division change operation.

+ *

+ * \retval STATUS_ERR_INVALID_ARG  Invalid bus ID was given

+ * \retval STATUS_OK               The APBx clock was set successfully

+ */

+static inline enum status_code system_apb_clock_set_divider(

+		const enum system_clock_apb_bus bus,

+		const enum system_main_clock_div divider)

+{

+	switch (bus) {

+		case SYSTEM_CLOCK_APB_APBA:

+			PM->APBASEL.reg = (uint32_t)divider;

+			break;

+		case SYSTEM_CLOCK_APB_APBB:

+			PM->APBBSEL.reg = (uint32_t)divider;

+			break;

+		case SYSTEM_CLOCK_APB_APBC:

+			PM->APBCSEL.reg = (uint32_t)divider;

+			break;

+		default:

+			Assert(false);

+			return STATUS_ERR_INVALID_ARG;

+	}

+

+	return STATUS_OK;

+}

+

+/**

+ * \brief Retrieves the current frequency of a ABPx.

+ *

+ * Retrieves the operating frequency of an APBx bus, obtained from the main

+ * generic clock and the set APBx bus divider.

+ *

+ * \return Current APBx bus frequency in Hz.

+ */

+static inline uint32_t system_apb_clock_get_hz(

+		const enum system_clock_apb_bus bus)

+{

+	uint16_t bus_divider = 0;

+

+	switch (bus) {

+		case SYSTEM_CLOCK_APB_APBA:

+			bus_divider = PM->APBASEL.reg;

+			break;

+		case SYSTEM_CLOCK_APB_APBB:

+			bus_divider = PM->APBBSEL.reg;

+			break;

+		case SYSTEM_CLOCK_APB_APBC:

+			bus_divider = PM->APBCSEL.reg;

+			break;

+		default:

+			Assert(false);

+			return 0;

+	}

+

+	return (system_gclk_gen_get_hz(GCLK_GENERATOR_0) >> bus_divider);

+}

+

+

+/**

+ * @}

+ */

+

+/**

+ * \name Bus clock masking

+ * @{

+ */

+

+/**

+ * \brief Set bits in the clock mask for the AHB bus.

+ *

+ * This function will set bits in the clock mask for the AHB bus.

+ * Any bits set to 1 will enable that clock, 0 bits in the mask

+ * will be ignored

+ *

+ * \param[in] ahb_mask  AHB clock mask to enable

+ */

+static inline void system_ahb_clock_set_mask(

+		const uint32_t ahb_mask)

+{

+	PM->AHBMASK.reg |= ahb_mask;

+}

+

+/**

+ * \brief Clear bits in the clock mask for the AHB bus.

+ *

+ * This function will clear bits in the clock mask for the AHB bus.

+ * Any bits set to 1 will disable that clock, 0 bits in the mask

+ * will be ignored.

+ *

+ * \param[in] ahb_mask  AHB clock mask to disable

+ */

+static inline void system_ahb_clock_clear_mask(

+		const uint32_t ahb_mask)

+{

+	PM->AHBMASK.reg &= ~ahb_mask;

+}

+

+/**

+ * \brief Set bits in the clock mask for an APBx bus.

+ *

+ * This function will set bits in the clock mask for an APBx bus.

+ * Any bits set to 1 will enable the corresponding module clock, zero bits in

+ * the mask will be ignored.

+ *

+ * \param[in] mask  APBx clock mask, a \c SYSTEM_CLOCK_APB_APBx constant from

+ *                  the device header files

+ * \param[in] bus   Bus to set clock mask bits for, a mask of \c PM_APBxMASK_*

+ *                  constants from the device header files

+ *

+ * \returns Status indicating the result of the clock mask change operation.

+ *

+ * \retval STATUS_ERR_INVALID_ARG  Invalid bus given

+ * \retval STATUS_OK               The clock mask was set successfully

+ */

+static inline enum status_code system_apb_clock_set_mask(

+		const enum system_clock_apb_bus bus,

+		const uint32_t mask)

+{

+	switch (bus) {

+		case SYSTEM_CLOCK_APB_APBA:

+			PM->APBAMASK.reg |= mask;

+			break;

+

+		case SYSTEM_CLOCK_APB_APBB:

+			PM->APBBMASK.reg |= mask;

+			break;

+

+		case SYSTEM_CLOCK_APB_APBC:

+			PM->APBCMASK.reg |= mask;

+			break;

+

+		default:

+			Assert(false);

+			return STATUS_ERR_INVALID_ARG;

+

+	}

+

+	return STATUS_OK;

+}

+

+/**

+ * \brief Clear bits in the clock mask for an APBx bus.

+ *

+ * This function will clear bits in the clock mask for an APBx bus.

+ * Any bits set to 1 will disable the corresponding module clock, zero bits in

+ * the mask will be ignored.

+ *

+ * \param[in] mask  APBx clock mask, a \c SYSTEM_CLOCK_APB_APBx constant from

+ *                  the device header files

+ * \param[in] bus   Bus to clear clock mask bits for

+ *

+ * \returns Status indicating the result of the clock mask change operation.

+ *

+ * \retval STATUS_ERR_INVALID_ARG  Invalid bus ID was given.

+ * \retval STATUS_OK               The clock mask was changed successfully.

+ */

+static inline enum status_code system_apb_clock_clear_mask(

+		const enum system_clock_apb_bus bus,

+		const uint32_t mask)

+{

+	switch (bus) {

+		case SYSTEM_CLOCK_APB_APBA:

+			PM->APBAMASK.reg &= ~mask;

+			break;

+

+		case SYSTEM_CLOCK_APB_APBB:

+			PM->APBBMASK.reg &= ~mask;

+			break;

+

+		case SYSTEM_CLOCK_APB_APBC:

+			PM->APBCMASK.reg &= ~mask;

+			break;

+

+		default:

+			Assert(false);

+			return STATUS_ERR_INVALID_ARG;

+	}

+

+	return STATUS_OK;

+}

+

+/**

+ * @}

+ */

+

+/**

+ * \name System Clock Initialization

+ * @{

+ */

+

+void system_clock_init(void);

+

+/**

+ * @}

+ */

+

+/**

+ * \name System Flash Wait States

+ * @{

+ */

+

+/**

+ * \brief Set flash controller wait states

+ *

+ * Will set the number of wait states that are used by the onboard

+ * flash memory. The number of wait states depend on both device

+ * supply voltage and CPU speed. The required number of wait states

+ * can be found in the electrical characteristics of the device.

+ *

+ * \param[in] wait_states Number of wait states to use for internal flash

+ */

+static inline void system_flash_set_waitstates(uint8_t wait_states)

+{

+	Assert((wait_states & NVMCTRL_CTRLB_RWS_Msk) == wait_states);

+	NVMCTRL->CTRLB.bit.RWS = wait_states;

+}

+/**

+ * @}

+ */

+

+/**

+ * @}

+ */

+

+/**

+ * \page asfdoc_samd20_system_clock_extra Extra Information for SYSTEM CLOCK Driver

+ *

+ * \section asfdoc_samd20_system_clock_extra_acronyms Acronyms

+ * Below is a table listing the acronyms used in this module, along with their

+ * intended meanings.

+ *

+ * <table>

+ *	<tr>

+ *		<th>Acronym</th>

+ *		<th>Description</th>

+ *	</tr>

+ *	<tr>

+ *		<td>DFLL</td>

+ *		<td>Digital Frequency Locked Loop</td>

+ *	</tr>

+ *	<tr>

+ *		<td>MUX</td>

+ *		<td>Multiplexer</td>

+ *	</tr>

+ *	<tr>

+ *		<td>OSC32K</td>

+ *		<td>Internal 32KHz Oscillator</td>

+ *	</tr>

+ *	<tr>

+ *		<td>OSC8M</td>

+ *		<td>Internal 8MHz Oscillator</td>

+ *	</tr>

+ *	<tr>

+ *		<td>PLL</td>

+ *		<td>Phase Locked Loop</td>

+ *	</tr>

+ *	<tr>

+ *		<td>OSC</td>

+ *		<td>Oscillator</td>

+ *	</tr>

+ *	<tr>

+ *		<td>XOSC</td>

+ *		<td>External Oscillator</td>

+ *	</tr>

+ *	<tr>

+ *		<td>XOSC32K</td>

+ *		<td>External 32KHz Oscillator</td>

+ *	</tr>

+ *	<tr>

+ *		<td>AHB</td>

+ *		<td>Advanced High-performance Bus</td>

+ *	</tr>

+ *	<tr>

+ *		<td>APB</td>

+ *		<td>Advanced Peripheral Bus</td>

+ *	</tr>

+ * </table>

+ *

+ *

+ * \section asfdoc_samd20_system_clock_extra_dependencies Dependencies

+ * This driver has the following dependencies:

+ *

+ *  - None

+ *

+ *

+ * \section asfdoc_samd20_system_clock_extra_errata Errata

+ *	<tr>

+ *	<td>

+ *	 \li This driver implements workaround for errata 10558

+ *	     "Several reset values of SYSCTRL.INTFLAG are wrong (BOD and DFLL)"<br>

+ *	     When system_init is called it will reset these interrupts flags before they are used.

+ *	</td>

+ *	</tr>

+ *

+ *	<tr>

+ *	<td>

+ *	 \li This driver implements experimental workaround for errata 9905<br>

+ *	     "The DFLL clock must be requested before being configured otherwise a

+ *	     write access to a DFLL register can freeze the device."<br>

+ *	     This driver will enable and configure the DFLL before the ONDEMAND bit is set.

+ *	</td>

+ *	</tr>

+ *	

+ *

+ *

+ * \section asfdoc_samd20_system_clock_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 Changed default value for CONF_CLOCK_DFLL_ON_DEMAND from true to false

+ *		</td>

+ *	</tr>

+ *	<tr>

+ *		<td>\li Updated dfll configuration function to implement workaround for errata 9905 in the DFLL module.

+ *		    \li Updated \c system_clock_init() to reset interrupt flags before they are used, errata 10558.

+ *		    \li Fixed \c system_clock_source_get_hz() to return correcy DFLL frequency number.

+ *		</td>

+ *	</tr>

+ *	<tr>

+ *		<td>\li Fixed \c system_clock_source_is_ready not returning the correct

+ *              state for \c SYSTEM_CLOCK_SOURCE_OSC8M.

+ *          \li Renamed the various \c system_clock_source_*_get_default_config()

+ *              functions to \c system_clock_source_*_get_config_defaults() to

+ *              match the remainder of ASF.

+ *          \li Added OSC8M calibration constant loading from the device signature

+ *              row when the oscillator is initialized.</td>

+ *	</tr>

+ *	<tr>

+ *		<td>Initial Release</td>

+ *	</tr>

+ * </table>

+ */

+

+/**

+ * \page asfdoc_samd20_system_clock_exqsg Examples for System Clock Driver

+ *

+ * This is a list of the available Quick Start guides (QSGs) and example

+ * applications for \ref asfdoc_samd20_system_clock_group. QSGs are simple

+ * examples with step-by-step instructions to configure and use this driver in

+ * a selection of use cases. Note that QSGs can be compiled as a standalone

+ * application or be added to the user application.

+ *

+ *  - \subpage asfdoc_samd20_system_clock_basic_use_case

+ *  - \subpage asfdoc_samd20_system_gclk_basic_use_case

+ *

+ * \page asfdoc_samd20_system_clock_document_revision_history Document Revision History

+ *

+ * <table>

+ *	<tr>

+ *		<th>Doc. Rev.</td>

+ *		<th>Date</td>

+ *		<th>Comments</td>

+ *	</tr>

+ *	<tr>

+ *		<td>B</td>

+ *		<td>06/2013</td>

+ *		<td>Corrected documentation typos.</td>

+ *	</tr>

+ *	<tr>

+ *		<td>A</td>

+ *		<td>06/2013</td>

+ *		<td>Initial release</td>

+ *	</tr>

+ * </table>

+ */

+

+#endif /* SYSTEM_CLOCK_H_INCLUDED */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/clock/clock_config_check.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/clock/clock_config_check.h
new file mode 100644
index 0000000..0181f77
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/clock/clock_config_check.h
@@ -0,0 +1,383 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 Clock Driver

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+

+#ifndef CLOCK_CONFIG_CHECK_H

+#  define CLOCK_CONFIG_CHECK_H

+

+#if !defined(CONF_CLOCK_CPU_CLOCK_FAILURE_DETECT)

+#  error CONF_CLOCK_CPU_CLOCK_FAILURE_DETECT not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_FLASH_WAIT_STATES)

+#  error CONF_CLOCK_FLASH_WAIT_STATES not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_CPU_DIVIDER)

+#  error CONF_CLOCK_CPU_DIVIDER not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_APBA_DIVIDER)

+#  error CONF_CLOCK_APBA_DIVIDER not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_APBB_DIVIDER)

+#  error CONF_CLOCK_APBB_DIVIDER not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_OSC8M_PRESCALER)

+#  error CONF_CLOCK_OSC8M_PRESCALER not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_OSC8M_ON_DEMAND)

+#  error CONF_CLOCK_OSC8M_ON_DEMAND not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_OSC8M_RUN_IN_STANDBY)

+#  error CONF_CLOCK_OSC8M_RUN_IN_STANDBY not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_XOSC_ENABLE)

+#  error CONF_CLOCK_XOSC_ENABLE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_XOSC_EXTERNAL_CRYSTAL)

+#  error CONF_CLOCK_XOSC_EXTERNAL_CRYSTAL not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_XOSC_EXTERNAL_FREQUENCY)

+#  error CONF_CLOCK_XOSC_EXTERNAL_FREQUENCY not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_XOSC_STARTUP_TIME)

+#  error CONF_CLOCK_XOSC_STARTUP_TIME not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_XOSC_AUTO_GAIN_CONTROL)

+#  error CONF_CLOCK_XOSC_AUTO_GAIN_CONTROL not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_XOSC_ON_DEMAND)

+#  error CONF_CLOCK_XOSC_ON_DEMAND not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_XOSC_RUN_IN_STANDBY)

+#  error CONF_CLOCK_XOSC_RUN_IN_STANDBY not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_XOSC32K_ENABLE)

+#  error CONF_CLOCK_XOSC32K_ENABLE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_XOSC32K_EXTERNAL_CRYSTAL)

+#  error CONF_CLOCK_XOSC32K_EXTERNAL_CRYSTAL not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_XOSC32K_STARTUP_TIME)

+#  error CONF_CLOCK_XOSC32K_STARTUP_TIME not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_XOSC32K_AUTO_AMPLITUDE_CONTROL)

+#  error CONF_CLOCK_XOSC32K_AUTO_AMPLITUDE_CONTROL not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_XOSC32K_ENABLE_1KHZ_OUPUT)

+#  error CONF_CLOCK_XOSC32K_ENABLE_1KHZ_OUPUT not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_XOSC32K_ENABLE_32KHZ_OUTPUT)

+#  error CONF_CLOCK_XOSC32K_ENABLE_32KHZ_OUTPUT not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_XOSC32K_ON_DEMAND)

+#  error CONF_CLOCK_XOSC32K_ON_DEMAND not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_XOSC32K_RUN_IN_STANDBY)

+#  error CONF_CLOCK_XOSC32K_RUN_IN_STANDBY not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_OSC32K_ENABLE)

+#  error CONF_CLOCK_OSC32K_ENABLE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_OSC32K_STARTUP_TIME)

+#  error CONF_CLOCK_OSC32K_STARTUP_TIME not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_OSC32K_ENABLE_1KHZ_OUTPUT)

+#  error CONF_CLOCK_OSC32K_ENABLE_1KHZ_OUTPUT not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_OSC32K_ENABLE_32KHZ_OUTPUT)

+#  error CONF_CLOCK_OSC32K_ENABLE_32KHZ_OUTPUT not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_OSC32K_ON_DEMAND)

+#  error CONF_CLOCK_OSC32K_ON_DEMAND not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_OSC32K_RUN_IN_STANDBY)

+#  error CONF_CLOCK_OSC32K_RUN_IN_STANDBY not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_DFLL_ENABLE)

+#  error CONF_CLOCK_DFLL_ENABLE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_DFLL_LOOP_MODE)

+#  error CONF_CLOCK_DFLL_LOOP_MODE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_DFLL_ON_DEMAND)

+#  error CONF_CLOCK_DFLL_ON_DEMAND not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_DFLL_RUN_IN_STANDBY)

+#  error CONF_CLOCK_DFLL_RUN_IN_STANDBY not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_DFLL_COARSE_VALUE)

+#  error CONF_CLOCK_DFLL_COARSE_VALUE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_DFLL_FINE_VALUE)

+#  error CONF_CLOCK_DFLL_FINE_VALUE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_DFLL_SOURCE_GCLK_GENERATOR)

+#  error CONF_CLOCK_DFLL_SOURCE_GCLK_GENERATOR not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_DFLL_MULTIPLY_FACTOR)

+#  error CONF_CLOCK_DFLL_MULTIPLY_FACTOR not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_DFLL_QUICK_LOCK)

+#  error CONF_CLOCK_DFLL_QUICK_LOCK not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_DFLL_TRACK_AFTER_FINE_LOCK)

+#  error CONF_CLOCK_DFLL_TRACK_AFTER_FINE_LOCK not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_DFLL_KEEP_LOCK_ON_WAKEUP)

+#  error CONF_CLOCK_DFLL_KEEP_LOCK_ON_WAKEUP not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_DFLL_ENABLE_CHILL_CYCLE)

+#  error CONF_CLOCK_DFLL_ENABLE_CHILL_CYCLE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_DFLL_MAX_COARSE_STEP_SIZE)

+#  error CONF_CLOCK_DFLL_MAX_COARSE_STEP_SIZE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_DFLL_MAX_FINE_STEP_SIZE)

+#  error CONF_CLOCK_DFLL_MAX_FINE_STEP_SIZE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_CONFIGURE_GCLK)

+#  error CONF_CLOCK_CONFIGURE_GCLK not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_0_ENABLE)

+#  error CONF_CLOCK_GCLK_0_ENABLE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_0_RUN_IN_STANDBY)

+#  error CONF_CLOCK_GCLK_0_RUN_IN_STANDBY not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_0_CLOCK_SOURCE)

+#  error CONF_CLOCK_GCLK_0_CLOCK_SOURCE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_0_PRESCALER)

+#  error CONF_CLOCK_GCLK_0_PRESCALER not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_0_OUTPUT_ENABLE)

+#  error CONF_CLOCK_GCLK_0_OUTPUT_ENABLE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_1_ENABLE)

+#  error CONF_CLOCK_GCLK_1_ENABLE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_1_RUN_IN_STANDBY)

+#  error CONF_CLOCK_GCLK_1_RUN_IN_STANDBY not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_1_CLOCK_SOURCE)

+#  error CONF_CLOCK_GCLK_1_CLOCK_SOURCE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_1_PRESCALER)

+#  error CONF_CLOCK_GCLK_1_PRESCALER not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_1_OUTPUT_ENABLE)

+#  error CONF_CLOCK_GCLK_1_OUTPUT_ENABLE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_2_ENABLE)

+#  error CONF_CLOCK_GCLK_2_ENABLE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_2_RUN_IN_STANDBY)

+#  error CONF_CLOCK_GCLK_2_RUN_IN_STANDBY not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_2_CLOCK_SOURCE)

+#  error CONF_CLOCK_GCLK_2_CLOCK_SOURCE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_2_PRESCALER)

+#  error CONF_CLOCK_GCLK_2_PRESCALER not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_2_OUTPUT_ENABLE)

+#  error CONF_CLOCK_GCLK_2_OUTPUT_ENABLE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_3_ENABLE)

+#  error CONF_CLOCK_GCLK_3_ENABLE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_3_RUN_IN_STANDBY)

+#  error CONF_CLOCK_GCLK_3_RUN_IN_STANDBY not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_3_CLOCK_SOURCE)

+#  error CONF_CLOCK_GCLK_3_CLOCK_SOURCE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_3_PRESCALER)

+#  error CONF_CLOCK_GCLK_3_PRESCALER not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_3_OUTPUT_ENABLE)

+#  error CONF_CLOCK_GCLK_3_OUTPUT_ENABLE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_4_ENABLE)

+#  error CONF_CLOCK_GCLK_4_ENABLE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_4_RUN_IN_STANDBY)

+#  error CONF_CLOCK_GCLK_4_RUN_IN_STANDBY not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_4_CLOCK_SOURCE)

+#  error CONF_CLOCK_GCLK_4_CLOCK_SOURCE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_4_PRESCALER)

+#  error CONF_CLOCK_GCLK_4_PRESCALER not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_4_OUTPUT_ENABLE)

+#  error CONF_CLOCK_GCLK_4_OUTPUT_ENABLE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_5_ENABLE)

+#  error CONF_CLOCK_GCLK_5_ENABLE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_5_RUN_IN_STANDBY)

+#  error CONF_CLOCK_GCLK_5_RUN_IN_STANDBY not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_5_CLOCK_SOURCE)

+#  error CONF_CLOCK_GCLK_5_CLOCK_SOURCE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_5_PRESCALER)

+#  error CONF_CLOCK_GCLK_5_PRESCALER not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_5_OUTPUT_ENABLE)

+#  error CONF_CLOCK_GCLK_5_OUTPUT_ENABLE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_6_ENABLE)

+#  error CONF_CLOCK_GCLK_6_ENABLE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_6_RUN_IN_STANDBY)

+#  error CONF_CLOCK_GCLK_6_RUN_IN_STANDBY not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_6_CLOCK_SOURCE)

+#  error CONF_CLOCK_GCLK_6_CLOCK_SOURCE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_6_PRESCALER)

+#  error CONF_CLOCK_GCLK_6_PRESCALER not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_6_OUTPUT_ENABLE)

+#  error CONF_CLOCK_GCLK_6_OUTPUT_ENABLE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_7_ENABLE)

+#  error CONF_CLOCK_GCLK_7_ENABLE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_7_RUN_IN_STANDBY)

+#  error CONF_CLOCK_GCLK_7_RUN_IN_STANDBY not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_7_CLOCK_SOURCE)

+#  error CONF_CLOCK_GCLK_7_CLOCK_SOURCE not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_7_PRESCALER)

+#  error CONF_CLOCK_GCLK_7_PRESCALER not defined in conf_clock.h

+#endif

+

+#if !defined(CONF_CLOCK_GCLK_7_OUTPUT_ENABLE)

+#  error CONF_CLOCK_GCLK_7_OUTPUT_ENABLE not defined in conf_clock.h

+#endif

+

+#endif /* CLOCK_CONFIG_CHECK_H */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/clock/gclk.c b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/clock/gclk.c
new file mode 100644
index 0000000..9d2cd44
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/clock/gclk.c
@@ -0,0 +1,392 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 Generic Clock Driver

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+

+#include <gclk.h>

+#include <clock.h>

+#include <system_interrupt.h>

+

+/**

+ * \brief Initializes the GCLK driver.

+ *

+ * Initializes the Generic Clock module, disabling and resetting all active

+ * Generic Clock Generators and Channels to their power-on default values.

+ */

+void system_gclk_init(void)

+{

+	/* Turn on the digital interface clock */

+	system_apb_clock_set_mask(SYSTEM_CLOCK_APB_APBA, PM_APBAMASK_GCLK);

+

+	/* Software reset the module to ensure it is re-initialized correctly */

+	GCLK->CTRL.reg = GCLK_CTRL_SWRST;

+	while (GCLK->CTRL.reg & GCLK_CTRL_SWRST) {

+		/* Wait for reset to complete */

+	}

+}

+

+/**

+ * \brief Writes a Generic Clock Generator configuration to the hardware module.

+ *

+ * Writes out a given configuration of a Generic Clock Generator configuration

+ * to the hardware module.

+ *

+ * \note Changing the clock source on the fly (on a running

+ *       generator) can take additional time if the clock source is configured

+ *       to only run on-demand (ONDEMAND bit is set) and it is not currently

+ *       running (no peripheral is requesting the clock source). In this case

+ *       the GCLK will request the new clock while still keeping a request to

+ *       the old clock source until the new clock source is ready.

+ *

+ * \note This function will not start a generator that is not already running;

+ *       to start the generator, call \ref system_gclk_gen_enable()

+ *       after configuring a generator.

+ *

+ * \param[in] generator  Generic Clock Generator index to configure

+ * \param[in] config     Configuration settings for the generator

+ */

+void system_gclk_gen_set_config(

+		const uint8_t generator,

+		struct system_gclk_gen_config *const config)

+{

+	/* Sanity check arguments */

+	Assert(config);

+

+	/* Cache new register configurations to minimize sync requirements. */

+	uint32_t new_genctrl_config = (generator << GCLK_GENCTRL_ID_Pos);

+	uint32_t new_gendiv_config  = (generator << GCLK_GENDIV_ID_Pos);

+

+	/* Select the requested source clock for the generator */

+	new_genctrl_config |= config->source_clock << GCLK_GENCTRL_SRC_Pos;

+

+	/* Configure the clock to be either high or low when disabled */

+	if (config->high_when_disabled) {

+		new_genctrl_config |= GCLK_GENCTRL_OOV;

+	}

+

+	/* Configure if the clock output to I/O pin should be enabled. */

+	if (config->output_enable) {

+		new_genctrl_config |= GCLK_GENCTRL_OE;

+	}

+

+	/* Set division factor */

+	if (config->division_factor > 1) {

+		/* Check if division is a power of two */

+		if (((config->division_factor & (config->division_factor - 1)) == 0)) {

+			/* Determine the index of the highest bit set to get the

+			 * division factor that must be loaded into the division

+			 * register */

+

+			uint32_t div2_count = 0;

+

+			uint32_t mask;

+			for (mask = (1UL << 1); mask < config->division_factor;

+						mask <<= 1) {

+				div2_count++;

+			}

+

+			/* Set binary divider power of 2 division factor */

+			new_gendiv_config  |= div2_count << GCLK_GENDIV_DIV_Pos;

+			new_genctrl_config |= GCLK_GENCTRL_DIVSEL;

+		} else {

+			/* Set integer division factor */

+

+			new_gendiv_config  |=

+					(config->division_factor) << GCLK_GENDIV_DIV_Pos;

+

+			/* Enable non-binary division with increased duty cycle accuracy */

+			new_genctrl_config |= GCLK_GENCTRL_IDC;

+		}

+

+	}

+

+	/* Enable or disable the clock in standby mode */

+	if (config->run_in_standby) {

+		new_genctrl_config |= GCLK_GENCTRL_RUNSTDBY;

+	}

+

+	while (system_gclk_is_syncing()) {

+		/* Wait for synchronization */

+	};

+

+	system_interrupt_enter_critical_section();

+

+	/* Select the correct generator */

+	*((uint8_t*)&GCLK->GENDIV.reg) = generator;

+

+	/* Write the new generator configuration */

+	while (system_gclk_is_syncing()) {

+		/* Wait for synchronization */

+	};

+	GCLK->GENDIV.reg  = new_gendiv_config;

+

+	while (system_gclk_is_syncing()) {

+		/* Wait for synchronization */

+	};

+	GCLK->GENCTRL.reg = new_genctrl_config | (GCLK->GENCTRL.reg & GCLK_GENCTRL_GENEN);

+

+	system_interrupt_leave_critical_section();

+}

+

+/**

+ * \brief Enables a Generic Clock Generator that was previously configured.

+ *

+ * Starts the clock generation of a Generic Clock Generator that was previously

+ * configured via a call to \ref system_gclk_gen_set_config().

+ *

+ * \param[in] generator  Generic Clock Generator index to enable

+ */

+void system_gclk_gen_enable(

+		const uint8_t generator)

+{

+	while (system_gclk_is_syncing()) {

+		/* Wait for synchronization */

+	};

+

+	system_interrupt_enter_critical_section();

+

+	/* Select the requested generator */

+	*((uint8_t*)&GCLK->GENCTRL.reg) = generator;

+	while (system_gclk_is_syncing()) {

+		/* Wait for synchronization */

+	};

+

+	/* Enable generator */

+	GCLK->GENCTRL.reg |= GCLK_GENCTRL_GENEN;

+

+	system_interrupt_leave_critical_section();

+}

+

+/**

+ * \brief Disables a Generic Clock Generator that was previously enabled.

+ *

+ * Stops the clock generation of a Generic Clock Generator that was previously

+ * started via a call to \ref system_gclk_gen_enable().

+ *

+ * \param[in] generator  Generic Clock Generator index to disable

+ */

+void system_gclk_gen_disable(

+		const uint8_t generator)

+{

+	while (system_gclk_is_syncing()) {

+		/* Wait for synchronization */

+	};

+

+	system_interrupt_enter_critical_section();

+

+	/* Select the requested generator */

+	*((uint8_t*)&GCLK->GENCTRL.reg) = generator;

+	while (system_gclk_is_syncing()) {

+		/* Wait for synchronization */

+	};

+

+	/* Disable generator */

+	GCLK->GENCTRL.reg &= ~GCLK_GENCTRL_GENEN;

+	while (GCLK->GENCTRL.reg & GCLK_GENCTRL_GENEN) {

+		/* Wait for clock to become disabled */

+	}

+

+	system_interrupt_leave_critical_section();

+}

+

+/**

+ * \brief Retrieves the clock frequency of a Generic Clock generator.

+ *

+ * Determines the clock frequency (in Hz) of a specified Generic Clock

+ * generator, used as a source to a Generic Clock Channel module.

+ *

+ * \param[in] generator  Generic Clock Generator index

+ *

+ * \return The frequency of the generic clock generator, in Hz.

+ */

+uint32_t system_gclk_gen_get_hz(

+		const uint8_t generator)

+{

+	while (system_gclk_is_syncing()) {

+		/* Wait for synchronization */

+	};

+

+	system_interrupt_enter_critical_section();

+

+	/* Select the appropriate generator */

+	*((uint8_t*)&GCLK->GENCTRL.reg) = generator;

+	while (system_gclk_is_syncing()) {

+		/* Wait for synchronization */

+	};

+

+	/* Get the frequency of the source connected to the GCLK generator */

+	uint32_t gen_input_hz = system_clock_source_get_hz(

+			(enum system_clock_source)GCLK->GENCTRL.bit.SRC);

+

+	*((uint8_t*)&GCLK->GENCTRL.reg) = generator;

+

+	uint8_t divsel = GCLK->GENCTRL.bit.DIVSEL;

+

+	/* Select the appropriate generator division register */

+	*((uint8_t*)&GCLK->GENDIV.reg) = generator;

+	while (system_gclk_is_syncing()) {

+		/* Wait for synchronization */

+	};

+

+	uint32_t divider = GCLK->GENDIV.bit.DIV;

+

+	system_interrupt_leave_critical_section();

+

+	/* Check if the generator is using fractional or binary division */

+	if (!divsel && divider > 1) {

+		gen_input_hz /= divider;

+	} else if (divsel) {

+		gen_input_hz >>= (divider+1);

+	}

+

+	return gen_input_hz;

+}

+

+/**

+ * \brief Writes a Generic Clock configuration to the hardware module.

+ *

+ * Writes out a given configuration of a Generic Clock configuration to the

+ * hardware module. If the clock is currently running, it will be stopped.

+ *

+ * \note Once called the clock will not be running; to start the clock,

+ *       call \ref system_gclk_chan_enable() after configuring a clock channel.

+ *

+ * \param[in] channel   Generic Clock channel to configure

+ * \param[in] config    Configuration settings for the clock

+ */

+void system_gclk_chan_set_config(

+		const uint8_t channel,

+		struct system_gclk_chan_config *const config)

+{

+	/* Sanity check arguments */

+	Assert(config);

+

+	/* Cache the new config to reduce sync requirements */

+	uint32_t new_clkctrl_config = (channel << GCLK_CLKCTRL_ID_Pos);

+

+	/* Select the desired generic clock generator */

+	new_clkctrl_config |= config->source_generator << GCLK_CLKCTRL_GEN_Pos;

+

+	/* Enable write lock if requested to prevent further modification */

+	if (config->write_lock) {

+		new_clkctrl_config |= GCLK_CLKCTRL_WRTLOCK;

+	}

+

+	/* Disable generic clock channel */

+	system_gclk_chan_disable(channel);

+

+	/* Write the new configuration */

+	GCLK->CLKCTRL.reg = new_clkctrl_config;

+}

+

+/**

+ * \brief Enables a Generic Clock that was previously configured.

+ *

+ * Starts the clock generation of a Generic Clock that was previously

+ * configured via a call to \ref system_gclk_chan_set_config().

+ *

+ * \param[in] channel   Generic Clock channel to enable

+ */

+void system_gclk_chan_enable(

+		const uint8_t channel)

+{

+	system_interrupt_enter_critical_section();

+

+	/* Select the requested generator channel */

+	*((uint8_t*)&GCLK->CLKCTRL.reg) = channel;

+

+	/* Enable the generic clock */

+	GCLK->CLKCTRL.reg |= GCLK_CLKCTRL_CLKEN;

+

+	system_interrupt_leave_critical_section();

+}

+

+/**

+ * \brief Disables a Generic Clock that was previously enabled.

+ *

+ * Stops the clock generation of a Generic Clock that was previously started

+ * via a call to \ref system_gclk_chan_enable().

+ *

+ * \param[in] channel  Generic Clock channel to disable

+ */

+void system_gclk_chan_disable(

+		const uint8_t channel)

+{

+	system_interrupt_enter_critical_section();

+

+	/* Select the requested generator channel */

+	*((uint8_t*)&GCLK->CLKCTRL.reg) = channel;

+

+	/* Disable the generic clock */

+	GCLK->CLKCTRL.reg &= ~GCLK_CLKCTRL_CLKEN;

+	while (GCLK->CLKCTRL.reg & GCLK_CLKCTRL_CLKEN) {

+		/* Wait for clock to become disabled */

+	}

+

+	system_interrupt_leave_critical_section();

+}

+

+/**

+ * \brief Retrieves the clock frequency of a Generic Clock channel.

+ *

+ * Determines the clock frequency (in Hz) of a specified Generic Clock

+ * channel, used as a source to a device peripheral module.

+ *

+ * \param[in] channel  Generic Clock Channel index

+ *

+ * \return The frequency of the generic clock channel, in Hz.

+ */

+uint32_t system_gclk_chan_get_hz(

+		const uint8_t channel)

+{

+	uint8_t gen_id;

+

+	system_interrupt_enter_critical_section();

+

+	/* Select the requested generic clock channel */

+	*((uint8_t*)&GCLK->CLKCTRL.reg) = channel;

+	gen_id = GCLK->CLKCTRL.bit.GEN;

+

+	system_interrupt_leave_critical_section();

+

+	/* Return the clock speed of the associated GCLK generator */

+	return system_gclk_gen_get_hz(gen_id);

+}

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/clock/gclk.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/clock/gclk.h
new file mode 100644
index 0000000..c334a4a
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/clock/gclk.h
@@ -0,0 +1,314 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 Generic Clock Driver

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+#ifndef SYSTEM_CLOCK_GCLK_H_INCLUDED

+#define SYSTEM_CLOCK_GCLK_H_INCLUDED

+

+/**

+ * \addtogroup asfdoc_samd20_system_clock_group

+ *

+ * @{

+ */

+

+#include <compiler.h>

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+/**

+ * \brief List of available GCLK generators.

+ *

+ * List of Available GCLK generators. This enum is used in the peripheral

+ * device drivers to select the GCLK generator to be used for its operation.

+ *

+ * The number of GCLK generators available is device dependent.

+ */

+enum gclk_generator {

+	/** GCLK generator channel 0. */

+	GCLK_GENERATOR_0,

+#if defined(__DOXYGEN__) || (GCLK_GEN_NUM_MSB > 0)

+	/** GCLK generator channel 1. */

+	GCLK_GENERATOR_1,

+#endif

+#if defined(__DOXYGEN__) || (GCLK_GEN_NUM_MSB > 1)

+	/** GCLK generator channel 2. */

+	GCLK_GENERATOR_2,

+#endif

+#if defined(__DOXYGEN__) || (GCLK_GEN_NUM_MSB > 2)

+	/** GCLK generator channel 3. */

+	GCLK_GENERATOR_3,

+#endif

+#if defined(__DOXYGEN__) || (GCLK_GEN_NUM_MSB > 3)

+	/** GCLK generator channel 4. */

+	GCLK_GENERATOR_4,

+#endif

+#if defined(__DOXYGEN__) || (GCLK_GEN_NUM_MSB > 4)

+	/** GCLK generator channel 5. */

+	GCLK_GENERATOR_5,

+#endif

+#if defined(__DOXYGEN__) || (GCLK_GEN_NUM_MSB > 5)

+	/** GCLK generator channel 6. */

+	GCLK_GENERATOR_6,

+#endif

+#if defined(__DOXYGEN__) || (GCLK_GEN_NUM_MSB > 6)

+	/** GCLK generator channel 7. */

+	GCLK_GENERATOR_7,

+#endif

+#if defined(__DOXYGEN__) || (GCLK_GEN_NUM_MSB > 7)

+	/** GCLK generator channel 8. */

+	GCLK_GENERATOR_8,

+#endif

+#if defined(__DOXYGEN__) || (GCLK_GEN_NUM_MSB > 8)

+	/** GCLK generator channel 9. */

+	GCLK_GENERATOR_9,

+#endif

+#if defined(__DOXYGEN__) || (GCLK_GEN_NUM_MSB > 9)

+	/** GCLK generator channel 10. */

+	GCLK_GENERATOR_10,

+#endif

+#if defined(__DOXYGEN__) || (GCLK_GEN_NUM_MSB > 10)

+	/** GCLK generator channel 11. */

+	GCLK_GENERATOR_11,

+#endif

+#if defined(__DOXYGEN__) || (GCLK_GEN_NUM_MSB > 11)

+	/** GCLK generator channel 12. */

+	GCLK_GENERATOR_12,

+#endif

+#if defined(__DOXYGEN__) || (GCLK_GEN_NUM_MSB > 12)

+	/** GCLK generator channel 13. */

+	GCLK_GENERATOR_13,

+#endif

+#if defined(__DOXYGEN__) || (GCLK_GEN_NUM_MSB > 13)

+	/** GCLK generator channel 14. */

+	GCLK_GENERATOR_14,

+#endif

+#if defined(__DOXYGEN__) || (GCLK_GEN_NUM_MSB > 14)

+	/** GCLK generator channel 15. */

+	GCLK_GENERATOR_15,

+#endif

+#if defined(__DOXYGEN__) || (GCLK_GEN_NUM_MSB > 15)

+	/** GCLK generator channel 16. */

+	GCLK_GENERATOR_16,

+#endif

+};

+

+/**

+ * \brief Generic Clock Generator configuration structure.

+ *

+ * Configuration structure for a Generic Clock Generator channel. This

+ * structure should be initialized by the

+ * \ref system_gclk_gen_get_config_defaults() function before being modified by

+ * the user application.

+ */

+struct system_gclk_gen_config {

+	/** Source clock input channel index. */

+	uint8_t source_clock;

+	/** If \c true, the generator output level is high when disabled. */

+	bool high_when_disabled;

+	/** Integer division factor of the clock output compared to the input. */

+	uint32_t division_factor;

+	/** If \c true, the clock is kept enabled during device standby mode. */

+	bool run_in_standby;

+	/** If \c true, enables GCLK generator clock output to a GPIO pin. */

+	bool output_enable;

+};

+

+/**

+ * \brief Generic Clock configuration structure.

+ *

+ * Configuration structure for a Generic Clock channel. This structure

+ * should be initialized by the \ref system_gclk_chan_get_config_defaults()

+ * function before being modified by the user application.

+ */

+struct system_gclk_chan_config {

+	/** Generic Clock Generator source channel. */

+	enum gclk_generator source_generator;

+	/** If \c true the clock configuration will be locked until the device is

+	 *  reset. */

+	bool write_lock;

+};

+

+/** \name Generic Clock management

+ * @{

+ */

+

+/**

+ * \brief Determines if the hardware module(s) are currently synchronizing to the bus.

+ *

+ * Checks to see if the underlying hardware peripheral module(s) are currently

+ * synchronizing across multiple clock domains to the hardware bus, This

+ * function can be used to delay further operations on a module until such time

+ * that it is ready, to prevent blocking delays for synchronization in the

+ * user application.

+ *

+ * \return Synchronization status of the underlying hardware module(s).

+ *

+ * \retval true if the module has completed synchronization

+ * \retval false if the module synchronization is ongoing

+ */

+static inline bool system_gclk_is_syncing(void)

+{

+	if (GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY) {

+		return true;

+	}

+

+	return false;

+}

+

+void system_gclk_init(void);

+

+/** @} */

+

+

+/**

+ * \name Generic Clock management (Generators)

+ * @{

+ */

+

+/**

+ * \brief Initializes a Generic Clock Generator configuration structure to defaults.

+ *

+ * Initializes a given Generic Clock Generator 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 Clock is generated undivided from the source frequency

+ *  \li Clock generator output is low when the generator is disabled

+ *  \li The input clock is sourced from input clock channel 0

+ *  \li Clock will be disabled during sleep

+ *  \li The clock output will not be routed to a physical GPIO pin

+ *

+ * \param[out] config  Configuration structure to initialize to default values

+ */

+static inline void system_gclk_gen_get_config_defaults(

+		struct system_gclk_gen_config *const config)

+{

+	/* Sanity check arguments */

+	Assert(config);

+

+	/* Default configuration values */

+	config->division_factor    = 1;

+	config->high_when_disabled = false;

+	config->source_clock       = GCLK_SOURCE_OSC8M;

+	config->run_in_standby     = false;

+	config->output_enable      = false;

+}

+

+void system_gclk_gen_set_config(

+		const uint8_t generator,

+		struct system_gclk_gen_config *const config);

+

+void system_gclk_gen_enable(

+		const uint8_t generator);

+

+void system_gclk_gen_disable(

+		const uint8_t generator);

+

+/** @} */

+

+

+/**

+ * \name Generic Clock management (Channels)

+ * @{

+ */

+

+/**

+ * \brief Initializes a Generic Clock configuration structure to defaults.

+ *

+ * Initializes a given Generic Clock 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 Clock is sourced from the Generic Clock Generator channel 0

+ *  \li Clock configuration will not be write-locked when set

+ *

+ * \param[out] config  Configuration structure to initialize to default values

+ */

+static inline void system_gclk_chan_get_config_defaults(

+		struct system_gclk_chan_config *const config)

+{

+	/* Sanity check arguments */

+	Assert(config);

+

+	/* Default configuration values */

+	config->source_generator = GCLK_GENERATOR_0;

+	config->write_lock       = false;

+}

+

+void system_gclk_chan_set_config(

+		const uint8_t channel,

+		struct system_gclk_chan_config *const config);

+

+void system_gclk_chan_enable(

+		const uint8_t channel);

+

+void system_gclk_chan_disable(

+		const uint8_t channel);

+

+/** @} */

+

+

+/**

+ * \name Generic Clock frequency retrieval

+ * @{

+ */

+

+uint32_t system_gclk_gen_get_hz(

+		const uint8_t generator);

+

+uint32_t system_gclk_chan_get_hz(

+		const uint8_t channel);

+

+/** @} */

+

+#ifdef __cplusplus

+}

+#endif

+

+/** @} */

+

+#endif

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/clock/quick_start_clock/qs_clock_source.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/clock/quick_start_clock/qs_clock_source.h
new file mode 100644
index 0000000..b20af38
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/clock/quick_start_clock/qs_clock_source.h
@@ -0,0 +1,125 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 System Clock Driver Quick Start

+ *

+ * Copyright (C) 2012-2013 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

+ */

+

+/**

+ * \page asfdoc_samd20_system_clock_basic_use_case Quick Start Guide for SYSTEM CLOCK - Basic

+ *

+ * In this case we apply the following configuration:

+ * - RC8MHz (internal 8MHz RC oscillator)

+ *  - Divide by 4, giving a frequency of 2MHz

+ * - DFLL (Digital frequency locked loop)

+ *  - Open loop mode

+ *  - 48MHz frequency

+ * - CPU clock

+ *  - Use the DFLL, configured to 48MHz

+ *

+ * \section asfdoc_samd20_system_clock_basic_use_case_setup Setup

+ *

+ * \subsection asfdoc_samd20_system_clock_basic_use_case_setup_prereq Prerequisites

+ * There are no special setup requirements for this use-case.

+ *

+ * \subsection asfdoc_samd20_system_clock_basic_use_case_setup_code Code

+ * Copy-paste the following setup code to your application:

+ * \snippet qs_clock_source.c setup

+ *

+ * \subsection asfdoc_samd20_system_clock_basic_use_case_setup_flow Workflow

+ * -# Create a EXTOSC32K module configuration struct, which can be filled

+ *    out to adjust the configuration of the external 32KHz oscillator channel.

+ *  \snippet qs_clock_source.c config_extosc32k_config

+ *

+ * -# Initialize the oscillator configuration struct with the module's default

+ *    values.

+ *    \note This should always be performed before using the configuration

+ *          struct to ensure that all values are initialized to known default

+ *          settings.

+ *

+ *  \snippet qs_clock_source.c config_extosc32k_get_defaults

+ *

+ * -# Alter the EXTOSC32K module configuration struct to require a start-up time

+ *    of 4096 clock cycles.

+ *  \snippet qs_clock_source.c config_extosc32k_change_defaults

+ *

+ * -# Write the new configuration to the EXTOSC32K module.

+ *  \snippet qs_clock_source.c config_extosc32k_set_config

+ *

+ * -# Create a DFLL module configuration struct, which can be filled

+ *    out to adjust the configuration of the external 32KHz oscillator channel.

+ *  \snippet qs_clock_source.c config_dfll_config

+ *

+ * -# Initialize the DFLL oscillator configuration struct with the module's

+ *    default values.

+ *    \note This should always be performed before using the configuration

+ *          struct to ensure that all values are initialized to known default

+ *          settings.

+ *

+ *  \snippet qs_clock_source.c config_dfll_get_defaults

+ *

+ * -# Write the new configuration to the DFLL module.

+ *  \snippet qs_clock_source.c config_extosc32k_set_config

+

+

+ * \section asfdoc_samd20_system_clock_basic_use_case_use_main Use Case

+ *

+ * \subsection asfdoc_samd20_system_clock_basic_use_case_code Code

+ *

+ * Copy-paste the following code to your user application:

+ * \snippet qs_clock_source.c main

+ *

+ * \subsection asfdoc_samd20_system_clock_basic_use_case_flow Workflow

+ * -# Configure the external 32KHz oscillator source using the previously

+ *    defined setup function.

+ * \snippet qs_clock_source.c config_extosc32k_main

+ *

+ * -# Enable the configured external 32KHz oscillator source.

+ * \snippet qs_clock_source.c enable_extosc32k_main

+ *

+ * -# Configure the DFLL oscillator source using the previously defined setup

+ *    function.

+ * \snippet qs_clock_source.c config_dfll_main

+ *

+ * -# Enable the configured DFLL oscillator source.

+ * \snippet qs_clock_source.c enable_dfll_main

+ *

+ * -# Switch the system clock source to the DFLL, by reconfiguring the main

+ *    clock generator.

+ * \snippet qs_clock_source.c set_sys_clk_src

+ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/clock/quick_start_gclk/qs_gclk_basic.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/clock/quick_start_gclk/qs_gclk_basic.h
new file mode 100644
index 0000000..787df91
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/clock/quick_start_gclk/qs_gclk_basic.h
@@ -0,0 +1,126 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 Generic Clock Driver Quick Start

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+

+/**

+ * \page asfdoc_samd20_system_gclk_basic_use_case Quick Start Guide for SYSTEM CLOCK - GCLK Configuration

+ *

+ * In this use case, the GCLK module is configured for:

+ *  \li One generator attached to the internal 8MHz RC oscillator clock source

+ *  \li Generator output equal to input frequency divided by a factor of 128

+ *  \li One channel (connected to the TC0 module) enabled with the enabled generator selected

+ *

+ * This use case configures a clock channel to output a clock for a peripheral

+ * within the device, by first setting up a clock generator from a master clock

+ * source, and then linking the generator to the desired channel. This clock

+ * can then be used to clock a module within the device.

+ *

+ * \section asfdoc_samd20_system_gclk_basic_use_case_setup Setup

+ *

+ * \subsection asfdoc_samd20_system_gclk_basic_use_case_setup_prereq Prerequisites

+ * There are no special setup requirements for this use-case.

+ *

+ * \subsection asfdoc_samd20_system_gclk_basic_use_case_setup_code Code

+ * Copy-paste the following setup code to your user application:

+ * \snippet qs_gclk_basic.c setup

+ *

+ * Add to user application initialization (typically the start of \c main()):

+ * \snippet qs_gclk_basic.c setup_init

+ *

+ * \subsection asfdoc_samd20_system_gclk_basic_use_case_setup_flow Workflow

+ * -# Create a GCLK generator configuration struct, which can be filled out to

+ *    adjust the configuration of a single clock generator.

+ *  \snippet qs_gclk_basic.c setup_1

+ * -# Initialize the generator configuration struct with the module's default

+ *    values.

+ *    \note This should always be performed before using the configuration

+ *          struct to ensure that all values are initialized to known default

+ *          settings.

+ *

+ *  \snippet qs_gclk_basic.c setup_2

+ * -# Adjust the configuration struct to request that the master clock source

+ *    channel 0 be used as the source of the generator, and set the generator

+ *    output prescaler to divide the input clock by a factor of 128.

+ *  \snippet qs_gclk_basic.c setup_3

+ * -# Configure the generator using the configuration structure.

+ *    \note The existing configuration struct may be re-used, as long as any

+ *          values that have been altered from the default settings are taken

+ *          into account by the user application.

+ *

+ *  \snippet qs_gclk_basic.c setup_4

+ * -# Enable the generator once it has been properly configured, to begin clock

+ *    generation.

+ *  \snippet qs_gclk_basic.c setup_5

+ *

+ * -# Create a GCLK channel configuration struct, which can be filled out to

+ *    adjust the configuration of a single generic clock channel.

+ *  \snippet qs_gclk_basic.c setup_6

+ * -# Initialize the channel configuration struct with the module's default

+ *    values.

+ *    \note This should always be performed before using the configuration

+ *          struct to ensure that all values are initialized to known default

+ *          settings.

+ *

+ *  \snippet qs_gclk_basic.c setup_7

+ * -# Adjust the configuration struct to request that the previously configured

+ *    and enabled clock generator be used as the clock source for the channel.

+ *  \snippet qs_gclk_basic.c setup_8

+ * -# Configure the channel using the configuration structure.

+ *    \note The existing configuration struct may be re-used, as long as any

+ *          values that have been altered from the default settings are taken

+ *          into account by the user application.

+ *

+ *  \snippet qs_gclk_basic.c setup_9

+ * -# Enable the channel once it has been properly configured, to output the

+ *    clock to the channel's peripheral module consumers.

+ *  \snippet qs_gclk_basic.c setup_10

+ *

+ * \section asfdoc_samd20_system_gclk_basic_use_case_main Use Case

+ *

+ * \subsection asfdoc_samd20_system_gclk_basic_use_case_code Code

+ * Copy-paste the following code to your user application:

+ * \snippet qs_gclk_basic.c main

+ *

+ * \subsection asfdoc_samd20_system_gclk_basic_use_case_flow Workflow

+ * -# As the clock is generated asynchronously to the system core, no special

+ *    extra application code is required.

+ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/interrupt/quick_start/qs_system_interrupt.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/interrupt/quick_start/qs_system_interrupt.h
new file mode 100644
index 0000000..828c66b
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/interrupt/quick_start/qs_system_interrupt.h
@@ -0,0 +1,103 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 External Interrupt Driver Quick Start

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+

+/**

+ * \page asfdoc_samd20_system_interrupt_critsec_use_case Quick Start Guide for SYSTEM INTERRUPT - Critical Section Use Case

+ *

+ * In this case we perform a critical piece of code, disabling all interrupts

+ * while a global shared flag is read. During the critical section, no interrupts

+ * may occur.

+ *

+ * \section asfdoc_samd20_system_interrupt_critsec_use_case_setup Setup

+ *

+ * \subsection asfdoc_samd20_system_interrupt_critsec_use_case_setup_prereq Prerequisites

+ * There are no special setup requirements for this use-case.

+ *

+ * \section asfdoc_samd20_system_interrupt_critsec_use_case_use_main Use Case

+ *

+ * \subsection asfdoc_samd20_system_interrupt_critsec_use_case_code Code

+ * Copy-paste the following code to your user application:

+ * \snippet qs_system_interrupt.c main_1

+ *

+ * \subsection asfdoc_samd20_system_interrupt_critsec_use_case_flow Workflow

+ * -# Enter a critical section to disable global interrupts.

+ *  \note Critical sections <i>may</i> be nested if desired; if nested, global

+ *        interrupts will only be re-enabled once the outer-most critical

+ *        section has completed.

+ *

+ *  \snippet qs_system_interrupt.c critical_section_start

+ *

+ * -# Check a global shared flag and perform a response. This code may be any

+ *    critical code that requires exclusive access to all resources without the

+ *    possibility of interruption.

+ *  \snippet qs_system_interrupt.c do_critical_code

+ *

+ * -# Exit the critical section to re-enable global interrupts.

+ *  \snippet qs_system_interrupt.c critical_section_end

+ */

+

+/**

+ * \page asfdoc_samd20_system_interrupt_enablemodint_use_case Quick Start Guide for SYSTEM INTERRUPT - Enable Module Interrupt Use Case

+ *

+ * In this case we enable interrupt handling for a specific module, as well as

+ * enable interrupts globally for the device.

+ *

+ * \section asfdoc_samd20_system_interrupt_enablemodint_use_case_setup Setup

+ *

+ * \subsection asfdoc_samd20_system_interrupt_enablemodint_use_case_setup_prereq Prerequisites

+ * There are no special setup requirements for this use-case.

+ *

+ * \section asfdoc_samd20_system_interrupt_enablemodint_use_case_use_main Use Case

+ *

+ * \subsection asfdoc_samd20_system_interrupt_enablemodint_use_case_code Code

+ * Copy-paste the following code to your user application:

+ * \snippet qs_system_interrupt.c main_2

+ *

+ * \subsection asfdoc_samd20_system_interrupt_enablemodint_use_case_flow Workflow

+ * -# Enable interrupt handling for the device's RTC peripheral.

+ *  \snippet qs_system_interrupt.c module_int_enable

+ *

+ * -# Enable global interrupts, so that any enabled and active interrupt sources

+ *    can trigger their respective handler functions.

+ *  \snippet qs_system_interrupt.c global_int_enable

+ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/interrupt/system_interrupt.c b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/interrupt/system_interrupt.c
new file mode 100644
index 0000000..10077fc
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/interrupt/system_interrupt.c
@@ -0,0 +1,211 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 System Interrupt Driver

+ *

+ * Copyright (C) 2013 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

+ *

+ */

+#include "system_interrupt.h"

+

+/**

+ * \brief Check if a interrupt line is pending

+ *

+ * Checks if the requested interrupt vector is pending.

+ *

+ * \param[in] vector  Interrupt vector number to check

+ *

+ * \returns A boolean identifying if the requested interrupt vector is pending.

+ *

+ * \retval true   Specified interrupt vector is pending

+ * \retval false  Specified interrupt vector is not pending

+ *

+ */

+bool system_interrupt_is_pending(

+		const enum system_interrupt_vector vector)

+{

+	bool result;

+

+	if (vector >= _SYSTEM_INTERRUPT_EXTERNAL_VECTOR_START) {

+		result = ((NVIC->ISPR[0] & (1 << vector)) != 0);

+	} else if (vector == SYSTEM_INTERRUPT_SYSTICK) {

+		result = ((SCB->ICSR & SCB_ICSR_PENDSTSET_Msk) != 0);

+	} else {

+		Assert(false);

+		result = false;

+	}

+

+	return result;

+}

+

+/**

+ * \brief Set a interrupt vector as pending

+ *

+ * Set the requested interrupt vector as pending (i.e issues a software

+ * interrupt request for the specified vector). The software handler will be

+ * handled (if enabled) in a priority order based on vector number and

+ * configured priority settings.

+ *

+ * \param[in] vector  Interrupt vector number which is set as pending

+ *

+ * \returns Status code identifying if the vector was successfully set as

+ *          pending.

+ *

+ * \retval STATUS_OK           If no error was detected

+ * \retval STATUS_INVALID_ARG  If an unsupported interrupt vector number was given

+ */

+enum status_code system_interrupt_set_pending(

+		const enum system_interrupt_vector vector)

+{

+	enum status_code status = STATUS_OK;

+

+	if (vector >= _SYSTEM_INTERRUPT_EXTERNAL_VECTOR_START) {

+		NVIC->ISPR[0] = (1 << vector);

+	} else if (vector == SYSTEM_INTERRUPT_NON_MASKABLE) {

+		/* Note: Because NMI has highest priority it will be executed

+		 * immediately after it has been set pending */

+		SCB->ICSR = SCB_ICSR_NMIPENDSET_Msk;

+	} else if (vector == SYSTEM_INTERRUPT_SYSTICK) {

+		SCB->ICSR = SCB_ICSR_PENDSTSET_Msk;

+	} else {

+		/* The user want to set something unsupported as pending */

+		Assert(false);

+		status = STATUS_ERR_INVALID_ARG;

+	}

+

+	return status;

+}

+

+/**

+ * \brief Clear pending interrupt vector

+ *

+ * Clear a pending interrupt vector, so the software handler is not executed.

+ *

+ * \param[in] vector  Interrupt vector number to clear

+ *

+ * \returns A status code identifying if the interrupt pending state was

+ *          successfully cleared.

+ *

+ * \retval STATUS_OK           If no error was detected

+ * \retval STATUS_INVALID_ARG  If an unsupported interrupt vector number was given

+ */

+enum status_code system_interrupt_clear_pending(

+		const enum system_interrupt_vector vector)

+{

+	enum status_code status = STATUS_OK;

+

+	if (vector >= _SYSTEM_INTERRUPT_EXTERNAL_VECTOR_START) {

+		NVIC->ICPR[0] = (1 << vector);

+	} else if (vector == SYSTEM_INTERRUPT_NON_MASKABLE) {

+		/* Note: Clearing of NMI pending interrupts does not make sense and is

+		 * not supported by the device, as it has the highest priority and will

+		 * always be executed at the moment it is set */

+		return STATUS_ERR_INVALID_ARG;

+	} else if (vector == SYSTEM_INTERRUPT_SYSTICK) {

+		SCB->ICSR = SCB_ICSR_PENDSTCLR_Msk;

+	} else {

+		Assert(false);

+		status = STATUS_ERR_INVALID_ARG;

+	}

+

+	return status;

+}

+

+/**

+ * \brief Set interrupt vector priority level

+ *

+ * Set the priority level of an external interrupt or exception.

+ *

+ * \param[in] vector          Interrupt vector to change

+ * \param[in] priority_level  New vector priority level to set

+ *

+ * \returns Status code indicating if the priority level of the interrupt was

+ *          successfully set.

+ *

+ * \retval STATUS_OK           If no error was detected

+ * \retval STATUS_INVALID_ARG  If an unsupported interrupt vector number was given

+ */

+enum status_code system_interrupt_set_priority(

+		const enum system_interrupt_vector vector,

+		const enum system_interrupt_priority_level priority_level)

+{

+	enum status_code status = STATUS_OK;

+

+	if (vector >= _SYSTEM_INTERRUPT_EXTERNAL_VECTOR_START) {

+		uint8_t register_num = vector / 4;

+		uint8_t priority_pos = ((vector % 4) * 8) + (8 - __NVIC_PRIO_BITS);

+

+		NVIC->IP[register_num] = (priority_level << priority_pos);

+	} else if (vector == SYSTEM_INTERRUPT_SYSTICK) {

+		SCB->SHP[1] = (priority_level << _SYSTEM_INTERRUPT_SYSTICK_PRI_POS);

+	} else {

+		Assert(false);

+		status = STATUS_ERR_INVALID_ARG;

+	}

+

+	return status;

+}

+

+/**

+ * \brief Get interrupt vector priority level

+ *

+ * Retrieves the priority level of the requested external interrupt or exception.

+ *

+ * \param[in] vector  Interrupt vector of which the priority level will be read

+ *

+ * \return Currently configured interrupt priority level of the given interrupt

+ *         vector.

+ */

+enum system_interrupt_priority_level system_interrupt_get_priority(

+		const enum system_interrupt_vector vector)

+{

+	uint8_t register_num = vector / 4;

+	uint8_t priority_pos = ((vector % 4) * 8) + (8 - __NVIC_PRIO_BITS);

+

+	enum system_interrupt_priority_level priority = SYSTEM_INTERRUPT_PRIORITY_LEVEL_0;

+

+	if (vector >= 0) {

+		priority = (enum system_interrupt_priority_level)

+				((NVIC->IP[register_num] >> priority_pos) & _SYSTEM_INTERRUPT_PRIORITY_MASK);

+	} else if (vector == SYSTEM_INTERRUPT_SYSTICK) {

+		priority = (enum system_interrupt_priority_level)

+				((SCB->SHP[1] >> _SYSTEM_INTERRUPT_SYSTICK_PRI_POS) & _SYSTEM_INTERRUPT_PRIORITY_MASK);

+	}

+

+	return priority;

+}

+

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/interrupt/system_interrupt.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/interrupt/system_interrupt.h
new file mode 100644
index 0000000..b8b3f03
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/interrupt/system_interrupt.h
@@ -0,0 +1,467 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 System Interrupt Driver

+ *

+ * Copyright (C) 2013 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

+ *

+ */

+#ifndef SYSTEM_INTERRUPT_H_INCLUDED

+#define SYSTEM_INTERRUPT_H_INCLUDED

+

+/**

+ * \defgroup asfdoc_samd20_system_interrupt_group SAM D20 System Interrupt Driver (SYSTEM INTERRUPT)

+ *

+ * This driver for SAM D20 devices provides an interface for the configuration

+ * and management of internal software and hardware interrupts/exceptions.

+ *

+ * The following peripherals are used by this module:

+ *

+ *  - NVIC (Nested Vector Interrupt Controller)

+ *

+ * The outline of this documentation is as follows:

+ *  - \ref asfdoc_samd20_system_interrupt_prerequisites

+ *  - \ref asfdoc_samd20_system_interrupt_module_overview

+ *  - \ref asfdoc_samd20_system_interrupt_special_considerations

+ *  - \ref asfdoc_samd20_system_interrupt_extra_info

+ *  - \ref asfdoc_samd20_system_interrupt_examples

+ *  - \ref asfdoc_samd20_system_interrupt_api_overview

+ *

+ *

+ * \section asfdoc_samd20_system_interrupt_prerequisites Prerequisites

+ *

+ * There are no prerequisites for this module.

+ *

+ *

+ * \section asfdoc_samd20_system_interrupt_module_overview Module Overview

+ *

+ * The Cortex M0+ core contains an interrupt an exception vector table, which

+ * can be used to configure the device's interrupt handlers; individual

+ * interrupts and exceptions can be enabled and disabled, as well as configured

+ * with a variable priority.

+ *

+ * This driver provides a set of wrappers around the core interrupt functions,

+ * to expose a simple API for the management of global and individual interrupts

+ * within the device.

+ *

+ * \subsection asfdoc_samd20_system_interrupt_module_overview_criticalsec Critical Sections

+ * In some applications it is important to ensure that no interrupts may be

+ * executed by the system whilst a critical portion of code is being run; for

+ * example, a buffer may be copied from one context to another - during which

+ * interrupts must be disabled to avoid corruption of the source buffer contents

+ * until the copy has completed. This driver provides a basic API to enter and

+ * exit nested critical sections, so that global interrupts can be kept disabled

+ * for as long as necessary to complete a critical application code section.

+ *

+ * \subsection asfdoc_samd20_system_interrupt_module_overview_softints Software Interrupts

+ * For some applications, it may be desirable to raise a module or core

+ * interrupt via software. For this reason, a set of APIs to set an interrupt or

+ * exception as pending are provided to the user application.

+ *

+ * \section asfdoc_samd20_system_interrupt_special_considerations Special Considerations

+ *

+ * Interrupts from peripherals in the SAM D20 devices are on a per-module basis;

+ * an interrupt raised from any source within a module will cause a single,

+ * module-common handler to execute. It is the user application or driver's

+ * responsibility to de-multiplex the module-common interrupt to determine the

+ * exact interrupt cause.

+ *

+ * \section asfdoc_samd20_system_interrupt_extra_info Extra Information

+ *

+ * For extra information see \ref asfdoc_samd20_system_interrupt_extra. This includes:

+ *  - \ref asfdoc_samd20_system_interrupt_extra_acronyms

+ *  - \ref asfdoc_samd20_system_interrupt_extra_dependencies

+ *  - \ref asfdoc_samd20_system_interrupt_extra_errata

+ *  - \ref asfdoc_samd20_system_interrupt_extra_history

+ *

+ *

+ * \section asfdoc_samd20_system_interrupt_examples Examples

+ *

+ * For a list of examples related to this driver, see

+ * \ref asfdoc_samd20_system_interrupt_exqsg.

+ *

+ * \section asfdoc_samd20_system_interrupt_api_overview API Overview

+ * @{

+ */

+

+#include <compiler.h>

+#include <core_cm0plus.h>

+

+#if !defined(__DOXYGEN__)

+/* Generates a interrupt vector table enum list entry for a given module type

+   and index (e.g. "SYSTEM_INTERRUPT_MODULE_TC0 = TC0_IRQn,"). */

+#  define _MODULE_IRQn(n, module) \

+		SYSTEM_INTERRUPT_MODULE_##module##n = module##n##_IRQn,

+

+/* Generates interrupt vector table enum list entries for all instances of a

+   given module type on the selected device. */

+#  define _SYSTEM_INTERRUPT_MODULES(name) \

+		MREPEAT(name##_INST_NUM, _MODULE_IRQn, name)

+

+

+#  define _SYSTEM_INTERRUPT_IPSR_MASK              0x0000003f

+#  define _SYSTEM_INTERRUPT_PRIORITY_MASK          0x00000007

+

+#  define _SYSTEM_INTERRUPT_EXTERNAL_VECTOR_START  0

+

+#  define _SYSTEM_INTERRUPT_SYSTICK_PRI_POS        29

+#endif

+

+/**

+ * \brief Table of possible system interrupt/exception vector numbers.

+ *

+ * Table of all possible interrupt and exception vector indexes within the

+ * device.

+ */

+enum system_interrupt_vector {

+	/** Interrupt vector index for a NMI interrupt. */

+	SYSTEM_INTERRUPT_NON_MASKABLE      = NonMaskableInt_IRQn,

+	/** Interrupt vector index for a Hard Fault memory access exception. */

+	SYSTEM_INTERRUPT_HARD_FAULT        = HardFault_IRQn,

+	/** Interrupt vector index for a Supervisor Call exception. */

+	SYSTEM_INTERRUPT_SV_CALL           = SVCall_IRQn,

+	/** Interrupt vector index for a Pending Supervisor interrupt. */

+	SYSTEM_INTERRUPT_PENDING_SV        = PendSV_IRQn,

+	/** Interrupt vector index for a System Tick interrupt. */

+	SYSTEM_INTERRUPT_SYSTICK           = SysTick_IRQn,

+

+	/** Interrupt vector index for a Power Manager peripheral interrupt. */

+	SYSTEM_INTERRUPT_MODULE_PM         = PM_IRQn,

+	/** Interrupt vector index for a System Control peripheral interrupt. */

+	SYSTEM_INTERRUPT_MODULE_SYSCTRL    = SYSCTRL_IRQn,

+	/** Interrupt vector index for a Watch Dog peripheral interrupt. */

+	SYSTEM_INTERRUPT_MODULE_WDT        = WDT_IRQn,

+	/** Interrupt vector index for a Real Time Clock peripheral interrupt. */

+	SYSTEM_INTERRUPT_MODULE_RTC        = RTC_IRQn,

+	/** Interrupt vector index for an External Interrupt peripheral interrupt. */

+	SYSTEM_INTERRUPT_MODULE_EIC        = EIC_IRQn,

+	/** Interrupt vector index for a Non Volatile Memory Controller interrupt. */

+	SYSTEM_INTERRUPT_MODULE_NVMCTRL    = NVMCTRL_IRQn,

+	/** Interrupt vector index for an Event System interrupt. */

+	SYSTEM_INTERRUPT_MODULE_EVSYS      = EVSYS_IRQn,

+#if defined(__DOXYGEN__)

+	/** Interrupt vector index for a SERCOM peripheral interrupt.

+	 *

+	 *  Each specific device may contain several SERCOM peripherals; each module

+	 *  instance will have its own entry in the table, with the instance number

+	 *  substituted for "n" in the entry name (e.g.

+	 *  \c SYSTEM_INTERRUPT_MODULE_SERCOM0).

+	 */

+	SYSTEM_INTERRUPT_MODULE_SERCOMn    = SERCOMn_IRQn,

+	/** Interrupt vector index for a Timer/Counter peripheral interrupt.

+	 *

+	 *  Each specific device may contain several TC peripherals; each module

+	 *  instance will have its own entry in the table, with the instance number

+	 *  substituted for "n" in the entry name (e.g.

+	 *  \c SYSTEM_INTERRUPT_MODULE_TC0).

+	 */

+	SYSTEM_INTERRUPT_MODULE_TCn        = TCn_IRQn,

+#else

+	_SYSTEM_INTERRUPT_MODULES(SERCOM)

+	_SYSTEM_INTERRUPT_MODULES(TC)

+#endif

+	/** Interrupt vector index for an Analog Comparator peripheral interrupt. */

+	SYSTEM_INTERRUPT_MODULE_AC         = AC_IRQn,

+	/** Interrupt vector index for an Analog-to-Digital peripheral interrupt. */

+	SYSTEM_INTERRUPT_MODULE_ADC        = ADC_IRQn,

+	/** Interrupt vector index for a Digital-to-Analog peripheral interrupt. */

+	SYSTEM_INTERRUPT_MODULE_DAC        = DAC_IRQn,

+};

+

+/**

+ * \brief Table of possible system interrupt/exception vector priorities.

+ *

+ * Table of all possible interrupt and exception vector priorities within the

+ * device.

+ */

+enum system_interrupt_priority_level {

+	/** Priority level 0, the highest possible interrupt priority. */

+	SYSTEM_INTERRUPT_PRIORITY_LEVEL_0  = 0,

+	/** Priority level 1. */

+	SYSTEM_INTERRUPT_PRIORITY_LEVEL_1  = 1,

+	/** Priority level 2. */

+	SYSTEM_INTERRUPT_PRIORITY_LEVEL_2  = 2,

+	/** Priority level 3, the lowest possible interrupt priority. */

+	SYSTEM_INTERRUPT_PRIORITY_LEVEL_3  = 3,

+};

+

+/**

+ * \name Critical Section Management

+ * @{

+ */

+

+/**

+ * \brief Enters a critical section

+ *

+ * Disables global interrupts. To support nested critical sections, an internal

+ * count of the critical section nesting will be kept, so that global interrupts

+ * are only re-enabled upon leaving the outermost nested critical section.

+ *

+ */

+static inline void system_interrupt_enter_critical_section(void)

+{

+	cpu_irq_enter_critical();

+}

+

+/**

+ * \brief Leaves a critical section

+ *

+ * Enables global interrupts. To support nested critical sections, an internal

+ * count of the critical section nesting will be kept, so that global interrupts

+ * are only re-enabled upon leaving the outermost nested critical section.

+ *

+ */

+static inline void system_interrupt_leave_critical_section(void)

+{

+	cpu_irq_leave_critical();

+}

+

+/** @} */

+

+/**

+ * \name Interrupt Enabling/Disabling

+ * @{

+ */

+

+/**

+ * \brief Check if global interrupts are enabled

+ *

+ * Checks if global interrupts are currently enabled.

+ *

+ * \returns A boolean that identifies if the global interrupts are enabled or not.

+ *

+ * \retval true   Global interrupts are currently enabled

+ * \retval false  Global interrupts are currently disabled

+ *

+ */

+static inline bool system_interrupt_is_global_enabled(void)

+{

+	return cpu_irq_is_enabled();

+}

+

+/**

+ * \brief Enables global interrupts

+ *

+ * Enables global interrupts in the device to fire any enabled interrupt handlers.

+ */

+static inline void system_interrupt_enable_global(void)

+{

+	cpu_irq_enable();

+}

+

+/**

+ * \brief Disables global interrupts

+ *

+ * Disabled global interrupts in the device, preventing any enabled interrupt

+ * handlers from executing.

+ */

+static inline void system_interrupt_disable_global(void)

+{

+	cpu_irq_disable();

+}

+

+/**

+ * \brief Checks if an interrupt vector is enabled or not

+ *

+ * Checks if a specific interrupt vector is currently enabled.

+ *

+ * \param[in] vector  Interrupt vector number to check

+ *

+ * \returns A variable identifying if the requested interrupt vector is enabled

+ *

+ * \retval true   Specified interrupt vector is currently enabled

+ * \retval false  Specified interrupt vector is currently disabled

+ *

+ */

+static inline bool system_interrupt_is_enabled(

+		const enum system_interrupt_vector vector)

+{

+	return (bool)((NVIC->ISER[0] >> (uint32_t)vector) & 0x00000001);

+}

+

+/**

+ * \brief Enable interrupt vector

+ *

+ * Enables execution of the software handler for the requested interrupt vector.

+ *

+ * \param[in] vector Interrupt vector to enable

+ */

+static inline void system_interrupt_enable(

+		const enum system_interrupt_vector vector)

+{

+	NVIC->ISER[0] = (uint32_t)(1 << ((uint32_t)vector & 0x0000001f));

+}

+

+/**

+ * \brief Disable interrupt vector

+ *

+ * Disables execution of the software handler for the requested interrupt vector.

+ *

+ * \param[in] vector  Interrupt vector to disable

+ */

+static inline void system_interrupt_disable(

+		const enum system_interrupt_vector vector)

+{

+	NVIC->ICER[0] = (uint32_t)(1 << ((uint32_t)vector & 0x0000001f));

+}

+

+/** @} */

+

+/**

+ * \name Interrupt State Management

+ * @{

+ */

+

+/**

+ * \brief Get active interrupt (if any)

+ *

+ * Return the vector number for the current executing software handler, if any.

+ *

+ * \return Interrupt number that is currently executing.

+ */

+static inline enum system_interrupt_vector system_interrupt_get_active(void)

+{

+	uint32_t IPSR = __get_IPSR();

+

+	return (enum system_interrupt_vector)(IPSR & _SYSTEM_INTERRUPT_IPSR_MASK);

+}

+

+bool system_interrupt_is_pending(

+		const enum system_interrupt_vector vector);

+

+enum status_code system_interrupt_set_pending(

+		const enum system_interrupt_vector vector);

+

+enum status_code system_interrupt_clear_pending(

+		const enum system_interrupt_vector vector);

+

+/** @} */

+

+/**

+ * \name Interrupt Priority Management

+ * @{

+ */

+

+enum status_code system_interrupt_set_priority(

+		const enum system_interrupt_vector vector,

+		const enum system_interrupt_priority_level priority_level);

+

+enum system_interrupt_priority_level system_interrupt_get_priority(

+		const enum system_interrupt_vector vector);

+

+/** @} */

+

+/** @} */

+

+/**

+ * \page asfdoc_samd20_system_interrupt_extra Extra Information for SYSTEM INTERRUPT Driver

+ *

+ * \section asfdoc_samd20_system_interrupt_extra_acronyms Acronyms

+ * The table below presents the acronyms used in this module:

+ *

+ * <table>

+ *	<tr>

+ *		<th>Acronym</th>

+ *		<th>Description</th>

+ *	</tr>

+ *	<tr>

+ *		<td>ISR</td>

+ *		<td>Interrupt Service Routine</td>

+ *	</tr>

+ * </table>

+ *

+ *

+ * \section asfdoc_samd20_system_interrupt_extra_dependencies Dependencies

+ * This driver has the following dependencies:

+ *

+ *  - None

+ *

+ *

+ * \section asfdoc_samd20_system_interrupt_extra_errata Errata

+ * There are no errata related to this driver.

+ *

+ *

+ * \section asfdoc_samd20_system_interrupt_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>Initial Release</td>

+ *	</tr>

+ * </table>

+ */

+

+/**

+ * \page asfdoc_samd20_system_interrupt_exqsg Examples for SYSTEM INTERRUPT Driver

+ *

+ * This is a list of the available Quick Start guides (QSGs) and example

+ * applications for \ref asfdoc_samd20_system_interrupt_group. QSGs are simple examples with

+ * step-by-step instructions to configure and use this driver in a selection of

+ * use cases. Note that QSGs can be compiled as a standalone application or be

+ * added to the user application.

+ *

+ *  - \subpage asfdoc_samd20_system_interrupt_critsec_use_case

+ *  - \subpage asfdoc_samd20_system_interrupt_enablemodint_use_case

+ *

+ * \page asfdoc_samd20_system_interrupt_document_revision_history Document Revision History

+ *

+ * <table>

+ *	<tr>

+ *		<th>Doc. Rev.</td>

+ *		<th>Date</td>

+ *		<th>Comments</td>

+ *	</tr>

+ *	<tr>

+ *		<td>B</td>

+ *		<td>06/2013</td>

+ *		<td>Corrected documentation typos.</td>

+ *	</tr>

+ *	<tr>

+ *		<td>A</td>

+ *		<td>06/2013</td>

+ *		<td>Initial release</td>

+ *	</tr>

+ * </table>

+ */

+

+#endif

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/pinmux/pinmux.c b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/pinmux/pinmux.c
new file mode 100644
index 0000000..6a31e80
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/pinmux/pinmux.c
@@ -0,0 +1,301 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 Pin Multiplexer Driver

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+#include <pinmux.h>

+

+/**

+ * \internal

+ * Writes out a given configuration of a Port pin configuration to the

+ * hardware module.

+ *

+ * \note If the pin direction is set as an output, the pull-up/pull-down input

+ *       configuration setting is ignored.

+ *

+ * \param[in] port      Base of the PORT module to configure.

+ * \param[in] pin_mask  Mask of the port pin to configure.

+ * \param[in] config    Configuration settings for the pin.

+ */

+static void _system_pinmux_config(

+		PortGroup *const port,

+		const uint32_t pin_mask,

+		const struct system_pinmux_config *const config)

+{

+	Assert(port);

+	Assert(config);

+

+	/* Track the configuration bits into a temporary variable before writing */

+	uint32_t pin_cfg = 0;

+

+	/* Enable the pin peripheral mux flag if non-GPIO selected (pin mux will

+	 * be written later) and store the new mux mask */

+	if (config->mux_position != SYSTEM_PINMUX_GPIO) {

+		pin_cfg |= PORT_WRCONFIG_PMUXEN;

+		pin_cfg |= (config->mux_position << PORT_WRCONFIG_PMUX_Pos);

+	}

+

+	/* Check if the user has requested that the input buffer be enabled */

+	if ((config->direction == SYSTEM_PINMUX_PIN_DIR_INPUT) ||

+			(config->direction == SYSTEM_PINMUX_PIN_DIR_OUTPUT_WITH_READBACK)) {

+		/* Enable input buffer flag */

+		pin_cfg |= PORT_WRCONFIG_INEN;

+

+		/* Enable pull-up/pull-down control flag if requested */

+		if (config->input_pull != SYSTEM_PINMUX_PIN_PULL_NONE) {

+			pin_cfg |= PORT_WRCONFIG_PULLEN;

+		}

+

+		/* Clear the port DIR bits to disable the output buffer */

+		port->DIRCLR.reg = pin_mask;

+	}

+

+	/* Check if the user has requested that the output buffer be enabled */

+	if ((config->direction == SYSTEM_PINMUX_PIN_DIR_OUTPUT) ||

+			(config->direction == SYSTEM_PINMUX_PIN_DIR_OUTPUT_WITH_READBACK)) {

+		/* Cannot use a pullup if the output driver is enabled,

+		 * if requested the input buffer can only sample the current

+		 * output state */

+		pin_cfg &= ~PORT_WRCONFIG_PULLEN;

+

+		/* Set the port DIR bits to enable the output buffer */

+		port->DIRSET.reg = pin_mask;

+	}

+

+	/* The Write Configuration register (WRCONFIG) requires the

+	 * pins to to grouped into two 16-bit half-words - split them out here */

+	uint32_t lower_pin_mask = (pin_mask & 0xFFFF);

+	uint32_t upper_pin_mask = (pin_mask >> 16);

+

+	/* Configure the lower 16-bits of the port to the desired configuration,

+	 * including the pin peripheral multiplexer just in case it is enabled */

+	port->WRCONFIG.reg

+		= (lower_pin_mask << PORT_WRCONFIG_PINMASK_Pos) |

+			pin_cfg | PORT_WRCONFIG_WRPMUX | PORT_WRCONFIG_WRPINCFG;

+

+	/* Configure the upper 16-bits of the port to the desired configuration,

+	 * including the pin peripheral multiplexer just in case it is enabled */

+	port->WRCONFIG.reg

+		= (upper_pin_mask << PORT_WRCONFIG_PINMASK_Pos) |

+			pin_cfg | PORT_WRCONFIG_WRPMUX | PORT_WRCONFIG_WRPINCFG |

+			PORT_WRCONFIG_HWSEL;

+

+	/* Set the pull-up state once the port pins are configured if one was

+	 * requested and it does not violate the valid set of port

+	 * configurations */

+	if (pin_cfg & PORT_WRCONFIG_PULLEN) {

+		/* Set the OUT register bits to enable the pullup if requested,

+		 * clear to enable pull-down */

+		if (config->input_pull == SYSTEM_PINMUX_PIN_PULL_UP) {

+			port->OUTSET.reg = pin_mask;

+		} else {

+			port->OUTCLR.reg = pin_mask;

+		}

+	}

+}

+

+/**

+ * \brief Writes a Port pin configuration to the hardware module.

+ *

+ * Writes out a given configuration of a Port pin configuration to the hardware

+ * module.

+ *

+ * \note If the pin direction is set as an output, the pull-up/pull-down input

+ *       configuration setting is ignored.

+ *

+ * \param[in] gpio_pin  Index of the GPIO pin to configure.

+ * \param[in] config    Configuration settings for the pin.

+ */

+void system_pinmux_pin_set_config(

+		const uint8_t gpio_pin,

+		const struct system_pinmux_config *const config)

+{

+	PortGroup *const port = system_pinmux_get_group_from_gpio_pin(gpio_pin);

+	uint32_t pin_mask = (1UL << (gpio_pin % 32));

+

+	_system_pinmux_config(port, pin_mask, config);

+}

+

+/**

+ * \brief Writes a Port pin group configuration to the hardware module.

+ *

+ * Writes out a given configuration of a Port pin group configuration to the

+ * hardware module.

+ *

+ * \note If the pin direction is set as an output, the pull-up/pull-down input

+ *       configuration setting is ignored.

+ *

+ * \param[in] port      Base of the PORT module to configure.

+ * \param[in] mask      Mask of the port pin(s) to configure.

+ * \param[in] config    Configuration settings for the pin.

+ */

+void system_pinmux_group_set_config(

+		PortGroup *const port,

+		const uint32_t mask,

+		const struct system_pinmux_config *const config)

+{

+	Assert(port);

+

+	for (int i = 0; i < 32; i++) {

+		if (mask & (1UL << i)) {

+			_system_pinmux_config(port, (1UL << i), config);

+		}

+	}

+}

+

+/**

+ * \brief Configures the input sampling mode for a group of pins.

+ *

+ * Configures the input sampling mode for a group of pins, to

+ * control when the physical I/O pin value is sampled and

+ * stored inside the microcontroller.

+ *

+ * \param[in] port     Base of the PORT module to configure.

+ * \param[in] mask     Mask of the port pin(s) to configure.

+ * \param[in] mode     New pin sampling mode to configure.

+ */

+void system_pinmux_group_set_input_sample_mode(

+		PortGroup *const port,

+		const uint32_t mask,

+		const enum system_pinmux_pin_sample mode)

+{

+	Assert(port);

+

+	for (int i = 0; i < 32; i++) {

+		if (mask & (1UL << i)) {

+			uint32_t sample_quad_mask = (1UL << (i / 4));

+

+			if (mode == SYSTEM_PINMUX_PIN_SAMPLE_ONDEMAND) {

+				port->CTRL.reg |=  sample_quad_mask;

+			}

+			else {

+				port->CTRL.reg &= ~sample_quad_mask;

+			}

+		}

+	}

+}

+

+/**

+ * \brief Configures the output driver strength mode for a group of pins.

+ *

+ * Configures the output drive strength for a group of pins, to

+ * control the amount of current the pad is able to sink/source.

+ *

+ * \param[in] port     Base of the PORT module to configure.

+ * \param[in] mask     Mask of the port pin(s) to configure.

+ * \param[in] mode     New output driver strength mode to configure.

+ */

+void system_pinmux_group_set_output_strength(

+		PortGroup *const port,

+		const uint32_t mask,

+		const enum system_pinmux_pin_strength mode)

+{

+	Assert(port);

+

+	for (int i = 0; i < 32; i++) {

+		if (mask & (1UL << i)) {

+			if (mode == SYSTEM_PINMUX_PIN_STRENGTH_HIGH) {

+				port->PINCFG[i].reg |=  PORT_PINCFG_DRVSTR;

+			}

+			else {

+				port->PINCFG[i].reg &= ~PORT_PINCFG_DRVSTR;

+			}

+		}

+	}

+}

+

+/**

+ * \brief Configures the output slew rate mode for a group of pins.

+ *

+ * Configures the output slew rate mode for a group of pins, to

+ * control the speed at which the physical output pin can react to

+ * logical changes of the I/O pin value.

+ *

+ * \param[in] port     Base of the PORT module to configure.

+ * \param[in] mask     Mask of the port pin(s) to configure.

+ * \param[in] mode     New pin slew rate mode to configure.

+ */

+void system_pinmux_group_set_output_slew_rate(

+		PortGroup *const port,

+		const uint32_t mask,

+		const enum system_pinmux_pin_slew_rate mode)

+{

+	Assert(port);

+

+	for (int i = 0; i < 32; i++) {

+		if (mask & (1UL << i)) {

+			if (mode == SYSTEM_PINMUX_PIN_SLEW_RATE_LIMITED) {

+				port->PINCFG[i].reg |=  PORT_PINCFG_SLEWLIM;

+			}

+			else {

+				port->PINCFG[i].reg &= ~PORT_PINCFG_SLEWLIM;

+			}

+		}

+	}

+}

+

+/**

+ * \brief Configures the output driver mode for a group of pins.

+ *

+ * Configures the output driver mode for a group of pins, to

+ * control the pad behavior.

+ *

+ * \param[in] port     Base of the PORT module to configure.

+ * \param[in] mask     Mask of the port pin(s) to configure.

+ * \param[in] mode     New pad output driver mode to configure.

+ */

+void system_pinmux_group_set_output_drive(

+		PortGroup *const port,

+		const uint32_t mask,

+		const enum system_pinmux_pin_drive mode)

+{

+	Assert(port);

+

+	for (int i = 0; i < 32; i++) {

+		if (mask & (1UL << i)) {

+			if (mode == SYSTEM_PINMUX_PIN_DRIVE_OPEN_DRAIN) {

+				port->PINCFG[i].reg |=  PORT_PINCFG_ODRAIN;

+			}

+			else {

+				port->PINCFG[i].reg &= ~PORT_PINCFG_ODRAIN;

+			}

+		}

+	}

+}

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/pinmux/pinmux.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/pinmux/pinmux.h
new file mode 100644
index 0000000..141a2f7
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/pinmux/pinmux.h
@@ -0,0 +1,608 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 Pin Multiplexer Driver

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+#ifndef PINMUX_H_INCLUDED

+#define PINMUX_H_INCLUDED

+

+/**

+ * \defgroup asfdoc_samd20_system_pinmux_group SAM D20 System Pin Multiplexer Driver (SYSTEM PINMUX)

+ *

+ * This driver for SAM D20 devices provides an interface for the configuration

+ * and management of the device's physical I/O Pins, to alter the direction and

+ * input/drive characteristics as well as to configure the pin peripheral

+ * multiplexer selection.

+ *

+ * The following peripherals are used by this module:

+ *

+ *  - PORT (Port I/O Management)

+ *

+ * Physically, the modules are interconnected within the device as shown in the

+ * following diagram:

+ *

+ * The outline of this documentation is as follows:

+ *  - \ref asfdoc_samd20_system_pinmux_prerequisites

+ *  - \ref asfdoc_samd20_system_pinmux_module_overview

+ *  - \ref asfdoc_samd20_system_pinmux_special_considerations

+ *  - \ref asfdoc_samd20_system_pinmux_extra_info

+ *  - \ref asfdoc_samd20_system_pinmux_examples

+ *  - \ref asfdoc_samd20_system_pinmux_api_overview

+ *

+ *

+ * \section asfdoc_samd20_system_pinmux_prerequisites Prerequisites

+ *

+ * There are no prerequisites for this module.

+ *

+ *

+ * \section asfdoc_samd20_system_pinmux_module_overview Module Overview

+ *

+ * The SAM D20 devices contain a number of General Purpose I/O pins, used to

+ * interface the user application logic and internal hardware peripherals to

+ * an external system. The Pin Multiplexer (PINMUX) driver provides a method

+ * of configuring the individual pin peripheral multiplexers to select

+ * alternate pin functions,

+ *

+ * \subsection asfdoc_samd20_system_pinmux_physical_logical_pins Physical and Logical GPIO Pins

+ * SAM D20 devices use two naming conventions for the I/O pins in the device; one

+ * physical, and one logical. Each physical pin on a device package is assigned

+ * both a physical port and pin identifier (e.g. "PORTA.0") as well as a

+ * monotonically incrementing logical GPIO number (e.g. "GPIO0"). While the

+ * former is used to map physical pins to their physical internal device module

+ * counterparts, for simplicity the design of this driver uses the logical GPIO

+ * numbers instead.

+ *

+ * \subsection asfdoc_samd20_system_pinmux_peripheral_muxing Peripheral Multiplexing

+ * SAM D20 devices contain a peripheral MUX, which is individually controllable

+ * for each I/O pin of the device. The peripheral MUX allows you to select the

+ * function of a physical package pin - whether it will be controlled as a user

+ * controllable GPIO pin, or whether it will be connected internally to one of

+ * several peripheral modules (such as an I<SUP>2</SUP>C module). When a pin is

+ * configured in GPIO mode, other peripherals connected to the same pin will be

+ * disabled.

+ *

+ * \subsection asfdoc_samd20_system_pinmux_pad_characteristics Special Pad Characteristics

+ * There are several special modes that can be selected on one or more I/O pins

+ * of the device, which alter the input and output characteristics of the pad:

+ *

+ * \subsubsection asfdoc_samd20_system_pinmux_drive_strength Drive Strength

+ * The Drive Strength configures the strength of the output driver on the

+ * pad. Normally, there is a fixed current limit that each I/O pin can safely

+ * drive, however some I/O pads offer a higher drive mode which increases this

+ * limit for that I/O pin at the expense of an increased power consumption.

+ *

+ * \subsubsection asfdoc_samd20_system_pinmux_slew_rate Slew Rate

+ * The Slew Rate configures the slew rate of the output driver, limiting the

+ * rate at which the pad output voltage can change with time.

+ *

+ * \subsubsection asfdoc_samd20_system_pinmux_input_sample_mode Input Sample Mode

+ * The Input Sample Mode configures the input sampler buffer of the pad. By

+ * default, the input buffer is only sampled "on-demand", i.e. when the user

+ * application attempts to read from the input buffer. This mode is the most

+ * power efficient, but increases the latency of the input sample by two clock

+ * cycles of the port clock. To reduce latency, the input sampler can instead

+ * be configured to always sample the input buffer on each port clock cycle, at

+ * the expense of an increased power consumption.

+ *

+ * \subsection asfdoc_samd20_system_pinmux_module_overview_physical Physical Connection

+ *

+ * \ref asfdoc_samd20_system_pinmux_intconnections "The diagram below" shows

+ * how this module is interconnected within the device:

+ *

+ * \anchor asfdoc_samd20_system_pinmux_intconnections

+ * \dot

+ * digraph overview {

+ *   node [label="Port Pad" shape=square] pad;

+ *

+ *   subgraph driver {

+ *     node [label="Peripheral Mux" shape=trapezium] pinmux;

+ *     node [label="GPIO Module" shape=ellipse shape=ellipse style=filled fillcolor=lightgray] gpio;

+ *     node [label="Other Peripheral Modules" shape=ellipse style=filled fillcolor=lightgray] peripherals;

+ *   }

+ *

+ *   pinmux -> gpio;

+ *   pad    -> pinmux;

+ *   pinmux -> peripherals;

+ * }

+ * \enddot

+ *

+ * \section asfdoc_samd20_system_pinmux_special_considerations Special Considerations

+ *

+ * The SAM D20 port pin input sampling mode is set in groups of four physical

+ * pins; setting the sampling mode of any pin in a sub-group of four I/O pins

+ * will configure the sampling mode of the entire sub-group.

+ *

+ * High Drive Strength output driver mode is not available on all device pins -

+ * refer to your device specific datasheet.

+ *

+ *

+ * \section asfdoc_samd20_system_pinmux_extra_info Extra Information

+ *

+ * For extra information see \ref asfdoc_samd20_system_pinmux_extra. This includes:

+ *  - \ref asfdoc_samd20_system_pinmux_extra_acronyms

+ *  - \ref asfdoc_samd20_system_pinmux_extra_dependencies

+ *  - \ref asfdoc_samd20_system_pinmux_extra_errata

+ *  - \ref asfdoc_samd20_system_pinmux_extra_history

+ *

+ *

+ * \section asfdoc_samd20_system_pinmux_examples Examples

+ *

+ * For a list of examples related to this driver, see

+ * \ref asfdoc_samd20_system_pinmux_exqsg.

+ *

+ *

+ * \section asfdoc_samd20_system_pinmux_api_overview API Overview

+ * @{

+ */

+

+#include <compiler.h>

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+/** Peripheral multiplexer index to select GPIO mode for a pin. */

+#define SYSTEM_PINMUX_GPIO    (1 << 7)

+

+/**

+ * \brief Port pin direction configuration enum.

+ *

+ * Enum for the possible pin direction settings of the port pin configuration

+ * structure, to indicate the direction the pin should use.

+ */

+enum system_pinmux_pin_dir {

+	/** The pin's input buffer should be enabled, so that the pin state can

+	 *  be read. */

+	SYSTEM_PINMUX_PIN_DIR_INPUT,

+	/** The pin's output buffer should be enabled, so that the pin state can

+	 *  be set (but not read back). */

+	SYSTEM_PINMUX_PIN_DIR_OUTPUT,

+	/** The pin's output and input buffers should both be enabled, so that the

+	 *  pin state can be set and read back. */

+	SYSTEM_PINMUX_PIN_DIR_OUTPUT_WITH_READBACK,

+};

+

+/**

+ * \brief Port pin input pull configuration enum.

+ *

+ * Enum for the possible pin pull settings of the port pin configuration

+ * structure, to indicate the type of logic level pull the pin should use.

+ */

+enum system_pinmux_pin_pull {

+	/** No logical pull should be applied to the pin. */

+	SYSTEM_PINMUX_PIN_PULL_NONE,

+	/** Pin should be pulled up when idle. */

+	SYSTEM_PINMUX_PIN_PULL_UP,

+	/** Pin should be pulled down when idle. */

+	SYSTEM_PINMUX_PIN_PULL_DOWN,

+};

+

+/**

+ * \brief Port pin digital input sampling mode enum.

+ *

+ * Enum for the possible input sampling modes for the port pin configuration

+ * structure, to indicate the type of sampling a port pin should use.

+ */

+enum system_pinmux_pin_sample {

+	/** Pin input buffer should continuously sample the pin state. */

+	SYSTEM_PINMUX_PIN_SAMPLE_CONTINUOUS,

+	/** Pin input buffer should be enabled when the IN register is read. */

+	SYSTEM_PINMUX_PIN_SAMPLE_ONDEMAND,

+};

+

+/**

+ * \brief Port pin drive output strength enum.

+ *

+ * Enum for the possible output drive strengths for the port pin

+ * configuration structure, to indicate the driver strength the pin should

+ * use.

+ */

+enum system_pinmux_pin_strength {

+	/** Normal output driver strength. */

+	SYSTEM_PINMUX_PIN_STRENGTH_NORMAL,

+	/** High current output driver strength. */

+	SYSTEM_PINMUX_PIN_STRENGTH_HIGH,

+};

+

+/**

+ * \brief Port pin output slew rate enum.

+ *

+ * Enum for the possible output drive slew rates for the port pin

+ * configuration structure, to indicate the driver slew rate the pin should

+ * use.

+ */

+enum system_pinmux_pin_slew_rate {

+	/** Normal pin output slew rate. */

+	SYSTEM_PINMUX_PIN_SLEW_RATE_NORMAL,

+	/** Enable slew rate limiter on the pin. */

+	SYSTEM_PINMUX_PIN_SLEW_RATE_LIMITED,

+};

+

+/**

+ * \brief Port pin output drive mode enum.

+ *

+ * Enum for the possible output drive modes for the port pin configuration

+ * structure, to indicate the output mode the pin should use.

+ */

+enum system_pinmux_pin_drive {

+	/** Use totem pole output drive mode. */

+	SYSTEM_PINMUX_PIN_DRIVE_TOTEM,

+	/** Use open drain output drive mode. */

+	SYSTEM_PINMUX_PIN_DRIVE_OPEN_DRAIN,

+};

+

+/**

+ * \brief Port pin configuration structure.

+ *

+ * Configuration structure for a port pin instance. This structure should be

+ * structure should be initialized by the

+ * \ref system_pinmux_get_config_defaults() function before being modified by

+ * the user application.

+ */

+struct system_pinmux_config {

+	/** MUX index of the peripheral that should control the pin, if peripheral

+	 *  control is desired. For GPIO use, this should be set to

+	 *  \ref SYSTEM_PINMUX_GPIO. */

+	uint8_t mux_position;

+

+	/** Port buffer input/output direction. */

+	enum system_pinmux_pin_dir direction;

+

+	/** Logic level pull of the input buffer. */

+	enum system_pinmux_pin_pull input_pull;

+};

+

+/** \name Configuration and initialization

+ * @{

+ */

+

+/**

+ * \brief Initializes a Port pin configuration structure to defaults.

+ *

+ * Initializes a given Port pin 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 Non peripheral (i.e. GPIO) controlled

+ *  \li Input mode with internal pull-up enabled

+ *

+ * \param[out] config  Configuration structure to initialize to default values

+ */

+static inline void system_pinmux_get_config_defaults(

+		struct system_pinmux_config *const config)

+{

+	/* Sanity check arguments */

+	Assert(config);

+

+	/* Default configuration values */

+	config->mux_position = SYSTEM_PINMUX_GPIO;

+	config->direction    = SYSTEM_PINMUX_PIN_DIR_INPUT;

+	config->input_pull   = SYSTEM_PINMUX_PIN_PULL_UP;

+}

+

+void system_pinmux_pin_set_config(

+		const uint8_t gpio_pin,

+		const struct system_pinmux_config *const config);

+

+void system_pinmux_group_set_config(

+		PortGroup *const port,

+		const uint32_t mask,

+		const struct system_pinmux_config *const config);

+

+/** @} */

+

+/** \name Special mode configuration (physical group orientated)

+ *  @{

+ */

+

+/**

+ * \brief Retrieves the PORT module group instance from a given GPIO pin number.

+ *

+ * Retrieves the PORT module group instance associated with a given logical

+ * GPIO pin number.

+ *

+ * \param[in] gpio_pin  Index of the GPIO pin to convert.

+ *

+ * \return Base address of the associated PORT module.

+ */

+static inline PortGroup* system_pinmux_get_group_from_gpio_pin(

+		const uint8_t gpio_pin)

+{

+	uint8_t port_index  = (gpio_pin / 128);

+	uint8_t group_index = (gpio_pin / 32);

+

+	/* Array of available ports. */

+	Port *const ports[PORT_INST_NUM] = PORT_INSTS;

+

+	if (port_index < PORT_INST_NUM) {

+		return &(ports[port_index]->Group[group_index]);

+	} else {

+		Assert(false);

+		return NULL;

+	}

+}

+

+void system_pinmux_group_set_input_sample_mode(

+		PortGroup *const port,

+		const uint32_t mask,

+		const enum system_pinmux_pin_sample mode);

+

+void system_pinmux_group_set_output_strength(

+		PortGroup *const port,

+		const uint32_t mask,

+		const enum system_pinmux_pin_strength mode);

+

+void system_pinmux_group_set_output_slew_rate(

+		PortGroup *const port,

+		const uint32_t mask,

+		const enum system_pinmux_pin_slew_rate mode);

+

+void system_pinmux_group_set_output_drive(

+		PortGroup *const port,

+		const uint32_t mask,

+		const enum system_pinmux_pin_drive mode);

+

+/** @} */

+

+/** \name Special mode configuration (logical pin orientated)

+ *  @{

+ */

+

+/**

+ * \brief Retrieves the currently selected MUX position of a logical pin.

+ *

+ * Retrieves the selected MUX peripheral on a given logical GPIO pin.

+ *

+ * \param[in]  gpio_pin  Index of the GPIO pin to configure.

+ *

+ * \return Currently selected peripheral index on the specified pin.

+ */

+static inline uint8_t system_pinmux_pin_get_mux_position(

+		const uint8_t gpio_pin)

+{

+	PortGroup *const port = system_pinmux_get_group_from_gpio_pin(gpio_pin);

+	uint32_t pin_index = (gpio_pin % 32);

+

+	if (!(port->PINCFG[pin_index].reg & PORT_PINCFG_PMUXEN)) {

+		return SYSTEM_PINMUX_GPIO;

+	}

+

+	uint32_t pmux_reg = port->PMUX[pin_index / 2].reg;

+

+	if (pin_index & 1) {

+		return (pmux_reg & PORT_PMUX_PMUXO_Msk) >> PORT_PMUX_PMUXO_Pos;

+	}

+	else {

+		return (pmux_reg & PORT_PMUX_PMUXE_Msk) >> PORT_PMUX_PMUXE_Pos;

+	}

+}

+

+/**

+ * \brief Configures the input sampling mode for a GPIO pin.

+ *

+ * Configures the input sampling mode for a GPIO input, to

+ * control when the physical I/O pin value is sampled and

+ * stored inside the microcontroller.

+ *

+ * \param[in] gpio_pin Index of the GPIO pin to configure.

+ * \param[in] mode     New pin sampling mode to configure.

+ */

+static inline void system_pinmux_pin_set_input_sample_mode(

+		const uint8_t gpio_pin,

+		const enum system_pinmux_pin_sample mode)

+{

+	PortGroup* const port = system_pinmux_get_group_from_gpio_pin(gpio_pin);

+	uint32_t sample_quad_mask = (1UL << ((gpio_pin % 32) / 4));

+

+	if (mode == SYSTEM_PINMUX_PIN_SAMPLE_ONDEMAND) {

+		port->CTRL.reg |=  sample_quad_mask;

+	}

+	else {

+		port->CTRL.reg &= ~sample_quad_mask;

+	}

+}

+

+/**

+ * \brief Configures the output driver strength mode for a GPIO pin.

+ *

+ * Configures the output drive strength for a GPIO output, to

+ * control the amount of current the pad is able to sink/source.

+ *

+ * \param[in] gpio_pin  Index of the GPIO pin to configure.

+ * \param[in] mode      New output driver strength mode to configure.

+ */

+static inline void system_pinmux_pin_set_output_strength(

+		const uint8_t gpio_pin,

+		const enum system_pinmux_pin_strength mode)

+{

+	PortGroup* const port = system_pinmux_get_group_from_gpio_pin(gpio_pin);

+	uint32_t pin_index = (gpio_pin % 32);

+

+	if (mode == SYSTEM_PINMUX_PIN_STRENGTH_HIGH) {

+		port->PINCFG[pin_index].reg |=  PORT_PINCFG_DRVSTR;

+	}

+	else {

+		port->PINCFG[pin_index].reg &= ~PORT_PINCFG_DRVSTR;

+	}

+}

+

+/**

+ * \brief Configures the output slew rate mode for a GPIO pin.

+ *

+ * Configures the output slew rate mode for a GPIO output, to

+ * control the speed at which the physical output pin can react to

+ * logical changes of the I/O pin value.

+ *

+ * \param[in] gpio_pin  Index of the GPIO pin to configure.

+ * \param[in] mode      New pin slew rate mode to configure.

+ */

+static inline void system_pinmux_pin_set_output_slew_rate(

+		const uint8_t gpio_pin,

+		const enum system_pinmux_pin_slew_rate mode)

+{

+	PortGroup* const port = system_pinmux_get_group_from_gpio_pin(gpio_pin);

+	uint32_t pin_index = (gpio_pin % 32);

+

+	if (mode == SYSTEM_PINMUX_PIN_SLEW_RATE_LIMITED) {

+		port->PINCFG[pin_index].reg |=  PORT_PINCFG_SLEWLIM;

+	}

+	else {

+		port->PINCFG[pin_index].reg &= ~PORT_PINCFG_SLEWLIM;

+	}

+}

+

+/**

+ * \brief Configures the output driver mode for a GPIO pin.

+ *

+ * Configures the output driver mode for a GPIO output, to

+ * control the pad behavior.

+ *

+ * \param[in] gpio_pin  Index of the GPIO pin to configure.

+ * \param[in] mode      New pad output driver mode to configure.

+ */

+static inline void system_pinmux_pin_set_output_drive(

+		const uint8_t gpio_pin,

+		const enum system_pinmux_pin_drive mode)

+{

+	PortGroup* const port = system_pinmux_get_group_from_gpio_pin(gpio_pin);

+	uint32_t pin_index = (gpio_pin % 32);

+

+	if (mode == SYSTEM_PINMUX_PIN_DRIVE_OPEN_DRAIN) {

+		port->PINCFG[pin_index].reg |=  PORT_PINCFG_ODRAIN;

+	}

+	else {

+		port->PINCFG[pin_index].reg &= ~PORT_PINCFG_ODRAIN;

+	}

+}

+

+/** @} */

+

+#ifdef __cplusplus

+}

+#endif

+

+/** @} */

+

+/**

+ * \page asfdoc_samd20_system_pinmux_extra Extra Information for SYSTEM PINMUX Driver

+ *

+ * \section asfdoc_samd20_system_pinmux_extra_acronyms Acronyms

+ * The table below presents the acronyms used in this module:

+ *

+ * <table>

+ *	<tr>

+ *		<th>Acronym</th>

+ *		<th>Description</th>

+ *	</tr>

+ *	<tr>

+ *		<td>GPIO</td>

+ *		<td>General Purpose Input/Output</td>

+ *	</tr>

+ *	<tr>

+ *		<td>MUX</td>

+ *		<td>Multiplexer</td>

+ *	</tr>

+ * </table>

+ *

+ *

+ * \section asfdoc_samd20_system_pinmux_extra_dependencies Dependencies

+ * This driver has the following dependencies:

+ *

+ *  - None

+ *

+ *

+ * \section asfdoc_samd20_system_pinmux_extra_errata Errata

+ * There are no errata related to this driver.

+ *

+ *

+ * \section asfdoc_samd20_system_pinmux_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>Added missing NULL pointer asserts to the PORT driver functions.</td>

+ *	</tr>

+ *	<tr>

+ *		<td>Initial Release</td>

+ *	</tr>

+ * </table>

+ */

+

+/**

+ * \page asfdoc_samd20_system_pinmux_exqsg Examples for SYSTEM PINMUX Driver

+ *

+ * This is a list of the available Quick Start guides (QSGs) and example

+ * applications for \ref asfdoc_samd20_system_pinmux_group. QSGs are simple

+ * examples with step-by-step instructions to configure and use this driver in a

+ * selection of use cases. Note that QSGs can be compiled as a standalone

+ * application or be added to the user application.

+ *

+ *  - \subpage asfdoc_samd20_system_pinmux_basic_use_case

+ *

+ * \page asfdoc_samd20_system_pinmux_document_revision_history Document Revision History

+ *

+ * <table>

+ *	<tr>

+ *		<th>Doc. Rev.</td>

+ *		<th>Date</td>

+ *		<th>Comments</td>

+ *	</tr>

+ *	<tr>

+ *		<td>B</td>

+ *		<td>06/2013</td>

+ *		<td>Corrected documentation typos.</td>

+ *	</tr>

+ *	<tr>

+ *		<td>A</td>

+ *		<td>06/2013</td>

+ *		<td>Initial release</td>

+ *	</tr>

+ * </table>

+ */

+

+#endif

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/pinmux/quick_start/qs_pinmux_basic.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/pinmux/quick_start/qs_pinmux_basic.h
new file mode 100644
index 0000000..5a6a558
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/pinmux/quick_start/qs_pinmux_basic.h
@@ -0,0 +1,86 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 PINMUX Driver Quick Start

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+

+/**

+ * \page asfdoc_samd20_system_pinmux_basic_use_case Quick Start Guide for SYSTEM PINMUX - Basic

+ *

+ * In this use case, the PINMUX module is configured for:

+ *  \li One pin in input mode, with pull-up enabled, connected to the GPIO

+ *      module

+ *  \li Sampling mode of the pin changed to sample on demand

+ *

+ * This use case sets up the PINMUX to configure a physical I/O pin set as

+ * an input with pull-up. and changes the sampling mode of the pin to reduce

+ * power by only sampling the physical pin state when the user application

+ * attempts to read it.

+ *

+ * \section asfdoc_samd20_system_pinmux_basic_use_case_setup Setup

+ *

+ * \subsection asfdoc_samd20_system_pinmux_basic_use_case_setup_prereq Prerequisites

+ * There are no special setup requirements for this use-case.

+ *

+ * \section asfdoc_samd20_system_pinmux_basic_use_case_use_main Use Case

+ *

+ * \subsection asfdoc_samd20_system_pinmux_basic_use_case_code Code

+ * Copy-paste the following code to your user application:

+ * \snippet qs_pinmux_basic.c main

+ *

+ * \subsection asfdoc_samd20_system_pinmux_basic_use_case_flow Workflow

+ * -# Create a PINMUX module pin configuration struct, which can be filled out

+ *    to adjust the configuration of a single port pin.

+ *  \snippet qs_pinmux_basic.c pinmux_config

+ * -# Initialize the pin configuration struct with the module's default values.

+ *    \note This should always be performed before using the configuration

+ *          struct to ensure that all values are initialized to known default

+ *          settings.

+ *

+ *  \snippet qs_pinmux_basic.c pinmux_config_defaults

+ * -# Adjust the configuration struct to request an input pin with pullup

+ *    connected to the GPIO peripheral.

+ *  \snippet qs_pinmux_basic.c pinmux_update_config_values

+ * -# Configure GPIO10 with the initialized pin configuration struct, to enable

+ *    the input sampler on the pin.

+ *  \snippet qs_pinmux_basic.c pinmux_set_config

+ * -# Adjust the configuration of the pin to enable on-demand sampling mode.

+ *  \snippet qs_pinmux_basic.c pinmux_change_input_sampling

+ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/system.c b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/system.c
new file mode 100644
index 0000000..c31f5fa
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/system.c
@@ -0,0 +1,101 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 System related functionality

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+

+#include <system.h>

+

+/**

+ * \internal

+ * Dummy initialization function, used as a weak alias target for the various

+ * init functions called by \ref system_init().

+ */

+void _system_dummy_init(void);

+void _system_dummy_init(void)

+{

+	return;

+}

+

+#if !defined(__DOXYGEN__)

+#  if defined(__GNUC__)

+void system_clock_init(void) WEAK __attribute__((alias("_system_dummy_init")));

+void system_board_init(void) WEAK __attribute__((alias("_system_dummy_init")));

+#  elif defined(__ICCARM__)

+void system_clock_init(void);

+void system_board_init(void);

+#    pragma weak system_clock_init=_system_dummy_init

+#    pragma weak system_board_init=_system_dummy_init

+#  endif

+#endif

+

+

+/**

+ * Handler for the CPU Hard Fault interrupt, fired if an illegal access was

+ * attempted to a memory address.

+ */

+void HardFault_Handler(void)

+{

+	while (1) {

+		/* Infinite loop if CPU exception is detected */

+		Assert(false);

+	}

+}

+

+/**

+ * \brief Initialize system

+ *

+ * This function will call the various initialization functions within the

+ * system namespace. If a given optional system module is not available, the

+ * associated call will effectively be a NOP (No Operation).

+ *

+ * Currently the following initialization functions are supported:

+ *  - System clock initialization (via the SYSTEM CLOCK sub-module)

+ *  - Board hardware initialization (via the Board module)

+ */

+void system_init(void)

+{

+	/* Configure GCLK and clock sources according to conf_clocks.h */

+	system_clock_init();

+

+	/* Initialize board hardware */

+	system_board_init();

+}

+

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/system.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/system.h
new file mode 100644
index 0000000..7f29aa1
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/drivers/system/system.h
@@ -0,0 +1,531 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 System related functionality

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+#ifndef SYSTEM_H_INCLUDED

+#define SYSTEM_H_INCLUDED

+

+#include <compiler.h>

+#include <clock.h>

+#include <gclk.h>

+#include <pinmux.h>

+

+/**

+ * \defgroup asfdoc_samd20_system_group SAM D20 System Driver (SYSTEM)

+ *

+ * This driver for SAM D20 devices provides an interface for the configuration

+ * and management of the device's system relation functionality, necessary for

+ * the basic device operation. This is not limited to a single peripheral, but

+ * extends across multiple hardware peripherals,

+ *

+ * The following peripherals are used by this module:

+ *

+ * - SYSCTRL (System Control)

+ * - PM (Power Manager)

+ *

+ * The outline of this documentation is as follows:

+ *  - \ref asfdoc_samd20_system_prerequisites

+ *  - \ref asfdoc_samd20_system_module_overview

+ *  - \ref asfdoc_samd20_system_special_considerations

+ *  - \ref asfdoc_samd20_system_extra_info

+ *  - \ref asfdoc_samd20_system_examples

+ *  - \ref asfdoc_samd20_system_api_overview

+ *

+ *

+ * \section asfdoc_samd20_system_prerequisites Prerequisites

+ *

+ * There are no prerequisites for this module.

+ *

+ *

+ * \section asfdoc_samd20_system_module_overview Module Overview

+ *

+ * The System driver provides a collection of interfaces between the user

+ * application logic, and the core device functionality (such as clocks, reset

+ * cause determination, etc.) that is required for all applications. It contains

+ * a number of sub-modules that control one specific aspect of the device:

+ *

+ * - System Core (this module)

+ * - \ref asfdoc_samd20_system_clock_group "System Clock Control" (sub-module)

+ * - \ref asfdoc_samd20_system_interrupt_group "System Interrupt Control" (sub-module)

+ * - \ref asfdoc_samd20_system_pinmux_group "System Pin Multiplexer Control" (sub-module)

+ *

+ *

+ * \subsection asfdoc_samd20_system_module_overview_vref Voltage References

+ * The various analog modules within the SAM D20 devices (such as AC, ADC and

+ * DAC) require a voltage reference to be configured to act as a reference point

+ * for comparisons and conversions.

+ *

+ * The SAM D20 devices contain multiple references, including an internal

+ * temperature sensor, and a fixed band-gap voltage source. When enabled, the

+ * associated voltage reference can be selected within the desired peripheral

+ * where applicable.

+ *

+ * \subsection asfdoc_samd20_system_module_overview_reset_cause System Reset Cause

+ * In some application there may be a need to execute a different program

+ * flow based on how the device was reset. For example, if the cause of reset

+ * was the Watchdog timer (WDT), this might indicate an error in the application

+ * and a form of error handling or error logging might be needed.

+ *

+ * For this reason, an API is provided to retrieve the cause of the last system

+ * reset, so that appropriate action can be taken.

+ *

+ * \subsection asfdoc_samd20_system_module_overview_sleep_mode Sleep Modes

+ * The SAM D20 devices have several sleep modes, where the sleep mode controls

+ * which clock systems on the device will remain enabled or disabled when the

+ * device enters a low power sleep mode.

+ * \ref asfdoc_samd20_system_module_sleep_mode_table "The table below" lists the

+ * clock settings of the different sleep modes.

+ *

+ * \anchor asfdoc_samd20_system_module_sleep_mode_table

+ * <table>

+ *  <caption>SAM D20 Device Sleep Modes</caption>

+ * 	<tr>

+ * 		<th>Sleep mode</th>

+ * 		<th>CPU clock</th>

+ * 		<th>AHB clock</th>

+ * 		<th>APB clocks</th>

+ * 		<th>Clock sources</th>

+ * 		<th>System clock</th>

+ * 		<th>32KHz</th>

+ * 		<th>Reg mode</th>

+ * 		<th>RAM mode</th>

+ * 	</tr>

+ * 	<tr>

+ * 		<td>IDLE 0</td>

+ * 		<td>Stop</td>

+ * 		<td>Run</td>

+ * 		<td>Run</td>

+ * 		<td>Run</td>

+ * 		<td>Run</td>

+ * 		<td>Run</td>

+ * 		<td>Normal</td>

+ * 		<td>Normal</td>

+ * 	</tr>

+ * 	<tr>

+ * 		<td>IDLE 1</td>

+ * 		<td>Stop</td>

+ * 		<td>Stop</td>

+ * 		<td>Run</td>

+ * 		<td>Run</td>

+ * 		<td>Run</td>

+ * 		<td>Run</td>

+ * 		<td>Normal</td>

+ * 		<td>Normal</td>

+ *	</tr>

+ * 	<tr>

+ * 		<td>IDLE 2</td>

+ * 		<td>Stop</td>

+ * 		<td>Stop</td>

+ * 		<td>Stop</td>

+ * 		<td>Run</td>

+ * 		<td>Run</td>

+ * 		<td>Run</td>

+ * 		<td>Normal</td>

+ * 		<td>Normal</td>

+ *	</tr>

+ * 	<tr>

+ * 		<td>STANDBY</td>

+ * 		<td>Stop</td>

+ * 		<td>Stop</td>

+ * 		<td>Stop</td>

+ * 		<td>Stop</td>

+ * 		<td>Stop</td>

+ * 		<td>Stop</td>

+ * 		<td>Low Power</td>

+ * 		<td>Source/Drain biasing</td>

+ * 	</tr>

+ * </table>

+ *

+ * To enter device sleep, one of the available sleep modes must be set, and the

+ * function to enter sleep called. The device will automatically wake up in

+ * response to an interrupt being generated or other device event.

+ *

+ * Some peripheral clocks will remain enabled during sleep, depending on their

+ * configuration; if desired, modules can remain clocked during sleep to allow

+ * them to continue to operate while other parts of the system are powered down

+ * to save power.

+ *

+ *

+ * \section asfdoc_samd20_system_special_considerations Special Considerations

+ *

+ * Most of the functions in this driver have device specific restrictions and

+ * caveats; refer to your device datasheet.

+ *

+ *

+ * \section asfdoc_samd20_system_extra_info Extra Information

+ *

+ * For extra information see \ref asfdoc_samd20_system_extra. This includes:

+ *  - \ref asfdoc_samd20_system_extra_acronyms

+ *  - \ref asfdoc_samd20_system_extra_dependencies

+ *  - \ref asfdoc_samd20_system_extra_errata

+ *  - \ref asfdoc_samd20_system_extra_history

+ *

+ *

+ * \section asfdoc_samd20_system_examples Examples

+ *

+ * For SYSTEM module related examples, please refer to the sub-modules listed in

+ * the \ref asfdoc_samd20_system_module_overview "system module overview".

+ *

+ *

+ * \section asfdoc_samd20_system_api_overview API Overview

+ * @{

+ */

+

+/**

+ * \brief Voltage references within the device.

+ *

+ * List of available voltage references (VREF) that may be used within the

+ * device.

+ */

+enum system_voltage_reference {

+	/** Temperature sensor voltage reference. */

+	SYSTEM_VOLTAGE_REFERENCE_TEMPSENSE,

+	/** Bandgap voltage reference. */

+	SYSTEM_VOLTAGE_REFERENCE_BANDGAP,

+};

+

+/**

+ * \brief Device sleep modes.

+ *

+ * List of available sleep modes in the device. A table of clocks available in

+ * different sleep modes can be found in \ref asfdoc_samd20_system_module_overview_sleep_mode.

+ */

+enum system_sleepmode {

+	/** IDLE 0 sleep mode. */

+	SYSTEM_SLEEPMODE_IDLE_0,

+	/** IDLE 1 sleep mode. */

+	SYSTEM_SLEEPMODE_IDLE_1,

+	/** IDLE 2 sleep mode. */

+	SYSTEM_SLEEPMODE_IDLE_2,

+	/** Standby sleep mode. */

+	SYSTEM_SLEEPMODE_STANDBY,

+};

+

+/**

+ * \brief Reset causes of the system.

+ *

+ * List of possible reset causes of the system.

+ */

+enum system_reset_cause {

+	/** The system was last reset by a software reset. */

+	SYSTEM_RESET_CAUSE_SOFTWARE       = PM_RCAUSE_SYST,

+	/** The system was last reset by the watchdog timer. */

+	SYSTEM_RESET_CAUSE_WDT            = PM_RCAUSE_WDT,

+	/** The system was last reset because the external reset line was pulled low. */

+	SYSTEM_RESET_CAUSE_EXTERNAL_RESET = PM_RCAUSE_EXT,

+	/** The system was last reset by the BOD33. */

+	SYSTEM_RESET_CAUSE_BOD33          = PM_RCAUSE_BOD33,

+	/** The system was last reset by the BOD12. */

+	SYSTEM_RESET_CAUSE_BOD12          = PM_RCAUSE_BOD12,

+	/** The system was last reset by the POR (Power on reset). */

+	SYSTEM_RESET_CAUSE_POR            = PM_RCAUSE_POR,

+};

+

+/**

+ * \name System identification

+ * @{

+ */

+

+/**

+ * \brief Retrieve the device identification signature

+ *

+ * Retrieves the signature of the current device.

+ *

+ * \return Device ID signature as a 32-bit integer.

+ */

+static inline uint32_t system_get_device_id(void)

+{

+	return DSU->DID.reg;

+}

+

+/**

+ * @}

+ */

+

+

+/**

+ * \name Voltage references

+ * @{

+ */

+

+/**

+ * \brief Enable the selected voltage reference

+ *

+ * Enables the selected voltage reference source, making the voltage reference

+ * available on a pin as well as an input source to the analog peripherals.

+ *

+ * \param[in] vref  Voltage reference to enable

+ */

+static inline void system_voltage_reference_enable(

+		const enum system_voltage_reference vref)

+{

+	switch (vref) {

+		case SYSTEM_VOLTAGE_REFERENCE_TEMPSENSE:

+			SYSCTRL->VREF.reg |= SYSCTRL_VREF_TSEN;

+			break;

+

+		case SYSTEM_VOLTAGE_REFERENCE_BANDGAP:

+			SYSCTRL->VREF.reg |= SYSCTRL_VREF_BGOUTEN;

+			break;

+

+		default:

+			Assert(false);

+			return;

+	}

+}

+

+/**

+ * \brief Disable the selected voltage reference

+ *

+ * Disables the selected voltage reference source.

+ *

+ * \param[in] vref  Voltage reference to disable

+ */

+static inline void system_voltage_reference_disable(

+		const enum system_voltage_reference vref)

+{

+	switch (vref) {

+		case SYSTEM_VOLTAGE_REFERENCE_TEMPSENSE:

+			SYSCTRL->VREF.reg &= ~SYSCTRL_VREF_TSEN;

+			break;

+

+		case SYSTEM_VOLTAGE_REFERENCE_BANDGAP:

+			SYSCTRL->VREF.reg &= ~SYSCTRL_VREF_BGOUTEN;

+			break;

+

+		default:

+			Assert(false);

+			return;

+	}

+}

+

+/**

+ * @}

+ */

+

+

+/**

+ * \name Device sleep

+ * @{

+ */

+

+/**

+ * \brief Set the sleep mode of the device

+ *

+ * Sets the sleep mode of the device; the configured sleep mode will be entered

+ * upon the next call of the \ref system_sleep() function.

+ *

+ * For an overview of which systems are disabled in sleep for the different

+ * sleep modes, see \ref asfdoc_samd20_system_module_overview_sleep_mode.

+ *

+ * \param[in] sleep_mode  Sleep mode to configure for the next sleep operation

+ *

+ * \retval STATUS_OK               Operation completed successfully

+ * \retval STATUS_ERR_INVALID_ARG  The requested sleep mode was invalid or not

+ *                                 available

+ */

+static inline enum status_code system_set_sleepmode(

+	const enum system_sleepmode sleep_mode)

+{

+	switch (sleep_mode) {

+		case SYSTEM_SLEEPMODE_IDLE_0:

+		case SYSTEM_SLEEPMODE_IDLE_1:

+		case SYSTEM_SLEEPMODE_IDLE_2:

+			SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk;

+			PM->SLEEP.reg = sleep_mode;

+			break;

+

+		case SYSTEM_SLEEPMODE_STANDBY:

+			SCB->SCR |=  SCB_SCR_SLEEPDEEP_Msk;

+			break;

+

+		default:

+			return STATUS_ERR_INVALID_ARG;

+	}

+

+	return STATUS_OK;

+}

+

+/**

+ * \brief Put the system to sleep waiting for interrupt

+ *

+ * Executes a device DSB (Data Synchronization Barrier) instruction to ensure

+ * all ongoing memory accesses have completed, then a WFI (Wait For Interrupt)

+ * instruction to place the device into the sleep mode specified by

+ * \ref system_set_sleepmode until woken by an interrupt.

+ */

+static inline void system_sleep(void)

+{

+	__DSB();

+	__WFI();

+}

+

+/**

+ * @}

+ */

+

+/**

+ * \name Reset control

+ * @{

+ */

+

+/**

+ * \brief Reset the MCU

+ *

+ * Resets the MCU and all associated peripherals and registers, except RTC, all 32kHz sources,

+ * WDT (if ALWAYSON is set) and GCLK (if WRTLOCK is set).

+ *

+ */

+static inline void system_reset(void)

+{

+	NVIC_SystemReset();

+}

+

+/**

+ * \brief Return the reset cause

+ *

+ * Retrieves the cause of the last system reset.

+ *

+ * \return An enum value indicating the cause of the last system reset.

+ */

+static inline enum system_reset_cause system_get_reset_cause(void)

+{

+	return (enum system_reset_cause)PM->RCAUSE.reg;

+}

+

+/**

+ * @}

+ */

+

+

+/**

+ * \name System initialization

+ * @{

+ */

+

+void system_init(void);

+

+/**

+ * @}

+ */

+

+

+/**

+ * @}

+ */

+

+/**

+ * \page asfdoc_samd20_system_extra Extra Information for SYSTEM Driver

+ *

+ * \section asfdoc_samd20_system_extra_acronyms Acronyms

+ * Below is a table listing the acronyms used in this module, along with their

+ * intended meanings.

+ *

+ * <table>

+ *  <tr>

+ *      <th>Acronym</th>

+ *      <th>Definition</th>

+ *  </tr>

+ *  <tr>

+ *		<td>PM</td>

+ *		<td>Power Manager</td>

+ *  </tr>

+ *  <tr>

+ *		<td>SYSCTRL</td>

+ *		<td>System control interface</td>

+ *  </tr>

+ * </table>

+ *

+ *

+ * \section asfdoc_samd20_system_extra_dependencies Dependencies

+ * This driver has the following dependencies:

+ *

+ *  - None

+ *

+ *

+ * \section asfdoc_samd20_system_extra_errata Errata

+ * There are no errata related to this driver.

+ *

+ *

+ * \section asfdoc_samd20_system_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>Added new \c system_reset() to reset the complete MCU with some exceptions</td>

+ *	</tr>

+ *	<tr>

+ *		<td>Added new \c system_get_device_id() function to retrieved the device

+ *          ID.</td>

+ *	</tr>

+ *	<tr>

+ *		<td>Initial Release</td>

+ *	</tr>

+ * </table>

+ *

+ * \page asfdoc_samd20_system_document_revision_history Document Revision History

+ *

+ * <table>

+ *	<tr>

+ *		<th>Doc. Rev.</td>

+ *		<th>Date</td>

+ *		<th>Comments</td>

+ *	</tr>

+ *	<tr>

+ *		<td>B</td>

+ *		<td>06/2013</td>

+ *		<td>Corrected documentation typos.</td>

+ *	</tr>

+ *	<tr>

+ *		<td>A</td>

+ *		<td>06/2013</td>

+ *		<td>Initial release</td>

+ *	</tr>

+ * </table>

+ */

+

+#endif /* SYSTEM_H_INCLUDED */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_ac.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_ac.h
new file mode 100644
index 0000000..e552247
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_ac.h
@@ -0,0 +1,524 @@
+/**

+ * \file

+ *

+ * \brief Component description for AC

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_AC_COMPONENT_

+#define _SAMD20_AC_COMPONENT_

+

+/* ========================================================================== */

+/**  SOFTWARE API DEFINITION FOR AC */

+/* ========================================================================== */

+/** \addtogroup SAMD20_AC Analog Comparators */

+/*@{*/

+

+#define REV_AC                      0x110

+

+/* -------- AC_CTRLA : (AC Offset: 0x00) (R/W  8) Control A Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  SWRST:1;          /*!< bit:      0  Software Reset                     */

+    uint8_t  ENABLE:1;         /*!< bit:      1  Enable                             */

+    uint8_t  RUNSTDBY:1;       /*!< bit:      2  Run during Standby                 */

+    uint8_t  :5;               /*!< bit:  3.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} AC_CTRLA_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define AC_CTRLA_OFFSET             0x00         /**< \brief (AC_CTRLA offset) Control A Register */

+#define AC_CTRLA_RESETVALUE         0x00         /**< \brief (AC_CTRLA reset_value) Control A Register */

+

+#define AC_CTRLA_SWRST_Pos          0            /**< \brief (AC_CTRLA) Software Reset */

+#define AC_CTRLA_SWRST              (0x1u << AC_CTRLA_SWRST_Pos)

+#define AC_CTRLA_ENABLE_Pos         1            /**< \brief (AC_CTRLA) Enable */

+#define AC_CTRLA_ENABLE             (0x1u << AC_CTRLA_ENABLE_Pos)

+#define AC_CTRLA_RUNSTDBY_Pos       2            /**< \brief (AC_CTRLA) Run during Standby */

+#define AC_CTRLA_RUNSTDBY_Msk       (0x1u << AC_CTRLA_RUNSTDBY_Pos)

+#define AC_CTRLA_RUNSTDBY(value)    ((AC_CTRLA_RUNSTDBY_Msk & ((value) << AC_CTRLA_RUNSTDBY_Pos)))

+#define AC_CTRLA_MASK               0x07u        /**< \brief (AC_CTRLA) MASK Register */

+

+/* -------- AC_CTRLB : (AC Offset: 0x01) ( /W  8) Control B Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  START0:1;         /*!< bit:      0  Comparator 0 Start Comparison      */

+    uint8_t  START1:1;         /*!< bit:      1  Comparator 1 Start Comparison      */

+    uint8_t  START2:1;         /*!< bit:      2  Comparator 2 Start Comparison      */

+    uint8_t  START3:1;         /*!< bit:      3  Comparator 3 Start Comparison      */

+    uint8_t  :4;               /*!< bit:  4.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} AC_CTRLB_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define AC_CTRLB_OFFSET             0x01         /**< \brief (AC_CTRLB offset) Control B Register */

+#define AC_CTRLB_RESETVALUE         0x00         /**< \brief (AC_CTRLB reset_value) Control B Register */

+

+#define AC_CTRLB_START0_Pos         0            /**< \brief (AC_CTRLB) Comparator 0 Start Comparison */

+#define AC_CTRLB_START0             (0x1u << AC_CTRLB_START0_Pos)

+#define AC_CTRLB_START1_Pos         1            /**< \brief (AC_CTRLB) Comparator 1 Start Comparison */

+#define AC_CTRLB_START1             (0x1u << AC_CTRLB_START1_Pos)

+#define AC_CTRLB_START2_Pos         2            /**< \brief (AC_CTRLB) Comparator 2 Start Comparison */

+#define AC_CTRLB_START2             (0x1u << AC_CTRLB_START2_Pos)

+#define AC_CTRLB_START3_Pos         3            /**< \brief (AC_CTRLB) Comparator 3 Start Comparison */

+#define AC_CTRLB_START3             (0x1u << AC_CTRLB_START3_Pos)

+#define AC_CTRLB_MASK               0x0Fu        /**< \brief (AC_CTRLB) MASK Register */

+

+/* -------- AC_EVCTRL : (AC Offset: 0x02) (R/W 16) Event Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t COMPEO0:1;        /*!< bit:      0  Comparator 0 Event Output Enable   */

+    uint16_t COMPEO1:1;        /*!< bit:      1  Comparator 1 Event Output Enable   */

+    uint16_t COMPEO2:1;        /*!< bit:      2  Comparator 2 Event Output Enable   */

+    uint16_t COMPEO3:1;        /*!< bit:      3  Comparator 3 Event Output Enable   */

+    uint16_t WINEO0:1;         /*!< bit:      4  Window 0 Event Output Enable       */

+    uint16_t WINEO1:1;         /*!< bit:      5  Window 1 Event Output Enable       */

+    uint16_t :2;               /*!< bit:  6.. 7  Reserved                           */

+    uint16_t COMPEI0:1;        /*!< bit:      8  Comparator 0 Event Input Enable    */

+    uint16_t COMPEI1:1;        /*!< bit:      9  Comparator 1 Event Input Enable    */

+    uint16_t COMPEI2:1;        /*!< bit:     10  Comparator 2 Event Input Enable    */

+    uint16_t COMPEI3:1;        /*!< bit:     11  Comparator 3 Event Input Enable    */

+    uint16_t :4;               /*!< bit: 12..15  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} AC_EVCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define AC_EVCTRL_OFFSET            0x02         /**< \brief (AC_EVCTRL offset) Event Control Register */

+#define AC_EVCTRL_RESETVALUE        0x0000       /**< \brief (AC_EVCTRL reset_value) Event Control Register */

+

+#define AC_EVCTRL_COMPEO0_Pos       0            /**< \brief (AC_EVCTRL) Comparator 0 Event Output Enable */

+#define AC_EVCTRL_COMPEO0           (0x1u << AC_EVCTRL_COMPEO0_Pos)

+#define AC_EVCTRL_COMPEO1_Pos       1            /**< \brief (AC_EVCTRL) Comparator 1 Event Output Enable */

+#define AC_EVCTRL_COMPEO1           (0x1u << AC_EVCTRL_COMPEO1_Pos)

+#define AC_EVCTRL_COMPEO2_Pos       2            /**< \brief (AC_EVCTRL) Comparator 2 Event Output Enable */

+#define AC_EVCTRL_COMPEO2           (0x1u << AC_EVCTRL_COMPEO2_Pos)

+#define AC_EVCTRL_COMPEO3_Pos       3            /**< \brief (AC_EVCTRL) Comparator 3 Event Output Enable */

+#define AC_EVCTRL_COMPEO3           (0x1u << AC_EVCTRL_COMPEO3_Pos)

+#define AC_EVCTRL_WINEO0_Pos        4            /**< \brief (AC_EVCTRL) Window 0 Event Output Enable */

+#define AC_EVCTRL_WINEO0            (0x1u << AC_EVCTRL_WINEO0_Pos)

+#define AC_EVCTRL_WINEO1_Pos        5            /**< \brief (AC_EVCTRL) Window 1 Event Output Enable */

+#define AC_EVCTRL_WINEO1            (0x1u << AC_EVCTRL_WINEO1_Pos)

+#define AC_EVCTRL_COMPEI0_Pos       8            /**< \brief (AC_EVCTRL) Comparator 0 Event Input Enable */

+#define AC_EVCTRL_COMPEI0           (0x1u << AC_EVCTRL_COMPEI0_Pos)

+#define AC_EVCTRL_COMPEI1_Pos       9            /**< \brief (AC_EVCTRL) Comparator 1 Event Input Enable */

+#define AC_EVCTRL_COMPEI1           (0x1u << AC_EVCTRL_COMPEI1_Pos)

+#define AC_EVCTRL_COMPEI2_Pos       10           /**< \brief (AC_EVCTRL) Comparator 2 Event Input Enable */

+#define AC_EVCTRL_COMPEI2           (0x1u << AC_EVCTRL_COMPEI2_Pos)

+#define AC_EVCTRL_COMPEI3_Pos       11           /**< \brief (AC_EVCTRL) Comparator 3 Event Input Enable */

+#define AC_EVCTRL_COMPEI3           (0x1u << AC_EVCTRL_COMPEI3_Pos)

+#define AC_EVCTRL_MASK              0x0F3Fu      /**< \brief (AC_EVCTRL) MASK Register */

+

+/* -------- AC_INTENCLR : (AC Offset: 0x04) (R/W  8) Interrupt Enable Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  COMP0:1;          /*!< bit:      0  Comparator 0 Interrupt Disable     */

+    uint8_t  COMP1:1;          /*!< bit:      1  Comparator 1 Interrupt Disable     */

+    uint8_t  COMP2:1;          /*!< bit:      2  Comparator 2 Interrupt Disable     */

+    uint8_t  COMP3:1;          /*!< bit:      3  Comparator 3 Interrupt Disable     */

+    uint8_t  WIN0:1;           /*!< bit:      4  Window 0 Interrupt Disable         */

+    uint8_t  WIN1:1;           /*!< bit:      5  Window 1 Interrupt Disable         */

+    uint8_t  :2;               /*!< bit:  6.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} AC_INTENCLR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define AC_INTENCLR_OFFSET          0x04         /**< \brief (AC_INTENCLR offset) Interrupt Enable Clear Register */

+#define AC_INTENCLR_RESETVALUE      0x00         /**< \brief (AC_INTENCLR reset_value) Interrupt Enable Clear Register */

+

+#define AC_INTENCLR_COMP0_Pos       0            /**< \brief (AC_INTENCLR) Comparator 0 Interrupt Disable */

+#define AC_INTENCLR_COMP0           (0x1u << AC_INTENCLR_COMP0_Pos)

+#define AC_INTENCLR_COMP1_Pos       1            /**< \brief (AC_INTENCLR) Comparator 1 Interrupt Disable */

+#define AC_INTENCLR_COMP1           (0x1u << AC_INTENCLR_COMP1_Pos)

+#define AC_INTENCLR_COMP2_Pos       2            /**< \brief (AC_INTENCLR) Comparator 2 Interrupt Disable */

+#define AC_INTENCLR_COMP2           (0x1u << AC_INTENCLR_COMP2_Pos)

+#define AC_INTENCLR_COMP3_Pos       3            /**< \brief (AC_INTENCLR) Comparator 3 Interrupt Disable */

+#define AC_INTENCLR_COMP3           (0x1u << AC_INTENCLR_COMP3_Pos)

+#define AC_INTENCLR_WIN0_Pos        4            /**< \brief (AC_INTENCLR) Window 0 Interrupt Disable */

+#define AC_INTENCLR_WIN0            (0x1u << AC_INTENCLR_WIN0_Pos)

+#define AC_INTENCLR_WIN1_Pos        5            /**< \brief (AC_INTENCLR) Window 1 Interrupt Disable */

+#define AC_INTENCLR_WIN1            (0x1u << AC_INTENCLR_WIN1_Pos)

+#define AC_INTENCLR_MASK            0x3Fu        /**< \brief (AC_INTENCLR) MASK Register */

+

+/* -------- AC_INTENSET : (AC Offset: 0x05) (R/W  8) Interrupt Enable Set Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  COMP0:1;          /*!< bit:      0  Comparator 0 Interrupt Enable      */

+    uint8_t  COMP1:1;          /*!< bit:      1  Comparator 1 Interrupt Enable      */

+    uint8_t  COMP2:1;          /*!< bit:      2  Comparator 2 Interrupt Enable      */

+    uint8_t  COMP3:1;          /*!< bit:      3  Comparator 3 Interrupt Enable      */

+    uint8_t  WIN0:1;           /*!< bit:      4  Window 0 Interrupt Enable          */

+    uint8_t  WIN1:1;           /*!< bit:      5  Window 1 Interrupt Enable          */

+    uint8_t  :2;               /*!< bit:  6.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} AC_INTENSET_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define AC_INTENSET_OFFSET          0x05         /**< \brief (AC_INTENSET offset) Interrupt Enable Set Register */

+#define AC_INTENSET_RESETVALUE      0x00         /**< \brief (AC_INTENSET reset_value) Interrupt Enable Set Register */

+

+#define AC_INTENSET_COMP0_Pos       0            /**< \brief (AC_INTENSET) Comparator 0 Interrupt Enable */

+#define AC_INTENSET_COMP0           (0x1u << AC_INTENSET_COMP0_Pos)

+#define AC_INTENSET_COMP1_Pos       1            /**< \brief (AC_INTENSET) Comparator 1 Interrupt Enable */

+#define AC_INTENSET_COMP1           (0x1u << AC_INTENSET_COMP1_Pos)

+#define AC_INTENSET_COMP2_Pos       2            /**< \brief (AC_INTENSET) Comparator 2 Interrupt Enable */

+#define AC_INTENSET_COMP2           (0x1u << AC_INTENSET_COMP2_Pos)

+#define AC_INTENSET_COMP3_Pos       3            /**< \brief (AC_INTENSET) Comparator 3 Interrupt Enable */

+#define AC_INTENSET_COMP3           (0x1u << AC_INTENSET_COMP3_Pos)

+#define AC_INTENSET_WIN0_Pos        4            /**< \brief (AC_INTENSET) Window 0 Interrupt Enable */

+#define AC_INTENSET_WIN0            (0x1u << AC_INTENSET_WIN0_Pos)

+#define AC_INTENSET_WIN1_Pos        5            /**< \brief (AC_INTENSET) Window 1 Interrupt Enable */

+#define AC_INTENSET_WIN1            (0x1u << AC_INTENSET_WIN1_Pos)

+#define AC_INTENSET_MASK            0x3Fu        /**< \brief (AC_INTENSET) MASK Register */

+

+/* -------- AC_INTFLAG : (AC Offset: 0x06) (R/W  8) Interrupt Flag Status and Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  COMP0:1;          /*!< bit:      0  Comparator 0 Interrupt Flag        */

+    uint8_t  COMP1:1;          /*!< bit:      1  Comparator 1 Interrupt Flag        */

+    uint8_t  COMP2:1;          /*!< bit:      2  Comparator 2 Interrupt Flag        */

+    uint8_t  COMP3:1;          /*!< bit:      3  Comparator 3 Interrupt Flag        */

+    uint8_t  WIN0:1;           /*!< bit:      4  Window 0 Interrupt Flag            */

+    uint8_t  WIN1:1;           /*!< bit:      5  Window 1 Interrupt Flag            */

+    uint8_t  :2;               /*!< bit:  6.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} AC_INTFLAG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define AC_INTFLAG_OFFSET           0x06         /**< \brief (AC_INTFLAG offset) Interrupt Flag Status and Clear Register */

+#define AC_INTFLAG_RESETVALUE       0x00         /**< \brief (AC_INTFLAG reset_value) Interrupt Flag Status and Clear Register */

+

+#define AC_INTFLAG_COMP0_Pos        0            /**< \brief (AC_INTFLAG) Comparator 0 Interrupt Flag */

+#define AC_INTFLAG_COMP0            (0x1u << AC_INTFLAG_COMP0_Pos)

+#define AC_INTFLAG_COMP1_Pos        1            /**< \brief (AC_INTFLAG) Comparator 1 Interrupt Flag */

+#define AC_INTFLAG_COMP1            (0x1u << AC_INTFLAG_COMP1_Pos)

+#define AC_INTFLAG_COMP2_Pos        2            /**< \brief (AC_INTFLAG) Comparator 2 Interrupt Flag */

+#define AC_INTFLAG_COMP2            (0x1u << AC_INTFLAG_COMP2_Pos)

+#define AC_INTFLAG_COMP3_Pos        3            /**< \brief (AC_INTFLAG) Comparator 3 Interrupt Flag */

+#define AC_INTFLAG_COMP3            (0x1u << AC_INTFLAG_COMP3_Pos)

+#define AC_INTFLAG_WIN0_Pos         4            /**< \brief (AC_INTFLAG) Window 0 Interrupt Flag */

+#define AC_INTFLAG_WIN0             (0x1u << AC_INTFLAG_WIN0_Pos)

+#define AC_INTFLAG_WIN1_Pos         5            /**< \brief (AC_INTFLAG) Window 1 Interrupt Flag */

+#define AC_INTFLAG_WIN1             (0x1u << AC_INTFLAG_WIN1_Pos)

+#define AC_INTFLAG_MASK             0x3Fu        /**< \brief (AC_INTFLAG) MASK Register */

+

+/* -------- AC_STATUSA : (AC Offset: 0x08) (R/   8) Status A Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  STATE0:1;         /*!< bit:      0  Comparator 0 Current State         */

+    uint8_t  STATE1:1;         /*!< bit:      1  Comparator 1 Current State         */

+    uint8_t  STATE2:1;         /*!< bit:      2  Comparator 2 Current State         */

+    uint8_t  STATE3:1;         /*!< bit:      3  Comparator 3 Current State         */

+    uint8_t  WSTATE0:2;        /*!< bit:  4.. 5  Window 0 Current State             */

+    uint8_t  WSTATE1:2;        /*!< bit:  6.. 7  Window 1 Current State             */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} AC_STATUSA_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define AC_STATUSA_OFFSET           0x08         /**< \brief (AC_STATUSA offset) Status A Register */

+#define AC_STATUSA_RESETVALUE       0x00         /**< \brief (AC_STATUSA reset_value) Status A Register */

+

+#define AC_STATUSA_STATE0_Pos       0            /**< \brief (AC_STATUSA) Comparator 0 Current State */

+#define AC_STATUSA_STATE0           (0x1u << AC_STATUSA_STATE0_Pos)

+#define AC_STATUSA_STATE1_Pos       1            /**< \brief (AC_STATUSA) Comparator 1 Current State */

+#define AC_STATUSA_STATE1           (0x1u << AC_STATUSA_STATE1_Pos)

+#define AC_STATUSA_STATE2_Pos       2            /**< \brief (AC_STATUSA) Comparator 2 Current State */

+#define AC_STATUSA_STATE2           (0x1u << AC_STATUSA_STATE2_Pos)

+#define AC_STATUSA_STATE3_Pos       3            /**< \brief (AC_STATUSA) Comparator 3 Current State */

+#define AC_STATUSA_STATE3           (0x1u << AC_STATUSA_STATE3_Pos)

+#define AC_STATUSA_WSTATE0_Pos      4            /**< \brief (AC_STATUSA) Window 0 Current State */

+#define AC_STATUSA_WSTATE0_Msk      (0x3u << AC_STATUSA_WSTATE0_Pos)

+#define AC_STATUSA_WSTATE0(value)   ((AC_STATUSA_WSTATE0_Msk & ((value) << AC_STATUSA_WSTATE0_Pos)))

+#define   AC_STATUSA_WSTATE0_ABOVE  (0x0u <<  4) /**< \brief (AC_STATUSA)  */

+#define   AC_STATUSA_WSTATE0_INSIDE (0x1u <<  4) /**< \brief (AC_STATUSA)  */

+#define   AC_STATUSA_WSTATE0_BELOW  (0x2u <<  4) /**< \brief (AC_STATUSA)  */

+#define AC_STATUSA_WSTATE1_Pos      6            /**< \brief (AC_STATUSA) Window 1 Current State */

+#define AC_STATUSA_WSTATE1_Msk      (0x3u << AC_STATUSA_WSTATE1_Pos)

+#define AC_STATUSA_WSTATE1(value)   ((AC_STATUSA_WSTATE1_Msk & ((value) << AC_STATUSA_WSTATE1_Pos)))

+#define   AC_STATUSA_WSTATE1_ABOVE  (0x0u <<  6) /**< \brief (AC_STATUSA)  */

+#define   AC_STATUSA_WSTATE1_INSIDE (0x1u <<  6) /**< \brief (AC_STATUSA)  */

+#define   AC_STATUSA_WSTATE1_BELOW  (0x2u <<  6) /**< \brief (AC_STATUSA)  */

+#define AC_STATUSA_MASK             0xFFu        /**< \brief (AC_STATUSA) MASK Register */

+

+/* -------- AC_STATUSB : (AC Offset: 0x09) (R/   8) Status B Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  READY0:1;         /*!< bit:      0  Comparator 0 Ready                 */

+    uint8_t  READY1:1;         /*!< bit:      1  Comparator 1 Ready                 */

+    uint8_t  READY2:1;         /*!< bit:      2  Comparator 2 Ready                 */

+    uint8_t  READY3:1;         /*!< bit:      3  Comparator 3 Ready                 */

+    uint8_t  :3;               /*!< bit:  4.. 6  Reserved                           */

+    uint8_t  SYNCBUSY:1;       /*!< bit:      7  Synchronization Busy               */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} AC_STATUSB_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define AC_STATUSB_OFFSET           0x09         /**< \brief (AC_STATUSB offset) Status B Register */

+#define AC_STATUSB_RESETVALUE       0x00         /**< \brief (AC_STATUSB reset_value) Status B Register */

+

+#define AC_STATUSB_READY0_Pos       0            /**< \brief (AC_STATUSB) Comparator 0 Ready */

+#define AC_STATUSB_READY0           (0x1u << AC_STATUSB_READY0_Pos)

+#define AC_STATUSB_READY1_Pos       1            /**< \brief (AC_STATUSB) Comparator 1 Ready */

+#define AC_STATUSB_READY1           (0x1u << AC_STATUSB_READY1_Pos)

+#define AC_STATUSB_READY2_Pos       2            /**< \brief (AC_STATUSB) Comparator 2 Ready */

+#define AC_STATUSB_READY2           (0x1u << AC_STATUSB_READY2_Pos)

+#define AC_STATUSB_READY3_Pos       3            /**< \brief (AC_STATUSB) Comparator 3 Ready */

+#define AC_STATUSB_READY3           (0x1u << AC_STATUSB_READY3_Pos)

+#define AC_STATUSB_SYNCBUSY_Pos     7            /**< \brief (AC_STATUSB) Synchronization Busy */

+#define AC_STATUSB_SYNCBUSY         (0x1u << AC_STATUSB_SYNCBUSY_Pos)

+#define AC_STATUSB_MASK             0x8Fu        /**< \brief (AC_STATUSB) MASK Register */

+

+/* -------- AC_STATUSC : (AC Offset: 0x0A) (R/   8) Status C Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  STATE0:1;         /*!< bit:      0  Comparator 0 Current State         */

+    uint8_t  STATE1:1;         /*!< bit:      1  Comparator 1 Current State         */

+    uint8_t  STATE2:1;         /*!< bit:      2  Comparator 2 Current State         */

+    uint8_t  STATE3:1;         /*!< bit:      3  Comparator 3 Current State         */

+    uint8_t  WSTATE0:2;        /*!< bit:  4.. 5  Window 0 Current State             */

+    uint8_t  WSTATE1:2;        /*!< bit:  6.. 7  Window 1 Current State             */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} AC_STATUSC_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define AC_STATUSC_OFFSET           0x0A         /**< \brief (AC_STATUSC offset) Status C Register */

+#define AC_STATUSC_RESETVALUE       0x00         /**< \brief (AC_STATUSC reset_value) Status C Register */

+

+#define AC_STATUSC_STATE0_Pos       0            /**< \brief (AC_STATUSC) Comparator 0 Current State */

+#define AC_STATUSC_STATE0           (0x1u << AC_STATUSC_STATE0_Pos)

+#define AC_STATUSC_STATE1_Pos       1            /**< \brief (AC_STATUSC) Comparator 1 Current State */

+#define AC_STATUSC_STATE1           (0x1u << AC_STATUSC_STATE1_Pos)

+#define AC_STATUSC_STATE2_Pos       2            /**< \brief (AC_STATUSC) Comparator 2 Current State */

+#define AC_STATUSC_STATE2           (0x1u << AC_STATUSC_STATE2_Pos)

+#define AC_STATUSC_STATE3_Pos       3            /**< \brief (AC_STATUSC) Comparator 3 Current State */

+#define AC_STATUSC_STATE3           (0x1u << AC_STATUSC_STATE3_Pos)

+#define AC_STATUSC_WSTATE0_Pos      4            /**< \brief (AC_STATUSC) Window 0 Current State */

+#define AC_STATUSC_WSTATE0_Msk      (0x3u << AC_STATUSC_WSTATE0_Pos)

+#define AC_STATUSC_WSTATE0(value)   ((AC_STATUSC_WSTATE0_Msk & ((value) << AC_STATUSC_WSTATE0_Pos)))

+#define   AC_STATUSC_WSTATE0_ABOVE  (0x0u <<  4) /**< \brief (AC_STATUSC)  */

+#define   AC_STATUSC_WSTATE0_INSIDE (0x1u <<  4) /**< \brief (AC_STATUSC)  */

+#define   AC_STATUSC_WSTATE0_BELOW  (0x2u <<  4) /**< \brief (AC_STATUSC)  */

+#define AC_STATUSC_WSTATE1_Pos      6            /**< \brief (AC_STATUSC) Window 1 Current State */

+#define AC_STATUSC_WSTATE1_Msk      (0x3u << AC_STATUSC_WSTATE1_Pos)

+#define AC_STATUSC_WSTATE1(value)   ((AC_STATUSC_WSTATE1_Msk & ((value) << AC_STATUSC_WSTATE1_Pos)))

+#define   AC_STATUSC_WSTATE1_ABOVE  (0x0u <<  6) /**< \brief (AC_STATUSC)  */

+#define   AC_STATUSC_WSTATE1_INSIDE (0x1u <<  6) /**< \brief (AC_STATUSC)  */

+#define   AC_STATUSC_WSTATE1_BELOW  (0x2u <<  6) /**< \brief (AC_STATUSC)  */

+#define AC_STATUSC_MASK             0xFFu        /**< \brief (AC_STATUSC) MASK Register */

+

+/* -------- AC_WINCTRL : (AC Offset: 0x0C) (R/W  8) Window Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  WEN0:1;           /*!< bit:      0  Window 0 Mode Enable               */

+    uint8_t  WINTSEL0:2;       /*!< bit:  1.. 2  Window 0 Interrupt Selection       */

+    uint8_t  :1;               /*!< bit:      3  Reserved                           */

+    uint8_t  WEN1:1;           /*!< bit:      4  Window 1 Mode Enable               */

+    uint8_t  WINTSEL1:2;       /*!< bit:  5.. 6  Window 1 Interrupt Selection       */

+    uint8_t  :1;               /*!< bit:      7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} AC_WINCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define AC_WINCTRL_OFFSET           0x0C         /**< \brief (AC_WINCTRL offset) Window Control Register */

+#define AC_WINCTRL_RESETVALUE       0x00         /**< \brief (AC_WINCTRL reset_value) Window Control Register */

+

+#define AC_WINCTRL_WEN0_Pos         0            /**< \brief (AC_WINCTRL) Window 0 Mode Enable */

+#define AC_WINCTRL_WEN0             (0x1u << AC_WINCTRL_WEN0_Pos)

+#define AC_WINCTRL_WINTSEL0_Pos     1            /**< \brief (AC_WINCTRL) Window 0 Interrupt Selection */

+#define AC_WINCTRL_WINTSEL0_Msk     (0x3u << AC_WINCTRL_WINTSEL0_Pos)

+#define AC_WINCTRL_WINTSEL0(value)  ((AC_WINCTRL_WINTSEL0_Msk & ((value) << AC_WINCTRL_WINTSEL0_Pos)))

+#define   AC_WINCTRL_WINTSEL0_ABOVE (0x0u <<  1) /**< \brief (AC_WINCTRL)  */

+#define   AC_WINCTRL_WINTSEL0_INSIDE (0x1u <<  1) /**< \brief (AC_WINCTRL)  */

+#define   AC_WINCTRL_WINTSEL0_BELOW (0x2u <<  1) /**< \brief (AC_WINCTRL)  */

+#define   AC_WINCTRL_WINTSEL0_OUTSIDE (0x3u <<  1) /**< \brief (AC_WINCTRL)  */

+#define AC_WINCTRL_WEN1_Pos         4            /**< \brief (AC_WINCTRL) Window 1 Mode Enable */

+#define AC_WINCTRL_WEN1             (0x1u << AC_WINCTRL_WEN1_Pos)

+#define AC_WINCTRL_WINTSEL1_Pos     5            /**< \brief (AC_WINCTRL) Window 1 Interrupt Selection */

+#define AC_WINCTRL_WINTSEL1_Msk     (0x3u << AC_WINCTRL_WINTSEL1_Pos)

+#define AC_WINCTRL_WINTSEL1(value)  ((AC_WINCTRL_WINTSEL1_Msk & ((value) << AC_WINCTRL_WINTSEL1_Pos)))

+#define   AC_WINCTRL_WINTSEL1_ABOVE (0x0u <<  5) /**< \brief (AC_WINCTRL)  */

+#define   AC_WINCTRL_WINTSEL1_INSIDE (0x1u <<  5) /**< \brief (AC_WINCTRL)  */

+#define   AC_WINCTRL_WINTSEL1_BELOW (0x2u <<  5) /**< \brief (AC_WINCTRL)  */

+#define   AC_WINCTRL_WINTSEL1_OUTSIDE (0x3u <<  5) /**< \brief (AC_WINCTRL)  */

+#define AC_WINCTRL_MASK             0x77u        /**< \brief (AC_WINCTRL) MASK Register */

+

+/* -------- AC_COMPCTRL : (AC Offset: 0x10) (R/W 32) Comparator Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t ENABLE:1;         /*!< bit:      0  Enable                             */

+    uint32_t SINGLE:1;         /*!< bit:      1  Single-Shot Mode                   */

+    uint32_t SPEED:2;          /*!< bit:  2.. 3  Speed Selection                    */

+    uint32_t :1;               /*!< bit:      4  Reserved                           */

+    uint32_t INTSEL:2;         /*!< bit:  5.. 6  Interrupt Selection                */

+    uint32_t :1;               /*!< bit:      7  Reserved                           */

+    uint32_t MUXNEG:3;         /*!< bit:  8..10  Negative Input Mux Selection       */

+    uint32_t :1;               /*!< bit:     11  Reserved                           */

+    uint32_t MUXPOS:2;         /*!< bit: 12..13  Positive Input Mux Selection       */

+    uint32_t :1;               /*!< bit:     14  Reserved                           */

+    uint32_t SWAP:1;           /*!< bit:     15  Swap Inputs and Invert             */

+    uint32_t OUT:2;            /*!< bit: 16..17  Output Mode                        */

+    uint32_t :1;               /*!< bit:     18  Reserved                           */

+    uint32_t HYST:1;           /*!< bit:     19  Hysteresis Enable                  */

+    uint32_t :4;               /*!< bit: 20..23  Reserved                           */

+    uint32_t FLEN:3;           /*!< bit: 24..26  Filter Length                      */

+    uint32_t :5;               /*!< bit: 27..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} AC_COMPCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define AC_COMPCTRL_OFFSET          0x10         /**< \brief (AC_COMPCTRL offset) Comparator Control Register */

+#define AC_COMPCTRL_RESETVALUE      0x00000000   /**< \brief (AC_COMPCTRL reset_value) Comparator Control Register */

+

+#define AC_COMPCTRL_ENABLE_Pos      0            /**< \brief (AC_COMPCTRL) Enable */

+#define AC_COMPCTRL_ENABLE          (0x1u << AC_COMPCTRL_ENABLE_Pos)

+#define AC_COMPCTRL_SINGLE_Pos      1            /**< \brief (AC_COMPCTRL) Single-Shot Mode */

+#define AC_COMPCTRL_SINGLE          (0x1u << AC_COMPCTRL_SINGLE_Pos)

+#define AC_COMPCTRL_SPEED_Pos       2            /**< \brief (AC_COMPCTRL) Speed Selection */

+#define AC_COMPCTRL_SPEED_Msk       (0x3u << AC_COMPCTRL_SPEED_Pos)

+#define AC_COMPCTRL_SPEED(value)    ((AC_COMPCTRL_SPEED_Msk & ((value) << AC_COMPCTRL_SPEED_Pos)))

+#define   AC_COMPCTRL_SPEED_LOWPOWER (0x0u <<  2) /**< \brief (AC_COMPCTRL)  */

+#define   AC_COMPCTRL_SPEED_FAST    (0x1u <<  2) /**< \brief (AC_COMPCTRL)  */

+#define AC_COMPCTRL_INTSEL_Pos      5            /**< \brief (AC_COMPCTRL) Interrupt Selection */

+#define AC_COMPCTRL_INTSEL_Msk      (0x3u << AC_COMPCTRL_INTSEL_Pos)

+#define AC_COMPCTRL_INTSEL(value)   ((AC_COMPCTRL_INTSEL_Msk & ((value) << AC_COMPCTRL_INTSEL_Pos)))

+#define   AC_COMPCTRL_INTSEL_TOGGLE (0x0u <<  5) /**< \brief (AC_COMPCTRL)  */

+#define   AC_COMPCTRL_INTSEL_RISING (0x1u <<  5) /**< \brief (AC_COMPCTRL)  */

+#define   AC_COMPCTRL_INTSEL_FALLING (0x2u <<  5) /**< \brief (AC_COMPCTRL)  */

+#define   AC_COMPCTRL_INTSEL_EOC    (0x3u <<  5) /**< \brief (AC_COMPCTRL)  */

+#define AC_COMPCTRL_MUXNEG_Pos      8            /**< \brief (AC_COMPCTRL) Negative Input Mux Selection */

+#define AC_COMPCTRL_MUXNEG_Msk      (0x7u << AC_COMPCTRL_MUXNEG_Pos)

+#define AC_COMPCTRL_MUXNEG(value)   ((AC_COMPCTRL_MUXNEG_Msk & ((value) << AC_COMPCTRL_MUXNEG_Pos)))

+#define   AC_COMPCTRL_MUXNEG_PIN0   (0x0u <<  8) /**< \brief (AC_COMPCTRL)  */

+#define   AC_COMPCTRL_MUXNEG_PIN1   (0x1u <<  8) /**< \brief (AC_COMPCTRL)  */

+#define   AC_COMPCTRL_MUXNEG_PIN2   (0x2u <<  8) /**< \brief (AC_COMPCTRL)  */

+#define   AC_COMPCTRL_MUXNEG_PIN3   (0x3u <<  8) /**< \brief (AC_COMPCTRL)  */

+#define   AC_COMPCTRL_MUXNEG_GND    (0x4u <<  8) /**< \brief (AC_COMPCTRL)  */

+#define   AC_COMPCTRL_MUXNEG_VSCALE (0x5u <<  8) /**< \brief (AC_COMPCTRL)  */

+#define   AC_COMPCTRL_MUXNEG_BANDGAP (0x6u <<  8) /**< \brief (AC_COMPCTRL)  */

+#define   AC_COMPCTRL_MUXNEG_DAC    (0x7u <<  8) /**< \brief (AC_COMPCTRL)  */

+#define AC_COMPCTRL_MUXPOS_Pos      12           /**< \brief (AC_COMPCTRL) Positive Input Mux Selection */

+#define AC_COMPCTRL_MUXPOS_Msk      (0x3u << AC_COMPCTRL_MUXPOS_Pos)

+#define AC_COMPCTRL_MUXPOS(value)   ((AC_COMPCTRL_MUXPOS_Msk & ((value) << AC_COMPCTRL_MUXPOS_Pos)))

+#define   AC_COMPCTRL_MUXPOS_PIN0   (0x0u << 12) /**< \brief (AC_COMPCTRL)  */

+#define   AC_COMPCTRL_MUXPOS_PIN1   (0x1u << 12) /**< \brief (AC_COMPCTRL)  */

+#define   AC_COMPCTRL_MUXPOS_PIN2   (0x2u << 12) /**< \brief (AC_COMPCTRL)  */

+#define   AC_COMPCTRL_MUXPOS_PIN3   (0x3u << 12) /**< \brief (AC_COMPCTRL)  */

+#define AC_COMPCTRL_SWAP_Pos        15           /**< \brief (AC_COMPCTRL) Swap Inputs and Invert */

+#define AC_COMPCTRL_SWAP            (0x1u << AC_COMPCTRL_SWAP_Pos)

+#define AC_COMPCTRL_OUT_Pos         16           /**< \brief (AC_COMPCTRL) Output Mode */

+#define AC_COMPCTRL_OUT_Msk         (0x3u << AC_COMPCTRL_OUT_Pos)

+#define AC_COMPCTRL_OUT(value)      ((AC_COMPCTRL_OUT_Msk & ((value) << AC_COMPCTRL_OUT_Pos)))

+#define   AC_COMPCTRL_OUT_OFF       (0x0u << 16) /**< \brief (AC_COMPCTRL)  */

+#define   AC_COMPCTRL_OUT_ASYNC     (0x1u << 16) /**< \brief (AC_COMPCTRL)  */

+#define   AC_COMPCTRL_OUT_SYNC      (0x2u << 16) /**< \brief (AC_COMPCTRL)  */

+#define AC_COMPCTRL_HYST_Pos        19           /**< \brief (AC_COMPCTRL) Hysteresis Enable */

+#define AC_COMPCTRL_HYST            (0x1u << AC_COMPCTRL_HYST_Pos)

+#define AC_COMPCTRL_FLEN_Pos        24           /**< \brief (AC_COMPCTRL) Filter Length */

+#define AC_COMPCTRL_FLEN_Msk        (0x7u << AC_COMPCTRL_FLEN_Pos)

+#define AC_COMPCTRL_FLEN(value)     ((AC_COMPCTRL_FLEN_Msk & ((value) << AC_COMPCTRL_FLEN_Pos)))

+#define   AC_COMPCTRL_FLEN_OFF      (0x0u << 24) /**< \brief (AC_COMPCTRL)  */

+#define   AC_COMPCTRL_FLEN_MAJ3     (0x1u << 24) /**< \brief (AC_COMPCTRL)  */

+#define   AC_COMPCTRL_FLEN_MAJ5     (0x2u << 24) /**< \brief (AC_COMPCTRL)  */

+#define AC_COMPCTRL_MASK            0x070BB76Fu  /**< \brief (AC_COMPCTRL) MASK Register */

+

+/* -------- AC_SCALER : (AC Offset: 0x20) (R/W  8) Scaler Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  VALUE:6;          /*!< bit:  0.. 5  Scaler Value                       */

+    uint8_t  :2;               /*!< bit:  6.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} AC_SCALER_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define AC_SCALER_OFFSET            0x20         /**< \brief (AC_SCALER offset) Scaler Register */

+#define AC_SCALER_RESETVALUE        0x00         /**< \brief (AC_SCALER reset_value) Scaler Register */

+

+#define AC_SCALER_VALUE_Pos         0            /**< \brief (AC_SCALER) Scaler Value */

+#define AC_SCALER_VALUE_Msk         (0x3Fu << AC_SCALER_VALUE_Pos)

+#define AC_SCALER_VALUE(value)      ((AC_SCALER_VALUE_Msk & ((value) << AC_SCALER_VALUE_Pos)))

+#define AC_SCALER_MASK              0x3Fu        /**< \brief (AC_SCALER) MASK Register */

+

+/** \brief AC hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct {

+  __IO AC_CTRLA_Type             CTRLA;       /**< \brief Offset: 0x00 (R/W  8) Control A Register */

+  __O  AC_CTRLB_Type             CTRLB;       /**< \brief Offset: 0x01 ( /W  8) Control B Register */

+  __IO AC_EVCTRL_Type            EVCTRL;      /**< \brief Offset: 0x02 (R/W 16) Event Control Register */

+  __IO AC_INTENCLR_Type          INTENCLR;    /**< \brief Offset: 0x04 (R/W  8) Interrupt Enable Clear Register */

+  __IO AC_INTENSET_Type          INTENSET;    /**< \brief Offset: 0x05 (R/W  8) Interrupt Enable Set Register */

+  __IO AC_INTFLAG_Type           INTFLAG;     /**< \brief Offset: 0x06 (R/W  8) Interrupt Flag Status and Clear Register */

+       RoReg8                    Reserved1[0x1];

+  __I  AC_STATUSA_Type           STATUSA;     /**< \brief Offset: 0x08 (R/   8) Status A Register */

+  __I  AC_STATUSB_Type           STATUSB;     /**< \brief Offset: 0x09 (R/   8) Status B Register */

+  __I  AC_STATUSC_Type           STATUSC;     /**< \brief Offset: 0x0A (R/   8) Status C Register */

+       RoReg8                    Reserved2[0x1];

+  __IO AC_WINCTRL_Type           WINCTRL;     /**< \brief Offset: 0x0C (R/W  8) Window Control Register */

+       RoReg8                    Reserved3[0x3];

+  __IO AC_COMPCTRL_Type          COMPCTRL[2]; /**< \brief Offset: 0x10 (R/W 32) Comparator Control Register [NUM_CMP] */

+       RoReg8                    Reserved4[0x8];

+  __IO AC_SCALER_Type            SCALER[2];   /**< \brief Offset: 0x20 (R/W  8) Scaler Register [NUM_CMP] */

+} Ac;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/*@}*/

+

+#endif /* _SAMD20_AC_COMPONENT_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_adc.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_adc.h
new file mode 100644
index 0000000..84c165f
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_adc.h
@@ -0,0 +1,717 @@
+/**

+ * \file

+ *

+ * \brief Component description for ADC

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_ADC_COMPONENT_

+#define _SAMD20_ADC_COMPONENT_

+

+/* ========================================================================== */

+/**  SOFTWARE API DEFINITION FOR ADC */

+/* ========================================================================== */

+/** \addtogroup SAMD20_ADC Analog Digital Converter */

+/*@{*/

+

+#define REV_ADC                     0x110

+

+/* -------- ADC_CTRLA : (ADC Offset: 0x00) (R/W  8) Control Register A -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  SWRST:1;          /*!< bit:      0  Software Reset                     */

+    uint8_t  ENABLE:1;         /*!< bit:      1  Enable                             */

+    uint8_t  RUNSTDBY:1;       /*!< bit:      2  Run during Standby                 */

+    uint8_t  :5;               /*!< bit:  3.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} ADC_CTRLA_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_CTRLA_OFFSET            0x00         /**< \brief (ADC_CTRLA offset) Control Register A */

+#define ADC_CTRLA_RESETVALUE        0x00         /**< \brief (ADC_CTRLA reset_value) Control Register A */

+

+#define ADC_CTRLA_SWRST_Pos         0            /**< \brief (ADC_CTRLA) Software Reset */

+#define ADC_CTRLA_SWRST             (0x1u << ADC_CTRLA_SWRST_Pos)

+#define ADC_CTRLA_ENABLE_Pos        1            /**< \brief (ADC_CTRLA) Enable */

+#define ADC_CTRLA_ENABLE            (0x1u << ADC_CTRLA_ENABLE_Pos)

+#define ADC_CTRLA_RUNSTDBY_Pos      2            /**< \brief (ADC_CTRLA) Run during Standby */

+#define ADC_CTRLA_RUNSTDBY          (0x1u << ADC_CTRLA_RUNSTDBY_Pos)

+#define ADC_CTRLA_MASK              0x07u        /**< \brief (ADC_CTRLA) MASK Register */

+

+/* -------- ADC_REFCTRL : (ADC Offset: 0x01) (R/W  8) Reference Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  REFSEL:4;         /*!< bit:  0.. 3  Reference Selection                */

+    uint8_t  :3;               /*!< bit:  4.. 6  Reserved                           */

+    uint8_t  REFCOMP:1;        /*!< bit:      7  Reference Buffer Offset Compensation Enable */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} ADC_REFCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_REFCTRL_OFFSET          0x01         /**< \brief (ADC_REFCTRL offset) Reference Control Register */

+#define ADC_REFCTRL_RESETVALUE      0x00         /**< \brief (ADC_REFCTRL reset_value) Reference Control Register */

+

+#define ADC_REFCTRL_REFSEL_Pos      0            /**< \brief (ADC_REFCTRL) Reference Selection */

+#define ADC_REFCTRL_REFSEL_Msk      (0xFu << ADC_REFCTRL_REFSEL_Pos)

+#define ADC_REFCTRL_REFSEL(value)   ((ADC_REFCTRL_REFSEL_Msk & ((value) << ADC_REFCTRL_REFSEL_Pos)))

+#define   ADC_REFCTRL_REFSEL_INT1V  (0x0u <<  0) /**< \brief (ADC_REFCTRL)  */

+#define   ADC_REFCTRL_REFSEL_INTVCC0 (0x1u <<  0) /**< \brief (ADC_REFCTRL)  */

+#define   ADC_REFCTRL_REFSEL_INTVCC1 (0x2u <<  0) /**< \brief (ADC_REFCTRL)  */

+#define   ADC_REFCTRL_REFSEL_AREFA  (0x3u <<  0) /**< \brief (ADC_REFCTRL)  */

+#define   ADC_REFCTRL_REFSEL_AREFB  (0x4u <<  0) /**< \brief (ADC_REFCTRL)  */

+#define ADC_REFCTRL_REFCOMP_Pos     7            /**< \brief (ADC_REFCTRL) Reference Buffer Offset Compensation Enable */

+#define ADC_REFCTRL_REFCOMP         (0x1u << ADC_REFCTRL_REFCOMP_Pos)

+#define ADC_REFCTRL_MASK            0x8Fu        /**< \brief (ADC_REFCTRL) MASK Register */

+

+/* -------- ADC_AVGCTRL : (ADC Offset: 0x02) (R/W  8) Average Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  SAMPLENUM:4;      /*!< bit:  0.. 3  Number of Samples to be Collected  */

+    uint8_t  ADJRES:3;         /*!< bit:  4.. 6  Adjusting Result / Division Coefficient */

+    uint8_t  :1;               /*!< bit:      7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} ADC_AVGCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_AVGCTRL_OFFSET          0x02         /**< \brief (ADC_AVGCTRL offset) Average Control Register */

+#define ADC_AVGCTRL_RESETVALUE      0x00         /**< \brief (ADC_AVGCTRL reset_value) Average Control Register */

+

+#define ADC_AVGCTRL_SAMPLENUM_Pos   0            /**< \brief (ADC_AVGCTRL) Number of Samples to be Collected */

+#define ADC_AVGCTRL_SAMPLENUM_Msk   (0xFu << ADC_AVGCTRL_SAMPLENUM_Pos)

+#define ADC_AVGCTRL_SAMPLENUM(value) ((ADC_AVGCTRL_SAMPLENUM_Msk & ((value) << ADC_AVGCTRL_SAMPLENUM_Pos)))

+#define   ADC_AVGCTRL_SAMPLENUM_1   (0x0u <<  0) /**< \brief (ADC_AVGCTRL)  */

+#define   ADC_AVGCTRL_SAMPLENUM_2   (0x1u <<  0) /**< \brief (ADC_AVGCTRL)  */

+#define   ADC_AVGCTRL_SAMPLENUM_4   (0x2u <<  0) /**< \brief (ADC_AVGCTRL)  */

+#define   ADC_AVGCTRL_SAMPLENUM_8   (0x3u <<  0) /**< \brief (ADC_AVGCTRL)  */

+#define   ADC_AVGCTRL_SAMPLENUM_16  (0x4u <<  0) /**< \brief (ADC_AVGCTRL)  */

+#define   ADC_AVGCTRL_SAMPLENUM_32  (0x5u <<  0) /**< \brief (ADC_AVGCTRL)  */

+#define   ADC_AVGCTRL_SAMPLENUM_64  (0x6u <<  0) /**< \brief (ADC_AVGCTRL)  */

+#define   ADC_AVGCTRL_SAMPLENUM_128 (0x7u <<  0) /**< \brief (ADC_AVGCTRL)  */

+#define   ADC_AVGCTRL_SAMPLENUM_256 (0x8u <<  0) /**< \brief (ADC_AVGCTRL)  */

+#define   ADC_AVGCTRL_SAMPLENUM_512 (0x9u <<  0) /**< \brief (ADC_AVGCTRL)  */

+#define   ADC_AVGCTRL_SAMPLENUM_1024 (0xAu <<  0) /**< \brief (ADC_AVGCTRL)  */

+#define ADC_AVGCTRL_ADJRES_Pos      4            /**< \brief (ADC_AVGCTRL) Adjusting Result / Division Coefficient */

+#define ADC_AVGCTRL_ADJRES_Msk      (0x7u << ADC_AVGCTRL_ADJRES_Pos)

+#define ADC_AVGCTRL_ADJRES(value)   ((ADC_AVGCTRL_ADJRES_Msk & ((value) << ADC_AVGCTRL_ADJRES_Pos)))

+#define ADC_AVGCTRL_MASK            0x7Fu        /**< \brief (ADC_AVGCTRL) MASK Register */

+

+/* -------- ADC_SAMPCTRL : (ADC Offset: 0x03) (R/W  8) Sample Time Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  SAMPLEN:6;        /*!< bit:  0.. 5  Sampling Time Length               */

+    uint8_t  :2;               /*!< bit:  6.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} ADC_SAMPCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_SAMPCTRL_OFFSET         0x03         /**< \brief (ADC_SAMPCTRL offset) Sample Time Control Register */

+#define ADC_SAMPCTRL_RESETVALUE     0x00         /**< \brief (ADC_SAMPCTRL reset_value) Sample Time Control Register */

+

+#define ADC_SAMPCTRL_SAMPLEN_Pos    0            /**< \brief (ADC_SAMPCTRL) Sampling Time Length */

+#define ADC_SAMPCTRL_SAMPLEN_Msk    (0x3Fu << ADC_SAMPCTRL_SAMPLEN_Pos)

+#define ADC_SAMPCTRL_SAMPLEN(value) ((ADC_SAMPCTRL_SAMPLEN_Msk & ((value) << ADC_SAMPCTRL_SAMPLEN_Pos)))

+#define ADC_SAMPCTRL_MASK           0x3Fu        /**< \brief (ADC_SAMPCTRL) MASK Register */

+

+/* -------- ADC_CTRLB : (ADC Offset: 0x04) (R/W 16) Control Register B -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t DIFFMODE:1;       /*!< bit:      0  Differential Mode                  */

+    uint16_t LEFTADJ:1;        /*!< bit:      1  Left-Adjusted Result               */

+    uint16_t FREERUN:1;        /*!< bit:      2  Free Running Mode                  */

+    uint16_t CORREN:1;         /*!< bit:      3  Digital Correction Logic Enable    */

+    uint16_t RESSEL:2;         /*!< bit:  4.. 5  Conversion Result Resolution       */

+    uint16_t :2;               /*!< bit:  6.. 7  Reserved                           */

+    uint16_t PRESCALER:3;      /*!< bit:  8..10  Prescaler Configuration            */

+    uint16_t :5;               /*!< bit: 11..15  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} ADC_CTRLB_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_CTRLB_OFFSET            0x04         /**< \brief (ADC_CTRLB offset) Control Register B */

+#define ADC_CTRLB_RESETVALUE        0x0000       /**< \brief (ADC_CTRLB reset_value) Control Register B */

+

+#define ADC_CTRLB_DIFFMODE_Pos      0            /**< \brief (ADC_CTRLB) Differential Mode */

+#define ADC_CTRLB_DIFFMODE          (0x1u << ADC_CTRLB_DIFFMODE_Pos)

+#define ADC_CTRLB_LEFTADJ_Pos       1            /**< \brief (ADC_CTRLB) Left-Adjusted Result */

+#define ADC_CTRLB_LEFTADJ           (0x1u << ADC_CTRLB_LEFTADJ_Pos)

+#define ADC_CTRLB_FREERUN_Pos       2            /**< \brief (ADC_CTRLB) Free Running Mode */

+#define ADC_CTRLB_FREERUN           (0x1u << ADC_CTRLB_FREERUN_Pos)

+#define ADC_CTRLB_CORREN_Pos        3            /**< \brief (ADC_CTRLB) Digital Correction Logic Enable */

+#define ADC_CTRLB_CORREN            (0x1u << ADC_CTRLB_CORREN_Pos)

+#define ADC_CTRLB_RESSEL_Pos        4            /**< \brief (ADC_CTRLB) Conversion Result Resolution */

+#define ADC_CTRLB_RESSEL_Msk        (0x3u << ADC_CTRLB_RESSEL_Pos)

+#define ADC_CTRLB_RESSEL(value)     ((ADC_CTRLB_RESSEL_Msk & ((value) << ADC_CTRLB_RESSEL_Pos)))

+#define   ADC_CTRLB_RESSEL_12BIT    (0x0u <<  4) /**< \brief (ADC_CTRLB)  */

+#define   ADC_CTRLB_RESSEL_16BIT    (0x1u <<  4) /**< \brief (ADC_CTRLB)  */

+#define   ADC_CTRLB_RESSEL_10BIT    (0x2u <<  4) /**< \brief (ADC_CTRLB)  */

+#define   ADC_CTRLB_RESSEL_8BIT     (0x3u <<  4) /**< \brief (ADC_CTRLB)  */

+#define ADC_CTRLB_PRESCALER_Pos     8            /**< \brief (ADC_CTRLB) Prescaler Configuration */

+#define ADC_CTRLB_PRESCALER_Msk     (0x7u << ADC_CTRLB_PRESCALER_Pos)

+#define ADC_CTRLB_PRESCALER(value)  ((ADC_CTRLB_PRESCALER_Msk & ((value) << ADC_CTRLB_PRESCALER_Pos)))

+#define   ADC_CTRLB_PRESCALER_DIV4  (0x0u <<  8) /**< \brief (ADC_CTRLB)  */

+#define   ADC_CTRLB_PRESCALER_DIV8  (0x1u <<  8) /**< \brief (ADC_CTRLB)  */

+#define   ADC_CTRLB_PRESCALER_DIV16 (0x2u <<  8) /**< \brief (ADC_CTRLB)  */

+#define   ADC_CTRLB_PRESCALER_DIV32 (0x3u <<  8) /**< \brief (ADC_CTRLB)  */

+#define   ADC_CTRLB_PRESCALER_DIV64 (0x4u <<  8) /**< \brief (ADC_CTRLB)  */

+#define   ADC_CTRLB_PRESCALER_DIV128 (0x5u <<  8) /**< \brief (ADC_CTRLB)  */

+#define   ADC_CTRLB_PRESCALER_DIV256 (0x6u <<  8) /**< \brief (ADC_CTRLB)  */

+#define   ADC_CTRLB_PRESCALER_DIV512 (0x7u <<  8) /**< \brief (ADC_CTRLB)  */

+#define ADC_CTRLB_MASK              0x073Fu      /**< \brief (ADC_CTRLB) MASK Register */

+

+/* -------- ADC_WINCTRL : (ADC Offset: 0x08) (R/W  8) Window Monitor Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  WINMODE:3;        /*!< bit:  0.. 2  Window Monitor Mode                */

+    uint8_t  :5;               /*!< bit:  3.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} ADC_WINCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_WINCTRL_OFFSET          0x08         /**< \brief (ADC_WINCTRL offset) Window Monitor Control Register */

+#define ADC_WINCTRL_RESETVALUE      0x00         /**< \brief (ADC_WINCTRL reset_value) Window Monitor Control Register */

+

+#define ADC_WINCTRL_WINMODE_Pos     0            /**< \brief (ADC_WINCTRL) Window Monitor Mode */

+#define ADC_WINCTRL_WINMODE_Msk     (0x7u << ADC_WINCTRL_WINMODE_Pos)

+#define ADC_WINCTRL_WINMODE(value)  ((ADC_WINCTRL_WINMODE_Msk & ((value) << ADC_WINCTRL_WINMODE_Pos)))

+#define   ADC_WINCTRL_WINMODE_DISABLE (0x0u <<  0) /**< \brief (ADC_WINCTRL)  */

+#define   ADC_WINCTRL_WINMODE_MODE1 (0x1u <<  0) /**< \brief (ADC_WINCTRL)  */

+#define   ADC_WINCTRL_WINMODE_MODE2 (0x2u <<  0) /**< \brief (ADC_WINCTRL)  */

+#define   ADC_WINCTRL_WINMODE_MODE3 (0x3u <<  0) /**< \brief (ADC_WINCTRL)  */

+#define   ADC_WINCTRL_WINMODE_MODE4 (0x4u <<  0) /**< \brief (ADC_WINCTRL)  */

+#define ADC_WINCTRL_MASK            0x07u        /**< \brief (ADC_WINCTRL) MASK Register */

+

+/* -------- ADC_SWTRIG : (ADC Offset: 0x0C) (R/W  8) Control Register B -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  FLUSH:1;          /*!< bit:      0  ADC Flush                          */

+    uint8_t  START:1;          /*!< bit:      1  Start ADC Conversion               */

+    uint8_t  :6;               /*!< bit:  2.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} ADC_SWTRIG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_SWTRIG_OFFSET           0x0C         /**< \brief (ADC_SWTRIG offset) Control Register B */

+#define ADC_SWTRIG_RESETVALUE       0x00         /**< \brief (ADC_SWTRIG reset_value) Control Register B */

+

+#define ADC_SWTRIG_FLUSH_Pos        0            /**< \brief (ADC_SWTRIG) ADC Flush */

+#define ADC_SWTRIG_FLUSH            (0x1u << ADC_SWTRIG_FLUSH_Pos)

+#define ADC_SWTRIG_START_Pos        1            /**< \brief (ADC_SWTRIG) Start ADC Conversion */

+#define ADC_SWTRIG_START            (0x1u << ADC_SWTRIG_START_Pos)

+#define ADC_SWTRIG_MASK             0x03u        /**< \brief (ADC_SWTRIG) MASK Register */

+

+/* -------- ADC_INPUTCTRL : (ADC Offset: 0x10) (R/W 32) Input Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t MUXPOS:5;         /*!< bit:  0.. 4  Positive Mux Input Selection       */

+    uint32_t :3;               /*!< bit:  5.. 7  Reserved                           */

+    uint32_t MUXNEG:5;         /*!< bit:  8..12  Negative Mux Input Selection       */

+    uint32_t :3;               /*!< bit: 13..15  Reserved                           */

+    uint32_t INPUTSCAN:4;      /*!< bit: 16..19  Number of Input Channels Included in Scan */

+    uint32_t INPUTOFFSET:4;    /*!< bit: 20..23  Positive Mux Setting Offset        */

+    uint32_t GAIN:4;           /*!< bit: 24..27  Gain Value                         */

+    uint32_t :4;               /*!< bit: 28..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} ADC_INPUTCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_INPUTCTRL_OFFSET        0x10         /**< \brief (ADC_INPUTCTRL offset) Input Control Register */

+#define ADC_INPUTCTRL_RESETVALUE    0x00000000   /**< \brief (ADC_INPUTCTRL reset_value) Input Control Register */

+

+#define ADC_INPUTCTRL_MUXPOS_Pos    0            /**< \brief (ADC_INPUTCTRL) Positive Mux Input Selection */

+#define ADC_INPUTCTRL_MUXPOS_Msk    (0x1Fu << ADC_INPUTCTRL_MUXPOS_Pos)

+#define ADC_INPUTCTRL_MUXPOS(value) ((ADC_INPUTCTRL_MUXPOS_Msk & ((value) << ADC_INPUTCTRL_MUXPOS_Pos)))

+#define   ADC_INPUTCTRL_MUXPOS_PIN0 (0x0u <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN1 (0x1u <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN2 (0x2u <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN3 (0x3u <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN4 (0x4u <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN5 (0x5u <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN6 (0x6u <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN7 (0x7u <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN8 (0x8u <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN9 (0x9u <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN10 (0xAu <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN11 (0xBu <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN12 (0xCu <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN13 (0xDu <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN14 (0xEu <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN15 (0xFu <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN16 (0x10u <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN17 (0x11u <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN18 (0x12u <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN19 (0x13u <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN20 (0x14u <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN21 (0x15u <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN22 (0x16u <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_PIN23 (0x17u <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_TEMP (0x18u <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_BANDGAP (0x19u <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_SCALEDCOREVCC (0x1Au <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_SCALEDIOVCC (0x1Bu <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXPOS_DAC  (0x1Cu <<  0) /**< \brief (ADC_INPUTCTRL)  */

+#define ADC_INPUTCTRL_MUXNEG_Pos    8            /**< \brief (ADC_INPUTCTRL) Negative Mux Input Selection */

+#define ADC_INPUTCTRL_MUXNEG_Msk    (0x1Fu << ADC_INPUTCTRL_MUXNEG_Pos)

+#define ADC_INPUTCTRL_MUXNEG(value) ((ADC_INPUTCTRL_MUXNEG_Msk & ((value) << ADC_INPUTCTRL_MUXNEG_Pos)))

+#define   ADC_INPUTCTRL_MUXNEG_PIN0 (0x0u <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN1 (0x1u <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN2 (0x2u <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN3 (0x3u <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN4 (0x4u <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN5 (0x5u <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN6 (0x6u <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN7 (0x7u <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN8 (0x8u <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN9 (0x9u <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN10 (0xAu <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN11 (0xBu <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN12 (0xCu <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN13 (0xDu <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN14 (0xEu <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN15 (0xFu <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN16 (0x10u <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN17 (0x11u <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN18 (0x12u <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN19 (0x13u <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN20 (0x14u <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN21 (0x15u <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN22 (0x16u <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_PIN23 (0x17u <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_GND  (0x18u <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_MUXNEG_IOGND (0x19u <<  8) /**< \brief (ADC_INPUTCTRL)  */

+#define ADC_INPUTCTRL_INPUTSCAN_Pos 16           /**< \brief (ADC_INPUTCTRL) Number of Input Channels Included in Scan */

+#define ADC_INPUTCTRL_INPUTSCAN_Msk (0xFu << ADC_INPUTCTRL_INPUTSCAN_Pos)

+#define ADC_INPUTCTRL_INPUTSCAN(value) ((ADC_INPUTCTRL_INPUTSCAN_Msk & ((value) << ADC_INPUTCTRL_INPUTSCAN_Pos)))

+#define ADC_INPUTCTRL_INPUTOFFSET_Pos 20           /**< \brief (ADC_INPUTCTRL) Positive Mux Setting Offset */

+#define ADC_INPUTCTRL_INPUTOFFSET_Msk (0xFu << ADC_INPUTCTRL_INPUTOFFSET_Pos)

+#define ADC_INPUTCTRL_INPUTOFFSET(value) ((ADC_INPUTCTRL_INPUTOFFSET_Msk & ((value) << ADC_INPUTCTRL_INPUTOFFSET_Pos)))

+#define ADC_INPUTCTRL_GAIN_Pos      24           /**< \brief (ADC_INPUTCTRL) Gain Value */

+#define ADC_INPUTCTRL_GAIN_Msk      (0xFu << ADC_INPUTCTRL_GAIN_Pos)

+#define ADC_INPUTCTRL_GAIN(value)   ((ADC_INPUTCTRL_GAIN_Msk & ((value) << ADC_INPUTCTRL_GAIN_Pos)))

+#define   ADC_INPUTCTRL_GAIN_1X     (0x0u << 24) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_GAIN_2X     (0x1u << 24) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_GAIN_4X     (0x2u << 24) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_GAIN_8X     (0x3u << 24) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_GAIN_16X    (0x4u << 24) /**< \brief (ADC_INPUTCTRL)  */

+#define   ADC_INPUTCTRL_GAIN_DIV2   (0xFu << 24) /**< \brief (ADC_INPUTCTRL)  */

+#define ADC_INPUTCTRL_MASK          0x0FFF1F1Fu  /**< \brief (ADC_INPUTCTRL) MASK Register */

+

+/* -------- ADC_EVCTRL : (ADC Offset: 0x14) (R/W  8) Event Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  STARTEI:1;        /*!< bit:      0  Start Conversion Event In          */

+    uint8_t  SYNCEI:1;         /*!< bit:      1  Sync Event In                      */

+    uint8_t  :2;               /*!< bit:  2.. 3  Reserved                           */

+    uint8_t  RESRDYEO:1;       /*!< bit:      4  Result Ready Event Out             */

+    uint8_t  WINMONEO:1;       /*!< bit:      5  Window Monitor Event Out           */

+    uint8_t  :2;               /*!< bit:  6.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} ADC_EVCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_EVCTRL_OFFSET           0x14         /**< \brief (ADC_EVCTRL offset) Event Control Register */

+#define ADC_EVCTRL_RESETVALUE       0x00         /**< \brief (ADC_EVCTRL reset_value) Event Control Register */

+

+#define ADC_EVCTRL_STARTEI_Pos      0            /**< \brief (ADC_EVCTRL) Start Conversion Event In */

+#define ADC_EVCTRL_STARTEI          (0x1u << ADC_EVCTRL_STARTEI_Pos)

+#define ADC_EVCTRL_SYNCEI_Pos       1            /**< \brief (ADC_EVCTRL) Sync Event In */

+#define ADC_EVCTRL_SYNCEI           (0x1u << ADC_EVCTRL_SYNCEI_Pos)

+#define ADC_EVCTRL_RESRDYEO_Pos     4            /**< \brief (ADC_EVCTRL) Result Ready Event Out */

+#define ADC_EVCTRL_RESRDYEO         (0x1u << ADC_EVCTRL_RESRDYEO_Pos)

+#define ADC_EVCTRL_WINMONEO_Pos     5            /**< \brief (ADC_EVCTRL) Window Monitor Event Out */

+#define ADC_EVCTRL_WINMONEO         (0x1u << ADC_EVCTRL_WINMONEO_Pos)

+#define ADC_EVCTRL_MASK             0x33u        /**< \brief (ADC_EVCTRL) MASK Register */

+

+/* -------- ADC_INTENCLR : (ADC Offset: 0x16) (R/W  8) Interrupt Enable Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  RESRDY:1;         /*!< bit:      0  Result Ready Interrupt Disable     */

+    uint8_t  OVERRUN:1;        /*!< bit:      1  Overrun Interrupt Disable          */

+    uint8_t  WINMON:1;         /*!< bit:      2  Window Monitor Interrupt Disable   */

+    uint8_t  SYNCRDY:1;        /*!< bit:      3  Synchronisation Ready Interrupt Disable */

+    uint8_t  :4;               /*!< bit:  4.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} ADC_INTENCLR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_INTENCLR_OFFSET         0x16         /**< \brief (ADC_INTENCLR offset) Interrupt Enable Clear Register */

+#define ADC_INTENCLR_RESETVALUE     0x00         /**< \brief (ADC_INTENCLR reset_value) Interrupt Enable Clear Register */

+

+#define ADC_INTENCLR_RESRDY_Pos     0            /**< \brief (ADC_INTENCLR) Result Ready Interrupt Disable */

+#define ADC_INTENCLR_RESRDY         (0x1u << ADC_INTENCLR_RESRDY_Pos)

+#define ADC_INTENCLR_OVERRUN_Pos    1            /**< \brief (ADC_INTENCLR) Overrun Interrupt Disable */

+#define ADC_INTENCLR_OVERRUN        (0x1u << ADC_INTENCLR_OVERRUN_Pos)

+#define ADC_INTENCLR_WINMON_Pos     2            /**< \brief (ADC_INTENCLR) Window Monitor Interrupt Disable */

+#define ADC_INTENCLR_WINMON         (0x1u << ADC_INTENCLR_WINMON_Pos)

+#define ADC_INTENCLR_SYNCRDY_Pos    3            /**< \brief (ADC_INTENCLR) Synchronisation Ready Interrupt Disable */

+#define ADC_INTENCLR_SYNCRDY        (0x1u << ADC_INTENCLR_SYNCRDY_Pos)

+#define ADC_INTENCLR_MASK           0x0Fu        /**< \brief (ADC_INTENCLR) MASK Register */

+

+/* -------- ADC_INTENSET : (ADC Offset: 0x17) (R/W  8) Interrupt Enable Set Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  RESRDY:1;         /*!< bit:      0  Result Ready Interrupt Enable      */

+    uint8_t  OVERRUN:1;        /*!< bit:      1  Overrun Interrupt Enable           */

+    uint8_t  WINMON:1;         /*!< bit:      2  Window Monitor Interrupt Enable    */

+    uint8_t  SYNCRDY:1;        /*!< bit:      3  Synchronisation Ready Interrupt Enable */

+    uint8_t  :4;               /*!< bit:  4.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} ADC_INTENSET_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_INTENSET_OFFSET         0x17         /**< \brief (ADC_INTENSET offset) Interrupt Enable Set Register */

+#define ADC_INTENSET_RESETVALUE     0x00         /**< \brief (ADC_INTENSET reset_value) Interrupt Enable Set Register */

+

+#define ADC_INTENSET_RESRDY_Pos     0            /**< \brief (ADC_INTENSET) Result Ready Interrupt Enable */

+#define ADC_INTENSET_RESRDY         (0x1u << ADC_INTENSET_RESRDY_Pos)

+#define ADC_INTENSET_OVERRUN_Pos    1            /**< \brief (ADC_INTENSET) Overrun Interrupt Enable */

+#define ADC_INTENSET_OVERRUN        (0x1u << ADC_INTENSET_OVERRUN_Pos)

+#define ADC_INTENSET_WINMON_Pos     2            /**< \brief (ADC_INTENSET) Window Monitor Interrupt Enable */

+#define ADC_INTENSET_WINMON         (0x1u << ADC_INTENSET_WINMON_Pos)

+#define ADC_INTENSET_SYNCRDY_Pos    3            /**< \brief (ADC_INTENSET) Synchronisation Ready Interrupt Enable */

+#define ADC_INTENSET_SYNCRDY        (0x1u << ADC_INTENSET_SYNCRDY_Pos)

+#define ADC_INTENSET_MASK           0x0Fu        /**< \brief (ADC_INTENSET) MASK Register */

+

+/* -------- ADC_INTFLAG : (ADC Offset: 0x18) (R/W  8) Interrupt Flag Status and Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  RESRDY:1;         /*!< bit:      0  Result Ready Interrupt Flag        */

+    uint8_t  OVERRUN:1;        /*!< bit:      1  Overrun Interrupt Flag             */

+    uint8_t  WINMON:1;         /*!< bit:      2  Window Monitor Interrupt Flag      */

+    uint8_t  SYNCRDY:1;        /*!< bit:      3  Synchronisation Ready Interrupt Flag */

+    uint8_t  :4;               /*!< bit:  4.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} ADC_INTFLAG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_INTFLAG_OFFSET          0x18         /**< \brief (ADC_INTFLAG offset) Interrupt Flag Status and Clear Register */

+#define ADC_INTFLAG_RESETVALUE      0x00         /**< \brief (ADC_INTFLAG reset_value) Interrupt Flag Status and Clear Register */

+

+#define ADC_INTFLAG_RESRDY_Pos      0            /**< \brief (ADC_INTFLAG) Result Ready Interrupt Flag */

+#define ADC_INTFLAG_RESRDY          (0x1u << ADC_INTFLAG_RESRDY_Pos)

+#define ADC_INTFLAG_OVERRUN_Pos     1            /**< \brief (ADC_INTFLAG) Overrun Interrupt Flag */

+#define ADC_INTFLAG_OVERRUN         (0x1u << ADC_INTFLAG_OVERRUN_Pos)

+#define ADC_INTFLAG_WINMON_Pos      2            /**< \brief (ADC_INTFLAG) Window Monitor Interrupt Flag */

+#define ADC_INTFLAG_WINMON          (0x1u << ADC_INTFLAG_WINMON_Pos)

+#define ADC_INTFLAG_SYNCRDY_Pos     3            /**< \brief (ADC_INTFLAG) Synchronisation Ready Interrupt Flag */

+#define ADC_INTFLAG_SYNCRDY         (0x1u << ADC_INTFLAG_SYNCRDY_Pos)

+#define ADC_INTFLAG_MASK            0x0Fu        /**< \brief (ADC_INTFLAG) MASK Register */

+

+/* -------- ADC_STATUS : (ADC Offset: 0x19) (R/   8) Status Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  :7;               /*!< bit:  0.. 6  Reserved                           */

+    uint8_t  SYNCBUSY:1;       /*!< bit:      7  Synchronisation Busy Status        */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} ADC_STATUS_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_STATUS_OFFSET           0x19         /**< \brief (ADC_STATUS offset) Status Register */

+#define ADC_STATUS_RESETVALUE       0x00         /**< \brief (ADC_STATUS reset_value) Status Register */

+

+#define ADC_STATUS_SYNCBUSY_Pos     7            /**< \brief (ADC_STATUS) Synchronisation Busy Status */

+#define ADC_STATUS_SYNCBUSY         (0x1u << ADC_STATUS_SYNCBUSY_Pos)

+#define ADC_STATUS_MASK             0x80u        /**< \brief (ADC_STATUS) MASK Register */

+

+/* -------- ADC_RESULT : (ADC Offset: 0x1A) (R/  16) Result Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t RESULT:16;        /*!< bit:  0..15  Result Value                       */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} ADC_RESULT_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_RESULT_OFFSET           0x1A         /**< \brief (ADC_RESULT offset) Result Register */

+#define ADC_RESULT_RESETVALUE       0x0000       /**< \brief (ADC_RESULT reset_value) Result Register */

+

+#define ADC_RESULT_RESULT_Pos       0            /**< \brief (ADC_RESULT) Result Value */

+#define ADC_RESULT_RESULT_Msk       (0xFFFFu << ADC_RESULT_RESULT_Pos)

+#define ADC_RESULT_RESULT(value)    ((ADC_RESULT_RESULT_Msk & ((value) << ADC_RESULT_RESULT_Pos)))

+#define ADC_RESULT_MASK             0xFFFFu      /**< \brief (ADC_RESULT) MASK Register */

+

+/* -------- ADC_WINLT : (ADC Offset: 0x1C) (R/W 16) Window Monitor Lower Threshold Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t WINLT:16;         /*!< bit:  0..15  Window Lower Threshold             */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} ADC_WINLT_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_WINLT_OFFSET            0x1C         /**< \brief (ADC_WINLT offset) Window Monitor Lower Threshold Register */

+#define ADC_WINLT_RESETVALUE        0x0000       /**< \brief (ADC_WINLT reset_value) Window Monitor Lower Threshold Register */

+

+#define ADC_WINLT_WINLT_Pos         0            /**< \brief (ADC_WINLT) Window Lower Threshold */

+#define ADC_WINLT_WINLT_Msk         (0xFFFFu << ADC_WINLT_WINLT_Pos)

+#define ADC_WINLT_WINLT(value)      ((ADC_WINLT_WINLT_Msk & ((value) << ADC_WINLT_WINLT_Pos)))

+#define ADC_WINLT_MASK              0xFFFFu      /**< \brief (ADC_WINLT) MASK Register */

+

+/* -------- ADC_WINUT : (ADC Offset: 0x20) (R/W 16) Window Monitor Upper Threshold Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t WINUT:16;         /*!< bit:  0..15  Window Upper Threshold             */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} ADC_WINUT_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_WINUT_OFFSET            0x20         /**< \brief (ADC_WINUT offset) Window Monitor Upper Threshold Register */

+#define ADC_WINUT_RESETVALUE        0x0000       /**< \brief (ADC_WINUT reset_value) Window Monitor Upper Threshold Register */

+

+#define ADC_WINUT_WINUT_Pos         0            /**< \brief (ADC_WINUT) Window Upper Threshold */

+#define ADC_WINUT_WINUT_Msk         (0xFFFFu << ADC_WINUT_WINUT_Pos)

+#define ADC_WINUT_WINUT(value)      ((ADC_WINUT_WINUT_Msk & ((value) << ADC_WINUT_WINUT_Pos)))

+#define ADC_WINUT_MASK              0xFFFFu      /**< \brief (ADC_WINUT) MASK Register */

+

+/* -------- ADC_GAINCORR : (ADC Offset: 0x24) (R/W 16) Gain Correction Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t GAINCORR:12;      /*!< bit:  0..11  Gain Correction Value              */

+    uint16_t :4;               /*!< bit: 12..15  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} ADC_GAINCORR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_GAINCORR_OFFSET         0x24         /**< \brief (ADC_GAINCORR offset) Gain Correction Register */

+#define ADC_GAINCORR_RESETVALUE     0x0000       /**< \brief (ADC_GAINCORR reset_value) Gain Correction Register */

+

+#define ADC_GAINCORR_GAINCORR_Pos   0            /**< \brief (ADC_GAINCORR) Gain Correction Value */

+#define ADC_GAINCORR_GAINCORR_Msk   (0xFFFu << ADC_GAINCORR_GAINCORR_Pos)

+#define ADC_GAINCORR_GAINCORR(value) ((ADC_GAINCORR_GAINCORR_Msk & ((value) << ADC_GAINCORR_GAINCORR_Pos)))

+#define ADC_GAINCORR_MASK           0x0FFFu      /**< \brief (ADC_GAINCORR) MASK Register */

+

+/* -------- ADC_OFFSETCORR : (ADC Offset: 0x26) (R/W 16) Offset Correction Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t OFFSETCORR:12;    /*!< bit:  0..11  Offset Correction Value            */

+    uint16_t :4;               /*!< bit: 12..15  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} ADC_OFFSETCORR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_OFFSETCORR_OFFSET       0x26         /**< \brief (ADC_OFFSETCORR offset) Offset Correction Register */

+#define ADC_OFFSETCORR_RESETVALUE   0x0000       /**< \brief (ADC_OFFSETCORR reset_value) Offset Correction Register */

+

+#define ADC_OFFSETCORR_OFFSETCORR_Pos 0            /**< \brief (ADC_OFFSETCORR) Offset Correction Value */

+#define ADC_OFFSETCORR_OFFSETCORR_Msk (0xFFFu << ADC_OFFSETCORR_OFFSETCORR_Pos)

+#define ADC_OFFSETCORR_OFFSETCORR(value) ((ADC_OFFSETCORR_OFFSETCORR_Msk & ((value) << ADC_OFFSETCORR_OFFSETCORR_Pos)))

+#define ADC_OFFSETCORR_MASK         0x0FFFu      /**< \brief (ADC_OFFSETCORR) MASK Register */

+

+/* -------- ADC_CALIB : (ADC Offset: 0x28) (R/W 16) Calibration Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t LINEARITY_CAL:8;  /*!< bit:  0.. 7  Linearity Calibration              */

+    uint16_t BIAS_CAL:3;       /*!< bit:  8..10  Bias  Configuration                */

+    uint16_t :5;               /*!< bit: 11..15  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} ADC_CALIB_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_CALIB_OFFSET            0x28         /**< \brief (ADC_CALIB offset) Calibration Register */

+#define ADC_CALIB_RESETVALUE        0x0000       /**< \brief (ADC_CALIB reset_value) Calibration Register */

+

+#define ADC_CALIB_LINEARITY_CAL_Pos 0            /**< \brief (ADC_CALIB) Linearity Calibration */

+#define ADC_CALIB_LINEARITY_CAL_Msk (0xFFu << ADC_CALIB_LINEARITY_CAL_Pos)

+#define ADC_CALIB_LINEARITY_CAL(value) ((ADC_CALIB_LINEARITY_CAL_Msk & ((value) << ADC_CALIB_LINEARITY_CAL_Pos)))

+#define ADC_CALIB_BIAS_CAL_Pos      8            /**< \brief (ADC_CALIB) Bias  Configuration */

+#define ADC_CALIB_BIAS_CAL_Msk      (0x7u << ADC_CALIB_BIAS_CAL_Pos)

+#define ADC_CALIB_BIAS_CAL(value)   ((ADC_CALIB_BIAS_CAL_Msk & ((value) << ADC_CALIB_BIAS_CAL_Pos)))

+#define ADC_CALIB_MASK              0x07FFu      /**< \brief (ADC_CALIB) MASK Register */

+

+/* -------- ADC_DBGCTRL : (ADC Offset: 0x2A) (R/W  8) Debug Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  DBGRUN:1;         /*!< bit:      0  Debug Run                          */

+    uint8_t  :7;               /*!< bit:  1.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} ADC_DBGCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_DBGCTRL_OFFSET          0x2A         /**< \brief (ADC_DBGCTRL offset) Debug Register */

+#define ADC_DBGCTRL_RESETVALUE      0x00         /**< \brief (ADC_DBGCTRL reset_value) Debug Register */

+

+#define ADC_DBGCTRL_DBGRUN_Pos      0            /**< \brief (ADC_DBGCTRL) Debug Run */

+#define ADC_DBGCTRL_DBGRUN          (0x1u << ADC_DBGCTRL_DBGRUN_Pos)

+#define ADC_DBGCTRL_MASK            0x01u        /**< \brief (ADC_DBGCTRL) MASK Register */

+

+/* -------- ADC_TEST : (ADC Offset: 0x2B) (R/W  8) Test Modes Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  TEST_EN:1;        /*!< bit:      0  Enable Test Mode                   */

+    uint8_t  REFPAD_EN:1;      /*!< bit:      1  Connect Vrefp/n to aio33testp/n    */

+    uint8_t  REFINT_DIS:1;     /*!< bit:      2  Disable Internal Reference         */

+    uint8_t  :5;               /*!< bit:  3.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} ADC_TEST_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_TEST_OFFSET             0x2B         /**< \brief (ADC_TEST offset) Test Modes Register */

+#define ADC_TEST_RESETVALUE         0x00         /**< \brief (ADC_TEST reset_value) Test Modes Register */

+

+#define ADC_TEST_TEST_EN_Pos        0            /**< \brief (ADC_TEST) Enable Test Mode */

+#define ADC_TEST_TEST_EN            (0x1u << ADC_TEST_TEST_EN_Pos)

+#define ADC_TEST_REFPAD_EN_Pos      1            /**< \brief (ADC_TEST) Connect Vrefp/n to aio33testp/n */

+#define ADC_TEST_REFPAD_EN          (0x1u << ADC_TEST_REFPAD_EN_Pos)

+#define ADC_TEST_REFINT_DIS_Pos     2            /**< \brief (ADC_TEST) Disable Internal Reference */

+#define ADC_TEST_REFINT_DIS         (0x1u << ADC_TEST_REFINT_DIS_Pos)

+#define ADC_TEST_MASK               0x07u        /**< \brief (ADC_TEST) MASK Register */

+

+/* -------- ADC_TESTRESULT : (ADC Offset: 0x2C) (R/W 32) Test Result Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t TESTRESULT:24;    /*!< bit:  0..23  Result Directly from ADC Hard Block */

+    uint32_t :8;               /*!< bit: 24..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} ADC_TESTRESULT_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_TESTRESULT_OFFSET       0x2C         /**< \brief (ADC_TESTRESULT offset) Test Result Register */

+#define ADC_TESTRESULT_RESETVALUE   0x00000000   /**< \brief (ADC_TESTRESULT reset_value) Test Result Register */

+

+#define ADC_TESTRESULT_TESTRESULT_Pos 0            /**< \brief (ADC_TESTRESULT) Result Directly from ADC Hard Block */

+#define ADC_TESTRESULT_TESTRESULT_Msk (0xFFFFFFu << ADC_TESTRESULT_TESTRESULT_Pos)

+#define ADC_TESTRESULT_TESTRESULT(value) ((ADC_TESTRESULT_TESTRESULT_Msk & ((value) << ADC_TESTRESULT_TESTRESULT_Pos)))

+#define ADC_TESTRESULT_MASK         0x00FFFFFFu  /**< \brief (ADC_TESTRESULT) MASK Register */

+

+/* -------- ADC_DCFG : (ADC Offset: 0x30) (R/W  8) Device Configuration -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  CMPDELAY:1;       /*!< bit:      0  Comparator Delay Control           */

+    uint8_t  BOOSTEN:1;        /*!< bit:      1  Enable the SR Booster in the Op Amp */

+    uint8_t  VCMPULSE:1;       /*!< bit:      2  Enable VCM Pulse                   */

+    uint8_t  BIAS_OPA:1;       /*!< bit:      3  Select PTAT Biasing for OPA        */

+    uint8_t  :4;               /*!< bit:  4.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} ADC_DCFG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define ADC_DCFG_OFFSET             0x30         /**< \brief (ADC_DCFG offset) Device Configuration */

+#define ADC_DCFG_RESETVALUE         0x00         /**< \brief (ADC_DCFG reset_value) Device Configuration */

+

+#define ADC_DCFG_CMPDELAY_Pos       0            /**< \brief (ADC_DCFG) Comparator Delay Control */

+#define ADC_DCFG_CMPDELAY           (0x1u << ADC_DCFG_CMPDELAY_Pos)

+#define ADC_DCFG_BOOSTEN_Pos        1            /**< \brief (ADC_DCFG) Enable the SR Booster in the Op Amp */

+#define ADC_DCFG_BOOSTEN            (0x1u << ADC_DCFG_BOOSTEN_Pos)

+#define ADC_DCFG_VCMPULSE_Pos       2            /**< \brief (ADC_DCFG) Enable VCM Pulse */

+#define ADC_DCFG_VCMPULSE           (0x1u << ADC_DCFG_VCMPULSE_Pos)

+#define ADC_DCFG_BIAS_OPA_Pos       3            /**< \brief (ADC_DCFG) Select PTAT Biasing for OPA */

+#define ADC_DCFG_BIAS_OPA           (0x1u << ADC_DCFG_BIAS_OPA_Pos)

+#define ADC_DCFG_MASK               0x0Fu        /**< \brief (ADC_DCFG) MASK Register */

+

+/** \brief ADC hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct {

+  __IO ADC_CTRLA_Type            CTRLA;       /**< \brief Offset: 0x00 (R/W  8) Control Register A */

+  __IO ADC_REFCTRL_Type          REFCTRL;     /**< \brief Offset: 0x01 (R/W  8) Reference Control Register */

+  __IO ADC_AVGCTRL_Type          AVGCTRL;     /**< \brief Offset: 0x02 (R/W  8) Average Control Register */

+  __IO ADC_SAMPCTRL_Type         SAMPCTRL;    /**< \brief Offset: 0x03 (R/W  8) Sample Time Control Register */

+  __IO ADC_CTRLB_Type            CTRLB;       /**< \brief Offset: 0x04 (R/W 16) Control Register B */

+       RoReg8                    Reserved1[0x2];

+  __IO ADC_WINCTRL_Type          WINCTRL;     /**< \brief Offset: 0x08 (R/W  8) Window Monitor Control Register */

+       RoReg8                    Reserved2[0x3];

+  __IO ADC_SWTRIG_Type           SWTRIG;      /**< \brief Offset: 0x0C (R/W  8) Control Register B */

+       RoReg8                    Reserved3[0x3];

+  __IO ADC_INPUTCTRL_Type        INPUTCTRL;   /**< \brief Offset: 0x10 (R/W 32) Input Control Register */

+  __IO ADC_EVCTRL_Type           EVCTRL;      /**< \brief Offset: 0x14 (R/W  8) Event Control Register */

+       RoReg8                    Reserved4[0x1];

+  __IO ADC_INTENCLR_Type         INTENCLR;    /**< \brief Offset: 0x16 (R/W  8) Interrupt Enable Clear Register */

+  __IO ADC_INTENSET_Type         INTENSET;    /**< \brief Offset: 0x17 (R/W  8) Interrupt Enable Set Register */

+  __IO ADC_INTFLAG_Type          INTFLAG;     /**< \brief Offset: 0x18 (R/W  8) Interrupt Flag Status and Clear Register */

+  __I  ADC_STATUS_Type           STATUS;      /**< \brief Offset: 0x19 (R/   8) Status Register */

+  __I  ADC_RESULT_Type           RESULT;      /**< \brief Offset: 0x1A (R/  16) Result Register */

+  __IO ADC_WINLT_Type            WINLT;       /**< \brief Offset: 0x1C (R/W 16) Window Monitor Lower Threshold Register */

+       RoReg8                    Reserved5[0x2];

+  __IO ADC_WINUT_Type            WINUT;       /**< \brief Offset: 0x20 (R/W 16) Window Monitor Upper Threshold Register */

+       RoReg8                    Reserved6[0x2];

+  __IO ADC_GAINCORR_Type         GAINCORR;    /**< \brief Offset: 0x24 (R/W 16) Gain Correction Register */

+  __IO ADC_OFFSETCORR_Type       OFFSETCORR;  /**< \brief Offset: 0x26 (R/W 16) Offset Correction Register */

+  __IO ADC_CALIB_Type            CALIB;       /**< \brief Offset: 0x28 (R/W 16) Calibration Register */

+  __IO ADC_DBGCTRL_Type          DBGCTRL;     /**< \brief Offset: 0x2A (R/W  8) Debug Register */

+  __IO ADC_TEST_Type             TEST;        /**< \brief Offset: 0x2B (R/W  8) Test Modes Register */

+  __IO ADC_TESTRESULT_Type       TESTRESULT;  /**< \brief Offset: 0x2C (R/W 32) Test Result Register */

+  __IO ADC_DCFG_Type             DCFG;        /**< \brief Offset: 0x30 (R/W  8) Device Configuration */

+} Adc;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/*@}*/

+

+#endif /* _SAMD20_ADC_COMPONENT_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_dac.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_dac.h
new file mode 100644
index 0000000..b13f176
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_dac.h
@@ -0,0 +1,318 @@
+/**

+ * \file

+ *

+ * \brief Component description for DAC

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_DAC_COMPONENT_

+#define _SAMD20_DAC_COMPONENT_

+

+/* ========================================================================== */

+/**  SOFTWARE API DEFINITION FOR DAC */

+/* ========================================================================== */

+/** \addtogroup SAMD20_DAC Digital Analog Converter */

+/*@{*/

+

+#define REV_DAC                     0x101

+

+/* -------- DAC_CTRLA : (DAC Offset: 0x0) (R/W  8) Control Register A -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  SWRST:1;          /*!< bit:      0  Software Reset                     */

+    uint8_t  ENABLE:1;         /*!< bit:      1  Enable                             */

+    uint8_t  RUNSTDBY:1;       /*!< bit:      2  Run during Standby                 */

+    uint8_t  :5;               /*!< bit:  3.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} DAC_CTRLA_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DAC_CTRLA_OFFSET            0x0          /**< \brief (DAC_CTRLA offset) Control Register A */

+#define DAC_CTRLA_RESETVALUE        0x00         /**< \brief (DAC_CTRLA reset_value) Control Register A */

+

+#define DAC_CTRLA_SWRST_Pos         0            /**< \brief (DAC_CTRLA) Software Reset */

+#define DAC_CTRLA_SWRST             (0x1u << DAC_CTRLA_SWRST_Pos)

+#define DAC_CTRLA_ENABLE_Pos        1            /**< \brief (DAC_CTRLA) Enable */

+#define DAC_CTRLA_ENABLE            (0x1u << DAC_CTRLA_ENABLE_Pos)

+#define DAC_CTRLA_RUNSTDBY_Pos      2            /**< \brief (DAC_CTRLA) Run during Standby */

+#define DAC_CTRLA_RUNSTDBY          (0x1u << DAC_CTRLA_RUNSTDBY_Pos)

+#define DAC_CTRLA_MASK              0x07u        /**< \brief (DAC_CTRLA) MASK Register */

+

+/* -------- DAC_CTRLB : (DAC Offset: 0x1) (R/W  8) Control Register B -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  EOEN:1;           /*!< bit:      0  Output Buffer Enable               */

+    uint8_t  IOEN:1;           /*!< bit:      1  Internal DAC Output Channel Enabled for AC */

+    uint8_t  LEFTADJ:1;        /*!< bit:      2  Left-Adjusted Value                */

+    uint8_t  VPD:1;            /*!< bit:      3  Voltage Pump Disable               */

+    uint8_t  :2;               /*!< bit:  4.. 5  Reserved                           */

+    uint8_t  REFSEL:2;         /*!< bit:  6.. 7  Voltage Reference Select for DAC   */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} DAC_CTRLB_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DAC_CTRLB_OFFSET            0x1          /**< \brief (DAC_CTRLB offset) Control Register B */

+#define DAC_CTRLB_RESETVALUE        0x00         /**< \brief (DAC_CTRLB reset_value) Control Register B */

+

+#define DAC_CTRLB_EOEN_Pos          0            /**< \brief (DAC_CTRLB) Output Buffer Enable */

+#define DAC_CTRLB_EOEN              (0x1u << DAC_CTRLB_EOEN_Pos)

+#define DAC_CTRLB_IOEN_Pos          1            /**< \brief (DAC_CTRLB) Internal DAC Output Channel Enabled for AC */

+#define DAC_CTRLB_IOEN              (0x1u << DAC_CTRLB_IOEN_Pos)

+#define DAC_CTRLB_LEFTADJ_Pos       2            /**< \brief (DAC_CTRLB) Left-Adjusted Value */

+#define DAC_CTRLB_LEFTADJ           (0x1u << DAC_CTRLB_LEFTADJ_Pos)

+#define DAC_CTRLB_VPD_Pos           3            /**< \brief (DAC_CTRLB) Voltage Pump Disable */

+#define DAC_CTRLB_VPD               (0x1u << DAC_CTRLB_VPD_Pos)

+#define DAC_CTRLB_REFSEL_Pos        6            /**< \brief (DAC_CTRLB) Voltage Reference Select for DAC */

+#define DAC_CTRLB_REFSEL_Msk        (0x3u << DAC_CTRLB_REFSEL_Pos)

+#define DAC_CTRLB_REFSEL(value)     ((DAC_CTRLB_REFSEL_Msk & ((value) << DAC_CTRLB_REFSEL_Pos)))

+#define DAC_CTRLB_MASK              0xCFu        /**< \brief (DAC_CTRLB) MASK Register */

+

+/* -------- DAC_EVCTRL : (DAC Offset: 0x2) (R/W  8) Event Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  STARTEI:1;        /*!< bit:      0  Start Conversion Event Input       */

+    uint8_t  EMPTYEO:1;        /*!< bit:      1  Data Buffer Empty Event Output     */

+    uint8_t  :6;               /*!< bit:  2.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} DAC_EVCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DAC_EVCTRL_OFFSET           0x2          /**< \brief (DAC_EVCTRL offset) Event Control Register */

+#define DAC_EVCTRL_RESETVALUE       0x00         /**< \brief (DAC_EVCTRL reset_value) Event Control Register */

+

+#define DAC_EVCTRL_STARTEI_Pos      0            /**< \brief (DAC_EVCTRL) Start Conversion Event Input */

+#define DAC_EVCTRL_STARTEI          (0x1u << DAC_EVCTRL_STARTEI_Pos)

+#define DAC_EVCTRL_EMPTYEO_Pos      1            /**< \brief (DAC_EVCTRL) Data Buffer Empty Event Output */

+#define DAC_EVCTRL_EMPTYEO          (0x1u << DAC_EVCTRL_EMPTYEO_Pos)

+#define DAC_EVCTRL_MASK             0x03u        /**< \brief (DAC_EVCTRL) MASK Register */

+

+/* -------- DAC_TEST : (DAC Offset: 0x3) (R/W  8) Test Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  TESTEN:1;         /*!< bit:      0  Test Enable                        */

+    uint8_t  :7;               /*!< bit:  1.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} DAC_TEST_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DAC_TEST_OFFSET             0x3          /**< \brief (DAC_TEST offset) Test Register */

+#define DAC_TEST_RESETVALUE         0x00         /**< \brief (DAC_TEST reset_value) Test Register */

+

+#define DAC_TEST_TESTEN_Pos         0            /**< \brief (DAC_TEST) Test Enable */

+#define DAC_TEST_TESTEN             (0x1u << DAC_TEST_TESTEN_Pos)

+#define DAC_TEST_MASK               0x01u        /**< \brief (DAC_TEST) MASK Register */

+

+/* -------- DAC_INTENCLR : (DAC Offset: 0x4) (R/W  8) Interrupt Enable Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  UNDERRUN:1;       /*!< bit:      0  Underrun Interrupt Disable         */

+    uint8_t  EMPTY:1;          /*!< bit:      1  Empty Interrupt Disable            */

+    uint8_t  SYNCRDY:1;        /*!< bit:      2  Synchronization Ready Interrupt Disable */

+    uint8_t  :5;               /*!< bit:  3.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} DAC_INTENCLR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DAC_INTENCLR_OFFSET         0x4          /**< \brief (DAC_INTENCLR offset) Interrupt Enable Clear Register */

+#define DAC_INTENCLR_RESETVALUE     0x00         /**< \brief (DAC_INTENCLR reset_value) Interrupt Enable Clear Register */

+

+#define DAC_INTENCLR_UNDERRUN_Pos   0            /**< \brief (DAC_INTENCLR) Underrun Interrupt Disable */

+#define DAC_INTENCLR_UNDERRUN       (0x1u << DAC_INTENCLR_UNDERRUN_Pos)

+#define DAC_INTENCLR_EMPTY_Pos      1            /**< \brief (DAC_INTENCLR) Empty Interrupt Disable */

+#define DAC_INTENCLR_EMPTY          (0x1u << DAC_INTENCLR_EMPTY_Pos)

+#define DAC_INTENCLR_SYNCRDY_Pos    2            /**< \brief (DAC_INTENCLR) Synchronization Ready Interrupt Disable */

+#define DAC_INTENCLR_SYNCRDY        (0x1u << DAC_INTENCLR_SYNCRDY_Pos)

+#define DAC_INTENCLR_MASK           0x07u        /**< \brief (DAC_INTENCLR) MASK Register */

+

+/* -------- DAC_INTENSET : (DAC Offset: 0x5) (R/W  8) Interrupt Enable Set Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  UNDERRUN:1;       /*!< bit:      0  Underrun Interrupt Enable          */

+    uint8_t  EMPTY:1;          /*!< bit:      1  Empty Interrupt Enable             */

+    uint8_t  SYNCRDY:1;        /*!< bit:      2  Synchronization Ready Interrupt Enable */

+    uint8_t  :5;               /*!< bit:  3.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} DAC_INTENSET_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DAC_INTENSET_OFFSET         0x5          /**< \brief (DAC_INTENSET offset) Interrupt Enable Set Register */

+#define DAC_INTENSET_RESETVALUE     0x00         /**< \brief (DAC_INTENSET reset_value) Interrupt Enable Set Register */

+

+#define DAC_INTENSET_UNDERRUN_Pos   0            /**< \brief (DAC_INTENSET) Underrun Interrupt Enable */

+#define DAC_INTENSET_UNDERRUN       (0x1u << DAC_INTENSET_UNDERRUN_Pos)

+#define DAC_INTENSET_EMPTY_Pos      1            /**< \brief (DAC_INTENSET) Empty Interrupt Enable */

+#define DAC_INTENSET_EMPTY          (0x1u << DAC_INTENSET_EMPTY_Pos)

+#define DAC_INTENSET_SYNCRDY_Pos    2            /**< \brief (DAC_INTENSET) Synchronization Ready Interrupt Enable */

+#define DAC_INTENSET_SYNCRDY        (0x1u << DAC_INTENSET_SYNCRDY_Pos)

+#define DAC_INTENSET_MASK           0x07u        /**< \brief (DAC_INTENSET) MASK Register */

+

+/* -------- DAC_INTFLAG : (DAC Offset: 0x6) (R/W  8) Interrupt Flag Status and Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  UNDERRUN:1;       /*!< bit:      0  Underrun Interrupt Flag            */

+    uint8_t  EMPTY:1;          /*!< bit:      1  Empty Interrupt Flag               */

+    uint8_t  SYNCRDY:1;        /*!< bit:      2  Synchronization Ready Interrupt Flag */

+    uint8_t  :5;               /*!< bit:  3.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} DAC_INTFLAG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DAC_INTFLAG_OFFSET          0x6          /**< \brief (DAC_INTFLAG offset) Interrupt Flag Status and Clear Register */

+#define DAC_INTFLAG_RESETVALUE      0x00         /**< \brief (DAC_INTFLAG reset_value) Interrupt Flag Status and Clear Register */

+

+#define DAC_INTFLAG_UNDERRUN_Pos    0            /**< \brief (DAC_INTFLAG) Underrun Interrupt Flag */

+#define DAC_INTFLAG_UNDERRUN        (0x1u << DAC_INTFLAG_UNDERRUN_Pos)

+#define DAC_INTFLAG_EMPTY_Pos       1            /**< \brief (DAC_INTFLAG) Empty Interrupt Flag */

+#define DAC_INTFLAG_EMPTY           (0x1u << DAC_INTFLAG_EMPTY_Pos)

+#define DAC_INTFLAG_SYNCRDY_Pos     2            /**< \brief (DAC_INTFLAG) Synchronization Ready Interrupt Flag */

+#define DAC_INTFLAG_SYNCRDY         (0x1u << DAC_INTFLAG_SYNCRDY_Pos)

+#define DAC_INTFLAG_MASK            0x07u        /**< \brief (DAC_INTFLAG) MASK Register */

+

+/* -------- DAC_STATUS : (DAC Offset: 0x7) (R/   8) Status Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  :7;               /*!< bit:  0.. 6  Reserved                           */

+    uint8_t  SYNCBUSY:1;       /*!< bit:      7  Synchronization Busy               */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} DAC_STATUS_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DAC_STATUS_OFFSET           0x7          /**< \brief (DAC_STATUS offset) Status Register */

+#define DAC_STATUS_RESETVALUE       0x00         /**< \brief (DAC_STATUS reset_value) Status Register */

+

+#define DAC_STATUS_SYNCBUSY_Pos     7            /**< \brief (DAC_STATUS) Synchronization Busy */

+#define DAC_STATUS_SYNCBUSY         (0x1u << DAC_STATUS_SYNCBUSY_Pos)

+#define DAC_STATUS_MASK             0x80u        /**< \brief (DAC_STATUS) MASK Register */

+

+/* -------- DAC_DATA : (DAC Offset: 0x8) (R/W 16) Data Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct { // LEFT_ADJUSTED mode

+    uint16_t :6;               /*!< bit:  0.. 5  Reserved                           */

+    uint16_t DATA:10;          /*!< bit:  6..15  Data to be Converted               */

+  } LEFT_ADJUSTED;             /*!< Structure used for LEFT_ADJUSTED                */

+  struct { // RIGHT_ADJUSTED mode

+    uint16_t DATA:10;          /*!< bit:  0.. 9  Data to be converted               */

+    uint16_t :6;               /*!< bit: 10..15  Reserved                           */

+  } RIGHT_ADJUSTED;            /*!< Structure used for RIGHT_ADJUSTED               */

+  uint16_t reg;                /*!< Type      used for register access              */

+} DAC_DATA_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DAC_DATA_OFFSET             0x8          /**< \brief (DAC_DATA offset) Data Register */

+#define DAC_DATA_RESETVALUE         0x0000       /**< \brief (DAC_DATA reset_value) Data Register */

+

+// LEFT_ADJUSTED mode

+#define DAC_DATA_LEFT_ADJUSTED_DATA_Pos 6            /**< \brief (DAC_DATA_LEFT_ADJUSTED) Data to be Converted */

+#define DAC_DATA_LEFT_ADJUSTED_DATA_Msk (0x3FFu << DAC_DATA_LEFT_ADJUSTED_DATA_Pos)

+#define DAC_DATA_LEFT_ADJUSTED_DATA(value) ((DAC_DATA_LEFT_ADJUSTED_DATA_Msk & ((value) << DAC_DATA_LEFT_ADJUSTED_DATA_Pos)))

+#define DAC_DATA_LEFT_ADJUSTED_MASK 0xFFC0u      /**< \brief (DAC_DATA_LEFT_ADJUSTED) MASK Register */

+

+// RIGHT_ADJUSTED mode

+#define DAC_DATA_RIGHT_ADJUSTED_DATA_Pos 0            /**< \brief (DAC_DATA_RIGHT_ADJUSTED) Data to be converted */

+#define DAC_DATA_RIGHT_ADJUSTED_DATA_Msk (0x3FFu << DAC_DATA_RIGHT_ADJUSTED_DATA_Pos)

+#define DAC_DATA_RIGHT_ADJUSTED_DATA(value) ((DAC_DATA_RIGHT_ADJUSTED_DATA_Msk & ((value) << DAC_DATA_RIGHT_ADJUSTED_DATA_Pos)))

+#define DAC_DATA_RIGHT_ADJUSTED_MASK 0x03FFu      /**< \brief (DAC_DATA_RIGHT_ADJUSTED) MASK Register */

+

+/* -------- DAC_DATABUF : (DAC Offset: 0xC) (R/W 16) Data Buffer Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct { // LEFT_ADJUSTED mode

+    uint16_t :6;               /*!< bit:  0.. 5  Reserved                           */

+    uint16_t DATABUF:10;       /*!< bit:  6..15  Data Buffer                        */

+  } LEFT_ADJUSTED;             /*!< Structure used for LEFT_ADJUSTED                */

+  struct { // RIGHT_ADJUSTED mode

+    uint16_t DATABUF:10;       /*!< bit:  0.. 9  Data Buffer                        */

+    uint16_t :6;               /*!< bit: 10..15  Reserved                           */

+  } RIGHT_ADJUSTED;            /*!< Structure used for RIGHT_ADJUSTED               */

+  uint16_t reg;                /*!< Type      used for register access              */

+} DAC_DATABUF_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DAC_DATABUF_OFFSET          0xC          /**< \brief (DAC_DATABUF offset) Data Buffer Register */

+#define DAC_DATABUF_RESETVALUE      0x0000       /**< \brief (DAC_DATABUF reset_value) Data Buffer Register */

+

+// LEFT_ADJUSTED mode

+#define DAC_DATABUF_LEFT_ADJUSTED_DATABUF_Pos 6            /**< \brief (DAC_DATABUF_LEFT_ADJUSTED) Data Buffer */

+#define DAC_DATABUF_LEFT_ADJUSTED_DATABUF_Msk (0x3FFu << DAC_DATABUF_LEFT_ADJUSTED_DATABUF_Pos)

+#define DAC_DATABUF_LEFT_ADJUSTED_DATABUF(value) ((DAC_DATABUF_LEFT_ADJUSTED_DATABUF_Msk & ((value) << DAC_DATABUF_LEFT_ADJUSTED_DATABUF_Pos)))

+#define DAC_DATABUF_LEFT_ADJUSTED_MASK 0xFFC0u      /**< \brief (DAC_DATABUF_LEFT_ADJUSTED) MASK Register */

+

+// RIGHT_ADJUSTED mode

+#define DAC_DATABUF_RIGHT_ADJUSTED_DATABUF_Pos 0            /**< \brief (DAC_DATABUF_RIGHT_ADJUSTED) Data Buffer */

+#define DAC_DATABUF_RIGHT_ADJUSTED_DATABUF_Msk (0x3FFu << DAC_DATABUF_RIGHT_ADJUSTED_DATABUF_Pos)

+#define DAC_DATABUF_RIGHT_ADJUSTED_DATABUF(value) ((DAC_DATABUF_RIGHT_ADJUSTED_DATABUF_Msk & ((value) << DAC_DATABUF_RIGHT_ADJUSTED_DATABUF_Pos)))

+#define DAC_DATABUF_RIGHT_ADJUSTED_MASK 0x03FFu      /**< \brief (DAC_DATABUF_RIGHT_ADJUSTED) MASK Register */

+

+/** \brief DAC hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct {

+  __IO DAC_CTRLA_Type            CTRLA;       /**< \brief Offset: 0x0 (R/W  8) Control Register A */

+  __IO DAC_CTRLB_Type            CTRLB;       /**< \brief Offset: 0x1 (R/W  8) Control Register B */

+  __IO DAC_EVCTRL_Type           EVCTRL;      /**< \brief Offset: 0x2 (R/W  8) Event Control Register */

+  __IO DAC_TEST_Type             TEST;        /**< \brief Offset: 0x3 (R/W  8) Test Register */

+  __IO DAC_INTENCLR_Type         INTENCLR;    /**< \brief Offset: 0x4 (R/W  8) Interrupt Enable Clear Register */

+  __IO DAC_INTENSET_Type         INTENSET;    /**< \brief Offset: 0x5 (R/W  8) Interrupt Enable Set Register */

+  __IO DAC_INTFLAG_Type          INTFLAG;     /**< \brief Offset: 0x6 (R/W  8) Interrupt Flag Status and Clear Register */

+  __I  DAC_STATUS_Type           STATUS;      /**< \brief Offset: 0x7 (R/   8) Status Register */

+  __IO DAC_DATA_Type             DATA;        /**< \brief Offset: 0x8 (R/W 16) Data Register */

+       RoReg8                    Reserved1[0x2];

+  __IO DAC_DATABUF_Type          DATABUF;     /**< \brief Offset: 0xC (R/W 16) Data Buffer Register */

+} Dac;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/*@}*/

+

+#endif /* _SAMD20_DAC_COMPONENT_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_dsu.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_dsu.h
new file mode 100644
index 0000000..1c9a7a6
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_dsu.h
@@ -0,0 +1,629 @@
+/**

+ * \file

+ *

+ * \brief Component description for DSU

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_DSU_COMPONENT_

+#define _SAMD20_DSU_COMPONENT_

+

+/* ========================================================================== */

+/**  SOFTWARE API DEFINITION FOR DSU */

+/* ========================================================================== */

+/** \addtogroup SAMD20_DSU Device Service Unit */

+/*@{*/

+

+#define REV_DSU                     0x101

+

+/* -------- DSU_CTRL : (DSU Offset: 0x0000) ( /W  8) Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  SWRST:1;          /*!< bit:      0  Software Reset                     */

+    uint8_t  :1;               /*!< bit:      1  Reserved                           */

+    uint8_t  CRC:1;            /*!< bit:      2  Cyclic Redundancy Check            */

+    uint8_t  MBIST:1;          /*!< bit:      3  Memory BIST                        */

+    uint8_t  CE:1;             /*!< bit:      4  Chip Erase                         */

+    uint8_t  :1;               /*!< bit:      5  Reserved                           */

+    uint8_t  ARR:1;            /*!< bit:      6  Auxiliary Row Read                 */

+    uint8_t  SMSA:1;           /*!< bit:      7  Start Memory Stream Access         */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} DSU_CTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_CTRL_OFFSET             0x0000       /**< \brief (DSU_CTRL offset) Control Register */

+

+#define DSU_CTRL_SWRST_Pos          0            /**< \brief (DSU_CTRL) Software Reset */

+#define DSU_CTRL_SWRST              (0x1u << DSU_CTRL_SWRST_Pos)

+#define DSU_CTRL_CRC_Pos            2            /**< \brief (DSU_CTRL) Cyclic Redundancy Check */

+#define DSU_CTRL_CRC                (0x1u << DSU_CTRL_CRC_Pos)

+#define DSU_CTRL_MBIST_Pos          3            /**< \brief (DSU_CTRL) Memory BIST */

+#define DSU_CTRL_MBIST              (0x1u << DSU_CTRL_MBIST_Pos)

+#define DSU_CTRL_CE_Pos             4            /**< \brief (DSU_CTRL) Chip Erase */

+#define DSU_CTRL_CE                 (0x1u << DSU_CTRL_CE_Pos)

+#define DSU_CTRL_ARR_Pos            6            /**< \brief (DSU_CTRL) Auxiliary Row Read */

+#define DSU_CTRL_ARR                (0x1u << DSU_CTRL_ARR_Pos)

+#define DSU_CTRL_SMSA_Pos           7            /**< \brief (DSU_CTRL) Start Memory Stream Access */

+#define DSU_CTRL_SMSA               (0x1u << DSU_CTRL_SMSA_Pos)

+#define DSU_CTRL_MASK               0xDDu        /**< \brief (DSU_CTRL) MASK Register */

+

+/* -------- DSU_STATUSA : (DSU Offset: 0x0001) (R/W  8) Status Register A -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  DONE:1;           /*!< bit:      0  Done                               */

+    uint8_t  CRSTEXT:1;        /*!< bit:      1  CPU Reset Phase Extension          */

+    uint8_t  BERR:1;           /*!< bit:      2  Bus Error                          */

+    uint8_t  FAIL:1;           /*!< bit:      3  Failure                            */

+    uint8_t  PERR:1;           /*!< bit:      4  Protection Error                   */

+    uint8_t  :3;               /*!< bit:  5.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} DSU_STATUSA_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_STATUSA_OFFSET          0x0001       /**< \brief (DSU_STATUSA offset) Status Register A */

+

+#define DSU_STATUSA_DONE_Pos        0            /**< \brief (DSU_STATUSA) Done */

+#define DSU_STATUSA_DONE            (0x1u << DSU_STATUSA_DONE_Pos)

+#define DSU_STATUSA_CRSTEXT_Pos     1            /**< \brief (DSU_STATUSA) CPU Reset Phase Extension */

+#define DSU_STATUSA_CRSTEXT         (0x1u << DSU_STATUSA_CRSTEXT_Pos)

+#define DSU_STATUSA_BERR_Pos        2            /**< \brief (DSU_STATUSA) Bus Error */

+#define DSU_STATUSA_BERR            (0x1u << DSU_STATUSA_BERR_Pos)

+#define DSU_STATUSA_FAIL_Pos        3            /**< \brief (DSU_STATUSA) Failure */

+#define DSU_STATUSA_FAIL            (0x1u << DSU_STATUSA_FAIL_Pos)

+#define DSU_STATUSA_PERR_Pos        4            /**< \brief (DSU_STATUSA) Protection Error */

+#define DSU_STATUSA_PERR            (0x1u << DSU_STATUSA_PERR_Pos)

+#define DSU_STATUSA_MASK            0x1Fu        /**< \brief (DSU_STATUSA) MASK Register */

+

+/* -------- DSU_STATUSB : (DSU Offset: 0x0002) (R/   8) Status Register B -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  PROT:1;           /*!< bit:      0  Protected                          */

+    uint8_t  DBGPRES:1;        /*!< bit:      1  Debugger Present                   */

+    uint8_t  DCCD:2;           /*!< bit:  2.. 3  Debug Communication Channel Dirty  */

+    uint8_t  HPE:1;            /*!< bit:      4  Hot-Plugging Enable                */

+    uint8_t  :3;               /*!< bit:  5.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} DSU_STATUSB_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_STATUSB_OFFSET          0x0002       /**< \brief (DSU_STATUSB offset) Status Register B */

+#define DSU_STATUSB_RESETVALUE      0x00         /**< \brief (DSU_STATUSB reset_value) Status Register B */

+

+#define DSU_STATUSB_PROT_Pos        0            /**< \brief (DSU_STATUSB) Protected */

+#define DSU_STATUSB_PROT            (0x1u << DSU_STATUSB_PROT_Pos)

+#define DSU_STATUSB_DBGPRES_Pos     1            /**< \brief (DSU_STATUSB) Debugger Present */

+#define DSU_STATUSB_DBGPRES         (0x1u << DSU_STATUSB_DBGPRES_Pos)

+#define DSU_STATUSB_DCCD_Pos        2            /**< \brief (DSU_STATUSB) Debug Communication Channel Dirty */

+#define DSU_STATUSB_DCCD_Msk        (0x3u << DSU_STATUSB_DCCD_Pos)

+#define DSU_STATUSB_DCCD(value)     ((DSU_STATUSB_DCCD_Msk & ((value) << DSU_STATUSB_DCCD_Pos)))

+#define DSU_STATUSB_HPE_Pos         4            /**< \brief (DSU_STATUSB) Hot-Plugging Enable */

+#define DSU_STATUSB_HPE             (0x1u << DSU_STATUSB_HPE_Pos)

+#define DSU_STATUSB_MASK            0x1Fu        /**< \brief (DSU_STATUSB) MASK Register */

+

+/* -------- DSU_ADDR : (DSU Offset: 0x0004) (R/W 32) Address Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t AMOD:2;           /*!< bit:  0.. 1  Access Mode                        */

+    uint32_t ADDR:30;          /*!< bit:  2..31  Address                            */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_ADDR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_ADDR_OFFSET             0x0004       /**< \brief (DSU_ADDR offset) Address Register */

+#define DSU_ADDR_RESETVALUE         0x00000000   /**< \brief (DSU_ADDR reset_value) Address Register */

+

+#define DSU_ADDR_AMOD_Pos           0            /**< \brief (DSU_ADDR) Access Mode */

+#define DSU_ADDR_AMOD_Msk           (0x3u << DSU_ADDR_AMOD_Pos)

+#define DSU_ADDR_AMOD(value)        ((DSU_ADDR_AMOD_Msk & ((value) << DSU_ADDR_AMOD_Pos)))

+#define DSU_ADDR_ADDR_Pos           2            /**< \brief (DSU_ADDR) Address */

+#define DSU_ADDR_ADDR_Msk           (0x3FFFFFFFu << DSU_ADDR_ADDR_Pos)

+#define DSU_ADDR_ADDR(value)        ((DSU_ADDR_ADDR_Msk & ((value) << DSU_ADDR_ADDR_Pos)))

+#define DSU_ADDR_MASK               0xFFFFFFFFu  /**< \brief (DSU_ADDR) MASK Register */

+

+/* -------- DSU_LENGTH : (DSU Offset: 0x0008) (R/W 32) Length Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t :2;               /*!< bit:  0.. 1  Reserved                           */

+    uint32_t LENGTH:30;        /*!< bit:  2..31  Length                             */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_LENGTH_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_LENGTH_OFFSET           0x0008       /**< \brief (DSU_LENGTH offset) Length Register */

+#define DSU_LENGTH_RESETVALUE       0x00000000   /**< \brief (DSU_LENGTH reset_value) Length Register */

+

+#define DSU_LENGTH_LENGTH_Pos       2            /**< \brief (DSU_LENGTH) Length */

+#define DSU_LENGTH_LENGTH_Msk       (0x3FFFFFFFu << DSU_LENGTH_LENGTH_Pos)

+#define DSU_LENGTH_LENGTH(value)    ((DSU_LENGTH_LENGTH_Msk & ((value) << DSU_LENGTH_LENGTH_Pos)))

+#define DSU_LENGTH_MASK             0xFFFFFFFCu  /**< \brief (DSU_LENGTH) MASK Register */

+

+/* -------- DSU_DATA : (DSU Offset: 0x000C) (R/W 32) Data Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t DATA:32;          /*!< bit:  0..31  Data                               */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_DATA_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_DATA_OFFSET             0x000C       /**< \brief (DSU_DATA offset) Data Register */

+

+#define DSU_DATA_DATA_Pos           0            /**< \brief (DSU_DATA) Data */

+#define DSU_DATA_DATA_Msk           (0xFFFFFFFFu << DSU_DATA_DATA_Pos)

+#define DSU_DATA_DATA(value)        ((DSU_DATA_DATA_Msk & ((value) << DSU_DATA_DATA_Pos)))

+#define DSU_DATA_MASK               0xFFFFFFFFu  /**< \brief (DSU_DATA) MASK Register */

+

+/* -------- DSU_DCC : (DSU Offset: 0x0010) (R/W 32) Debug Communication Channel Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t DATA:32;          /*!< bit:  0..31  Data                               */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_DCC_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_DCC_OFFSET              0x0010       /**< \brief (DSU_DCC offset) Debug Communication Channel Register */

+#define DSU_DCC_RESETVALUE          0x00000000   /**< \brief (DSU_DCC reset_value) Debug Communication Channel Register */

+

+#define DSU_DCC_DATA_Pos            0            /**< \brief (DSU_DCC) Data */

+#define DSU_DCC_DATA_Msk            (0xFFFFFFFFu << DSU_DCC_DATA_Pos)

+#define DSU_DCC_DATA(value)         ((DSU_DCC_DATA_Msk & ((value) << DSU_DCC_DATA_Pos)))

+#define DSU_DCC_MASK                0xFFFFFFFFu  /**< \brief (DSU_DCC) MASK Register */

+

+/* -------- DSU_DID : (DSU Offset: 0x0018) (R/  32) Device Identification Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t DEVSEL:8;         /*!< bit:  0.. 7  Device Select                      */

+    uint32_t REVISION:4;       /*!< bit:  8..11  Revision Number                    */

+    uint32_t DIE:4;            /*!< bit: 12..15  Die Number                         */

+    uint32_t SUBFAMILY:8;      /*!< bit: 16..23  Sub-Family                         */

+    uint32_t FAMILY:4;         /*!< bit: 24..27  Family                             */

+    uint32_t PROCESSOR:4;      /*!< bit: 28..31  Processor                          */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_DID_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_DID_OFFSET              0x0018       /**< \brief (DSU_DID offset) Device Identification Register */

+#define DSU_DID_RESETVALUE          0x00000000   /**< \brief (DSU_DID reset_value) Device Identification Register */

+

+#define DSU_DID_DEVSEL_Pos          0            /**< \brief (DSU_DID) Device Select */

+#define DSU_DID_DEVSEL_Msk          (0xFFu << DSU_DID_DEVSEL_Pos)

+#define DSU_DID_DEVSEL(value)       ((DSU_DID_DEVSEL_Msk & ((value) << DSU_DID_DEVSEL_Pos)))

+#define DSU_DID_REVISION_Pos        8            /**< \brief (DSU_DID) Revision Number */

+#define DSU_DID_REVISION_Msk        (0xFu << DSU_DID_REVISION_Pos)

+#define DSU_DID_REVISION(value)     ((DSU_DID_REVISION_Msk & ((value) << DSU_DID_REVISION_Pos)))

+#define DSU_DID_DIE_Pos             12           /**< \brief (DSU_DID) Die Number */

+#define DSU_DID_DIE_Msk             (0xFu << DSU_DID_DIE_Pos)

+#define DSU_DID_DIE(value)          ((DSU_DID_DIE_Msk & ((value) << DSU_DID_DIE_Pos)))

+#define DSU_DID_SUBFAMILY_Pos       16           /**< \brief (DSU_DID) Sub-Family */

+#define DSU_DID_SUBFAMILY_Msk       (0xFFu << DSU_DID_SUBFAMILY_Pos)

+#define DSU_DID_SUBFAMILY(value)    ((DSU_DID_SUBFAMILY_Msk & ((value) << DSU_DID_SUBFAMILY_Pos)))

+#define DSU_DID_FAMILY_Pos          24           /**< \brief (DSU_DID) Family */

+#define DSU_DID_FAMILY_Msk          (0xFu << DSU_DID_FAMILY_Pos)

+#define DSU_DID_FAMILY(value)       ((DSU_DID_FAMILY_Msk & ((value) << DSU_DID_FAMILY_Pos)))

+#define DSU_DID_PROCESSOR_Pos       28           /**< \brief (DSU_DID) Processor */

+#define DSU_DID_PROCESSOR_Msk       (0xFu << DSU_DID_PROCESSOR_Pos)

+#define DSU_DID_PROCESSOR(value)    ((DSU_DID_PROCESSOR_Msk & ((value) << DSU_DID_PROCESSOR_Pos)))

+#define DSU_DID_MASK                0xFFFFFFFFu  /**< \brief (DSU_DID) MASK Register */

+

+/* -------- DSU_DCFG : (DSU Offset: 0x00F0) (R/W 32) Device Configuration Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t DCFG:32;          /*!< bit:  0..31  Device Configuration               */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_DCFG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_DCFG_OFFSET             0x00F0       /**< \brief (DSU_DCFG offset) Device Configuration Register */

+#define DSU_DCFG_RESETVALUE         0x00000000   /**< \brief (DSU_DCFG reset_value) Device Configuration Register */

+

+#define DSU_DCFG_DCFG_Pos           0            /**< \brief (DSU_DCFG) Device Configuration */

+#define DSU_DCFG_DCFG_Msk           (0xFFFFFFFFu << DSU_DCFG_DCFG_Pos)

+#define DSU_DCFG_DCFG(value)        ((DSU_DCFG_DCFG_Msk & ((value) << DSU_DCFG_DCFG_Pos)))

+#define DSU_DCFG_MASK               0xFFFFFFFFu  /**< \brief (DSU_DCFG) MASK Register */

+

+/* -------- DSU_UPTM : (DSU Offset: 0x00F8) (R/W 32) UnProtected Test Mode Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t UPTM:32;          /*!< bit:  0..31  Un-Protected Test Mode             */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_UPTM_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_UPTM_OFFSET             0x00F8       /**< \brief (DSU_UPTM offset) UnProtected Test Mode Register */

+#define DSU_UPTM_RESETVALUE         0x00000000   /**< \brief (DSU_UPTM reset_value) UnProtected Test Mode Register */

+

+#define DSU_UPTM_UPTM_Pos           0            /**< \brief (DSU_UPTM) Un-Protected Test Mode */

+#define DSU_UPTM_UPTM_Msk           (0xFFFFFFFFu << DSU_UPTM_UPTM_Pos)

+#define DSU_UPTM_UPTM(value)        ((DSU_UPTM_UPTM_Msk & ((value) << DSU_UPTM_UPTM_Pos)))

+#define DSU_UPTM_MASK               0xFFFFFFFFu  /**< \brief (DSU_UPTM) MASK Register */

+

+/* -------- DSU_TESTMODE : (DSU Offset: 0x00FC) (R/W 32) Test Mode Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t TESTMODE:32;      /*!< bit:  0..31  Test Mode                          */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_TESTMODE_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_TESTMODE_OFFSET         0x00FC       /**< \brief (DSU_TESTMODE offset) Test Mode Register */

+#define DSU_TESTMODE_RESETVALUE     0x00000000   /**< \brief (DSU_TESTMODE reset_value) Test Mode Register */

+

+#define DSU_TESTMODE_TESTMODE_Pos   0            /**< \brief (DSU_TESTMODE) Test Mode */

+#define DSU_TESTMODE_TESTMODE_Msk   (0xFFFFFFFFu << DSU_TESTMODE_TESTMODE_Pos)

+#define DSU_TESTMODE_TESTMODE(value) ((DSU_TESTMODE_TESTMODE_Msk & ((value) << DSU_TESTMODE_TESTMODE_Pos)))

+#define DSU_TESTMODE_MASK           0xFFFFFFFFu  /**< \brief (DSU_TESTMODE) MASK Register */

+

+/* -------- DSU_ENTRY : (DSU Offset: 0x1000) (R/  32) CoreSight ROM Table Entry Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t EPRES:1;          /*!< bit:      0  Entry Present                      */

+    uint32_t FMT:1;            /*!< bit:      1  Format                             */

+    uint32_t :10;              /*!< bit:  2..11  Reserved                           */

+    uint32_t ADDOFF:20;        /*!< bit: 12..31  Address Offset                     */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_ENTRY_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_ENTRY_OFFSET            0x1000       /**< \brief (DSU_ENTRY offset) CoreSight ROM Table Entry Register */

+

+#define DSU_ENTRY_EPRES_Pos         0            /**< \brief (DSU_ENTRY) Entry Present */

+#define DSU_ENTRY_EPRES             (0x1u << DSU_ENTRY_EPRES_Pos)

+#define DSU_ENTRY_FMT_Pos           1            /**< \brief (DSU_ENTRY) Format */

+#define DSU_ENTRY_FMT               (0x1u << DSU_ENTRY_FMT_Pos)

+#define DSU_ENTRY_ADDOFF_Pos        12           /**< \brief (DSU_ENTRY) Address Offset */

+#define DSU_ENTRY_ADDOFF_Msk        (0xFFFFFu << DSU_ENTRY_ADDOFF_Pos)

+#define DSU_ENTRY_ADDOFF(value)     ((DSU_ENTRY_ADDOFF_Msk & ((value) << DSU_ENTRY_ADDOFF_Pos)))

+#define DSU_ENTRY_MASK              0xFFFFF003u  /**< \brief (DSU_ENTRY) MASK Register */

+

+/* -------- DSU_END : (DSU Offset: 0x1008) (R/  32) CoreSight ROM Table End Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t END:32;           /*!< bit:  0..31  End Marker                         */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_END_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_END_OFFSET              0x1008       /**< \brief (DSU_END offset) CoreSight ROM Table End Register */

+#define DSU_END_RESETVALUE          0x00000000   /**< \brief (DSU_END reset_value) CoreSight ROM Table End Register */

+

+#define DSU_END_END_Pos             0            /**< \brief (DSU_END) End Marker */

+#define DSU_END_END_Msk             (0xFFFFFFFFu << DSU_END_END_Pos)

+#define DSU_END_END(value)          ((DSU_END_END_Msk & ((value) << DSU_END_END_Pos)))

+#define DSU_END_MASK                0xFFFFFFFFu  /**< \brief (DSU_END) MASK Register */

+

+/* -------- DSU_MEMTYPE : (DSU Offset: 0x1FCC) (R/  32) CoreSight ROM Table Memory Type Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t SMEMP:1;          /*!< bit:      0  System Memory Present              */

+    uint32_t :31;              /*!< bit:  1..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_MEMTYPE_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_MEMTYPE_OFFSET          0x1FCC       /**< \brief (DSU_MEMTYPE offset) CoreSight ROM Table Memory Type Register */

+

+#define DSU_MEMTYPE_SMEMP_Pos       0            /**< \brief (DSU_MEMTYPE) System Memory Present */

+#define DSU_MEMTYPE_SMEMP           (0x1u << DSU_MEMTYPE_SMEMP_Pos)

+#define DSU_MEMTYPE_MASK            0x00000001u  /**< \brief (DSU_MEMTYPE) MASK Register */

+

+/* -------- DSU_PID4 : (DSU Offset: 0x1FD0) (R/  32) Peripheral Identification Register 4 -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t JEPCC:4;          /*!< bit:  0.. 3  JEP-106 Continuation Code          */

+    uint32_t FKBC:4;           /*!< bit:  4.. 7  4kB Count                          */

+    uint32_t :24;              /*!< bit:  8..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_PID4_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_PID4_OFFSET             0x1FD0       /**< \brief (DSU_PID4 offset) Peripheral Identification Register 4 */

+

+#define DSU_PID4_JEPCC_Pos          0            /**< \brief (DSU_PID4) JEP-106 Continuation Code */

+#define DSU_PID4_JEPCC_Msk          (0xFu << DSU_PID4_JEPCC_Pos)

+#define DSU_PID4_JEPCC(value)       ((DSU_PID4_JEPCC_Msk & ((value) << DSU_PID4_JEPCC_Pos)))

+#define DSU_PID4_FKBC_Pos           4            /**< \brief (DSU_PID4) 4kB Count */

+#define DSU_PID4_FKBC_Msk           (0xFu << DSU_PID4_FKBC_Pos)

+#define DSU_PID4_FKBC(value)        ((DSU_PID4_FKBC_Msk & ((value) << DSU_PID4_FKBC_Pos)))

+#define DSU_PID4_MASK               0x000000FFu  /**< \brief (DSU_PID4) MASK Register */

+

+/* -------- DSU_PID5 : (DSU Offset: 0x1FD4) (R/  32) Peripheral Identification Register 5 -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_PID5_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_PID5_OFFSET             0x1FD4       /**< \brief (DSU_PID5 offset) Peripheral Identification Register 5 */

+#define DSU_PID5_MASK               0x00000000u  /**< \brief (DSU_PID5) MASK Register */

+

+/* -------- DSU_PID6 : (DSU Offset: 0x1FD8) (R/  32) Peripheral Identification Register 6 -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_PID6_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_PID6_OFFSET             0x1FD8       /**< \brief (DSU_PID6 offset) Peripheral Identification Register 6 */

+#define DSU_PID6_MASK               0x00000000u  /**< \brief (DSU_PID6) MASK Register */

+

+/* -------- DSU_PID7 : (DSU Offset: 0x1FDC) (R/  32) Peripheral Identification Register 7 -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_PID7_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_PID7_OFFSET             0x1FDC       /**< \brief (DSU_PID7 offset) Peripheral Identification Register 7 */

+#define DSU_PID7_MASK               0x00000000u  /**< \brief (DSU_PID7) MASK Register */

+

+/* -------- DSU_PID0 : (DSU Offset: 0x1FE0) (R/  32) Peripheral Identification Register 0 -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t PARTNBL:8;        /*!< bit:  0.. 7  Part Number Low                    */

+    uint32_t :24;              /*!< bit:  8..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_PID0_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_PID0_OFFSET             0x1FE0       /**< \brief (DSU_PID0 offset) Peripheral Identification Register 0 */

+

+#define DSU_PID0_PARTNBL_Pos        0            /**< \brief (DSU_PID0) Part Number Low */

+#define DSU_PID0_PARTNBL_Msk        (0xFFu << DSU_PID0_PARTNBL_Pos)

+#define DSU_PID0_PARTNBL(value)     ((DSU_PID0_PARTNBL_Msk & ((value) << DSU_PID0_PARTNBL_Pos)))

+#define DSU_PID0_MASK               0x000000FFu  /**< \brief (DSU_PID0) MASK Register */

+

+/* -------- DSU_PID1 : (DSU Offset: 0x1FE4) (R/  32) Peripheral Identification Register 1 -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t PARTNBH:4;        /*!< bit:  0.. 3  Part Number High                   */

+    uint32_t JEPIDCL:4;        /*!< bit:  4.. 7  JEP-106 Identity Code Low          */

+    uint32_t :24;              /*!< bit:  8..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_PID1_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_PID1_OFFSET             0x1FE4       /**< \brief (DSU_PID1 offset) Peripheral Identification Register 1 */

+

+#define DSU_PID1_PARTNBH_Pos        0            /**< \brief (DSU_PID1) Part Number High */

+#define DSU_PID1_PARTNBH_Msk        (0xFu << DSU_PID1_PARTNBH_Pos)

+#define DSU_PID1_PARTNBH(value)     ((DSU_PID1_PARTNBH_Msk & ((value) << DSU_PID1_PARTNBH_Pos)))

+#define DSU_PID1_JEPIDCL_Pos        4            /**< \brief (DSU_PID1) JEP-106 Identity Code Low */

+#define DSU_PID1_JEPIDCL_Msk        (0xFu << DSU_PID1_JEPIDCL_Pos)

+#define DSU_PID1_JEPIDCL(value)     ((DSU_PID1_JEPIDCL_Msk & ((value) << DSU_PID1_JEPIDCL_Pos)))

+#define DSU_PID1_MASK               0x000000FFu  /**< \brief (DSU_PID1) MASK Register */

+

+/* -------- DSU_PID2 : (DSU Offset: 0x1FE8) (R/  32) Peripheral Identification Register 2 -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t JEPIDCH:3;        /*!< bit:  0.. 2  JEP-106 Identity Code High         */

+    uint32_t JEPU:1;           /*!< bit:      3  JEP-106 Identity Code is Used      */

+    uint32_t REVISION:4;       /*!< bit:  4.. 7  Revision Number                    */

+    uint32_t :24;              /*!< bit:  8..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_PID2_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_PID2_OFFSET             0x1FE8       /**< \brief (DSU_PID2 offset) Peripheral Identification Register 2 */

+

+#define DSU_PID2_JEPIDCH_Pos        0            /**< \brief (DSU_PID2) JEP-106 Identity Code High */

+#define DSU_PID2_JEPIDCH_Msk        (0x7u << DSU_PID2_JEPIDCH_Pos)

+#define DSU_PID2_JEPIDCH(value)     ((DSU_PID2_JEPIDCH_Msk & ((value) << DSU_PID2_JEPIDCH_Pos)))

+#define DSU_PID2_JEPU_Pos           3            /**< \brief (DSU_PID2) JEP-106 Identity Code is Used */

+#define DSU_PID2_JEPU               (0x1u << DSU_PID2_JEPU_Pos)

+#define DSU_PID2_REVISION_Pos       4            /**< \brief (DSU_PID2) Revision Number */

+#define DSU_PID2_REVISION_Msk       (0xFu << DSU_PID2_REVISION_Pos)

+#define DSU_PID2_REVISION(value)    ((DSU_PID2_REVISION_Msk & ((value) << DSU_PID2_REVISION_Pos)))

+#define DSU_PID2_MASK               0x000000FFu  /**< \brief (DSU_PID2) MASK Register */

+

+/* -------- DSU_PID3 : (DSU Offset: 0x1FEC) (R/  32) Peripheral Identification Register 3 -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t CUSMOD:4;         /*!< bit:  0.. 3  Customer Mode                      */

+    uint32_t REVAND:4;         /*!< bit:  4.. 7  Revision Number                    */

+    uint32_t :24;              /*!< bit:  8..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_PID3_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_PID3_OFFSET             0x1FEC       /**< \brief (DSU_PID3 offset) Peripheral Identification Register 3 */

+

+#define DSU_PID3_CUSMOD_Pos         0            /**< \brief (DSU_PID3) Customer Mode */

+#define DSU_PID3_CUSMOD_Msk         (0xFu << DSU_PID3_CUSMOD_Pos)

+#define DSU_PID3_CUSMOD(value)      ((DSU_PID3_CUSMOD_Msk & ((value) << DSU_PID3_CUSMOD_Pos)))

+#define DSU_PID3_REVAND_Pos         4            /**< \brief (DSU_PID3) Revision Number */

+#define DSU_PID3_REVAND_Msk         (0xFu << DSU_PID3_REVAND_Pos)

+#define DSU_PID3_REVAND(value)      ((DSU_PID3_REVAND_Msk & ((value) << DSU_PID3_REVAND_Pos)))

+#define DSU_PID3_MASK               0x000000FFu  /**< \brief (DSU_PID3) MASK Register */

+

+/* -------- DSU_CID0 : (DSU Offset: 0x1FF0) (R/  32) Component Identification Register 0 -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t PREAMBLEB0:8;     /*!< bit:  0.. 7  Preamble Byte 0                    */

+    uint32_t :24;              /*!< bit:  8..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_CID0_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_CID0_OFFSET             0x1FF0       /**< \brief (DSU_CID0 offset) Component Identification Register 0 */

+#define DSU_CID0_RESETVALUE         0x00000000   /**< \brief (DSU_CID0 reset_value) Component Identification Register 0 */

+

+#define DSU_CID0_PREAMBLEB0_Pos     0            /**< \brief (DSU_CID0) Preamble Byte 0 */

+#define DSU_CID0_PREAMBLEB0_Msk     (0xFFu << DSU_CID0_PREAMBLEB0_Pos)

+#define DSU_CID0_PREAMBLEB0(value)  ((DSU_CID0_PREAMBLEB0_Msk & ((value) << DSU_CID0_PREAMBLEB0_Pos)))

+#define DSU_CID0_MASK               0x000000FFu  /**< \brief (DSU_CID0) MASK Register */

+

+/* -------- DSU_CID1 : (DSU Offset: 0x1FF4) (R/  32) Component Identification Register 1 -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t PREAMBLE:4;       /*!< bit:  0.. 3  Preamble Byte 1                    */

+    uint32_t CCLASS:4;         /*!< bit:  4.. 7  Component Class                    */

+    uint32_t :24;              /*!< bit:  8..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_CID1_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_CID1_OFFSET             0x1FF4       /**< \brief (DSU_CID1 offset) Component Identification Register 1 */

+#define DSU_CID1_RESETVALUE         0x00000000   /**< \brief (DSU_CID1 reset_value) Component Identification Register 1 */

+

+#define DSU_CID1_PREAMBLE_Pos       0            /**< \brief (DSU_CID1) Preamble Byte 1 */

+#define DSU_CID1_PREAMBLE_Msk       (0xFu << DSU_CID1_PREAMBLE_Pos)

+#define DSU_CID1_PREAMBLE(value)    ((DSU_CID1_PREAMBLE_Msk & ((value) << DSU_CID1_PREAMBLE_Pos)))

+#define DSU_CID1_CCLASS_Pos         4            /**< \brief (DSU_CID1) Component Class */

+#define DSU_CID1_CCLASS_Msk         (0xFu << DSU_CID1_CCLASS_Pos)

+#define DSU_CID1_CCLASS(value)      ((DSU_CID1_CCLASS_Msk & ((value) << DSU_CID1_CCLASS_Pos)))

+#define DSU_CID1_MASK               0x000000FFu  /**< \brief (DSU_CID1) MASK Register */

+

+/* -------- DSU_CID2 : (DSU Offset: 0x1FF8) (R/  32) Component Identification Register 2 -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t PREAMBLEB2:8;     /*!< bit:  0.. 7  Preamble Byte 2                    */

+    uint32_t :24;              /*!< bit:  8..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_CID2_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_CID2_OFFSET             0x1FF8       /**< \brief (DSU_CID2 offset) Component Identification Register 2 */

+#define DSU_CID2_RESETVALUE         0x00000000   /**< \brief (DSU_CID2 reset_value) Component Identification Register 2 */

+

+#define DSU_CID2_PREAMBLEB2_Pos     0            /**< \brief (DSU_CID2) Preamble Byte 2 */

+#define DSU_CID2_PREAMBLEB2_Msk     (0xFFu << DSU_CID2_PREAMBLEB2_Pos)

+#define DSU_CID2_PREAMBLEB2(value)  ((DSU_CID2_PREAMBLEB2_Msk & ((value) << DSU_CID2_PREAMBLEB2_Pos)))

+#define DSU_CID2_MASK               0x000000FFu  /**< \brief (DSU_CID2) MASK Register */

+

+/* -------- DSU_CID3 : (DSU Offset: 0x1FFC) (R/  32) Component Identification Register 3 -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t PREAMBLEB3:8;     /*!< bit:  0.. 7  Preamble Byte 3                    */

+    uint32_t :24;              /*!< bit:  8..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} DSU_CID3_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define DSU_CID3_OFFSET             0x1FFC       /**< \brief (DSU_CID3 offset) Component Identification Register 3 */

+#define DSU_CID3_RESETVALUE         0x00000000   /**< \brief (DSU_CID3 reset_value) Component Identification Register 3 */

+

+#define DSU_CID3_PREAMBLEB3_Pos     0            /**< \brief (DSU_CID3) Preamble Byte 3 */

+#define DSU_CID3_PREAMBLEB3_Msk     (0xFFu << DSU_CID3_PREAMBLEB3_Pos)

+#define DSU_CID3_PREAMBLEB3(value)  ((DSU_CID3_PREAMBLEB3_Msk & ((value) << DSU_CID3_PREAMBLEB3_Pos)))

+#define DSU_CID3_MASK               0x000000FFu  /**< \brief (DSU_CID3) MASK Register */

+

+/** \brief DSU hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct {

+  __O  DSU_CTRL_Type             CTRL;        /**< \brief Offset: 0x0000 ( /W  8) Control Register */

+  __IO DSU_STATUSA_Type          STATUSA;     /**< \brief Offset: 0x0001 (R/W  8) Status Register A */

+  __I  DSU_STATUSB_Type          STATUSB;     /**< \brief Offset: 0x0002 (R/   8) Status Register B */

+       RoReg8                    Reserved1[0x1];

+  __IO DSU_ADDR_Type             ADDR;        /**< \brief Offset: 0x0004 (R/W 32) Address Register */

+  __IO DSU_LENGTH_Type           LENGTH;      /**< \brief Offset: 0x0008 (R/W 32) Length Register */

+  __IO DSU_DATA_Type             DATA;        /**< \brief Offset: 0x000C (R/W 32) Data Register */

+  __IO DSU_DCC_Type              DCC[2];      /**< \brief Offset: 0x0010 (R/W 32) Debug Communication Channel Register */

+  __I  DSU_DID_Type              DID;         /**< \brief Offset: 0x0018 (R/  32) Device Identification Register */

+       RoReg8                    Reserved2[0xD4];

+  __IO DSU_DCFG_Type             DCFG[2];     /**< \brief Offset: 0x00F0 (R/W 32) Device Configuration Register */

+  __IO DSU_UPTM_Type             UPTM;        /**< \brief Offset: 0x00F8 (R/W 32) UnProtected Test Mode Register */

+  __IO DSU_TESTMODE_Type         TESTMODE;    /**< \brief Offset: 0x00FC (R/W 32) Test Mode Register */

+       RoReg8                    Reserved3[0xF00];

+  __I  DSU_ENTRY_Type            ENTRY[2];    /**< \brief Offset: 0x1000 (R/  32) CoreSight ROM Table Entry Register */

+  __I  DSU_END_Type              END;         /**< \brief Offset: 0x1008 (R/  32) CoreSight ROM Table End Register */

+       RoReg8                    Reserved4[0xFC0];

+  __I  DSU_MEMTYPE_Type          MEMTYPE;     /**< \brief Offset: 0x1FCC (R/  32) CoreSight ROM Table Memory Type Register */

+  __I  DSU_PID4_Type             PID4;        /**< \brief Offset: 0x1FD0 (R/  32) Peripheral Identification Register 4 */

+  __I  DSU_PID5_Type             PID5;        /**< \brief Offset: 0x1FD4 (R/  32) Peripheral Identification Register 5 */

+  __I  DSU_PID6_Type             PID6;        /**< \brief Offset: 0x1FD8 (R/  32) Peripheral Identification Register 6 */

+  __I  DSU_PID7_Type             PID7;        /**< \brief Offset: 0x1FDC (R/  32) Peripheral Identification Register 7 */

+  __I  DSU_PID0_Type             PID0;        /**< \brief Offset: 0x1FE0 (R/  32) Peripheral Identification Register 0 */

+  __I  DSU_PID1_Type             PID1;        /**< \brief Offset: 0x1FE4 (R/  32) Peripheral Identification Register 1 */

+  __I  DSU_PID2_Type             PID2;        /**< \brief Offset: 0x1FE8 (R/  32) Peripheral Identification Register 2 */

+  __I  DSU_PID3_Type             PID3;        /**< \brief Offset: 0x1FEC (R/  32) Peripheral Identification Register 3 */

+  __I  DSU_CID0_Type             CID0;        /**< \brief Offset: 0x1FF0 (R/  32) Component Identification Register 0 */

+  __I  DSU_CID1_Type             CID1;        /**< \brief Offset: 0x1FF4 (R/  32) Component Identification Register 1 */

+  __I  DSU_CID2_Type             CID2;        /**< \brief Offset: 0x1FF8 (R/  32) Component Identification Register 2 */

+  __I  DSU_CID3_Type             CID3;        /**< \brief Offset: 0x1FFC (R/  32) Component Identification Register 3 */

+} Dsu;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/*@}*/

+

+#endif /* _SAMD20_DSU_COMPONENT_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_eic.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_eic.h
new file mode 100644
index 0000000..443d585
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_eic.h
@@ -0,0 +1,370 @@
+/**

+ * \file

+ *

+ * \brief Component description for EIC

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_EIC_COMPONENT_

+#define _SAMD20_EIC_COMPONENT_

+

+/* ========================================================================== */

+/**  SOFTWARE API DEFINITION FOR EIC */

+/* ========================================================================== */

+/** \addtogroup SAMD20_EIC External Interrupt Controller */

+/*@{*/

+

+#define REV_EIC                     0x101

+

+/* -------- EIC_CTRL : (EIC Offset: 0x00) (R/W  8) Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  SWRST:1;          /*!< bit:      0  Software Reset                     */

+    uint8_t  ENABLE:1;         /*!< bit:      1  Enable                             */

+    uint8_t  :6;               /*!< bit:  2.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} EIC_CTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define EIC_CTRL_OFFSET             0x00         /**< \brief (EIC_CTRL offset) Control Register */

+#define EIC_CTRL_RESETVALUE         0x00         /**< \brief (EIC_CTRL reset_value) Control Register */

+

+#define EIC_CTRL_SWRST_Pos          0            /**< \brief (EIC_CTRL) Software Reset */

+#define EIC_CTRL_SWRST              (0x1u << EIC_CTRL_SWRST_Pos)

+#define EIC_CTRL_ENABLE_Pos         1            /**< \brief (EIC_CTRL) Enable */

+#define EIC_CTRL_ENABLE             (0x1u << EIC_CTRL_ENABLE_Pos)

+#define EIC_CTRL_MASK               0x03u        /**< \brief (EIC_CTRL) MASK Register */

+

+/* -------- EIC_STATUS : (EIC Offset: 0x01) (R/   8) Status Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  :7;               /*!< bit:  0.. 6  Reserved                           */

+    uint8_t  SYNCBUSY:1;       /*!< bit:      7  Sync Busy                          */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} EIC_STATUS_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define EIC_STATUS_OFFSET           0x01         /**< \brief (EIC_STATUS offset) Status Register */

+#define EIC_STATUS_RESETVALUE       0x00         /**< \brief (EIC_STATUS reset_value) Status Register */

+

+#define EIC_STATUS_SYNCBUSY_Pos     7            /**< \brief (EIC_STATUS) Sync Busy */

+#define EIC_STATUS_SYNCBUSY         (0x1u << EIC_STATUS_SYNCBUSY_Pos)

+#define EIC_STATUS_MASK             0x80u        /**< \brief (EIC_STATUS) MASK Register */

+

+/* -------- EIC_NMICTRL : (EIC Offset: 0x02) (R/W  8) NMI Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  NMISENSE:3;       /*!< bit:  0.. 2  NMI Input Sense Configuration      */

+    uint8_t  NMIFILTEN:1;      /*!< bit:      3  NMI Filter Enable                  */

+    uint8_t  :4;               /*!< bit:  4.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} EIC_NMICTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define EIC_NMICTRL_OFFSET          0x02         /**< \brief (EIC_NMICTRL offset) NMI Control Register */

+#define EIC_NMICTRL_RESETVALUE      0x00         /**< \brief (EIC_NMICTRL reset_value) NMI Control Register */

+

+#define EIC_NMICTRL_NMISENSE_Pos    0            /**< \brief (EIC_NMICTRL) NMI Input Sense Configuration */

+#define EIC_NMICTRL_NMISENSE_Msk    (0x7u << EIC_NMICTRL_NMISENSE_Pos)

+#define EIC_NMICTRL_NMISENSE(value) ((EIC_NMICTRL_NMISENSE_Msk & ((value) << EIC_NMICTRL_NMISENSE_Pos)))

+#define   EIC_NMICTRL_NMISENSE_NONE (0x0u <<  0) /**< \brief (EIC_NMICTRL) No detection */

+#define   EIC_NMICTRL_NMISENSE_RISE (0x1u <<  0) /**< \brief (EIC_NMICTRL) Rising edge detection */

+#define   EIC_NMICTRL_NMISENSE_FALL (0x2u <<  0) /**< \brief (EIC_NMICTRL) Falling edge detection */

+#define   EIC_NMICTRL_NMISENSE_BOTH (0x3u <<  0) /**< \brief (EIC_NMICTRL) Both edges detection */

+#define   EIC_NMICTRL_NMISENSE_HIGH (0x4u <<  0) /**< \brief (EIC_NMICTRL) High level detection */

+#define   EIC_NMICTRL_NMISENSE_LOW  (0x5u <<  0) /**< \brief (EIC_NMICTRL) Low level detection */

+#define EIC_NMICTRL_NMIFILTEN_Pos   3            /**< \brief (EIC_NMICTRL) NMI Filter Enable */

+#define EIC_NMICTRL_NMIFILTEN       (0x1u << EIC_NMICTRL_NMIFILTEN_Pos)

+#define EIC_NMICTRL_MASK            0x0Fu        /**< \brief (EIC_NMICTRL) MASK Register */

+

+/* -------- EIC_NMIFLAG : (EIC Offset: 0x03) (R/W  8) NMI Interrupt Flag Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  NMI:1;            /*!< bit:      0  NMI Interrupt Flag                 */

+    uint8_t  :7;               /*!< bit:  1.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} EIC_NMIFLAG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define EIC_NMIFLAG_OFFSET          0x03         /**< \brief (EIC_NMIFLAG offset) NMI Interrupt Flag Register */

+#define EIC_NMIFLAG_RESETVALUE      0x00         /**< \brief (EIC_NMIFLAG reset_value) NMI Interrupt Flag Register */

+

+#define EIC_NMIFLAG_NMI_Pos         0            /**< \brief (EIC_NMIFLAG) NMI Interrupt Flag */

+#define EIC_NMIFLAG_NMI             (0x1u << EIC_NMIFLAG_NMI_Pos)

+#define EIC_NMIFLAG_MASK            0x01u        /**< \brief (EIC_NMIFLAG) MASK Register */

+

+/* -------- EIC_EVCTRL : (EIC Offset: 0x04) (R/W 32) Event Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t EXTINTEO:32;      /*!< bit:  0..31  External Interrupt Event Output Enable */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} EIC_EVCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define EIC_EVCTRL_OFFSET           0x04         /**< \brief (EIC_EVCTRL offset) Event Control Register */

+#define EIC_EVCTRL_RESETVALUE       0x00000000   /**< \brief (EIC_EVCTRL reset_value) Event Control Register */

+

+#define EIC_EVCTRL_EXTINTEO_Pos     0            /**< \brief (EIC_EVCTRL) External Interrupt Event Output Enable */

+#define EIC_EVCTRL_EXTINTEO_Msk     (0xFFFFFFFFu << EIC_EVCTRL_EXTINTEO_Pos)

+#define EIC_EVCTRL_EXTINTEO(value)  ((EIC_EVCTRL_EXTINTEO_Msk & ((value) << EIC_EVCTRL_EXTINTEO_Pos)))

+#define EIC_EVCTRL_MASK             0xFFFFFFFFu  /**< \brief (EIC_EVCTRL) MASK Register */

+

+/* -------- EIC_INTENCLR : (EIC Offset: 0x08) (R/W 32) Interrupt Enable Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t EXTINT:16;        /*!< bit:  0..15  External Interrupt Disable         */

+    uint32_t :16;              /*!< bit: 16..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} EIC_INTENCLR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define EIC_INTENCLR_OFFSET         0x08         /**< \brief (EIC_INTENCLR offset) Interrupt Enable Clear Register */

+#define EIC_INTENCLR_RESETVALUE     0x00000000   /**< \brief (EIC_INTENCLR reset_value) Interrupt Enable Clear Register */

+

+#define EIC_INTENCLR_EXTINT_Pos     0            /**< \brief (EIC_INTENCLR) External Interrupt Disable */

+#define EIC_INTENCLR_EXTINT_Msk     (0xFFFFu << EIC_INTENCLR_EXTINT_Pos)

+#define EIC_INTENCLR_EXTINT(value)  ((EIC_INTENCLR_EXTINT_Msk & ((value) << EIC_INTENCLR_EXTINT_Pos)))

+#define EIC_INTENCLR_MASK           0x0000FFFFu  /**< \brief (EIC_INTENCLR) MASK Register */

+

+/* -------- EIC_INTENSET : (EIC Offset: 0x0C) (R/W 32) Interrupt Enable Set Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t EXTINT:16;        /*!< bit:  0..15  External Interrupt Disable         */

+    uint32_t :16;              /*!< bit: 16..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} EIC_INTENSET_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define EIC_INTENSET_OFFSET         0x0C         /**< \brief (EIC_INTENSET offset) Interrupt Enable Set Register */

+#define EIC_INTENSET_RESETVALUE     0x00000000   /**< \brief (EIC_INTENSET reset_value) Interrupt Enable Set Register */

+

+#define EIC_INTENSET_EXTINT_Pos     0            /**< \brief (EIC_INTENSET) External Interrupt Disable */

+#define EIC_INTENSET_EXTINT_Msk     (0xFFFFu << EIC_INTENSET_EXTINT_Pos)

+#define EIC_INTENSET_EXTINT(value)  ((EIC_INTENSET_EXTINT_Msk & ((value) << EIC_INTENSET_EXTINT_Pos)))

+#define EIC_INTENSET_MASK           0x0000FFFFu  /**< \brief (EIC_INTENSET) MASK Register */

+

+/* -------- EIC_INTFLAG : (EIC Offset: 0x10) (R/W 32) Interrupt Flag Status and Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t EXTINT:16;        /*!< bit:  0..15  External Interrupt Flag            */

+    uint32_t :16;              /*!< bit: 16..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} EIC_INTFLAG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define EIC_INTFLAG_OFFSET          0x10         /**< \brief (EIC_INTFLAG offset) Interrupt Flag Status and Clear Register */

+#define EIC_INTFLAG_RESETVALUE      0x00000000   /**< \brief (EIC_INTFLAG reset_value) Interrupt Flag Status and Clear Register */

+

+#define EIC_INTFLAG_EXTINT_Pos      0            /**< \brief (EIC_INTFLAG) External Interrupt Flag */

+#define EIC_INTFLAG_EXTINT_Msk      (0xFFFFu << EIC_INTFLAG_EXTINT_Pos)

+#define EIC_INTFLAG_EXTINT(value)   ((EIC_INTFLAG_EXTINT_Msk & ((value) << EIC_INTFLAG_EXTINT_Pos)))

+#define EIC_INTFLAG_MASK            0x0000FFFFu  /**< \brief (EIC_INTFLAG) MASK Register */

+

+/* -------- EIC_WAKEUP : (EIC Offset: 0x14) (R/W 32) Wake-up Enable Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t WAKEUPEN:16;      /*!< bit:  0..15  External Interrupt Wake-Up Enable  */

+    uint32_t :16;              /*!< bit: 16..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} EIC_WAKEUP_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define EIC_WAKEUP_OFFSET           0x14         /**< \brief (EIC_WAKEUP offset) Wake-up Enable Register */

+#define EIC_WAKEUP_RESETVALUE       0x00000000   /**< \brief (EIC_WAKEUP reset_value) Wake-up Enable Register */

+

+#define EIC_WAKEUP_WAKEUPEN_Pos     0            /**< \brief (EIC_WAKEUP) External Interrupt Wake-Up Enable */

+#define EIC_WAKEUP_WAKEUPEN_Msk     (0xFFFFu << EIC_WAKEUP_WAKEUPEN_Pos)

+#define EIC_WAKEUP_WAKEUPEN(value)  ((EIC_WAKEUP_WAKEUPEN_Msk & ((value) << EIC_WAKEUP_WAKEUPEN_Pos)))

+#define EIC_WAKEUP_MASK             0x0000FFFFu  /**< \brief (EIC_WAKEUP) MASK Register */

+

+/* -------- EIC_CONFIG : (EIC Offset: 0x18) (R/W 32) Config Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t SENSE0:3;         /*!< bit:  0.. 2  Input Sense Configuration 0        */

+    uint32_t FILTEN0:1;        /*!< bit:      3  Filter Enable 0                    */

+    uint32_t SENSE1:3;         /*!< bit:  4.. 6  Input Sense Configuration 1        */

+    uint32_t FILTEN1:1;        /*!< bit:      7  Filter Enable 1                    */

+    uint32_t SENSE2:3;         /*!< bit:  8..10  Input Sense Configuration 2        */

+    uint32_t FILTEN2:1;        /*!< bit:     11  Filter Enable 2                    */

+    uint32_t SENSE3:3;         /*!< bit: 12..14  Input Sense Configuration 3        */

+    uint32_t FILTEN3:1;        /*!< bit:     15  Filter Enable 3                    */

+    uint32_t SENSE4:3;         /*!< bit: 16..18  Input Sense Configuration 4        */

+    uint32_t FILTEN4:1;        /*!< bit:     19  Filter Enable 4                    */

+    uint32_t SENSE5:3;         /*!< bit: 20..22  Input Sense Configuration 5        */

+    uint32_t FILTEN5:1;        /*!< bit:     23  Filter Enable 5                    */

+    uint32_t SENSE6:3;         /*!< bit: 24..26  Input Sense Configuration 6        */

+    uint32_t FILTEN6:1;        /*!< bit:     27  Filter Enable 6                    */

+    uint32_t SENSE7:3;         /*!< bit: 28..30  Input Sense Configuration 7        */

+    uint32_t FILTEN7:1;        /*!< bit:     31  Filter Enable 7                    */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} EIC_CONFIG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define EIC_CONFIG_OFFSET           0x18         /**< \brief (EIC_CONFIG offset) Config Register */

+#define EIC_CONFIG_RESETVALUE       0x00000000   /**< \brief (EIC_CONFIG reset_value) Config Register */

+

+#define EIC_CONFIG_SENSE0_Pos       0            /**< \brief (EIC_CONFIG) Input Sense Configuration 0 */

+#define EIC_CONFIG_SENSE0_Msk       (0x7u << EIC_CONFIG_SENSE0_Pos)

+#define EIC_CONFIG_SENSE0(value)    ((EIC_CONFIG_SENSE0_Msk & ((value) << EIC_CONFIG_SENSE0_Pos)))

+#define   EIC_CONFIG_SENSE0_NONE    (0x0u <<  0) /**< \brief (EIC_CONFIG) No detection */

+#define   EIC_CONFIG_SENSE0_RISE    (0x1u <<  0) /**< \brief (EIC_CONFIG) Rising edge detection */

+#define   EIC_CONFIG_SENSE0_FALL    (0x2u <<  0) /**< \brief (EIC_CONFIG) Falling edge detection */

+#define   EIC_CONFIG_SENSE0_BOTH    (0x3u <<  0) /**< \brief (EIC_CONFIG) Both edges detection */

+#define   EIC_CONFIG_SENSE0_HIGH    (0x4u <<  0) /**< \brief (EIC_CONFIG) High level detection */

+#define   EIC_CONFIG_SENSE0_LOW     (0x5u <<  0) /**< \brief (EIC_CONFIG) Low level detection */

+#define EIC_CONFIG_FILTEN0_Pos      3            /**< \brief (EIC_CONFIG) Filter Enable 0 */

+#define EIC_CONFIG_FILTEN0          (0x1u << EIC_CONFIG_FILTEN0_Pos)

+#define EIC_CONFIG_SENSE1_Pos       4            /**< \brief (EIC_CONFIG) Input Sense Configuration 1 */

+#define EIC_CONFIG_SENSE1_Msk       (0x7u << EIC_CONFIG_SENSE1_Pos)

+#define EIC_CONFIG_SENSE1(value)    ((EIC_CONFIG_SENSE1_Msk & ((value) << EIC_CONFIG_SENSE1_Pos)))

+#define   EIC_CONFIG_SENSE1_NONE    (0x0u <<  4) /**< \brief (EIC_CONFIG) No detection */

+#define   EIC_CONFIG_SENSE1_RISE    (0x1u <<  4) /**< \brief (EIC_CONFIG) Rising edge detection */

+#define   EIC_CONFIG_SENSE1_FALL    (0x2u <<  4) /**< \brief (EIC_CONFIG) Falling edge detection */

+#define   EIC_CONFIG_SENSE1_BOTH    (0x3u <<  4) /**< \brief (EIC_CONFIG) Both edges detection */

+#define   EIC_CONFIG_SENSE1_HIGH    (0x4u <<  4) /**< \brief (EIC_CONFIG) High level detection */

+#define   EIC_CONFIG_SENSE1_LOW     (0x5u <<  4) /**< \brief (EIC_CONFIG) Low level detection */

+#define EIC_CONFIG_FILTEN1_Pos      7            /**< \brief (EIC_CONFIG) Filter Enable 1 */

+#define EIC_CONFIG_FILTEN1          (0x1u << EIC_CONFIG_FILTEN1_Pos)

+#define EIC_CONFIG_SENSE2_Pos       8            /**< \brief (EIC_CONFIG) Input Sense Configuration 2 */

+#define EIC_CONFIG_SENSE2_Msk       (0x7u << EIC_CONFIG_SENSE2_Pos)

+#define EIC_CONFIG_SENSE2(value)    ((EIC_CONFIG_SENSE2_Msk & ((value) << EIC_CONFIG_SENSE2_Pos)))

+#define   EIC_CONFIG_SENSE2_NONE    (0x0u <<  8) /**< \brief (EIC_CONFIG) No detection */

+#define   EIC_CONFIG_SENSE2_RISE    (0x1u <<  8) /**< \brief (EIC_CONFIG) Rising edge detection */

+#define   EIC_CONFIG_SENSE2_FALL    (0x2u <<  8) /**< \brief (EIC_CONFIG) Falling edge detection */

+#define   EIC_CONFIG_SENSE2_BOTH    (0x3u <<  8) /**< \brief (EIC_CONFIG) Both edges detection */

+#define   EIC_CONFIG_SENSE2_HIGH    (0x4u <<  8) /**< \brief (EIC_CONFIG) High level detection */

+#define   EIC_CONFIG_SENSE2_LOW     (0x5u <<  8) /**< \brief (EIC_CONFIG) Low level detection */

+#define EIC_CONFIG_FILTEN2_Pos      11           /**< \brief (EIC_CONFIG) Filter Enable 2 */

+#define EIC_CONFIG_FILTEN2          (0x1u << EIC_CONFIG_FILTEN2_Pos)

+#define EIC_CONFIG_SENSE3_Pos       12           /**< \brief (EIC_CONFIG) Input Sense Configuration 3 */

+#define EIC_CONFIG_SENSE3_Msk       (0x7u << EIC_CONFIG_SENSE3_Pos)

+#define EIC_CONFIG_SENSE3(value)    ((EIC_CONFIG_SENSE3_Msk & ((value) << EIC_CONFIG_SENSE3_Pos)))

+#define   EIC_CONFIG_SENSE3_NONE    (0x0u << 12) /**< \brief (EIC_CONFIG) No detection */

+#define   EIC_CONFIG_SENSE3_RISE    (0x1u << 12) /**< \brief (EIC_CONFIG) Rising edge detection */

+#define   EIC_CONFIG_SENSE3_FALL    (0x2u << 12) /**< \brief (EIC_CONFIG) Falling edge detection */

+#define   EIC_CONFIG_SENSE3_BOTH    (0x3u << 12) /**< \brief (EIC_CONFIG) Both edges detection */

+#define   EIC_CONFIG_SENSE3_HIGH    (0x4u << 12) /**< \brief (EIC_CONFIG) High level detection */

+#define   EIC_CONFIG_SENSE3_LOW     (0x5u << 12) /**< \brief (EIC_CONFIG) Low level detection */

+#define EIC_CONFIG_FILTEN3_Pos      15           /**< \brief (EIC_CONFIG) Filter Enable 3 */

+#define EIC_CONFIG_FILTEN3          (0x1u << EIC_CONFIG_FILTEN3_Pos)

+#define EIC_CONFIG_SENSE4_Pos       16           /**< \brief (EIC_CONFIG) Input Sense Configuration 4 */

+#define EIC_CONFIG_SENSE4_Msk       (0x7u << EIC_CONFIG_SENSE4_Pos)

+#define EIC_CONFIG_SENSE4(value)    ((EIC_CONFIG_SENSE4_Msk & ((value) << EIC_CONFIG_SENSE4_Pos)))

+#define   EIC_CONFIG_SENSE4_NONE    (0x0u << 16) /**< \brief (EIC_CONFIG) No detection */

+#define   EIC_CONFIG_SENSE4_RISE    (0x1u << 16) /**< \brief (EIC_CONFIG) Rising edge detection */

+#define   EIC_CONFIG_SENSE4_FALL    (0x2u << 16) /**< \brief (EIC_CONFIG) Falling edge detection */

+#define   EIC_CONFIG_SENSE4_BOTH    (0x3u << 16) /**< \brief (EIC_CONFIG) Both edges detection */

+#define   EIC_CONFIG_SENSE4_HIGH    (0x4u << 16) /**< \brief (EIC_CONFIG) High level detection */

+#define   EIC_CONFIG_SENSE4_LOW     (0x5u << 16) /**< \brief (EIC_CONFIG) Low level detection */

+#define EIC_CONFIG_FILTEN4_Pos      19           /**< \brief (EIC_CONFIG) Filter Enable 4 */

+#define EIC_CONFIG_FILTEN4          (0x1u << EIC_CONFIG_FILTEN4_Pos)

+#define EIC_CONFIG_SENSE5_Pos       20           /**< \brief (EIC_CONFIG) Input Sense Configuration 5 */

+#define EIC_CONFIG_SENSE5_Msk       (0x7u << EIC_CONFIG_SENSE5_Pos)

+#define EIC_CONFIG_SENSE5(value)    ((EIC_CONFIG_SENSE5_Msk & ((value) << EIC_CONFIG_SENSE5_Pos)))

+#define   EIC_CONFIG_SENSE5_NONE    (0x0u << 20) /**< \brief (EIC_CONFIG) No detection */

+#define   EIC_CONFIG_SENSE5_RISE    (0x1u << 20) /**< \brief (EIC_CONFIG) Rising edge detection */

+#define   EIC_CONFIG_SENSE5_FALL    (0x2u << 20) /**< \brief (EIC_CONFIG) Falling edge detection */

+#define   EIC_CONFIG_SENSE5_BOTH    (0x3u << 20) /**< \brief (EIC_CONFIG) Both edges detection */

+#define   EIC_CONFIG_SENSE5_HIGH    (0x4u << 20) /**< \brief (EIC_CONFIG) High level detection */

+#define   EIC_CONFIG_SENSE5_LOW     (0x5u << 20) /**< \brief (EIC_CONFIG) Low level detection */

+#define EIC_CONFIG_FILTEN5_Pos      23           /**< \brief (EIC_CONFIG) Filter Enable 5 */

+#define EIC_CONFIG_FILTEN5          (0x1u << EIC_CONFIG_FILTEN5_Pos)

+#define EIC_CONFIG_SENSE6_Pos       24           /**< \brief (EIC_CONFIG) Input Sense Configuration 6 */

+#define EIC_CONFIG_SENSE6_Msk       (0x7u << EIC_CONFIG_SENSE6_Pos)

+#define EIC_CONFIG_SENSE6(value)    ((EIC_CONFIG_SENSE6_Msk & ((value) << EIC_CONFIG_SENSE6_Pos)))

+#define   EIC_CONFIG_SENSE6_NONE    (0x0u << 24) /**< \brief (EIC_CONFIG) No detection */

+#define   EIC_CONFIG_SENSE6_RISE    (0x1u << 24) /**< \brief (EIC_CONFIG) Rising edge detection */

+#define   EIC_CONFIG_SENSE6_FALL    (0x2u << 24) /**< \brief (EIC_CONFIG) Falling edge detection */

+#define   EIC_CONFIG_SENSE6_BOTH    (0x3u << 24) /**< \brief (EIC_CONFIG) Both edges detection */

+#define   EIC_CONFIG_SENSE6_HIGH    (0x4u << 24) /**< \brief (EIC_CONFIG) High level detection */

+#define   EIC_CONFIG_SENSE6_LOW     (0x5u << 24) /**< \brief (EIC_CONFIG) Low level detection */

+#define EIC_CONFIG_FILTEN6_Pos      27           /**< \brief (EIC_CONFIG) Filter Enable 6 */

+#define EIC_CONFIG_FILTEN6          (0x1u << EIC_CONFIG_FILTEN6_Pos)

+#define EIC_CONFIG_SENSE7_Pos       28           /**< \brief (EIC_CONFIG) Input Sense Configuration 7 */

+#define EIC_CONFIG_SENSE7_Msk       (0x7u << EIC_CONFIG_SENSE7_Pos)

+#define EIC_CONFIG_SENSE7(value)    ((EIC_CONFIG_SENSE7_Msk & ((value) << EIC_CONFIG_SENSE7_Pos)))

+#define   EIC_CONFIG_SENSE7_NONE    (0x0u << 28) /**< \brief (EIC_CONFIG) No detection */

+#define   EIC_CONFIG_SENSE7_RISE    (0x1u << 28) /**< \brief (EIC_CONFIG) Rising edge detection */

+#define   EIC_CONFIG_SENSE7_FALL    (0x2u << 28) /**< \brief (EIC_CONFIG) Falling edge detection */

+#define   EIC_CONFIG_SENSE7_BOTH    (0x3u << 28) /**< \brief (EIC_CONFIG) Both edges detection */

+#define   EIC_CONFIG_SENSE7_HIGH    (0x4u << 28) /**< \brief (EIC_CONFIG) High level detection */

+#define   EIC_CONFIG_SENSE7_LOW     (0x5u << 28) /**< \brief (EIC_CONFIG) Low level detection */

+#define EIC_CONFIG_FILTEN7_Pos      31           /**< \brief (EIC_CONFIG) Filter Enable 7 */

+#define EIC_CONFIG_FILTEN7          (0x1u << EIC_CONFIG_FILTEN7_Pos)

+#define EIC_CONFIG_MASK             0xFFFFFFFFu  /**< \brief (EIC_CONFIG) MASK Register */

+

+/** \brief EIC hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct {

+  __IO EIC_CTRL_Type             CTRL;        /**< \brief Offset: 0x00 (R/W  8) Control Register */

+  __I  EIC_STATUS_Type           STATUS;      /**< \brief Offset: 0x01 (R/   8) Status Register */

+  __IO EIC_NMICTRL_Type          NMICTRL;     /**< \brief Offset: 0x02 (R/W  8) NMI Control Register */

+  __IO EIC_NMIFLAG_Type          NMIFLAG;     /**< \brief Offset: 0x03 (R/W  8) NMI Interrupt Flag Register */

+  __IO EIC_EVCTRL_Type           EVCTRL;      /**< \brief Offset: 0x04 (R/W 32) Event Control Register */

+  __IO EIC_INTENCLR_Type         INTENCLR;    /**< \brief Offset: 0x08 (R/W 32) Interrupt Enable Clear Register */

+  __IO EIC_INTENSET_Type         INTENSET;    /**< \brief Offset: 0x0C (R/W 32) Interrupt Enable Set Register */

+  __IO EIC_INTFLAG_Type          INTFLAG;     /**< \brief Offset: 0x10 (R/W 32) Interrupt Flag Status and Clear Register */

+  __IO EIC_WAKEUP_Type           WAKEUP;      /**< \brief Offset: 0x14 (R/W 32) Wake-up Enable Register */

+  __IO EIC_CONFIG_Type           CONFIG[2];   /**< \brief Offset: 0x18 (R/W 32) Config Register [NUMBER_OF_CONFIG_REGS] */

+} Eic;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/*@}*/

+

+#endif /* _SAMD20_EIC_COMPONENT_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_evsys.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_evsys.h
new file mode 100644
index 0000000..ede6bc0
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_evsys.h
@@ -0,0 +1,406 @@
+/**

+ * \file

+ *

+ * \brief Component description for EVSYS

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_EVSYS_COMPONENT_

+#define _SAMD20_EVSYS_COMPONENT_

+

+/* ========================================================================== */

+/**  SOFTWARE API DEFINITION FOR EVSYS */

+/* ========================================================================== */

+/** \addtogroup SAMD20_EVSYS Event System Interface */

+/*@{*/

+

+#define REV_EVSYS                   0x100

+

+/* -------- EVSYS_CTRL : (EVSYS Offset: 0x00) ( /W  8) Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  SWRST:1;          /*!< bit:      0  Software Reset                     */

+    uint8_t  :3;               /*!< bit:  1.. 3  Reserved                           */

+    uint8_t  GCLKREQ:1;        /*!< bit:      4  Generic Clock Request              */

+    uint8_t  :3;               /*!< bit:  5.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} EVSYS_CTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define EVSYS_CTRL_OFFSET           0x00         /**< \brief (EVSYS_CTRL offset) Control Register */

+#define EVSYS_CTRL_RESETVALUE       0x00         /**< \brief (EVSYS_CTRL reset_value) Control Register */

+

+#define EVSYS_CTRL_SWRST_Pos        0            /**< \brief (EVSYS_CTRL) Software Reset */

+#define EVSYS_CTRL_SWRST            (0x1u << EVSYS_CTRL_SWRST_Pos)

+#define EVSYS_CTRL_GCLKREQ_Pos      4            /**< \brief (EVSYS_CTRL) Generic Clock Request */

+#define EVSYS_CTRL_GCLKREQ          (0x1u << EVSYS_CTRL_GCLKREQ_Pos)

+#define EVSYS_CTRL_MASK             0x11u        /**< \brief (EVSYS_CTRL) MASK Register */

+

+/* -------- EVSYS_CHANNEL : (EVSYS Offset: 0x04) (R/W 32) Channel Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t CHANNEL:8;        /*!< bit:  0.. 7  Channel Selection                  */

+    uint32_t SWEVT:1;          /*!< bit:      8  Software Event                     */

+    uint32_t :7;               /*!< bit:  9..15  Reserved                           */

+    uint32_t EVGEN:8;          /*!< bit: 16..23  Event Generator Selection          */

+    uint32_t PATH:2;           /*!< bit: 24..25  Path Selection                     */

+    uint32_t EDGSEL:2;         /*!< bit: 26..27  Edge Selection                     */

+    uint32_t :4;               /*!< bit: 28..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} EVSYS_CHANNEL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define EVSYS_CHANNEL_OFFSET        0x04         /**< \brief (EVSYS_CHANNEL offset) Channel Register */

+#define EVSYS_CHANNEL_RESETVALUE    0x00000000   /**< \brief (EVSYS_CHANNEL reset_value) Channel Register */

+

+#define EVSYS_CHANNEL_CHANNEL_Pos   0            /**< \brief (EVSYS_CHANNEL) Channel Selection */

+#define EVSYS_CHANNEL_CHANNEL_Msk   (0xFFu << EVSYS_CHANNEL_CHANNEL_Pos)

+#define EVSYS_CHANNEL_CHANNEL(value) ((EVSYS_CHANNEL_CHANNEL_Msk & ((value) << EVSYS_CHANNEL_CHANNEL_Pos)))

+#define EVSYS_CHANNEL_SWEVT_Pos     8            /**< \brief (EVSYS_CHANNEL) Software Event */

+#define EVSYS_CHANNEL_SWEVT         (0x1u << EVSYS_CHANNEL_SWEVT_Pos)

+#define EVSYS_CHANNEL_EVGEN_Pos     16           /**< \brief (EVSYS_CHANNEL) Event Generator Selection */

+#define EVSYS_CHANNEL_EVGEN_Msk     (0xFFu << EVSYS_CHANNEL_EVGEN_Pos)

+#define EVSYS_CHANNEL_EVGEN(value)  ((EVSYS_CHANNEL_EVGEN_Msk & ((value) << EVSYS_CHANNEL_EVGEN_Pos)))

+#define EVSYS_CHANNEL_PATH_Pos      24           /**< \brief (EVSYS_CHANNEL) Path Selection */

+#define EVSYS_CHANNEL_PATH_Msk      (0x3u << EVSYS_CHANNEL_PATH_Pos)

+#define EVSYS_CHANNEL_PATH(value)   ((EVSYS_CHANNEL_PATH_Msk & ((value) << EVSYS_CHANNEL_PATH_Pos)))

+#define   EVSYS_CHANNEL_PATH_SYNCHRONOUS (0x0u << 24) /**< \brief (EVSYS_CHANNEL) Synchronous path */

+#define   EVSYS_CHANNEL_PATH_RESYNCHRONIZED (0x1u << 24) /**< \brief (EVSYS_CHANNEL) Resynchronized path */

+#define   EVSYS_CHANNEL_PATH_ASYNCHRONOUS (0x2u << 24) /**< \brief (EVSYS_CHANNEL) Asynchronous path */

+#define EVSYS_CHANNEL_EDGSEL_Pos    26           /**< \brief (EVSYS_CHANNEL) Edge Selection */

+#define EVSYS_CHANNEL_EDGSEL_Msk    (0x3u << EVSYS_CHANNEL_EDGSEL_Pos)

+#define EVSYS_CHANNEL_EDGSEL(value) ((EVSYS_CHANNEL_EDGSEL_Msk & ((value) << EVSYS_CHANNEL_EDGSEL_Pos)))

+#define   EVSYS_CHANNEL_EDGSEL_NO_EVT_OUTPUT (0x0u << 26) /**< \brief (EVSYS_CHANNEL) No Event Output */

+#define   EVSYS_CHANNEL_EDGSEL_RISING_EDGE (0x1u << 26) /**< \brief (EVSYS_CHANNEL) Event detection on the rising edge */

+#define   EVSYS_CHANNEL_EDGSEL_FALLING_EDGE (0x2u << 26) /**< \brief (EVSYS_CHANNEL) Event detection on the falling edge */

+#define   EVSYS_CHANNEL_EDGSEL_BOTH_EDGE (0x3u << 26) /**< \brief (EVSYS_CHANNEL) Event detection on both rising/falling edge */

+#define EVSYS_CHANNEL_MASK          0x0FFF01FFu  /**< \brief (EVSYS_CHANNEL) MASK Register */

+

+/* -------- EVSYS_USER : (EVSYS Offset: 0x08) (R/W 16) User Mux Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t USER:8;           /*!< bit:  0.. 7  User Mux Selection                 */

+    uint16_t CHANNEL:8;        /*!< bit:  8..15  Channel Event Selection            */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} EVSYS_USER_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define EVSYS_USER_OFFSET           0x08         /**< \brief (EVSYS_USER offset) User Mux Register */

+#define EVSYS_USER_RESETVALUE       0x0000       /**< \brief (EVSYS_USER reset_value) User Mux Register */

+

+#define EVSYS_USER_USER_Pos         0            /**< \brief (EVSYS_USER) User Mux Selection */

+#define EVSYS_USER_USER_Msk         (0xFFu << EVSYS_USER_USER_Pos)

+#define EVSYS_USER_USER(value)      ((EVSYS_USER_USER_Msk & ((value) << EVSYS_USER_USER_Pos)))

+#define EVSYS_USER_CHANNEL_Pos      8            /**< \brief (EVSYS_USER) Channel Event Selection */

+#define EVSYS_USER_CHANNEL_Msk      (0xFFu << EVSYS_USER_CHANNEL_Pos)

+#define EVSYS_USER_CHANNEL(value)   ((EVSYS_USER_CHANNEL_Msk & ((value) << EVSYS_USER_CHANNEL_Pos)))

+#define EVSYS_USER_MASK             0xFFFFu      /**< \brief (EVSYS_USER) MASK Register */

+

+/* -------- EVSYS_CHSTATUS : (EVSYS Offset: 0x0C) (R/  32) Channel Status Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t USRRDY0:8;        /*!< bit:  0.. 7  User Ready for Channels 0 to 7 (modulo 16) */

+    uint32_t CHBUSY0:8;        /*!< bit:  8..15  Channels Busy 0 to 7 (modulo 16)   */

+    uint32_t USRRDY1:8;        /*!< bit: 16..23  User Ready for Channels 8 to 15 (modulo 16) */

+    uint32_t CHBUSY1:8;        /*!< bit: 24..31  Channels Busy 8 to 15 (modulo 16)  */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} EVSYS_CHSTATUS_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define EVSYS_CHSTATUS_OFFSET       0x0C         /**< \brief (EVSYS_CHSTATUS offset) Channel Status Register */

+#define EVSYS_CHSTATUS_RESETVALUE   0x00000000   /**< \brief (EVSYS_CHSTATUS reset_value) Channel Status Register */

+

+#define EVSYS_CHSTATUS_USRRDY0_Pos  0            /**< \brief (EVSYS_CHSTATUS) User Ready for Channels 0 to 7 (modulo 16) */

+#define EVSYS_CHSTATUS_USRRDY0_Msk  (0xFFu << EVSYS_CHSTATUS_USRRDY0_Pos)

+#define EVSYS_CHSTATUS_USRRDY0(value) ((EVSYS_CHSTATUS_USRRDY0_Msk & ((value) << EVSYS_CHSTATUS_USRRDY0_Pos)))

+#define   EVSYS_CHSTATUS_USRRDY0_USRRDY0 (0x1u <<  0) /**< \brief (EVSYS_CHSTATUS) User ready for Channel 0 */

+#define   EVSYS_CHSTATUS_USRRDY0_USRRDY1 (0x2u <<  0) /**< \brief (EVSYS_CHSTATUS) User ready for Channel 1 */

+#define   EVSYS_CHSTATUS_USRRDY0_USRRDY2 (0x4u <<  0) /**< \brief (EVSYS_CHSTATUS) User ready for Channel 2 */

+#define   EVSYS_CHSTATUS_USRRDY0_USRRDY3 (0x8u <<  0) /**< \brief (EVSYS_CHSTATUS) User ready for Channel 3 */

+#define   EVSYS_CHSTATUS_USRRDY0_USRRDY4 (0x10u <<  0) /**< \brief (EVSYS_CHSTATUS) User ready for Channel 4 */

+#define   EVSYS_CHSTATUS_USRRDY0_USRRDY5 (0x20u <<  0) /**< \brief (EVSYS_CHSTATUS) User ready for Channel 5 */

+#define   EVSYS_CHSTATUS_USRRDY0_USRRDY6 (0x40u <<  0) /**< \brief (EVSYS_CHSTATUS) User ready for Channel 6 */

+#define   EVSYS_CHSTATUS_USRRDY0_USRRDY7 (0x80u <<  0) /**< \brief (EVSYS_CHSTATUS) User ready for Channel 7 */

+#define EVSYS_CHSTATUS_CHBUSY0_Pos  8            /**< \brief (EVSYS_CHSTATUS) Channels Busy 0 to 7 (modulo 16) */

+#define EVSYS_CHSTATUS_CHBUSY0_Msk  (0xFFu << EVSYS_CHSTATUS_CHBUSY0_Pos)

+#define EVSYS_CHSTATUS_CHBUSY0(value) ((EVSYS_CHSTATUS_CHBUSY0_Msk & ((value) << EVSYS_CHSTATUS_CHBUSY0_Pos)))

+#define   EVSYS_CHSTATUS_CHBUSY0_CHBUSY0 (0x1u <<  8) /**< \brief (EVSYS_CHSTATUS) Channel 0 busy */

+#define   EVSYS_CHSTATUS_CHBUSY0_CHBUSY1 (0x2u <<  8) /**< \brief (EVSYS_CHSTATUS) Channel 1 busy */

+#define   EVSYS_CHSTATUS_CHBUSY0_CHBUSY2 (0x4u <<  8) /**< \brief (EVSYS_CHSTATUS) Channel 2 busy */

+#define   EVSYS_CHSTATUS_CHBUSY0_CHBUSY3 (0x8u <<  8) /**< \brief (EVSYS_CHSTATUS) Channel 3 busy */

+#define   EVSYS_CHSTATUS_CHBUSY0_CHBUSY4 (0x10u <<  8) /**< \brief (EVSYS_CHSTATUS) Channel 4 busy */

+#define   EVSYS_CHSTATUS_CHBUSY0_CHBUSY5 (0x20u <<  8) /**< \brief (EVSYS_CHSTATUS) Channel 5 busy */

+#define   EVSYS_CHSTATUS_CHBUSY0_CHBUSY6 (0x40u <<  8) /**< \brief (EVSYS_CHSTATUS) Channel 6 busy */

+#define   EVSYS_CHSTATUS_CHBUSY0_CHBUSY7 (0x80u <<  8) /**< \brief (EVSYS_CHSTATUS) Channel 7 busy */

+#define EVSYS_CHSTATUS_USRRDY1_Pos  16           /**< \brief (EVSYS_CHSTATUS) User Ready for Channels 8 to 15 (modulo 16) */

+#define EVSYS_CHSTATUS_USRRDY1_Msk  (0xFFu << EVSYS_CHSTATUS_USRRDY1_Pos)

+#define EVSYS_CHSTATUS_USRRDY1(value) ((EVSYS_CHSTATUS_USRRDY1_Msk & ((value) << EVSYS_CHSTATUS_USRRDY1_Pos)))

+#define   EVSYS_CHSTATUS_USRRDY1_USRRDY8 (0x1u << 16) /**< \brief (EVSYS_CHSTATUS) User ready for Channel 8 */

+#define   EVSYS_CHSTATUS_USRRDY1_USRRDY9 (0x2u << 16) /**< \brief (EVSYS_CHSTATUS) User ready for Channel 9 */

+#define   EVSYS_CHSTATUS_USRRDY1_USRRDY10 (0x4u << 16) /**< \brief (EVSYS_CHSTATUS) User ready for Channel 10 */

+#define   EVSYS_CHSTATUS_USRRDY1_USRRDY11 (0x8u << 16) /**< \brief (EVSYS_CHSTATUS) User ready for Channel 11 */

+#define   EVSYS_CHSTATUS_USRRDY1_USRRDY12 (0x10u << 16) /**< \brief (EVSYS_CHSTATUS) User ready for Channel 12 */

+#define   EVSYS_CHSTATUS_USRRDY1_USRRDY13 (0x20u << 16) /**< \brief (EVSYS_CHSTATUS) User ready for Channel 13 */

+#define   EVSYS_CHSTATUS_USRRDY1_USRRDY14 (0x40u << 16) /**< \brief (EVSYS_CHSTATUS) User ready for Channel 14 */

+#define   EVSYS_CHSTATUS_USRRDY1_USRRDY15 (0x80u << 16) /**< \brief (EVSYS_CHSTATUS) User ready for Channel 15 */

+#define EVSYS_CHSTATUS_CHBUSY1_Pos  24           /**< \brief (EVSYS_CHSTATUS) Channels Busy 8 to 15 (modulo 16) */

+#define EVSYS_CHSTATUS_CHBUSY1_Msk  (0xFFu << EVSYS_CHSTATUS_CHBUSY1_Pos)

+#define EVSYS_CHSTATUS_CHBUSY1(value) ((EVSYS_CHSTATUS_CHBUSY1_Msk & ((value) << EVSYS_CHSTATUS_CHBUSY1_Pos)))

+#define   EVSYS_CHSTATUS_CHBUSY1_CHBUSY8 (0x1u << 24) /**< \brief (EVSYS_CHSTATUS) Channel 8 busy */

+#define   EVSYS_CHSTATUS_CHBUSY1_CHBUSY9 (0x2u << 24) /**< \brief (EVSYS_CHSTATUS) Channel 9 busy */

+#define   EVSYS_CHSTATUS_CHBUSY1_CHBUSY10 (0x4u << 24) /**< \brief (EVSYS_CHSTATUS) Channel 10 busy */

+#define   EVSYS_CHSTATUS_CHBUSY1_CHBUSY11 (0x8u << 24) /**< \brief (EVSYS_CHSTATUS) Channel 11 busy */

+#define   EVSYS_CHSTATUS_CHBUSY1_CHBUSY12 (0x10u << 24) /**< \brief (EVSYS_CHSTATUS) Channel 12 busy */

+#define   EVSYS_CHSTATUS_CHBUSY1_CHBUSY13 (0x20u << 24) /**< \brief (EVSYS_CHSTATUS) Channel 13 busy */

+#define   EVSYS_CHSTATUS_CHBUSY1_CHBUSY14 (0x40u << 24) /**< \brief (EVSYS_CHSTATUS) Channel 14 busy */

+#define   EVSYS_CHSTATUS_CHBUSY1_CHBUSY15 (0x80u << 24) /**< \brief (EVSYS_CHSTATUS) Channel 15 busy */

+#define EVSYS_CHSTATUS_MASK         0xFFFFFFFFu  /**< \brief (EVSYS_CHSTATUS) MASK Register */

+

+/* -------- EVSYS_INTENCLR : (EVSYS Offset: 0x10) (R/W 32) Interrupt Enable Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t OVR0:8;           /*!< bit:  0.. 7  Overrun Interrupt Disable for Channels 0 to 7 (modulo 16) */

+    uint32_t EVD0:8;           /*!< bit:  8..15  Event Detection Interrupt Disable for Channels 0 to 7 (modulo 16) */

+    uint32_t OVR1:8;           /*!< bit: 16..23  Overrun Interrupt Disable for Channels 8 to 15 (modulo 16) */

+    uint32_t EVD1:8;           /*!< bit: 24..31  Event Detection Interrupt Disable for Channels 8 to 15 (modulo 16) */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} EVSYS_INTENCLR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define EVSYS_INTENCLR_OFFSET       0x10         /**< \brief (EVSYS_INTENCLR offset) Interrupt Enable Clear Register */

+#define EVSYS_INTENCLR_RESETVALUE   0x00000000   /**< \brief (EVSYS_INTENCLR reset_value) Interrupt Enable Clear Register */

+

+#define EVSYS_INTENCLR_OVR0_Pos     0            /**< \brief (EVSYS_INTENCLR) Overrun Interrupt Disable for Channels 0 to 7 (modulo 16) */

+#define EVSYS_INTENCLR_OVR0_Msk     (0xFFu << EVSYS_INTENCLR_OVR0_Pos)

+#define EVSYS_INTENCLR_OVR0(value)  ((EVSYS_INTENCLR_OVR0_Msk & ((value) << EVSYS_INTENCLR_OVR0_Pos)))

+#define   EVSYS_INTENCLR_OVR0_OVR0  (0x1u <<  0) /**< \brief (EVSYS_INTENCLR) Overrun detected on Channel 0 */

+#define   EVSYS_INTENCLR_OVR0_OVR1  (0x2u <<  0) /**< \brief (EVSYS_INTENCLR) Overrun detected on Channel 1 */

+#define   EVSYS_INTENCLR_OVR0_OVR2  (0x4u <<  0) /**< \brief (EVSYS_INTENCLR) Overrun detected on Channel 2 */

+#define   EVSYS_INTENCLR_OVR0_OVR3  (0x8u <<  0) /**< \brief (EVSYS_INTENCLR) Overrun detected on Channel 3 */

+#define   EVSYS_INTENCLR_OVR0_OVR4  (0x10u <<  0) /**< \brief (EVSYS_INTENCLR) Overrun detected on Channel 4 */

+#define   EVSYS_INTENCLR_OVR0_OVR5  (0x20u <<  0) /**< \brief (EVSYS_INTENCLR) Overrun detected on Channel 5 */

+#define   EVSYS_INTENCLR_OVR0_OVR6  (0x40u <<  0) /**< \brief (EVSYS_INTENCLR) Overrun detected on Channel 6 */

+#define   EVSYS_INTENCLR_OVR0_OVR7  (0x80u <<  0) /**< \brief (EVSYS_INTENCLR) Overrun detected on Channel 7 */

+#define EVSYS_INTENCLR_EVD0_Pos     8            /**< \brief (EVSYS_INTENCLR) Event Detection Interrupt Disable for Channels 0 to 7 (modulo 16) */

+#define EVSYS_INTENCLR_EVD0_Msk     (0xFFu << EVSYS_INTENCLR_EVD0_Pos)

+#define EVSYS_INTENCLR_EVD0(value)  ((EVSYS_INTENCLR_EVD0_Msk & ((value) << EVSYS_INTENCLR_EVD0_Pos)))

+#define   EVSYS_INTENCLR_EVD0_EVD0  (0x1u <<  8) /**< \brief (EVSYS_INTENCLR) Event detected on Channel 0 */

+#define   EVSYS_INTENCLR_EVD0_EVD1  (0x2u <<  8) /**< \brief (EVSYS_INTENCLR) Event detected on Channel 1 */

+#define   EVSYS_INTENCLR_EVD0_EVD2  (0x4u <<  8) /**< \brief (EVSYS_INTENCLR) Event detected on Channel 2 */

+#define   EVSYS_INTENCLR_EVD0_EVD3  (0x8u <<  8) /**< \brief (EVSYS_INTENCLR) Event detected on Channel 3 */

+#define   EVSYS_INTENCLR_EVD0_EVD4  (0x10u <<  8) /**< \brief (EVSYS_INTENCLR) Event detected on Channel 4 */

+#define   EVSYS_INTENCLR_EVD0_EVD5  (0x20u <<  8) /**< \brief (EVSYS_INTENCLR) Event detected on Channel 5 */

+#define   EVSYS_INTENCLR_EVD0_EVD6  (0x40u <<  8) /**< \brief (EVSYS_INTENCLR) Event detected on Channel 6 */

+#define   EVSYS_INTENCLR_EVD0_EVD7  (0x80u <<  8) /**< \brief (EVSYS_INTENCLR) Event detected on Channel 7 */

+#define EVSYS_INTENCLR_OVR1_Pos     16           /**< \brief (EVSYS_INTENCLR) Overrun Interrupt Disable for Channels 8 to 15 (modulo 16) */

+#define EVSYS_INTENCLR_OVR1_Msk     (0xFFu << EVSYS_INTENCLR_OVR1_Pos)

+#define EVSYS_INTENCLR_OVR1(value)  ((EVSYS_INTENCLR_OVR1_Msk & ((value) << EVSYS_INTENCLR_OVR1_Pos)))

+#define   EVSYS_INTENCLR_OVR1_OVR8  (0x1u << 16) /**< \brief (EVSYS_INTENCLR) Overrun detected on Channel 8 */

+#define   EVSYS_INTENCLR_OVR1_OVR9  (0x2u << 16) /**< \brief (EVSYS_INTENCLR) Overrun detected on Channel 9 */

+#define   EVSYS_INTENCLR_OVR1_OVR10 (0x4u << 16) /**< \brief (EVSYS_INTENCLR) Overrun detected on Channel 10 */

+#define   EVSYS_INTENCLR_OVR1_OVR11 (0x8u << 16) /**< \brief (EVSYS_INTENCLR) Overrun detected on Channel 11 */

+#define   EVSYS_INTENCLR_OVR1_OVR12 (0x10u << 16) /**< \brief (EVSYS_INTENCLR) Overrun detected on Channel 12 */

+#define   EVSYS_INTENCLR_OVR1_OVR13 (0x20u << 16) /**< \brief (EVSYS_INTENCLR) Overrun detected on Channel 13 */

+#define   EVSYS_INTENCLR_OVR1_OVR14 (0x40u << 16) /**< \brief (EVSYS_INTENCLR) Overrun detected on Channel 14 */

+#define   EVSYS_INTENCLR_OVR1_OVR15 (0x80u << 16) /**< \brief (EVSYS_INTENCLR) Overrun detected on Channel 15 */

+#define EVSYS_INTENCLR_EVD1_Pos     24           /**< \brief (EVSYS_INTENCLR) Event Detection Interrupt Disable for Channels 8 to 15 (modulo 16) */

+#define EVSYS_INTENCLR_EVD1_Msk     (0xFFu << EVSYS_INTENCLR_EVD1_Pos)

+#define EVSYS_INTENCLR_EVD1(value)  ((EVSYS_INTENCLR_EVD1_Msk & ((value) << EVSYS_INTENCLR_EVD1_Pos)))

+#define   EVSYS_INTENCLR_EVD1_EVD8  (0x1u << 24) /**< \brief (EVSYS_INTENCLR) Event detected on Channel 8 */

+#define   EVSYS_INTENCLR_EVD1_EVD9  (0x2u << 24) /**< \brief (EVSYS_INTENCLR) Event detected on Channel 9 */

+#define   EVSYS_INTENCLR_EVD1_EVD10 (0x4u << 24) /**< \brief (EVSYS_INTENCLR) Event detected on Channel 10 */

+#define   EVSYS_INTENCLR_EVD1_EVD11 (0x8u << 24) /**< \brief (EVSYS_INTENCLR) Event detected on Channel 11 */

+#define   EVSYS_INTENCLR_EVD1_EVD12 (0x10u << 24) /**< \brief (EVSYS_INTENCLR) Event detected on Channel 12 */

+#define   EVSYS_INTENCLR_EVD1_EVD13 (0x20u << 24) /**< \brief (EVSYS_INTENCLR) Event detected on Channel 13 */

+#define   EVSYS_INTENCLR_EVD1_EVD14 (0x40u << 24) /**< \brief (EVSYS_INTENCLR) Event detected on Channel 14 */

+#define   EVSYS_INTENCLR_EVD1_EVD15 (0x80u << 24) /**< \brief (EVSYS_INTENCLR) Event detected on Channel 15 */

+#define EVSYS_INTENCLR_MASK         0xFFFFFFFFu  /**< \brief (EVSYS_INTENCLR) MASK Register */

+

+/* -------- EVSYS_INTENSET : (EVSYS Offset: 0x14) (R/W 32) Interrupt Enable Set Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t OVR0:8;           /*!< bit:  0.. 7  Overrun Interrupt Enable for Channels 0 to 7 (modulo 16) */

+    uint32_t EVD0:8;           /*!< bit:  8..15  Event Detection Interrupt Enable for Channels 0 to 7 (modulo 16) */

+    uint32_t OVR1:8;           /*!< bit: 16..23  Overrun Interrupt Enable for Channels 8 to 15 (modulo 16) */

+    uint32_t EVD1:8;           /*!< bit: 24..31  Event Detection Interrupt Enable for Channels 8 to 15 (modulo 16) */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} EVSYS_INTENSET_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define EVSYS_INTENSET_OFFSET       0x14         /**< \brief (EVSYS_INTENSET offset) Interrupt Enable Set Register */

+#define EVSYS_INTENSET_RESETVALUE   0x00000000   /**< \brief (EVSYS_INTENSET reset_value) Interrupt Enable Set Register */

+

+#define EVSYS_INTENSET_OVR0_Pos     0            /**< \brief (EVSYS_INTENSET) Overrun Interrupt Enable for Channels 0 to 7 (modulo 16) */

+#define EVSYS_INTENSET_OVR0_Msk     (0xFFu << EVSYS_INTENSET_OVR0_Pos)

+#define EVSYS_INTENSET_OVR0(value)  ((EVSYS_INTENSET_OVR0_Msk & ((value) << EVSYS_INTENSET_OVR0_Pos)))

+#define   EVSYS_INTENSET_OVR0_OVR0  (0x1u <<  0) /**< \brief (EVSYS_INTENSET) Overrun detected on Channel 0 */

+#define   EVSYS_INTENSET_OVR0_OVR1  (0x2u <<  0) /**< \brief (EVSYS_INTENSET) Overrun detected on Channel 1 */

+#define   EVSYS_INTENSET_OVR0_OVR2  (0x4u <<  0) /**< \brief (EVSYS_INTENSET) Overrun detected on Channel 2 */

+#define   EVSYS_INTENSET_OVR0_OVR3  (0x8u <<  0) /**< \brief (EVSYS_INTENSET) Overrun detected on Channel 3 */

+#define   EVSYS_INTENSET_OVR0_OVR4  (0x10u <<  0) /**< \brief (EVSYS_INTENSET) Overrun detected on Channel 4 */

+#define   EVSYS_INTENSET_OVR0_OVR5  (0x20u <<  0) /**< \brief (EVSYS_INTENSET) Overrun detected on Channel 5 */

+#define   EVSYS_INTENSET_OVR0_OVR6  (0x40u <<  0) /**< \brief (EVSYS_INTENSET) Overrun detected on Channel 6 */

+#define   EVSYS_INTENSET_OVR0_OVR7  (0x80u <<  0) /**< \brief (EVSYS_INTENSET) Overrun detected on Channel 7 */

+#define EVSYS_INTENSET_EVD0_Pos     8            /**< \brief (EVSYS_INTENSET) Event Detection Interrupt Enable for Channels 0 to 7 (modulo 16) */

+#define EVSYS_INTENSET_EVD0_Msk     (0xFFu << EVSYS_INTENSET_EVD0_Pos)

+#define EVSYS_INTENSET_EVD0(value)  ((EVSYS_INTENSET_EVD0_Msk & ((value) << EVSYS_INTENSET_EVD0_Pos)))

+#define   EVSYS_INTENSET_EVD0_EVD0  (0x1u <<  8) /**< \brief (EVSYS_INTENSET) Event detected on Channel 0 */

+#define   EVSYS_INTENSET_EVD0_EVD1  (0x2u <<  8) /**< \brief (EVSYS_INTENSET) Event detected on Channel 1 */

+#define   EVSYS_INTENSET_EVD0_EVD2  (0x4u <<  8) /**< \brief (EVSYS_INTENSET) Event detected on Channel 2 */

+#define   EVSYS_INTENSET_EVD0_EVD3  (0x8u <<  8) /**< \brief (EVSYS_INTENSET) Event detected on Channel 3 */

+#define   EVSYS_INTENSET_EVD0_EVD4  (0x10u <<  8) /**< \brief (EVSYS_INTENSET) Event detected on Channel 4 */

+#define   EVSYS_INTENSET_EVD0_EVD5  (0x20u <<  8) /**< \brief (EVSYS_INTENSET) Event detected on Channel 5 */

+#define   EVSYS_INTENSET_EVD0_EVD6  (0x40u <<  8) /**< \brief (EVSYS_INTENSET) Event detected on Channel 6 */

+#define   EVSYS_INTENSET_EVD0_EVD7  (0x80u <<  8) /**< \brief (EVSYS_INTENSET) Event detected on Channel 7 */

+#define EVSYS_INTENSET_OVR1_Pos     16           /**< \brief (EVSYS_INTENSET) Overrun Interrupt Enable for Channels 8 to 15 (modulo 16) */

+#define EVSYS_INTENSET_OVR1_Msk     (0xFFu << EVSYS_INTENSET_OVR1_Pos)

+#define EVSYS_INTENSET_OVR1(value)  ((EVSYS_INTENSET_OVR1_Msk & ((value) << EVSYS_INTENSET_OVR1_Pos)))

+#define   EVSYS_INTENSET_OVR1_OVR8  (0x1u << 16) /**< \brief (EVSYS_INTENSET) Overrun detected on Channel 8 */

+#define   EVSYS_INTENSET_OVR1_OVR9  (0x2u << 16) /**< \brief (EVSYS_INTENSET) Overrun detected on Channel 9 */

+#define   EVSYS_INTENSET_OVR1_OVR10 (0x4u << 16) /**< \brief (EVSYS_INTENSET) Overrun detected on Channel 10 */

+#define   EVSYS_INTENSET_OVR1_OVR11 (0x8u << 16) /**< \brief (EVSYS_INTENSET) Overrun detected on Channel 11 */

+#define   EVSYS_INTENSET_OVR1_OVR12 (0x10u << 16) /**< \brief (EVSYS_INTENSET) Overrun detected on Channel 12 */

+#define   EVSYS_INTENSET_OVR1_OVR13 (0x20u << 16) /**< \brief (EVSYS_INTENSET) Overrun detected on Channel 13 */

+#define   EVSYS_INTENSET_OVR1_OVR14 (0x40u << 16) /**< \brief (EVSYS_INTENSET) Overrun detected on Channel 14 */

+#define   EVSYS_INTENSET_OVR1_OVR15 (0x80u << 16) /**< \brief (EVSYS_INTENSET) Overrun detected on Channel 15 */

+#define EVSYS_INTENSET_EVD1_Pos     24           /**< \brief (EVSYS_INTENSET) Event Detection Interrupt Enable for Channels 8 to 15 (modulo 16) */

+#define EVSYS_INTENSET_EVD1_Msk     (0xFFu << EVSYS_INTENSET_EVD1_Pos)

+#define EVSYS_INTENSET_EVD1(value)  ((EVSYS_INTENSET_EVD1_Msk & ((value) << EVSYS_INTENSET_EVD1_Pos)))

+#define   EVSYS_INTENSET_EVD1_EVD8  (0x1u << 24) /**< \brief (EVSYS_INTENSET) Event detected on Channel 8 */

+#define   EVSYS_INTENSET_EVD1_EVD9  (0x2u << 24) /**< \brief (EVSYS_INTENSET) Event detected on Channel 9 */

+#define   EVSYS_INTENSET_EVD1_EVD10 (0x4u << 24) /**< \brief (EVSYS_INTENSET) Event detected on Channel 10 */

+#define   EVSYS_INTENSET_EVD1_EVD11 (0x8u << 24) /**< \brief (EVSYS_INTENSET) Event detected on Channel 11 */

+#define   EVSYS_INTENSET_EVD1_EVD12 (0x10u << 24) /**< \brief (EVSYS_INTENSET) Event detected on Channel 12 */

+#define   EVSYS_INTENSET_EVD1_EVD13 (0x20u << 24) /**< \brief (EVSYS_INTENSET) Event detected on Channel 13 */

+#define   EVSYS_INTENSET_EVD1_EVD14 (0x40u << 24) /**< \brief (EVSYS_INTENSET) Event detected on Channel 14 */

+#define   EVSYS_INTENSET_EVD1_EVD15 (0x80u << 24) /**< \brief (EVSYS_INTENSET) Event detected on Channel 15 */

+#define EVSYS_INTENSET_MASK         0xFFFFFFFFu  /**< \brief (EVSYS_INTENSET) MASK Register */

+

+/* -------- EVSYS_INTFLAG : (EVSYS Offset: 0x18) (R/W 32) Interrupt Flag Status and Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t OVR0:8;           /*!< bit:  0.. 7  Overrun Interrupt Flag for Channels 0 to 7 (modulo 16) */

+    uint32_t EVD0:8;           /*!< bit:  8..15  Event Detection Interrupt Flag for Channels 0 to 7 (modulo 16) */

+    uint32_t OVR1:8;           /*!< bit: 16..23  Overrun Interrupt Flag for Channels 8 to 15 (modulo 16) */

+    uint32_t EVD1:8;           /*!< bit: 24..31  Event Detection Interrupt Flag for Channels 8 to 15 (modulo 16) */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} EVSYS_INTFLAG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define EVSYS_INTFLAG_OFFSET        0x18         /**< \brief (EVSYS_INTFLAG offset) Interrupt Flag Status and Clear Register */

+#define EVSYS_INTFLAG_RESETVALUE    0x00000000   /**< \brief (EVSYS_INTFLAG reset_value) Interrupt Flag Status and Clear Register */

+

+#define EVSYS_INTFLAG_OVR0_Pos      0            /**< \brief (EVSYS_INTFLAG) Overrun Interrupt Flag for Channels 0 to 7 (modulo 16) */

+#define EVSYS_INTFLAG_OVR0_Msk      (0xFFu << EVSYS_INTFLAG_OVR0_Pos)

+#define EVSYS_INTFLAG_OVR0(value)   ((EVSYS_INTFLAG_OVR0_Msk & ((value) << EVSYS_INTFLAG_OVR0_Pos)))

+#define   EVSYS_INTFLAG_OVR0_OVR0   (0x1u <<  0) /**< \brief (EVSYS_INTFLAG) Overrun detected on Channel 0 */

+#define   EVSYS_INTFLAG_OVR0_OVR1   (0x2u <<  0) /**< \brief (EVSYS_INTFLAG) Overrun detected on Channel 1 */

+#define   EVSYS_INTFLAG_OVR0_OVR2   (0x4u <<  0) /**< \brief (EVSYS_INTFLAG) Overrun detected on Channel 2 */

+#define   EVSYS_INTFLAG_OVR0_OVR3   (0x8u <<  0) /**< \brief (EVSYS_INTFLAG) Overrun detected on Channel 3 */

+#define   EVSYS_INTFLAG_OVR0_OVR4   (0x10u <<  0) /**< \brief (EVSYS_INTFLAG) Overrun detected on Channel 4 */

+#define   EVSYS_INTFLAG_OVR0_OVR5   (0x20u <<  0) /**< \brief (EVSYS_INTFLAG) Overrun detected on Channel 5 */

+#define   EVSYS_INTFLAG_OVR0_OVR6   (0x40u <<  0) /**< \brief (EVSYS_INTFLAG) Overrun detected on Channel 6 */

+#define   EVSYS_INTFLAG_OVR0_OVR7   (0x80u <<  0) /**< \brief (EVSYS_INTFLAG) Overrun detected on Channel 7 */

+#define EVSYS_INTFLAG_EVD0_Pos      8            /**< \brief (EVSYS_INTFLAG) Event Detection Interrupt Flag for Channels 0 to 7 (modulo 16) */

+#define EVSYS_INTFLAG_EVD0_Msk      (0xFFu << EVSYS_INTFLAG_EVD0_Pos)

+#define EVSYS_INTFLAG_EVD0(value)   ((EVSYS_INTFLAG_EVD0_Msk & ((value) << EVSYS_INTFLAG_EVD0_Pos)))

+#define   EVSYS_INTFLAG_EVD0_EVD0   (0x1u <<  8) /**< \brief (EVSYS_INTFLAG) Event detected on Channel 0 */

+#define   EVSYS_INTFLAG_EVD0_EVD1   (0x2u <<  8) /**< \brief (EVSYS_INTFLAG) Event detected on Channel 1 */

+#define   EVSYS_INTFLAG_EVD0_EVD2   (0x4u <<  8) /**< \brief (EVSYS_INTFLAG) Event detected on Channel 2 */

+#define   EVSYS_INTFLAG_EVD0_EVD3   (0x8u <<  8) /**< \brief (EVSYS_INTFLAG) Event detected on Channel 3 */

+#define   EVSYS_INTFLAG_EVD0_EVD4   (0x10u <<  8) /**< \brief (EVSYS_INTFLAG) Event detected on Channel 4 */

+#define   EVSYS_INTFLAG_EVD0_EVD5   (0x20u <<  8) /**< \brief (EVSYS_INTFLAG) Event detected on Channel 5 */

+#define   EVSYS_INTFLAG_EVD0_EVD6   (0x40u <<  8) /**< \brief (EVSYS_INTFLAG) Event detected on Channel 6 */

+#define   EVSYS_INTFLAG_EVD0_EVD7   (0x80u <<  8) /**< \brief (EVSYS_INTFLAG) Event detected on Channel 7 */

+#define EVSYS_INTFLAG_OVR1_Pos      16           /**< \brief (EVSYS_INTFLAG) Overrun Interrupt Flag for Channels 8 to 15 (modulo 16) */

+#define EVSYS_INTFLAG_OVR1_Msk      (0xFFu << EVSYS_INTFLAG_OVR1_Pos)

+#define EVSYS_INTFLAG_OVR1(value)   ((EVSYS_INTFLAG_OVR1_Msk & ((value) << EVSYS_INTFLAG_OVR1_Pos)))

+#define   EVSYS_INTFLAG_OVR1_OVR8   (0x1u << 16) /**< \brief (EVSYS_INTFLAG) Overrun detected on Channel 8 */

+#define   EVSYS_INTFLAG_OVR1_OVR9   (0x2u << 16) /**< \brief (EVSYS_INTFLAG) Overrun detected on Channel 9 */

+#define   EVSYS_INTFLAG_OVR1_OVR10  (0x4u << 16) /**< \brief (EVSYS_INTFLAG) Overrun detected on Channel 10 */

+#define   EVSYS_INTFLAG_OVR1_OVR11  (0x8u << 16) /**< \brief (EVSYS_INTFLAG) Overrun detected on Channel 11 */

+#define   EVSYS_INTFLAG_OVR1_OVR12  (0x10u << 16) /**< \brief (EVSYS_INTFLAG) Overrun detected on Channel 12 */

+#define   EVSYS_INTFLAG_OVR1_OVR13  (0x20u << 16) /**< \brief (EVSYS_INTFLAG) Overrun detected on Channel 13 */

+#define   EVSYS_INTFLAG_OVR1_OVR14  (0x40u << 16) /**< \brief (EVSYS_INTFLAG) Overrun detected on Channel 14 */

+#define   EVSYS_INTFLAG_OVR1_OVR15  (0x80u << 16) /**< \brief (EVSYS_INTFLAG) Overrun detected on Channel 15 */

+#define EVSYS_INTFLAG_EVD1_Pos      24           /**< \brief (EVSYS_INTFLAG) Event Detection Interrupt Flag for Channels 8 to 15 (modulo 16) */

+#define EVSYS_INTFLAG_EVD1_Msk      (0xFFu << EVSYS_INTFLAG_EVD1_Pos)

+#define EVSYS_INTFLAG_EVD1(value)   ((EVSYS_INTFLAG_EVD1_Msk & ((value) << EVSYS_INTFLAG_EVD1_Pos)))

+#define   EVSYS_INTFLAG_EVD1_EVD8   (0x1u << 24) /**< \brief (EVSYS_INTFLAG) Event detected on Channel 8 */

+#define   EVSYS_INTFLAG_EVD1_EVD9   (0x2u << 24) /**< \brief (EVSYS_INTFLAG) Event detected on Channel 9 */

+#define   EVSYS_INTFLAG_EVD1_EVD10  (0x4u << 24) /**< \brief (EVSYS_INTFLAG) Event detected on Channel 10 */

+#define   EVSYS_INTFLAG_EVD1_EVD11  (0x8u << 24) /**< \brief (EVSYS_INTFLAG) Event detected on Channel 11 */

+#define   EVSYS_INTFLAG_EVD1_EVD12  (0x10u << 24) /**< \brief (EVSYS_INTFLAG) Event detected on Channel 12 */

+#define   EVSYS_INTFLAG_EVD1_EVD13  (0x20u << 24) /**< \brief (EVSYS_INTFLAG) Event detected on Channel 13 */

+#define   EVSYS_INTFLAG_EVD1_EVD14  (0x40u << 24) /**< \brief (EVSYS_INTFLAG) Event detected on Channel 14 */

+#define   EVSYS_INTFLAG_EVD1_EVD15  (0x80u << 24) /**< \brief (EVSYS_INTFLAG) Event detected on Channel 15 */

+#define EVSYS_INTFLAG_MASK          0xFFFFFFFFu  /**< \brief (EVSYS_INTFLAG) MASK Register */

+

+/** \brief EVSYS hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct {

+  __O  EVSYS_CTRL_Type           CTRL;        /**< \brief Offset: 0x00 ( /W  8) Control Register */

+       RoReg8                    Reserved1[0x3];

+  __IO EVSYS_CHANNEL_Type        CHANNEL;     /**< \brief Offset: 0x04 (R/W 32) Channel Register */

+  __IO EVSYS_USER_Type           USER;        /**< \brief Offset: 0x08 (R/W 16) User Mux Register */

+       RoReg8                    Reserved2[0x2];

+  __I  EVSYS_CHSTATUS_Type       CHSTATUS;    /**< \brief Offset: 0x0C (R/  32) Channel Status Register */

+  __IO EVSYS_INTENCLR_Type       INTENCLR;    /**< \brief Offset: 0x10 (R/W 32) Interrupt Enable Clear Register */

+  __IO EVSYS_INTENSET_Type       INTENSET;    /**< \brief Offset: 0x14 (R/W 32) Interrupt Enable Set Register */

+  __IO EVSYS_INTFLAG_Type        INTFLAG;     /**< \brief Offset: 0x18 (R/W 32) Interrupt Flag Status and Clear Register */

+} Evsys;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/*@}*/

+

+#endif /* _SAMD20_EVSYS_COMPONENT_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_gclk.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_gclk.h
new file mode 100644
index 0000000..9bec0fd
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_gclk.h
@@ -0,0 +1,201 @@
+/**

+ * \file

+ *

+ * \brief Component description for GCLK

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_GCLK_COMPONENT_

+#define _SAMD20_GCLK_COMPONENT_

+

+/* ========================================================================== */

+/**  SOFTWARE API DEFINITION FOR GCLK */

+/* ========================================================================== */

+/** \addtogroup SAMD20_GCLK Generic Clock Generator */

+/*@{*/

+

+#define REV_GCLK                    0x200

+

+/* -------- GCLK_CTRL : (GCLK Offset: 0x0) (R/W  8) Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  SWRST:1;          /*!< bit:      0  Software Reset                     */

+    uint8_t  :7;               /*!< bit:  1.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} GCLK_CTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define GCLK_CTRL_OFFSET            0x0          /**< \brief (GCLK_CTRL offset) Control Register */

+#define GCLK_CTRL_RESETVALUE        0x00         /**< \brief (GCLK_CTRL reset_value) Control Register */

+

+#define GCLK_CTRL_SWRST_Pos         0            /**< \brief (GCLK_CTRL) Software Reset */

+#define GCLK_CTRL_SWRST             (0x1u << GCLK_CTRL_SWRST_Pos)

+#define GCLK_CTRL_MASK              0x01u        /**< \brief (GCLK_CTRL) MASK Register */

+

+/* -------- GCLK_STATUS : (GCLK Offset: 0x1) (R/   8) Status Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  :7;               /*!< bit:  0.. 6  Reserved                           */

+    uint8_t  SYNCBUSY:1;       /*!< bit:      7  Synchronization Busy               */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} GCLK_STATUS_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define GCLK_STATUS_OFFSET          0x1          /**< \brief (GCLK_STATUS offset) Status Register */

+#define GCLK_STATUS_RESETVALUE      0x00         /**< \brief (GCLK_STATUS reset_value) Status Register */

+

+#define GCLK_STATUS_SYNCBUSY_Pos    7            /**< \brief (GCLK_STATUS) Synchronization Busy */

+#define GCLK_STATUS_SYNCBUSY        (0x1u << GCLK_STATUS_SYNCBUSY_Pos)

+#define GCLK_STATUS_MASK            0x80u        /**< \brief (GCLK_STATUS) MASK Register */

+

+/* -------- GCLK_CLKCTRL : (GCLK Offset: 0x2) (R/W 16) Generic Clock Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t ID:6;             /*!< bit:  0.. 5  Generic Clock Selection            */

+    uint16_t :2;               /*!< bit:  6.. 7  Reserved                           */

+    uint16_t GEN:4;            /*!< bit:  8..11  Generic Clock Generator Select     */

+    uint16_t :2;               /*!< bit: 12..13  Reserved                           */

+    uint16_t CLKEN:1;          /*!< bit:     14  Clock Enable                       */

+    uint16_t WRTLOCK:1;        /*!< bit:     15  Write Lock                         */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} GCLK_CLKCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define GCLK_CLKCTRL_OFFSET         0x2          /**< \brief (GCLK_CLKCTRL offset) Generic Clock Control Register */

+#define GCLK_CLKCTRL_RESETVALUE     0x0000       /**< \brief (GCLK_CLKCTRL reset_value) Generic Clock Control Register */

+

+#define GCLK_CLKCTRL_ID_Pos         0            /**< \brief (GCLK_CLKCTRL) Generic Clock Selection */

+#define GCLK_CLKCTRL_ID_Msk         (0x3Fu << GCLK_CLKCTRL_ID_Pos)

+#define GCLK_CLKCTRL_ID(value)      ((GCLK_CLKCTRL_ID_Msk & ((value) << GCLK_CLKCTRL_ID_Pos)))

+#define GCLK_CLKCTRL_GEN_Pos        8            /**< \brief (GCLK_CLKCTRL) Generic Clock Generator Select */

+#define GCLK_CLKCTRL_GEN_Msk        (0xFu << GCLK_CLKCTRL_GEN_Pos)

+#define GCLK_CLKCTRL_GEN(value)     ((GCLK_CLKCTRL_GEN_Msk & ((value) << GCLK_CLKCTRL_GEN_Pos)))

+#define GCLK_CLKCTRL_CLKEN_Pos      14           /**< \brief (GCLK_CLKCTRL) Clock Enable */

+#define GCLK_CLKCTRL_CLKEN          (0x1u << GCLK_CLKCTRL_CLKEN_Pos)

+#define GCLK_CLKCTRL_WRTLOCK_Pos    15           /**< \brief (GCLK_CLKCTRL) Write Lock */

+#define GCLK_CLKCTRL_WRTLOCK        (0x1u << GCLK_CLKCTRL_WRTLOCK_Pos)

+#define GCLK_CLKCTRL_MASK           0xCF3Fu      /**< \brief (GCLK_CLKCTRL) MASK Register */

+

+/* -------- GCLK_GENCTRL : (GCLK Offset: 0x4) (R/W 32) Generic Clock Generator Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t ID:4;             /*!< bit:  0.. 3  Generic Clock Generator Selection  */

+    uint32_t :4;               /*!< bit:  4.. 7  Reserved                           */

+    uint32_t SRC:5;            /*!< bit:  8..12  Clock Source Select                */

+    uint32_t :3;               /*!< bit: 13..15  Reserved                           */

+    uint32_t GENEN:1;          /*!< bit:     16  Generic Clock Generator Enable     */

+    uint32_t IDC:1;            /*!< bit:     17  Improve Duty Cycle                 */

+    uint32_t OOV:1;            /*!< bit:     18  Output Off Value                   */

+    uint32_t OE:1;             /*!< bit:     19  Output Enable                      */

+    uint32_t DIVSEL:1;         /*!< bit:     20  Divide Selection                   */

+    uint32_t RUNSTDBY:1;       /*!< bit:     21  Run during Standby                 */

+    uint32_t :10;              /*!< bit: 22..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} GCLK_GENCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define GCLK_GENCTRL_OFFSET         0x4          /**< \brief (GCLK_GENCTRL offset) Generic Clock Generator Control Register */

+#define GCLK_GENCTRL_RESETVALUE     0x00000000   /**< \brief (GCLK_GENCTRL reset_value) Generic Clock Generator Control Register */

+

+#define GCLK_GENCTRL_ID_Pos         0            /**< \brief (GCLK_GENCTRL) Generic Clock Generator Selection */

+#define GCLK_GENCTRL_ID_Msk         (0xFu << GCLK_GENCTRL_ID_Pos)

+#define GCLK_GENCTRL_ID(value)      ((GCLK_GENCTRL_ID_Msk & ((value) << GCLK_GENCTRL_ID_Pos)))

+#define GCLK_GENCTRL_SRC_Pos        8            /**< \brief (GCLK_GENCTRL) Clock Source Select */

+#define GCLK_GENCTRL_SRC_Msk        (0x1Fu << GCLK_GENCTRL_SRC_Pos)

+#define GCLK_GENCTRL_SRC(value)     ((GCLK_GENCTRL_SRC_Msk & ((value) << GCLK_GENCTRL_SRC_Pos)))

+#define GCLK_GENCTRL_GENEN_Pos      16           /**< \brief (GCLK_GENCTRL) Generic Clock Generator Enable */

+#define GCLK_GENCTRL_GENEN          (0x1u << GCLK_GENCTRL_GENEN_Pos)

+#define GCLK_GENCTRL_IDC_Pos        17           /**< \brief (GCLK_GENCTRL) Improve Duty Cycle */

+#define GCLK_GENCTRL_IDC            (0x1u << GCLK_GENCTRL_IDC_Pos)

+#define GCLK_GENCTRL_OOV_Pos        18           /**< \brief (GCLK_GENCTRL) Output Off Value */

+#define GCLK_GENCTRL_OOV            (0x1u << GCLK_GENCTRL_OOV_Pos)

+#define GCLK_GENCTRL_OE_Pos         19           /**< \brief (GCLK_GENCTRL) Output Enable */

+#define GCLK_GENCTRL_OE             (0x1u << GCLK_GENCTRL_OE_Pos)

+#define GCLK_GENCTRL_DIVSEL_Pos     20           /**< \brief (GCLK_GENCTRL) Divide Selection */

+#define GCLK_GENCTRL_DIVSEL         (0x1u << GCLK_GENCTRL_DIVSEL_Pos)

+#define GCLK_GENCTRL_RUNSTDBY_Pos   21           /**< \brief (GCLK_GENCTRL) Run during Standby */

+#define GCLK_GENCTRL_RUNSTDBY       (0x1u << GCLK_GENCTRL_RUNSTDBY_Pos)

+#define GCLK_GENCTRL_MASK           0x003F1F0Fu  /**< \brief (GCLK_GENCTRL) MASK Register */

+

+/* -------- GCLK_GENDIV : (GCLK Offset: 0x8) (R/W 32) Generic Clock Generator Division Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t ID:4;             /*!< bit:  0.. 3  Generic Clock Generator Selection  */

+    uint32_t :4;               /*!< bit:  4.. 7  Reserved                           */

+    uint32_t DIV:16;           /*!< bit:  8..23  Division Factor                    */

+    uint32_t :8;               /*!< bit: 24..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} GCLK_GENDIV_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define GCLK_GENDIV_OFFSET          0x8          /**< \brief (GCLK_GENDIV offset) Generic Clock Generator Division Register */

+#define GCLK_GENDIV_RESETVALUE      0x00000000   /**< \brief (GCLK_GENDIV reset_value) Generic Clock Generator Division Register */

+

+#define GCLK_GENDIV_ID_Pos          0            /**< \brief (GCLK_GENDIV) Generic Clock Generator Selection */

+#define GCLK_GENDIV_ID_Msk          (0xFu << GCLK_GENDIV_ID_Pos)

+#define GCLK_GENDIV_ID(value)       ((GCLK_GENDIV_ID_Msk & ((value) << GCLK_GENDIV_ID_Pos)))

+#define GCLK_GENDIV_DIV_Pos         8            /**< \brief (GCLK_GENDIV) Division Factor */

+#define GCLK_GENDIV_DIV_Msk         (0xFFFFu << GCLK_GENDIV_DIV_Pos)

+#define GCLK_GENDIV_DIV(value)      ((GCLK_GENDIV_DIV_Msk & ((value) << GCLK_GENDIV_DIV_Pos)))

+#define GCLK_GENDIV_MASK            0x00FFFF0Fu  /**< \brief (GCLK_GENDIV) MASK Register */

+

+/** \brief GCLK hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct {

+  __IO GCLK_CTRL_Type            CTRL;        /**< \brief Offset: 0x0 (R/W  8) Control Register */

+  __I  GCLK_STATUS_Type          STATUS;      /**< \brief Offset: 0x1 (R/   8) Status Register */

+  __IO GCLK_CLKCTRL_Type         CLKCTRL;     /**< \brief Offset: 0x2 (R/W 16) Generic Clock Control Register */

+  __IO GCLK_GENCTRL_Type         GENCTRL;     /**< \brief Offset: 0x4 (R/W 32) Generic Clock Generator Control Register */

+  __IO GCLK_GENDIV_Type          GENDIV;      /**< \brief Offset: 0x8 (R/W 32) Generic Clock Generator Division Register */

+} Gclk;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/*@}*/

+

+#endif /* _SAMD20_GCLK_COMPONENT_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_nvmctrl.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_nvmctrl.h
new file mode 100644
index 0000000..d42e0ac
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_nvmctrl.h
@@ -0,0 +1,507 @@
+/**

+ * \file

+ *

+ * \brief Component description for NVMCTRL

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_NVMCTRL_COMPONENT_

+#define _SAMD20_NVMCTRL_COMPONENT_

+

+/* ========================================================================== */

+/**  SOFTWARE API DEFINITION FOR NVMCTRL */

+/* ========================================================================== */

+/** \addtogroup SAMD20_NVMCTRL Non-Volatile Memory Controller */

+/*@{*/

+

+#define REV_NVMCTRL                 0x102

+

+/* -------- NVMCTRL_CTRLA : (NVMCTRL Offset: 0x00) (R/W 16) NVM Control Register A -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t CMD:7;            /*!< bit:  0.. 6  Command                            */

+    uint16_t :1;               /*!< bit:      7  Reserved                           */

+    uint16_t CMDEX:8;          /*!< bit:  8..15  Command Execution                  */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} NVMCTRL_CTRLA_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define NVMCTRL_CTRLA_OFFSET        0x00         /**< \brief (NVMCTRL_CTRLA offset) NVM Control Register A */

+#define NVMCTRL_CTRLA_RESETVALUE    0x0000       /**< \brief (NVMCTRL_CTRLA reset_value) NVM Control Register A */

+

+#define NVMCTRL_CTRLA_CMD_Pos       0            /**< \brief (NVMCTRL_CTRLA) Command */

+#define NVMCTRL_CTRLA_CMD_Msk       (0x7Fu << NVMCTRL_CTRLA_CMD_Pos)

+#define NVMCTRL_CTRLA_CMD(value)    ((NVMCTRL_CTRLA_CMD_Msk & ((value) << NVMCTRL_CTRLA_CMD_Pos)))

+#define   NVMCTRL_CTRLA_CMD_ER      (0x2u <<  0) /**< \brief (NVMCTRL_CTRLA) Erase Row */

+#define   NVMCTRL_CTRLA_CMD_WP      (0x4u <<  0) /**< \brief (NVMCTRL_CTRLA) Write Page */

+#define   NVMCTRL_CTRLA_CMD_EAR     (0x5u <<  0) /**< \brief (NVMCTRL_CTRLA) Erase Auxiliary Row */

+#define   NVMCTRL_CTRLA_CMD_WAP     (0x6u <<  0) /**< \brief (NVMCTRL_CTRLA) Write  Auxiliary Row */

+#define   NVMCTRL_CTRLA_CMD_SF      (0xAu <<  0) /**< \brief (NVMCTRL_CTRLA) Security Flow Command */

+#define   NVMCTRL_CTRLA_CMD_WL      (0xFu <<  0) /**< \brief (NVMCTRL_CTRLA) Write lockbits */

+#define   NVMCTRL_CTRLA_CMD_LR      (0x40u <<  0) /**< \brief (NVMCTRL_CTRLA) Lock Region */

+#define   NVMCTRL_CTRLA_CMD_UR      (0x41u <<  0) /**< \brief (NVMCTRL_CTRLA) Unlock Region */

+#define   NVMCTRL_CTRLA_CMD_SPRM    (0x42u <<  0) /**< \brief (NVMCTRL_CTRLA) Set Power Reduction Mode */

+#define   NVMCTRL_CTRLA_CMD_CPRM    (0x43u <<  0) /**< \brief (NVMCTRL_CTRLA) Clear Power Reduction Mode */

+#define   NVMCTRL_CTRLA_CMD_PBC     (0x44u <<  0) /**< \brief (NVMCTRL_CTRLA) Page Buffer Clear */

+#define   NVMCTRL_CTRLA_CMD_SSB     (0x45u <<  0) /**< \brief (NVMCTRL_CTRLA) Set Security Bit */

+#define   NVMCTRL_CTRLA_CMD_SMR     (0x54u <<  0) /**< \brief (NVMCTRL_CTRLA) State Machine Reset */

+#define NVMCTRL_CTRLA_CMDEX_Pos     8            /**< \brief (NVMCTRL_CTRLA) Command Execution */

+#define NVMCTRL_CTRLA_CMDEX_Msk     (0xFFu << NVMCTRL_CTRLA_CMDEX_Pos)

+#define NVMCTRL_CTRLA_CMDEX(value)  ((NVMCTRL_CTRLA_CMDEX_Msk & ((value) << NVMCTRL_CTRLA_CMDEX_Pos)))

+#define   NVMCTRL_CTRLA_CMDEX_KEY   (0xA5u <<  8) /**< \brief (NVMCTRL_CTRLA) Execution Key */

+#define NVMCTRL_CTRLA_MASK          0xFF7Fu      /**< \brief (NVMCTRL_CTRLA) MASK Register */

+

+/* -------- NVMCTRL_CTRLB : (NVMCTRL Offset: 0x04) (R/W 32) NVM Control Register B -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t :1;               /*!< bit:      0  Reserved                           */

+    uint32_t RWS:4;            /*!< bit:  1.. 4  NVM Read Wait States               */

+    uint32_t :2;               /*!< bit:  5.. 6  Reserved                           */

+    uint32_t MANW:1;           /*!< bit:      7  Manual Write                       */

+    uint32_t SLEEPPRM:2;       /*!< bit:  8.. 9  Power Reduction Mode during Sleep  */

+    uint32_t :6;               /*!< bit: 10..15  Reserved                           */

+    uint32_t READMODE:2;       /*!< bit: 16..17  NVMCTRL Read Mode                  */

+    uint32_t CACHEDIS:1;       /*!< bit:     18  Cache Disable                      */

+    uint32_t :13;              /*!< bit: 19..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} NVMCTRL_CTRLB_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define NVMCTRL_CTRLB_OFFSET        0x04         /**< \brief (NVMCTRL_CTRLB offset) NVM Control Register B */

+#define NVMCTRL_CTRLB_RESETVALUE    0x00000000   /**< \brief (NVMCTRL_CTRLB reset_value) NVM Control Register B */

+

+#define NVMCTRL_CTRLB_RWS_Pos       1            /**< \brief (NVMCTRL_CTRLB) NVM Read Wait States */

+#define NVMCTRL_CTRLB_RWS_Msk       (0xFu << NVMCTRL_CTRLB_RWS_Pos)

+#define NVMCTRL_CTRLB_RWS(value)    ((NVMCTRL_CTRLB_RWS_Msk & ((value) << NVMCTRL_CTRLB_RWS_Pos)))

+#define   NVMCTRL_CTRLB_RWS_SINGLE  (0x0u <<  1) /**< \brief (NVMCTRL_CTRLB) Single Auto Wait State */

+#define   NVMCTRL_CTRLB_RWS_HALF    (0x1u <<  1) /**< \brief (NVMCTRL_CTRLB) Half Auto Wait State */

+#define   NVMCTRL_CTRLB_RWS_DUAL    (0x2u <<  1) /**< \brief (NVMCTRL_CTRLB) Dual Auto Wait State */

+#define NVMCTRL_CTRLB_MANW_Pos      7            /**< \brief (NVMCTRL_CTRLB) Manual Write */

+#define NVMCTRL_CTRLB_MANW          (0x1u << NVMCTRL_CTRLB_MANW_Pos)

+#define NVMCTRL_CTRLB_SLEEPPRM_Pos  8            /**< \brief (NVMCTRL_CTRLB) Power Reduction Mode during Sleep */

+#define NVMCTRL_CTRLB_SLEEPPRM_Msk  (0x3u << NVMCTRL_CTRLB_SLEEPPRM_Pos)

+#define NVMCTRL_CTRLB_SLEEPPRM(value) ((NVMCTRL_CTRLB_SLEEPPRM_Msk & ((value) << NVMCTRL_CTRLB_SLEEPPRM_Pos)))

+#define   NVMCTRL_CTRLB_SLEEPPRM_WAKEONACCESS (0x0u <<  8) /**< \brief (NVMCTRL_CTRLB) Wake on first access. */

+#define   NVMCTRL_CTRLB_SLEEPPRM_WAKEUPINSTANT (0x1u <<  8) /**< \brief (NVMCTRL_CTRLB) Wake on sleep exit. */

+#define   NVMCTRL_CTRLB_SLEEPPRM_DISABLED (0x3u <<  8) /**< \brief (NVMCTRL_CTRLB) Auto power reduction disabled. */

+#define NVMCTRL_CTRLB_READMODE_Pos  16           /**< \brief (NVMCTRL_CTRLB) NVMCTRL Read Mode */

+#define NVMCTRL_CTRLB_READMODE_Msk  (0x3u << NVMCTRL_CTRLB_READMODE_Pos)

+#define NVMCTRL_CTRLB_READMODE(value) ((NVMCTRL_CTRLB_READMODE_Msk & ((value) << NVMCTRL_CTRLB_READMODE_Pos)))

+#define NVMCTRL_CTRLB_CACHEDIS_Pos  18           /**< \brief (NVMCTRL_CTRLB) Cache Disable */

+#define NVMCTRL_CTRLB_CACHEDIS      (0x1u << NVMCTRL_CTRLB_CACHEDIS_Pos)

+#define NVMCTRL_CTRLB_MASK          0x0007039Eu  /**< \brief (NVMCTRL_CTRLB) MASK Register */

+

+/* -------- NVMCTRL_PARAM : (NVMCTRL Offset: 0x08) (R/W 32) Parameter Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t NVMP:16;          /*!< bit:  0..15  NVM Pages                          */

+    uint32_t PSZ:3;            /*!< bit: 16..18  Page Size                          */

+    uint32_t :13;              /*!< bit: 19..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} NVMCTRL_PARAM_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define NVMCTRL_PARAM_OFFSET        0x08         /**< \brief (NVMCTRL_PARAM offset) Parameter Register */

+#define NVMCTRL_PARAM_RESETVALUE    0x00000000   /**< \brief (NVMCTRL_PARAM reset_value) Parameter Register */

+

+#define NVMCTRL_PARAM_NVMP_Pos      0            /**< \brief (NVMCTRL_PARAM) NVM Pages */

+#define NVMCTRL_PARAM_NVMP_Msk      (0xFFFFu << NVMCTRL_PARAM_NVMP_Pos)

+#define NVMCTRL_PARAM_NVMP(value)   ((NVMCTRL_PARAM_NVMP_Msk & ((value) << NVMCTRL_PARAM_NVMP_Pos)))

+#define NVMCTRL_PARAM_PSZ_Pos       16           /**< \brief (NVMCTRL_PARAM) Page Size */

+#define NVMCTRL_PARAM_PSZ_Msk       (0x7u << NVMCTRL_PARAM_PSZ_Pos)

+#define NVMCTRL_PARAM_PSZ(value)    ((NVMCTRL_PARAM_PSZ_Msk & ((value) << NVMCTRL_PARAM_PSZ_Pos)))

+#define NVMCTRL_PARAM_MASK          0x0007FFFFu  /**< \brief (NVMCTRL_PARAM) MASK Register */

+

+/* -------- NVMCTRL_INTENCLR : (NVMCTRL Offset: 0x0C) (R/W  8) Interrupt Enable Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  READY:1;          /*!< bit:      0  NVM Ready Interrupt Disable        */

+    uint8_t  ERROR:1;          /*!< bit:      1  Error Interrupt Disable            */

+    uint8_t  :6;               /*!< bit:  2.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} NVMCTRL_INTENCLR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define NVMCTRL_INTENCLR_OFFSET     0x0C         /**< \brief (NVMCTRL_INTENCLR offset) Interrupt Enable Clear Register */

+#define NVMCTRL_INTENCLR_RESETVALUE 0x00         /**< \brief (NVMCTRL_INTENCLR reset_value) Interrupt Enable Clear Register */

+

+#define NVMCTRL_INTENCLR_READY_Pos  0            /**< \brief (NVMCTRL_INTENCLR) NVM Ready Interrupt Disable */

+#define NVMCTRL_INTENCLR_READY      (0x1u << NVMCTRL_INTENCLR_READY_Pos)

+#define NVMCTRL_INTENCLR_ERROR_Pos  1            /**< \brief (NVMCTRL_INTENCLR) Error Interrupt Disable */

+#define NVMCTRL_INTENCLR_ERROR      (0x1u << NVMCTRL_INTENCLR_ERROR_Pos)

+#define NVMCTRL_INTENCLR_MASK       0x03u        /**< \brief (NVMCTRL_INTENCLR) MASK Register */

+

+/* -------- NVMCTRL_INTENSET : (NVMCTRL Offset: 0x10) (R/W  8) Interrupt Enable Set Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  READY:1;          /*!< bit:      0  NVM Ready Interrupt Enable         */

+    uint8_t  ERROR:1;          /*!< bit:      1  Error Interrupt Enable             */

+    uint8_t  :6;               /*!< bit:  2.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} NVMCTRL_INTENSET_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define NVMCTRL_INTENSET_OFFSET     0x10         /**< \brief (NVMCTRL_INTENSET offset) Interrupt Enable Set Register */

+#define NVMCTRL_INTENSET_RESETVALUE 0x00         /**< \brief (NVMCTRL_INTENSET reset_value) Interrupt Enable Set Register */

+

+#define NVMCTRL_INTENSET_READY_Pos  0            /**< \brief (NVMCTRL_INTENSET) NVM Ready Interrupt Enable */

+#define NVMCTRL_INTENSET_READY      (0x1u << NVMCTRL_INTENSET_READY_Pos)

+#define NVMCTRL_INTENSET_ERROR_Pos  1            /**< \brief (NVMCTRL_INTENSET) Error Interrupt Enable */

+#define NVMCTRL_INTENSET_ERROR      (0x1u << NVMCTRL_INTENSET_ERROR_Pos)

+#define NVMCTRL_INTENSET_MASK       0x03u        /**< \brief (NVMCTRL_INTENSET) MASK Register */

+

+/* -------- NVMCTRL_INTFLAG : (NVMCTRL Offset: 0x14) (R/W  8) Interrupt Flag Status and Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  READY:1;          /*!< bit:      0  NVM Ready Interrupt Flag           */

+    uint8_t  ERROR:1;          /*!< bit:      1  Error Interrupt Flag               */

+    uint8_t  :6;               /*!< bit:  2.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} NVMCTRL_INTFLAG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define NVMCTRL_INTFLAG_OFFSET      0x14         /**< \brief (NVMCTRL_INTFLAG offset) Interrupt Flag Status and Clear Register */

+#define NVMCTRL_INTFLAG_RESETVALUE  0x00         /**< \brief (NVMCTRL_INTFLAG reset_value) Interrupt Flag Status and Clear Register */

+

+#define NVMCTRL_INTFLAG_READY_Pos   0            /**< \brief (NVMCTRL_INTFLAG) NVM Ready Interrupt Flag */

+#define NVMCTRL_INTFLAG_READY       (0x1u << NVMCTRL_INTFLAG_READY_Pos)

+#define NVMCTRL_INTFLAG_ERROR_Pos   1            /**< \brief (NVMCTRL_INTFLAG) Error Interrupt Flag */

+#define NVMCTRL_INTFLAG_ERROR       (0x1u << NVMCTRL_INTFLAG_ERROR_Pos)

+#define NVMCTRL_INTFLAG_MASK        0x03u        /**< \brief (NVMCTRL_INTFLAG) MASK Register */

+

+/* -------- NVMCTRL_STATUS : (NVMCTRL Offset: 0x18) (R/W 16) Status Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t PRM:1;            /*!< bit:      0  Power Reduction Mode               */

+    uint16_t LOAD:1;           /*!< bit:      1  NVM Page Buffer Active Loading     */

+    uint16_t PROGE:1;          /*!< bit:      2  Programming Error Status           */

+    uint16_t LOCKE:1;          /*!< bit:      3  Lock Error Status                  */

+    uint16_t NVME:1;           /*!< bit:      4  NVM Error                          */

+    uint16_t :3;               /*!< bit:  5.. 7  Reserved                           */

+    uint16_t SB:1;             /*!< bit:      8  Security Bit Status                */

+    uint16_t :7;               /*!< bit:  9..15  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} NVMCTRL_STATUS_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define NVMCTRL_STATUS_OFFSET       0x18         /**< \brief (NVMCTRL_STATUS offset) Status Register */

+#define NVMCTRL_STATUS_RESETVALUE   0x0000       /**< \brief (NVMCTRL_STATUS reset_value) Status Register */

+

+#define NVMCTRL_STATUS_PRM_Pos      0            /**< \brief (NVMCTRL_STATUS) Power Reduction Mode */

+#define NVMCTRL_STATUS_PRM          (0x1u << NVMCTRL_STATUS_PRM_Pos)

+#define NVMCTRL_STATUS_LOAD_Pos     1            /**< \brief (NVMCTRL_STATUS) NVM Page Buffer Active Loading */

+#define NVMCTRL_STATUS_LOAD         (0x1u << NVMCTRL_STATUS_LOAD_Pos)

+#define NVMCTRL_STATUS_PROGE_Pos    2            /**< \brief (NVMCTRL_STATUS) Programming Error Status */

+#define NVMCTRL_STATUS_PROGE        (0x1u << NVMCTRL_STATUS_PROGE_Pos)

+#define NVMCTRL_STATUS_LOCKE_Pos    3            /**< \brief (NVMCTRL_STATUS) Lock Error Status */

+#define NVMCTRL_STATUS_LOCKE        (0x1u << NVMCTRL_STATUS_LOCKE_Pos)

+#define NVMCTRL_STATUS_NVME_Pos     4            /**< \brief (NVMCTRL_STATUS) NVM Error */

+#define NVMCTRL_STATUS_NVME         (0x1u << NVMCTRL_STATUS_NVME_Pos)

+#define NVMCTRL_STATUS_SB_Pos       8            /**< \brief (NVMCTRL_STATUS) Security Bit Status */

+#define NVMCTRL_STATUS_SB           (0x1u << NVMCTRL_STATUS_SB_Pos)

+#define NVMCTRL_STATUS_MASK         0x011Fu      /**< \brief (NVMCTRL_STATUS) MASK Register */

+

+/* -------- NVMCTRL_ADDR : (NVMCTRL Offset: 0x1C) (R/W 32) Address Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t ADDR:22;          /*!< bit:  0..21  NVM Address                        */

+    uint32_t :10;              /*!< bit: 22..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} NVMCTRL_ADDR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define NVMCTRL_ADDR_OFFSET         0x1C         /**< \brief (NVMCTRL_ADDR offset) Address Register */

+#define NVMCTRL_ADDR_RESETVALUE     0x00000000   /**< \brief (NVMCTRL_ADDR reset_value) Address Register */

+

+#define NVMCTRL_ADDR_ADDR_Pos       0            /**< \brief (NVMCTRL_ADDR) NVM Address */

+#define NVMCTRL_ADDR_ADDR_Msk       (0x3FFFFFu << NVMCTRL_ADDR_ADDR_Pos)

+#define NVMCTRL_ADDR_ADDR(value)    ((NVMCTRL_ADDR_ADDR_Msk & ((value) << NVMCTRL_ADDR_ADDR_Pos)))

+#define NVMCTRL_ADDR_MASK           0x003FFFFFu  /**< \brief (NVMCTRL_ADDR) MASK Register */

+

+/* -------- NVMCTRL_LOCK : (NVMCTRL Offset: 0x20) (R/W 16) Lock Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t LOCK:16;          /*!< bit:  0..15  Region Lock Bits                   */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} NVMCTRL_LOCK_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define NVMCTRL_LOCK_OFFSET         0x20         /**< \brief (NVMCTRL_LOCK offset) Lock Register */

+#define NVMCTRL_LOCK_RESETVALUE     0x0000       /**< \brief (NVMCTRL_LOCK reset_value) Lock Register */

+

+#define NVMCTRL_LOCK_LOCK_Pos       0            /**< \brief (NVMCTRL_LOCK) Region Lock Bits */

+#define NVMCTRL_LOCK_LOCK_Msk       (0xFFFFu << NVMCTRL_LOCK_LOCK_Pos)

+#define NVMCTRL_LOCK_LOCK(value)    ((NVMCTRL_LOCK_LOCK_Msk & ((value) << NVMCTRL_LOCK_LOCK_Pos)))

+#define NVMCTRL_LOCK_MASK           0xFFFFu      /**< \brief (NVMCTRL_LOCK) MASK Register */

+

+/** \brief NVMCTRL hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct {

+  __IO NVMCTRL_CTRLA_Type        CTRLA;       /**< \brief Offset: 0x00 (R/W 16) NVM Control Register A */

+       RoReg8                    Reserved1[0x2];

+  __IO NVMCTRL_CTRLB_Type        CTRLB;       /**< \brief Offset: 0x04 (R/W 32) NVM Control Register B */

+  __IO NVMCTRL_PARAM_Type        PARAM;       /**< \brief Offset: 0x08 (R/W 32) Parameter Register */

+  __IO NVMCTRL_INTENCLR_Type     INTENCLR;    /**< \brief Offset: 0x0C (R/W  8) Interrupt Enable Clear Register */

+       RoReg8                    Reserved2[0x3];

+  __IO NVMCTRL_INTENSET_Type     INTENSET;    /**< \brief Offset: 0x10 (R/W  8) Interrupt Enable Set Register */

+       RoReg8                    Reserved3[0x3];

+  __IO NVMCTRL_INTFLAG_Type      INTFLAG;     /**< \brief Offset: 0x14 (R/W  8) Interrupt Flag Status and Clear Register */

+       RoReg8                    Reserved4[0x3];

+  __IO NVMCTRL_STATUS_Type       STATUS;      /**< \brief Offset: 0x18 (R/W 16) Status Register */

+       RoReg8                    Reserved5[0x2];

+  __IO NVMCTRL_ADDR_Type         ADDR;        /**< \brief Offset: 0x1C (R/W 32) Address Register */

+  __IO NVMCTRL_LOCK_Type         LOCK;        /**< \brief Offset: 0x20 (R/W 16) Lock Register */

+} Nvmctrl;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/*@}*/

+

+/* ************************************************************************** */

+/**  SOFTWARE PERIPHERAL API DEFINITION FOR NON-VOLATILE FUSES */

+/* ************************************************************************** */

+/** \addtogroup fuses_api Peripheral Software API */

+/*@{*/

+

+

+#define ADC_FUSES_BIASCAL_ADDR      (NVMCTRL_OTP4 + 4)

+#define ADC_FUSES_BIASCAL_Pos       3            /**< \brief (NVMCTRL_OTP4) ADC Bias Calibration */

+#define ADC_FUSES_BIASCAL_Msk       (0x7u << ADC_FUSES_BIASCAL_Pos)

+#define ADC_FUSES_BIASCAL(value)    ((ADC_FUSES_BIASCAL_Msk & ((value) << ADC_FUSES_BIASCAL_Pos)))

+

+#define ADC_FUSES_BIAS_OPA_ADDR     (NVMCTRL_OTP2 + 4)

+#define ADC_FUSES_BIAS_OPA_Pos      19           /**< \brief (NVMCTRL_OTP2) ADC OPA Bias */

+#define ADC_FUSES_BIAS_OPA_Msk      (0x1u << ADC_FUSES_BIAS_OPA_Pos)

+

+#define ADC_FUSES_BOOSTEN_ADDR      (NVMCTRL_OTP2 + 4)

+#define ADC_FUSES_BOOSTEN_Pos       17           /**< \brief (NVMCTRL_OTP2) ADC Boost Enable */

+#define ADC_FUSES_BOOSTEN_Msk       (0x1u << ADC_FUSES_BOOSTEN_Pos)

+

+#define ADC_FUSES_CMPDELAY_ADDR     (NVMCTRL_OTP2 + 4)

+#define ADC_FUSES_CMPDELAY_Pos      16           /**< \brief (NVMCTRL_OTP2) ADC Comparator Delay */

+#define ADC_FUSES_CMPDELAY_Msk      (0x1u << ADC_FUSES_CMPDELAY_Pos)

+

+#define ADC_FUSES_DCFG_ADDR         (NVMCTRL_OTP2 + 4)

+#define ADC_FUSES_DCFG_Pos          16           /**< \brief (NVMCTRL_OTP2) ADC Device Configuration */

+#define ADC_FUSES_DCFG_Msk          (0xFu << ADC_FUSES_DCFG_Pos)

+#define ADC_FUSES_DCFG(value)       ((ADC_FUSES_DCFG_Msk & ((value) << ADC_FUSES_DCFG_Pos)))

+

+#define ADC_FUSES_GAINCORR_ADDR     NVMCTRL_OTP4

+#define ADC_FUSES_GAINCORR_Pos      3            /**< \brief (NVMCTRL_OTP4) ADC Gain Correction */

+#define ADC_FUSES_GAINCORR_Msk      (0xFFFu << ADC_FUSES_GAINCORR_Pos)

+#define ADC_FUSES_GAINCORR(value)   ((ADC_FUSES_GAINCORR_Msk & ((value) << ADC_FUSES_GAINCORR_Pos)))

+

+#define ADC_FUSES_LINEARITY_0_ADDR  NVMCTRL_OTP4

+#define ADC_FUSES_LINEARITY_0_Pos   27           /**< \brief (NVMCTRL_OTP4) ADC Linearity bits 4:0 */

+#define ADC_FUSES_LINEARITY_0_Msk   (0x1Fu << ADC_FUSES_LINEARITY_0_Pos)

+#define ADC_FUSES_LINEARITY_0(value) ((ADC_FUSES_LINEARITY_0_Msk & ((value) << ADC_FUSES_LINEARITY_0_Pos)))

+

+#define ADC_FUSES_LINEARITY_1_ADDR  (NVMCTRL_OTP4 + 4)

+#define ADC_FUSES_LINEARITY_1_Pos   0            /**< \brief (NVMCTRL_OTP4) ADC Linearity bits 7:5 */

+#define ADC_FUSES_LINEARITY_1_Msk   (0x7u << ADC_FUSES_LINEARITY_1_Pos)

+#define ADC_FUSES_LINEARITY_1(value) ((ADC_FUSES_LINEARITY_1_Msk & ((value) << ADC_FUSES_LINEARITY_1_Pos)))

+

+#define ADC_FUSES_OFFSETCORR_ADDR   NVMCTRL_OTP4

+#define ADC_FUSES_OFFSETCORR_Pos    15           /**< \brief (NVMCTRL_OTP4) ADC Offset Correction */

+#define ADC_FUSES_OFFSETCORR_Msk    (0xFFFu << ADC_FUSES_OFFSETCORR_Pos)

+#define ADC_FUSES_OFFSETCORR(value) ((ADC_FUSES_OFFSETCORR_Msk & ((value) << ADC_FUSES_OFFSETCORR_Pos)))

+

+#define ADC_FUSES_VCMPULSE_ADDR     (NVMCTRL_OTP2 + 4)

+#define ADC_FUSES_VCMPULSE_Pos      18           /**< \brief (NVMCTRL_OTP2) ADC VCM Pulse */

+#define ADC_FUSES_VCMPULSE_Msk      (0x1u << ADC_FUSES_VCMPULSE_Pos)

+

+#define DSU_FUSES_DCFG0_ADDR        NVMCTRL_OTP2

+#define DSU_FUSES_DCFG0_Pos         0            /**< \brief (NVMCTRL_OTP2) Device Configuration 0 */

+#define DSU_FUSES_DCFG0_Msk         (0xFFFFFFFFu << DSU_FUSES_DCFG0_Pos)

+#define DSU_FUSES_DCFG0(value)      ((DSU_FUSES_DCFG0_Msk & ((value) << DSU_FUSES_DCFG0_Pos)))

+

+#define DSU_FUSES_DCFG1_ADDR        (NVMCTRL_OTP2 + 4)

+#define DSU_FUSES_DCFG1_Pos         0            /**< \brief (NVMCTRL_OTP2) Device Configuration 1 */

+#define DSU_FUSES_DCFG1_Msk         (0xFFFFFFFFu << DSU_FUSES_DCFG1_Pos)

+#define DSU_FUSES_DCFG1(value)      ((DSU_FUSES_DCFG1_Msk & ((value) << DSU_FUSES_DCFG1_Pos)))

+

+#define DSU_FUSES_DEV_FAMILY_CFG_0_ADDR NVMCTRL_OTP2

+#define DSU_FUSES_DEV_FAMILY_CFG_0_Pos 5            /**< \brief (NVMCTRL_OTP2) Device Family Configuration bits 26:0 */

+#define DSU_FUSES_DEV_FAMILY_CFG_0_Msk (0x7FFFFFFu << DSU_FUSES_DEV_FAMILY_CFG_0_Pos)

+#define DSU_FUSES_DEV_FAMILY_CFG_0(value) ((DSU_FUSES_DEV_FAMILY_CFG_0_Msk & ((value) << DSU_FUSES_DEV_FAMILY_CFG_0_Pos)))

+

+#define DSU_FUSES_DEV_FAMILY_CFG_1_ADDR (NVMCTRL_OTP2 + 4)

+#define DSU_FUSES_DEV_FAMILY_CFG_1_Pos 0            /**< \brief (NVMCTRL_OTP2) Device Family Configuration bits 42:27 */

+#define DSU_FUSES_DEV_FAMILY_CFG_1_Msk (0xFFFFu << DSU_FUSES_DEV_FAMILY_CFG_1_Pos)

+#define DSU_FUSES_DEV_FAMILY_CFG_1(value) ((DSU_FUSES_DEV_FAMILY_CFG_1_Msk & ((value) << DSU_FUSES_DEV_FAMILY_CFG_1_Pos)))

+

+#define DSU_FUSES_DID_DEVSEL_ADDR   NVMCTRL_OTP2

+#define DSU_FUSES_DID_DEVSEL_Pos    0            /**< \brief (NVMCTRL_OTP2) Device Number */

+#define DSU_FUSES_DID_DEVSEL_Msk    (0x1Fu << DSU_FUSES_DID_DEVSEL_Pos)

+#define DSU_FUSES_DID_DEVSEL(value) ((DSU_FUSES_DID_DEVSEL_Msk & ((value) << DSU_FUSES_DID_DEVSEL_Pos)))

+

+#define DSU_FUSES_RAM_BIAS_ADDR     (NVMCTRL_OTP2 + 4)

+#define DSU_FUSES_RAM_BIAS_Pos      20           /**< \brief (NVMCTRL_OTP2) RAM Bias */

+#define DSU_FUSES_RAM_BIAS_Msk      (0x3u << DSU_FUSES_RAM_BIAS_Pos)

+#define DSU_FUSES_RAM_BIAS(value)   ((DSU_FUSES_RAM_BIAS_Msk & ((value) << DSU_FUSES_RAM_BIAS_Pos)))

+

+#define DSU_FUSES_RAM_READ_MARGIN_ADDR (NVMCTRL_OTP2 + 4)

+#define DSU_FUSES_RAM_READ_MARGIN_Pos 22           /**< \brief (NVMCTRL_OTP2) RAM Read Margin */

+#define DSU_FUSES_RAM_READ_MARGIN_Msk (0xFu << DSU_FUSES_RAM_READ_MARGIN_Pos)

+#define DSU_FUSES_RAM_READ_MARGIN(value) ((DSU_FUSES_RAM_READ_MARGIN_Msk & ((value) << DSU_FUSES_RAM_READ_MARGIN_Pos)))

+

+#define NVMCTRL_FUSES_BOOTPROT_ADDR NVMCTRL_USER

+#define NVMCTRL_FUSES_BOOTPROT_Pos  0            /**< \brief (NVMCTRL_USER) Bootloader Size */

+#define NVMCTRL_FUSES_BOOTPROT_Msk  (0x7u << NVMCTRL_FUSES_BOOTPROT_Pos)

+#define NVMCTRL_FUSES_BOOTPROT(value) ((NVMCTRL_FUSES_BOOTPROT_Msk & ((value) << NVMCTRL_FUSES_BOOTPROT_Pos)))

+

+#define NVMCTRL_FUSES_EEPROM_SIZE_ADDR NVMCTRL_USER

+#define NVMCTRL_FUSES_EEPROM_SIZE_Pos 4            /**< \brief (NVMCTRL_USER) EEPROM Size */

+#define NVMCTRL_FUSES_EEPROM_SIZE_Msk (0x7u << NVMCTRL_FUSES_EEPROM_SIZE_Pos)

+#define NVMCTRL_FUSES_EEPROM_SIZE(value) ((NVMCTRL_FUSES_EEPROM_SIZE_Msk & ((value) << NVMCTRL_FUSES_EEPROM_SIZE_Pos)))

+

+#define NVMCTRL_FUSES_LOCKFIELD_ADDR NVMCTRL_LOCKBIT

+#define NVMCTRL_FUSES_LOCKFIELD_Pos 0            /**< \brief (NVMCTRL_LOCKBIT) LOCK Region */

+#define NVMCTRL_FUSES_LOCKFIELD_Msk (0xFFu << NVMCTRL_FUSES_LOCKFIELD_Pos)

+#define NVMCTRL_FUSES_LOCKFIELD(value) ((NVMCTRL_FUSES_LOCKFIELD_Msk & ((value) << NVMCTRL_FUSES_LOCKFIELD_Pos)))

+

+#define NVMCTRL_FUSES_NVMP_ADDR     NVMCTRL_OTP1

+#define NVMCTRL_FUSES_NVMP_Pos      16           /**< \brief (NVMCTRL_OTP1) Number of NVM Pages */

+#define NVMCTRL_FUSES_NVMP_Msk      (0xFFFFu << NVMCTRL_FUSES_NVMP_Pos)

+#define NVMCTRL_FUSES_NVMP(value)   ((NVMCTRL_FUSES_NVMP_Msk & ((value) << NVMCTRL_FUSES_NVMP_Pos)))

+

+#define NVMCTRL_FUSES_NVM_LOCK_ADDR NVMCTRL_OTP1

+#define NVMCTRL_FUSES_NVM_LOCK_Pos  0            /**< \brief (NVMCTRL_OTP1) NVM Lock */

+#define NVMCTRL_FUSES_NVM_LOCK_Msk  (0xFFu << NVMCTRL_FUSES_NVM_LOCK_Pos)

+#define NVMCTRL_FUSES_NVM_LOCK(value) ((NVMCTRL_FUSES_NVM_LOCK_Msk & ((value) << NVMCTRL_FUSES_NVM_LOCK_Pos)))

+

+#define NVMCTRL_FUSES_PSZ_ADDR      NVMCTRL_OTP1

+#define NVMCTRL_FUSES_PSZ_Pos       8            /**< \brief (NVMCTRL_OTP1) NVM Page Size */

+#define NVMCTRL_FUSES_PSZ_Msk       (0xFu << NVMCTRL_FUSES_PSZ_Pos)

+#define NVMCTRL_FUSES_PSZ(value)    ((NVMCTRL_FUSES_PSZ_Msk & ((value) << NVMCTRL_FUSES_PSZ_Pos)))

+

+#define NVMCTRL_FUSES_REGION_LOCKS_ADDR (NVMCTRL_USER + 4)

+#define NVMCTRL_FUSES_REGION_LOCKS_Pos 16           /**< \brief (NVMCTRL_USER) NVM Region Locks */

+#define NVMCTRL_FUSES_REGION_LOCKS_Msk (0xFFFFu << NVMCTRL_FUSES_REGION_LOCKS_Pos)

+#define NVMCTRL_FUSES_REGION_LOCKS(value) ((NVMCTRL_FUSES_REGION_LOCKS_Msk & ((value) << NVMCTRL_FUSES_REGION_LOCKS_Pos)))

+

+#define SYSCTRL_FUSES_OSC32KCAL_ADDR   (NVMCTRL_OTP4 + 4)

+#define SYSCTRL_FUSES_OSC32KCAL_Pos    6            /**< \brief (NVMCTRL_OTP4) OSC32K Calibration */

+#define SYSCTRL_FUSES_OSC32KCAL_Msk    (0x7Fu << SYSCTRL_FUSES_OSC32KCAL_Pos)

+#define SYSCTRL_FUSES_OSC32KCAL(value) ((SYSCTRL_FUSES_OSC32KCAL_Msk & ((value) << SYSCTRL_FUSES_OSC32KCAL_Pos)))

+

+#define SYSCTRL_FUSES_BOD12USERLEVEL_ADDR NVMCTRL_USER

+#define SYSCTRL_FUSES_BOD12USERLEVEL_Pos 17           /**< \brief (NVMCTRL_USER) BOD12 User Level */

+#define SYSCTRL_FUSES_BOD12USERLEVEL_Msk (0x1Fu << SYSCTRL_FUSES_BOD12USERLEVEL_Pos)

+#define SYSCTRL_FUSES_BOD12USERLEVEL(value) ((SYSCTRL_FUSES_BOD12USERLEVEL_Msk & ((value) << SYSCTRL_FUSES_BOD12USERLEVEL_Pos)))

+

+#define SYSCTRL_FUSES_BOD12_ACTION_ADDR NVMCTRL_USER

+#define SYSCTRL_FUSES_BOD12_ACTION_Pos 23           /**< \brief (NVMCTRL_USER) BOD12 Action */

+#define SYSCTRL_FUSES_BOD12_ACTION_Msk (0x3u << SYSCTRL_FUSES_BOD12_ACTION_Pos)

+#define SYSCTRL_FUSES_BOD12_ACTION(value) ((SYSCTRL_FUSES_BOD12_ACTION_Msk & ((value) << SYSCTRL_FUSES_BOD12_ACTION_Pos)))

+

+#define SYSCTRL_FUSES_BOD12_EN_ADDR NVMCTRL_USER

+#define SYSCTRL_FUSES_BOD12_EN_Pos  22           /**< \brief (NVMCTRL_USER) BOD12 Enable */

+#define SYSCTRL_FUSES_BOD12_EN_Msk  (0x1u << SYSCTRL_FUSES_BOD12_EN_Pos)

+

+#define SYSCTRL_FUSES_BOD33USERLEVEL_ADDR NVMCTRL_USER

+#define SYSCTRL_FUSES_BOD33USERLEVEL_Pos 8            /**< \brief (NVMCTRL_USER) BOD33 User Level */

+#define SYSCTRL_FUSES_BOD33USERLEVEL_Msk (0x3Fu << SYSCTRL_FUSES_BOD33USERLEVEL_Pos)

+#define SYSCTRL_FUSES_BOD33USERLEVEL(value) ((SYSCTRL_FUSES_BOD33USERLEVEL_Msk & ((value) << SYSCTRL_FUSES_BOD33USERLEVEL_Pos)))

+

+#define SYSCTRL_FUSES_BOD33_ACTION_ADDR NVMCTRL_USER

+#define SYSCTRL_FUSES_BOD33_ACTION_Pos 15           /**< \brief (NVMCTRL_USER) BOD33 Action */

+#define SYSCTRL_FUSES_BOD33_ACTION_Msk (0x3u << SYSCTRL_FUSES_BOD33_ACTION_Pos)

+#define SYSCTRL_FUSES_BOD33_ACTION(value) ((SYSCTRL_FUSES_BOD33_ACTION_Msk & ((value) << SYSCTRL_FUSES_BOD33_ACTION_Pos)))

+

+#define SYSCTRL_FUSES_BOD33_EN_ADDR NVMCTRL_USER

+#define SYSCTRL_FUSES_BOD33_EN_Pos  14           /**< \brief (NVMCTRL_USER) BOD33 Enable */

+#define SYSCTRL_FUSES_BOD33_EN_Msk  (0x1u << SYSCTRL_FUSES_BOD33_EN_Pos)

+

+#define SYSCTRL_FUSES_ULPVREG_ADDR  NVMCTRL_OTP4

+#define SYSCTRL_FUSES_ULPVREG_Pos   0            /**< \brief (NVMCTRL_OTP4) ULP Regulator Fallback Mode */

+#define SYSCTRL_FUSES_ULPVREG_Msk   (0x7u << SYSCTRL_FUSES_ULPVREG_Pos)

+#define SYSCTRL_FUSES_ULPVREG(value) ((SYSCTRL_FUSES_ULPVREG_Msk & ((value) << SYSCTRL_FUSES_ULPVREG_Pos)))

+

+#define WDT_FUSES_ALWAYSON_ADDR     NVMCTRL_USER

+#define WDT_FUSES_ALWAYSON_Pos      26           /**< \brief (NVMCTRL_USER) WDT Always On */

+#define WDT_FUSES_ALWAYSON_Msk      (0x1u << WDT_FUSES_ALWAYSON_Pos)

+

+#define WDT_FUSES_ENABLE_ADDR       NVMCTRL_USER

+#define WDT_FUSES_ENABLE_Pos        25           /**< \brief (NVMCTRL_USER) WDT Enable */

+#define WDT_FUSES_ENABLE_Msk        (0x1u << WDT_FUSES_ENABLE_Pos)

+

+#define WDT_FUSES_EWOFFSET_ADDR     (NVMCTRL_USER + 4)

+#define WDT_FUSES_EWOFFSET_Pos      3            /**< \brief (NVMCTRL_USER) WDT Early Warning Offset */

+#define WDT_FUSES_EWOFFSET_Msk      (0xFu << WDT_FUSES_EWOFFSET_Pos)

+#define WDT_FUSES_EWOFFSET(value)   ((WDT_FUSES_EWOFFSET_Msk & ((value) << WDT_FUSES_EWOFFSET_Pos)))

+

+#define WDT_FUSES_PER_ADDR          NVMCTRL_USER

+#define WDT_FUSES_PER_Pos           27           /**< \brief (NVMCTRL_USER) WDT Period */

+#define WDT_FUSES_PER_Msk           (0xFu << WDT_FUSES_PER_Pos)

+#define WDT_FUSES_PER(value)        ((WDT_FUSES_PER_Msk & ((value) << WDT_FUSES_PER_Pos)))

+

+#define WDT_FUSES_WEN_ADDR          (NVMCTRL_USER + 4)

+#define WDT_FUSES_WEN_Pos           7            /**< \brief (NVMCTRL_USER) WDT Window Mode Enable */

+#define WDT_FUSES_WEN_Msk           (0x1u << WDT_FUSES_WEN_Pos)

+

+#define WDT_FUSES_WINDOW_0_ADDR     NVMCTRL_USER

+#define WDT_FUSES_WINDOW_0_Pos      31           /**< \brief (NVMCTRL_USER) WDT Window bit 0 */

+#define WDT_FUSES_WINDOW_0_Msk      (0x1u << WDT_FUSES_WINDOW_0_Pos)

+

+#define WDT_FUSES_WINDOW_1_ADDR     (NVMCTRL_USER + 4)

+#define WDT_FUSES_WINDOW_1_Pos      0            /**< \brief (NVMCTRL_USER) WDT Window bits 3:1 */

+#define WDT_FUSES_WINDOW_1_Msk      (0x7u << WDT_FUSES_WINDOW_1_Pos)

+#define WDT_FUSES_WINDOW_1(value)   ((WDT_FUSES_WINDOW_1_Msk & ((value) << WDT_FUSES_WINDOW_1_Pos)))

+

+/*@}*/

+

+#endif /* _SAMD20_NVMCTRL_COMPONENT_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_pac.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_pac.h
new file mode 100644
index 0000000..1c86856
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_pac.h
@@ -0,0 +1,103 @@
+/**

+ * \file

+ *

+ * \brief Component description for PAC

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_PAC_COMPONENT_

+#define _SAMD20_PAC_COMPONENT_

+

+/* ========================================================================== */

+/**  SOFTWARE API DEFINITION FOR PAC */

+/* ========================================================================== */

+/** \addtogroup SAMD20_PAC Peripheral Access Controller */

+/*@{*/

+

+#define REV_PAC                     0x101

+

+/* -------- PAC_WPCLR : (PAC Offset: 0x0) (R/W 32) Write Protection Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t :1;               /*!< bit:      0  Reserved                           */

+    uint32_t WP:31;            /*!< bit:  1..31  Write Protection Clear             */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} PAC_WPCLR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PAC_WPCLR_OFFSET            0x0          /**< \brief (PAC_WPCLR offset) Write Protection Clear Register */

+#define PAC_WPCLR_RESETVALUE        0x00000000   /**< \brief (PAC_WPCLR reset_value) Write Protection Clear Register */

+

+#define PAC_WPCLR_WP_Pos            1            /**< \brief (PAC_WPCLR) Write Protection Clear */

+#define PAC_WPCLR_WP_Msk            (0x7FFFFFFFu << PAC_WPCLR_WP_Pos)

+#define PAC_WPCLR_WP(value)         ((PAC_WPCLR_WP_Msk & ((value) << PAC_WPCLR_WP_Pos)))

+#define PAC_WPCLR_MASK              0xFFFFFFFEu  /**< \brief (PAC_WPCLR) MASK Register */

+

+/* -------- PAC_WPSET : (PAC Offset: 0x4) (R/W 32) Write Protection Set Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t :1;               /*!< bit:      0  Reserved                           */

+    uint32_t WP:31;            /*!< bit:  1..31  Write Protection Set               */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} PAC_WPSET_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PAC_WPSET_OFFSET            0x4          /**< \brief (PAC_WPSET offset) Write Protection Set Register */

+#define PAC_WPSET_RESETVALUE        0x00000000   /**< \brief (PAC_WPSET reset_value) Write Protection Set Register */

+

+#define PAC_WPSET_WP_Pos            1            /**< \brief (PAC_WPSET) Write Protection Set */

+#define PAC_WPSET_WP_Msk            (0x7FFFFFFFu << PAC_WPSET_WP_Pos)

+#define PAC_WPSET_WP(value)         ((PAC_WPSET_WP_Msk & ((value) << PAC_WPSET_WP_Pos)))

+#define PAC_WPSET_MASK              0xFFFFFFFEu  /**< \brief (PAC_WPSET) MASK Register */

+

+/** \brief PAC hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct {

+  __IO PAC_WPCLR_Type            WPCLR;       /**< \brief Offset: 0x0 (R/W 32) Write Protection Clear Register */

+  __IO PAC_WPSET_Type            WPSET;       /**< \brief Offset: 0x4 (R/W 32) Write Protection Set Register */

+} Pac;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/*@}*/

+

+#endif /* _SAMD20_PAC_COMPONENT_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_pm.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_pm.h
new file mode 100644
index 0000000..8089ca9
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_pm.h
@@ -0,0 +1,461 @@
+/**

+ * \file

+ *

+ * \brief Component description for PM

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_PM_COMPONENT_

+#define _SAMD20_PM_COMPONENT_

+

+/* ========================================================================== */

+/**  SOFTWARE API DEFINITION FOR PM */

+/* ========================================================================== */

+/** \addtogroup SAMD20_PM Power Manager */

+/*@{*/

+

+#define REV_PM                      0x200

+

+/* -------- PM_CTRL : (PM Offset: 0x00) (R/W  8) Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  :2;               /*!< bit:  0.. 1  Reserved                           */

+    uint8_t  CFDEN:1;          /*!< bit:      2  Clock Failure Detector Enable      */

+    uint8_t  :1;               /*!< bit:      3  Reserved                           */

+    uint8_t  BKUPCLK:1;        /*!< bit:      4  Backup Clock Select                */

+    uint8_t  :3;               /*!< bit:  5.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} PM_CTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PM_CTRL_OFFSET              0x00         /**< \brief (PM_CTRL offset) Control Register */

+#define PM_CTRL_RESETVALUE          0x00         /**< \brief (PM_CTRL reset_value) Control Register */

+

+#define PM_CTRL_CFDEN_Pos           2            /**< \brief (PM_CTRL) Clock Failure Detector Enable */

+#define PM_CTRL_CFDEN               (0x1u << PM_CTRL_CFDEN_Pos)

+#define PM_CTRL_BKUPCLK_Pos         4            /**< \brief (PM_CTRL) Backup Clock Select */

+#define PM_CTRL_BKUPCLK             (0x1u << PM_CTRL_BKUPCLK_Pos)

+#define PM_CTRL_MASK                0x14u        /**< \brief (PM_CTRL) MASK Register */

+

+/* -------- PM_SLEEP : (PM Offset: 0x01) (R/W  8) Sleep Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  IDLE:2;           /*!< bit:  0.. 1  Idle Level                         */

+    uint8_t  :6;               /*!< bit:  2.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} PM_SLEEP_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PM_SLEEP_OFFSET             0x01         /**< \brief (PM_SLEEP offset) Sleep Register */

+#define PM_SLEEP_RESETVALUE         0x00         /**< \brief (PM_SLEEP reset_value) Sleep Register */

+

+#define PM_SLEEP_IDLE_Pos           0            /**< \brief (PM_SLEEP) Idle Level */

+#define PM_SLEEP_IDLE_Msk           (0x3u << PM_SLEEP_IDLE_Pos)

+#define PM_SLEEP_IDLE(value)        ((PM_SLEEP_IDLE_Msk & ((value) << PM_SLEEP_IDLE_Pos)))

+#define PM_SLEEP_MASK               0x03u        /**< \brief (PM_SLEEP) MASK Register */

+

+/* -------- PM_CPUSEL : (PM Offset: 0x08) (R/W  8) CPU Clock Select -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  CPUDIV:3;         /*!< bit:  0.. 2  CPU Clock Select                   */

+    uint8_t  :5;               /*!< bit:  3.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} PM_CPUSEL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PM_CPUSEL_OFFSET            0x08         /**< \brief (PM_CPUSEL offset) CPU Clock Select */

+#define PM_CPUSEL_RESETVALUE        0x00         /**< \brief (PM_CPUSEL reset_value) CPU Clock Select */

+

+#define PM_CPUSEL_CPUDIV_Pos        0            /**< \brief (PM_CPUSEL) CPU Clock Select */

+#define PM_CPUSEL_CPUDIV_Msk        (0x7u << PM_CPUSEL_CPUDIV_Pos)

+#define PM_CPUSEL_CPUDIV(value)     ((PM_CPUSEL_CPUDIV_Msk & ((value) << PM_CPUSEL_CPUDIV_Pos)))

+#define PM_CPUSEL_MASK              0x07u        /**< \brief (PM_CPUSEL) MASK Register */

+

+/* -------- PM_APBASEL : (PM Offset: 0x09) (R/W  8) APBA Clock Select -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  APBADIV:3;        /*!< bit:  0.. 2  APBA Clock Select                  */

+    uint8_t  :5;               /*!< bit:  3.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} PM_APBASEL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PM_APBASEL_OFFSET           0x09         /**< \brief (PM_APBASEL offset) APBA Clock Select */

+#define PM_APBASEL_RESETVALUE       0x00         /**< \brief (PM_APBASEL reset_value) APBA Clock Select */

+

+#define PM_APBASEL_APBADIV_Pos      0            /**< \brief (PM_APBASEL) APBA Clock Select */

+#define PM_APBASEL_APBADIV_Msk      (0x7u << PM_APBASEL_APBADIV_Pos)

+#define PM_APBASEL_APBADIV(value)   ((PM_APBASEL_APBADIV_Msk & ((value) << PM_APBASEL_APBADIV_Pos)))

+#define PM_APBASEL_MASK             0x07u        /**< \brief (PM_APBASEL) MASK Register */

+

+/* -------- PM_APBBSEL : (PM Offset: 0x0A) (R/W  8) APBB Clock Select -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  APBBDIV:3;        /*!< bit:  0.. 2  PB Clock Select                    */

+    uint8_t  :5;               /*!< bit:  3.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} PM_APBBSEL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PM_APBBSEL_OFFSET           0x0A         /**< \brief (PM_APBBSEL offset) APBB Clock Select */

+#define PM_APBBSEL_RESETVALUE       0x00         /**< \brief (PM_APBBSEL reset_value) APBB Clock Select */

+

+#define PM_APBBSEL_APBBDIV_Pos      0            /**< \brief (PM_APBBSEL) PB Clock Select */

+#define PM_APBBSEL_APBBDIV_Msk      (0x7u << PM_APBBSEL_APBBDIV_Pos)

+#define PM_APBBSEL_APBBDIV(value)   ((PM_APBBSEL_APBBDIV_Msk & ((value) << PM_APBBSEL_APBBDIV_Pos)))

+#define PM_APBBSEL_MASK             0x07u        /**< \brief (PM_APBBSEL) MASK Register */

+

+/* -------- PM_APBCSEL : (PM Offset: 0x0B) (R/W  8) APBC Clock Select -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  APBCDIV:3;        /*!< bit:  0.. 2  APBC Clock Select                  */

+    uint8_t  :5;               /*!< bit:  3.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} PM_APBCSEL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PM_APBCSEL_OFFSET           0x0B         /**< \brief (PM_APBCSEL offset) APBC Clock Select */

+#define PM_APBCSEL_RESETVALUE       0x00         /**< \brief (PM_APBCSEL reset_value) APBC Clock Select */

+

+#define PM_APBCSEL_APBCDIV_Pos      0            /**< \brief (PM_APBCSEL) APBC Clock Select */

+#define PM_APBCSEL_APBCDIV_Msk      (0x7u << PM_APBCSEL_APBCDIV_Pos)

+#define PM_APBCSEL_APBCDIV(value)   ((PM_APBCSEL_APBCDIV_Msk & ((value) << PM_APBCSEL_APBCDIV_Pos)))

+#define PM_APBCSEL_MASK             0x07u        /**< \brief (PM_APBCSEL) MASK Register */

+

+/* -------- PM_AHBMASK : (PM Offset: 0x14) (R/W 32) AHB Mask -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t HPB0:1;           /*!< bit:      0  HPB0 AHB Clock Mask                */

+    uint32_t HPB1:1;           /*!< bit:      1  HPB1 AHB Clock Mask                */

+    uint32_t HPB2:1;           /*!< bit:      2  HPB2 AHB Clock Mask                */

+    uint32_t DSU:1;            /*!< bit:      3  DSU AHB Clock Mask                 */

+    uint32_t NVMCTRL:1;        /*!< bit:      4  NVMCTRL AHB Clock Mask             */

+    uint32_t :27;              /*!< bit:  5..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} PM_AHBMASK_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PM_AHBMASK_OFFSET           0x14         /**< \brief (PM_AHBMASK offset) AHB Mask */

+#define PM_AHBMASK_RESETVALUE       0x0000001F   /**< \brief (PM_AHBMASK reset_value) AHB Mask */

+

+#define PM_AHBMASK_HPB0_Pos         0            /**< \brief (PM_AHBMASK) HPB0 AHB Clock Mask */

+#define PM_AHBMASK_HPB0             (0x1u << PM_AHBMASK_HPB0_Pos)

+#define PM_AHBMASK_HPB1_Pos         1            /**< \brief (PM_AHBMASK) HPB1 AHB Clock Mask */

+#define PM_AHBMASK_HPB1             (0x1u << PM_AHBMASK_HPB1_Pos)

+#define PM_AHBMASK_HPB2_Pos         2            /**< \brief (PM_AHBMASK) HPB2 AHB Clock Mask */

+#define PM_AHBMASK_HPB2             (0x1u << PM_AHBMASK_HPB2_Pos)

+#define PM_AHBMASK_DSU_Pos          3            /**< \brief (PM_AHBMASK) DSU AHB Clock Mask */

+#define PM_AHBMASK_DSU              (0x1u << PM_AHBMASK_DSU_Pos)

+#define PM_AHBMASK_NVMCTRL_Pos      4            /**< \brief (PM_AHBMASK) NVMCTRL AHB Clock Mask */

+#define PM_AHBMASK_NVMCTRL          (0x1u << PM_AHBMASK_NVMCTRL_Pos)

+#define PM_AHBMASK_MASK             0x0000001Fu  /**< \brief (PM_AHBMASK) MASK Register */

+

+/* -------- PM_APBAMASK : (PM Offset: 0x18) (R/W 32) APBA Mask -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t PAC0:1;           /*!< bit:      0  PAC0 APB Clock Mask                */

+    uint32_t PM:1;             /*!< bit:      1  PM APB Clock Mask                  */

+    uint32_t SYSCTRL:1;        /*!< bit:      2  SYSCTRL APB Clock Mask             */

+    uint32_t GCLK:1;           /*!< bit:      3  GCLK APB Clock Mask                */

+    uint32_t WDT:1;            /*!< bit:      4  WDT APB Clock Mask                 */

+    uint32_t RTC:1;            /*!< bit:      5  RTC APB Clock Mask                 */

+    uint32_t EIC:1;            /*!< bit:      6  EIC APB Clock Mask                 */

+    uint32_t :25;              /*!< bit:  7..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} PM_APBAMASK_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PM_APBAMASK_OFFSET          0x18         /**< \brief (PM_APBAMASK offset) APBA Mask */

+#define PM_APBAMASK_RESETVALUE      0x0000007F   /**< \brief (PM_APBAMASK reset_value) APBA Mask */

+

+#define PM_APBAMASK_PAC0_Pos        0            /**< \brief (PM_APBAMASK) PAC0 APB Clock Mask */

+#define PM_APBAMASK_PAC0            (0x1u << PM_APBAMASK_PAC0_Pos)

+#define PM_APBAMASK_PM_Pos          1            /**< \brief (PM_APBAMASK) PM APB Clock Mask */

+#define PM_APBAMASK_PM              (0x1u << PM_APBAMASK_PM_Pos)

+#define PM_APBAMASK_SYSCTRL_Pos     2            /**< \brief (PM_APBAMASK) SYSCTRL APB Clock Mask */

+#define PM_APBAMASK_SYSCTRL         (0x1u << PM_APBAMASK_SYSCTRL_Pos)

+#define PM_APBAMASK_GCLK_Pos        3            /**< \brief (PM_APBAMASK) GCLK APB Clock Mask */

+#define PM_APBAMASK_GCLK            (0x1u << PM_APBAMASK_GCLK_Pos)

+#define PM_APBAMASK_WDT_Pos         4            /**< \brief (PM_APBAMASK) WDT APB Clock Mask */

+#define PM_APBAMASK_WDT             (0x1u << PM_APBAMASK_WDT_Pos)

+#define PM_APBAMASK_RTC_Pos         5            /**< \brief (PM_APBAMASK) RTC APB Clock Mask */

+#define PM_APBAMASK_RTC             (0x1u << PM_APBAMASK_RTC_Pos)

+#define PM_APBAMASK_EIC_Pos         6            /**< \brief (PM_APBAMASK) EIC APB Clock Mask */

+#define PM_APBAMASK_EIC             (0x1u << PM_APBAMASK_EIC_Pos)

+#define PM_APBAMASK_MASK            0x0000007Fu  /**< \brief (PM_APBAMASK) MASK Register */

+

+/* -------- PM_APBBMASK : (PM Offset: 0x1C) (R/W 32) APBB Mask -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t PAC1:1;           /*!< bit:      0  PAC1 APB Clock Mask                */

+    uint32_t DSU:1;            /*!< bit:      1  DSU APB Clock Mask                 */

+    uint32_t NVMCTRL:1;        /*!< bit:      2  NVMCTRL APB Clock Mask             */

+    uint32_t PORT:1;           /*!< bit:      3  PORT APB Clock Mask                */

+    uint32_t :28;              /*!< bit:  4..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} PM_APBBMASK_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PM_APBBMASK_OFFSET          0x1C         /**< \brief (PM_APBBMASK offset) APBB Mask */

+#define PM_APBBMASK_RESETVALUE      0x0000001F   /**< \brief (PM_APBBMASK reset_value) APBB Mask */

+

+#define PM_APBBMASK_PAC1_Pos        0            /**< \brief (PM_APBBMASK) PAC1 APB Clock Mask */

+#define PM_APBBMASK_PAC1            (0x1u << PM_APBBMASK_PAC1_Pos)

+#define PM_APBBMASK_DSU_Pos         1            /**< \brief (PM_APBBMASK) DSU APB Clock Mask */

+#define PM_APBBMASK_DSU             (0x1u << PM_APBBMASK_DSU_Pos)

+#define PM_APBBMASK_NVMCTRL_Pos     2            /**< \brief (PM_APBBMASK) NVMCTRL APB Clock Mask */

+#define PM_APBBMASK_NVMCTRL         (0x1u << PM_APBBMASK_NVMCTRL_Pos)

+#define PM_APBBMASK_PORT_Pos        3            /**< \brief (PM_APBBMASK) PORT APB Clock Mask */

+#define PM_APBBMASK_PORT            (0x1u << PM_APBBMASK_PORT_Pos)

+#define PM_APBBMASK_MASK            0x0000000Fu  /**< \brief (PM_APBBMASK) MASK Register */

+

+/* -------- PM_APBCMASK : (PM Offset: 0x20) (R/W 32) APBC Mask -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t PAC2:1;           /*!< bit:      0  PAC2 APB Clock Mask                */

+    uint32_t EVSYS:1;          /*!< bit:      1  EVSYS APB Clock Mask               */

+    uint32_t SERCOM0:1;        /*!< bit:      2  SERCOM0 APB Clock Mask             */

+    uint32_t SERCOM1:1;        /*!< bit:      3  SERCOM1 APB Clock Mask             */

+    uint32_t SERCOM2:1;        /*!< bit:      4  SERCOM2 APB Clock Mask             */

+    uint32_t SERCOM3:1;        /*!< bit:      5  SERCOM3 APB Clock Mask             */

+    uint32_t SERCOM4:1;        /*!< bit:      6  SERCOM4 APB Clock Mask             */

+    uint32_t SERCOM5:1;        /*!< bit:      7  SERCOM5 APB Clock Mask             */

+    uint32_t TC0:1;            /*!< bit:      8  TC0 APB Clock Mask                 */

+    uint32_t TC1:1;            /*!< bit:      9  TC1 APB Clock Mask                 */

+    uint32_t TC2:1;            /*!< bit:     10  TC2 APB Clock Mask                 */

+    uint32_t TC3:1;            /*!< bit:     11  TC3 APB Clock Mask                 */

+    uint32_t TC4:1;            /*!< bit:     12  TC4 APB Clock Mask                 */

+    uint32_t TC5:1;            /*!< bit:     13  TC5 APB Clock Mask                 */

+    uint32_t TC6:1;            /*!< bit:     14  TC6 APB Clock Mask                 */

+    uint32_t TC7:1;            /*!< bit:     15  TC7 APB Clock Mask                 */

+    uint32_t ADC:1;            /*!< bit:     16  ADC APB Clock Mask                 */

+    uint32_t AC:1;             /*!< bit:     17  AC APB Clock Mask                  */

+    uint32_t DAC:1;            /*!< bit:     18  DAC APB Clock Mask                 */

+    uint32_t :13;              /*!< bit: 19..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} PM_APBCMASK_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PM_APBCMASK_OFFSET          0x20         /**< \brief (PM_APBCMASK offset) APBC Mask */

+#define PM_APBCMASK_RESETVALUE      0x00010000   /**< \brief (PM_APBCMASK reset_value) APBC Mask */

+

+#define PM_APBCMASK_PAC2_Pos        0            /**< \brief (PM_APBCMASK) PAC2 APB Clock Mask */

+#define PM_APBCMASK_PAC2            (0x1u << PM_APBCMASK_PAC2_Pos)

+#define PM_APBCMASK_EVSYS_Pos       1            /**< \brief (PM_APBCMASK) EVSYS APB Clock Mask */

+#define PM_APBCMASK_EVSYS           (0x1u << PM_APBCMASK_EVSYS_Pos)

+#define PM_APBCMASK_SERCOM0_Pos     2            /**< \brief (PM_APBCMASK) SERCOM0 APB Clock Mask */

+#define PM_APBCMASK_SERCOM0         (0x1u << PM_APBCMASK_SERCOM0_Pos)

+#define PM_APBCMASK_SERCOM1_Pos     3            /**< \brief (PM_APBCMASK) SERCOM1 APB Clock Mask */

+#define PM_APBCMASK_SERCOM1         (0x1u << PM_APBCMASK_SERCOM1_Pos)

+#define PM_APBCMASK_SERCOM2_Pos     4            /**< \brief (PM_APBCMASK) SERCOM2 APB Clock Mask */

+#define PM_APBCMASK_SERCOM2         (0x1u << PM_APBCMASK_SERCOM2_Pos)

+#define PM_APBCMASK_SERCOM3_Pos     5            /**< \brief (PM_APBCMASK) SERCOM3 APB Clock Mask */

+#define PM_APBCMASK_SERCOM3         (0x1u << PM_APBCMASK_SERCOM3_Pos)

+#define PM_APBCMASK_SERCOM4_Pos     6            /**< \brief (PM_APBCMASK) SERCOM4 APB Clock Mask */

+#define PM_APBCMASK_SERCOM4         (0x1u << PM_APBCMASK_SERCOM4_Pos)

+#define PM_APBCMASK_SERCOM5_Pos     7            /**< \brief (PM_APBCMASK) SERCOM5 APB Clock Mask */

+#define PM_APBCMASK_SERCOM5         (0x1u << PM_APBCMASK_SERCOM5_Pos)

+#define PM_APBCMASK_TC0_Pos         8            /**< \brief (PM_APBCMASK) TC0 APB Clock Mask */

+#define PM_APBCMASK_TC0             (0x1u << PM_APBCMASK_TC0_Pos)

+#define PM_APBCMASK_TC1_Pos         9            /**< \brief (PM_APBCMASK) TC1 APB Clock Mask */

+#define PM_APBCMASK_TC1             (0x1u << PM_APBCMASK_TC1_Pos)

+#define PM_APBCMASK_TC2_Pos         10           /**< \brief (PM_APBCMASK) TC2 APB Clock Mask */

+#define PM_APBCMASK_TC2             (0x1u << PM_APBCMASK_TC2_Pos)

+#define PM_APBCMASK_TC3_Pos         11           /**< \brief (PM_APBCMASK) TC3 APB Clock Mask */

+#define PM_APBCMASK_TC3             (0x1u << PM_APBCMASK_TC3_Pos)

+#define PM_APBCMASK_TC4_Pos         12           /**< \brief (PM_APBCMASK) TC4 APB Clock Mask */

+#define PM_APBCMASK_TC4             (0x1u << PM_APBCMASK_TC4_Pos)

+#define PM_APBCMASK_TC5_Pos         13           /**< \brief (PM_APBCMASK) TC5 APB Clock Mask */

+#define PM_APBCMASK_TC5             (0x1u << PM_APBCMASK_TC5_Pos)

+#define PM_APBCMASK_TC6_Pos         14           /**< \brief (PM_APBCMASK) TC6 APB Clock Mask */

+#define PM_APBCMASK_TC6             (0x1u << PM_APBCMASK_TC6_Pos)

+#define PM_APBCMASK_TC7_Pos         15           /**< \brief (PM_APBCMASK) TC7 APB Clock Mask */

+#define PM_APBCMASK_TC7             (0x1u << PM_APBCMASK_TC7_Pos)

+#define PM_APBCMASK_ADC_Pos         16           /**< \brief (PM_APBCMASK) ADC APB Clock Mask */

+#define PM_APBCMASK_ADC             (0x1u << PM_APBCMASK_ADC_Pos)

+#define PM_APBCMASK_AC_Pos          17           /**< \brief (PM_APBCMASK) AC APB Clock Mask */

+#define PM_APBCMASK_AC              (0x1u << PM_APBCMASK_AC_Pos)

+#define PM_APBCMASK_DAC_Pos         18           /**< \brief (PM_APBCMASK) DAC APB Clock Mask */

+#define PM_APBCMASK_DAC             (0x1u << PM_APBCMASK_DAC_Pos)

+#define PM_APBCMASK_MASK            0x0007FFFFu  /**< \brief (PM_APBCMASK) MASK Register */

+

+/* -------- PM_INTENCLR : (PM Offset: 0x34) (R/W  8) Interrupt Enable Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  CKRDY:1;          /*!< bit:      0  Clock Ready Interrupt Enable Clear */

+    uint8_t  CFD:1;            /*!< bit:      1  Clock Failure Detector Enable Clear */

+    uint8_t  :6;               /*!< bit:  2.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} PM_INTENCLR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PM_INTENCLR_OFFSET          0x34         /**< \brief (PM_INTENCLR offset) Interrupt Enable Clear Register */

+#define PM_INTENCLR_RESETVALUE      0x00         /**< \brief (PM_INTENCLR reset_value) Interrupt Enable Clear Register */

+

+#define PM_INTENCLR_CKRDY_Pos       0            /**< \brief (PM_INTENCLR) Clock Ready Interrupt Enable Clear */

+#define PM_INTENCLR_CKRDY           (0x1u << PM_INTENCLR_CKRDY_Pos)

+#define PM_INTENCLR_CFD_Pos         1            /**< \brief (PM_INTENCLR) Clock Failure Detector Enable Clear */

+#define PM_INTENCLR_CFD             (0x1u << PM_INTENCLR_CFD_Pos)

+#define PM_INTENCLR_MASK            0x03u        /**< \brief (PM_INTENCLR) MASK Register */

+

+/* -------- PM_INTENSET : (PM Offset: 0x35) (R/W  8) Interrupt Enable Set Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  CKRDY:1;          /*!< bit:      0  Clock Ready Interrupt Enable Set   */

+    uint8_t  CFD:1;            /*!< bit:      1  Clock Failure Detector Enable Set  */

+    uint8_t  :6;               /*!< bit:  2.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} PM_INTENSET_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PM_INTENSET_OFFSET          0x35         /**< \brief (PM_INTENSET offset) Interrupt Enable Set Register */

+#define PM_INTENSET_RESETVALUE      0x00         /**< \brief (PM_INTENSET reset_value) Interrupt Enable Set Register */

+

+#define PM_INTENSET_CKRDY_Pos       0            /**< \brief (PM_INTENSET) Clock Ready Interrupt Enable Set */

+#define PM_INTENSET_CKRDY           (0x1u << PM_INTENSET_CKRDY_Pos)

+#define PM_INTENSET_CFD_Pos         1            /**< \brief (PM_INTENSET) Clock Failure Detector Enable Set */

+#define PM_INTENSET_CFD             (0x1u << PM_INTENSET_CFD_Pos)

+#define PM_INTENSET_MASK            0x03u        /**< \brief (PM_INTENSET) MASK Register */

+

+/* -------- PM_INTFLAG : (PM Offset: 0x36) (R/W  8) Interrupt Flag Status and Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  CKRDY:1;          /*!< bit:      0  Clock Ready Interrupt              */

+    uint8_t  CFD:1;            /*!< bit:      1  Clock Failure Detectore Interrupt  */

+    uint8_t  :6;               /*!< bit:  2.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} PM_INTFLAG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PM_INTFLAG_OFFSET           0x36         /**< \brief (PM_INTFLAG offset) Interrupt Flag Status and Clear Register */

+#define PM_INTFLAG_RESETVALUE       0x00         /**< \brief (PM_INTFLAG reset_value) Interrupt Flag Status and Clear Register */

+

+#define PM_INTFLAG_CKRDY_Pos        0            /**< \brief (PM_INTFLAG) Clock Ready Interrupt */

+#define PM_INTFLAG_CKRDY            (0x1u << PM_INTFLAG_CKRDY_Pos)

+#define PM_INTFLAG_CFD_Pos          1            /**< \brief (PM_INTFLAG) Clock Failure Detectore Interrupt */

+#define PM_INTFLAG_CFD              (0x1u << PM_INTFLAG_CFD_Pos)

+#define PM_INTFLAG_MASK             0x03u        /**< \brief (PM_INTFLAG) MASK Register */

+

+/* -------- PM_RCAUSE : (PM Offset: 0x38) (R/   8) Reset Cause Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  POR:1;            /*!< bit:      0  Power-on Reset                     */

+    uint8_t  BOD12:1;          /*!< bit:      1  Brown-out 1.2V Reset               */

+    uint8_t  BOD33:1;          /*!< bit:      2  Brown-out 3.3V Reset               */

+    uint8_t  :1;               /*!< bit:      3  Reserved                           */

+    uint8_t  EXT:1;            /*!< bit:      4  External Reset Pin                 */

+    uint8_t  WDT:1;            /*!< bit:      5  Watchdog Reset                     */

+    uint8_t  SYST:1;           /*!< bit:      6  System Reset Request               */

+    uint8_t  :1;               /*!< bit:      7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} PM_RCAUSE_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PM_RCAUSE_OFFSET            0x38         /**< \brief (PM_RCAUSE offset) Reset Cause Register */

+#define PM_RCAUSE_RESETVALUE        0x01         /**< \brief (PM_RCAUSE reset_value) Reset Cause Register */

+

+#define PM_RCAUSE_POR_Pos           0            /**< \brief (PM_RCAUSE) Power-on Reset */

+#define PM_RCAUSE_POR               (0x1u << PM_RCAUSE_POR_Pos)

+#define PM_RCAUSE_BOD12_Pos         1            /**< \brief (PM_RCAUSE) Brown-out 1.2V Reset */

+#define PM_RCAUSE_BOD12             (0x1u << PM_RCAUSE_BOD12_Pos)

+#define PM_RCAUSE_BOD33_Pos         2            /**< \brief (PM_RCAUSE) Brown-out 3.3V Reset */

+#define PM_RCAUSE_BOD33             (0x1u << PM_RCAUSE_BOD33_Pos)

+#define PM_RCAUSE_EXT_Pos           4            /**< \brief (PM_RCAUSE) External Reset Pin */

+#define PM_RCAUSE_EXT               (0x1u << PM_RCAUSE_EXT_Pos)

+#define PM_RCAUSE_WDT_Pos           5            /**< \brief (PM_RCAUSE) Watchdog Reset */

+#define PM_RCAUSE_WDT               (0x1u << PM_RCAUSE_WDT_Pos)

+#define PM_RCAUSE_SYST_Pos          6            /**< \brief (PM_RCAUSE) System Reset Request */

+#define PM_RCAUSE_SYST              (0x1u << PM_RCAUSE_SYST_Pos)

+#define PM_RCAUSE_MASK              0x77u        /**< \brief (PM_RCAUSE) MASK Register */

+

+/** \brief PM hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct {

+  __IO PM_CTRL_Type              CTRL;        /**< \brief Offset: 0x00 (R/W  8) Control Register */

+  __IO PM_SLEEP_Type             SLEEP;       /**< \brief Offset: 0x01 (R/W  8) Sleep Register */

+       RoReg8                    Reserved1[0x6];

+  __IO PM_CPUSEL_Type            CPUSEL;      /**< \brief Offset: 0x08 (R/W  8) CPU Clock Select */

+  __IO PM_APBASEL_Type           APBASEL;     /**< \brief Offset: 0x09 (R/W  8) APBA Clock Select */

+  __IO PM_APBBSEL_Type           APBBSEL;     /**< \brief Offset: 0x0A (R/W  8) APBB Clock Select */

+  __IO PM_APBCSEL_Type           APBCSEL;     /**< \brief Offset: 0x0B (R/W  8) APBC Clock Select */

+       RoReg8                    Reserved2[0x8];

+  __IO PM_AHBMASK_Type           AHBMASK;     /**< \brief Offset: 0x14 (R/W 32) AHB Mask */

+  __IO PM_APBAMASK_Type          APBAMASK;    /**< \brief Offset: 0x18 (R/W 32) APBA Mask */

+  __IO PM_APBBMASK_Type          APBBMASK;    /**< \brief Offset: 0x1C (R/W 32) APBB Mask */

+  __IO PM_APBCMASK_Type          APBCMASK;    /**< \brief Offset: 0x20 (R/W 32) APBC Mask */

+       RoReg8                    Reserved3[0x10];

+  __IO PM_INTENCLR_Type          INTENCLR;    /**< \brief Offset: 0x34 (R/W  8) Interrupt Enable Clear Register */

+  __IO PM_INTENSET_Type          INTENSET;    /**< \brief Offset: 0x35 (R/W  8) Interrupt Enable Set Register */

+  __IO PM_INTFLAG_Type           INTFLAG;     /**< \brief Offset: 0x36 (R/W  8) Interrupt Flag Status and Clear Register */

+       RoReg8                    Reserved4[0x1];

+  __I  PM_RCAUSE_Type            RCAUSE;      /**< \brief Offset: 0x38 (R/   8) Reset Cause Register */

+} Pm;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/*@}*/

+

+#endif /* _SAMD20_PM_COMPONENT_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_port.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_port.h
new file mode 100644
index 0000000..25e11a0
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_port.h
@@ -0,0 +1,373 @@
+/**

+ * \file

+ *

+ * \brief Component description for PORT

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_PORT_COMPONENT_

+#define _SAMD20_PORT_COMPONENT_

+

+/* ========================================================================== */

+/**  SOFTWARE API DEFINITION FOR PORT */

+/* ========================================================================== */

+/** \addtogroup SAMD20_PORT Port Module */

+/*@{*/

+

+#define REV_PORT                    0x100

+

+/* -------- PORT_DIR : (PORT Offset: 0x00) (R/W 32) GROUP Data Direction Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t DIR:32;           /*!< bit:  0..31  Port Data Direction                */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} PORT_DIR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PORT_DIR_OFFSET             0x00         /**< \brief (PORT_DIR offset) Data Direction Register */

+#define PORT_DIR_RESETVALUE         0x00000000   /**< \brief (PORT_DIR reset_value) Data Direction Register */

+

+#define PORT_DIR_DIR_Pos            0            /**< \brief (PORT_DIR) Port Data Direction */

+#define PORT_DIR_DIR_Msk            (0xFFFFFFFFu << PORT_DIR_DIR_Pos)

+#define PORT_DIR_DIR(value)         ((PORT_DIR_DIR_Msk & ((value) << PORT_DIR_DIR_Pos)))

+#define PORT_DIR_MASK               0xFFFFFFFFu  /**< \brief (PORT_DIR) MASK Register */

+

+/* -------- PORT_DIRCLR : (PORT Offset: 0x04) (R/W 32) GROUP Data Direction Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t DIRCLR:32;        /*!< bit:  0..31  Port Data Direction Clear          */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} PORT_DIRCLR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PORT_DIRCLR_OFFSET          0x04         /**< \brief (PORT_DIRCLR offset) Data Direction Clear Register */

+#define PORT_DIRCLR_RESETVALUE      0x00000000   /**< \brief (PORT_DIRCLR reset_value) Data Direction Clear Register */

+

+#define PORT_DIRCLR_DIRCLR_Pos      0            /**< \brief (PORT_DIRCLR) Port Data Direction Clear */

+#define PORT_DIRCLR_DIRCLR_Msk      (0xFFFFFFFFu << PORT_DIRCLR_DIRCLR_Pos)

+#define PORT_DIRCLR_DIRCLR(value)   ((PORT_DIRCLR_DIRCLR_Msk & ((value) << PORT_DIRCLR_DIRCLR_Pos)))

+#define PORT_DIRCLR_MASK            0xFFFFFFFFu  /**< \brief (PORT_DIRCLR) MASK Register */

+

+/* -------- PORT_DIRSET : (PORT Offset: 0x08) (R/W 32) GROUP Data Direction Set Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t DIRSET:32;        /*!< bit:  0..31  Port Data Direction Set            */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} PORT_DIRSET_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PORT_DIRSET_OFFSET          0x08         /**< \brief (PORT_DIRSET offset) Data Direction Set Register */

+#define PORT_DIRSET_RESETVALUE      0x00000000   /**< \brief (PORT_DIRSET reset_value) Data Direction Set Register */

+

+#define PORT_DIRSET_DIRSET_Pos      0            /**< \brief (PORT_DIRSET) Port Data Direction Set */

+#define PORT_DIRSET_DIRSET_Msk      (0xFFFFFFFFu << PORT_DIRSET_DIRSET_Pos)

+#define PORT_DIRSET_DIRSET(value)   ((PORT_DIRSET_DIRSET_Msk & ((value) << PORT_DIRSET_DIRSET_Pos)))

+#define PORT_DIRSET_MASK            0xFFFFFFFFu  /**< \brief (PORT_DIRSET) MASK Register */

+

+/* -------- PORT_DIRTGL : (PORT Offset: 0x0C) (R/W 32) GROUP Data Direction Toggle Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t DIRTGL:32;        /*!< bit:  0..31  Port Data Direction Toggle         */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} PORT_DIRTGL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PORT_DIRTGL_OFFSET          0x0C         /**< \brief (PORT_DIRTGL offset) Data Direction Toggle Register */

+#define PORT_DIRTGL_RESETVALUE      0x00000000   /**< \brief (PORT_DIRTGL reset_value) Data Direction Toggle Register */

+

+#define PORT_DIRTGL_DIRTGL_Pos      0            /**< \brief (PORT_DIRTGL) Port Data Direction Toggle */

+#define PORT_DIRTGL_DIRTGL_Msk      (0xFFFFFFFFu << PORT_DIRTGL_DIRTGL_Pos)

+#define PORT_DIRTGL_DIRTGL(value)   ((PORT_DIRTGL_DIRTGL_Msk & ((value) << PORT_DIRTGL_DIRTGL_Pos)))

+#define PORT_DIRTGL_MASK            0xFFFFFFFFu  /**< \brief (PORT_DIRTGL) MASK Register */

+

+/* -------- PORT_OUT : (PORT Offset: 0x10) (R/W 32) GROUP Data Output Value Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t OUT:32;           /*!< bit:  0..31  Port Data Output Value             */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} PORT_OUT_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PORT_OUT_OFFSET             0x10         /**< \brief (PORT_OUT offset) Data Output Value Register */

+#define PORT_OUT_RESETVALUE         0x00000000   /**< \brief (PORT_OUT reset_value) Data Output Value Register */

+

+#define PORT_OUT_OUT_Pos            0            /**< \brief (PORT_OUT) Port Data Output Value */

+#define PORT_OUT_OUT_Msk            (0xFFFFFFFFu << PORT_OUT_OUT_Pos)

+#define PORT_OUT_OUT(value)         ((PORT_OUT_OUT_Msk & ((value) << PORT_OUT_OUT_Pos)))

+#define PORT_OUT_MASK               0xFFFFFFFFu  /**< \brief (PORT_OUT) MASK Register */

+

+/* -------- PORT_OUTCLR : (PORT Offset: 0x14) (R/W 32) GROUP Data Output Value Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t OUTCLR:32;        /*!< bit:  0..31  Port Data Output Value Clear       */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} PORT_OUTCLR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PORT_OUTCLR_OFFSET          0x14         /**< \brief (PORT_OUTCLR offset) Data Output Value Clear Register */

+#define PORT_OUTCLR_RESETVALUE      0x00000000   /**< \brief (PORT_OUTCLR reset_value) Data Output Value Clear Register */

+

+#define PORT_OUTCLR_OUTCLR_Pos      0            /**< \brief (PORT_OUTCLR) Port Data Output Value Clear */

+#define PORT_OUTCLR_OUTCLR_Msk      (0xFFFFFFFFu << PORT_OUTCLR_OUTCLR_Pos)

+#define PORT_OUTCLR_OUTCLR(value)   ((PORT_OUTCLR_OUTCLR_Msk & ((value) << PORT_OUTCLR_OUTCLR_Pos)))

+#define PORT_OUTCLR_MASK            0xFFFFFFFFu  /**< \brief (PORT_OUTCLR) MASK Register */

+

+/* -------- PORT_OUTSET : (PORT Offset: 0x18) (R/W 32) GROUP Data Output Value Set Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t OUTSET:32;        /*!< bit:  0..31  Port Data Output Value Set         */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} PORT_OUTSET_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PORT_OUTSET_OFFSET          0x18         /**< \brief (PORT_OUTSET offset) Data Output Value Set Register */

+#define PORT_OUTSET_RESETVALUE      0x00000000   /**< \brief (PORT_OUTSET reset_value) Data Output Value Set Register */

+

+#define PORT_OUTSET_OUTSET_Pos      0            /**< \brief (PORT_OUTSET) Port Data Output Value Set */

+#define PORT_OUTSET_OUTSET_Msk      (0xFFFFFFFFu << PORT_OUTSET_OUTSET_Pos)

+#define PORT_OUTSET_OUTSET(value)   ((PORT_OUTSET_OUTSET_Msk & ((value) << PORT_OUTSET_OUTSET_Pos)))

+#define PORT_OUTSET_MASK            0xFFFFFFFFu  /**< \brief (PORT_OUTSET) MASK Register */

+

+/* -------- PORT_OUTTGL : (PORT Offset: 0x1C) (R/W 32) GROUP Data Output Value Toggle Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t OUTTGL:32;        /*!< bit:  0..31  Port Data Output Value Toggle      */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} PORT_OUTTGL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PORT_OUTTGL_OFFSET          0x1C         /**< \brief (PORT_OUTTGL offset) Data Output Value Toggle Register */

+#define PORT_OUTTGL_RESETVALUE      0x00000000   /**< \brief (PORT_OUTTGL reset_value) Data Output Value Toggle Register */

+

+#define PORT_OUTTGL_OUTTGL_Pos      0            /**< \brief (PORT_OUTTGL) Port Data Output Value Toggle */

+#define PORT_OUTTGL_OUTTGL_Msk      (0xFFFFFFFFu << PORT_OUTTGL_OUTTGL_Pos)

+#define PORT_OUTTGL_OUTTGL(value)   ((PORT_OUTTGL_OUTTGL_Msk & ((value) << PORT_OUTTGL_OUTTGL_Pos)))

+#define PORT_OUTTGL_MASK            0xFFFFFFFFu  /**< \brief (PORT_OUTTGL) MASK Register */

+

+/* -------- PORT_IN : (PORT Offset: 0x20) (R/  32) GROUP Data Input Value Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t IN:32;            /*!< bit:  0..31  Port Data Input Value              */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} PORT_IN_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PORT_IN_OFFSET              0x20         /**< \brief (PORT_IN offset) Data Input Value Register */

+#define PORT_IN_RESETVALUE          0x00000000   /**< \brief (PORT_IN reset_value) Data Input Value Register */

+

+#define PORT_IN_IN_Pos              0            /**< \brief (PORT_IN) Port Data Input Value */

+#define PORT_IN_IN_Msk              (0xFFFFFFFFu << PORT_IN_IN_Pos)

+#define PORT_IN_IN(value)           ((PORT_IN_IN_Msk & ((value) << PORT_IN_IN_Pos)))

+#define PORT_IN_MASK                0xFFFFFFFFu  /**< \brief (PORT_IN) MASK Register */

+

+/* -------- PORT_CTRL : (PORT Offset: 0x24) (R/W 32) GROUP Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t SAMPLING:32;      /*!< bit:  0..31  Input Sampling Mode                */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} PORT_CTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PORT_CTRL_OFFSET            0x24         /**< \brief (PORT_CTRL offset) Control Register */

+#define PORT_CTRL_RESETVALUE        0x00000000   /**< \brief (PORT_CTRL reset_value) Control Register */

+

+#define PORT_CTRL_SAMPLING_Pos      0            /**< \brief (PORT_CTRL) Input Sampling Mode */

+#define PORT_CTRL_SAMPLING_Msk      (0xFFFFFFFFu << PORT_CTRL_SAMPLING_Pos)

+#define PORT_CTRL_SAMPLING(value)   ((PORT_CTRL_SAMPLING_Msk & ((value) << PORT_CTRL_SAMPLING_Pos)))

+#define PORT_CTRL_MASK              0xFFFFFFFFu  /**< \brief (PORT_CTRL) MASK Register */

+

+/* -------- PORT_WRCONFIG : (PORT Offset: 0x28) ( /W 32) GROUP Write Configuration Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t PINMASK:16;       /*!< bit:  0..15  Pin Mask for Multiple Pin Configuration */

+    uint32_t PMUXEN:1;         /*!< bit:     16  Select Peripheral Multiplexer      */

+    uint32_t INEN:1;           /*!< bit:     17  Input Enable                       */

+    uint32_t PULLEN:1;         /*!< bit:     18  Pull Enable                        */

+    uint32_t ODRAIN:1;         /*!< bit:     19  Open Drain Output                  */

+    uint32_t SLEWLIM:1;        /*!< bit:     20  Output Driver Slew Rate Limit Enable */

+    uint32_t :1;               /*!< bit:     21  Reserved                           */

+    uint32_t DRVSTR:1;         /*!< bit:     22  Output Driver Strength Selection   */

+    uint32_t :1;               /*!< bit:     23  Reserved                           */

+    uint32_t PMUX:4;           /*!< bit: 24..27  Peripheral Multiplexing Template   */

+    uint32_t WRPMUX:1;         /*!< bit:     28  Write PMUX Registers               */

+    uint32_t :1;               /*!< bit:     29  Reserved                           */

+    uint32_t WRPINCFG:1;       /*!< bit:     30  Write PINCFG Registers             */

+    uint32_t HWSEL:1;          /*!< bit:     31  Half-Word Select                   */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} PORT_WRCONFIG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PORT_WRCONFIG_OFFSET        0x28         /**< \brief (PORT_WRCONFIG offset) Write Configuration Register */

+#define PORT_WRCONFIG_RESETVALUE    0x00000000   /**< \brief (PORT_WRCONFIG reset_value) Write Configuration Register */

+

+#define PORT_WRCONFIG_PINMASK_Pos   0            /**< \brief (PORT_WRCONFIG) Pin Mask for Multiple Pin Configuration */

+#define PORT_WRCONFIG_PINMASK_Msk   (0xFFFFu << PORT_WRCONFIG_PINMASK_Pos)

+#define PORT_WRCONFIG_PINMASK(value) ((PORT_WRCONFIG_PINMASK_Msk & ((value) << PORT_WRCONFIG_PINMASK_Pos)))

+#define PORT_WRCONFIG_PMUXEN_Pos    16           /**< \brief (PORT_WRCONFIG) Select Peripheral Multiplexer */

+#define PORT_WRCONFIG_PMUXEN        (0x1u << PORT_WRCONFIG_PMUXEN_Pos)

+#define PORT_WRCONFIG_INEN_Pos      17           /**< \brief (PORT_WRCONFIG) Input Enable */

+#define PORT_WRCONFIG_INEN          (0x1u << PORT_WRCONFIG_INEN_Pos)

+#define PORT_WRCONFIG_PULLEN_Pos    18           /**< \brief (PORT_WRCONFIG) Pull Enable */

+#define PORT_WRCONFIG_PULLEN        (0x1u << PORT_WRCONFIG_PULLEN_Pos)

+#define PORT_WRCONFIG_ODRAIN_Pos    19           /**< \brief (PORT_WRCONFIG) Open Drain Output */

+#define PORT_WRCONFIG_ODRAIN        (0x1u << PORT_WRCONFIG_ODRAIN_Pos)

+#define PORT_WRCONFIG_SLEWLIM_Pos   20           /**< \brief (PORT_WRCONFIG) Output Driver Slew Rate Limit Enable */

+#define PORT_WRCONFIG_SLEWLIM       (0x1u << PORT_WRCONFIG_SLEWLIM_Pos)

+#define PORT_WRCONFIG_DRVSTR_Pos    22           /**< \brief (PORT_WRCONFIG) Output Driver Strength Selection */

+#define PORT_WRCONFIG_DRVSTR        (0x1u << PORT_WRCONFIG_DRVSTR_Pos)

+#define PORT_WRCONFIG_PMUX_Pos      24           /**< \brief (PORT_WRCONFIG) Peripheral Multiplexing Template */

+#define PORT_WRCONFIG_PMUX_Msk      (0xFu << PORT_WRCONFIG_PMUX_Pos)

+#define PORT_WRCONFIG_PMUX(value)   ((PORT_WRCONFIG_PMUX_Msk & ((value) << PORT_WRCONFIG_PMUX_Pos)))

+#define PORT_WRCONFIG_WRPMUX_Pos    28           /**< \brief (PORT_WRCONFIG) Write PMUX Registers */

+#define PORT_WRCONFIG_WRPMUX        (0x1u << PORT_WRCONFIG_WRPMUX_Pos)

+#define PORT_WRCONFIG_WRPINCFG_Pos  30           /**< \brief (PORT_WRCONFIG) Write PINCFG Registers */

+#define PORT_WRCONFIG_WRPINCFG      (0x1u << PORT_WRCONFIG_WRPINCFG_Pos)

+#define PORT_WRCONFIG_HWSEL_Pos     31           /**< \brief (PORT_WRCONFIG) Half-Word Select */

+#define PORT_WRCONFIG_HWSEL         (0x1u << PORT_WRCONFIG_HWSEL_Pos)

+#define PORT_WRCONFIG_MASK          0xDF5FFFFFu  /**< \brief (PORT_WRCONFIG) MASK Register */

+

+/* -------- PORT_PMUX : (PORT Offset: 0x30) (R/W  8) GROUP Peripheral Multiplexing Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  PMUXE:4;          /*!< bit:  0.. 3  Peripheral Multiplexing for Even-Numbered Pin */

+    uint8_t  PMUXO:4;          /*!< bit:  4.. 7  Peripheral Multiplexing for Odd-Numbered Pin */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} PORT_PMUX_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PORT_PMUX_OFFSET            0x30         /**< \brief (PORT_PMUX offset) Peripheral Multiplexing Register */

+#define PORT_PMUX_RESETVALUE        0x00         /**< \brief (PORT_PMUX reset_value) Peripheral Multiplexing Register */

+

+#define PORT_PMUX_PMUXE_Pos         0            /**< \brief (PORT_PMUX) Peripheral Multiplexing for Even-Numbered Pin */

+#define PORT_PMUX_PMUXE_Msk         (0xFu << PORT_PMUX_PMUXE_Pos)

+#define PORT_PMUX_PMUXE(value)      ((PORT_PMUX_PMUXE_Msk & ((value) << PORT_PMUX_PMUXE_Pos)))

+#define PORT_PMUX_PMUXO_Pos         4            /**< \brief (PORT_PMUX) Peripheral Multiplexing for Odd-Numbered Pin */

+#define PORT_PMUX_PMUXO_Msk         (0xFu << PORT_PMUX_PMUXO_Pos)

+#define PORT_PMUX_PMUXO(value)      ((PORT_PMUX_PMUXO_Msk & ((value) << PORT_PMUX_PMUXO_Pos)))

+#define PORT_PMUX_MASK              0xFFu        /**< \brief (PORT_PMUX) MASK Register */

+

+/* -------- PORT_PINCFG : (PORT Offset: 0x40) (R/W  8) GROUP Pin Configuration Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  PMUXEN:1;         /*!< bit:      0  Select Peripheral Multiplexer      */

+    uint8_t  INEN:1;           /*!< bit:      1  Input Enable                       */

+    uint8_t  PULLEN:1;         /*!< bit:      2  Pull Enable                        */

+    uint8_t  ODRAIN:1;         /*!< bit:      3  Open Drain Output                  */

+    uint8_t  SLEWLIM:1;        /*!< bit:      4  Output Driver Slew Rate Limit Enable */

+    uint8_t  :1;               /*!< bit:      5  Reserved                           */

+    uint8_t  DRVSTR:1;         /*!< bit:      6  Output Driver Strength Selection   */

+    uint8_t  :1;               /*!< bit:      7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} PORT_PINCFG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define PORT_PINCFG_OFFSET          0x40         /**< \brief (PORT_PINCFG offset) Pin Configuration Register */

+#define PORT_PINCFG_RESETVALUE      0x00         /**< \brief (PORT_PINCFG reset_value) Pin Configuration Register */

+

+#define PORT_PINCFG_PMUXEN_Pos      0            /**< \brief (PORT_PINCFG) Select Peripheral Multiplexer */

+#define PORT_PINCFG_PMUXEN          (0x1u << PORT_PINCFG_PMUXEN_Pos)

+#define PORT_PINCFG_INEN_Pos        1            /**< \brief (PORT_PINCFG) Input Enable */

+#define PORT_PINCFG_INEN            (0x1u << PORT_PINCFG_INEN_Pos)

+#define PORT_PINCFG_PULLEN_Pos      2            /**< \brief (PORT_PINCFG) Pull Enable */

+#define PORT_PINCFG_PULLEN          (0x1u << PORT_PINCFG_PULLEN_Pos)

+#define PORT_PINCFG_ODRAIN_Pos      3            /**< \brief (PORT_PINCFG) Open Drain Output */

+#define PORT_PINCFG_ODRAIN          (0x1u << PORT_PINCFG_ODRAIN_Pos)

+#define PORT_PINCFG_SLEWLIM_Pos     4            /**< \brief (PORT_PINCFG) Output Driver Slew Rate Limit Enable */

+#define PORT_PINCFG_SLEWLIM         (0x1u << PORT_PINCFG_SLEWLIM_Pos)

+#define PORT_PINCFG_DRVSTR_Pos      6            /**< \brief (PORT_PINCFG) Output Driver Strength Selection */

+#define PORT_PINCFG_DRVSTR          (0x1u << PORT_PINCFG_DRVSTR_Pos)

+#define PORT_PINCFG_MASK            0x5Fu        /**< \brief (PORT_PINCFG) MASK Register */

+

+/** \brief PortGroup hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct {

+  __IO PORT_DIR_Type             DIR;         /**< \brief Offset: 0x00 (R/W 32) Data Direction Register */

+  __IO PORT_DIRCLR_Type          DIRCLR;      /**< \brief Offset: 0x04 (R/W 32) Data Direction Clear Register */

+  __IO PORT_DIRSET_Type          DIRSET;      /**< \brief Offset: 0x08 (R/W 32) Data Direction Set Register */

+  __IO PORT_DIRTGL_Type          DIRTGL;      /**< \brief Offset: 0x0C (R/W 32) Data Direction Toggle Register */

+  __IO PORT_OUT_Type             OUT;         /**< \brief Offset: 0x10 (R/W 32) Data Output Value Register */

+  __IO PORT_OUTCLR_Type          OUTCLR;      /**< \brief Offset: 0x14 (R/W 32) Data Output Value Clear Register */

+  __IO PORT_OUTSET_Type          OUTSET;      /**< \brief Offset: 0x18 (R/W 32) Data Output Value Set Register */

+  __IO PORT_OUTTGL_Type          OUTTGL;      /**< \brief Offset: 0x1C (R/W 32) Data Output Value Toggle Register */

+  __I  PORT_IN_Type              IN;          /**< \brief Offset: 0x20 (R/  32) Data Input Value Register */

+  __IO PORT_CTRL_Type            CTRL;        /**< \brief Offset: 0x24 (R/W 32) Control Register */

+  __O  PORT_WRCONFIG_Type        WRCONFIG;    /**< \brief Offset: 0x28 ( /W 32) Write Configuration Register */

+       RoReg8                    Reserved1[0x4];

+  __IO PORT_PMUX_Type            PMUX[16];    /**< \brief Offset: 0x30 (R/W  8) Peripheral Multiplexing Register */

+  __IO PORT_PINCFG_Type          PINCFG[32];  /**< \brief Offset: 0x40 (R/W  8) Pin Configuration Register */

+       RoReg8                    Reserved2[0x20];

+} PortGroup;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/** \brief PORT hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct {

+       PortGroup                 Group[2];    /**< \brief Offset: 0x00 PortGroup groups [GROUPS] */

+} Port;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/*@}*/

+

+#endif /* _SAMD20_PORT_COMPONENT_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_rtc.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_rtc.h
new file mode 100644
index 0000000..cde1bb2
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_rtc.h
@@ -0,0 +1,855 @@
+/**

+ * \file

+ *

+ * \brief Component description for RTC

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_RTC_COMPONENT_

+#define _SAMD20_RTC_COMPONENT_

+

+/* ========================================================================== */

+/**  SOFTWARE API DEFINITION FOR RTC */

+/* ========================================================================== */

+/** \addtogroup SAMD20_RTC Real-Time Counter */

+/*@{*/

+

+#define REV_RTC                     0x101

+

+/* -------- RTC_MODE0_CTRL : (RTC Offset: 0x00) (R/W 16) MODE0 MODE0 Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t SWRST:1;          /*!< bit:      0  Software Reset                     */

+    uint16_t ENABLE:1;         /*!< bit:      1  Enable                             */

+    uint16_t MODE:2;           /*!< bit:  2.. 3  Mode                               */

+    uint16_t :3;               /*!< bit:  4.. 6  Reserved                           */

+    uint16_t MATCHCLR:1;       /*!< bit:      7  Match Clears Counter               */

+    uint16_t PRESCALER:4;      /*!< bit:  8..11  Prescaler                          */

+    uint16_t :4;               /*!< bit: 12..15  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} RTC_MODE0_CTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE0_CTRL_OFFSET       0x00         /**< \brief (RTC_MODE0_CTRL offset) MODE0 Control Register */

+#define RTC_MODE0_CTRL_RESETVALUE   0x0000       /**< \brief (RTC_MODE0_CTRL reset_value) MODE0 Control Register */

+

+#define RTC_MODE0_CTRL_SWRST_Pos    0            /**< \brief (RTC_MODE0_CTRL) Software Reset */

+#define RTC_MODE0_CTRL_SWRST        (0x1u << RTC_MODE0_CTRL_SWRST_Pos)

+#define RTC_MODE0_CTRL_ENABLE_Pos   1            /**< \brief (RTC_MODE0_CTRL) Enable */

+#define RTC_MODE0_CTRL_ENABLE       (0x1u << RTC_MODE0_CTRL_ENABLE_Pos)

+#define RTC_MODE0_CTRL_MODE_Pos     2            /**< \brief (RTC_MODE0_CTRL) Mode */

+#define RTC_MODE0_CTRL_MODE_Msk     (0x3u << RTC_MODE0_CTRL_MODE_Pos)

+#define RTC_MODE0_CTRL_MODE(value)  ((RTC_MODE0_CTRL_MODE_Msk & ((value) << RTC_MODE0_CTRL_MODE_Pos)))

+#define   RTC_MODE0_CTRL_MODE_COUNT32 (0x0u <<  2) /**< \brief (RTC_MODE0_CTRL) Mode 0 */

+#define   RTC_MODE0_CTRL_MODE_COUNT16 (0x1u <<  2) /**< \brief (RTC_MODE0_CTRL) Mode 1 */

+#define   RTC_MODE0_CTRL_MODE_CLOCK (0x2u <<  2) /**< \brief (RTC_MODE0_CTRL) Mode 2 */

+#define RTC_MODE0_CTRL_MATCHCLR_Pos 7            /**< \brief (RTC_MODE0_CTRL) Match Clears Counter */

+#define RTC_MODE0_CTRL_MATCHCLR     (0x1u << RTC_MODE0_CTRL_MATCHCLR_Pos)

+#define RTC_MODE0_CTRL_PRESCALER_Pos 8            /**< \brief (RTC_MODE0_CTRL) Prescaler */

+#define RTC_MODE0_CTRL_PRESCALER_Msk (0xFu << RTC_MODE0_CTRL_PRESCALER_Pos)

+#define RTC_MODE0_CTRL_PRESCALER(value) ((RTC_MODE0_CTRL_PRESCALER_Msk & ((value) << RTC_MODE0_CTRL_PRESCALER_Pos)))

+#define   RTC_MODE0_CTRL_PRESCALER_DIV1 (0x0u <<  8) /**< \brief (RTC_MODE0_CTRL)  */

+#define   RTC_MODE0_CTRL_PRESCALER_DIV2 (0x1u <<  8) /**< \brief (RTC_MODE0_CTRL)  */

+#define   RTC_MODE0_CTRL_PRESCALER_DIV4 (0x2u <<  8) /**< \brief (RTC_MODE0_CTRL)  */

+#define   RTC_MODE0_CTRL_PRESCALER_DIV8 (0x3u <<  8) /**< \brief (RTC_MODE0_CTRL)  */

+#define   RTC_MODE0_CTRL_PRESCALER_DIV16 (0x4u <<  8) /**< \brief (RTC_MODE0_CTRL)  */

+#define   RTC_MODE0_CTRL_PRESCALER_DIV32 (0x5u <<  8) /**< \brief (RTC_MODE0_CTRL)  */

+#define   RTC_MODE0_CTRL_PRESCALER_DIV64 (0x6u <<  8) /**< \brief (RTC_MODE0_CTRL)  */

+#define   RTC_MODE0_CTRL_PRESCALER_DIV128 (0x7u <<  8) /**< \brief (RTC_MODE0_CTRL)  */

+#define   RTC_MODE0_CTRL_PRESCALER_DIV256 (0x8u <<  8) /**< \brief (RTC_MODE0_CTRL)  */

+#define   RTC_MODE0_CTRL_PRESCALER_DIV512 (0x9u <<  8) /**< \brief (RTC_MODE0_CTRL)  */

+#define   RTC_MODE0_CTRL_PRESCALER_DIV1024 (0xAu <<  8) /**< \brief (RTC_MODE0_CTRL)  */

+#define RTC_MODE0_CTRL_MASK         0x0F8Fu      /**< \brief (RTC_MODE0_CTRL) MASK Register */

+

+/* -------- RTC_MODE1_CTRL : (RTC Offset: 0x00) (R/W 16) MODE1 MODE1 Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t SWRST:1;          /*!< bit:      0  Software Reset                     */

+    uint16_t ENABLE:1;         /*!< bit:      1  Enable                             */

+    uint16_t MODE:2;           /*!< bit:  2.. 3  Mode                               */

+    uint16_t :4;               /*!< bit:  4.. 7  Reserved                           */

+    uint16_t PRESCALER:4;      /*!< bit:  8..11  Prescaler                          */

+    uint16_t :4;               /*!< bit: 12..15  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} RTC_MODE1_CTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE1_CTRL_OFFSET       0x00         /**< \brief (RTC_MODE1_CTRL offset) MODE1 Control Register */

+#define RTC_MODE1_CTRL_RESETVALUE   0x0000       /**< \brief (RTC_MODE1_CTRL reset_value) MODE1 Control Register */

+

+#define RTC_MODE1_CTRL_SWRST_Pos    0            /**< \brief (RTC_MODE1_CTRL) Software Reset */

+#define RTC_MODE1_CTRL_SWRST        (0x1u << RTC_MODE1_CTRL_SWRST_Pos)

+#define RTC_MODE1_CTRL_ENABLE_Pos   1            /**< \brief (RTC_MODE1_CTRL) Enable */

+#define RTC_MODE1_CTRL_ENABLE       (0x1u << RTC_MODE1_CTRL_ENABLE_Pos)

+#define RTC_MODE1_CTRL_MODE_Pos     2            /**< \brief (RTC_MODE1_CTRL) Mode */

+#define RTC_MODE1_CTRL_MODE_Msk     (0x3u << RTC_MODE1_CTRL_MODE_Pos)

+#define RTC_MODE1_CTRL_MODE(value)  ((RTC_MODE1_CTRL_MODE_Msk & ((value) << RTC_MODE1_CTRL_MODE_Pos)))

+#define   RTC_MODE1_CTRL_MODE_COUNT32 (0x0u <<  2) /**< \brief (RTC_MODE1_CTRL) Mode 0 */

+#define   RTC_MODE1_CTRL_MODE_COUNT16 (0x1u <<  2) /**< \brief (RTC_MODE1_CTRL) Mode 1 */

+#define   RTC_MODE1_CTRL_MODE_CLOCK (0x2u <<  2) /**< \brief (RTC_MODE1_CTRL) Mode 2 */

+#define RTC_MODE1_CTRL_PRESCALER_Pos 8            /**< \brief (RTC_MODE1_CTRL) Prescaler */

+#define RTC_MODE1_CTRL_PRESCALER_Msk (0xFu << RTC_MODE1_CTRL_PRESCALER_Pos)

+#define RTC_MODE1_CTRL_PRESCALER(value) ((RTC_MODE1_CTRL_PRESCALER_Msk & ((value) << RTC_MODE1_CTRL_PRESCALER_Pos)))

+#define   RTC_MODE1_CTRL_PRESCALER_DIV1 (0x0u <<  8) /**< \brief (RTC_MODE1_CTRL)  */

+#define   RTC_MODE1_CTRL_PRESCALER_DIV2 (0x1u <<  8) /**< \brief (RTC_MODE1_CTRL)  */

+#define   RTC_MODE1_CTRL_PRESCALER_DIV4 (0x2u <<  8) /**< \brief (RTC_MODE1_CTRL)  */

+#define   RTC_MODE1_CTRL_PRESCALER_DIV8 (0x3u <<  8) /**< \brief (RTC_MODE1_CTRL)  */

+#define   RTC_MODE1_CTRL_PRESCALER_DIV16 (0x4u <<  8) /**< \brief (RTC_MODE1_CTRL)  */

+#define   RTC_MODE1_CTRL_PRESCALER_DIV32 (0x5u <<  8) /**< \brief (RTC_MODE1_CTRL)  */

+#define   RTC_MODE1_CTRL_PRESCALER_DIV64 (0x6u <<  8) /**< \brief (RTC_MODE1_CTRL)  */

+#define   RTC_MODE1_CTRL_PRESCALER_DIV128 (0x7u <<  8) /**< \brief (RTC_MODE1_CTRL)  */

+#define   RTC_MODE1_CTRL_PRESCALER_DIV256 (0x8u <<  8) /**< \brief (RTC_MODE1_CTRL)  */

+#define   RTC_MODE1_CTRL_PRESCALER_DIV512 (0x9u <<  8) /**< \brief (RTC_MODE1_CTRL)  */

+#define   RTC_MODE1_CTRL_PRESCALER_DIV1024 (0xAu <<  8) /**< \brief (RTC_MODE1_CTRL)  */

+#define RTC_MODE1_CTRL_MASK         0x0F0Fu      /**< \brief (RTC_MODE1_CTRL) MASK Register */

+

+/* -------- RTC_MODE2_CTRL : (RTC Offset: 0x00) (R/W 16) MODE2 MODE2 Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t SWRST:1;          /*!< bit:      0  Software Reset                     */

+    uint16_t ENABLE:1;         /*!< bit:      1  Enable                             */

+    uint16_t MODE:2;           /*!< bit:  2.. 3  Mode                               */

+    uint16_t :2;               /*!< bit:  4.. 5  Reserved                           */

+    uint16_t CLKREP:1;         /*!< bit:      6  Clock Representation               */

+    uint16_t MATCHCLR:1;       /*!< bit:      7  Match Clears Counter               */

+    uint16_t PRESCALER:4;      /*!< bit:  8..11  Prescaler                          */

+    uint16_t :4;               /*!< bit: 12..15  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} RTC_MODE2_CTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE2_CTRL_OFFSET       0x00         /**< \brief (RTC_MODE2_CTRL offset) MODE2 Control Register */

+#define RTC_MODE2_CTRL_RESETVALUE   0x0000       /**< \brief (RTC_MODE2_CTRL reset_value) MODE2 Control Register */

+

+#define RTC_MODE2_CTRL_SWRST_Pos    0            /**< \brief (RTC_MODE2_CTRL) Software Reset */

+#define RTC_MODE2_CTRL_SWRST        (0x1u << RTC_MODE2_CTRL_SWRST_Pos)

+#define RTC_MODE2_CTRL_ENABLE_Pos   1            /**< \brief (RTC_MODE2_CTRL) Enable */

+#define RTC_MODE2_CTRL_ENABLE       (0x1u << RTC_MODE2_CTRL_ENABLE_Pos)

+#define RTC_MODE2_CTRL_MODE_Pos     2            /**< \brief (RTC_MODE2_CTRL) Mode */

+#define RTC_MODE2_CTRL_MODE_Msk     (0x3u << RTC_MODE2_CTRL_MODE_Pos)

+#define RTC_MODE2_CTRL_MODE(value)  ((RTC_MODE2_CTRL_MODE_Msk & ((value) << RTC_MODE2_CTRL_MODE_Pos)))

+#define   RTC_MODE2_CTRL_MODE_COUNT32 (0x0u <<  2) /**< \brief (RTC_MODE2_CTRL) Mode 0 */

+#define   RTC_MODE2_CTRL_MODE_COUNT16 (0x1u <<  2) /**< \brief (RTC_MODE2_CTRL) Mode 1 */

+#define   RTC_MODE2_CTRL_MODE_CLOCK (0x2u <<  2) /**< \brief (RTC_MODE2_CTRL) Mode 2 */

+#define RTC_MODE2_CTRL_CLKREP_Pos   6            /**< \brief (RTC_MODE2_CTRL) Clock Representation */

+#define RTC_MODE2_CTRL_CLKREP       (0x1u << RTC_MODE2_CTRL_CLKREP_Pos)

+#define RTC_MODE2_CTRL_MATCHCLR_Pos 7            /**< \brief (RTC_MODE2_CTRL) Match Clears Counter */

+#define RTC_MODE2_CTRL_MATCHCLR     (0x1u << RTC_MODE2_CTRL_MATCHCLR_Pos)

+#define RTC_MODE2_CTRL_PRESCALER_Pos 8            /**< \brief (RTC_MODE2_CTRL) Prescaler */

+#define RTC_MODE2_CTRL_PRESCALER_Msk (0xFu << RTC_MODE2_CTRL_PRESCALER_Pos)

+#define RTC_MODE2_CTRL_PRESCALER(value) ((RTC_MODE2_CTRL_PRESCALER_Msk & ((value) << RTC_MODE2_CTRL_PRESCALER_Pos)))

+#define   RTC_MODE2_CTRL_PRESCALER_DIV1 (0x0u <<  8) /**< \brief (RTC_MODE2_CTRL)  */

+#define   RTC_MODE2_CTRL_PRESCALER_DIV2 (0x1u <<  8) /**< \brief (RTC_MODE2_CTRL)  */

+#define   RTC_MODE2_CTRL_PRESCALER_DIV4 (0x2u <<  8) /**< \brief (RTC_MODE2_CTRL)  */

+#define   RTC_MODE2_CTRL_PRESCALER_DIV8 (0x3u <<  8) /**< \brief (RTC_MODE2_CTRL)  */

+#define   RTC_MODE2_CTRL_PRESCALER_DIV16 (0x4u <<  8) /**< \brief (RTC_MODE2_CTRL)  */

+#define   RTC_MODE2_CTRL_PRESCALER_DIV32 (0x5u <<  8) /**< \brief (RTC_MODE2_CTRL)  */

+#define   RTC_MODE2_CTRL_PRESCALER_DIV64 (0x6u <<  8) /**< \brief (RTC_MODE2_CTRL)  */

+#define   RTC_MODE2_CTRL_PRESCALER_DIV128 (0x7u <<  8) /**< \brief (RTC_MODE2_CTRL)  */

+#define   RTC_MODE2_CTRL_PRESCALER_DIV256 (0x8u <<  8) /**< \brief (RTC_MODE2_CTRL)  */

+#define   RTC_MODE2_CTRL_PRESCALER_DIV512 (0x9u <<  8) /**< \brief (RTC_MODE2_CTRL)  */

+#define   RTC_MODE2_CTRL_PRESCALER_DIV1024 (0xAu <<  8) /**< \brief (RTC_MODE2_CTRL)  */

+#define RTC_MODE2_CTRL_MASK         0x0FCFu      /**< \brief (RTC_MODE2_CTRL) MASK Register */

+

+/* -------- RTC_READREQ : (RTC Offset: 0x02) (R/W 16) Read Request Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t ADDR:6;           /*!< bit:  0.. 5  Read Address                       */

+    uint16_t :8;               /*!< bit:  6..13  Reserved                           */

+    uint16_t RCONT:1;          /*!< bit:     14  Read Continuously                  */

+    uint16_t RREQ:1;           /*!< bit:     15  Read Request                       */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} RTC_READREQ_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_READREQ_OFFSET          0x02         /**< \brief (RTC_READREQ offset) Read Request Register */

+#define RTC_READREQ_RESETVALUE      0x0010       /**< \brief (RTC_READREQ reset_value) Read Request Register */

+

+#define RTC_READREQ_ADDR_Pos        0            /**< \brief (RTC_READREQ) Read Address */

+#define RTC_READREQ_ADDR_Msk        (0x3Fu << RTC_READREQ_ADDR_Pos)

+#define RTC_READREQ_ADDR(value)     ((RTC_READREQ_ADDR_Msk & ((value) << RTC_READREQ_ADDR_Pos)))

+#define RTC_READREQ_RCONT_Pos       14           /**< \brief (RTC_READREQ) Read Continuously */

+#define RTC_READREQ_RCONT           (0x1u << RTC_READREQ_RCONT_Pos)

+#define RTC_READREQ_RREQ_Pos        15           /**< \brief (RTC_READREQ) Read Request */

+#define RTC_READREQ_RREQ            (0x1u << RTC_READREQ_RREQ_Pos)

+#define RTC_READREQ_MASK            0xC03Fu      /**< \brief (RTC_READREQ) MASK Register */

+

+/* -------- RTC_MODE0_EVCTRL : (RTC Offset: 0x04) (R/W 16) MODE0 MODE0 Event Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t PEREO:8;          /*!< bit:  0.. 7  Periodic Interval Event Output Enables */

+    uint16_t CMPEO:1;          /*!< bit:      8  Compare Event Output Enables       */

+    uint16_t :6;               /*!< bit:  9..14  Reserved                           */

+    uint16_t OVFEO:1;          /*!< bit:     15  Overflow Event Output Enable       */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} RTC_MODE0_EVCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE0_EVCTRL_OFFSET     0x04         /**< \brief (RTC_MODE0_EVCTRL offset) MODE0 Event Control Register */

+#define RTC_MODE0_EVCTRL_RESETVALUE 0x0000       /**< \brief (RTC_MODE0_EVCTRL reset_value) MODE0 Event Control Register */

+

+#define RTC_MODE0_EVCTRL_PEREO_Pos  0            /**< \brief (RTC_MODE0_EVCTRL) Periodic Interval Event Output Enables */

+#define RTC_MODE0_EVCTRL_PEREO_Msk  (0xFFu << RTC_MODE0_EVCTRL_PEREO_Pos)

+#define RTC_MODE0_EVCTRL_PEREO(value) ((RTC_MODE0_EVCTRL_PEREO_Msk & ((value) << RTC_MODE0_EVCTRL_PEREO_Pos)))

+#define RTC_MODE0_EVCTRL_CMPEO_Pos  8            /**< \brief (RTC_MODE0_EVCTRL) Compare Event Output Enables */

+#define RTC_MODE0_EVCTRL_CMPEO_Msk  (0x1u << RTC_MODE0_EVCTRL_CMPEO_Pos)

+#define RTC_MODE0_EVCTRL_CMPEO(value) ((RTC_MODE0_EVCTRL_CMPEO_Msk & ((value) << RTC_MODE0_EVCTRL_CMPEO_Pos)))

+#define RTC_MODE0_EVCTRL_OVFEO_Pos  15           /**< \brief (RTC_MODE0_EVCTRL) Overflow Event Output Enable */

+#define RTC_MODE0_EVCTRL_OVFEO      (0x1u << RTC_MODE0_EVCTRL_OVFEO_Pos)

+#define RTC_MODE0_EVCTRL_MASK       0x81FFu      /**< \brief (RTC_MODE0_EVCTRL) MASK Register */

+

+/* -------- RTC_MODE1_EVCTRL : (RTC Offset: 0x04) (R/W 16) MODE1 MODE1 Event Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t PEREO:8;          /*!< bit:  0.. 7  Periodic Interval Event Output Enables */

+    uint16_t CMPEO:2;          /*!< bit:  8.. 9  Compare Event Output Enables       */

+    uint16_t :5;               /*!< bit: 10..14  Reserved                           */

+    uint16_t OVFEO:1;          /*!< bit:     15  Overflow Event Output Enable       */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} RTC_MODE1_EVCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE1_EVCTRL_OFFSET     0x04         /**< \brief (RTC_MODE1_EVCTRL offset) MODE1 Event Control Register */

+#define RTC_MODE1_EVCTRL_RESETVALUE 0x0000       /**< \brief (RTC_MODE1_EVCTRL reset_value) MODE1 Event Control Register */

+

+#define RTC_MODE1_EVCTRL_PEREO_Pos  0            /**< \brief (RTC_MODE1_EVCTRL) Periodic Interval Event Output Enables */

+#define RTC_MODE1_EVCTRL_PEREO_Msk  (0xFFu << RTC_MODE1_EVCTRL_PEREO_Pos)

+#define RTC_MODE1_EVCTRL_PEREO(value) ((RTC_MODE1_EVCTRL_PEREO_Msk & ((value) << RTC_MODE1_EVCTRL_PEREO_Pos)))

+#define RTC_MODE1_EVCTRL_CMPEO_Pos  8            /**< \brief (RTC_MODE1_EVCTRL) Compare Event Output Enables */

+#define RTC_MODE1_EVCTRL_CMPEO_Msk  (0x3u << RTC_MODE1_EVCTRL_CMPEO_Pos)

+#define RTC_MODE1_EVCTRL_CMPEO(value) ((RTC_MODE1_EVCTRL_CMPEO_Msk & ((value) << RTC_MODE1_EVCTRL_CMPEO_Pos)))

+#define RTC_MODE1_EVCTRL_OVFEO_Pos  15           /**< \brief (RTC_MODE1_EVCTRL) Overflow Event Output Enable */

+#define RTC_MODE1_EVCTRL_OVFEO      (0x1u << RTC_MODE1_EVCTRL_OVFEO_Pos)

+#define RTC_MODE1_EVCTRL_MASK       0x83FFu      /**< \brief (RTC_MODE1_EVCTRL) MASK Register */

+

+/* -------- RTC_MODE2_EVCTRL : (RTC Offset: 0x04) (R/W 16) MODE2 MODE2 Event Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t PEREO:8;          /*!< bit:  0.. 7  Periodic Interval Event Output Enables */

+    uint16_t ALARMEO:1;        /*!< bit:      8  Alarm 0Event Output Enables        */

+    uint16_t :6;               /*!< bit:  9..14  Reserved                           */

+    uint16_t OVFEO:1;          /*!< bit:     15  Overflow Event Output Enable       */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} RTC_MODE2_EVCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE2_EVCTRL_OFFSET     0x04         /**< \brief (RTC_MODE2_EVCTRL offset) MODE2 Event Control Register */

+#define RTC_MODE2_EVCTRL_RESETVALUE 0x0000       /**< \brief (RTC_MODE2_EVCTRL reset_value) MODE2 Event Control Register */

+

+#define RTC_MODE2_EVCTRL_PEREO_Pos  0            /**< \brief (RTC_MODE2_EVCTRL) Periodic Interval Event Output Enables */

+#define RTC_MODE2_EVCTRL_PEREO_Msk  (0xFFu << RTC_MODE2_EVCTRL_PEREO_Pos)

+#define RTC_MODE2_EVCTRL_PEREO(value) ((RTC_MODE2_EVCTRL_PEREO_Msk & ((value) << RTC_MODE2_EVCTRL_PEREO_Pos)))

+#define RTC_MODE2_EVCTRL_ALARMEO_Pos 8            /**< \brief (RTC_MODE2_EVCTRL) Alarm 0Event Output Enables */

+#define RTC_MODE2_EVCTRL_ALARMEO_Msk (0x1u << RTC_MODE2_EVCTRL_ALARMEO_Pos)

+#define RTC_MODE2_EVCTRL_ALARMEO(value) ((RTC_MODE2_EVCTRL_ALARMEO_Msk & ((value) << RTC_MODE2_EVCTRL_ALARMEO_Pos)))

+#define RTC_MODE2_EVCTRL_OVFEO_Pos  15           /**< \brief (RTC_MODE2_EVCTRL) Overflow Event Output Enable */

+#define RTC_MODE2_EVCTRL_OVFEO      (0x1u << RTC_MODE2_EVCTRL_OVFEO_Pos)

+#define RTC_MODE2_EVCTRL_MASK       0x81FFu      /**< \brief (RTC_MODE2_EVCTRL) MASK Register */

+

+/* -------- RTC_MODE0_INTENCLR : (RTC Offset: 0x06) (R/W  8) MODE0 MODE0 Interrupt Enable Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  CMP:1;            /*!< bit:      0  Comparator Interrupt Disables      */

+    uint8_t  :5;               /*!< bit:  1.. 5  Reserved                           */

+    uint8_t  SYNCRDY:1;        /*!< bit:      6  Synchronization Ready Interrupt Disable */

+    uint8_t  OVF:1;            /*!< bit:      7  Overflow Interrupt Disable         */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} RTC_MODE0_INTENCLR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE0_INTENCLR_OFFSET   0x06         /**< \brief (RTC_MODE0_INTENCLR offset) MODE0 Interrupt Enable Clear Register */

+#define RTC_MODE0_INTENCLR_RESETVALUE 0x00         /**< \brief (RTC_MODE0_INTENCLR reset_value) MODE0 Interrupt Enable Clear Register */

+

+#define RTC_MODE0_INTENCLR_CMP_Pos  0            /**< \brief (RTC_MODE0_INTENCLR) Comparator Interrupt Disables */

+#define RTC_MODE0_INTENCLR_CMP_Msk  (0x1u << RTC_MODE0_INTENCLR_CMP_Pos)

+#define RTC_MODE0_INTENCLR_CMP(value) ((RTC_MODE0_INTENCLR_CMP_Msk & ((value) << RTC_MODE0_INTENCLR_CMP_Pos)))

+#define RTC_MODE0_INTENCLR_SYNCRDY_Pos 6            /**< \brief (RTC_MODE0_INTENCLR) Synchronization Ready Interrupt Disable */

+#define RTC_MODE0_INTENCLR_SYNCRDY  (0x1u << RTC_MODE0_INTENCLR_SYNCRDY_Pos)

+#define RTC_MODE0_INTENCLR_OVF_Pos  7            /**< \brief (RTC_MODE0_INTENCLR) Overflow Interrupt Disable */

+#define RTC_MODE0_INTENCLR_OVF      (0x1u << RTC_MODE0_INTENCLR_OVF_Pos)

+#define RTC_MODE0_INTENCLR_MASK     0xC1u        /**< \brief (RTC_MODE0_INTENCLR) MASK Register */

+

+/* -------- RTC_MODE1_INTENCLR : (RTC Offset: 0x06) (R/W  8) MODE1 MODE1 Interrupt Enable Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  CMP:2;            /*!< bit:  0.. 1  Comparator Interrupt Disables      */

+    uint8_t  :4;               /*!< bit:  2.. 5  Reserved                           */

+    uint8_t  SYNCRDY:1;        /*!< bit:      6  Synchronization Ready Interrupt Disable */

+    uint8_t  OVF:1;            /*!< bit:      7  Overflow Interrupt Disable         */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} RTC_MODE1_INTENCLR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE1_INTENCLR_OFFSET   0x06         /**< \brief (RTC_MODE1_INTENCLR offset) MODE1 Interrupt Enable Clear Register */

+#define RTC_MODE1_INTENCLR_RESETVALUE 0x00         /**< \brief (RTC_MODE1_INTENCLR reset_value) MODE1 Interrupt Enable Clear Register */

+

+#define RTC_MODE1_INTENCLR_CMP_Pos  0            /**< \brief (RTC_MODE1_INTENCLR) Comparator Interrupt Disables */

+#define RTC_MODE1_INTENCLR_CMP_Msk  (0x3u << RTC_MODE1_INTENCLR_CMP_Pos)

+#define RTC_MODE1_INTENCLR_CMP(value) ((RTC_MODE1_INTENCLR_CMP_Msk & ((value) << RTC_MODE1_INTENCLR_CMP_Pos)))

+#define RTC_MODE1_INTENCLR_SYNCRDY_Pos 6            /**< \brief (RTC_MODE1_INTENCLR) Synchronization Ready Interrupt Disable */

+#define RTC_MODE1_INTENCLR_SYNCRDY  (0x1u << RTC_MODE1_INTENCLR_SYNCRDY_Pos)

+#define RTC_MODE1_INTENCLR_OVF_Pos  7            /**< \brief (RTC_MODE1_INTENCLR) Overflow Interrupt Disable */

+#define RTC_MODE1_INTENCLR_OVF      (0x1u << RTC_MODE1_INTENCLR_OVF_Pos)

+#define RTC_MODE1_INTENCLR_MASK     0xC3u        /**< \brief (RTC_MODE1_INTENCLR) MASK Register */

+

+/* -------- RTC_MODE2_INTENCLR : (RTC Offset: 0x06) (R/W  8) MODE2 MODE2 Interrupt Enable Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  ALARM:1;          /*!< bit:      0  Alarm Interrupt Disables           */

+    uint8_t  :5;               /*!< bit:  1.. 5  Reserved                           */

+    uint8_t  SYNCRDY:1;        /*!< bit:      6  Synchronization Ready Interrupt Disable */

+    uint8_t  OVF:1;            /*!< bit:      7  Overflow Interrupt Disable         */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} RTC_MODE2_INTENCLR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE2_INTENCLR_OFFSET   0x06         /**< \brief (RTC_MODE2_INTENCLR offset) MODE2 Interrupt Enable Clear Register */

+#define RTC_MODE2_INTENCLR_RESETVALUE 0x00         /**< \brief (RTC_MODE2_INTENCLR reset_value) MODE2 Interrupt Enable Clear Register */

+

+#define RTC_MODE2_INTENCLR_ALARM_Pos 0            /**< \brief (RTC_MODE2_INTENCLR) Alarm Interrupt Disables */

+#define RTC_MODE2_INTENCLR_ALARM_Msk (0x1u << RTC_MODE2_INTENCLR_ALARM_Pos)

+#define RTC_MODE2_INTENCLR_ALARM(value) ((RTC_MODE2_INTENCLR_ALARM_Msk & ((value) << RTC_MODE2_INTENCLR_ALARM_Pos)))

+#define RTC_MODE2_INTENCLR_SYNCRDY_Pos 6            /**< \brief (RTC_MODE2_INTENCLR) Synchronization Ready Interrupt Disable */

+#define RTC_MODE2_INTENCLR_SYNCRDY  (0x1u << RTC_MODE2_INTENCLR_SYNCRDY_Pos)

+#define RTC_MODE2_INTENCLR_OVF_Pos  7            /**< \brief (RTC_MODE2_INTENCLR) Overflow Interrupt Disable */

+#define RTC_MODE2_INTENCLR_OVF      (0x1u << RTC_MODE2_INTENCLR_OVF_Pos)

+#define RTC_MODE2_INTENCLR_MASK     0xC1u        /**< \brief (RTC_MODE2_INTENCLR) MASK Register */

+

+/* -------- RTC_MODE0_INTENSET : (RTC Offset: 0x07) (R/W  8) MODE0 MODE0 Interrupt Enable Set Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  CMP:1;            /*!< bit:      0  Comparator Interrupt Enables       */

+    uint8_t  :5;               /*!< bit:  1.. 5  Reserved                           */

+    uint8_t  SYNCRDY:1;        /*!< bit:      6  Synchronization Ready Interrupt Enable */

+    uint8_t  OVF:1;            /*!< bit:      7  Overflow Interrupt Enable          */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} RTC_MODE0_INTENSET_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE0_INTENSET_OFFSET   0x07         /**< \brief (RTC_MODE0_INTENSET offset) MODE0 Interrupt Enable Set Register */

+#define RTC_MODE0_INTENSET_RESETVALUE 0x00         /**< \brief (RTC_MODE0_INTENSET reset_value) MODE0 Interrupt Enable Set Register */

+

+#define RTC_MODE0_INTENSET_CMP_Pos  0            /**< \brief (RTC_MODE0_INTENSET) Comparator Interrupt Enables */

+#define RTC_MODE0_INTENSET_CMP_Msk  (0x1u << RTC_MODE0_INTENSET_CMP_Pos)

+#define RTC_MODE0_INTENSET_CMP(value) ((RTC_MODE0_INTENSET_CMP_Msk & ((value) << RTC_MODE0_INTENSET_CMP_Pos)))

+#define RTC_MODE0_INTENSET_SYNCRDY_Pos 6            /**< \brief (RTC_MODE0_INTENSET) Synchronization Ready Interrupt Enable */

+#define RTC_MODE0_INTENSET_SYNCRDY  (0x1u << RTC_MODE0_INTENSET_SYNCRDY_Pos)

+#define RTC_MODE0_INTENSET_OVF_Pos  7            /**< \brief (RTC_MODE0_INTENSET) Overflow Interrupt Enable */

+#define RTC_MODE0_INTENSET_OVF      (0x1u << RTC_MODE0_INTENSET_OVF_Pos)

+#define RTC_MODE0_INTENSET_MASK     0xC1u        /**< \brief (RTC_MODE0_INTENSET) MASK Register */

+

+/* -------- RTC_MODE1_INTENSET : (RTC Offset: 0x07) (R/W  8) MODE1 MODE1 Interrupt Enable Set Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  CMP:2;            /*!< bit:  0.. 1  Comparator Interrupt Enables       */

+    uint8_t  :4;               /*!< bit:  2.. 5  Reserved                           */

+    uint8_t  SYNCRDY:1;        /*!< bit:      6  Synchronization Ready Interrupt Enable */

+    uint8_t  OVF:1;            /*!< bit:      7  Overflow Interrupt Enable          */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} RTC_MODE1_INTENSET_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE1_INTENSET_OFFSET   0x07         /**< \brief (RTC_MODE1_INTENSET offset) MODE1 Interrupt Enable Set Register */

+#define RTC_MODE1_INTENSET_RESETVALUE 0x00         /**< \brief (RTC_MODE1_INTENSET reset_value) MODE1 Interrupt Enable Set Register */

+

+#define RTC_MODE1_INTENSET_CMP_Pos  0            /**< \brief (RTC_MODE1_INTENSET) Comparator Interrupt Enables */

+#define RTC_MODE1_INTENSET_CMP_Msk  (0x3u << RTC_MODE1_INTENSET_CMP_Pos)

+#define RTC_MODE1_INTENSET_CMP(value) ((RTC_MODE1_INTENSET_CMP_Msk & ((value) << RTC_MODE1_INTENSET_CMP_Pos)))

+#define RTC_MODE1_INTENSET_SYNCRDY_Pos 6            /**< \brief (RTC_MODE1_INTENSET) Synchronization Ready Interrupt Enable */

+#define RTC_MODE1_INTENSET_SYNCRDY  (0x1u << RTC_MODE1_INTENSET_SYNCRDY_Pos)

+#define RTC_MODE1_INTENSET_OVF_Pos  7            /**< \brief (RTC_MODE1_INTENSET) Overflow Interrupt Enable */

+#define RTC_MODE1_INTENSET_OVF      (0x1u << RTC_MODE1_INTENSET_OVF_Pos)

+#define RTC_MODE1_INTENSET_MASK     0xC3u        /**< \brief (RTC_MODE1_INTENSET) MASK Register */

+

+/* -------- RTC_MODE2_INTENSET : (RTC Offset: 0x07) (R/W  8) MODE2 MODE2 Interrupt Enable Set Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  ALARM:1;          /*!< bit:      0  Alarm Interrupt Enables            */

+    uint8_t  :5;               /*!< bit:  1.. 5  Reserved                           */

+    uint8_t  SYNCRDY:1;        /*!< bit:      6  Synchronization Ready Interrupt Enable */

+    uint8_t  OVF:1;            /*!< bit:      7  Overflow Interrupt Enable          */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} RTC_MODE2_INTENSET_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE2_INTENSET_OFFSET   0x07         /**< \brief (RTC_MODE2_INTENSET offset) MODE2 Interrupt Enable Set Register */

+#define RTC_MODE2_INTENSET_RESETVALUE 0x00         /**< \brief (RTC_MODE2_INTENSET reset_value) MODE2 Interrupt Enable Set Register */

+

+#define RTC_MODE2_INTENSET_ALARM_Pos 0            /**< \brief (RTC_MODE2_INTENSET) Alarm Interrupt Enables */

+#define RTC_MODE2_INTENSET_ALARM_Msk (0x1u << RTC_MODE2_INTENSET_ALARM_Pos)

+#define RTC_MODE2_INTENSET_ALARM(value) ((RTC_MODE2_INTENSET_ALARM_Msk & ((value) << RTC_MODE2_INTENSET_ALARM_Pos)))

+#define RTC_MODE2_INTENSET_SYNCRDY_Pos 6            /**< \brief (RTC_MODE2_INTENSET) Synchronization Ready Interrupt Enable */

+#define RTC_MODE2_INTENSET_SYNCRDY  (0x1u << RTC_MODE2_INTENSET_SYNCRDY_Pos)

+#define RTC_MODE2_INTENSET_OVF_Pos  7            /**< \brief (RTC_MODE2_INTENSET) Overflow Interrupt Enable */

+#define RTC_MODE2_INTENSET_OVF      (0x1u << RTC_MODE2_INTENSET_OVF_Pos)

+#define RTC_MODE2_INTENSET_MASK     0xC1u        /**< \brief (RTC_MODE2_INTENSET) MASK Register */

+

+/* -------- RTC_MODE0_INTFLAG : (RTC Offset: 0x08) (R/W  8) MODE0 MODE0 Interrupt Flag Status and Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  CMP:1;            /*!< bit:      0  Comparator Interrupt Flags         */

+    uint8_t  :5;               /*!< bit:  1.. 5  Reserved                           */

+    uint8_t  SYNCRDY:1;        /*!< bit:      6  Synchronization Ready Interrupt Flag */

+    uint8_t  OVF:1;            /*!< bit:      7  Overflow Interrupt Flag            */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} RTC_MODE0_INTFLAG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE0_INTFLAG_OFFSET    0x08         /**< \brief (RTC_MODE0_INTFLAG offset) MODE0 Interrupt Flag Status and Clear Register */

+#define RTC_MODE0_INTFLAG_RESETVALUE 0x00         /**< \brief (RTC_MODE0_INTFLAG reset_value) MODE0 Interrupt Flag Status and Clear Register */

+

+#define RTC_MODE0_INTFLAG_CMP_Pos   0            /**< \brief (RTC_MODE0_INTFLAG) Comparator Interrupt Flags */

+#define RTC_MODE0_INTFLAG_CMP_Msk   (0x1u << RTC_MODE0_INTFLAG_CMP_Pos)

+#define RTC_MODE0_INTFLAG_CMP(value) ((RTC_MODE0_INTFLAG_CMP_Msk & ((value) << RTC_MODE0_INTFLAG_CMP_Pos)))

+#define RTC_MODE0_INTFLAG_SYNCRDY_Pos 6            /**< \brief (RTC_MODE0_INTFLAG) Synchronization Ready Interrupt Flag */

+#define RTC_MODE0_INTFLAG_SYNCRDY   (0x1u << RTC_MODE0_INTFLAG_SYNCRDY_Pos)

+#define RTC_MODE0_INTFLAG_OVF_Pos   7            /**< \brief (RTC_MODE0_INTFLAG) Overflow Interrupt Flag */

+#define RTC_MODE0_INTFLAG_OVF       (0x1u << RTC_MODE0_INTFLAG_OVF_Pos)

+#define RTC_MODE0_INTFLAG_MASK      0xC1u        /**< \brief (RTC_MODE0_INTFLAG) MASK Register */

+

+/* -------- RTC_MODE1_INTFLAG : (RTC Offset: 0x08) (R/W  8) MODE1 MODE1 Interrupt Flag Status and Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  CMP:2;            /*!< bit:  0.. 1  Comparator Interrupt Flags         */

+    uint8_t  :4;               /*!< bit:  2.. 5  Reserved                           */

+    uint8_t  SYNCRDY:1;        /*!< bit:      6  Synchronization Ready Interrupt Flag */

+    uint8_t  OVF:1;            /*!< bit:      7  Overflow Interrupt Flag            */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} RTC_MODE1_INTFLAG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE1_INTFLAG_OFFSET    0x08         /**< \brief (RTC_MODE1_INTFLAG offset) MODE1 Interrupt Flag Status and Clear Register */

+#define RTC_MODE1_INTFLAG_RESETVALUE 0x00         /**< \brief (RTC_MODE1_INTFLAG reset_value) MODE1 Interrupt Flag Status and Clear Register */

+

+#define RTC_MODE1_INTFLAG_CMP_Pos   0            /**< \brief (RTC_MODE1_INTFLAG) Comparator Interrupt Flags */

+#define RTC_MODE1_INTFLAG_CMP_Msk   (0x3u << RTC_MODE1_INTFLAG_CMP_Pos)

+#define RTC_MODE1_INTFLAG_CMP(value) ((RTC_MODE1_INTFLAG_CMP_Msk & ((value) << RTC_MODE1_INTFLAG_CMP_Pos)))

+#define RTC_MODE1_INTFLAG_SYNCRDY_Pos 6            /**< \brief (RTC_MODE1_INTFLAG) Synchronization Ready Interrupt Flag */

+#define RTC_MODE1_INTFLAG_SYNCRDY   (0x1u << RTC_MODE1_INTFLAG_SYNCRDY_Pos)

+#define RTC_MODE1_INTFLAG_OVF_Pos   7            /**< \brief (RTC_MODE1_INTFLAG) Overflow Interrupt Flag */

+#define RTC_MODE1_INTFLAG_OVF       (0x1u << RTC_MODE1_INTFLAG_OVF_Pos)

+#define RTC_MODE1_INTFLAG_MASK      0xC3u        /**< \brief (RTC_MODE1_INTFLAG) MASK Register */

+

+/* -------- RTC_MODE2_INTFLAG : (RTC Offset: 0x08) (R/W  8) MODE2 MODE2 Interrupt Flag Status and Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  ALARM:1;          /*!< bit:      0  Alarm Interrupt Flags              */

+    uint8_t  :5;               /*!< bit:  1.. 5  Reserved                           */

+    uint8_t  SYNCRDY:1;        /*!< bit:      6  Synchronization Ready Interrupt Flag */

+    uint8_t  OVF:1;            /*!< bit:      7  Overflow Interrupt Flag            */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} RTC_MODE2_INTFLAG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE2_INTFLAG_OFFSET    0x08         /**< \brief (RTC_MODE2_INTFLAG offset) MODE2 Interrupt Flag Status and Clear Register */

+#define RTC_MODE2_INTFLAG_RESETVALUE 0x00         /**< \brief (RTC_MODE2_INTFLAG reset_value) MODE2 Interrupt Flag Status and Clear Register */

+

+#define RTC_MODE2_INTFLAG_ALARM_Pos 0            /**< \brief (RTC_MODE2_INTFLAG) Alarm Interrupt Flags */

+#define RTC_MODE2_INTFLAG_ALARM_Msk (0x1u << RTC_MODE2_INTFLAG_ALARM_Pos)

+#define RTC_MODE2_INTFLAG_ALARM(value) ((RTC_MODE2_INTFLAG_ALARM_Msk & ((value) << RTC_MODE2_INTFLAG_ALARM_Pos)))

+#define RTC_MODE2_INTFLAG_SYNCRDY_Pos 6            /**< \brief (RTC_MODE2_INTFLAG) Synchronization Ready Interrupt Flag */

+#define RTC_MODE2_INTFLAG_SYNCRDY   (0x1u << RTC_MODE2_INTFLAG_SYNCRDY_Pos)

+#define RTC_MODE2_INTFLAG_OVF_Pos   7            /**< \brief (RTC_MODE2_INTFLAG) Overflow Interrupt Flag */

+#define RTC_MODE2_INTFLAG_OVF       (0x1u << RTC_MODE2_INTFLAG_OVF_Pos)

+#define RTC_MODE2_INTFLAG_MASK      0xC1u        /**< \brief (RTC_MODE2_INTFLAG) MASK Register */

+

+/* -------- RTC_STATUS : (RTC Offset: 0x0A) (R/W  8) Status Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  :7;               /*!< bit:  0.. 6  Reserved                           */

+    uint8_t  SYNCBUSY:1;       /*!< bit:      7  Synchronization Busy Status        */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} RTC_STATUS_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_STATUS_OFFSET           0x0A         /**< \brief (RTC_STATUS offset) Status Register */

+#define RTC_STATUS_RESETVALUE       0x00         /**< \brief (RTC_STATUS reset_value) Status Register */

+

+#define RTC_STATUS_SYNCBUSY_Pos     7            /**< \brief (RTC_STATUS) Synchronization Busy Status */

+#define RTC_STATUS_SYNCBUSY         (0x1u << RTC_STATUS_SYNCBUSY_Pos)

+#define RTC_STATUS_MASK             0x80u        /**< \brief (RTC_STATUS) MASK Register */

+

+/* -------- RTC_DBGCTRL : (RTC Offset: 0x0B) (R/W  8) Debug Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  DBGRUN:1;         /*!< bit:      0  Run During Debug                   */

+    uint8_t  :7;               /*!< bit:  1.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} RTC_DBGCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_DBGCTRL_OFFSET          0x0B         /**< \brief (RTC_DBGCTRL offset) Debug Register */

+#define RTC_DBGCTRL_RESETVALUE      0x00         /**< \brief (RTC_DBGCTRL reset_value) Debug Register */

+

+#define RTC_DBGCTRL_DBGRUN_Pos      0            /**< \brief (RTC_DBGCTRL) Run During Debug */

+#define RTC_DBGCTRL_DBGRUN          (0x1u << RTC_DBGCTRL_DBGRUN_Pos)

+#define RTC_DBGCTRL_MASK            0x01u        /**< \brief (RTC_DBGCTRL) MASK Register */

+

+/* -------- RTC_FREQCORR : (RTC Offset: 0x0C) (R/W  8) Frequency Correction Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  VALUE:7;          /*!< bit:  0.. 6  Correction Value                   */

+    uint8_t  SIGN:1;           /*!< bit:      7  Correction Sign                    */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} RTC_FREQCORR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_FREQCORR_OFFSET         0x0C         /**< \brief (RTC_FREQCORR offset) Frequency Correction Register */

+#define RTC_FREQCORR_RESETVALUE     0x00         /**< \brief (RTC_FREQCORR reset_value) Frequency Correction Register */

+

+#define RTC_FREQCORR_VALUE_Pos      0            /**< \brief (RTC_FREQCORR) Correction Value */

+#define RTC_FREQCORR_VALUE_Msk      (0x7Fu << RTC_FREQCORR_VALUE_Pos)

+#define RTC_FREQCORR_VALUE(value)   ((RTC_FREQCORR_VALUE_Msk & ((value) << RTC_FREQCORR_VALUE_Pos)))

+#define RTC_FREQCORR_SIGN_Pos       7            /**< \brief (RTC_FREQCORR) Correction Sign */

+#define RTC_FREQCORR_SIGN           (0x1u << RTC_FREQCORR_SIGN_Pos)

+#define RTC_FREQCORR_MASK           0xFFu        /**< \brief (RTC_FREQCORR) MASK Register */

+

+/* -------- RTC_MODE0_COUNT : (RTC Offset: 0x10) (R/W 32) MODE0 MODE0 Count Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t COUNT:32;         /*!< bit:  0..31  Counter Value                      */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} RTC_MODE0_COUNT_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE0_COUNT_OFFSET      0x10         /**< \brief (RTC_MODE0_COUNT offset) MODE0 Count Register */

+#define RTC_MODE0_COUNT_RESETVALUE  0x00000000   /**< \brief (RTC_MODE0_COUNT reset_value) MODE0 Count Register */

+

+#define RTC_MODE0_COUNT_COUNT_Pos   0            /**< \brief (RTC_MODE0_COUNT) Counter Value */

+#define RTC_MODE0_COUNT_COUNT_Msk   (0xFFFFFFFFu << RTC_MODE0_COUNT_COUNT_Pos)

+#define RTC_MODE0_COUNT_COUNT(value) ((RTC_MODE0_COUNT_COUNT_Msk & ((value) << RTC_MODE0_COUNT_COUNT_Pos)))

+#define RTC_MODE0_COUNT_MASK        0xFFFFFFFFu  /**< \brief (RTC_MODE0_COUNT) MASK Register */

+

+/* -------- RTC_MODE1_COUNT : (RTC Offset: 0x10) (R/W 16) MODE1 MODE1 Count Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t COUNT:16;         /*!< bit:  0..15  Counter Value                      */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} RTC_MODE1_COUNT_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE1_COUNT_OFFSET      0x10         /**< \brief (RTC_MODE1_COUNT offset) MODE1 Count Register */

+#define RTC_MODE1_COUNT_RESETVALUE  0x0000       /**< \brief (RTC_MODE1_COUNT reset_value) MODE1 Count Register */

+

+#define RTC_MODE1_COUNT_COUNT_Pos   0            /**< \brief (RTC_MODE1_COUNT) Counter Value */

+#define RTC_MODE1_COUNT_COUNT_Msk   (0xFFFFu << RTC_MODE1_COUNT_COUNT_Pos)

+#define RTC_MODE1_COUNT_COUNT(value) ((RTC_MODE1_COUNT_COUNT_Msk & ((value) << RTC_MODE1_COUNT_COUNT_Pos)))

+#define RTC_MODE1_COUNT_MASK        0xFFFFu      /**< \brief (RTC_MODE1_COUNT) MASK Register */

+

+/* -------- RTC_MODE2_CLOCK : (RTC Offset: 0x10) (R/W 32) MODE2 MODE2 Clock Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t SECOND:6;         /*!< bit:  0.. 5  Current Second                     */

+    uint32_t MINUTE:6;         /*!< bit:  6..11  Current Minute                     */

+    uint32_t HOUR:5;           /*!< bit: 12..16  Current Hour                       */

+    uint32_t DAY:5;            /*!< bit: 17..21  Current Day                        */

+    uint32_t MONTH:4;          /*!< bit: 22..25  Current Month                      */

+    uint32_t YEAR:6;           /*!< bit: 26..31  Current Year                       */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} RTC_MODE2_CLOCK_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE2_CLOCK_OFFSET      0x10         /**< \brief (RTC_MODE2_CLOCK offset) MODE2 Clock Register */

+#define RTC_MODE2_CLOCK_RESETVALUE  0x00000000   /**< \brief (RTC_MODE2_CLOCK reset_value) MODE2 Clock Register */

+

+#define RTC_MODE2_CLOCK_SECOND_Pos  0            /**< \brief (RTC_MODE2_CLOCK) Current Second */

+#define RTC_MODE2_CLOCK_SECOND_Msk  (0x3Fu << RTC_MODE2_CLOCK_SECOND_Pos)

+#define RTC_MODE2_CLOCK_SECOND(value) ((RTC_MODE2_CLOCK_SECOND_Msk & ((value) << RTC_MODE2_CLOCK_SECOND_Pos)))

+#define RTC_MODE2_CLOCK_MINUTE_Pos  6            /**< \brief (RTC_MODE2_CLOCK) Current Minute */

+#define RTC_MODE2_CLOCK_MINUTE_Msk  (0x3Fu << RTC_MODE2_CLOCK_MINUTE_Pos)

+#define RTC_MODE2_CLOCK_MINUTE(value) ((RTC_MODE2_CLOCK_MINUTE_Msk & ((value) << RTC_MODE2_CLOCK_MINUTE_Pos)))

+#define RTC_MODE2_CLOCK_HOUR_Pos    12           /**< \brief (RTC_MODE2_CLOCK) Current Hour */

+#define RTC_MODE2_CLOCK_HOUR_Msk    (0x1Fu << RTC_MODE2_CLOCK_HOUR_Pos)

+#define RTC_MODE2_CLOCK_HOUR(value) ((RTC_MODE2_CLOCK_HOUR_Msk & ((value) << RTC_MODE2_CLOCK_HOUR_Pos)))

+#define   RTC_MODE2_CLOCK_HOUR_PM   (0x10u << 12) /**< \brief (RTC_MODE2_CLOCK)  */

+#define RTC_MODE2_CLOCK_DAY_Pos     17           /**< \brief (RTC_MODE2_CLOCK) Current Day */

+#define RTC_MODE2_CLOCK_DAY_Msk     (0x1Fu << RTC_MODE2_CLOCK_DAY_Pos)

+#define RTC_MODE2_CLOCK_DAY(value)  ((RTC_MODE2_CLOCK_DAY_Msk & ((value) << RTC_MODE2_CLOCK_DAY_Pos)))

+#define RTC_MODE2_CLOCK_MONTH_Pos   22           /**< \brief (RTC_MODE2_CLOCK) Current Month */

+#define RTC_MODE2_CLOCK_MONTH_Msk   (0xFu << RTC_MODE2_CLOCK_MONTH_Pos)

+#define RTC_MODE2_CLOCK_MONTH(value) ((RTC_MODE2_CLOCK_MONTH_Msk & ((value) << RTC_MODE2_CLOCK_MONTH_Pos)))

+#define RTC_MODE2_CLOCK_YEAR_Pos    26           /**< \brief (RTC_MODE2_CLOCK) Current Year */

+#define RTC_MODE2_CLOCK_YEAR_Msk    (0x3Fu << RTC_MODE2_CLOCK_YEAR_Pos)

+#define RTC_MODE2_CLOCK_YEAR(value) ((RTC_MODE2_CLOCK_YEAR_Msk & ((value) << RTC_MODE2_CLOCK_YEAR_Pos)))

+#define RTC_MODE2_CLOCK_MASK        0xFFFFFFFFu  /**< \brief (RTC_MODE2_CLOCK) MASK Register */

+

+/* -------- RTC_MODE1_PER : (RTC Offset: 0x14) (R/W 16) MODE1 MODE1 Period Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t PER:16;           /*!< bit:  0..15  Counter Period                     */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} RTC_MODE1_PER_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE1_PER_OFFSET        0x14         /**< \brief (RTC_MODE1_PER offset) MODE1 Period Register */

+#define RTC_MODE1_PER_RESETVALUE    0x0000       /**< \brief (RTC_MODE1_PER reset_value) MODE1 Period Register */

+

+#define RTC_MODE1_PER_PER_Pos       0            /**< \brief (RTC_MODE1_PER) Counter Period */

+#define RTC_MODE1_PER_PER_Msk       (0xFFFFu << RTC_MODE1_PER_PER_Pos)

+#define RTC_MODE1_PER_PER(value)    ((RTC_MODE1_PER_PER_Msk & ((value) << RTC_MODE1_PER_PER_Pos)))

+#define RTC_MODE1_PER_MASK          0xFFFFu      /**< \brief (RTC_MODE1_PER) MASK Register */

+

+/* -------- RTC_MODE0_COMP : (RTC Offset: 0x18) (R/W 32) MODE0 MODE0 Compare Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t COMP:32;          /*!< bit:  0..31  Compare Value                      */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} RTC_MODE0_COMP_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE0_COMP_OFFSET       0x18         /**< \brief (RTC_MODE0_COMP offset) MODE0 Compare Register */

+#define RTC_MODE0_COMP_RESETVALUE   0x00000000   /**< \brief (RTC_MODE0_COMP reset_value) MODE0 Compare Register */

+

+#define RTC_MODE0_COMP_COMP_Pos     0            /**< \brief (RTC_MODE0_COMP) Compare Value */

+#define RTC_MODE0_COMP_COMP_Msk     (0xFFFFFFFFu << RTC_MODE0_COMP_COMP_Pos)

+#define RTC_MODE0_COMP_COMP(value)  ((RTC_MODE0_COMP_COMP_Msk & ((value) << RTC_MODE0_COMP_COMP_Pos)))

+#define RTC_MODE0_COMP_MASK         0xFFFFFFFFu  /**< \brief (RTC_MODE0_COMP) MASK Register */

+

+/* -------- RTC_MODE1_COMP : (RTC Offset: 0x18) (R/W 16) MODE1 MODE1 Compare Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t COMP:16;          /*!< bit:  0..15  Compare Value                      */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} RTC_MODE1_COMP_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE1_COMP_OFFSET       0x18         /**< \brief (RTC_MODE1_COMP offset) MODE1 Compare Register */

+#define RTC_MODE1_COMP_RESETVALUE   0x0000       /**< \brief (RTC_MODE1_COMP reset_value) MODE1 Compare Register */

+

+#define RTC_MODE1_COMP_COMP_Pos     0            /**< \brief (RTC_MODE1_COMP) Compare Value */

+#define RTC_MODE1_COMP_COMP_Msk     (0xFFFFu << RTC_MODE1_COMP_COMP_Pos)

+#define RTC_MODE1_COMP_COMP(value)  ((RTC_MODE1_COMP_COMP_Msk & ((value) << RTC_MODE1_COMP_COMP_Pos)))

+#define RTC_MODE1_COMP_MASK         0xFFFFu      /**< \brief (RTC_MODE1_COMP) MASK Register */

+

+/* -------- RTC_MODE2_ALARM : (RTC Offset: 0x18) (R/W 32) MODE2 MODE2_ALARM Alarm Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t SECOND:6;         /*!< bit:  0.. 5  Alarm Second                       */

+    uint32_t MINUTE:6;         /*!< bit:  6..11  Alarm Minute                       */

+    uint32_t HOUR:5;           /*!< bit: 12..16  Alarm Hour                         */

+    uint32_t DAY:5;            /*!< bit: 17..21  Alarm Day                          */

+    uint32_t MONTH:4;          /*!< bit: 22..25  Alarm Month                        */

+    uint32_t YEAR:6;           /*!< bit: 26..31  Alarm Year                         */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} RTC_MODE2_ALARM_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE2_ALARM_OFFSET      0x18         /**< \brief (RTC_MODE2_ALARM offset) MODE2_ALARM Alarm Register */

+#define RTC_MODE2_ALARM_RESETVALUE  0x00000000   /**< \brief (RTC_MODE2_ALARM reset_value) MODE2_ALARM Alarm Register */

+

+#define RTC_MODE2_ALARM_SECOND_Pos  0            /**< \brief (RTC_MODE2_ALARM) Alarm Second */

+#define RTC_MODE2_ALARM_SECOND_Msk  (0x3Fu << RTC_MODE2_ALARM_SECOND_Pos)

+#define RTC_MODE2_ALARM_SECOND(value) ((RTC_MODE2_ALARM_SECOND_Msk & ((value) << RTC_MODE2_ALARM_SECOND_Pos)))

+#define RTC_MODE2_ALARM_MINUTE_Pos  6            /**< \brief (RTC_MODE2_ALARM) Alarm Minute */

+#define RTC_MODE2_ALARM_MINUTE_Msk  (0x3Fu << RTC_MODE2_ALARM_MINUTE_Pos)

+#define RTC_MODE2_ALARM_MINUTE(value) ((RTC_MODE2_ALARM_MINUTE_Msk & ((value) << RTC_MODE2_ALARM_MINUTE_Pos)))

+#define RTC_MODE2_ALARM_HOUR_Pos    12           /**< \brief (RTC_MODE2_ALARM) Alarm Hour */

+#define RTC_MODE2_ALARM_HOUR_Msk    (0x1Fu << RTC_MODE2_ALARM_HOUR_Pos)

+#define RTC_MODE2_ALARM_HOUR(value) ((RTC_MODE2_ALARM_HOUR_Msk & ((value) << RTC_MODE2_ALARM_HOUR_Pos)))

+#define RTC_MODE2_ALARM_DAY_Pos     17           /**< \brief (RTC_MODE2_ALARM) Alarm Day */

+#define RTC_MODE2_ALARM_DAY_Msk     (0x1Fu << RTC_MODE2_ALARM_DAY_Pos)

+#define RTC_MODE2_ALARM_DAY(value)  ((RTC_MODE2_ALARM_DAY_Msk & ((value) << RTC_MODE2_ALARM_DAY_Pos)))

+#define RTC_MODE2_ALARM_MONTH_Pos   22           /**< \brief (RTC_MODE2_ALARM) Alarm Month */

+#define RTC_MODE2_ALARM_MONTH_Msk   (0xFu << RTC_MODE2_ALARM_MONTH_Pos)

+#define RTC_MODE2_ALARM_MONTH(value) ((RTC_MODE2_ALARM_MONTH_Msk & ((value) << RTC_MODE2_ALARM_MONTH_Pos)))

+#define RTC_MODE2_ALARM_YEAR_Pos    26           /**< \brief (RTC_MODE2_ALARM) Alarm Year */

+#define RTC_MODE2_ALARM_YEAR_Msk    (0x3Fu << RTC_MODE2_ALARM_YEAR_Pos)

+#define RTC_MODE2_ALARM_YEAR(value) ((RTC_MODE2_ALARM_YEAR_Msk & ((value) << RTC_MODE2_ALARM_YEAR_Pos)))

+#define RTC_MODE2_ALARM_MASK        0xFFFFFFFFu  /**< \brief (RTC_MODE2_ALARM) MASK Register */

+

+/* -------- RTC_MODE2_MASK : (RTC Offset: 0x1C) (R/W  8) MODE2 MODE2_ALARM Alarm Mask Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  SEL:3;            /*!< bit:  0.. 2  Alarm Mask Selection               */

+    uint8_t  :5;               /*!< bit:  3.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} RTC_MODE2_MASK_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define RTC_MODE2_MASK_OFFSET       0x1C         /**< \brief (RTC_MODE2_MASK offset) MODE2_ALARM Alarm Mask Register */

+#define RTC_MODE2_MASK_RESETVALUE   0x00         /**< \brief (RTC_MODE2_MASK reset_value) MODE2_ALARM Alarm Mask Register */

+

+#define RTC_MODE2_MASK_SEL_Pos      0            /**< \brief (RTC_MODE2_MASK) Alarm Mask Selection */

+#define RTC_MODE2_MASK_SEL_Msk      (0x7u << RTC_MODE2_MASK_SEL_Pos)

+#define RTC_MODE2_MASK_SEL(value)   ((RTC_MODE2_MASK_SEL_Msk & ((value) << RTC_MODE2_MASK_SEL_Pos)))

+#define   RTC_MODE2_MASK_SEL_OFF    (0x0u <<  0) /**< \brief (RTC_MODE2_MASK)  */

+#define   RTC_MODE2_MASK_SEL_SS     (0x1u <<  0) /**< \brief (RTC_MODE2_MASK)  */

+#define   RTC_MODE2_MASK_SEL_MMSS   (0x2u <<  0) /**< \brief (RTC_MODE2_MASK)  */

+#define   RTC_MODE2_MASK_SEL_HHMMSS (0x3u <<  0) /**< \brief (RTC_MODE2_MASK)  */

+#define   RTC_MODE2_MASK_SEL_DDHHMMSS (0x4u <<  0) /**< \brief (RTC_MODE2_MASK)  */

+#define   RTC_MODE2_MASK_SEL_MMDDHHMMSS (0x5u <<  0) /**< \brief (RTC_MODE2_MASK)  */

+#define   RTC_MODE2_MASK_SEL_YYMMDDHHMMSS (0x6u <<  0) /**< \brief (RTC_MODE2_MASK)  */

+#define RTC_MODE2_MASK_MASK         0x07u        /**< \brief (RTC_MODE2_MASK) MASK Register */

+

+/** \brief RtcMode2Alarm hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct {

+  __IO RTC_MODE2_ALARM_Type      ALARM;       /**< \brief Offset: 0x00 (R/W 32) MODE2_ALARM Alarm Register */

+  __IO RTC_MODE2_MASK_Type       MASK;        /**< \brief Offset: 0x04 (R/W  8) MODE2_ALARM Alarm Mask Register */

+       RoReg8                    Reserved1[0x3];

+} RtcMode2Alarm;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/** \brief RTC_MODE0 hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct { /* 32-bit Counter with Single 32-bit Compare */

+  __IO RTC_MODE0_CTRL_Type       CTRL;        /**< \brief Offset: 0x00 (R/W 16) MODE0 Control Register */

+  __IO RTC_READREQ_Type          READREQ;     /**< \brief Offset: 0x02 (R/W 16) Read Request Register */

+  __IO RTC_MODE0_EVCTRL_Type     EVCTRL;      /**< \brief Offset: 0x04 (R/W 16) MODE0 Event Control Register */

+  __IO RTC_MODE0_INTENCLR_Type   INTENCLR;    /**< \brief Offset: 0x06 (R/W  8) MODE0 Interrupt Enable Clear Register */

+  __IO RTC_MODE0_INTENSET_Type   INTENSET;    /**< \brief Offset: 0x07 (R/W  8) MODE0 Interrupt Enable Set Register */

+  __IO RTC_MODE0_INTFLAG_Type    INTFLAG;     /**< \brief Offset: 0x08 (R/W  8) MODE0 Interrupt Flag Status and Clear Register */

+       RoReg8                    Reserved1[0x1];

+  __IO RTC_STATUS_Type           STATUS;      /**< \brief Offset: 0x0A (R/W  8) Status Register */

+  __IO RTC_DBGCTRL_Type          DBGCTRL;     /**< \brief Offset: 0x0B (R/W  8) Debug Register */

+  __IO RTC_FREQCORR_Type         FREQCORR;    /**< \brief Offset: 0x0C (R/W  8) Frequency Correction Register */

+       RoReg8                    Reserved2[0x3];

+  __IO RTC_MODE0_COUNT_Type      COUNT;       /**< \brief Offset: 0x10 (R/W 32) MODE0 Count Register */

+       RoReg8                    Reserved3[0x4];

+  __IO RTC_MODE0_COMP_Type       COMP[1];     /**< \brief Offset: 0x18 (R/W 32) MODE0 Compare Register [NUM_OF_COMP32] */

+} RtcMode0;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/** \brief RTC_MODE1 hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct { /* 16-bit Counter with Two 16-bit Compares */

+  __IO RTC_MODE1_CTRL_Type       CTRL;        /**< \brief Offset: 0x00 (R/W 16) MODE1 Control Register */

+  __IO RTC_READREQ_Type          READREQ;     /**< \brief Offset: 0x02 (R/W 16) Read Request Register */

+  __IO RTC_MODE1_EVCTRL_Type     EVCTRL;      /**< \brief Offset: 0x04 (R/W 16) MODE1 Event Control Register */

+  __IO RTC_MODE1_INTENCLR_Type   INTENCLR;    /**< \brief Offset: 0x06 (R/W  8) MODE1 Interrupt Enable Clear Register */

+  __IO RTC_MODE1_INTENSET_Type   INTENSET;    /**< \brief Offset: 0x07 (R/W  8) MODE1 Interrupt Enable Set Register */

+  __IO RTC_MODE1_INTFLAG_Type    INTFLAG;     /**< \brief Offset: 0x08 (R/W  8) MODE1 Interrupt Flag Status and Clear Register */

+       RoReg8                    Reserved1[0x1];

+  __IO RTC_STATUS_Type           STATUS;      /**< \brief Offset: 0x0A (R/W  8) Status Register */

+  __IO RTC_DBGCTRL_Type          DBGCTRL;     /**< \brief Offset: 0x0B (R/W  8) Debug Register */

+  __IO RTC_FREQCORR_Type         FREQCORR;    /**< \brief Offset: 0x0C (R/W  8) Frequency Correction Register */

+       RoReg8                    Reserved2[0x3];

+  __IO RTC_MODE1_COUNT_Type      COUNT;       /**< \brief Offset: 0x10 (R/W 16) MODE1 Count Register */

+       RoReg8                    Reserved3[0x2];

+  __IO RTC_MODE1_PER_Type        PER;         /**< \brief Offset: 0x14 (R/W 16) MODE1 Period Register */

+       RoReg8                    Reserved4[0x2];

+  __IO RTC_MODE1_COMP_Type       COMP[2];     /**< \brief Offset: 0x18 (R/W 16) MODE1 Compare Register [NUM_OF_COMP16] */

+} RtcMode1;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/** \brief RTC_MODE2 hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct { /* Clock/Calendar with Alarm */

+  __IO RTC_MODE2_CTRL_Type       CTRL;        /**< \brief Offset: 0x00 (R/W 16) MODE2 Control Register */

+  __IO RTC_READREQ_Type          READREQ;     /**< \brief Offset: 0x02 (R/W 16) Read Request Register */

+  __IO RTC_MODE2_EVCTRL_Type     EVCTRL;      /**< \brief Offset: 0x04 (R/W 16) MODE2 Event Control Register */

+  __IO RTC_MODE2_INTENCLR_Type   INTENCLR;    /**< \brief Offset: 0x06 (R/W  8) MODE2 Interrupt Enable Clear Register */

+  __IO RTC_MODE2_INTENSET_Type   INTENSET;    /**< \brief Offset: 0x07 (R/W  8) MODE2 Interrupt Enable Set Register */

+  __IO RTC_MODE2_INTFLAG_Type    INTFLAG;     /**< \brief Offset: 0x08 (R/W  8) MODE2 Interrupt Flag Status and Clear Register */

+       RoReg8                    Reserved1[0x1];

+  __IO RTC_STATUS_Type           STATUS;      /**< \brief Offset: 0x0A (R/W  8) Status Register */

+  __IO RTC_DBGCTRL_Type          DBGCTRL;     /**< \brief Offset: 0x0B (R/W  8) Debug Register */

+  __IO RTC_FREQCORR_Type         FREQCORR;    /**< \brief Offset: 0x0C (R/W  8) Frequency Correction Register */

+       RoReg8                    Reserved2[0x3];

+  __IO RTC_MODE2_CLOCK_Type      CLOCK;       /**< \brief Offset: 0x10 (R/W 32) MODE2 Clock Register */

+       RoReg8                    Reserved3[0x4];

+       RtcMode2Alarm             Mode2Alarm[1]; /**< \brief Offset: 0x18 RtcMode2Alarm groups [NUM_OF_ALARMS] */

+} RtcMode2;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+       RtcMode0                  MODE0;       /**< \brief Offset: 0x00 32-bit Counter with Single 32-bit Compare */

+       RtcMode1                  MODE1;       /**< \brief Offset: 0x00 16-bit Counter with Two 16-bit Compares */

+       RtcMode2                  MODE2;       /**< \brief Offset: 0x00 Clock/Calendar with Alarm */

+} Rtc;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/*@}*/

+

+#endif /* _SAMD20_RTC_COMPONENT_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_sercom.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_sercom.h
new file mode 100644
index 0000000..d0b3006
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_sercom.h
@@ -0,0 +1,1158 @@
+/**

+ * \file

+ *

+ * \brief Component description for SERCOM

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_SERCOM_COMPONENT_

+#define _SAMD20_SERCOM_COMPONENT_

+

+/* ========================================================================== */

+/**  SOFTWARE API DEFINITION FOR SERCOM */

+/* ========================================================================== */

+/** \addtogroup SAMD20_SERCOM Serial Communication Interface */

+/*@{*/

+

+#define REV_SERCOM                  0x101

+

+/* -------- SERCOM_I2CM_CTRLA : (SERCOM Offset: 0x00) (R/W 32) I2CM I2CM Control Register A -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t SWRST:1;          /*!< bit:      0  Software Reset                     */

+    uint32_t ENABLE:1;         /*!< bit:      1  Enable                             */

+    uint32_t MODE:3;           /*!< bit:  2.. 4  Operating Mode                     */

+    uint32_t :2;               /*!< bit:  5.. 6  Reserved                           */

+    uint32_t RUNSTDBY:1;       /*!< bit:      7  Run during Standby                 */

+    uint32_t :8;               /*!< bit:  8..15  Reserved                           */

+    uint32_t PINOUT:1;         /*!< bit:     16  Pin Usage                          */

+    uint32_t :3;               /*!< bit: 17..19  Reserved                           */

+    uint32_t SDAHOLD:2;        /*!< bit: 20..21  SDA Hold Time                      */

+    uint32_t :6;               /*!< bit: 22..27  Reserved                           */

+    uint32_t INACTOUT:2;       /*!< bit: 28..29  Inactive Bus Timeout               */

+    uint32_t LOWTOUT:1;        /*!< bit:     30  SCL Low Timeout                    */

+    uint32_t :1;               /*!< bit:     31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} SERCOM_I2CM_CTRLA_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_I2CM_CTRLA_OFFSET    0x00         /**< \brief (SERCOM_I2CM_CTRLA offset) I2CM Control Register A */

+#define SERCOM_I2CM_CTRLA_RESETVALUE 0x00000000   /**< \brief (SERCOM_I2CM_CTRLA reset_value) I2CM Control Register A */

+

+#define SERCOM_I2CM_CTRLA_SWRST_Pos 0            /**< \brief (SERCOM_I2CM_CTRLA) Software Reset */

+#define SERCOM_I2CM_CTRLA_SWRST     (0x1u << SERCOM_I2CM_CTRLA_SWRST_Pos)

+#define SERCOM_I2CM_CTRLA_ENABLE_Pos 1            /**< \brief (SERCOM_I2CM_CTRLA) Enable */

+#define SERCOM_I2CM_CTRLA_ENABLE    (0x1u << SERCOM_I2CM_CTRLA_ENABLE_Pos)

+#define SERCOM_I2CM_CTRLA_MODE_Pos  2            /**< \brief (SERCOM_I2CM_CTRLA) Operating Mode */

+#define SERCOM_I2CM_CTRLA_MODE_Msk  (0x7u << SERCOM_I2CM_CTRLA_MODE_Pos)

+#define SERCOM_I2CM_CTRLA_MODE(value) ((SERCOM_I2CM_CTRLA_MODE_Msk & ((value) << SERCOM_I2CM_CTRLA_MODE_Pos)))

+#define   SERCOM_I2CM_CTRLA_MODE_USART_EXT_CLK (0x0u <<  2) /**< \brief (SERCOM_I2CM_CTRLA) USART mode with external clock */

+#define   SERCOM_I2CM_CTRLA_MODE_USART_INT_CLK (0x1u <<  2) /**< \brief (SERCOM_I2CM_CTRLA) USART mode with internal clock */

+#define   SERCOM_I2CM_CTRLA_MODE_SPI_SLAVE (0x2u <<  2) /**< \brief (SERCOM_I2CM_CTRLA) SPI mode with external clock */

+#define   SERCOM_I2CM_CTRLA_MODE_SPI_MASTER (0x3u <<  2) /**< \brief (SERCOM_I2CM_CTRLA) SPI mode with internal clock */

+#define   SERCOM_I2CM_CTRLA_MODE_I2C_SLAVE (0x4u <<  2) /**< \brief (SERCOM_I2CM_CTRLA) I2C mode with external clock */

+#define   SERCOM_I2CM_CTRLA_MODE_I2C_MASTER (0x5u <<  2) /**< \brief (SERCOM_I2CM_CTRLA) I2C mode with internal clock */

+#define SERCOM_I2CM_CTRLA_RUNSTDBY_Pos 7            /**< \brief (SERCOM_I2CM_CTRLA) Run during Standby */

+#define SERCOM_I2CM_CTRLA_RUNSTDBY  (0x1u << SERCOM_I2CM_CTRLA_RUNSTDBY_Pos)

+#define SERCOM_I2CM_CTRLA_PINOUT_Pos 16           /**< \brief (SERCOM_I2CM_CTRLA) Pin Usage */

+#define SERCOM_I2CM_CTRLA_PINOUT    (0x1u << SERCOM_I2CM_CTRLA_PINOUT_Pos)

+#define SERCOM_I2CM_CTRLA_SDAHOLD_Pos 20           /**< \brief (SERCOM_I2CM_CTRLA) SDA Hold Time */

+#define SERCOM_I2CM_CTRLA_SDAHOLD_Msk (0x3u << SERCOM_I2CM_CTRLA_SDAHOLD_Pos)

+#define SERCOM_I2CM_CTRLA_SDAHOLD(value) ((SERCOM_I2CM_CTRLA_SDAHOLD_Msk & ((value) << SERCOM_I2CM_CTRLA_SDAHOLD_Pos)))

+#define SERCOM_I2CM_CTRLA_INACTOUT_Pos 28           /**< \brief (SERCOM_I2CM_CTRLA) Inactive Bus Timeout */

+#define SERCOM_I2CM_CTRLA_INACTOUT_Msk (0x3u << SERCOM_I2CM_CTRLA_INACTOUT_Pos)

+#define SERCOM_I2CM_CTRLA_INACTOUT(value) ((SERCOM_I2CM_CTRLA_INACTOUT_Msk & ((value) << SERCOM_I2CM_CTRLA_INACTOUT_Pos)))

+#define SERCOM_I2CM_CTRLA_LOWTOUT_Pos 30           /**< \brief (SERCOM_I2CM_CTRLA) SCL Low Timeout */

+#define SERCOM_I2CM_CTRLA_LOWTOUT   (0x1u << SERCOM_I2CM_CTRLA_LOWTOUT_Pos)

+#define SERCOM_I2CM_CTRLA_MASK      0x7031009Fu  /**< \brief (SERCOM_I2CM_CTRLA) MASK Register */

+

+/* -------- SERCOM_I2CS_CTRLA : (SERCOM Offset: 0x00) (R/W 32) I2CS I2CS Control Register A -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t SWRST:1;          /*!< bit:      0  Software Reset                     */

+    uint32_t ENABLE:1;         /*!< bit:      1  Enable                             */

+    uint32_t MODE:3;           /*!< bit:  2.. 4  Operating Mode                     */

+    uint32_t :2;               /*!< bit:  5.. 6  Reserved                           */

+    uint32_t RUNSTDBY:1;       /*!< bit:      7  Run during Standby                 */

+    uint32_t :8;               /*!< bit:  8..15  Reserved                           */

+    uint32_t PINOUT:1;         /*!< bit:     16  Pin Usage                          */

+    uint32_t :3;               /*!< bit: 17..19  Reserved                           */

+    uint32_t SDAHOLD:2;        /*!< bit: 20..21  SDA Hold Time                      */

+    uint32_t :8;               /*!< bit: 22..29  Reserved                           */

+    uint32_t LOWTOUT:1;        /*!< bit:     30  SCL Low Timeout                    */

+    uint32_t :1;               /*!< bit:     31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} SERCOM_I2CS_CTRLA_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_I2CS_CTRLA_OFFSET    0x00         /**< \brief (SERCOM_I2CS_CTRLA offset) I2CS Control Register A */

+#define SERCOM_I2CS_CTRLA_RESETVALUE 0x00000000   /**< \brief (SERCOM_I2CS_CTRLA reset_value) I2CS Control Register A */

+

+#define SERCOM_I2CS_CTRLA_SWRST_Pos 0            /**< \brief (SERCOM_I2CS_CTRLA) Software Reset */

+#define SERCOM_I2CS_CTRLA_SWRST     (0x1u << SERCOM_I2CS_CTRLA_SWRST_Pos)

+#define SERCOM_I2CS_CTRLA_ENABLE_Pos 1            /**< \brief (SERCOM_I2CS_CTRLA) Enable */

+#define SERCOM_I2CS_CTRLA_ENABLE    (0x1u << SERCOM_I2CS_CTRLA_ENABLE_Pos)

+#define SERCOM_I2CS_CTRLA_MODE_Pos  2            /**< \brief (SERCOM_I2CS_CTRLA) Operating Mode */

+#define SERCOM_I2CS_CTRLA_MODE_Msk  (0x7u << SERCOM_I2CS_CTRLA_MODE_Pos)

+#define SERCOM_I2CS_CTRLA_MODE(value) ((SERCOM_I2CS_CTRLA_MODE_Msk & ((value) << SERCOM_I2CS_CTRLA_MODE_Pos)))

+#define   SERCOM_I2CS_CTRLA_MODE_USART_EXT_CLK (0x0u <<  2) /**< \brief (SERCOM_I2CS_CTRLA) USART mode with external clock */

+#define   SERCOM_I2CS_CTRLA_MODE_USART_INT_CLK (0x1u <<  2) /**< \brief (SERCOM_I2CS_CTRLA) USART mode with internal clock */

+#define   SERCOM_I2CS_CTRLA_MODE_SPI_SLAVE (0x2u <<  2) /**< \brief (SERCOM_I2CS_CTRLA) SPI mode with external clock */

+#define   SERCOM_I2CS_CTRLA_MODE_SPI_MASTER (0x3u <<  2) /**< \brief (SERCOM_I2CS_CTRLA) SPI mode with internal clock */

+#define   SERCOM_I2CS_CTRLA_MODE_I2C_SLAVE (0x4u <<  2) /**< \brief (SERCOM_I2CS_CTRLA) I2C mode with external clock */

+#define   SERCOM_I2CS_CTRLA_MODE_I2C_MASTER (0x5u <<  2) /**< \brief (SERCOM_I2CS_CTRLA) I2C mode with internal clock */

+#define SERCOM_I2CS_CTRLA_RUNSTDBY_Pos 7            /**< \brief (SERCOM_I2CS_CTRLA) Run during Standby */

+#define SERCOM_I2CS_CTRLA_RUNSTDBY  (0x1u << SERCOM_I2CS_CTRLA_RUNSTDBY_Pos)

+#define SERCOM_I2CS_CTRLA_PINOUT_Pos 16           /**< \brief (SERCOM_I2CS_CTRLA) Pin Usage */

+#define SERCOM_I2CS_CTRLA_PINOUT    (0x1u << SERCOM_I2CS_CTRLA_PINOUT_Pos)

+#define SERCOM_I2CS_CTRLA_SDAHOLD_Pos 20           /**< \brief (SERCOM_I2CS_CTRLA) SDA Hold Time */

+#define SERCOM_I2CS_CTRLA_SDAHOLD_Msk (0x3u << SERCOM_I2CS_CTRLA_SDAHOLD_Pos)

+#define SERCOM_I2CS_CTRLA_SDAHOLD(value) ((SERCOM_I2CS_CTRLA_SDAHOLD_Msk & ((value) << SERCOM_I2CS_CTRLA_SDAHOLD_Pos)))

+#define SERCOM_I2CS_CTRLA_LOWTOUT_Pos 30           /**< \brief (SERCOM_I2CS_CTRLA) SCL Low Timeout */

+#define SERCOM_I2CS_CTRLA_LOWTOUT   (0x1u << SERCOM_I2CS_CTRLA_LOWTOUT_Pos)

+#define SERCOM_I2CS_CTRLA_MASK      0x4031009Fu  /**< \brief (SERCOM_I2CS_CTRLA) MASK Register */

+

+/* -------- SERCOM_SPI_CTRLA : (SERCOM Offset: 0x00) (R/W 32) SPI SPI Control Register A -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t SWRST:1;          /*!< bit:      0  Software Reset                     */

+    uint32_t ENABLE:1;         /*!< bit:      1  Enable                             */

+    uint32_t MODE:3;           /*!< bit:  2.. 4  Operating Mode                     */

+    uint32_t :2;               /*!< bit:  5.. 6  Reserved                           */

+    uint32_t RUNSTDBY:1;       /*!< bit:      7  Run during Standby                 */

+    uint32_t :8;               /*!< bit:  8..15  Reserved                           */

+    uint32_t DOPO:1;           /*!< bit:     16  Data Out Pinout                    */

+    uint32_t :3;               /*!< bit: 17..19  Reserved                           */

+    uint32_t DIPO:2;           /*!< bit: 20..21  Data In Pinout                     */

+    uint32_t :2;               /*!< bit: 22..23  Reserved                           */

+    uint32_t FORM:4;           /*!< bit: 24..27  Frame Format                       */

+    uint32_t CPHA:1;           /*!< bit:     28  Clock Phase                        */

+    uint32_t CPOL:1;           /*!< bit:     29  Clock Polarity                     */

+    uint32_t DORD:1;           /*!< bit:     30  Data Order                         */

+    uint32_t :1;               /*!< bit:     31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} SERCOM_SPI_CTRLA_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_SPI_CTRLA_OFFSET     0x00         /**< \brief (SERCOM_SPI_CTRLA offset) SPI Control Register A */

+#define SERCOM_SPI_CTRLA_RESETVALUE 0x00000000   /**< \brief (SERCOM_SPI_CTRLA reset_value) SPI Control Register A */

+

+#define SERCOM_SPI_CTRLA_SWRST_Pos  0            /**< \brief (SERCOM_SPI_CTRLA) Software Reset */

+#define SERCOM_SPI_CTRLA_SWRST      (0x1u << SERCOM_SPI_CTRLA_SWRST_Pos)

+#define SERCOM_SPI_CTRLA_ENABLE_Pos 1            /**< \brief (SERCOM_SPI_CTRLA) Enable */

+#define SERCOM_SPI_CTRLA_ENABLE     (0x1u << SERCOM_SPI_CTRLA_ENABLE_Pos)

+#define SERCOM_SPI_CTRLA_MODE_Pos   2            /**< \brief (SERCOM_SPI_CTRLA) Operating Mode */

+#define SERCOM_SPI_CTRLA_MODE_Msk   (0x7u << SERCOM_SPI_CTRLA_MODE_Pos)

+#define SERCOM_SPI_CTRLA_MODE(value) ((SERCOM_SPI_CTRLA_MODE_Msk & ((value) << SERCOM_SPI_CTRLA_MODE_Pos)))

+#define   SERCOM_SPI_CTRLA_MODE_USART_EXT_CLK (0x0u <<  2) /**< \brief (SERCOM_SPI_CTRLA) USART mode with external clock */

+#define   SERCOM_SPI_CTRLA_MODE_USART_INT_CLK (0x1u <<  2) /**< \brief (SERCOM_SPI_CTRLA) USART mode with internal clock */

+#define   SERCOM_SPI_CTRLA_MODE_SPI_SLAVE (0x2u <<  2) /**< \brief (SERCOM_SPI_CTRLA) SPI mode with external clock */

+#define   SERCOM_SPI_CTRLA_MODE_SPI_MASTER (0x3u <<  2) /**< \brief (SERCOM_SPI_CTRLA) SPI mode with internal clock */

+#define   SERCOM_SPI_CTRLA_MODE_I2C_SLAVE (0x4u <<  2) /**< \brief (SERCOM_SPI_CTRLA) I2C mode with external clock */

+#define   SERCOM_SPI_CTRLA_MODE_I2C_MASTER (0x5u <<  2) /**< \brief (SERCOM_SPI_CTRLA) I2C mode with internal clock */

+#define SERCOM_SPI_CTRLA_RUNSTDBY_Pos 7            /**< \brief (SERCOM_SPI_CTRLA) Run during Standby */

+#define SERCOM_SPI_CTRLA_RUNSTDBY   (0x1u << SERCOM_SPI_CTRLA_RUNSTDBY_Pos)

+#define SERCOM_SPI_CTRLA_DOPO_Pos   16           /**< \brief (SERCOM_SPI_CTRLA) Data Out Pinout */

+#define SERCOM_SPI_CTRLA_DOPO       (0x1u << SERCOM_SPI_CTRLA_DOPO_Pos)

+#define SERCOM_SPI_CTRLA_DIPO_Pos   20           /**< \brief (SERCOM_SPI_CTRLA) Data In Pinout */

+#define SERCOM_SPI_CTRLA_DIPO_Msk   (0x3u << SERCOM_SPI_CTRLA_DIPO_Pos)

+#define SERCOM_SPI_CTRLA_DIPO(value) ((SERCOM_SPI_CTRLA_DIPO_Msk & ((value) << SERCOM_SPI_CTRLA_DIPO_Pos)))

+#define SERCOM_SPI_CTRLA_FORM_Pos   24           /**< \brief (SERCOM_SPI_CTRLA) Frame Format */

+#define SERCOM_SPI_CTRLA_FORM_Msk   (0xFu << SERCOM_SPI_CTRLA_FORM_Pos)

+#define SERCOM_SPI_CTRLA_FORM(value) ((SERCOM_SPI_CTRLA_FORM_Msk & ((value) << SERCOM_SPI_CTRLA_FORM_Pos)))

+#define SERCOM_SPI_CTRLA_CPHA_Pos   28           /**< \brief (SERCOM_SPI_CTRLA) Clock Phase */

+#define SERCOM_SPI_CTRLA_CPHA       (0x1u << SERCOM_SPI_CTRLA_CPHA_Pos)

+#define SERCOM_SPI_CTRLA_CPOL_Pos   29           /**< \brief (SERCOM_SPI_CTRLA) Clock Polarity */

+#define SERCOM_SPI_CTRLA_CPOL       (0x1u << SERCOM_SPI_CTRLA_CPOL_Pos)

+#define SERCOM_SPI_CTRLA_DORD_Pos   30           /**< \brief (SERCOM_SPI_CTRLA) Data Order */

+#define SERCOM_SPI_CTRLA_DORD       (0x1u << SERCOM_SPI_CTRLA_DORD_Pos)

+#define SERCOM_SPI_CTRLA_MASK       0x7F31009Fu  /**< \brief (SERCOM_SPI_CTRLA) MASK Register */

+

+/* -------- SERCOM_USART_CTRLA : (SERCOM Offset: 0x00) (R/W 32) USART USART Control Register A -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t SWRST:1;          /*!< bit:      0  Software Reset                     */

+    uint32_t ENABLE:1;         /*!< bit:      1  Enable                             */

+    uint32_t MODE:3;           /*!< bit:  2.. 4  Operating Mode                     */

+    uint32_t :2;               /*!< bit:  5.. 6  Reserved                           */

+    uint32_t RUNSTDBY:1;       /*!< bit:      7  Run during Standby                 */

+    uint32_t :8;               /*!< bit:  8..15  Reserved                           */

+    uint32_t TXPO:1;           /*!< bit:     16  Transmit Data Pinout               */

+    uint32_t :3;               /*!< bit: 17..19  Reserved                           */

+    uint32_t RXPO:2;           /*!< bit: 20..21  Receive Data Pinout                */

+    uint32_t :2;               /*!< bit: 22..23  Reserved                           */

+    uint32_t FORM:4;           /*!< bit: 24..27  Frame Format                       */

+    uint32_t CMODE:1;          /*!< bit:     28  Communication Mode                 */

+    uint32_t CPOL:1;           /*!< bit:     29  Clock Polarity                     */

+    uint32_t DORD:1;           /*!< bit:     30  Data Order                         */

+    uint32_t :1;               /*!< bit:     31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} SERCOM_USART_CTRLA_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_USART_CTRLA_OFFSET   0x00         /**< \brief (SERCOM_USART_CTRLA offset) USART Control Register A */

+#define SERCOM_USART_CTRLA_RESETVALUE 0x00000000   /**< \brief (SERCOM_USART_CTRLA reset_value) USART Control Register A */

+

+#define SERCOM_USART_CTRLA_SWRST_Pos 0            /**< \brief (SERCOM_USART_CTRLA) Software Reset */

+#define SERCOM_USART_CTRLA_SWRST    (0x1u << SERCOM_USART_CTRLA_SWRST_Pos)

+#define SERCOM_USART_CTRLA_ENABLE_Pos 1            /**< \brief (SERCOM_USART_CTRLA) Enable */

+#define SERCOM_USART_CTRLA_ENABLE   (0x1u << SERCOM_USART_CTRLA_ENABLE_Pos)

+#define SERCOM_USART_CTRLA_MODE_Pos 2            /**< \brief (SERCOM_USART_CTRLA) Operating Mode */

+#define SERCOM_USART_CTRLA_MODE_Msk (0x7u << SERCOM_USART_CTRLA_MODE_Pos)

+#define SERCOM_USART_CTRLA_MODE(value) ((SERCOM_USART_CTRLA_MODE_Msk & ((value) << SERCOM_USART_CTRLA_MODE_Pos)))

+#define   SERCOM_USART_CTRLA_MODE_USART_EXT_CLK (0x0u <<  2) /**< \brief (SERCOM_USART_CTRLA) USART mode with external clock */

+#define   SERCOM_USART_CTRLA_MODE_USART_INT_CLK (0x1u <<  2) /**< \brief (SERCOM_USART_CTRLA) USART mode with internal clock */

+#define   SERCOM_USART_CTRLA_MODE_SPI_SLAVE (0x2u <<  2) /**< \brief (SERCOM_USART_CTRLA) SPI mode with external clock */

+#define   SERCOM_USART_CTRLA_MODE_SPI_MASTER (0x3u <<  2) /**< \brief (SERCOM_USART_CTRLA) SPI mode with internal clock */

+#define   SERCOM_USART_CTRLA_MODE_I2C_SLAVE (0x4u <<  2) /**< \brief (SERCOM_USART_CTRLA) I2C mode with external clock */

+#define   SERCOM_USART_CTRLA_MODE_I2C_MASTER (0x5u <<  2) /**< \brief (SERCOM_USART_CTRLA) I2C mode with internal clock */

+#define SERCOM_USART_CTRLA_RUNSTDBY_Pos 7            /**< \brief (SERCOM_USART_CTRLA) Run during Standby */

+#define SERCOM_USART_CTRLA_RUNSTDBY (0x1u << SERCOM_USART_CTRLA_RUNSTDBY_Pos)

+#define SERCOM_USART_CTRLA_TXPO_Pos 16           /**< \brief (SERCOM_USART_CTRLA) Transmit Data Pinout */

+#define SERCOM_USART_CTRLA_TXPO     (0x1u << SERCOM_USART_CTRLA_TXPO_Pos)

+#define SERCOM_USART_CTRLA_RXPO_Pos 20           /**< \brief (SERCOM_USART_CTRLA) Receive Data Pinout */

+#define SERCOM_USART_CTRLA_RXPO_Msk (0x3u << SERCOM_USART_CTRLA_RXPO_Pos)

+#define SERCOM_USART_CTRLA_RXPO(value) ((SERCOM_USART_CTRLA_RXPO_Msk & ((value) << SERCOM_USART_CTRLA_RXPO_Pos)))

+#define SERCOM_USART_CTRLA_FORM_Pos 24           /**< \brief (SERCOM_USART_CTRLA) Frame Format */

+#define SERCOM_USART_CTRLA_FORM_Msk (0xFu << SERCOM_USART_CTRLA_FORM_Pos)

+#define SERCOM_USART_CTRLA_FORM(value) ((SERCOM_USART_CTRLA_FORM_Msk & ((value) << SERCOM_USART_CTRLA_FORM_Pos)))

+#define SERCOM_USART_CTRLA_CMODE_Pos 28           /**< \brief (SERCOM_USART_CTRLA) Communication Mode */

+#define SERCOM_USART_CTRLA_CMODE    (0x1u << SERCOM_USART_CTRLA_CMODE_Pos)

+#define SERCOM_USART_CTRLA_CPOL_Pos 29           /**< \brief (SERCOM_USART_CTRLA) Clock Polarity */

+#define SERCOM_USART_CTRLA_CPOL     (0x1u << SERCOM_USART_CTRLA_CPOL_Pos)

+#define SERCOM_USART_CTRLA_DORD_Pos 30           /**< \brief (SERCOM_USART_CTRLA) Data Order */

+#define SERCOM_USART_CTRLA_DORD     (0x1u << SERCOM_USART_CTRLA_DORD_Pos)

+#define SERCOM_USART_CTRLA_MASK     0x7F31009Fu  /**< \brief (SERCOM_USART_CTRLA) MASK Register */

+

+/* -------- SERCOM_I2CM_CTRLB : (SERCOM Offset: 0x04) (R/W 32) I2CM I2CM Control Register B -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t :8;               /*!< bit:  0.. 7  Reserved                           */

+    uint32_t SMEN:1;           /*!< bit:      8  Smart Mode Enable                  */

+    uint32_t QCEN:1;           /*!< bit:      9  Quick Command Enable               */

+    uint32_t :6;               /*!< bit: 10..15  Reserved                           */

+    uint32_t CMD:2;            /*!< bit: 16..17  Command                            */

+    uint32_t ACKACT:1;         /*!< bit:     18  Acknowledge Action                 */

+    uint32_t :13;              /*!< bit: 19..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} SERCOM_I2CM_CTRLB_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_I2CM_CTRLB_OFFSET    0x04         /**< \brief (SERCOM_I2CM_CTRLB offset) I2CM Control Register B */

+#define SERCOM_I2CM_CTRLB_RESETVALUE 0x00000000   /**< \brief (SERCOM_I2CM_CTRLB reset_value) I2CM Control Register B */

+

+#define SERCOM_I2CM_CTRLB_SMEN_Pos  8            /**< \brief (SERCOM_I2CM_CTRLB) Smart Mode Enable */

+#define SERCOM_I2CM_CTRLB_SMEN      (0x1u << SERCOM_I2CM_CTRLB_SMEN_Pos)

+#define SERCOM_I2CM_CTRLB_QCEN_Pos  9            /**< \brief (SERCOM_I2CM_CTRLB) Quick Command Enable */

+#define SERCOM_I2CM_CTRLB_QCEN      (0x1u << SERCOM_I2CM_CTRLB_QCEN_Pos)

+#define SERCOM_I2CM_CTRLB_CMD_Pos   16           /**< \brief (SERCOM_I2CM_CTRLB) Command */

+#define SERCOM_I2CM_CTRLB_CMD_Msk   (0x3u << SERCOM_I2CM_CTRLB_CMD_Pos)

+#define SERCOM_I2CM_CTRLB_CMD(value) ((SERCOM_I2CM_CTRLB_CMD_Msk & ((value) << SERCOM_I2CM_CTRLB_CMD_Pos)))

+#define SERCOM_I2CM_CTRLB_ACKACT_Pos 18           /**< \brief (SERCOM_I2CM_CTRLB) Acknowledge Action */

+#define SERCOM_I2CM_CTRLB_ACKACT    (0x1u << SERCOM_I2CM_CTRLB_ACKACT_Pos)

+#define SERCOM_I2CM_CTRLB_MASK      0x00070300u  /**< \brief (SERCOM_I2CM_CTRLB) MASK Register */

+

+/* -------- SERCOM_I2CS_CTRLB : (SERCOM Offset: 0x04) (R/W 32) I2CS I2CS Control Register B -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t :8;               /*!< bit:  0.. 7  Reserved                           */

+    uint32_t SMEN:1;           /*!< bit:      8  Smart Mode Enable                  */

+    uint32_t :5;               /*!< bit:  9..13  Reserved                           */

+    uint32_t AMODE:2;          /*!< bit: 14..15  Address Mode                       */

+    uint32_t CMD:2;            /*!< bit: 16..17  Command                            */

+    uint32_t ACKACT:1;         /*!< bit:     18  Acknowledge Action                 */

+    uint32_t :13;              /*!< bit: 19..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} SERCOM_I2CS_CTRLB_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_I2CS_CTRLB_OFFSET    0x04         /**< \brief (SERCOM_I2CS_CTRLB offset) I2CS Control Register B */

+#define SERCOM_I2CS_CTRLB_RESETVALUE 0x00000000   /**< \brief (SERCOM_I2CS_CTRLB reset_value) I2CS Control Register B */

+

+#define SERCOM_I2CS_CTRLB_SMEN_Pos  8            /**< \brief (SERCOM_I2CS_CTRLB) Smart Mode Enable */

+#define SERCOM_I2CS_CTRLB_SMEN      (0x1u << SERCOM_I2CS_CTRLB_SMEN_Pos)

+#define SERCOM_I2CS_CTRLB_AMODE_Pos 14           /**< \brief (SERCOM_I2CS_CTRLB) Address Mode */

+#define SERCOM_I2CS_CTRLB_AMODE_Msk (0x3u << SERCOM_I2CS_CTRLB_AMODE_Pos)

+#define SERCOM_I2CS_CTRLB_AMODE(value) ((SERCOM_I2CS_CTRLB_AMODE_Msk & ((value) << SERCOM_I2CS_CTRLB_AMODE_Pos)))

+#define SERCOM_I2CS_CTRLB_CMD_Pos   16           /**< \brief (SERCOM_I2CS_CTRLB) Command */

+#define SERCOM_I2CS_CTRLB_CMD_Msk   (0x3u << SERCOM_I2CS_CTRLB_CMD_Pos)

+#define SERCOM_I2CS_CTRLB_CMD(value) ((SERCOM_I2CS_CTRLB_CMD_Msk & ((value) << SERCOM_I2CS_CTRLB_CMD_Pos)))

+#define SERCOM_I2CS_CTRLB_ACKACT_Pos 18           /**< \brief (SERCOM_I2CS_CTRLB) Acknowledge Action */

+#define SERCOM_I2CS_CTRLB_ACKACT    (0x1u << SERCOM_I2CS_CTRLB_ACKACT_Pos)

+#define SERCOM_I2CS_CTRLB_MASK      0x0007C100u  /**< \brief (SERCOM_I2CS_CTRLB) MASK Register */

+

+/* -------- SERCOM_SPI_CTRLB : (SERCOM Offset: 0x04) (R/W 32) SPI SPI Control Register B -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t CHSIZE:3;         /*!< bit:  0.. 2  Character Size                     */

+    uint32_t :3;               /*!< bit:  3.. 5  Reserved                           */

+    uint32_t PLOADEN:1;        /*!< bit:      6  Data Preload Enable                */

+    uint32_t :7;               /*!< bit:  7..13  Reserved                           */

+    uint32_t AMODE:2;          /*!< bit: 14..15  Address Mode                       */

+    uint32_t :1;               /*!< bit:     16  Reserved                           */

+    uint32_t RXEN:1;           /*!< bit:     17  Receiver Enable                    */

+    uint32_t :14;              /*!< bit: 18..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} SERCOM_SPI_CTRLB_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_SPI_CTRLB_OFFSET     0x04         /**< \brief (SERCOM_SPI_CTRLB offset) SPI Control Register B */

+#define SERCOM_SPI_CTRLB_RESETVALUE 0x00000000   /**< \brief (SERCOM_SPI_CTRLB reset_value) SPI Control Register B */

+

+#define SERCOM_SPI_CTRLB_CHSIZE_Pos 0            /**< \brief (SERCOM_SPI_CTRLB) Character Size */

+#define SERCOM_SPI_CTRLB_CHSIZE_Msk (0x7u << SERCOM_SPI_CTRLB_CHSIZE_Pos)

+#define SERCOM_SPI_CTRLB_CHSIZE(value) ((SERCOM_SPI_CTRLB_CHSIZE_Msk & ((value) << SERCOM_SPI_CTRLB_CHSIZE_Pos)))

+#define SERCOM_SPI_CTRLB_PLOADEN_Pos 6            /**< \brief (SERCOM_SPI_CTRLB) Data Preload Enable */

+#define SERCOM_SPI_CTRLB_PLOADEN    (0x1u << SERCOM_SPI_CTRLB_PLOADEN_Pos)

+#define SERCOM_SPI_CTRLB_AMODE_Pos  14           /**< \brief (SERCOM_SPI_CTRLB) Address Mode */

+#define SERCOM_SPI_CTRLB_AMODE_Msk  (0x3u << SERCOM_SPI_CTRLB_AMODE_Pos)

+#define SERCOM_SPI_CTRLB_AMODE(value) ((SERCOM_SPI_CTRLB_AMODE_Msk & ((value) << SERCOM_SPI_CTRLB_AMODE_Pos)))

+#define SERCOM_SPI_CTRLB_RXEN_Pos   17           /**< \brief (SERCOM_SPI_CTRLB) Receiver Enable */

+#define SERCOM_SPI_CTRLB_RXEN       (0x1u << SERCOM_SPI_CTRLB_RXEN_Pos)

+#define SERCOM_SPI_CTRLB_MASK       0x0002C047u  /**< \brief (SERCOM_SPI_CTRLB) MASK Register */

+

+/* -------- SERCOM_USART_CTRLB : (SERCOM Offset: 0x04) (R/W 32) USART USART Control Register B -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t CHSIZE:3;         /*!< bit:  0.. 2  Character Size                     */

+    uint32_t :3;               /*!< bit:  3.. 5  Reserved                           */

+    uint32_t SBMODE:1;         /*!< bit:      6  Stop Bit Mode                      */

+    uint32_t :2;               /*!< bit:  7.. 8  Reserved                           */

+    uint32_t SFDE:1;           /*!< bit:      9  Start of Frame Detection Enable    */

+    uint32_t :3;               /*!< bit: 10..12  Reserved                           */

+    uint32_t PMODE:1;          /*!< bit:     13  Parity Mode                        */

+    uint32_t :2;               /*!< bit: 14..15  Reserved                           */

+    uint32_t TXEN:1;           /*!< bit:     16  Transmitter Enable                 */

+    uint32_t RXEN:1;           /*!< bit:     17  Receiver Enable                    */

+    uint32_t :14;              /*!< bit: 18..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} SERCOM_USART_CTRLB_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_USART_CTRLB_OFFSET   0x04         /**< \brief (SERCOM_USART_CTRLB offset) USART Control Register B */

+#define SERCOM_USART_CTRLB_RESETVALUE 0x00000000   /**< \brief (SERCOM_USART_CTRLB reset_value) USART Control Register B */

+

+#define SERCOM_USART_CTRLB_CHSIZE_Pos 0            /**< \brief (SERCOM_USART_CTRLB) Character Size */

+#define SERCOM_USART_CTRLB_CHSIZE_Msk (0x7u << SERCOM_USART_CTRLB_CHSIZE_Pos)

+#define SERCOM_USART_CTRLB_CHSIZE(value) ((SERCOM_USART_CTRLB_CHSIZE_Msk & ((value) << SERCOM_USART_CTRLB_CHSIZE_Pos)))

+#define SERCOM_USART_CTRLB_SBMODE_Pos 6            /**< \brief (SERCOM_USART_CTRLB) Stop Bit Mode */

+#define SERCOM_USART_CTRLB_SBMODE   (0x1u << SERCOM_USART_CTRLB_SBMODE_Pos)

+#define SERCOM_USART_CTRLB_SFDE_Pos 9            /**< \brief (SERCOM_USART_CTRLB) Start of Frame Detection Enable */

+#define SERCOM_USART_CTRLB_SFDE     (0x1u << SERCOM_USART_CTRLB_SFDE_Pos)

+#define SERCOM_USART_CTRLB_PMODE_Pos 13           /**< \brief (SERCOM_USART_CTRLB) Parity Mode */

+#define SERCOM_USART_CTRLB_PMODE    (0x1u << SERCOM_USART_CTRLB_PMODE_Pos)

+#define SERCOM_USART_CTRLB_TXEN_Pos 16           /**< \brief (SERCOM_USART_CTRLB) Transmitter Enable */

+#define SERCOM_USART_CTRLB_TXEN     (0x1u << SERCOM_USART_CTRLB_TXEN_Pos)

+#define SERCOM_USART_CTRLB_RXEN_Pos 17           /**< \brief (SERCOM_USART_CTRLB) Receiver Enable */

+#define SERCOM_USART_CTRLB_RXEN     (0x1u << SERCOM_USART_CTRLB_RXEN_Pos)

+#define SERCOM_USART_CTRLB_MASK     0x00032247u  /**< \brief (SERCOM_USART_CTRLB) MASK Register */

+

+/* -------- SERCOM_I2CM_DBGCTRL : (SERCOM Offset: 0x08) (R/W  8) I2CM I2CM Debug Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  DBGSTOP:1;        /*!< bit:      0  Debug Mode                         */

+    uint8_t  :7;               /*!< bit:  1.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} SERCOM_I2CM_DBGCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_I2CM_DBGCTRL_OFFSET  0x08         /**< \brief (SERCOM_I2CM_DBGCTRL offset) I2CM Debug Register */

+#define SERCOM_I2CM_DBGCTRL_RESETVALUE 0x00         /**< \brief (SERCOM_I2CM_DBGCTRL reset_value) I2CM Debug Register */

+

+#define SERCOM_I2CM_DBGCTRL_DBGSTOP_Pos 0            /**< \brief (SERCOM_I2CM_DBGCTRL) Debug Mode */

+#define SERCOM_I2CM_DBGCTRL_DBGSTOP (0x1u << SERCOM_I2CM_DBGCTRL_DBGSTOP_Pos)

+#define SERCOM_I2CM_DBGCTRL_MASK    0x01u        /**< \brief (SERCOM_I2CM_DBGCTRL) MASK Register */

+

+/* -------- SERCOM_SPI_DBGCTRL : (SERCOM Offset: 0x08) (R/W  8) SPI SPI Debug Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  DBGSTOP:1;        /*!< bit:      0  Debug Mode                         */

+    uint8_t  :7;               /*!< bit:  1.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} SERCOM_SPI_DBGCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_SPI_DBGCTRL_OFFSET   0x08         /**< \brief (SERCOM_SPI_DBGCTRL offset) SPI Debug Register */

+#define SERCOM_SPI_DBGCTRL_RESETVALUE 0x00         /**< \brief (SERCOM_SPI_DBGCTRL reset_value) SPI Debug Register */

+

+#define SERCOM_SPI_DBGCTRL_DBGSTOP_Pos 0            /**< \brief (SERCOM_SPI_DBGCTRL) Debug Mode */

+#define SERCOM_SPI_DBGCTRL_DBGSTOP  (0x1u << SERCOM_SPI_DBGCTRL_DBGSTOP_Pos)

+#define SERCOM_SPI_DBGCTRL_MASK     0x01u        /**< \brief (SERCOM_SPI_DBGCTRL) MASK Register */

+

+/* -------- SERCOM_USART_DBGCTRL : (SERCOM Offset: 0x08) (R/W  8) USART USART Debug Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  DBGSTOP:1;        /*!< bit:      0  Debug Mode                         */

+    uint8_t  :7;               /*!< bit:  1.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} SERCOM_USART_DBGCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_USART_DBGCTRL_OFFSET 0x08         /**< \brief (SERCOM_USART_DBGCTRL offset) USART Debug Register */

+#define SERCOM_USART_DBGCTRL_RESETVALUE 0x00         /**< \brief (SERCOM_USART_DBGCTRL reset_value) USART Debug Register */

+

+#define SERCOM_USART_DBGCTRL_DBGSTOP_Pos 0            /**< \brief (SERCOM_USART_DBGCTRL) Debug Mode */

+#define SERCOM_USART_DBGCTRL_DBGSTOP (0x1u << SERCOM_USART_DBGCTRL_DBGSTOP_Pos)

+#define SERCOM_USART_DBGCTRL_MASK   0x01u        /**< \brief (SERCOM_USART_DBGCTRL) MASK Register */

+

+/* -------- SERCOM_I2CM_BAUD : (SERCOM Offset: 0x0A) (R/W 16) I2CM I2CM Baud Rate Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t BAUD:8;           /*!< bit:  0.. 7  Baud Rate Value                    */

+    uint16_t BAUDLOW:8;        /*!< bit:  8..15  Baud Rate Value Low                */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} SERCOM_I2CM_BAUD_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_I2CM_BAUD_OFFSET     0x0A         /**< \brief (SERCOM_I2CM_BAUD offset) I2CM Baud Rate Register */

+#define SERCOM_I2CM_BAUD_RESETVALUE 0x0000       /**< \brief (SERCOM_I2CM_BAUD reset_value) I2CM Baud Rate Register */

+

+#define SERCOM_I2CM_BAUD_BAUD_Pos   0            /**< \brief (SERCOM_I2CM_BAUD) Baud Rate Value */

+#define SERCOM_I2CM_BAUD_BAUD_Msk   (0xFFu << SERCOM_I2CM_BAUD_BAUD_Pos)

+#define SERCOM_I2CM_BAUD_BAUD(value) ((SERCOM_I2CM_BAUD_BAUD_Msk & ((value) << SERCOM_I2CM_BAUD_BAUD_Pos)))

+#define SERCOM_I2CM_BAUD_BAUDLOW_Pos 8            /**< \brief (SERCOM_I2CM_BAUD) Baud Rate Value Low */

+#define SERCOM_I2CM_BAUD_BAUDLOW_Msk (0xFFu << SERCOM_I2CM_BAUD_BAUDLOW_Pos)

+#define SERCOM_I2CM_BAUD_BAUDLOW(value) ((SERCOM_I2CM_BAUD_BAUDLOW_Msk & ((value) << SERCOM_I2CM_BAUD_BAUDLOW_Pos)))

+#define SERCOM_I2CM_BAUD_MASK       0xFFFFu      /**< \brief (SERCOM_I2CM_BAUD) MASK Register */

+

+/* -------- SERCOM_SPI_BAUD : (SERCOM Offset: 0x0A) (R/W  8) SPI SPI Baud Rate Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  BAUD:8;           /*!< bit:  0.. 7  Baud Rate Value                    */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} SERCOM_SPI_BAUD_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_SPI_BAUD_OFFSET      0x0A         /**< \brief (SERCOM_SPI_BAUD offset) SPI Baud Rate Register */

+#define SERCOM_SPI_BAUD_RESETVALUE  0x00         /**< \brief (SERCOM_SPI_BAUD reset_value) SPI Baud Rate Register */

+

+#define SERCOM_SPI_BAUD_BAUD_Pos    0            /**< \brief (SERCOM_SPI_BAUD) Baud Rate Value */

+#define SERCOM_SPI_BAUD_BAUD_Msk    (0xFFu << SERCOM_SPI_BAUD_BAUD_Pos)

+#define SERCOM_SPI_BAUD_BAUD(value) ((SERCOM_SPI_BAUD_BAUD_Msk & ((value) << SERCOM_SPI_BAUD_BAUD_Pos)))

+#define SERCOM_SPI_BAUD_MASK        0xFFu        /**< \brief (SERCOM_SPI_BAUD) MASK Register */

+

+/* -------- SERCOM_USART_BAUD : (SERCOM Offset: 0x0A) (R/W 16) USART USART Baud Rate Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t BAUD:16;          /*!< bit:  0..15  Baud Rate Value                    */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} SERCOM_USART_BAUD_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_USART_BAUD_OFFSET    0x0A         /**< \brief (SERCOM_USART_BAUD offset) USART Baud Rate Register */

+#define SERCOM_USART_BAUD_RESETVALUE 0x0000       /**< \brief (SERCOM_USART_BAUD reset_value) USART Baud Rate Register */

+

+#define SERCOM_USART_BAUD_BAUD_Pos  0            /**< \brief (SERCOM_USART_BAUD) Baud Rate Value */

+#define SERCOM_USART_BAUD_BAUD_Msk  (0xFFFFu << SERCOM_USART_BAUD_BAUD_Pos)

+#define SERCOM_USART_BAUD_BAUD(value) ((SERCOM_USART_BAUD_BAUD_Msk & ((value) << SERCOM_USART_BAUD_BAUD_Pos)))

+#define SERCOM_USART_BAUD_MASK      0xFFFFu      /**< \brief (SERCOM_USART_BAUD) MASK Register */

+

+/* -------- SERCOM_I2CM_INTENCLR : (SERCOM Offset: 0x0C) (R/W  8) I2CM I2CM Interrupt Enable Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  MB:1;             /*!< bit:      0  Write Interrupt Disable            */

+    uint8_t  SB:1;             /*!< bit:      1  Read Interrupt Disable             */

+    uint8_t  :6;               /*!< bit:  2.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} SERCOM_I2CM_INTENCLR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_I2CM_INTENCLR_OFFSET 0x0C         /**< \brief (SERCOM_I2CM_INTENCLR offset) I2CM Interrupt Enable Clear Register */

+#define SERCOM_I2CM_INTENCLR_RESETVALUE 0x00         /**< \brief (SERCOM_I2CM_INTENCLR reset_value) I2CM Interrupt Enable Clear Register */

+

+#define SERCOM_I2CM_INTENCLR_MB_Pos 0            /**< \brief (SERCOM_I2CM_INTENCLR) Write Interrupt Disable */

+#define SERCOM_I2CM_INTENCLR_MB     (0x1u << SERCOM_I2CM_INTENCLR_MB_Pos)

+#define SERCOM_I2CM_INTENCLR_SB_Pos 1            /**< \brief (SERCOM_I2CM_INTENCLR) Read Interrupt Disable */

+#define SERCOM_I2CM_INTENCLR_SB     (0x1u << SERCOM_I2CM_INTENCLR_SB_Pos)

+#define SERCOM_I2CM_INTENCLR_MASK   0x03u        /**< \brief (SERCOM_I2CM_INTENCLR) MASK Register */

+

+/* -------- SERCOM_I2CS_INTENCLR : (SERCOM Offset: 0x0C) (R/W  8) I2CS I2CS Interrupt Enable Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  PREC:1;           /*!< bit:      0  Stop Interrupt Disable             */

+    uint8_t  AMATCH:1;         /*!< bit:      1  Address Interrupt Disable          */

+    uint8_t  DRDY:1;           /*!< bit:      2  Data Interrupt Disable             */

+    uint8_t  :5;               /*!< bit:  3.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} SERCOM_I2CS_INTENCLR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_I2CS_INTENCLR_OFFSET 0x0C         /**< \brief (SERCOM_I2CS_INTENCLR offset) I2CS Interrupt Enable Clear Register */

+#define SERCOM_I2CS_INTENCLR_RESETVALUE 0x00         /**< \brief (SERCOM_I2CS_INTENCLR reset_value) I2CS Interrupt Enable Clear Register */

+

+#define SERCOM_I2CS_INTENCLR_PREC_Pos 0            /**< \brief (SERCOM_I2CS_INTENCLR) Stop Interrupt Disable */

+#define SERCOM_I2CS_INTENCLR_PREC   (0x1u << SERCOM_I2CS_INTENCLR_PREC_Pos)

+#define SERCOM_I2CS_INTENCLR_AMATCH_Pos 1            /**< \brief (SERCOM_I2CS_INTENCLR) Address Interrupt Disable */

+#define SERCOM_I2CS_INTENCLR_AMATCH (0x1u << SERCOM_I2CS_INTENCLR_AMATCH_Pos)

+#define SERCOM_I2CS_INTENCLR_DRDY_Pos 2            /**< \brief (SERCOM_I2CS_INTENCLR) Data Interrupt Disable */

+#define SERCOM_I2CS_INTENCLR_DRDY   (0x1u << SERCOM_I2CS_INTENCLR_DRDY_Pos)

+#define SERCOM_I2CS_INTENCLR_MASK   0x07u        /**< \brief (SERCOM_I2CS_INTENCLR) MASK Register */

+

+/* -------- SERCOM_SPI_INTENCLR : (SERCOM Offset: 0x0C) (R/W  8) SPI SPI Interrupt Enable Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  DRE:1;            /*!< bit:      0  Data Register Empty Interrupt Disable */

+    uint8_t  TXC:1;            /*!< bit:      1  Transmit Complete Interrupt Disable */

+    uint8_t  RXC:1;            /*!< bit:      2  Receive Complete Interrupt Disable */

+    uint8_t  :5;               /*!< bit:  3.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} SERCOM_SPI_INTENCLR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_SPI_INTENCLR_OFFSET  0x0C         /**< \brief (SERCOM_SPI_INTENCLR offset) SPI Interrupt Enable Clear Register */

+#define SERCOM_SPI_INTENCLR_RESETVALUE 0x00         /**< \brief (SERCOM_SPI_INTENCLR reset_value) SPI Interrupt Enable Clear Register */

+

+#define SERCOM_SPI_INTENCLR_DRE_Pos 0            /**< \brief (SERCOM_SPI_INTENCLR) Data Register Empty Interrupt Disable */

+#define SERCOM_SPI_INTENCLR_DRE     (0x1u << SERCOM_SPI_INTENCLR_DRE_Pos)

+#define SERCOM_SPI_INTENCLR_TXC_Pos 1            /**< \brief (SERCOM_SPI_INTENCLR) Transmit Complete Interrupt Disable */

+#define SERCOM_SPI_INTENCLR_TXC     (0x1u << SERCOM_SPI_INTENCLR_TXC_Pos)

+#define SERCOM_SPI_INTENCLR_RXC_Pos 2            /**< \brief (SERCOM_SPI_INTENCLR) Receive Complete Interrupt Disable */

+#define SERCOM_SPI_INTENCLR_RXC     (0x1u << SERCOM_SPI_INTENCLR_RXC_Pos)

+#define SERCOM_SPI_INTENCLR_MASK    0x07u        /**< \brief (SERCOM_SPI_INTENCLR) MASK Register */

+

+/* -------- SERCOM_USART_INTENCLR : (SERCOM Offset: 0x0C) (R/W  8) USART USART Interrupt Enable Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  DRE:1;            /*!< bit:      0  Data Register Empty Interrupt Disable */

+    uint8_t  TXC:1;            /*!< bit:      1  Transmit Complete Interrupt Disable */

+    uint8_t  RXC:1;            /*!< bit:      2  Receive Complete Interrupt Disable */

+    uint8_t  RXS:1;            /*!< bit:      3  Receive Start Interrupt Disable    */

+    uint8_t  :4;               /*!< bit:  4.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} SERCOM_USART_INTENCLR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_USART_INTENCLR_OFFSET 0x0C         /**< \brief (SERCOM_USART_INTENCLR offset) USART Interrupt Enable Clear Register */

+#define SERCOM_USART_INTENCLR_RESETVALUE 0x00         /**< \brief (SERCOM_USART_INTENCLR reset_value) USART Interrupt Enable Clear Register */

+

+#define SERCOM_USART_INTENCLR_DRE_Pos 0            /**< \brief (SERCOM_USART_INTENCLR) Data Register Empty Interrupt Disable */

+#define SERCOM_USART_INTENCLR_DRE   (0x1u << SERCOM_USART_INTENCLR_DRE_Pos)

+#define SERCOM_USART_INTENCLR_TXC_Pos 1            /**< \brief (SERCOM_USART_INTENCLR) Transmit Complete Interrupt Disable */

+#define SERCOM_USART_INTENCLR_TXC   (0x1u << SERCOM_USART_INTENCLR_TXC_Pos)

+#define SERCOM_USART_INTENCLR_RXC_Pos 2            /**< \brief (SERCOM_USART_INTENCLR) Receive Complete Interrupt Disable */

+#define SERCOM_USART_INTENCLR_RXC   (0x1u << SERCOM_USART_INTENCLR_RXC_Pos)

+#define SERCOM_USART_INTENCLR_RXS_Pos 3            /**< \brief (SERCOM_USART_INTENCLR) Receive Start Interrupt Disable */

+#define SERCOM_USART_INTENCLR_RXS   (0x1u << SERCOM_USART_INTENCLR_RXS_Pos)

+#define SERCOM_USART_INTENCLR_MASK  0x0Fu        /**< \brief (SERCOM_USART_INTENCLR) MASK Register */

+

+/* -------- SERCOM_I2CM_INTENSET : (SERCOM Offset: 0x0D) (R/W  8) I2CM I2CM Interrupt Enable Set Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  MB:1;             /*!< bit:      0  Write Interrupt Enable             */

+    uint8_t  SB:1;             /*!< bit:      1  Read Interrupt Enable              */

+    uint8_t  :6;               /*!< bit:  2.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} SERCOM_I2CM_INTENSET_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_I2CM_INTENSET_OFFSET 0x0D         /**< \brief (SERCOM_I2CM_INTENSET offset) I2CM Interrupt Enable Set Register */

+#define SERCOM_I2CM_INTENSET_RESETVALUE 0x00         /**< \brief (SERCOM_I2CM_INTENSET reset_value) I2CM Interrupt Enable Set Register */

+

+#define SERCOM_I2CM_INTENSET_MB_Pos 0            /**< \brief (SERCOM_I2CM_INTENSET) Write Interrupt Enable */

+#define SERCOM_I2CM_INTENSET_MB     (0x1u << SERCOM_I2CM_INTENSET_MB_Pos)

+#define SERCOM_I2CM_INTENSET_SB_Pos 1            /**< \brief (SERCOM_I2CM_INTENSET) Read Interrupt Enable */

+#define SERCOM_I2CM_INTENSET_SB     (0x1u << SERCOM_I2CM_INTENSET_SB_Pos)

+#define SERCOM_I2CM_INTENSET_MASK   0x03u        /**< \brief (SERCOM_I2CM_INTENSET) MASK Register */

+

+/* -------- SERCOM_I2CS_INTENSET : (SERCOM Offset: 0x0D) (R/W  8) I2CS I2CS Interrupt Enable Set Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  PREC:1;           /*!< bit:      0  Stop Interrupt Enable              */

+    uint8_t  AMATCH:1;         /*!< bit:      1  Address Interrupt Enable           */

+    uint8_t  DRDY:1;           /*!< bit:      2  Data Interrupt Enable              */

+    uint8_t  :5;               /*!< bit:  3.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} SERCOM_I2CS_INTENSET_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_I2CS_INTENSET_OFFSET 0x0D         /**< \brief (SERCOM_I2CS_INTENSET offset) I2CS Interrupt Enable Set Register */

+#define SERCOM_I2CS_INTENSET_RESETVALUE 0x00         /**< \brief (SERCOM_I2CS_INTENSET reset_value) I2CS Interrupt Enable Set Register */

+

+#define SERCOM_I2CS_INTENSET_PREC_Pos 0            /**< \brief (SERCOM_I2CS_INTENSET) Stop Interrupt Enable */

+#define SERCOM_I2CS_INTENSET_PREC   (0x1u << SERCOM_I2CS_INTENSET_PREC_Pos)

+#define SERCOM_I2CS_INTENSET_AMATCH_Pos 1            /**< \brief (SERCOM_I2CS_INTENSET) Address Interrupt Enable */

+#define SERCOM_I2CS_INTENSET_AMATCH (0x1u << SERCOM_I2CS_INTENSET_AMATCH_Pos)

+#define SERCOM_I2CS_INTENSET_DRDY_Pos 2            /**< \brief (SERCOM_I2CS_INTENSET) Data Interrupt Enable */

+#define SERCOM_I2CS_INTENSET_DRDY   (0x1u << SERCOM_I2CS_INTENSET_DRDY_Pos)

+#define SERCOM_I2CS_INTENSET_MASK   0x07u        /**< \brief (SERCOM_I2CS_INTENSET) MASK Register */

+

+/* -------- SERCOM_SPI_INTENSET : (SERCOM Offset: 0x0D) (R/W  8) SPI SPI Interrupt Enable Set Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  DRE:1;            /*!< bit:      0  Data Register Empty Interrupt Enable */

+    uint8_t  TXC:1;            /*!< bit:      1  Transmit Complete Interrupt Enable */

+    uint8_t  RXC:1;            /*!< bit:      2  Receive Complete Interrupt Enable  */

+    uint8_t  :5;               /*!< bit:  3.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} SERCOM_SPI_INTENSET_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_SPI_INTENSET_OFFSET  0x0D         /**< \brief (SERCOM_SPI_INTENSET offset) SPI Interrupt Enable Set Register */

+#define SERCOM_SPI_INTENSET_RESETVALUE 0x00         /**< \brief (SERCOM_SPI_INTENSET reset_value) SPI Interrupt Enable Set Register */

+

+#define SERCOM_SPI_INTENSET_DRE_Pos 0            /**< \brief (SERCOM_SPI_INTENSET) Data Register Empty Interrupt Enable */

+#define SERCOM_SPI_INTENSET_DRE     (0x1u << SERCOM_SPI_INTENSET_DRE_Pos)

+#define SERCOM_SPI_INTENSET_TXC_Pos 1            /**< \brief (SERCOM_SPI_INTENSET) Transmit Complete Interrupt Enable */

+#define SERCOM_SPI_INTENSET_TXC     (0x1u << SERCOM_SPI_INTENSET_TXC_Pos)

+#define SERCOM_SPI_INTENSET_RXC_Pos 2            /**< \brief (SERCOM_SPI_INTENSET) Receive Complete Interrupt Enable */

+#define SERCOM_SPI_INTENSET_RXC     (0x1u << SERCOM_SPI_INTENSET_RXC_Pos)

+#define SERCOM_SPI_INTENSET_MASK    0x07u        /**< \brief (SERCOM_SPI_INTENSET) MASK Register */

+

+/* -------- SERCOM_USART_INTENSET : (SERCOM Offset: 0x0D) (R/W  8) USART USART Interrupt Enable Set Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  DRE:1;            /*!< bit:      0  Data Register Empty Interrupt Enable */

+    uint8_t  TXC:1;            /*!< bit:      1  Transmit Complete Interrupt Enable */

+    uint8_t  RXC:1;            /*!< bit:      2  Receive Complete Interrupt Enable  */

+    uint8_t  RXS:1;            /*!< bit:      3  Receive Start Interrupt Enable     */

+    uint8_t  :4;               /*!< bit:  4.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} SERCOM_USART_INTENSET_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_USART_INTENSET_OFFSET 0x0D         /**< \brief (SERCOM_USART_INTENSET offset) USART Interrupt Enable Set Register */

+#define SERCOM_USART_INTENSET_RESETVALUE 0x00         /**< \brief (SERCOM_USART_INTENSET reset_value) USART Interrupt Enable Set Register */

+

+#define SERCOM_USART_INTENSET_DRE_Pos 0            /**< \brief (SERCOM_USART_INTENSET) Data Register Empty Interrupt Enable */

+#define SERCOM_USART_INTENSET_DRE   (0x1u << SERCOM_USART_INTENSET_DRE_Pos)

+#define SERCOM_USART_INTENSET_TXC_Pos 1            /**< \brief (SERCOM_USART_INTENSET) Transmit Complete Interrupt Enable */

+#define SERCOM_USART_INTENSET_TXC   (0x1u << SERCOM_USART_INTENSET_TXC_Pos)

+#define SERCOM_USART_INTENSET_RXC_Pos 2            /**< \brief (SERCOM_USART_INTENSET) Receive Complete Interrupt Enable */

+#define SERCOM_USART_INTENSET_RXC   (0x1u << SERCOM_USART_INTENSET_RXC_Pos)

+#define SERCOM_USART_INTENSET_RXS_Pos 3            /**< \brief (SERCOM_USART_INTENSET) Receive Start Interrupt Enable */

+#define SERCOM_USART_INTENSET_RXS   (0x1u << SERCOM_USART_INTENSET_RXS_Pos)

+#define SERCOM_USART_INTENSET_MASK  0x0Fu        /**< \brief (SERCOM_USART_INTENSET) MASK Register */

+

+/* -------- SERCOM_I2CM_INTFLAG : (SERCOM Offset: 0x0E) (R/W  8) I2CM I2CM Interrupt Flag Status and Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  MB:1;             /*!< bit:      0  Write Interrupt                    */

+    uint8_t  SB:1;             /*!< bit:      1  Read Interrupt                     */

+    uint8_t  :6;               /*!< bit:  2.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} SERCOM_I2CM_INTFLAG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_I2CM_INTFLAG_OFFSET  0x0E         /**< \brief (SERCOM_I2CM_INTFLAG offset) I2CM Interrupt Flag Status and Clear Register */

+#define SERCOM_I2CM_INTFLAG_RESETVALUE 0x00         /**< \brief (SERCOM_I2CM_INTFLAG reset_value) I2CM Interrupt Flag Status and Clear Register */

+

+#define SERCOM_I2CM_INTFLAG_MB_Pos  0            /**< \brief (SERCOM_I2CM_INTFLAG) Write Interrupt */

+#define SERCOM_I2CM_INTFLAG_MB      (0x1u << SERCOM_I2CM_INTFLAG_MB_Pos)

+#define SERCOM_I2CM_INTFLAG_SB_Pos  1            /**< \brief (SERCOM_I2CM_INTFLAG) Read Interrupt */

+#define SERCOM_I2CM_INTFLAG_SB      (0x1u << SERCOM_I2CM_INTFLAG_SB_Pos)

+#define SERCOM_I2CM_INTFLAG_MASK    0x03u        /**< \brief (SERCOM_I2CM_INTFLAG) MASK Register */

+

+/* -------- SERCOM_I2CS_INTFLAG : (SERCOM Offset: 0x0E) (R/W  8) I2CS I2CS Interrupt Flag Status and Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  PREC:1;           /*!< bit:      0  Stop Interrupt                     */

+    uint8_t  AMATCH:1;         /*!< bit:      1  Address Interrupt                  */

+    uint8_t  DRDY:1;           /*!< bit:      2  Data Interrupt                     */

+    uint8_t  :5;               /*!< bit:  3.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} SERCOM_I2CS_INTFLAG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_I2CS_INTFLAG_OFFSET  0x0E         /**< \brief (SERCOM_I2CS_INTFLAG offset) I2CS Interrupt Flag Status and Clear Register */

+#define SERCOM_I2CS_INTFLAG_RESETVALUE 0x00         /**< \brief (SERCOM_I2CS_INTFLAG reset_value) I2CS Interrupt Flag Status and Clear Register */

+

+#define SERCOM_I2CS_INTFLAG_PREC_Pos 0            /**< \brief (SERCOM_I2CS_INTFLAG) Stop Interrupt */

+#define SERCOM_I2CS_INTFLAG_PREC    (0x1u << SERCOM_I2CS_INTFLAG_PREC_Pos)

+#define SERCOM_I2CS_INTFLAG_AMATCH_Pos 1            /**< \brief (SERCOM_I2CS_INTFLAG) Address Interrupt */

+#define SERCOM_I2CS_INTFLAG_AMATCH  (0x1u << SERCOM_I2CS_INTFLAG_AMATCH_Pos)

+#define SERCOM_I2CS_INTFLAG_DRDY_Pos 2            /**< \brief (SERCOM_I2CS_INTFLAG) Data Interrupt */

+#define SERCOM_I2CS_INTFLAG_DRDY    (0x1u << SERCOM_I2CS_INTFLAG_DRDY_Pos)

+#define SERCOM_I2CS_INTFLAG_MASK    0x07u        /**< \brief (SERCOM_I2CS_INTFLAG) MASK Register */

+

+/* -------- SERCOM_SPI_INTFLAG : (SERCOM Offset: 0x0E) (R/W  8) SPI SPI Interrupt Flag Status and Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  DRE:1;            /*!< bit:      0  Data Register Empty Interrupt      */

+    uint8_t  TXC:1;            /*!< bit:      1  Transmit Complete Interrupt        */

+    uint8_t  RXC:1;            /*!< bit:      2  Receive Complete Interrupt         */

+    uint8_t  :5;               /*!< bit:  3.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} SERCOM_SPI_INTFLAG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_SPI_INTFLAG_OFFSET   0x0E         /**< \brief (SERCOM_SPI_INTFLAG offset) SPI Interrupt Flag Status and Clear Register */

+#define SERCOM_SPI_INTFLAG_RESETVALUE 0x00         /**< \brief (SERCOM_SPI_INTFLAG reset_value) SPI Interrupt Flag Status and Clear Register */

+

+#define SERCOM_SPI_INTFLAG_DRE_Pos  0            /**< \brief (SERCOM_SPI_INTFLAG) Data Register Empty Interrupt */

+#define SERCOM_SPI_INTFLAG_DRE      (0x1u << SERCOM_SPI_INTFLAG_DRE_Pos)

+#define SERCOM_SPI_INTFLAG_TXC_Pos  1            /**< \brief (SERCOM_SPI_INTFLAG) Transmit Complete Interrupt */

+#define SERCOM_SPI_INTFLAG_TXC      (0x1u << SERCOM_SPI_INTFLAG_TXC_Pos)

+#define SERCOM_SPI_INTFLAG_RXC_Pos  2            /**< \brief (SERCOM_SPI_INTFLAG) Receive Complete Interrupt */

+#define SERCOM_SPI_INTFLAG_RXC      (0x1u << SERCOM_SPI_INTFLAG_RXC_Pos)

+#define SERCOM_SPI_INTFLAG_MASK     0x07u        /**< \brief (SERCOM_SPI_INTFLAG) MASK Register */

+

+/* -------- SERCOM_USART_INTFLAG : (SERCOM Offset: 0x0E) (R/W  8) USART USART Interrupt Flag Status and Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  DRE:1;            /*!< bit:      0  Data Register Empty Interrupt      */

+    uint8_t  TXC:1;            /*!< bit:      1  Transmit Complete Interrupt        */

+    uint8_t  RXC:1;            /*!< bit:      2  Receive Complete Interrupt         */

+    uint8_t  RXS:1;            /*!< bit:      3  Receive Start Interrupt            */

+    uint8_t  :4;               /*!< bit:  4.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} SERCOM_USART_INTFLAG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_USART_INTFLAG_OFFSET 0x0E         /**< \brief (SERCOM_USART_INTFLAG offset) USART Interrupt Flag Status and Clear Register */

+#define SERCOM_USART_INTFLAG_RESETVALUE 0x00         /**< \brief (SERCOM_USART_INTFLAG reset_value) USART Interrupt Flag Status and Clear Register */

+

+#define SERCOM_USART_INTFLAG_DRE_Pos 0            /**< \brief (SERCOM_USART_INTFLAG) Data Register Empty Interrupt */

+#define SERCOM_USART_INTFLAG_DRE    (0x1u << SERCOM_USART_INTFLAG_DRE_Pos)

+#define SERCOM_USART_INTFLAG_TXC_Pos 1            /**< \brief (SERCOM_USART_INTFLAG) Transmit Complete Interrupt */

+#define SERCOM_USART_INTFLAG_TXC    (0x1u << SERCOM_USART_INTFLAG_TXC_Pos)

+#define SERCOM_USART_INTFLAG_RXC_Pos 2            /**< \brief (SERCOM_USART_INTFLAG) Receive Complete Interrupt */

+#define SERCOM_USART_INTFLAG_RXC    (0x1u << SERCOM_USART_INTFLAG_RXC_Pos)

+#define SERCOM_USART_INTFLAG_RXS_Pos 3            /**< \brief (SERCOM_USART_INTFLAG) Receive Start Interrupt */

+#define SERCOM_USART_INTFLAG_RXS    (0x1u << SERCOM_USART_INTFLAG_RXS_Pos)

+#define SERCOM_USART_INTFLAG_MASK   0x0Fu        /**< \brief (SERCOM_USART_INTFLAG) MASK Register */

+

+/* -------- SERCOM_I2CM_STATUS : (SERCOM Offset: 0x10) (R/W 16) I2CM I2CM Status Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t BUSERR:1;         /*!< bit:      0  Bus Error                          */

+    uint16_t ARBLOST:1;        /*!< bit:      1  Arbitration Lost                   */

+    uint16_t RXNACK:1;         /*!< bit:      2  Received Not Acknowledge           */

+    uint16_t :1;               /*!< bit:      3  Reserved                           */

+    uint16_t BUSSTATE:2;       /*!< bit:  4.. 5  Bus State                          */

+    uint16_t LOWTOUT:1;        /*!< bit:      6  SCL Low Timeout                    */

+    uint16_t CLKHOLD:1;        /*!< bit:      7  Clock Hold                         */

+    uint16_t :7;               /*!< bit:  8..14  Reserved                           */

+    uint16_t SYNCBUSY:1;       /*!< bit:     15  Synchronization Busy               */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} SERCOM_I2CM_STATUS_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_I2CM_STATUS_OFFSET   0x10         /**< \brief (SERCOM_I2CM_STATUS offset) I2CM Status Register */

+#define SERCOM_I2CM_STATUS_RESETVALUE 0x0000       /**< \brief (SERCOM_I2CM_STATUS reset_value) I2CM Status Register */

+

+#define SERCOM_I2CM_STATUS_BUSERR_Pos 0            /**< \brief (SERCOM_I2CM_STATUS) Bus Error */

+#define SERCOM_I2CM_STATUS_BUSERR   (0x1u << SERCOM_I2CM_STATUS_BUSERR_Pos)

+#define SERCOM_I2CM_STATUS_ARBLOST_Pos 1            /**< \brief (SERCOM_I2CM_STATUS) Arbitration Lost */

+#define SERCOM_I2CM_STATUS_ARBLOST  (0x1u << SERCOM_I2CM_STATUS_ARBLOST_Pos)

+#define SERCOM_I2CM_STATUS_RXNACK_Pos 2            /**< \brief (SERCOM_I2CM_STATUS) Received Not Acknowledge */

+#define SERCOM_I2CM_STATUS_RXNACK   (0x1u << SERCOM_I2CM_STATUS_RXNACK_Pos)

+#define SERCOM_I2CM_STATUS_BUSSTATE_Pos 4            /**< \brief (SERCOM_I2CM_STATUS) Bus State */

+#define SERCOM_I2CM_STATUS_BUSSTATE_Msk (0x3u << SERCOM_I2CM_STATUS_BUSSTATE_Pos)

+#define SERCOM_I2CM_STATUS_BUSSTATE(value) ((SERCOM_I2CM_STATUS_BUSSTATE_Msk & ((value) << SERCOM_I2CM_STATUS_BUSSTATE_Pos)))

+#define SERCOM_I2CM_STATUS_LOWTOUT_Pos 6            /**< \brief (SERCOM_I2CM_STATUS) SCL Low Timeout */

+#define SERCOM_I2CM_STATUS_LOWTOUT  (0x1u << SERCOM_I2CM_STATUS_LOWTOUT_Pos)

+#define SERCOM_I2CM_STATUS_CLKHOLD_Pos 7            /**< \brief (SERCOM_I2CM_STATUS) Clock Hold */

+#define SERCOM_I2CM_STATUS_CLKHOLD  (0x1u << SERCOM_I2CM_STATUS_CLKHOLD_Pos)

+#define SERCOM_I2CM_STATUS_SYNCBUSY_Pos 15           /**< \brief (SERCOM_I2CM_STATUS) Synchronization Busy */

+#define SERCOM_I2CM_STATUS_SYNCBUSY (0x1u << SERCOM_I2CM_STATUS_SYNCBUSY_Pos)

+#define SERCOM_I2CM_STATUS_MASK     0x80F7u      /**< \brief (SERCOM_I2CM_STATUS) MASK Register */

+

+/* -------- SERCOM_I2CS_STATUS : (SERCOM Offset: 0x10) (R/W 16) I2CS I2CS Status Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t BUSERR:1;         /*!< bit:      0  Bus Error                          */

+    uint16_t COLL:1;           /*!< bit:      1  Transmit Collision                 */

+    uint16_t RXNACK:1;         /*!< bit:      2  Received Not Acknowledge           */

+    uint16_t DIR:1;            /*!< bit:      3  Read/Write Direction               */

+    uint16_t SR:1;             /*!< bit:      4  Repeated Start                     */

+    uint16_t :1;               /*!< bit:      5  Reserved                           */

+    uint16_t LOWTOUT:1;        /*!< bit:      6  SCL Low Timeout                    */

+    uint16_t CLKHOLD:1;        /*!< bit:      7  Clock Hold                         */

+    uint16_t :7;               /*!< bit:  8..14  Reserved                           */

+    uint16_t SYNCBUSY:1;       /*!< bit:     15  Synchronization Busy               */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} SERCOM_I2CS_STATUS_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_I2CS_STATUS_OFFSET   0x10         /**< \brief (SERCOM_I2CS_STATUS offset) I2CS Status Register */

+#define SERCOM_I2CS_STATUS_RESETVALUE 0x0000       /**< \brief (SERCOM_I2CS_STATUS reset_value) I2CS Status Register */

+

+#define SERCOM_I2CS_STATUS_BUSERR_Pos 0            /**< \brief (SERCOM_I2CS_STATUS) Bus Error */

+#define SERCOM_I2CS_STATUS_BUSERR   (0x1u << SERCOM_I2CS_STATUS_BUSERR_Pos)

+#define SERCOM_I2CS_STATUS_COLL_Pos 1            /**< \brief (SERCOM_I2CS_STATUS) Transmit Collision */

+#define SERCOM_I2CS_STATUS_COLL     (0x1u << SERCOM_I2CS_STATUS_COLL_Pos)

+#define SERCOM_I2CS_STATUS_RXNACK_Pos 2            /**< \brief (SERCOM_I2CS_STATUS) Received Not Acknowledge */

+#define SERCOM_I2CS_STATUS_RXNACK   (0x1u << SERCOM_I2CS_STATUS_RXNACK_Pos)

+#define SERCOM_I2CS_STATUS_DIR_Pos  3            /**< \brief (SERCOM_I2CS_STATUS) Read/Write Direction */

+#define SERCOM_I2CS_STATUS_DIR      (0x1u << SERCOM_I2CS_STATUS_DIR_Pos)

+#define SERCOM_I2CS_STATUS_SR_Pos   4            /**< \brief (SERCOM_I2CS_STATUS) Repeated Start */

+#define SERCOM_I2CS_STATUS_SR       (0x1u << SERCOM_I2CS_STATUS_SR_Pos)

+#define SERCOM_I2CS_STATUS_LOWTOUT_Pos 6            /**< \brief (SERCOM_I2CS_STATUS) SCL Low Timeout */

+#define SERCOM_I2CS_STATUS_LOWTOUT  (0x1u << SERCOM_I2CS_STATUS_LOWTOUT_Pos)

+#define SERCOM_I2CS_STATUS_CLKHOLD_Pos 7            /**< \brief (SERCOM_I2CS_STATUS) Clock Hold */

+#define SERCOM_I2CS_STATUS_CLKHOLD  (0x1u << SERCOM_I2CS_STATUS_CLKHOLD_Pos)

+#define SERCOM_I2CS_STATUS_SYNCBUSY_Pos 15           /**< \brief (SERCOM_I2CS_STATUS) Synchronization Busy */

+#define SERCOM_I2CS_STATUS_SYNCBUSY (0x1u << SERCOM_I2CS_STATUS_SYNCBUSY_Pos)

+#define SERCOM_I2CS_STATUS_MASK     0x80DFu      /**< \brief (SERCOM_I2CS_STATUS) MASK Register */

+

+/* -------- SERCOM_SPI_STATUS : (SERCOM Offset: 0x10) (R/W 16) SPI SPI Status Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t :2;               /*!< bit:  0.. 1  Reserved                           */

+    uint16_t BUFOVF:1;         /*!< bit:      2  Buffer Overflow                    */

+    uint16_t :12;              /*!< bit:  3..14  Reserved                           */

+    uint16_t SYNCBUSY:1;       /*!< bit:     15  Synchronization Busy               */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} SERCOM_SPI_STATUS_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_SPI_STATUS_OFFSET    0x10         /**< \brief (SERCOM_SPI_STATUS offset) SPI Status Register */

+#define SERCOM_SPI_STATUS_RESETVALUE 0x0000       /**< \brief (SERCOM_SPI_STATUS reset_value) SPI Status Register */

+

+#define SERCOM_SPI_STATUS_BUFOVF_Pos 2            /**< \brief (SERCOM_SPI_STATUS) Buffer Overflow */

+#define SERCOM_SPI_STATUS_BUFOVF    (0x1u << SERCOM_SPI_STATUS_BUFOVF_Pos)

+#define SERCOM_SPI_STATUS_SYNCBUSY_Pos 15           /**< \brief (SERCOM_SPI_STATUS) Synchronization Busy */

+#define SERCOM_SPI_STATUS_SYNCBUSY  (0x1u << SERCOM_SPI_STATUS_SYNCBUSY_Pos)

+#define SERCOM_SPI_STATUS_MASK      0x8004u      /**< \brief (SERCOM_SPI_STATUS) MASK Register */

+

+/* -------- SERCOM_USART_STATUS : (SERCOM Offset: 0x10) (R/W 16) USART USART Status Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t PERR:1;           /*!< bit:      0  Parity Error                       */

+    uint16_t FERR:1;           /*!< bit:      1  Frame Error                        */

+    uint16_t BUFOVF:1;         /*!< bit:      2  Buffer Overflow                    */

+    uint16_t :12;              /*!< bit:  3..14  Reserved                           */

+    uint16_t SYNCBUSY:1;       /*!< bit:     15  Synchronization Busy               */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} SERCOM_USART_STATUS_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_USART_STATUS_OFFSET  0x10         /**< \brief (SERCOM_USART_STATUS offset) USART Status Register */

+#define SERCOM_USART_STATUS_RESETVALUE 0x0000       /**< \brief (SERCOM_USART_STATUS reset_value) USART Status Register */

+

+#define SERCOM_USART_STATUS_PERR_Pos 0            /**< \brief (SERCOM_USART_STATUS) Parity Error */

+#define SERCOM_USART_STATUS_PERR    (0x1u << SERCOM_USART_STATUS_PERR_Pos)

+#define SERCOM_USART_STATUS_FERR_Pos 1            /**< \brief (SERCOM_USART_STATUS) Frame Error */

+#define SERCOM_USART_STATUS_FERR    (0x1u << SERCOM_USART_STATUS_FERR_Pos)

+#define SERCOM_USART_STATUS_BUFOVF_Pos 2            /**< \brief (SERCOM_USART_STATUS) Buffer Overflow */

+#define SERCOM_USART_STATUS_BUFOVF  (0x1u << SERCOM_USART_STATUS_BUFOVF_Pos)

+#define SERCOM_USART_STATUS_SYNCBUSY_Pos 15           /**< \brief (SERCOM_USART_STATUS) Synchronization Busy */

+#define SERCOM_USART_STATUS_SYNCBUSY (0x1u << SERCOM_USART_STATUS_SYNCBUSY_Pos)

+#define SERCOM_USART_STATUS_MASK    0x8007u      /**< \brief (SERCOM_USART_STATUS) MASK Register */

+

+/* -------- SERCOM_I2CM_ADDR : (SERCOM Offset: 0x14) (R/W  8) I2CM I2CM Address Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  ADDR:8;           /*!< bit:  0.. 7  Address Value                      */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} SERCOM_I2CM_ADDR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_I2CM_ADDR_OFFSET     0x14         /**< \brief (SERCOM_I2CM_ADDR offset) I2CM Address Register */

+#define SERCOM_I2CM_ADDR_RESETVALUE 0x00         /**< \brief (SERCOM_I2CM_ADDR reset_value) I2CM Address Register */

+

+#define SERCOM_I2CM_ADDR_ADDR_Pos   0            /**< \brief (SERCOM_I2CM_ADDR) Address Value */

+#define SERCOM_I2CM_ADDR_ADDR_Msk   (0xFFu << SERCOM_I2CM_ADDR_ADDR_Pos)

+#define SERCOM_I2CM_ADDR_ADDR(value) ((SERCOM_I2CM_ADDR_ADDR_Msk & ((value) << SERCOM_I2CM_ADDR_ADDR_Pos)))

+#define SERCOM_I2CM_ADDR_MASK       0xFFu        /**< \brief (SERCOM_I2CM_ADDR) MASK Register */

+

+/* -------- SERCOM_I2CS_ADDR : (SERCOM Offset: 0x14) (R/W 32) I2CS I2CS Address Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t GENCEN:1;         /*!< bit:      0  General Call Address Enable        */

+    uint32_t ADDR:7;           /*!< bit:  1.. 7  Address Value                      */

+    uint32_t :9;               /*!< bit:  8..16  Reserved                           */

+    uint32_t ADDRMASK:7;       /*!< bit: 17..23  Address Mask                       */

+    uint32_t :8;               /*!< bit: 24..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} SERCOM_I2CS_ADDR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_I2CS_ADDR_OFFSET     0x14         /**< \brief (SERCOM_I2CS_ADDR offset) I2CS Address Register */

+#define SERCOM_I2CS_ADDR_RESETVALUE 0x00000000   /**< \brief (SERCOM_I2CS_ADDR reset_value) I2CS Address Register */

+

+#define SERCOM_I2CS_ADDR_GENCEN_Pos 0            /**< \brief (SERCOM_I2CS_ADDR) General Call Address Enable */

+#define SERCOM_I2CS_ADDR_GENCEN     (0x1u << SERCOM_I2CS_ADDR_GENCEN_Pos)

+#define SERCOM_I2CS_ADDR_ADDR_Pos   1            /**< \brief (SERCOM_I2CS_ADDR) Address Value */

+#define SERCOM_I2CS_ADDR_ADDR_Msk   (0x7Fu << SERCOM_I2CS_ADDR_ADDR_Pos)

+#define SERCOM_I2CS_ADDR_ADDR(value) ((SERCOM_I2CS_ADDR_ADDR_Msk & ((value) << SERCOM_I2CS_ADDR_ADDR_Pos)))

+#define SERCOM_I2CS_ADDR_ADDRMASK_Pos 17           /**< \brief (SERCOM_I2CS_ADDR) Address Mask */

+#define SERCOM_I2CS_ADDR_ADDRMASK_Msk (0x7Fu << SERCOM_I2CS_ADDR_ADDRMASK_Pos)

+#define SERCOM_I2CS_ADDR_ADDRMASK(value) ((SERCOM_I2CS_ADDR_ADDRMASK_Msk & ((value) << SERCOM_I2CS_ADDR_ADDRMASK_Pos)))

+#define SERCOM_I2CS_ADDR_MASK       0x00FE00FFu  /**< \brief (SERCOM_I2CS_ADDR) MASK Register */

+

+/* -------- SERCOM_SPI_ADDR : (SERCOM Offset: 0x14) (R/W 32) SPI SPI Address Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t ADDR:8;           /*!< bit:  0.. 7  Address Value                      */

+    uint32_t :8;               /*!< bit:  8..15  Reserved                           */

+    uint32_t ADDRMASK:8;       /*!< bit: 16..23  Address Mask                       */

+    uint32_t :8;               /*!< bit: 24..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} SERCOM_SPI_ADDR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_SPI_ADDR_OFFSET      0x14         /**< \brief (SERCOM_SPI_ADDR offset) SPI Address Register */

+#define SERCOM_SPI_ADDR_RESETVALUE  0x00000000   /**< \brief (SERCOM_SPI_ADDR reset_value) SPI Address Register */

+

+#define SERCOM_SPI_ADDR_ADDR_Pos    0            /**< \brief (SERCOM_SPI_ADDR) Address Value */

+#define SERCOM_SPI_ADDR_ADDR_Msk    (0xFFu << SERCOM_SPI_ADDR_ADDR_Pos)

+#define SERCOM_SPI_ADDR_ADDR(value) ((SERCOM_SPI_ADDR_ADDR_Msk & ((value) << SERCOM_SPI_ADDR_ADDR_Pos)))

+#define SERCOM_SPI_ADDR_ADDRMASK_Pos 16           /**< \brief (SERCOM_SPI_ADDR) Address Mask */

+#define SERCOM_SPI_ADDR_ADDRMASK_Msk (0xFFu << SERCOM_SPI_ADDR_ADDRMASK_Pos)

+#define SERCOM_SPI_ADDR_ADDRMASK(value) ((SERCOM_SPI_ADDR_ADDRMASK_Msk & ((value) << SERCOM_SPI_ADDR_ADDRMASK_Pos)))

+#define SERCOM_SPI_ADDR_MASK        0x00FF00FFu  /**< \brief (SERCOM_SPI_ADDR) MASK Register */

+

+/* -------- SERCOM_I2CM_DATA : (SERCOM Offset: 0x18) (R/W  8) I2CM I2CM Data Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  DATA:8;           /*!< bit:  0.. 7  Data Value                         */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} SERCOM_I2CM_DATA_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_I2CM_DATA_OFFSET     0x18         /**< \brief (SERCOM_I2CM_DATA offset) I2CM Data Register */

+#define SERCOM_I2CM_DATA_RESETVALUE 0x00         /**< \brief (SERCOM_I2CM_DATA reset_value) I2CM Data Register */

+

+#define SERCOM_I2CM_DATA_DATA_Pos   0            /**< \brief (SERCOM_I2CM_DATA) Data Value */

+#define SERCOM_I2CM_DATA_DATA_Msk   (0xFFu << SERCOM_I2CM_DATA_DATA_Pos)

+#define SERCOM_I2CM_DATA_DATA(value) ((SERCOM_I2CM_DATA_DATA_Msk & ((value) << SERCOM_I2CM_DATA_DATA_Pos)))

+#define SERCOM_I2CM_DATA_MASK       0xFFu        /**< \brief (SERCOM_I2CM_DATA) MASK Register */

+

+/* -------- SERCOM_I2CS_DATA : (SERCOM Offset: 0x18) (R/W  8) I2CS I2CS Data Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  DATA:8;           /*!< bit:  0.. 7  Data Value                         */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} SERCOM_I2CS_DATA_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_I2CS_DATA_OFFSET     0x18         /**< \brief (SERCOM_I2CS_DATA offset) I2CS Data Register */

+#define SERCOM_I2CS_DATA_RESETVALUE 0x00         /**< \brief (SERCOM_I2CS_DATA reset_value) I2CS Data Register */

+

+#define SERCOM_I2CS_DATA_DATA_Pos   0            /**< \brief (SERCOM_I2CS_DATA) Data Value */

+#define SERCOM_I2CS_DATA_DATA_Msk   (0xFFu << SERCOM_I2CS_DATA_DATA_Pos)

+#define SERCOM_I2CS_DATA_DATA(value) ((SERCOM_I2CS_DATA_DATA_Msk & ((value) << SERCOM_I2CS_DATA_DATA_Pos)))

+#define SERCOM_I2CS_DATA_MASK       0xFFu        /**< \brief (SERCOM_I2CS_DATA) MASK Register */

+

+/* -------- SERCOM_SPI_DATA : (SERCOM Offset: 0x18) (R/W 16) SPI SPI Data Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t DATA:9;           /*!< bit:  0.. 8  Data Value                         */

+    uint16_t :7;               /*!< bit:  9..15  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} SERCOM_SPI_DATA_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_SPI_DATA_OFFSET      0x18         /**< \brief (SERCOM_SPI_DATA offset) SPI Data Register */

+#define SERCOM_SPI_DATA_RESETVALUE  0x0000       /**< \brief (SERCOM_SPI_DATA reset_value) SPI Data Register */

+

+#define SERCOM_SPI_DATA_DATA_Pos    0            /**< \brief (SERCOM_SPI_DATA) Data Value */

+#define SERCOM_SPI_DATA_DATA_Msk    (0x1FFu << SERCOM_SPI_DATA_DATA_Pos)

+#define SERCOM_SPI_DATA_DATA(value) ((SERCOM_SPI_DATA_DATA_Msk & ((value) << SERCOM_SPI_DATA_DATA_Pos)))

+#define SERCOM_SPI_DATA_MASK        0x01FFu      /**< \brief (SERCOM_SPI_DATA) MASK Register */

+

+/* -------- SERCOM_USART_DATA : (SERCOM Offset: 0x18) (R/W 16) USART USART Data Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t DATA:9;           /*!< bit:  0.. 8  Data Value                         */

+    uint16_t :7;               /*!< bit:  9..15  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} SERCOM_USART_DATA_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SERCOM_USART_DATA_OFFSET    0x18         /**< \brief (SERCOM_USART_DATA offset) USART Data Register */

+#define SERCOM_USART_DATA_RESETVALUE 0x0000       /**< \brief (SERCOM_USART_DATA reset_value) USART Data Register */

+

+#define SERCOM_USART_DATA_DATA_Pos  0            /**< \brief (SERCOM_USART_DATA) Data Value */

+#define SERCOM_USART_DATA_DATA_Msk  (0x1FFu << SERCOM_USART_DATA_DATA_Pos)

+#define SERCOM_USART_DATA_DATA(value) ((SERCOM_USART_DATA_DATA_Msk & ((value) << SERCOM_USART_DATA_DATA_Pos)))

+#define SERCOM_USART_DATA_MASK      0x01FFu      /**< \brief (SERCOM_USART_DATA) MASK Register */

+

+/** \brief SERCOM_I2CM hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct { /* I2C Master Mode */

+  __IO SERCOM_I2CM_CTRLA_Type    CTRLA;       /**< \brief Offset: 0x00 (R/W 32) I2CM Control Register A */

+  __IO SERCOM_I2CM_CTRLB_Type    CTRLB;       /**< \brief Offset: 0x04 (R/W 32) I2CM Control Register B */

+  __IO SERCOM_I2CM_DBGCTRL_Type  DBGCTRL;     /**< \brief Offset: 0x08 (R/W  8) I2CM Debug Register */

+       RoReg8                    Reserved1[0x1];

+  __IO SERCOM_I2CM_BAUD_Type     BAUD;        /**< \brief Offset: 0x0A (R/W 16) I2CM Baud Rate Register */

+  __IO SERCOM_I2CM_INTENCLR_Type INTENCLR;    /**< \brief Offset: 0x0C (R/W  8) I2CM Interrupt Enable Clear Register */

+  __IO SERCOM_I2CM_INTENSET_Type INTENSET;    /**< \brief Offset: 0x0D (R/W  8) I2CM Interrupt Enable Set Register */

+  __IO SERCOM_I2CM_INTFLAG_Type  INTFLAG;     /**< \brief Offset: 0x0E (R/W  8) I2CM Interrupt Flag Status and Clear Register */

+       RoReg8                    Reserved2[0x1];

+  __IO SERCOM_I2CM_STATUS_Type   STATUS;      /**< \brief Offset: 0x10 (R/W 16) I2CM Status Register */

+       RoReg8                    Reserved3[0x2];

+  __IO SERCOM_I2CM_ADDR_Type     ADDR;        /**< \brief Offset: 0x14 (R/W  8) I2CM Address Register */

+       RoReg8                    Reserved4[0x3];

+  __IO SERCOM_I2CM_DATA_Type     DATA;        /**< \brief Offset: 0x18 (R/W  8) I2CM Data Register */

+} SercomI2cm;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/** \brief SERCOM_I2CS hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct { /* I2C Slave Mode */

+  __IO SERCOM_I2CS_CTRLA_Type    CTRLA;       /**< \brief Offset: 0x00 (R/W 32) I2CS Control Register A */

+  __IO SERCOM_I2CS_CTRLB_Type    CTRLB;       /**< \brief Offset: 0x04 (R/W 32) I2CS Control Register B */

+       RoReg8                    Reserved1[0x4];

+  __IO SERCOM_I2CS_INTENCLR_Type INTENCLR;    /**< \brief Offset: 0x0C (R/W  8) I2CS Interrupt Enable Clear Register */

+  __IO SERCOM_I2CS_INTENSET_Type INTENSET;    /**< \brief Offset: 0x0D (R/W  8) I2CS Interrupt Enable Set Register */

+  __IO SERCOM_I2CS_INTFLAG_Type  INTFLAG;     /**< \brief Offset: 0x0E (R/W  8) I2CS Interrupt Flag Status and Clear Register */

+       RoReg8                    Reserved2[0x1];

+  __IO SERCOM_I2CS_STATUS_Type   STATUS;      /**< \brief Offset: 0x10 (R/W 16) I2CS Status Register */

+       RoReg8                    Reserved3[0x2];

+  __IO SERCOM_I2CS_ADDR_Type     ADDR;        /**< \brief Offset: 0x14 (R/W 32) I2CS Address Register */

+  __IO SERCOM_I2CS_DATA_Type     DATA;        /**< \brief Offset: 0x18 (R/W  8) I2CS Data Register */

+} SercomI2cs;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/** \brief SERCOM_SPI hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct { /* SPI Mode */

+  __IO SERCOM_SPI_CTRLA_Type     CTRLA;       /**< \brief Offset: 0x00 (R/W 32) SPI Control Register A */

+  __IO SERCOM_SPI_CTRLB_Type     CTRLB;       /**< \brief Offset: 0x04 (R/W 32) SPI Control Register B */

+  __IO SERCOM_SPI_DBGCTRL_Type   DBGCTRL;     /**< \brief Offset: 0x08 (R/W  8) SPI Debug Register */

+       RoReg8                    Reserved1[0x1];

+  __IO SERCOM_SPI_BAUD_Type      BAUD;        /**< \brief Offset: 0x0A (R/W  8) SPI Baud Rate Register */

+       RoReg8                    Reserved2[0x1];

+  __IO SERCOM_SPI_INTENCLR_Type  INTENCLR;    /**< \brief Offset: 0x0C (R/W  8) SPI Interrupt Enable Clear Register */

+  __IO SERCOM_SPI_INTENSET_Type  INTENSET;    /**< \brief Offset: 0x0D (R/W  8) SPI Interrupt Enable Set Register */

+  __IO SERCOM_SPI_INTFLAG_Type   INTFLAG;     /**< \brief Offset: 0x0E (R/W  8) SPI Interrupt Flag Status and Clear Register */

+       RoReg8                    Reserved3[0x1];

+  __IO SERCOM_SPI_STATUS_Type    STATUS;      /**< \brief Offset: 0x10 (R/W 16) SPI Status Register */

+       RoReg8                    Reserved4[0x2];

+  __IO SERCOM_SPI_ADDR_Type      ADDR;        /**< \brief Offset: 0x14 (R/W 32) SPI Address Register */

+  __IO SERCOM_SPI_DATA_Type      DATA;        /**< \brief Offset: 0x18 (R/W 16) SPI Data Register */

+} SercomSpi;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/** \brief SERCOM_USART hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct { /* USART Mode */

+  __IO SERCOM_USART_CTRLA_Type   CTRLA;       /**< \brief Offset: 0x00 (R/W 32) USART Control Register A */

+  __IO SERCOM_USART_CTRLB_Type   CTRLB;       /**< \brief Offset: 0x04 (R/W 32) USART Control Register B */

+  __IO SERCOM_USART_DBGCTRL_Type DBGCTRL;     /**< \brief Offset: 0x08 (R/W  8) USART Debug Register */

+       RoReg8                    Reserved1[0x1];

+  __IO SERCOM_USART_BAUD_Type    BAUD;        /**< \brief Offset: 0x0A (R/W 16) USART Baud Rate Register */

+  __IO SERCOM_USART_INTENCLR_Type INTENCLR;    /**< \brief Offset: 0x0C (R/W  8) USART Interrupt Enable Clear Register */

+  __IO SERCOM_USART_INTENSET_Type INTENSET;    /**< \brief Offset: 0x0D (R/W  8) USART Interrupt Enable Set Register */

+  __IO SERCOM_USART_INTFLAG_Type INTFLAG;     /**< \brief Offset: 0x0E (R/W  8) USART Interrupt Flag Status and Clear Register */

+       RoReg8                    Reserved2[0x1];

+  __IO SERCOM_USART_STATUS_Type  STATUS;      /**< \brief Offset: 0x10 (R/W 16) USART Status Register */

+       RoReg8                    Reserved3[0x6];

+  __IO SERCOM_USART_DATA_Type    DATA;        /**< \brief Offset: 0x18 (R/W 16) USART Data Register */

+} SercomUsart;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+       SercomI2cm                I2CM;        /**< \brief Offset: 0x00 I2C Master Mode */

+       SercomI2cs                I2CS;        /**< \brief Offset: 0x00 I2C Slave Mode */

+       SercomSpi                 SPI;         /**< \brief Offset: 0x00 SPI Mode */

+       SercomUsart               USART;       /**< \brief Offset: 0x00 USART Mode */

+} Sercom;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/*@}*/

+

+#endif /* _SAMD20_SERCOM_COMPONENT_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_sysctrl.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_sysctrl.h
new file mode 100644
index 0000000..3170916
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_sysctrl.h
@@ -0,0 +1,785 @@
+/**

+ * \file

+ *

+ * \brief Component description for SYSCTRL

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_SYSCTRL_COMPONENT_

+#define _SAMD20_SYSCTRL_COMPONENT_

+

+/* ========================================================================== */

+/**  SOFTWARE API DEFINITION FOR SYSCTRL */

+/* ========================================================================== */

+/** \addtogroup SAMD20_SYSCTRL System Control */

+/*@{*/

+

+#define REV_SYSCTRL                 0x200

+

+/* -------- SYSCTRL_INTENCLR : (SYSCTRL Offset: 0x00) (R/W 32) Interrupt Enable Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t XOSCRDY:1;        /*!< bit:      0  XOSC Ready                         */

+    uint32_t XOSC32KRDY:1;     /*!< bit:      1  XOSC32K Ready                      */

+    uint32_t OSC32KRDY:1;      /*!< bit:      2  OSC32K Ready                       */

+    uint32_t OSC8MRDY:1;       /*!< bit:      3  OSC8M Ready                        */

+    uint32_t DFLLRDY:1;        /*!< bit:      4  DFLL Ready                         */

+    uint32_t DFLLOOB:1;        /*!< bit:      5  DFLL Out Of Bounds                 */

+    uint32_t DFLLLCKF:1;       /*!< bit:      6  DFLL Lock Fine                     */

+    uint32_t DFLLLCKC:1;       /*!< bit:      7  DFLL Lock Coarse                   */

+    uint32_t DFLLRCS:1;        /*!< bit:      8  DFLL Reference Clock Stopped       */

+    uint32_t BOD33RDY:1;       /*!< bit:      9  BOD33 Ready                        */

+    uint32_t BOD33DET:1;       /*!< bit:     10  BOD33 Detection                    */

+    uint32_t B33SRDY:1;        /*!< bit:     11  BOD33 Synchronization Ready        */

+    uint32_t BOD12RDY:1;       /*!< bit:     12  BOD12 Ready                        */

+    uint32_t BOD12DET:1;       /*!< bit:     13  BOD12 Detection                    */

+    uint32_t B12SRDY:1;        /*!< bit:     14  BOD12 Synchronization Ready        */

+    uint32_t :17;              /*!< bit: 15..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} SYSCTRL_INTENCLR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SYSCTRL_INTENCLR_OFFSET     0x00         /**< \brief (SYSCTRL_INTENCLR offset) Interrupt Enable Clear Register */

+#define SYSCTRL_INTENCLR_RESETVALUE 0x00000000   /**< \brief (SYSCTRL_INTENCLR reset_value) Interrupt Enable Clear Register */

+

+#define SYSCTRL_INTENCLR_XOSCRDY_Pos 0            /**< \brief (SYSCTRL_INTENCLR) XOSC Ready */

+#define SYSCTRL_INTENCLR_XOSCRDY    (0x1u << SYSCTRL_INTENCLR_XOSCRDY_Pos)

+#define SYSCTRL_INTENCLR_XOSC32KRDY_Pos 1            /**< \brief (SYSCTRL_INTENCLR) XOSC32K Ready */

+#define SYSCTRL_INTENCLR_XOSC32KRDY (0x1u << SYSCTRL_INTENCLR_XOSC32KRDY_Pos)

+#define SYSCTRL_INTENCLR_OSC32KRDY_Pos 2            /**< \brief (SYSCTRL_INTENCLR) OSC32K Ready */

+#define SYSCTRL_INTENCLR_OSC32KRDY  (0x1u << SYSCTRL_INTENCLR_OSC32KRDY_Pos)

+#define SYSCTRL_INTENCLR_OSC8MRDY_Pos 3            /**< \brief (SYSCTRL_INTENCLR) OSC8M Ready */

+#define SYSCTRL_INTENCLR_OSC8MRDY   (0x1u << SYSCTRL_INTENCLR_OSC8MRDY_Pos)

+#define SYSCTRL_INTENCLR_DFLLRDY_Pos 4            /**< \brief (SYSCTRL_INTENCLR) DFLL Ready */

+#define SYSCTRL_INTENCLR_DFLLRDY    (0x1u << SYSCTRL_INTENCLR_DFLLRDY_Pos)

+#define SYSCTRL_INTENCLR_DFLLOOB_Pos 5            /**< \brief (SYSCTRL_INTENCLR) DFLL Out Of Bounds */

+#define SYSCTRL_INTENCLR_DFLLOOB    (0x1u << SYSCTRL_INTENCLR_DFLLOOB_Pos)

+#define SYSCTRL_INTENCLR_DFLLLCKF_Pos 6            /**< \brief (SYSCTRL_INTENCLR) DFLL Lock Fine */

+#define SYSCTRL_INTENCLR_DFLLLCKF   (0x1u << SYSCTRL_INTENCLR_DFLLLCKF_Pos)

+#define SYSCTRL_INTENCLR_DFLLLCKC_Pos 7            /**< \brief (SYSCTRL_INTENCLR) DFLL Lock Coarse */

+#define SYSCTRL_INTENCLR_DFLLLCKC   (0x1u << SYSCTRL_INTENCLR_DFLLLCKC_Pos)

+#define SYSCTRL_INTENCLR_DFLLRCS_Pos 8            /**< \brief (SYSCTRL_INTENCLR) DFLL Reference Clock Stopped */

+#define SYSCTRL_INTENCLR_DFLLRCS    (0x1u << SYSCTRL_INTENCLR_DFLLRCS_Pos)

+#define SYSCTRL_INTENCLR_BOD33RDY_Pos 9            /**< \brief (SYSCTRL_INTENCLR) BOD33 Ready */

+#define SYSCTRL_INTENCLR_BOD33RDY   (0x1u << SYSCTRL_INTENCLR_BOD33RDY_Pos)

+#define SYSCTRL_INTENCLR_BOD33DET_Pos 10           /**< \brief (SYSCTRL_INTENCLR) BOD33 Detection */

+#define SYSCTRL_INTENCLR_BOD33DET   (0x1u << SYSCTRL_INTENCLR_BOD33DET_Pos)

+#define SYSCTRL_INTENCLR_B33SRDY_Pos 11           /**< \brief (SYSCTRL_INTENCLR) BOD33 Synchronization Ready */

+#define SYSCTRL_INTENCLR_B33SRDY    (0x1u << SYSCTRL_INTENCLR_B33SRDY_Pos)

+#define SYSCTRL_INTENCLR_BOD12RDY_Pos 12           /**< \brief (SYSCTRL_INTENCLR) BOD12 Ready */

+#define SYSCTRL_INTENCLR_BOD12RDY   (0x1u << SYSCTRL_INTENCLR_BOD12RDY_Pos)

+#define SYSCTRL_INTENCLR_BOD12DET_Pos 13           /**< \brief (SYSCTRL_INTENCLR) BOD12 Detection */

+#define SYSCTRL_INTENCLR_BOD12DET   (0x1u << SYSCTRL_INTENCLR_BOD12DET_Pos)

+#define SYSCTRL_INTENCLR_B12SRDY_Pos 14           /**< \brief (SYSCTRL_INTENCLR) BOD12 Synchronization Ready */

+#define SYSCTRL_INTENCLR_B12SRDY    (0x1u << SYSCTRL_INTENCLR_B12SRDY_Pos)

+#define SYSCTRL_INTENCLR_MASK       0x00007FFFu  /**< \brief (SYSCTRL_INTENCLR) MASK Register */

+

+/* -------- SYSCTRL_INTENSET : (SYSCTRL Offset: 0x04) (R/W 32) Interrupt Enable Set Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t XOSCRDY:1;        /*!< bit:      0  XOSC Ready                         */

+    uint32_t XOSC32KRDY:1;     /*!< bit:      1  XOSC32K Ready                      */

+    uint32_t OSC32KRDY:1;      /*!< bit:      2  OSC32K Ready                       */

+    uint32_t OSC8MRDY:1;       /*!< bit:      3  OSC8M Ready                        */

+    uint32_t DFLLRDY:1;        /*!< bit:      4  DFLL Ready                         */

+    uint32_t DFLLOOB:1;        /*!< bit:      5  DFLL Out Of Bounds                 */

+    uint32_t DFLLLCKF:1;       /*!< bit:      6  DFLL Lock Fine                     */

+    uint32_t DFLLLCKC:1;       /*!< bit:      7  DFLL Lock Coarse                   */

+    uint32_t DFLLRCS:1;        /*!< bit:      8  DFLL Reference Clock Stopped       */

+    uint32_t BOD33RDY:1;       /*!< bit:      9  BOD33 Ready                        */

+    uint32_t BOD33DET:1;       /*!< bit:     10  BOD33 Detection                    */

+    uint32_t B33SRDY:1;        /*!< bit:     11  BOD33 Synchronization Ready        */

+    uint32_t BOD12RDY:1;       /*!< bit:     12  BOD12 Ready                        */

+    uint32_t BOD12DET:1;       /*!< bit:     13  BOD12 Detection                    */

+    uint32_t B12SRDY:1;        /*!< bit:     14  BOD12 Synchronization Ready        */

+    uint32_t :17;              /*!< bit: 15..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} SYSCTRL_INTENSET_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SYSCTRL_INTENSET_OFFSET     0x04         /**< \brief (SYSCTRL_INTENSET offset) Interrupt Enable Set Register */

+#define SYSCTRL_INTENSET_RESETVALUE 0x00000000   /**< \brief (SYSCTRL_INTENSET reset_value) Interrupt Enable Set Register */

+

+#define SYSCTRL_INTENSET_XOSCRDY_Pos 0            /**< \brief (SYSCTRL_INTENSET) XOSC Ready */

+#define SYSCTRL_INTENSET_XOSCRDY    (0x1u << SYSCTRL_INTENSET_XOSCRDY_Pos)

+#define SYSCTRL_INTENSET_XOSC32KRDY_Pos 1            /**< \brief (SYSCTRL_INTENSET) XOSC32K Ready */

+#define SYSCTRL_INTENSET_XOSC32KRDY (0x1u << SYSCTRL_INTENSET_XOSC32KRDY_Pos)

+#define SYSCTRL_INTENSET_OSC32KRDY_Pos 2            /**< \brief (SYSCTRL_INTENSET) OSC32K Ready */

+#define SYSCTRL_INTENSET_OSC32KRDY  (0x1u << SYSCTRL_INTENSET_OSC32KRDY_Pos)

+#define SYSCTRL_INTENSET_OSC8MRDY_Pos 3            /**< \brief (SYSCTRL_INTENSET) OSC8M Ready */

+#define SYSCTRL_INTENSET_OSC8MRDY   (0x1u << SYSCTRL_INTENSET_OSC8MRDY_Pos)

+#define SYSCTRL_INTENSET_DFLLRDY_Pos 4            /**< \brief (SYSCTRL_INTENSET) DFLL Ready */

+#define SYSCTRL_INTENSET_DFLLRDY    (0x1u << SYSCTRL_INTENSET_DFLLRDY_Pos)

+#define SYSCTRL_INTENSET_DFLLOOB_Pos 5            /**< \brief (SYSCTRL_INTENSET) DFLL Out Of Bounds */

+#define SYSCTRL_INTENSET_DFLLOOB    (0x1u << SYSCTRL_INTENSET_DFLLOOB_Pos)

+#define SYSCTRL_INTENSET_DFLLLCKF_Pos 6            /**< \brief (SYSCTRL_INTENSET) DFLL Lock Fine */

+#define SYSCTRL_INTENSET_DFLLLCKF   (0x1u << SYSCTRL_INTENSET_DFLLLCKF_Pos)

+#define SYSCTRL_INTENSET_DFLLLCKC_Pos 7            /**< \brief (SYSCTRL_INTENSET) DFLL Lock Coarse */

+#define SYSCTRL_INTENSET_DFLLLCKC   (0x1u << SYSCTRL_INTENSET_DFLLLCKC_Pos)

+#define SYSCTRL_INTENSET_DFLLRCS_Pos 8            /**< \brief (SYSCTRL_INTENSET) DFLL Reference Clock Stopped */

+#define SYSCTRL_INTENSET_DFLLRCS    (0x1u << SYSCTRL_INTENSET_DFLLRCS_Pos)

+#define SYSCTRL_INTENSET_BOD33RDY_Pos 9            /**< \brief (SYSCTRL_INTENSET) BOD33 Ready */

+#define SYSCTRL_INTENSET_BOD33RDY   (0x1u << SYSCTRL_INTENSET_BOD33RDY_Pos)

+#define SYSCTRL_INTENSET_BOD33DET_Pos 10           /**< \brief (SYSCTRL_INTENSET) BOD33 Detection */

+#define SYSCTRL_INTENSET_BOD33DET   (0x1u << SYSCTRL_INTENSET_BOD33DET_Pos)

+#define SYSCTRL_INTENSET_B33SRDY_Pos 11           /**< \brief (SYSCTRL_INTENSET) BOD33 Synchronization Ready */

+#define SYSCTRL_INTENSET_B33SRDY    (0x1u << SYSCTRL_INTENSET_B33SRDY_Pos)

+#define SYSCTRL_INTENSET_BOD12RDY_Pos 12           /**< \brief (SYSCTRL_INTENSET) BOD12 Ready */

+#define SYSCTRL_INTENSET_BOD12RDY   (0x1u << SYSCTRL_INTENSET_BOD12RDY_Pos)

+#define SYSCTRL_INTENSET_BOD12DET_Pos 13           /**< \brief (SYSCTRL_INTENSET) BOD12 Detection */

+#define SYSCTRL_INTENSET_BOD12DET   (0x1u << SYSCTRL_INTENSET_BOD12DET_Pos)

+#define SYSCTRL_INTENSET_B12SRDY_Pos 14           /**< \brief (SYSCTRL_INTENSET) BOD12 Synchronization Ready */

+#define SYSCTRL_INTENSET_B12SRDY    (0x1u << SYSCTRL_INTENSET_B12SRDY_Pos)

+#define SYSCTRL_INTENSET_MASK       0x00007FFFu  /**< \brief (SYSCTRL_INTENSET) MASK Register */

+

+/* -------- SYSCTRL_INTFLAG : (SYSCTRL Offset: 0x08) (R/W 32) Interrupt Flag Status and Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t XOSCRDY:1;        /*!< bit:      0  XOSC Ready                         */

+    uint32_t XOSC32KRDY:1;     /*!< bit:      1  XOSC32K Ready                      */

+    uint32_t OSC32KRDY:1;      /*!< bit:      2  OSC32K Ready                       */

+    uint32_t OSC8MRDY:1;       /*!< bit:      3  OSC8M Ready                        */

+    uint32_t DFLLRDY:1;        /*!< bit:      4  DFLL Ready                         */

+    uint32_t DFLLOOB:1;        /*!< bit:      5  DFLL Out Of Bounds                 */

+    uint32_t DFLLLCKF:1;       /*!< bit:      6  DFLL Lock Fine                     */

+    uint32_t DFLLLCKC:1;       /*!< bit:      7  DFLL Lock Coarse                   */

+    uint32_t DFLLRCS:1;        /*!< bit:      8  DFLL Reference Clock Stopped       */

+    uint32_t BOD33RDY:1;       /*!< bit:      9  BOD33 Ready                        */

+    uint32_t BOD33DET:1;       /*!< bit:     10  BOD33 Detection                    */

+    uint32_t B33SRDY:1;        /*!< bit:     11  BOD33 Synchronization Ready        */

+    uint32_t BOD12RDY:1;       /*!< bit:     12  BOD12 Ready                        */

+    uint32_t BOD12DET:1;       /*!< bit:     13  BOD12 Detection                    */

+    uint32_t B12SRDY:1;        /*!< bit:     14  BOD12 Synchronization Ready        */

+    uint32_t :17;              /*!< bit: 15..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} SYSCTRL_INTFLAG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SYSCTRL_INTFLAG_OFFSET      0x08         /**< \brief (SYSCTRL_INTFLAG offset) Interrupt Flag Status and Clear Register */

+#define SYSCTRL_INTFLAG_RESETVALUE  0x00000000   /**< \brief (SYSCTRL_INTFLAG reset_value) Interrupt Flag Status and Clear Register */

+

+#define SYSCTRL_INTFLAG_XOSCRDY_Pos 0            /**< \brief (SYSCTRL_INTFLAG) XOSC Ready */

+#define SYSCTRL_INTFLAG_XOSCRDY     (0x1u << SYSCTRL_INTFLAG_XOSCRDY_Pos)

+#define SYSCTRL_INTFLAG_XOSC32KRDY_Pos 1            /**< \brief (SYSCTRL_INTFLAG) XOSC32K Ready */

+#define SYSCTRL_INTFLAG_XOSC32KRDY  (0x1u << SYSCTRL_INTFLAG_XOSC32KRDY_Pos)

+#define SYSCTRL_INTFLAG_OSC32KRDY_Pos 2            /**< \brief (SYSCTRL_INTFLAG) OSC32K Ready */

+#define SYSCTRL_INTFLAG_OSC32KRDY   (0x1u << SYSCTRL_INTFLAG_OSC32KRDY_Pos)

+#define SYSCTRL_INTFLAG_OSC8MRDY_Pos 3            /**< \brief (SYSCTRL_INTFLAG) OSC8M Ready */

+#define SYSCTRL_INTFLAG_OSC8MRDY    (0x1u << SYSCTRL_INTFLAG_OSC8MRDY_Pos)

+#define SYSCTRL_INTFLAG_DFLLRDY_Pos 4            /**< \brief (SYSCTRL_INTFLAG) DFLL Ready */

+#define SYSCTRL_INTFLAG_DFLLRDY     (0x1u << SYSCTRL_INTFLAG_DFLLRDY_Pos)

+#define SYSCTRL_INTFLAG_DFLLOOB_Pos 5            /**< \brief (SYSCTRL_INTFLAG) DFLL Out Of Bounds */

+#define SYSCTRL_INTFLAG_DFLLOOB     (0x1u << SYSCTRL_INTFLAG_DFLLOOB_Pos)

+#define SYSCTRL_INTFLAG_DFLLLCKF_Pos 6            /**< \brief (SYSCTRL_INTFLAG) DFLL Lock Fine */

+#define SYSCTRL_INTFLAG_DFLLLCKF    (0x1u << SYSCTRL_INTFLAG_DFLLLCKF_Pos)

+#define SYSCTRL_INTFLAG_DFLLLCKC_Pos 7            /**< \brief (SYSCTRL_INTFLAG) DFLL Lock Coarse */

+#define SYSCTRL_INTFLAG_DFLLLCKC    (0x1u << SYSCTRL_INTFLAG_DFLLLCKC_Pos)

+#define SYSCTRL_INTFLAG_DFLLRCS_Pos 8            /**< \brief (SYSCTRL_INTFLAG) DFLL Reference Clock Stopped */

+#define SYSCTRL_INTFLAG_DFLLRCS     (0x1u << SYSCTRL_INTFLAG_DFLLRCS_Pos)

+#define SYSCTRL_INTFLAG_BOD33RDY_Pos 9            /**< \brief (SYSCTRL_INTFLAG) BOD33 Ready */

+#define SYSCTRL_INTFLAG_BOD33RDY    (0x1u << SYSCTRL_INTFLAG_BOD33RDY_Pos)

+#define SYSCTRL_INTFLAG_BOD33DET_Pos 10           /**< \brief (SYSCTRL_INTFLAG) BOD33 Detection */

+#define SYSCTRL_INTFLAG_BOD33DET    (0x1u << SYSCTRL_INTFLAG_BOD33DET_Pos)

+#define SYSCTRL_INTFLAG_B33SRDY_Pos 11           /**< \brief (SYSCTRL_INTFLAG) BOD33 Synchronization Ready */

+#define SYSCTRL_INTFLAG_B33SRDY     (0x1u << SYSCTRL_INTFLAG_B33SRDY_Pos)

+#define SYSCTRL_INTFLAG_BOD12RDY_Pos 12           /**< \brief (SYSCTRL_INTFLAG) BOD12 Ready */

+#define SYSCTRL_INTFLAG_BOD12RDY    (0x1u << SYSCTRL_INTFLAG_BOD12RDY_Pos)

+#define SYSCTRL_INTFLAG_BOD12DET_Pos 13           /**< \brief (SYSCTRL_INTFLAG) BOD12 Detection */

+#define SYSCTRL_INTFLAG_BOD12DET    (0x1u << SYSCTRL_INTFLAG_BOD12DET_Pos)

+#define SYSCTRL_INTFLAG_B12SRDY_Pos 14           /**< \brief (SYSCTRL_INTFLAG) BOD12 Synchronization Ready */

+#define SYSCTRL_INTFLAG_B12SRDY     (0x1u << SYSCTRL_INTFLAG_B12SRDY_Pos)

+#define SYSCTRL_INTFLAG_MASK        0x00007FFFu  /**< \brief (SYSCTRL_INTFLAG) MASK Register */

+

+/* -------- SYSCTRL_PCLKSR : (SYSCTRL Offset: 0x0C) (R/  32) Power and Clocks Status Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t XOSCRDY:1;        /*!< bit:      0  XOSC Ready                         */

+    uint32_t XOSC32KRDY:1;     /*!< bit:      1  XOSC32K Ready                      */

+    uint32_t OSC32KRDY:1;      /*!< bit:      2  OSC32K Ready                       */

+    uint32_t OSC8MRDY:1;       /*!< bit:      3  OSC8M Ready                        */

+    uint32_t DFLLRDY:1;        /*!< bit:      4  DFLL Ready                         */

+    uint32_t DFLLOOB:1;        /*!< bit:      5  DFLL Out Of Bounds                 */

+    uint32_t DFLLLCKF:1;       /*!< bit:      6  DFLL Lock Fine                     */

+    uint32_t DFLLLCKC:1;       /*!< bit:      7  DFLL Lock Coarse                   */

+    uint32_t DFLLRCS:1;        /*!< bit:      8  DFLL Reference Clock Stopped       */

+    uint32_t BOD33RDY:1;       /*!< bit:      9  BOD33 Ready                        */

+    uint32_t BOD33DET:1;       /*!< bit:     10  BOD33 Detection                    */

+    uint32_t B33SRDY:1;        /*!< bit:     11  BOD33 Synchronization Ready        */

+    uint32_t BOD12RDY:1;       /*!< bit:     12  BOD12 Ready                        */

+    uint32_t BOD12DET:1;       /*!< bit:     13  BOD12 Detection                    */

+    uint32_t B12SRDY:1;        /*!< bit:     14  BOD12 Synchronization Ready        */

+    uint32_t :17;              /*!< bit: 15..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} SYSCTRL_PCLKSR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SYSCTRL_PCLKSR_OFFSET       0x0C         /**< \brief (SYSCTRL_PCLKSR offset) Power and Clocks Status Register */

+#define SYSCTRL_PCLKSR_RESETVALUE   0x00000000   /**< \brief (SYSCTRL_PCLKSR reset_value) Power and Clocks Status Register */

+

+#define SYSCTRL_PCLKSR_XOSCRDY_Pos  0            /**< \brief (SYSCTRL_PCLKSR) XOSC Ready */

+#define SYSCTRL_PCLKSR_XOSCRDY      (0x1u << SYSCTRL_PCLKSR_XOSCRDY_Pos)

+#define SYSCTRL_PCLKSR_XOSC32KRDY_Pos 1            /**< \brief (SYSCTRL_PCLKSR) XOSC32K Ready */

+#define SYSCTRL_PCLKSR_XOSC32KRDY   (0x1u << SYSCTRL_PCLKSR_XOSC32KRDY_Pos)

+#define SYSCTRL_PCLKSR_OSC32KRDY_Pos 2            /**< \brief (SYSCTRL_PCLKSR) OSC32K Ready */

+#define SYSCTRL_PCLKSR_OSC32KRDY    (0x1u << SYSCTRL_PCLKSR_OSC32KRDY_Pos)

+#define SYSCTRL_PCLKSR_OSC8MRDY_Pos 3            /**< \brief (SYSCTRL_PCLKSR) OSC8M Ready */

+#define SYSCTRL_PCLKSR_OSC8MRDY     (0x1u << SYSCTRL_PCLKSR_OSC8MRDY_Pos)

+#define SYSCTRL_PCLKSR_DFLLRDY_Pos  4            /**< \brief (SYSCTRL_PCLKSR) DFLL Ready */

+#define SYSCTRL_PCLKSR_DFLLRDY      (0x1u << SYSCTRL_PCLKSR_DFLLRDY_Pos)

+#define SYSCTRL_PCLKSR_DFLLOOB_Pos  5            /**< \brief (SYSCTRL_PCLKSR) DFLL Out Of Bounds */

+#define SYSCTRL_PCLKSR_DFLLOOB      (0x1u << SYSCTRL_PCLKSR_DFLLOOB_Pos)

+#define SYSCTRL_PCLKSR_DFLLLCKF_Pos 6            /**< \brief (SYSCTRL_PCLKSR) DFLL Lock Fine */

+#define SYSCTRL_PCLKSR_DFLLLCKF     (0x1u << SYSCTRL_PCLKSR_DFLLLCKF_Pos)

+#define SYSCTRL_PCLKSR_DFLLLCKC_Pos 7            /**< \brief (SYSCTRL_PCLKSR) DFLL Lock Coarse */

+#define SYSCTRL_PCLKSR_DFLLLCKC     (0x1u << SYSCTRL_PCLKSR_DFLLLCKC_Pos)

+#define SYSCTRL_PCLKSR_DFLLRCS_Pos  8            /**< \brief (SYSCTRL_PCLKSR) DFLL Reference Clock Stopped */

+#define SYSCTRL_PCLKSR_DFLLRCS      (0x1u << SYSCTRL_PCLKSR_DFLLRCS_Pos)

+#define SYSCTRL_PCLKSR_BOD33RDY_Pos 9            /**< \brief (SYSCTRL_PCLKSR) BOD33 Ready */

+#define SYSCTRL_PCLKSR_BOD33RDY     (0x1u << SYSCTRL_PCLKSR_BOD33RDY_Pos)

+#define SYSCTRL_PCLKSR_BOD33DET_Pos 10           /**< \brief (SYSCTRL_PCLKSR) BOD33 Detection */

+#define SYSCTRL_PCLKSR_BOD33DET     (0x1u << SYSCTRL_PCLKSR_BOD33DET_Pos)

+#define SYSCTRL_PCLKSR_B33SRDY_Pos  11           /**< \brief (SYSCTRL_PCLKSR) BOD33 Synchronization Ready */

+#define SYSCTRL_PCLKSR_B33SRDY      (0x1u << SYSCTRL_PCLKSR_B33SRDY_Pos)

+#define SYSCTRL_PCLKSR_BOD12RDY_Pos 12           /**< \brief (SYSCTRL_PCLKSR) BOD12 Ready */

+#define SYSCTRL_PCLKSR_BOD12RDY     (0x1u << SYSCTRL_PCLKSR_BOD12RDY_Pos)

+#define SYSCTRL_PCLKSR_BOD12DET_Pos 13           /**< \brief (SYSCTRL_PCLKSR) BOD12 Detection */

+#define SYSCTRL_PCLKSR_BOD12DET     (0x1u << SYSCTRL_PCLKSR_BOD12DET_Pos)

+#define SYSCTRL_PCLKSR_B12SRDY_Pos  14           /**< \brief (SYSCTRL_PCLKSR) BOD12 Synchronization Ready */

+#define SYSCTRL_PCLKSR_B12SRDY      (0x1u << SYSCTRL_PCLKSR_B12SRDY_Pos)

+#define SYSCTRL_PCLKSR_MASK         0x00007FFFu  /**< \brief (SYSCTRL_PCLKSR) MASK Register */

+

+/* -------- SYSCTRL_XOSC : (SYSCTRL Offset: 0x10) (R/W 16) XOSC Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t :1;               /*!< bit:      0  Reserved                           */

+    uint16_t ENABLE:1;         /*!< bit:      1  Enable                             */

+    uint16_t XTALEN:1;         /*!< bit:      2  Crystal Oscillator Enable          */

+    uint16_t :3;               /*!< bit:  3.. 5  Reserved                           */

+    uint16_t RUNSTDBY:1;       /*!< bit:      6  Run during Standby                 */

+    uint16_t ONDEMAND:1;       /*!< bit:      7  Enable on Demand                   */

+    uint16_t GAIN:3;           /*!< bit:  8..10  Gain Value                         */

+    uint16_t AMPGC:1;          /*!< bit:     11  Automatic Amplitude Gain Control   */

+    uint16_t STARTUP:4;        /*!< bit: 12..15  Start-Up Time                      */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} SYSCTRL_XOSC_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SYSCTRL_XOSC_OFFSET         0x10         /**< \brief (SYSCTRL_XOSC offset) XOSC Control Register */

+#define SYSCTRL_XOSC_RESETVALUE     0x0080       /**< \brief (SYSCTRL_XOSC reset_value) XOSC Control Register */

+

+#define SYSCTRL_XOSC_ENABLE_Pos     1            /**< \brief (SYSCTRL_XOSC) Enable */

+#define SYSCTRL_XOSC_ENABLE         (0x1u << SYSCTRL_XOSC_ENABLE_Pos)

+#define SYSCTRL_XOSC_XTALEN_Pos     2            /**< \brief (SYSCTRL_XOSC) Crystal Oscillator Enable */

+#define SYSCTRL_XOSC_XTALEN         (0x1u << SYSCTRL_XOSC_XTALEN_Pos)

+#define SYSCTRL_XOSC_RUNSTDBY_Pos   6            /**< \brief (SYSCTRL_XOSC) Run during Standby */

+#define SYSCTRL_XOSC_RUNSTDBY       (0x1u << SYSCTRL_XOSC_RUNSTDBY_Pos)

+#define SYSCTRL_XOSC_ONDEMAND_Pos   7            /**< \brief (SYSCTRL_XOSC) Enable on Demand */

+#define SYSCTRL_XOSC_ONDEMAND       (0x1u << SYSCTRL_XOSC_ONDEMAND_Pos)

+#define SYSCTRL_XOSC_GAIN_Pos       8            /**< \brief (SYSCTRL_XOSC) Gain Value */

+#define SYSCTRL_XOSC_GAIN_Msk       (0x7u << SYSCTRL_XOSC_GAIN_Pos)

+#define SYSCTRL_XOSC_GAIN(value)    ((SYSCTRL_XOSC_GAIN_Msk & ((value) << SYSCTRL_XOSC_GAIN_Pos)))

+#define SYSCTRL_XOSC_AMPGC_Pos      11           /**< \brief (SYSCTRL_XOSC) Automatic Amplitude Gain Control */

+#define SYSCTRL_XOSC_AMPGC          (0x1u << SYSCTRL_XOSC_AMPGC_Pos)

+#define SYSCTRL_XOSC_STARTUP_Pos    12           /**< \brief (SYSCTRL_XOSC) Start-Up Time */

+#define SYSCTRL_XOSC_STARTUP_Msk    (0xFu << SYSCTRL_XOSC_STARTUP_Pos)

+#define SYSCTRL_XOSC_STARTUP(value) ((SYSCTRL_XOSC_STARTUP_Msk & ((value) << SYSCTRL_XOSC_STARTUP_Pos)))

+#define SYSCTRL_XOSC_MASK           0xFFC6u      /**< \brief (SYSCTRL_XOSC) MASK Register */

+

+/* -------- SYSCTRL_XOSC32K : (SYSCTRL Offset: 0x14) (R/W 16) XOSC32K Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t :1;               /*!< bit:      0  Reserved                           */

+    uint16_t ENABLE:1;         /*!< bit:      1  Enable                             */

+    uint16_t XTALEN:1;         /*!< bit:      2  Crystal Oscillator Enable          */

+    uint16_t EN32K:1;          /*!< bit:      3  32kHz Output Enable                */

+    uint16_t EN1K:1;           /*!< bit:      4  1kHz Output Enable                 */

+    uint16_t AAMPEN:1;         /*!< bit:      5  Automatic Amplitude Control Enable */

+    uint16_t RUNSTDBY:1;       /*!< bit:      6  Run during Standby                 */

+    uint16_t ONDEMAND:1;       /*!< bit:      7  Enable on Demand                   */

+    uint16_t STARTUP:3;        /*!< bit:  8..10  Start-Up Time                      */

+    uint16_t :1;               /*!< bit:     11  Reserved                           */

+    uint16_t WRTLOCK:1;        /*!< bit:     12  Write Lock                         */

+    uint16_t :3;               /*!< bit: 13..15  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} SYSCTRL_XOSC32K_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SYSCTRL_XOSC32K_OFFSET      0x14         /**< \brief (SYSCTRL_XOSC32K offset) XOSC32K Control Register */

+#define SYSCTRL_XOSC32K_RESETVALUE  0x0080       /**< \brief (SYSCTRL_XOSC32K reset_value) XOSC32K Control Register */

+

+#define SYSCTRL_XOSC32K_ENABLE_Pos  1            /**< \brief (SYSCTRL_XOSC32K) Enable */

+#define SYSCTRL_XOSC32K_ENABLE      (0x1u << SYSCTRL_XOSC32K_ENABLE_Pos)

+#define SYSCTRL_XOSC32K_XTALEN_Pos  2            /**< \brief (SYSCTRL_XOSC32K) Crystal Oscillator Enable */

+#define SYSCTRL_XOSC32K_XTALEN      (0x1u << SYSCTRL_XOSC32K_XTALEN_Pos)

+#define SYSCTRL_XOSC32K_EN32K_Pos   3            /**< \brief (SYSCTRL_XOSC32K) 32kHz Output Enable */

+#define SYSCTRL_XOSC32K_EN32K       (0x1u << SYSCTRL_XOSC32K_EN32K_Pos)

+#define SYSCTRL_XOSC32K_EN1K_Pos    4            /**< \brief (SYSCTRL_XOSC32K) 1kHz Output Enable */

+#define SYSCTRL_XOSC32K_EN1K        (0x1u << SYSCTRL_XOSC32K_EN1K_Pos)

+#define SYSCTRL_XOSC32K_AAMPEN_Pos  5            /**< \brief (SYSCTRL_XOSC32K) Automatic Amplitude Control Enable */

+#define SYSCTRL_XOSC32K_AAMPEN      (0x1u << SYSCTRL_XOSC32K_AAMPEN_Pos)

+#define SYSCTRL_XOSC32K_RUNSTDBY_Pos 6            /**< \brief (SYSCTRL_XOSC32K) Run during Standby */

+#define SYSCTRL_XOSC32K_RUNSTDBY    (0x1u << SYSCTRL_XOSC32K_RUNSTDBY_Pos)

+#define SYSCTRL_XOSC32K_ONDEMAND_Pos 7            /**< \brief (SYSCTRL_XOSC32K) Enable on Demand */

+#define SYSCTRL_XOSC32K_ONDEMAND    (0x1u << SYSCTRL_XOSC32K_ONDEMAND_Pos)

+#define SYSCTRL_XOSC32K_STARTUP_Pos 8            /**< \brief (SYSCTRL_XOSC32K) Start-Up Time */

+#define SYSCTRL_XOSC32K_STARTUP_Msk (0x7u << SYSCTRL_XOSC32K_STARTUP_Pos)

+#define SYSCTRL_XOSC32K_STARTUP(value) ((SYSCTRL_XOSC32K_STARTUP_Msk & ((value) << SYSCTRL_XOSC32K_STARTUP_Pos)))

+#define SYSCTRL_XOSC32K_WRTLOCK_Pos 12           /**< \brief (SYSCTRL_XOSC32K) Write Lock */

+#define SYSCTRL_XOSC32K_WRTLOCK     (0x1u << SYSCTRL_XOSC32K_WRTLOCK_Pos)

+#define SYSCTRL_XOSC32K_MASK        0x17FEu      /**< \brief (SYSCTRL_XOSC32K) MASK Register */

+

+/* -------- SYSCTRL_OSC32K : (SYSCTRL Offset: 0x18) (R/W 32) OSC32K Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t :1;               /*!< bit:      0  Reserved                           */

+    uint32_t ENABLE:1;         /*!< bit:      1  Enable                             */

+    uint32_t EN32K:1;          /*!< bit:      2  32kHz Output Enable                */

+    uint32_t EN1K:1;           /*!< bit:      3  1kHz Output Enable                 */

+    uint32_t :2;               /*!< bit:  4.. 5  Reserved                           */

+    uint32_t RUNSTDBY:1;       /*!< bit:      6  Run during Standby                 */

+    uint32_t ONDEMAND:1;       /*!< bit:      7  Enable on Demand                   */

+    uint32_t STARTUP:3;        /*!< bit:  8..10  Start-Up Time                      */

+    uint32_t :1;               /*!< bit:     11  Reserved                           */

+    uint32_t WRTLOCK:1;        /*!< bit:     12  Write Lock                         */

+    uint32_t :3;               /*!< bit: 13..15  Reserved                           */

+    uint32_t CALIB:7;          /*!< bit: 16..22  Calibration Value                  */

+    uint32_t :9;               /*!< bit: 23..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} SYSCTRL_OSC32K_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SYSCTRL_OSC32K_OFFSET       0x18         /**< \brief (SYSCTRL_OSC32K offset) OSC32K Control Register */

+#define SYSCTRL_OSC32K_RESETVALUE   0x003F0080   /**< \brief (SYSCTRL_OSC32K reset_value) OSC32K Control Register */

+

+#define SYSCTRL_OSC32K_ENABLE_Pos   1            /**< \brief (SYSCTRL_OSC32K) Enable */

+#define SYSCTRL_OSC32K_ENABLE       (0x1u << SYSCTRL_OSC32K_ENABLE_Pos)

+#define SYSCTRL_OSC32K_EN32K_Pos    2            /**< \brief (SYSCTRL_OSC32K) 32kHz Output Enable */

+#define SYSCTRL_OSC32K_EN32K        (0x1u << SYSCTRL_OSC32K_EN32K_Pos)

+#define SYSCTRL_OSC32K_EN1K_Pos     3            /**< \brief (SYSCTRL_OSC32K) 1kHz Output Enable */

+#define SYSCTRL_OSC32K_EN1K         (0x1u << SYSCTRL_OSC32K_EN1K_Pos)

+#define SYSCTRL_OSC32K_RUNSTDBY_Pos 6            /**< \brief (SYSCTRL_OSC32K) Run during Standby */

+#define SYSCTRL_OSC32K_RUNSTDBY     (0x1u << SYSCTRL_OSC32K_RUNSTDBY_Pos)

+#define SYSCTRL_OSC32K_ONDEMAND_Pos 7            /**< \brief (SYSCTRL_OSC32K) Enable on Demand */

+#define SYSCTRL_OSC32K_ONDEMAND     (0x1u << SYSCTRL_OSC32K_ONDEMAND_Pos)

+#define SYSCTRL_OSC32K_STARTUP_Pos  8            /**< \brief (SYSCTRL_OSC32K) Start-Up Time */

+#define SYSCTRL_OSC32K_STARTUP_Msk  (0x7u << SYSCTRL_OSC32K_STARTUP_Pos)

+#define SYSCTRL_OSC32K_STARTUP(value) ((SYSCTRL_OSC32K_STARTUP_Msk & ((value) << SYSCTRL_OSC32K_STARTUP_Pos)))

+#define SYSCTRL_OSC32K_WRTLOCK_Pos  12           /**< \brief (SYSCTRL_OSC32K) Write Lock */

+#define SYSCTRL_OSC32K_WRTLOCK      (0x1u << SYSCTRL_OSC32K_WRTLOCK_Pos)

+#define SYSCTRL_OSC32K_CALIB_Pos    16           /**< \brief (SYSCTRL_OSC32K) Calibration Value */

+#define SYSCTRL_OSC32K_CALIB_Msk    (0x7Fu << SYSCTRL_OSC32K_CALIB_Pos)

+#define SYSCTRL_OSC32K_CALIB(value) ((SYSCTRL_OSC32K_CALIB_Msk & ((value) << SYSCTRL_OSC32K_CALIB_Pos)))

+#define SYSCTRL_OSC32K_MASK         0x007F17CEu  /**< \brief (SYSCTRL_OSC32K) MASK Register */

+

+/* -------- SYSCTRL_OSCULP32K : (SYSCTRL Offset: 0x1C) (R/W  8) OSCULP32K Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  CALIB:5;          /*!< bit:  0.. 4  Calibration Value                  */

+    uint8_t  :2;               /*!< bit:  5.. 6  Reserved                           */

+    uint8_t  WRTLOCK:1;        /*!< bit:      7  Write Lock                         */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} SYSCTRL_OSCULP32K_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SYSCTRL_OSCULP32K_OFFSET    0x1C         /**< \brief (SYSCTRL_OSCULP32K offset) OSCULP32K Control Register */

+#define SYSCTRL_OSCULP32K_RESETVALUE 0x0F         /**< \brief (SYSCTRL_OSCULP32K reset_value) OSCULP32K Control Register */

+

+#define SYSCTRL_OSCULP32K_CALIB_Pos 0            /**< \brief (SYSCTRL_OSCULP32K) Calibration Value */

+#define SYSCTRL_OSCULP32K_CALIB_Msk (0x1Fu << SYSCTRL_OSCULP32K_CALIB_Pos)

+#define SYSCTRL_OSCULP32K_CALIB(value) ((SYSCTRL_OSCULP32K_CALIB_Msk & ((value) << SYSCTRL_OSCULP32K_CALIB_Pos)))

+#define SYSCTRL_OSCULP32K_WRTLOCK_Pos 7            /**< \brief (SYSCTRL_OSCULP32K) Write Lock */

+#define SYSCTRL_OSCULP32K_WRTLOCK   (0x1u << SYSCTRL_OSCULP32K_WRTLOCK_Pos)

+#define SYSCTRL_OSCULP32K_MASK      0x9Fu        /**< \brief (SYSCTRL_OSCULP32K) MASK Register */

+

+/* -------- SYSCTRL_OSC8M : (SYSCTRL Offset: 0x20) (R/W 32) OSC8M Control Register A -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t :1;               /*!< bit:      0  Reserved                           */

+    uint32_t ENABLE:1;         /*!< bit:      1  Enable                             */

+    uint32_t :4;               /*!< bit:  2.. 5  Reserved                           */

+    uint32_t RUNSTDBY:1;       /*!< bit:      6  Run during Standby                 */

+    uint32_t ONDEMAND:1;       /*!< bit:      7  Enable on Demand                   */

+    uint32_t PRESC:2;          /*!< bit:  8.. 9  Prescaler Select                   */

+    uint32_t :6;               /*!< bit: 10..15  Reserved                           */

+    uint32_t CALIB:12;         /*!< bit: 16..27  Calibration Value                  */

+    uint32_t :2;               /*!< bit: 28..29  Reserved                           */

+    uint32_t FRANGE:2;         /*!< bit: 30..31  Frequency Range                    */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} SYSCTRL_OSC8M_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SYSCTRL_OSC8M_OFFSET        0x20         /**< \brief (SYSCTRL_OSC8M offset) OSC8M Control Register A */

+#define SYSCTRL_OSC8M_RESETVALUE    0x00000080   /**< \brief (SYSCTRL_OSC8M reset_value) OSC8M Control Register A */

+

+#define SYSCTRL_OSC8M_ENABLE_Pos    1            /**< \brief (SYSCTRL_OSC8M) Enable */

+#define SYSCTRL_OSC8M_ENABLE        (0x1u << SYSCTRL_OSC8M_ENABLE_Pos)

+#define SYSCTRL_OSC8M_RUNSTDBY_Pos  6            /**< \brief (SYSCTRL_OSC8M) Run during Standby */

+#define SYSCTRL_OSC8M_RUNSTDBY      (0x1u << SYSCTRL_OSC8M_RUNSTDBY_Pos)

+#define SYSCTRL_OSC8M_ONDEMAND_Pos  7            /**< \brief (SYSCTRL_OSC8M) Enable on Demand */

+#define SYSCTRL_OSC8M_ONDEMAND      (0x1u << SYSCTRL_OSC8M_ONDEMAND_Pos)

+#define SYSCTRL_OSC8M_PRESC_Pos     8            /**< \brief (SYSCTRL_OSC8M) Prescaler Select */

+#define SYSCTRL_OSC8M_PRESC_Msk     (0x3u << SYSCTRL_OSC8M_PRESC_Pos)

+#define SYSCTRL_OSC8M_PRESC(value)  ((SYSCTRL_OSC8M_PRESC_Msk & ((value) << SYSCTRL_OSC8M_PRESC_Pos)))

+#define SYSCTRL_OSC8M_CALIB_Pos     16           /**< \brief (SYSCTRL_OSC8M) Calibration Value */

+#define SYSCTRL_OSC8M_CALIB_Msk     (0xFFFu << SYSCTRL_OSC8M_CALIB_Pos)

+#define SYSCTRL_OSC8M_CALIB(value)  ((SYSCTRL_OSC8M_CALIB_Msk & ((value) << SYSCTRL_OSC8M_CALIB_Pos)))

+#define SYSCTRL_OSC8M_FRANGE_Pos    30           /**< \brief (SYSCTRL_OSC8M) Frequency Range */

+#define SYSCTRL_OSC8M_FRANGE_Msk    (0x3u << SYSCTRL_OSC8M_FRANGE_Pos)

+#define SYSCTRL_OSC8M_FRANGE(value) ((SYSCTRL_OSC8M_FRANGE_Msk & ((value) << SYSCTRL_OSC8M_FRANGE_Pos)))

+#define SYSCTRL_OSC8M_MASK          0xCFFF03C2u  /**< \brief (SYSCTRL_OSC8M) MASK Register */

+

+/* -------- SYSCTRL_DFLLCTRL : (SYSCTRL Offset: 0x24) (R/W 16) DFLL Config Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t :1;               /*!< bit:      0  Reserved                           */

+    uint16_t ENABLE:1;         /*!< bit:      1  Enable                             */

+    uint16_t MODE:1;           /*!< bit:      2  Mode Selection                     */

+    uint16_t STABLE:1;         /*!< bit:      3  Stable Frequency                   */

+    uint16_t LLAW:1;           /*!< bit:      4  Lose Lock After Wake               */

+    uint16_t USBCRM:1;         /*!< bit:      5  USB Clock Recovery Mode            */

+    uint16_t RUNSTDBY:1;       /*!< bit:      6  Run during Standby                 */

+    uint16_t ONDEMAND:1;       /*!< bit:      7  Enable on Demand                   */

+    uint16_t CCDIS:1;          /*!< bit:      8  Chill Cycle Disable                */

+    uint16_t QLDIS:1;          /*!< bit:      9  Quick Lock Disable                 */

+    uint16_t :6;               /*!< bit: 10..15  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} SYSCTRL_DFLLCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SYSCTRL_DFLLCTRL_OFFSET     0x24         /**< \brief (SYSCTRL_DFLLCTRL offset) DFLL Config Register */

+#define SYSCTRL_DFLLCTRL_RESETVALUE 0x0080       /**< \brief (SYSCTRL_DFLLCTRL reset_value) DFLL Config Register */

+

+#define SYSCTRL_DFLLCTRL_ENABLE_Pos 1            /**< \brief (SYSCTRL_DFLLCTRL) Enable */

+#define SYSCTRL_DFLLCTRL_ENABLE     (0x1u << SYSCTRL_DFLLCTRL_ENABLE_Pos)

+#define SYSCTRL_DFLLCTRL_MODE_Pos   2            /**< \brief (SYSCTRL_DFLLCTRL) Mode Selection */

+#define SYSCTRL_DFLLCTRL_MODE       (0x1u << SYSCTRL_DFLLCTRL_MODE_Pos)

+#define SYSCTRL_DFLLCTRL_STABLE_Pos 3            /**< \brief (SYSCTRL_DFLLCTRL) Stable Frequency */

+#define SYSCTRL_DFLLCTRL_STABLE     (0x1u << SYSCTRL_DFLLCTRL_STABLE_Pos)

+#define SYSCTRL_DFLLCTRL_LLAW_Pos   4            /**< \brief (SYSCTRL_DFLLCTRL) Lose Lock After Wake */

+#define SYSCTRL_DFLLCTRL_LLAW       (0x1u << SYSCTRL_DFLLCTRL_LLAW_Pos)

+#define SYSCTRL_DFLLCTRL_USBCRM_Pos 5            /**< \brief (SYSCTRL_DFLLCTRL) USB Clock Recovery Mode */

+#define SYSCTRL_DFLLCTRL_USBCRM     (0x1u << SYSCTRL_DFLLCTRL_USBCRM_Pos)

+#define SYSCTRL_DFLLCTRL_RUNSTDBY_Pos 6            /**< \brief (SYSCTRL_DFLLCTRL) Run during Standby */

+#define SYSCTRL_DFLLCTRL_RUNSTDBY   (0x1u << SYSCTRL_DFLLCTRL_RUNSTDBY_Pos)

+#define SYSCTRL_DFLLCTRL_ONDEMAND_Pos 7            /**< \brief (SYSCTRL_DFLLCTRL) Enable on Demand */

+#define SYSCTRL_DFLLCTRL_ONDEMAND   (0x1u << SYSCTRL_DFLLCTRL_ONDEMAND_Pos)

+#define SYSCTRL_DFLLCTRL_CCDIS_Pos  8            /**< \brief (SYSCTRL_DFLLCTRL) Chill Cycle Disable */

+#define SYSCTRL_DFLLCTRL_CCDIS      (0x1u << SYSCTRL_DFLLCTRL_CCDIS_Pos)

+#define SYSCTRL_DFLLCTRL_QLDIS_Pos  9            /**< \brief (SYSCTRL_DFLLCTRL) Quick Lock Disable */

+#define SYSCTRL_DFLLCTRL_QLDIS      (0x1u << SYSCTRL_DFLLCTRL_QLDIS_Pos)

+#define SYSCTRL_DFLLCTRL_MASK       0x03FEu      /**< \brief (SYSCTRL_DFLLCTRL) MASK Register */

+

+/* -------- SYSCTRL_DFLLVAL : (SYSCTRL Offset: 0x28) (R/W 32) DFLL Calibration Value Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t FINE:8;           /*!< bit:  0.. 7  Fine Calibration Value             */

+    uint32_t COARSE:5;         /*!< bit:  8..12  Coarse Calibration Value           */

+    uint32_t :3;               /*!< bit: 13..15  Reserved                           */

+    uint32_t DIFF:16;          /*!< bit: 16..31  Multiplication Ratio Difference    */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} SYSCTRL_DFLLVAL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SYSCTRL_DFLLVAL_OFFSET      0x28         /**< \brief (SYSCTRL_DFLLVAL offset) DFLL Calibration Value Register */

+#define SYSCTRL_DFLLVAL_RESETVALUE  0x00000000   /**< \brief (SYSCTRL_DFLLVAL reset_value) DFLL Calibration Value Register */

+

+#define SYSCTRL_DFLLVAL_FINE_Pos    0            /**< \brief (SYSCTRL_DFLLVAL) Fine Calibration Value */

+#define SYSCTRL_DFLLVAL_FINE_Msk    (0xFFu << SYSCTRL_DFLLVAL_FINE_Pos)

+#define SYSCTRL_DFLLVAL_FINE(value) ((SYSCTRL_DFLLVAL_FINE_Msk & ((value) << SYSCTRL_DFLLVAL_FINE_Pos)))

+#define SYSCTRL_DFLLVAL_COARSE_Pos  8            /**< \brief (SYSCTRL_DFLLVAL) Coarse Calibration Value */

+#define SYSCTRL_DFLLVAL_COARSE_Msk  (0x1Fu << SYSCTRL_DFLLVAL_COARSE_Pos)

+#define SYSCTRL_DFLLVAL_COARSE(value) ((SYSCTRL_DFLLVAL_COARSE_Msk & ((value) << SYSCTRL_DFLLVAL_COARSE_Pos)))

+#define SYSCTRL_DFLLVAL_DIFF_Pos    16           /**< \brief (SYSCTRL_DFLLVAL) Multiplication Ratio Difference */

+#define SYSCTRL_DFLLVAL_DIFF_Msk    (0xFFFFu << SYSCTRL_DFLLVAL_DIFF_Pos)

+#define SYSCTRL_DFLLVAL_DIFF(value) ((SYSCTRL_DFLLVAL_DIFF_Msk & ((value) << SYSCTRL_DFLLVAL_DIFF_Pos)))

+#define SYSCTRL_DFLLVAL_MASK        0xFFFF1FFFu  /**< \brief (SYSCTRL_DFLLVAL) MASK Register */

+

+/* -------- SYSCTRL_DFLLMUL : (SYSCTRL Offset: 0x2C) (R/W 32) DFLL Multiplier Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t MUL:16;           /*!< bit:  0..15  Multiplication Value               */

+    uint32_t FSTEP:8;          /*!< bit: 16..23  Maximum Fine Step Size             */

+    uint32_t CSTEP:5;          /*!< bit: 24..28  Maximum Coarse Step Size           */

+    uint32_t :3;               /*!< bit: 29..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} SYSCTRL_DFLLMUL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SYSCTRL_DFLLMUL_OFFSET      0x2C         /**< \brief (SYSCTRL_DFLLMUL offset) DFLL Multiplier Register */

+#define SYSCTRL_DFLLMUL_RESETVALUE  0x00000000   /**< \brief (SYSCTRL_DFLLMUL reset_value) DFLL Multiplier Register */

+

+#define SYSCTRL_DFLLMUL_MUL_Pos     0            /**< \brief (SYSCTRL_DFLLMUL) Multiplication Value */

+#define SYSCTRL_DFLLMUL_MUL_Msk     (0xFFFFu << SYSCTRL_DFLLMUL_MUL_Pos)

+#define SYSCTRL_DFLLMUL_MUL(value)  ((SYSCTRL_DFLLMUL_MUL_Msk & ((value) << SYSCTRL_DFLLMUL_MUL_Pos)))

+#define SYSCTRL_DFLLMUL_FSTEP_Pos   16           /**< \brief (SYSCTRL_DFLLMUL) Maximum Fine Step Size */

+#define SYSCTRL_DFLLMUL_FSTEP_Msk   (0xFFu << SYSCTRL_DFLLMUL_FSTEP_Pos)

+#define SYSCTRL_DFLLMUL_FSTEP(value) ((SYSCTRL_DFLLMUL_FSTEP_Msk & ((value) << SYSCTRL_DFLLMUL_FSTEP_Pos)))

+#define SYSCTRL_DFLLMUL_CSTEP_Pos   24           /**< \brief (SYSCTRL_DFLLMUL) Maximum Coarse Step Size */

+#define SYSCTRL_DFLLMUL_CSTEP_Msk   (0x1Fu << SYSCTRL_DFLLMUL_CSTEP_Pos)

+#define SYSCTRL_DFLLMUL_CSTEP(value) ((SYSCTRL_DFLLMUL_CSTEP_Msk & ((value) << SYSCTRL_DFLLMUL_CSTEP_Pos)))

+#define SYSCTRL_DFLLMUL_MASK        0x1FFFFFFFu  /**< \brief (SYSCTRL_DFLLMUL) MASK Register */

+

+/* -------- SYSCTRL_DFLLSYNC : (SYSCTRL Offset: 0x30) (R/W  8) DFLL Synchronization Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  :7;               /*!< bit:  0.. 6  Reserved                           */

+    uint8_t  READREQ:1;        /*!< bit:      7  Read Request Synchronization       */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} SYSCTRL_DFLLSYNC_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SYSCTRL_DFLLSYNC_OFFSET     0x30         /**< \brief (SYSCTRL_DFLLSYNC offset) DFLL Synchronization Register */

+#define SYSCTRL_DFLLSYNC_RESETVALUE 0x00         /**< \brief (SYSCTRL_DFLLSYNC reset_value) DFLL Synchronization Register */

+

+#define SYSCTRL_DFLLSYNC_READREQ_Pos 7            /**< \brief (SYSCTRL_DFLLSYNC) Read Request Synchronization */

+#define SYSCTRL_DFLLSYNC_READREQ    (0x1u << SYSCTRL_DFLLSYNC_READREQ_Pos)

+#define SYSCTRL_DFLLSYNC_MASK       0x80u        /**< \brief (SYSCTRL_DFLLSYNC) MASK Register */

+

+/* -------- SYSCTRL_BOD33 : (SYSCTRL Offset: 0x34) (R/W 32) BOD33 Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t :1;               /*!< bit:      0  Reserved                           */

+    uint32_t ENABLE:1;         /*!< bit:      1  Enable                             */

+    uint32_t HYST:1;           /*!< bit:      2  Hysteresis Enable                  */

+    uint32_t ACTION:2;         /*!< bit:  3.. 4  Action when Threshold Crossed      */

+    uint32_t :1;               /*!< bit:      5  Reserved                           */

+    uint32_t RUNSTDBY:1;       /*!< bit:      6  Run during Standby                 */

+    uint32_t :1;               /*!< bit:      7  Reserved                           */

+    uint32_t MODE:1;           /*!< bit:      8  Operation Modes                    */

+    uint32_t CEN:1;            /*!< bit:      9  Clock Enable                       */

+    uint32_t :2;               /*!< bit: 10..11  Reserved                           */

+    uint32_t PSEL:4;           /*!< bit: 12..15  Prescaler Select                   */

+    uint32_t LEVEL:6;          /*!< bit: 16..21  Threshold Level                    */

+    uint32_t :10;              /*!< bit: 22..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} SYSCTRL_BOD33_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SYSCTRL_BOD33_OFFSET        0x34         /**< \brief (SYSCTRL_BOD33 offset) BOD33 Control Register */

+

+#define SYSCTRL_BOD33_ENABLE_Pos    1            /**< \brief (SYSCTRL_BOD33) Enable */

+#define SYSCTRL_BOD33_ENABLE        (0x1u << SYSCTRL_BOD33_ENABLE_Pos)

+#define SYSCTRL_BOD33_HYST_Pos      2            /**< \brief (SYSCTRL_BOD33) Hysteresis Enable */

+#define SYSCTRL_BOD33_HYST          (0x1u << SYSCTRL_BOD33_HYST_Pos)

+#define SYSCTRL_BOD33_ACTION_Pos    3            /**< \brief (SYSCTRL_BOD33) Action when Threshold Crossed */

+#define SYSCTRL_BOD33_ACTION_Msk    (0x3u << SYSCTRL_BOD33_ACTION_Pos)

+#define SYSCTRL_BOD33_ACTION(value) ((SYSCTRL_BOD33_ACTION_Msk & ((value) << SYSCTRL_BOD33_ACTION_Pos)))

+#define SYSCTRL_BOD33_RUNSTDBY_Pos  6            /**< \brief (SYSCTRL_BOD33) Run during Standby */

+#define SYSCTRL_BOD33_RUNSTDBY      (0x1u << SYSCTRL_BOD33_RUNSTDBY_Pos)

+#define SYSCTRL_BOD33_MODE_Pos      8            /**< \brief (SYSCTRL_BOD33) Operation Modes */

+#define SYSCTRL_BOD33_MODE          (0x1u << SYSCTRL_BOD33_MODE_Pos)

+#define SYSCTRL_BOD33_CEN_Pos       9            /**< \brief (SYSCTRL_BOD33) Clock Enable */

+#define SYSCTRL_BOD33_CEN           (0x1u << SYSCTRL_BOD33_CEN_Pos)

+#define SYSCTRL_BOD33_PSEL_Pos      12           /**< \brief (SYSCTRL_BOD33) Prescaler Select */

+#define SYSCTRL_BOD33_PSEL_Msk      (0xFu << SYSCTRL_BOD33_PSEL_Pos)

+#define SYSCTRL_BOD33_PSEL(value)   ((SYSCTRL_BOD33_PSEL_Msk & ((value) << SYSCTRL_BOD33_PSEL_Pos)))

+#define SYSCTRL_BOD33_LEVEL_Pos     16           /**< \brief (SYSCTRL_BOD33) Threshold Level */

+#define SYSCTRL_BOD33_LEVEL_Msk     (0x3Fu << SYSCTRL_BOD33_LEVEL_Pos)

+#define SYSCTRL_BOD33_LEVEL(value)  ((SYSCTRL_BOD33_LEVEL_Msk & ((value) << SYSCTRL_BOD33_LEVEL_Pos)))

+#define SYSCTRL_BOD33_MASK          0x003FF35Eu  /**< \brief (SYSCTRL_BOD33) MASK Register */

+

+/* -------- SYSCTRL_BOD12 : (SYSCTRL Offset: 0x38) (R/W 32) BOD12 Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t :1;               /*!< bit:      0  Reserved                           */

+    uint32_t ENABLE:1;         /*!< bit:      1  Enable                             */

+    uint32_t HYST:1;           /*!< bit:      2  Hysteresis Enable                  */

+    uint32_t ACTION:2;         /*!< bit:  3.. 4  Action when Threshold Crossed      */

+    uint32_t :1;               /*!< bit:      5  Reserved                           */

+    uint32_t RUNSTDBY:1;       /*!< bit:      6  Run during Standby                 */

+    uint32_t :1;               /*!< bit:      7  Reserved                           */

+    uint32_t MODE:1;           /*!< bit:      8  Operation Modes                    */

+    uint32_t CEN:1;            /*!< bit:      9  Clock Enable                       */

+    uint32_t :2;               /*!< bit: 10..11  Reserved                           */

+    uint32_t PSEL:4;           /*!< bit: 12..15  Prescaler Select                   */

+    uint32_t LEVEL:5;          /*!< bit: 16..20  Threshold Level                    */

+    uint32_t :11;              /*!< bit: 21..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} SYSCTRL_BOD12_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SYSCTRL_BOD12_OFFSET        0x38         /**< \brief (SYSCTRL_BOD12 offset) BOD12 Control Register */

+

+#define SYSCTRL_BOD12_ENABLE_Pos    1            /**< \brief (SYSCTRL_BOD12) Enable */

+#define SYSCTRL_BOD12_ENABLE        (0x1u << SYSCTRL_BOD12_ENABLE_Pos)

+#define SYSCTRL_BOD12_HYST_Pos      2            /**< \brief (SYSCTRL_BOD12) Hysteresis Enable */

+#define SYSCTRL_BOD12_HYST          (0x1u << SYSCTRL_BOD12_HYST_Pos)

+#define SYSCTRL_BOD12_ACTION_Pos    3            /**< \brief (SYSCTRL_BOD12) Action when Threshold Crossed */

+#define SYSCTRL_BOD12_ACTION_Msk    (0x3u << SYSCTRL_BOD12_ACTION_Pos)

+#define SYSCTRL_BOD12_ACTION(value) ((SYSCTRL_BOD12_ACTION_Msk & ((value) << SYSCTRL_BOD12_ACTION_Pos)))

+#define SYSCTRL_BOD12_RUNSTDBY_Pos  6            /**< \brief (SYSCTRL_BOD12) Run during Standby */

+#define SYSCTRL_BOD12_RUNSTDBY      (0x1u << SYSCTRL_BOD12_RUNSTDBY_Pos)

+#define SYSCTRL_BOD12_MODE_Pos      8            /**< \brief (SYSCTRL_BOD12) Operation Modes */

+#define SYSCTRL_BOD12_MODE          (0x1u << SYSCTRL_BOD12_MODE_Pos)

+#define SYSCTRL_BOD12_CEN_Pos       9            /**< \brief (SYSCTRL_BOD12) Clock Enable */

+#define SYSCTRL_BOD12_CEN           (0x1u << SYSCTRL_BOD12_CEN_Pos)

+#define SYSCTRL_BOD12_PSEL_Pos      12           /**< \brief (SYSCTRL_BOD12) Prescaler Select */

+#define SYSCTRL_BOD12_PSEL_Msk      (0xFu << SYSCTRL_BOD12_PSEL_Pos)

+#define SYSCTRL_BOD12_PSEL(value)   ((SYSCTRL_BOD12_PSEL_Msk & ((value) << SYSCTRL_BOD12_PSEL_Pos)))

+#define SYSCTRL_BOD12_LEVEL_Pos     16           /**< \brief (SYSCTRL_BOD12) Threshold Level */

+#define SYSCTRL_BOD12_LEVEL_Msk     (0x1Fu << SYSCTRL_BOD12_LEVEL_Pos)

+#define SYSCTRL_BOD12_LEVEL(value)  ((SYSCTRL_BOD12_LEVEL_Msk & ((value) << SYSCTRL_BOD12_LEVEL_Pos)))

+#define SYSCTRL_BOD12_MASK          0x001FF35Eu  /**< \brief (SYSCTRL_BOD12) MASK Register */

+

+/* -------- SYSCTRL_VREG : (SYSCTRL Offset: 0x3C) (R/W 16) VREG Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t :1;               /*!< bit:      0  Reserved                           */

+    uint16_t ENABLE:1;         /*!< bit:      1  Enable                             */

+    uint16_t :2;               /*!< bit:  2.. 3  Reserved                           */

+    uint16_t VDDMON:2;         /*!< bit:  4.. 5  Enable reset on core supply failure */

+    uint16_t RUNSTDBY:1;       /*!< bit:      6  Run during Standby                 */

+    uint16_t :1;               /*!< bit:      7  Reserved                           */

+    uint16_t LEVEL:3;          /*!< bit:  8..10  Output Voltage Level               */

+    uint16_t :1;               /*!< bit:     11  Reserved                           */

+    uint16_t CALIB:3;          /*!< bit: 12..14  Calibration Value                  */

+    uint16_t :1;               /*!< bit:     15  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} SYSCTRL_VREG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SYSCTRL_VREG_OFFSET         0x3C         /**< \brief (SYSCTRL_VREG offset) VREG Control Register */

+#define SYSCTRL_VREG_RESETVALUE     0x0000       /**< \brief (SYSCTRL_VREG reset_value) VREG Control Register */

+

+#define SYSCTRL_VREG_ENABLE_Pos     1            /**< \brief (SYSCTRL_VREG) Enable */

+#define SYSCTRL_VREG_ENABLE         (0x1u << SYSCTRL_VREG_ENABLE_Pos)

+#define SYSCTRL_VREG_VDDMON_Pos     4            /**< \brief (SYSCTRL_VREG) Enable reset on core supply failure */

+#define SYSCTRL_VREG_VDDMON_Msk     (0x3u << SYSCTRL_VREG_VDDMON_Pos)

+#define SYSCTRL_VREG_VDDMON(value)  ((SYSCTRL_VREG_VDDMON_Msk & ((value) << SYSCTRL_VREG_VDDMON_Pos)))

+#define SYSCTRL_VREG_RUNSTDBY_Pos   6            /**< \brief (SYSCTRL_VREG) Run during Standby */

+#define SYSCTRL_VREG_RUNSTDBY       (0x1u << SYSCTRL_VREG_RUNSTDBY_Pos)

+#define SYSCTRL_VREG_LEVEL_Pos      8            /**< \brief (SYSCTRL_VREG) Output Voltage Level */

+#define SYSCTRL_VREG_LEVEL_Msk      (0x7u << SYSCTRL_VREG_LEVEL_Pos)

+#define SYSCTRL_VREG_LEVEL(value)   ((SYSCTRL_VREG_LEVEL_Msk & ((value) << SYSCTRL_VREG_LEVEL_Pos)))

+#define SYSCTRL_VREG_CALIB_Pos      12           /**< \brief (SYSCTRL_VREG) Calibration Value */

+#define SYSCTRL_VREG_CALIB_Msk      (0x7u << SYSCTRL_VREG_CALIB_Pos)

+#define SYSCTRL_VREG_CALIB(value)   ((SYSCTRL_VREG_CALIB_Msk & ((value) << SYSCTRL_VREG_CALIB_Pos)))

+#define SYSCTRL_VREG_MASK           0x7772u      /**< \brief (SYSCTRL_VREG) MASK Register */

+

+/* -------- SYSCTRL_VREF : (SYSCTRL Offset: 0x40) (R/W 32) VREF Control Register A -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t :1;               /*!< bit:      0  Reserved                           */

+    uint32_t TSEN:1;           /*!< bit:      1  Temperature Sensor Output Enable   */

+    uint32_t BGOUTEN:1;        /*!< bit:      2  Bandgap Output Enable              */

+    uint32_t :13;              /*!< bit:  3..15  Reserved                           */

+    uint32_t CALIB:11;         /*!< bit: 16..26  Voltage Reference Calibration Value */

+    uint32_t :5;               /*!< bit: 27..31  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} SYSCTRL_VREF_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define SYSCTRL_VREF_OFFSET         0x40         /**< \brief (SYSCTRL_VREF offset) VREF Control Register A */

+#define SYSCTRL_VREF_RESETVALUE     0x00000000   /**< \brief (SYSCTRL_VREF reset_value) VREF Control Register A */

+

+#define SYSCTRL_VREF_TSEN_Pos       1            /**< \brief (SYSCTRL_VREF) Temperature Sensor Output Enable */

+#define SYSCTRL_VREF_TSEN           (0x1u << SYSCTRL_VREF_TSEN_Pos)

+#define SYSCTRL_VREF_BGOUTEN_Pos    2            /**< \brief (SYSCTRL_VREF) Bandgap Output Enable */

+#define SYSCTRL_VREF_BGOUTEN        (0x1u << SYSCTRL_VREF_BGOUTEN_Pos)

+#define SYSCTRL_VREF_CALIB_Pos      16           /**< \brief (SYSCTRL_VREF) Voltage Reference Calibration Value */

+#define SYSCTRL_VREF_CALIB_Msk      (0x7FFu << SYSCTRL_VREF_CALIB_Pos)

+#define SYSCTRL_VREF_CALIB(value)   ((SYSCTRL_VREF_CALIB_Msk & ((value) << SYSCTRL_VREF_CALIB_Pos)))

+#define SYSCTRL_VREF_MASK           0x07FF0006u  /**< \brief (SYSCTRL_VREF) MASK Register */

+

+/** \brief SYSCTRL hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct {

+  __IO SYSCTRL_INTENCLR_Type     INTENCLR;    /**< \brief Offset: 0x00 (R/W 32) Interrupt Enable Clear Register */

+  __IO SYSCTRL_INTENSET_Type     INTENSET;    /**< \brief Offset: 0x04 (R/W 32) Interrupt Enable Set Register */

+  __IO SYSCTRL_INTFLAG_Type      INTFLAG;     /**< \brief Offset: 0x08 (R/W 32) Interrupt Flag Status and Clear Register */

+  __I  SYSCTRL_PCLKSR_Type       PCLKSR;      /**< \brief Offset: 0x0C (R/  32) Power and Clocks Status Register */

+  __IO SYSCTRL_XOSC_Type         XOSC;        /**< \brief Offset: 0x10 (R/W 16) XOSC Control Register */

+       RoReg8                    Reserved1[0x2];

+  __IO SYSCTRL_XOSC32K_Type      XOSC32K;     /**< \brief Offset: 0x14 (R/W 16) XOSC32K Control Register */

+       RoReg8                    Reserved2[0x2];

+  __IO SYSCTRL_OSC32K_Type       OSC32K;      /**< \brief Offset: 0x18 (R/W 32) OSC32K Control Register */

+  __IO SYSCTRL_OSCULP32K_Type    OSCULP32K;   /**< \brief Offset: 0x1C (R/W  8) OSCULP32K Control Register */

+       RoReg8                    Reserved3[0x3];

+  __IO SYSCTRL_OSC8M_Type        OSC8M;       /**< \brief Offset: 0x20 (R/W 32) OSC8M Control Register A */

+  __IO SYSCTRL_DFLLCTRL_Type     DFLLCTRL;    /**< \brief Offset: 0x24 (R/W 16) DFLL Config Register */

+       RoReg8                    Reserved4[0x2];

+  __IO SYSCTRL_DFLLVAL_Type      DFLLVAL;     /**< \brief Offset: 0x28 (R/W 32) DFLL Calibration Value Register */

+  __IO SYSCTRL_DFLLMUL_Type      DFLLMUL;     /**< \brief Offset: 0x2C (R/W 32) DFLL Multiplier Register */

+  __IO SYSCTRL_DFLLSYNC_Type     DFLLSYNC;    /**< \brief Offset: 0x30 (R/W  8) DFLL Synchronization Register */

+       RoReg8                    Reserved5[0x3];

+  __IO SYSCTRL_BOD33_Type        BOD33;       /**< \brief Offset: 0x34 (R/W 32) BOD33 Control Register */

+  __IO SYSCTRL_BOD12_Type        BOD12;       /**< \brief Offset: 0x38 (R/W 32) BOD12 Control Register */

+  __IO SYSCTRL_VREG_Type         VREG;        /**< \brief Offset: 0x3C (R/W 16) VREG Control Register */

+       RoReg8                    Reserved6[0x2];

+  __IO SYSCTRL_VREF_Type         VREF;        /**< \brief Offset: 0x40 (R/W 32) VREF Control Register A */

+} Sysctrl;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/*@}*/

+

+#endif /* _SAMD20_SYSCTRL_COMPONENT_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_tc.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_tc.h
new file mode 100644
index 0000000..4295f41
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_tc.h
@@ -0,0 +1,607 @@
+/**

+ * \file

+ *

+ * \brief Component description for TC

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_TC_COMPONENT_

+#define _SAMD20_TC_COMPONENT_

+

+/* ========================================================================== */

+/**  SOFTWARE API DEFINITION FOR TC */

+/* ========================================================================== */

+/** \addtogroup SAMD20_TC Basic Timer Counter */

+/*@{*/

+

+#define REV_TC                      0x110

+

+/* -------- TC_CTRLA : (TC Offset: 0x00) (R/W 16) Control A Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t SWRST:1;          /*!< bit:      0  Software Reset                     */

+    uint16_t ENABLE:1;         /*!< bit:      1  Enable                             */

+    uint16_t MODE:2;           /*!< bit:  2.. 3  Timer Counter Mode                 */

+    uint16_t :1;               /*!< bit:      4  Reserved                           */

+    uint16_t WAVEGEN:2;        /*!< bit:  5.. 6  Waveform Generation Operation      */

+    uint16_t :1;               /*!< bit:      7  Reserved                           */

+    uint16_t PRESCALER:3;      /*!< bit:  8..10  Prescaler                          */

+    uint16_t RUNSTDBY:1;       /*!< bit:     11  Run during Standby                 */

+    uint16_t PRESCSYNC:2;      /*!< bit: 12..13  Prescaler and Counter Synchronization */

+    uint16_t :2;               /*!< bit: 14..15  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} TC_CTRLA_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define TC_CTRLA_OFFSET             0x00         /**< \brief (TC_CTRLA offset) Control A Register */

+#define TC_CTRLA_RESETVALUE         0x0000       /**< \brief (TC_CTRLA reset_value) Control A Register */

+

+#define TC_CTRLA_SWRST_Pos          0            /**< \brief (TC_CTRLA) Software Reset */

+#define TC_CTRLA_SWRST              (0x1u << TC_CTRLA_SWRST_Pos)

+#define TC_CTRLA_ENABLE_Pos         1            /**< \brief (TC_CTRLA) Enable */

+#define TC_CTRLA_ENABLE             (0x1u << TC_CTRLA_ENABLE_Pos)

+#define TC_CTRLA_MODE_Pos           2            /**< \brief (TC_CTRLA) Timer Counter Mode */

+#define TC_CTRLA_MODE_Msk           (0x3u << TC_CTRLA_MODE_Pos)

+#define TC_CTRLA_MODE(value)        ((TC_CTRLA_MODE_Msk & ((value) << TC_CTRLA_MODE_Pos)))

+#define   TC_CTRLA_MODE_COUNT16     (0x0u <<  2) /**< \brief (TC_CTRLA)  */

+#define   TC_CTRLA_MODE_COUNT8      (0x1u <<  2) /**< \brief (TC_CTRLA)  */

+#define   TC_CTRLA_MODE_COUNT32     (0x2u <<  2) /**< \brief (TC_CTRLA)  */

+#define TC_CTRLA_WAVEGEN_Pos        5            /**< \brief (TC_CTRLA) Waveform Generation Operation */

+#define TC_CTRLA_WAVEGEN_Msk        (0x3u << TC_CTRLA_WAVEGEN_Pos)

+#define TC_CTRLA_WAVEGEN(value)     ((TC_CTRLA_WAVEGEN_Msk & ((value) << TC_CTRLA_WAVEGEN_Pos)))

+#define   TC_CTRLA_WAVEGEN_NFRQ     (0x0u <<  5) /**< \brief (TC_CTRLA)  */

+#define   TC_CTRLA_WAVEGEN_MFRQ     (0x1u <<  5) /**< \brief (TC_CTRLA)  */

+#define   TC_CTRLA_WAVEGEN_NPWM     (0x2u <<  5) /**< \brief (TC_CTRLA)  */

+#define   TC_CTRLA_WAVEGEN_MPWM     (0x3u <<  5) /**< \brief (TC_CTRLA)  */

+#define TC_CTRLA_PRESCALER_Pos      8            /**< \brief (TC_CTRLA) Prescaler */

+#define TC_CTRLA_PRESCALER_Msk      (0x7u << TC_CTRLA_PRESCALER_Pos)

+#define TC_CTRLA_PRESCALER(value)   ((TC_CTRLA_PRESCALER_Msk & ((value) << TC_CTRLA_PRESCALER_Pos)))

+#define TC_CTRLA_RUNSTDBY_Pos       11           /**< \brief (TC_CTRLA) Run during Standby */

+#define TC_CTRLA_RUNSTDBY           (0x1u << TC_CTRLA_RUNSTDBY_Pos)

+#define TC_CTRLA_PRESCSYNC_Pos      12           /**< \brief (TC_CTRLA) Prescaler and Counter Synchronization */

+#define TC_CTRLA_PRESCSYNC_Msk      (0x3u << TC_CTRLA_PRESCSYNC_Pos)

+#define TC_CTRLA_PRESCSYNC(value)   ((TC_CTRLA_PRESCSYNC_Msk & ((value) << TC_CTRLA_PRESCSYNC_Pos)))

+#define   TC_CTRLA_PRESCSYNC_GCLK   (0x0u << 12) /**< \brief (TC_CTRLA)  */

+#define   TC_CTRLA_PRESCSYNC_PRESC  (0x1u << 12) /**< \brief (TC_CTRLA)  */

+#define   TC_CTRLA_PRESCSYNC_RESYNC (0x2u << 12) /**< \brief (TC_CTRLA)  */

+#define TC_CTRLA_MASK               0x3F6Fu      /**< \brief (TC_CTRLA) MASK Register */

+

+/* -------- TC_READREQ : (TC Offset: 0x02) (R/W 16) Read Request Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t ADDR:5;           /*!< bit:  0.. 4  Address                            */

+    uint16_t :9;               /*!< bit:  5..13  Reserved                           */

+    uint16_t RCONT:1;          /*!< bit:     14  Read Continuously                  */

+    uint16_t RREQ:1;           /*!< bit:     15  Read Request                       */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} TC_READREQ_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define TC_READREQ_OFFSET           0x02         /**< \brief (TC_READREQ offset) Read Request Register */

+#define TC_READREQ_RESETVALUE       0x0000       /**< \brief (TC_READREQ reset_value) Read Request Register */

+

+#define TC_READREQ_ADDR_Pos         0            /**< \brief (TC_READREQ) Address */

+#define TC_READREQ_ADDR_Msk         (0x1Fu << TC_READREQ_ADDR_Pos)

+#define TC_READREQ_ADDR(value)      ((TC_READREQ_ADDR_Msk & ((value) << TC_READREQ_ADDR_Pos)))

+#define TC_READREQ_RCONT_Pos        14           /**< \brief (TC_READREQ) Read Continuously */

+#define TC_READREQ_RCONT            (0x1u << TC_READREQ_RCONT_Pos)

+#define TC_READREQ_RREQ_Pos         15           /**< \brief (TC_READREQ) Read Request */

+#define TC_READREQ_RREQ             (0x1u << TC_READREQ_RREQ_Pos)

+#define TC_READREQ_MASK             0xC01Fu      /**< \brief (TC_READREQ) MASK Register */

+

+/* -------- TC_CTRLBCLR : (TC Offset: 0x04) (R/W  8) Control B Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  DIR:1;            /*!< bit:      0  Counter Direction                  */

+    uint8_t  :1;               /*!< bit:      1  Reserved                           */

+    uint8_t  ONESHOT:1;        /*!< bit:      2  One-Shot on Counter                */

+    uint8_t  :3;               /*!< bit:  3.. 5  Reserved                           */

+    uint8_t  CMD:2;            /*!< bit:  6.. 7  Command                            */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} TC_CTRLBCLR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define TC_CTRLBCLR_OFFSET          0x04         /**< \brief (TC_CTRLBCLR offset) Control B Clear Register */

+#define TC_CTRLBCLR_RESETVALUE      0x02         /**< \brief (TC_CTRLBCLR reset_value) Control B Clear Register */

+

+#define TC_CTRLBCLR_DIR_Pos         0            /**< \brief (TC_CTRLBCLR) Counter Direction */

+#define TC_CTRLBCLR_DIR             (0x1u << TC_CTRLBCLR_DIR_Pos)

+#define TC_CTRLBCLR_ONESHOT_Pos     2            /**< \brief (TC_CTRLBCLR) One-Shot on Counter */

+#define TC_CTRLBCLR_ONESHOT         (0x1u << TC_CTRLBCLR_ONESHOT_Pos)

+#define TC_CTRLBCLR_CMD_Pos         6            /**< \brief (TC_CTRLBCLR) Command */

+#define TC_CTRLBCLR_CMD_Msk         (0x3u << TC_CTRLBCLR_CMD_Pos)

+#define TC_CTRLBCLR_CMD(value)      ((TC_CTRLBCLR_CMD_Msk & ((value) << TC_CTRLBCLR_CMD_Pos)))

+#define   TC_CTRLBCLR_CMD_NONE      (0x0u <<  6) /**< \brief (TC_CTRLBCLR)  */

+#define   TC_CTRLBCLR_CMD_RETRIGGER (0x1u <<  6) /**< \brief (TC_CTRLBCLR)  */

+#define   TC_CTRLBCLR_CMD_STOP      (0x2u <<  6) /**< \brief (TC_CTRLBCLR)  */

+#define TC_CTRLBCLR_MASK            0xC5u        /**< \brief (TC_CTRLBCLR) MASK Register */

+

+/* -------- TC_CTRLBSET : (TC Offset: 0x05) (R/W  8) Control B Set Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  DIR:1;            /*!< bit:      0  Counter Direction                  */

+    uint8_t  :1;               /*!< bit:      1  Reserved                           */

+    uint8_t  ONESHOT:1;        /*!< bit:      2  One-Shot on Counter                */

+    uint8_t  :3;               /*!< bit:  3.. 5  Reserved                           */

+    uint8_t  CMD:2;            /*!< bit:  6.. 7  Command                            */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} TC_CTRLBSET_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define TC_CTRLBSET_OFFSET          0x05         /**< \brief (TC_CTRLBSET offset) Control B Set Register */

+#define TC_CTRLBSET_RESETVALUE      0x00         /**< \brief (TC_CTRLBSET reset_value) Control B Set Register */

+

+#define TC_CTRLBSET_DIR_Pos         0            /**< \brief (TC_CTRLBSET) Counter Direction */

+#define TC_CTRLBSET_DIR             (0x1u << TC_CTRLBSET_DIR_Pos)

+#define TC_CTRLBSET_ONESHOT_Pos     2            /**< \brief (TC_CTRLBSET) One-Shot on Counter */

+#define TC_CTRLBSET_ONESHOT         (0x1u << TC_CTRLBSET_ONESHOT_Pos)

+#define TC_CTRLBSET_CMD_Pos         6            /**< \brief (TC_CTRLBSET) Command */

+#define TC_CTRLBSET_CMD_Msk         (0x3u << TC_CTRLBSET_CMD_Pos)

+#define TC_CTRLBSET_CMD(value)      ((TC_CTRLBSET_CMD_Msk & ((value) << TC_CTRLBSET_CMD_Pos)))

+#define   TC_CTRLBSET_CMD_NONE      (0x0u <<  6) /**< \brief (TC_CTRLBSET)  */

+#define   TC_CTRLBSET_CMD_RETRIGGER (0x1u <<  6) /**< \brief (TC_CTRLBSET)  */

+#define   TC_CTRLBSET_CMD_STOP      (0x2u <<  6) /**< \brief (TC_CTRLBSET)  */

+#define TC_CTRLBSET_MASK            0xC5u        /**< \brief (TC_CTRLBSET) MASK Register */

+

+/* -------- TC_CTRLC : (TC Offset: 0x06) (R/W  8) Control C Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  INVEN:2;          /*!< bit:  0.. 1  Output Waveform Invert Enable      */

+    uint8_t  :2;               /*!< bit:  2.. 3  Reserved                           */

+    uint8_t  CPTEN:2;          /*!< bit:  4.. 5  Capture Channel  Enable            */

+    uint8_t  :2;               /*!< bit:  6.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} TC_CTRLC_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define TC_CTRLC_OFFSET             0x06         /**< \brief (TC_CTRLC offset) Control C Register */

+#define TC_CTRLC_RESETVALUE         0x00         /**< \brief (TC_CTRLC reset_value) Control C Register */

+

+#define TC_CTRLC_INVEN_Pos          0            /**< \brief (TC_CTRLC) Output Waveform Invert Enable */

+#define TC_CTRLC_INVEN_Msk          (0x3u << TC_CTRLC_INVEN_Pos)

+#define TC_CTRLC_INVEN(value)       ((TC_CTRLC_INVEN_Msk & ((value) << TC_CTRLC_INVEN_Pos)))

+#define TC_CTRLC_CPTEN_Pos          4            /**< \brief (TC_CTRLC) Capture Channel  Enable */

+#define TC_CTRLC_CPTEN_Msk          (0x3u << TC_CTRLC_CPTEN_Pos)

+#define TC_CTRLC_CPTEN(value)       ((TC_CTRLC_CPTEN_Msk & ((value) << TC_CTRLC_CPTEN_Pos)))

+#define TC_CTRLC_MASK               0x33u        /**< \brief (TC_CTRLC) MASK Register */

+

+/* -------- TC_DBGCTRL : (TC Offset: 0x08) (R/W  8) Debug Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  DBGRUN:1;         /*!< bit:      0  Run During Debug                   */

+    uint8_t  :7;               /*!< bit:  1.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} TC_DBGCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define TC_DBGCTRL_OFFSET           0x08         /**< \brief (TC_DBGCTRL offset) Debug Register */

+#define TC_DBGCTRL_RESETVALUE       0x00         /**< \brief (TC_DBGCTRL reset_value) Debug Register */

+

+#define TC_DBGCTRL_DBGRUN_Pos       0            /**< \brief (TC_DBGCTRL) Run During Debug */

+#define TC_DBGCTRL_DBGRUN           (0x1u << TC_DBGCTRL_DBGRUN_Pos)

+#define TC_DBGCTRL_MASK             0x01u        /**< \brief (TC_DBGCTRL) MASK Register */

+

+/* -------- TC_EVCTRL : (TC Offset: 0x0A) (R/W 16) Event Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t EVACT:3;          /*!< bit:  0.. 2  Event Action                       */

+    uint16_t :1;               /*!< bit:      3  Reserved                           */

+    uint16_t TCINV:1;          /*!< bit:      4  TC Event Input Polarity            */

+    uint16_t TCEI:1;           /*!< bit:      5  TC Event Enable                    */

+    uint16_t :2;               /*!< bit:  6.. 7  Reserved                           */

+    uint16_t OVFEO:1;          /*!< bit:      8  Event Output Enable                */

+    uint16_t :3;               /*!< bit:  9..11  Reserved                           */

+    uint16_t MCEO:2;           /*!< bit: 12..13  MC Event Output Enable             */

+    uint16_t :2;               /*!< bit: 14..15  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} TC_EVCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define TC_EVCTRL_OFFSET            0x0A         /**< \brief (TC_EVCTRL offset) Event Control Register */

+#define TC_EVCTRL_RESETVALUE        0x0000       /**< \brief (TC_EVCTRL reset_value) Event Control Register */

+

+#define TC_EVCTRL_EVACT_Pos         0            /**< \brief (TC_EVCTRL) Event Action */

+#define TC_EVCTRL_EVACT_Msk         (0x7u << TC_EVCTRL_EVACT_Pos)

+#define TC_EVCTRL_EVACT(value)      ((TC_EVCTRL_EVACT_Msk & ((value) << TC_EVCTRL_EVACT_Pos)))

+#define   TC_EVCTRL_EVACT_OFF       (0x0u <<  0) /**< \brief (TC_EVCTRL)  */

+#define   TC_EVCTRL_EVACT_RETRIGGER (0x1u <<  0) /**< \brief (TC_EVCTRL)  */

+#define   TC_EVCTRL_EVACT_COUNT     (0x2u <<  0) /**< \brief (TC_EVCTRL)  */

+#define   TC_EVCTRL_EVACT_START     (0x3u <<  0) /**< \brief (TC_EVCTRL)  */

+#define   TC_EVCTRL_EVACT_PPW       (0x5u <<  0) /**< \brief (TC_EVCTRL)  */

+#define   TC_EVCTRL_EVACT_PWP       (0x6u <<  0) /**< \brief (TC_EVCTRL)  */

+#define TC_EVCTRL_TCINV_Pos         4            /**< \brief (TC_EVCTRL) TC Event Input Polarity */

+#define TC_EVCTRL_TCINV             (0x1u << TC_EVCTRL_TCINV_Pos)

+#define TC_EVCTRL_TCEI_Pos          5            /**< \brief (TC_EVCTRL) TC Event Enable */

+#define TC_EVCTRL_TCEI              (0x1u << TC_EVCTRL_TCEI_Pos)

+#define TC_EVCTRL_OVFEO_Pos         8            /**< \brief (TC_EVCTRL) Event Output Enable */

+#define TC_EVCTRL_OVFEO             (0x1u << TC_EVCTRL_OVFEO_Pos)

+#define TC_EVCTRL_MCEO_Pos          12           /**< \brief (TC_EVCTRL) MC Event Output Enable */

+#define TC_EVCTRL_MCEO_Msk          (0x3u << TC_EVCTRL_MCEO_Pos)

+#define TC_EVCTRL_MCEO(value)       ((TC_EVCTRL_MCEO_Msk & ((value) << TC_EVCTRL_MCEO_Pos)))

+#define TC_EVCTRL_MASK              0x3137u      /**< \brief (TC_EVCTRL) MASK Register */

+

+/* -------- TC_INTENCLR : (TC Offset: 0x0C) (R/W  8) Interrupt Enable Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  OVF:1;            /*!< bit:      0  OVF Interrupt Disable              */

+    uint8_t  ERR:1;            /*!< bit:      1  ERR Interrupt Disable              */

+    uint8_t  :1;               /*!< bit:      2  Reserved                           */

+    uint8_t  SYNCRDY:1;        /*!< bit:      3  READY Interrupt Disable            */

+    uint8_t  MC:2;             /*!< bit:  4.. 5  MC Interrupt Disable               */

+    uint8_t  :2;               /*!< bit:  6.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} TC_INTENCLR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define TC_INTENCLR_OFFSET          0x0C         /**< \brief (TC_INTENCLR offset) Interrupt Enable Clear Register */

+#define TC_INTENCLR_RESETVALUE      0x00         /**< \brief (TC_INTENCLR reset_value) Interrupt Enable Clear Register */

+

+#define TC_INTENCLR_OVF_Pos         0            /**< \brief (TC_INTENCLR) OVF Interrupt Disable */

+#define TC_INTENCLR_OVF             (0x1u << TC_INTENCLR_OVF_Pos)

+#define TC_INTENCLR_ERR_Pos         1            /**< \brief (TC_INTENCLR) ERR Interrupt Disable */

+#define TC_INTENCLR_ERR             (0x1u << TC_INTENCLR_ERR_Pos)

+#define TC_INTENCLR_SYNCRDY_Pos     3            /**< \brief (TC_INTENCLR) READY Interrupt Disable */

+#define TC_INTENCLR_SYNCRDY         (0x1u << TC_INTENCLR_SYNCRDY_Pos)

+#define TC_INTENCLR_MC_Pos          4            /**< \brief (TC_INTENCLR) MC Interrupt Disable */

+#define TC_INTENCLR_MC_Msk          (0x3u << TC_INTENCLR_MC_Pos)

+#define TC_INTENCLR_MC(value)       ((TC_INTENCLR_MC_Msk & ((value) << TC_INTENCLR_MC_Pos)))

+#define TC_INTENCLR_MASK            0x3Bu        /**< \brief (TC_INTENCLR) MASK Register */

+

+/* -------- TC_INTENSET : (TC Offset: 0x0D) (R/W  8) Interrupt Enable Set Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  OVF:1;            /*!< bit:      0  OVF Interrupt Enable               */

+    uint8_t  ERR:1;            /*!< bit:      1  ERR Interrupt Enable               */

+    uint8_t  :1;               /*!< bit:      2  Reserved                           */

+    uint8_t  SYNCRDY:1;        /*!< bit:      3  READY Interrupt Enable             */

+    uint8_t  MC:2;             /*!< bit:  4.. 5  MC Interrupt Enable                */

+    uint8_t  :2;               /*!< bit:  6.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} TC_INTENSET_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define TC_INTENSET_OFFSET          0x0D         /**< \brief (TC_INTENSET offset) Interrupt Enable Set Register */

+#define TC_INTENSET_RESETVALUE      0x00         /**< \brief (TC_INTENSET reset_value) Interrupt Enable Set Register */

+

+#define TC_INTENSET_OVF_Pos         0            /**< \brief (TC_INTENSET) OVF Interrupt Enable */

+#define TC_INTENSET_OVF             (0x1u << TC_INTENSET_OVF_Pos)

+#define TC_INTENSET_ERR_Pos         1            /**< \brief (TC_INTENSET) ERR Interrupt Enable */

+#define TC_INTENSET_ERR             (0x1u << TC_INTENSET_ERR_Pos)

+#define TC_INTENSET_SYNCRDY_Pos     3            /**< \brief (TC_INTENSET) READY Interrupt Enable */

+#define TC_INTENSET_SYNCRDY         (0x1u << TC_INTENSET_SYNCRDY_Pos)

+#define TC_INTENSET_MC_Pos          4            /**< \brief (TC_INTENSET) MC Interrupt Enable */

+#define TC_INTENSET_MC_Msk          (0x3u << TC_INTENSET_MC_Pos)

+#define TC_INTENSET_MC(value)       ((TC_INTENSET_MC_Msk & ((value) << TC_INTENSET_MC_Pos)))

+#define TC_INTENSET_MASK            0x3Bu        /**< \brief (TC_INTENSET) MASK Register */

+

+/* -------- TC_INTFLAG : (TC Offset: 0x0E) (R/W  8) Interrupt Flag Status and Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  OVF:1;            /*!< bit:      0  OVF Interrupt Flag                 */

+    uint8_t  ERR:1;            /*!< bit:      1  ERR Interrupt Flag                 */

+    uint8_t  :1;               /*!< bit:      2  Reserved                           */

+    uint8_t  SYNCRDY:1;        /*!< bit:      3  READY Interrupt Flag               */

+    uint8_t  MC:2;             /*!< bit:  4.. 5  MC Interrupt Flag                  */

+    uint8_t  :2;               /*!< bit:  6.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} TC_INTFLAG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define TC_INTFLAG_OFFSET           0x0E         /**< \brief (TC_INTFLAG offset) Interrupt Flag Status and Clear Register */

+#define TC_INTFLAG_RESETVALUE       0x00         /**< \brief (TC_INTFLAG reset_value) Interrupt Flag Status and Clear Register */

+

+#define TC_INTFLAG_OVF_Pos          0            /**< \brief (TC_INTFLAG) OVF Interrupt Flag */

+#define TC_INTFLAG_OVF              (0x1u << TC_INTFLAG_OVF_Pos)

+#define TC_INTFLAG_ERR_Pos          1            /**< \brief (TC_INTFLAG) ERR Interrupt Flag */

+#define TC_INTFLAG_ERR              (0x1u << TC_INTFLAG_ERR_Pos)

+#define TC_INTFLAG_SYNCRDY_Pos      3            /**< \brief (TC_INTFLAG) READY Interrupt Flag */

+#define TC_INTFLAG_SYNCRDY          (0x1u << TC_INTFLAG_SYNCRDY_Pos)

+#define TC_INTFLAG_MC_Pos           4            /**< \brief (TC_INTFLAG) MC Interrupt Flag */

+#define TC_INTFLAG_MC_Msk           (0x3u << TC_INTFLAG_MC_Pos)

+#define TC_INTFLAG_MC(value)        ((TC_INTFLAG_MC_Msk & ((value) << TC_INTFLAG_MC_Pos)))

+#define TC_INTFLAG_MASK             0x3Bu        /**< \brief (TC_INTFLAG) MASK Register */

+

+/* -------- TC_STATUS : (TC Offset: 0x0F) (R/   8) Status Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  :3;               /*!< bit:  0.. 2  Reserved                           */

+    uint8_t  STOP:1;           /*!< bit:      3  Stop Status Flag                   */

+    uint8_t  SLAVE:1;          /*!< bit:      4  Slave Status Flag                  */

+    uint8_t  :2;               /*!< bit:  5.. 6  Reserved                           */

+    uint8_t  SYNCBUSY:1;       /*!< bit:      7  Synchronization Busy Status        */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} TC_STATUS_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define TC_STATUS_OFFSET            0x0F         /**< \brief (TC_STATUS offset) Status Register */

+#define TC_STATUS_RESETVALUE        0x08         /**< \brief (TC_STATUS reset_value) Status Register */

+

+#define TC_STATUS_STOP_Pos          3            /**< \brief (TC_STATUS) Stop Status Flag */

+#define TC_STATUS_STOP              (0x1u << TC_STATUS_STOP_Pos)

+#define TC_STATUS_SLAVE_Pos         4            /**< \brief (TC_STATUS) Slave Status Flag */

+#define TC_STATUS_SLAVE             (0x1u << TC_STATUS_SLAVE_Pos)

+#define TC_STATUS_SYNCBUSY_Pos      7            /**< \brief (TC_STATUS) Synchronization Busy Status */

+#define TC_STATUS_SYNCBUSY          (0x1u << TC_STATUS_SYNCBUSY_Pos)

+#define TC_STATUS_MASK              0x98u        /**< \brief (TC_STATUS) MASK Register */

+

+/* -------- TC_COUNT8_COUNT : (TC Offset: 0x10) (R/W  8) COUNT8 COUNT8 Count Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  COUNT:8;          /*!< bit:  0.. 7  Counter Value                      */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} TC_COUNT8_COUNT_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define TC_COUNT8_COUNT_OFFSET      0x10         /**< \brief (TC_COUNT8_COUNT offset) COUNT8 Count Register */

+#define TC_COUNT8_COUNT_RESETVALUE  0x00         /**< \brief (TC_COUNT8_COUNT reset_value) COUNT8 Count Register */

+

+#define TC_COUNT8_COUNT_COUNT_Pos   0            /**< \brief (TC_COUNT8_COUNT) Counter Value */

+#define TC_COUNT8_COUNT_COUNT_Msk   (0xFFu << TC_COUNT8_COUNT_COUNT_Pos)

+#define TC_COUNT8_COUNT_COUNT(value) ((TC_COUNT8_COUNT_COUNT_Msk & ((value) << TC_COUNT8_COUNT_COUNT_Pos)))

+#define TC_COUNT8_COUNT_MASK        0xFFu        /**< \brief (TC_COUNT8_COUNT) MASK Register */

+

+/* -------- TC_COUNT16_COUNT : (TC Offset: 0x10) (R/W 16) COUNT16 COUNT16 Count Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t COUNT:16;         /*!< bit:  0..15  Counter Value                      */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} TC_COUNT16_COUNT_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define TC_COUNT16_COUNT_OFFSET     0x10         /**< \brief (TC_COUNT16_COUNT offset) COUNT16 Count Register */

+#define TC_COUNT16_COUNT_RESETVALUE 0x0000       /**< \brief (TC_COUNT16_COUNT reset_value) COUNT16 Count Register */

+

+#define TC_COUNT16_COUNT_COUNT_Pos  0            /**< \brief (TC_COUNT16_COUNT) Counter Value */

+#define TC_COUNT16_COUNT_COUNT_Msk  (0xFFFFu << TC_COUNT16_COUNT_COUNT_Pos)

+#define TC_COUNT16_COUNT_COUNT(value) ((TC_COUNT16_COUNT_COUNT_Msk & ((value) << TC_COUNT16_COUNT_COUNT_Pos)))

+#define TC_COUNT16_COUNT_MASK       0xFFFFu      /**< \brief (TC_COUNT16_COUNT) MASK Register */

+

+/* -------- TC_COUNT32_COUNT : (TC Offset: 0x10) (R/W 32) COUNT32 COUNT32 Count Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t COUNT:32;         /*!< bit:  0..31  Counter Value                      */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} TC_COUNT32_COUNT_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define TC_COUNT32_COUNT_OFFSET     0x10         /**< \brief (TC_COUNT32_COUNT offset) COUNT32 Count Register */

+#define TC_COUNT32_COUNT_RESETVALUE 0x00000000   /**< \brief (TC_COUNT32_COUNT reset_value) COUNT32 Count Register */

+

+#define TC_COUNT32_COUNT_COUNT_Pos  0            /**< \brief (TC_COUNT32_COUNT) Counter Value */

+#define TC_COUNT32_COUNT_COUNT_Msk  (0xFFFFFFFFu << TC_COUNT32_COUNT_COUNT_Pos)

+#define TC_COUNT32_COUNT_COUNT(value) ((TC_COUNT32_COUNT_COUNT_Msk & ((value) << TC_COUNT32_COUNT_COUNT_Pos)))

+#define TC_COUNT32_COUNT_MASK       0xFFFFFFFFu  /**< \brief (TC_COUNT32_COUNT) MASK Register */

+

+/* -------- TC_COUNT8_PER : (TC Offset: 0x14) (R/W  8) COUNT8 COUNT8 Period Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  PER:8;            /*!< bit:  0.. 7  Period Value                       */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} TC_COUNT8_PER_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define TC_COUNT8_PER_OFFSET        0x14         /**< \brief (TC_COUNT8_PER offset) COUNT8 Period Register */

+#define TC_COUNT8_PER_RESETVALUE    0xFF         /**< \brief (TC_COUNT8_PER reset_value) COUNT8 Period Register */

+

+#define TC_COUNT8_PER_PER_Pos       0            /**< \brief (TC_COUNT8_PER) Period Value */

+#define TC_COUNT8_PER_PER_Msk       (0xFFu << TC_COUNT8_PER_PER_Pos)

+#define TC_COUNT8_PER_PER(value)    ((TC_COUNT8_PER_PER_Msk & ((value) << TC_COUNT8_PER_PER_Pos)))

+#define TC_COUNT8_PER_MASK          0xFFu        /**< \brief (TC_COUNT8_PER) MASK Register */

+

+/* -------- TC_COUNT32_PER : (TC Offset: 0x14) (R/W 32) COUNT32 COUNT32 Period Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t PER:32;           /*!< bit:  0..31  Period Value                       */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} TC_COUNT32_PER_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define TC_COUNT32_PER_OFFSET       0x14         /**< \brief (TC_COUNT32_PER offset) COUNT32 Period Register */

+#define TC_COUNT32_PER_RESETVALUE   0x00000000   /**< \brief (TC_COUNT32_PER reset_value) COUNT32 Period Register */

+

+#define TC_COUNT32_PER_PER_Pos      0            /**< \brief (TC_COUNT32_PER) Period Value */

+#define TC_COUNT32_PER_PER_Msk      (0xFFFFFFFFu << TC_COUNT32_PER_PER_Pos)

+#define TC_COUNT32_PER_PER(value)   ((TC_COUNT32_PER_PER_Msk & ((value) << TC_COUNT32_PER_PER_Pos)))

+#define TC_COUNT32_PER_MASK         0xFFFFFFFFu  /**< \brief (TC_COUNT32_PER) MASK Register */

+

+/* -------- TC_COUNT8_CC : (TC Offset: 0x18) (R/W  8) COUNT8 COUNT8 Compare and Capture Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  CC:8;             /*!< bit:  0.. 7  Counter/Compare Value              */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} TC_COUNT8_CC_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define TC_COUNT8_CC_OFFSET         0x18         /**< \brief (TC_COUNT8_CC offset) COUNT8 Compare and Capture Register */

+#define TC_COUNT8_CC_RESETVALUE     0x00         /**< \brief (TC_COUNT8_CC reset_value) COUNT8 Compare and Capture Register */

+

+#define TC_COUNT8_CC_CC_Pos         0            /**< \brief (TC_COUNT8_CC) Counter/Compare Value */

+#define TC_COUNT8_CC_CC_Msk         (0xFFu << TC_COUNT8_CC_CC_Pos)

+#define TC_COUNT8_CC_CC(value)      ((TC_COUNT8_CC_CC_Msk & ((value) << TC_COUNT8_CC_CC_Pos)))

+#define TC_COUNT8_CC_MASK           0xFFu        /**< \brief (TC_COUNT8_CC) MASK Register */

+

+/* -------- TC_COUNT16_CC : (TC Offset: 0x18) (R/W 16) COUNT16 COUNT16 Compare and Capture Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint16_t CC:16;            /*!< bit:  0..15  Counter/Compare Value              */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint16_t reg;                /*!< Type      used for register access              */

+} TC_COUNT16_CC_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define TC_COUNT16_CC_OFFSET        0x18         /**< \brief (TC_COUNT16_CC offset) COUNT16 Compare and Capture Register */

+#define TC_COUNT16_CC_RESETVALUE    0x0000       /**< \brief (TC_COUNT16_CC reset_value) COUNT16 Compare and Capture Register */

+

+#define TC_COUNT16_CC_CC_Pos        0            /**< \brief (TC_COUNT16_CC) Counter/Compare Value */

+#define TC_COUNT16_CC_CC_Msk        (0xFFFFu << TC_COUNT16_CC_CC_Pos)

+#define TC_COUNT16_CC_CC(value)     ((TC_COUNT16_CC_CC_Msk & ((value) << TC_COUNT16_CC_CC_Pos)))

+#define TC_COUNT16_CC_MASK          0xFFFFu      /**< \brief (TC_COUNT16_CC) MASK Register */

+

+/* -------- TC_COUNT32_CC : (TC Offset: 0x18) (R/W 32) COUNT32 COUNT32 Compare and Capture Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint32_t CC:32;            /*!< bit:  0..31  Counter/Compare Value              */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint32_t reg;                /*!< Type      used for register access              */

+} TC_COUNT32_CC_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define TC_COUNT32_CC_OFFSET        0x18         /**< \brief (TC_COUNT32_CC offset) COUNT32 Compare and Capture Register */

+#define TC_COUNT32_CC_RESETVALUE    0x00000000   /**< \brief (TC_COUNT32_CC reset_value) COUNT32 Compare and Capture Register */

+

+#define TC_COUNT32_CC_CC_Pos        0            /**< \brief (TC_COUNT32_CC) Counter/Compare Value */

+#define TC_COUNT32_CC_CC_Msk        (0xFFFFFFFFu << TC_COUNT32_CC_CC_Pos)

+#define TC_COUNT32_CC_CC(value)     ((TC_COUNT32_CC_CC_Msk & ((value) << TC_COUNT32_CC_CC_Pos)))

+#define TC_COUNT32_CC_MASK          0xFFFFFFFFu  /**< \brief (TC_COUNT32_CC) MASK Register */

+

+/** \brief TC_COUNT8 hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct { /* 8-bit Counter Mode */

+  __IO TC_CTRLA_Type             CTRLA;       /**< \brief Offset: 0x00 (R/W 16) Control A Register */

+  __IO TC_READREQ_Type           READREQ;     /**< \brief Offset: 0x02 (R/W 16) Read Request Register */

+  __IO TC_CTRLBCLR_Type          CTRLBCLR;    /**< \brief Offset: 0x04 (R/W  8) Control B Clear Register */

+  __IO TC_CTRLBSET_Type          CTRLBSET;    /**< \brief Offset: 0x05 (R/W  8) Control B Set Register */

+  __IO TC_CTRLC_Type             CTRLC;       /**< \brief Offset: 0x06 (R/W  8) Control C Register */

+       RoReg8                    Reserved1[0x1];

+  __IO TC_DBGCTRL_Type           DBGCTRL;     /**< \brief Offset: 0x08 (R/W  8) Debug Register */

+       RoReg8                    Reserved2[0x1];

+  __IO TC_EVCTRL_Type            EVCTRL;      /**< \brief Offset: 0x0A (R/W 16) Event Control Register */

+  __IO TC_INTENCLR_Type          INTENCLR;    /**< \brief Offset: 0x0C (R/W  8) Interrupt Enable Clear Register */

+  __IO TC_INTENSET_Type          INTENSET;    /**< \brief Offset: 0x0D (R/W  8) Interrupt Enable Set Register */

+  __IO TC_INTFLAG_Type           INTFLAG;     /**< \brief Offset: 0x0E (R/W  8) Interrupt Flag Status and Clear Register */

+  __I  TC_STATUS_Type            STATUS;      /**< \brief Offset: 0x0F (R/   8) Status Register */

+  __IO TC_COUNT8_COUNT_Type      COUNT;       /**< \brief Offset: 0x10 (R/W  8) COUNT8 Count Register */

+       RoReg8                    Reserved3[0x3];

+  __IO TC_COUNT8_PER_Type        PER;         /**< \brief Offset: 0x14 (R/W  8) COUNT8 Period Register */

+       RoReg8                    Reserved4[0x3];

+  __IO TC_COUNT8_CC_Type         CC[2];       /**< \brief Offset: 0x18 (R/W  8) COUNT8 Compare and Capture Register [CC8_NUM] */

+} TcCount8;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/** \brief TC_COUNT16 hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct { /* 16-bit Counter Mode */

+  __IO TC_CTRLA_Type             CTRLA;       /**< \brief Offset: 0x00 (R/W 16) Control A Register */

+  __IO TC_READREQ_Type           READREQ;     /**< \brief Offset: 0x02 (R/W 16) Read Request Register */

+  __IO TC_CTRLBCLR_Type          CTRLBCLR;    /**< \brief Offset: 0x04 (R/W  8) Control B Clear Register */

+  __IO TC_CTRLBSET_Type          CTRLBSET;    /**< \brief Offset: 0x05 (R/W  8) Control B Set Register */

+  __IO TC_CTRLC_Type             CTRLC;       /**< \brief Offset: 0x06 (R/W  8) Control C Register */

+       RoReg8                    Reserved1[0x1];

+  __IO TC_DBGCTRL_Type           DBGCTRL;     /**< \brief Offset: 0x08 (R/W  8) Debug Register */

+       RoReg8                    Reserved2[0x1];

+  __IO TC_EVCTRL_Type            EVCTRL;      /**< \brief Offset: 0x0A (R/W 16) Event Control Register */

+  __IO TC_INTENCLR_Type          INTENCLR;    /**< \brief Offset: 0x0C (R/W  8) Interrupt Enable Clear Register */

+  __IO TC_INTENSET_Type          INTENSET;    /**< \brief Offset: 0x0D (R/W  8) Interrupt Enable Set Register */

+  __IO TC_INTFLAG_Type           INTFLAG;     /**< \brief Offset: 0x0E (R/W  8) Interrupt Flag Status and Clear Register */

+  __I  TC_STATUS_Type            STATUS;      /**< \brief Offset: 0x0F (R/   8) Status Register */

+  __IO TC_COUNT16_COUNT_Type     COUNT;       /**< \brief Offset: 0x10 (R/W 16) COUNT16 Count Register */

+       RoReg8                    Reserved3[0x6];

+  __IO TC_COUNT16_CC_Type        CC[2];       /**< \brief Offset: 0x18 (R/W 16) COUNT16 Compare and Capture Register [CC16_NUM] */

+} TcCount16;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/** \brief TC_COUNT32 hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct { /* 32-bit Counter Mode */

+  __IO TC_CTRLA_Type             CTRLA;       /**< \brief Offset: 0x00 (R/W 16) Control A Register */

+  __IO TC_READREQ_Type           READREQ;     /**< \brief Offset: 0x02 (R/W 16) Read Request Register */

+  __IO TC_CTRLBCLR_Type          CTRLBCLR;    /**< \brief Offset: 0x04 (R/W  8) Control B Clear Register */

+  __IO TC_CTRLBSET_Type          CTRLBSET;    /**< \brief Offset: 0x05 (R/W  8) Control B Set Register */

+  __IO TC_CTRLC_Type             CTRLC;       /**< \brief Offset: 0x06 (R/W  8) Control C Register */

+       RoReg8                    Reserved1[0x1];

+  __IO TC_DBGCTRL_Type           DBGCTRL;     /**< \brief Offset: 0x08 (R/W  8) Debug Register */

+       RoReg8                    Reserved2[0x1];

+  __IO TC_EVCTRL_Type            EVCTRL;      /**< \brief Offset: 0x0A (R/W 16) Event Control Register */

+  __IO TC_INTENCLR_Type          INTENCLR;    /**< \brief Offset: 0x0C (R/W  8) Interrupt Enable Clear Register */

+  __IO TC_INTENSET_Type          INTENSET;    /**< \brief Offset: 0x0D (R/W  8) Interrupt Enable Set Register */

+  __IO TC_INTFLAG_Type           INTFLAG;     /**< \brief Offset: 0x0E (R/W  8) Interrupt Flag Status and Clear Register */

+  __I  TC_STATUS_Type            STATUS;      /**< \brief Offset: 0x0F (R/   8) Status Register */

+  __IO TC_COUNT32_COUNT_Type     COUNT;       /**< \brief Offset: 0x10 (R/W 32) COUNT32 Count Register */

+  __IO TC_COUNT32_PER_Type       PER;         /**< \brief Offset: 0x14 (R/W 32) COUNT32 Period Register */

+  __IO TC_COUNT32_CC_Type        CC[2];       /**< \brief Offset: 0x18 (R/W 32) COUNT32 Compare and Capture Register [CC32_NUM] */

+} TcCount32;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+       TcCount8                  COUNT8;      /**< \brief Offset: 0x00 8-bit Counter Mode */

+       TcCount16                 COUNT16;     /**< \brief Offset: 0x00 16-bit Counter Mode */

+       TcCount32                 COUNT32;     /**< \brief Offset: 0x00 32-bit Counter Mode */

+} Tc;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/*@}*/

+

+#endif /* _SAMD20_TC_COMPONENT_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_wdt.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_wdt.h
new file mode 100644
index 0000000..e26c5b5
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/component/component_wdt.h
@@ -0,0 +1,229 @@
+/**

+ * \file

+ *

+ * \brief Component description for WDT

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_WDT_COMPONENT_

+#define _SAMD20_WDT_COMPONENT_

+

+/* ========================================================================== */

+/**  SOFTWARE API DEFINITION FOR WDT */

+/* ========================================================================== */

+/** \addtogroup SAMD20_WDT Watchdog Timer */

+/*@{*/

+

+#define REV_WDT                     0x200

+

+/* -------- WDT_CTRL : (WDT Offset: 0x0) (R/W  8) Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  :1;               /*!< bit:      0  Reserved                           */

+    uint8_t  ENABLE:1;         /*!< bit:      1  Enable                             */

+    uint8_t  WEN:1;            /*!< bit:      2  Watchdog Timer Window Mode Enable  */

+    uint8_t  :4;               /*!< bit:  3.. 6  Reserved                           */

+    uint8_t  ALWAYSON:1;       /*!< bit:      7  Watchdog Timer Always-On Enable    */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} WDT_CTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define WDT_CTRL_OFFSET             0x0          /**< \brief (WDT_CTRL offset) Control Register */

+#define WDT_CTRL_RESETVALUE         0x00         /**< \brief (WDT_CTRL reset_value) Control Register */

+

+#define WDT_CTRL_ENABLE_Pos         1            /**< \brief (WDT_CTRL) Enable */

+#define WDT_CTRL_ENABLE             (0x1u << WDT_CTRL_ENABLE_Pos)

+#define WDT_CTRL_WEN_Pos            2            /**< \brief (WDT_CTRL) Watchdog Timer Window Mode Enable */

+#define WDT_CTRL_WEN                (0x1u << WDT_CTRL_WEN_Pos)

+#define WDT_CTRL_ALWAYSON_Pos       7            /**< \brief (WDT_CTRL) Watchdog Timer Always-On Enable */

+#define WDT_CTRL_ALWAYSON           (0x1u << WDT_CTRL_ALWAYSON_Pos)

+#define WDT_CTRL_MASK               0x86u        /**< \brief (WDT_CTRL) MASK Register */

+

+/* -------- WDT_CONFIG : (WDT Offset: 0x1) (R/W  8) Configuration Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  PER:4;            /*!< bit:  0.. 3  Timeout Period                     */

+    uint8_t  WINDOW:4;         /*!< bit:  4.. 7  Watchdow Timer Window Timeout Period */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} WDT_CONFIG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define WDT_CONFIG_OFFSET           0x1          /**< \brief (WDT_CONFIG offset) Configuration Register */

+#define WDT_CONFIG_RESETVALUE       0xBB         /**< \brief (WDT_CONFIG reset_value) Configuration Register */

+

+#define WDT_CONFIG_PER_Pos          0            /**< \brief (WDT_CONFIG) Timeout Period */

+#define WDT_CONFIG_PER_Msk          (0xFu << WDT_CONFIG_PER_Pos)

+#define WDT_CONFIG_PER(value)       ((WDT_CONFIG_PER_Msk & ((value) << WDT_CONFIG_PER_Pos)))

+#define WDT_CONFIG_WINDOW_Pos       4            /**< \brief (WDT_CONFIG) Watchdow Timer Window Timeout Period */

+#define WDT_CONFIG_WINDOW_Msk       (0xFu << WDT_CONFIG_WINDOW_Pos)

+#define WDT_CONFIG_WINDOW(value)    ((WDT_CONFIG_WINDOW_Msk & ((value) << WDT_CONFIG_WINDOW_Pos)))

+#define WDT_CONFIG_MASK             0xFFu        /**< \brief (WDT_CONFIG) MASK Register */

+

+/* -------- WDT_EWCTRL : (WDT Offset: 0x2) (R/W  8) Early Warning Control Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  EWOFFSET:4;       /*!< bit:  0.. 3  Early Warning Interrupt Time Offset */

+    uint8_t  :4;               /*!< bit:  4.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} WDT_EWCTRL_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define WDT_EWCTRL_OFFSET           0x2          /**< \brief (WDT_EWCTRL offset) Early Warning Control Register */

+#define WDT_EWCTRL_RESETVALUE       0x0B         /**< \brief (WDT_EWCTRL reset_value) Early Warning Control Register */

+

+#define WDT_EWCTRL_EWOFFSET_Pos     0            /**< \brief (WDT_EWCTRL) Early Warning Interrupt Time Offset */

+#define WDT_EWCTRL_EWOFFSET_Msk     (0xFu << WDT_EWCTRL_EWOFFSET_Pos)

+#define WDT_EWCTRL_EWOFFSET(value)  ((WDT_EWCTRL_EWOFFSET_Msk & ((value) << WDT_EWCTRL_EWOFFSET_Pos)))

+#define WDT_EWCTRL_MASK             0x0Fu        /**< \brief (WDT_EWCTRL) MASK Register */

+

+/* -------- WDT_INTENCLR : (WDT Offset: 0x4) (R/W  8) Interrupt Enable Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  EW:1;             /*!< bit:      0  Early Warning Interrupt Disable    */

+    uint8_t  :7;               /*!< bit:  1.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} WDT_INTENCLR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define WDT_INTENCLR_OFFSET         0x4          /**< \brief (WDT_INTENCLR offset) Interrupt Enable Clear Register */

+#define WDT_INTENCLR_RESETVALUE     0x00         /**< \brief (WDT_INTENCLR reset_value) Interrupt Enable Clear Register */

+

+#define WDT_INTENCLR_EW_Pos         0            /**< \brief (WDT_INTENCLR) Early Warning Interrupt Disable */

+#define WDT_INTENCLR_EW             (0x1u << WDT_INTENCLR_EW_Pos)

+#define WDT_INTENCLR_MASK           0x01u        /**< \brief (WDT_INTENCLR) MASK Register */

+

+/* -------- WDT_INTENSET : (WDT Offset: 0x5) (R/W  8) Interrupt Enable Set Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  EW:1;             /*!< bit:      0  Early Warning Interrupt Enable     */

+    uint8_t  :7;               /*!< bit:  1.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} WDT_INTENSET_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define WDT_INTENSET_OFFSET         0x5          /**< \brief (WDT_INTENSET offset) Interrupt Enable Set Register */

+#define WDT_INTENSET_RESETVALUE     0x00         /**< \brief (WDT_INTENSET reset_value) Interrupt Enable Set Register */

+

+#define WDT_INTENSET_EW_Pos         0            /**< \brief (WDT_INTENSET) Early Warning Interrupt Enable */

+#define WDT_INTENSET_EW             (0x1u << WDT_INTENSET_EW_Pos)

+#define WDT_INTENSET_MASK           0x01u        /**< \brief (WDT_INTENSET) MASK Register */

+

+/* -------- WDT_INTFLAG : (WDT Offset: 0x6) (R/W  8) Interrupt Flag Status and Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  EW:1;             /*!< bit:      0  Early Warning Interrupt Flag       */

+    uint8_t  :7;               /*!< bit:  1.. 7  Reserved                           */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} WDT_INTFLAG_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define WDT_INTFLAG_OFFSET          0x6          /**< \brief (WDT_INTFLAG offset) Interrupt Flag Status and Clear Register */

+#define WDT_INTFLAG_RESETVALUE      0x00         /**< \brief (WDT_INTFLAG reset_value) Interrupt Flag Status and Clear Register */

+

+#define WDT_INTFLAG_EW_Pos          0            /**< \brief (WDT_INTFLAG) Early Warning Interrupt Flag */

+#define WDT_INTFLAG_EW              (0x1u << WDT_INTFLAG_EW_Pos)

+#define WDT_INTFLAG_MASK            0x01u        /**< \brief (WDT_INTFLAG) MASK Register */

+

+/* -------- WDT_STATUS : (WDT Offset: 0x7) (R/   8) Status Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  :7;               /*!< bit:  0.. 6  Reserved                           */

+    uint8_t  SYNCBUSY:1;       /*!< bit:      7  Synchronization Busy               */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} WDT_STATUS_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define WDT_STATUS_OFFSET           0x7          /**< \brief (WDT_STATUS offset) Status Register */

+#define WDT_STATUS_RESETVALUE       0x00         /**< \brief (WDT_STATUS reset_value) Status Register */

+

+#define WDT_STATUS_SYNCBUSY_Pos     7            /**< \brief (WDT_STATUS) Synchronization Busy */

+#define WDT_STATUS_SYNCBUSY         (0x1u << WDT_STATUS_SYNCBUSY_Pos)

+#define WDT_STATUS_MASK             0x80u        /**< \brief (WDT_STATUS) MASK Register */

+

+/* -------- WDT_CLEAR : (WDT Offset: 0x8) ( /W  8) Clear Register -------- */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef union {

+  struct {

+    uint8_t  CLEAR:8;          /*!< bit:  0.. 7  Watchdog Timer Clears Command Register */

+  } bit;                       /*!< Structure used for bit  access                  */

+  uint8_t reg;                 /*!< Type      used for register access              */

+} WDT_CLEAR_Type;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+#define WDT_CLEAR_OFFSET            0x8          /**< \brief (WDT_CLEAR offset) Clear Register */

+#define WDT_CLEAR_RESETVALUE        0x00         /**< \brief (WDT_CLEAR reset_value) Clear Register */

+

+#define WDT_CLEAR_CLEAR_Pos         0            /**< \brief (WDT_CLEAR) Watchdog Timer Clears Command Register */

+#define WDT_CLEAR_CLEAR_Msk         (0xFFu << WDT_CLEAR_CLEAR_Pos)

+#define WDT_CLEAR_CLEAR(value)      ((WDT_CLEAR_CLEAR_Msk & ((value) << WDT_CLEAR_CLEAR_Pos)))

+#define   WDT_CLEAR_CLEAR_KEY       (0xA5u <<  0) /**< \brief (WDT_CLEAR) Clear Key */

+#define WDT_CLEAR_MASK              0xFFu        /**< \brief (WDT_CLEAR) MASK Register */

+

+/** \brief WDT hardware registers */

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+typedef struct {

+  __IO WDT_CTRL_Type             CTRL;        /**< \brief Offset: 0x0 (R/W  8) Control Register */

+  __IO WDT_CONFIG_Type           CONFIG;      /**< \brief Offset: 0x1 (R/W  8) Configuration Register */

+  __IO WDT_EWCTRL_Type           EWCTRL;      /**< \brief Offset: 0x2 (R/W  8) Early Warning Control Register */

+       RoReg8                    Reserved1[0x1];

+  __IO WDT_INTENCLR_Type         INTENCLR;    /**< \brief Offset: 0x4 (R/W  8) Interrupt Enable Clear Register */

+  __IO WDT_INTENSET_Type         INTENSET;    /**< \brief Offset: 0x5 (R/W  8) Interrupt Enable Set Register */

+  __IO WDT_INTFLAG_Type          INTFLAG;     /**< \brief Offset: 0x6 (R/W  8) Interrupt Flag Status and Clear Register */

+  __I  WDT_STATUS_Type           STATUS;      /**< \brief Offset: 0x7 (R/   8) Status Register */

+  __O  WDT_CLEAR_Type            CLEAR;       /**< \brief Offset: 0x8 ( /W  8) Clear Register */

+} Wdt;

+#endif /* !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/*@}*/

+

+#endif /* _SAMD20_WDT_COMPONENT_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_ac.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_ac.h
new file mode 100644
index 0000000..a2b5ac5
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_ac.h
@@ -0,0 +1,86 @@
+/**

+ * \file

+ *

+ * \brief Instance description for AC

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_AC_INSTANCE_

+#define _SAMD20_AC_INSTANCE_

+

+/* ========== Register definition for AC peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_AC_CTRLA               (0x42004400U) /**< \brief (AC) Control A Register */

+#define REG_AC_CTRLB               (0x42004401U) /**< \brief (AC) Control B Register */

+#define REG_AC_EVCTRL              (0x42004402U) /**< \brief (AC) Event Control Register */

+#define REG_AC_INTENCLR            (0x42004404U) /**< \brief (AC) Interrupt Enable Clear Register */

+#define REG_AC_INTENSET            (0x42004405U) /**< \brief (AC) Interrupt Enable Set Register */

+#define REG_AC_INTFLAG             (0x42004406U) /**< \brief (AC) Interrupt Flag Status and Clear Register */

+#define REG_AC_STATUSA             (0x42004408U) /**< \brief (AC) Status A Register */

+#define REG_AC_STATUSB             (0x42004409U) /**< \brief (AC) Status B Register */

+#define REG_AC_STATUSC             (0x4200440AU) /**< \brief (AC) Status C Register */

+#define REG_AC_WINCTRL             (0x4200440CU) /**< \brief (AC) Window Control Register */

+#define REG_AC_COMPCTRL0           (0x42004410U) /**< \brief (AC) Comparator Control Register 0 */

+#define REG_AC_COMPCTRL1           (0x42004414U) /**< \brief (AC) Comparator Control Register 1 */

+#define REG_AC_SCALER0             (0x42004420U) /**< \brief (AC) Scaler Register 0 */

+#define REG_AC_SCALER1             (0x42004421U) /**< \brief (AC) Scaler Register 1 */

+#else

+#define REG_AC_CTRLA               (*(RwReg8 *)0x42004400U) /**< \brief (AC) Control A Register */

+#define REG_AC_CTRLB               (*(WoReg8 *)0x42004401U) /**< \brief (AC) Control B Register */

+#define REG_AC_EVCTRL              (*(RwReg16*)0x42004402U) /**< \brief (AC) Event Control Register */

+#define REG_AC_INTENCLR            (*(RwReg8 *)0x42004404U) /**< \brief (AC) Interrupt Enable Clear Register */

+#define REG_AC_INTENSET            (*(RwReg8 *)0x42004405U) /**< \brief (AC) Interrupt Enable Set Register */

+#define REG_AC_INTFLAG             (*(RwReg8 *)0x42004406U) /**< \brief (AC) Interrupt Flag Status and Clear Register */

+#define REG_AC_STATUSA             (*(RoReg8 *)0x42004408U) /**< \brief (AC) Status A Register */

+#define REG_AC_STATUSB             (*(RoReg8 *)0x42004409U) /**< \brief (AC) Status B Register */

+#define REG_AC_STATUSC             (*(RoReg8 *)0x4200440AU) /**< \brief (AC) Status C Register */

+#define REG_AC_WINCTRL             (*(RwReg8 *)0x4200440CU) /**< \brief (AC) Window Control Register */

+#define REG_AC_COMPCTRL0           (*(RwReg  *)0x42004410U) /**< \brief (AC) Comparator Control Register 0 */

+#define REG_AC_COMPCTRL1           (*(RwReg  *)0x42004414U) /**< \brief (AC) Comparator Control Register 1 */

+#define REG_AC_SCALER0             (*(RwReg8 *)0x42004420U) /**< \brief (AC) Scaler Register 0 */

+#define REG_AC_SCALER1             (*(RwReg8 *)0x42004421U) /**< \brief (AC) Scaler Register 1 */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for AC peripheral ========== */

+#define AC_GCLK_ID_ANA              25

+#define AC_GCLK_ID_DIG              24

+#define AC_NUM_CMP                  2

+#define AC_PAIRS                    1

+

+#endif /* _SAMD20_AC_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_adc.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_adc.h
new file mode 100644
index 0000000..423c767
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_adc.h
@@ -0,0 +1,103 @@
+/**

+ * \file

+ *

+ * \brief Instance description for ADC

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_ADC_INSTANCE_

+#define _SAMD20_ADC_INSTANCE_

+

+/* ========== Register definition for ADC peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_ADC_CTRLA              (0x42004000U) /**< \brief (ADC) Control Register A */

+#define REG_ADC_REFCTRL            (0x42004001U) /**< \brief (ADC) Reference Control Register */

+#define REG_ADC_AVGCTRL            (0x42004002U) /**< \brief (ADC) Average Control Register */

+#define REG_ADC_SAMPCTRL           (0x42004003U) /**< \brief (ADC) Sample Time Control Register */

+#define REG_ADC_CTRLB              (0x42004004U) /**< \brief (ADC) Control Register B */

+#define REG_ADC_WINCTRL            (0x42004008U) /**< \brief (ADC) Window Monitor Control Register */

+#define REG_ADC_SWTRIG             (0x4200400CU) /**< \brief (ADC) Control Register B */

+#define REG_ADC_INPUTCTRL          (0x42004010U) /**< \brief (ADC) Input Control Register */

+#define REG_ADC_EVCTRL             (0x42004014U) /**< \brief (ADC) Event Control Register */

+#define REG_ADC_INTENCLR           (0x42004016U) /**< \brief (ADC) Interrupt Enable Clear Register */

+#define REG_ADC_INTENSET           (0x42004017U) /**< \brief (ADC) Interrupt Enable Set Register */

+#define REG_ADC_INTFLAG            (0x42004018U) /**< \brief (ADC) Interrupt Flag Status and Clear Register */

+#define REG_ADC_STATUS             (0x42004019U) /**< \brief (ADC) Status Register */

+#define REG_ADC_RESULT             (0x4200401AU) /**< \brief (ADC) Result Register */

+#define REG_ADC_WINLT              (0x4200401CU) /**< \brief (ADC) Window Monitor Lower Threshold Register */

+#define REG_ADC_WINUT              (0x42004020U) /**< \brief (ADC) Window Monitor Upper Threshold Register */

+#define REG_ADC_GAINCORR           (0x42004024U) /**< \brief (ADC) Gain Correction Register */

+#define REG_ADC_OFFSETCORR         (0x42004026U) /**< \brief (ADC) Offset Correction Register */

+#define REG_ADC_CALIB              (0x42004028U) /**< \brief (ADC) Calibration Register */

+#define REG_ADC_DBGCTRL            (0x4200402AU) /**< \brief (ADC) Debug Register */

+#define REG_ADC_TEST               (0x4200402BU) /**< \brief (ADC) Test Modes Register */

+#define REG_ADC_TESTRESULT         (0x4200402CU) /**< \brief (ADC) Test Result Register */

+#define REG_ADC_DCFG               (0x42004030U) /**< \brief (ADC) Device Configuration */

+#else

+#define REG_ADC_CTRLA              (*(RwReg8 *)0x42004000U) /**< \brief (ADC) Control Register A */

+#define REG_ADC_REFCTRL            (*(RwReg8 *)0x42004001U) /**< \brief (ADC) Reference Control Register */

+#define REG_ADC_AVGCTRL            (*(RwReg8 *)0x42004002U) /**< \brief (ADC) Average Control Register */

+#define REG_ADC_SAMPCTRL           (*(RwReg8 *)0x42004003U) /**< \brief (ADC) Sample Time Control Register */

+#define REG_ADC_CTRLB              (*(RwReg16*)0x42004004U) /**< \brief (ADC) Control Register B */

+#define REG_ADC_WINCTRL            (*(RwReg8 *)0x42004008U) /**< \brief (ADC) Window Monitor Control Register */

+#define REG_ADC_SWTRIG             (*(RwReg8 *)0x4200400CU) /**< \brief (ADC) Control Register B */

+#define REG_ADC_INPUTCTRL          (*(RwReg  *)0x42004010U) /**< \brief (ADC) Input Control Register */

+#define REG_ADC_EVCTRL             (*(RwReg8 *)0x42004014U) /**< \brief (ADC) Event Control Register */

+#define REG_ADC_INTENCLR           (*(RwReg8 *)0x42004016U) /**< \brief (ADC) Interrupt Enable Clear Register */

+#define REG_ADC_INTENSET           (*(RwReg8 *)0x42004017U) /**< \brief (ADC) Interrupt Enable Set Register */

+#define REG_ADC_INTFLAG            (*(RwReg8 *)0x42004018U) /**< \brief (ADC) Interrupt Flag Status and Clear Register */

+#define REG_ADC_STATUS             (*(RoReg8 *)0x42004019U) /**< \brief (ADC) Status Register */

+#define REG_ADC_RESULT             (*(RoReg16*)0x4200401AU) /**< \brief (ADC) Result Register */

+#define REG_ADC_WINLT              (*(RwReg16*)0x4200401CU) /**< \brief (ADC) Window Monitor Lower Threshold Register */

+#define REG_ADC_WINUT              (*(RwReg16*)0x42004020U) /**< \brief (ADC) Window Monitor Upper Threshold Register */

+#define REG_ADC_GAINCORR           (*(RwReg16*)0x42004024U) /**< \brief (ADC) Gain Correction Register */

+#define REG_ADC_OFFSETCORR         (*(RwReg16*)0x42004026U) /**< \brief (ADC) Offset Correction Register */

+#define REG_ADC_CALIB              (*(RwReg16*)0x42004028U) /**< \brief (ADC) Calibration Register */

+#define REG_ADC_DBGCTRL            (*(RwReg8 *)0x4200402AU) /**< \brief (ADC) Debug Register */

+#define REG_ADC_TEST               (*(RwReg8 *)0x4200402BU) /**< \brief (ADC) Test Modes Register */

+#define REG_ADC_TESTRESULT         (*(RwReg  *)0x4200402CU) /**< \brief (ADC) Test Result Register */

+#define REG_ADC_DCFG               (*(RwReg8 *)0x42004030U) /**< \brief (ADC) Device Configuration */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for ADC peripheral ========== */

+#define ADC_EXTCHANNEL_MSB          19

+#define ADC_GCLK_ID                 23

+#define ADC_RESULT_MSB              15

+

+#endif /* _SAMD20_ADC_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_dac.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_dac.h
new file mode 100644
index 0000000..b006b1e
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_dac.h
@@ -0,0 +1,75 @@
+/**

+ * \file

+ *

+ * \brief Instance description for DAC

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_DAC_INSTANCE_

+#define _SAMD20_DAC_INSTANCE_

+

+/* ========== Register definition for DAC peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_DAC_CTRLA              (0x42004800U) /**< \brief (DAC) Control Register A */

+#define REG_DAC_CTRLB              (0x42004801U) /**< \brief (DAC) Control Register B */

+#define REG_DAC_EVCTRL             (0x42004802U) /**< \brief (DAC) Event Control Register */

+#define REG_DAC_TEST               (0x42004803U) /**< \brief (DAC) Test Register */

+#define REG_DAC_INTENCLR           (0x42004804U) /**< \brief (DAC) Interrupt Enable Clear Register */

+#define REG_DAC_INTENSET           (0x42004805U) /**< \brief (DAC) Interrupt Enable Set Register */

+#define REG_DAC_INTFLAG            (0x42004806U) /**< \brief (DAC) Interrupt Flag Status and Clear Register */

+#define REG_DAC_STATUS             (0x42004807U) /**< \brief (DAC) Status Register */

+#define REG_DAC_DATA               (0x42004808U) /**< \brief (DAC) Data Register */

+#define REG_DAC_DATABUF            (0x4200480CU) /**< \brief (DAC) Data Buffer Register */

+#else

+#define REG_DAC_CTRLA              (*(RwReg8 *)0x42004800U) /**< \brief (DAC) Control Register A */

+#define REG_DAC_CTRLB              (*(RwReg8 *)0x42004801U) /**< \brief (DAC) Control Register B */

+#define REG_DAC_EVCTRL             (*(RwReg8 *)0x42004802U) /**< \brief (DAC) Event Control Register */

+#define REG_DAC_TEST               (*(RwReg8 *)0x42004803U) /**< \brief (DAC) Test Register */

+#define REG_DAC_INTENCLR           (*(RwReg8 *)0x42004804U) /**< \brief (DAC) Interrupt Enable Clear Register */

+#define REG_DAC_INTENSET           (*(RwReg8 *)0x42004805U) /**< \brief (DAC) Interrupt Enable Set Register */

+#define REG_DAC_INTFLAG            (*(RwReg8 *)0x42004806U) /**< \brief (DAC) Interrupt Flag Status and Clear Register */

+#define REG_DAC_STATUS             (*(RoReg8 *)0x42004807U) /**< \brief (DAC) Status Register */

+#define REG_DAC_DATA               (*(RwReg16*)0x42004808U) /**< \brief (DAC) Data Register */

+#define REG_DAC_DATABUF            (*(RwReg16*)0x4200480CU) /**< \brief (DAC) Data Buffer Register */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for DAC peripheral ========== */

+#define DAC_GCLK_ID                 26

+

+#endif /* _SAMD20_DAC_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_dsu.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_dsu.h
new file mode 100644
index 0000000..01ca63a
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_dsu.h
@@ -0,0 +1,113 @@
+/**

+ * \file

+ *

+ * \brief Instance description for DSU

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_DSU_INSTANCE_

+#define _SAMD20_DSU_INSTANCE_

+

+/* ========== Register definition for DSU peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_DSU_CTRL               (0x41002000U) /**< \brief (DSU) Control Register */

+#define REG_DSU_STATUSA            (0x41002001U) /**< \brief (DSU) Status Register A */

+#define REG_DSU_STATUSB            (0x41002002U) /**< \brief (DSU) Status Register B */

+#define REG_DSU_ADDR               (0x41002004U) /**< \brief (DSU) Address Register */

+#define REG_DSU_LENGTH             (0x41002008U) /**< \brief (DSU) Length Register */

+#define REG_DSU_DATA               (0x4100200CU) /**< \brief (DSU) Data Register */

+#define REG_DSU_DCC0               (0x41002010U) /**< \brief (DSU) Debug Communication Channel Register 0 */

+#define REG_DSU_DCC1               (0x41002014U) /**< \brief (DSU) Debug Communication Channel Register 1 */

+#define REG_DSU_DID                (0x41002018U) /**< \brief (DSU) Device Identification Register */

+#define REG_DSU_DCFG0              (0x410020F0U) /**< \brief (DSU) Device Configuration Register 0 */

+#define REG_DSU_DCFG1              (0x410020F4U) /**< \brief (DSU) Device Configuration Register 1 */

+#define REG_DSU_UPTM               (0x410020F8U) /**< \brief (DSU) UnProtected Test Mode Register */

+#define REG_DSU_TESTMODE           (0x410020FCU) /**< \brief (DSU) Test Mode Register */

+#define REG_DSU_ENTRY0             (0x41003000U) /**< \brief (DSU) CoreSight ROM Table Entry Register 0 */

+#define REG_DSU_ENTRY1             (0x41003004U) /**< \brief (DSU) CoreSight ROM Table Entry Register 1 */

+#define REG_DSU_END                (0x41003008U) /**< \brief (DSU) CoreSight ROM Table End Register */

+#define REG_DSU_MEMTYPE            (0x41003FCCU) /**< \brief (DSU) CoreSight ROM Table Memory Type Register */

+#define REG_DSU_PID4               (0x41003FD0U) /**< \brief (DSU) Peripheral Identification Register 4 */

+#define REG_DSU_PID5               (0x41003FD4U) /**< \brief (DSU) Peripheral Identification Register 5 */

+#define REG_DSU_PID6               (0x41003FD8U) /**< \brief (DSU) Peripheral Identification Register 6 */

+#define REG_DSU_PID7               (0x41003FDCU) /**< \brief (DSU) Peripheral Identification Register 7 */

+#define REG_DSU_PID0               (0x41003FE0U) /**< \brief (DSU) Peripheral Identification Register 0 */

+#define REG_DSU_PID1               (0x41003FE4U) /**< \brief (DSU) Peripheral Identification Register 1 */

+#define REG_DSU_PID2               (0x41003FE8U) /**< \brief (DSU) Peripheral Identification Register 2 */

+#define REG_DSU_PID3               (0x41003FECU) /**< \brief (DSU) Peripheral Identification Register 3 */

+#define REG_DSU_CID0               (0x41003FF0U) /**< \brief (DSU) Component Identification Register 0 */

+#define REG_DSU_CID1               (0x41003FF4U) /**< \brief (DSU) Component Identification Register 1 */

+#define REG_DSU_CID2               (0x41003FF8U) /**< \brief (DSU) Component Identification Register 2 */

+#define REG_DSU_CID3               (0x41003FFCU) /**< \brief (DSU) Component Identification Register 3 */

+#else

+#define REG_DSU_CTRL               (*(WoReg8 *)0x41002000U) /**< \brief (DSU) Control Register */

+#define REG_DSU_STATUSA            (*(RwReg8 *)0x41002001U) /**< \brief (DSU) Status Register A */

+#define REG_DSU_STATUSB            (*(RoReg8 *)0x41002002U) /**< \brief (DSU) Status Register B */

+#define REG_DSU_ADDR               (*(RwReg  *)0x41002004U) /**< \brief (DSU) Address Register */

+#define REG_DSU_LENGTH             (*(RwReg  *)0x41002008U) /**< \brief (DSU) Length Register */

+#define REG_DSU_DATA               (*(RwReg  *)0x4100200CU) /**< \brief (DSU) Data Register */

+#define REG_DSU_DCC0               (*(RwReg  *)0x41002010U) /**< \brief (DSU) Debug Communication Channel Register 0 */

+#define REG_DSU_DCC1               (*(RwReg  *)0x41002014U) /**< \brief (DSU) Debug Communication Channel Register 1 */

+#define REG_DSU_DID                (*(RoReg  *)0x41002018U) /**< \brief (DSU) Device Identification Register */

+#define REG_DSU_DCFG0              (*(RwReg  *)0x410020F0U) /**< \brief (DSU) Device Configuration Register 0 */

+#define REG_DSU_DCFG1              (*(RwReg  *)0x410020F4U) /**< \brief (DSU) Device Configuration Register 1 */

+#define REG_DSU_UPTM               (*(RwReg  *)0x410020F8U) /**< \brief (DSU) UnProtected Test Mode Register */

+#define REG_DSU_TESTMODE           (*(RwReg  *)0x410020FCU) /**< \brief (DSU) Test Mode Register */

+#define REG_DSU_ENTRY0             (*(RoReg  *)0x41003000U) /**< \brief (DSU) CoreSight ROM Table Entry Register 0 */

+#define REG_DSU_ENTRY1             (*(RoReg  *)0x41003004U) /**< \brief (DSU) CoreSight ROM Table Entry Register 1 */

+#define REG_DSU_END                (*(RoReg  *)0x41003008U) /**< \brief (DSU) CoreSight ROM Table End Register */

+#define REG_DSU_MEMTYPE            (*(RoReg  *)0x41003FCCU) /**< \brief (DSU) CoreSight ROM Table Memory Type Register */

+#define REG_DSU_PID4               (*(RoReg  *)0x41003FD0U) /**< \brief (DSU) Peripheral Identification Register 4 */

+#define REG_DSU_PID5               (*(RoReg  *)0x41003FD4U) /**< \brief (DSU) Peripheral Identification Register 5 */

+#define REG_DSU_PID6               (*(RoReg  *)0x41003FD8U) /**< \brief (DSU) Peripheral Identification Register 6 */

+#define REG_DSU_PID7               (*(RoReg  *)0x41003FDCU) /**< \brief (DSU) Peripheral Identification Register 7 */

+#define REG_DSU_PID0               (*(RoReg  *)0x41003FE0U) /**< \brief (DSU) Peripheral Identification Register 0 */

+#define REG_DSU_PID1               (*(RoReg  *)0x41003FE4U) /**< \brief (DSU) Peripheral Identification Register 1 */

+#define REG_DSU_PID2               (*(RoReg  *)0x41003FE8U) /**< \brief (DSU) Peripheral Identification Register 2 */

+#define REG_DSU_PID3               (*(RoReg  *)0x41003FECU) /**< \brief (DSU) Peripheral Identification Register 3 */

+#define REG_DSU_CID0               (*(RoReg  *)0x41003FF0U) /**< \brief (DSU) Component Identification Register 0 */

+#define REG_DSU_CID1               (*(RoReg  *)0x41003FF4U) /**< \brief (DSU) Component Identification Register 1 */

+#define REG_DSU_CID2               (*(RoReg  *)0x41003FF8U) /**< \brief (DSU) Component Identification Register 2 */

+#define REG_DSU_CID3               (*(RoReg  *)0x41003FFCU) /**< \brief (DSU) Component Identification Register 3 */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for DSU peripheral ========== */

+#define DSU_CLK_HSB_ID              3

+

+#endif /* _SAMD20_DSU_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_eic.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_eic.h
new file mode 100644
index 0000000..14bd4c7
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_eic.h
@@ -0,0 +1,80 @@
+/**

+ * \file

+ *

+ * \brief Instance description for EIC

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_EIC_INSTANCE_

+#define _SAMD20_EIC_INSTANCE_

+

+/* ========== Register definition for EIC peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_EIC_CTRL               (0x40001800U) /**< \brief (EIC) Control Register */

+#define REG_EIC_STATUS             (0x40001801U) /**< \brief (EIC) Status Register */

+#define REG_EIC_NMICTRL            (0x40001802U) /**< \brief (EIC) NMI Control Register */

+#define REG_EIC_NMIFLAG            (0x40001803U) /**< \brief (EIC) NMI Interrupt Flag Register */

+#define REG_EIC_EVCTRL             (0x40001804U) /**< \brief (EIC) Event Control Register */

+#define REG_EIC_INTENCLR           (0x40001808U) /**< \brief (EIC) Interrupt Enable Clear Register */

+#define REG_EIC_INTENSET           (0x4000180CU) /**< \brief (EIC) Interrupt Enable Set Register */

+#define REG_EIC_INTFLAG            (0x40001810U) /**< \brief (EIC) Interrupt Flag Status and Clear Register */

+#define REG_EIC_WAKEUP             (0x40001814U) /**< \brief (EIC) Wake-up Enable Register */

+#define REG_EIC_CONFIG0            (0x40001818U) /**< \brief (EIC) Config Register 0 */

+#define REG_EIC_CONFIG1            (0x4000181CU) /**< \brief (EIC) Config Register 1 */

+#else

+#define REG_EIC_CTRL               (*(RwReg8 *)0x40001800U) /**< \brief (EIC) Control Register */

+#define REG_EIC_STATUS             (*(RoReg8 *)0x40001801U) /**< \brief (EIC) Status Register */

+#define REG_EIC_NMICTRL            (*(RwReg8 *)0x40001802U) /**< \brief (EIC) NMI Control Register */

+#define REG_EIC_NMIFLAG            (*(RwReg8 *)0x40001803U) /**< \brief (EIC) NMI Interrupt Flag Register */

+#define REG_EIC_EVCTRL             (*(RwReg  *)0x40001804U) /**< \brief (EIC) Event Control Register */

+#define REG_EIC_INTENCLR           (*(RwReg  *)0x40001808U) /**< \brief (EIC) Interrupt Enable Clear Register */

+#define REG_EIC_INTENSET           (*(RwReg  *)0x4000180CU) /**< \brief (EIC) Interrupt Enable Set Register */

+#define REG_EIC_INTFLAG            (*(RwReg  *)0x40001810U) /**< \brief (EIC) Interrupt Flag Status and Clear Register */

+#define REG_EIC_WAKEUP             (*(RwReg  *)0x40001814U) /**< \brief (EIC) Wake-up Enable Register */

+#define REG_EIC_CONFIG0            (*(RwReg  *)0x40001818U) /**< \brief (EIC) Config Register 0 */

+#define REG_EIC_CONFIG1            (*(RwReg  *)0x4000181CU) /**< \brief (EIC) Config Register 1 */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for EIC peripheral ========== */

+#define EIC_GCLK_ID                 3

+#define EIC_NMI_NO_DETECT_ALLOWED   0

+#define EIC_NUMBER_OF_CONFIG_REGS   2

+#define EIC_NUMBER_OF_INTERRUPTS    16

+

+#endif /* _SAMD20_EIC_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_evsys.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_evsys.h
new file mode 100644
index 0000000..81a177f
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_evsys.h
@@ -0,0 +1,161 @@
+/**

+ * \file

+ *

+ * \brief Instance description for EVSYS

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_EVSYS_INSTANCE_

+#define _SAMD20_EVSYS_INSTANCE_

+

+/* ========== Register definition for EVSYS peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_EVSYS_CTRL             (0x42000400U) /**< \brief (EVSYS) Control Register */

+#define REG_EVSYS_CHANNEL          (0x42000404U) /**< \brief (EVSYS) Channel Register */

+#define REG_EVSYS_USER             (0x42000408U) /**< \brief (EVSYS) User Mux Register */

+#define REG_EVSYS_CHSTATUS         (0x4200040CU) /**< \brief (EVSYS) Channel Status Register */

+#define REG_EVSYS_INTENCLR         (0x42000410U) /**< \brief (EVSYS) Interrupt Enable Clear Register */

+#define REG_EVSYS_INTENSET         (0x42000414U) /**< \brief (EVSYS) Interrupt Enable Set Register */

+#define REG_EVSYS_INTFLAG          (0x42000418U) /**< \brief (EVSYS) Interrupt Flag Status and Clear Register */

+#else

+#define REG_EVSYS_CTRL             (*(WoReg8 *)0x42000400U) /**< \brief (EVSYS) Control Register */

+#define REG_EVSYS_CHANNEL          (*(RwReg  *)0x42000404U) /**< \brief (EVSYS) Channel Register */

+#define REG_EVSYS_USER             (*(RwReg16*)0x42000408U) /**< \brief (EVSYS) User Mux Register */

+#define REG_EVSYS_CHSTATUS         (*(RoReg  *)0x4200040CU) /**< \brief (EVSYS) Channel Status Register */

+#define REG_EVSYS_INTENCLR         (*(RwReg  *)0x42000410U) /**< \brief (EVSYS) Interrupt Enable Clear Register */

+#define REG_EVSYS_INTENSET         (*(RwReg  *)0x42000414U) /**< \brief (EVSYS) Interrupt Enable Set Register */

+#define REG_EVSYS_INTFLAG          (*(RwReg  *)0x42000418U) /**< \brief (EVSYS) Interrupt Flag Status and Clear Register */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for EVSYS peripheral ========== */

+#define EVSYS_CHANNELS              8

+#define EVSYS_CHANNELS_MSB          7

+#define EVSYS_EXT_EVT_MSB           0

+#define EVSYS_GCLK_ID_0             4

+#define EVSYS_GCLK_ID_1             5

+#define EVSYS_GCLK_ID_2             6

+#define EVSYS_GCLK_ID_3             7

+#define EVSYS_GCLK_ID_4             8

+#define EVSYS_GCLK_ID_5             9

+#define EVSYS_GCLK_ID_6             10

+#define EVSYS_GCLK_ID_7             11

+#define EVSYS_GCLK_ID_LSB           4

+#define EVSYS_GCLK_ID_MSB           11

+#define EVSYS_GCLK_ID_SIZE          8

+#define EVSYS_GENERATORS            49

+#define EVSYS_USERS                 14

+

+// GENERATORS

+#define EVSYS_ID_GEN_RTC_CMP_0      1

+#define EVSYS_ID_GEN_RTC_CMP_1      2

+#define EVSYS_ID_GEN_RTC_OVF        3

+#define EVSYS_ID_GEN_RTC_PER_0      4

+#define EVSYS_ID_GEN_RTC_PER_1      5

+#define EVSYS_ID_GEN_RTC_PER_2      6

+#define EVSYS_ID_GEN_RTC_PER_3      7

+#define EVSYS_ID_GEN_RTC_PER_4      8

+#define EVSYS_ID_GEN_RTC_PER_5      9

+#define EVSYS_ID_GEN_RTC_PER_6      10

+#define EVSYS_ID_GEN_RTC_PER_7      11

+#define EVSYS_ID_GEN_EIC_EXTINT_0   12

+#define EVSYS_ID_GEN_EIC_EXTINT_1   13

+#define EVSYS_ID_GEN_EIC_EXTINT_2   14

+#define EVSYS_ID_GEN_EIC_EXTINT_3   15

+#define EVSYS_ID_GEN_EIC_EXTINT_4   16

+#define EVSYS_ID_GEN_EIC_EXTINT_5   17

+#define EVSYS_ID_GEN_EIC_EXTINT_6   18

+#define EVSYS_ID_GEN_EIC_EXTINT_7   19

+#define EVSYS_ID_GEN_EIC_EXTINT_8   20

+#define EVSYS_ID_GEN_EIC_EXTINT_9   21

+#define EVSYS_ID_GEN_EIC_EXTINT_10  22

+#define EVSYS_ID_GEN_EIC_EXTINT_11  23

+#define EVSYS_ID_GEN_EIC_EXTINT_12  24

+#define EVSYS_ID_GEN_EIC_EXTINT_13  25

+#define EVSYS_ID_GEN_EIC_EXTINT_14  26

+#define EVSYS_ID_GEN_EIC_EXTINT_15  27

+#define EVSYS_ID_GEN_TC0_OVF        28

+#define EVSYS_ID_GEN_TC0_MCX_0      29

+#define EVSYS_ID_GEN_TC0_MCX_1      30

+#define EVSYS_ID_GEN_TC1_OVF        31

+#define EVSYS_ID_GEN_TC1_MCX_0      32

+#define EVSYS_ID_GEN_TC1_MCX_1      33

+#define EVSYS_ID_GEN_TC2_OVF        34

+#define EVSYS_ID_GEN_TC2_MCX_0      35

+#define EVSYS_ID_GEN_TC2_MCX_1      36

+#define EVSYS_ID_GEN_TC3_OVF        37

+#define EVSYS_ID_GEN_TC3_MCX_0      38

+#define EVSYS_ID_GEN_TC3_MCX_1      39

+#define EVSYS_ID_GEN_TC4_OVF        40

+#define EVSYS_ID_GEN_TC4_MCX_0      41

+#define EVSYS_ID_GEN_TC4_MCX_1      42

+#define EVSYS_ID_GEN_TC5_OVF        43

+#define EVSYS_ID_GEN_TC5_MCX_0      44

+#define EVSYS_ID_GEN_TC5_MCX_1      45

+#define EVSYS_ID_GEN_TC6_OVF        46

+#define EVSYS_ID_GEN_TC6_MCX_0      47

+#define EVSYS_ID_GEN_TC6_MCX_1      48

+#define EVSYS_ID_GEN_TC7_OVF        49

+#define EVSYS_ID_GEN_TC7_MCX_0      50

+#define EVSYS_ID_GEN_TC7_MCX_1      51

+#define EVSYS_ID_GEN_ADC_RESRDY     52

+#define EVSYS_ID_GEN_ADC_WINMON     53

+#define EVSYS_ID_GEN_AC_COMP_0      54

+#define EVSYS_ID_GEN_AC_COMP_1      55

+#define EVSYS_ID_GEN_AC_WIN         56

+#define EVSYS_ID_GEN_DAC_EMPTY      57

+#define EVSYS_ID_GEN_PTC_EOC        58

+#define EVSYS_ID_GEN_PTC_WCOMP      59

+

+// USERS

+#define EVSYS_ID_USER_TC0_EVU       0

+#define EVSYS_ID_USER_TC1_EVU       1

+#define EVSYS_ID_USER_TC2_EVU       2

+#define EVSYS_ID_USER_TC3_EVU       3

+#define EVSYS_ID_USER_TC4_EVU       4

+#define EVSYS_ID_USER_TC5_EVU       5

+#define EVSYS_ID_USER_TC6_EVU       6

+#define EVSYS_ID_USER_TC7_EVU       7

+#define EVSYS_ID_USER_ADC_START     8

+#define EVSYS_ID_USER_ADC_SYNC      9

+#define EVSYS_ID_USER_AC_SOC_0      10

+#define EVSYS_ID_USER_AC_SOC_1      11

+#define EVSYS_ID_USER_DAC_START     12

+#define EVSYS_ID_USER_PTC_STCONV    13

+

+#endif /* _SAMD20_EVSYS_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_gclk.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_gclk.h
new file mode 100644
index 0000000..dba56c1
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_gclk.h
@@ -0,0 +1,76 @@
+/**

+ * \file

+ *

+ * \brief Instance description for GCLK

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_GCLK_INSTANCE_

+#define _SAMD20_GCLK_INSTANCE_

+

+/* ========== Register definition for GCLK peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_GCLK_CTRL              (0x40000C00U) /**< \brief (GCLK) Control Register */

+#define REG_GCLK_STATUS            (0x40000C01U) /**< \brief (GCLK) Status Register */

+#define REG_GCLK_CLKCTRL           (0x40000C02U) /**< \brief (GCLK) Generic Clock Control Register */

+#define REG_GCLK_GENCTRL           (0x40000C04U) /**< \brief (GCLK) Generic Clock Generator Control Register */

+#define REG_GCLK_GENDIV            (0x40000C08U) /**< \brief (GCLK) Generic Clock Generator Division Register */

+#else

+#define REG_GCLK_CTRL              (*(RwReg8 *)0x40000C00U) /**< \brief (GCLK) Control Register */

+#define REG_GCLK_STATUS            (*(RoReg8 *)0x40000C01U) /**< \brief (GCLK) Status Register */

+#define REG_GCLK_CLKCTRL           (*(RwReg16*)0x40000C02U) /**< \brief (GCLK) Generic Clock Control Register */

+#define REG_GCLK_GENCTRL           (*(RwReg  *)0x40000C04U) /**< \brief (GCLK) Generic Clock Generator Control Register */

+#define REG_GCLK_GENDIV            (*(RwReg  *)0x40000C08U) /**< \brief (GCLK) Generic Clock Generator Division Register */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for GCLK peripheral ========== */

+#define GCLK_GEN_NUM_MSB            7

+#define GCLK_GEN_SOURCE_NUM_MSB     7

+#define GCLK_MAX_DIV_BITS           16

+#define GCLK_NUM                    28

+#define GCLK_SOURCE_DFLL48M         7

+#define GCLK_SOURCE_GCLKGEN1        2

+#define GCLK_SOURCE_GCLKIN          1

+#define GCLK_SOURCE_OSCULP32K       3

+#define GCLK_SOURCE_OSC8M           6

+#define GCLK_SOURCE_OSC32K          4

+#define GCLK_SOURCE_XOSC            0

+#define GCLK_SOURCE_XOSC32K         5

+

+#endif /* _SAMD20_GCLK_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_nvmctrl.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_nvmctrl.h
new file mode 100644
index 0000000..7852e76
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_nvmctrl.h
@@ -0,0 +1,94 @@
+/**

+ * \file

+ *

+ * \brief Instance description for NVMCTRL

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_NVMCTRL_INSTANCE_

+#define _SAMD20_NVMCTRL_INSTANCE_

+

+/* ========== Register definition for NVMCTRL peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_NVMCTRL_CTRLA          (0x41004000U) /**< \brief (NVMCTRL) NVM Control Register A */

+#define REG_NVMCTRL_CTRLB          (0x41004004U) /**< \brief (NVMCTRL) NVM Control Register B */

+#define REG_NVMCTRL_PARAM          (0x41004008U) /**< \brief (NVMCTRL) Parameter Register */

+#define REG_NVMCTRL_INTENCLR       (0x4100400CU) /**< \brief (NVMCTRL) Interrupt Enable Clear Register */

+#define REG_NVMCTRL_INTENSET       (0x41004010U) /**< \brief (NVMCTRL) Interrupt Enable Set Register */

+#define REG_NVMCTRL_INTFLAG        (0x41004014U) /**< \brief (NVMCTRL) Interrupt Flag Status and Clear Register */

+#define REG_NVMCTRL_STATUS         (0x41004018U) /**< \brief (NVMCTRL) Status Register */

+#define REG_NVMCTRL_ADDR           (0x4100401CU) /**< \brief (NVMCTRL) Address Register */

+#define REG_NVMCTRL_LOCK           (0x41004020U) /**< \brief (NVMCTRL) Lock Register */

+#else

+#define REG_NVMCTRL_CTRLA          (*(RwReg16*)0x41004000U) /**< \brief (NVMCTRL) NVM Control Register A */

+#define REG_NVMCTRL_CTRLB          (*(RwReg  *)0x41004004U) /**< \brief (NVMCTRL) NVM Control Register B */

+#define REG_NVMCTRL_PARAM          (*(RwReg  *)0x41004008U) /**< \brief (NVMCTRL) Parameter Register */

+#define REG_NVMCTRL_INTENCLR       (*(RwReg8 *)0x4100400CU) /**< \brief (NVMCTRL) Interrupt Enable Clear Register */

+#define REG_NVMCTRL_INTENSET       (*(RwReg8 *)0x41004010U) /**< \brief (NVMCTRL) Interrupt Enable Set Register */

+#define REG_NVMCTRL_INTFLAG        (*(RwReg8 *)0x41004014U) /**< \brief (NVMCTRL) Interrupt Flag Status and Clear Register */

+#define REG_NVMCTRL_STATUS         (*(RwReg16*)0x41004018U) /**< \brief (NVMCTRL) Status Register */

+#define REG_NVMCTRL_ADDR           (*(RwReg  *)0x4100401CU) /**< \brief (NVMCTRL) Address Register */

+#define REG_NVMCTRL_LOCK           (*(RwReg16*)0x41004020U) /**< \brief (NVMCTRL) Lock Register */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for NVMCTRL peripheral ========== */

+#define NVMCTRL_AUX0_ADDRESS        (NVMCTRL_USER_PAGE_ADDRESS + 0x00004000)

+#define NVMCTRL_AUX1_ADDRESS        (NVMCTRL_USER_PAGE_ADDRESS + 0x00006000)

+#define NVMCTRL_AUX2_ADDRESS        (NVMCTRL_USER_PAGE_ADDRESS + 0x00008000)

+#define NVMCTRL_AUX3_ADDRESS        (NVMCTRL_USER_PAGE_ADDRESS + 0x0000A000)

+#define NVMCTRL_CLK_AHB_ID          4

+#define NVMCTRL_FACTORY_WORD_IMPLEMENTED_MASK 0XC0000007FFFFFFFF

+#define NVMCTRL_FLASH_SIZE          (NVMCTRL_PAGES*NVMCTRL_PAGE_SIZE)

+#define NVMCTRL_FUSES_SECURE_NVM    

+#define NVMCTRL_FUSES_SECURE_RAM    

+#define NVMCTRL_FUSES_SECURE_STATE  

+#define NVMCTRL_LOCKBIT_ADDRESS     (NVMCTRL_USER_PAGE_ADDRESS + 0x00002000)

+#define NVMCTRL_PAGES               4096

+#define NVMCTRL_PAGE_HW             (NVMCTRL_PAGE_SIZE/2)

+#define NVMCTRL_PAGE_SIZE           (1<<NVMCTRL_PSZ_BITS)

+#define NVMCTRL_PAGE_W              (NVMCTRL_PAGE_SIZE/4)

+#define NVMCTRL_PMSB                3

+#define NVMCTRL_PSZ_BITS            6

+#define NVMCTRL_ROW_PAGES           (NVMCTRL_ROW_SIZE/NVMCTRL_PAGE_SIZE)

+#define NVMCTRL_ROW_SIZE            (NVMCTRL_PAGE_SIZE*4)

+#define NVMCTRL_USER_PAGE_ADDRESS   (FLASH_ADDR + NVMCTRL_USER_PAGE_OFFSET)

+#define NVMCTRL_USER_PAGE_OFFSET    0x00800000

+#define NVMCTRL_USER_WORD_IMPLEMENTED_MASK 0XC01FFFFFFFFFFFFF

+

+#endif /* _SAMD20_NVMCTRL_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_pac0.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_pac0.h
new file mode 100644
index 0000000..96b74dc
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_pac0.h
@@ -0,0 +1,59 @@
+/**

+ * \file

+ *

+ * \brief Instance description for PAC0

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_PAC0_INSTANCE_

+#define _SAMD20_PAC0_INSTANCE_

+

+/* ========== Register definition for PAC0 peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_PAC0_WPCLR             (0x40000000U) /**< \brief (PAC0) Write Protection Clear Register */

+#define REG_PAC0_WPSET             (0x40000004U) /**< \brief (PAC0) Write Protection Set Register */

+#else

+#define REG_PAC0_WPCLR             (*(RwReg  *)0x40000000U) /**< \brief (PAC0) Write Protection Clear Register */

+#define REG_PAC0_WPSET             (*(RwReg  *)0x40000004U) /**< \brief (PAC0) Write Protection Set Register */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for PAC0 peripheral ========== */

+#define PAC0_WPROT_DEFAULT_VAL      0x00000000

+

+#endif /* _SAMD20_PAC0_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_pac1.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_pac1.h
new file mode 100644
index 0000000..1455ba2
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_pac1.h
@@ -0,0 +1,59 @@
+/**

+ * \file

+ *

+ * \brief Instance description for PAC1

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_PAC1_INSTANCE_

+#define _SAMD20_PAC1_INSTANCE_

+

+/* ========== Register definition for PAC1 peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_PAC1_WPCLR             (0x41000000U) /**< \brief (PAC1) Write Protection Clear Register */

+#define REG_PAC1_WPSET             (0x41000004U) /**< \brief (PAC1) Write Protection Set Register */

+#else

+#define REG_PAC1_WPCLR             (*(RwReg  *)0x41000000U) /**< \brief (PAC1) Write Protection Clear Register */

+#define REG_PAC1_WPSET             (*(RwReg  *)0x41000004U) /**< \brief (PAC1) Write Protection Set Register */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for PAC1 peripheral ========== */

+#define PAC1_WPROT_DEFAULT_VAL      0x00000002

+

+#endif /* _SAMD20_PAC1_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_pac2.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_pac2.h
new file mode 100644
index 0000000..1c120f3
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_pac2.h
@@ -0,0 +1,59 @@
+/**

+ * \file

+ *

+ * \brief Instance description for PAC2

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_PAC2_INSTANCE_

+#define _SAMD20_PAC2_INSTANCE_

+

+/* ========== Register definition for PAC2 peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_PAC2_WPCLR             (0x42000000U) /**< \brief (PAC2) Write Protection Clear Register */

+#define REG_PAC2_WPSET             (0x42000004U) /**< \brief (PAC2) Write Protection Set Register */

+#else

+#define REG_PAC2_WPCLR             (*(RwReg  *)0x42000000U) /**< \brief (PAC2) Write Protection Clear Register */

+#define REG_PAC2_WPSET             (*(RwReg  *)0x42000004U) /**< \brief (PAC2) Write Protection Set Register */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for PAC2 peripheral ========== */

+#define PAC2_WPROT_DEFAULT_VAL      0x00100000

+

+#endif /* _SAMD20_PAC2_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_pm.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_pm.h
new file mode 100644
index 0000000..7a2c1ab
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_pm.h
@@ -0,0 +1,87 @@
+/**

+ * \file

+ *

+ * \brief Instance description for PM

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_PM_INSTANCE_

+#define _SAMD20_PM_INSTANCE_

+

+/* ========== Register definition for PM peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_PM_CTRL                (0x40000400U) /**< \brief (PM) Control Register */

+#define REG_PM_SLEEP               (0x40000401U) /**< \brief (PM) Sleep Register */

+#define REG_PM_CPUSEL              (0x40000408U) /**< \brief (PM) CPU Clock Select */

+#define REG_PM_APBASEL             (0x40000409U) /**< \brief (PM) APBA Clock Select */

+#define REG_PM_APBBSEL             (0x4000040AU) /**< \brief (PM) APBB Clock Select */

+#define REG_PM_APBCSEL             (0x4000040BU) /**< \brief (PM) APBC Clock Select */

+#define REG_PM_AHBMASK             (0x40000414U) /**< \brief (PM) AHB Mask */

+#define REG_PM_APBAMASK            (0x40000418U) /**< \brief (PM) APBA Mask */

+#define REG_PM_APBBMASK            (0x4000041CU) /**< \brief (PM) APBB Mask */

+#define REG_PM_APBCMASK            (0x40000420U) /**< \brief (PM) APBC Mask */

+#define REG_PM_INTENCLR            (0x40000434U) /**< \brief (PM) Interrupt Enable Clear Register */

+#define REG_PM_INTENSET            (0x40000435U) /**< \brief (PM) Interrupt Enable Set Register */

+#define REG_PM_INTFLAG             (0x40000436U) /**< \brief (PM) Interrupt Flag Status and Clear Register */

+#define REG_PM_RCAUSE              (0x40000438U) /**< \brief (PM) Reset Cause Register */

+#else

+#define REG_PM_CTRL                (*(RwReg8 *)0x40000400U) /**< \brief (PM) Control Register */

+#define REG_PM_SLEEP               (*(RwReg8 *)0x40000401U) /**< \brief (PM) Sleep Register */

+#define REG_PM_CPUSEL              (*(RwReg8 *)0x40000408U) /**< \brief (PM) CPU Clock Select */

+#define REG_PM_APBASEL             (*(RwReg8 *)0x40000409U) /**< \brief (PM) APBA Clock Select */

+#define REG_PM_APBBSEL             (*(RwReg8 *)0x4000040AU) /**< \brief (PM) APBB Clock Select */

+#define REG_PM_APBCSEL             (*(RwReg8 *)0x4000040BU) /**< \brief (PM) APBC Clock Select */

+#define REG_PM_AHBMASK             (*(RwReg  *)0x40000414U) /**< \brief (PM) AHB Mask */

+#define REG_PM_APBAMASK            (*(RwReg  *)0x40000418U) /**< \brief (PM) APBA Mask */

+#define REG_PM_APBBMASK            (*(RwReg  *)0x4000041CU) /**< \brief (PM) APBB Mask */

+#define REG_PM_APBCMASK            (*(RwReg  *)0x40000420U) /**< \brief (PM) APBC Mask */

+#define REG_PM_INTENCLR            (*(RwReg8 *)0x40000434U) /**< \brief (PM) Interrupt Enable Clear Register */

+#define REG_PM_INTENSET            (*(RwReg8 *)0x40000435U) /**< \brief (PM) Interrupt Enable Set Register */

+#define REG_PM_INTFLAG             (*(RwReg8 *)0x40000436U) /**< \brief (PM) Interrupt Flag Status and Clear Register */

+#define REG_PM_RCAUSE              (*(RoReg8 *)0x40000438U) /**< \brief (PM) Reset Cause Register */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for PM peripheral ========== */

+#define PM_CTRL_MCSEL_DFLL48M       3

+#define PM_CTRL_MCSEL_GCLK          0

+#define PM_CTRL_MCSEL_OSC8M         1

+#define PM_CTRL_MCSEL_XOSC          2

+#define PM_PM_CLK_APB_NUM           2

+

+#endif /* _SAMD20_PM_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_port.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_port.h
new file mode 100644
index 0000000..0be37a2
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_port.h
@@ -0,0 +1,133 @@
+/**

+ * \file

+ *

+ * \brief Instance description for PORT

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_PORT_INSTANCE_

+#define _SAMD20_PORT_INSTANCE_

+

+/* ========== Register definition for PORT peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_PORT_DIR0              (0x41004400U) /**< \brief (PORT) Data Direction Register 0 */

+#define REG_PORT_DIRCLR0           (0x41004404U) /**< \brief (PORT) Data Direction Clear Register 0 */

+#define REG_PORT_DIRSET0           (0x41004408U) /**< \brief (PORT) Data Direction Set Register 0 */

+#define REG_PORT_DIRTGL0           (0x4100440CU) /**< \brief (PORT) Data Direction Toggle Register 0 */

+#define REG_PORT_OUT0              (0x41004410U) /**< \brief (PORT) Data Output Value Register 0 */

+#define REG_PORT_OUTCLR0           (0x41004414U) /**< \brief (PORT) Data Output Value Clear Register 0 */

+#define REG_PORT_OUTSET0           (0x41004418U) /**< \brief (PORT) Data Output Value Set Register 0 */

+#define REG_PORT_OUTTGL0           (0x4100441CU) /**< \brief (PORT) Data Output Value Toggle Register 0 */

+#define REG_PORT_IN0               (0x41004420U) /**< \brief (PORT) Data Input Value Register 0 */

+#define REG_PORT_CTRL0             (0x41004424U) /**< \brief (PORT) Control Register 0 */

+#define REG_PORT_WRCONFIG0         (0x41004428U) /**< \brief (PORT) Write Configuration Register 0 */

+#define REG_PORT_PMUX0             (0x41004430U) /**< \brief (PORT) Peripheral Multiplexing Register 0 */

+#define REG_PORT_PINCFG0           (0x41004440U) /**< \brief (PORT) Pin Configuration Register 0 */

+#define REG_PORT_DIR1              (0x41004480U) /**< \brief (PORT) Data Direction Register 1 */

+#define REG_PORT_DIRCLR1           (0x41004484U) /**< \brief (PORT) Data Direction Clear Register 1 */

+#define REG_PORT_DIRSET1           (0x41004488U) /**< \brief (PORT) Data Direction Set Register 1 */

+#define REG_PORT_DIRTGL1           (0x4100448CU) /**< \brief (PORT) Data Direction Toggle Register 1 */

+#define REG_PORT_OUT1              (0x41004490U) /**< \brief (PORT) Data Output Value Register 1 */

+#define REG_PORT_OUTCLR1           (0x41004494U) /**< \brief (PORT) Data Output Value Clear Register 1 */

+#define REG_PORT_OUTSET1           (0x41004498U) /**< \brief (PORT) Data Output Value Set Register 1 */

+#define REG_PORT_OUTTGL1           (0x4100449CU) /**< \brief (PORT) Data Output Value Toggle Register 1 */

+#define REG_PORT_IN1               (0x410044A0U) /**< \brief (PORT) Data Input Value Register 1 */

+#define REG_PORT_CTRL1             (0x410044A4U) /**< \brief (PORT) Control Register 1 */

+#define REG_PORT_WRCONFIG1         (0x410044A8U) /**< \brief (PORT) Write Configuration Register 1 */

+#define REG_PORT_PMUX1             (0x410044B0U) /**< \brief (PORT) Peripheral Multiplexing Register 1 */

+#define REG_PORT_PINCFG1           (0x410044C0U) /**< \brief (PORT) Pin Configuration Register 1 */

+#else

+#define REG_PORT_DIR0              (*(RwReg  *)0x41004400U) /**< \brief (PORT) Data Direction Register 0 */

+#define REG_PORT_DIRCLR0           (*(RwReg  *)0x41004404U) /**< \brief (PORT) Data Direction Clear Register 0 */

+#define REG_PORT_DIRSET0           (*(RwReg  *)0x41004408U) /**< \brief (PORT) Data Direction Set Register 0 */

+#define REG_PORT_DIRTGL0           (*(RwReg  *)0x4100440CU) /**< \brief (PORT) Data Direction Toggle Register 0 */

+#define REG_PORT_OUT0              (*(RwReg  *)0x41004410U) /**< \brief (PORT) Data Output Value Register 0 */

+#define REG_PORT_OUTCLR0           (*(RwReg  *)0x41004414U) /**< \brief (PORT) Data Output Value Clear Register 0 */

+#define REG_PORT_OUTSET0           (*(RwReg  *)0x41004418U) /**< \brief (PORT) Data Output Value Set Register 0 */

+#define REG_PORT_OUTTGL0           (*(RwReg  *)0x4100441CU) /**< \brief (PORT) Data Output Value Toggle Register 0 */

+#define REG_PORT_IN0               (*(RoReg  *)0x41004420U) /**< \brief (PORT) Data Input Value Register 0 */

+#define REG_PORT_CTRL0             (*(RwReg  *)0x41004424U) /**< \brief (PORT) Control Register 0 */

+#define REG_PORT_WRCONFIG0         (*(WoReg  *)0x41004428U) /**< \brief (PORT) Write Configuration Register 0 */

+#define REG_PORT_PMUX0             (*(RwReg  *)0x41004430U) /**< \brief (PORT) Peripheral Multiplexing Register 0 */

+#define REG_PORT_PINCFG0           (*(RwReg  *)0x41004440U) /**< \brief (PORT) Pin Configuration Register 0 */

+#define REG_PORT_DIR1              (*(RwReg  *)0x41004480U) /**< \brief (PORT) Data Direction Register 1 */

+#define REG_PORT_DIRCLR1           (*(RwReg  *)0x41004484U) /**< \brief (PORT) Data Direction Clear Register 1 */

+#define REG_PORT_DIRSET1           (*(RwReg  *)0x41004488U) /**< \brief (PORT) Data Direction Set Register 1 */

+#define REG_PORT_DIRTGL1           (*(RwReg  *)0x4100448CU) /**< \brief (PORT) Data Direction Toggle Register 1 */

+#define REG_PORT_OUT1              (*(RwReg  *)0x41004490U) /**< \brief (PORT) Data Output Value Register 1 */

+#define REG_PORT_OUTCLR1           (*(RwReg  *)0x41004494U) /**< \brief (PORT) Data Output Value Clear Register 1 */

+#define REG_PORT_OUTSET1           (*(RwReg  *)0x41004498U) /**< \brief (PORT) Data Output Value Set Register 1 */

+#define REG_PORT_OUTTGL1           (*(RwReg  *)0x4100449CU) /**< \brief (PORT) Data Output Value Toggle Register 1 */

+#define REG_PORT_IN1               (*(RoReg  *)0x410044A0U) /**< \brief (PORT) Data Input Value Register 1 */

+#define REG_PORT_CTRL1             (*(RwReg  *)0x410044A4U) /**< \brief (PORT) Control Register 1 */

+#define REG_PORT_WRCONFIG1         (*(WoReg  *)0x410044A8U) /**< \brief (PORT) Write Configuration Register 1 */

+#define REG_PORT_PMUX1             (*(RwReg  *)0x410044B0U) /**< \brief (PORT) Peripheral Multiplexing Register 1 */

+#define REG_PORT_PINCFG1           (*(RwReg  *)0x410044C0U) /**< \brief (PORT) Pin Configuration Register 1 */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for PORT peripheral ========== */

+#define PORT_BITS                   64

+#define PORT_DIR_DEFAULT_VAL        { 0x00000000, 0x00000000 }

+#define PORT_DIR_IMPLEMENTED        { 0xDBFFFFFF, 0xC0C3FFFF }

+#define PORT_DRVSTR_DEFAULT_VAL     { 0x00000000, 0x00000000 }

+#define PORT_DRVSTR_IMPLEMENTED     { 0x00000000, 0x00000000 }

+#define PORT_GROUPS                 2

+#define PORT_INEN_DEFAULT_VAL       { 0x00000000, 0x00000000 }

+#define PORT_INEN_IMPLEMENTED       { 0xDBFFFFFF, 0xC0C3FFFF }

+#define PORT_ODRAIN_DEFAULT_VAL     { 0x00000000, 0x00000000 }

+#define PORT_ODRAIN_IMPLEMENTED     { 0x00000000, 0x00000000 }

+#define PORT_OUT_DEFAULT_VAL        { 0x00000000, 0x00000000 }

+#define PORT_OUT_IMPLEMENTED        { 0xDBFFFFFF, 0xC0C3FFFF }

+#define PORT_PIN_IMPLEMENTED        { 0xDBFFFFFF, 0xC0C3FFFF }

+#define PORT_PMUXBIT0_DEFAULT_VAL   { 0x00000000, 0x00000000 }

+#define PORT_PMUXBIT0_IMPLEMENTED   { 0xDBFFFFFF, 0xC0C3FFFF }

+#define PORT_PMUXBIT1_DEFAULT_VAL   { 0x40000000, 0x00000000 }

+#define PORT_PMUXBIT1_IMPLEMENTED   { 0xDBFFFFF3, 0xC0C3FF0F }

+#define PORT_PMUXBIT2_DEFAULT_VAL   { 0x40000000, 0x00000000 }

+#define PORT_PMUXBIT2_IMPLEMENTED   { 0xDBFFFFF3, 0xC0C3FF0F }

+#define PORT_PMUXBIT3_DEFAULT_VAL   { 0x00000000, 0x00000000 }

+#define PORT_PMUXBIT3_IMPLEMENTED   { 0x00000000, 0x00000000 }

+#define PORT_PMUXEN_DEFAULT_VAL     { 0x64000000, 0x3F3C0000 }

+#define PORT_PMUXEN_IMPLEMENTED     { 0xDBFFFFFF, 0xC0C3FFFF }

+#define PORT_PULLEN_DEFAULT_VAL     { 0x00000000, 0x00000000 }

+#define PORT_PULLEN_IMPLEMENTED     { 0xDBFFFFFF, 0xC0C3FFFF }

+#define PORT_SLEWLIM_DEFAULT_VAL    { 0x00000000, 0x00000000 }

+#define PORT_SLEWLIM_IMPLEMENTED    { 0x00000000, 0x00000000 }

+

+#endif /* _SAMD20_PORT_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_rtc.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_rtc.h
new file mode 100644
index 0000000..d8bcd30
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_rtc.h
@@ -0,0 +1,114 @@
+/**

+ * \file

+ *

+ * \brief Instance description for RTC

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_RTC_INSTANCE_

+#define _SAMD20_RTC_INSTANCE_

+

+/* ========== Register definition for RTC peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_RTC_MODE0_CTRL         (0x40001400U) /**< \brief (RTC) MODE0 Control Register */

+#define REG_RTC_MODE1_CTRL         (0x40001400U) /**< \brief (RTC) MODE1 Control Register */

+#define REG_RTC_MODE2_CTRL         (0x40001400U) /**< \brief (RTC) MODE2 Control Register */

+#define REG_RTC_READREQ            (0x40001402U) /**< \brief (RTC) Read Request Register */

+#define REG_RTC_MODE0_EVCTRL       (0x40001404U) /**< \brief (RTC) MODE0 Event Control Register */

+#define REG_RTC_MODE1_EVCTRL       (0x40001404U) /**< \brief (RTC) MODE1 Event Control Register */

+#define REG_RTC_MODE2_EVCTRL       (0x40001404U) /**< \brief (RTC) MODE2 Event Control Register */

+#define REG_RTC_MODE0_INTENCLR     (0x40001406U) /**< \brief (RTC) MODE0 Interrupt Enable Clear Register */

+#define REG_RTC_MODE1_INTENCLR     (0x40001406U) /**< \brief (RTC) MODE1 Interrupt Enable Clear Register */

+#define REG_RTC_MODE2_INTENCLR     (0x40001406U) /**< \brief (RTC) MODE2 Interrupt Enable Clear Register */

+#define REG_RTC_MODE0_INTENSET     (0x40001407U) /**< \brief (RTC) MODE0 Interrupt Enable Set Register */

+#define REG_RTC_MODE1_INTENSET     (0x40001407U) /**< \brief (RTC) MODE1 Interrupt Enable Set Register */

+#define REG_RTC_MODE2_INTENSET     (0x40001407U) /**< \brief (RTC) MODE2 Interrupt Enable Set Register */

+#define REG_RTC_MODE0_INTFLAG      (0x40001408U) /**< \brief (RTC) MODE0 Interrupt Flag Status and Clear Register */

+#define REG_RTC_MODE1_INTFLAG      (0x40001408U) /**< \brief (RTC) MODE1 Interrupt Flag Status and Clear Register */

+#define REG_RTC_MODE2_INTFLAG      (0x40001408U) /**< \brief (RTC) MODE2 Interrupt Flag Status and Clear Register */

+#define REG_RTC_STATUS             (0x4000140AU) /**< \brief (RTC) Status Register */

+#define REG_RTC_DBGCTRL            (0x4000140BU) /**< \brief (RTC) Debug Register */

+#define REG_RTC_FREQCORR           (0x4000140CU) /**< \brief (RTC) Frequency Correction Register */

+#define REG_RTC_MODE0_COUNT        (0x40001410U) /**< \brief (RTC) MODE0 Count Register */

+#define REG_RTC_MODE1_COUNT        (0x40001410U) /**< \brief (RTC) MODE1 Count Register */

+#define REG_RTC_MODE2_CLOCK        (0x40001410U) /**< \brief (RTC) MODE2 Clock Register */

+#define REG_RTC_MODE1_PER          (0x40001414U) /**< \brief (RTC) MODE1 Period Register */

+#define REG_RTC_MODE0_COMP0        (0x40001418U) /**< \brief (RTC) MODE0 Compare Register 0 */

+#define REG_RTC_MODE1_COMP0        (0x40001418U) /**< \brief (RTC) MODE1 Compare Register 0 */

+#define REG_RTC_MODE1_COMP1        (0x4000141AU) /**< \brief (RTC) MODE1 Compare Register 1 */

+#define REG_RTC_MODE2_ALARM_ALARM0 (0x40001418U) /**< \brief (RTC) MODE2_ALARM Alarm Register 0 */

+#define REG_RTC_MODE2_ALARM_MASK0  (0x4000141CU) /**< \brief (RTC) MODE2_ALARM Alarm Mask Register 0 */

+#else

+#define REG_RTC_MODE0_CTRL         (*(RwReg16*)0x40001400U) /**< \brief (RTC) MODE0 Control Register */

+#define REG_RTC_MODE1_CTRL         (*(RwReg16*)0x40001400U) /**< \brief (RTC) MODE1 Control Register */

+#define REG_RTC_MODE2_CTRL         (*(RwReg16*)0x40001400U) /**< \brief (RTC) MODE2 Control Register */

+#define REG_RTC_READREQ            (*(RwReg16*)0x40001402U) /**< \brief (RTC) Read Request Register */

+#define REG_RTC_MODE0_EVCTRL       (*(RwReg16*)0x40001404U) /**< \brief (RTC) MODE0 Event Control Register */

+#define REG_RTC_MODE1_EVCTRL       (*(RwReg16*)0x40001404U) /**< \brief (RTC) MODE1 Event Control Register */

+#define REG_RTC_MODE2_EVCTRL       (*(RwReg16*)0x40001404U) /**< \brief (RTC) MODE2 Event Control Register */

+#define REG_RTC_MODE0_INTENCLR     (*(RwReg8 *)0x40001406U) /**< \brief (RTC) MODE0 Interrupt Enable Clear Register */

+#define REG_RTC_MODE1_INTENCLR     (*(RwReg8 *)0x40001406U) /**< \brief (RTC) MODE1 Interrupt Enable Clear Register */

+#define REG_RTC_MODE2_INTENCLR     (*(RwReg8 *)0x40001406U) /**< \brief (RTC) MODE2 Interrupt Enable Clear Register */

+#define REG_RTC_MODE0_INTENSET     (*(RwReg8 *)0x40001407U) /**< \brief (RTC) MODE0 Interrupt Enable Set Register */

+#define REG_RTC_MODE1_INTENSET     (*(RwReg8 *)0x40001407U) /**< \brief (RTC) MODE1 Interrupt Enable Set Register */

+#define REG_RTC_MODE2_INTENSET     (*(RwReg8 *)0x40001407U) /**< \brief (RTC) MODE2 Interrupt Enable Set Register */

+#define REG_RTC_MODE0_INTFLAG      (*(RwReg8 *)0x40001408U) /**< \brief (RTC) MODE0 Interrupt Flag Status and Clear Register */

+#define REG_RTC_MODE1_INTFLAG      (*(RwReg8 *)0x40001408U) /**< \brief (RTC) MODE1 Interrupt Flag Status and Clear Register */

+#define REG_RTC_MODE2_INTFLAG      (*(RwReg8 *)0x40001408U) /**< \brief (RTC) MODE2 Interrupt Flag Status and Clear Register */

+#define REG_RTC_STATUS             (*(RwReg8 *)0x4000140AU) /**< \brief (RTC) Status Register */

+#define REG_RTC_DBGCTRL            (*(RwReg8 *)0x4000140BU) /**< \brief (RTC) Debug Register */

+#define REG_RTC_FREQCORR           (*(RwReg8 *)0x4000140CU) /**< \brief (RTC) Frequency Correction Register */

+#define REG_RTC_MODE0_COUNT        (*(RwReg  *)0x40001410U) /**< \brief (RTC) MODE0 Count Register */

+#define REG_RTC_MODE1_COUNT        (*(RwReg16*)0x40001410U) /**< \brief (RTC) MODE1 Count Register */

+#define REG_RTC_MODE2_CLOCK        (*(RwReg  *)0x40001410U) /**< \brief (RTC) MODE2 Clock Register */

+#define REG_RTC_MODE1_PER          (*(RwReg16*)0x40001414U) /**< \brief (RTC) MODE1 Period Register */

+#define REG_RTC_MODE0_COMP0        (*(RwReg  *)0x40001418U) /**< \brief (RTC) MODE0 Compare Register 0 */

+#define REG_RTC_MODE1_COMP0        (*(RwReg16*)0x40001418U) /**< \brief (RTC) MODE1 Compare Register 0 */

+#define REG_RTC_MODE1_COMP1        (*(RwReg16*)0x4000141AU) /**< \brief (RTC) MODE1 Compare Register 1 */

+#define REG_RTC_MODE2_ALARM_ALARM0 (*(RwReg  *)0x40001418U) /**< \brief (RTC) MODE2_ALARM Alarm Register 0 */

+#define REG_RTC_MODE2_ALARM_MASK0  (*(RwReg  *)0x4000141CU) /**< \brief (RTC) MODE2_ALARM Alarm Mask Register 0 */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for RTC peripheral ========== */

+#define RTC_GCLK_ID                 2

+#define RTC_NUM_OF_ALARMS           1

+#define RTC_NUM_OF_COMP16           2

+#define RTC_NUM_OF_COMP32           1

+

+#endif /* _SAMD20_RTC_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_sercom0.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_sercom0.h
new file mode 100644
index 0000000..6924157
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_sercom0.h
@@ -0,0 +1,132 @@
+/**

+ * \file

+ *

+ * \brief Instance description for SERCOM0

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_SERCOM0_INSTANCE_

+#define _SAMD20_SERCOM0_INSTANCE_

+

+/* ========== Register definition for SERCOM0 peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_SERCOM0_I2CM_CTRLA     (0x42000800U) /**< \brief (SERCOM0) I2CM Control Register A */

+#define REG_SERCOM0_I2CS_CTRLA     (0x42000800U) /**< \brief (SERCOM0) I2CS Control Register A */

+#define REG_SERCOM0_SPI_CTRLA      (0x42000800U) /**< \brief (SERCOM0) SPI Control Register A */

+#define REG_SERCOM0_USART_CTRLA    (0x42000800U) /**< \brief (SERCOM0) USART Control Register A */

+#define REG_SERCOM0_I2CM_CTRLB     (0x42000804U) /**< \brief (SERCOM0) I2CM Control Register B */

+#define REG_SERCOM0_I2CS_CTRLB     (0x42000804U) /**< \brief (SERCOM0) I2CS Control Register B */

+#define REG_SERCOM0_SPI_CTRLB      (0x42000804U) /**< \brief (SERCOM0) SPI Control Register B */

+#define REG_SERCOM0_USART_CTRLB    (0x42000804U) /**< \brief (SERCOM0) USART Control Register B */

+#define REG_SERCOM0_I2CM_DBGCTRL   (0x42000808U) /**< \brief (SERCOM0) I2CM Debug Register */

+#define REG_SERCOM0_SPI_DBGCTRL    (0x42000808U) /**< \brief (SERCOM0) SPI Debug Register */

+#define REG_SERCOM0_USART_DBGCTRL  (0x42000808U) /**< \brief (SERCOM0) USART Debug Register */

+#define REG_SERCOM0_I2CM_BAUD      (0x4200080AU) /**< \brief (SERCOM0) I2CM Baud Rate Register */

+#define REG_SERCOM0_SPI_BAUD       (0x4200080AU) /**< \brief (SERCOM0) SPI Baud Rate Register */

+#define REG_SERCOM0_USART_BAUD     (0x4200080AU) /**< \brief (SERCOM0) USART Baud Rate Register */

+#define REG_SERCOM0_I2CM_INTENCLR  (0x4200080CU) /**< \brief (SERCOM0) I2CM Interrupt Enable Clear Register */

+#define REG_SERCOM0_I2CS_INTENCLR  (0x4200080CU) /**< \brief (SERCOM0) I2CS Interrupt Enable Clear Register */

+#define REG_SERCOM0_SPI_INTENCLR   (0x4200080CU) /**< \brief (SERCOM0) SPI Interrupt Enable Clear Register */

+#define REG_SERCOM0_USART_INTENCLR (0x4200080CU) /**< \brief (SERCOM0) USART Interrupt Enable Clear Register */

+#define REG_SERCOM0_I2CM_INTENSET  (0x4200080DU) /**< \brief (SERCOM0) I2CM Interrupt Enable Set Register */

+#define REG_SERCOM0_I2CS_INTENSET  (0x4200080DU) /**< \brief (SERCOM0) I2CS Interrupt Enable Set Register */

+#define REG_SERCOM0_SPI_INTENSET   (0x4200080DU) /**< \brief (SERCOM0) SPI Interrupt Enable Set Register */

+#define REG_SERCOM0_USART_INTENSET (0x4200080DU) /**< \brief (SERCOM0) USART Interrupt Enable Set Register */

+#define REG_SERCOM0_I2CM_INTFLAG   (0x4200080EU) /**< \brief (SERCOM0) I2CM Interrupt Flag Status and Clear Register */

+#define REG_SERCOM0_I2CS_INTFLAG   (0x4200080EU) /**< \brief (SERCOM0) I2CS Interrupt Flag Status and Clear Register */

+#define REG_SERCOM0_SPI_INTFLAG    (0x4200080EU) /**< \brief (SERCOM0) SPI Interrupt Flag Status and Clear Register */

+#define REG_SERCOM0_USART_INTFLAG  (0x4200080EU) /**< \brief (SERCOM0) USART Interrupt Flag Status and Clear Register */

+#define REG_SERCOM0_I2CM_STATUS    (0x42000810U) /**< \brief (SERCOM0) I2CM Status Register */

+#define REG_SERCOM0_I2CS_STATUS    (0x42000810U) /**< \brief (SERCOM0) I2CS Status Register */

+#define REG_SERCOM0_SPI_STATUS     (0x42000810U) /**< \brief (SERCOM0) SPI Status Register */

+#define REG_SERCOM0_USART_STATUS   (0x42000810U) /**< \brief (SERCOM0) USART Status Register */

+#define REG_SERCOM0_I2CM_ADDR      (0x42000814U) /**< \brief (SERCOM0) I2CM Address Register */

+#define REG_SERCOM0_I2CS_ADDR      (0x42000814U) /**< \brief (SERCOM0) I2CS Address Register */

+#define REG_SERCOM0_SPI_ADDR       (0x42000814U) /**< \brief (SERCOM0) SPI Address Register */

+#define REG_SERCOM0_I2CM_DATA      (0x42000818U) /**< \brief (SERCOM0) I2CM Data Register */

+#define REG_SERCOM0_I2CS_DATA      (0x42000818U) /**< \brief (SERCOM0) I2CS Data Register */

+#define REG_SERCOM0_SPI_DATA       (0x42000818U) /**< \brief (SERCOM0) SPI Data Register */

+#define REG_SERCOM0_USART_DATA     (0x42000818U) /**< \brief (SERCOM0) USART Data Register */

+#else

+#define REG_SERCOM0_I2CM_CTRLA     (*(RwReg  *)0x42000800U) /**< \brief (SERCOM0) I2CM Control Register A */

+#define REG_SERCOM0_I2CS_CTRLA     (*(RwReg  *)0x42000800U) /**< \brief (SERCOM0) I2CS Control Register A */

+#define REG_SERCOM0_SPI_CTRLA      (*(RwReg  *)0x42000800U) /**< \brief (SERCOM0) SPI Control Register A */

+#define REG_SERCOM0_USART_CTRLA    (*(RwReg  *)0x42000800U) /**< \brief (SERCOM0) USART Control Register A */

+#define REG_SERCOM0_I2CM_CTRLB     (*(RwReg  *)0x42000804U) /**< \brief (SERCOM0) I2CM Control Register B */

+#define REG_SERCOM0_I2CS_CTRLB     (*(RwReg  *)0x42000804U) /**< \brief (SERCOM0) I2CS Control Register B */

+#define REG_SERCOM0_SPI_CTRLB      (*(RwReg  *)0x42000804U) /**< \brief (SERCOM0) SPI Control Register B */

+#define REG_SERCOM0_USART_CTRLB    (*(RwReg  *)0x42000804U) /**< \brief (SERCOM0) USART Control Register B */

+#define REG_SERCOM0_I2CM_DBGCTRL   (*(RwReg8 *)0x42000808U) /**< \brief (SERCOM0) I2CM Debug Register */

+#define REG_SERCOM0_SPI_DBGCTRL    (*(RwReg8 *)0x42000808U) /**< \brief (SERCOM0) SPI Debug Register */

+#define REG_SERCOM0_USART_DBGCTRL  (*(RwReg8 *)0x42000808U) /**< \brief (SERCOM0) USART Debug Register */

+#define REG_SERCOM0_I2CM_BAUD      (*(RwReg16*)0x4200080AU) /**< \brief (SERCOM0) I2CM Baud Rate Register */

+#define REG_SERCOM0_SPI_BAUD       (*(RwReg8 *)0x4200080AU) /**< \brief (SERCOM0) SPI Baud Rate Register */

+#define REG_SERCOM0_USART_BAUD     (*(RwReg16*)0x4200080AU) /**< \brief (SERCOM0) USART Baud Rate Register */

+#define REG_SERCOM0_I2CM_INTENCLR  (*(RwReg8 *)0x4200080CU) /**< \brief (SERCOM0) I2CM Interrupt Enable Clear Register */

+#define REG_SERCOM0_I2CS_INTENCLR  (*(RwReg8 *)0x4200080CU) /**< \brief (SERCOM0) I2CS Interrupt Enable Clear Register */

+#define REG_SERCOM0_SPI_INTENCLR   (*(RwReg8 *)0x4200080CU) /**< \brief (SERCOM0) SPI Interrupt Enable Clear Register */

+#define REG_SERCOM0_USART_INTENCLR (*(RwReg8 *)0x4200080CU) /**< \brief (SERCOM0) USART Interrupt Enable Clear Register */

+#define REG_SERCOM0_I2CM_INTENSET  (*(RwReg8 *)0x4200080DU) /**< \brief (SERCOM0) I2CM Interrupt Enable Set Register */

+#define REG_SERCOM0_I2CS_INTENSET  (*(RwReg8 *)0x4200080DU) /**< \brief (SERCOM0) I2CS Interrupt Enable Set Register */

+#define REG_SERCOM0_SPI_INTENSET   (*(RwReg8 *)0x4200080DU) /**< \brief (SERCOM0) SPI Interrupt Enable Set Register */

+#define REG_SERCOM0_USART_INTENSET (*(RwReg8 *)0x4200080DU) /**< \brief (SERCOM0) USART Interrupt Enable Set Register */

+#define REG_SERCOM0_I2CM_INTFLAG   (*(RwReg8 *)0x4200080EU) /**< \brief (SERCOM0) I2CM Interrupt Flag Status and Clear Register */

+#define REG_SERCOM0_I2CS_INTFLAG   (*(RwReg8 *)0x4200080EU) /**< \brief (SERCOM0) I2CS Interrupt Flag Status and Clear Register */

+#define REG_SERCOM0_SPI_INTFLAG    (*(RwReg8 *)0x4200080EU) /**< \brief (SERCOM0) SPI Interrupt Flag Status and Clear Register */

+#define REG_SERCOM0_USART_INTFLAG  (*(RwReg8 *)0x4200080EU) /**< \brief (SERCOM0) USART Interrupt Flag Status and Clear Register */

+#define REG_SERCOM0_I2CM_STATUS    (*(RwReg16*)0x42000810U) /**< \brief (SERCOM0) I2CM Status Register */

+#define REG_SERCOM0_I2CS_STATUS    (*(RwReg16*)0x42000810U) /**< \brief (SERCOM0) I2CS Status Register */

+#define REG_SERCOM0_SPI_STATUS     (*(RwReg16*)0x42000810U) /**< \brief (SERCOM0) SPI Status Register */

+#define REG_SERCOM0_USART_STATUS   (*(RwReg16*)0x42000810U) /**< \brief (SERCOM0) USART Status Register */

+#define REG_SERCOM0_I2CM_ADDR      (*(RwReg8 *)0x42000814U) /**< \brief (SERCOM0) I2CM Address Register */

+#define REG_SERCOM0_I2CS_ADDR      (*(RwReg  *)0x42000814U) /**< \brief (SERCOM0) I2CS Address Register */

+#define REG_SERCOM0_SPI_ADDR       (*(RwReg  *)0x42000814U) /**< \brief (SERCOM0) SPI Address Register */

+#define REG_SERCOM0_I2CM_DATA      (*(RwReg8 *)0x42000818U) /**< \brief (SERCOM0) I2CM Data Register */

+#define REG_SERCOM0_I2CS_DATA      (*(RwReg8 *)0x42000818U) /**< \brief (SERCOM0) I2CS Data Register */

+#define REG_SERCOM0_SPI_DATA       (*(RwReg16*)0x42000818U) /**< \brief (SERCOM0) SPI Data Register */

+#define REG_SERCOM0_USART_DATA     (*(RwReg16*)0x42000818U) /**< \brief (SERCOM0) USART Data Register */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for SERCOM0 peripheral ========== */

+#define SERCOM0_GCLK_ID_CORE        13

+#define SERCOM0_GCLK_ID_SLOW        12

+#define SERCOM0_INT_MSB             3

+#define SERCOM0_PMSB                3

+

+#endif /* _SAMD20_SERCOM0_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_sercom1.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_sercom1.h
new file mode 100644
index 0000000..f84b239
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_sercom1.h
@@ -0,0 +1,132 @@
+/**

+ * \file

+ *

+ * \brief Instance description for SERCOM1

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_SERCOM1_INSTANCE_

+#define _SAMD20_SERCOM1_INSTANCE_

+

+/* ========== Register definition for SERCOM1 peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_SERCOM1_I2CM_CTRLA     (0x42000C00U) /**< \brief (SERCOM1) I2CM Control Register A */

+#define REG_SERCOM1_I2CS_CTRLA     (0x42000C00U) /**< \brief (SERCOM1) I2CS Control Register A */

+#define REG_SERCOM1_SPI_CTRLA      (0x42000C00U) /**< \brief (SERCOM1) SPI Control Register A */

+#define REG_SERCOM1_USART_CTRLA    (0x42000C00U) /**< \brief (SERCOM1) USART Control Register A */

+#define REG_SERCOM1_I2CM_CTRLB     (0x42000C04U) /**< \brief (SERCOM1) I2CM Control Register B */

+#define REG_SERCOM1_I2CS_CTRLB     (0x42000C04U) /**< \brief (SERCOM1) I2CS Control Register B */

+#define REG_SERCOM1_SPI_CTRLB      (0x42000C04U) /**< \brief (SERCOM1) SPI Control Register B */

+#define REG_SERCOM1_USART_CTRLB    (0x42000C04U) /**< \brief (SERCOM1) USART Control Register B */

+#define REG_SERCOM1_I2CM_DBGCTRL   (0x42000C08U) /**< \brief (SERCOM1) I2CM Debug Register */

+#define REG_SERCOM1_SPI_DBGCTRL    (0x42000C08U) /**< \brief (SERCOM1) SPI Debug Register */

+#define REG_SERCOM1_USART_DBGCTRL  (0x42000C08U) /**< \brief (SERCOM1) USART Debug Register */

+#define REG_SERCOM1_I2CM_BAUD      (0x42000C0AU) /**< \brief (SERCOM1) I2CM Baud Rate Register */

+#define REG_SERCOM1_SPI_BAUD       (0x42000C0AU) /**< \brief (SERCOM1) SPI Baud Rate Register */

+#define REG_SERCOM1_USART_BAUD     (0x42000C0AU) /**< \brief (SERCOM1) USART Baud Rate Register */

+#define REG_SERCOM1_I2CM_INTENCLR  (0x42000C0CU) /**< \brief (SERCOM1) I2CM Interrupt Enable Clear Register */

+#define REG_SERCOM1_I2CS_INTENCLR  (0x42000C0CU) /**< \brief (SERCOM1) I2CS Interrupt Enable Clear Register */

+#define REG_SERCOM1_SPI_INTENCLR   (0x42000C0CU) /**< \brief (SERCOM1) SPI Interrupt Enable Clear Register */

+#define REG_SERCOM1_USART_INTENCLR (0x42000C0CU) /**< \brief (SERCOM1) USART Interrupt Enable Clear Register */

+#define REG_SERCOM1_I2CM_INTENSET  (0x42000C0DU) /**< \brief (SERCOM1) I2CM Interrupt Enable Set Register */

+#define REG_SERCOM1_I2CS_INTENSET  (0x42000C0DU) /**< \brief (SERCOM1) I2CS Interrupt Enable Set Register */

+#define REG_SERCOM1_SPI_INTENSET   (0x42000C0DU) /**< \brief (SERCOM1) SPI Interrupt Enable Set Register */

+#define REG_SERCOM1_USART_INTENSET (0x42000C0DU) /**< \brief (SERCOM1) USART Interrupt Enable Set Register */

+#define REG_SERCOM1_I2CM_INTFLAG   (0x42000C0EU) /**< \brief (SERCOM1) I2CM Interrupt Flag Status and Clear Register */

+#define REG_SERCOM1_I2CS_INTFLAG   (0x42000C0EU) /**< \brief (SERCOM1) I2CS Interrupt Flag Status and Clear Register */

+#define REG_SERCOM1_SPI_INTFLAG    (0x42000C0EU) /**< \brief (SERCOM1) SPI Interrupt Flag Status and Clear Register */

+#define REG_SERCOM1_USART_INTFLAG  (0x42000C0EU) /**< \brief (SERCOM1) USART Interrupt Flag Status and Clear Register */

+#define REG_SERCOM1_I2CM_STATUS    (0x42000C10U) /**< \brief (SERCOM1) I2CM Status Register */

+#define REG_SERCOM1_I2CS_STATUS    (0x42000C10U) /**< \brief (SERCOM1) I2CS Status Register */

+#define REG_SERCOM1_SPI_STATUS     (0x42000C10U) /**< \brief (SERCOM1) SPI Status Register */

+#define REG_SERCOM1_USART_STATUS   (0x42000C10U) /**< \brief (SERCOM1) USART Status Register */

+#define REG_SERCOM1_I2CM_ADDR      (0x42000C14U) /**< \brief (SERCOM1) I2CM Address Register */

+#define REG_SERCOM1_I2CS_ADDR      (0x42000C14U) /**< \brief (SERCOM1) I2CS Address Register */

+#define REG_SERCOM1_SPI_ADDR       (0x42000C14U) /**< \brief (SERCOM1) SPI Address Register */

+#define REG_SERCOM1_I2CM_DATA      (0x42000C18U) /**< \brief (SERCOM1) I2CM Data Register */

+#define REG_SERCOM1_I2CS_DATA      (0x42000C18U) /**< \brief (SERCOM1) I2CS Data Register */

+#define REG_SERCOM1_SPI_DATA       (0x42000C18U) /**< \brief (SERCOM1) SPI Data Register */

+#define REG_SERCOM1_USART_DATA     (0x42000C18U) /**< \brief (SERCOM1) USART Data Register */

+#else

+#define REG_SERCOM1_I2CM_CTRLA     (*(RwReg  *)0x42000C00U) /**< \brief (SERCOM1) I2CM Control Register A */

+#define REG_SERCOM1_I2CS_CTRLA     (*(RwReg  *)0x42000C00U) /**< \brief (SERCOM1) I2CS Control Register A */

+#define REG_SERCOM1_SPI_CTRLA      (*(RwReg  *)0x42000C00U) /**< \brief (SERCOM1) SPI Control Register A */

+#define REG_SERCOM1_USART_CTRLA    (*(RwReg  *)0x42000C00U) /**< \brief (SERCOM1) USART Control Register A */

+#define REG_SERCOM1_I2CM_CTRLB     (*(RwReg  *)0x42000C04U) /**< \brief (SERCOM1) I2CM Control Register B */

+#define REG_SERCOM1_I2CS_CTRLB     (*(RwReg  *)0x42000C04U) /**< \brief (SERCOM1) I2CS Control Register B */

+#define REG_SERCOM1_SPI_CTRLB      (*(RwReg  *)0x42000C04U) /**< \brief (SERCOM1) SPI Control Register B */

+#define REG_SERCOM1_USART_CTRLB    (*(RwReg  *)0x42000C04U) /**< \brief (SERCOM1) USART Control Register B */

+#define REG_SERCOM1_I2CM_DBGCTRL   (*(RwReg8 *)0x42000C08U) /**< \brief (SERCOM1) I2CM Debug Register */

+#define REG_SERCOM1_SPI_DBGCTRL    (*(RwReg8 *)0x42000C08U) /**< \brief (SERCOM1) SPI Debug Register */

+#define REG_SERCOM1_USART_DBGCTRL  (*(RwReg8 *)0x42000C08U) /**< \brief (SERCOM1) USART Debug Register */

+#define REG_SERCOM1_I2CM_BAUD      (*(RwReg16*)0x42000C0AU) /**< \brief (SERCOM1) I2CM Baud Rate Register */

+#define REG_SERCOM1_SPI_BAUD       (*(RwReg8 *)0x42000C0AU) /**< \brief (SERCOM1) SPI Baud Rate Register */

+#define REG_SERCOM1_USART_BAUD     (*(RwReg16*)0x42000C0AU) /**< \brief (SERCOM1) USART Baud Rate Register */

+#define REG_SERCOM1_I2CM_INTENCLR  (*(RwReg8 *)0x42000C0CU) /**< \brief (SERCOM1) I2CM Interrupt Enable Clear Register */

+#define REG_SERCOM1_I2CS_INTENCLR  (*(RwReg8 *)0x42000C0CU) /**< \brief (SERCOM1) I2CS Interrupt Enable Clear Register */

+#define REG_SERCOM1_SPI_INTENCLR   (*(RwReg8 *)0x42000C0CU) /**< \brief (SERCOM1) SPI Interrupt Enable Clear Register */

+#define REG_SERCOM1_USART_INTENCLR (*(RwReg8 *)0x42000C0CU) /**< \brief (SERCOM1) USART Interrupt Enable Clear Register */

+#define REG_SERCOM1_I2CM_INTENSET  (*(RwReg8 *)0x42000C0DU) /**< \brief (SERCOM1) I2CM Interrupt Enable Set Register */

+#define REG_SERCOM1_I2CS_INTENSET  (*(RwReg8 *)0x42000C0DU) /**< \brief (SERCOM1) I2CS Interrupt Enable Set Register */

+#define REG_SERCOM1_SPI_INTENSET   (*(RwReg8 *)0x42000C0DU) /**< \brief (SERCOM1) SPI Interrupt Enable Set Register */

+#define REG_SERCOM1_USART_INTENSET (*(RwReg8 *)0x42000C0DU) /**< \brief (SERCOM1) USART Interrupt Enable Set Register */

+#define REG_SERCOM1_I2CM_INTFLAG   (*(RwReg8 *)0x42000C0EU) /**< \brief (SERCOM1) I2CM Interrupt Flag Status and Clear Register */

+#define REG_SERCOM1_I2CS_INTFLAG   (*(RwReg8 *)0x42000C0EU) /**< \brief (SERCOM1) I2CS Interrupt Flag Status and Clear Register */

+#define REG_SERCOM1_SPI_INTFLAG    (*(RwReg8 *)0x42000C0EU) /**< \brief (SERCOM1) SPI Interrupt Flag Status and Clear Register */

+#define REG_SERCOM1_USART_INTFLAG  (*(RwReg8 *)0x42000C0EU) /**< \brief (SERCOM1) USART Interrupt Flag Status and Clear Register */

+#define REG_SERCOM1_I2CM_STATUS    (*(RwReg16*)0x42000C10U) /**< \brief (SERCOM1) I2CM Status Register */

+#define REG_SERCOM1_I2CS_STATUS    (*(RwReg16*)0x42000C10U) /**< \brief (SERCOM1) I2CS Status Register */

+#define REG_SERCOM1_SPI_STATUS     (*(RwReg16*)0x42000C10U) /**< \brief (SERCOM1) SPI Status Register */

+#define REG_SERCOM1_USART_STATUS   (*(RwReg16*)0x42000C10U) /**< \brief (SERCOM1) USART Status Register */

+#define REG_SERCOM1_I2CM_ADDR      (*(RwReg8 *)0x42000C14U) /**< \brief (SERCOM1) I2CM Address Register */

+#define REG_SERCOM1_I2CS_ADDR      (*(RwReg  *)0x42000C14U) /**< \brief (SERCOM1) I2CS Address Register */

+#define REG_SERCOM1_SPI_ADDR       (*(RwReg  *)0x42000C14U) /**< \brief (SERCOM1) SPI Address Register */

+#define REG_SERCOM1_I2CM_DATA      (*(RwReg8 *)0x42000C18U) /**< \brief (SERCOM1) I2CM Data Register */

+#define REG_SERCOM1_I2CS_DATA      (*(RwReg8 *)0x42000C18U) /**< \brief (SERCOM1) I2CS Data Register */

+#define REG_SERCOM1_SPI_DATA       (*(RwReg16*)0x42000C18U) /**< \brief (SERCOM1) SPI Data Register */

+#define REG_SERCOM1_USART_DATA     (*(RwReg16*)0x42000C18U) /**< \brief (SERCOM1) USART Data Register */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for SERCOM1 peripheral ========== */

+#define SERCOM1_GCLK_ID_CORE        14

+#define SERCOM1_GCLK_ID_SLOW        12

+#define SERCOM1_INT_MSB             3

+#define SERCOM1_PMSB                3

+

+#endif /* _SAMD20_SERCOM1_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_sercom2.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_sercom2.h
new file mode 100644
index 0000000..10b49ad
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_sercom2.h
@@ -0,0 +1,132 @@
+/**

+ * \file

+ *

+ * \brief Instance description for SERCOM2

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_SERCOM2_INSTANCE_

+#define _SAMD20_SERCOM2_INSTANCE_

+

+/* ========== Register definition for SERCOM2 peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_SERCOM2_I2CM_CTRLA     (0x42001000U) /**< \brief (SERCOM2) I2CM Control Register A */

+#define REG_SERCOM2_I2CS_CTRLA     (0x42001000U) /**< \brief (SERCOM2) I2CS Control Register A */

+#define REG_SERCOM2_SPI_CTRLA      (0x42001000U) /**< \brief (SERCOM2) SPI Control Register A */

+#define REG_SERCOM2_USART_CTRLA    (0x42001000U) /**< \brief (SERCOM2) USART Control Register A */

+#define REG_SERCOM2_I2CM_CTRLB     (0x42001004U) /**< \brief (SERCOM2) I2CM Control Register B */

+#define REG_SERCOM2_I2CS_CTRLB     (0x42001004U) /**< \brief (SERCOM2) I2CS Control Register B */

+#define REG_SERCOM2_SPI_CTRLB      (0x42001004U) /**< \brief (SERCOM2) SPI Control Register B */

+#define REG_SERCOM2_USART_CTRLB    (0x42001004U) /**< \brief (SERCOM2) USART Control Register B */

+#define REG_SERCOM2_I2CM_DBGCTRL   (0x42001008U) /**< \brief (SERCOM2) I2CM Debug Register */

+#define REG_SERCOM2_SPI_DBGCTRL    (0x42001008U) /**< \brief (SERCOM2) SPI Debug Register */

+#define REG_SERCOM2_USART_DBGCTRL  (0x42001008U) /**< \brief (SERCOM2) USART Debug Register */

+#define REG_SERCOM2_I2CM_BAUD      (0x4200100AU) /**< \brief (SERCOM2) I2CM Baud Rate Register */

+#define REG_SERCOM2_SPI_BAUD       (0x4200100AU) /**< \brief (SERCOM2) SPI Baud Rate Register */

+#define REG_SERCOM2_USART_BAUD     (0x4200100AU) /**< \brief (SERCOM2) USART Baud Rate Register */

+#define REG_SERCOM2_I2CM_INTENCLR  (0x4200100CU) /**< \brief (SERCOM2) I2CM Interrupt Enable Clear Register */

+#define REG_SERCOM2_I2CS_INTENCLR  (0x4200100CU) /**< \brief (SERCOM2) I2CS Interrupt Enable Clear Register */

+#define REG_SERCOM2_SPI_INTENCLR   (0x4200100CU) /**< \brief (SERCOM2) SPI Interrupt Enable Clear Register */

+#define REG_SERCOM2_USART_INTENCLR (0x4200100CU) /**< \brief (SERCOM2) USART Interrupt Enable Clear Register */

+#define REG_SERCOM2_I2CM_INTENSET  (0x4200100DU) /**< \brief (SERCOM2) I2CM Interrupt Enable Set Register */

+#define REG_SERCOM2_I2CS_INTENSET  (0x4200100DU) /**< \brief (SERCOM2) I2CS Interrupt Enable Set Register */

+#define REG_SERCOM2_SPI_INTENSET   (0x4200100DU) /**< \brief (SERCOM2) SPI Interrupt Enable Set Register */

+#define REG_SERCOM2_USART_INTENSET (0x4200100DU) /**< \brief (SERCOM2) USART Interrupt Enable Set Register */

+#define REG_SERCOM2_I2CM_INTFLAG   (0x4200100EU) /**< \brief (SERCOM2) I2CM Interrupt Flag Status and Clear Register */

+#define REG_SERCOM2_I2CS_INTFLAG   (0x4200100EU) /**< \brief (SERCOM2) I2CS Interrupt Flag Status and Clear Register */

+#define REG_SERCOM2_SPI_INTFLAG    (0x4200100EU) /**< \brief (SERCOM2) SPI Interrupt Flag Status and Clear Register */

+#define REG_SERCOM2_USART_INTFLAG  (0x4200100EU) /**< \brief (SERCOM2) USART Interrupt Flag Status and Clear Register */

+#define REG_SERCOM2_I2CM_STATUS    (0x42001010U) /**< \brief (SERCOM2) I2CM Status Register */

+#define REG_SERCOM2_I2CS_STATUS    (0x42001010U) /**< \brief (SERCOM2) I2CS Status Register */

+#define REG_SERCOM2_SPI_STATUS     (0x42001010U) /**< \brief (SERCOM2) SPI Status Register */

+#define REG_SERCOM2_USART_STATUS   (0x42001010U) /**< \brief (SERCOM2) USART Status Register */

+#define REG_SERCOM2_I2CM_ADDR      (0x42001014U) /**< \brief (SERCOM2) I2CM Address Register */

+#define REG_SERCOM2_I2CS_ADDR      (0x42001014U) /**< \brief (SERCOM2) I2CS Address Register */

+#define REG_SERCOM2_SPI_ADDR       (0x42001014U) /**< \brief (SERCOM2) SPI Address Register */

+#define REG_SERCOM2_I2CM_DATA      (0x42001018U) /**< \brief (SERCOM2) I2CM Data Register */

+#define REG_SERCOM2_I2CS_DATA      (0x42001018U) /**< \brief (SERCOM2) I2CS Data Register */

+#define REG_SERCOM2_SPI_DATA       (0x42001018U) /**< \brief (SERCOM2) SPI Data Register */

+#define REG_SERCOM2_USART_DATA     (0x42001018U) /**< \brief (SERCOM2) USART Data Register */

+#else

+#define REG_SERCOM2_I2CM_CTRLA     (*(RwReg  *)0x42001000U) /**< \brief (SERCOM2) I2CM Control Register A */

+#define REG_SERCOM2_I2CS_CTRLA     (*(RwReg  *)0x42001000U) /**< \brief (SERCOM2) I2CS Control Register A */

+#define REG_SERCOM2_SPI_CTRLA      (*(RwReg  *)0x42001000U) /**< \brief (SERCOM2) SPI Control Register A */

+#define REG_SERCOM2_USART_CTRLA    (*(RwReg  *)0x42001000U) /**< \brief (SERCOM2) USART Control Register A */

+#define REG_SERCOM2_I2CM_CTRLB     (*(RwReg  *)0x42001004U) /**< \brief (SERCOM2) I2CM Control Register B */

+#define REG_SERCOM2_I2CS_CTRLB     (*(RwReg  *)0x42001004U) /**< \brief (SERCOM2) I2CS Control Register B */

+#define REG_SERCOM2_SPI_CTRLB      (*(RwReg  *)0x42001004U) /**< \brief (SERCOM2) SPI Control Register B */

+#define REG_SERCOM2_USART_CTRLB    (*(RwReg  *)0x42001004U) /**< \brief (SERCOM2) USART Control Register B */

+#define REG_SERCOM2_I2CM_DBGCTRL   (*(RwReg8 *)0x42001008U) /**< \brief (SERCOM2) I2CM Debug Register */

+#define REG_SERCOM2_SPI_DBGCTRL    (*(RwReg8 *)0x42001008U) /**< \brief (SERCOM2) SPI Debug Register */

+#define REG_SERCOM2_USART_DBGCTRL  (*(RwReg8 *)0x42001008U) /**< \brief (SERCOM2) USART Debug Register */

+#define REG_SERCOM2_I2CM_BAUD      (*(RwReg16*)0x4200100AU) /**< \brief (SERCOM2) I2CM Baud Rate Register */

+#define REG_SERCOM2_SPI_BAUD       (*(RwReg8 *)0x4200100AU) /**< \brief (SERCOM2) SPI Baud Rate Register */

+#define REG_SERCOM2_USART_BAUD     (*(RwReg16*)0x4200100AU) /**< \brief (SERCOM2) USART Baud Rate Register */

+#define REG_SERCOM2_I2CM_INTENCLR  (*(RwReg8 *)0x4200100CU) /**< \brief (SERCOM2) I2CM Interrupt Enable Clear Register */

+#define REG_SERCOM2_I2CS_INTENCLR  (*(RwReg8 *)0x4200100CU) /**< \brief (SERCOM2) I2CS Interrupt Enable Clear Register */

+#define REG_SERCOM2_SPI_INTENCLR   (*(RwReg8 *)0x4200100CU) /**< \brief (SERCOM2) SPI Interrupt Enable Clear Register */

+#define REG_SERCOM2_USART_INTENCLR (*(RwReg8 *)0x4200100CU) /**< \brief (SERCOM2) USART Interrupt Enable Clear Register */

+#define REG_SERCOM2_I2CM_INTENSET  (*(RwReg8 *)0x4200100DU) /**< \brief (SERCOM2) I2CM Interrupt Enable Set Register */

+#define REG_SERCOM2_I2CS_INTENSET  (*(RwReg8 *)0x4200100DU) /**< \brief (SERCOM2) I2CS Interrupt Enable Set Register */

+#define REG_SERCOM2_SPI_INTENSET   (*(RwReg8 *)0x4200100DU) /**< \brief (SERCOM2) SPI Interrupt Enable Set Register */

+#define REG_SERCOM2_USART_INTENSET (*(RwReg8 *)0x4200100DU) /**< \brief (SERCOM2) USART Interrupt Enable Set Register */

+#define REG_SERCOM2_I2CM_INTFLAG   (*(RwReg8 *)0x4200100EU) /**< \brief (SERCOM2) I2CM Interrupt Flag Status and Clear Register */

+#define REG_SERCOM2_I2CS_INTFLAG   (*(RwReg8 *)0x4200100EU) /**< \brief (SERCOM2) I2CS Interrupt Flag Status and Clear Register */

+#define REG_SERCOM2_SPI_INTFLAG    (*(RwReg8 *)0x4200100EU) /**< \brief (SERCOM2) SPI Interrupt Flag Status and Clear Register */

+#define REG_SERCOM2_USART_INTFLAG  (*(RwReg8 *)0x4200100EU) /**< \brief (SERCOM2) USART Interrupt Flag Status and Clear Register */

+#define REG_SERCOM2_I2CM_STATUS    (*(RwReg16*)0x42001010U) /**< \brief (SERCOM2) I2CM Status Register */

+#define REG_SERCOM2_I2CS_STATUS    (*(RwReg16*)0x42001010U) /**< \brief (SERCOM2) I2CS Status Register */

+#define REG_SERCOM2_SPI_STATUS     (*(RwReg16*)0x42001010U) /**< \brief (SERCOM2) SPI Status Register */

+#define REG_SERCOM2_USART_STATUS   (*(RwReg16*)0x42001010U) /**< \brief (SERCOM2) USART Status Register */

+#define REG_SERCOM2_I2CM_ADDR      (*(RwReg8 *)0x42001014U) /**< \brief (SERCOM2) I2CM Address Register */

+#define REG_SERCOM2_I2CS_ADDR      (*(RwReg  *)0x42001014U) /**< \brief (SERCOM2) I2CS Address Register */

+#define REG_SERCOM2_SPI_ADDR       (*(RwReg  *)0x42001014U) /**< \brief (SERCOM2) SPI Address Register */

+#define REG_SERCOM2_I2CM_DATA      (*(RwReg8 *)0x42001018U) /**< \brief (SERCOM2) I2CM Data Register */

+#define REG_SERCOM2_I2CS_DATA      (*(RwReg8 *)0x42001018U) /**< \brief (SERCOM2) I2CS Data Register */

+#define REG_SERCOM2_SPI_DATA       (*(RwReg16*)0x42001018U) /**< \brief (SERCOM2) SPI Data Register */

+#define REG_SERCOM2_USART_DATA     (*(RwReg16*)0x42001018U) /**< \brief (SERCOM2) USART Data Register */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for SERCOM2 peripheral ========== */

+#define SERCOM2_GCLK_ID_CORE        15

+#define SERCOM2_GCLK_ID_SLOW        12

+#define SERCOM2_INT_MSB             3

+#define SERCOM2_PMSB                3

+

+#endif /* _SAMD20_SERCOM2_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_sercom3.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_sercom3.h
new file mode 100644
index 0000000..ed9b169
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_sercom3.h
@@ -0,0 +1,132 @@
+/**

+ * \file

+ *

+ * \brief Instance description for SERCOM3

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_SERCOM3_INSTANCE_

+#define _SAMD20_SERCOM3_INSTANCE_

+

+/* ========== Register definition for SERCOM3 peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_SERCOM3_I2CM_CTRLA     (0x42001400U) /**< \brief (SERCOM3) I2CM Control Register A */

+#define REG_SERCOM3_I2CS_CTRLA     (0x42001400U) /**< \brief (SERCOM3) I2CS Control Register A */

+#define REG_SERCOM3_SPI_CTRLA      (0x42001400U) /**< \brief (SERCOM3) SPI Control Register A */

+#define REG_SERCOM3_USART_CTRLA    (0x42001400U) /**< \brief (SERCOM3) USART Control Register A */

+#define REG_SERCOM3_I2CM_CTRLB     (0x42001404U) /**< \brief (SERCOM3) I2CM Control Register B */

+#define REG_SERCOM3_I2CS_CTRLB     (0x42001404U) /**< \brief (SERCOM3) I2CS Control Register B */

+#define REG_SERCOM3_SPI_CTRLB      (0x42001404U) /**< \brief (SERCOM3) SPI Control Register B */

+#define REG_SERCOM3_USART_CTRLB    (0x42001404U) /**< \brief (SERCOM3) USART Control Register B */

+#define REG_SERCOM3_I2CM_DBGCTRL   (0x42001408U) /**< \brief (SERCOM3) I2CM Debug Register */

+#define REG_SERCOM3_SPI_DBGCTRL    (0x42001408U) /**< \brief (SERCOM3) SPI Debug Register */

+#define REG_SERCOM3_USART_DBGCTRL  (0x42001408U) /**< \brief (SERCOM3) USART Debug Register */

+#define REG_SERCOM3_I2CM_BAUD      (0x4200140AU) /**< \brief (SERCOM3) I2CM Baud Rate Register */

+#define REG_SERCOM3_SPI_BAUD       (0x4200140AU) /**< \brief (SERCOM3) SPI Baud Rate Register */

+#define REG_SERCOM3_USART_BAUD     (0x4200140AU) /**< \brief (SERCOM3) USART Baud Rate Register */

+#define REG_SERCOM3_I2CM_INTENCLR  (0x4200140CU) /**< \brief (SERCOM3) I2CM Interrupt Enable Clear Register */

+#define REG_SERCOM3_I2CS_INTENCLR  (0x4200140CU) /**< \brief (SERCOM3) I2CS Interrupt Enable Clear Register */

+#define REG_SERCOM3_SPI_INTENCLR   (0x4200140CU) /**< \brief (SERCOM3) SPI Interrupt Enable Clear Register */

+#define REG_SERCOM3_USART_INTENCLR (0x4200140CU) /**< \brief (SERCOM3) USART Interrupt Enable Clear Register */

+#define REG_SERCOM3_I2CM_INTENSET  (0x4200140DU) /**< \brief (SERCOM3) I2CM Interrupt Enable Set Register */

+#define REG_SERCOM3_I2CS_INTENSET  (0x4200140DU) /**< \brief (SERCOM3) I2CS Interrupt Enable Set Register */

+#define REG_SERCOM3_SPI_INTENSET   (0x4200140DU) /**< \brief (SERCOM3) SPI Interrupt Enable Set Register */

+#define REG_SERCOM3_USART_INTENSET (0x4200140DU) /**< \brief (SERCOM3) USART Interrupt Enable Set Register */

+#define REG_SERCOM3_I2CM_INTFLAG   (0x4200140EU) /**< \brief (SERCOM3) I2CM Interrupt Flag Status and Clear Register */

+#define REG_SERCOM3_I2CS_INTFLAG   (0x4200140EU) /**< \brief (SERCOM3) I2CS Interrupt Flag Status and Clear Register */

+#define REG_SERCOM3_SPI_INTFLAG    (0x4200140EU) /**< \brief (SERCOM3) SPI Interrupt Flag Status and Clear Register */

+#define REG_SERCOM3_USART_INTFLAG  (0x4200140EU) /**< \brief (SERCOM3) USART Interrupt Flag Status and Clear Register */

+#define REG_SERCOM3_I2CM_STATUS    (0x42001410U) /**< \brief (SERCOM3) I2CM Status Register */

+#define REG_SERCOM3_I2CS_STATUS    (0x42001410U) /**< \brief (SERCOM3) I2CS Status Register */

+#define REG_SERCOM3_SPI_STATUS     (0x42001410U) /**< \brief (SERCOM3) SPI Status Register */

+#define REG_SERCOM3_USART_STATUS   (0x42001410U) /**< \brief (SERCOM3) USART Status Register */

+#define REG_SERCOM3_I2CM_ADDR      (0x42001414U) /**< \brief (SERCOM3) I2CM Address Register */

+#define REG_SERCOM3_I2CS_ADDR      (0x42001414U) /**< \brief (SERCOM3) I2CS Address Register */

+#define REG_SERCOM3_SPI_ADDR       (0x42001414U) /**< \brief (SERCOM3) SPI Address Register */

+#define REG_SERCOM3_I2CM_DATA      (0x42001418U) /**< \brief (SERCOM3) I2CM Data Register */

+#define REG_SERCOM3_I2CS_DATA      (0x42001418U) /**< \brief (SERCOM3) I2CS Data Register */

+#define REG_SERCOM3_SPI_DATA       (0x42001418U) /**< \brief (SERCOM3) SPI Data Register */

+#define REG_SERCOM3_USART_DATA     (0x42001418U) /**< \brief (SERCOM3) USART Data Register */

+#else

+#define REG_SERCOM3_I2CM_CTRLA     (*(RwReg  *)0x42001400U) /**< \brief (SERCOM3) I2CM Control Register A */

+#define REG_SERCOM3_I2CS_CTRLA     (*(RwReg  *)0x42001400U) /**< \brief (SERCOM3) I2CS Control Register A */

+#define REG_SERCOM3_SPI_CTRLA      (*(RwReg  *)0x42001400U) /**< \brief (SERCOM3) SPI Control Register A */

+#define REG_SERCOM3_USART_CTRLA    (*(RwReg  *)0x42001400U) /**< \brief (SERCOM3) USART Control Register A */

+#define REG_SERCOM3_I2CM_CTRLB     (*(RwReg  *)0x42001404U) /**< \brief (SERCOM3) I2CM Control Register B */

+#define REG_SERCOM3_I2CS_CTRLB     (*(RwReg  *)0x42001404U) /**< \brief (SERCOM3) I2CS Control Register B */

+#define REG_SERCOM3_SPI_CTRLB      (*(RwReg  *)0x42001404U) /**< \brief (SERCOM3) SPI Control Register B */

+#define REG_SERCOM3_USART_CTRLB    (*(RwReg  *)0x42001404U) /**< \brief (SERCOM3) USART Control Register B */

+#define REG_SERCOM3_I2CM_DBGCTRL   (*(RwReg8 *)0x42001408U) /**< \brief (SERCOM3) I2CM Debug Register */

+#define REG_SERCOM3_SPI_DBGCTRL    (*(RwReg8 *)0x42001408U) /**< \brief (SERCOM3) SPI Debug Register */

+#define REG_SERCOM3_USART_DBGCTRL  (*(RwReg8 *)0x42001408U) /**< \brief (SERCOM3) USART Debug Register */

+#define REG_SERCOM3_I2CM_BAUD      (*(RwReg16*)0x4200140AU) /**< \brief (SERCOM3) I2CM Baud Rate Register */

+#define REG_SERCOM3_SPI_BAUD       (*(RwReg8 *)0x4200140AU) /**< \brief (SERCOM3) SPI Baud Rate Register */

+#define REG_SERCOM3_USART_BAUD     (*(RwReg16*)0x4200140AU) /**< \brief (SERCOM3) USART Baud Rate Register */

+#define REG_SERCOM3_I2CM_INTENCLR  (*(RwReg8 *)0x4200140CU) /**< \brief (SERCOM3) I2CM Interrupt Enable Clear Register */

+#define REG_SERCOM3_I2CS_INTENCLR  (*(RwReg8 *)0x4200140CU) /**< \brief (SERCOM3) I2CS Interrupt Enable Clear Register */

+#define REG_SERCOM3_SPI_INTENCLR   (*(RwReg8 *)0x4200140CU) /**< \brief (SERCOM3) SPI Interrupt Enable Clear Register */

+#define REG_SERCOM3_USART_INTENCLR (*(RwReg8 *)0x4200140CU) /**< \brief (SERCOM3) USART Interrupt Enable Clear Register */

+#define REG_SERCOM3_I2CM_INTENSET  (*(RwReg8 *)0x4200140DU) /**< \brief (SERCOM3) I2CM Interrupt Enable Set Register */

+#define REG_SERCOM3_I2CS_INTENSET  (*(RwReg8 *)0x4200140DU) /**< \brief (SERCOM3) I2CS Interrupt Enable Set Register */

+#define REG_SERCOM3_SPI_INTENSET   (*(RwReg8 *)0x4200140DU) /**< \brief (SERCOM3) SPI Interrupt Enable Set Register */

+#define REG_SERCOM3_USART_INTENSET (*(RwReg8 *)0x4200140DU) /**< \brief (SERCOM3) USART Interrupt Enable Set Register */

+#define REG_SERCOM3_I2CM_INTFLAG   (*(RwReg8 *)0x4200140EU) /**< \brief (SERCOM3) I2CM Interrupt Flag Status and Clear Register */

+#define REG_SERCOM3_I2CS_INTFLAG   (*(RwReg8 *)0x4200140EU) /**< \brief (SERCOM3) I2CS Interrupt Flag Status and Clear Register */

+#define REG_SERCOM3_SPI_INTFLAG    (*(RwReg8 *)0x4200140EU) /**< \brief (SERCOM3) SPI Interrupt Flag Status and Clear Register */

+#define REG_SERCOM3_USART_INTFLAG  (*(RwReg8 *)0x4200140EU) /**< \brief (SERCOM3) USART Interrupt Flag Status and Clear Register */

+#define REG_SERCOM3_I2CM_STATUS    (*(RwReg16*)0x42001410U) /**< \brief (SERCOM3) I2CM Status Register */

+#define REG_SERCOM3_I2CS_STATUS    (*(RwReg16*)0x42001410U) /**< \brief (SERCOM3) I2CS Status Register */

+#define REG_SERCOM3_SPI_STATUS     (*(RwReg16*)0x42001410U) /**< \brief (SERCOM3) SPI Status Register */

+#define REG_SERCOM3_USART_STATUS   (*(RwReg16*)0x42001410U) /**< \brief (SERCOM3) USART Status Register */

+#define REG_SERCOM3_I2CM_ADDR      (*(RwReg8 *)0x42001414U) /**< \brief (SERCOM3) I2CM Address Register */

+#define REG_SERCOM3_I2CS_ADDR      (*(RwReg  *)0x42001414U) /**< \brief (SERCOM3) I2CS Address Register */

+#define REG_SERCOM3_SPI_ADDR       (*(RwReg  *)0x42001414U) /**< \brief (SERCOM3) SPI Address Register */

+#define REG_SERCOM3_I2CM_DATA      (*(RwReg8 *)0x42001418U) /**< \brief (SERCOM3) I2CM Data Register */

+#define REG_SERCOM3_I2CS_DATA      (*(RwReg8 *)0x42001418U) /**< \brief (SERCOM3) I2CS Data Register */

+#define REG_SERCOM3_SPI_DATA       (*(RwReg16*)0x42001418U) /**< \brief (SERCOM3) SPI Data Register */

+#define REG_SERCOM3_USART_DATA     (*(RwReg16*)0x42001418U) /**< \brief (SERCOM3) USART Data Register */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for SERCOM3 peripheral ========== */

+#define SERCOM3_GCLK_ID_CORE        16

+#define SERCOM3_GCLK_ID_SLOW        12

+#define SERCOM3_INT_MSB             3

+#define SERCOM3_PMSB                3

+

+#endif /* _SAMD20_SERCOM3_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_sercom4.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_sercom4.h
new file mode 100644
index 0000000..1aa5a29
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_sercom4.h
@@ -0,0 +1,132 @@
+/**

+ * \file

+ *

+ * \brief Instance description for SERCOM4

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_SERCOM4_INSTANCE_

+#define _SAMD20_SERCOM4_INSTANCE_

+

+/* ========== Register definition for SERCOM4 peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_SERCOM4_I2CM_CTRLA     (0x42001800U) /**< \brief (SERCOM4) I2CM Control Register A */

+#define REG_SERCOM4_I2CS_CTRLA     (0x42001800U) /**< \brief (SERCOM4) I2CS Control Register A */

+#define REG_SERCOM4_SPI_CTRLA      (0x42001800U) /**< \brief (SERCOM4) SPI Control Register A */

+#define REG_SERCOM4_USART_CTRLA    (0x42001800U) /**< \brief (SERCOM4) USART Control Register A */

+#define REG_SERCOM4_I2CM_CTRLB     (0x42001804U) /**< \brief (SERCOM4) I2CM Control Register B */

+#define REG_SERCOM4_I2CS_CTRLB     (0x42001804U) /**< \brief (SERCOM4) I2CS Control Register B */

+#define REG_SERCOM4_SPI_CTRLB      (0x42001804U) /**< \brief (SERCOM4) SPI Control Register B */

+#define REG_SERCOM4_USART_CTRLB    (0x42001804U) /**< \brief (SERCOM4) USART Control Register B */

+#define REG_SERCOM4_I2CM_DBGCTRL   (0x42001808U) /**< \brief (SERCOM4) I2CM Debug Register */

+#define REG_SERCOM4_SPI_DBGCTRL    (0x42001808U) /**< \brief (SERCOM4) SPI Debug Register */

+#define REG_SERCOM4_USART_DBGCTRL  (0x42001808U) /**< \brief (SERCOM4) USART Debug Register */

+#define REG_SERCOM4_I2CM_BAUD      (0x4200180AU) /**< \brief (SERCOM4) I2CM Baud Rate Register */

+#define REG_SERCOM4_SPI_BAUD       (0x4200180AU) /**< \brief (SERCOM4) SPI Baud Rate Register */

+#define REG_SERCOM4_USART_BAUD     (0x4200180AU) /**< \brief (SERCOM4) USART Baud Rate Register */

+#define REG_SERCOM4_I2CM_INTENCLR  (0x4200180CU) /**< \brief (SERCOM4) I2CM Interrupt Enable Clear Register */

+#define REG_SERCOM4_I2CS_INTENCLR  (0x4200180CU) /**< \brief (SERCOM4) I2CS Interrupt Enable Clear Register */

+#define REG_SERCOM4_SPI_INTENCLR   (0x4200180CU) /**< \brief (SERCOM4) SPI Interrupt Enable Clear Register */

+#define REG_SERCOM4_USART_INTENCLR (0x4200180CU) /**< \brief (SERCOM4) USART Interrupt Enable Clear Register */

+#define REG_SERCOM4_I2CM_INTENSET  (0x4200180DU) /**< \brief (SERCOM4) I2CM Interrupt Enable Set Register */

+#define REG_SERCOM4_I2CS_INTENSET  (0x4200180DU) /**< \brief (SERCOM4) I2CS Interrupt Enable Set Register */

+#define REG_SERCOM4_SPI_INTENSET   (0x4200180DU) /**< \brief (SERCOM4) SPI Interrupt Enable Set Register */

+#define REG_SERCOM4_USART_INTENSET (0x4200180DU) /**< \brief (SERCOM4) USART Interrupt Enable Set Register */

+#define REG_SERCOM4_I2CM_INTFLAG   (0x4200180EU) /**< \brief (SERCOM4) I2CM Interrupt Flag Status and Clear Register */

+#define REG_SERCOM4_I2CS_INTFLAG   (0x4200180EU) /**< \brief (SERCOM4) I2CS Interrupt Flag Status and Clear Register */

+#define REG_SERCOM4_SPI_INTFLAG    (0x4200180EU) /**< \brief (SERCOM4) SPI Interrupt Flag Status and Clear Register */

+#define REG_SERCOM4_USART_INTFLAG  (0x4200180EU) /**< \brief (SERCOM4) USART Interrupt Flag Status and Clear Register */

+#define REG_SERCOM4_I2CM_STATUS    (0x42001810U) /**< \brief (SERCOM4) I2CM Status Register */

+#define REG_SERCOM4_I2CS_STATUS    (0x42001810U) /**< \brief (SERCOM4) I2CS Status Register */

+#define REG_SERCOM4_SPI_STATUS     (0x42001810U) /**< \brief (SERCOM4) SPI Status Register */

+#define REG_SERCOM4_USART_STATUS   (0x42001810U) /**< \brief (SERCOM4) USART Status Register */

+#define REG_SERCOM4_I2CM_ADDR      (0x42001814U) /**< \brief (SERCOM4) I2CM Address Register */

+#define REG_SERCOM4_I2CS_ADDR      (0x42001814U) /**< \brief (SERCOM4) I2CS Address Register */

+#define REG_SERCOM4_SPI_ADDR       (0x42001814U) /**< \brief (SERCOM4) SPI Address Register */

+#define REG_SERCOM4_I2CM_DATA      (0x42001818U) /**< \brief (SERCOM4) I2CM Data Register */

+#define REG_SERCOM4_I2CS_DATA      (0x42001818U) /**< \brief (SERCOM4) I2CS Data Register */

+#define REG_SERCOM4_SPI_DATA       (0x42001818U) /**< \brief (SERCOM4) SPI Data Register */

+#define REG_SERCOM4_USART_DATA     (0x42001818U) /**< \brief (SERCOM4) USART Data Register */

+#else

+#define REG_SERCOM4_I2CM_CTRLA     (*(RwReg  *)0x42001800U) /**< \brief (SERCOM4) I2CM Control Register A */

+#define REG_SERCOM4_I2CS_CTRLA     (*(RwReg  *)0x42001800U) /**< \brief (SERCOM4) I2CS Control Register A */

+#define REG_SERCOM4_SPI_CTRLA      (*(RwReg  *)0x42001800U) /**< \brief (SERCOM4) SPI Control Register A */

+#define REG_SERCOM4_USART_CTRLA    (*(RwReg  *)0x42001800U) /**< \brief (SERCOM4) USART Control Register A */

+#define REG_SERCOM4_I2CM_CTRLB     (*(RwReg  *)0x42001804U) /**< \brief (SERCOM4) I2CM Control Register B */

+#define REG_SERCOM4_I2CS_CTRLB     (*(RwReg  *)0x42001804U) /**< \brief (SERCOM4) I2CS Control Register B */

+#define REG_SERCOM4_SPI_CTRLB      (*(RwReg  *)0x42001804U) /**< \brief (SERCOM4) SPI Control Register B */

+#define REG_SERCOM4_USART_CTRLB    (*(RwReg  *)0x42001804U) /**< \brief (SERCOM4) USART Control Register B */

+#define REG_SERCOM4_I2CM_DBGCTRL   (*(RwReg8 *)0x42001808U) /**< \brief (SERCOM4) I2CM Debug Register */

+#define REG_SERCOM4_SPI_DBGCTRL    (*(RwReg8 *)0x42001808U) /**< \brief (SERCOM4) SPI Debug Register */

+#define REG_SERCOM4_USART_DBGCTRL  (*(RwReg8 *)0x42001808U) /**< \brief (SERCOM4) USART Debug Register */

+#define REG_SERCOM4_I2CM_BAUD      (*(RwReg16*)0x4200180AU) /**< \brief (SERCOM4) I2CM Baud Rate Register */

+#define REG_SERCOM4_SPI_BAUD       (*(RwReg8 *)0x4200180AU) /**< \brief (SERCOM4) SPI Baud Rate Register */

+#define REG_SERCOM4_USART_BAUD     (*(RwReg16*)0x4200180AU) /**< \brief (SERCOM4) USART Baud Rate Register */

+#define REG_SERCOM4_I2CM_INTENCLR  (*(RwReg8 *)0x4200180CU) /**< \brief (SERCOM4) I2CM Interrupt Enable Clear Register */

+#define REG_SERCOM4_I2CS_INTENCLR  (*(RwReg8 *)0x4200180CU) /**< \brief (SERCOM4) I2CS Interrupt Enable Clear Register */

+#define REG_SERCOM4_SPI_INTENCLR   (*(RwReg8 *)0x4200180CU) /**< \brief (SERCOM4) SPI Interrupt Enable Clear Register */

+#define REG_SERCOM4_USART_INTENCLR (*(RwReg8 *)0x4200180CU) /**< \brief (SERCOM4) USART Interrupt Enable Clear Register */

+#define REG_SERCOM4_I2CM_INTENSET  (*(RwReg8 *)0x4200180DU) /**< \brief (SERCOM4) I2CM Interrupt Enable Set Register */

+#define REG_SERCOM4_I2CS_INTENSET  (*(RwReg8 *)0x4200180DU) /**< \brief (SERCOM4) I2CS Interrupt Enable Set Register */

+#define REG_SERCOM4_SPI_INTENSET   (*(RwReg8 *)0x4200180DU) /**< \brief (SERCOM4) SPI Interrupt Enable Set Register */

+#define REG_SERCOM4_USART_INTENSET (*(RwReg8 *)0x4200180DU) /**< \brief (SERCOM4) USART Interrupt Enable Set Register */

+#define REG_SERCOM4_I2CM_INTFLAG   (*(RwReg8 *)0x4200180EU) /**< \brief (SERCOM4) I2CM Interrupt Flag Status and Clear Register */

+#define REG_SERCOM4_I2CS_INTFLAG   (*(RwReg8 *)0x4200180EU) /**< \brief (SERCOM4) I2CS Interrupt Flag Status and Clear Register */

+#define REG_SERCOM4_SPI_INTFLAG    (*(RwReg8 *)0x4200180EU) /**< \brief (SERCOM4) SPI Interrupt Flag Status and Clear Register */

+#define REG_SERCOM4_USART_INTFLAG  (*(RwReg8 *)0x4200180EU) /**< \brief (SERCOM4) USART Interrupt Flag Status and Clear Register */

+#define REG_SERCOM4_I2CM_STATUS    (*(RwReg16*)0x42001810U) /**< \brief (SERCOM4) I2CM Status Register */

+#define REG_SERCOM4_I2CS_STATUS    (*(RwReg16*)0x42001810U) /**< \brief (SERCOM4) I2CS Status Register */

+#define REG_SERCOM4_SPI_STATUS     (*(RwReg16*)0x42001810U) /**< \brief (SERCOM4) SPI Status Register */

+#define REG_SERCOM4_USART_STATUS   (*(RwReg16*)0x42001810U) /**< \brief (SERCOM4) USART Status Register */

+#define REG_SERCOM4_I2CM_ADDR      (*(RwReg8 *)0x42001814U) /**< \brief (SERCOM4) I2CM Address Register */

+#define REG_SERCOM4_I2CS_ADDR      (*(RwReg  *)0x42001814U) /**< \brief (SERCOM4) I2CS Address Register */

+#define REG_SERCOM4_SPI_ADDR       (*(RwReg  *)0x42001814U) /**< \brief (SERCOM4) SPI Address Register */

+#define REG_SERCOM4_I2CM_DATA      (*(RwReg8 *)0x42001818U) /**< \brief (SERCOM4) I2CM Data Register */

+#define REG_SERCOM4_I2CS_DATA      (*(RwReg8 *)0x42001818U) /**< \brief (SERCOM4) I2CS Data Register */

+#define REG_SERCOM4_SPI_DATA       (*(RwReg16*)0x42001818U) /**< \brief (SERCOM4) SPI Data Register */

+#define REG_SERCOM4_USART_DATA     (*(RwReg16*)0x42001818U) /**< \brief (SERCOM4) USART Data Register */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for SERCOM4 peripheral ========== */

+#define SERCOM4_GCLK_ID_CORE        17

+#define SERCOM4_GCLK_ID_SLOW        12

+#define SERCOM4_INT_MSB             3

+#define SERCOM4_PMSB                3

+

+#endif /* _SAMD20_SERCOM4_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_sercom5.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_sercom5.h
new file mode 100644
index 0000000..5bc469f
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_sercom5.h
@@ -0,0 +1,132 @@
+/**

+ * \file

+ *

+ * \brief Instance description for SERCOM5

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_SERCOM5_INSTANCE_

+#define _SAMD20_SERCOM5_INSTANCE_

+

+/* ========== Register definition for SERCOM5 peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_SERCOM5_I2CM_CTRLA     (0x42001C00U) /**< \brief (SERCOM5) I2CM Control Register A */

+#define REG_SERCOM5_I2CS_CTRLA     (0x42001C00U) /**< \brief (SERCOM5) I2CS Control Register A */

+#define REG_SERCOM5_SPI_CTRLA      (0x42001C00U) /**< \brief (SERCOM5) SPI Control Register A */

+#define REG_SERCOM5_USART_CTRLA    (0x42001C00U) /**< \brief (SERCOM5) USART Control Register A */

+#define REG_SERCOM5_I2CM_CTRLB     (0x42001C04U) /**< \brief (SERCOM5) I2CM Control Register B */

+#define REG_SERCOM5_I2CS_CTRLB     (0x42001C04U) /**< \brief (SERCOM5) I2CS Control Register B */

+#define REG_SERCOM5_SPI_CTRLB      (0x42001C04U) /**< \brief (SERCOM5) SPI Control Register B */

+#define REG_SERCOM5_USART_CTRLB    (0x42001C04U) /**< \brief (SERCOM5) USART Control Register B */

+#define REG_SERCOM5_I2CM_DBGCTRL   (0x42001C08U) /**< \brief (SERCOM5) I2CM Debug Register */

+#define REG_SERCOM5_SPI_DBGCTRL    (0x42001C08U) /**< \brief (SERCOM5) SPI Debug Register */

+#define REG_SERCOM5_USART_DBGCTRL  (0x42001C08U) /**< \brief (SERCOM5) USART Debug Register */

+#define REG_SERCOM5_I2CM_BAUD      (0x42001C0AU) /**< \brief (SERCOM5) I2CM Baud Rate Register */

+#define REG_SERCOM5_SPI_BAUD       (0x42001C0AU) /**< \brief (SERCOM5) SPI Baud Rate Register */

+#define REG_SERCOM5_USART_BAUD     (0x42001C0AU) /**< \brief (SERCOM5) USART Baud Rate Register */

+#define REG_SERCOM5_I2CM_INTENCLR  (0x42001C0CU) /**< \brief (SERCOM5) I2CM Interrupt Enable Clear Register */

+#define REG_SERCOM5_I2CS_INTENCLR  (0x42001C0CU) /**< \brief (SERCOM5) I2CS Interrupt Enable Clear Register */

+#define REG_SERCOM5_SPI_INTENCLR   (0x42001C0CU) /**< \brief (SERCOM5) SPI Interrupt Enable Clear Register */

+#define REG_SERCOM5_USART_INTENCLR (0x42001C0CU) /**< \brief (SERCOM5) USART Interrupt Enable Clear Register */

+#define REG_SERCOM5_I2CM_INTENSET  (0x42001C0DU) /**< \brief (SERCOM5) I2CM Interrupt Enable Set Register */

+#define REG_SERCOM5_I2CS_INTENSET  (0x42001C0DU) /**< \brief (SERCOM5) I2CS Interrupt Enable Set Register */

+#define REG_SERCOM5_SPI_INTENSET   (0x42001C0DU) /**< \brief (SERCOM5) SPI Interrupt Enable Set Register */

+#define REG_SERCOM5_USART_INTENSET (0x42001C0DU) /**< \brief (SERCOM5) USART Interrupt Enable Set Register */

+#define REG_SERCOM5_I2CM_INTFLAG   (0x42001C0EU) /**< \brief (SERCOM5) I2CM Interrupt Flag Status and Clear Register */

+#define REG_SERCOM5_I2CS_INTFLAG   (0x42001C0EU) /**< \brief (SERCOM5) I2CS Interrupt Flag Status and Clear Register */

+#define REG_SERCOM5_SPI_INTFLAG    (0x42001C0EU) /**< \brief (SERCOM5) SPI Interrupt Flag Status and Clear Register */

+#define REG_SERCOM5_USART_INTFLAG  (0x42001C0EU) /**< \brief (SERCOM5) USART Interrupt Flag Status and Clear Register */

+#define REG_SERCOM5_I2CM_STATUS    (0x42001C10U) /**< \brief (SERCOM5) I2CM Status Register */

+#define REG_SERCOM5_I2CS_STATUS    (0x42001C10U) /**< \brief (SERCOM5) I2CS Status Register */

+#define REG_SERCOM5_SPI_STATUS     (0x42001C10U) /**< \brief (SERCOM5) SPI Status Register */

+#define REG_SERCOM5_USART_STATUS   (0x42001C10U) /**< \brief (SERCOM5) USART Status Register */

+#define REG_SERCOM5_I2CM_ADDR      (0x42001C14U) /**< \brief (SERCOM5) I2CM Address Register */

+#define REG_SERCOM5_I2CS_ADDR      (0x42001C14U) /**< \brief (SERCOM5) I2CS Address Register */

+#define REG_SERCOM5_SPI_ADDR       (0x42001C14U) /**< \brief (SERCOM5) SPI Address Register */

+#define REG_SERCOM5_I2CM_DATA      (0x42001C18U) /**< \brief (SERCOM5) I2CM Data Register */

+#define REG_SERCOM5_I2CS_DATA      (0x42001C18U) /**< \brief (SERCOM5) I2CS Data Register */

+#define REG_SERCOM5_SPI_DATA       (0x42001C18U) /**< \brief (SERCOM5) SPI Data Register */

+#define REG_SERCOM5_USART_DATA     (0x42001C18U) /**< \brief (SERCOM5) USART Data Register */

+#else

+#define REG_SERCOM5_I2CM_CTRLA     (*(RwReg  *)0x42001C00U) /**< \brief (SERCOM5) I2CM Control Register A */

+#define REG_SERCOM5_I2CS_CTRLA     (*(RwReg  *)0x42001C00U) /**< \brief (SERCOM5) I2CS Control Register A */

+#define REG_SERCOM5_SPI_CTRLA      (*(RwReg  *)0x42001C00U) /**< \brief (SERCOM5) SPI Control Register A */

+#define REG_SERCOM5_USART_CTRLA    (*(RwReg  *)0x42001C00U) /**< \brief (SERCOM5) USART Control Register A */

+#define REG_SERCOM5_I2CM_CTRLB     (*(RwReg  *)0x42001C04U) /**< \brief (SERCOM5) I2CM Control Register B */

+#define REG_SERCOM5_I2CS_CTRLB     (*(RwReg  *)0x42001C04U) /**< \brief (SERCOM5) I2CS Control Register B */

+#define REG_SERCOM5_SPI_CTRLB      (*(RwReg  *)0x42001C04U) /**< \brief (SERCOM5) SPI Control Register B */

+#define REG_SERCOM5_USART_CTRLB    (*(RwReg  *)0x42001C04U) /**< \brief (SERCOM5) USART Control Register B */

+#define REG_SERCOM5_I2CM_DBGCTRL   (*(RwReg8 *)0x42001C08U) /**< \brief (SERCOM5) I2CM Debug Register */

+#define REG_SERCOM5_SPI_DBGCTRL    (*(RwReg8 *)0x42001C08U) /**< \brief (SERCOM5) SPI Debug Register */

+#define REG_SERCOM5_USART_DBGCTRL  (*(RwReg8 *)0x42001C08U) /**< \brief (SERCOM5) USART Debug Register */

+#define REG_SERCOM5_I2CM_BAUD      (*(RwReg16*)0x42001C0AU) /**< \brief (SERCOM5) I2CM Baud Rate Register */

+#define REG_SERCOM5_SPI_BAUD       (*(RwReg8 *)0x42001C0AU) /**< \brief (SERCOM5) SPI Baud Rate Register */

+#define REG_SERCOM5_USART_BAUD     (*(RwReg16*)0x42001C0AU) /**< \brief (SERCOM5) USART Baud Rate Register */

+#define REG_SERCOM5_I2CM_INTENCLR  (*(RwReg8 *)0x42001C0CU) /**< \brief (SERCOM5) I2CM Interrupt Enable Clear Register */

+#define REG_SERCOM5_I2CS_INTENCLR  (*(RwReg8 *)0x42001C0CU) /**< \brief (SERCOM5) I2CS Interrupt Enable Clear Register */

+#define REG_SERCOM5_SPI_INTENCLR   (*(RwReg8 *)0x42001C0CU) /**< \brief (SERCOM5) SPI Interrupt Enable Clear Register */

+#define REG_SERCOM5_USART_INTENCLR (*(RwReg8 *)0x42001C0CU) /**< \brief (SERCOM5) USART Interrupt Enable Clear Register */

+#define REG_SERCOM5_I2CM_INTENSET  (*(RwReg8 *)0x42001C0DU) /**< \brief (SERCOM5) I2CM Interrupt Enable Set Register */

+#define REG_SERCOM5_I2CS_INTENSET  (*(RwReg8 *)0x42001C0DU) /**< \brief (SERCOM5) I2CS Interrupt Enable Set Register */

+#define REG_SERCOM5_SPI_INTENSET   (*(RwReg8 *)0x42001C0DU) /**< \brief (SERCOM5) SPI Interrupt Enable Set Register */

+#define REG_SERCOM5_USART_INTENSET (*(RwReg8 *)0x42001C0DU) /**< \brief (SERCOM5) USART Interrupt Enable Set Register */

+#define REG_SERCOM5_I2CM_INTFLAG   (*(RwReg8 *)0x42001C0EU) /**< \brief (SERCOM5) I2CM Interrupt Flag Status and Clear Register */

+#define REG_SERCOM5_I2CS_INTFLAG   (*(RwReg8 *)0x42001C0EU) /**< \brief (SERCOM5) I2CS Interrupt Flag Status and Clear Register */

+#define REG_SERCOM5_SPI_INTFLAG    (*(RwReg8 *)0x42001C0EU) /**< \brief (SERCOM5) SPI Interrupt Flag Status and Clear Register */

+#define REG_SERCOM5_USART_INTFLAG  (*(RwReg8 *)0x42001C0EU) /**< \brief (SERCOM5) USART Interrupt Flag Status and Clear Register */

+#define REG_SERCOM5_I2CM_STATUS    (*(RwReg16*)0x42001C10U) /**< \brief (SERCOM5) I2CM Status Register */

+#define REG_SERCOM5_I2CS_STATUS    (*(RwReg16*)0x42001C10U) /**< \brief (SERCOM5) I2CS Status Register */

+#define REG_SERCOM5_SPI_STATUS     (*(RwReg16*)0x42001C10U) /**< \brief (SERCOM5) SPI Status Register */

+#define REG_SERCOM5_USART_STATUS   (*(RwReg16*)0x42001C10U) /**< \brief (SERCOM5) USART Status Register */

+#define REG_SERCOM5_I2CM_ADDR      (*(RwReg8 *)0x42001C14U) /**< \brief (SERCOM5) I2CM Address Register */

+#define REG_SERCOM5_I2CS_ADDR      (*(RwReg  *)0x42001C14U) /**< \brief (SERCOM5) I2CS Address Register */

+#define REG_SERCOM5_SPI_ADDR       (*(RwReg  *)0x42001C14U) /**< \brief (SERCOM5) SPI Address Register */

+#define REG_SERCOM5_I2CM_DATA      (*(RwReg8 *)0x42001C18U) /**< \brief (SERCOM5) I2CM Data Register */

+#define REG_SERCOM5_I2CS_DATA      (*(RwReg8 *)0x42001C18U) /**< \brief (SERCOM5) I2CS Data Register */

+#define REG_SERCOM5_SPI_DATA       (*(RwReg16*)0x42001C18U) /**< \brief (SERCOM5) SPI Data Register */

+#define REG_SERCOM5_USART_DATA     (*(RwReg16*)0x42001C18U) /**< \brief (SERCOM5) USART Data Register */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for SERCOM5 peripheral ========== */

+#define SERCOM5_GCLK_ID_CORE        18

+#define SERCOM5_GCLK_ID_SLOW        12

+#define SERCOM5_INT_MSB             3

+#define SERCOM5_PMSB                3

+

+#endif /* _SAMD20_SERCOM5_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_sysctrl.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_sysctrl.h
new file mode 100644
index 0000000..afbac1d
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_sysctrl.h
@@ -0,0 +1,114 @@
+/**

+ * \file

+ *

+ * \brief Instance description for SYSCTRL

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_SYSCTRL_INSTANCE_

+#define _SAMD20_SYSCTRL_INSTANCE_

+

+/* ========== Register definition for SYSCTRL peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_SYSCTRL_INTENCLR       (0x40000800U) /**< \brief (SYSCTRL) Interrupt Enable Clear Register */

+#define REG_SYSCTRL_INTENSET       (0x40000804U) /**< \brief (SYSCTRL) Interrupt Enable Set Register */

+#define REG_SYSCTRL_INTFLAG        (0x40000808U) /**< \brief (SYSCTRL) Interrupt Flag Status and Clear Register */

+#define REG_SYSCTRL_PCLKSR         (0x4000080CU) /**< \brief (SYSCTRL) Power and Clocks Status Register */

+#define REG_SYSCTRL_XOSC           (0x40000810U) /**< \brief (SYSCTRL) XOSC Control Register */

+#define REG_SYSCTRL_XOSC32K        (0x40000814U) /**< \brief (SYSCTRL) XOSC32K Control Register */

+#define REG_SYSCTRL_OSC32K         (0x40000818U) /**< \brief (SYSCTRL) OSC32K Control Register */

+#define REG_SYSCTRL_OSCULP32K      (0x4000081CU) /**< \brief (SYSCTRL) OSCULP32K Control Register */

+#define REG_SYSCTRL_OSC8M          (0x40000820U) /**< \brief (SYSCTRL) OSC8M Control Register A */

+#define REG_SYSCTRL_DFLLCTRL       (0x40000824U) /**< \brief (SYSCTRL) DFLL Config Register */

+#define REG_SYSCTRL_DFLLVAL        (0x40000828U) /**< \brief (SYSCTRL) DFLL Calibration Value Register */

+#define REG_SYSCTRL_DFLLMUL        (0x4000082CU) /**< \brief (SYSCTRL) DFLL Multiplier Register */

+#define REG_SYSCTRL_DFLLSYNC       (0x40000830U) /**< \brief (SYSCTRL) DFLL Synchronization Register */

+#define REG_SYSCTRL_BOD33          (0x40000834U) /**< \brief (SYSCTRL) BOD33 Control Register */

+#define REG_SYSCTRL_BOD12          (0x40000838U) /**< \brief (SYSCTRL) BOD12 Control Register */

+#define REG_SYSCTRL_VREG           (0x4000083CU) /**< \brief (SYSCTRL) VREG Control Register */

+#define REG_SYSCTRL_VREF           (0x40000840U) /**< \brief (SYSCTRL) VREF Control Register A */

+#else

+#define REG_SYSCTRL_INTENCLR       (*(RwReg  *)0x40000800U) /**< \brief (SYSCTRL) Interrupt Enable Clear Register */

+#define REG_SYSCTRL_INTENSET       (*(RwReg  *)0x40000804U) /**< \brief (SYSCTRL) Interrupt Enable Set Register */

+#define REG_SYSCTRL_INTFLAG        (*(RwReg  *)0x40000808U) /**< \brief (SYSCTRL) Interrupt Flag Status and Clear Register */

+#define REG_SYSCTRL_PCLKSR         (*(RoReg  *)0x4000080CU) /**< \brief (SYSCTRL) Power and Clocks Status Register */

+#define REG_SYSCTRL_XOSC           (*(RwReg16*)0x40000810U) /**< \brief (SYSCTRL) XOSC Control Register */

+#define REG_SYSCTRL_XOSC32K        (*(RwReg16*)0x40000814U) /**< \brief (SYSCTRL) XOSC32K Control Register */

+#define REG_SYSCTRL_OSC32K         (*(RwReg  *)0x40000818U) /**< \brief (SYSCTRL) OSC32K Control Register */

+#define REG_SYSCTRL_OSCULP32K      (*(RwReg8 *)0x4000081CU) /**< \brief (SYSCTRL) OSCULP32K Control Register */

+#define REG_SYSCTRL_OSC8M          (*(RwReg  *)0x40000820U) /**< \brief (SYSCTRL) OSC8M Control Register A */

+#define REG_SYSCTRL_DFLLCTRL       (*(RwReg16*)0x40000824U) /**< \brief (SYSCTRL) DFLL Config Register */

+#define REG_SYSCTRL_DFLLVAL        (*(RwReg  *)0x40000828U) /**< \brief (SYSCTRL) DFLL Calibration Value Register */

+#define REG_SYSCTRL_DFLLMUL        (*(RwReg  *)0x4000082CU) /**< \brief (SYSCTRL) DFLL Multiplier Register */

+#define REG_SYSCTRL_DFLLSYNC       (*(RwReg8 *)0x40000830U) /**< \brief (SYSCTRL) DFLL Synchronization Register */

+#define REG_SYSCTRL_BOD33          (*(RwReg  *)0x40000834U) /**< \brief (SYSCTRL) BOD33 Control Register */

+#define REG_SYSCTRL_BOD12          (*(RwReg  *)0x40000838U) /**< \brief (SYSCTRL) BOD12 Control Register */

+#define REG_SYSCTRL_VREG           (*(RwReg16*)0x4000083CU) /**< \brief (SYSCTRL) VREG Control Register */

+#define REG_SYSCTRL_VREF           (*(RwReg  *)0x40000840U) /**< \brief (SYSCTRL) VREF Control Register A */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for SYSCTRL peripheral ========== */

+#define SYSCTRL_BGAP_CALIB_MSB      11

+#define SYSCTRL_BOD12_CALIB_MSB     4

+#define SYSCTRL_BOD33_CALIB_MSB     5

+#define SYSCTRL_DFLL48M_COARSE_MSB  4

+#define SYSCTRL_DFLL48M_FINE_MSB    7

+#define SYSCTRL_DFLL48M_TESTEN_MSB  1

+#define SYSCTRL_GCLK_ID_DFLL48      0

+#define SYSCTRL_OSC32K_COARSE_CALIB_MSB 6

+#define SYSCTRL_POR33_ENTEST_MSB    1

+#define SYSCTRL_ULPVREF_DIVLEV_MSB  3

+#define SYSCTRL_ULPVREG_FORCEGAIN_MSB 1

+#define SYSCTRL_ULPVREG_RAMREFSEL_MSB 2

+#define SYSCTRL_VREF_CONTROL_MSB    48

+#define SYSCTRL_VREF_STATUS_MSB     7

+#define SYSCTRL_VREG_LEVEL_MSB      2

+#define SYSCTRL_BOD12_VERSION       0x110

+#define SYSCTRL_BOD33_VERSION       0x110

+#define SYSCTRL_DFLL48M_VERSION     0x200

+#define SYSCTRL_GCLK_VERSION        0x200

+#define SYSCTRL_OSCULP32K_VERSION   0x110

+#define SYSCTRL_OSC8M_VERSION       0x110

+#define SYSCTRL_OSC32K_VERSION      0x110

+#define SYSCTRL_VREF_VERSION        0x200

+#define SYSCTRL_VREG_VERSION        0x200

+#define SYSCTRL_XOSC_VERSION        0x110

+#define SYSCTRL_XOSC32K_VERSION     0x110

+

+#endif /* _SAMD20_SYSCTRL_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc0.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc0.h
new file mode 100644
index 0000000..1ec47f4
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc0.h
@@ -0,0 +1,106 @@
+/**

+ * \file

+ *

+ * \brief Instance description for TC0

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_TC0_INSTANCE_

+#define _SAMD20_TC0_INSTANCE_

+

+/* ========== Register definition for TC0 peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_TC0_CTRLA              (0x42002000U) /**< \brief (TC0) Control A Register */

+#define REG_TC0_READREQ            (0x42002002U) /**< \brief (TC0) Read Request Register */

+#define REG_TC0_CTRLBCLR           (0x42002004U) /**< \brief (TC0) Control B Clear Register */

+#define REG_TC0_CTRLBSET           (0x42002005U) /**< \brief (TC0) Control B Set Register */

+#define REG_TC0_CTRLC              (0x42002006U) /**< \brief (TC0) Control C Register */

+#define REG_TC0_DBGCTRL            (0x42002008U) /**< \brief (TC0) Debug Register */

+#define REG_TC0_EVCTRL             (0x4200200AU) /**< \brief (TC0) Event Control Register */

+#define REG_TC0_INTENCLR           (0x4200200CU) /**< \brief (TC0) Interrupt Enable Clear Register */

+#define REG_TC0_INTENSET           (0x4200200DU) /**< \brief (TC0) Interrupt Enable Set Register */

+#define REG_TC0_INTFLAG            (0x4200200EU) /**< \brief (TC0) Interrupt Flag Status and Clear Register */

+#define REG_TC0_STATUS             (0x4200200FU) /**< \brief (TC0) Status Register */

+#define REG_TC0_COUNT8_COUNT       (0x42002010U) /**< \brief (TC0) COUNT8 Count Register */

+#define REG_TC0_COUNT16_COUNT      (0x42002010U) /**< \brief (TC0) COUNT16 Count Register */

+#define REG_TC0_COUNT32_COUNT      (0x42002010U) /**< \brief (TC0) COUNT32 Count Register */

+#define REG_TC0_COUNT8_PER         (0x42002014U) /**< \brief (TC0) COUNT8 Period Register */

+#define REG_TC0_COUNT32_PER        (0x42002014U) /**< \brief (TC0) COUNT32 Period Register */

+#define REG_TC0_COUNT8_CC0         (0x42002018U) /**< \brief (TC0) COUNT8 Compare and Capture Register 0 */

+#define REG_TC0_COUNT8_CC1         (0x42002019U) /**< \brief (TC0) COUNT8 Compare and Capture Register 1 */

+#define REG_TC0_COUNT16_CC0        (0x42002018U) /**< \brief (TC0) COUNT16 Compare and Capture Register 0 */

+#define REG_TC0_COUNT16_CC1        (0x4200201AU) /**< \brief (TC0) COUNT16 Compare and Capture Register 1 */

+#define REG_TC0_COUNT32_CC0        (0x42002018U) /**< \brief (TC0) COUNT32 Compare and Capture Register 0 */

+#define REG_TC0_COUNT32_CC1        (0x4200201CU) /**< \brief (TC0) COUNT32 Compare and Capture Register 1 */

+#else

+#define REG_TC0_CTRLA              (*(RwReg16*)0x42002000U) /**< \brief (TC0) Control A Register */

+#define REG_TC0_READREQ            (*(RwReg16*)0x42002002U) /**< \brief (TC0) Read Request Register */

+#define REG_TC0_CTRLBCLR           (*(RwReg8 *)0x42002004U) /**< \brief (TC0) Control B Clear Register */

+#define REG_TC0_CTRLBSET           (*(RwReg8 *)0x42002005U) /**< \brief (TC0) Control B Set Register */

+#define REG_TC0_CTRLC              (*(RwReg8 *)0x42002006U) /**< \brief (TC0) Control C Register */

+#define REG_TC0_DBGCTRL            (*(RwReg8 *)0x42002008U) /**< \brief (TC0) Debug Register */

+#define REG_TC0_EVCTRL             (*(RwReg16*)0x4200200AU) /**< \brief (TC0) Event Control Register */

+#define REG_TC0_INTENCLR           (*(RwReg8 *)0x4200200CU) /**< \brief (TC0) Interrupt Enable Clear Register */

+#define REG_TC0_INTENSET           (*(RwReg8 *)0x4200200DU) /**< \brief (TC0) Interrupt Enable Set Register */

+#define REG_TC0_INTFLAG            (*(RwReg8 *)0x4200200EU) /**< \brief (TC0) Interrupt Flag Status and Clear Register */

+#define REG_TC0_STATUS             (*(RoReg8 *)0x4200200FU) /**< \brief (TC0) Status Register */

+#define REG_TC0_COUNT8_COUNT       (*(RwReg8 *)0x42002010U) /**< \brief (TC0) COUNT8 Count Register */

+#define REG_TC0_COUNT16_COUNT      (*(RwReg16*)0x42002010U) /**< \brief (TC0) COUNT16 Count Register */

+#define REG_TC0_COUNT32_COUNT      (*(RwReg  *)0x42002010U) /**< \brief (TC0) COUNT32 Count Register */

+#define REG_TC0_COUNT8_PER         (*(RwReg8 *)0x42002014U) /**< \brief (TC0) COUNT8 Period Register */

+#define REG_TC0_COUNT32_PER        (*(RwReg  *)0x42002014U) /**< \brief (TC0) COUNT32 Period Register */

+#define REG_TC0_COUNT8_CC0         (*(RwReg8 *)0x42002018U) /**< \brief (TC0) COUNT8 Compare and Capture Register 0 */

+#define REG_TC0_COUNT8_CC1         (*(RwReg8 *)0x42002019U) /**< \brief (TC0) COUNT8 Compare and Capture Register 1 */

+#define REG_TC0_COUNT16_CC0        (*(RwReg16*)0x42002018U) /**< \brief (TC0) COUNT16 Compare and Capture Register 0 */

+#define REG_TC0_COUNT16_CC1        (*(RwReg16*)0x4200201AU) /**< \brief (TC0) COUNT16 Compare and Capture Register 1 */

+#define REG_TC0_COUNT32_CC0        (*(RwReg  *)0x42002018U) /**< \brief (TC0) COUNT32 Compare and Capture Register 0 */

+#define REG_TC0_COUNT32_CC1        (*(RwReg  *)0x4200201CU) /**< \brief (TC0) COUNT32 Compare and Capture Register 1 */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for TC0 peripheral ========== */

+#define TC0_CC8_NUM                 2

+#define TC0_CC16_NUM                2

+#define TC0_CC32_NUM                2

+#define TC0_DITHERING_EXT           0

+#define TC0_GCLK_ID                 19

+#define TC0_OW_NUM                  2

+#define TC0_PERIOD_EXT              0

+#define TC0_SHADOW_EXT              0

+

+#endif /* _SAMD20_TC0_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc1.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc1.h
new file mode 100644
index 0000000..f5dbf4f
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc1.h
@@ -0,0 +1,106 @@
+/**

+ * \file

+ *

+ * \brief Instance description for TC1

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_TC1_INSTANCE_

+#define _SAMD20_TC1_INSTANCE_

+

+/* ========== Register definition for TC1 peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_TC1_CTRLA              (0x42002400U) /**< \brief (TC1) Control A Register */

+#define REG_TC1_READREQ            (0x42002402U) /**< \brief (TC1) Read Request Register */

+#define REG_TC1_CTRLBCLR           (0x42002404U) /**< \brief (TC1) Control B Clear Register */

+#define REG_TC1_CTRLBSET           (0x42002405U) /**< \brief (TC1) Control B Set Register */

+#define REG_TC1_CTRLC              (0x42002406U) /**< \brief (TC1) Control C Register */

+#define REG_TC1_DBGCTRL            (0x42002408U) /**< \brief (TC1) Debug Register */

+#define REG_TC1_EVCTRL             (0x4200240AU) /**< \brief (TC1) Event Control Register */

+#define REG_TC1_INTENCLR           (0x4200240CU) /**< \brief (TC1) Interrupt Enable Clear Register */

+#define REG_TC1_INTENSET           (0x4200240DU) /**< \brief (TC1) Interrupt Enable Set Register */

+#define REG_TC1_INTFLAG            (0x4200240EU) /**< \brief (TC1) Interrupt Flag Status and Clear Register */

+#define REG_TC1_STATUS             (0x4200240FU) /**< \brief (TC1) Status Register */

+#define REG_TC1_COUNT8_COUNT       (0x42002410U) /**< \brief (TC1) COUNT8 Count Register */

+#define REG_TC1_COUNT16_COUNT      (0x42002410U) /**< \brief (TC1) COUNT16 Count Register */

+#define REG_TC1_COUNT32_COUNT      (0x42002410U) /**< \brief (TC1) COUNT32 Count Register */

+#define REG_TC1_COUNT8_PER         (0x42002414U) /**< \brief (TC1) COUNT8 Period Register */

+#define REG_TC1_COUNT32_PER        (0x42002414U) /**< \brief (TC1) COUNT32 Period Register */

+#define REG_TC1_COUNT8_CC0         (0x42002418U) /**< \brief (TC1) COUNT8 Compare and Capture Register 0 */

+#define REG_TC1_COUNT8_CC1         (0x42002419U) /**< \brief (TC1) COUNT8 Compare and Capture Register 1 */

+#define REG_TC1_COUNT16_CC0        (0x42002418U) /**< \brief (TC1) COUNT16 Compare and Capture Register 0 */

+#define REG_TC1_COUNT16_CC1        (0x4200241AU) /**< \brief (TC1) COUNT16 Compare and Capture Register 1 */

+#define REG_TC1_COUNT32_CC0        (0x42002418U) /**< \brief (TC1) COUNT32 Compare and Capture Register 0 */

+#define REG_TC1_COUNT32_CC1        (0x4200241CU) /**< \brief (TC1) COUNT32 Compare and Capture Register 1 */

+#else

+#define REG_TC1_CTRLA              (*(RwReg16*)0x42002400U) /**< \brief (TC1) Control A Register */

+#define REG_TC1_READREQ            (*(RwReg16*)0x42002402U) /**< \brief (TC1) Read Request Register */

+#define REG_TC1_CTRLBCLR           (*(RwReg8 *)0x42002404U) /**< \brief (TC1) Control B Clear Register */

+#define REG_TC1_CTRLBSET           (*(RwReg8 *)0x42002405U) /**< \brief (TC1) Control B Set Register */

+#define REG_TC1_CTRLC              (*(RwReg8 *)0x42002406U) /**< \brief (TC1) Control C Register */

+#define REG_TC1_DBGCTRL            (*(RwReg8 *)0x42002408U) /**< \brief (TC1) Debug Register */

+#define REG_TC1_EVCTRL             (*(RwReg16*)0x4200240AU) /**< \brief (TC1) Event Control Register */

+#define REG_TC1_INTENCLR           (*(RwReg8 *)0x4200240CU) /**< \brief (TC1) Interrupt Enable Clear Register */

+#define REG_TC1_INTENSET           (*(RwReg8 *)0x4200240DU) /**< \brief (TC1) Interrupt Enable Set Register */

+#define REG_TC1_INTFLAG            (*(RwReg8 *)0x4200240EU) /**< \brief (TC1) Interrupt Flag Status and Clear Register */

+#define REG_TC1_STATUS             (*(RoReg8 *)0x4200240FU) /**< \brief (TC1) Status Register */

+#define REG_TC1_COUNT8_COUNT       (*(RwReg8 *)0x42002410U) /**< \brief (TC1) COUNT8 Count Register */

+#define REG_TC1_COUNT16_COUNT      (*(RwReg16*)0x42002410U) /**< \brief (TC1) COUNT16 Count Register */

+#define REG_TC1_COUNT32_COUNT      (*(RwReg  *)0x42002410U) /**< \brief (TC1) COUNT32 Count Register */

+#define REG_TC1_COUNT8_PER         (*(RwReg8 *)0x42002414U) /**< \brief (TC1) COUNT8 Period Register */

+#define REG_TC1_COUNT32_PER        (*(RwReg  *)0x42002414U) /**< \brief (TC1) COUNT32 Period Register */

+#define REG_TC1_COUNT8_CC0         (*(RwReg8 *)0x42002418U) /**< \brief (TC1) COUNT8 Compare and Capture Register 0 */

+#define REG_TC1_COUNT8_CC1         (*(RwReg8 *)0x42002419U) /**< \brief (TC1) COUNT8 Compare and Capture Register 1 */

+#define REG_TC1_COUNT16_CC0        (*(RwReg16*)0x42002418U) /**< \brief (TC1) COUNT16 Compare and Capture Register 0 */

+#define REG_TC1_COUNT16_CC1        (*(RwReg16*)0x4200241AU) /**< \brief (TC1) COUNT16 Compare and Capture Register 1 */

+#define REG_TC1_COUNT32_CC0        (*(RwReg  *)0x42002418U) /**< \brief (TC1) COUNT32 Compare and Capture Register 0 */

+#define REG_TC1_COUNT32_CC1        (*(RwReg  *)0x4200241CU) /**< \brief (TC1) COUNT32 Compare and Capture Register 1 */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for TC1 peripheral ========== */

+#define TC1_CC8_NUM                 2

+#define TC1_CC16_NUM                2

+#define TC1_CC32_NUM                2

+#define TC1_DITHERING_EXT           0

+#define TC1_GCLK_ID                 19

+#define TC1_OW_NUM                  2

+#define TC1_PERIOD_EXT              0

+#define TC1_SHADOW_EXT              0

+

+#endif /* _SAMD20_TC1_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc2.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc2.h
new file mode 100644
index 0000000..addd7dd
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc2.h
@@ -0,0 +1,106 @@
+/**

+ * \file

+ *

+ * \brief Instance description for TC2

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_TC2_INSTANCE_

+#define _SAMD20_TC2_INSTANCE_

+

+/* ========== Register definition for TC2 peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_TC2_CTRLA              (0x42002800U) /**< \brief (TC2) Control A Register */

+#define REG_TC2_READREQ            (0x42002802U) /**< \brief (TC2) Read Request Register */

+#define REG_TC2_CTRLBCLR           (0x42002804U) /**< \brief (TC2) Control B Clear Register */

+#define REG_TC2_CTRLBSET           (0x42002805U) /**< \brief (TC2) Control B Set Register */

+#define REG_TC2_CTRLC              (0x42002806U) /**< \brief (TC2) Control C Register */

+#define REG_TC2_DBGCTRL            (0x42002808U) /**< \brief (TC2) Debug Register */

+#define REG_TC2_EVCTRL             (0x4200280AU) /**< \brief (TC2) Event Control Register */

+#define REG_TC2_INTENCLR           (0x4200280CU) /**< \brief (TC2) Interrupt Enable Clear Register */

+#define REG_TC2_INTENSET           (0x4200280DU) /**< \brief (TC2) Interrupt Enable Set Register */

+#define REG_TC2_INTFLAG            (0x4200280EU) /**< \brief (TC2) Interrupt Flag Status and Clear Register */

+#define REG_TC2_STATUS             (0x4200280FU) /**< \brief (TC2) Status Register */

+#define REG_TC2_COUNT8_COUNT       (0x42002810U) /**< \brief (TC2) COUNT8 Count Register */

+#define REG_TC2_COUNT16_COUNT      (0x42002810U) /**< \brief (TC2) COUNT16 Count Register */

+#define REG_TC2_COUNT32_COUNT      (0x42002810U) /**< \brief (TC2) COUNT32 Count Register */

+#define REG_TC2_COUNT8_PER         (0x42002814U) /**< \brief (TC2) COUNT8 Period Register */

+#define REG_TC2_COUNT32_PER        (0x42002814U) /**< \brief (TC2) COUNT32 Period Register */

+#define REG_TC2_COUNT8_CC0         (0x42002818U) /**< \brief (TC2) COUNT8 Compare and Capture Register 0 */

+#define REG_TC2_COUNT8_CC1         (0x42002819U) /**< \brief (TC2) COUNT8 Compare and Capture Register 1 */

+#define REG_TC2_COUNT16_CC0        (0x42002818U) /**< \brief (TC2) COUNT16 Compare and Capture Register 0 */

+#define REG_TC2_COUNT16_CC1        (0x4200281AU) /**< \brief (TC2) COUNT16 Compare and Capture Register 1 */

+#define REG_TC2_COUNT32_CC0        (0x42002818U) /**< \brief (TC2) COUNT32 Compare and Capture Register 0 */

+#define REG_TC2_COUNT32_CC1        (0x4200281CU) /**< \brief (TC2) COUNT32 Compare and Capture Register 1 */

+#else

+#define REG_TC2_CTRLA              (*(RwReg16*)0x42002800U) /**< \brief (TC2) Control A Register */

+#define REG_TC2_READREQ            (*(RwReg16*)0x42002802U) /**< \brief (TC2) Read Request Register */

+#define REG_TC2_CTRLBCLR           (*(RwReg8 *)0x42002804U) /**< \brief (TC2) Control B Clear Register */

+#define REG_TC2_CTRLBSET           (*(RwReg8 *)0x42002805U) /**< \brief (TC2) Control B Set Register */

+#define REG_TC2_CTRLC              (*(RwReg8 *)0x42002806U) /**< \brief (TC2) Control C Register */

+#define REG_TC2_DBGCTRL            (*(RwReg8 *)0x42002808U) /**< \brief (TC2) Debug Register */

+#define REG_TC2_EVCTRL             (*(RwReg16*)0x4200280AU) /**< \brief (TC2) Event Control Register */

+#define REG_TC2_INTENCLR           (*(RwReg8 *)0x4200280CU) /**< \brief (TC2) Interrupt Enable Clear Register */

+#define REG_TC2_INTENSET           (*(RwReg8 *)0x4200280DU) /**< \brief (TC2) Interrupt Enable Set Register */

+#define REG_TC2_INTFLAG            (*(RwReg8 *)0x4200280EU) /**< \brief (TC2) Interrupt Flag Status and Clear Register */

+#define REG_TC2_STATUS             (*(RoReg8 *)0x4200280FU) /**< \brief (TC2) Status Register */

+#define REG_TC2_COUNT8_COUNT       (*(RwReg8 *)0x42002810U) /**< \brief (TC2) COUNT8 Count Register */

+#define REG_TC2_COUNT16_COUNT      (*(RwReg16*)0x42002810U) /**< \brief (TC2) COUNT16 Count Register */

+#define REG_TC2_COUNT32_COUNT      (*(RwReg  *)0x42002810U) /**< \brief (TC2) COUNT32 Count Register */

+#define REG_TC2_COUNT8_PER         (*(RwReg8 *)0x42002814U) /**< \brief (TC2) COUNT8 Period Register */

+#define REG_TC2_COUNT32_PER        (*(RwReg  *)0x42002814U) /**< \brief (TC2) COUNT32 Period Register */

+#define REG_TC2_COUNT8_CC0         (*(RwReg8 *)0x42002818U) /**< \brief (TC2) COUNT8 Compare and Capture Register 0 */

+#define REG_TC2_COUNT8_CC1         (*(RwReg8 *)0x42002819U) /**< \brief (TC2) COUNT8 Compare and Capture Register 1 */

+#define REG_TC2_COUNT16_CC0        (*(RwReg16*)0x42002818U) /**< \brief (TC2) COUNT16 Compare and Capture Register 0 */

+#define REG_TC2_COUNT16_CC1        (*(RwReg16*)0x4200281AU) /**< \brief (TC2) COUNT16 Compare and Capture Register 1 */

+#define REG_TC2_COUNT32_CC0        (*(RwReg  *)0x42002818U) /**< \brief (TC2) COUNT32 Compare and Capture Register 0 */

+#define REG_TC2_COUNT32_CC1        (*(RwReg  *)0x4200281CU) /**< \brief (TC2) COUNT32 Compare and Capture Register 1 */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for TC2 peripheral ========== */

+#define TC2_CC8_NUM                 2

+#define TC2_CC16_NUM                2

+#define TC2_CC32_NUM                2

+#define TC2_DITHERING_EXT           0

+#define TC2_GCLK_ID                 20

+#define TC2_OW_NUM                  2

+#define TC2_PERIOD_EXT              0

+#define TC2_SHADOW_EXT              0

+

+#endif /* _SAMD20_TC2_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc3.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc3.h
new file mode 100644
index 0000000..2e5648c
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc3.h
@@ -0,0 +1,106 @@
+/**

+ * \file

+ *

+ * \brief Instance description for TC3

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_TC3_INSTANCE_

+#define _SAMD20_TC3_INSTANCE_

+

+/* ========== Register definition for TC3 peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_TC3_CTRLA              (0x42002C00U) /**< \brief (TC3) Control A Register */

+#define REG_TC3_READREQ            (0x42002C02U) /**< \brief (TC3) Read Request Register */

+#define REG_TC3_CTRLBCLR           (0x42002C04U) /**< \brief (TC3) Control B Clear Register */

+#define REG_TC3_CTRLBSET           (0x42002C05U) /**< \brief (TC3) Control B Set Register */

+#define REG_TC3_CTRLC              (0x42002C06U) /**< \brief (TC3) Control C Register */

+#define REG_TC3_DBGCTRL            (0x42002C08U) /**< \brief (TC3) Debug Register */

+#define REG_TC3_EVCTRL             (0x42002C0AU) /**< \brief (TC3) Event Control Register */

+#define REG_TC3_INTENCLR           (0x42002C0CU) /**< \brief (TC3) Interrupt Enable Clear Register */

+#define REG_TC3_INTENSET           (0x42002C0DU) /**< \brief (TC3) Interrupt Enable Set Register */

+#define REG_TC3_INTFLAG            (0x42002C0EU) /**< \brief (TC3) Interrupt Flag Status and Clear Register */

+#define REG_TC3_STATUS             (0x42002C0FU) /**< \brief (TC3) Status Register */

+#define REG_TC3_COUNT8_COUNT       (0x42002C10U) /**< \brief (TC3) COUNT8 Count Register */

+#define REG_TC3_COUNT16_COUNT      (0x42002C10U) /**< \brief (TC3) COUNT16 Count Register */

+#define REG_TC3_COUNT32_COUNT      (0x42002C10U) /**< \brief (TC3) COUNT32 Count Register */

+#define REG_TC3_COUNT8_PER         (0x42002C14U) /**< \brief (TC3) COUNT8 Period Register */

+#define REG_TC3_COUNT32_PER        (0x42002C14U) /**< \brief (TC3) COUNT32 Period Register */

+#define REG_TC3_COUNT8_CC0         (0x42002C18U) /**< \brief (TC3) COUNT8 Compare and Capture Register 0 */

+#define REG_TC3_COUNT8_CC1         (0x42002C19U) /**< \brief (TC3) COUNT8 Compare and Capture Register 1 */

+#define REG_TC3_COUNT16_CC0        (0x42002C18U) /**< \brief (TC3) COUNT16 Compare and Capture Register 0 */

+#define REG_TC3_COUNT16_CC1        (0x42002C1AU) /**< \brief (TC3) COUNT16 Compare and Capture Register 1 */

+#define REG_TC3_COUNT32_CC0        (0x42002C18U) /**< \brief (TC3) COUNT32 Compare and Capture Register 0 */

+#define REG_TC3_COUNT32_CC1        (0x42002C1CU) /**< \brief (TC3) COUNT32 Compare and Capture Register 1 */

+#else

+#define REG_TC3_CTRLA              (*(RwReg16*)0x42002C00U) /**< \brief (TC3) Control A Register */

+#define REG_TC3_READREQ            (*(RwReg16*)0x42002C02U) /**< \brief (TC3) Read Request Register */

+#define REG_TC3_CTRLBCLR           (*(RwReg8 *)0x42002C04U) /**< \brief (TC3) Control B Clear Register */

+#define REG_TC3_CTRLBSET           (*(RwReg8 *)0x42002C05U) /**< \brief (TC3) Control B Set Register */

+#define REG_TC3_CTRLC              (*(RwReg8 *)0x42002C06U) /**< \brief (TC3) Control C Register */

+#define REG_TC3_DBGCTRL            (*(RwReg8 *)0x42002C08U) /**< \brief (TC3) Debug Register */

+#define REG_TC3_EVCTRL             (*(RwReg16*)0x42002C0AU) /**< \brief (TC3) Event Control Register */

+#define REG_TC3_INTENCLR           (*(RwReg8 *)0x42002C0CU) /**< \brief (TC3) Interrupt Enable Clear Register */

+#define REG_TC3_INTENSET           (*(RwReg8 *)0x42002C0DU) /**< \brief (TC3) Interrupt Enable Set Register */

+#define REG_TC3_INTFLAG            (*(RwReg8 *)0x42002C0EU) /**< \brief (TC3) Interrupt Flag Status and Clear Register */

+#define REG_TC3_STATUS             (*(RoReg8 *)0x42002C0FU) /**< \brief (TC3) Status Register */

+#define REG_TC3_COUNT8_COUNT       (*(RwReg8 *)0x42002C10U) /**< \brief (TC3) COUNT8 Count Register */

+#define REG_TC3_COUNT16_COUNT      (*(RwReg16*)0x42002C10U) /**< \brief (TC3) COUNT16 Count Register */

+#define REG_TC3_COUNT32_COUNT      (*(RwReg  *)0x42002C10U) /**< \brief (TC3) COUNT32 Count Register */

+#define REG_TC3_COUNT8_PER         (*(RwReg8 *)0x42002C14U) /**< \brief (TC3) COUNT8 Period Register */

+#define REG_TC3_COUNT32_PER        (*(RwReg  *)0x42002C14U) /**< \brief (TC3) COUNT32 Period Register */

+#define REG_TC3_COUNT8_CC0         (*(RwReg8 *)0x42002C18U) /**< \brief (TC3) COUNT8 Compare and Capture Register 0 */

+#define REG_TC3_COUNT8_CC1         (*(RwReg8 *)0x42002C19U) /**< \brief (TC3) COUNT8 Compare and Capture Register 1 */

+#define REG_TC3_COUNT16_CC0        (*(RwReg16*)0x42002C18U) /**< \brief (TC3) COUNT16 Compare and Capture Register 0 */

+#define REG_TC3_COUNT16_CC1        (*(RwReg16*)0x42002C1AU) /**< \brief (TC3) COUNT16 Compare and Capture Register 1 */

+#define REG_TC3_COUNT32_CC0        (*(RwReg  *)0x42002C18U) /**< \brief (TC3) COUNT32 Compare and Capture Register 0 */

+#define REG_TC3_COUNT32_CC1        (*(RwReg  *)0x42002C1CU) /**< \brief (TC3) COUNT32 Compare and Capture Register 1 */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for TC3 peripheral ========== */

+#define TC3_CC8_NUM                 2

+#define TC3_CC16_NUM                2

+#define TC3_CC32_NUM                2

+#define TC3_DITHERING_EXT           0

+#define TC3_GCLK_ID                 20

+#define TC3_OW_NUM                  2

+#define TC3_PERIOD_EXT              0

+#define TC3_SHADOW_EXT              0

+

+#endif /* _SAMD20_TC3_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc4.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc4.h
new file mode 100644
index 0000000..a0cb706
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc4.h
@@ -0,0 +1,106 @@
+/**

+ * \file

+ *

+ * \brief Instance description for TC4

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_TC4_INSTANCE_

+#define _SAMD20_TC4_INSTANCE_

+

+/* ========== Register definition for TC4 peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_TC4_CTRLA              (0x42003000U) /**< \brief (TC4) Control A Register */

+#define REG_TC4_READREQ            (0x42003002U) /**< \brief (TC4) Read Request Register */

+#define REG_TC4_CTRLBCLR           (0x42003004U) /**< \brief (TC4) Control B Clear Register */

+#define REG_TC4_CTRLBSET           (0x42003005U) /**< \brief (TC4) Control B Set Register */

+#define REG_TC4_CTRLC              (0x42003006U) /**< \brief (TC4) Control C Register */

+#define REG_TC4_DBGCTRL            (0x42003008U) /**< \brief (TC4) Debug Register */

+#define REG_TC4_EVCTRL             (0x4200300AU) /**< \brief (TC4) Event Control Register */

+#define REG_TC4_INTENCLR           (0x4200300CU) /**< \brief (TC4) Interrupt Enable Clear Register */

+#define REG_TC4_INTENSET           (0x4200300DU) /**< \brief (TC4) Interrupt Enable Set Register */

+#define REG_TC4_INTFLAG            (0x4200300EU) /**< \brief (TC4) Interrupt Flag Status and Clear Register */

+#define REG_TC4_STATUS             (0x4200300FU) /**< \brief (TC4) Status Register */

+#define REG_TC4_COUNT8_COUNT       (0x42003010U) /**< \brief (TC4) COUNT8 Count Register */

+#define REG_TC4_COUNT16_COUNT      (0x42003010U) /**< \brief (TC4) COUNT16 Count Register */

+#define REG_TC4_COUNT32_COUNT      (0x42003010U) /**< \brief (TC4) COUNT32 Count Register */

+#define REG_TC4_COUNT8_PER         (0x42003014U) /**< \brief (TC4) COUNT8 Period Register */

+#define REG_TC4_COUNT32_PER        (0x42003014U) /**< \brief (TC4) COUNT32 Period Register */

+#define REG_TC4_COUNT8_CC0         (0x42003018U) /**< \brief (TC4) COUNT8 Compare and Capture Register 0 */

+#define REG_TC4_COUNT8_CC1         (0x42003019U) /**< \brief (TC4) COUNT8 Compare and Capture Register 1 */

+#define REG_TC4_COUNT16_CC0        (0x42003018U) /**< \brief (TC4) COUNT16 Compare and Capture Register 0 */

+#define REG_TC4_COUNT16_CC1        (0x4200301AU) /**< \brief (TC4) COUNT16 Compare and Capture Register 1 */

+#define REG_TC4_COUNT32_CC0        (0x42003018U) /**< \brief (TC4) COUNT32 Compare and Capture Register 0 */

+#define REG_TC4_COUNT32_CC1        (0x4200301CU) /**< \brief (TC4) COUNT32 Compare and Capture Register 1 */

+#else

+#define REG_TC4_CTRLA              (*(RwReg16*)0x42003000U) /**< \brief (TC4) Control A Register */

+#define REG_TC4_READREQ            (*(RwReg16*)0x42003002U) /**< \brief (TC4) Read Request Register */

+#define REG_TC4_CTRLBCLR           (*(RwReg8 *)0x42003004U) /**< \brief (TC4) Control B Clear Register */

+#define REG_TC4_CTRLBSET           (*(RwReg8 *)0x42003005U) /**< \brief (TC4) Control B Set Register */

+#define REG_TC4_CTRLC              (*(RwReg8 *)0x42003006U) /**< \brief (TC4) Control C Register */

+#define REG_TC4_DBGCTRL            (*(RwReg8 *)0x42003008U) /**< \brief (TC4) Debug Register */

+#define REG_TC4_EVCTRL             (*(RwReg16*)0x4200300AU) /**< \brief (TC4) Event Control Register */

+#define REG_TC4_INTENCLR           (*(RwReg8 *)0x4200300CU) /**< \brief (TC4) Interrupt Enable Clear Register */

+#define REG_TC4_INTENSET           (*(RwReg8 *)0x4200300DU) /**< \brief (TC4) Interrupt Enable Set Register */

+#define REG_TC4_INTFLAG            (*(RwReg8 *)0x4200300EU) /**< \brief (TC4) Interrupt Flag Status and Clear Register */

+#define REG_TC4_STATUS             (*(RoReg8 *)0x4200300FU) /**< \brief (TC4) Status Register */

+#define REG_TC4_COUNT8_COUNT       (*(RwReg8 *)0x42003010U) /**< \brief (TC4) COUNT8 Count Register */

+#define REG_TC4_COUNT16_COUNT      (*(RwReg16*)0x42003010U) /**< \brief (TC4) COUNT16 Count Register */

+#define REG_TC4_COUNT32_COUNT      (*(RwReg  *)0x42003010U) /**< \brief (TC4) COUNT32 Count Register */

+#define REG_TC4_COUNT8_PER         (*(RwReg8 *)0x42003014U) /**< \brief (TC4) COUNT8 Period Register */

+#define REG_TC4_COUNT32_PER        (*(RwReg  *)0x42003014U) /**< \brief (TC4) COUNT32 Period Register */

+#define REG_TC4_COUNT8_CC0         (*(RwReg8 *)0x42003018U) /**< \brief (TC4) COUNT8 Compare and Capture Register 0 */

+#define REG_TC4_COUNT8_CC1         (*(RwReg8 *)0x42003019U) /**< \brief (TC4) COUNT8 Compare and Capture Register 1 */

+#define REG_TC4_COUNT16_CC0        (*(RwReg16*)0x42003018U) /**< \brief (TC4) COUNT16 Compare and Capture Register 0 */

+#define REG_TC4_COUNT16_CC1        (*(RwReg16*)0x4200301AU) /**< \brief (TC4) COUNT16 Compare and Capture Register 1 */

+#define REG_TC4_COUNT32_CC0        (*(RwReg  *)0x42003018U) /**< \brief (TC4) COUNT32 Compare and Capture Register 0 */

+#define REG_TC4_COUNT32_CC1        (*(RwReg  *)0x4200301CU) /**< \brief (TC4) COUNT32 Compare and Capture Register 1 */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for TC4 peripheral ========== */

+#define TC4_CC8_NUM                 2

+#define TC4_CC16_NUM                2

+#define TC4_CC32_NUM                2

+#define TC4_DITHERING_EXT           0

+#define TC4_GCLK_ID                 21

+#define TC4_OW_NUM                  2

+#define TC4_PERIOD_EXT              0

+#define TC4_SHADOW_EXT              0

+

+#endif /* _SAMD20_TC4_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc5.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc5.h
new file mode 100644
index 0000000..c8cb90b
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc5.h
@@ -0,0 +1,106 @@
+/**

+ * \file

+ *

+ * \brief Instance description for TC5

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_TC5_INSTANCE_

+#define _SAMD20_TC5_INSTANCE_

+

+/* ========== Register definition for TC5 peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_TC5_CTRLA              (0x42003400U) /**< \brief (TC5) Control A Register */

+#define REG_TC5_READREQ            (0x42003402U) /**< \brief (TC5) Read Request Register */

+#define REG_TC5_CTRLBCLR           (0x42003404U) /**< \brief (TC5) Control B Clear Register */

+#define REG_TC5_CTRLBSET           (0x42003405U) /**< \brief (TC5) Control B Set Register */

+#define REG_TC5_CTRLC              (0x42003406U) /**< \brief (TC5) Control C Register */

+#define REG_TC5_DBGCTRL            (0x42003408U) /**< \brief (TC5) Debug Register */

+#define REG_TC5_EVCTRL             (0x4200340AU) /**< \brief (TC5) Event Control Register */

+#define REG_TC5_INTENCLR           (0x4200340CU) /**< \brief (TC5) Interrupt Enable Clear Register */

+#define REG_TC5_INTENSET           (0x4200340DU) /**< \brief (TC5) Interrupt Enable Set Register */

+#define REG_TC5_INTFLAG            (0x4200340EU) /**< \brief (TC5) Interrupt Flag Status and Clear Register */

+#define REG_TC5_STATUS             (0x4200340FU) /**< \brief (TC5) Status Register */

+#define REG_TC5_COUNT8_COUNT       (0x42003410U) /**< \brief (TC5) COUNT8 Count Register */

+#define REG_TC5_COUNT16_COUNT      (0x42003410U) /**< \brief (TC5) COUNT16 Count Register */

+#define REG_TC5_COUNT32_COUNT      (0x42003410U) /**< \brief (TC5) COUNT32 Count Register */

+#define REG_TC5_COUNT8_PER         (0x42003414U) /**< \brief (TC5) COUNT8 Period Register */

+#define REG_TC5_COUNT32_PER        (0x42003414U) /**< \brief (TC5) COUNT32 Period Register */

+#define REG_TC5_COUNT8_CC0         (0x42003418U) /**< \brief (TC5) COUNT8 Compare and Capture Register 0 */

+#define REG_TC5_COUNT8_CC1         (0x42003419U) /**< \brief (TC5) COUNT8 Compare and Capture Register 1 */

+#define REG_TC5_COUNT16_CC0        (0x42003418U) /**< \brief (TC5) COUNT16 Compare and Capture Register 0 */

+#define REG_TC5_COUNT16_CC1        (0x4200341AU) /**< \brief (TC5) COUNT16 Compare and Capture Register 1 */

+#define REG_TC5_COUNT32_CC0        (0x42003418U) /**< \brief (TC5) COUNT32 Compare and Capture Register 0 */

+#define REG_TC5_COUNT32_CC1        (0x4200341CU) /**< \brief (TC5) COUNT32 Compare and Capture Register 1 */

+#else

+#define REG_TC5_CTRLA              (*(RwReg16*)0x42003400U) /**< \brief (TC5) Control A Register */

+#define REG_TC5_READREQ            (*(RwReg16*)0x42003402U) /**< \brief (TC5) Read Request Register */

+#define REG_TC5_CTRLBCLR           (*(RwReg8 *)0x42003404U) /**< \brief (TC5) Control B Clear Register */

+#define REG_TC5_CTRLBSET           (*(RwReg8 *)0x42003405U) /**< \brief (TC5) Control B Set Register */

+#define REG_TC5_CTRLC              (*(RwReg8 *)0x42003406U) /**< \brief (TC5) Control C Register */

+#define REG_TC5_DBGCTRL            (*(RwReg8 *)0x42003408U) /**< \brief (TC5) Debug Register */

+#define REG_TC5_EVCTRL             (*(RwReg16*)0x4200340AU) /**< \brief (TC5) Event Control Register */

+#define REG_TC5_INTENCLR           (*(RwReg8 *)0x4200340CU) /**< \brief (TC5) Interrupt Enable Clear Register */

+#define REG_TC5_INTENSET           (*(RwReg8 *)0x4200340DU) /**< \brief (TC5) Interrupt Enable Set Register */

+#define REG_TC5_INTFLAG            (*(RwReg8 *)0x4200340EU) /**< \brief (TC5) Interrupt Flag Status and Clear Register */

+#define REG_TC5_STATUS             (*(RoReg8 *)0x4200340FU) /**< \brief (TC5) Status Register */

+#define REG_TC5_COUNT8_COUNT       (*(RwReg8 *)0x42003410U) /**< \brief (TC5) COUNT8 Count Register */

+#define REG_TC5_COUNT16_COUNT      (*(RwReg16*)0x42003410U) /**< \brief (TC5) COUNT16 Count Register */

+#define REG_TC5_COUNT32_COUNT      (*(RwReg  *)0x42003410U) /**< \brief (TC5) COUNT32 Count Register */

+#define REG_TC5_COUNT8_PER         (*(RwReg8 *)0x42003414U) /**< \brief (TC5) COUNT8 Period Register */

+#define REG_TC5_COUNT32_PER        (*(RwReg  *)0x42003414U) /**< \brief (TC5) COUNT32 Period Register */

+#define REG_TC5_COUNT8_CC0         (*(RwReg8 *)0x42003418U) /**< \brief (TC5) COUNT8 Compare and Capture Register 0 */

+#define REG_TC5_COUNT8_CC1         (*(RwReg8 *)0x42003419U) /**< \brief (TC5) COUNT8 Compare and Capture Register 1 */

+#define REG_TC5_COUNT16_CC0        (*(RwReg16*)0x42003418U) /**< \brief (TC5) COUNT16 Compare and Capture Register 0 */

+#define REG_TC5_COUNT16_CC1        (*(RwReg16*)0x4200341AU) /**< \brief (TC5) COUNT16 Compare and Capture Register 1 */

+#define REG_TC5_COUNT32_CC0        (*(RwReg  *)0x42003418U) /**< \brief (TC5) COUNT32 Compare and Capture Register 0 */

+#define REG_TC5_COUNT32_CC1        (*(RwReg  *)0x4200341CU) /**< \brief (TC5) COUNT32 Compare and Capture Register 1 */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for TC5 peripheral ========== */

+#define TC5_CC8_NUM                 2

+#define TC5_CC16_NUM                2

+#define TC5_CC32_NUM                2

+#define TC5_DITHERING_EXT           0

+#define TC5_GCLK_ID                 21

+#define TC5_OW_NUM                  2

+#define TC5_PERIOD_EXT              0

+#define TC5_SHADOW_EXT              0

+

+#endif /* _SAMD20_TC5_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc6.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc6.h
new file mode 100644
index 0000000..c4ec54e
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc6.h
@@ -0,0 +1,106 @@
+/**

+ * \file

+ *

+ * \brief Instance description for TC6

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_TC6_INSTANCE_

+#define _SAMD20_TC6_INSTANCE_

+

+/* ========== Register definition for TC6 peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_TC6_CTRLA              (0x42003800U) /**< \brief (TC6) Control A Register */

+#define REG_TC6_READREQ            (0x42003802U) /**< \brief (TC6) Read Request Register */

+#define REG_TC6_CTRLBCLR           (0x42003804U) /**< \brief (TC6) Control B Clear Register */

+#define REG_TC6_CTRLBSET           (0x42003805U) /**< \brief (TC6) Control B Set Register */

+#define REG_TC6_CTRLC              (0x42003806U) /**< \brief (TC6) Control C Register */

+#define REG_TC6_DBGCTRL            (0x42003808U) /**< \brief (TC6) Debug Register */

+#define REG_TC6_EVCTRL             (0x4200380AU) /**< \brief (TC6) Event Control Register */

+#define REG_TC6_INTENCLR           (0x4200380CU) /**< \brief (TC6) Interrupt Enable Clear Register */

+#define REG_TC6_INTENSET           (0x4200380DU) /**< \brief (TC6) Interrupt Enable Set Register */

+#define REG_TC6_INTFLAG            (0x4200380EU) /**< \brief (TC6) Interrupt Flag Status and Clear Register */

+#define REG_TC6_STATUS             (0x4200380FU) /**< \brief (TC6) Status Register */

+#define REG_TC6_COUNT8_COUNT       (0x42003810U) /**< \brief (TC6) COUNT8 Count Register */

+#define REG_TC6_COUNT16_COUNT      (0x42003810U) /**< \brief (TC6) COUNT16 Count Register */

+#define REG_TC6_COUNT32_COUNT      (0x42003810U) /**< \brief (TC6) COUNT32 Count Register */

+#define REG_TC6_COUNT8_PER         (0x42003814U) /**< \brief (TC6) COUNT8 Period Register */

+#define REG_TC6_COUNT32_PER        (0x42003814U) /**< \brief (TC6) COUNT32 Period Register */

+#define REG_TC6_COUNT8_CC0         (0x42003818U) /**< \brief (TC6) COUNT8 Compare and Capture Register 0 */

+#define REG_TC6_COUNT8_CC1         (0x42003819U) /**< \brief (TC6) COUNT8 Compare and Capture Register 1 */

+#define REG_TC6_COUNT16_CC0        (0x42003818U) /**< \brief (TC6) COUNT16 Compare and Capture Register 0 */

+#define REG_TC6_COUNT16_CC1        (0x4200381AU) /**< \brief (TC6) COUNT16 Compare and Capture Register 1 */

+#define REG_TC6_COUNT32_CC0        (0x42003818U) /**< \brief (TC6) COUNT32 Compare and Capture Register 0 */

+#define REG_TC6_COUNT32_CC1        (0x4200381CU) /**< \brief (TC6) COUNT32 Compare and Capture Register 1 */

+#else

+#define REG_TC6_CTRLA              (*(RwReg16*)0x42003800U) /**< \brief (TC6) Control A Register */

+#define REG_TC6_READREQ            (*(RwReg16*)0x42003802U) /**< \brief (TC6) Read Request Register */

+#define REG_TC6_CTRLBCLR           (*(RwReg8 *)0x42003804U) /**< \brief (TC6) Control B Clear Register */

+#define REG_TC6_CTRLBSET           (*(RwReg8 *)0x42003805U) /**< \brief (TC6) Control B Set Register */

+#define REG_TC6_CTRLC              (*(RwReg8 *)0x42003806U) /**< \brief (TC6) Control C Register */

+#define REG_TC6_DBGCTRL            (*(RwReg8 *)0x42003808U) /**< \brief (TC6) Debug Register */

+#define REG_TC6_EVCTRL             (*(RwReg16*)0x4200380AU) /**< \brief (TC6) Event Control Register */

+#define REG_TC6_INTENCLR           (*(RwReg8 *)0x4200380CU) /**< \brief (TC6) Interrupt Enable Clear Register */

+#define REG_TC6_INTENSET           (*(RwReg8 *)0x4200380DU) /**< \brief (TC6) Interrupt Enable Set Register */

+#define REG_TC6_INTFLAG            (*(RwReg8 *)0x4200380EU) /**< \brief (TC6) Interrupt Flag Status and Clear Register */

+#define REG_TC6_STATUS             (*(RoReg8 *)0x4200380FU) /**< \brief (TC6) Status Register */

+#define REG_TC6_COUNT8_COUNT       (*(RwReg8 *)0x42003810U) /**< \brief (TC6) COUNT8 Count Register */

+#define REG_TC6_COUNT16_COUNT      (*(RwReg16*)0x42003810U) /**< \brief (TC6) COUNT16 Count Register */

+#define REG_TC6_COUNT32_COUNT      (*(RwReg  *)0x42003810U) /**< \brief (TC6) COUNT32 Count Register */

+#define REG_TC6_COUNT8_PER         (*(RwReg8 *)0x42003814U) /**< \brief (TC6) COUNT8 Period Register */

+#define REG_TC6_COUNT32_PER        (*(RwReg  *)0x42003814U) /**< \brief (TC6) COUNT32 Period Register */

+#define REG_TC6_COUNT8_CC0         (*(RwReg8 *)0x42003818U) /**< \brief (TC6) COUNT8 Compare and Capture Register 0 */

+#define REG_TC6_COUNT8_CC1         (*(RwReg8 *)0x42003819U) /**< \brief (TC6) COUNT8 Compare and Capture Register 1 */

+#define REG_TC6_COUNT16_CC0        (*(RwReg16*)0x42003818U) /**< \brief (TC6) COUNT16 Compare and Capture Register 0 */

+#define REG_TC6_COUNT16_CC1        (*(RwReg16*)0x4200381AU) /**< \brief (TC6) COUNT16 Compare and Capture Register 1 */

+#define REG_TC6_COUNT32_CC0        (*(RwReg  *)0x42003818U) /**< \brief (TC6) COUNT32 Compare and Capture Register 0 */

+#define REG_TC6_COUNT32_CC1        (*(RwReg  *)0x4200381CU) /**< \brief (TC6) COUNT32 Compare and Capture Register 1 */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for TC6 peripheral ========== */

+#define TC6_CC8_NUM                 2

+#define TC6_CC16_NUM                2

+#define TC6_CC32_NUM                2

+#define TC6_DITHERING_EXT           0

+#define TC6_GCLK_ID                 22

+#define TC6_OW_NUM                  2

+#define TC6_PERIOD_EXT              0

+#define TC6_SHADOW_EXT              0

+

+#endif /* _SAMD20_TC6_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc7.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc7.h
new file mode 100644
index 0000000..52fe4e6
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_tc7.h
@@ -0,0 +1,106 @@
+/**

+ * \file

+ *

+ * \brief Instance description for TC7

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_TC7_INSTANCE_

+#define _SAMD20_TC7_INSTANCE_

+

+/* ========== Register definition for TC7 peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_TC7_CTRLA              (0x42003C00U) /**< \brief (TC7) Control A Register */

+#define REG_TC7_READREQ            (0x42003C02U) /**< \brief (TC7) Read Request Register */

+#define REG_TC7_CTRLBCLR           (0x42003C04U) /**< \brief (TC7) Control B Clear Register */

+#define REG_TC7_CTRLBSET           (0x42003C05U) /**< \brief (TC7) Control B Set Register */

+#define REG_TC7_CTRLC              (0x42003C06U) /**< \brief (TC7) Control C Register */

+#define REG_TC7_DBGCTRL            (0x42003C08U) /**< \brief (TC7) Debug Register */

+#define REG_TC7_EVCTRL             (0x42003C0AU) /**< \brief (TC7) Event Control Register */

+#define REG_TC7_INTENCLR           (0x42003C0CU) /**< \brief (TC7) Interrupt Enable Clear Register */

+#define REG_TC7_INTENSET           (0x42003C0DU) /**< \brief (TC7) Interrupt Enable Set Register */

+#define REG_TC7_INTFLAG            (0x42003C0EU) /**< \brief (TC7) Interrupt Flag Status and Clear Register */

+#define REG_TC7_STATUS             (0x42003C0FU) /**< \brief (TC7) Status Register */

+#define REG_TC7_COUNT8_COUNT       (0x42003C10U) /**< \brief (TC7) COUNT8 Count Register */

+#define REG_TC7_COUNT16_COUNT      (0x42003C10U) /**< \brief (TC7) COUNT16 Count Register */

+#define REG_TC7_COUNT32_COUNT      (0x42003C10U) /**< \brief (TC7) COUNT32 Count Register */

+#define REG_TC7_COUNT8_PER         (0x42003C14U) /**< \brief (TC7) COUNT8 Period Register */

+#define REG_TC7_COUNT32_PER        (0x42003C14U) /**< \brief (TC7) COUNT32 Period Register */

+#define REG_TC7_COUNT8_CC0         (0x42003C18U) /**< \brief (TC7) COUNT8 Compare and Capture Register 0 */

+#define REG_TC7_COUNT8_CC1         (0x42003C19U) /**< \brief (TC7) COUNT8 Compare and Capture Register 1 */

+#define REG_TC7_COUNT16_CC0        (0x42003C18U) /**< \brief (TC7) COUNT16 Compare and Capture Register 0 */

+#define REG_TC7_COUNT16_CC1        (0x42003C1AU) /**< \brief (TC7) COUNT16 Compare and Capture Register 1 */

+#define REG_TC7_COUNT32_CC0        (0x42003C18U) /**< \brief (TC7) COUNT32 Compare and Capture Register 0 */

+#define REG_TC7_COUNT32_CC1        (0x42003C1CU) /**< \brief (TC7) COUNT32 Compare and Capture Register 1 */

+#else

+#define REG_TC7_CTRLA              (*(RwReg16*)0x42003C00U) /**< \brief (TC7) Control A Register */

+#define REG_TC7_READREQ            (*(RwReg16*)0x42003C02U) /**< \brief (TC7) Read Request Register */

+#define REG_TC7_CTRLBCLR           (*(RwReg8 *)0x42003C04U) /**< \brief (TC7) Control B Clear Register */

+#define REG_TC7_CTRLBSET           (*(RwReg8 *)0x42003C05U) /**< \brief (TC7) Control B Set Register */

+#define REG_TC7_CTRLC              (*(RwReg8 *)0x42003C06U) /**< \brief (TC7) Control C Register */

+#define REG_TC7_DBGCTRL            (*(RwReg8 *)0x42003C08U) /**< \brief (TC7) Debug Register */

+#define REG_TC7_EVCTRL             (*(RwReg16*)0x42003C0AU) /**< \brief (TC7) Event Control Register */

+#define REG_TC7_INTENCLR           (*(RwReg8 *)0x42003C0CU) /**< \brief (TC7) Interrupt Enable Clear Register */

+#define REG_TC7_INTENSET           (*(RwReg8 *)0x42003C0DU) /**< \brief (TC7) Interrupt Enable Set Register */

+#define REG_TC7_INTFLAG            (*(RwReg8 *)0x42003C0EU) /**< \brief (TC7) Interrupt Flag Status and Clear Register */

+#define REG_TC7_STATUS             (*(RoReg8 *)0x42003C0FU) /**< \brief (TC7) Status Register */

+#define REG_TC7_COUNT8_COUNT       (*(RwReg8 *)0x42003C10U) /**< \brief (TC7) COUNT8 Count Register */

+#define REG_TC7_COUNT16_COUNT      (*(RwReg16*)0x42003C10U) /**< \brief (TC7) COUNT16 Count Register */

+#define REG_TC7_COUNT32_COUNT      (*(RwReg  *)0x42003C10U) /**< \brief (TC7) COUNT32 Count Register */

+#define REG_TC7_COUNT8_PER         (*(RwReg8 *)0x42003C14U) /**< \brief (TC7) COUNT8 Period Register */

+#define REG_TC7_COUNT32_PER        (*(RwReg  *)0x42003C14U) /**< \brief (TC7) COUNT32 Period Register */

+#define REG_TC7_COUNT8_CC0         (*(RwReg8 *)0x42003C18U) /**< \brief (TC7) COUNT8 Compare and Capture Register 0 */

+#define REG_TC7_COUNT8_CC1         (*(RwReg8 *)0x42003C19U) /**< \brief (TC7) COUNT8 Compare and Capture Register 1 */

+#define REG_TC7_COUNT16_CC0        (*(RwReg16*)0x42003C18U) /**< \brief (TC7) COUNT16 Compare and Capture Register 0 */

+#define REG_TC7_COUNT16_CC1        (*(RwReg16*)0x42003C1AU) /**< \brief (TC7) COUNT16 Compare and Capture Register 1 */

+#define REG_TC7_COUNT32_CC0        (*(RwReg  *)0x42003C18U) /**< \brief (TC7) COUNT32 Compare and Capture Register 0 */

+#define REG_TC7_COUNT32_CC1        (*(RwReg  *)0x42003C1CU) /**< \brief (TC7) COUNT32 Compare and Capture Register 1 */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for TC7 peripheral ========== */

+#define TC7_CC8_NUM                 2

+#define TC7_CC16_NUM                2

+#define TC7_CC32_NUM                2

+#define TC7_DITHERING_EXT           0

+#define TC7_GCLK_ID                 22

+#define TC7_OW_NUM                  2

+#define TC7_PERIOD_EXT              0

+#define TC7_SHADOW_EXT              0

+

+#endif /* _SAMD20_TC7_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_wdt.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_wdt.h
new file mode 100644
index 0000000..9dca4c8
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/instance/instance_wdt.h
@@ -0,0 +1,71 @@
+/**

+ * \file

+ *

+ * \brief Instance description for WDT

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_WDT_INSTANCE_

+#define _SAMD20_WDT_INSTANCE_

+

+/* ========== Register definition for WDT peripheral ========== */

+#if (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#define REG_WDT_CTRL               (0x40001000U) /**< \brief (WDT) Control Register */

+#define REG_WDT_CONFIG             (0x40001001U) /**< \brief (WDT) Configuration Register */

+#define REG_WDT_EWCTRL             (0x40001002U) /**< \brief (WDT) Early Warning Control Register */

+#define REG_WDT_INTENCLR           (0x40001004U) /**< \brief (WDT) Interrupt Enable Clear Register */

+#define REG_WDT_INTENSET           (0x40001005U) /**< \brief (WDT) Interrupt Enable Set Register */

+#define REG_WDT_INTFLAG            (0x40001006U) /**< \brief (WDT) Interrupt Flag Status and Clear Register */

+#define REG_WDT_STATUS             (0x40001007U) /**< \brief (WDT) Status Register */

+#define REG_WDT_CLEAR              (0x40001008U) /**< \brief (WDT) Clear Register */

+#else

+#define REG_WDT_CTRL               (*(RwReg8 *)0x40001000U) /**< \brief (WDT) Control Register */

+#define REG_WDT_CONFIG             (*(RwReg8 *)0x40001001U) /**< \brief (WDT) Configuration Register */

+#define REG_WDT_EWCTRL             (*(RwReg8 *)0x40001002U) /**< \brief (WDT) Early Warning Control Register */

+#define REG_WDT_INTENCLR           (*(RwReg8 *)0x40001004U) /**< \brief (WDT) Interrupt Enable Clear Register */

+#define REG_WDT_INTENSET           (*(RwReg8 *)0x40001005U) /**< \brief (WDT) Interrupt Enable Set Register */

+#define REG_WDT_INTFLAG            (*(RwReg8 *)0x40001006U) /**< \brief (WDT) Interrupt Flag Status and Clear Register */

+#define REG_WDT_STATUS             (*(RoReg8 *)0x40001007U) /**< \brief (WDT) Status Register */

+#define REG_WDT_CLEAR              (*(WoReg8 *)0x40001008U) /**< \brief (WDT) Clear Register */

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+

+/* ========== Instance parameters for WDT peripheral ========== */

+#define WDT_GCLK_ID                 1

+

+#endif /* _SAMD20_WDT_INSTANCE_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20e14.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20e14.h
new file mode 100644
index 0000000..5b079e1
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20e14.h
@@ -0,0 +1,552 @@
+/**

+ * \file

+ *

+ * \brief Peripheral I/O description for SAMD20E14

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20E14_PIO_

+#define _SAMD20E14_PIO_

+

+#define PIN_PA00                           0  /**< \brief Pin Number for PA00 */

+#define PORT_PA00                  (1u <<  0) /**< \brief PORT Mask  for PA00 */

+#define PIN_PA01                           1  /**< \brief Pin Number for PA01 */

+#define PORT_PA01                  (1u <<  1) /**< \brief PORT Mask  for PA01 */

+#define PIN_PA02                           2  /**< \brief Pin Number for PA02 */

+#define PORT_PA02                  (1u <<  2) /**< \brief PORT Mask  for PA02 */

+#define PIN_PA03                           3  /**< \brief Pin Number for PA03 */

+#define PORT_PA03                  (1u <<  3) /**< \brief PORT Mask  for PA03 */

+#define PIN_PA04                           4  /**< \brief Pin Number for PA04 */

+#define PORT_PA04                  (1u <<  4) /**< \brief PORT Mask  for PA04 */

+#define PIN_PA05                           5  /**< \brief Pin Number for PA05 */

+#define PORT_PA05                  (1u <<  5) /**< \brief PORT Mask  for PA05 */

+#define PIN_PA06                           6  /**< \brief Pin Number for PA06 */

+#define PORT_PA06                  (1u <<  6) /**< \brief PORT Mask  for PA06 */

+#define PIN_PA07                           7  /**< \brief Pin Number for PA07 */

+#define PORT_PA07                  (1u <<  7) /**< \brief PORT Mask  for PA07 */

+#define PIN_PA08                           8  /**< \brief Pin Number for PA08 */

+#define PORT_PA08                  (1u <<  8) /**< \brief PORT Mask  for PA08 */

+#define PIN_PA09                           9  /**< \brief Pin Number for PA09 */

+#define PORT_PA09                  (1u <<  9) /**< \brief PORT Mask  for PA09 */

+#define PIN_PA10                          10  /**< \brief Pin Number for PA10 */

+#define PORT_PA10                  (1u << 10) /**< \brief PORT Mask  for PA10 */

+#define PIN_PA11                          11  /**< \brief Pin Number for PA11 */

+#define PORT_PA11                  (1u << 11) /**< \brief PORT Mask  for PA11 */

+#define PIN_PA14                          14  /**< \brief Pin Number for PA14 */

+#define PORT_PA14                  (1u << 14) /**< \brief PORT Mask  for PA14 */

+#define PIN_PA15                          15  /**< \brief Pin Number for PA15 */

+#define PORT_PA15                  (1u << 15) /**< \brief PORT Mask  for PA15 */

+#define PIN_PA16                          16  /**< \brief Pin Number for PA16 */

+#define PORT_PA16                  (1u << 16) /**< \brief PORT Mask  for PA16 */

+#define PIN_PA17                          17  /**< \brief Pin Number for PA17 */

+#define PORT_PA17                  (1u << 17) /**< \brief PORT Mask  for PA17 */

+#define PIN_PA18                          18  /**< \brief Pin Number for PA18 */

+#define PORT_PA18                  (1u << 18) /**< \brief PORT Mask  for PA18 */

+#define PIN_PA19                          19  /**< \brief Pin Number for PA19 */

+#define PORT_PA19                  (1u << 19) /**< \brief PORT Mask  for PA19 */

+#define PIN_PA22                          22  /**< \brief Pin Number for PA22 */

+#define PORT_PA22                  (1u << 22) /**< \brief PORT Mask  for PA22 */

+#define PIN_PA23                          23  /**< \brief Pin Number for PA23 */

+#define PORT_PA23                  (1u << 23) /**< \brief PORT Mask  for PA23 */

+#define PIN_PA24                          24  /**< \brief Pin Number for PA24 */

+#define PORT_PA24                  (1u << 24) /**< \brief PORT Mask  for PA24 */

+#define PIN_PA25                          25  /**< \brief Pin Number for PA25 */

+#define PORT_PA25                  (1u << 25) /**< \brief PORT Mask  for PA25 */

+#define PIN_PA27                          27  /**< \brief Pin Number for PA27 */

+#define PORT_PA27                  (1u << 27) /**< \brief PORT Mask  for PA27 */

+#define PIN_PA28                          28  /**< \brief Pin Number for PA28 */

+#define PORT_PA28                  (1u << 28) /**< \brief PORT Mask  for PA28 */

+#define PIN_PA30                          30  /**< \brief Pin Number for PA30 */

+#define PORT_PA30                  (1u << 30) /**< \brief PORT Mask  for PA30 */

+#define PIN_PA31                          31  /**< \brief Pin Number for PA31 */

+#define PORT_PA31                  (1u << 31) /**< \brief PORT Mask  for PA31 */

+/* ========== PORT definition for CORE peripheral ========== */

+#define PIN_PA30G_CORE_SWCLK              30  /**< \brief CORE signal: SWCLK on PA30 mux G */

+#define MUX_PA30G_CORE_SWCLK               6

+#define PINMUX_PA30G_CORE_SWCLK    ((PIN_PA30G_CORE_SWCLK << 16) | MUX_PA30G_CORE_SWCLK)

+#define PORT_PA30G_CORE_SWCLK      (1u << 30)

+/* ========== PORT definition for GCLK peripheral ========== */

+#define PIN_PA14H_GCLK_IO0                14  /**< \brief GCLK signal: IO0 on PA14 mux H */

+#define MUX_PA14H_GCLK_IO0                 7

+#define PINMUX_PA14H_GCLK_IO0      ((PIN_PA14H_GCLK_IO0 << 16) | MUX_PA14H_GCLK_IO0)

+#define PORT_PA14H_GCLK_IO0        (1u << 14)

+#define PIN_PA27H_GCLK_IO0                27  /**< \brief GCLK signal: IO0 on PA27 mux H */

+#define MUX_PA27H_GCLK_IO0                 7

+#define PINMUX_PA27H_GCLK_IO0      ((PIN_PA27H_GCLK_IO0 << 16) | MUX_PA27H_GCLK_IO0)

+#define PORT_PA27H_GCLK_IO0        (1u << 27)

+#define PIN_PA28H_GCLK_IO0                28  /**< \brief GCLK signal: IO0 on PA28 mux H */

+#define MUX_PA28H_GCLK_IO0                 7

+#define PINMUX_PA28H_GCLK_IO0      ((PIN_PA28H_GCLK_IO0 << 16) | MUX_PA28H_GCLK_IO0)

+#define PORT_PA28H_GCLK_IO0        (1u << 28)

+#define PIN_PA30H_GCLK_IO0                30  /**< \brief GCLK signal: IO0 on PA30 mux H */

+#define MUX_PA30H_GCLK_IO0                 7

+#define PINMUX_PA30H_GCLK_IO0      ((PIN_PA30H_GCLK_IO0 << 16) | MUX_PA30H_GCLK_IO0)

+#define PORT_PA30H_GCLK_IO0        (1u << 30)

+#define PIN_PA15H_GCLK_IO1                15  /**< \brief GCLK signal: IO1 on PA15 mux H */

+#define MUX_PA15H_GCLK_IO1                 7

+#define PINMUX_PA15H_GCLK_IO1      ((PIN_PA15H_GCLK_IO1 << 16) | MUX_PA15H_GCLK_IO1)

+#define PORT_PA15H_GCLK_IO1        (1u << 15)

+#define PIN_PA16H_GCLK_IO2                16  /**< \brief GCLK signal: IO2 on PA16 mux H */

+#define MUX_PA16H_GCLK_IO2                 7

+#define PINMUX_PA16H_GCLK_IO2      ((PIN_PA16H_GCLK_IO2 << 16) | MUX_PA16H_GCLK_IO2)

+#define PORT_PA16H_GCLK_IO2        (1u << 16)

+#define PIN_PA17H_GCLK_IO3                17  /**< \brief GCLK signal: IO3 on PA17 mux H */

+#define MUX_PA17H_GCLK_IO3                 7

+#define PINMUX_PA17H_GCLK_IO3      ((PIN_PA17H_GCLK_IO3 << 16) | MUX_PA17H_GCLK_IO3)

+#define PORT_PA17H_GCLK_IO3        (1u << 17)

+#define PIN_PA10H_GCLK_IO4                10  /**< \brief GCLK signal: IO4 on PA10 mux H */

+#define MUX_PA10H_GCLK_IO4                 7

+#define PINMUX_PA10H_GCLK_IO4      ((PIN_PA10H_GCLK_IO4 << 16) | MUX_PA10H_GCLK_IO4)

+#define PORT_PA10H_GCLK_IO4        (1u << 10)

+#define PIN_PA11H_GCLK_IO5                11  /**< \brief GCLK signal: IO5 on PA11 mux H */

+#define MUX_PA11H_GCLK_IO5                 7

+#define PINMUX_PA11H_GCLK_IO5      ((PIN_PA11H_GCLK_IO5 << 16) | MUX_PA11H_GCLK_IO5)

+#define PORT_PA11H_GCLK_IO5        (1u << 11)

+#define PIN_PA22H_GCLK_IO6                22  /**< \brief GCLK signal: IO6 on PA22 mux H */

+#define MUX_PA22H_GCLK_IO6                 7

+#define PINMUX_PA22H_GCLK_IO6      ((PIN_PA22H_GCLK_IO6 << 16) | MUX_PA22H_GCLK_IO6)

+#define PORT_PA22H_GCLK_IO6        (1u << 22)

+#define PIN_PA23H_GCLK_IO7                23  /**< \brief GCLK signal: IO7 on PA23 mux H */

+#define MUX_PA23H_GCLK_IO7                 7

+#define PINMUX_PA23H_GCLK_IO7      ((PIN_PA23H_GCLK_IO7 << 16) | MUX_PA23H_GCLK_IO7)

+#define PORT_PA23H_GCLK_IO7        (1u << 23)

+/* ========== PORT definition for EIC peripheral ========== */

+#define PIN_PA16A_EIC_EXTINT0             16  /**< \brief EIC signal: EXTINT0 on PA16 mux A */

+#define MUX_PA16A_EIC_EXTINT0              0

+#define PINMUX_PA16A_EIC_EXTINT0   ((PIN_PA16A_EIC_EXTINT0 << 16) | MUX_PA16A_EIC_EXTINT0)

+#define PORT_PA16A_EIC_EXTINT0     (1u << 16)

+#define PIN_PA00A_EIC_EXTINT0              0  /**< \brief EIC signal: EXTINT0 on PA00 mux A */

+#define MUX_PA00A_EIC_EXTINT0              0

+#define PINMUX_PA00A_EIC_EXTINT0   ((PIN_PA00A_EIC_EXTINT0 << 16) | MUX_PA00A_EIC_EXTINT0)

+#define PORT_PA00A_EIC_EXTINT0     (1u <<  0)

+#define PIN_PA17A_EIC_EXTINT1             17  /**< \brief EIC signal: EXTINT1 on PA17 mux A */

+#define MUX_PA17A_EIC_EXTINT1              0

+#define PINMUX_PA17A_EIC_EXTINT1   ((PIN_PA17A_EIC_EXTINT1 << 16) | MUX_PA17A_EIC_EXTINT1)

+#define PORT_PA17A_EIC_EXTINT1     (1u << 17)

+#define PIN_PA01A_EIC_EXTINT1              1  /**< \brief EIC signal: EXTINT1 on PA01 mux A */

+#define MUX_PA01A_EIC_EXTINT1              0

+#define PINMUX_PA01A_EIC_EXTINT1   ((PIN_PA01A_EIC_EXTINT1 << 16) | MUX_PA01A_EIC_EXTINT1)

+#define PORT_PA01A_EIC_EXTINT1     (1u <<  1)

+#define PIN_PA02A_EIC_EXTINT2              2  /**< \brief EIC signal: EXTINT2 on PA02 mux A */

+#define MUX_PA02A_EIC_EXTINT2              0

+#define PINMUX_PA02A_EIC_EXTINT2   ((PIN_PA02A_EIC_EXTINT2 << 16) | MUX_PA02A_EIC_EXTINT2)

+#define PORT_PA02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA18A_EIC_EXTINT2             18  /**< \brief EIC signal: EXTINT2 on PA18 mux A */

+#define MUX_PA18A_EIC_EXTINT2              0

+#define PINMUX_PA18A_EIC_EXTINT2   ((PIN_PA18A_EIC_EXTINT2 << 16) | MUX_PA18A_EIC_EXTINT2)

+#define PORT_PA18A_EIC_EXTINT2     (1u << 18)

+#define PIN_PA03A_EIC_EXTINT3              3  /**< \brief EIC signal: EXTINT3 on PA03 mux A */

+#define MUX_PA03A_EIC_EXTINT3              0

+#define PINMUX_PA03A_EIC_EXTINT3   ((PIN_PA03A_EIC_EXTINT3 << 16) | MUX_PA03A_EIC_EXTINT3)

+#define PORT_PA03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA19A_EIC_EXTINT3             19  /**< \brief EIC signal: EXTINT3 on PA19 mux A */

+#define MUX_PA19A_EIC_EXTINT3              0

+#define PINMUX_PA19A_EIC_EXTINT3   ((PIN_PA19A_EIC_EXTINT3 << 16) | MUX_PA19A_EIC_EXTINT3)

+#define PORT_PA19A_EIC_EXTINT3     (1u << 19)

+#define PIN_PA04A_EIC_EXTINT4              4  /**< \brief EIC signal: EXTINT4 on PA04 mux A */

+#define MUX_PA04A_EIC_EXTINT4              0

+#define PINMUX_PA04A_EIC_EXTINT4   ((PIN_PA04A_EIC_EXTINT4 << 16) | MUX_PA04A_EIC_EXTINT4)

+#define PORT_PA04A_EIC_EXTINT4     (1u <<  4)

+#define PIN_PA05A_EIC_EXTINT5              5  /**< \brief EIC signal: EXTINT5 on PA05 mux A */

+#define MUX_PA05A_EIC_EXTINT5              0

+#define PINMUX_PA05A_EIC_EXTINT5   ((PIN_PA05A_EIC_EXTINT5 << 16) | MUX_PA05A_EIC_EXTINT5)

+#define PORT_PA05A_EIC_EXTINT5     (1u <<  5)

+#define PIN_PA06A_EIC_EXTINT6              6  /**< \brief EIC signal: EXTINT6 on PA06 mux A */

+#define MUX_PA06A_EIC_EXTINT6              0

+#define PINMUX_PA06A_EIC_EXTINT6   ((PIN_PA06A_EIC_EXTINT6 << 16) | MUX_PA06A_EIC_EXTINT6)

+#define PORT_PA06A_EIC_EXTINT6     (1u <<  6)

+#define PIN_PA22A_EIC_EXTINT6             22  /**< \brief EIC signal: EXTINT6 on PA22 mux A */

+#define MUX_PA22A_EIC_EXTINT6              0

+#define PINMUX_PA22A_EIC_EXTINT6   ((PIN_PA22A_EIC_EXTINT6 << 16) | MUX_PA22A_EIC_EXTINT6)

+#define PORT_PA22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PA07A_EIC_EXTINT7              7  /**< \brief EIC signal: EXTINT7 on PA07 mux A */

+#define MUX_PA07A_EIC_EXTINT7              0

+#define PINMUX_PA07A_EIC_EXTINT7   ((PIN_PA07A_EIC_EXTINT7 << 16) | MUX_PA07A_EIC_EXTINT7)

+#define PORT_PA07A_EIC_EXTINT7     (1u <<  7)

+#define PIN_PA23A_EIC_EXTINT7             23  /**< \brief EIC signal: EXTINT7 on PA23 mux A */

+#define MUX_PA23A_EIC_EXTINT7              0

+#define PINMUX_PA23A_EIC_EXTINT7   ((PIN_PA23A_EIC_EXTINT7 << 16) | MUX_PA23A_EIC_EXTINT7)

+#define PORT_PA23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PA28A_EIC_EXTINT8             28  /**< \brief EIC signal: EXTINT8 on PA28 mux A */

+#define MUX_PA28A_EIC_EXTINT8              0

+#define PINMUX_PA28A_EIC_EXTINT8   ((PIN_PA28A_EIC_EXTINT8 << 16) | MUX_PA28A_EIC_EXTINT8)

+#define PORT_PA28A_EIC_EXTINT8     (1u << 28)

+#define PIN_PA09A_EIC_EXTINT9              9  /**< \brief EIC signal: EXTINT9 on PA09 mux A */

+#define MUX_PA09A_EIC_EXTINT9              0

+#define PINMUX_PA09A_EIC_EXTINT9   ((PIN_PA09A_EIC_EXTINT9 << 16) | MUX_PA09A_EIC_EXTINT9)

+#define PORT_PA09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PA10A_EIC_EXTINT10            10  /**< \brief EIC signal: EXTINT10 on PA10 mux A */

+#define MUX_PA10A_EIC_EXTINT10             0

+#define PINMUX_PA10A_EIC_EXTINT10  ((PIN_PA10A_EIC_EXTINT10 << 16) | MUX_PA10A_EIC_EXTINT10)

+#define PORT_PA10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA30A_EIC_EXTINT10            30  /**< \brief EIC signal: EXTINT10 on PA30 mux A */

+#define MUX_PA30A_EIC_EXTINT10             0

+#define PINMUX_PA30A_EIC_EXTINT10  ((PIN_PA30A_EIC_EXTINT10 << 16) | MUX_PA30A_EIC_EXTINT10)

+#define PORT_PA30A_EIC_EXTINT10    (1u << 30)

+#define PIN_PA11A_EIC_EXTINT11            11  /**< \brief EIC signal: EXTINT11 on PA11 mux A */

+#define MUX_PA11A_EIC_EXTINT11             0

+#define PINMUX_PA11A_EIC_EXTINT11  ((PIN_PA11A_EIC_EXTINT11 << 16) | MUX_PA11A_EIC_EXTINT11)

+#define PORT_PA11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA31A_EIC_EXTINT11            31  /**< \brief EIC signal: EXTINT11 on PA31 mux A */

+#define MUX_PA31A_EIC_EXTINT11             0

+#define PINMUX_PA31A_EIC_EXTINT11  ((PIN_PA31A_EIC_EXTINT11 << 16) | MUX_PA31A_EIC_EXTINT11)

+#define PORT_PA31A_EIC_EXTINT11    (1u << 31)

+#define PIN_PA24A_EIC_EXTINT12            24  /**< \brief EIC signal: EXTINT12 on PA24 mux A */

+#define MUX_PA24A_EIC_EXTINT12             0

+#define PINMUX_PA24A_EIC_EXTINT12  ((PIN_PA24A_EIC_EXTINT12 << 16) | MUX_PA24A_EIC_EXTINT12)

+#define PORT_PA24A_EIC_EXTINT12    (1u << 24)

+#define PIN_PA25A_EIC_EXTINT13            25  /**< \brief EIC signal: EXTINT13 on PA25 mux A */

+#define MUX_PA25A_EIC_EXTINT13             0

+#define PINMUX_PA25A_EIC_EXTINT13  ((PIN_PA25A_EIC_EXTINT13 << 16) | MUX_PA25A_EIC_EXTINT13)

+#define PORT_PA25A_EIC_EXTINT13    (1u << 25)

+#define PIN_PA14A_EIC_EXTINT14            14  /**< \brief EIC signal: EXTINT14 on PA14 mux A */

+#define MUX_PA14A_EIC_EXTINT14             0

+#define PINMUX_PA14A_EIC_EXTINT14  ((PIN_PA14A_EIC_EXTINT14 << 16) | MUX_PA14A_EIC_EXTINT14)

+#define PORT_PA14A_EIC_EXTINT14    (1u << 14)

+#define PIN_PA27A_EIC_EXTINT15            27  /**< \brief EIC signal: EXTINT15 on PA27 mux A */

+#define MUX_PA27A_EIC_EXTINT15             0

+#define PINMUX_PA27A_EIC_EXTINT15  ((PIN_PA27A_EIC_EXTINT15 << 16) | MUX_PA27A_EIC_EXTINT15)

+#define PORT_PA27A_EIC_EXTINT15    (1u << 27)

+#define PIN_PA15A_EIC_EXTINT15            15  /**< \brief EIC signal: EXTINT15 on PA15 mux A */

+#define MUX_PA15A_EIC_EXTINT15             0

+#define PINMUX_PA15A_EIC_EXTINT15  ((PIN_PA15A_EIC_EXTINT15 << 16) | MUX_PA15A_EIC_EXTINT15)

+#define PORT_PA15A_EIC_EXTINT15    (1u << 15)

+#define PIN_PA08A_EIC_NMI                  8  /**< \brief EIC signal: NMI on PA08 mux A */

+#define MUX_PA08A_EIC_NMI                  0

+#define PINMUX_PA08A_EIC_NMI       ((PIN_PA08A_EIC_NMI << 16) | MUX_PA08A_EIC_NMI)

+#define PORT_PA08A_EIC_NMI         (1u <<  8)

+/* ========== PORT definition for SERCOM0 peripheral ========== */

+#define PIN_PA04D_SERCOM0_PAD0             4  /**< \brief SERCOM0 signal: PAD0 on PA04 mux D */

+#define MUX_PA04D_SERCOM0_PAD0             3

+#define PINMUX_PA04D_SERCOM0_PAD0  ((PIN_PA04D_SERCOM0_PAD0 << 16) | MUX_PA04D_SERCOM0_PAD0)

+#define PORT_PA04D_SERCOM0_PAD0    (1u <<  4)

+#define PIN_PA08C_SERCOM0_PAD0             8  /**< \brief SERCOM0 signal: PAD0 on PA08 mux C */

+#define MUX_PA08C_SERCOM0_PAD0             2

+#define PINMUX_PA08C_SERCOM0_PAD0  ((PIN_PA08C_SERCOM0_PAD0 << 16) | MUX_PA08C_SERCOM0_PAD0)

+#define PORT_PA08C_SERCOM0_PAD0    (1u <<  8)

+#define PIN_PA05D_SERCOM0_PAD1             5  /**< \brief SERCOM0 signal: PAD1 on PA05 mux D */

+#define MUX_PA05D_SERCOM0_PAD1             3

+#define PINMUX_PA05D_SERCOM0_PAD1  ((PIN_PA05D_SERCOM0_PAD1 << 16) | MUX_PA05D_SERCOM0_PAD1)

+#define PORT_PA05D_SERCOM0_PAD1    (1u <<  5)

+#define PIN_PA09C_SERCOM0_PAD1             9  /**< \brief SERCOM0 signal: PAD1 on PA09 mux C */

+#define MUX_PA09C_SERCOM0_PAD1             2

+#define PINMUX_PA09C_SERCOM0_PAD1  ((PIN_PA09C_SERCOM0_PAD1 << 16) | MUX_PA09C_SERCOM0_PAD1)

+#define PORT_PA09C_SERCOM0_PAD1    (1u <<  9)

+#define PIN_PA06D_SERCOM0_PAD2             6  /**< \brief SERCOM0 signal: PAD2 on PA06 mux D */

+#define MUX_PA06D_SERCOM0_PAD2             3

+#define PINMUX_PA06D_SERCOM0_PAD2  ((PIN_PA06D_SERCOM0_PAD2 << 16) | MUX_PA06D_SERCOM0_PAD2)

+#define PORT_PA06D_SERCOM0_PAD2    (1u <<  6)

+#define PIN_PA10C_SERCOM0_PAD2            10  /**< \brief SERCOM0 signal: PAD2 on PA10 mux C */

+#define MUX_PA10C_SERCOM0_PAD2             2

+#define PINMUX_PA10C_SERCOM0_PAD2  ((PIN_PA10C_SERCOM0_PAD2 << 16) | MUX_PA10C_SERCOM0_PAD2)

+#define PORT_PA10C_SERCOM0_PAD2    (1u << 10)

+#define PIN_PA07D_SERCOM0_PAD3             7  /**< \brief SERCOM0 signal: PAD3 on PA07 mux D */

+#define MUX_PA07D_SERCOM0_PAD3             3

+#define PINMUX_PA07D_SERCOM0_PAD3  ((PIN_PA07D_SERCOM0_PAD3 << 16) | MUX_PA07D_SERCOM0_PAD3)

+#define PORT_PA07D_SERCOM0_PAD3    (1u <<  7)

+#define PIN_PA11C_SERCOM0_PAD3            11  /**< \brief SERCOM0 signal: PAD3 on PA11 mux C */

+#define MUX_PA11C_SERCOM0_PAD3             2

+#define PINMUX_PA11C_SERCOM0_PAD3  ((PIN_PA11C_SERCOM0_PAD3 << 16) | MUX_PA11C_SERCOM0_PAD3)

+#define PORT_PA11C_SERCOM0_PAD3    (1u << 11)

+/* ========== PORT definition for SERCOM1 peripheral ========== */

+#define PIN_PA16C_SERCOM1_PAD0            16  /**< \brief SERCOM1 signal: PAD0 on PA16 mux C */

+#define MUX_PA16C_SERCOM1_PAD0             2

+#define PINMUX_PA16C_SERCOM1_PAD0  ((PIN_PA16C_SERCOM1_PAD0 << 16) | MUX_PA16C_SERCOM1_PAD0)

+#define PORT_PA16C_SERCOM1_PAD0    (1u << 16)

+#define PIN_PA00D_SERCOM1_PAD0             0  /**< \brief SERCOM1 signal: PAD0 on PA00 mux D */

+#define MUX_PA00D_SERCOM1_PAD0             3

+#define PINMUX_PA00D_SERCOM1_PAD0  ((PIN_PA00D_SERCOM1_PAD0 << 16) | MUX_PA00D_SERCOM1_PAD0)

+#define PORT_PA00D_SERCOM1_PAD0    (1u <<  0)

+#define PIN_PA17C_SERCOM1_PAD1            17  /**< \brief SERCOM1 signal: PAD1 on PA17 mux C */

+#define MUX_PA17C_SERCOM1_PAD1             2

+#define PINMUX_PA17C_SERCOM1_PAD1  ((PIN_PA17C_SERCOM1_PAD1 << 16) | MUX_PA17C_SERCOM1_PAD1)

+#define PORT_PA17C_SERCOM1_PAD1    (1u << 17)

+#define PIN_PA01D_SERCOM1_PAD1             1  /**< \brief SERCOM1 signal: PAD1 on PA01 mux D */

+#define MUX_PA01D_SERCOM1_PAD1             3

+#define PINMUX_PA01D_SERCOM1_PAD1  ((PIN_PA01D_SERCOM1_PAD1 << 16) | MUX_PA01D_SERCOM1_PAD1)

+#define PORT_PA01D_SERCOM1_PAD1    (1u <<  1)

+#define PIN_PA30D_SERCOM1_PAD2            30  /**< \brief SERCOM1 signal: PAD2 on PA30 mux D */

+#define MUX_PA30D_SERCOM1_PAD2             3

+#define PINMUX_PA30D_SERCOM1_PAD2  ((PIN_PA30D_SERCOM1_PAD2 << 16) | MUX_PA30D_SERCOM1_PAD2)

+#define PORT_PA30D_SERCOM1_PAD2    (1u << 30)

+#define PIN_PA18C_SERCOM1_PAD2            18  /**< \brief SERCOM1 signal: PAD2 on PA18 mux C */

+#define MUX_PA18C_SERCOM1_PAD2             2

+#define PINMUX_PA18C_SERCOM1_PAD2  ((PIN_PA18C_SERCOM1_PAD2 << 16) | MUX_PA18C_SERCOM1_PAD2)

+#define PORT_PA18C_SERCOM1_PAD2    (1u << 18)

+#define PIN_PA31D_SERCOM1_PAD3            31  /**< \brief SERCOM1 signal: PAD3 on PA31 mux D */

+#define MUX_PA31D_SERCOM1_PAD3             3

+#define PINMUX_PA31D_SERCOM1_PAD3  ((PIN_PA31D_SERCOM1_PAD3 << 16) | MUX_PA31D_SERCOM1_PAD3)

+#define PORT_PA31D_SERCOM1_PAD3    (1u << 31)

+#define PIN_PA19C_SERCOM1_PAD3            19  /**< \brief SERCOM1 signal: PAD3 on PA19 mux C */

+#define MUX_PA19C_SERCOM1_PAD3             2

+#define PINMUX_PA19C_SERCOM1_PAD3  ((PIN_PA19C_SERCOM1_PAD3 << 16) | MUX_PA19C_SERCOM1_PAD3)

+#define PORT_PA19C_SERCOM1_PAD3    (1u << 19)

+/* ========== PORT definition for SERCOM2 peripheral ========== */

+#define PIN_PA08D_SERCOM2_PAD0             8  /**< \brief SERCOM2 signal: PAD0 on PA08 mux D */

+#define MUX_PA08D_SERCOM2_PAD0             3

+#define PINMUX_PA08D_SERCOM2_PAD0  ((PIN_PA08D_SERCOM2_PAD0 << 16) | MUX_PA08D_SERCOM2_PAD0)

+#define PORT_PA08D_SERCOM2_PAD0    (1u <<  8)

+#define PIN_PA09D_SERCOM2_PAD1             9  /**< \brief SERCOM2 signal: PAD1 on PA09 mux D */

+#define MUX_PA09D_SERCOM2_PAD1             3

+#define PINMUX_PA09D_SERCOM2_PAD1  ((PIN_PA09D_SERCOM2_PAD1 << 16) | MUX_PA09D_SERCOM2_PAD1)

+#define PORT_PA09D_SERCOM2_PAD1    (1u <<  9)

+#define PIN_PA10D_SERCOM2_PAD2            10  /**< \brief SERCOM2 signal: PAD2 on PA10 mux D */

+#define MUX_PA10D_SERCOM2_PAD2             3

+#define PINMUX_PA10D_SERCOM2_PAD2  ((PIN_PA10D_SERCOM2_PAD2 << 16) | MUX_PA10D_SERCOM2_PAD2)

+#define PORT_PA10D_SERCOM2_PAD2    (1u << 10)

+#define PIN_PA14C_SERCOM2_PAD2            14  /**< \brief SERCOM2 signal: PAD2 on PA14 mux C */

+#define MUX_PA14C_SERCOM2_PAD2             2

+#define PINMUX_PA14C_SERCOM2_PAD2  ((PIN_PA14C_SERCOM2_PAD2 << 16) | MUX_PA14C_SERCOM2_PAD2)

+#define PORT_PA14C_SERCOM2_PAD2    (1u << 14)

+#define PIN_PA11D_SERCOM2_PAD3            11  /**< \brief SERCOM2 signal: PAD3 on PA11 mux D */

+#define MUX_PA11D_SERCOM2_PAD3             3

+#define PINMUX_PA11D_SERCOM2_PAD3  ((PIN_PA11D_SERCOM2_PAD3 << 16) | MUX_PA11D_SERCOM2_PAD3)

+#define PORT_PA11D_SERCOM2_PAD3    (1u << 11)

+#define PIN_PA15C_SERCOM2_PAD3            15  /**< \brief SERCOM2 signal: PAD3 on PA15 mux C */

+#define MUX_PA15C_SERCOM2_PAD3             2

+#define PINMUX_PA15C_SERCOM2_PAD3  ((PIN_PA15C_SERCOM2_PAD3 << 16) | MUX_PA15C_SERCOM2_PAD3)

+#define PORT_PA15C_SERCOM2_PAD3    (1u << 15)

+/* ========== PORT definition for SERCOM3 peripheral ========== */

+#define PIN_PA16D_SERCOM3_PAD0            16  /**< \brief SERCOM3 signal: PAD0 on PA16 mux D */

+#define MUX_PA16D_SERCOM3_PAD0             3

+#define PINMUX_PA16D_SERCOM3_PAD0  ((PIN_PA16D_SERCOM3_PAD0 << 16) | MUX_PA16D_SERCOM3_PAD0)

+#define PORT_PA16D_SERCOM3_PAD0    (1u << 16)

+#define PIN_PA22C_SERCOM3_PAD0            22  /**< \brief SERCOM3 signal: PAD0 on PA22 mux C */

+#define MUX_PA22C_SERCOM3_PAD0             2

+#define PINMUX_PA22C_SERCOM3_PAD0  ((PIN_PA22C_SERCOM3_PAD0 << 16) | MUX_PA22C_SERCOM3_PAD0)

+#define PORT_PA22C_SERCOM3_PAD0    (1u << 22)

+#define PIN_PA17D_SERCOM3_PAD1            17  /**< \brief SERCOM3 signal: PAD1 on PA17 mux D */

+#define MUX_PA17D_SERCOM3_PAD1             3

+#define PINMUX_PA17D_SERCOM3_PAD1  ((PIN_PA17D_SERCOM3_PAD1 << 16) | MUX_PA17D_SERCOM3_PAD1)

+#define PORT_PA17D_SERCOM3_PAD1    (1u << 17)

+#define PIN_PA23C_SERCOM3_PAD1            23  /**< \brief SERCOM3 signal: PAD1 on PA23 mux C */

+#define MUX_PA23C_SERCOM3_PAD1             2

+#define PINMUX_PA23C_SERCOM3_PAD1  ((PIN_PA23C_SERCOM3_PAD1 << 16) | MUX_PA23C_SERCOM3_PAD1)

+#define PORT_PA23C_SERCOM3_PAD1    (1u << 23)

+#define PIN_PA18D_SERCOM3_PAD2            18  /**< \brief SERCOM3 signal: PAD2 on PA18 mux D */

+#define MUX_PA18D_SERCOM3_PAD2             3

+#define PINMUX_PA18D_SERCOM3_PAD2  ((PIN_PA18D_SERCOM3_PAD2 << 16) | MUX_PA18D_SERCOM3_PAD2)

+#define PORT_PA18D_SERCOM3_PAD2    (1u << 18)

+#define PIN_PA24C_SERCOM3_PAD2            24  /**< \brief SERCOM3 signal: PAD2 on PA24 mux C */

+#define MUX_PA24C_SERCOM3_PAD2             2

+#define PINMUX_PA24C_SERCOM3_PAD2  ((PIN_PA24C_SERCOM3_PAD2 << 16) | MUX_PA24C_SERCOM3_PAD2)

+#define PORT_PA24C_SERCOM3_PAD2    (1u << 24)

+#define PIN_PA19D_SERCOM3_PAD3            19  /**< \brief SERCOM3 signal: PAD3 on PA19 mux D */

+#define MUX_PA19D_SERCOM3_PAD3             3

+#define PINMUX_PA19D_SERCOM3_PAD3  ((PIN_PA19D_SERCOM3_PAD3 << 16) | MUX_PA19D_SERCOM3_PAD3)

+#define PORT_PA19D_SERCOM3_PAD3    (1u << 19)

+#define PIN_PA25C_SERCOM3_PAD3            25  /**< \brief SERCOM3 signal: PAD3 on PA25 mux C */

+#define MUX_PA25C_SERCOM3_PAD3             2

+#define PINMUX_PA25C_SERCOM3_PAD3  ((PIN_PA25C_SERCOM3_PAD3 << 16) | MUX_PA25C_SERCOM3_PAD3)

+#define PORT_PA25C_SERCOM3_PAD3    (1u << 25)

+/* ========== PORT definition for TC0 peripheral ========== */

+#define PIN_PA04F_TC0_WO0                  4  /**< \brief TC0 signal: WO0 on PA04 mux F */

+#define MUX_PA04F_TC0_WO0                  5

+#define PINMUX_PA04F_TC0_WO0       ((PIN_PA04F_TC0_WO0 << 16) | MUX_PA04F_TC0_WO0)

+#define PORT_PA04F_TC0_WO0         (1u <<  4)

+#define PIN_PA08E_TC0_WO0                  8  /**< \brief TC0 signal: WO0 on PA08 mux E */

+#define MUX_PA08E_TC0_WO0                  4

+#define PINMUX_PA08E_TC0_WO0       ((PIN_PA08E_TC0_WO0 << 16) | MUX_PA08E_TC0_WO0)

+#define PORT_PA08E_TC0_WO0         (1u <<  8)

+#define PIN_PA05F_TC0_WO1                  5  /**< \brief TC0 signal: WO1 on PA05 mux F */

+#define MUX_PA05F_TC0_WO1                  5

+#define PINMUX_PA05F_TC0_WO1       ((PIN_PA05F_TC0_WO1 << 16) | MUX_PA05F_TC0_WO1)

+#define PORT_PA05F_TC0_WO1         (1u <<  5)

+#define PIN_PA09E_TC0_WO1                  9  /**< \brief TC0 signal: WO1 on PA09 mux E */

+#define MUX_PA09E_TC0_WO1                  4

+#define PINMUX_PA09E_TC0_WO1       ((PIN_PA09E_TC0_WO1 << 16) | MUX_PA09E_TC0_WO1)

+#define PORT_PA09E_TC0_WO1         (1u <<  9)

+/* ========== PORT definition for TC1 peripheral ========== */

+#define PIN_PA06F_TC1_WO0                  6  /**< \brief TC1 signal: WO0 on PA06 mux F */

+#define MUX_PA06F_TC1_WO0                  5

+#define PINMUX_PA06F_TC1_WO0       ((PIN_PA06F_TC1_WO0 << 16) | MUX_PA06F_TC1_WO0)

+#define PORT_PA06F_TC1_WO0         (1u <<  6)

+#define PIN_PA30F_TC1_WO0                 30  /**< \brief TC1 signal: WO0 on PA30 mux F */

+#define MUX_PA30F_TC1_WO0                  5

+#define PINMUX_PA30F_TC1_WO0       ((PIN_PA30F_TC1_WO0 << 16) | MUX_PA30F_TC1_WO0)

+#define PORT_PA30F_TC1_WO0         (1u << 30)

+#define PIN_PA10E_TC1_WO0                 10  /**< \brief TC1 signal: WO0 on PA10 mux E */

+#define MUX_PA10E_TC1_WO0                  4

+#define PINMUX_PA10E_TC1_WO0       ((PIN_PA10E_TC1_WO0 << 16) | MUX_PA10E_TC1_WO0)

+#define PORT_PA10E_TC1_WO0         (1u << 10)

+#define PIN_PA07F_TC1_WO1                  7  /**< \brief TC1 signal: WO1 on PA07 mux F */

+#define MUX_PA07F_TC1_WO1                  5

+#define PINMUX_PA07F_TC1_WO1       ((PIN_PA07F_TC1_WO1 << 16) | MUX_PA07F_TC1_WO1)

+#define PORT_PA07F_TC1_WO1         (1u <<  7)

+#define PIN_PA31F_TC1_WO1                 31  /**< \brief TC1 signal: WO1 on PA31 mux F */

+#define MUX_PA31F_TC1_WO1                  5

+#define PINMUX_PA31F_TC1_WO1       ((PIN_PA31F_TC1_WO1 << 16) | MUX_PA31F_TC1_WO1)

+#define PORT_PA31F_TC1_WO1         (1u << 31)

+#define PIN_PA11E_TC1_WO1                 11  /**< \brief TC1 signal: WO1 on PA11 mux E */

+#define MUX_PA11E_TC1_WO1                  4

+#define PINMUX_PA11E_TC1_WO1       ((PIN_PA11E_TC1_WO1 << 16) | MUX_PA11E_TC1_WO1)

+#define PORT_PA11E_TC1_WO1         (1u << 11)

+/* ========== PORT definition for TC2 peripheral ========== */

+#define PIN_PA16F_TC2_WO0                 16  /**< \brief TC2 signal: WO0 on PA16 mux F */

+#define MUX_PA16F_TC2_WO0                  5

+#define PINMUX_PA16F_TC2_WO0       ((PIN_PA16F_TC2_WO0 << 16) | MUX_PA16F_TC2_WO0)

+#define PORT_PA16F_TC2_WO0         (1u << 16)

+#define PIN_PA00F_TC2_WO0                  0  /**< \brief TC2 signal: WO0 on PA00 mux F */

+#define MUX_PA00F_TC2_WO0                  5

+#define PINMUX_PA00F_TC2_WO0       ((PIN_PA00F_TC2_WO0 << 16) | MUX_PA00F_TC2_WO0)

+#define PORT_PA00F_TC2_WO0         (1u <<  0)

+#define PIN_PA17F_TC2_WO1                 17  /**< \brief TC2 signal: WO1 on PA17 mux F */

+#define MUX_PA17F_TC2_WO1                  5

+#define PINMUX_PA17F_TC2_WO1       ((PIN_PA17F_TC2_WO1 << 16) | MUX_PA17F_TC2_WO1)

+#define PORT_PA17F_TC2_WO1         (1u << 17)

+#define PIN_PA01F_TC2_WO1                  1  /**< \brief TC2 signal: WO1 on PA01 mux F */

+#define MUX_PA01F_TC2_WO1                  5

+#define PINMUX_PA01F_TC2_WO1       ((PIN_PA01F_TC2_WO1 << 16) | MUX_PA01F_TC2_WO1)

+#define PORT_PA01F_TC2_WO1         (1u <<  1)

+/* ========== PORT definition for TC3 peripheral ========== */

+#define PIN_PA18F_TC3_WO0                 18  /**< \brief TC3 signal: WO0 on PA18 mux F */

+#define MUX_PA18F_TC3_WO0                  5

+#define PINMUX_PA18F_TC3_WO0       ((PIN_PA18F_TC3_WO0 << 16) | MUX_PA18F_TC3_WO0)

+#define PORT_PA18F_TC3_WO0         (1u << 18)

+#define PIN_PA14E_TC3_WO0                 14  /**< \brief TC3 signal: WO0 on PA14 mux E */

+#define MUX_PA14E_TC3_WO0                  4

+#define PINMUX_PA14E_TC3_WO0       ((PIN_PA14E_TC3_WO0 << 16) | MUX_PA14E_TC3_WO0)

+#define PORT_PA14E_TC3_WO0         (1u << 14)

+#define PIN_PA19F_TC3_WO1                 19  /**< \brief TC3 signal: WO1 on PA19 mux F */

+#define MUX_PA19F_TC3_WO1                  5

+#define PINMUX_PA19F_TC3_WO1       ((PIN_PA19F_TC3_WO1 << 16) | MUX_PA19F_TC3_WO1)

+#define PORT_PA19F_TC3_WO1         (1u << 19)

+#define PIN_PA15E_TC3_WO1                 15  /**< \brief TC3 signal: WO1 on PA15 mux E */

+#define MUX_PA15E_TC3_WO1                  4

+#define PINMUX_PA15E_TC3_WO1       ((PIN_PA15E_TC3_WO1 << 16) | MUX_PA15E_TC3_WO1)

+#define PORT_PA15E_TC3_WO1         (1u << 15)

+/* ========== PORT definition for TC4 peripheral ========== */

+#define PIN_PA22F_TC4_WO0                 22  /**< \brief TC4 signal: WO0 on PA22 mux F */

+#define MUX_PA22F_TC4_WO0                  5

+#define PINMUX_PA22F_TC4_WO0       ((PIN_PA22F_TC4_WO0 << 16) | MUX_PA22F_TC4_WO0)

+#define PORT_PA22F_TC4_WO0         (1u << 22)

+#define PIN_PA23F_TC4_WO1                 23  /**< \brief TC4 signal: WO1 on PA23 mux F */

+#define MUX_PA23F_TC4_WO1                  5

+#define PINMUX_PA23F_TC4_WO1       ((PIN_PA23F_TC4_WO1 << 16) | MUX_PA23F_TC4_WO1)

+#define PORT_PA23F_TC4_WO1         (1u << 23)

+/* ========== PORT definition for TC5 peripheral ========== */

+#define PIN_PA24F_TC5_WO0                 24  /**< \brief TC5 signal: WO0 on PA24 mux F */

+#define MUX_PA24F_TC5_WO0                  5

+#define PINMUX_PA24F_TC5_WO0       ((PIN_PA24F_TC5_WO0 << 16) | MUX_PA24F_TC5_WO0)

+#define PORT_PA24F_TC5_WO0         (1u << 24)

+#define PIN_PA25F_TC5_WO1                 25  /**< \brief TC5 signal: WO1 on PA25 mux F */

+#define MUX_PA25F_TC5_WO1                  5

+#define PINMUX_PA25F_TC5_WO1       ((PIN_PA25F_TC5_WO1 << 16) | MUX_PA25F_TC5_WO1)

+#define PORT_PA25F_TC5_WO1         (1u << 25)

+/* ========== PORT definition for ADC peripheral ========== */

+#define PIN_PA02B_ADC_AIN0                 2  /**< \brief ADC signal: AIN0 on PA02 mux B */

+#define MUX_PA02B_ADC_AIN0                 1

+#define PINMUX_PA02B_ADC_AIN0      ((PIN_PA02B_ADC_AIN0 << 16) | MUX_PA02B_ADC_AIN0)

+#define PORT_PA02B_ADC_AIN0        (1u <<  2)

+#define PIN_PA03B_ADC_AIN1                 3  /**< \brief ADC signal: AIN1 on PA03 mux B */

+#define MUX_PA03B_ADC_AIN1                 1

+#define PINMUX_PA03B_ADC_AIN1      ((PIN_PA03B_ADC_AIN1 << 16) | MUX_PA03B_ADC_AIN1)

+#define PORT_PA03B_ADC_AIN1        (1u <<  3)

+#define PIN_PA04B_ADC_AIN4                 4  /**< \brief ADC signal: AIN4 on PA04 mux B */

+#define MUX_PA04B_ADC_AIN4                 1

+#define PINMUX_PA04B_ADC_AIN4      ((PIN_PA04B_ADC_AIN4 << 16) | MUX_PA04B_ADC_AIN4)

+#define PORT_PA04B_ADC_AIN4        (1u <<  4)

+#define PIN_PA05B_ADC_AIN5                 5  /**< \brief ADC signal: AIN5 on PA05 mux B */

+#define MUX_PA05B_ADC_AIN5                 1

+#define PINMUX_PA05B_ADC_AIN5      ((PIN_PA05B_ADC_AIN5 << 16) | MUX_PA05B_ADC_AIN5)

+#define PORT_PA05B_ADC_AIN5        (1u <<  5)

+#define PIN_PA06B_ADC_AIN6                 6  /**< \brief ADC signal: AIN6 on PA06 mux B */

+#define MUX_PA06B_ADC_AIN6                 1

+#define PINMUX_PA06B_ADC_AIN6      ((PIN_PA06B_ADC_AIN6 << 16) | MUX_PA06B_ADC_AIN6)

+#define PORT_PA06B_ADC_AIN6        (1u <<  6)

+#define PIN_PA07B_ADC_AIN7                 7  /**< \brief ADC signal: AIN7 on PA07 mux B */

+#define MUX_PA07B_ADC_AIN7                 1

+#define PINMUX_PA07B_ADC_AIN7      ((PIN_PA07B_ADC_AIN7 << 16) | MUX_PA07B_ADC_AIN7)

+#define PORT_PA07B_ADC_AIN7        (1u <<  7)

+#define PIN_PA08B_ADC_AIN16                8  /**< \brief ADC signal: AIN16 on PA08 mux B */

+#define MUX_PA08B_ADC_AIN16                1

+#define PINMUX_PA08B_ADC_AIN16     ((PIN_PA08B_ADC_AIN16 << 16) | MUX_PA08B_ADC_AIN16)

+#define PORT_PA08B_ADC_AIN16       (1u <<  8)

+#define PIN_PA09B_ADC_AIN17                9  /**< \brief ADC signal: AIN17 on PA09 mux B */

+#define MUX_PA09B_ADC_AIN17                1

+#define PINMUX_PA09B_ADC_AIN17     ((PIN_PA09B_ADC_AIN17 << 16) | MUX_PA09B_ADC_AIN17)

+#define PORT_PA09B_ADC_AIN17       (1u <<  9)

+#define PIN_PA10B_ADC_AIN18               10  /**< \brief ADC signal: AIN18 on PA10 mux B */

+#define MUX_PA10B_ADC_AIN18                1

+#define PINMUX_PA10B_ADC_AIN18     ((PIN_PA10B_ADC_AIN18 << 16) | MUX_PA10B_ADC_AIN18)

+#define PORT_PA10B_ADC_AIN18       (1u << 10)

+#define PIN_PA11B_ADC_AIN19               11  /**< \brief ADC signal: AIN19 on PA11 mux B */

+#define MUX_PA11B_ADC_AIN19                1

+#define PINMUX_PA11B_ADC_AIN19     ((PIN_PA11B_ADC_AIN19 << 16) | MUX_PA11B_ADC_AIN19)

+#define PORT_PA11B_ADC_AIN19       (1u << 11)

+#define PIN_PA04B_ADC_VREFP                4  /**< \brief ADC signal: VREFP on PA04 mux B */

+#define MUX_PA04B_ADC_VREFP                1

+#define PINMUX_PA04B_ADC_VREFP     ((PIN_PA04B_ADC_VREFP << 16) | MUX_PA04B_ADC_VREFP)

+#define PORT_PA04B_ADC_VREFP       (1u <<  4)

+/* ========== PORT definition for AC peripheral ========== */

+#define PIN_PA04B_AC_AIN0                  4  /**< \brief AC signal: AIN0 on PA04 mux B */

+#define MUX_PA04B_AC_AIN0                  1

+#define PINMUX_PA04B_AC_AIN0       ((PIN_PA04B_AC_AIN0 << 16) | MUX_PA04B_AC_AIN0)

+#define PORT_PA04B_AC_AIN0         (1u <<  4)

+#define PIN_PA05B_AC_AIN1                  5  /**< \brief AC signal: AIN1 on PA05 mux B */

+#define MUX_PA05B_AC_AIN1                  1

+#define PINMUX_PA05B_AC_AIN1       ((PIN_PA05B_AC_AIN1 << 16) | MUX_PA05B_AC_AIN1)

+#define PORT_PA05B_AC_AIN1         (1u <<  5)

+#define PIN_PA06B_AC_AIN2                  6  /**< \brief AC signal: AIN2 on PA06 mux B */

+#define MUX_PA06B_AC_AIN2                  1

+#define PINMUX_PA06B_AC_AIN2       ((PIN_PA06B_AC_AIN2 << 16) | MUX_PA06B_AC_AIN2)

+#define PORT_PA06B_AC_AIN2         (1u <<  6)

+#define PIN_PA07B_AC_AIN3                  7  /**< \brief AC signal: AIN3 on PA07 mux B */

+#define MUX_PA07B_AC_AIN3                  1

+#define PINMUX_PA07B_AC_AIN3       ((PIN_PA07B_AC_AIN3 << 16) | MUX_PA07B_AC_AIN3)

+#define PORT_PA07B_AC_AIN3         (1u <<  7)

+#define PIN_PA18H_AC_CMP0                 18  /**< \brief AC signal: CMP0 on PA18 mux H */

+#define MUX_PA18H_AC_CMP0                  7

+#define PINMUX_PA18H_AC_CMP0       ((PIN_PA18H_AC_CMP0 << 16) | MUX_PA18H_AC_CMP0)

+#define PORT_PA18H_AC_CMP0         (1u << 18)

+#define PIN_PA19H_AC_CMP1                 19  /**< \brief AC signal: CMP1 on PA19 mux H */

+#define MUX_PA19H_AC_CMP1                  7

+#define PINMUX_PA19H_AC_CMP1       ((PIN_PA19H_AC_CMP1 << 16) | MUX_PA19H_AC_CMP1)

+#define PORT_PA19H_AC_CMP1         (1u << 19)

+/* ========== PORT definition for DAC peripheral ========== */

+#define PIN_PA02B_DAC_VOUT                 2  /**< \brief DAC signal: VOUT on PA02 mux B */

+#define MUX_PA02B_DAC_VOUT                 1

+#define PINMUX_PA02B_DAC_VOUT      ((PIN_PA02B_DAC_VOUT << 16) | MUX_PA02B_DAC_VOUT)

+#define PORT_PA02B_DAC_VOUT        (1u <<  2)

+#define PIN_PA03B_DAC_VREFP                3  /**< \brief DAC signal: VREFP on PA03 mux B */

+#define MUX_PA03B_DAC_VREFP                1

+#define PINMUX_PA03B_DAC_VREFP     ((PIN_PA03B_DAC_VREFP << 16) | MUX_PA03B_DAC_VREFP)

+#define PORT_PA03B_DAC_VREFP       (1u <<  3)

+

+#endif /* _SAMD20E14_PIO_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20e15.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20e15.h
new file mode 100644
index 0000000..44170a1
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20e15.h
@@ -0,0 +1,552 @@
+/**

+ * \file

+ *

+ * \brief Peripheral I/O description for SAMD20E15

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20E15_PIO_

+#define _SAMD20E15_PIO_

+

+#define PIN_PA00                           0  /**< \brief Pin Number for PA00 */

+#define PORT_PA00                  (1u <<  0) /**< \brief PORT Mask  for PA00 */

+#define PIN_PA01                           1  /**< \brief Pin Number for PA01 */

+#define PORT_PA01                  (1u <<  1) /**< \brief PORT Mask  for PA01 */

+#define PIN_PA02                           2  /**< \brief Pin Number for PA02 */

+#define PORT_PA02                  (1u <<  2) /**< \brief PORT Mask  for PA02 */

+#define PIN_PA03                           3  /**< \brief Pin Number for PA03 */

+#define PORT_PA03                  (1u <<  3) /**< \brief PORT Mask  for PA03 */

+#define PIN_PA04                           4  /**< \brief Pin Number for PA04 */

+#define PORT_PA04                  (1u <<  4) /**< \brief PORT Mask  for PA04 */

+#define PIN_PA05                           5  /**< \brief Pin Number for PA05 */

+#define PORT_PA05                  (1u <<  5) /**< \brief PORT Mask  for PA05 */

+#define PIN_PA06                           6  /**< \brief Pin Number for PA06 */

+#define PORT_PA06                  (1u <<  6) /**< \brief PORT Mask  for PA06 */

+#define PIN_PA07                           7  /**< \brief Pin Number for PA07 */

+#define PORT_PA07                  (1u <<  7) /**< \brief PORT Mask  for PA07 */

+#define PIN_PA08                           8  /**< \brief Pin Number for PA08 */

+#define PORT_PA08                  (1u <<  8) /**< \brief PORT Mask  for PA08 */

+#define PIN_PA09                           9  /**< \brief Pin Number for PA09 */

+#define PORT_PA09                  (1u <<  9) /**< \brief PORT Mask  for PA09 */

+#define PIN_PA10                          10  /**< \brief Pin Number for PA10 */

+#define PORT_PA10                  (1u << 10) /**< \brief PORT Mask  for PA10 */

+#define PIN_PA11                          11  /**< \brief Pin Number for PA11 */

+#define PORT_PA11                  (1u << 11) /**< \brief PORT Mask  for PA11 */

+#define PIN_PA14                          14  /**< \brief Pin Number for PA14 */

+#define PORT_PA14                  (1u << 14) /**< \brief PORT Mask  for PA14 */

+#define PIN_PA15                          15  /**< \brief Pin Number for PA15 */

+#define PORT_PA15                  (1u << 15) /**< \brief PORT Mask  for PA15 */

+#define PIN_PA16                          16  /**< \brief Pin Number for PA16 */

+#define PORT_PA16                  (1u << 16) /**< \brief PORT Mask  for PA16 */

+#define PIN_PA17                          17  /**< \brief Pin Number for PA17 */

+#define PORT_PA17                  (1u << 17) /**< \brief PORT Mask  for PA17 */

+#define PIN_PA18                          18  /**< \brief Pin Number for PA18 */

+#define PORT_PA18                  (1u << 18) /**< \brief PORT Mask  for PA18 */

+#define PIN_PA19                          19  /**< \brief Pin Number for PA19 */

+#define PORT_PA19                  (1u << 19) /**< \brief PORT Mask  for PA19 */

+#define PIN_PA22                          22  /**< \brief Pin Number for PA22 */

+#define PORT_PA22                  (1u << 22) /**< \brief PORT Mask  for PA22 */

+#define PIN_PA23                          23  /**< \brief Pin Number for PA23 */

+#define PORT_PA23                  (1u << 23) /**< \brief PORT Mask  for PA23 */

+#define PIN_PA24                          24  /**< \brief Pin Number for PA24 */

+#define PORT_PA24                  (1u << 24) /**< \brief PORT Mask  for PA24 */

+#define PIN_PA25                          25  /**< \brief Pin Number for PA25 */

+#define PORT_PA25                  (1u << 25) /**< \brief PORT Mask  for PA25 */

+#define PIN_PA27                          27  /**< \brief Pin Number for PA27 */

+#define PORT_PA27                  (1u << 27) /**< \brief PORT Mask  for PA27 */

+#define PIN_PA28                          28  /**< \brief Pin Number for PA28 */

+#define PORT_PA28                  (1u << 28) /**< \brief PORT Mask  for PA28 */

+#define PIN_PA30                          30  /**< \brief Pin Number for PA30 */

+#define PORT_PA30                  (1u << 30) /**< \brief PORT Mask  for PA30 */

+#define PIN_PA31                          31  /**< \brief Pin Number for PA31 */

+#define PORT_PA31                  (1u << 31) /**< \brief PORT Mask  for PA31 */

+/* ========== PORT definition for CORE peripheral ========== */

+#define PIN_PA30G_CORE_SWCLK              30  /**< \brief CORE signal: SWCLK on PA30 mux G */

+#define MUX_PA30G_CORE_SWCLK               6

+#define PINMUX_PA30G_CORE_SWCLK    ((PIN_PA30G_CORE_SWCLK << 16) | MUX_PA30G_CORE_SWCLK)

+#define PORT_PA30G_CORE_SWCLK      (1u << 30)

+/* ========== PORT definition for GCLK peripheral ========== */

+#define PIN_PA14H_GCLK_IO0                14  /**< \brief GCLK signal: IO0 on PA14 mux H */

+#define MUX_PA14H_GCLK_IO0                 7

+#define PINMUX_PA14H_GCLK_IO0      ((PIN_PA14H_GCLK_IO0 << 16) | MUX_PA14H_GCLK_IO0)

+#define PORT_PA14H_GCLK_IO0        (1u << 14)

+#define PIN_PA27H_GCLK_IO0                27  /**< \brief GCLK signal: IO0 on PA27 mux H */

+#define MUX_PA27H_GCLK_IO0                 7

+#define PINMUX_PA27H_GCLK_IO0      ((PIN_PA27H_GCLK_IO0 << 16) | MUX_PA27H_GCLK_IO0)

+#define PORT_PA27H_GCLK_IO0        (1u << 27)

+#define PIN_PA28H_GCLK_IO0                28  /**< \brief GCLK signal: IO0 on PA28 mux H */

+#define MUX_PA28H_GCLK_IO0                 7

+#define PINMUX_PA28H_GCLK_IO0      ((PIN_PA28H_GCLK_IO0 << 16) | MUX_PA28H_GCLK_IO0)

+#define PORT_PA28H_GCLK_IO0        (1u << 28)

+#define PIN_PA30H_GCLK_IO0                30  /**< \brief GCLK signal: IO0 on PA30 mux H */

+#define MUX_PA30H_GCLK_IO0                 7

+#define PINMUX_PA30H_GCLK_IO0      ((PIN_PA30H_GCLK_IO0 << 16) | MUX_PA30H_GCLK_IO0)

+#define PORT_PA30H_GCLK_IO0        (1u << 30)

+#define PIN_PA15H_GCLK_IO1                15  /**< \brief GCLK signal: IO1 on PA15 mux H */

+#define MUX_PA15H_GCLK_IO1                 7

+#define PINMUX_PA15H_GCLK_IO1      ((PIN_PA15H_GCLK_IO1 << 16) | MUX_PA15H_GCLK_IO1)

+#define PORT_PA15H_GCLK_IO1        (1u << 15)

+#define PIN_PA16H_GCLK_IO2                16  /**< \brief GCLK signal: IO2 on PA16 mux H */

+#define MUX_PA16H_GCLK_IO2                 7

+#define PINMUX_PA16H_GCLK_IO2      ((PIN_PA16H_GCLK_IO2 << 16) | MUX_PA16H_GCLK_IO2)

+#define PORT_PA16H_GCLK_IO2        (1u << 16)

+#define PIN_PA17H_GCLK_IO3                17  /**< \brief GCLK signal: IO3 on PA17 mux H */

+#define MUX_PA17H_GCLK_IO3                 7

+#define PINMUX_PA17H_GCLK_IO3      ((PIN_PA17H_GCLK_IO3 << 16) | MUX_PA17H_GCLK_IO3)

+#define PORT_PA17H_GCLK_IO3        (1u << 17)

+#define PIN_PA10H_GCLK_IO4                10  /**< \brief GCLK signal: IO4 on PA10 mux H */

+#define MUX_PA10H_GCLK_IO4                 7

+#define PINMUX_PA10H_GCLK_IO4      ((PIN_PA10H_GCLK_IO4 << 16) | MUX_PA10H_GCLK_IO4)

+#define PORT_PA10H_GCLK_IO4        (1u << 10)

+#define PIN_PA11H_GCLK_IO5                11  /**< \brief GCLK signal: IO5 on PA11 mux H */

+#define MUX_PA11H_GCLK_IO5                 7

+#define PINMUX_PA11H_GCLK_IO5      ((PIN_PA11H_GCLK_IO5 << 16) | MUX_PA11H_GCLK_IO5)

+#define PORT_PA11H_GCLK_IO5        (1u << 11)

+#define PIN_PA22H_GCLK_IO6                22  /**< \brief GCLK signal: IO6 on PA22 mux H */

+#define MUX_PA22H_GCLK_IO6                 7

+#define PINMUX_PA22H_GCLK_IO6      ((PIN_PA22H_GCLK_IO6 << 16) | MUX_PA22H_GCLK_IO6)

+#define PORT_PA22H_GCLK_IO6        (1u << 22)

+#define PIN_PA23H_GCLK_IO7                23  /**< \brief GCLK signal: IO7 on PA23 mux H */

+#define MUX_PA23H_GCLK_IO7                 7

+#define PINMUX_PA23H_GCLK_IO7      ((PIN_PA23H_GCLK_IO7 << 16) | MUX_PA23H_GCLK_IO7)

+#define PORT_PA23H_GCLK_IO7        (1u << 23)

+/* ========== PORT definition for EIC peripheral ========== */

+#define PIN_PA16A_EIC_EXTINT0             16  /**< \brief EIC signal: EXTINT0 on PA16 mux A */

+#define MUX_PA16A_EIC_EXTINT0              0

+#define PINMUX_PA16A_EIC_EXTINT0   ((PIN_PA16A_EIC_EXTINT0 << 16) | MUX_PA16A_EIC_EXTINT0)

+#define PORT_PA16A_EIC_EXTINT0     (1u << 16)

+#define PIN_PA00A_EIC_EXTINT0              0  /**< \brief EIC signal: EXTINT0 on PA00 mux A */

+#define MUX_PA00A_EIC_EXTINT0              0

+#define PINMUX_PA00A_EIC_EXTINT0   ((PIN_PA00A_EIC_EXTINT0 << 16) | MUX_PA00A_EIC_EXTINT0)

+#define PORT_PA00A_EIC_EXTINT0     (1u <<  0)

+#define PIN_PA17A_EIC_EXTINT1             17  /**< \brief EIC signal: EXTINT1 on PA17 mux A */

+#define MUX_PA17A_EIC_EXTINT1              0

+#define PINMUX_PA17A_EIC_EXTINT1   ((PIN_PA17A_EIC_EXTINT1 << 16) | MUX_PA17A_EIC_EXTINT1)

+#define PORT_PA17A_EIC_EXTINT1     (1u << 17)

+#define PIN_PA01A_EIC_EXTINT1              1  /**< \brief EIC signal: EXTINT1 on PA01 mux A */

+#define MUX_PA01A_EIC_EXTINT1              0

+#define PINMUX_PA01A_EIC_EXTINT1   ((PIN_PA01A_EIC_EXTINT1 << 16) | MUX_PA01A_EIC_EXTINT1)

+#define PORT_PA01A_EIC_EXTINT1     (1u <<  1)

+#define PIN_PA02A_EIC_EXTINT2              2  /**< \brief EIC signal: EXTINT2 on PA02 mux A */

+#define MUX_PA02A_EIC_EXTINT2              0

+#define PINMUX_PA02A_EIC_EXTINT2   ((PIN_PA02A_EIC_EXTINT2 << 16) | MUX_PA02A_EIC_EXTINT2)

+#define PORT_PA02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA18A_EIC_EXTINT2             18  /**< \brief EIC signal: EXTINT2 on PA18 mux A */

+#define MUX_PA18A_EIC_EXTINT2              0

+#define PINMUX_PA18A_EIC_EXTINT2   ((PIN_PA18A_EIC_EXTINT2 << 16) | MUX_PA18A_EIC_EXTINT2)

+#define PORT_PA18A_EIC_EXTINT2     (1u << 18)

+#define PIN_PA03A_EIC_EXTINT3              3  /**< \brief EIC signal: EXTINT3 on PA03 mux A */

+#define MUX_PA03A_EIC_EXTINT3              0

+#define PINMUX_PA03A_EIC_EXTINT3   ((PIN_PA03A_EIC_EXTINT3 << 16) | MUX_PA03A_EIC_EXTINT3)

+#define PORT_PA03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA19A_EIC_EXTINT3             19  /**< \brief EIC signal: EXTINT3 on PA19 mux A */

+#define MUX_PA19A_EIC_EXTINT3              0

+#define PINMUX_PA19A_EIC_EXTINT3   ((PIN_PA19A_EIC_EXTINT3 << 16) | MUX_PA19A_EIC_EXTINT3)

+#define PORT_PA19A_EIC_EXTINT3     (1u << 19)

+#define PIN_PA04A_EIC_EXTINT4              4  /**< \brief EIC signal: EXTINT4 on PA04 mux A */

+#define MUX_PA04A_EIC_EXTINT4              0

+#define PINMUX_PA04A_EIC_EXTINT4   ((PIN_PA04A_EIC_EXTINT4 << 16) | MUX_PA04A_EIC_EXTINT4)

+#define PORT_PA04A_EIC_EXTINT4     (1u <<  4)

+#define PIN_PA05A_EIC_EXTINT5              5  /**< \brief EIC signal: EXTINT5 on PA05 mux A */

+#define MUX_PA05A_EIC_EXTINT5              0

+#define PINMUX_PA05A_EIC_EXTINT5   ((PIN_PA05A_EIC_EXTINT5 << 16) | MUX_PA05A_EIC_EXTINT5)

+#define PORT_PA05A_EIC_EXTINT5     (1u <<  5)

+#define PIN_PA06A_EIC_EXTINT6              6  /**< \brief EIC signal: EXTINT6 on PA06 mux A */

+#define MUX_PA06A_EIC_EXTINT6              0

+#define PINMUX_PA06A_EIC_EXTINT6   ((PIN_PA06A_EIC_EXTINT6 << 16) | MUX_PA06A_EIC_EXTINT6)

+#define PORT_PA06A_EIC_EXTINT6     (1u <<  6)

+#define PIN_PA22A_EIC_EXTINT6             22  /**< \brief EIC signal: EXTINT6 on PA22 mux A */

+#define MUX_PA22A_EIC_EXTINT6              0

+#define PINMUX_PA22A_EIC_EXTINT6   ((PIN_PA22A_EIC_EXTINT6 << 16) | MUX_PA22A_EIC_EXTINT6)

+#define PORT_PA22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PA07A_EIC_EXTINT7              7  /**< \brief EIC signal: EXTINT7 on PA07 mux A */

+#define MUX_PA07A_EIC_EXTINT7              0

+#define PINMUX_PA07A_EIC_EXTINT7   ((PIN_PA07A_EIC_EXTINT7 << 16) | MUX_PA07A_EIC_EXTINT7)

+#define PORT_PA07A_EIC_EXTINT7     (1u <<  7)

+#define PIN_PA23A_EIC_EXTINT7             23  /**< \brief EIC signal: EXTINT7 on PA23 mux A */

+#define MUX_PA23A_EIC_EXTINT7              0

+#define PINMUX_PA23A_EIC_EXTINT7   ((PIN_PA23A_EIC_EXTINT7 << 16) | MUX_PA23A_EIC_EXTINT7)

+#define PORT_PA23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PA28A_EIC_EXTINT8             28  /**< \brief EIC signal: EXTINT8 on PA28 mux A */

+#define MUX_PA28A_EIC_EXTINT8              0

+#define PINMUX_PA28A_EIC_EXTINT8   ((PIN_PA28A_EIC_EXTINT8 << 16) | MUX_PA28A_EIC_EXTINT8)

+#define PORT_PA28A_EIC_EXTINT8     (1u << 28)

+#define PIN_PA09A_EIC_EXTINT9              9  /**< \brief EIC signal: EXTINT9 on PA09 mux A */

+#define MUX_PA09A_EIC_EXTINT9              0

+#define PINMUX_PA09A_EIC_EXTINT9   ((PIN_PA09A_EIC_EXTINT9 << 16) | MUX_PA09A_EIC_EXTINT9)

+#define PORT_PA09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PA10A_EIC_EXTINT10            10  /**< \brief EIC signal: EXTINT10 on PA10 mux A */

+#define MUX_PA10A_EIC_EXTINT10             0

+#define PINMUX_PA10A_EIC_EXTINT10  ((PIN_PA10A_EIC_EXTINT10 << 16) | MUX_PA10A_EIC_EXTINT10)

+#define PORT_PA10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA30A_EIC_EXTINT10            30  /**< \brief EIC signal: EXTINT10 on PA30 mux A */

+#define MUX_PA30A_EIC_EXTINT10             0

+#define PINMUX_PA30A_EIC_EXTINT10  ((PIN_PA30A_EIC_EXTINT10 << 16) | MUX_PA30A_EIC_EXTINT10)

+#define PORT_PA30A_EIC_EXTINT10    (1u << 30)

+#define PIN_PA11A_EIC_EXTINT11            11  /**< \brief EIC signal: EXTINT11 on PA11 mux A */

+#define MUX_PA11A_EIC_EXTINT11             0

+#define PINMUX_PA11A_EIC_EXTINT11  ((PIN_PA11A_EIC_EXTINT11 << 16) | MUX_PA11A_EIC_EXTINT11)

+#define PORT_PA11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA31A_EIC_EXTINT11            31  /**< \brief EIC signal: EXTINT11 on PA31 mux A */

+#define MUX_PA31A_EIC_EXTINT11             0

+#define PINMUX_PA31A_EIC_EXTINT11  ((PIN_PA31A_EIC_EXTINT11 << 16) | MUX_PA31A_EIC_EXTINT11)

+#define PORT_PA31A_EIC_EXTINT11    (1u << 31)

+#define PIN_PA24A_EIC_EXTINT12            24  /**< \brief EIC signal: EXTINT12 on PA24 mux A */

+#define MUX_PA24A_EIC_EXTINT12             0

+#define PINMUX_PA24A_EIC_EXTINT12  ((PIN_PA24A_EIC_EXTINT12 << 16) | MUX_PA24A_EIC_EXTINT12)

+#define PORT_PA24A_EIC_EXTINT12    (1u << 24)

+#define PIN_PA25A_EIC_EXTINT13            25  /**< \brief EIC signal: EXTINT13 on PA25 mux A */

+#define MUX_PA25A_EIC_EXTINT13             0

+#define PINMUX_PA25A_EIC_EXTINT13  ((PIN_PA25A_EIC_EXTINT13 << 16) | MUX_PA25A_EIC_EXTINT13)

+#define PORT_PA25A_EIC_EXTINT13    (1u << 25)

+#define PIN_PA14A_EIC_EXTINT14            14  /**< \brief EIC signal: EXTINT14 on PA14 mux A */

+#define MUX_PA14A_EIC_EXTINT14             0

+#define PINMUX_PA14A_EIC_EXTINT14  ((PIN_PA14A_EIC_EXTINT14 << 16) | MUX_PA14A_EIC_EXTINT14)

+#define PORT_PA14A_EIC_EXTINT14    (1u << 14)

+#define PIN_PA27A_EIC_EXTINT15            27  /**< \brief EIC signal: EXTINT15 on PA27 mux A */

+#define MUX_PA27A_EIC_EXTINT15             0

+#define PINMUX_PA27A_EIC_EXTINT15  ((PIN_PA27A_EIC_EXTINT15 << 16) | MUX_PA27A_EIC_EXTINT15)

+#define PORT_PA27A_EIC_EXTINT15    (1u << 27)

+#define PIN_PA15A_EIC_EXTINT15            15  /**< \brief EIC signal: EXTINT15 on PA15 mux A */

+#define MUX_PA15A_EIC_EXTINT15             0

+#define PINMUX_PA15A_EIC_EXTINT15  ((PIN_PA15A_EIC_EXTINT15 << 16) | MUX_PA15A_EIC_EXTINT15)

+#define PORT_PA15A_EIC_EXTINT15    (1u << 15)

+#define PIN_PA08A_EIC_NMI                  8  /**< \brief EIC signal: NMI on PA08 mux A */

+#define MUX_PA08A_EIC_NMI                  0

+#define PINMUX_PA08A_EIC_NMI       ((PIN_PA08A_EIC_NMI << 16) | MUX_PA08A_EIC_NMI)

+#define PORT_PA08A_EIC_NMI         (1u <<  8)

+/* ========== PORT definition for SERCOM0 peripheral ========== */

+#define PIN_PA04D_SERCOM0_PAD0             4  /**< \brief SERCOM0 signal: PAD0 on PA04 mux D */

+#define MUX_PA04D_SERCOM0_PAD0             3

+#define PINMUX_PA04D_SERCOM0_PAD0  ((PIN_PA04D_SERCOM0_PAD0 << 16) | MUX_PA04D_SERCOM0_PAD0)

+#define PORT_PA04D_SERCOM0_PAD0    (1u <<  4)

+#define PIN_PA08C_SERCOM0_PAD0             8  /**< \brief SERCOM0 signal: PAD0 on PA08 mux C */

+#define MUX_PA08C_SERCOM0_PAD0             2

+#define PINMUX_PA08C_SERCOM0_PAD0  ((PIN_PA08C_SERCOM0_PAD0 << 16) | MUX_PA08C_SERCOM0_PAD0)

+#define PORT_PA08C_SERCOM0_PAD0    (1u <<  8)

+#define PIN_PA05D_SERCOM0_PAD1             5  /**< \brief SERCOM0 signal: PAD1 on PA05 mux D */

+#define MUX_PA05D_SERCOM0_PAD1             3

+#define PINMUX_PA05D_SERCOM0_PAD1  ((PIN_PA05D_SERCOM0_PAD1 << 16) | MUX_PA05D_SERCOM0_PAD1)

+#define PORT_PA05D_SERCOM0_PAD1    (1u <<  5)

+#define PIN_PA09C_SERCOM0_PAD1             9  /**< \brief SERCOM0 signal: PAD1 on PA09 mux C */

+#define MUX_PA09C_SERCOM0_PAD1             2

+#define PINMUX_PA09C_SERCOM0_PAD1  ((PIN_PA09C_SERCOM0_PAD1 << 16) | MUX_PA09C_SERCOM0_PAD1)

+#define PORT_PA09C_SERCOM0_PAD1    (1u <<  9)

+#define PIN_PA06D_SERCOM0_PAD2             6  /**< \brief SERCOM0 signal: PAD2 on PA06 mux D */

+#define MUX_PA06D_SERCOM0_PAD2             3

+#define PINMUX_PA06D_SERCOM0_PAD2  ((PIN_PA06D_SERCOM0_PAD2 << 16) | MUX_PA06D_SERCOM0_PAD2)

+#define PORT_PA06D_SERCOM0_PAD2    (1u <<  6)

+#define PIN_PA10C_SERCOM0_PAD2            10  /**< \brief SERCOM0 signal: PAD2 on PA10 mux C */

+#define MUX_PA10C_SERCOM0_PAD2             2

+#define PINMUX_PA10C_SERCOM0_PAD2  ((PIN_PA10C_SERCOM0_PAD2 << 16) | MUX_PA10C_SERCOM0_PAD2)

+#define PORT_PA10C_SERCOM0_PAD2    (1u << 10)

+#define PIN_PA07D_SERCOM0_PAD3             7  /**< \brief SERCOM0 signal: PAD3 on PA07 mux D */

+#define MUX_PA07D_SERCOM0_PAD3             3

+#define PINMUX_PA07D_SERCOM0_PAD3  ((PIN_PA07D_SERCOM0_PAD3 << 16) | MUX_PA07D_SERCOM0_PAD3)

+#define PORT_PA07D_SERCOM0_PAD3    (1u <<  7)

+#define PIN_PA11C_SERCOM0_PAD3            11  /**< \brief SERCOM0 signal: PAD3 on PA11 mux C */

+#define MUX_PA11C_SERCOM0_PAD3             2

+#define PINMUX_PA11C_SERCOM0_PAD3  ((PIN_PA11C_SERCOM0_PAD3 << 16) | MUX_PA11C_SERCOM0_PAD3)

+#define PORT_PA11C_SERCOM0_PAD3    (1u << 11)

+/* ========== PORT definition for SERCOM1 peripheral ========== */

+#define PIN_PA16C_SERCOM1_PAD0            16  /**< \brief SERCOM1 signal: PAD0 on PA16 mux C */

+#define MUX_PA16C_SERCOM1_PAD0             2

+#define PINMUX_PA16C_SERCOM1_PAD0  ((PIN_PA16C_SERCOM1_PAD0 << 16) | MUX_PA16C_SERCOM1_PAD0)

+#define PORT_PA16C_SERCOM1_PAD0    (1u << 16)

+#define PIN_PA00D_SERCOM1_PAD0             0  /**< \brief SERCOM1 signal: PAD0 on PA00 mux D */

+#define MUX_PA00D_SERCOM1_PAD0             3

+#define PINMUX_PA00D_SERCOM1_PAD0  ((PIN_PA00D_SERCOM1_PAD0 << 16) | MUX_PA00D_SERCOM1_PAD0)

+#define PORT_PA00D_SERCOM1_PAD0    (1u <<  0)

+#define PIN_PA17C_SERCOM1_PAD1            17  /**< \brief SERCOM1 signal: PAD1 on PA17 mux C */

+#define MUX_PA17C_SERCOM1_PAD1             2

+#define PINMUX_PA17C_SERCOM1_PAD1  ((PIN_PA17C_SERCOM1_PAD1 << 16) | MUX_PA17C_SERCOM1_PAD1)

+#define PORT_PA17C_SERCOM1_PAD1    (1u << 17)

+#define PIN_PA01D_SERCOM1_PAD1             1  /**< \brief SERCOM1 signal: PAD1 on PA01 mux D */

+#define MUX_PA01D_SERCOM1_PAD1             3

+#define PINMUX_PA01D_SERCOM1_PAD1  ((PIN_PA01D_SERCOM1_PAD1 << 16) | MUX_PA01D_SERCOM1_PAD1)

+#define PORT_PA01D_SERCOM1_PAD1    (1u <<  1)

+#define PIN_PA30D_SERCOM1_PAD2            30  /**< \brief SERCOM1 signal: PAD2 on PA30 mux D */

+#define MUX_PA30D_SERCOM1_PAD2             3

+#define PINMUX_PA30D_SERCOM1_PAD2  ((PIN_PA30D_SERCOM1_PAD2 << 16) | MUX_PA30D_SERCOM1_PAD2)

+#define PORT_PA30D_SERCOM1_PAD2    (1u << 30)

+#define PIN_PA18C_SERCOM1_PAD2            18  /**< \brief SERCOM1 signal: PAD2 on PA18 mux C */

+#define MUX_PA18C_SERCOM1_PAD2             2

+#define PINMUX_PA18C_SERCOM1_PAD2  ((PIN_PA18C_SERCOM1_PAD2 << 16) | MUX_PA18C_SERCOM1_PAD2)

+#define PORT_PA18C_SERCOM1_PAD2    (1u << 18)

+#define PIN_PA31D_SERCOM1_PAD3            31  /**< \brief SERCOM1 signal: PAD3 on PA31 mux D */

+#define MUX_PA31D_SERCOM1_PAD3             3

+#define PINMUX_PA31D_SERCOM1_PAD3  ((PIN_PA31D_SERCOM1_PAD3 << 16) | MUX_PA31D_SERCOM1_PAD3)

+#define PORT_PA31D_SERCOM1_PAD3    (1u << 31)

+#define PIN_PA19C_SERCOM1_PAD3            19  /**< \brief SERCOM1 signal: PAD3 on PA19 mux C */

+#define MUX_PA19C_SERCOM1_PAD3             2

+#define PINMUX_PA19C_SERCOM1_PAD3  ((PIN_PA19C_SERCOM1_PAD3 << 16) | MUX_PA19C_SERCOM1_PAD3)

+#define PORT_PA19C_SERCOM1_PAD3    (1u << 19)

+/* ========== PORT definition for SERCOM2 peripheral ========== */

+#define PIN_PA08D_SERCOM2_PAD0             8  /**< \brief SERCOM2 signal: PAD0 on PA08 mux D */

+#define MUX_PA08D_SERCOM2_PAD0             3

+#define PINMUX_PA08D_SERCOM2_PAD0  ((PIN_PA08D_SERCOM2_PAD0 << 16) | MUX_PA08D_SERCOM2_PAD0)

+#define PORT_PA08D_SERCOM2_PAD0    (1u <<  8)

+#define PIN_PA09D_SERCOM2_PAD1             9  /**< \brief SERCOM2 signal: PAD1 on PA09 mux D */

+#define MUX_PA09D_SERCOM2_PAD1             3

+#define PINMUX_PA09D_SERCOM2_PAD1  ((PIN_PA09D_SERCOM2_PAD1 << 16) | MUX_PA09D_SERCOM2_PAD1)

+#define PORT_PA09D_SERCOM2_PAD1    (1u <<  9)

+#define PIN_PA10D_SERCOM2_PAD2            10  /**< \brief SERCOM2 signal: PAD2 on PA10 mux D */

+#define MUX_PA10D_SERCOM2_PAD2             3

+#define PINMUX_PA10D_SERCOM2_PAD2  ((PIN_PA10D_SERCOM2_PAD2 << 16) | MUX_PA10D_SERCOM2_PAD2)

+#define PORT_PA10D_SERCOM2_PAD2    (1u << 10)

+#define PIN_PA14C_SERCOM2_PAD2            14  /**< \brief SERCOM2 signal: PAD2 on PA14 mux C */

+#define MUX_PA14C_SERCOM2_PAD2             2

+#define PINMUX_PA14C_SERCOM2_PAD2  ((PIN_PA14C_SERCOM2_PAD2 << 16) | MUX_PA14C_SERCOM2_PAD2)

+#define PORT_PA14C_SERCOM2_PAD2    (1u << 14)

+#define PIN_PA11D_SERCOM2_PAD3            11  /**< \brief SERCOM2 signal: PAD3 on PA11 mux D */

+#define MUX_PA11D_SERCOM2_PAD3             3

+#define PINMUX_PA11D_SERCOM2_PAD3  ((PIN_PA11D_SERCOM2_PAD3 << 16) | MUX_PA11D_SERCOM2_PAD3)

+#define PORT_PA11D_SERCOM2_PAD3    (1u << 11)

+#define PIN_PA15C_SERCOM2_PAD3            15  /**< \brief SERCOM2 signal: PAD3 on PA15 mux C */

+#define MUX_PA15C_SERCOM2_PAD3             2

+#define PINMUX_PA15C_SERCOM2_PAD3  ((PIN_PA15C_SERCOM2_PAD3 << 16) | MUX_PA15C_SERCOM2_PAD3)

+#define PORT_PA15C_SERCOM2_PAD3    (1u << 15)

+/* ========== PORT definition for SERCOM3 peripheral ========== */

+#define PIN_PA16D_SERCOM3_PAD0            16  /**< \brief SERCOM3 signal: PAD0 on PA16 mux D */

+#define MUX_PA16D_SERCOM3_PAD0             3

+#define PINMUX_PA16D_SERCOM3_PAD0  ((PIN_PA16D_SERCOM3_PAD0 << 16) | MUX_PA16D_SERCOM3_PAD0)

+#define PORT_PA16D_SERCOM3_PAD0    (1u << 16)

+#define PIN_PA22C_SERCOM3_PAD0            22  /**< \brief SERCOM3 signal: PAD0 on PA22 mux C */

+#define MUX_PA22C_SERCOM3_PAD0             2

+#define PINMUX_PA22C_SERCOM3_PAD0  ((PIN_PA22C_SERCOM3_PAD0 << 16) | MUX_PA22C_SERCOM3_PAD0)

+#define PORT_PA22C_SERCOM3_PAD0    (1u << 22)

+#define PIN_PA17D_SERCOM3_PAD1            17  /**< \brief SERCOM3 signal: PAD1 on PA17 mux D */

+#define MUX_PA17D_SERCOM3_PAD1             3

+#define PINMUX_PA17D_SERCOM3_PAD1  ((PIN_PA17D_SERCOM3_PAD1 << 16) | MUX_PA17D_SERCOM3_PAD1)

+#define PORT_PA17D_SERCOM3_PAD1    (1u << 17)

+#define PIN_PA23C_SERCOM3_PAD1            23  /**< \brief SERCOM3 signal: PAD1 on PA23 mux C */

+#define MUX_PA23C_SERCOM3_PAD1             2

+#define PINMUX_PA23C_SERCOM3_PAD1  ((PIN_PA23C_SERCOM3_PAD1 << 16) | MUX_PA23C_SERCOM3_PAD1)

+#define PORT_PA23C_SERCOM3_PAD1    (1u << 23)

+#define PIN_PA18D_SERCOM3_PAD2            18  /**< \brief SERCOM3 signal: PAD2 on PA18 mux D */

+#define MUX_PA18D_SERCOM3_PAD2             3

+#define PINMUX_PA18D_SERCOM3_PAD2  ((PIN_PA18D_SERCOM3_PAD2 << 16) | MUX_PA18D_SERCOM3_PAD2)

+#define PORT_PA18D_SERCOM3_PAD2    (1u << 18)

+#define PIN_PA24C_SERCOM3_PAD2            24  /**< \brief SERCOM3 signal: PAD2 on PA24 mux C */

+#define MUX_PA24C_SERCOM3_PAD2             2

+#define PINMUX_PA24C_SERCOM3_PAD2  ((PIN_PA24C_SERCOM3_PAD2 << 16) | MUX_PA24C_SERCOM3_PAD2)

+#define PORT_PA24C_SERCOM3_PAD2    (1u << 24)

+#define PIN_PA19D_SERCOM3_PAD3            19  /**< \brief SERCOM3 signal: PAD3 on PA19 mux D */

+#define MUX_PA19D_SERCOM3_PAD3             3

+#define PINMUX_PA19D_SERCOM3_PAD3  ((PIN_PA19D_SERCOM3_PAD3 << 16) | MUX_PA19D_SERCOM3_PAD3)

+#define PORT_PA19D_SERCOM3_PAD3    (1u << 19)

+#define PIN_PA25C_SERCOM3_PAD3            25  /**< \brief SERCOM3 signal: PAD3 on PA25 mux C */

+#define MUX_PA25C_SERCOM3_PAD3             2

+#define PINMUX_PA25C_SERCOM3_PAD3  ((PIN_PA25C_SERCOM3_PAD3 << 16) | MUX_PA25C_SERCOM3_PAD3)

+#define PORT_PA25C_SERCOM3_PAD3    (1u << 25)

+/* ========== PORT definition for TC0 peripheral ========== */

+#define PIN_PA04F_TC0_WO0                  4  /**< \brief TC0 signal: WO0 on PA04 mux F */

+#define MUX_PA04F_TC0_WO0                  5

+#define PINMUX_PA04F_TC0_WO0       ((PIN_PA04F_TC0_WO0 << 16) | MUX_PA04F_TC0_WO0)

+#define PORT_PA04F_TC0_WO0         (1u <<  4)

+#define PIN_PA08E_TC0_WO0                  8  /**< \brief TC0 signal: WO0 on PA08 mux E */

+#define MUX_PA08E_TC0_WO0                  4

+#define PINMUX_PA08E_TC0_WO0       ((PIN_PA08E_TC0_WO0 << 16) | MUX_PA08E_TC0_WO0)

+#define PORT_PA08E_TC0_WO0         (1u <<  8)

+#define PIN_PA05F_TC0_WO1                  5  /**< \brief TC0 signal: WO1 on PA05 mux F */

+#define MUX_PA05F_TC0_WO1                  5

+#define PINMUX_PA05F_TC0_WO1       ((PIN_PA05F_TC0_WO1 << 16) | MUX_PA05F_TC0_WO1)

+#define PORT_PA05F_TC0_WO1         (1u <<  5)

+#define PIN_PA09E_TC0_WO1                  9  /**< \brief TC0 signal: WO1 on PA09 mux E */

+#define MUX_PA09E_TC0_WO1                  4

+#define PINMUX_PA09E_TC0_WO1       ((PIN_PA09E_TC0_WO1 << 16) | MUX_PA09E_TC0_WO1)

+#define PORT_PA09E_TC0_WO1         (1u <<  9)

+/* ========== PORT definition for TC1 peripheral ========== */

+#define PIN_PA06F_TC1_WO0                  6  /**< \brief TC1 signal: WO0 on PA06 mux F */

+#define MUX_PA06F_TC1_WO0                  5

+#define PINMUX_PA06F_TC1_WO0       ((PIN_PA06F_TC1_WO0 << 16) | MUX_PA06F_TC1_WO0)

+#define PORT_PA06F_TC1_WO0         (1u <<  6)

+#define PIN_PA30F_TC1_WO0                 30  /**< \brief TC1 signal: WO0 on PA30 mux F */

+#define MUX_PA30F_TC1_WO0                  5

+#define PINMUX_PA30F_TC1_WO0       ((PIN_PA30F_TC1_WO0 << 16) | MUX_PA30F_TC1_WO0)

+#define PORT_PA30F_TC1_WO0         (1u << 30)

+#define PIN_PA10E_TC1_WO0                 10  /**< \brief TC1 signal: WO0 on PA10 mux E */

+#define MUX_PA10E_TC1_WO0                  4

+#define PINMUX_PA10E_TC1_WO0       ((PIN_PA10E_TC1_WO0 << 16) | MUX_PA10E_TC1_WO0)

+#define PORT_PA10E_TC1_WO0         (1u << 10)

+#define PIN_PA07F_TC1_WO1                  7  /**< \brief TC1 signal: WO1 on PA07 mux F */

+#define MUX_PA07F_TC1_WO1                  5

+#define PINMUX_PA07F_TC1_WO1       ((PIN_PA07F_TC1_WO1 << 16) | MUX_PA07F_TC1_WO1)

+#define PORT_PA07F_TC1_WO1         (1u <<  7)

+#define PIN_PA31F_TC1_WO1                 31  /**< \brief TC1 signal: WO1 on PA31 mux F */

+#define MUX_PA31F_TC1_WO1                  5

+#define PINMUX_PA31F_TC1_WO1       ((PIN_PA31F_TC1_WO1 << 16) | MUX_PA31F_TC1_WO1)

+#define PORT_PA31F_TC1_WO1         (1u << 31)

+#define PIN_PA11E_TC1_WO1                 11  /**< \brief TC1 signal: WO1 on PA11 mux E */

+#define MUX_PA11E_TC1_WO1                  4

+#define PINMUX_PA11E_TC1_WO1       ((PIN_PA11E_TC1_WO1 << 16) | MUX_PA11E_TC1_WO1)

+#define PORT_PA11E_TC1_WO1         (1u << 11)

+/* ========== PORT definition for TC2 peripheral ========== */

+#define PIN_PA16F_TC2_WO0                 16  /**< \brief TC2 signal: WO0 on PA16 mux F */

+#define MUX_PA16F_TC2_WO0                  5

+#define PINMUX_PA16F_TC2_WO0       ((PIN_PA16F_TC2_WO0 << 16) | MUX_PA16F_TC2_WO0)

+#define PORT_PA16F_TC2_WO0         (1u << 16)

+#define PIN_PA00F_TC2_WO0                  0  /**< \brief TC2 signal: WO0 on PA00 mux F */

+#define MUX_PA00F_TC2_WO0                  5

+#define PINMUX_PA00F_TC2_WO0       ((PIN_PA00F_TC2_WO0 << 16) | MUX_PA00F_TC2_WO0)

+#define PORT_PA00F_TC2_WO0         (1u <<  0)

+#define PIN_PA17F_TC2_WO1                 17  /**< \brief TC2 signal: WO1 on PA17 mux F */

+#define MUX_PA17F_TC2_WO1                  5

+#define PINMUX_PA17F_TC2_WO1       ((PIN_PA17F_TC2_WO1 << 16) | MUX_PA17F_TC2_WO1)

+#define PORT_PA17F_TC2_WO1         (1u << 17)

+#define PIN_PA01F_TC2_WO1                  1  /**< \brief TC2 signal: WO1 on PA01 mux F */

+#define MUX_PA01F_TC2_WO1                  5

+#define PINMUX_PA01F_TC2_WO1       ((PIN_PA01F_TC2_WO1 << 16) | MUX_PA01F_TC2_WO1)

+#define PORT_PA01F_TC2_WO1         (1u <<  1)

+/* ========== PORT definition for TC3 peripheral ========== */

+#define PIN_PA18F_TC3_WO0                 18  /**< \brief TC3 signal: WO0 on PA18 mux F */

+#define MUX_PA18F_TC3_WO0                  5

+#define PINMUX_PA18F_TC3_WO0       ((PIN_PA18F_TC3_WO0 << 16) | MUX_PA18F_TC3_WO0)

+#define PORT_PA18F_TC3_WO0         (1u << 18)

+#define PIN_PA14E_TC3_WO0                 14  /**< \brief TC3 signal: WO0 on PA14 mux E */

+#define MUX_PA14E_TC3_WO0                  4

+#define PINMUX_PA14E_TC3_WO0       ((PIN_PA14E_TC3_WO0 << 16) | MUX_PA14E_TC3_WO0)

+#define PORT_PA14E_TC3_WO0         (1u << 14)

+#define PIN_PA19F_TC3_WO1                 19  /**< \brief TC3 signal: WO1 on PA19 mux F */

+#define MUX_PA19F_TC3_WO1                  5

+#define PINMUX_PA19F_TC3_WO1       ((PIN_PA19F_TC3_WO1 << 16) | MUX_PA19F_TC3_WO1)

+#define PORT_PA19F_TC3_WO1         (1u << 19)

+#define PIN_PA15E_TC3_WO1                 15  /**< \brief TC3 signal: WO1 on PA15 mux E */

+#define MUX_PA15E_TC3_WO1                  4

+#define PINMUX_PA15E_TC3_WO1       ((PIN_PA15E_TC3_WO1 << 16) | MUX_PA15E_TC3_WO1)

+#define PORT_PA15E_TC3_WO1         (1u << 15)

+/* ========== PORT definition for TC4 peripheral ========== */

+#define PIN_PA22F_TC4_WO0                 22  /**< \brief TC4 signal: WO0 on PA22 mux F */

+#define MUX_PA22F_TC4_WO0                  5

+#define PINMUX_PA22F_TC4_WO0       ((PIN_PA22F_TC4_WO0 << 16) | MUX_PA22F_TC4_WO0)

+#define PORT_PA22F_TC4_WO0         (1u << 22)

+#define PIN_PA23F_TC4_WO1                 23  /**< \brief TC4 signal: WO1 on PA23 mux F */

+#define MUX_PA23F_TC4_WO1                  5

+#define PINMUX_PA23F_TC4_WO1       ((PIN_PA23F_TC4_WO1 << 16) | MUX_PA23F_TC4_WO1)

+#define PORT_PA23F_TC4_WO1         (1u << 23)

+/* ========== PORT definition for TC5 peripheral ========== */

+#define PIN_PA24F_TC5_WO0                 24  /**< \brief TC5 signal: WO0 on PA24 mux F */

+#define MUX_PA24F_TC5_WO0                  5

+#define PINMUX_PA24F_TC5_WO0       ((PIN_PA24F_TC5_WO0 << 16) | MUX_PA24F_TC5_WO0)

+#define PORT_PA24F_TC5_WO0         (1u << 24)

+#define PIN_PA25F_TC5_WO1                 25  /**< \brief TC5 signal: WO1 on PA25 mux F */

+#define MUX_PA25F_TC5_WO1                  5

+#define PINMUX_PA25F_TC5_WO1       ((PIN_PA25F_TC5_WO1 << 16) | MUX_PA25F_TC5_WO1)

+#define PORT_PA25F_TC5_WO1         (1u << 25)

+/* ========== PORT definition for ADC peripheral ========== */

+#define PIN_PA02B_ADC_AIN0                 2  /**< \brief ADC signal: AIN0 on PA02 mux B */

+#define MUX_PA02B_ADC_AIN0                 1

+#define PINMUX_PA02B_ADC_AIN0      ((PIN_PA02B_ADC_AIN0 << 16) | MUX_PA02B_ADC_AIN0)

+#define PORT_PA02B_ADC_AIN0        (1u <<  2)

+#define PIN_PA03B_ADC_AIN1                 3  /**< \brief ADC signal: AIN1 on PA03 mux B */

+#define MUX_PA03B_ADC_AIN1                 1

+#define PINMUX_PA03B_ADC_AIN1      ((PIN_PA03B_ADC_AIN1 << 16) | MUX_PA03B_ADC_AIN1)

+#define PORT_PA03B_ADC_AIN1        (1u <<  3)

+#define PIN_PA04B_ADC_AIN4                 4  /**< \brief ADC signal: AIN4 on PA04 mux B */

+#define MUX_PA04B_ADC_AIN4                 1

+#define PINMUX_PA04B_ADC_AIN4      ((PIN_PA04B_ADC_AIN4 << 16) | MUX_PA04B_ADC_AIN4)

+#define PORT_PA04B_ADC_AIN4        (1u <<  4)

+#define PIN_PA05B_ADC_AIN5                 5  /**< \brief ADC signal: AIN5 on PA05 mux B */

+#define MUX_PA05B_ADC_AIN5                 1

+#define PINMUX_PA05B_ADC_AIN5      ((PIN_PA05B_ADC_AIN5 << 16) | MUX_PA05B_ADC_AIN5)

+#define PORT_PA05B_ADC_AIN5        (1u <<  5)

+#define PIN_PA06B_ADC_AIN6                 6  /**< \brief ADC signal: AIN6 on PA06 mux B */

+#define MUX_PA06B_ADC_AIN6                 1

+#define PINMUX_PA06B_ADC_AIN6      ((PIN_PA06B_ADC_AIN6 << 16) | MUX_PA06B_ADC_AIN6)

+#define PORT_PA06B_ADC_AIN6        (1u <<  6)

+#define PIN_PA07B_ADC_AIN7                 7  /**< \brief ADC signal: AIN7 on PA07 mux B */

+#define MUX_PA07B_ADC_AIN7                 1

+#define PINMUX_PA07B_ADC_AIN7      ((PIN_PA07B_ADC_AIN7 << 16) | MUX_PA07B_ADC_AIN7)

+#define PORT_PA07B_ADC_AIN7        (1u <<  7)

+#define PIN_PA08B_ADC_AIN16                8  /**< \brief ADC signal: AIN16 on PA08 mux B */

+#define MUX_PA08B_ADC_AIN16                1

+#define PINMUX_PA08B_ADC_AIN16     ((PIN_PA08B_ADC_AIN16 << 16) | MUX_PA08B_ADC_AIN16)

+#define PORT_PA08B_ADC_AIN16       (1u <<  8)

+#define PIN_PA09B_ADC_AIN17                9  /**< \brief ADC signal: AIN17 on PA09 mux B */

+#define MUX_PA09B_ADC_AIN17                1

+#define PINMUX_PA09B_ADC_AIN17     ((PIN_PA09B_ADC_AIN17 << 16) | MUX_PA09B_ADC_AIN17)

+#define PORT_PA09B_ADC_AIN17       (1u <<  9)

+#define PIN_PA10B_ADC_AIN18               10  /**< \brief ADC signal: AIN18 on PA10 mux B */

+#define MUX_PA10B_ADC_AIN18                1

+#define PINMUX_PA10B_ADC_AIN18     ((PIN_PA10B_ADC_AIN18 << 16) | MUX_PA10B_ADC_AIN18)

+#define PORT_PA10B_ADC_AIN18       (1u << 10)

+#define PIN_PA11B_ADC_AIN19               11  /**< \brief ADC signal: AIN19 on PA11 mux B */

+#define MUX_PA11B_ADC_AIN19                1

+#define PINMUX_PA11B_ADC_AIN19     ((PIN_PA11B_ADC_AIN19 << 16) | MUX_PA11B_ADC_AIN19)

+#define PORT_PA11B_ADC_AIN19       (1u << 11)

+#define PIN_PA04B_ADC_VREFP                4  /**< \brief ADC signal: VREFP on PA04 mux B */

+#define MUX_PA04B_ADC_VREFP                1

+#define PINMUX_PA04B_ADC_VREFP     ((PIN_PA04B_ADC_VREFP << 16) | MUX_PA04B_ADC_VREFP)

+#define PORT_PA04B_ADC_VREFP       (1u <<  4)

+/* ========== PORT definition for AC peripheral ========== */

+#define PIN_PA04B_AC_AIN0                  4  /**< \brief AC signal: AIN0 on PA04 mux B */

+#define MUX_PA04B_AC_AIN0                  1

+#define PINMUX_PA04B_AC_AIN0       ((PIN_PA04B_AC_AIN0 << 16) | MUX_PA04B_AC_AIN0)

+#define PORT_PA04B_AC_AIN0         (1u <<  4)

+#define PIN_PA05B_AC_AIN1                  5  /**< \brief AC signal: AIN1 on PA05 mux B */

+#define MUX_PA05B_AC_AIN1                  1

+#define PINMUX_PA05B_AC_AIN1       ((PIN_PA05B_AC_AIN1 << 16) | MUX_PA05B_AC_AIN1)

+#define PORT_PA05B_AC_AIN1         (1u <<  5)

+#define PIN_PA06B_AC_AIN2                  6  /**< \brief AC signal: AIN2 on PA06 mux B */

+#define MUX_PA06B_AC_AIN2                  1

+#define PINMUX_PA06B_AC_AIN2       ((PIN_PA06B_AC_AIN2 << 16) | MUX_PA06B_AC_AIN2)

+#define PORT_PA06B_AC_AIN2         (1u <<  6)

+#define PIN_PA07B_AC_AIN3                  7  /**< \brief AC signal: AIN3 on PA07 mux B */

+#define MUX_PA07B_AC_AIN3                  1

+#define PINMUX_PA07B_AC_AIN3       ((PIN_PA07B_AC_AIN3 << 16) | MUX_PA07B_AC_AIN3)

+#define PORT_PA07B_AC_AIN3         (1u <<  7)

+#define PIN_PA18H_AC_CMP0                 18  /**< \brief AC signal: CMP0 on PA18 mux H */

+#define MUX_PA18H_AC_CMP0                  7

+#define PINMUX_PA18H_AC_CMP0       ((PIN_PA18H_AC_CMP0 << 16) | MUX_PA18H_AC_CMP0)

+#define PORT_PA18H_AC_CMP0         (1u << 18)

+#define PIN_PA19H_AC_CMP1                 19  /**< \brief AC signal: CMP1 on PA19 mux H */

+#define MUX_PA19H_AC_CMP1                  7

+#define PINMUX_PA19H_AC_CMP1       ((PIN_PA19H_AC_CMP1 << 16) | MUX_PA19H_AC_CMP1)

+#define PORT_PA19H_AC_CMP1         (1u << 19)

+/* ========== PORT definition for DAC peripheral ========== */

+#define PIN_PA02B_DAC_VOUT                 2  /**< \brief DAC signal: VOUT on PA02 mux B */

+#define MUX_PA02B_DAC_VOUT                 1

+#define PINMUX_PA02B_DAC_VOUT      ((PIN_PA02B_DAC_VOUT << 16) | MUX_PA02B_DAC_VOUT)

+#define PORT_PA02B_DAC_VOUT        (1u <<  2)

+#define PIN_PA03B_DAC_VREFP                3  /**< \brief DAC signal: VREFP on PA03 mux B */

+#define MUX_PA03B_DAC_VREFP                1

+#define PINMUX_PA03B_DAC_VREFP     ((PIN_PA03B_DAC_VREFP << 16) | MUX_PA03B_DAC_VREFP)

+#define PORT_PA03B_DAC_VREFP       (1u <<  3)

+

+#endif /* _SAMD20E15_PIO_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20e16.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20e16.h
new file mode 100644
index 0000000..f2e5e4d
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20e16.h
@@ -0,0 +1,552 @@
+/**

+ * \file

+ *

+ * \brief Peripheral I/O description for SAMD20E16

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20E16_PIO_

+#define _SAMD20E16_PIO_

+

+#define PIN_PA00                           0  /**< \brief Pin Number for PA00 */

+#define PORT_PA00                  (1u <<  0) /**< \brief PORT Mask  for PA00 */

+#define PIN_PA01                           1  /**< \brief Pin Number for PA01 */

+#define PORT_PA01                  (1u <<  1) /**< \brief PORT Mask  for PA01 */

+#define PIN_PA02                           2  /**< \brief Pin Number for PA02 */

+#define PORT_PA02                  (1u <<  2) /**< \brief PORT Mask  for PA02 */

+#define PIN_PA03                           3  /**< \brief Pin Number for PA03 */

+#define PORT_PA03                  (1u <<  3) /**< \brief PORT Mask  for PA03 */

+#define PIN_PA04                           4  /**< \brief Pin Number for PA04 */

+#define PORT_PA04                  (1u <<  4) /**< \brief PORT Mask  for PA04 */

+#define PIN_PA05                           5  /**< \brief Pin Number for PA05 */

+#define PORT_PA05                  (1u <<  5) /**< \brief PORT Mask  for PA05 */

+#define PIN_PA06                           6  /**< \brief Pin Number for PA06 */

+#define PORT_PA06                  (1u <<  6) /**< \brief PORT Mask  for PA06 */

+#define PIN_PA07                           7  /**< \brief Pin Number for PA07 */

+#define PORT_PA07                  (1u <<  7) /**< \brief PORT Mask  for PA07 */

+#define PIN_PA08                           8  /**< \brief Pin Number for PA08 */

+#define PORT_PA08                  (1u <<  8) /**< \brief PORT Mask  for PA08 */

+#define PIN_PA09                           9  /**< \brief Pin Number for PA09 */

+#define PORT_PA09                  (1u <<  9) /**< \brief PORT Mask  for PA09 */

+#define PIN_PA10                          10  /**< \brief Pin Number for PA10 */

+#define PORT_PA10                  (1u << 10) /**< \brief PORT Mask  for PA10 */

+#define PIN_PA11                          11  /**< \brief Pin Number for PA11 */

+#define PORT_PA11                  (1u << 11) /**< \brief PORT Mask  for PA11 */

+#define PIN_PA14                          14  /**< \brief Pin Number for PA14 */

+#define PORT_PA14                  (1u << 14) /**< \brief PORT Mask  for PA14 */

+#define PIN_PA15                          15  /**< \brief Pin Number for PA15 */

+#define PORT_PA15                  (1u << 15) /**< \brief PORT Mask  for PA15 */

+#define PIN_PA16                          16  /**< \brief Pin Number for PA16 */

+#define PORT_PA16                  (1u << 16) /**< \brief PORT Mask  for PA16 */

+#define PIN_PA17                          17  /**< \brief Pin Number for PA17 */

+#define PORT_PA17                  (1u << 17) /**< \brief PORT Mask  for PA17 */

+#define PIN_PA18                          18  /**< \brief Pin Number for PA18 */

+#define PORT_PA18                  (1u << 18) /**< \brief PORT Mask  for PA18 */

+#define PIN_PA19                          19  /**< \brief Pin Number for PA19 */

+#define PORT_PA19                  (1u << 19) /**< \brief PORT Mask  for PA19 */

+#define PIN_PA22                          22  /**< \brief Pin Number for PA22 */

+#define PORT_PA22                  (1u << 22) /**< \brief PORT Mask  for PA22 */

+#define PIN_PA23                          23  /**< \brief Pin Number for PA23 */

+#define PORT_PA23                  (1u << 23) /**< \brief PORT Mask  for PA23 */

+#define PIN_PA24                          24  /**< \brief Pin Number for PA24 */

+#define PORT_PA24                  (1u << 24) /**< \brief PORT Mask  for PA24 */

+#define PIN_PA25                          25  /**< \brief Pin Number for PA25 */

+#define PORT_PA25                  (1u << 25) /**< \brief PORT Mask  for PA25 */

+#define PIN_PA27                          27  /**< \brief Pin Number for PA27 */

+#define PORT_PA27                  (1u << 27) /**< \brief PORT Mask  for PA27 */

+#define PIN_PA28                          28  /**< \brief Pin Number for PA28 */

+#define PORT_PA28                  (1u << 28) /**< \brief PORT Mask  for PA28 */

+#define PIN_PA30                          30  /**< \brief Pin Number for PA30 */

+#define PORT_PA30                  (1u << 30) /**< \brief PORT Mask  for PA30 */

+#define PIN_PA31                          31  /**< \brief Pin Number for PA31 */

+#define PORT_PA31                  (1u << 31) /**< \brief PORT Mask  for PA31 */

+/* ========== PORT definition for CORE peripheral ========== */

+#define PIN_PA30G_CORE_SWCLK              30  /**< \brief CORE signal: SWCLK on PA30 mux G */

+#define MUX_PA30G_CORE_SWCLK               6

+#define PINMUX_PA30G_CORE_SWCLK    ((PIN_PA30G_CORE_SWCLK << 16) | MUX_PA30G_CORE_SWCLK)

+#define PORT_PA30G_CORE_SWCLK      (1u << 30)

+/* ========== PORT definition for GCLK peripheral ========== */

+#define PIN_PA14H_GCLK_IO0                14  /**< \brief GCLK signal: IO0 on PA14 mux H */

+#define MUX_PA14H_GCLK_IO0                 7

+#define PINMUX_PA14H_GCLK_IO0      ((PIN_PA14H_GCLK_IO0 << 16) | MUX_PA14H_GCLK_IO0)

+#define PORT_PA14H_GCLK_IO0        (1u << 14)

+#define PIN_PA27H_GCLK_IO0                27  /**< \brief GCLK signal: IO0 on PA27 mux H */

+#define MUX_PA27H_GCLK_IO0                 7

+#define PINMUX_PA27H_GCLK_IO0      ((PIN_PA27H_GCLK_IO0 << 16) | MUX_PA27H_GCLK_IO0)

+#define PORT_PA27H_GCLK_IO0        (1u << 27)

+#define PIN_PA28H_GCLK_IO0                28  /**< \brief GCLK signal: IO0 on PA28 mux H */

+#define MUX_PA28H_GCLK_IO0                 7

+#define PINMUX_PA28H_GCLK_IO0      ((PIN_PA28H_GCLK_IO0 << 16) | MUX_PA28H_GCLK_IO0)

+#define PORT_PA28H_GCLK_IO0        (1u << 28)

+#define PIN_PA30H_GCLK_IO0                30  /**< \brief GCLK signal: IO0 on PA30 mux H */

+#define MUX_PA30H_GCLK_IO0                 7

+#define PINMUX_PA30H_GCLK_IO0      ((PIN_PA30H_GCLK_IO0 << 16) | MUX_PA30H_GCLK_IO0)

+#define PORT_PA30H_GCLK_IO0        (1u << 30)

+#define PIN_PA15H_GCLK_IO1                15  /**< \brief GCLK signal: IO1 on PA15 mux H */

+#define MUX_PA15H_GCLK_IO1                 7

+#define PINMUX_PA15H_GCLK_IO1      ((PIN_PA15H_GCLK_IO1 << 16) | MUX_PA15H_GCLK_IO1)

+#define PORT_PA15H_GCLK_IO1        (1u << 15)

+#define PIN_PA16H_GCLK_IO2                16  /**< \brief GCLK signal: IO2 on PA16 mux H */

+#define MUX_PA16H_GCLK_IO2                 7

+#define PINMUX_PA16H_GCLK_IO2      ((PIN_PA16H_GCLK_IO2 << 16) | MUX_PA16H_GCLK_IO2)

+#define PORT_PA16H_GCLK_IO2        (1u << 16)

+#define PIN_PA17H_GCLK_IO3                17  /**< \brief GCLK signal: IO3 on PA17 mux H */

+#define MUX_PA17H_GCLK_IO3                 7

+#define PINMUX_PA17H_GCLK_IO3      ((PIN_PA17H_GCLK_IO3 << 16) | MUX_PA17H_GCLK_IO3)

+#define PORT_PA17H_GCLK_IO3        (1u << 17)

+#define PIN_PA10H_GCLK_IO4                10  /**< \brief GCLK signal: IO4 on PA10 mux H */

+#define MUX_PA10H_GCLK_IO4                 7

+#define PINMUX_PA10H_GCLK_IO4      ((PIN_PA10H_GCLK_IO4 << 16) | MUX_PA10H_GCLK_IO4)

+#define PORT_PA10H_GCLK_IO4        (1u << 10)

+#define PIN_PA11H_GCLK_IO5                11  /**< \brief GCLK signal: IO5 on PA11 mux H */

+#define MUX_PA11H_GCLK_IO5                 7

+#define PINMUX_PA11H_GCLK_IO5      ((PIN_PA11H_GCLK_IO5 << 16) | MUX_PA11H_GCLK_IO5)

+#define PORT_PA11H_GCLK_IO5        (1u << 11)

+#define PIN_PA22H_GCLK_IO6                22  /**< \brief GCLK signal: IO6 on PA22 mux H */

+#define MUX_PA22H_GCLK_IO6                 7

+#define PINMUX_PA22H_GCLK_IO6      ((PIN_PA22H_GCLK_IO6 << 16) | MUX_PA22H_GCLK_IO6)

+#define PORT_PA22H_GCLK_IO6        (1u << 22)

+#define PIN_PA23H_GCLK_IO7                23  /**< \brief GCLK signal: IO7 on PA23 mux H */

+#define MUX_PA23H_GCLK_IO7                 7

+#define PINMUX_PA23H_GCLK_IO7      ((PIN_PA23H_GCLK_IO7 << 16) | MUX_PA23H_GCLK_IO7)

+#define PORT_PA23H_GCLK_IO7        (1u << 23)

+/* ========== PORT definition for EIC peripheral ========== */

+#define PIN_PA16A_EIC_EXTINT0             16  /**< \brief EIC signal: EXTINT0 on PA16 mux A */

+#define MUX_PA16A_EIC_EXTINT0              0

+#define PINMUX_PA16A_EIC_EXTINT0   ((PIN_PA16A_EIC_EXTINT0 << 16) | MUX_PA16A_EIC_EXTINT0)

+#define PORT_PA16A_EIC_EXTINT0     (1u << 16)

+#define PIN_PA00A_EIC_EXTINT0              0  /**< \brief EIC signal: EXTINT0 on PA00 mux A */

+#define MUX_PA00A_EIC_EXTINT0              0

+#define PINMUX_PA00A_EIC_EXTINT0   ((PIN_PA00A_EIC_EXTINT0 << 16) | MUX_PA00A_EIC_EXTINT0)

+#define PORT_PA00A_EIC_EXTINT0     (1u <<  0)

+#define PIN_PA17A_EIC_EXTINT1             17  /**< \brief EIC signal: EXTINT1 on PA17 mux A */

+#define MUX_PA17A_EIC_EXTINT1              0

+#define PINMUX_PA17A_EIC_EXTINT1   ((PIN_PA17A_EIC_EXTINT1 << 16) | MUX_PA17A_EIC_EXTINT1)

+#define PORT_PA17A_EIC_EXTINT1     (1u << 17)

+#define PIN_PA01A_EIC_EXTINT1              1  /**< \brief EIC signal: EXTINT1 on PA01 mux A */

+#define MUX_PA01A_EIC_EXTINT1              0

+#define PINMUX_PA01A_EIC_EXTINT1   ((PIN_PA01A_EIC_EXTINT1 << 16) | MUX_PA01A_EIC_EXTINT1)

+#define PORT_PA01A_EIC_EXTINT1     (1u <<  1)

+#define PIN_PA02A_EIC_EXTINT2              2  /**< \brief EIC signal: EXTINT2 on PA02 mux A */

+#define MUX_PA02A_EIC_EXTINT2              0

+#define PINMUX_PA02A_EIC_EXTINT2   ((PIN_PA02A_EIC_EXTINT2 << 16) | MUX_PA02A_EIC_EXTINT2)

+#define PORT_PA02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA18A_EIC_EXTINT2             18  /**< \brief EIC signal: EXTINT2 on PA18 mux A */

+#define MUX_PA18A_EIC_EXTINT2              0

+#define PINMUX_PA18A_EIC_EXTINT2   ((PIN_PA18A_EIC_EXTINT2 << 16) | MUX_PA18A_EIC_EXTINT2)

+#define PORT_PA18A_EIC_EXTINT2     (1u << 18)

+#define PIN_PA03A_EIC_EXTINT3              3  /**< \brief EIC signal: EXTINT3 on PA03 mux A */

+#define MUX_PA03A_EIC_EXTINT3              0

+#define PINMUX_PA03A_EIC_EXTINT3   ((PIN_PA03A_EIC_EXTINT3 << 16) | MUX_PA03A_EIC_EXTINT3)

+#define PORT_PA03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA19A_EIC_EXTINT3             19  /**< \brief EIC signal: EXTINT3 on PA19 mux A */

+#define MUX_PA19A_EIC_EXTINT3              0

+#define PINMUX_PA19A_EIC_EXTINT3   ((PIN_PA19A_EIC_EXTINT3 << 16) | MUX_PA19A_EIC_EXTINT3)

+#define PORT_PA19A_EIC_EXTINT3     (1u << 19)

+#define PIN_PA04A_EIC_EXTINT4              4  /**< \brief EIC signal: EXTINT4 on PA04 mux A */

+#define MUX_PA04A_EIC_EXTINT4              0

+#define PINMUX_PA04A_EIC_EXTINT4   ((PIN_PA04A_EIC_EXTINT4 << 16) | MUX_PA04A_EIC_EXTINT4)

+#define PORT_PA04A_EIC_EXTINT4     (1u <<  4)

+#define PIN_PA05A_EIC_EXTINT5              5  /**< \brief EIC signal: EXTINT5 on PA05 mux A */

+#define MUX_PA05A_EIC_EXTINT5              0

+#define PINMUX_PA05A_EIC_EXTINT5   ((PIN_PA05A_EIC_EXTINT5 << 16) | MUX_PA05A_EIC_EXTINT5)

+#define PORT_PA05A_EIC_EXTINT5     (1u <<  5)

+#define PIN_PA06A_EIC_EXTINT6              6  /**< \brief EIC signal: EXTINT6 on PA06 mux A */

+#define MUX_PA06A_EIC_EXTINT6              0

+#define PINMUX_PA06A_EIC_EXTINT6   ((PIN_PA06A_EIC_EXTINT6 << 16) | MUX_PA06A_EIC_EXTINT6)

+#define PORT_PA06A_EIC_EXTINT6     (1u <<  6)

+#define PIN_PA22A_EIC_EXTINT6             22  /**< \brief EIC signal: EXTINT6 on PA22 mux A */

+#define MUX_PA22A_EIC_EXTINT6              0

+#define PINMUX_PA22A_EIC_EXTINT6   ((PIN_PA22A_EIC_EXTINT6 << 16) | MUX_PA22A_EIC_EXTINT6)

+#define PORT_PA22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PA07A_EIC_EXTINT7              7  /**< \brief EIC signal: EXTINT7 on PA07 mux A */

+#define MUX_PA07A_EIC_EXTINT7              0

+#define PINMUX_PA07A_EIC_EXTINT7   ((PIN_PA07A_EIC_EXTINT7 << 16) | MUX_PA07A_EIC_EXTINT7)

+#define PORT_PA07A_EIC_EXTINT7     (1u <<  7)

+#define PIN_PA23A_EIC_EXTINT7             23  /**< \brief EIC signal: EXTINT7 on PA23 mux A */

+#define MUX_PA23A_EIC_EXTINT7              0

+#define PINMUX_PA23A_EIC_EXTINT7   ((PIN_PA23A_EIC_EXTINT7 << 16) | MUX_PA23A_EIC_EXTINT7)

+#define PORT_PA23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PA28A_EIC_EXTINT8             28  /**< \brief EIC signal: EXTINT8 on PA28 mux A */

+#define MUX_PA28A_EIC_EXTINT8              0

+#define PINMUX_PA28A_EIC_EXTINT8   ((PIN_PA28A_EIC_EXTINT8 << 16) | MUX_PA28A_EIC_EXTINT8)

+#define PORT_PA28A_EIC_EXTINT8     (1u << 28)

+#define PIN_PA09A_EIC_EXTINT9              9  /**< \brief EIC signal: EXTINT9 on PA09 mux A */

+#define MUX_PA09A_EIC_EXTINT9              0

+#define PINMUX_PA09A_EIC_EXTINT9   ((PIN_PA09A_EIC_EXTINT9 << 16) | MUX_PA09A_EIC_EXTINT9)

+#define PORT_PA09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PA10A_EIC_EXTINT10            10  /**< \brief EIC signal: EXTINT10 on PA10 mux A */

+#define MUX_PA10A_EIC_EXTINT10             0

+#define PINMUX_PA10A_EIC_EXTINT10  ((PIN_PA10A_EIC_EXTINT10 << 16) | MUX_PA10A_EIC_EXTINT10)

+#define PORT_PA10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA30A_EIC_EXTINT10            30  /**< \brief EIC signal: EXTINT10 on PA30 mux A */

+#define MUX_PA30A_EIC_EXTINT10             0

+#define PINMUX_PA30A_EIC_EXTINT10  ((PIN_PA30A_EIC_EXTINT10 << 16) | MUX_PA30A_EIC_EXTINT10)

+#define PORT_PA30A_EIC_EXTINT10    (1u << 30)

+#define PIN_PA11A_EIC_EXTINT11            11  /**< \brief EIC signal: EXTINT11 on PA11 mux A */

+#define MUX_PA11A_EIC_EXTINT11             0

+#define PINMUX_PA11A_EIC_EXTINT11  ((PIN_PA11A_EIC_EXTINT11 << 16) | MUX_PA11A_EIC_EXTINT11)

+#define PORT_PA11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA31A_EIC_EXTINT11            31  /**< \brief EIC signal: EXTINT11 on PA31 mux A */

+#define MUX_PA31A_EIC_EXTINT11             0

+#define PINMUX_PA31A_EIC_EXTINT11  ((PIN_PA31A_EIC_EXTINT11 << 16) | MUX_PA31A_EIC_EXTINT11)

+#define PORT_PA31A_EIC_EXTINT11    (1u << 31)

+#define PIN_PA24A_EIC_EXTINT12            24  /**< \brief EIC signal: EXTINT12 on PA24 mux A */

+#define MUX_PA24A_EIC_EXTINT12             0

+#define PINMUX_PA24A_EIC_EXTINT12  ((PIN_PA24A_EIC_EXTINT12 << 16) | MUX_PA24A_EIC_EXTINT12)

+#define PORT_PA24A_EIC_EXTINT12    (1u << 24)

+#define PIN_PA25A_EIC_EXTINT13            25  /**< \brief EIC signal: EXTINT13 on PA25 mux A */

+#define MUX_PA25A_EIC_EXTINT13             0

+#define PINMUX_PA25A_EIC_EXTINT13  ((PIN_PA25A_EIC_EXTINT13 << 16) | MUX_PA25A_EIC_EXTINT13)

+#define PORT_PA25A_EIC_EXTINT13    (1u << 25)

+#define PIN_PA14A_EIC_EXTINT14            14  /**< \brief EIC signal: EXTINT14 on PA14 mux A */

+#define MUX_PA14A_EIC_EXTINT14             0

+#define PINMUX_PA14A_EIC_EXTINT14  ((PIN_PA14A_EIC_EXTINT14 << 16) | MUX_PA14A_EIC_EXTINT14)

+#define PORT_PA14A_EIC_EXTINT14    (1u << 14)

+#define PIN_PA27A_EIC_EXTINT15            27  /**< \brief EIC signal: EXTINT15 on PA27 mux A */

+#define MUX_PA27A_EIC_EXTINT15             0

+#define PINMUX_PA27A_EIC_EXTINT15  ((PIN_PA27A_EIC_EXTINT15 << 16) | MUX_PA27A_EIC_EXTINT15)

+#define PORT_PA27A_EIC_EXTINT15    (1u << 27)

+#define PIN_PA15A_EIC_EXTINT15            15  /**< \brief EIC signal: EXTINT15 on PA15 mux A */

+#define MUX_PA15A_EIC_EXTINT15             0

+#define PINMUX_PA15A_EIC_EXTINT15  ((PIN_PA15A_EIC_EXTINT15 << 16) | MUX_PA15A_EIC_EXTINT15)

+#define PORT_PA15A_EIC_EXTINT15    (1u << 15)

+#define PIN_PA08A_EIC_NMI                  8  /**< \brief EIC signal: NMI on PA08 mux A */

+#define MUX_PA08A_EIC_NMI                  0

+#define PINMUX_PA08A_EIC_NMI       ((PIN_PA08A_EIC_NMI << 16) | MUX_PA08A_EIC_NMI)

+#define PORT_PA08A_EIC_NMI         (1u <<  8)

+/* ========== PORT definition for SERCOM0 peripheral ========== */

+#define PIN_PA04D_SERCOM0_PAD0             4  /**< \brief SERCOM0 signal: PAD0 on PA04 mux D */

+#define MUX_PA04D_SERCOM0_PAD0             3

+#define PINMUX_PA04D_SERCOM0_PAD0  ((PIN_PA04D_SERCOM0_PAD0 << 16) | MUX_PA04D_SERCOM0_PAD0)

+#define PORT_PA04D_SERCOM0_PAD0    (1u <<  4)

+#define PIN_PA08C_SERCOM0_PAD0             8  /**< \brief SERCOM0 signal: PAD0 on PA08 mux C */

+#define MUX_PA08C_SERCOM0_PAD0             2

+#define PINMUX_PA08C_SERCOM0_PAD0  ((PIN_PA08C_SERCOM0_PAD0 << 16) | MUX_PA08C_SERCOM0_PAD0)

+#define PORT_PA08C_SERCOM0_PAD0    (1u <<  8)

+#define PIN_PA05D_SERCOM0_PAD1             5  /**< \brief SERCOM0 signal: PAD1 on PA05 mux D */

+#define MUX_PA05D_SERCOM0_PAD1             3

+#define PINMUX_PA05D_SERCOM0_PAD1  ((PIN_PA05D_SERCOM0_PAD1 << 16) | MUX_PA05D_SERCOM0_PAD1)

+#define PORT_PA05D_SERCOM0_PAD1    (1u <<  5)

+#define PIN_PA09C_SERCOM0_PAD1             9  /**< \brief SERCOM0 signal: PAD1 on PA09 mux C */

+#define MUX_PA09C_SERCOM0_PAD1             2

+#define PINMUX_PA09C_SERCOM0_PAD1  ((PIN_PA09C_SERCOM0_PAD1 << 16) | MUX_PA09C_SERCOM0_PAD1)

+#define PORT_PA09C_SERCOM0_PAD1    (1u <<  9)

+#define PIN_PA06D_SERCOM0_PAD2             6  /**< \brief SERCOM0 signal: PAD2 on PA06 mux D */

+#define MUX_PA06D_SERCOM0_PAD2             3

+#define PINMUX_PA06D_SERCOM0_PAD2  ((PIN_PA06D_SERCOM0_PAD2 << 16) | MUX_PA06D_SERCOM0_PAD2)

+#define PORT_PA06D_SERCOM0_PAD2    (1u <<  6)

+#define PIN_PA10C_SERCOM0_PAD2            10  /**< \brief SERCOM0 signal: PAD2 on PA10 mux C */

+#define MUX_PA10C_SERCOM0_PAD2             2

+#define PINMUX_PA10C_SERCOM0_PAD2  ((PIN_PA10C_SERCOM0_PAD2 << 16) | MUX_PA10C_SERCOM0_PAD2)

+#define PORT_PA10C_SERCOM0_PAD2    (1u << 10)

+#define PIN_PA07D_SERCOM0_PAD3             7  /**< \brief SERCOM0 signal: PAD3 on PA07 mux D */

+#define MUX_PA07D_SERCOM0_PAD3             3

+#define PINMUX_PA07D_SERCOM0_PAD3  ((PIN_PA07D_SERCOM0_PAD3 << 16) | MUX_PA07D_SERCOM0_PAD3)

+#define PORT_PA07D_SERCOM0_PAD3    (1u <<  7)

+#define PIN_PA11C_SERCOM0_PAD3            11  /**< \brief SERCOM0 signal: PAD3 on PA11 mux C */

+#define MUX_PA11C_SERCOM0_PAD3             2

+#define PINMUX_PA11C_SERCOM0_PAD3  ((PIN_PA11C_SERCOM0_PAD3 << 16) | MUX_PA11C_SERCOM0_PAD3)

+#define PORT_PA11C_SERCOM0_PAD3    (1u << 11)

+/* ========== PORT definition for SERCOM1 peripheral ========== */

+#define PIN_PA16C_SERCOM1_PAD0            16  /**< \brief SERCOM1 signal: PAD0 on PA16 mux C */

+#define MUX_PA16C_SERCOM1_PAD0             2

+#define PINMUX_PA16C_SERCOM1_PAD0  ((PIN_PA16C_SERCOM1_PAD0 << 16) | MUX_PA16C_SERCOM1_PAD0)

+#define PORT_PA16C_SERCOM1_PAD0    (1u << 16)

+#define PIN_PA00D_SERCOM1_PAD0             0  /**< \brief SERCOM1 signal: PAD0 on PA00 mux D */

+#define MUX_PA00D_SERCOM1_PAD0             3

+#define PINMUX_PA00D_SERCOM1_PAD0  ((PIN_PA00D_SERCOM1_PAD0 << 16) | MUX_PA00D_SERCOM1_PAD0)

+#define PORT_PA00D_SERCOM1_PAD0    (1u <<  0)

+#define PIN_PA17C_SERCOM1_PAD1            17  /**< \brief SERCOM1 signal: PAD1 on PA17 mux C */

+#define MUX_PA17C_SERCOM1_PAD1             2

+#define PINMUX_PA17C_SERCOM1_PAD1  ((PIN_PA17C_SERCOM1_PAD1 << 16) | MUX_PA17C_SERCOM1_PAD1)

+#define PORT_PA17C_SERCOM1_PAD1    (1u << 17)

+#define PIN_PA01D_SERCOM1_PAD1             1  /**< \brief SERCOM1 signal: PAD1 on PA01 mux D */

+#define MUX_PA01D_SERCOM1_PAD1             3

+#define PINMUX_PA01D_SERCOM1_PAD1  ((PIN_PA01D_SERCOM1_PAD1 << 16) | MUX_PA01D_SERCOM1_PAD1)

+#define PORT_PA01D_SERCOM1_PAD1    (1u <<  1)

+#define PIN_PA30D_SERCOM1_PAD2            30  /**< \brief SERCOM1 signal: PAD2 on PA30 mux D */

+#define MUX_PA30D_SERCOM1_PAD2             3

+#define PINMUX_PA30D_SERCOM1_PAD2  ((PIN_PA30D_SERCOM1_PAD2 << 16) | MUX_PA30D_SERCOM1_PAD2)

+#define PORT_PA30D_SERCOM1_PAD2    (1u << 30)

+#define PIN_PA18C_SERCOM1_PAD2            18  /**< \brief SERCOM1 signal: PAD2 on PA18 mux C */

+#define MUX_PA18C_SERCOM1_PAD2             2

+#define PINMUX_PA18C_SERCOM1_PAD2  ((PIN_PA18C_SERCOM1_PAD2 << 16) | MUX_PA18C_SERCOM1_PAD2)

+#define PORT_PA18C_SERCOM1_PAD2    (1u << 18)

+#define PIN_PA31D_SERCOM1_PAD3            31  /**< \brief SERCOM1 signal: PAD3 on PA31 mux D */

+#define MUX_PA31D_SERCOM1_PAD3             3

+#define PINMUX_PA31D_SERCOM1_PAD3  ((PIN_PA31D_SERCOM1_PAD3 << 16) | MUX_PA31D_SERCOM1_PAD3)

+#define PORT_PA31D_SERCOM1_PAD3    (1u << 31)

+#define PIN_PA19C_SERCOM1_PAD3            19  /**< \brief SERCOM1 signal: PAD3 on PA19 mux C */

+#define MUX_PA19C_SERCOM1_PAD3             2

+#define PINMUX_PA19C_SERCOM1_PAD3  ((PIN_PA19C_SERCOM1_PAD3 << 16) | MUX_PA19C_SERCOM1_PAD3)

+#define PORT_PA19C_SERCOM1_PAD3    (1u << 19)

+/* ========== PORT definition for SERCOM2 peripheral ========== */

+#define PIN_PA08D_SERCOM2_PAD0             8  /**< \brief SERCOM2 signal: PAD0 on PA08 mux D */

+#define MUX_PA08D_SERCOM2_PAD0             3

+#define PINMUX_PA08D_SERCOM2_PAD0  ((PIN_PA08D_SERCOM2_PAD0 << 16) | MUX_PA08D_SERCOM2_PAD0)

+#define PORT_PA08D_SERCOM2_PAD0    (1u <<  8)

+#define PIN_PA09D_SERCOM2_PAD1             9  /**< \brief SERCOM2 signal: PAD1 on PA09 mux D */

+#define MUX_PA09D_SERCOM2_PAD1             3

+#define PINMUX_PA09D_SERCOM2_PAD1  ((PIN_PA09D_SERCOM2_PAD1 << 16) | MUX_PA09D_SERCOM2_PAD1)

+#define PORT_PA09D_SERCOM2_PAD1    (1u <<  9)

+#define PIN_PA10D_SERCOM2_PAD2            10  /**< \brief SERCOM2 signal: PAD2 on PA10 mux D */

+#define MUX_PA10D_SERCOM2_PAD2             3

+#define PINMUX_PA10D_SERCOM2_PAD2  ((PIN_PA10D_SERCOM2_PAD2 << 16) | MUX_PA10D_SERCOM2_PAD2)

+#define PORT_PA10D_SERCOM2_PAD2    (1u << 10)

+#define PIN_PA14C_SERCOM2_PAD2            14  /**< \brief SERCOM2 signal: PAD2 on PA14 mux C */

+#define MUX_PA14C_SERCOM2_PAD2             2

+#define PINMUX_PA14C_SERCOM2_PAD2  ((PIN_PA14C_SERCOM2_PAD2 << 16) | MUX_PA14C_SERCOM2_PAD2)

+#define PORT_PA14C_SERCOM2_PAD2    (1u << 14)

+#define PIN_PA11D_SERCOM2_PAD3            11  /**< \brief SERCOM2 signal: PAD3 on PA11 mux D */

+#define MUX_PA11D_SERCOM2_PAD3             3

+#define PINMUX_PA11D_SERCOM2_PAD3  ((PIN_PA11D_SERCOM2_PAD3 << 16) | MUX_PA11D_SERCOM2_PAD3)

+#define PORT_PA11D_SERCOM2_PAD3    (1u << 11)

+#define PIN_PA15C_SERCOM2_PAD3            15  /**< \brief SERCOM2 signal: PAD3 on PA15 mux C */

+#define MUX_PA15C_SERCOM2_PAD3             2

+#define PINMUX_PA15C_SERCOM2_PAD3  ((PIN_PA15C_SERCOM2_PAD3 << 16) | MUX_PA15C_SERCOM2_PAD3)

+#define PORT_PA15C_SERCOM2_PAD3    (1u << 15)

+/* ========== PORT definition for SERCOM3 peripheral ========== */

+#define PIN_PA16D_SERCOM3_PAD0            16  /**< \brief SERCOM3 signal: PAD0 on PA16 mux D */

+#define MUX_PA16D_SERCOM3_PAD0             3

+#define PINMUX_PA16D_SERCOM3_PAD0  ((PIN_PA16D_SERCOM3_PAD0 << 16) | MUX_PA16D_SERCOM3_PAD0)

+#define PORT_PA16D_SERCOM3_PAD0    (1u << 16)

+#define PIN_PA22C_SERCOM3_PAD0            22  /**< \brief SERCOM3 signal: PAD0 on PA22 mux C */

+#define MUX_PA22C_SERCOM3_PAD0             2

+#define PINMUX_PA22C_SERCOM3_PAD0  ((PIN_PA22C_SERCOM3_PAD0 << 16) | MUX_PA22C_SERCOM3_PAD0)

+#define PORT_PA22C_SERCOM3_PAD0    (1u << 22)

+#define PIN_PA17D_SERCOM3_PAD1            17  /**< \brief SERCOM3 signal: PAD1 on PA17 mux D */

+#define MUX_PA17D_SERCOM3_PAD1             3

+#define PINMUX_PA17D_SERCOM3_PAD1  ((PIN_PA17D_SERCOM3_PAD1 << 16) | MUX_PA17D_SERCOM3_PAD1)

+#define PORT_PA17D_SERCOM3_PAD1    (1u << 17)

+#define PIN_PA23C_SERCOM3_PAD1            23  /**< \brief SERCOM3 signal: PAD1 on PA23 mux C */

+#define MUX_PA23C_SERCOM3_PAD1             2

+#define PINMUX_PA23C_SERCOM3_PAD1  ((PIN_PA23C_SERCOM3_PAD1 << 16) | MUX_PA23C_SERCOM3_PAD1)

+#define PORT_PA23C_SERCOM3_PAD1    (1u << 23)

+#define PIN_PA18D_SERCOM3_PAD2            18  /**< \brief SERCOM3 signal: PAD2 on PA18 mux D */

+#define MUX_PA18D_SERCOM3_PAD2             3

+#define PINMUX_PA18D_SERCOM3_PAD2  ((PIN_PA18D_SERCOM3_PAD2 << 16) | MUX_PA18D_SERCOM3_PAD2)

+#define PORT_PA18D_SERCOM3_PAD2    (1u << 18)

+#define PIN_PA24C_SERCOM3_PAD2            24  /**< \brief SERCOM3 signal: PAD2 on PA24 mux C */

+#define MUX_PA24C_SERCOM3_PAD2             2

+#define PINMUX_PA24C_SERCOM3_PAD2  ((PIN_PA24C_SERCOM3_PAD2 << 16) | MUX_PA24C_SERCOM3_PAD2)

+#define PORT_PA24C_SERCOM3_PAD2    (1u << 24)

+#define PIN_PA19D_SERCOM3_PAD3            19  /**< \brief SERCOM3 signal: PAD3 on PA19 mux D */

+#define MUX_PA19D_SERCOM3_PAD3             3

+#define PINMUX_PA19D_SERCOM3_PAD3  ((PIN_PA19D_SERCOM3_PAD3 << 16) | MUX_PA19D_SERCOM3_PAD3)

+#define PORT_PA19D_SERCOM3_PAD3    (1u << 19)

+#define PIN_PA25C_SERCOM3_PAD3            25  /**< \brief SERCOM3 signal: PAD3 on PA25 mux C */

+#define MUX_PA25C_SERCOM3_PAD3             2

+#define PINMUX_PA25C_SERCOM3_PAD3  ((PIN_PA25C_SERCOM3_PAD3 << 16) | MUX_PA25C_SERCOM3_PAD3)

+#define PORT_PA25C_SERCOM3_PAD3    (1u << 25)

+/* ========== PORT definition for TC0 peripheral ========== */

+#define PIN_PA04F_TC0_WO0                  4  /**< \brief TC0 signal: WO0 on PA04 mux F */

+#define MUX_PA04F_TC0_WO0                  5

+#define PINMUX_PA04F_TC0_WO0       ((PIN_PA04F_TC0_WO0 << 16) | MUX_PA04F_TC0_WO0)

+#define PORT_PA04F_TC0_WO0         (1u <<  4)

+#define PIN_PA08E_TC0_WO0                  8  /**< \brief TC0 signal: WO0 on PA08 mux E */

+#define MUX_PA08E_TC0_WO0                  4

+#define PINMUX_PA08E_TC0_WO0       ((PIN_PA08E_TC0_WO0 << 16) | MUX_PA08E_TC0_WO0)

+#define PORT_PA08E_TC0_WO0         (1u <<  8)

+#define PIN_PA05F_TC0_WO1                  5  /**< \brief TC0 signal: WO1 on PA05 mux F */

+#define MUX_PA05F_TC0_WO1                  5

+#define PINMUX_PA05F_TC0_WO1       ((PIN_PA05F_TC0_WO1 << 16) | MUX_PA05F_TC0_WO1)

+#define PORT_PA05F_TC0_WO1         (1u <<  5)

+#define PIN_PA09E_TC0_WO1                  9  /**< \brief TC0 signal: WO1 on PA09 mux E */

+#define MUX_PA09E_TC0_WO1                  4

+#define PINMUX_PA09E_TC0_WO1       ((PIN_PA09E_TC0_WO1 << 16) | MUX_PA09E_TC0_WO1)

+#define PORT_PA09E_TC0_WO1         (1u <<  9)

+/* ========== PORT definition for TC1 peripheral ========== */

+#define PIN_PA06F_TC1_WO0                  6  /**< \brief TC1 signal: WO0 on PA06 mux F */

+#define MUX_PA06F_TC1_WO0                  5

+#define PINMUX_PA06F_TC1_WO0       ((PIN_PA06F_TC1_WO0 << 16) | MUX_PA06F_TC1_WO0)

+#define PORT_PA06F_TC1_WO0         (1u <<  6)

+#define PIN_PA30F_TC1_WO0                 30  /**< \brief TC1 signal: WO0 on PA30 mux F */

+#define MUX_PA30F_TC1_WO0                  5

+#define PINMUX_PA30F_TC1_WO0       ((PIN_PA30F_TC1_WO0 << 16) | MUX_PA30F_TC1_WO0)

+#define PORT_PA30F_TC1_WO0         (1u << 30)

+#define PIN_PA10E_TC1_WO0                 10  /**< \brief TC1 signal: WO0 on PA10 mux E */

+#define MUX_PA10E_TC1_WO0                  4

+#define PINMUX_PA10E_TC1_WO0       ((PIN_PA10E_TC1_WO0 << 16) | MUX_PA10E_TC1_WO0)

+#define PORT_PA10E_TC1_WO0         (1u << 10)

+#define PIN_PA07F_TC1_WO1                  7  /**< \brief TC1 signal: WO1 on PA07 mux F */

+#define MUX_PA07F_TC1_WO1                  5

+#define PINMUX_PA07F_TC1_WO1       ((PIN_PA07F_TC1_WO1 << 16) | MUX_PA07F_TC1_WO1)

+#define PORT_PA07F_TC1_WO1         (1u <<  7)

+#define PIN_PA31F_TC1_WO1                 31  /**< \brief TC1 signal: WO1 on PA31 mux F */

+#define MUX_PA31F_TC1_WO1                  5

+#define PINMUX_PA31F_TC1_WO1       ((PIN_PA31F_TC1_WO1 << 16) | MUX_PA31F_TC1_WO1)

+#define PORT_PA31F_TC1_WO1         (1u << 31)

+#define PIN_PA11E_TC1_WO1                 11  /**< \brief TC1 signal: WO1 on PA11 mux E */

+#define MUX_PA11E_TC1_WO1                  4

+#define PINMUX_PA11E_TC1_WO1       ((PIN_PA11E_TC1_WO1 << 16) | MUX_PA11E_TC1_WO1)

+#define PORT_PA11E_TC1_WO1         (1u << 11)

+/* ========== PORT definition for TC2 peripheral ========== */

+#define PIN_PA16F_TC2_WO0                 16  /**< \brief TC2 signal: WO0 on PA16 mux F */

+#define MUX_PA16F_TC2_WO0                  5

+#define PINMUX_PA16F_TC2_WO0       ((PIN_PA16F_TC2_WO0 << 16) | MUX_PA16F_TC2_WO0)

+#define PORT_PA16F_TC2_WO0         (1u << 16)

+#define PIN_PA00F_TC2_WO0                  0  /**< \brief TC2 signal: WO0 on PA00 mux F */

+#define MUX_PA00F_TC2_WO0                  5

+#define PINMUX_PA00F_TC2_WO0       ((PIN_PA00F_TC2_WO0 << 16) | MUX_PA00F_TC2_WO0)

+#define PORT_PA00F_TC2_WO0         (1u <<  0)

+#define PIN_PA17F_TC2_WO1                 17  /**< \brief TC2 signal: WO1 on PA17 mux F */

+#define MUX_PA17F_TC2_WO1                  5

+#define PINMUX_PA17F_TC2_WO1       ((PIN_PA17F_TC2_WO1 << 16) | MUX_PA17F_TC2_WO1)

+#define PORT_PA17F_TC2_WO1         (1u << 17)

+#define PIN_PA01F_TC2_WO1                  1  /**< \brief TC2 signal: WO1 on PA01 mux F */

+#define MUX_PA01F_TC2_WO1                  5

+#define PINMUX_PA01F_TC2_WO1       ((PIN_PA01F_TC2_WO1 << 16) | MUX_PA01F_TC2_WO1)

+#define PORT_PA01F_TC2_WO1         (1u <<  1)

+/* ========== PORT definition for TC3 peripheral ========== */

+#define PIN_PA18F_TC3_WO0                 18  /**< \brief TC3 signal: WO0 on PA18 mux F */

+#define MUX_PA18F_TC3_WO0                  5

+#define PINMUX_PA18F_TC3_WO0       ((PIN_PA18F_TC3_WO0 << 16) | MUX_PA18F_TC3_WO0)

+#define PORT_PA18F_TC3_WO0         (1u << 18)

+#define PIN_PA14E_TC3_WO0                 14  /**< \brief TC3 signal: WO0 on PA14 mux E */

+#define MUX_PA14E_TC3_WO0                  4

+#define PINMUX_PA14E_TC3_WO0       ((PIN_PA14E_TC3_WO0 << 16) | MUX_PA14E_TC3_WO0)

+#define PORT_PA14E_TC3_WO0         (1u << 14)

+#define PIN_PA19F_TC3_WO1                 19  /**< \brief TC3 signal: WO1 on PA19 mux F */

+#define MUX_PA19F_TC3_WO1                  5

+#define PINMUX_PA19F_TC3_WO1       ((PIN_PA19F_TC3_WO1 << 16) | MUX_PA19F_TC3_WO1)

+#define PORT_PA19F_TC3_WO1         (1u << 19)

+#define PIN_PA15E_TC3_WO1                 15  /**< \brief TC3 signal: WO1 on PA15 mux E */

+#define MUX_PA15E_TC3_WO1                  4

+#define PINMUX_PA15E_TC3_WO1       ((PIN_PA15E_TC3_WO1 << 16) | MUX_PA15E_TC3_WO1)

+#define PORT_PA15E_TC3_WO1         (1u << 15)

+/* ========== PORT definition for TC4 peripheral ========== */

+#define PIN_PA22F_TC4_WO0                 22  /**< \brief TC4 signal: WO0 on PA22 mux F */

+#define MUX_PA22F_TC4_WO0                  5

+#define PINMUX_PA22F_TC4_WO0       ((PIN_PA22F_TC4_WO0 << 16) | MUX_PA22F_TC4_WO0)

+#define PORT_PA22F_TC4_WO0         (1u << 22)

+#define PIN_PA23F_TC4_WO1                 23  /**< \brief TC4 signal: WO1 on PA23 mux F */

+#define MUX_PA23F_TC4_WO1                  5

+#define PINMUX_PA23F_TC4_WO1       ((PIN_PA23F_TC4_WO1 << 16) | MUX_PA23F_TC4_WO1)

+#define PORT_PA23F_TC4_WO1         (1u << 23)

+/* ========== PORT definition for TC5 peripheral ========== */

+#define PIN_PA24F_TC5_WO0                 24  /**< \brief TC5 signal: WO0 on PA24 mux F */

+#define MUX_PA24F_TC5_WO0                  5

+#define PINMUX_PA24F_TC5_WO0       ((PIN_PA24F_TC5_WO0 << 16) | MUX_PA24F_TC5_WO0)

+#define PORT_PA24F_TC5_WO0         (1u << 24)

+#define PIN_PA25F_TC5_WO1                 25  /**< \brief TC5 signal: WO1 on PA25 mux F */

+#define MUX_PA25F_TC5_WO1                  5

+#define PINMUX_PA25F_TC5_WO1       ((PIN_PA25F_TC5_WO1 << 16) | MUX_PA25F_TC5_WO1)

+#define PORT_PA25F_TC5_WO1         (1u << 25)

+/* ========== PORT definition for ADC peripheral ========== */

+#define PIN_PA02B_ADC_AIN0                 2  /**< \brief ADC signal: AIN0 on PA02 mux B */

+#define MUX_PA02B_ADC_AIN0                 1

+#define PINMUX_PA02B_ADC_AIN0      ((PIN_PA02B_ADC_AIN0 << 16) | MUX_PA02B_ADC_AIN0)

+#define PORT_PA02B_ADC_AIN0        (1u <<  2)

+#define PIN_PA03B_ADC_AIN1                 3  /**< \brief ADC signal: AIN1 on PA03 mux B */

+#define MUX_PA03B_ADC_AIN1                 1

+#define PINMUX_PA03B_ADC_AIN1      ((PIN_PA03B_ADC_AIN1 << 16) | MUX_PA03B_ADC_AIN1)

+#define PORT_PA03B_ADC_AIN1        (1u <<  3)

+#define PIN_PA04B_ADC_AIN4                 4  /**< \brief ADC signal: AIN4 on PA04 mux B */

+#define MUX_PA04B_ADC_AIN4                 1

+#define PINMUX_PA04B_ADC_AIN4      ((PIN_PA04B_ADC_AIN4 << 16) | MUX_PA04B_ADC_AIN4)

+#define PORT_PA04B_ADC_AIN4        (1u <<  4)

+#define PIN_PA05B_ADC_AIN5                 5  /**< \brief ADC signal: AIN5 on PA05 mux B */

+#define MUX_PA05B_ADC_AIN5                 1

+#define PINMUX_PA05B_ADC_AIN5      ((PIN_PA05B_ADC_AIN5 << 16) | MUX_PA05B_ADC_AIN5)

+#define PORT_PA05B_ADC_AIN5        (1u <<  5)

+#define PIN_PA06B_ADC_AIN6                 6  /**< \brief ADC signal: AIN6 on PA06 mux B */

+#define MUX_PA06B_ADC_AIN6                 1

+#define PINMUX_PA06B_ADC_AIN6      ((PIN_PA06B_ADC_AIN6 << 16) | MUX_PA06B_ADC_AIN6)

+#define PORT_PA06B_ADC_AIN6        (1u <<  6)

+#define PIN_PA07B_ADC_AIN7                 7  /**< \brief ADC signal: AIN7 on PA07 mux B */

+#define MUX_PA07B_ADC_AIN7                 1

+#define PINMUX_PA07B_ADC_AIN7      ((PIN_PA07B_ADC_AIN7 << 16) | MUX_PA07B_ADC_AIN7)

+#define PORT_PA07B_ADC_AIN7        (1u <<  7)

+#define PIN_PA08B_ADC_AIN16                8  /**< \brief ADC signal: AIN16 on PA08 mux B */

+#define MUX_PA08B_ADC_AIN16                1

+#define PINMUX_PA08B_ADC_AIN16     ((PIN_PA08B_ADC_AIN16 << 16) | MUX_PA08B_ADC_AIN16)

+#define PORT_PA08B_ADC_AIN16       (1u <<  8)

+#define PIN_PA09B_ADC_AIN17                9  /**< \brief ADC signal: AIN17 on PA09 mux B */

+#define MUX_PA09B_ADC_AIN17                1

+#define PINMUX_PA09B_ADC_AIN17     ((PIN_PA09B_ADC_AIN17 << 16) | MUX_PA09B_ADC_AIN17)

+#define PORT_PA09B_ADC_AIN17       (1u <<  9)

+#define PIN_PA10B_ADC_AIN18               10  /**< \brief ADC signal: AIN18 on PA10 mux B */

+#define MUX_PA10B_ADC_AIN18                1

+#define PINMUX_PA10B_ADC_AIN18     ((PIN_PA10B_ADC_AIN18 << 16) | MUX_PA10B_ADC_AIN18)

+#define PORT_PA10B_ADC_AIN18       (1u << 10)

+#define PIN_PA11B_ADC_AIN19               11  /**< \brief ADC signal: AIN19 on PA11 mux B */

+#define MUX_PA11B_ADC_AIN19                1

+#define PINMUX_PA11B_ADC_AIN19     ((PIN_PA11B_ADC_AIN19 << 16) | MUX_PA11B_ADC_AIN19)

+#define PORT_PA11B_ADC_AIN19       (1u << 11)

+#define PIN_PA04B_ADC_VREFP                4  /**< \brief ADC signal: VREFP on PA04 mux B */

+#define MUX_PA04B_ADC_VREFP                1

+#define PINMUX_PA04B_ADC_VREFP     ((PIN_PA04B_ADC_VREFP << 16) | MUX_PA04B_ADC_VREFP)

+#define PORT_PA04B_ADC_VREFP       (1u <<  4)

+/* ========== PORT definition for AC peripheral ========== */

+#define PIN_PA04B_AC_AIN0                  4  /**< \brief AC signal: AIN0 on PA04 mux B */

+#define MUX_PA04B_AC_AIN0                  1

+#define PINMUX_PA04B_AC_AIN0       ((PIN_PA04B_AC_AIN0 << 16) | MUX_PA04B_AC_AIN0)

+#define PORT_PA04B_AC_AIN0         (1u <<  4)

+#define PIN_PA05B_AC_AIN1                  5  /**< \brief AC signal: AIN1 on PA05 mux B */

+#define MUX_PA05B_AC_AIN1                  1

+#define PINMUX_PA05B_AC_AIN1       ((PIN_PA05B_AC_AIN1 << 16) | MUX_PA05B_AC_AIN1)

+#define PORT_PA05B_AC_AIN1         (1u <<  5)

+#define PIN_PA06B_AC_AIN2                  6  /**< \brief AC signal: AIN2 on PA06 mux B */

+#define MUX_PA06B_AC_AIN2                  1

+#define PINMUX_PA06B_AC_AIN2       ((PIN_PA06B_AC_AIN2 << 16) | MUX_PA06B_AC_AIN2)

+#define PORT_PA06B_AC_AIN2         (1u <<  6)

+#define PIN_PA07B_AC_AIN3                  7  /**< \brief AC signal: AIN3 on PA07 mux B */

+#define MUX_PA07B_AC_AIN3                  1

+#define PINMUX_PA07B_AC_AIN3       ((PIN_PA07B_AC_AIN3 << 16) | MUX_PA07B_AC_AIN3)

+#define PORT_PA07B_AC_AIN3         (1u <<  7)

+#define PIN_PA18H_AC_CMP0                 18  /**< \brief AC signal: CMP0 on PA18 mux H */

+#define MUX_PA18H_AC_CMP0                  7

+#define PINMUX_PA18H_AC_CMP0       ((PIN_PA18H_AC_CMP0 << 16) | MUX_PA18H_AC_CMP0)

+#define PORT_PA18H_AC_CMP0         (1u << 18)

+#define PIN_PA19H_AC_CMP1                 19  /**< \brief AC signal: CMP1 on PA19 mux H */

+#define MUX_PA19H_AC_CMP1                  7

+#define PINMUX_PA19H_AC_CMP1       ((PIN_PA19H_AC_CMP1 << 16) | MUX_PA19H_AC_CMP1)

+#define PORT_PA19H_AC_CMP1         (1u << 19)

+/* ========== PORT definition for DAC peripheral ========== */

+#define PIN_PA02B_DAC_VOUT                 2  /**< \brief DAC signal: VOUT on PA02 mux B */

+#define MUX_PA02B_DAC_VOUT                 1

+#define PINMUX_PA02B_DAC_VOUT      ((PIN_PA02B_DAC_VOUT << 16) | MUX_PA02B_DAC_VOUT)

+#define PORT_PA02B_DAC_VOUT        (1u <<  2)

+#define PIN_PA03B_DAC_VREFP                3  /**< \brief DAC signal: VREFP on PA03 mux B */

+#define MUX_PA03B_DAC_VREFP                1

+#define PINMUX_PA03B_DAC_VREFP     ((PIN_PA03B_DAC_VREFP << 16) | MUX_PA03B_DAC_VREFP)

+#define PORT_PA03B_DAC_VREFP       (1u <<  3)

+

+#endif /* _SAMD20E16_PIO_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20e17.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20e17.h
new file mode 100644
index 0000000..47e9500
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20e17.h
@@ -0,0 +1,552 @@
+/**

+ * \file

+ *

+ * \brief Peripheral I/O description for SAMD20E17

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20E17_PIO_

+#define _SAMD20E17_PIO_

+

+#define PIN_PA00                           0  /**< \brief Pin Number for PA00 */

+#define PORT_PA00                  (1u <<  0) /**< \brief PORT Mask  for PA00 */

+#define PIN_PA01                           1  /**< \brief Pin Number for PA01 */

+#define PORT_PA01                  (1u <<  1) /**< \brief PORT Mask  for PA01 */

+#define PIN_PA02                           2  /**< \brief Pin Number for PA02 */

+#define PORT_PA02                  (1u <<  2) /**< \brief PORT Mask  for PA02 */

+#define PIN_PA03                           3  /**< \brief Pin Number for PA03 */

+#define PORT_PA03                  (1u <<  3) /**< \brief PORT Mask  for PA03 */

+#define PIN_PA04                           4  /**< \brief Pin Number for PA04 */

+#define PORT_PA04                  (1u <<  4) /**< \brief PORT Mask  for PA04 */

+#define PIN_PA05                           5  /**< \brief Pin Number for PA05 */

+#define PORT_PA05                  (1u <<  5) /**< \brief PORT Mask  for PA05 */

+#define PIN_PA06                           6  /**< \brief Pin Number for PA06 */

+#define PORT_PA06                  (1u <<  6) /**< \brief PORT Mask  for PA06 */

+#define PIN_PA07                           7  /**< \brief Pin Number for PA07 */

+#define PORT_PA07                  (1u <<  7) /**< \brief PORT Mask  for PA07 */

+#define PIN_PA08                           8  /**< \brief Pin Number for PA08 */

+#define PORT_PA08                  (1u <<  8) /**< \brief PORT Mask  for PA08 */

+#define PIN_PA09                           9  /**< \brief Pin Number for PA09 */

+#define PORT_PA09                  (1u <<  9) /**< \brief PORT Mask  for PA09 */

+#define PIN_PA10                          10  /**< \brief Pin Number for PA10 */

+#define PORT_PA10                  (1u << 10) /**< \brief PORT Mask  for PA10 */

+#define PIN_PA11                          11  /**< \brief Pin Number for PA11 */

+#define PORT_PA11                  (1u << 11) /**< \brief PORT Mask  for PA11 */

+#define PIN_PA14                          14  /**< \brief Pin Number for PA14 */

+#define PORT_PA14                  (1u << 14) /**< \brief PORT Mask  for PA14 */

+#define PIN_PA15                          15  /**< \brief Pin Number for PA15 */

+#define PORT_PA15                  (1u << 15) /**< \brief PORT Mask  for PA15 */

+#define PIN_PA16                          16  /**< \brief Pin Number for PA16 */

+#define PORT_PA16                  (1u << 16) /**< \brief PORT Mask  for PA16 */

+#define PIN_PA17                          17  /**< \brief Pin Number for PA17 */

+#define PORT_PA17                  (1u << 17) /**< \brief PORT Mask  for PA17 */

+#define PIN_PA18                          18  /**< \brief Pin Number for PA18 */

+#define PORT_PA18                  (1u << 18) /**< \brief PORT Mask  for PA18 */

+#define PIN_PA19                          19  /**< \brief Pin Number for PA19 */

+#define PORT_PA19                  (1u << 19) /**< \brief PORT Mask  for PA19 */

+#define PIN_PA22                          22  /**< \brief Pin Number for PA22 */

+#define PORT_PA22                  (1u << 22) /**< \brief PORT Mask  for PA22 */

+#define PIN_PA23                          23  /**< \brief Pin Number for PA23 */

+#define PORT_PA23                  (1u << 23) /**< \brief PORT Mask  for PA23 */

+#define PIN_PA24                          24  /**< \brief Pin Number for PA24 */

+#define PORT_PA24                  (1u << 24) /**< \brief PORT Mask  for PA24 */

+#define PIN_PA25                          25  /**< \brief Pin Number for PA25 */

+#define PORT_PA25                  (1u << 25) /**< \brief PORT Mask  for PA25 */

+#define PIN_PA27                          27  /**< \brief Pin Number for PA27 */

+#define PORT_PA27                  (1u << 27) /**< \brief PORT Mask  for PA27 */

+#define PIN_PA28                          28  /**< \brief Pin Number for PA28 */

+#define PORT_PA28                  (1u << 28) /**< \brief PORT Mask  for PA28 */

+#define PIN_PA30                          30  /**< \brief Pin Number for PA30 */

+#define PORT_PA30                  (1u << 30) /**< \brief PORT Mask  for PA30 */

+#define PIN_PA31                          31  /**< \brief Pin Number for PA31 */

+#define PORT_PA31                  (1u << 31) /**< \brief PORT Mask  for PA31 */

+/* ========== PORT definition for CORE peripheral ========== */

+#define PIN_PA30G_CORE_SWCLK              30  /**< \brief CORE signal: SWCLK on PA30 mux G */

+#define MUX_PA30G_CORE_SWCLK               6

+#define PINMUX_PA30G_CORE_SWCLK    ((PIN_PA30G_CORE_SWCLK << 16) | MUX_PA30G_CORE_SWCLK)

+#define PORT_PA30G_CORE_SWCLK      (1u << 30)

+/* ========== PORT definition for GCLK peripheral ========== */

+#define PIN_PA14H_GCLK_IO0                14  /**< \brief GCLK signal: IO0 on PA14 mux H */

+#define MUX_PA14H_GCLK_IO0                 7

+#define PINMUX_PA14H_GCLK_IO0      ((PIN_PA14H_GCLK_IO0 << 16) | MUX_PA14H_GCLK_IO0)

+#define PORT_PA14H_GCLK_IO0        (1u << 14)

+#define PIN_PA27H_GCLK_IO0                27  /**< \brief GCLK signal: IO0 on PA27 mux H */

+#define MUX_PA27H_GCLK_IO0                 7

+#define PINMUX_PA27H_GCLK_IO0      ((PIN_PA27H_GCLK_IO0 << 16) | MUX_PA27H_GCLK_IO0)

+#define PORT_PA27H_GCLK_IO0        (1u << 27)

+#define PIN_PA28H_GCLK_IO0                28  /**< \brief GCLK signal: IO0 on PA28 mux H */

+#define MUX_PA28H_GCLK_IO0                 7

+#define PINMUX_PA28H_GCLK_IO0      ((PIN_PA28H_GCLK_IO0 << 16) | MUX_PA28H_GCLK_IO0)

+#define PORT_PA28H_GCLK_IO0        (1u << 28)

+#define PIN_PA30H_GCLK_IO0                30  /**< \brief GCLK signal: IO0 on PA30 mux H */

+#define MUX_PA30H_GCLK_IO0                 7

+#define PINMUX_PA30H_GCLK_IO0      ((PIN_PA30H_GCLK_IO0 << 16) | MUX_PA30H_GCLK_IO0)

+#define PORT_PA30H_GCLK_IO0        (1u << 30)

+#define PIN_PA15H_GCLK_IO1                15  /**< \brief GCLK signal: IO1 on PA15 mux H */

+#define MUX_PA15H_GCLK_IO1                 7

+#define PINMUX_PA15H_GCLK_IO1      ((PIN_PA15H_GCLK_IO1 << 16) | MUX_PA15H_GCLK_IO1)

+#define PORT_PA15H_GCLK_IO1        (1u << 15)

+#define PIN_PA16H_GCLK_IO2                16  /**< \brief GCLK signal: IO2 on PA16 mux H */

+#define MUX_PA16H_GCLK_IO2                 7

+#define PINMUX_PA16H_GCLK_IO2      ((PIN_PA16H_GCLK_IO2 << 16) | MUX_PA16H_GCLK_IO2)

+#define PORT_PA16H_GCLK_IO2        (1u << 16)

+#define PIN_PA17H_GCLK_IO3                17  /**< \brief GCLK signal: IO3 on PA17 mux H */

+#define MUX_PA17H_GCLK_IO3                 7

+#define PINMUX_PA17H_GCLK_IO3      ((PIN_PA17H_GCLK_IO3 << 16) | MUX_PA17H_GCLK_IO3)

+#define PORT_PA17H_GCLK_IO3        (1u << 17)

+#define PIN_PA10H_GCLK_IO4                10  /**< \brief GCLK signal: IO4 on PA10 mux H */

+#define MUX_PA10H_GCLK_IO4                 7

+#define PINMUX_PA10H_GCLK_IO4      ((PIN_PA10H_GCLK_IO4 << 16) | MUX_PA10H_GCLK_IO4)

+#define PORT_PA10H_GCLK_IO4        (1u << 10)

+#define PIN_PA11H_GCLK_IO5                11  /**< \brief GCLK signal: IO5 on PA11 mux H */

+#define MUX_PA11H_GCLK_IO5                 7

+#define PINMUX_PA11H_GCLK_IO5      ((PIN_PA11H_GCLK_IO5 << 16) | MUX_PA11H_GCLK_IO5)

+#define PORT_PA11H_GCLK_IO5        (1u << 11)

+#define PIN_PA22H_GCLK_IO6                22  /**< \brief GCLK signal: IO6 on PA22 mux H */

+#define MUX_PA22H_GCLK_IO6                 7

+#define PINMUX_PA22H_GCLK_IO6      ((PIN_PA22H_GCLK_IO6 << 16) | MUX_PA22H_GCLK_IO6)

+#define PORT_PA22H_GCLK_IO6        (1u << 22)

+#define PIN_PA23H_GCLK_IO7                23  /**< \brief GCLK signal: IO7 on PA23 mux H */

+#define MUX_PA23H_GCLK_IO7                 7

+#define PINMUX_PA23H_GCLK_IO7      ((PIN_PA23H_GCLK_IO7 << 16) | MUX_PA23H_GCLK_IO7)

+#define PORT_PA23H_GCLK_IO7        (1u << 23)

+/* ========== PORT definition for EIC peripheral ========== */

+#define PIN_PA16A_EIC_EXTINT0             16  /**< \brief EIC signal: EXTINT0 on PA16 mux A */

+#define MUX_PA16A_EIC_EXTINT0              0

+#define PINMUX_PA16A_EIC_EXTINT0   ((PIN_PA16A_EIC_EXTINT0 << 16) | MUX_PA16A_EIC_EXTINT0)

+#define PORT_PA16A_EIC_EXTINT0     (1u << 16)

+#define PIN_PA00A_EIC_EXTINT0              0  /**< \brief EIC signal: EXTINT0 on PA00 mux A */

+#define MUX_PA00A_EIC_EXTINT0              0

+#define PINMUX_PA00A_EIC_EXTINT0   ((PIN_PA00A_EIC_EXTINT0 << 16) | MUX_PA00A_EIC_EXTINT0)

+#define PORT_PA00A_EIC_EXTINT0     (1u <<  0)

+#define PIN_PA17A_EIC_EXTINT1             17  /**< \brief EIC signal: EXTINT1 on PA17 mux A */

+#define MUX_PA17A_EIC_EXTINT1              0

+#define PINMUX_PA17A_EIC_EXTINT1   ((PIN_PA17A_EIC_EXTINT1 << 16) | MUX_PA17A_EIC_EXTINT1)

+#define PORT_PA17A_EIC_EXTINT1     (1u << 17)

+#define PIN_PA01A_EIC_EXTINT1              1  /**< \brief EIC signal: EXTINT1 on PA01 mux A */

+#define MUX_PA01A_EIC_EXTINT1              0

+#define PINMUX_PA01A_EIC_EXTINT1   ((PIN_PA01A_EIC_EXTINT1 << 16) | MUX_PA01A_EIC_EXTINT1)

+#define PORT_PA01A_EIC_EXTINT1     (1u <<  1)

+#define PIN_PA02A_EIC_EXTINT2              2  /**< \brief EIC signal: EXTINT2 on PA02 mux A */

+#define MUX_PA02A_EIC_EXTINT2              0

+#define PINMUX_PA02A_EIC_EXTINT2   ((PIN_PA02A_EIC_EXTINT2 << 16) | MUX_PA02A_EIC_EXTINT2)

+#define PORT_PA02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA18A_EIC_EXTINT2             18  /**< \brief EIC signal: EXTINT2 on PA18 mux A */

+#define MUX_PA18A_EIC_EXTINT2              0

+#define PINMUX_PA18A_EIC_EXTINT2   ((PIN_PA18A_EIC_EXTINT2 << 16) | MUX_PA18A_EIC_EXTINT2)

+#define PORT_PA18A_EIC_EXTINT2     (1u << 18)

+#define PIN_PA03A_EIC_EXTINT3              3  /**< \brief EIC signal: EXTINT3 on PA03 mux A */

+#define MUX_PA03A_EIC_EXTINT3              0

+#define PINMUX_PA03A_EIC_EXTINT3   ((PIN_PA03A_EIC_EXTINT3 << 16) | MUX_PA03A_EIC_EXTINT3)

+#define PORT_PA03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA19A_EIC_EXTINT3             19  /**< \brief EIC signal: EXTINT3 on PA19 mux A */

+#define MUX_PA19A_EIC_EXTINT3              0

+#define PINMUX_PA19A_EIC_EXTINT3   ((PIN_PA19A_EIC_EXTINT3 << 16) | MUX_PA19A_EIC_EXTINT3)

+#define PORT_PA19A_EIC_EXTINT3     (1u << 19)

+#define PIN_PA04A_EIC_EXTINT4              4  /**< \brief EIC signal: EXTINT4 on PA04 mux A */

+#define MUX_PA04A_EIC_EXTINT4              0

+#define PINMUX_PA04A_EIC_EXTINT4   ((PIN_PA04A_EIC_EXTINT4 << 16) | MUX_PA04A_EIC_EXTINT4)

+#define PORT_PA04A_EIC_EXTINT4     (1u <<  4)

+#define PIN_PA05A_EIC_EXTINT5              5  /**< \brief EIC signal: EXTINT5 on PA05 mux A */

+#define MUX_PA05A_EIC_EXTINT5              0

+#define PINMUX_PA05A_EIC_EXTINT5   ((PIN_PA05A_EIC_EXTINT5 << 16) | MUX_PA05A_EIC_EXTINT5)

+#define PORT_PA05A_EIC_EXTINT5     (1u <<  5)

+#define PIN_PA06A_EIC_EXTINT6              6  /**< \brief EIC signal: EXTINT6 on PA06 mux A */

+#define MUX_PA06A_EIC_EXTINT6              0

+#define PINMUX_PA06A_EIC_EXTINT6   ((PIN_PA06A_EIC_EXTINT6 << 16) | MUX_PA06A_EIC_EXTINT6)

+#define PORT_PA06A_EIC_EXTINT6     (1u <<  6)

+#define PIN_PA22A_EIC_EXTINT6             22  /**< \brief EIC signal: EXTINT6 on PA22 mux A */

+#define MUX_PA22A_EIC_EXTINT6              0

+#define PINMUX_PA22A_EIC_EXTINT6   ((PIN_PA22A_EIC_EXTINT6 << 16) | MUX_PA22A_EIC_EXTINT6)

+#define PORT_PA22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PA07A_EIC_EXTINT7              7  /**< \brief EIC signal: EXTINT7 on PA07 mux A */

+#define MUX_PA07A_EIC_EXTINT7              0

+#define PINMUX_PA07A_EIC_EXTINT7   ((PIN_PA07A_EIC_EXTINT7 << 16) | MUX_PA07A_EIC_EXTINT7)

+#define PORT_PA07A_EIC_EXTINT7     (1u <<  7)

+#define PIN_PA23A_EIC_EXTINT7             23  /**< \brief EIC signal: EXTINT7 on PA23 mux A */

+#define MUX_PA23A_EIC_EXTINT7              0

+#define PINMUX_PA23A_EIC_EXTINT7   ((PIN_PA23A_EIC_EXTINT7 << 16) | MUX_PA23A_EIC_EXTINT7)

+#define PORT_PA23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PA28A_EIC_EXTINT8             28  /**< \brief EIC signal: EXTINT8 on PA28 mux A */

+#define MUX_PA28A_EIC_EXTINT8              0

+#define PINMUX_PA28A_EIC_EXTINT8   ((PIN_PA28A_EIC_EXTINT8 << 16) | MUX_PA28A_EIC_EXTINT8)

+#define PORT_PA28A_EIC_EXTINT8     (1u << 28)

+#define PIN_PA09A_EIC_EXTINT9              9  /**< \brief EIC signal: EXTINT9 on PA09 mux A */

+#define MUX_PA09A_EIC_EXTINT9              0

+#define PINMUX_PA09A_EIC_EXTINT9   ((PIN_PA09A_EIC_EXTINT9 << 16) | MUX_PA09A_EIC_EXTINT9)

+#define PORT_PA09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PA10A_EIC_EXTINT10            10  /**< \brief EIC signal: EXTINT10 on PA10 mux A */

+#define MUX_PA10A_EIC_EXTINT10             0

+#define PINMUX_PA10A_EIC_EXTINT10  ((PIN_PA10A_EIC_EXTINT10 << 16) | MUX_PA10A_EIC_EXTINT10)

+#define PORT_PA10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA30A_EIC_EXTINT10            30  /**< \brief EIC signal: EXTINT10 on PA30 mux A */

+#define MUX_PA30A_EIC_EXTINT10             0

+#define PINMUX_PA30A_EIC_EXTINT10  ((PIN_PA30A_EIC_EXTINT10 << 16) | MUX_PA30A_EIC_EXTINT10)

+#define PORT_PA30A_EIC_EXTINT10    (1u << 30)

+#define PIN_PA11A_EIC_EXTINT11            11  /**< \brief EIC signal: EXTINT11 on PA11 mux A */

+#define MUX_PA11A_EIC_EXTINT11             0

+#define PINMUX_PA11A_EIC_EXTINT11  ((PIN_PA11A_EIC_EXTINT11 << 16) | MUX_PA11A_EIC_EXTINT11)

+#define PORT_PA11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA31A_EIC_EXTINT11            31  /**< \brief EIC signal: EXTINT11 on PA31 mux A */

+#define MUX_PA31A_EIC_EXTINT11             0

+#define PINMUX_PA31A_EIC_EXTINT11  ((PIN_PA31A_EIC_EXTINT11 << 16) | MUX_PA31A_EIC_EXTINT11)

+#define PORT_PA31A_EIC_EXTINT11    (1u << 31)

+#define PIN_PA24A_EIC_EXTINT12            24  /**< \brief EIC signal: EXTINT12 on PA24 mux A */

+#define MUX_PA24A_EIC_EXTINT12             0

+#define PINMUX_PA24A_EIC_EXTINT12  ((PIN_PA24A_EIC_EXTINT12 << 16) | MUX_PA24A_EIC_EXTINT12)

+#define PORT_PA24A_EIC_EXTINT12    (1u << 24)

+#define PIN_PA25A_EIC_EXTINT13            25  /**< \brief EIC signal: EXTINT13 on PA25 mux A */

+#define MUX_PA25A_EIC_EXTINT13             0

+#define PINMUX_PA25A_EIC_EXTINT13  ((PIN_PA25A_EIC_EXTINT13 << 16) | MUX_PA25A_EIC_EXTINT13)

+#define PORT_PA25A_EIC_EXTINT13    (1u << 25)

+#define PIN_PA14A_EIC_EXTINT14            14  /**< \brief EIC signal: EXTINT14 on PA14 mux A */

+#define MUX_PA14A_EIC_EXTINT14             0

+#define PINMUX_PA14A_EIC_EXTINT14  ((PIN_PA14A_EIC_EXTINT14 << 16) | MUX_PA14A_EIC_EXTINT14)

+#define PORT_PA14A_EIC_EXTINT14    (1u << 14)

+#define PIN_PA27A_EIC_EXTINT15            27  /**< \brief EIC signal: EXTINT15 on PA27 mux A */

+#define MUX_PA27A_EIC_EXTINT15             0

+#define PINMUX_PA27A_EIC_EXTINT15  ((PIN_PA27A_EIC_EXTINT15 << 16) | MUX_PA27A_EIC_EXTINT15)

+#define PORT_PA27A_EIC_EXTINT15    (1u << 27)

+#define PIN_PA15A_EIC_EXTINT15            15  /**< \brief EIC signal: EXTINT15 on PA15 mux A */

+#define MUX_PA15A_EIC_EXTINT15             0

+#define PINMUX_PA15A_EIC_EXTINT15  ((PIN_PA15A_EIC_EXTINT15 << 16) | MUX_PA15A_EIC_EXTINT15)

+#define PORT_PA15A_EIC_EXTINT15    (1u << 15)

+#define PIN_PA08A_EIC_NMI                  8  /**< \brief EIC signal: NMI on PA08 mux A */

+#define MUX_PA08A_EIC_NMI                  0

+#define PINMUX_PA08A_EIC_NMI       ((PIN_PA08A_EIC_NMI << 16) | MUX_PA08A_EIC_NMI)

+#define PORT_PA08A_EIC_NMI         (1u <<  8)

+/* ========== PORT definition for SERCOM0 peripheral ========== */

+#define PIN_PA04D_SERCOM0_PAD0             4  /**< \brief SERCOM0 signal: PAD0 on PA04 mux D */

+#define MUX_PA04D_SERCOM0_PAD0             3

+#define PINMUX_PA04D_SERCOM0_PAD0  ((PIN_PA04D_SERCOM0_PAD0 << 16) | MUX_PA04D_SERCOM0_PAD0)

+#define PORT_PA04D_SERCOM0_PAD0    (1u <<  4)

+#define PIN_PA08C_SERCOM0_PAD0             8  /**< \brief SERCOM0 signal: PAD0 on PA08 mux C */

+#define MUX_PA08C_SERCOM0_PAD0             2

+#define PINMUX_PA08C_SERCOM0_PAD0  ((PIN_PA08C_SERCOM0_PAD0 << 16) | MUX_PA08C_SERCOM0_PAD0)

+#define PORT_PA08C_SERCOM0_PAD0    (1u <<  8)

+#define PIN_PA05D_SERCOM0_PAD1             5  /**< \brief SERCOM0 signal: PAD1 on PA05 mux D */

+#define MUX_PA05D_SERCOM0_PAD1             3

+#define PINMUX_PA05D_SERCOM0_PAD1  ((PIN_PA05D_SERCOM0_PAD1 << 16) | MUX_PA05D_SERCOM0_PAD1)

+#define PORT_PA05D_SERCOM0_PAD1    (1u <<  5)

+#define PIN_PA09C_SERCOM0_PAD1             9  /**< \brief SERCOM0 signal: PAD1 on PA09 mux C */

+#define MUX_PA09C_SERCOM0_PAD1             2

+#define PINMUX_PA09C_SERCOM0_PAD1  ((PIN_PA09C_SERCOM0_PAD1 << 16) | MUX_PA09C_SERCOM0_PAD1)

+#define PORT_PA09C_SERCOM0_PAD1    (1u <<  9)

+#define PIN_PA06D_SERCOM0_PAD2             6  /**< \brief SERCOM0 signal: PAD2 on PA06 mux D */

+#define MUX_PA06D_SERCOM0_PAD2             3

+#define PINMUX_PA06D_SERCOM0_PAD2  ((PIN_PA06D_SERCOM0_PAD2 << 16) | MUX_PA06D_SERCOM0_PAD2)

+#define PORT_PA06D_SERCOM0_PAD2    (1u <<  6)

+#define PIN_PA10C_SERCOM0_PAD2            10  /**< \brief SERCOM0 signal: PAD2 on PA10 mux C */

+#define MUX_PA10C_SERCOM0_PAD2             2

+#define PINMUX_PA10C_SERCOM0_PAD2  ((PIN_PA10C_SERCOM0_PAD2 << 16) | MUX_PA10C_SERCOM0_PAD2)

+#define PORT_PA10C_SERCOM0_PAD2    (1u << 10)

+#define PIN_PA07D_SERCOM0_PAD3             7  /**< \brief SERCOM0 signal: PAD3 on PA07 mux D */

+#define MUX_PA07D_SERCOM0_PAD3             3

+#define PINMUX_PA07D_SERCOM0_PAD3  ((PIN_PA07D_SERCOM0_PAD3 << 16) | MUX_PA07D_SERCOM0_PAD3)

+#define PORT_PA07D_SERCOM0_PAD3    (1u <<  7)

+#define PIN_PA11C_SERCOM0_PAD3            11  /**< \brief SERCOM0 signal: PAD3 on PA11 mux C */

+#define MUX_PA11C_SERCOM0_PAD3             2

+#define PINMUX_PA11C_SERCOM0_PAD3  ((PIN_PA11C_SERCOM0_PAD3 << 16) | MUX_PA11C_SERCOM0_PAD3)

+#define PORT_PA11C_SERCOM0_PAD3    (1u << 11)

+/* ========== PORT definition for SERCOM1 peripheral ========== */

+#define PIN_PA16C_SERCOM1_PAD0            16  /**< \brief SERCOM1 signal: PAD0 on PA16 mux C */

+#define MUX_PA16C_SERCOM1_PAD0             2

+#define PINMUX_PA16C_SERCOM1_PAD0  ((PIN_PA16C_SERCOM1_PAD0 << 16) | MUX_PA16C_SERCOM1_PAD0)

+#define PORT_PA16C_SERCOM1_PAD0    (1u << 16)

+#define PIN_PA00D_SERCOM1_PAD0             0  /**< \brief SERCOM1 signal: PAD0 on PA00 mux D */

+#define MUX_PA00D_SERCOM1_PAD0             3

+#define PINMUX_PA00D_SERCOM1_PAD0  ((PIN_PA00D_SERCOM1_PAD0 << 16) | MUX_PA00D_SERCOM1_PAD0)

+#define PORT_PA00D_SERCOM1_PAD0    (1u <<  0)

+#define PIN_PA17C_SERCOM1_PAD1            17  /**< \brief SERCOM1 signal: PAD1 on PA17 mux C */

+#define MUX_PA17C_SERCOM1_PAD1             2

+#define PINMUX_PA17C_SERCOM1_PAD1  ((PIN_PA17C_SERCOM1_PAD1 << 16) | MUX_PA17C_SERCOM1_PAD1)

+#define PORT_PA17C_SERCOM1_PAD1    (1u << 17)

+#define PIN_PA01D_SERCOM1_PAD1             1  /**< \brief SERCOM1 signal: PAD1 on PA01 mux D */

+#define MUX_PA01D_SERCOM1_PAD1             3

+#define PINMUX_PA01D_SERCOM1_PAD1  ((PIN_PA01D_SERCOM1_PAD1 << 16) | MUX_PA01D_SERCOM1_PAD1)

+#define PORT_PA01D_SERCOM1_PAD1    (1u <<  1)

+#define PIN_PA30D_SERCOM1_PAD2            30  /**< \brief SERCOM1 signal: PAD2 on PA30 mux D */

+#define MUX_PA30D_SERCOM1_PAD2             3

+#define PINMUX_PA30D_SERCOM1_PAD2  ((PIN_PA30D_SERCOM1_PAD2 << 16) | MUX_PA30D_SERCOM1_PAD2)

+#define PORT_PA30D_SERCOM1_PAD2    (1u << 30)

+#define PIN_PA18C_SERCOM1_PAD2            18  /**< \brief SERCOM1 signal: PAD2 on PA18 mux C */

+#define MUX_PA18C_SERCOM1_PAD2             2

+#define PINMUX_PA18C_SERCOM1_PAD2  ((PIN_PA18C_SERCOM1_PAD2 << 16) | MUX_PA18C_SERCOM1_PAD2)

+#define PORT_PA18C_SERCOM1_PAD2    (1u << 18)

+#define PIN_PA31D_SERCOM1_PAD3            31  /**< \brief SERCOM1 signal: PAD3 on PA31 mux D */

+#define MUX_PA31D_SERCOM1_PAD3             3

+#define PINMUX_PA31D_SERCOM1_PAD3  ((PIN_PA31D_SERCOM1_PAD3 << 16) | MUX_PA31D_SERCOM1_PAD3)

+#define PORT_PA31D_SERCOM1_PAD3    (1u << 31)

+#define PIN_PA19C_SERCOM1_PAD3            19  /**< \brief SERCOM1 signal: PAD3 on PA19 mux C */

+#define MUX_PA19C_SERCOM1_PAD3             2

+#define PINMUX_PA19C_SERCOM1_PAD3  ((PIN_PA19C_SERCOM1_PAD3 << 16) | MUX_PA19C_SERCOM1_PAD3)

+#define PORT_PA19C_SERCOM1_PAD3    (1u << 19)

+/* ========== PORT definition for SERCOM2 peripheral ========== */

+#define PIN_PA08D_SERCOM2_PAD0             8  /**< \brief SERCOM2 signal: PAD0 on PA08 mux D */

+#define MUX_PA08D_SERCOM2_PAD0             3

+#define PINMUX_PA08D_SERCOM2_PAD0  ((PIN_PA08D_SERCOM2_PAD0 << 16) | MUX_PA08D_SERCOM2_PAD0)

+#define PORT_PA08D_SERCOM2_PAD0    (1u <<  8)

+#define PIN_PA09D_SERCOM2_PAD1             9  /**< \brief SERCOM2 signal: PAD1 on PA09 mux D */

+#define MUX_PA09D_SERCOM2_PAD1             3

+#define PINMUX_PA09D_SERCOM2_PAD1  ((PIN_PA09D_SERCOM2_PAD1 << 16) | MUX_PA09D_SERCOM2_PAD1)

+#define PORT_PA09D_SERCOM2_PAD1    (1u <<  9)

+#define PIN_PA10D_SERCOM2_PAD2            10  /**< \brief SERCOM2 signal: PAD2 on PA10 mux D */

+#define MUX_PA10D_SERCOM2_PAD2             3

+#define PINMUX_PA10D_SERCOM2_PAD2  ((PIN_PA10D_SERCOM2_PAD2 << 16) | MUX_PA10D_SERCOM2_PAD2)

+#define PORT_PA10D_SERCOM2_PAD2    (1u << 10)

+#define PIN_PA14C_SERCOM2_PAD2            14  /**< \brief SERCOM2 signal: PAD2 on PA14 mux C */

+#define MUX_PA14C_SERCOM2_PAD2             2

+#define PINMUX_PA14C_SERCOM2_PAD2  ((PIN_PA14C_SERCOM2_PAD2 << 16) | MUX_PA14C_SERCOM2_PAD2)

+#define PORT_PA14C_SERCOM2_PAD2    (1u << 14)

+#define PIN_PA11D_SERCOM2_PAD3            11  /**< \brief SERCOM2 signal: PAD3 on PA11 mux D */

+#define MUX_PA11D_SERCOM2_PAD3             3

+#define PINMUX_PA11D_SERCOM2_PAD3  ((PIN_PA11D_SERCOM2_PAD3 << 16) | MUX_PA11D_SERCOM2_PAD3)

+#define PORT_PA11D_SERCOM2_PAD3    (1u << 11)

+#define PIN_PA15C_SERCOM2_PAD3            15  /**< \brief SERCOM2 signal: PAD3 on PA15 mux C */

+#define MUX_PA15C_SERCOM2_PAD3             2

+#define PINMUX_PA15C_SERCOM2_PAD3  ((PIN_PA15C_SERCOM2_PAD3 << 16) | MUX_PA15C_SERCOM2_PAD3)

+#define PORT_PA15C_SERCOM2_PAD3    (1u << 15)

+/* ========== PORT definition for SERCOM3 peripheral ========== */

+#define PIN_PA16D_SERCOM3_PAD0            16  /**< \brief SERCOM3 signal: PAD0 on PA16 mux D */

+#define MUX_PA16D_SERCOM3_PAD0             3

+#define PINMUX_PA16D_SERCOM3_PAD0  ((PIN_PA16D_SERCOM3_PAD0 << 16) | MUX_PA16D_SERCOM3_PAD0)

+#define PORT_PA16D_SERCOM3_PAD0    (1u << 16)

+#define PIN_PA22C_SERCOM3_PAD0            22  /**< \brief SERCOM3 signal: PAD0 on PA22 mux C */

+#define MUX_PA22C_SERCOM3_PAD0             2

+#define PINMUX_PA22C_SERCOM3_PAD0  ((PIN_PA22C_SERCOM3_PAD0 << 16) | MUX_PA22C_SERCOM3_PAD0)

+#define PORT_PA22C_SERCOM3_PAD0    (1u << 22)

+#define PIN_PA17D_SERCOM3_PAD1            17  /**< \brief SERCOM3 signal: PAD1 on PA17 mux D */

+#define MUX_PA17D_SERCOM3_PAD1             3

+#define PINMUX_PA17D_SERCOM3_PAD1  ((PIN_PA17D_SERCOM3_PAD1 << 16) | MUX_PA17D_SERCOM3_PAD1)

+#define PORT_PA17D_SERCOM3_PAD1    (1u << 17)

+#define PIN_PA23C_SERCOM3_PAD1            23  /**< \brief SERCOM3 signal: PAD1 on PA23 mux C */

+#define MUX_PA23C_SERCOM3_PAD1             2

+#define PINMUX_PA23C_SERCOM3_PAD1  ((PIN_PA23C_SERCOM3_PAD1 << 16) | MUX_PA23C_SERCOM3_PAD1)

+#define PORT_PA23C_SERCOM3_PAD1    (1u << 23)

+#define PIN_PA18D_SERCOM3_PAD2            18  /**< \brief SERCOM3 signal: PAD2 on PA18 mux D */

+#define MUX_PA18D_SERCOM3_PAD2             3

+#define PINMUX_PA18D_SERCOM3_PAD2  ((PIN_PA18D_SERCOM3_PAD2 << 16) | MUX_PA18D_SERCOM3_PAD2)

+#define PORT_PA18D_SERCOM3_PAD2    (1u << 18)

+#define PIN_PA24C_SERCOM3_PAD2            24  /**< \brief SERCOM3 signal: PAD2 on PA24 mux C */

+#define MUX_PA24C_SERCOM3_PAD2             2

+#define PINMUX_PA24C_SERCOM3_PAD2  ((PIN_PA24C_SERCOM3_PAD2 << 16) | MUX_PA24C_SERCOM3_PAD2)

+#define PORT_PA24C_SERCOM3_PAD2    (1u << 24)

+#define PIN_PA19D_SERCOM3_PAD3            19  /**< \brief SERCOM3 signal: PAD3 on PA19 mux D */

+#define MUX_PA19D_SERCOM3_PAD3             3

+#define PINMUX_PA19D_SERCOM3_PAD3  ((PIN_PA19D_SERCOM3_PAD3 << 16) | MUX_PA19D_SERCOM3_PAD3)

+#define PORT_PA19D_SERCOM3_PAD3    (1u << 19)

+#define PIN_PA25C_SERCOM3_PAD3            25  /**< \brief SERCOM3 signal: PAD3 on PA25 mux C */

+#define MUX_PA25C_SERCOM3_PAD3             2

+#define PINMUX_PA25C_SERCOM3_PAD3  ((PIN_PA25C_SERCOM3_PAD3 << 16) | MUX_PA25C_SERCOM3_PAD3)

+#define PORT_PA25C_SERCOM3_PAD3    (1u << 25)

+/* ========== PORT definition for TC0 peripheral ========== */

+#define PIN_PA04F_TC0_WO0                  4  /**< \brief TC0 signal: WO0 on PA04 mux F */

+#define MUX_PA04F_TC0_WO0                  5

+#define PINMUX_PA04F_TC0_WO0       ((PIN_PA04F_TC0_WO0 << 16) | MUX_PA04F_TC0_WO0)

+#define PORT_PA04F_TC0_WO0         (1u <<  4)

+#define PIN_PA08E_TC0_WO0                  8  /**< \brief TC0 signal: WO0 on PA08 mux E */

+#define MUX_PA08E_TC0_WO0                  4

+#define PINMUX_PA08E_TC0_WO0       ((PIN_PA08E_TC0_WO0 << 16) | MUX_PA08E_TC0_WO0)

+#define PORT_PA08E_TC0_WO0         (1u <<  8)

+#define PIN_PA05F_TC0_WO1                  5  /**< \brief TC0 signal: WO1 on PA05 mux F */

+#define MUX_PA05F_TC0_WO1                  5

+#define PINMUX_PA05F_TC0_WO1       ((PIN_PA05F_TC0_WO1 << 16) | MUX_PA05F_TC0_WO1)

+#define PORT_PA05F_TC0_WO1         (1u <<  5)

+#define PIN_PA09E_TC0_WO1                  9  /**< \brief TC0 signal: WO1 on PA09 mux E */

+#define MUX_PA09E_TC0_WO1                  4

+#define PINMUX_PA09E_TC0_WO1       ((PIN_PA09E_TC0_WO1 << 16) | MUX_PA09E_TC0_WO1)

+#define PORT_PA09E_TC0_WO1         (1u <<  9)

+/* ========== PORT definition for TC1 peripheral ========== */

+#define PIN_PA06F_TC1_WO0                  6  /**< \brief TC1 signal: WO0 on PA06 mux F */

+#define MUX_PA06F_TC1_WO0                  5

+#define PINMUX_PA06F_TC1_WO0       ((PIN_PA06F_TC1_WO0 << 16) | MUX_PA06F_TC1_WO0)

+#define PORT_PA06F_TC1_WO0         (1u <<  6)

+#define PIN_PA30F_TC1_WO0                 30  /**< \brief TC1 signal: WO0 on PA30 mux F */

+#define MUX_PA30F_TC1_WO0                  5

+#define PINMUX_PA30F_TC1_WO0       ((PIN_PA30F_TC1_WO0 << 16) | MUX_PA30F_TC1_WO0)

+#define PORT_PA30F_TC1_WO0         (1u << 30)

+#define PIN_PA10E_TC1_WO0                 10  /**< \brief TC1 signal: WO0 on PA10 mux E */

+#define MUX_PA10E_TC1_WO0                  4

+#define PINMUX_PA10E_TC1_WO0       ((PIN_PA10E_TC1_WO0 << 16) | MUX_PA10E_TC1_WO0)

+#define PORT_PA10E_TC1_WO0         (1u << 10)

+#define PIN_PA07F_TC1_WO1                  7  /**< \brief TC1 signal: WO1 on PA07 mux F */

+#define MUX_PA07F_TC1_WO1                  5

+#define PINMUX_PA07F_TC1_WO1       ((PIN_PA07F_TC1_WO1 << 16) | MUX_PA07F_TC1_WO1)

+#define PORT_PA07F_TC1_WO1         (1u <<  7)

+#define PIN_PA31F_TC1_WO1                 31  /**< \brief TC1 signal: WO1 on PA31 mux F */

+#define MUX_PA31F_TC1_WO1                  5

+#define PINMUX_PA31F_TC1_WO1       ((PIN_PA31F_TC1_WO1 << 16) | MUX_PA31F_TC1_WO1)

+#define PORT_PA31F_TC1_WO1         (1u << 31)

+#define PIN_PA11E_TC1_WO1                 11  /**< \brief TC1 signal: WO1 on PA11 mux E */

+#define MUX_PA11E_TC1_WO1                  4

+#define PINMUX_PA11E_TC1_WO1       ((PIN_PA11E_TC1_WO1 << 16) | MUX_PA11E_TC1_WO1)

+#define PORT_PA11E_TC1_WO1         (1u << 11)

+/* ========== PORT definition for TC2 peripheral ========== */

+#define PIN_PA16F_TC2_WO0                 16  /**< \brief TC2 signal: WO0 on PA16 mux F */

+#define MUX_PA16F_TC2_WO0                  5

+#define PINMUX_PA16F_TC2_WO0       ((PIN_PA16F_TC2_WO0 << 16) | MUX_PA16F_TC2_WO0)

+#define PORT_PA16F_TC2_WO0         (1u << 16)

+#define PIN_PA00F_TC2_WO0                  0  /**< \brief TC2 signal: WO0 on PA00 mux F */

+#define MUX_PA00F_TC2_WO0                  5

+#define PINMUX_PA00F_TC2_WO0       ((PIN_PA00F_TC2_WO0 << 16) | MUX_PA00F_TC2_WO0)

+#define PORT_PA00F_TC2_WO0         (1u <<  0)

+#define PIN_PA17F_TC2_WO1                 17  /**< \brief TC2 signal: WO1 on PA17 mux F */

+#define MUX_PA17F_TC2_WO1                  5

+#define PINMUX_PA17F_TC2_WO1       ((PIN_PA17F_TC2_WO1 << 16) | MUX_PA17F_TC2_WO1)

+#define PORT_PA17F_TC2_WO1         (1u << 17)

+#define PIN_PA01F_TC2_WO1                  1  /**< \brief TC2 signal: WO1 on PA01 mux F */

+#define MUX_PA01F_TC2_WO1                  5

+#define PINMUX_PA01F_TC2_WO1       ((PIN_PA01F_TC2_WO1 << 16) | MUX_PA01F_TC2_WO1)

+#define PORT_PA01F_TC2_WO1         (1u <<  1)

+/* ========== PORT definition for TC3 peripheral ========== */

+#define PIN_PA18F_TC3_WO0                 18  /**< \brief TC3 signal: WO0 on PA18 mux F */

+#define MUX_PA18F_TC3_WO0                  5

+#define PINMUX_PA18F_TC3_WO0       ((PIN_PA18F_TC3_WO0 << 16) | MUX_PA18F_TC3_WO0)

+#define PORT_PA18F_TC3_WO0         (1u << 18)

+#define PIN_PA14E_TC3_WO0                 14  /**< \brief TC3 signal: WO0 on PA14 mux E */

+#define MUX_PA14E_TC3_WO0                  4

+#define PINMUX_PA14E_TC3_WO0       ((PIN_PA14E_TC3_WO0 << 16) | MUX_PA14E_TC3_WO0)

+#define PORT_PA14E_TC3_WO0         (1u << 14)

+#define PIN_PA19F_TC3_WO1                 19  /**< \brief TC3 signal: WO1 on PA19 mux F */

+#define MUX_PA19F_TC3_WO1                  5

+#define PINMUX_PA19F_TC3_WO1       ((PIN_PA19F_TC3_WO1 << 16) | MUX_PA19F_TC3_WO1)

+#define PORT_PA19F_TC3_WO1         (1u << 19)

+#define PIN_PA15E_TC3_WO1                 15  /**< \brief TC3 signal: WO1 on PA15 mux E */

+#define MUX_PA15E_TC3_WO1                  4

+#define PINMUX_PA15E_TC3_WO1       ((PIN_PA15E_TC3_WO1 << 16) | MUX_PA15E_TC3_WO1)

+#define PORT_PA15E_TC3_WO1         (1u << 15)

+/* ========== PORT definition for TC4 peripheral ========== */

+#define PIN_PA22F_TC4_WO0                 22  /**< \brief TC4 signal: WO0 on PA22 mux F */

+#define MUX_PA22F_TC4_WO0                  5

+#define PINMUX_PA22F_TC4_WO0       ((PIN_PA22F_TC4_WO0 << 16) | MUX_PA22F_TC4_WO0)

+#define PORT_PA22F_TC4_WO0         (1u << 22)

+#define PIN_PA23F_TC4_WO1                 23  /**< \brief TC4 signal: WO1 on PA23 mux F */

+#define MUX_PA23F_TC4_WO1                  5

+#define PINMUX_PA23F_TC4_WO1       ((PIN_PA23F_TC4_WO1 << 16) | MUX_PA23F_TC4_WO1)

+#define PORT_PA23F_TC4_WO1         (1u << 23)

+/* ========== PORT definition for TC5 peripheral ========== */

+#define PIN_PA24F_TC5_WO0                 24  /**< \brief TC5 signal: WO0 on PA24 mux F */

+#define MUX_PA24F_TC5_WO0                  5

+#define PINMUX_PA24F_TC5_WO0       ((PIN_PA24F_TC5_WO0 << 16) | MUX_PA24F_TC5_WO0)

+#define PORT_PA24F_TC5_WO0         (1u << 24)

+#define PIN_PA25F_TC5_WO1                 25  /**< \brief TC5 signal: WO1 on PA25 mux F */

+#define MUX_PA25F_TC5_WO1                  5

+#define PINMUX_PA25F_TC5_WO1       ((PIN_PA25F_TC5_WO1 << 16) | MUX_PA25F_TC5_WO1)

+#define PORT_PA25F_TC5_WO1         (1u << 25)

+/* ========== PORT definition for ADC peripheral ========== */

+#define PIN_PA02B_ADC_AIN0                 2  /**< \brief ADC signal: AIN0 on PA02 mux B */

+#define MUX_PA02B_ADC_AIN0                 1

+#define PINMUX_PA02B_ADC_AIN0      ((PIN_PA02B_ADC_AIN0 << 16) | MUX_PA02B_ADC_AIN0)

+#define PORT_PA02B_ADC_AIN0        (1u <<  2)

+#define PIN_PA03B_ADC_AIN1                 3  /**< \brief ADC signal: AIN1 on PA03 mux B */

+#define MUX_PA03B_ADC_AIN1                 1

+#define PINMUX_PA03B_ADC_AIN1      ((PIN_PA03B_ADC_AIN1 << 16) | MUX_PA03B_ADC_AIN1)

+#define PORT_PA03B_ADC_AIN1        (1u <<  3)

+#define PIN_PA04B_ADC_AIN4                 4  /**< \brief ADC signal: AIN4 on PA04 mux B */

+#define MUX_PA04B_ADC_AIN4                 1

+#define PINMUX_PA04B_ADC_AIN4      ((PIN_PA04B_ADC_AIN4 << 16) | MUX_PA04B_ADC_AIN4)

+#define PORT_PA04B_ADC_AIN4        (1u <<  4)

+#define PIN_PA05B_ADC_AIN5                 5  /**< \brief ADC signal: AIN5 on PA05 mux B */

+#define MUX_PA05B_ADC_AIN5                 1

+#define PINMUX_PA05B_ADC_AIN5      ((PIN_PA05B_ADC_AIN5 << 16) | MUX_PA05B_ADC_AIN5)

+#define PORT_PA05B_ADC_AIN5        (1u <<  5)

+#define PIN_PA06B_ADC_AIN6                 6  /**< \brief ADC signal: AIN6 on PA06 mux B */

+#define MUX_PA06B_ADC_AIN6                 1

+#define PINMUX_PA06B_ADC_AIN6      ((PIN_PA06B_ADC_AIN6 << 16) | MUX_PA06B_ADC_AIN6)

+#define PORT_PA06B_ADC_AIN6        (1u <<  6)

+#define PIN_PA07B_ADC_AIN7                 7  /**< \brief ADC signal: AIN7 on PA07 mux B */

+#define MUX_PA07B_ADC_AIN7                 1

+#define PINMUX_PA07B_ADC_AIN7      ((PIN_PA07B_ADC_AIN7 << 16) | MUX_PA07B_ADC_AIN7)

+#define PORT_PA07B_ADC_AIN7        (1u <<  7)

+#define PIN_PA08B_ADC_AIN16                8  /**< \brief ADC signal: AIN16 on PA08 mux B */

+#define MUX_PA08B_ADC_AIN16                1

+#define PINMUX_PA08B_ADC_AIN16     ((PIN_PA08B_ADC_AIN16 << 16) | MUX_PA08B_ADC_AIN16)

+#define PORT_PA08B_ADC_AIN16       (1u <<  8)

+#define PIN_PA09B_ADC_AIN17                9  /**< \brief ADC signal: AIN17 on PA09 mux B */

+#define MUX_PA09B_ADC_AIN17                1

+#define PINMUX_PA09B_ADC_AIN17     ((PIN_PA09B_ADC_AIN17 << 16) | MUX_PA09B_ADC_AIN17)

+#define PORT_PA09B_ADC_AIN17       (1u <<  9)

+#define PIN_PA10B_ADC_AIN18               10  /**< \brief ADC signal: AIN18 on PA10 mux B */

+#define MUX_PA10B_ADC_AIN18                1

+#define PINMUX_PA10B_ADC_AIN18     ((PIN_PA10B_ADC_AIN18 << 16) | MUX_PA10B_ADC_AIN18)

+#define PORT_PA10B_ADC_AIN18       (1u << 10)

+#define PIN_PA11B_ADC_AIN19               11  /**< \brief ADC signal: AIN19 on PA11 mux B */

+#define MUX_PA11B_ADC_AIN19                1

+#define PINMUX_PA11B_ADC_AIN19     ((PIN_PA11B_ADC_AIN19 << 16) | MUX_PA11B_ADC_AIN19)

+#define PORT_PA11B_ADC_AIN19       (1u << 11)

+#define PIN_PA04B_ADC_VREFP                4  /**< \brief ADC signal: VREFP on PA04 mux B */

+#define MUX_PA04B_ADC_VREFP                1

+#define PINMUX_PA04B_ADC_VREFP     ((PIN_PA04B_ADC_VREFP << 16) | MUX_PA04B_ADC_VREFP)

+#define PORT_PA04B_ADC_VREFP       (1u <<  4)

+/* ========== PORT definition for AC peripheral ========== */

+#define PIN_PA04B_AC_AIN0                  4  /**< \brief AC signal: AIN0 on PA04 mux B */

+#define MUX_PA04B_AC_AIN0                  1

+#define PINMUX_PA04B_AC_AIN0       ((PIN_PA04B_AC_AIN0 << 16) | MUX_PA04B_AC_AIN0)

+#define PORT_PA04B_AC_AIN0         (1u <<  4)

+#define PIN_PA05B_AC_AIN1                  5  /**< \brief AC signal: AIN1 on PA05 mux B */

+#define MUX_PA05B_AC_AIN1                  1

+#define PINMUX_PA05B_AC_AIN1       ((PIN_PA05B_AC_AIN1 << 16) | MUX_PA05B_AC_AIN1)

+#define PORT_PA05B_AC_AIN1         (1u <<  5)

+#define PIN_PA06B_AC_AIN2                  6  /**< \brief AC signal: AIN2 on PA06 mux B */

+#define MUX_PA06B_AC_AIN2                  1

+#define PINMUX_PA06B_AC_AIN2       ((PIN_PA06B_AC_AIN2 << 16) | MUX_PA06B_AC_AIN2)

+#define PORT_PA06B_AC_AIN2         (1u <<  6)

+#define PIN_PA07B_AC_AIN3                  7  /**< \brief AC signal: AIN3 on PA07 mux B */

+#define MUX_PA07B_AC_AIN3                  1

+#define PINMUX_PA07B_AC_AIN3       ((PIN_PA07B_AC_AIN3 << 16) | MUX_PA07B_AC_AIN3)

+#define PORT_PA07B_AC_AIN3         (1u <<  7)

+#define PIN_PA18H_AC_CMP0                 18  /**< \brief AC signal: CMP0 on PA18 mux H */

+#define MUX_PA18H_AC_CMP0                  7

+#define PINMUX_PA18H_AC_CMP0       ((PIN_PA18H_AC_CMP0 << 16) | MUX_PA18H_AC_CMP0)

+#define PORT_PA18H_AC_CMP0         (1u << 18)

+#define PIN_PA19H_AC_CMP1                 19  /**< \brief AC signal: CMP1 on PA19 mux H */

+#define MUX_PA19H_AC_CMP1                  7

+#define PINMUX_PA19H_AC_CMP1       ((PIN_PA19H_AC_CMP1 << 16) | MUX_PA19H_AC_CMP1)

+#define PORT_PA19H_AC_CMP1         (1u << 19)

+/* ========== PORT definition for DAC peripheral ========== */

+#define PIN_PA02B_DAC_VOUT                 2  /**< \brief DAC signal: VOUT on PA02 mux B */

+#define MUX_PA02B_DAC_VOUT                 1

+#define PINMUX_PA02B_DAC_VOUT      ((PIN_PA02B_DAC_VOUT << 16) | MUX_PA02B_DAC_VOUT)

+#define PORT_PA02B_DAC_VOUT        (1u <<  2)

+#define PIN_PA03B_DAC_VREFP                3  /**< \brief DAC signal: VREFP on PA03 mux B */

+#define MUX_PA03B_DAC_VREFP                1

+#define PINMUX_PA03B_DAC_VREFP     ((PIN_PA03B_DAC_VREFP << 16) | MUX_PA03B_DAC_VREFP)

+#define PORT_PA03B_DAC_VREFP       (1u <<  3)

+

+#endif /* _SAMD20E17_PIO_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20e18.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20e18.h
new file mode 100644
index 0000000..9766d8f
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20e18.h
@@ -0,0 +1,552 @@
+/**

+ * \file

+ *

+ * \brief Peripheral I/O description for SAMD20E18

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20E18_PIO_

+#define _SAMD20E18_PIO_

+

+#define PIN_PA00                           0  /**< \brief Pin Number for PA00 */

+#define PORT_PA00                  (1u <<  0) /**< \brief PORT Mask  for PA00 */

+#define PIN_PA01                           1  /**< \brief Pin Number for PA01 */

+#define PORT_PA01                  (1u <<  1) /**< \brief PORT Mask  for PA01 */

+#define PIN_PA02                           2  /**< \brief Pin Number for PA02 */

+#define PORT_PA02                  (1u <<  2) /**< \brief PORT Mask  for PA02 */

+#define PIN_PA03                           3  /**< \brief Pin Number for PA03 */

+#define PORT_PA03                  (1u <<  3) /**< \brief PORT Mask  for PA03 */

+#define PIN_PA04                           4  /**< \brief Pin Number for PA04 */

+#define PORT_PA04                  (1u <<  4) /**< \brief PORT Mask  for PA04 */

+#define PIN_PA05                           5  /**< \brief Pin Number for PA05 */

+#define PORT_PA05                  (1u <<  5) /**< \brief PORT Mask  for PA05 */

+#define PIN_PA06                           6  /**< \brief Pin Number for PA06 */

+#define PORT_PA06                  (1u <<  6) /**< \brief PORT Mask  for PA06 */

+#define PIN_PA07                           7  /**< \brief Pin Number for PA07 */

+#define PORT_PA07                  (1u <<  7) /**< \brief PORT Mask  for PA07 */

+#define PIN_PA08                           8  /**< \brief Pin Number for PA08 */

+#define PORT_PA08                  (1u <<  8) /**< \brief PORT Mask  for PA08 */

+#define PIN_PA09                           9  /**< \brief Pin Number for PA09 */

+#define PORT_PA09                  (1u <<  9) /**< \brief PORT Mask  for PA09 */

+#define PIN_PA10                          10  /**< \brief Pin Number for PA10 */

+#define PORT_PA10                  (1u << 10) /**< \brief PORT Mask  for PA10 */

+#define PIN_PA11                          11  /**< \brief Pin Number for PA11 */

+#define PORT_PA11                  (1u << 11) /**< \brief PORT Mask  for PA11 */

+#define PIN_PA14                          14  /**< \brief Pin Number for PA14 */

+#define PORT_PA14                  (1u << 14) /**< \brief PORT Mask  for PA14 */

+#define PIN_PA15                          15  /**< \brief Pin Number for PA15 */

+#define PORT_PA15                  (1u << 15) /**< \brief PORT Mask  for PA15 */

+#define PIN_PA16                          16  /**< \brief Pin Number for PA16 */

+#define PORT_PA16                  (1u << 16) /**< \brief PORT Mask  for PA16 */

+#define PIN_PA17                          17  /**< \brief Pin Number for PA17 */

+#define PORT_PA17                  (1u << 17) /**< \brief PORT Mask  for PA17 */

+#define PIN_PA18                          18  /**< \brief Pin Number for PA18 */

+#define PORT_PA18                  (1u << 18) /**< \brief PORT Mask  for PA18 */

+#define PIN_PA19                          19  /**< \brief Pin Number for PA19 */

+#define PORT_PA19                  (1u << 19) /**< \brief PORT Mask  for PA19 */

+#define PIN_PA22                          22  /**< \brief Pin Number for PA22 */

+#define PORT_PA22                  (1u << 22) /**< \brief PORT Mask  for PA22 */

+#define PIN_PA23                          23  /**< \brief Pin Number for PA23 */

+#define PORT_PA23                  (1u << 23) /**< \brief PORT Mask  for PA23 */

+#define PIN_PA24                          24  /**< \brief Pin Number for PA24 */

+#define PORT_PA24                  (1u << 24) /**< \brief PORT Mask  for PA24 */

+#define PIN_PA25                          25  /**< \brief Pin Number for PA25 */

+#define PORT_PA25                  (1u << 25) /**< \brief PORT Mask  for PA25 */

+#define PIN_PA27                          27  /**< \brief Pin Number for PA27 */

+#define PORT_PA27                  (1u << 27) /**< \brief PORT Mask  for PA27 */

+#define PIN_PA28                          28  /**< \brief Pin Number for PA28 */

+#define PORT_PA28                  (1u << 28) /**< \brief PORT Mask  for PA28 */

+#define PIN_PA30                          30  /**< \brief Pin Number for PA30 */

+#define PORT_PA30                  (1u << 30) /**< \brief PORT Mask  for PA30 */

+#define PIN_PA31                          31  /**< \brief Pin Number for PA31 */

+#define PORT_PA31                  (1u << 31) /**< \brief PORT Mask  for PA31 */

+/* ========== PORT definition for CORE peripheral ========== */

+#define PIN_PA30G_CORE_SWCLK              30  /**< \brief CORE signal: SWCLK on PA30 mux G */

+#define MUX_PA30G_CORE_SWCLK               6

+#define PINMUX_PA30G_CORE_SWCLK    ((PIN_PA30G_CORE_SWCLK << 16) | MUX_PA30G_CORE_SWCLK)

+#define PORT_PA30G_CORE_SWCLK      (1u << 30)

+/* ========== PORT definition for GCLK peripheral ========== */

+#define PIN_PA14H_GCLK_IO0                14  /**< \brief GCLK signal: IO0 on PA14 mux H */

+#define MUX_PA14H_GCLK_IO0                 7

+#define PINMUX_PA14H_GCLK_IO0      ((PIN_PA14H_GCLK_IO0 << 16) | MUX_PA14H_GCLK_IO0)

+#define PORT_PA14H_GCLK_IO0        (1u << 14)

+#define PIN_PA27H_GCLK_IO0                27  /**< \brief GCLK signal: IO0 on PA27 mux H */

+#define MUX_PA27H_GCLK_IO0                 7

+#define PINMUX_PA27H_GCLK_IO0      ((PIN_PA27H_GCLK_IO0 << 16) | MUX_PA27H_GCLK_IO0)

+#define PORT_PA27H_GCLK_IO0        (1u << 27)

+#define PIN_PA28H_GCLK_IO0                28  /**< \brief GCLK signal: IO0 on PA28 mux H */

+#define MUX_PA28H_GCLK_IO0                 7

+#define PINMUX_PA28H_GCLK_IO0      ((PIN_PA28H_GCLK_IO0 << 16) | MUX_PA28H_GCLK_IO0)

+#define PORT_PA28H_GCLK_IO0        (1u << 28)

+#define PIN_PA30H_GCLK_IO0                30  /**< \brief GCLK signal: IO0 on PA30 mux H */

+#define MUX_PA30H_GCLK_IO0                 7

+#define PINMUX_PA30H_GCLK_IO0      ((PIN_PA30H_GCLK_IO0 << 16) | MUX_PA30H_GCLK_IO0)

+#define PORT_PA30H_GCLK_IO0        (1u << 30)

+#define PIN_PA15H_GCLK_IO1                15  /**< \brief GCLK signal: IO1 on PA15 mux H */

+#define MUX_PA15H_GCLK_IO1                 7

+#define PINMUX_PA15H_GCLK_IO1      ((PIN_PA15H_GCLK_IO1 << 16) | MUX_PA15H_GCLK_IO1)

+#define PORT_PA15H_GCLK_IO1        (1u << 15)

+#define PIN_PA16H_GCLK_IO2                16  /**< \brief GCLK signal: IO2 on PA16 mux H */

+#define MUX_PA16H_GCLK_IO2                 7

+#define PINMUX_PA16H_GCLK_IO2      ((PIN_PA16H_GCLK_IO2 << 16) | MUX_PA16H_GCLK_IO2)

+#define PORT_PA16H_GCLK_IO2        (1u << 16)

+#define PIN_PA17H_GCLK_IO3                17  /**< \brief GCLK signal: IO3 on PA17 mux H */

+#define MUX_PA17H_GCLK_IO3                 7

+#define PINMUX_PA17H_GCLK_IO3      ((PIN_PA17H_GCLK_IO3 << 16) | MUX_PA17H_GCLK_IO3)

+#define PORT_PA17H_GCLK_IO3        (1u << 17)

+#define PIN_PA10H_GCLK_IO4                10  /**< \brief GCLK signal: IO4 on PA10 mux H */

+#define MUX_PA10H_GCLK_IO4                 7

+#define PINMUX_PA10H_GCLK_IO4      ((PIN_PA10H_GCLK_IO4 << 16) | MUX_PA10H_GCLK_IO4)

+#define PORT_PA10H_GCLK_IO4        (1u << 10)

+#define PIN_PA11H_GCLK_IO5                11  /**< \brief GCLK signal: IO5 on PA11 mux H */

+#define MUX_PA11H_GCLK_IO5                 7

+#define PINMUX_PA11H_GCLK_IO5      ((PIN_PA11H_GCLK_IO5 << 16) | MUX_PA11H_GCLK_IO5)

+#define PORT_PA11H_GCLK_IO5        (1u << 11)

+#define PIN_PA22H_GCLK_IO6                22  /**< \brief GCLK signal: IO6 on PA22 mux H */

+#define MUX_PA22H_GCLK_IO6                 7

+#define PINMUX_PA22H_GCLK_IO6      ((PIN_PA22H_GCLK_IO6 << 16) | MUX_PA22H_GCLK_IO6)

+#define PORT_PA22H_GCLK_IO6        (1u << 22)

+#define PIN_PA23H_GCLK_IO7                23  /**< \brief GCLK signal: IO7 on PA23 mux H */

+#define MUX_PA23H_GCLK_IO7                 7

+#define PINMUX_PA23H_GCLK_IO7      ((PIN_PA23H_GCLK_IO7 << 16) | MUX_PA23H_GCLK_IO7)

+#define PORT_PA23H_GCLK_IO7        (1u << 23)

+/* ========== PORT definition for EIC peripheral ========== */

+#define PIN_PA16A_EIC_EXTINT0             16  /**< \brief EIC signal: EXTINT0 on PA16 mux A */

+#define MUX_PA16A_EIC_EXTINT0              0

+#define PINMUX_PA16A_EIC_EXTINT0   ((PIN_PA16A_EIC_EXTINT0 << 16) | MUX_PA16A_EIC_EXTINT0)

+#define PORT_PA16A_EIC_EXTINT0     (1u << 16)

+#define PIN_PA00A_EIC_EXTINT0              0  /**< \brief EIC signal: EXTINT0 on PA00 mux A */

+#define MUX_PA00A_EIC_EXTINT0              0

+#define PINMUX_PA00A_EIC_EXTINT0   ((PIN_PA00A_EIC_EXTINT0 << 16) | MUX_PA00A_EIC_EXTINT0)

+#define PORT_PA00A_EIC_EXTINT0     (1u <<  0)

+#define PIN_PA17A_EIC_EXTINT1             17  /**< \brief EIC signal: EXTINT1 on PA17 mux A */

+#define MUX_PA17A_EIC_EXTINT1              0

+#define PINMUX_PA17A_EIC_EXTINT1   ((PIN_PA17A_EIC_EXTINT1 << 16) | MUX_PA17A_EIC_EXTINT1)

+#define PORT_PA17A_EIC_EXTINT1     (1u << 17)

+#define PIN_PA01A_EIC_EXTINT1              1  /**< \brief EIC signal: EXTINT1 on PA01 mux A */

+#define MUX_PA01A_EIC_EXTINT1              0

+#define PINMUX_PA01A_EIC_EXTINT1   ((PIN_PA01A_EIC_EXTINT1 << 16) | MUX_PA01A_EIC_EXTINT1)

+#define PORT_PA01A_EIC_EXTINT1     (1u <<  1)

+#define PIN_PA02A_EIC_EXTINT2              2  /**< \brief EIC signal: EXTINT2 on PA02 mux A */

+#define MUX_PA02A_EIC_EXTINT2              0

+#define PINMUX_PA02A_EIC_EXTINT2   ((PIN_PA02A_EIC_EXTINT2 << 16) | MUX_PA02A_EIC_EXTINT2)

+#define PORT_PA02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA18A_EIC_EXTINT2             18  /**< \brief EIC signal: EXTINT2 on PA18 mux A */

+#define MUX_PA18A_EIC_EXTINT2              0

+#define PINMUX_PA18A_EIC_EXTINT2   ((PIN_PA18A_EIC_EXTINT2 << 16) | MUX_PA18A_EIC_EXTINT2)

+#define PORT_PA18A_EIC_EXTINT2     (1u << 18)

+#define PIN_PA03A_EIC_EXTINT3              3  /**< \brief EIC signal: EXTINT3 on PA03 mux A */

+#define MUX_PA03A_EIC_EXTINT3              0

+#define PINMUX_PA03A_EIC_EXTINT3   ((PIN_PA03A_EIC_EXTINT3 << 16) | MUX_PA03A_EIC_EXTINT3)

+#define PORT_PA03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA19A_EIC_EXTINT3             19  /**< \brief EIC signal: EXTINT3 on PA19 mux A */

+#define MUX_PA19A_EIC_EXTINT3              0

+#define PINMUX_PA19A_EIC_EXTINT3   ((PIN_PA19A_EIC_EXTINT3 << 16) | MUX_PA19A_EIC_EXTINT3)

+#define PORT_PA19A_EIC_EXTINT3     (1u << 19)

+#define PIN_PA04A_EIC_EXTINT4              4  /**< \brief EIC signal: EXTINT4 on PA04 mux A */

+#define MUX_PA04A_EIC_EXTINT4              0

+#define PINMUX_PA04A_EIC_EXTINT4   ((PIN_PA04A_EIC_EXTINT4 << 16) | MUX_PA04A_EIC_EXTINT4)

+#define PORT_PA04A_EIC_EXTINT4     (1u <<  4)

+#define PIN_PA05A_EIC_EXTINT5              5  /**< \brief EIC signal: EXTINT5 on PA05 mux A */

+#define MUX_PA05A_EIC_EXTINT5              0

+#define PINMUX_PA05A_EIC_EXTINT5   ((PIN_PA05A_EIC_EXTINT5 << 16) | MUX_PA05A_EIC_EXTINT5)

+#define PORT_PA05A_EIC_EXTINT5     (1u <<  5)

+#define PIN_PA06A_EIC_EXTINT6              6  /**< \brief EIC signal: EXTINT6 on PA06 mux A */

+#define MUX_PA06A_EIC_EXTINT6              0

+#define PINMUX_PA06A_EIC_EXTINT6   ((PIN_PA06A_EIC_EXTINT6 << 16) | MUX_PA06A_EIC_EXTINT6)

+#define PORT_PA06A_EIC_EXTINT6     (1u <<  6)

+#define PIN_PA22A_EIC_EXTINT6             22  /**< \brief EIC signal: EXTINT6 on PA22 mux A */

+#define MUX_PA22A_EIC_EXTINT6              0

+#define PINMUX_PA22A_EIC_EXTINT6   ((PIN_PA22A_EIC_EXTINT6 << 16) | MUX_PA22A_EIC_EXTINT6)

+#define PORT_PA22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PA07A_EIC_EXTINT7              7  /**< \brief EIC signal: EXTINT7 on PA07 mux A */

+#define MUX_PA07A_EIC_EXTINT7              0

+#define PINMUX_PA07A_EIC_EXTINT7   ((PIN_PA07A_EIC_EXTINT7 << 16) | MUX_PA07A_EIC_EXTINT7)

+#define PORT_PA07A_EIC_EXTINT7     (1u <<  7)

+#define PIN_PA23A_EIC_EXTINT7             23  /**< \brief EIC signal: EXTINT7 on PA23 mux A */

+#define MUX_PA23A_EIC_EXTINT7              0

+#define PINMUX_PA23A_EIC_EXTINT7   ((PIN_PA23A_EIC_EXTINT7 << 16) | MUX_PA23A_EIC_EXTINT7)

+#define PORT_PA23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PA28A_EIC_EXTINT8             28  /**< \brief EIC signal: EXTINT8 on PA28 mux A */

+#define MUX_PA28A_EIC_EXTINT8              0

+#define PINMUX_PA28A_EIC_EXTINT8   ((PIN_PA28A_EIC_EXTINT8 << 16) | MUX_PA28A_EIC_EXTINT8)

+#define PORT_PA28A_EIC_EXTINT8     (1u << 28)

+#define PIN_PA09A_EIC_EXTINT9              9  /**< \brief EIC signal: EXTINT9 on PA09 mux A */

+#define MUX_PA09A_EIC_EXTINT9              0

+#define PINMUX_PA09A_EIC_EXTINT9   ((PIN_PA09A_EIC_EXTINT9 << 16) | MUX_PA09A_EIC_EXTINT9)

+#define PORT_PA09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PA10A_EIC_EXTINT10            10  /**< \brief EIC signal: EXTINT10 on PA10 mux A */

+#define MUX_PA10A_EIC_EXTINT10             0

+#define PINMUX_PA10A_EIC_EXTINT10  ((PIN_PA10A_EIC_EXTINT10 << 16) | MUX_PA10A_EIC_EXTINT10)

+#define PORT_PA10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA30A_EIC_EXTINT10            30  /**< \brief EIC signal: EXTINT10 on PA30 mux A */

+#define MUX_PA30A_EIC_EXTINT10             0

+#define PINMUX_PA30A_EIC_EXTINT10  ((PIN_PA30A_EIC_EXTINT10 << 16) | MUX_PA30A_EIC_EXTINT10)

+#define PORT_PA30A_EIC_EXTINT10    (1u << 30)

+#define PIN_PA11A_EIC_EXTINT11            11  /**< \brief EIC signal: EXTINT11 on PA11 mux A */

+#define MUX_PA11A_EIC_EXTINT11             0

+#define PINMUX_PA11A_EIC_EXTINT11  ((PIN_PA11A_EIC_EXTINT11 << 16) | MUX_PA11A_EIC_EXTINT11)

+#define PORT_PA11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA31A_EIC_EXTINT11            31  /**< \brief EIC signal: EXTINT11 on PA31 mux A */

+#define MUX_PA31A_EIC_EXTINT11             0

+#define PINMUX_PA31A_EIC_EXTINT11  ((PIN_PA31A_EIC_EXTINT11 << 16) | MUX_PA31A_EIC_EXTINT11)

+#define PORT_PA31A_EIC_EXTINT11    (1u << 31)

+#define PIN_PA24A_EIC_EXTINT12            24  /**< \brief EIC signal: EXTINT12 on PA24 mux A */

+#define MUX_PA24A_EIC_EXTINT12             0

+#define PINMUX_PA24A_EIC_EXTINT12  ((PIN_PA24A_EIC_EXTINT12 << 16) | MUX_PA24A_EIC_EXTINT12)

+#define PORT_PA24A_EIC_EXTINT12    (1u << 24)

+#define PIN_PA25A_EIC_EXTINT13            25  /**< \brief EIC signal: EXTINT13 on PA25 mux A */

+#define MUX_PA25A_EIC_EXTINT13             0

+#define PINMUX_PA25A_EIC_EXTINT13  ((PIN_PA25A_EIC_EXTINT13 << 16) | MUX_PA25A_EIC_EXTINT13)

+#define PORT_PA25A_EIC_EXTINT13    (1u << 25)

+#define PIN_PA14A_EIC_EXTINT14            14  /**< \brief EIC signal: EXTINT14 on PA14 mux A */

+#define MUX_PA14A_EIC_EXTINT14             0

+#define PINMUX_PA14A_EIC_EXTINT14  ((PIN_PA14A_EIC_EXTINT14 << 16) | MUX_PA14A_EIC_EXTINT14)

+#define PORT_PA14A_EIC_EXTINT14    (1u << 14)

+#define PIN_PA27A_EIC_EXTINT15            27  /**< \brief EIC signal: EXTINT15 on PA27 mux A */

+#define MUX_PA27A_EIC_EXTINT15             0

+#define PINMUX_PA27A_EIC_EXTINT15  ((PIN_PA27A_EIC_EXTINT15 << 16) | MUX_PA27A_EIC_EXTINT15)

+#define PORT_PA27A_EIC_EXTINT15    (1u << 27)

+#define PIN_PA15A_EIC_EXTINT15            15  /**< \brief EIC signal: EXTINT15 on PA15 mux A */

+#define MUX_PA15A_EIC_EXTINT15             0

+#define PINMUX_PA15A_EIC_EXTINT15  ((PIN_PA15A_EIC_EXTINT15 << 16) | MUX_PA15A_EIC_EXTINT15)

+#define PORT_PA15A_EIC_EXTINT15    (1u << 15)

+#define PIN_PA08A_EIC_NMI                  8  /**< \brief EIC signal: NMI on PA08 mux A */

+#define MUX_PA08A_EIC_NMI                  0

+#define PINMUX_PA08A_EIC_NMI       ((PIN_PA08A_EIC_NMI << 16) | MUX_PA08A_EIC_NMI)

+#define PORT_PA08A_EIC_NMI         (1u <<  8)

+/* ========== PORT definition for SERCOM0 peripheral ========== */

+#define PIN_PA04D_SERCOM0_PAD0             4  /**< \brief SERCOM0 signal: PAD0 on PA04 mux D */

+#define MUX_PA04D_SERCOM0_PAD0             3

+#define PINMUX_PA04D_SERCOM0_PAD0  ((PIN_PA04D_SERCOM0_PAD0 << 16) | MUX_PA04D_SERCOM0_PAD0)

+#define PORT_PA04D_SERCOM0_PAD0    (1u <<  4)

+#define PIN_PA08C_SERCOM0_PAD0             8  /**< \brief SERCOM0 signal: PAD0 on PA08 mux C */

+#define MUX_PA08C_SERCOM0_PAD0             2

+#define PINMUX_PA08C_SERCOM0_PAD0  ((PIN_PA08C_SERCOM0_PAD0 << 16) | MUX_PA08C_SERCOM0_PAD0)

+#define PORT_PA08C_SERCOM0_PAD0    (1u <<  8)

+#define PIN_PA05D_SERCOM0_PAD1             5  /**< \brief SERCOM0 signal: PAD1 on PA05 mux D */

+#define MUX_PA05D_SERCOM0_PAD1             3

+#define PINMUX_PA05D_SERCOM0_PAD1  ((PIN_PA05D_SERCOM0_PAD1 << 16) | MUX_PA05D_SERCOM0_PAD1)

+#define PORT_PA05D_SERCOM0_PAD1    (1u <<  5)

+#define PIN_PA09C_SERCOM0_PAD1             9  /**< \brief SERCOM0 signal: PAD1 on PA09 mux C */

+#define MUX_PA09C_SERCOM0_PAD1             2

+#define PINMUX_PA09C_SERCOM0_PAD1  ((PIN_PA09C_SERCOM0_PAD1 << 16) | MUX_PA09C_SERCOM0_PAD1)

+#define PORT_PA09C_SERCOM0_PAD1    (1u <<  9)

+#define PIN_PA06D_SERCOM0_PAD2             6  /**< \brief SERCOM0 signal: PAD2 on PA06 mux D */

+#define MUX_PA06D_SERCOM0_PAD2             3

+#define PINMUX_PA06D_SERCOM0_PAD2  ((PIN_PA06D_SERCOM0_PAD2 << 16) | MUX_PA06D_SERCOM0_PAD2)

+#define PORT_PA06D_SERCOM0_PAD2    (1u <<  6)

+#define PIN_PA10C_SERCOM0_PAD2            10  /**< \brief SERCOM0 signal: PAD2 on PA10 mux C */

+#define MUX_PA10C_SERCOM0_PAD2             2

+#define PINMUX_PA10C_SERCOM0_PAD2  ((PIN_PA10C_SERCOM0_PAD2 << 16) | MUX_PA10C_SERCOM0_PAD2)

+#define PORT_PA10C_SERCOM0_PAD2    (1u << 10)

+#define PIN_PA07D_SERCOM0_PAD3             7  /**< \brief SERCOM0 signal: PAD3 on PA07 mux D */

+#define MUX_PA07D_SERCOM0_PAD3             3

+#define PINMUX_PA07D_SERCOM0_PAD3  ((PIN_PA07D_SERCOM0_PAD3 << 16) | MUX_PA07D_SERCOM0_PAD3)

+#define PORT_PA07D_SERCOM0_PAD3    (1u <<  7)

+#define PIN_PA11C_SERCOM0_PAD3            11  /**< \brief SERCOM0 signal: PAD3 on PA11 mux C */

+#define MUX_PA11C_SERCOM0_PAD3             2

+#define PINMUX_PA11C_SERCOM0_PAD3  ((PIN_PA11C_SERCOM0_PAD3 << 16) | MUX_PA11C_SERCOM0_PAD3)

+#define PORT_PA11C_SERCOM0_PAD3    (1u << 11)

+/* ========== PORT definition for SERCOM1 peripheral ========== */

+#define PIN_PA16C_SERCOM1_PAD0            16  /**< \brief SERCOM1 signal: PAD0 on PA16 mux C */

+#define MUX_PA16C_SERCOM1_PAD0             2

+#define PINMUX_PA16C_SERCOM1_PAD0  ((PIN_PA16C_SERCOM1_PAD0 << 16) | MUX_PA16C_SERCOM1_PAD0)

+#define PORT_PA16C_SERCOM1_PAD0    (1u << 16)

+#define PIN_PA00D_SERCOM1_PAD0             0  /**< \brief SERCOM1 signal: PAD0 on PA00 mux D */

+#define MUX_PA00D_SERCOM1_PAD0             3

+#define PINMUX_PA00D_SERCOM1_PAD0  ((PIN_PA00D_SERCOM1_PAD0 << 16) | MUX_PA00D_SERCOM1_PAD0)

+#define PORT_PA00D_SERCOM1_PAD0    (1u <<  0)

+#define PIN_PA17C_SERCOM1_PAD1            17  /**< \brief SERCOM1 signal: PAD1 on PA17 mux C */

+#define MUX_PA17C_SERCOM1_PAD1             2

+#define PINMUX_PA17C_SERCOM1_PAD1  ((PIN_PA17C_SERCOM1_PAD1 << 16) | MUX_PA17C_SERCOM1_PAD1)

+#define PORT_PA17C_SERCOM1_PAD1    (1u << 17)

+#define PIN_PA01D_SERCOM1_PAD1             1  /**< \brief SERCOM1 signal: PAD1 on PA01 mux D */

+#define MUX_PA01D_SERCOM1_PAD1             3

+#define PINMUX_PA01D_SERCOM1_PAD1  ((PIN_PA01D_SERCOM1_PAD1 << 16) | MUX_PA01D_SERCOM1_PAD1)

+#define PORT_PA01D_SERCOM1_PAD1    (1u <<  1)

+#define PIN_PA30D_SERCOM1_PAD2            30  /**< \brief SERCOM1 signal: PAD2 on PA30 mux D */

+#define MUX_PA30D_SERCOM1_PAD2             3

+#define PINMUX_PA30D_SERCOM1_PAD2  ((PIN_PA30D_SERCOM1_PAD2 << 16) | MUX_PA30D_SERCOM1_PAD2)

+#define PORT_PA30D_SERCOM1_PAD2    (1u << 30)

+#define PIN_PA18C_SERCOM1_PAD2            18  /**< \brief SERCOM1 signal: PAD2 on PA18 mux C */

+#define MUX_PA18C_SERCOM1_PAD2             2

+#define PINMUX_PA18C_SERCOM1_PAD2  ((PIN_PA18C_SERCOM1_PAD2 << 16) | MUX_PA18C_SERCOM1_PAD2)

+#define PORT_PA18C_SERCOM1_PAD2    (1u << 18)

+#define PIN_PA31D_SERCOM1_PAD3            31  /**< \brief SERCOM1 signal: PAD3 on PA31 mux D */

+#define MUX_PA31D_SERCOM1_PAD3             3

+#define PINMUX_PA31D_SERCOM1_PAD3  ((PIN_PA31D_SERCOM1_PAD3 << 16) | MUX_PA31D_SERCOM1_PAD3)

+#define PORT_PA31D_SERCOM1_PAD3    (1u << 31)

+#define PIN_PA19C_SERCOM1_PAD3            19  /**< \brief SERCOM1 signal: PAD3 on PA19 mux C */

+#define MUX_PA19C_SERCOM1_PAD3             2

+#define PINMUX_PA19C_SERCOM1_PAD3  ((PIN_PA19C_SERCOM1_PAD3 << 16) | MUX_PA19C_SERCOM1_PAD3)

+#define PORT_PA19C_SERCOM1_PAD3    (1u << 19)

+/* ========== PORT definition for SERCOM2 peripheral ========== */

+#define PIN_PA08D_SERCOM2_PAD0             8  /**< \brief SERCOM2 signal: PAD0 on PA08 mux D */

+#define MUX_PA08D_SERCOM2_PAD0             3

+#define PINMUX_PA08D_SERCOM2_PAD0  ((PIN_PA08D_SERCOM2_PAD0 << 16) | MUX_PA08D_SERCOM2_PAD0)

+#define PORT_PA08D_SERCOM2_PAD0    (1u <<  8)

+#define PIN_PA09D_SERCOM2_PAD1             9  /**< \brief SERCOM2 signal: PAD1 on PA09 mux D */

+#define MUX_PA09D_SERCOM2_PAD1             3

+#define PINMUX_PA09D_SERCOM2_PAD1  ((PIN_PA09D_SERCOM2_PAD1 << 16) | MUX_PA09D_SERCOM2_PAD1)

+#define PORT_PA09D_SERCOM2_PAD1    (1u <<  9)

+#define PIN_PA10D_SERCOM2_PAD2            10  /**< \brief SERCOM2 signal: PAD2 on PA10 mux D */

+#define MUX_PA10D_SERCOM2_PAD2             3

+#define PINMUX_PA10D_SERCOM2_PAD2  ((PIN_PA10D_SERCOM2_PAD2 << 16) | MUX_PA10D_SERCOM2_PAD2)

+#define PORT_PA10D_SERCOM2_PAD2    (1u << 10)

+#define PIN_PA14C_SERCOM2_PAD2            14  /**< \brief SERCOM2 signal: PAD2 on PA14 mux C */

+#define MUX_PA14C_SERCOM2_PAD2             2

+#define PINMUX_PA14C_SERCOM2_PAD2  ((PIN_PA14C_SERCOM2_PAD2 << 16) | MUX_PA14C_SERCOM2_PAD2)

+#define PORT_PA14C_SERCOM2_PAD2    (1u << 14)

+#define PIN_PA11D_SERCOM2_PAD3            11  /**< \brief SERCOM2 signal: PAD3 on PA11 mux D */

+#define MUX_PA11D_SERCOM2_PAD3             3

+#define PINMUX_PA11D_SERCOM2_PAD3  ((PIN_PA11D_SERCOM2_PAD3 << 16) | MUX_PA11D_SERCOM2_PAD3)

+#define PORT_PA11D_SERCOM2_PAD3    (1u << 11)

+#define PIN_PA15C_SERCOM2_PAD3            15  /**< \brief SERCOM2 signal: PAD3 on PA15 mux C */

+#define MUX_PA15C_SERCOM2_PAD3             2

+#define PINMUX_PA15C_SERCOM2_PAD3  ((PIN_PA15C_SERCOM2_PAD3 << 16) | MUX_PA15C_SERCOM2_PAD3)

+#define PORT_PA15C_SERCOM2_PAD3    (1u << 15)

+/* ========== PORT definition for SERCOM3 peripheral ========== */

+#define PIN_PA16D_SERCOM3_PAD0            16  /**< \brief SERCOM3 signal: PAD0 on PA16 mux D */

+#define MUX_PA16D_SERCOM3_PAD0             3

+#define PINMUX_PA16D_SERCOM3_PAD0  ((PIN_PA16D_SERCOM3_PAD0 << 16) | MUX_PA16D_SERCOM3_PAD0)

+#define PORT_PA16D_SERCOM3_PAD0    (1u << 16)

+#define PIN_PA22C_SERCOM3_PAD0            22  /**< \brief SERCOM3 signal: PAD0 on PA22 mux C */

+#define MUX_PA22C_SERCOM3_PAD0             2

+#define PINMUX_PA22C_SERCOM3_PAD0  ((PIN_PA22C_SERCOM3_PAD0 << 16) | MUX_PA22C_SERCOM3_PAD0)

+#define PORT_PA22C_SERCOM3_PAD0    (1u << 22)

+#define PIN_PA17D_SERCOM3_PAD1            17  /**< \brief SERCOM3 signal: PAD1 on PA17 mux D */

+#define MUX_PA17D_SERCOM3_PAD1             3

+#define PINMUX_PA17D_SERCOM3_PAD1  ((PIN_PA17D_SERCOM3_PAD1 << 16) | MUX_PA17D_SERCOM3_PAD1)

+#define PORT_PA17D_SERCOM3_PAD1    (1u << 17)

+#define PIN_PA23C_SERCOM3_PAD1            23  /**< \brief SERCOM3 signal: PAD1 on PA23 mux C */

+#define MUX_PA23C_SERCOM3_PAD1             2

+#define PINMUX_PA23C_SERCOM3_PAD1  ((PIN_PA23C_SERCOM3_PAD1 << 16) | MUX_PA23C_SERCOM3_PAD1)

+#define PORT_PA23C_SERCOM3_PAD1    (1u << 23)

+#define PIN_PA18D_SERCOM3_PAD2            18  /**< \brief SERCOM3 signal: PAD2 on PA18 mux D */

+#define MUX_PA18D_SERCOM3_PAD2             3

+#define PINMUX_PA18D_SERCOM3_PAD2  ((PIN_PA18D_SERCOM3_PAD2 << 16) | MUX_PA18D_SERCOM3_PAD2)

+#define PORT_PA18D_SERCOM3_PAD2    (1u << 18)

+#define PIN_PA24C_SERCOM3_PAD2            24  /**< \brief SERCOM3 signal: PAD2 on PA24 mux C */

+#define MUX_PA24C_SERCOM3_PAD2             2

+#define PINMUX_PA24C_SERCOM3_PAD2  ((PIN_PA24C_SERCOM3_PAD2 << 16) | MUX_PA24C_SERCOM3_PAD2)

+#define PORT_PA24C_SERCOM3_PAD2    (1u << 24)

+#define PIN_PA19D_SERCOM3_PAD3            19  /**< \brief SERCOM3 signal: PAD3 on PA19 mux D */

+#define MUX_PA19D_SERCOM3_PAD3             3

+#define PINMUX_PA19D_SERCOM3_PAD3  ((PIN_PA19D_SERCOM3_PAD3 << 16) | MUX_PA19D_SERCOM3_PAD3)

+#define PORT_PA19D_SERCOM3_PAD3    (1u << 19)

+#define PIN_PA25C_SERCOM3_PAD3            25  /**< \brief SERCOM3 signal: PAD3 on PA25 mux C */

+#define MUX_PA25C_SERCOM3_PAD3             2

+#define PINMUX_PA25C_SERCOM3_PAD3  ((PIN_PA25C_SERCOM3_PAD3 << 16) | MUX_PA25C_SERCOM3_PAD3)

+#define PORT_PA25C_SERCOM3_PAD3    (1u << 25)

+/* ========== PORT definition for TC0 peripheral ========== */

+#define PIN_PA04F_TC0_WO0                  4  /**< \brief TC0 signal: WO0 on PA04 mux F */

+#define MUX_PA04F_TC0_WO0                  5

+#define PINMUX_PA04F_TC0_WO0       ((PIN_PA04F_TC0_WO0 << 16) | MUX_PA04F_TC0_WO0)

+#define PORT_PA04F_TC0_WO0         (1u <<  4)

+#define PIN_PA08E_TC0_WO0                  8  /**< \brief TC0 signal: WO0 on PA08 mux E */

+#define MUX_PA08E_TC0_WO0                  4

+#define PINMUX_PA08E_TC0_WO0       ((PIN_PA08E_TC0_WO0 << 16) | MUX_PA08E_TC0_WO0)

+#define PORT_PA08E_TC0_WO0         (1u <<  8)

+#define PIN_PA05F_TC0_WO1                  5  /**< \brief TC0 signal: WO1 on PA05 mux F */

+#define MUX_PA05F_TC0_WO1                  5

+#define PINMUX_PA05F_TC0_WO1       ((PIN_PA05F_TC0_WO1 << 16) | MUX_PA05F_TC0_WO1)

+#define PORT_PA05F_TC0_WO1         (1u <<  5)

+#define PIN_PA09E_TC0_WO1                  9  /**< \brief TC0 signal: WO1 on PA09 mux E */

+#define MUX_PA09E_TC0_WO1                  4

+#define PINMUX_PA09E_TC0_WO1       ((PIN_PA09E_TC0_WO1 << 16) | MUX_PA09E_TC0_WO1)

+#define PORT_PA09E_TC0_WO1         (1u <<  9)

+/* ========== PORT definition for TC1 peripheral ========== */

+#define PIN_PA06F_TC1_WO0                  6  /**< \brief TC1 signal: WO0 on PA06 mux F */

+#define MUX_PA06F_TC1_WO0                  5

+#define PINMUX_PA06F_TC1_WO0       ((PIN_PA06F_TC1_WO0 << 16) | MUX_PA06F_TC1_WO0)

+#define PORT_PA06F_TC1_WO0         (1u <<  6)

+#define PIN_PA30F_TC1_WO0                 30  /**< \brief TC1 signal: WO0 on PA30 mux F */

+#define MUX_PA30F_TC1_WO0                  5

+#define PINMUX_PA30F_TC1_WO0       ((PIN_PA30F_TC1_WO0 << 16) | MUX_PA30F_TC1_WO0)

+#define PORT_PA30F_TC1_WO0         (1u << 30)

+#define PIN_PA10E_TC1_WO0                 10  /**< \brief TC1 signal: WO0 on PA10 mux E */

+#define MUX_PA10E_TC1_WO0                  4

+#define PINMUX_PA10E_TC1_WO0       ((PIN_PA10E_TC1_WO0 << 16) | MUX_PA10E_TC1_WO0)

+#define PORT_PA10E_TC1_WO0         (1u << 10)

+#define PIN_PA07F_TC1_WO1                  7  /**< \brief TC1 signal: WO1 on PA07 mux F */

+#define MUX_PA07F_TC1_WO1                  5

+#define PINMUX_PA07F_TC1_WO1       ((PIN_PA07F_TC1_WO1 << 16) | MUX_PA07F_TC1_WO1)

+#define PORT_PA07F_TC1_WO1         (1u <<  7)

+#define PIN_PA31F_TC1_WO1                 31  /**< \brief TC1 signal: WO1 on PA31 mux F */

+#define MUX_PA31F_TC1_WO1                  5

+#define PINMUX_PA31F_TC1_WO1       ((PIN_PA31F_TC1_WO1 << 16) | MUX_PA31F_TC1_WO1)

+#define PORT_PA31F_TC1_WO1         (1u << 31)

+#define PIN_PA11E_TC1_WO1                 11  /**< \brief TC1 signal: WO1 on PA11 mux E */

+#define MUX_PA11E_TC1_WO1                  4

+#define PINMUX_PA11E_TC1_WO1       ((PIN_PA11E_TC1_WO1 << 16) | MUX_PA11E_TC1_WO1)

+#define PORT_PA11E_TC1_WO1         (1u << 11)

+/* ========== PORT definition for TC2 peripheral ========== */

+#define PIN_PA16F_TC2_WO0                 16  /**< \brief TC2 signal: WO0 on PA16 mux F */

+#define MUX_PA16F_TC2_WO0                  5

+#define PINMUX_PA16F_TC2_WO0       ((PIN_PA16F_TC2_WO0 << 16) | MUX_PA16F_TC2_WO0)

+#define PORT_PA16F_TC2_WO0         (1u << 16)

+#define PIN_PA00F_TC2_WO0                  0  /**< \brief TC2 signal: WO0 on PA00 mux F */

+#define MUX_PA00F_TC2_WO0                  5

+#define PINMUX_PA00F_TC2_WO0       ((PIN_PA00F_TC2_WO0 << 16) | MUX_PA00F_TC2_WO0)

+#define PORT_PA00F_TC2_WO0         (1u <<  0)

+#define PIN_PA17F_TC2_WO1                 17  /**< \brief TC2 signal: WO1 on PA17 mux F */

+#define MUX_PA17F_TC2_WO1                  5

+#define PINMUX_PA17F_TC2_WO1       ((PIN_PA17F_TC2_WO1 << 16) | MUX_PA17F_TC2_WO1)

+#define PORT_PA17F_TC2_WO1         (1u << 17)

+#define PIN_PA01F_TC2_WO1                  1  /**< \brief TC2 signal: WO1 on PA01 mux F */

+#define MUX_PA01F_TC2_WO1                  5

+#define PINMUX_PA01F_TC2_WO1       ((PIN_PA01F_TC2_WO1 << 16) | MUX_PA01F_TC2_WO1)

+#define PORT_PA01F_TC2_WO1         (1u <<  1)

+/* ========== PORT definition for TC3 peripheral ========== */

+#define PIN_PA18F_TC3_WO0                 18  /**< \brief TC3 signal: WO0 on PA18 mux F */

+#define MUX_PA18F_TC3_WO0                  5

+#define PINMUX_PA18F_TC3_WO0       ((PIN_PA18F_TC3_WO0 << 16) | MUX_PA18F_TC3_WO0)

+#define PORT_PA18F_TC3_WO0         (1u << 18)

+#define PIN_PA14E_TC3_WO0                 14  /**< \brief TC3 signal: WO0 on PA14 mux E */

+#define MUX_PA14E_TC3_WO0                  4

+#define PINMUX_PA14E_TC3_WO0       ((PIN_PA14E_TC3_WO0 << 16) | MUX_PA14E_TC3_WO0)

+#define PORT_PA14E_TC3_WO0         (1u << 14)

+#define PIN_PA19F_TC3_WO1                 19  /**< \brief TC3 signal: WO1 on PA19 mux F */

+#define MUX_PA19F_TC3_WO1                  5

+#define PINMUX_PA19F_TC3_WO1       ((PIN_PA19F_TC3_WO1 << 16) | MUX_PA19F_TC3_WO1)

+#define PORT_PA19F_TC3_WO1         (1u << 19)

+#define PIN_PA15E_TC3_WO1                 15  /**< \brief TC3 signal: WO1 on PA15 mux E */

+#define MUX_PA15E_TC3_WO1                  4

+#define PINMUX_PA15E_TC3_WO1       ((PIN_PA15E_TC3_WO1 << 16) | MUX_PA15E_TC3_WO1)

+#define PORT_PA15E_TC3_WO1         (1u << 15)

+/* ========== PORT definition for TC4 peripheral ========== */

+#define PIN_PA22F_TC4_WO0                 22  /**< \brief TC4 signal: WO0 on PA22 mux F */

+#define MUX_PA22F_TC4_WO0                  5

+#define PINMUX_PA22F_TC4_WO0       ((PIN_PA22F_TC4_WO0 << 16) | MUX_PA22F_TC4_WO0)

+#define PORT_PA22F_TC4_WO0         (1u << 22)

+#define PIN_PA23F_TC4_WO1                 23  /**< \brief TC4 signal: WO1 on PA23 mux F */

+#define MUX_PA23F_TC4_WO1                  5

+#define PINMUX_PA23F_TC4_WO1       ((PIN_PA23F_TC4_WO1 << 16) | MUX_PA23F_TC4_WO1)

+#define PORT_PA23F_TC4_WO1         (1u << 23)

+/* ========== PORT definition for TC5 peripheral ========== */

+#define PIN_PA24F_TC5_WO0                 24  /**< \brief TC5 signal: WO0 on PA24 mux F */

+#define MUX_PA24F_TC5_WO0                  5

+#define PINMUX_PA24F_TC5_WO0       ((PIN_PA24F_TC5_WO0 << 16) | MUX_PA24F_TC5_WO0)

+#define PORT_PA24F_TC5_WO0         (1u << 24)

+#define PIN_PA25F_TC5_WO1                 25  /**< \brief TC5 signal: WO1 on PA25 mux F */

+#define MUX_PA25F_TC5_WO1                  5

+#define PINMUX_PA25F_TC5_WO1       ((PIN_PA25F_TC5_WO1 << 16) | MUX_PA25F_TC5_WO1)

+#define PORT_PA25F_TC5_WO1         (1u << 25)

+/* ========== PORT definition for ADC peripheral ========== */

+#define PIN_PA02B_ADC_AIN0                 2  /**< \brief ADC signal: AIN0 on PA02 mux B */

+#define MUX_PA02B_ADC_AIN0                 1

+#define PINMUX_PA02B_ADC_AIN0      ((PIN_PA02B_ADC_AIN0 << 16) | MUX_PA02B_ADC_AIN0)

+#define PORT_PA02B_ADC_AIN0        (1u <<  2)

+#define PIN_PA03B_ADC_AIN1                 3  /**< \brief ADC signal: AIN1 on PA03 mux B */

+#define MUX_PA03B_ADC_AIN1                 1

+#define PINMUX_PA03B_ADC_AIN1      ((PIN_PA03B_ADC_AIN1 << 16) | MUX_PA03B_ADC_AIN1)

+#define PORT_PA03B_ADC_AIN1        (1u <<  3)

+#define PIN_PA04B_ADC_AIN4                 4  /**< \brief ADC signal: AIN4 on PA04 mux B */

+#define MUX_PA04B_ADC_AIN4                 1

+#define PINMUX_PA04B_ADC_AIN4      ((PIN_PA04B_ADC_AIN4 << 16) | MUX_PA04B_ADC_AIN4)

+#define PORT_PA04B_ADC_AIN4        (1u <<  4)

+#define PIN_PA05B_ADC_AIN5                 5  /**< \brief ADC signal: AIN5 on PA05 mux B */

+#define MUX_PA05B_ADC_AIN5                 1

+#define PINMUX_PA05B_ADC_AIN5      ((PIN_PA05B_ADC_AIN5 << 16) | MUX_PA05B_ADC_AIN5)

+#define PORT_PA05B_ADC_AIN5        (1u <<  5)

+#define PIN_PA06B_ADC_AIN6                 6  /**< \brief ADC signal: AIN6 on PA06 mux B */

+#define MUX_PA06B_ADC_AIN6                 1

+#define PINMUX_PA06B_ADC_AIN6      ((PIN_PA06B_ADC_AIN6 << 16) | MUX_PA06B_ADC_AIN6)

+#define PORT_PA06B_ADC_AIN6        (1u <<  6)

+#define PIN_PA07B_ADC_AIN7                 7  /**< \brief ADC signal: AIN7 on PA07 mux B */

+#define MUX_PA07B_ADC_AIN7                 1

+#define PINMUX_PA07B_ADC_AIN7      ((PIN_PA07B_ADC_AIN7 << 16) | MUX_PA07B_ADC_AIN7)

+#define PORT_PA07B_ADC_AIN7        (1u <<  7)

+#define PIN_PA08B_ADC_AIN16                8  /**< \brief ADC signal: AIN16 on PA08 mux B */

+#define MUX_PA08B_ADC_AIN16                1

+#define PINMUX_PA08B_ADC_AIN16     ((PIN_PA08B_ADC_AIN16 << 16) | MUX_PA08B_ADC_AIN16)

+#define PORT_PA08B_ADC_AIN16       (1u <<  8)

+#define PIN_PA09B_ADC_AIN17                9  /**< \brief ADC signal: AIN17 on PA09 mux B */

+#define MUX_PA09B_ADC_AIN17                1

+#define PINMUX_PA09B_ADC_AIN17     ((PIN_PA09B_ADC_AIN17 << 16) | MUX_PA09B_ADC_AIN17)

+#define PORT_PA09B_ADC_AIN17       (1u <<  9)

+#define PIN_PA10B_ADC_AIN18               10  /**< \brief ADC signal: AIN18 on PA10 mux B */

+#define MUX_PA10B_ADC_AIN18                1

+#define PINMUX_PA10B_ADC_AIN18     ((PIN_PA10B_ADC_AIN18 << 16) | MUX_PA10B_ADC_AIN18)

+#define PORT_PA10B_ADC_AIN18       (1u << 10)

+#define PIN_PA11B_ADC_AIN19               11  /**< \brief ADC signal: AIN19 on PA11 mux B */

+#define MUX_PA11B_ADC_AIN19                1

+#define PINMUX_PA11B_ADC_AIN19     ((PIN_PA11B_ADC_AIN19 << 16) | MUX_PA11B_ADC_AIN19)

+#define PORT_PA11B_ADC_AIN19       (1u << 11)

+#define PIN_PA04B_ADC_VREFP                4  /**< \brief ADC signal: VREFP on PA04 mux B */

+#define MUX_PA04B_ADC_VREFP                1

+#define PINMUX_PA04B_ADC_VREFP     ((PIN_PA04B_ADC_VREFP << 16) | MUX_PA04B_ADC_VREFP)

+#define PORT_PA04B_ADC_VREFP       (1u <<  4)

+/* ========== PORT definition for AC peripheral ========== */

+#define PIN_PA04B_AC_AIN0                  4  /**< \brief AC signal: AIN0 on PA04 mux B */

+#define MUX_PA04B_AC_AIN0                  1

+#define PINMUX_PA04B_AC_AIN0       ((PIN_PA04B_AC_AIN0 << 16) | MUX_PA04B_AC_AIN0)

+#define PORT_PA04B_AC_AIN0         (1u <<  4)

+#define PIN_PA05B_AC_AIN1                  5  /**< \brief AC signal: AIN1 on PA05 mux B */

+#define MUX_PA05B_AC_AIN1                  1

+#define PINMUX_PA05B_AC_AIN1       ((PIN_PA05B_AC_AIN1 << 16) | MUX_PA05B_AC_AIN1)

+#define PORT_PA05B_AC_AIN1         (1u <<  5)

+#define PIN_PA06B_AC_AIN2                  6  /**< \brief AC signal: AIN2 on PA06 mux B */

+#define MUX_PA06B_AC_AIN2                  1

+#define PINMUX_PA06B_AC_AIN2       ((PIN_PA06B_AC_AIN2 << 16) | MUX_PA06B_AC_AIN2)

+#define PORT_PA06B_AC_AIN2         (1u <<  6)

+#define PIN_PA07B_AC_AIN3                  7  /**< \brief AC signal: AIN3 on PA07 mux B */

+#define MUX_PA07B_AC_AIN3                  1

+#define PINMUX_PA07B_AC_AIN3       ((PIN_PA07B_AC_AIN3 << 16) | MUX_PA07B_AC_AIN3)

+#define PORT_PA07B_AC_AIN3         (1u <<  7)

+#define PIN_PA18H_AC_CMP0                 18  /**< \brief AC signal: CMP0 on PA18 mux H */

+#define MUX_PA18H_AC_CMP0                  7

+#define PINMUX_PA18H_AC_CMP0       ((PIN_PA18H_AC_CMP0 << 16) | MUX_PA18H_AC_CMP0)

+#define PORT_PA18H_AC_CMP0         (1u << 18)

+#define PIN_PA19H_AC_CMP1                 19  /**< \brief AC signal: CMP1 on PA19 mux H */

+#define MUX_PA19H_AC_CMP1                  7

+#define PINMUX_PA19H_AC_CMP1       ((PIN_PA19H_AC_CMP1 << 16) | MUX_PA19H_AC_CMP1)

+#define PORT_PA19H_AC_CMP1         (1u << 19)

+/* ========== PORT definition for DAC peripheral ========== */

+#define PIN_PA02B_DAC_VOUT                 2  /**< \brief DAC signal: VOUT on PA02 mux B */

+#define MUX_PA02B_DAC_VOUT                 1

+#define PINMUX_PA02B_DAC_VOUT      ((PIN_PA02B_DAC_VOUT << 16) | MUX_PA02B_DAC_VOUT)

+#define PORT_PA02B_DAC_VOUT        (1u <<  2)

+#define PIN_PA03B_DAC_VREFP                3  /**< \brief DAC signal: VREFP on PA03 mux B */

+#define MUX_PA03B_DAC_VREFP                1

+#define PINMUX_PA03B_DAC_VREFP     ((PIN_PA03B_DAC_VREFP << 16) | MUX_PA03B_DAC_VREFP)

+#define PORT_PA03B_DAC_VREFP       (1u <<  3)

+

+#endif /* _SAMD20E18_PIO_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20g14.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20g14.h
new file mode 100644
index 0000000..f89296f
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20g14.h
@@ -0,0 +1,812 @@
+/**

+ * \file

+ *

+ * \brief Peripheral I/O description for SAMD20G14

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20G14_PIO_

+#define _SAMD20G14_PIO_

+

+#define PIN_PA00                           0  /**< \brief Pin Number for PA00 */

+#define PORT_PA00                  (1u <<  0) /**< \brief PORT Mask  for PA00 */

+#define PIN_PA01                           1  /**< \brief Pin Number for PA01 */

+#define PORT_PA01                  (1u <<  1) /**< \brief PORT Mask  for PA01 */

+#define PIN_PA02                           2  /**< \brief Pin Number for PA02 */

+#define PORT_PA02                  (1u <<  2) /**< \brief PORT Mask  for PA02 */

+#define PIN_PA03                           3  /**< \brief Pin Number for PA03 */

+#define PORT_PA03                  (1u <<  3) /**< \brief PORT Mask  for PA03 */

+#define PIN_PA04                           4  /**< \brief Pin Number for PA04 */

+#define PORT_PA04                  (1u <<  4) /**< \brief PORT Mask  for PA04 */

+#define PIN_PA05                           5  /**< \brief Pin Number for PA05 */

+#define PORT_PA05                  (1u <<  5) /**< \brief PORT Mask  for PA05 */

+#define PIN_PA06                           6  /**< \brief Pin Number for PA06 */

+#define PORT_PA06                  (1u <<  6) /**< \brief PORT Mask  for PA06 */

+#define PIN_PA07                           7  /**< \brief Pin Number for PA07 */

+#define PORT_PA07                  (1u <<  7) /**< \brief PORT Mask  for PA07 */

+#define PIN_PA08                           8  /**< \brief Pin Number for PA08 */

+#define PORT_PA08                  (1u <<  8) /**< \brief PORT Mask  for PA08 */

+#define PIN_PA09                           9  /**< \brief Pin Number for PA09 */

+#define PORT_PA09                  (1u <<  9) /**< \brief PORT Mask  for PA09 */

+#define PIN_PA10                          10  /**< \brief Pin Number for PA10 */

+#define PORT_PA10                  (1u << 10) /**< \brief PORT Mask  for PA10 */

+#define PIN_PA11                          11  /**< \brief Pin Number for PA11 */

+#define PORT_PA11                  (1u << 11) /**< \brief PORT Mask  for PA11 */

+#define PIN_PA12                          12  /**< \brief Pin Number for PA12 */

+#define PORT_PA12                  (1u << 12) /**< \brief PORT Mask  for PA12 */

+#define PIN_PA13                          13  /**< \brief Pin Number for PA13 */

+#define PORT_PA13                  (1u << 13) /**< \brief PORT Mask  for PA13 */

+#define PIN_PA14                          14  /**< \brief Pin Number for PA14 */

+#define PORT_PA14                  (1u << 14) /**< \brief PORT Mask  for PA14 */

+#define PIN_PA15                          15  /**< \brief Pin Number for PA15 */

+#define PORT_PA15                  (1u << 15) /**< \brief PORT Mask  for PA15 */

+#define PIN_PA16                          16  /**< \brief Pin Number for PA16 */

+#define PORT_PA16                  (1u << 16) /**< \brief PORT Mask  for PA16 */

+#define PIN_PA17                          17  /**< \brief Pin Number for PA17 */

+#define PORT_PA17                  (1u << 17) /**< \brief PORT Mask  for PA17 */

+#define PIN_PA18                          18  /**< \brief Pin Number for PA18 */

+#define PORT_PA18                  (1u << 18) /**< \brief PORT Mask  for PA18 */

+#define PIN_PA19                          19  /**< \brief Pin Number for PA19 */

+#define PORT_PA19                  (1u << 19) /**< \brief PORT Mask  for PA19 */

+#define PIN_PA20                          20  /**< \brief Pin Number for PA20 */

+#define PORT_PA20                  (1u << 20) /**< \brief PORT Mask  for PA20 */

+#define PIN_PA21                          21  /**< \brief Pin Number for PA21 */

+#define PORT_PA21                  (1u << 21) /**< \brief PORT Mask  for PA21 */

+#define PIN_PA22                          22  /**< \brief Pin Number for PA22 */

+#define PORT_PA22                  (1u << 22) /**< \brief PORT Mask  for PA22 */

+#define PIN_PA23                          23  /**< \brief Pin Number for PA23 */

+#define PORT_PA23                  (1u << 23) /**< \brief PORT Mask  for PA23 */

+#define PIN_PA24                          24  /**< \brief Pin Number for PA24 */

+#define PORT_PA24                  (1u << 24) /**< \brief PORT Mask  for PA24 */

+#define PIN_PA25                          25  /**< \brief Pin Number for PA25 */

+#define PORT_PA25                  (1u << 25) /**< \brief PORT Mask  for PA25 */

+#define PIN_PA27                          27  /**< \brief Pin Number for PA27 */

+#define PORT_PA27                  (1u << 27) /**< \brief PORT Mask  for PA27 */

+#define PIN_PA28                          28  /**< \brief Pin Number for PA28 */

+#define PORT_PA28                  (1u << 28) /**< \brief PORT Mask  for PA28 */

+#define PIN_PA30                          30  /**< \brief Pin Number for PA30 */

+#define PORT_PA30                  (1u << 30) /**< \brief PORT Mask  for PA30 */

+#define PIN_PA31                          31  /**< \brief Pin Number for PA31 */

+#define PORT_PA31                  (1u << 31) /**< \brief PORT Mask  for PA31 */

+#define PIN_PB02                          34  /**< \brief Pin Number for PB02 */

+#define PORT_PB02                  (1u <<  2) /**< \brief PORT Mask  for PB02 */

+#define PIN_PB03                          35  /**< \brief Pin Number for PB03 */

+#define PORT_PB03                  (1u <<  3) /**< \brief PORT Mask  for PB03 */

+#define PIN_PB08                          40  /**< \brief Pin Number for PB08 */

+#define PORT_PB08                  (1u <<  8) /**< \brief PORT Mask  for PB08 */

+#define PIN_PB09                          41  /**< \brief Pin Number for PB09 */

+#define PORT_PB09                  (1u <<  9) /**< \brief PORT Mask  for PB09 */

+#define PIN_PB10                          42  /**< \brief Pin Number for PB10 */

+#define PORT_PB10                  (1u << 10) /**< \brief PORT Mask  for PB10 */

+#define PIN_PB11                          43  /**< \brief Pin Number for PB11 */

+#define PORT_PB11                  (1u << 11) /**< \brief PORT Mask  for PB11 */

+#define PIN_PB22                          54  /**< \brief Pin Number for PB22 */

+#define PORT_PB22                  (1u << 22) /**< \brief PORT Mask  for PB22 */

+#define PIN_PB23                          55  /**< \brief Pin Number for PB23 */

+#define PORT_PB23                  (1u << 23) /**< \brief PORT Mask  for PB23 */

+/* ========== PORT definition for CORE peripheral ========== */

+#define PIN_PA30G_CORE_SWCLK              30  /**< \brief CORE signal: SWCLK on PA30 mux G */

+#define MUX_PA30G_CORE_SWCLK               6

+#define PINMUX_PA30G_CORE_SWCLK    ((PIN_PA30G_CORE_SWCLK << 16) | MUX_PA30G_CORE_SWCLK)

+#define PORT_PA30G_CORE_SWCLK      (1u << 30)

+/* ========== PORT definition for GCLK peripheral ========== */

+#define PIN_PB22H_GCLK_IO0                54  /**< \brief GCLK signal: IO0 on PB22 mux H */

+#define MUX_PB22H_GCLK_IO0                 7

+#define PINMUX_PB22H_GCLK_IO0      ((PIN_PB22H_GCLK_IO0 << 16) | MUX_PB22H_GCLK_IO0)

+#define PORT_PB22H_GCLK_IO0        (1u << 22)

+#define PIN_PA14H_GCLK_IO0                14  /**< \brief GCLK signal: IO0 on PA14 mux H */

+#define MUX_PA14H_GCLK_IO0                 7

+#define PINMUX_PA14H_GCLK_IO0      ((PIN_PA14H_GCLK_IO0 << 16) | MUX_PA14H_GCLK_IO0)

+#define PORT_PA14H_GCLK_IO0        (1u << 14)

+#define PIN_PA27H_GCLK_IO0                27  /**< \brief GCLK signal: IO0 on PA27 mux H */

+#define MUX_PA27H_GCLK_IO0                 7

+#define PINMUX_PA27H_GCLK_IO0      ((PIN_PA27H_GCLK_IO0 << 16) | MUX_PA27H_GCLK_IO0)

+#define PORT_PA27H_GCLK_IO0        (1u << 27)

+#define PIN_PA28H_GCLK_IO0                28  /**< \brief GCLK signal: IO0 on PA28 mux H */

+#define MUX_PA28H_GCLK_IO0                 7

+#define PINMUX_PA28H_GCLK_IO0      ((PIN_PA28H_GCLK_IO0 << 16) | MUX_PA28H_GCLK_IO0)

+#define PORT_PA28H_GCLK_IO0        (1u << 28)

+#define PIN_PA30H_GCLK_IO0                30  /**< \brief GCLK signal: IO0 on PA30 mux H */

+#define MUX_PA30H_GCLK_IO0                 7

+#define PINMUX_PA30H_GCLK_IO0      ((PIN_PA30H_GCLK_IO0 << 16) | MUX_PA30H_GCLK_IO0)

+#define PORT_PA30H_GCLK_IO0        (1u << 30)

+#define PIN_PB23H_GCLK_IO1                55  /**< \brief GCLK signal: IO1 on PB23 mux H */

+#define MUX_PB23H_GCLK_IO1                 7

+#define PINMUX_PB23H_GCLK_IO1      ((PIN_PB23H_GCLK_IO1 << 16) | MUX_PB23H_GCLK_IO1)

+#define PORT_PB23H_GCLK_IO1        (1u << 23)

+#define PIN_PA15H_GCLK_IO1                15  /**< \brief GCLK signal: IO1 on PA15 mux H */

+#define MUX_PA15H_GCLK_IO1                 7

+#define PINMUX_PA15H_GCLK_IO1      ((PIN_PA15H_GCLK_IO1 << 16) | MUX_PA15H_GCLK_IO1)

+#define PORT_PA15H_GCLK_IO1        (1u << 15)

+#define PIN_PA16H_GCLK_IO2                16  /**< \brief GCLK signal: IO2 on PA16 mux H */

+#define MUX_PA16H_GCLK_IO2                 7

+#define PINMUX_PA16H_GCLK_IO2      ((PIN_PA16H_GCLK_IO2 << 16) | MUX_PA16H_GCLK_IO2)

+#define PORT_PA16H_GCLK_IO2        (1u << 16)

+#define PIN_PA17H_GCLK_IO3                17  /**< \brief GCLK signal: IO3 on PA17 mux H */

+#define MUX_PA17H_GCLK_IO3                 7

+#define PINMUX_PA17H_GCLK_IO3      ((PIN_PA17H_GCLK_IO3 << 16) | MUX_PA17H_GCLK_IO3)

+#define PORT_PA17H_GCLK_IO3        (1u << 17)

+#define PIN_PA10H_GCLK_IO4                10  /**< \brief GCLK signal: IO4 on PA10 mux H */

+#define MUX_PA10H_GCLK_IO4                 7

+#define PINMUX_PA10H_GCLK_IO4      ((PIN_PA10H_GCLK_IO4 << 16) | MUX_PA10H_GCLK_IO4)

+#define PORT_PA10H_GCLK_IO4        (1u << 10)

+#define PIN_PA20H_GCLK_IO4                20  /**< \brief GCLK signal: IO4 on PA20 mux H */

+#define MUX_PA20H_GCLK_IO4                 7

+#define PINMUX_PA20H_GCLK_IO4      ((PIN_PA20H_GCLK_IO4 << 16) | MUX_PA20H_GCLK_IO4)

+#define PORT_PA20H_GCLK_IO4        (1u << 20)

+#define PIN_PB10H_GCLK_IO4                42  /**< \brief GCLK signal: IO4 on PB10 mux H */

+#define MUX_PB10H_GCLK_IO4                 7

+#define PINMUX_PB10H_GCLK_IO4      ((PIN_PB10H_GCLK_IO4 << 16) | MUX_PB10H_GCLK_IO4)

+#define PORT_PB10H_GCLK_IO4        (1u << 10)

+#define PIN_PA11H_GCLK_IO5                11  /**< \brief GCLK signal: IO5 on PA11 mux H */

+#define MUX_PA11H_GCLK_IO5                 7

+#define PINMUX_PA11H_GCLK_IO5      ((PIN_PA11H_GCLK_IO5 << 16) | MUX_PA11H_GCLK_IO5)

+#define PORT_PA11H_GCLK_IO5        (1u << 11)

+#define PIN_PA21H_GCLK_IO5                21  /**< \brief GCLK signal: IO5 on PA21 mux H */

+#define MUX_PA21H_GCLK_IO5                 7

+#define PINMUX_PA21H_GCLK_IO5      ((PIN_PA21H_GCLK_IO5 << 16) | MUX_PA21H_GCLK_IO5)

+#define PORT_PA21H_GCLK_IO5        (1u << 21)

+#define PIN_PB11H_GCLK_IO5                43  /**< \brief GCLK signal: IO5 on PB11 mux H */

+#define MUX_PB11H_GCLK_IO5                 7

+#define PINMUX_PB11H_GCLK_IO5      ((PIN_PB11H_GCLK_IO5 << 16) | MUX_PB11H_GCLK_IO5)

+#define PORT_PB11H_GCLK_IO5        (1u << 11)

+#define PIN_PA22H_GCLK_IO6                22  /**< \brief GCLK signal: IO6 on PA22 mux H */

+#define MUX_PA22H_GCLK_IO6                 7

+#define PINMUX_PA22H_GCLK_IO6      ((PIN_PA22H_GCLK_IO6 << 16) | MUX_PA22H_GCLK_IO6)

+#define PORT_PA22H_GCLK_IO6        (1u << 22)

+#define PIN_PA23H_GCLK_IO7                23  /**< \brief GCLK signal: IO7 on PA23 mux H */

+#define MUX_PA23H_GCLK_IO7                 7

+#define PINMUX_PA23H_GCLK_IO7      ((PIN_PA23H_GCLK_IO7 << 16) | MUX_PA23H_GCLK_IO7)

+#define PORT_PA23H_GCLK_IO7        (1u << 23)

+/* ========== PORT definition for EIC peripheral ========== */

+#define PIN_PA16A_EIC_EXTINT0             16  /**< \brief EIC signal: EXTINT0 on PA16 mux A */

+#define MUX_PA16A_EIC_EXTINT0              0

+#define PINMUX_PA16A_EIC_EXTINT0   ((PIN_PA16A_EIC_EXTINT0 << 16) | MUX_PA16A_EIC_EXTINT0)

+#define PORT_PA16A_EIC_EXTINT0     (1u << 16)

+#define PIN_PA00A_EIC_EXTINT0              0  /**< \brief EIC signal: EXTINT0 on PA00 mux A */

+#define MUX_PA00A_EIC_EXTINT0              0

+#define PINMUX_PA00A_EIC_EXTINT0   ((PIN_PA00A_EIC_EXTINT0 << 16) | MUX_PA00A_EIC_EXTINT0)

+#define PORT_PA00A_EIC_EXTINT0     (1u <<  0)

+#define PIN_PA17A_EIC_EXTINT1             17  /**< \brief EIC signal: EXTINT1 on PA17 mux A */

+#define MUX_PA17A_EIC_EXTINT1              0

+#define PINMUX_PA17A_EIC_EXTINT1   ((PIN_PA17A_EIC_EXTINT1 << 16) | MUX_PA17A_EIC_EXTINT1)

+#define PORT_PA17A_EIC_EXTINT1     (1u << 17)

+#define PIN_PA01A_EIC_EXTINT1              1  /**< \brief EIC signal: EXTINT1 on PA01 mux A */

+#define MUX_PA01A_EIC_EXTINT1              0

+#define PINMUX_PA01A_EIC_EXTINT1   ((PIN_PA01A_EIC_EXTINT1 << 16) | MUX_PA01A_EIC_EXTINT1)

+#define PORT_PA01A_EIC_EXTINT1     (1u <<  1)

+#define PIN_PA02A_EIC_EXTINT2              2  /**< \brief EIC signal: EXTINT2 on PA02 mux A */

+#define MUX_PA02A_EIC_EXTINT2              0

+#define PINMUX_PA02A_EIC_EXTINT2   ((PIN_PA02A_EIC_EXTINT2 << 16) | MUX_PA02A_EIC_EXTINT2)

+#define PORT_PA02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA18A_EIC_EXTINT2             18  /**< \brief EIC signal: EXTINT2 on PA18 mux A */

+#define MUX_PA18A_EIC_EXTINT2              0

+#define PINMUX_PA18A_EIC_EXTINT2   ((PIN_PA18A_EIC_EXTINT2 << 16) | MUX_PA18A_EIC_EXTINT2)

+#define PORT_PA18A_EIC_EXTINT2     (1u << 18)

+#define PIN_PB02A_EIC_EXTINT2             34  /**< \brief EIC signal: EXTINT2 on PB02 mux A */

+#define MUX_PB02A_EIC_EXTINT2              0

+#define PINMUX_PB02A_EIC_EXTINT2   ((PIN_PB02A_EIC_EXTINT2 << 16) | MUX_PB02A_EIC_EXTINT2)

+#define PORT_PB02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA03A_EIC_EXTINT3              3  /**< \brief EIC signal: EXTINT3 on PA03 mux A */

+#define MUX_PA03A_EIC_EXTINT3              0

+#define PINMUX_PA03A_EIC_EXTINT3   ((PIN_PA03A_EIC_EXTINT3 << 16) | MUX_PA03A_EIC_EXTINT3)

+#define PORT_PA03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA19A_EIC_EXTINT3             19  /**< \brief EIC signal: EXTINT3 on PA19 mux A */

+#define MUX_PA19A_EIC_EXTINT3              0

+#define PINMUX_PA19A_EIC_EXTINT3   ((PIN_PA19A_EIC_EXTINT3 << 16) | MUX_PA19A_EIC_EXTINT3)

+#define PORT_PA19A_EIC_EXTINT3     (1u << 19)

+#define PIN_PB03A_EIC_EXTINT3             35  /**< \brief EIC signal: EXTINT3 on PB03 mux A */

+#define MUX_PB03A_EIC_EXTINT3              0

+#define PINMUX_PB03A_EIC_EXTINT3   ((PIN_PB03A_EIC_EXTINT3 << 16) | MUX_PB03A_EIC_EXTINT3)

+#define PORT_PB03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA04A_EIC_EXTINT4              4  /**< \brief EIC signal: EXTINT4 on PA04 mux A */

+#define MUX_PA04A_EIC_EXTINT4              0

+#define PINMUX_PA04A_EIC_EXTINT4   ((PIN_PA04A_EIC_EXTINT4 << 16) | MUX_PA04A_EIC_EXTINT4)

+#define PORT_PA04A_EIC_EXTINT4     (1u <<  4)

+#define PIN_PA20A_EIC_EXTINT4             20  /**< \brief EIC signal: EXTINT4 on PA20 mux A */

+#define MUX_PA20A_EIC_EXTINT4              0

+#define PINMUX_PA20A_EIC_EXTINT4   ((PIN_PA20A_EIC_EXTINT4 << 16) | MUX_PA20A_EIC_EXTINT4)

+#define PORT_PA20A_EIC_EXTINT4     (1u << 20)

+#define PIN_PA05A_EIC_EXTINT5              5  /**< \brief EIC signal: EXTINT5 on PA05 mux A */

+#define MUX_PA05A_EIC_EXTINT5              0

+#define PINMUX_PA05A_EIC_EXTINT5   ((PIN_PA05A_EIC_EXTINT5 << 16) | MUX_PA05A_EIC_EXTINT5)

+#define PORT_PA05A_EIC_EXTINT5     (1u <<  5)

+#define PIN_PA21A_EIC_EXTINT5             21  /**< \brief EIC signal: EXTINT5 on PA21 mux A */

+#define MUX_PA21A_EIC_EXTINT5              0

+#define PINMUX_PA21A_EIC_EXTINT5   ((PIN_PA21A_EIC_EXTINT5 << 16) | MUX_PA21A_EIC_EXTINT5)

+#define PORT_PA21A_EIC_EXTINT5     (1u << 21)

+#define PIN_PA06A_EIC_EXTINT6              6  /**< \brief EIC signal: EXTINT6 on PA06 mux A */

+#define MUX_PA06A_EIC_EXTINT6              0

+#define PINMUX_PA06A_EIC_EXTINT6   ((PIN_PA06A_EIC_EXTINT6 << 16) | MUX_PA06A_EIC_EXTINT6)

+#define PORT_PA06A_EIC_EXTINT6     (1u <<  6)

+#define PIN_PA22A_EIC_EXTINT6             22  /**< \brief EIC signal: EXTINT6 on PA22 mux A */

+#define MUX_PA22A_EIC_EXTINT6              0

+#define PINMUX_PA22A_EIC_EXTINT6   ((PIN_PA22A_EIC_EXTINT6 << 16) | MUX_PA22A_EIC_EXTINT6)

+#define PORT_PA22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PB22A_EIC_EXTINT6             54  /**< \brief EIC signal: EXTINT6 on PB22 mux A */

+#define MUX_PB22A_EIC_EXTINT6              0

+#define PINMUX_PB22A_EIC_EXTINT6   ((PIN_PB22A_EIC_EXTINT6 << 16) | MUX_PB22A_EIC_EXTINT6)

+#define PORT_PB22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PA07A_EIC_EXTINT7              7  /**< \brief EIC signal: EXTINT7 on PA07 mux A */

+#define MUX_PA07A_EIC_EXTINT7              0

+#define PINMUX_PA07A_EIC_EXTINT7   ((PIN_PA07A_EIC_EXTINT7 << 16) | MUX_PA07A_EIC_EXTINT7)

+#define PORT_PA07A_EIC_EXTINT7     (1u <<  7)

+#define PIN_PA23A_EIC_EXTINT7             23  /**< \brief EIC signal: EXTINT7 on PA23 mux A */

+#define MUX_PA23A_EIC_EXTINT7              0

+#define PINMUX_PA23A_EIC_EXTINT7   ((PIN_PA23A_EIC_EXTINT7 << 16) | MUX_PA23A_EIC_EXTINT7)

+#define PORT_PA23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PB23A_EIC_EXTINT7             55  /**< \brief EIC signal: EXTINT7 on PB23 mux A */

+#define MUX_PB23A_EIC_EXTINT7              0

+#define PINMUX_PB23A_EIC_EXTINT7   ((PIN_PB23A_EIC_EXTINT7 << 16) | MUX_PB23A_EIC_EXTINT7)

+#define PORT_PB23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PA28A_EIC_EXTINT8             28  /**< \brief EIC signal: EXTINT8 on PA28 mux A */

+#define MUX_PA28A_EIC_EXTINT8              0

+#define PINMUX_PA28A_EIC_EXTINT8   ((PIN_PA28A_EIC_EXTINT8 << 16) | MUX_PA28A_EIC_EXTINT8)

+#define PORT_PA28A_EIC_EXTINT8     (1u << 28)

+#define PIN_PB08A_EIC_EXTINT8             40  /**< \brief EIC signal: EXTINT8 on PB08 mux A */

+#define MUX_PB08A_EIC_EXTINT8              0

+#define PINMUX_PB08A_EIC_EXTINT8   ((PIN_PB08A_EIC_EXTINT8 << 16) | MUX_PB08A_EIC_EXTINT8)

+#define PORT_PB08A_EIC_EXTINT8     (1u <<  8)

+#define PIN_PA09A_EIC_EXTINT9              9  /**< \brief EIC signal: EXTINT9 on PA09 mux A */

+#define MUX_PA09A_EIC_EXTINT9              0

+#define PINMUX_PA09A_EIC_EXTINT9   ((PIN_PA09A_EIC_EXTINT9 << 16) | MUX_PA09A_EIC_EXTINT9)

+#define PORT_PA09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PB09A_EIC_EXTINT9             41  /**< \brief EIC signal: EXTINT9 on PB09 mux A */

+#define MUX_PB09A_EIC_EXTINT9              0

+#define PINMUX_PB09A_EIC_EXTINT9   ((PIN_PB09A_EIC_EXTINT9 << 16) | MUX_PB09A_EIC_EXTINT9)

+#define PORT_PB09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PA10A_EIC_EXTINT10            10  /**< \brief EIC signal: EXTINT10 on PA10 mux A */

+#define MUX_PA10A_EIC_EXTINT10             0

+#define PINMUX_PA10A_EIC_EXTINT10  ((PIN_PA10A_EIC_EXTINT10 << 16) | MUX_PA10A_EIC_EXTINT10)

+#define PORT_PA10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA30A_EIC_EXTINT10            30  /**< \brief EIC signal: EXTINT10 on PA30 mux A */

+#define MUX_PA30A_EIC_EXTINT10             0

+#define PINMUX_PA30A_EIC_EXTINT10  ((PIN_PA30A_EIC_EXTINT10 << 16) | MUX_PA30A_EIC_EXTINT10)

+#define PORT_PA30A_EIC_EXTINT10    (1u << 30)

+#define PIN_PB10A_EIC_EXTINT10            42  /**< \brief EIC signal: EXTINT10 on PB10 mux A */

+#define MUX_PB10A_EIC_EXTINT10             0

+#define PINMUX_PB10A_EIC_EXTINT10  ((PIN_PB10A_EIC_EXTINT10 << 16) | MUX_PB10A_EIC_EXTINT10)

+#define PORT_PB10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA11A_EIC_EXTINT11            11  /**< \brief EIC signal: EXTINT11 on PA11 mux A */

+#define MUX_PA11A_EIC_EXTINT11             0

+#define PINMUX_PA11A_EIC_EXTINT11  ((PIN_PA11A_EIC_EXTINT11 << 16) | MUX_PA11A_EIC_EXTINT11)

+#define PORT_PA11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA31A_EIC_EXTINT11            31  /**< \brief EIC signal: EXTINT11 on PA31 mux A */

+#define MUX_PA31A_EIC_EXTINT11             0

+#define PINMUX_PA31A_EIC_EXTINT11  ((PIN_PA31A_EIC_EXTINT11 << 16) | MUX_PA31A_EIC_EXTINT11)

+#define PORT_PA31A_EIC_EXTINT11    (1u << 31)

+#define PIN_PB11A_EIC_EXTINT11            43  /**< \brief EIC signal: EXTINT11 on PB11 mux A */

+#define MUX_PB11A_EIC_EXTINT11             0

+#define PINMUX_PB11A_EIC_EXTINT11  ((PIN_PB11A_EIC_EXTINT11 << 16) | MUX_PB11A_EIC_EXTINT11)

+#define PORT_PB11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA12A_EIC_EXTINT12            12  /**< \brief EIC signal: EXTINT12 on PA12 mux A */

+#define MUX_PA12A_EIC_EXTINT12             0

+#define PINMUX_PA12A_EIC_EXTINT12  ((PIN_PA12A_EIC_EXTINT12 << 16) | MUX_PA12A_EIC_EXTINT12)

+#define PORT_PA12A_EIC_EXTINT12    (1u << 12)

+#define PIN_PA24A_EIC_EXTINT12            24  /**< \brief EIC signal: EXTINT12 on PA24 mux A */

+#define MUX_PA24A_EIC_EXTINT12             0

+#define PINMUX_PA24A_EIC_EXTINT12  ((PIN_PA24A_EIC_EXTINT12 << 16) | MUX_PA24A_EIC_EXTINT12)

+#define PORT_PA24A_EIC_EXTINT12    (1u << 24)

+#define PIN_PA13A_EIC_EXTINT13            13  /**< \brief EIC signal: EXTINT13 on PA13 mux A */

+#define MUX_PA13A_EIC_EXTINT13             0

+#define PINMUX_PA13A_EIC_EXTINT13  ((PIN_PA13A_EIC_EXTINT13 << 16) | MUX_PA13A_EIC_EXTINT13)

+#define PORT_PA13A_EIC_EXTINT13    (1u << 13)

+#define PIN_PA25A_EIC_EXTINT13            25  /**< \brief EIC signal: EXTINT13 on PA25 mux A */

+#define MUX_PA25A_EIC_EXTINT13             0

+#define PINMUX_PA25A_EIC_EXTINT13  ((PIN_PA25A_EIC_EXTINT13 << 16) | MUX_PA25A_EIC_EXTINT13)

+#define PORT_PA25A_EIC_EXTINT13    (1u << 25)

+#define PIN_PA14A_EIC_EXTINT14            14  /**< \brief EIC signal: EXTINT14 on PA14 mux A */

+#define MUX_PA14A_EIC_EXTINT14             0

+#define PINMUX_PA14A_EIC_EXTINT14  ((PIN_PA14A_EIC_EXTINT14 << 16) | MUX_PA14A_EIC_EXTINT14)

+#define PORT_PA14A_EIC_EXTINT14    (1u << 14)

+#define PIN_PA27A_EIC_EXTINT15            27  /**< \brief EIC signal: EXTINT15 on PA27 mux A */

+#define MUX_PA27A_EIC_EXTINT15             0

+#define PINMUX_PA27A_EIC_EXTINT15  ((PIN_PA27A_EIC_EXTINT15 << 16) | MUX_PA27A_EIC_EXTINT15)

+#define PORT_PA27A_EIC_EXTINT15    (1u << 27)

+#define PIN_PA15A_EIC_EXTINT15            15  /**< \brief EIC signal: EXTINT15 on PA15 mux A */

+#define MUX_PA15A_EIC_EXTINT15             0

+#define PINMUX_PA15A_EIC_EXTINT15  ((PIN_PA15A_EIC_EXTINT15 << 16) | MUX_PA15A_EIC_EXTINT15)

+#define PORT_PA15A_EIC_EXTINT15    (1u << 15)

+#define PIN_PA08A_EIC_NMI                  8  /**< \brief EIC signal: NMI on PA08 mux A */

+#define MUX_PA08A_EIC_NMI                  0

+#define PINMUX_PA08A_EIC_NMI       ((PIN_PA08A_EIC_NMI << 16) | MUX_PA08A_EIC_NMI)

+#define PORT_PA08A_EIC_NMI         (1u <<  8)

+/* ========== PORT definition for SERCOM0 peripheral ========== */

+#define PIN_PA04D_SERCOM0_PAD0             4  /**< \brief SERCOM0 signal: PAD0 on PA04 mux D */

+#define MUX_PA04D_SERCOM0_PAD0             3

+#define PINMUX_PA04D_SERCOM0_PAD0  ((PIN_PA04D_SERCOM0_PAD0 << 16) | MUX_PA04D_SERCOM0_PAD0)

+#define PORT_PA04D_SERCOM0_PAD0    (1u <<  4)

+#define PIN_PA08C_SERCOM0_PAD0             8  /**< \brief SERCOM0 signal: PAD0 on PA08 mux C */

+#define MUX_PA08C_SERCOM0_PAD0             2

+#define PINMUX_PA08C_SERCOM0_PAD0  ((PIN_PA08C_SERCOM0_PAD0 << 16) | MUX_PA08C_SERCOM0_PAD0)

+#define PORT_PA08C_SERCOM0_PAD0    (1u <<  8)

+#define PIN_PA05D_SERCOM0_PAD1             5  /**< \brief SERCOM0 signal: PAD1 on PA05 mux D */

+#define MUX_PA05D_SERCOM0_PAD1             3

+#define PINMUX_PA05D_SERCOM0_PAD1  ((PIN_PA05D_SERCOM0_PAD1 << 16) | MUX_PA05D_SERCOM0_PAD1)

+#define PORT_PA05D_SERCOM0_PAD1    (1u <<  5)

+#define PIN_PA09C_SERCOM0_PAD1             9  /**< \brief SERCOM0 signal: PAD1 on PA09 mux C */

+#define MUX_PA09C_SERCOM0_PAD1             2

+#define PINMUX_PA09C_SERCOM0_PAD1  ((PIN_PA09C_SERCOM0_PAD1 << 16) | MUX_PA09C_SERCOM0_PAD1)

+#define PORT_PA09C_SERCOM0_PAD1    (1u <<  9)

+#define PIN_PA06D_SERCOM0_PAD2             6  /**< \brief SERCOM0 signal: PAD2 on PA06 mux D */

+#define MUX_PA06D_SERCOM0_PAD2             3

+#define PINMUX_PA06D_SERCOM0_PAD2  ((PIN_PA06D_SERCOM0_PAD2 << 16) | MUX_PA06D_SERCOM0_PAD2)

+#define PORT_PA06D_SERCOM0_PAD2    (1u <<  6)

+#define PIN_PA10C_SERCOM0_PAD2            10  /**< \brief SERCOM0 signal: PAD2 on PA10 mux C */

+#define MUX_PA10C_SERCOM0_PAD2             2

+#define PINMUX_PA10C_SERCOM0_PAD2  ((PIN_PA10C_SERCOM0_PAD2 << 16) | MUX_PA10C_SERCOM0_PAD2)

+#define PORT_PA10C_SERCOM0_PAD2    (1u << 10)

+#define PIN_PA07D_SERCOM0_PAD3             7  /**< \brief SERCOM0 signal: PAD3 on PA07 mux D */

+#define MUX_PA07D_SERCOM0_PAD3             3

+#define PINMUX_PA07D_SERCOM0_PAD3  ((PIN_PA07D_SERCOM0_PAD3 << 16) | MUX_PA07D_SERCOM0_PAD3)

+#define PORT_PA07D_SERCOM0_PAD3    (1u <<  7)

+#define PIN_PA11C_SERCOM0_PAD3            11  /**< \brief SERCOM0 signal: PAD3 on PA11 mux C */

+#define MUX_PA11C_SERCOM0_PAD3             2

+#define PINMUX_PA11C_SERCOM0_PAD3  ((PIN_PA11C_SERCOM0_PAD3 << 16) | MUX_PA11C_SERCOM0_PAD3)

+#define PORT_PA11C_SERCOM0_PAD3    (1u << 11)

+/* ========== PORT definition for SERCOM1 peripheral ========== */

+#define PIN_PA16C_SERCOM1_PAD0            16  /**< \brief SERCOM1 signal: PAD0 on PA16 mux C */

+#define MUX_PA16C_SERCOM1_PAD0             2

+#define PINMUX_PA16C_SERCOM1_PAD0  ((PIN_PA16C_SERCOM1_PAD0 << 16) | MUX_PA16C_SERCOM1_PAD0)

+#define PORT_PA16C_SERCOM1_PAD0    (1u << 16)

+#define PIN_PA00D_SERCOM1_PAD0             0  /**< \brief SERCOM1 signal: PAD0 on PA00 mux D */

+#define MUX_PA00D_SERCOM1_PAD0             3

+#define PINMUX_PA00D_SERCOM1_PAD0  ((PIN_PA00D_SERCOM1_PAD0 << 16) | MUX_PA00D_SERCOM1_PAD0)

+#define PORT_PA00D_SERCOM1_PAD0    (1u <<  0)

+#define PIN_PA17C_SERCOM1_PAD1            17  /**< \brief SERCOM1 signal: PAD1 on PA17 mux C */

+#define MUX_PA17C_SERCOM1_PAD1             2

+#define PINMUX_PA17C_SERCOM1_PAD1  ((PIN_PA17C_SERCOM1_PAD1 << 16) | MUX_PA17C_SERCOM1_PAD1)

+#define PORT_PA17C_SERCOM1_PAD1    (1u << 17)

+#define PIN_PA01D_SERCOM1_PAD1             1  /**< \brief SERCOM1 signal: PAD1 on PA01 mux D */

+#define MUX_PA01D_SERCOM1_PAD1             3

+#define PINMUX_PA01D_SERCOM1_PAD1  ((PIN_PA01D_SERCOM1_PAD1 << 16) | MUX_PA01D_SERCOM1_PAD1)

+#define PORT_PA01D_SERCOM1_PAD1    (1u <<  1)

+#define PIN_PA30D_SERCOM1_PAD2            30  /**< \brief SERCOM1 signal: PAD2 on PA30 mux D */

+#define MUX_PA30D_SERCOM1_PAD2             3

+#define PINMUX_PA30D_SERCOM1_PAD2  ((PIN_PA30D_SERCOM1_PAD2 << 16) | MUX_PA30D_SERCOM1_PAD2)

+#define PORT_PA30D_SERCOM1_PAD2    (1u << 30)

+#define PIN_PA18C_SERCOM1_PAD2            18  /**< \brief SERCOM1 signal: PAD2 on PA18 mux C */

+#define MUX_PA18C_SERCOM1_PAD2             2

+#define PINMUX_PA18C_SERCOM1_PAD2  ((PIN_PA18C_SERCOM1_PAD2 << 16) | MUX_PA18C_SERCOM1_PAD2)

+#define PORT_PA18C_SERCOM1_PAD2    (1u << 18)

+#define PIN_PA31D_SERCOM1_PAD3            31  /**< \brief SERCOM1 signal: PAD3 on PA31 mux D */

+#define MUX_PA31D_SERCOM1_PAD3             3

+#define PINMUX_PA31D_SERCOM1_PAD3  ((PIN_PA31D_SERCOM1_PAD3 << 16) | MUX_PA31D_SERCOM1_PAD3)

+#define PORT_PA31D_SERCOM1_PAD3    (1u << 31)

+#define PIN_PA19C_SERCOM1_PAD3            19  /**< \brief SERCOM1 signal: PAD3 on PA19 mux C */

+#define MUX_PA19C_SERCOM1_PAD3             2

+#define PINMUX_PA19C_SERCOM1_PAD3  ((PIN_PA19C_SERCOM1_PAD3 << 16) | MUX_PA19C_SERCOM1_PAD3)

+#define PORT_PA19C_SERCOM1_PAD3    (1u << 19)

+/* ========== PORT definition for SERCOM2 peripheral ========== */

+#define PIN_PA08D_SERCOM2_PAD0             8  /**< \brief SERCOM2 signal: PAD0 on PA08 mux D */

+#define MUX_PA08D_SERCOM2_PAD0             3

+#define PINMUX_PA08D_SERCOM2_PAD0  ((PIN_PA08D_SERCOM2_PAD0 << 16) | MUX_PA08D_SERCOM2_PAD0)

+#define PORT_PA08D_SERCOM2_PAD0    (1u <<  8)

+#define PIN_PA12C_SERCOM2_PAD0            12  /**< \brief SERCOM2 signal: PAD0 on PA12 mux C */

+#define MUX_PA12C_SERCOM2_PAD0             2

+#define PINMUX_PA12C_SERCOM2_PAD0  ((PIN_PA12C_SERCOM2_PAD0 << 16) | MUX_PA12C_SERCOM2_PAD0)

+#define PORT_PA12C_SERCOM2_PAD0    (1u << 12)

+#define PIN_PA09D_SERCOM2_PAD1             9  /**< \brief SERCOM2 signal: PAD1 on PA09 mux D */

+#define MUX_PA09D_SERCOM2_PAD1             3

+#define PINMUX_PA09D_SERCOM2_PAD1  ((PIN_PA09D_SERCOM2_PAD1 << 16) | MUX_PA09D_SERCOM2_PAD1)

+#define PORT_PA09D_SERCOM2_PAD1    (1u <<  9)

+#define PIN_PA13C_SERCOM2_PAD1            13  /**< \brief SERCOM2 signal: PAD1 on PA13 mux C */

+#define MUX_PA13C_SERCOM2_PAD1             2

+#define PINMUX_PA13C_SERCOM2_PAD1  ((PIN_PA13C_SERCOM2_PAD1 << 16) | MUX_PA13C_SERCOM2_PAD1)

+#define PORT_PA13C_SERCOM2_PAD1    (1u << 13)

+#define PIN_PA10D_SERCOM2_PAD2            10  /**< \brief SERCOM2 signal: PAD2 on PA10 mux D */

+#define MUX_PA10D_SERCOM2_PAD2             3

+#define PINMUX_PA10D_SERCOM2_PAD2  ((PIN_PA10D_SERCOM2_PAD2 << 16) | MUX_PA10D_SERCOM2_PAD2)

+#define PORT_PA10D_SERCOM2_PAD2    (1u << 10)

+#define PIN_PA14C_SERCOM2_PAD2            14  /**< \brief SERCOM2 signal: PAD2 on PA14 mux C */

+#define MUX_PA14C_SERCOM2_PAD2             2

+#define PINMUX_PA14C_SERCOM2_PAD2  ((PIN_PA14C_SERCOM2_PAD2 << 16) | MUX_PA14C_SERCOM2_PAD2)

+#define PORT_PA14C_SERCOM2_PAD2    (1u << 14)

+#define PIN_PA11D_SERCOM2_PAD3            11  /**< \brief SERCOM2 signal: PAD3 on PA11 mux D */

+#define MUX_PA11D_SERCOM2_PAD3             3

+#define PINMUX_PA11D_SERCOM2_PAD3  ((PIN_PA11D_SERCOM2_PAD3 << 16) | MUX_PA11D_SERCOM2_PAD3)

+#define PORT_PA11D_SERCOM2_PAD3    (1u << 11)

+#define PIN_PA15C_SERCOM2_PAD3            15  /**< \brief SERCOM2 signal: PAD3 on PA15 mux C */

+#define MUX_PA15C_SERCOM2_PAD3             2

+#define PINMUX_PA15C_SERCOM2_PAD3  ((PIN_PA15C_SERCOM2_PAD3 << 16) | MUX_PA15C_SERCOM2_PAD3)

+#define PORT_PA15C_SERCOM2_PAD3    (1u << 15)

+/* ========== PORT definition for SERCOM3 peripheral ========== */

+#define PIN_PA16D_SERCOM3_PAD0            16  /**< \brief SERCOM3 signal: PAD0 on PA16 mux D */

+#define MUX_PA16D_SERCOM3_PAD0             3

+#define PINMUX_PA16D_SERCOM3_PAD0  ((PIN_PA16D_SERCOM3_PAD0 << 16) | MUX_PA16D_SERCOM3_PAD0)

+#define PORT_PA16D_SERCOM3_PAD0    (1u << 16)

+#define PIN_PA22C_SERCOM3_PAD0            22  /**< \brief SERCOM3 signal: PAD0 on PA22 mux C */

+#define MUX_PA22C_SERCOM3_PAD0             2

+#define PINMUX_PA22C_SERCOM3_PAD0  ((PIN_PA22C_SERCOM3_PAD0 << 16) | MUX_PA22C_SERCOM3_PAD0)

+#define PORT_PA22C_SERCOM3_PAD0    (1u << 22)

+#define PIN_PA17D_SERCOM3_PAD1            17  /**< \brief SERCOM3 signal: PAD1 on PA17 mux D */

+#define MUX_PA17D_SERCOM3_PAD1             3

+#define PINMUX_PA17D_SERCOM3_PAD1  ((PIN_PA17D_SERCOM3_PAD1 << 16) | MUX_PA17D_SERCOM3_PAD1)

+#define PORT_PA17D_SERCOM3_PAD1    (1u << 17)

+#define PIN_PA23C_SERCOM3_PAD1            23  /**< \brief SERCOM3 signal: PAD1 on PA23 mux C */

+#define MUX_PA23C_SERCOM3_PAD1             2

+#define PINMUX_PA23C_SERCOM3_PAD1  ((PIN_PA23C_SERCOM3_PAD1 << 16) | MUX_PA23C_SERCOM3_PAD1)

+#define PORT_PA23C_SERCOM3_PAD1    (1u << 23)

+#define PIN_PA18D_SERCOM3_PAD2            18  /**< \brief SERCOM3 signal: PAD2 on PA18 mux D */

+#define MUX_PA18D_SERCOM3_PAD2             3

+#define PINMUX_PA18D_SERCOM3_PAD2  ((PIN_PA18D_SERCOM3_PAD2 << 16) | MUX_PA18D_SERCOM3_PAD2)

+#define PORT_PA18D_SERCOM3_PAD2    (1u << 18)

+#define PIN_PA20D_SERCOM3_PAD2            20  /**< \brief SERCOM3 signal: PAD2 on PA20 mux D */

+#define MUX_PA20D_SERCOM3_PAD2             3

+#define PINMUX_PA20D_SERCOM3_PAD2  ((PIN_PA20D_SERCOM3_PAD2 << 16) | MUX_PA20D_SERCOM3_PAD2)

+#define PORT_PA20D_SERCOM3_PAD2    (1u << 20)

+#define PIN_PA24C_SERCOM3_PAD2            24  /**< \brief SERCOM3 signal: PAD2 on PA24 mux C */

+#define MUX_PA24C_SERCOM3_PAD2             2

+#define PINMUX_PA24C_SERCOM3_PAD2  ((PIN_PA24C_SERCOM3_PAD2 << 16) | MUX_PA24C_SERCOM3_PAD2)

+#define PORT_PA24C_SERCOM3_PAD2    (1u << 24)

+#define PIN_PA19D_SERCOM3_PAD3            19  /**< \brief SERCOM3 signal: PAD3 on PA19 mux D */

+#define MUX_PA19D_SERCOM3_PAD3             3

+#define PINMUX_PA19D_SERCOM3_PAD3  ((PIN_PA19D_SERCOM3_PAD3 << 16) | MUX_PA19D_SERCOM3_PAD3)

+#define PORT_PA19D_SERCOM3_PAD3    (1u << 19)

+#define PIN_PA21D_SERCOM3_PAD3            21  /**< \brief SERCOM3 signal: PAD3 on PA21 mux D */

+#define MUX_PA21D_SERCOM3_PAD3             3

+#define PINMUX_PA21D_SERCOM3_PAD3  ((PIN_PA21D_SERCOM3_PAD3 << 16) | MUX_PA21D_SERCOM3_PAD3)

+#define PORT_PA21D_SERCOM3_PAD3    (1u << 21)

+#define PIN_PA25C_SERCOM3_PAD3            25  /**< \brief SERCOM3 signal: PAD3 on PA25 mux C */

+#define MUX_PA25C_SERCOM3_PAD3             2

+#define PINMUX_PA25C_SERCOM3_PAD3  ((PIN_PA25C_SERCOM3_PAD3 << 16) | MUX_PA25C_SERCOM3_PAD3)

+#define PORT_PA25C_SERCOM3_PAD3    (1u << 25)

+/* ========== PORT definition for SERCOM4 peripheral ========== */

+#define PIN_PA12D_SERCOM4_PAD0            12  /**< \brief SERCOM4 signal: PAD0 on PA12 mux D */

+#define MUX_PA12D_SERCOM4_PAD0             3

+#define PINMUX_PA12D_SERCOM4_PAD0  ((PIN_PA12D_SERCOM4_PAD0 << 16) | MUX_PA12D_SERCOM4_PAD0)

+#define PORT_PA12D_SERCOM4_PAD0    (1u << 12)

+#define PIN_PB08D_SERCOM4_PAD0            40  /**< \brief SERCOM4 signal: PAD0 on PB08 mux D */

+#define MUX_PB08D_SERCOM4_PAD0             3

+#define PINMUX_PB08D_SERCOM4_PAD0  ((PIN_PB08D_SERCOM4_PAD0 << 16) | MUX_PB08D_SERCOM4_PAD0)

+#define PORT_PB08D_SERCOM4_PAD0    (1u <<  8)

+#define PIN_PA13D_SERCOM4_PAD1            13  /**< \brief SERCOM4 signal: PAD1 on PA13 mux D */

+#define MUX_PA13D_SERCOM4_PAD1             3

+#define PINMUX_PA13D_SERCOM4_PAD1  ((PIN_PA13D_SERCOM4_PAD1 << 16) | MUX_PA13D_SERCOM4_PAD1)

+#define PORT_PA13D_SERCOM4_PAD1    (1u << 13)

+#define PIN_PB09D_SERCOM4_PAD1            41  /**< \brief SERCOM4 signal: PAD1 on PB09 mux D */

+#define MUX_PB09D_SERCOM4_PAD1             3

+#define PINMUX_PB09D_SERCOM4_PAD1  ((PIN_PB09D_SERCOM4_PAD1 << 16) | MUX_PB09D_SERCOM4_PAD1)

+#define PORT_PB09D_SERCOM4_PAD1    (1u <<  9)

+#define PIN_PA14D_SERCOM4_PAD2            14  /**< \brief SERCOM4 signal: PAD2 on PA14 mux D */

+#define MUX_PA14D_SERCOM4_PAD2             3

+#define PINMUX_PA14D_SERCOM4_PAD2  ((PIN_PA14D_SERCOM4_PAD2 << 16) | MUX_PA14D_SERCOM4_PAD2)

+#define PORT_PA14D_SERCOM4_PAD2    (1u << 14)

+#define PIN_PB10D_SERCOM4_PAD2            42  /**< \brief SERCOM4 signal: PAD2 on PB10 mux D */

+#define MUX_PB10D_SERCOM4_PAD2             3

+#define PINMUX_PB10D_SERCOM4_PAD2  ((PIN_PB10D_SERCOM4_PAD2 << 16) | MUX_PB10D_SERCOM4_PAD2)

+#define PORT_PB10D_SERCOM4_PAD2    (1u << 10)

+#define PIN_PA15D_SERCOM4_PAD3            15  /**< \brief SERCOM4 signal: PAD3 on PA15 mux D */

+#define MUX_PA15D_SERCOM4_PAD3             3

+#define PINMUX_PA15D_SERCOM4_PAD3  ((PIN_PA15D_SERCOM4_PAD3 << 16) | MUX_PA15D_SERCOM4_PAD3)

+#define PORT_PA15D_SERCOM4_PAD3    (1u << 15)

+#define PIN_PB11D_SERCOM4_PAD3            43  /**< \brief SERCOM4 signal: PAD3 on PB11 mux D */

+#define MUX_PB11D_SERCOM4_PAD3             3

+#define PINMUX_PB11D_SERCOM4_PAD3  ((PIN_PB11D_SERCOM4_PAD3 << 16) | MUX_PB11D_SERCOM4_PAD3)

+#define PORT_PB11D_SERCOM4_PAD3    (1u << 11)

+/* ========== PORT definition for SERCOM5 peripheral ========== */

+#define PIN_PA22D_SERCOM5_PAD0            22  /**< \brief SERCOM5 signal: PAD0 on PA22 mux D */

+#define MUX_PA22D_SERCOM5_PAD0             3

+#define PINMUX_PA22D_SERCOM5_PAD0  ((PIN_PA22D_SERCOM5_PAD0 << 16) | MUX_PA22D_SERCOM5_PAD0)

+#define PORT_PA22D_SERCOM5_PAD0    (1u << 22)

+#define PIN_PB02D_SERCOM5_PAD0            34  /**< \brief SERCOM5 signal: PAD0 on PB02 mux D */

+#define MUX_PB02D_SERCOM5_PAD0             3

+#define PINMUX_PB02D_SERCOM5_PAD0  ((PIN_PB02D_SERCOM5_PAD0 << 16) | MUX_PB02D_SERCOM5_PAD0)

+#define PORT_PB02D_SERCOM5_PAD0    (1u <<  2)

+#define PIN_PA23D_SERCOM5_PAD1            23  /**< \brief SERCOM5 signal: PAD1 on PA23 mux D */

+#define MUX_PA23D_SERCOM5_PAD1             3

+#define PINMUX_PA23D_SERCOM5_PAD1  ((PIN_PA23D_SERCOM5_PAD1 << 16) | MUX_PA23D_SERCOM5_PAD1)

+#define PORT_PA23D_SERCOM5_PAD1    (1u << 23)

+#define PIN_PB03D_SERCOM5_PAD1            35  /**< \brief SERCOM5 signal: PAD1 on PB03 mux D */

+#define MUX_PB03D_SERCOM5_PAD1             3

+#define PINMUX_PB03D_SERCOM5_PAD1  ((PIN_PB03D_SERCOM5_PAD1 << 16) | MUX_PB03D_SERCOM5_PAD1)

+#define PORT_PB03D_SERCOM5_PAD1    (1u <<  3)

+#define PIN_PA24D_SERCOM5_PAD2            24  /**< \brief SERCOM5 signal: PAD2 on PA24 mux D */

+#define MUX_PA24D_SERCOM5_PAD2             3

+#define PINMUX_PA24D_SERCOM5_PAD2  ((PIN_PA24D_SERCOM5_PAD2 << 16) | MUX_PA24D_SERCOM5_PAD2)

+#define PORT_PA24D_SERCOM5_PAD2    (1u << 24)

+#define PIN_PB22D_SERCOM5_PAD2            54  /**< \brief SERCOM5 signal: PAD2 on PB22 mux D */

+#define MUX_PB22D_SERCOM5_PAD2             3

+#define PINMUX_PB22D_SERCOM5_PAD2  ((PIN_PB22D_SERCOM5_PAD2 << 16) | MUX_PB22D_SERCOM5_PAD2)

+#define PORT_PB22D_SERCOM5_PAD2    (1u << 22)

+#define PIN_PA20C_SERCOM5_PAD2            20  /**< \brief SERCOM5 signal: PAD2 on PA20 mux C */

+#define MUX_PA20C_SERCOM5_PAD2             2

+#define PINMUX_PA20C_SERCOM5_PAD2  ((PIN_PA20C_SERCOM5_PAD2 << 16) | MUX_PA20C_SERCOM5_PAD2)

+#define PORT_PA20C_SERCOM5_PAD2    (1u << 20)

+#define PIN_PA25D_SERCOM5_PAD3            25  /**< \brief SERCOM5 signal: PAD3 on PA25 mux D */

+#define MUX_PA25D_SERCOM5_PAD3             3

+#define PINMUX_PA25D_SERCOM5_PAD3  ((PIN_PA25D_SERCOM5_PAD3 << 16) | MUX_PA25D_SERCOM5_PAD3)

+#define PORT_PA25D_SERCOM5_PAD3    (1u << 25)

+#define PIN_PB23D_SERCOM5_PAD3            55  /**< \brief SERCOM5 signal: PAD3 on PB23 mux D */

+#define MUX_PB23D_SERCOM5_PAD3             3

+#define PINMUX_PB23D_SERCOM5_PAD3  ((PIN_PB23D_SERCOM5_PAD3 << 16) | MUX_PB23D_SERCOM5_PAD3)

+#define PORT_PB23D_SERCOM5_PAD3    (1u << 23)

+#define PIN_PA21C_SERCOM5_PAD3            21  /**< \brief SERCOM5 signal: PAD3 on PA21 mux C */

+#define MUX_PA21C_SERCOM5_PAD3             2

+#define PINMUX_PA21C_SERCOM5_PAD3  ((PIN_PA21C_SERCOM5_PAD3 << 16) | MUX_PA21C_SERCOM5_PAD3)

+#define PORT_PA21C_SERCOM5_PAD3    (1u << 21)

+/* ========== PORT definition for TC0 peripheral ========== */

+#define PIN_PA04F_TC0_WO0                  4  /**< \brief TC0 signal: WO0 on PA04 mux F */

+#define MUX_PA04F_TC0_WO0                  5

+#define PINMUX_PA04F_TC0_WO0       ((PIN_PA04F_TC0_WO0 << 16) | MUX_PA04F_TC0_WO0)

+#define PORT_PA04F_TC0_WO0         (1u <<  4)

+#define PIN_PA08E_TC0_WO0                  8  /**< \brief TC0 signal: WO0 on PA08 mux E */

+#define MUX_PA08E_TC0_WO0                  4

+#define PINMUX_PA08E_TC0_WO0       ((PIN_PA08E_TC0_WO0 << 16) | MUX_PA08E_TC0_WO0)

+#define PORT_PA08E_TC0_WO0         (1u <<  8)

+#define PIN_PA05F_TC0_WO1                  5  /**< \brief TC0 signal: WO1 on PA05 mux F */

+#define MUX_PA05F_TC0_WO1                  5

+#define PINMUX_PA05F_TC0_WO1       ((PIN_PA05F_TC0_WO1 << 16) | MUX_PA05F_TC0_WO1)

+#define PORT_PA05F_TC0_WO1         (1u <<  5)

+#define PIN_PA09E_TC0_WO1                  9  /**< \brief TC0 signal: WO1 on PA09 mux E */

+#define MUX_PA09E_TC0_WO1                  4

+#define PINMUX_PA09E_TC0_WO1       ((PIN_PA09E_TC0_WO1 << 16) | MUX_PA09E_TC0_WO1)

+#define PORT_PA09E_TC0_WO1         (1u <<  9)

+/* ========== PORT definition for TC1 peripheral ========== */

+#define PIN_PA06F_TC1_WO0                  6  /**< \brief TC1 signal: WO0 on PA06 mux F */

+#define MUX_PA06F_TC1_WO0                  5

+#define PINMUX_PA06F_TC1_WO0       ((PIN_PA06F_TC1_WO0 << 16) | MUX_PA06F_TC1_WO0)

+#define PORT_PA06F_TC1_WO0         (1u <<  6)

+#define PIN_PA30F_TC1_WO0                 30  /**< \brief TC1 signal: WO0 on PA30 mux F */

+#define MUX_PA30F_TC1_WO0                  5

+#define PINMUX_PA30F_TC1_WO0       ((PIN_PA30F_TC1_WO0 << 16) | MUX_PA30F_TC1_WO0)

+#define PORT_PA30F_TC1_WO0         (1u << 30)

+#define PIN_PA10E_TC1_WO0                 10  /**< \brief TC1 signal: WO0 on PA10 mux E */

+#define MUX_PA10E_TC1_WO0                  4

+#define PINMUX_PA10E_TC1_WO0       ((PIN_PA10E_TC1_WO0 << 16) | MUX_PA10E_TC1_WO0)

+#define PORT_PA10E_TC1_WO0         (1u << 10)

+#define PIN_PA07F_TC1_WO1                  7  /**< \brief TC1 signal: WO1 on PA07 mux F */

+#define MUX_PA07F_TC1_WO1                  5

+#define PINMUX_PA07F_TC1_WO1       ((PIN_PA07F_TC1_WO1 << 16) | MUX_PA07F_TC1_WO1)

+#define PORT_PA07F_TC1_WO1         (1u <<  7)

+#define PIN_PA31F_TC1_WO1                 31  /**< \brief TC1 signal: WO1 on PA31 mux F */

+#define MUX_PA31F_TC1_WO1                  5

+#define PINMUX_PA31F_TC1_WO1       ((PIN_PA31F_TC1_WO1 << 16) | MUX_PA31F_TC1_WO1)

+#define PORT_PA31F_TC1_WO1         (1u << 31)

+#define PIN_PA11E_TC1_WO1                 11  /**< \brief TC1 signal: WO1 on PA11 mux E */

+#define MUX_PA11E_TC1_WO1                  4

+#define PINMUX_PA11E_TC1_WO1       ((PIN_PA11E_TC1_WO1 << 16) | MUX_PA11E_TC1_WO1)

+#define PORT_PA11E_TC1_WO1         (1u << 11)

+/* ========== PORT definition for TC2 peripheral ========== */

+#define PIN_PA16F_TC2_WO0                 16  /**< \brief TC2 signal: WO0 on PA16 mux F */

+#define MUX_PA16F_TC2_WO0                  5

+#define PINMUX_PA16F_TC2_WO0       ((PIN_PA16F_TC2_WO0 << 16) | MUX_PA16F_TC2_WO0)

+#define PORT_PA16F_TC2_WO0         (1u << 16)

+#define PIN_PA12E_TC2_WO0                 12  /**< \brief TC2 signal: WO0 on PA12 mux E */

+#define MUX_PA12E_TC2_WO0                  4

+#define PINMUX_PA12E_TC2_WO0       ((PIN_PA12E_TC2_WO0 << 16) | MUX_PA12E_TC2_WO0)

+#define PORT_PA12E_TC2_WO0         (1u << 12)

+#define PIN_PA00F_TC2_WO0                  0  /**< \brief TC2 signal: WO0 on PA00 mux F */

+#define MUX_PA00F_TC2_WO0                  5

+#define PINMUX_PA00F_TC2_WO0       ((PIN_PA00F_TC2_WO0 << 16) | MUX_PA00F_TC2_WO0)

+#define PORT_PA00F_TC2_WO0         (1u <<  0)

+#define PIN_PA17F_TC2_WO1                 17  /**< \brief TC2 signal: WO1 on PA17 mux F */

+#define MUX_PA17F_TC2_WO1                  5

+#define PINMUX_PA17F_TC2_WO1       ((PIN_PA17F_TC2_WO1 << 16) | MUX_PA17F_TC2_WO1)

+#define PORT_PA17F_TC2_WO1         (1u << 17)

+#define PIN_PA13E_TC2_WO1                 13  /**< \brief TC2 signal: WO1 on PA13 mux E */

+#define MUX_PA13E_TC2_WO1                  4

+#define PINMUX_PA13E_TC2_WO1       ((PIN_PA13E_TC2_WO1 << 16) | MUX_PA13E_TC2_WO1)

+#define PORT_PA13E_TC2_WO1         (1u << 13)

+#define PIN_PA01F_TC2_WO1                  1  /**< \brief TC2 signal: WO1 on PA01 mux F */

+#define MUX_PA01F_TC2_WO1                  5

+#define PINMUX_PA01F_TC2_WO1       ((PIN_PA01F_TC2_WO1 << 16) | MUX_PA01F_TC2_WO1)

+#define PORT_PA01F_TC2_WO1         (1u <<  1)

+/* ========== PORT definition for TC3 peripheral ========== */

+#define PIN_PA18F_TC3_WO0                 18  /**< \brief TC3 signal: WO0 on PA18 mux F */

+#define MUX_PA18F_TC3_WO0                  5

+#define PINMUX_PA18F_TC3_WO0       ((PIN_PA18F_TC3_WO0 << 16) | MUX_PA18F_TC3_WO0)

+#define PORT_PA18F_TC3_WO0         (1u << 18)

+#define PIN_PA14E_TC3_WO0                 14  /**< \brief TC3 signal: WO0 on PA14 mux E */

+#define MUX_PA14E_TC3_WO0                  4

+#define PINMUX_PA14E_TC3_WO0       ((PIN_PA14E_TC3_WO0 << 16) | MUX_PA14E_TC3_WO0)

+#define PORT_PA14E_TC3_WO0         (1u << 14)

+#define PIN_PA19F_TC3_WO1                 19  /**< \brief TC3 signal: WO1 on PA19 mux F */

+#define MUX_PA19F_TC3_WO1                  5

+#define PINMUX_PA19F_TC3_WO1       ((PIN_PA19F_TC3_WO1 << 16) | MUX_PA19F_TC3_WO1)

+#define PORT_PA19F_TC3_WO1         (1u << 19)

+#define PIN_PA15E_TC3_WO1                 15  /**< \brief TC3 signal: WO1 on PA15 mux E */

+#define MUX_PA15E_TC3_WO1                  4

+#define PINMUX_PA15E_TC3_WO1       ((PIN_PA15E_TC3_WO1 << 16) | MUX_PA15E_TC3_WO1)

+#define PORT_PA15E_TC3_WO1         (1u << 15)

+/* ========== PORT definition for TC4 peripheral ========== */

+#define PIN_PA22F_TC4_WO0                 22  /**< \brief TC4 signal: WO0 on PA22 mux F */

+#define MUX_PA22F_TC4_WO0                  5

+#define PINMUX_PA22F_TC4_WO0       ((PIN_PA22F_TC4_WO0 << 16) | MUX_PA22F_TC4_WO0)

+#define PORT_PA22F_TC4_WO0         (1u << 22)

+#define PIN_PB08F_TC4_WO0                 40  /**< \brief TC4 signal: WO0 on PB08 mux F */

+#define MUX_PB08F_TC4_WO0                  5

+#define PINMUX_PB08F_TC4_WO0       ((PIN_PB08F_TC4_WO0 << 16) | MUX_PB08F_TC4_WO0)

+#define PORT_PB08F_TC4_WO0         (1u <<  8)

+#define PIN_PA23F_TC4_WO1                 23  /**< \brief TC4 signal: WO1 on PA23 mux F */

+#define MUX_PA23F_TC4_WO1                  5

+#define PINMUX_PA23F_TC4_WO1       ((PIN_PA23F_TC4_WO1 << 16) | MUX_PA23F_TC4_WO1)

+#define PORT_PA23F_TC4_WO1         (1u << 23)

+#define PIN_PB09F_TC4_WO1                 41  /**< \brief TC4 signal: WO1 on PB09 mux F */

+#define MUX_PB09F_TC4_WO1                  5

+#define PINMUX_PB09F_TC4_WO1       ((PIN_PB09F_TC4_WO1 << 16) | MUX_PB09F_TC4_WO1)

+#define PORT_PB09F_TC4_WO1         (1u <<  9)

+/* ========== PORT definition for TC5 peripheral ========== */

+#define PIN_PA24F_TC5_WO0                 24  /**< \brief TC5 signal: WO0 on PA24 mux F */

+#define MUX_PA24F_TC5_WO0                  5

+#define PINMUX_PA24F_TC5_WO0       ((PIN_PA24F_TC5_WO0 << 16) | MUX_PA24F_TC5_WO0)

+#define PORT_PA24F_TC5_WO0         (1u << 24)

+#define PIN_PB10F_TC5_WO0                 42  /**< \brief TC5 signal: WO0 on PB10 mux F */

+#define MUX_PB10F_TC5_WO0                  5

+#define PINMUX_PB10F_TC5_WO0       ((PIN_PB10F_TC5_WO0 << 16) | MUX_PB10F_TC5_WO0)

+#define PORT_PB10F_TC5_WO0         (1u << 10)

+#define PIN_PA25F_TC5_WO1                 25  /**< \brief TC5 signal: WO1 on PA25 mux F */

+#define MUX_PA25F_TC5_WO1                  5

+#define PINMUX_PA25F_TC5_WO1       ((PIN_PA25F_TC5_WO1 << 16) | MUX_PA25F_TC5_WO1)

+#define PORT_PA25F_TC5_WO1         (1u << 25)

+#define PIN_PB11F_TC5_WO1                 43  /**< \brief TC5 signal: WO1 on PB11 mux F */

+#define MUX_PB11F_TC5_WO1                  5

+#define PINMUX_PB11F_TC5_WO1       ((PIN_PB11F_TC5_WO1 << 16) | MUX_PB11F_TC5_WO1)

+#define PORT_PB11F_TC5_WO1         (1u << 11)

+/* ========== PORT definition for TC6 peripheral ========== */

+#define PIN_PB02F_TC6_WO0                 34  /**< \brief TC6 signal: WO0 on PB02 mux F */

+#define MUX_PB02F_TC6_WO0                  5

+#define PINMUX_PB02F_TC6_WO0       ((PIN_PB02F_TC6_WO0 << 16) | MUX_PB02F_TC6_WO0)

+#define PORT_PB02F_TC6_WO0         (1u <<  2)

+#define PIN_PB03F_TC6_WO1                 35  /**< \brief TC6 signal: WO1 on PB03 mux F */

+#define MUX_PB03F_TC6_WO1                  5

+#define PINMUX_PB03F_TC6_WO1       ((PIN_PB03F_TC6_WO1 << 16) | MUX_PB03F_TC6_WO1)

+#define PORT_PB03F_TC6_WO1         (1u <<  3)

+/* ========== PORT definition for TC7 peripheral ========== */

+#define PIN_PB22F_TC7_WO0                 54  /**< \brief TC7 signal: WO0 on PB22 mux F */

+#define MUX_PB22F_TC7_WO0                  5

+#define PINMUX_PB22F_TC7_WO0       ((PIN_PB22F_TC7_WO0 << 16) | MUX_PB22F_TC7_WO0)

+#define PORT_PB22F_TC7_WO0         (1u << 22)

+#define PIN_PA20E_TC7_WO0                 20  /**< \brief TC7 signal: WO0 on PA20 mux E */

+#define MUX_PA20E_TC7_WO0                  4

+#define PINMUX_PA20E_TC7_WO0       ((PIN_PA20E_TC7_WO0 << 16) | MUX_PA20E_TC7_WO0)

+#define PORT_PA20E_TC7_WO0         (1u << 20)

+#define PIN_PB23F_TC7_WO1                 55  /**< \brief TC7 signal: WO1 on PB23 mux F */

+#define MUX_PB23F_TC7_WO1                  5

+#define PINMUX_PB23F_TC7_WO1       ((PIN_PB23F_TC7_WO1 << 16) | MUX_PB23F_TC7_WO1)

+#define PORT_PB23F_TC7_WO1         (1u << 23)

+#define PIN_PA21E_TC7_WO1                 21  /**< \brief TC7 signal: WO1 on PA21 mux E */

+#define MUX_PA21E_TC7_WO1                  4

+#define PINMUX_PA21E_TC7_WO1       ((PIN_PA21E_TC7_WO1 << 16) | MUX_PA21E_TC7_WO1)

+#define PORT_PA21E_TC7_WO1         (1u << 21)

+/* ========== PORT definition for ADC peripheral ========== */

+#define PIN_PA02B_ADC_AIN0                 2  /**< \brief ADC signal: AIN0 on PA02 mux B */

+#define MUX_PA02B_ADC_AIN0                 1

+#define PINMUX_PA02B_ADC_AIN0      ((PIN_PA02B_ADC_AIN0 << 16) | MUX_PA02B_ADC_AIN0)

+#define PORT_PA02B_ADC_AIN0        (1u <<  2)

+#define PIN_PA03B_ADC_AIN1                 3  /**< \brief ADC signal: AIN1 on PA03 mux B */

+#define MUX_PA03B_ADC_AIN1                 1

+#define PINMUX_PA03B_ADC_AIN1      ((PIN_PA03B_ADC_AIN1 << 16) | MUX_PA03B_ADC_AIN1)

+#define PORT_PA03B_ADC_AIN1        (1u <<  3)

+#define PIN_PB08B_ADC_AIN2                40  /**< \brief ADC signal: AIN2 on PB08 mux B */

+#define MUX_PB08B_ADC_AIN2                 1

+#define PINMUX_PB08B_ADC_AIN2      ((PIN_PB08B_ADC_AIN2 << 16) | MUX_PB08B_ADC_AIN2)

+#define PORT_PB08B_ADC_AIN2        (1u <<  8)

+#define PIN_PB09B_ADC_AIN3                41  /**< \brief ADC signal: AIN3 on PB09 mux B */

+#define MUX_PB09B_ADC_AIN3                 1

+#define PINMUX_PB09B_ADC_AIN3      ((PIN_PB09B_ADC_AIN3 << 16) | MUX_PB09B_ADC_AIN3)

+#define PORT_PB09B_ADC_AIN3        (1u <<  9)

+#define PIN_PA04B_ADC_AIN4                 4  /**< \brief ADC signal: AIN4 on PA04 mux B */

+#define MUX_PA04B_ADC_AIN4                 1

+#define PINMUX_PA04B_ADC_AIN4      ((PIN_PA04B_ADC_AIN4 << 16) | MUX_PA04B_ADC_AIN4)

+#define PORT_PA04B_ADC_AIN4        (1u <<  4)

+#define PIN_PA05B_ADC_AIN5                 5  /**< \brief ADC signal: AIN5 on PA05 mux B */

+#define MUX_PA05B_ADC_AIN5                 1

+#define PINMUX_PA05B_ADC_AIN5      ((PIN_PA05B_ADC_AIN5 << 16) | MUX_PA05B_ADC_AIN5)

+#define PORT_PA05B_ADC_AIN5        (1u <<  5)

+#define PIN_PA06B_ADC_AIN6                 6  /**< \brief ADC signal: AIN6 on PA06 mux B */

+#define MUX_PA06B_ADC_AIN6                 1

+#define PINMUX_PA06B_ADC_AIN6      ((PIN_PA06B_ADC_AIN6 << 16) | MUX_PA06B_ADC_AIN6)

+#define PORT_PA06B_ADC_AIN6        (1u <<  6)

+#define PIN_PA07B_ADC_AIN7                 7  /**< \brief ADC signal: AIN7 on PA07 mux B */

+#define MUX_PA07B_ADC_AIN7                 1

+#define PINMUX_PA07B_ADC_AIN7      ((PIN_PA07B_ADC_AIN7 << 16) | MUX_PA07B_ADC_AIN7)

+#define PORT_PA07B_ADC_AIN7        (1u <<  7)

+#define PIN_PB02B_ADC_AIN10               34  /**< \brief ADC signal: AIN10 on PB02 mux B */

+#define MUX_PB02B_ADC_AIN10                1

+#define PINMUX_PB02B_ADC_AIN10     ((PIN_PB02B_ADC_AIN10 << 16) | MUX_PB02B_ADC_AIN10)

+#define PORT_PB02B_ADC_AIN10       (1u <<  2)

+#define PIN_PB03B_ADC_AIN11               35  /**< \brief ADC signal: AIN11 on PB03 mux B */

+#define MUX_PB03B_ADC_AIN11                1

+#define PINMUX_PB03B_ADC_AIN11     ((PIN_PB03B_ADC_AIN11 << 16) | MUX_PB03B_ADC_AIN11)

+#define PORT_PB03B_ADC_AIN11       (1u <<  3)

+#define PIN_PA08B_ADC_AIN16                8  /**< \brief ADC signal: AIN16 on PA08 mux B */

+#define MUX_PA08B_ADC_AIN16                1

+#define PINMUX_PA08B_ADC_AIN16     ((PIN_PA08B_ADC_AIN16 << 16) | MUX_PA08B_ADC_AIN16)

+#define PORT_PA08B_ADC_AIN16       (1u <<  8)

+#define PIN_PA09B_ADC_AIN17                9  /**< \brief ADC signal: AIN17 on PA09 mux B */

+#define MUX_PA09B_ADC_AIN17                1

+#define PINMUX_PA09B_ADC_AIN17     ((PIN_PA09B_ADC_AIN17 << 16) | MUX_PA09B_ADC_AIN17)

+#define PORT_PA09B_ADC_AIN17       (1u <<  9)

+#define PIN_PA10B_ADC_AIN18               10  /**< \brief ADC signal: AIN18 on PA10 mux B */

+#define MUX_PA10B_ADC_AIN18                1

+#define PINMUX_PA10B_ADC_AIN18     ((PIN_PA10B_ADC_AIN18 << 16) | MUX_PA10B_ADC_AIN18)

+#define PORT_PA10B_ADC_AIN18       (1u << 10)

+#define PIN_PA11B_ADC_AIN19               11  /**< \brief ADC signal: AIN19 on PA11 mux B */

+#define MUX_PA11B_ADC_AIN19                1

+#define PINMUX_PA11B_ADC_AIN19     ((PIN_PA11B_ADC_AIN19 << 16) | MUX_PA11B_ADC_AIN19)

+#define PORT_PA11B_ADC_AIN19       (1u << 11)

+#define PIN_PA04B_ADC_VREFP                4  /**< \brief ADC signal: VREFP on PA04 mux B */

+#define MUX_PA04B_ADC_VREFP                1

+#define PINMUX_PA04B_ADC_VREFP     ((PIN_PA04B_ADC_VREFP << 16) | MUX_PA04B_ADC_VREFP)

+#define PORT_PA04B_ADC_VREFP       (1u <<  4)

+/* ========== PORT definition for AC peripheral ========== */

+#define PIN_PA04B_AC_AIN0                  4  /**< \brief AC signal: AIN0 on PA04 mux B */

+#define MUX_PA04B_AC_AIN0                  1

+#define PINMUX_PA04B_AC_AIN0       ((PIN_PA04B_AC_AIN0 << 16) | MUX_PA04B_AC_AIN0)

+#define PORT_PA04B_AC_AIN0         (1u <<  4)

+#define PIN_PA05B_AC_AIN1                  5  /**< \brief AC signal: AIN1 on PA05 mux B */

+#define MUX_PA05B_AC_AIN1                  1

+#define PINMUX_PA05B_AC_AIN1       ((PIN_PA05B_AC_AIN1 << 16) | MUX_PA05B_AC_AIN1)

+#define PORT_PA05B_AC_AIN1         (1u <<  5)

+#define PIN_PA06B_AC_AIN2                  6  /**< \brief AC signal: AIN2 on PA06 mux B */

+#define MUX_PA06B_AC_AIN2                  1

+#define PINMUX_PA06B_AC_AIN2       ((PIN_PA06B_AC_AIN2 << 16) | MUX_PA06B_AC_AIN2)

+#define PORT_PA06B_AC_AIN2         (1u <<  6)

+#define PIN_PA07B_AC_AIN3                  7  /**< \brief AC signal: AIN3 on PA07 mux B */

+#define MUX_PA07B_AC_AIN3                  1

+#define PINMUX_PA07B_AC_AIN3       ((PIN_PA07B_AC_AIN3 << 16) | MUX_PA07B_AC_AIN3)

+#define PORT_PA07B_AC_AIN3         (1u <<  7)

+#define PIN_PA12H_AC_CMP0                 12  /**< \brief AC signal: CMP0 on PA12 mux H */

+#define MUX_PA12H_AC_CMP0                  7

+#define PINMUX_PA12H_AC_CMP0       ((PIN_PA12H_AC_CMP0 << 16) | MUX_PA12H_AC_CMP0)

+#define PORT_PA12H_AC_CMP0         (1u << 12)

+#define PIN_PA18H_AC_CMP0                 18  /**< \brief AC signal: CMP0 on PA18 mux H */

+#define MUX_PA18H_AC_CMP0                  7

+#define PINMUX_PA18H_AC_CMP0       ((PIN_PA18H_AC_CMP0 << 16) | MUX_PA18H_AC_CMP0)

+#define PORT_PA18H_AC_CMP0         (1u << 18)

+#define PIN_PA13H_AC_CMP1                 13  /**< \brief AC signal: CMP1 on PA13 mux H */

+#define MUX_PA13H_AC_CMP1                  7

+#define PINMUX_PA13H_AC_CMP1       ((PIN_PA13H_AC_CMP1 << 16) | MUX_PA13H_AC_CMP1)

+#define PORT_PA13H_AC_CMP1         (1u << 13)

+#define PIN_PA19H_AC_CMP1                 19  /**< \brief AC signal: CMP1 on PA19 mux H */

+#define MUX_PA19H_AC_CMP1                  7

+#define PINMUX_PA19H_AC_CMP1       ((PIN_PA19H_AC_CMP1 << 16) | MUX_PA19H_AC_CMP1)

+#define PORT_PA19H_AC_CMP1         (1u << 19)

+/* ========== PORT definition for DAC peripheral ========== */

+#define PIN_PA02B_DAC_VOUT                 2  /**< \brief DAC signal: VOUT on PA02 mux B */

+#define MUX_PA02B_DAC_VOUT                 1

+#define PINMUX_PA02B_DAC_VOUT      ((PIN_PA02B_DAC_VOUT << 16) | MUX_PA02B_DAC_VOUT)

+#define PORT_PA02B_DAC_VOUT        (1u <<  2)

+#define PIN_PA03B_DAC_VREFP                3  /**< \brief DAC signal: VREFP on PA03 mux B */

+#define MUX_PA03B_DAC_VREFP                1

+#define PINMUX_PA03B_DAC_VREFP     ((PIN_PA03B_DAC_VREFP << 16) | MUX_PA03B_DAC_VREFP)

+#define PORT_PA03B_DAC_VREFP       (1u <<  3)

+

+#endif /* _SAMD20G14_PIO_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20g15.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20g15.h
new file mode 100644
index 0000000..8a6c9dc
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20g15.h
@@ -0,0 +1,812 @@
+/**

+ * \file

+ *

+ * \brief Peripheral I/O description for SAMD20G15

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20G15_PIO_

+#define _SAMD20G15_PIO_

+

+#define PIN_PA00                           0  /**< \brief Pin Number for PA00 */

+#define PORT_PA00                  (1u <<  0) /**< \brief PORT Mask  for PA00 */

+#define PIN_PA01                           1  /**< \brief Pin Number for PA01 */

+#define PORT_PA01                  (1u <<  1) /**< \brief PORT Mask  for PA01 */

+#define PIN_PA02                           2  /**< \brief Pin Number for PA02 */

+#define PORT_PA02                  (1u <<  2) /**< \brief PORT Mask  for PA02 */

+#define PIN_PA03                           3  /**< \brief Pin Number for PA03 */

+#define PORT_PA03                  (1u <<  3) /**< \brief PORT Mask  for PA03 */

+#define PIN_PA04                           4  /**< \brief Pin Number for PA04 */

+#define PORT_PA04                  (1u <<  4) /**< \brief PORT Mask  for PA04 */

+#define PIN_PA05                           5  /**< \brief Pin Number for PA05 */

+#define PORT_PA05                  (1u <<  5) /**< \brief PORT Mask  for PA05 */

+#define PIN_PA06                           6  /**< \brief Pin Number for PA06 */

+#define PORT_PA06                  (1u <<  6) /**< \brief PORT Mask  for PA06 */

+#define PIN_PA07                           7  /**< \brief Pin Number for PA07 */

+#define PORT_PA07                  (1u <<  7) /**< \brief PORT Mask  for PA07 */

+#define PIN_PA08                           8  /**< \brief Pin Number for PA08 */

+#define PORT_PA08                  (1u <<  8) /**< \brief PORT Mask  for PA08 */

+#define PIN_PA09                           9  /**< \brief Pin Number for PA09 */

+#define PORT_PA09                  (1u <<  9) /**< \brief PORT Mask  for PA09 */

+#define PIN_PA10                          10  /**< \brief Pin Number for PA10 */

+#define PORT_PA10                  (1u << 10) /**< \brief PORT Mask  for PA10 */

+#define PIN_PA11                          11  /**< \brief Pin Number for PA11 */

+#define PORT_PA11                  (1u << 11) /**< \brief PORT Mask  for PA11 */

+#define PIN_PA12                          12  /**< \brief Pin Number for PA12 */

+#define PORT_PA12                  (1u << 12) /**< \brief PORT Mask  for PA12 */

+#define PIN_PA13                          13  /**< \brief Pin Number for PA13 */

+#define PORT_PA13                  (1u << 13) /**< \brief PORT Mask  for PA13 */

+#define PIN_PA14                          14  /**< \brief Pin Number for PA14 */

+#define PORT_PA14                  (1u << 14) /**< \brief PORT Mask  for PA14 */

+#define PIN_PA15                          15  /**< \brief Pin Number for PA15 */

+#define PORT_PA15                  (1u << 15) /**< \brief PORT Mask  for PA15 */

+#define PIN_PA16                          16  /**< \brief Pin Number for PA16 */

+#define PORT_PA16                  (1u << 16) /**< \brief PORT Mask  for PA16 */

+#define PIN_PA17                          17  /**< \brief Pin Number for PA17 */

+#define PORT_PA17                  (1u << 17) /**< \brief PORT Mask  for PA17 */

+#define PIN_PA18                          18  /**< \brief Pin Number for PA18 */

+#define PORT_PA18                  (1u << 18) /**< \brief PORT Mask  for PA18 */

+#define PIN_PA19                          19  /**< \brief Pin Number for PA19 */

+#define PORT_PA19                  (1u << 19) /**< \brief PORT Mask  for PA19 */

+#define PIN_PA20                          20  /**< \brief Pin Number for PA20 */

+#define PORT_PA20                  (1u << 20) /**< \brief PORT Mask  for PA20 */

+#define PIN_PA21                          21  /**< \brief Pin Number for PA21 */

+#define PORT_PA21                  (1u << 21) /**< \brief PORT Mask  for PA21 */

+#define PIN_PA22                          22  /**< \brief Pin Number for PA22 */

+#define PORT_PA22                  (1u << 22) /**< \brief PORT Mask  for PA22 */

+#define PIN_PA23                          23  /**< \brief Pin Number for PA23 */

+#define PORT_PA23                  (1u << 23) /**< \brief PORT Mask  for PA23 */

+#define PIN_PA24                          24  /**< \brief Pin Number for PA24 */

+#define PORT_PA24                  (1u << 24) /**< \brief PORT Mask  for PA24 */

+#define PIN_PA25                          25  /**< \brief Pin Number for PA25 */

+#define PORT_PA25                  (1u << 25) /**< \brief PORT Mask  for PA25 */

+#define PIN_PA27                          27  /**< \brief Pin Number for PA27 */

+#define PORT_PA27                  (1u << 27) /**< \brief PORT Mask  for PA27 */

+#define PIN_PA28                          28  /**< \brief Pin Number for PA28 */

+#define PORT_PA28                  (1u << 28) /**< \brief PORT Mask  for PA28 */

+#define PIN_PA30                          30  /**< \brief Pin Number for PA30 */

+#define PORT_PA30                  (1u << 30) /**< \brief PORT Mask  for PA30 */

+#define PIN_PA31                          31  /**< \brief Pin Number for PA31 */

+#define PORT_PA31                  (1u << 31) /**< \brief PORT Mask  for PA31 */

+#define PIN_PB02                          34  /**< \brief Pin Number for PB02 */

+#define PORT_PB02                  (1u <<  2) /**< \brief PORT Mask  for PB02 */

+#define PIN_PB03                          35  /**< \brief Pin Number for PB03 */

+#define PORT_PB03                  (1u <<  3) /**< \brief PORT Mask  for PB03 */

+#define PIN_PB08                          40  /**< \brief Pin Number for PB08 */

+#define PORT_PB08                  (1u <<  8) /**< \brief PORT Mask  for PB08 */

+#define PIN_PB09                          41  /**< \brief Pin Number for PB09 */

+#define PORT_PB09                  (1u <<  9) /**< \brief PORT Mask  for PB09 */

+#define PIN_PB10                          42  /**< \brief Pin Number for PB10 */

+#define PORT_PB10                  (1u << 10) /**< \brief PORT Mask  for PB10 */

+#define PIN_PB11                          43  /**< \brief Pin Number for PB11 */

+#define PORT_PB11                  (1u << 11) /**< \brief PORT Mask  for PB11 */

+#define PIN_PB22                          54  /**< \brief Pin Number for PB22 */

+#define PORT_PB22                  (1u << 22) /**< \brief PORT Mask  for PB22 */

+#define PIN_PB23                          55  /**< \brief Pin Number for PB23 */

+#define PORT_PB23                  (1u << 23) /**< \brief PORT Mask  for PB23 */

+/* ========== PORT definition for CORE peripheral ========== */

+#define PIN_PA30G_CORE_SWCLK              30  /**< \brief CORE signal: SWCLK on PA30 mux G */

+#define MUX_PA30G_CORE_SWCLK               6

+#define PINMUX_PA30G_CORE_SWCLK    ((PIN_PA30G_CORE_SWCLK << 16) | MUX_PA30G_CORE_SWCLK)

+#define PORT_PA30G_CORE_SWCLK      (1u << 30)

+/* ========== PORT definition for GCLK peripheral ========== */

+#define PIN_PB22H_GCLK_IO0                54  /**< \brief GCLK signal: IO0 on PB22 mux H */

+#define MUX_PB22H_GCLK_IO0                 7

+#define PINMUX_PB22H_GCLK_IO0      ((PIN_PB22H_GCLK_IO0 << 16) | MUX_PB22H_GCLK_IO0)

+#define PORT_PB22H_GCLK_IO0        (1u << 22)

+#define PIN_PA14H_GCLK_IO0                14  /**< \brief GCLK signal: IO0 on PA14 mux H */

+#define MUX_PA14H_GCLK_IO0                 7

+#define PINMUX_PA14H_GCLK_IO0      ((PIN_PA14H_GCLK_IO0 << 16) | MUX_PA14H_GCLK_IO0)

+#define PORT_PA14H_GCLK_IO0        (1u << 14)

+#define PIN_PA27H_GCLK_IO0                27  /**< \brief GCLK signal: IO0 on PA27 mux H */

+#define MUX_PA27H_GCLK_IO0                 7

+#define PINMUX_PA27H_GCLK_IO0      ((PIN_PA27H_GCLK_IO0 << 16) | MUX_PA27H_GCLK_IO0)

+#define PORT_PA27H_GCLK_IO0        (1u << 27)

+#define PIN_PA28H_GCLK_IO0                28  /**< \brief GCLK signal: IO0 on PA28 mux H */

+#define MUX_PA28H_GCLK_IO0                 7

+#define PINMUX_PA28H_GCLK_IO0      ((PIN_PA28H_GCLK_IO0 << 16) | MUX_PA28H_GCLK_IO0)

+#define PORT_PA28H_GCLK_IO0        (1u << 28)

+#define PIN_PA30H_GCLK_IO0                30  /**< \brief GCLK signal: IO0 on PA30 mux H */

+#define MUX_PA30H_GCLK_IO0                 7

+#define PINMUX_PA30H_GCLK_IO0      ((PIN_PA30H_GCLK_IO0 << 16) | MUX_PA30H_GCLK_IO0)

+#define PORT_PA30H_GCLK_IO0        (1u << 30)

+#define PIN_PB23H_GCLK_IO1                55  /**< \brief GCLK signal: IO1 on PB23 mux H */

+#define MUX_PB23H_GCLK_IO1                 7

+#define PINMUX_PB23H_GCLK_IO1      ((PIN_PB23H_GCLK_IO1 << 16) | MUX_PB23H_GCLK_IO1)

+#define PORT_PB23H_GCLK_IO1        (1u << 23)

+#define PIN_PA15H_GCLK_IO1                15  /**< \brief GCLK signal: IO1 on PA15 mux H */

+#define MUX_PA15H_GCLK_IO1                 7

+#define PINMUX_PA15H_GCLK_IO1      ((PIN_PA15H_GCLK_IO1 << 16) | MUX_PA15H_GCLK_IO1)

+#define PORT_PA15H_GCLK_IO1        (1u << 15)

+#define PIN_PA16H_GCLK_IO2                16  /**< \brief GCLK signal: IO2 on PA16 mux H */

+#define MUX_PA16H_GCLK_IO2                 7

+#define PINMUX_PA16H_GCLK_IO2      ((PIN_PA16H_GCLK_IO2 << 16) | MUX_PA16H_GCLK_IO2)

+#define PORT_PA16H_GCLK_IO2        (1u << 16)

+#define PIN_PA17H_GCLK_IO3                17  /**< \brief GCLK signal: IO3 on PA17 mux H */

+#define MUX_PA17H_GCLK_IO3                 7

+#define PINMUX_PA17H_GCLK_IO3      ((PIN_PA17H_GCLK_IO3 << 16) | MUX_PA17H_GCLK_IO3)

+#define PORT_PA17H_GCLK_IO3        (1u << 17)

+#define PIN_PA10H_GCLK_IO4                10  /**< \brief GCLK signal: IO4 on PA10 mux H */

+#define MUX_PA10H_GCLK_IO4                 7

+#define PINMUX_PA10H_GCLK_IO4      ((PIN_PA10H_GCLK_IO4 << 16) | MUX_PA10H_GCLK_IO4)

+#define PORT_PA10H_GCLK_IO4        (1u << 10)

+#define PIN_PA20H_GCLK_IO4                20  /**< \brief GCLK signal: IO4 on PA20 mux H */

+#define MUX_PA20H_GCLK_IO4                 7

+#define PINMUX_PA20H_GCLK_IO4      ((PIN_PA20H_GCLK_IO4 << 16) | MUX_PA20H_GCLK_IO4)

+#define PORT_PA20H_GCLK_IO4        (1u << 20)

+#define PIN_PB10H_GCLK_IO4                42  /**< \brief GCLK signal: IO4 on PB10 mux H */

+#define MUX_PB10H_GCLK_IO4                 7

+#define PINMUX_PB10H_GCLK_IO4      ((PIN_PB10H_GCLK_IO4 << 16) | MUX_PB10H_GCLK_IO4)

+#define PORT_PB10H_GCLK_IO4        (1u << 10)

+#define PIN_PA11H_GCLK_IO5                11  /**< \brief GCLK signal: IO5 on PA11 mux H */

+#define MUX_PA11H_GCLK_IO5                 7

+#define PINMUX_PA11H_GCLK_IO5      ((PIN_PA11H_GCLK_IO5 << 16) | MUX_PA11H_GCLK_IO5)

+#define PORT_PA11H_GCLK_IO5        (1u << 11)

+#define PIN_PA21H_GCLK_IO5                21  /**< \brief GCLK signal: IO5 on PA21 mux H */

+#define MUX_PA21H_GCLK_IO5                 7

+#define PINMUX_PA21H_GCLK_IO5      ((PIN_PA21H_GCLK_IO5 << 16) | MUX_PA21H_GCLK_IO5)

+#define PORT_PA21H_GCLK_IO5        (1u << 21)

+#define PIN_PB11H_GCLK_IO5                43  /**< \brief GCLK signal: IO5 on PB11 mux H */

+#define MUX_PB11H_GCLK_IO5                 7

+#define PINMUX_PB11H_GCLK_IO5      ((PIN_PB11H_GCLK_IO5 << 16) | MUX_PB11H_GCLK_IO5)

+#define PORT_PB11H_GCLK_IO5        (1u << 11)

+#define PIN_PA22H_GCLK_IO6                22  /**< \brief GCLK signal: IO6 on PA22 mux H */

+#define MUX_PA22H_GCLK_IO6                 7

+#define PINMUX_PA22H_GCLK_IO6      ((PIN_PA22H_GCLK_IO6 << 16) | MUX_PA22H_GCLK_IO6)

+#define PORT_PA22H_GCLK_IO6        (1u << 22)

+#define PIN_PA23H_GCLK_IO7                23  /**< \brief GCLK signal: IO7 on PA23 mux H */

+#define MUX_PA23H_GCLK_IO7                 7

+#define PINMUX_PA23H_GCLK_IO7      ((PIN_PA23H_GCLK_IO7 << 16) | MUX_PA23H_GCLK_IO7)

+#define PORT_PA23H_GCLK_IO7        (1u << 23)

+/* ========== PORT definition for EIC peripheral ========== */

+#define PIN_PA16A_EIC_EXTINT0             16  /**< \brief EIC signal: EXTINT0 on PA16 mux A */

+#define MUX_PA16A_EIC_EXTINT0              0

+#define PINMUX_PA16A_EIC_EXTINT0   ((PIN_PA16A_EIC_EXTINT0 << 16) | MUX_PA16A_EIC_EXTINT0)

+#define PORT_PA16A_EIC_EXTINT0     (1u << 16)

+#define PIN_PA00A_EIC_EXTINT0              0  /**< \brief EIC signal: EXTINT0 on PA00 mux A */

+#define MUX_PA00A_EIC_EXTINT0              0

+#define PINMUX_PA00A_EIC_EXTINT0   ((PIN_PA00A_EIC_EXTINT0 << 16) | MUX_PA00A_EIC_EXTINT0)

+#define PORT_PA00A_EIC_EXTINT0     (1u <<  0)

+#define PIN_PA17A_EIC_EXTINT1             17  /**< \brief EIC signal: EXTINT1 on PA17 mux A */

+#define MUX_PA17A_EIC_EXTINT1              0

+#define PINMUX_PA17A_EIC_EXTINT1   ((PIN_PA17A_EIC_EXTINT1 << 16) | MUX_PA17A_EIC_EXTINT1)

+#define PORT_PA17A_EIC_EXTINT1     (1u << 17)

+#define PIN_PA01A_EIC_EXTINT1              1  /**< \brief EIC signal: EXTINT1 on PA01 mux A */

+#define MUX_PA01A_EIC_EXTINT1              0

+#define PINMUX_PA01A_EIC_EXTINT1   ((PIN_PA01A_EIC_EXTINT1 << 16) | MUX_PA01A_EIC_EXTINT1)

+#define PORT_PA01A_EIC_EXTINT1     (1u <<  1)

+#define PIN_PA02A_EIC_EXTINT2              2  /**< \brief EIC signal: EXTINT2 on PA02 mux A */

+#define MUX_PA02A_EIC_EXTINT2              0

+#define PINMUX_PA02A_EIC_EXTINT2   ((PIN_PA02A_EIC_EXTINT2 << 16) | MUX_PA02A_EIC_EXTINT2)

+#define PORT_PA02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA18A_EIC_EXTINT2             18  /**< \brief EIC signal: EXTINT2 on PA18 mux A */

+#define MUX_PA18A_EIC_EXTINT2              0

+#define PINMUX_PA18A_EIC_EXTINT2   ((PIN_PA18A_EIC_EXTINT2 << 16) | MUX_PA18A_EIC_EXTINT2)

+#define PORT_PA18A_EIC_EXTINT2     (1u << 18)

+#define PIN_PB02A_EIC_EXTINT2             34  /**< \brief EIC signal: EXTINT2 on PB02 mux A */

+#define MUX_PB02A_EIC_EXTINT2              0

+#define PINMUX_PB02A_EIC_EXTINT2   ((PIN_PB02A_EIC_EXTINT2 << 16) | MUX_PB02A_EIC_EXTINT2)

+#define PORT_PB02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA03A_EIC_EXTINT3              3  /**< \brief EIC signal: EXTINT3 on PA03 mux A */

+#define MUX_PA03A_EIC_EXTINT3              0

+#define PINMUX_PA03A_EIC_EXTINT3   ((PIN_PA03A_EIC_EXTINT3 << 16) | MUX_PA03A_EIC_EXTINT3)

+#define PORT_PA03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA19A_EIC_EXTINT3             19  /**< \brief EIC signal: EXTINT3 on PA19 mux A */

+#define MUX_PA19A_EIC_EXTINT3              0

+#define PINMUX_PA19A_EIC_EXTINT3   ((PIN_PA19A_EIC_EXTINT3 << 16) | MUX_PA19A_EIC_EXTINT3)

+#define PORT_PA19A_EIC_EXTINT3     (1u << 19)

+#define PIN_PB03A_EIC_EXTINT3             35  /**< \brief EIC signal: EXTINT3 on PB03 mux A */

+#define MUX_PB03A_EIC_EXTINT3              0

+#define PINMUX_PB03A_EIC_EXTINT3   ((PIN_PB03A_EIC_EXTINT3 << 16) | MUX_PB03A_EIC_EXTINT3)

+#define PORT_PB03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA04A_EIC_EXTINT4              4  /**< \brief EIC signal: EXTINT4 on PA04 mux A */

+#define MUX_PA04A_EIC_EXTINT4              0

+#define PINMUX_PA04A_EIC_EXTINT4   ((PIN_PA04A_EIC_EXTINT4 << 16) | MUX_PA04A_EIC_EXTINT4)

+#define PORT_PA04A_EIC_EXTINT4     (1u <<  4)

+#define PIN_PA20A_EIC_EXTINT4             20  /**< \brief EIC signal: EXTINT4 on PA20 mux A */

+#define MUX_PA20A_EIC_EXTINT4              0

+#define PINMUX_PA20A_EIC_EXTINT4   ((PIN_PA20A_EIC_EXTINT4 << 16) | MUX_PA20A_EIC_EXTINT4)

+#define PORT_PA20A_EIC_EXTINT4     (1u << 20)

+#define PIN_PA05A_EIC_EXTINT5              5  /**< \brief EIC signal: EXTINT5 on PA05 mux A */

+#define MUX_PA05A_EIC_EXTINT5              0

+#define PINMUX_PA05A_EIC_EXTINT5   ((PIN_PA05A_EIC_EXTINT5 << 16) | MUX_PA05A_EIC_EXTINT5)

+#define PORT_PA05A_EIC_EXTINT5     (1u <<  5)

+#define PIN_PA21A_EIC_EXTINT5             21  /**< \brief EIC signal: EXTINT5 on PA21 mux A */

+#define MUX_PA21A_EIC_EXTINT5              0

+#define PINMUX_PA21A_EIC_EXTINT5   ((PIN_PA21A_EIC_EXTINT5 << 16) | MUX_PA21A_EIC_EXTINT5)

+#define PORT_PA21A_EIC_EXTINT5     (1u << 21)

+#define PIN_PA06A_EIC_EXTINT6              6  /**< \brief EIC signal: EXTINT6 on PA06 mux A */

+#define MUX_PA06A_EIC_EXTINT6              0

+#define PINMUX_PA06A_EIC_EXTINT6   ((PIN_PA06A_EIC_EXTINT6 << 16) | MUX_PA06A_EIC_EXTINT6)

+#define PORT_PA06A_EIC_EXTINT6     (1u <<  6)

+#define PIN_PA22A_EIC_EXTINT6             22  /**< \brief EIC signal: EXTINT6 on PA22 mux A */

+#define MUX_PA22A_EIC_EXTINT6              0

+#define PINMUX_PA22A_EIC_EXTINT6   ((PIN_PA22A_EIC_EXTINT6 << 16) | MUX_PA22A_EIC_EXTINT6)

+#define PORT_PA22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PB22A_EIC_EXTINT6             54  /**< \brief EIC signal: EXTINT6 on PB22 mux A */

+#define MUX_PB22A_EIC_EXTINT6              0

+#define PINMUX_PB22A_EIC_EXTINT6   ((PIN_PB22A_EIC_EXTINT6 << 16) | MUX_PB22A_EIC_EXTINT6)

+#define PORT_PB22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PA07A_EIC_EXTINT7              7  /**< \brief EIC signal: EXTINT7 on PA07 mux A */

+#define MUX_PA07A_EIC_EXTINT7              0

+#define PINMUX_PA07A_EIC_EXTINT7   ((PIN_PA07A_EIC_EXTINT7 << 16) | MUX_PA07A_EIC_EXTINT7)

+#define PORT_PA07A_EIC_EXTINT7     (1u <<  7)

+#define PIN_PA23A_EIC_EXTINT7             23  /**< \brief EIC signal: EXTINT7 on PA23 mux A */

+#define MUX_PA23A_EIC_EXTINT7              0

+#define PINMUX_PA23A_EIC_EXTINT7   ((PIN_PA23A_EIC_EXTINT7 << 16) | MUX_PA23A_EIC_EXTINT7)

+#define PORT_PA23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PB23A_EIC_EXTINT7             55  /**< \brief EIC signal: EXTINT7 on PB23 mux A */

+#define MUX_PB23A_EIC_EXTINT7              0

+#define PINMUX_PB23A_EIC_EXTINT7   ((PIN_PB23A_EIC_EXTINT7 << 16) | MUX_PB23A_EIC_EXTINT7)

+#define PORT_PB23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PA28A_EIC_EXTINT8             28  /**< \brief EIC signal: EXTINT8 on PA28 mux A */

+#define MUX_PA28A_EIC_EXTINT8              0

+#define PINMUX_PA28A_EIC_EXTINT8   ((PIN_PA28A_EIC_EXTINT8 << 16) | MUX_PA28A_EIC_EXTINT8)

+#define PORT_PA28A_EIC_EXTINT8     (1u << 28)

+#define PIN_PB08A_EIC_EXTINT8             40  /**< \brief EIC signal: EXTINT8 on PB08 mux A */

+#define MUX_PB08A_EIC_EXTINT8              0

+#define PINMUX_PB08A_EIC_EXTINT8   ((PIN_PB08A_EIC_EXTINT8 << 16) | MUX_PB08A_EIC_EXTINT8)

+#define PORT_PB08A_EIC_EXTINT8     (1u <<  8)

+#define PIN_PA09A_EIC_EXTINT9              9  /**< \brief EIC signal: EXTINT9 on PA09 mux A */

+#define MUX_PA09A_EIC_EXTINT9              0

+#define PINMUX_PA09A_EIC_EXTINT9   ((PIN_PA09A_EIC_EXTINT9 << 16) | MUX_PA09A_EIC_EXTINT9)

+#define PORT_PA09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PB09A_EIC_EXTINT9             41  /**< \brief EIC signal: EXTINT9 on PB09 mux A */

+#define MUX_PB09A_EIC_EXTINT9              0

+#define PINMUX_PB09A_EIC_EXTINT9   ((PIN_PB09A_EIC_EXTINT9 << 16) | MUX_PB09A_EIC_EXTINT9)

+#define PORT_PB09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PA10A_EIC_EXTINT10            10  /**< \brief EIC signal: EXTINT10 on PA10 mux A */

+#define MUX_PA10A_EIC_EXTINT10             0

+#define PINMUX_PA10A_EIC_EXTINT10  ((PIN_PA10A_EIC_EXTINT10 << 16) | MUX_PA10A_EIC_EXTINT10)

+#define PORT_PA10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA30A_EIC_EXTINT10            30  /**< \brief EIC signal: EXTINT10 on PA30 mux A */

+#define MUX_PA30A_EIC_EXTINT10             0

+#define PINMUX_PA30A_EIC_EXTINT10  ((PIN_PA30A_EIC_EXTINT10 << 16) | MUX_PA30A_EIC_EXTINT10)

+#define PORT_PA30A_EIC_EXTINT10    (1u << 30)

+#define PIN_PB10A_EIC_EXTINT10            42  /**< \brief EIC signal: EXTINT10 on PB10 mux A */

+#define MUX_PB10A_EIC_EXTINT10             0

+#define PINMUX_PB10A_EIC_EXTINT10  ((PIN_PB10A_EIC_EXTINT10 << 16) | MUX_PB10A_EIC_EXTINT10)

+#define PORT_PB10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA11A_EIC_EXTINT11            11  /**< \brief EIC signal: EXTINT11 on PA11 mux A */

+#define MUX_PA11A_EIC_EXTINT11             0

+#define PINMUX_PA11A_EIC_EXTINT11  ((PIN_PA11A_EIC_EXTINT11 << 16) | MUX_PA11A_EIC_EXTINT11)

+#define PORT_PA11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA31A_EIC_EXTINT11            31  /**< \brief EIC signal: EXTINT11 on PA31 mux A */

+#define MUX_PA31A_EIC_EXTINT11             0

+#define PINMUX_PA31A_EIC_EXTINT11  ((PIN_PA31A_EIC_EXTINT11 << 16) | MUX_PA31A_EIC_EXTINT11)

+#define PORT_PA31A_EIC_EXTINT11    (1u << 31)

+#define PIN_PB11A_EIC_EXTINT11            43  /**< \brief EIC signal: EXTINT11 on PB11 mux A */

+#define MUX_PB11A_EIC_EXTINT11             0

+#define PINMUX_PB11A_EIC_EXTINT11  ((PIN_PB11A_EIC_EXTINT11 << 16) | MUX_PB11A_EIC_EXTINT11)

+#define PORT_PB11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA12A_EIC_EXTINT12            12  /**< \brief EIC signal: EXTINT12 on PA12 mux A */

+#define MUX_PA12A_EIC_EXTINT12             0

+#define PINMUX_PA12A_EIC_EXTINT12  ((PIN_PA12A_EIC_EXTINT12 << 16) | MUX_PA12A_EIC_EXTINT12)

+#define PORT_PA12A_EIC_EXTINT12    (1u << 12)

+#define PIN_PA24A_EIC_EXTINT12            24  /**< \brief EIC signal: EXTINT12 on PA24 mux A */

+#define MUX_PA24A_EIC_EXTINT12             0

+#define PINMUX_PA24A_EIC_EXTINT12  ((PIN_PA24A_EIC_EXTINT12 << 16) | MUX_PA24A_EIC_EXTINT12)

+#define PORT_PA24A_EIC_EXTINT12    (1u << 24)

+#define PIN_PA13A_EIC_EXTINT13            13  /**< \brief EIC signal: EXTINT13 on PA13 mux A */

+#define MUX_PA13A_EIC_EXTINT13             0

+#define PINMUX_PA13A_EIC_EXTINT13  ((PIN_PA13A_EIC_EXTINT13 << 16) | MUX_PA13A_EIC_EXTINT13)

+#define PORT_PA13A_EIC_EXTINT13    (1u << 13)

+#define PIN_PA25A_EIC_EXTINT13            25  /**< \brief EIC signal: EXTINT13 on PA25 mux A */

+#define MUX_PA25A_EIC_EXTINT13             0

+#define PINMUX_PA25A_EIC_EXTINT13  ((PIN_PA25A_EIC_EXTINT13 << 16) | MUX_PA25A_EIC_EXTINT13)

+#define PORT_PA25A_EIC_EXTINT13    (1u << 25)

+#define PIN_PA14A_EIC_EXTINT14            14  /**< \brief EIC signal: EXTINT14 on PA14 mux A */

+#define MUX_PA14A_EIC_EXTINT14             0

+#define PINMUX_PA14A_EIC_EXTINT14  ((PIN_PA14A_EIC_EXTINT14 << 16) | MUX_PA14A_EIC_EXTINT14)

+#define PORT_PA14A_EIC_EXTINT14    (1u << 14)

+#define PIN_PA27A_EIC_EXTINT15            27  /**< \brief EIC signal: EXTINT15 on PA27 mux A */

+#define MUX_PA27A_EIC_EXTINT15             0

+#define PINMUX_PA27A_EIC_EXTINT15  ((PIN_PA27A_EIC_EXTINT15 << 16) | MUX_PA27A_EIC_EXTINT15)

+#define PORT_PA27A_EIC_EXTINT15    (1u << 27)

+#define PIN_PA15A_EIC_EXTINT15            15  /**< \brief EIC signal: EXTINT15 on PA15 mux A */

+#define MUX_PA15A_EIC_EXTINT15             0

+#define PINMUX_PA15A_EIC_EXTINT15  ((PIN_PA15A_EIC_EXTINT15 << 16) | MUX_PA15A_EIC_EXTINT15)

+#define PORT_PA15A_EIC_EXTINT15    (1u << 15)

+#define PIN_PA08A_EIC_NMI                  8  /**< \brief EIC signal: NMI on PA08 mux A */

+#define MUX_PA08A_EIC_NMI                  0

+#define PINMUX_PA08A_EIC_NMI       ((PIN_PA08A_EIC_NMI << 16) | MUX_PA08A_EIC_NMI)

+#define PORT_PA08A_EIC_NMI         (1u <<  8)

+/* ========== PORT definition for SERCOM0 peripheral ========== */

+#define PIN_PA04D_SERCOM0_PAD0             4  /**< \brief SERCOM0 signal: PAD0 on PA04 mux D */

+#define MUX_PA04D_SERCOM0_PAD0             3

+#define PINMUX_PA04D_SERCOM0_PAD0  ((PIN_PA04D_SERCOM0_PAD0 << 16) | MUX_PA04D_SERCOM0_PAD0)

+#define PORT_PA04D_SERCOM0_PAD0    (1u <<  4)

+#define PIN_PA08C_SERCOM0_PAD0             8  /**< \brief SERCOM0 signal: PAD0 on PA08 mux C */

+#define MUX_PA08C_SERCOM0_PAD0             2

+#define PINMUX_PA08C_SERCOM0_PAD0  ((PIN_PA08C_SERCOM0_PAD0 << 16) | MUX_PA08C_SERCOM0_PAD0)

+#define PORT_PA08C_SERCOM0_PAD0    (1u <<  8)

+#define PIN_PA05D_SERCOM0_PAD1             5  /**< \brief SERCOM0 signal: PAD1 on PA05 mux D */

+#define MUX_PA05D_SERCOM0_PAD1             3

+#define PINMUX_PA05D_SERCOM0_PAD1  ((PIN_PA05D_SERCOM0_PAD1 << 16) | MUX_PA05D_SERCOM0_PAD1)

+#define PORT_PA05D_SERCOM0_PAD1    (1u <<  5)

+#define PIN_PA09C_SERCOM0_PAD1             9  /**< \brief SERCOM0 signal: PAD1 on PA09 mux C */

+#define MUX_PA09C_SERCOM0_PAD1             2

+#define PINMUX_PA09C_SERCOM0_PAD1  ((PIN_PA09C_SERCOM0_PAD1 << 16) | MUX_PA09C_SERCOM0_PAD1)

+#define PORT_PA09C_SERCOM0_PAD1    (1u <<  9)

+#define PIN_PA06D_SERCOM0_PAD2             6  /**< \brief SERCOM0 signal: PAD2 on PA06 mux D */

+#define MUX_PA06D_SERCOM0_PAD2             3

+#define PINMUX_PA06D_SERCOM0_PAD2  ((PIN_PA06D_SERCOM0_PAD2 << 16) | MUX_PA06D_SERCOM0_PAD2)

+#define PORT_PA06D_SERCOM0_PAD2    (1u <<  6)

+#define PIN_PA10C_SERCOM0_PAD2            10  /**< \brief SERCOM0 signal: PAD2 on PA10 mux C */

+#define MUX_PA10C_SERCOM0_PAD2             2

+#define PINMUX_PA10C_SERCOM0_PAD2  ((PIN_PA10C_SERCOM0_PAD2 << 16) | MUX_PA10C_SERCOM0_PAD2)

+#define PORT_PA10C_SERCOM0_PAD2    (1u << 10)

+#define PIN_PA07D_SERCOM0_PAD3             7  /**< \brief SERCOM0 signal: PAD3 on PA07 mux D */

+#define MUX_PA07D_SERCOM0_PAD3             3

+#define PINMUX_PA07D_SERCOM0_PAD3  ((PIN_PA07D_SERCOM0_PAD3 << 16) | MUX_PA07D_SERCOM0_PAD3)

+#define PORT_PA07D_SERCOM0_PAD3    (1u <<  7)

+#define PIN_PA11C_SERCOM0_PAD3            11  /**< \brief SERCOM0 signal: PAD3 on PA11 mux C */

+#define MUX_PA11C_SERCOM0_PAD3             2

+#define PINMUX_PA11C_SERCOM0_PAD3  ((PIN_PA11C_SERCOM0_PAD3 << 16) | MUX_PA11C_SERCOM0_PAD3)

+#define PORT_PA11C_SERCOM0_PAD3    (1u << 11)

+/* ========== PORT definition for SERCOM1 peripheral ========== */

+#define PIN_PA16C_SERCOM1_PAD0            16  /**< \brief SERCOM1 signal: PAD0 on PA16 mux C */

+#define MUX_PA16C_SERCOM1_PAD0             2

+#define PINMUX_PA16C_SERCOM1_PAD0  ((PIN_PA16C_SERCOM1_PAD0 << 16) | MUX_PA16C_SERCOM1_PAD0)

+#define PORT_PA16C_SERCOM1_PAD0    (1u << 16)

+#define PIN_PA00D_SERCOM1_PAD0             0  /**< \brief SERCOM1 signal: PAD0 on PA00 mux D */

+#define MUX_PA00D_SERCOM1_PAD0             3

+#define PINMUX_PA00D_SERCOM1_PAD0  ((PIN_PA00D_SERCOM1_PAD0 << 16) | MUX_PA00D_SERCOM1_PAD0)

+#define PORT_PA00D_SERCOM1_PAD0    (1u <<  0)

+#define PIN_PA17C_SERCOM1_PAD1            17  /**< \brief SERCOM1 signal: PAD1 on PA17 mux C */

+#define MUX_PA17C_SERCOM1_PAD1             2

+#define PINMUX_PA17C_SERCOM1_PAD1  ((PIN_PA17C_SERCOM1_PAD1 << 16) | MUX_PA17C_SERCOM1_PAD1)

+#define PORT_PA17C_SERCOM1_PAD1    (1u << 17)

+#define PIN_PA01D_SERCOM1_PAD1             1  /**< \brief SERCOM1 signal: PAD1 on PA01 mux D */

+#define MUX_PA01D_SERCOM1_PAD1             3

+#define PINMUX_PA01D_SERCOM1_PAD1  ((PIN_PA01D_SERCOM1_PAD1 << 16) | MUX_PA01D_SERCOM1_PAD1)

+#define PORT_PA01D_SERCOM1_PAD1    (1u <<  1)

+#define PIN_PA30D_SERCOM1_PAD2            30  /**< \brief SERCOM1 signal: PAD2 on PA30 mux D */

+#define MUX_PA30D_SERCOM1_PAD2             3

+#define PINMUX_PA30D_SERCOM1_PAD2  ((PIN_PA30D_SERCOM1_PAD2 << 16) | MUX_PA30D_SERCOM1_PAD2)

+#define PORT_PA30D_SERCOM1_PAD2    (1u << 30)

+#define PIN_PA18C_SERCOM1_PAD2            18  /**< \brief SERCOM1 signal: PAD2 on PA18 mux C */

+#define MUX_PA18C_SERCOM1_PAD2             2

+#define PINMUX_PA18C_SERCOM1_PAD2  ((PIN_PA18C_SERCOM1_PAD2 << 16) | MUX_PA18C_SERCOM1_PAD2)

+#define PORT_PA18C_SERCOM1_PAD2    (1u << 18)

+#define PIN_PA31D_SERCOM1_PAD3            31  /**< \brief SERCOM1 signal: PAD3 on PA31 mux D */

+#define MUX_PA31D_SERCOM1_PAD3             3

+#define PINMUX_PA31D_SERCOM1_PAD3  ((PIN_PA31D_SERCOM1_PAD3 << 16) | MUX_PA31D_SERCOM1_PAD3)

+#define PORT_PA31D_SERCOM1_PAD3    (1u << 31)

+#define PIN_PA19C_SERCOM1_PAD3            19  /**< \brief SERCOM1 signal: PAD3 on PA19 mux C */

+#define MUX_PA19C_SERCOM1_PAD3             2

+#define PINMUX_PA19C_SERCOM1_PAD3  ((PIN_PA19C_SERCOM1_PAD3 << 16) | MUX_PA19C_SERCOM1_PAD3)

+#define PORT_PA19C_SERCOM1_PAD3    (1u << 19)

+/* ========== PORT definition for SERCOM2 peripheral ========== */

+#define PIN_PA08D_SERCOM2_PAD0             8  /**< \brief SERCOM2 signal: PAD0 on PA08 mux D */

+#define MUX_PA08D_SERCOM2_PAD0             3

+#define PINMUX_PA08D_SERCOM2_PAD0  ((PIN_PA08D_SERCOM2_PAD0 << 16) | MUX_PA08D_SERCOM2_PAD0)

+#define PORT_PA08D_SERCOM2_PAD0    (1u <<  8)

+#define PIN_PA12C_SERCOM2_PAD0            12  /**< \brief SERCOM2 signal: PAD0 on PA12 mux C */

+#define MUX_PA12C_SERCOM2_PAD0             2

+#define PINMUX_PA12C_SERCOM2_PAD0  ((PIN_PA12C_SERCOM2_PAD0 << 16) | MUX_PA12C_SERCOM2_PAD0)

+#define PORT_PA12C_SERCOM2_PAD0    (1u << 12)

+#define PIN_PA09D_SERCOM2_PAD1             9  /**< \brief SERCOM2 signal: PAD1 on PA09 mux D */

+#define MUX_PA09D_SERCOM2_PAD1             3

+#define PINMUX_PA09D_SERCOM2_PAD1  ((PIN_PA09D_SERCOM2_PAD1 << 16) | MUX_PA09D_SERCOM2_PAD1)

+#define PORT_PA09D_SERCOM2_PAD1    (1u <<  9)

+#define PIN_PA13C_SERCOM2_PAD1            13  /**< \brief SERCOM2 signal: PAD1 on PA13 mux C */

+#define MUX_PA13C_SERCOM2_PAD1             2

+#define PINMUX_PA13C_SERCOM2_PAD1  ((PIN_PA13C_SERCOM2_PAD1 << 16) | MUX_PA13C_SERCOM2_PAD1)

+#define PORT_PA13C_SERCOM2_PAD1    (1u << 13)

+#define PIN_PA10D_SERCOM2_PAD2            10  /**< \brief SERCOM2 signal: PAD2 on PA10 mux D */

+#define MUX_PA10D_SERCOM2_PAD2             3

+#define PINMUX_PA10D_SERCOM2_PAD2  ((PIN_PA10D_SERCOM2_PAD2 << 16) | MUX_PA10D_SERCOM2_PAD2)

+#define PORT_PA10D_SERCOM2_PAD2    (1u << 10)

+#define PIN_PA14C_SERCOM2_PAD2            14  /**< \brief SERCOM2 signal: PAD2 on PA14 mux C */

+#define MUX_PA14C_SERCOM2_PAD2             2

+#define PINMUX_PA14C_SERCOM2_PAD2  ((PIN_PA14C_SERCOM2_PAD2 << 16) | MUX_PA14C_SERCOM2_PAD2)

+#define PORT_PA14C_SERCOM2_PAD2    (1u << 14)

+#define PIN_PA11D_SERCOM2_PAD3            11  /**< \brief SERCOM2 signal: PAD3 on PA11 mux D */

+#define MUX_PA11D_SERCOM2_PAD3             3

+#define PINMUX_PA11D_SERCOM2_PAD3  ((PIN_PA11D_SERCOM2_PAD3 << 16) | MUX_PA11D_SERCOM2_PAD3)

+#define PORT_PA11D_SERCOM2_PAD3    (1u << 11)

+#define PIN_PA15C_SERCOM2_PAD3            15  /**< \brief SERCOM2 signal: PAD3 on PA15 mux C */

+#define MUX_PA15C_SERCOM2_PAD3             2

+#define PINMUX_PA15C_SERCOM2_PAD3  ((PIN_PA15C_SERCOM2_PAD3 << 16) | MUX_PA15C_SERCOM2_PAD3)

+#define PORT_PA15C_SERCOM2_PAD3    (1u << 15)

+/* ========== PORT definition for SERCOM3 peripheral ========== */

+#define PIN_PA16D_SERCOM3_PAD0            16  /**< \brief SERCOM3 signal: PAD0 on PA16 mux D */

+#define MUX_PA16D_SERCOM3_PAD0             3

+#define PINMUX_PA16D_SERCOM3_PAD0  ((PIN_PA16D_SERCOM3_PAD0 << 16) | MUX_PA16D_SERCOM3_PAD0)

+#define PORT_PA16D_SERCOM3_PAD0    (1u << 16)

+#define PIN_PA22C_SERCOM3_PAD0            22  /**< \brief SERCOM3 signal: PAD0 on PA22 mux C */

+#define MUX_PA22C_SERCOM3_PAD0             2

+#define PINMUX_PA22C_SERCOM3_PAD0  ((PIN_PA22C_SERCOM3_PAD0 << 16) | MUX_PA22C_SERCOM3_PAD0)

+#define PORT_PA22C_SERCOM3_PAD0    (1u << 22)

+#define PIN_PA17D_SERCOM3_PAD1            17  /**< \brief SERCOM3 signal: PAD1 on PA17 mux D */

+#define MUX_PA17D_SERCOM3_PAD1             3

+#define PINMUX_PA17D_SERCOM3_PAD1  ((PIN_PA17D_SERCOM3_PAD1 << 16) | MUX_PA17D_SERCOM3_PAD1)

+#define PORT_PA17D_SERCOM3_PAD1    (1u << 17)

+#define PIN_PA23C_SERCOM3_PAD1            23  /**< \brief SERCOM3 signal: PAD1 on PA23 mux C */

+#define MUX_PA23C_SERCOM3_PAD1             2

+#define PINMUX_PA23C_SERCOM3_PAD1  ((PIN_PA23C_SERCOM3_PAD1 << 16) | MUX_PA23C_SERCOM3_PAD1)

+#define PORT_PA23C_SERCOM3_PAD1    (1u << 23)

+#define PIN_PA18D_SERCOM3_PAD2            18  /**< \brief SERCOM3 signal: PAD2 on PA18 mux D */

+#define MUX_PA18D_SERCOM3_PAD2             3

+#define PINMUX_PA18D_SERCOM3_PAD2  ((PIN_PA18D_SERCOM3_PAD2 << 16) | MUX_PA18D_SERCOM3_PAD2)

+#define PORT_PA18D_SERCOM3_PAD2    (1u << 18)

+#define PIN_PA20D_SERCOM3_PAD2            20  /**< \brief SERCOM3 signal: PAD2 on PA20 mux D */

+#define MUX_PA20D_SERCOM3_PAD2             3

+#define PINMUX_PA20D_SERCOM3_PAD2  ((PIN_PA20D_SERCOM3_PAD2 << 16) | MUX_PA20D_SERCOM3_PAD2)

+#define PORT_PA20D_SERCOM3_PAD2    (1u << 20)

+#define PIN_PA24C_SERCOM3_PAD2            24  /**< \brief SERCOM3 signal: PAD2 on PA24 mux C */

+#define MUX_PA24C_SERCOM3_PAD2             2

+#define PINMUX_PA24C_SERCOM3_PAD2  ((PIN_PA24C_SERCOM3_PAD2 << 16) | MUX_PA24C_SERCOM3_PAD2)

+#define PORT_PA24C_SERCOM3_PAD2    (1u << 24)

+#define PIN_PA19D_SERCOM3_PAD3            19  /**< \brief SERCOM3 signal: PAD3 on PA19 mux D */

+#define MUX_PA19D_SERCOM3_PAD3             3

+#define PINMUX_PA19D_SERCOM3_PAD3  ((PIN_PA19D_SERCOM3_PAD3 << 16) | MUX_PA19D_SERCOM3_PAD3)

+#define PORT_PA19D_SERCOM3_PAD3    (1u << 19)

+#define PIN_PA21D_SERCOM3_PAD3            21  /**< \brief SERCOM3 signal: PAD3 on PA21 mux D */

+#define MUX_PA21D_SERCOM3_PAD3             3

+#define PINMUX_PA21D_SERCOM3_PAD3  ((PIN_PA21D_SERCOM3_PAD3 << 16) | MUX_PA21D_SERCOM3_PAD3)

+#define PORT_PA21D_SERCOM3_PAD3    (1u << 21)

+#define PIN_PA25C_SERCOM3_PAD3            25  /**< \brief SERCOM3 signal: PAD3 on PA25 mux C */

+#define MUX_PA25C_SERCOM3_PAD3             2

+#define PINMUX_PA25C_SERCOM3_PAD3  ((PIN_PA25C_SERCOM3_PAD3 << 16) | MUX_PA25C_SERCOM3_PAD3)

+#define PORT_PA25C_SERCOM3_PAD3    (1u << 25)

+/* ========== PORT definition for SERCOM4 peripheral ========== */

+#define PIN_PA12D_SERCOM4_PAD0            12  /**< \brief SERCOM4 signal: PAD0 on PA12 mux D */

+#define MUX_PA12D_SERCOM4_PAD0             3

+#define PINMUX_PA12D_SERCOM4_PAD0  ((PIN_PA12D_SERCOM4_PAD0 << 16) | MUX_PA12D_SERCOM4_PAD0)

+#define PORT_PA12D_SERCOM4_PAD0    (1u << 12)

+#define PIN_PB08D_SERCOM4_PAD0            40  /**< \brief SERCOM4 signal: PAD0 on PB08 mux D */

+#define MUX_PB08D_SERCOM4_PAD0             3

+#define PINMUX_PB08D_SERCOM4_PAD0  ((PIN_PB08D_SERCOM4_PAD0 << 16) | MUX_PB08D_SERCOM4_PAD0)

+#define PORT_PB08D_SERCOM4_PAD0    (1u <<  8)

+#define PIN_PA13D_SERCOM4_PAD1            13  /**< \brief SERCOM4 signal: PAD1 on PA13 mux D */

+#define MUX_PA13D_SERCOM4_PAD1             3

+#define PINMUX_PA13D_SERCOM4_PAD1  ((PIN_PA13D_SERCOM4_PAD1 << 16) | MUX_PA13D_SERCOM4_PAD1)

+#define PORT_PA13D_SERCOM4_PAD1    (1u << 13)

+#define PIN_PB09D_SERCOM4_PAD1            41  /**< \brief SERCOM4 signal: PAD1 on PB09 mux D */

+#define MUX_PB09D_SERCOM4_PAD1             3

+#define PINMUX_PB09D_SERCOM4_PAD1  ((PIN_PB09D_SERCOM4_PAD1 << 16) | MUX_PB09D_SERCOM4_PAD1)

+#define PORT_PB09D_SERCOM4_PAD1    (1u <<  9)

+#define PIN_PA14D_SERCOM4_PAD2            14  /**< \brief SERCOM4 signal: PAD2 on PA14 mux D */

+#define MUX_PA14D_SERCOM4_PAD2             3

+#define PINMUX_PA14D_SERCOM4_PAD2  ((PIN_PA14D_SERCOM4_PAD2 << 16) | MUX_PA14D_SERCOM4_PAD2)

+#define PORT_PA14D_SERCOM4_PAD2    (1u << 14)

+#define PIN_PB10D_SERCOM4_PAD2            42  /**< \brief SERCOM4 signal: PAD2 on PB10 mux D */

+#define MUX_PB10D_SERCOM4_PAD2             3

+#define PINMUX_PB10D_SERCOM4_PAD2  ((PIN_PB10D_SERCOM4_PAD2 << 16) | MUX_PB10D_SERCOM4_PAD2)

+#define PORT_PB10D_SERCOM4_PAD2    (1u << 10)

+#define PIN_PA15D_SERCOM4_PAD3            15  /**< \brief SERCOM4 signal: PAD3 on PA15 mux D */

+#define MUX_PA15D_SERCOM4_PAD3             3

+#define PINMUX_PA15D_SERCOM4_PAD3  ((PIN_PA15D_SERCOM4_PAD3 << 16) | MUX_PA15D_SERCOM4_PAD3)

+#define PORT_PA15D_SERCOM4_PAD3    (1u << 15)

+#define PIN_PB11D_SERCOM4_PAD3            43  /**< \brief SERCOM4 signal: PAD3 on PB11 mux D */

+#define MUX_PB11D_SERCOM4_PAD3             3

+#define PINMUX_PB11D_SERCOM4_PAD3  ((PIN_PB11D_SERCOM4_PAD3 << 16) | MUX_PB11D_SERCOM4_PAD3)

+#define PORT_PB11D_SERCOM4_PAD3    (1u << 11)

+/* ========== PORT definition for SERCOM5 peripheral ========== */

+#define PIN_PA22D_SERCOM5_PAD0            22  /**< \brief SERCOM5 signal: PAD0 on PA22 mux D */

+#define MUX_PA22D_SERCOM5_PAD0             3

+#define PINMUX_PA22D_SERCOM5_PAD0  ((PIN_PA22D_SERCOM5_PAD0 << 16) | MUX_PA22D_SERCOM5_PAD0)

+#define PORT_PA22D_SERCOM5_PAD0    (1u << 22)

+#define PIN_PB02D_SERCOM5_PAD0            34  /**< \brief SERCOM5 signal: PAD0 on PB02 mux D */

+#define MUX_PB02D_SERCOM5_PAD0             3

+#define PINMUX_PB02D_SERCOM5_PAD0  ((PIN_PB02D_SERCOM5_PAD0 << 16) | MUX_PB02D_SERCOM5_PAD0)

+#define PORT_PB02D_SERCOM5_PAD0    (1u <<  2)

+#define PIN_PA23D_SERCOM5_PAD1            23  /**< \brief SERCOM5 signal: PAD1 on PA23 mux D */

+#define MUX_PA23D_SERCOM5_PAD1             3

+#define PINMUX_PA23D_SERCOM5_PAD1  ((PIN_PA23D_SERCOM5_PAD1 << 16) | MUX_PA23D_SERCOM5_PAD1)

+#define PORT_PA23D_SERCOM5_PAD1    (1u << 23)

+#define PIN_PB03D_SERCOM5_PAD1            35  /**< \brief SERCOM5 signal: PAD1 on PB03 mux D */

+#define MUX_PB03D_SERCOM5_PAD1             3

+#define PINMUX_PB03D_SERCOM5_PAD1  ((PIN_PB03D_SERCOM5_PAD1 << 16) | MUX_PB03D_SERCOM5_PAD1)

+#define PORT_PB03D_SERCOM5_PAD1    (1u <<  3)

+#define PIN_PA24D_SERCOM5_PAD2            24  /**< \brief SERCOM5 signal: PAD2 on PA24 mux D */

+#define MUX_PA24D_SERCOM5_PAD2             3

+#define PINMUX_PA24D_SERCOM5_PAD2  ((PIN_PA24D_SERCOM5_PAD2 << 16) | MUX_PA24D_SERCOM5_PAD2)

+#define PORT_PA24D_SERCOM5_PAD2    (1u << 24)

+#define PIN_PB22D_SERCOM5_PAD2            54  /**< \brief SERCOM5 signal: PAD2 on PB22 mux D */

+#define MUX_PB22D_SERCOM5_PAD2             3

+#define PINMUX_PB22D_SERCOM5_PAD2  ((PIN_PB22D_SERCOM5_PAD2 << 16) | MUX_PB22D_SERCOM5_PAD2)

+#define PORT_PB22D_SERCOM5_PAD2    (1u << 22)

+#define PIN_PA20C_SERCOM5_PAD2            20  /**< \brief SERCOM5 signal: PAD2 on PA20 mux C */

+#define MUX_PA20C_SERCOM5_PAD2             2

+#define PINMUX_PA20C_SERCOM5_PAD2  ((PIN_PA20C_SERCOM5_PAD2 << 16) | MUX_PA20C_SERCOM5_PAD2)

+#define PORT_PA20C_SERCOM5_PAD2    (1u << 20)

+#define PIN_PA25D_SERCOM5_PAD3            25  /**< \brief SERCOM5 signal: PAD3 on PA25 mux D */

+#define MUX_PA25D_SERCOM5_PAD3             3

+#define PINMUX_PA25D_SERCOM5_PAD3  ((PIN_PA25D_SERCOM5_PAD3 << 16) | MUX_PA25D_SERCOM5_PAD3)

+#define PORT_PA25D_SERCOM5_PAD3    (1u << 25)

+#define PIN_PB23D_SERCOM5_PAD3            55  /**< \brief SERCOM5 signal: PAD3 on PB23 mux D */

+#define MUX_PB23D_SERCOM5_PAD3             3

+#define PINMUX_PB23D_SERCOM5_PAD3  ((PIN_PB23D_SERCOM5_PAD3 << 16) | MUX_PB23D_SERCOM5_PAD3)

+#define PORT_PB23D_SERCOM5_PAD3    (1u << 23)

+#define PIN_PA21C_SERCOM5_PAD3            21  /**< \brief SERCOM5 signal: PAD3 on PA21 mux C */

+#define MUX_PA21C_SERCOM5_PAD3             2

+#define PINMUX_PA21C_SERCOM5_PAD3  ((PIN_PA21C_SERCOM5_PAD3 << 16) | MUX_PA21C_SERCOM5_PAD3)

+#define PORT_PA21C_SERCOM5_PAD3    (1u << 21)

+/* ========== PORT definition for TC0 peripheral ========== */

+#define PIN_PA04F_TC0_WO0                  4  /**< \brief TC0 signal: WO0 on PA04 mux F */

+#define MUX_PA04F_TC0_WO0                  5

+#define PINMUX_PA04F_TC0_WO0       ((PIN_PA04F_TC0_WO0 << 16) | MUX_PA04F_TC0_WO0)

+#define PORT_PA04F_TC0_WO0         (1u <<  4)

+#define PIN_PA08E_TC0_WO0                  8  /**< \brief TC0 signal: WO0 on PA08 mux E */

+#define MUX_PA08E_TC0_WO0                  4

+#define PINMUX_PA08E_TC0_WO0       ((PIN_PA08E_TC0_WO0 << 16) | MUX_PA08E_TC0_WO0)

+#define PORT_PA08E_TC0_WO0         (1u <<  8)

+#define PIN_PA05F_TC0_WO1                  5  /**< \brief TC0 signal: WO1 on PA05 mux F */

+#define MUX_PA05F_TC0_WO1                  5

+#define PINMUX_PA05F_TC0_WO1       ((PIN_PA05F_TC0_WO1 << 16) | MUX_PA05F_TC0_WO1)

+#define PORT_PA05F_TC0_WO1         (1u <<  5)

+#define PIN_PA09E_TC0_WO1                  9  /**< \brief TC0 signal: WO1 on PA09 mux E */

+#define MUX_PA09E_TC0_WO1                  4

+#define PINMUX_PA09E_TC0_WO1       ((PIN_PA09E_TC0_WO1 << 16) | MUX_PA09E_TC0_WO1)

+#define PORT_PA09E_TC0_WO1         (1u <<  9)

+/* ========== PORT definition for TC1 peripheral ========== */

+#define PIN_PA06F_TC1_WO0                  6  /**< \brief TC1 signal: WO0 on PA06 mux F */

+#define MUX_PA06F_TC1_WO0                  5

+#define PINMUX_PA06F_TC1_WO0       ((PIN_PA06F_TC1_WO0 << 16) | MUX_PA06F_TC1_WO0)

+#define PORT_PA06F_TC1_WO0         (1u <<  6)

+#define PIN_PA30F_TC1_WO0                 30  /**< \brief TC1 signal: WO0 on PA30 mux F */

+#define MUX_PA30F_TC1_WO0                  5

+#define PINMUX_PA30F_TC1_WO0       ((PIN_PA30F_TC1_WO0 << 16) | MUX_PA30F_TC1_WO0)

+#define PORT_PA30F_TC1_WO0         (1u << 30)

+#define PIN_PA10E_TC1_WO0                 10  /**< \brief TC1 signal: WO0 on PA10 mux E */

+#define MUX_PA10E_TC1_WO0                  4

+#define PINMUX_PA10E_TC1_WO0       ((PIN_PA10E_TC1_WO0 << 16) | MUX_PA10E_TC1_WO0)

+#define PORT_PA10E_TC1_WO0         (1u << 10)

+#define PIN_PA07F_TC1_WO1                  7  /**< \brief TC1 signal: WO1 on PA07 mux F */

+#define MUX_PA07F_TC1_WO1                  5

+#define PINMUX_PA07F_TC1_WO1       ((PIN_PA07F_TC1_WO1 << 16) | MUX_PA07F_TC1_WO1)

+#define PORT_PA07F_TC1_WO1         (1u <<  7)

+#define PIN_PA31F_TC1_WO1                 31  /**< \brief TC1 signal: WO1 on PA31 mux F */

+#define MUX_PA31F_TC1_WO1                  5

+#define PINMUX_PA31F_TC1_WO1       ((PIN_PA31F_TC1_WO1 << 16) | MUX_PA31F_TC1_WO1)

+#define PORT_PA31F_TC1_WO1         (1u << 31)

+#define PIN_PA11E_TC1_WO1                 11  /**< \brief TC1 signal: WO1 on PA11 mux E */

+#define MUX_PA11E_TC1_WO1                  4

+#define PINMUX_PA11E_TC1_WO1       ((PIN_PA11E_TC1_WO1 << 16) | MUX_PA11E_TC1_WO1)

+#define PORT_PA11E_TC1_WO1         (1u << 11)

+/* ========== PORT definition for TC2 peripheral ========== */

+#define PIN_PA16F_TC2_WO0                 16  /**< \brief TC2 signal: WO0 on PA16 mux F */

+#define MUX_PA16F_TC2_WO0                  5

+#define PINMUX_PA16F_TC2_WO0       ((PIN_PA16F_TC2_WO0 << 16) | MUX_PA16F_TC2_WO0)

+#define PORT_PA16F_TC2_WO0         (1u << 16)

+#define PIN_PA12E_TC2_WO0                 12  /**< \brief TC2 signal: WO0 on PA12 mux E */

+#define MUX_PA12E_TC2_WO0                  4

+#define PINMUX_PA12E_TC2_WO0       ((PIN_PA12E_TC2_WO0 << 16) | MUX_PA12E_TC2_WO0)

+#define PORT_PA12E_TC2_WO0         (1u << 12)

+#define PIN_PA00F_TC2_WO0                  0  /**< \brief TC2 signal: WO0 on PA00 mux F */

+#define MUX_PA00F_TC2_WO0                  5

+#define PINMUX_PA00F_TC2_WO0       ((PIN_PA00F_TC2_WO0 << 16) | MUX_PA00F_TC2_WO0)

+#define PORT_PA00F_TC2_WO0         (1u <<  0)

+#define PIN_PA17F_TC2_WO1                 17  /**< \brief TC2 signal: WO1 on PA17 mux F */

+#define MUX_PA17F_TC2_WO1                  5

+#define PINMUX_PA17F_TC2_WO1       ((PIN_PA17F_TC2_WO1 << 16) | MUX_PA17F_TC2_WO1)

+#define PORT_PA17F_TC2_WO1         (1u << 17)

+#define PIN_PA13E_TC2_WO1                 13  /**< \brief TC2 signal: WO1 on PA13 mux E */

+#define MUX_PA13E_TC2_WO1                  4

+#define PINMUX_PA13E_TC2_WO1       ((PIN_PA13E_TC2_WO1 << 16) | MUX_PA13E_TC2_WO1)

+#define PORT_PA13E_TC2_WO1         (1u << 13)

+#define PIN_PA01F_TC2_WO1                  1  /**< \brief TC2 signal: WO1 on PA01 mux F */

+#define MUX_PA01F_TC2_WO1                  5

+#define PINMUX_PA01F_TC2_WO1       ((PIN_PA01F_TC2_WO1 << 16) | MUX_PA01F_TC2_WO1)

+#define PORT_PA01F_TC2_WO1         (1u <<  1)

+/* ========== PORT definition for TC3 peripheral ========== */

+#define PIN_PA18F_TC3_WO0                 18  /**< \brief TC3 signal: WO0 on PA18 mux F */

+#define MUX_PA18F_TC3_WO0                  5

+#define PINMUX_PA18F_TC3_WO0       ((PIN_PA18F_TC3_WO0 << 16) | MUX_PA18F_TC3_WO0)

+#define PORT_PA18F_TC3_WO0         (1u << 18)

+#define PIN_PA14E_TC3_WO0                 14  /**< \brief TC3 signal: WO0 on PA14 mux E */

+#define MUX_PA14E_TC3_WO0                  4

+#define PINMUX_PA14E_TC3_WO0       ((PIN_PA14E_TC3_WO0 << 16) | MUX_PA14E_TC3_WO0)

+#define PORT_PA14E_TC3_WO0         (1u << 14)

+#define PIN_PA19F_TC3_WO1                 19  /**< \brief TC3 signal: WO1 on PA19 mux F */

+#define MUX_PA19F_TC3_WO1                  5

+#define PINMUX_PA19F_TC3_WO1       ((PIN_PA19F_TC3_WO1 << 16) | MUX_PA19F_TC3_WO1)

+#define PORT_PA19F_TC3_WO1         (1u << 19)

+#define PIN_PA15E_TC3_WO1                 15  /**< \brief TC3 signal: WO1 on PA15 mux E */

+#define MUX_PA15E_TC3_WO1                  4

+#define PINMUX_PA15E_TC3_WO1       ((PIN_PA15E_TC3_WO1 << 16) | MUX_PA15E_TC3_WO1)

+#define PORT_PA15E_TC3_WO1         (1u << 15)

+/* ========== PORT definition for TC4 peripheral ========== */

+#define PIN_PA22F_TC4_WO0                 22  /**< \brief TC4 signal: WO0 on PA22 mux F */

+#define MUX_PA22F_TC4_WO0                  5

+#define PINMUX_PA22F_TC4_WO0       ((PIN_PA22F_TC4_WO0 << 16) | MUX_PA22F_TC4_WO0)

+#define PORT_PA22F_TC4_WO0         (1u << 22)

+#define PIN_PB08F_TC4_WO0                 40  /**< \brief TC4 signal: WO0 on PB08 mux F */

+#define MUX_PB08F_TC4_WO0                  5

+#define PINMUX_PB08F_TC4_WO0       ((PIN_PB08F_TC4_WO0 << 16) | MUX_PB08F_TC4_WO0)

+#define PORT_PB08F_TC4_WO0         (1u <<  8)

+#define PIN_PA23F_TC4_WO1                 23  /**< \brief TC4 signal: WO1 on PA23 mux F */

+#define MUX_PA23F_TC4_WO1                  5

+#define PINMUX_PA23F_TC4_WO1       ((PIN_PA23F_TC4_WO1 << 16) | MUX_PA23F_TC4_WO1)

+#define PORT_PA23F_TC4_WO1         (1u << 23)

+#define PIN_PB09F_TC4_WO1                 41  /**< \brief TC4 signal: WO1 on PB09 mux F */

+#define MUX_PB09F_TC4_WO1                  5

+#define PINMUX_PB09F_TC4_WO1       ((PIN_PB09F_TC4_WO1 << 16) | MUX_PB09F_TC4_WO1)

+#define PORT_PB09F_TC4_WO1         (1u <<  9)

+/* ========== PORT definition for TC5 peripheral ========== */

+#define PIN_PA24F_TC5_WO0                 24  /**< \brief TC5 signal: WO0 on PA24 mux F */

+#define MUX_PA24F_TC5_WO0                  5

+#define PINMUX_PA24F_TC5_WO0       ((PIN_PA24F_TC5_WO0 << 16) | MUX_PA24F_TC5_WO0)

+#define PORT_PA24F_TC5_WO0         (1u << 24)

+#define PIN_PB10F_TC5_WO0                 42  /**< \brief TC5 signal: WO0 on PB10 mux F */

+#define MUX_PB10F_TC5_WO0                  5

+#define PINMUX_PB10F_TC5_WO0       ((PIN_PB10F_TC5_WO0 << 16) | MUX_PB10F_TC5_WO0)

+#define PORT_PB10F_TC5_WO0         (1u << 10)

+#define PIN_PA25F_TC5_WO1                 25  /**< \brief TC5 signal: WO1 on PA25 mux F */

+#define MUX_PA25F_TC5_WO1                  5

+#define PINMUX_PA25F_TC5_WO1       ((PIN_PA25F_TC5_WO1 << 16) | MUX_PA25F_TC5_WO1)

+#define PORT_PA25F_TC5_WO1         (1u << 25)

+#define PIN_PB11F_TC5_WO1                 43  /**< \brief TC5 signal: WO1 on PB11 mux F */

+#define MUX_PB11F_TC5_WO1                  5

+#define PINMUX_PB11F_TC5_WO1       ((PIN_PB11F_TC5_WO1 << 16) | MUX_PB11F_TC5_WO1)

+#define PORT_PB11F_TC5_WO1         (1u << 11)

+/* ========== PORT definition for TC6 peripheral ========== */

+#define PIN_PB02F_TC6_WO0                 34  /**< \brief TC6 signal: WO0 on PB02 mux F */

+#define MUX_PB02F_TC6_WO0                  5

+#define PINMUX_PB02F_TC6_WO0       ((PIN_PB02F_TC6_WO0 << 16) | MUX_PB02F_TC6_WO0)

+#define PORT_PB02F_TC6_WO0         (1u <<  2)

+#define PIN_PB03F_TC6_WO1                 35  /**< \brief TC6 signal: WO1 on PB03 mux F */

+#define MUX_PB03F_TC6_WO1                  5

+#define PINMUX_PB03F_TC6_WO1       ((PIN_PB03F_TC6_WO1 << 16) | MUX_PB03F_TC6_WO1)

+#define PORT_PB03F_TC6_WO1         (1u <<  3)

+/* ========== PORT definition for TC7 peripheral ========== */

+#define PIN_PB22F_TC7_WO0                 54  /**< \brief TC7 signal: WO0 on PB22 mux F */

+#define MUX_PB22F_TC7_WO0                  5

+#define PINMUX_PB22F_TC7_WO0       ((PIN_PB22F_TC7_WO0 << 16) | MUX_PB22F_TC7_WO0)

+#define PORT_PB22F_TC7_WO0         (1u << 22)

+#define PIN_PA20E_TC7_WO0                 20  /**< \brief TC7 signal: WO0 on PA20 mux E */

+#define MUX_PA20E_TC7_WO0                  4

+#define PINMUX_PA20E_TC7_WO0       ((PIN_PA20E_TC7_WO0 << 16) | MUX_PA20E_TC7_WO0)

+#define PORT_PA20E_TC7_WO0         (1u << 20)

+#define PIN_PB23F_TC7_WO1                 55  /**< \brief TC7 signal: WO1 on PB23 mux F */

+#define MUX_PB23F_TC7_WO1                  5

+#define PINMUX_PB23F_TC7_WO1       ((PIN_PB23F_TC7_WO1 << 16) | MUX_PB23F_TC7_WO1)

+#define PORT_PB23F_TC7_WO1         (1u << 23)

+#define PIN_PA21E_TC7_WO1                 21  /**< \brief TC7 signal: WO1 on PA21 mux E */

+#define MUX_PA21E_TC7_WO1                  4

+#define PINMUX_PA21E_TC7_WO1       ((PIN_PA21E_TC7_WO1 << 16) | MUX_PA21E_TC7_WO1)

+#define PORT_PA21E_TC7_WO1         (1u << 21)

+/* ========== PORT definition for ADC peripheral ========== */

+#define PIN_PA02B_ADC_AIN0                 2  /**< \brief ADC signal: AIN0 on PA02 mux B */

+#define MUX_PA02B_ADC_AIN0                 1

+#define PINMUX_PA02B_ADC_AIN0      ((PIN_PA02B_ADC_AIN0 << 16) | MUX_PA02B_ADC_AIN0)

+#define PORT_PA02B_ADC_AIN0        (1u <<  2)

+#define PIN_PA03B_ADC_AIN1                 3  /**< \brief ADC signal: AIN1 on PA03 mux B */

+#define MUX_PA03B_ADC_AIN1                 1

+#define PINMUX_PA03B_ADC_AIN1      ((PIN_PA03B_ADC_AIN1 << 16) | MUX_PA03B_ADC_AIN1)

+#define PORT_PA03B_ADC_AIN1        (1u <<  3)

+#define PIN_PB08B_ADC_AIN2                40  /**< \brief ADC signal: AIN2 on PB08 mux B */

+#define MUX_PB08B_ADC_AIN2                 1

+#define PINMUX_PB08B_ADC_AIN2      ((PIN_PB08B_ADC_AIN2 << 16) | MUX_PB08B_ADC_AIN2)

+#define PORT_PB08B_ADC_AIN2        (1u <<  8)

+#define PIN_PB09B_ADC_AIN3                41  /**< \brief ADC signal: AIN3 on PB09 mux B */

+#define MUX_PB09B_ADC_AIN3                 1

+#define PINMUX_PB09B_ADC_AIN3      ((PIN_PB09B_ADC_AIN3 << 16) | MUX_PB09B_ADC_AIN3)

+#define PORT_PB09B_ADC_AIN3        (1u <<  9)

+#define PIN_PA04B_ADC_AIN4                 4  /**< \brief ADC signal: AIN4 on PA04 mux B */

+#define MUX_PA04B_ADC_AIN4                 1

+#define PINMUX_PA04B_ADC_AIN4      ((PIN_PA04B_ADC_AIN4 << 16) | MUX_PA04B_ADC_AIN4)

+#define PORT_PA04B_ADC_AIN4        (1u <<  4)

+#define PIN_PA05B_ADC_AIN5                 5  /**< \brief ADC signal: AIN5 on PA05 mux B */

+#define MUX_PA05B_ADC_AIN5                 1

+#define PINMUX_PA05B_ADC_AIN5      ((PIN_PA05B_ADC_AIN5 << 16) | MUX_PA05B_ADC_AIN5)

+#define PORT_PA05B_ADC_AIN5        (1u <<  5)

+#define PIN_PA06B_ADC_AIN6                 6  /**< \brief ADC signal: AIN6 on PA06 mux B */

+#define MUX_PA06B_ADC_AIN6                 1

+#define PINMUX_PA06B_ADC_AIN6      ((PIN_PA06B_ADC_AIN6 << 16) | MUX_PA06B_ADC_AIN6)

+#define PORT_PA06B_ADC_AIN6        (1u <<  6)

+#define PIN_PA07B_ADC_AIN7                 7  /**< \brief ADC signal: AIN7 on PA07 mux B */

+#define MUX_PA07B_ADC_AIN7                 1

+#define PINMUX_PA07B_ADC_AIN7      ((PIN_PA07B_ADC_AIN7 << 16) | MUX_PA07B_ADC_AIN7)

+#define PORT_PA07B_ADC_AIN7        (1u <<  7)

+#define PIN_PB02B_ADC_AIN10               34  /**< \brief ADC signal: AIN10 on PB02 mux B */

+#define MUX_PB02B_ADC_AIN10                1

+#define PINMUX_PB02B_ADC_AIN10     ((PIN_PB02B_ADC_AIN10 << 16) | MUX_PB02B_ADC_AIN10)

+#define PORT_PB02B_ADC_AIN10       (1u <<  2)

+#define PIN_PB03B_ADC_AIN11               35  /**< \brief ADC signal: AIN11 on PB03 mux B */

+#define MUX_PB03B_ADC_AIN11                1

+#define PINMUX_PB03B_ADC_AIN11     ((PIN_PB03B_ADC_AIN11 << 16) | MUX_PB03B_ADC_AIN11)

+#define PORT_PB03B_ADC_AIN11       (1u <<  3)

+#define PIN_PA08B_ADC_AIN16                8  /**< \brief ADC signal: AIN16 on PA08 mux B */

+#define MUX_PA08B_ADC_AIN16                1

+#define PINMUX_PA08B_ADC_AIN16     ((PIN_PA08B_ADC_AIN16 << 16) | MUX_PA08B_ADC_AIN16)

+#define PORT_PA08B_ADC_AIN16       (1u <<  8)

+#define PIN_PA09B_ADC_AIN17                9  /**< \brief ADC signal: AIN17 on PA09 mux B */

+#define MUX_PA09B_ADC_AIN17                1

+#define PINMUX_PA09B_ADC_AIN17     ((PIN_PA09B_ADC_AIN17 << 16) | MUX_PA09B_ADC_AIN17)

+#define PORT_PA09B_ADC_AIN17       (1u <<  9)

+#define PIN_PA10B_ADC_AIN18               10  /**< \brief ADC signal: AIN18 on PA10 mux B */

+#define MUX_PA10B_ADC_AIN18                1

+#define PINMUX_PA10B_ADC_AIN18     ((PIN_PA10B_ADC_AIN18 << 16) | MUX_PA10B_ADC_AIN18)

+#define PORT_PA10B_ADC_AIN18       (1u << 10)

+#define PIN_PA11B_ADC_AIN19               11  /**< \brief ADC signal: AIN19 on PA11 mux B */

+#define MUX_PA11B_ADC_AIN19                1

+#define PINMUX_PA11B_ADC_AIN19     ((PIN_PA11B_ADC_AIN19 << 16) | MUX_PA11B_ADC_AIN19)

+#define PORT_PA11B_ADC_AIN19       (1u << 11)

+#define PIN_PA04B_ADC_VREFP                4  /**< \brief ADC signal: VREFP on PA04 mux B */

+#define MUX_PA04B_ADC_VREFP                1

+#define PINMUX_PA04B_ADC_VREFP     ((PIN_PA04B_ADC_VREFP << 16) | MUX_PA04B_ADC_VREFP)

+#define PORT_PA04B_ADC_VREFP       (1u <<  4)

+/* ========== PORT definition for AC peripheral ========== */

+#define PIN_PA04B_AC_AIN0                  4  /**< \brief AC signal: AIN0 on PA04 mux B */

+#define MUX_PA04B_AC_AIN0                  1

+#define PINMUX_PA04B_AC_AIN0       ((PIN_PA04B_AC_AIN0 << 16) | MUX_PA04B_AC_AIN0)

+#define PORT_PA04B_AC_AIN0         (1u <<  4)

+#define PIN_PA05B_AC_AIN1                  5  /**< \brief AC signal: AIN1 on PA05 mux B */

+#define MUX_PA05B_AC_AIN1                  1

+#define PINMUX_PA05B_AC_AIN1       ((PIN_PA05B_AC_AIN1 << 16) | MUX_PA05B_AC_AIN1)

+#define PORT_PA05B_AC_AIN1         (1u <<  5)

+#define PIN_PA06B_AC_AIN2                  6  /**< \brief AC signal: AIN2 on PA06 mux B */

+#define MUX_PA06B_AC_AIN2                  1

+#define PINMUX_PA06B_AC_AIN2       ((PIN_PA06B_AC_AIN2 << 16) | MUX_PA06B_AC_AIN2)

+#define PORT_PA06B_AC_AIN2         (1u <<  6)

+#define PIN_PA07B_AC_AIN3                  7  /**< \brief AC signal: AIN3 on PA07 mux B */

+#define MUX_PA07B_AC_AIN3                  1

+#define PINMUX_PA07B_AC_AIN3       ((PIN_PA07B_AC_AIN3 << 16) | MUX_PA07B_AC_AIN3)

+#define PORT_PA07B_AC_AIN3         (1u <<  7)

+#define PIN_PA12H_AC_CMP0                 12  /**< \brief AC signal: CMP0 on PA12 mux H */

+#define MUX_PA12H_AC_CMP0                  7

+#define PINMUX_PA12H_AC_CMP0       ((PIN_PA12H_AC_CMP0 << 16) | MUX_PA12H_AC_CMP0)

+#define PORT_PA12H_AC_CMP0         (1u << 12)

+#define PIN_PA18H_AC_CMP0                 18  /**< \brief AC signal: CMP0 on PA18 mux H */

+#define MUX_PA18H_AC_CMP0                  7

+#define PINMUX_PA18H_AC_CMP0       ((PIN_PA18H_AC_CMP0 << 16) | MUX_PA18H_AC_CMP0)

+#define PORT_PA18H_AC_CMP0         (1u << 18)

+#define PIN_PA13H_AC_CMP1                 13  /**< \brief AC signal: CMP1 on PA13 mux H */

+#define MUX_PA13H_AC_CMP1                  7

+#define PINMUX_PA13H_AC_CMP1       ((PIN_PA13H_AC_CMP1 << 16) | MUX_PA13H_AC_CMP1)

+#define PORT_PA13H_AC_CMP1         (1u << 13)

+#define PIN_PA19H_AC_CMP1                 19  /**< \brief AC signal: CMP1 on PA19 mux H */

+#define MUX_PA19H_AC_CMP1                  7

+#define PINMUX_PA19H_AC_CMP1       ((PIN_PA19H_AC_CMP1 << 16) | MUX_PA19H_AC_CMP1)

+#define PORT_PA19H_AC_CMP1         (1u << 19)

+/* ========== PORT definition for DAC peripheral ========== */

+#define PIN_PA02B_DAC_VOUT                 2  /**< \brief DAC signal: VOUT on PA02 mux B */

+#define MUX_PA02B_DAC_VOUT                 1

+#define PINMUX_PA02B_DAC_VOUT      ((PIN_PA02B_DAC_VOUT << 16) | MUX_PA02B_DAC_VOUT)

+#define PORT_PA02B_DAC_VOUT        (1u <<  2)

+#define PIN_PA03B_DAC_VREFP                3  /**< \brief DAC signal: VREFP on PA03 mux B */

+#define MUX_PA03B_DAC_VREFP                1

+#define PINMUX_PA03B_DAC_VREFP     ((PIN_PA03B_DAC_VREFP << 16) | MUX_PA03B_DAC_VREFP)

+#define PORT_PA03B_DAC_VREFP       (1u <<  3)

+

+#endif /* _SAMD20G15_PIO_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20g16.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20g16.h
new file mode 100644
index 0000000..f9ac39f
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20g16.h
@@ -0,0 +1,812 @@
+/**

+ * \file

+ *

+ * \brief Peripheral I/O description for SAMD20G16

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20G16_PIO_

+#define _SAMD20G16_PIO_

+

+#define PIN_PA00                           0  /**< \brief Pin Number for PA00 */

+#define PORT_PA00                  (1u <<  0) /**< \brief PORT Mask  for PA00 */

+#define PIN_PA01                           1  /**< \brief Pin Number for PA01 */

+#define PORT_PA01                  (1u <<  1) /**< \brief PORT Mask  for PA01 */

+#define PIN_PA02                           2  /**< \brief Pin Number for PA02 */

+#define PORT_PA02                  (1u <<  2) /**< \brief PORT Mask  for PA02 */

+#define PIN_PA03                           3  /**< \brief Pin Number for PA03 */

+#define PORT_PA03                  (1u <<  3) /**< \brief PORT Mask  for PA03 */

+#define PIN_PA04                           4  /**< \brief Pin Number for PA04 */

+#define PORT_PA04                  (1u <<  4) /**< \brief PORT Mask  for PA04 */

+#define PIN_PA05                           5  /**< \brief Pin Number for PA05 */

+#define PORT_PA05                  (1u <<  5) /**< \brief PORT Mask  for PA05 */

+#define PIN_PA06                           6  /**< \brief Pin Number for PA06 */

+#define PORT_PA06                  (1u <<  6) /**< \brief PORT Mask  for PA06 */

+#define PIN_PA07                           7  /**< \brief Pin Number for PA07 */

+#define PORT_PA07                  (1u <<  7) /**< \brief PORT Mask  for PA07 */

+#define PIN_PA08                           8  /**< \brief Pin Number for PA08 */

+#define PORT_PA08                  (1u <<  8) /**< \brief PORT Mask  for PA08 */

+#define PIN_PA09                           9  /**< \brief Pin Number for PA09 */

+#define PORT_PA09                  (1u <<  9) /**< \brief PORT Mask  for PA09 */

+#define PIN_PA10                          10  /**< \brief Pin Number for PA10 */

+#define PORT_PA10                  (1u << 10) /**< \brief PORT Mask  for PA10 */

+#define PIN_PA11                          11  /**< \brief Pin Number for PA11 */

+#define PORT_PA11                  (1u << 11) /**< \brief PORT Mask  for PA11 */

+#define PIN_PA12                          12  /**< \brief Pin Number for PA12 */

+#define PORT_PA12                  (1u << 12) /**< \brief PORT Mask  for PA12 */

+#define PIN_PA13                          13  /**< \brief Pin Number for PA13 */

+#define PORT_PA13                  (1u << 13) /**< \brief PORT Mask  for PA13 */

+#define PIN_PA14                          14  /**< \brief Pin Number for PA14 */

+#define PORT_PA14                  (1u << 14) /**< \brief PORT Mask  for PA14 */

+#define PIN_PA15                          15  /**< \brief Pin Number for PA15 */

+#define PORT_PA15                  (1u << 15) /**< \brief PORT Mask  for PA15 */

+#define PIN_PA16                          16  /**< \brief Pin Number for PA16 */

+#define PORT_PA16                  (1u << 16) /**< \brief PORT Mask  for PA16 */

+#define PIN_PA17                          17  /**< \brief Pin Number for PA17 */

+#define PORT_PA17                  (1u << 17) /**< \brief PORT Mask  for PA17 */

+#define PIN_PA18                          18  /**< \brief Pin Number for PA18 */

+#define PORT_PA18                  (1u << 18) /**< \brief PORT Mask  for PA18 */

+#define PIN_PA19                          19  /**< \brief Pin Number for PA19 */

+#define PORT_PA19                  (1u << 19) /**< \brief PORT Mask  for PA19 */

+#define PIN_PA20                          20  /**< \brief Pin Number for PA20 */

+#define PORT_PA20                  (1u << 20) /**< \brief PORT Mask  for PA20 */

+#define PIN_PA21                          21  /**< \brief Pin Number for PA21 */

+#define PORT_PA21                  (1u << 21) /**< \brief PORT Mask  for PA21 */

+#define PIN_PA22                          22  /**< \brief Pin Number for PA22 */

+#define PORT_PA22                  (1u << 22) /**< \brief PORT Mask  for PA22 */

+#define PIN_PA23                          23  /**< \brief Pin Number for PA23 */

+#define PORT_PA23                  (1u << 23) /**< \brief PORT Mask  for PA23 */

+#define PIN_PA24                          24  /**< \brief Pin Number for PA24 */

+#define PORT_PA24                  (1u << 24) /**< \brief PORT Mask  for PA24 */

+#define PIN_PA25                          25  /**< \brief Pin Number for PA25 */

+#define PORT_PA25                  (1u << 25) /**< \brief PORT Mask  for PA25 */

+#define PIN_PA27                          27  /**< \brief Pin Number for PA27 */

+#define PORT_PA27                  (1u << 27) /**< \brief PORT Mask  for PA27 */

+#define PIN_PA28                          28  /**< \brief Pin Number for PA28 */

+#define PORT_PA28                  (1u << 28) /**< \brief PORT Mask  for PA28 */

+#define PIN_PA30                          30  /**< \brief Pin Number for PA30 */

+#define PORT_PA30                  (1u << 30) /**< \brief PORT Mask  for PA30 */

+#define PIN_PA31                          31  /**< \brief Pin Number for PA31 */

+#define PORT_PA31                  (1u << 31) /**< \brief PORT Mask  for PA31 */

+#define PIN_PB02                          34  /**< \brief Pin Number for PB02 */

+#define PORT_PB02                  (1u <<  2) /**< \brief PORT Mask  for PB02 */

+#define PIN_PB03                          35  /**< \brief Pin Number for PB03 */

+#define PORT_PB03                  (1u <<  3) /**< \brief PORT Mask  for PB03 */

+#define PIN_PB08                          40  /**< \brief Pin Number for PB08 */

+#define PORT_PB08                  (1u <<  8) /**< \brief PORT Mask  for PB08 */

+#define PIN_PB09                          41  /**< \brief Pin Number for PB09 */

+#define PORT_PB09                  (1u <<  9) /**< \brief PORT Mask  for PB09 */

+#define PIN_PB10                          42  /**< \brief Pin Number for PB10 */

+#define PORT_PB10                  (1u << 10) /**< \brief PORT Mask  for PB10 */

+#define PIN_PB11                          43  /**< \brief Pin Number for PB11 */

+#define PORT_PB11                  (1u << 11) /**< \brief PORT Mask  for PB11 */

+#define PIN_PB22                          54  /**< \brief Pin Number for PB22 */

+#define PORT_PB22                  (1u << 22) /**< \brief PORT Mask  for PB22 */

+#define PIN_PB23                          55  /**< \brief Pin Number for PB23 */

+#define PORT_PB23                  (1u << 23) /**< \brief PORT Mask  for PB23 */

+/* ========== PORT definition for CORE peripheral ========== */

+#define PIN_PA30G_CORE_SWCLK              30  /**< \brief CORE signal: SWCLK on PA30 mux G */

+#define MUX_PA30G_CORE_SWCLK               6

+#define PINMUX_PA30G_CORE_SWCLK    ((PIN_PA30G_CORE_SWCLK << 16) | MUX_PA30G_CORE_SWCLK)

+#define PORT_PA30G_CORE_SWCLK      (1u << 30)

+/* ========== PORT definition for GCLK peripheral ========== */

+#define PIN_PB22H_GCLK_IO0                54  /**< \brief GCLK signal: IO0 on PB22 mux H */

+#define MUX_PB22H_GCLK_IO0                 7

+#define PINMUX_PB22H_GCLK_IO0      ((PIN_PB22H_GCLK_IO0 << 16) | MUX_PB22H_GCLK_IO0)

+#define PORT_PB22H_GCLK_IO0        (1u << 22)

+#define PIN_PA14H_GCLK_IO0                14  /**< \brief GCLK signal: IO0 on PA14 mux H */

+#define MUX_PA14H_GCLK_IO0                 7

+#define PINMUX_PA14H_GCLK_IO0      ((PIN_PA14H_GCLK_IO0 << 16) | MUX_PA14H_GCLK_IO0)

+#define PORT_PA14H_GCLK_IO0        (1u << 14)

+#define PIN_PA27H_GCLK_IO0                27  /**< \brief GCLK signal: IO0 on PA27 mux H */

+#define MUX_PA27H_GCLK_IO0                 7

+#define PINMUX_PA27H_GCLK_IO0      ((PIN_PA27H_GCLK_IO0 << 16) | MUX_PA27H_GCLK_IO0)

+#define PORT_PA27H_GCLK_IO0        (1u << 27)

+#define PIN_PA28H_GCLK_IO0                28  /**< \brief GCLK signal: IO0 on PA28 mux H */

+#define MUX_PA28H_GCLK_IO0                 7

+#define PINMUX_PA28H_GCLK_IO0      ((PIN_PA28H_GCLK_IO0 << 16) | MUX_PA28H_GCLK_IO0)

+#define PORT_PA28H_GCLK_IO0        (1u << 28)

+#define PIN_PA30H_GCLK_IO0                30  /**< \brief GCLK signal: IO0 on PA30 mux H */

+#define MUX_PA30H_GCLK_IO0                 7

+#define PINMUX_PA30H_GCLK_IO0      ((PIN_PA30H_GCLK_IO0 << 16) | MUX_PA30H_GCLK_IO0)

+#define PORT_PA30H_GCLK_IO0        (1u << 30)

+#define PIN_PB23H_GCLK_IO1                55  /**< \brief GCLK signal: IO1 on PB23 mux H */

+#define MUX_PB23H_GCLK_IO1                 7

+#define PINMUX_PB23H_GCLK_IO1      ((PIN_PB23H_GCLK_IO1 << 16) | MUX_PB23H_GCLK_IO1)

+#define PORT_PB23H_GCLK_IO1        (1u << 23)

+#define PIN_PA15H_GCLK_IO1                15  /**< \brief GCLK signal: IO1 on PA15 mux H */

+#define MUX_PA15H_GCLK_IO1                 7

+#define PINMUX_PA15H_GCLK_IO1      ((PIN_PA15H_GCLK_IO1 << 16) | MUX_PA15H_GCLK_IO1)

+#define PORT_PA15H_GCLK_IO1        (1u << 15)

+#define PIN_PA16H_GCLK_IO2                16  /**< \brief GCLK signal: IO2 on PA16 mux H */

+#define MUX_PA16H_GCLK_IO2                 7

+#define PINMUX_PA16H_GCLK_IO2      ((PIN_PA16H_GCLK_IO2 << 16) | MUX_PA16H_GCLK_IO2)

+#define PORT_PA16H_GCLK_IO2        (1u << 16)

+#define PIN_PA17H_GCLK_IO3                17  /**< \brief GCLK signal: IO3 on PA17 mux H */

+#define MUX_PA17H_GCLK_IO3                 7

+#define PINMUX_PA17H_GCLK_IO3      ((PIN_PA17H_GCLK_IO3 << 16) | MUX_PA17H_GCLK_IO3)

+#define PORT_PA17H_GCLK_IO3        (1u << 17)

+#define PIN_PA10H_GCLK_IO4                10  /**< \brief GCLK signal: IO4 on PA10 mux H */

+#define MUX_PA10H_GCLK_IO4                 7

+#define PINMUX_PA10H_GCLK_IO4      ((PIN_PA10H_GCLK_IO4 << 16) | MUX_PA10H_GCLK_IO4)

+#define PORT_PA10H_GCLK_IO4        (1u << 10)

+#define PIN_PA20H_GCLK_IO4                20  /**< \brief GCLK signal: IO4 on PA20 mux H */

+#define MUX_PA20H_GCLK_IO4                 7

+#define PINMUX_PA20H_GCLK_IO4      ((PIN_PA20H_GCLK_IO4 << 16) | MUX_PA20H_GCLK_IO4)

+#define PORT_PA20H_GCLK_IO4        (1u << 20)

+#define PIN_PB10H_GCLK_IO4                42  /**< \brief GCLK signal: IO4 on PB10 mux H */

+#define MUX_PB10H_GCLK_IO4                 7

+#define PINMUX_PB10H_GCLK_IO4      ((PIN_PB10H_GCLK_IO4 << 16) | MUX_PB10H_GCLK_IO4)

+#define PORT_PB10H_GCLK_IO4        (1u << 10)

+#define PIN_PA11H_GCLK_IO5                11  /**< \brief GCLK signal: IO5 on PA11 mux H */

+#define MUX_PA11H_GCLK_IO5                 7

+#define PINMUX_PA11H_GCLK_IO5      ((PIN_PA11H_GCLK_IO5 << 16) | MUX_PA11H_GCLK_IO5)

+#define PORT_PA11H_GCLK_IO5        (1u << 11)

+#define PIN_PA21H_GCLK_IO5                21  /**< \brief GCLK signal: IO5 on PA21 mux H */

+#define MUX_PA21H_GCLK_IO5                 7

+#define PINMUX_PA21H_GCLK_IO5      ((PIN_PA21H_GCLK_IO5 << 16) | MUX_PA21H_GCLK_IO5)

+#define PORT_PA21H_GCLK_IO5        (1u << 21)

+#define PIN_PB11H_GCLK_IO5                43  /**< \brief GCLK signal: IO5 on PB11 mux H */

+#define MUX_PB11H_GCLK_IO5                 7

+#define PINMUX_PB11H_GCLK_IO5      ((PIN_PB11H_GCLK_IO5 << 16) | MUX_PB11H_GCLK_IO5)

+#define PORT_PB11H_GCLK_IO5        (1u << 11)

+#define PIN_PA22H_GCLK_IO6                22  /**< \brief GCLK signal: IO6 on PA22 mux H */

+#define MUX_PA22H_GCLK_IO6                 7

+#define PINMUX_PA22H_GCLK_IO6      ((PIN_PA22H_GCLK_IO6 << 16) | MUX_PA22H_GCLK_IO6)

+#define PORT_PA22H_GCLK_IO6        (1u << 22)

+#define PIN_PA23H_GCLK_IO7                23  /**< \brief GCLK signal: IO7 on PA23 mux H */

+#define MUX_PA23H_GCLK_IO7                 7

+#define PINMUX_PA23H_GCLK_IO7      ((PIN_PA23H_GCLK_IO7 << 16) | MUX_PA23H_GCLK_IO7)

+#define PORT_PA23H_GCLK_IO7        (1u << 23)

+/* ========== PORT definition for EIC peripheral ========== */

+#define PIN_PA16A_EIC_EXTINT0             16  /**< \brief EIC signal: EXTINT0 on PA16 mux A */

+#define MUX_PA16A_EIC_EXTINT0              0

+#define PINMUX_PA16A_EIC_EXTINT0   ((PIN_PA16A_EIC_EXTINT0 << 16) | MUX_PA16A_EIC_EXTINT0)

+#define PORT_PA16A_EIC_EXTINT0     (1u << 16)

+#define PIN_PA00A_EIC_EXTINT0              0  /**< \brief EIC signal: EXTINT0 on PA00 mux A */

+#define MUX_PA00A_EIC_EXTINT0              0

+#define PINMUX_PA00A_EIC_EXTINT0   ((PIN_PA00A_EIC_EXTINT0 << 16) | MUX_PA00A_EIC_EXTINT0)

+#define PORT_PA00A_EIC_EXTINT0     (1u <<  0)

+#define PIN_PA17A_EIC_EXTINT1             17  /**< \brief EIC signal: EXTINT1 on PA17 mux A */

+#define MUX_PA17A_EIC_EXTINT1              0

+#define PINMUX_PA17A_EIC_EXTINT1   ((PIN_PA17A_EIC_EXTINT1 << 16) | MUX_PA17A_EIC_EXTINT1)

+#define PORT_PA17A_EIC_EXTINT1     (1u << 17)

+#define PIN_PA01A_EIC_EXTINT1              1  /**< \brief EIC signal: EXTINT1 on PA01 mux A */

+#define MUX_PA01A_EIC_EXTINT1              0

+#define PINMUX_PA01A_EIC_EXTINT1   ((PIN_PA01A_EIC_EXTINT1 << 16) | MUX_PA01A_EIC_EXTINT1)

+#define PORT_PA01A_EIC_EXTINT1     (1u <<  1)

+#define PIN_PA02A_EIC_EXTINT2              2  /**< \brief EIC signal: EXTINT2 on PA02 mux A */

+#define MUX_PA02A_EIC_EXTINT2              0

+#define PINMUX_PA02A_EIC_EXTINT2   ((PIN_PA02A_EIC_EXTINT2 << 16) | MUX_PA02A_EIC_EXTINT2)

+#define PORT_PA02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA18A_EIC_EXTINT2             18  /**< \brief EIC signal: EXTINT2 on PA18 mux A */

+#define MUX_PA18A_EIC_EXTINT2              0

+#define PINMUX_PA18A_EIC_EXTINT2   ((PIN_PA18A_EIC_EXTINT2 << 16) | MUX_PA18A_EIC_EXTINT2)

+#define PORT_PA18A_EIC_EXTINT2     (1u << 18)

+#define PIN_PB02A_EIC_EXTINT2             34  /**< \brief EIC signal: EXTINT2 on PB02 mux A */

+#define MUX_PB02A_EIC_EXTINT2              0

+#define PINMUX_PB02A_EIC_EXTINT2   ((PIN_PB02A_EIC_EXTINT2 << 16) | MUX_PB02A_EIC_EXTINT2)

+#define PORT_PB02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA03A_EIC_EXTINT3              3  /**< \brief EIC signal: EXTINT3 on PA03 mux A */

+#define MUX_PA03A_EIC_EXTINT3              0

+#define PINMUX_PA03A_EIC_EXTINT3   ((PIN_PA03A_EIC_EXTINT3 << 16) | MUX_PA03A_EIC_EXTINT3)

+#define PORT_PA03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA19A_EIC_EXTINT3             19  /**< \brief EIC signal: EXTINT3 on PA19 mux A */

+#define MUX_PA19A_EIC_EXTINT3              0

+#define PINMUX_PA19A_EIC_EXTINT3   ((PIN_PA19A_EIC_EXTINT3 << 16) | MUX_PA19A_EIC_EXTINT3)

+#define PORT_PA19A_EIC_EXTINT3     (1u << 19)

+#define PIN_PB03A_EIC_EXTINT3             35  /**< \brief EIC signal: EXTINT3 on PB03 mux A */

+#define MUX_PB03A_EIC_EXTINT3              0

+#define PINMUX_PB03A_EIC_EXTINT3   ((PIN_PB03A_EIC_EXTINT3 << 16) | MUX_PB03A_EIC_EXTINT3)

+#define PORT_PB03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA04A_EIC_EXTINT4              4  /**< \brief EIC signal: EXTINT4 on PA04 mux A */

+#define MUX_PA04A_EIC_EXTINT4              0

+#define PINMUX_PA04A_EIC_EXTINT4   ((PIN_PA04A_EIC_EXTINT4 << 16) | MUX_PA04A_EIC_EXTINT4)

+#define PORT_PA04A_EIC_EXTINT4     (1u <<  4)

+#define PIN_PA20A_EIC_EXTINT4             20  /**< \brief EIC signal: EXTINT4 on PA20 mux A */

+#define MUX_PA20A_EIC_EXTINT4              0

+#define PINMUX_PA20A_EIC_EXTINT4   ((PIN_PA20A_EIC_EXTINT4 << 16) | MUX_PA20A_EIC_EXTINT4)

+#define PORT_PA20A_EIC_EXTINT4     (1u << 20)

+#define PIN_PA05A_EIC_EXTINT5              5  /**< \brief EIC signal: EXTINT5 on PA05 mux A */

+#define MUX_PA05A_EIC_EXTINT5              0

+#define PINMUX_PA05A_EIC_EXTINT5   ((PIN_PA05A_EIC_EXTINT5 << 16) | MUX_PA05A_EIC_EXTINT5)

+#define PORT_PA05A_EIC_EXTINT5     (1u <<  5)

+#define PIN_PA21A_EIC_EXTINT5             21  /**< \brief EIC signal: EXTINT5 on PA21 mux A */

+#define MUX_PA21A_EIC_EXTINT5              0

+#define PINMUX_PA21A_EIC_EXTINT5   ((PIN_PA21A_EIC_EXTINT5 << 16) | MUX_PA21A_EIC_EXTINT5)

+#define PORT_PA21A_EIC_EXTINT5     (1u << 21)

+#define PIN_PA06A_EIC_EXTINT6              6  /**< \brief EIC signal: EXTINT6 on PA06 mux A */

+#define MUX_PA06A_EIC_EXTINT6              0

+#define PINMUX_PA06A_EIC_EXTINT6   ((PIN_PA06A_EIC_EXTINT6 << 16) | MUX_PA06A_EIC_EXTINT6)

+#define PORT_PA06A_EIC_EXTINT6     (1u <<  6)

+#define PIN_PA22A_EIC_EXTINT6             22  /**< \brief EIC signal: EXTINT6 on PA22 mux A */

+#define MUX_PA22A_EIC_EXTINT6              0

+#define PINMUX_PA22A_EIC_EXTINT6   ((PIN_PA22A_EIC_EXTINT6 << 16) | MUX_PA22A_EIC_EXTINT6)

+#define PORT_PA22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PB22A_EIC_EXTINT6             54  /**< \brief EIC signal: EXTINT6 on PB22 mux A */

+#define MUX_PB22A_EIC_EXTINT6              0

+#define PINMUX_PB22A_EIC_EXTINT6   ((PIN_PB22A_EIC_EXTINT6 << 16) | MUX_PB22A_EIC_EXTINT6)

+#define PORT_PB22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PA07A_EIC_EXTINT7              7  /**< \brief EIC signal: EXTINT7 on PA07 mux A */

+#define MUX_PA07A_EIC_EXTINT7              0

+#define PINMUX_PA07A_EIC_EXTINT7   ((PIN_PA07A_EIC_EXTINT7 << 16) | MUX_PA07A_EIC_EXTINT7)

+#define PORT_PA07A_EIC_EXTINT7     (1u <<  7)

+#define PIN_PA23A_EIC_EXTINT7             23  /**< \brief EIC signal: EXTINT7 on PA23 mux A */

+#define MUX_PA23A_EIC_EXTINT7              0

+#define PINMUX_PA23A_EIC_EXTINT7   ((PIN_PA23A_EIC_EXTINT7 << 16) | MUX_PA23A_EIC_EXTINT7)

+#define PORT_PA23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PB23A_EIC_EXTINT7             55  /**< \brief EIC signal: EXTINT7 on PB23 mux A */

+#define MUX_PB23A_EIC_EXTINT7              0

+#define PINMUX_PB23A_EIC_EXTINT7   ((PIN_PB23A_EIC_EXTINT7 << 16) | MUX_PB23A_EIC_EXTINT7)

+#define PORT_PB23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PA28A_EIC_EXTINT8             28  /**< \brief EIC signal: EXTINT8 on PA28 mux A */

+#define MUX_PA28A_EIC_EXTINT8              0

+#define PINMUX_PA28A_EIC_EXTINT8   ((PIN_PA28A_EIC_EXTINT8 << 16) | MUX_PA28A_EIC_EXTINT8)

+#define PORT_PA28A_EIC_EXTINT8     (1u << 28)

+#define PIN_PB08A_EIC_EXTINT8             40  /**< \brief EIC signal: EXTINT8 on PB08 mux A */

+#define MUX_PB08A_EIC_EXTINT8              0

+#define PINMUX_PB08A_EIC_EXTINT8   ((PIN_PB08A_EIC_EXTINT8 << 16) | MUX_PB08A_EIC_EXTINT8)

+#define PORT_PB08A_EIC_EXTINT8     (1u <<  8)

+#define PIN_PA09A_EIC_EXTINT9              9  /**< \brief EIC signal: EXTINT9 on PA09 mux A */

+#define MUX_PA09A_EIC_EXTINT9              0

+#define PINMUX_PA09A_EIC_EXTINT9   ((PIN_PA09A_EIC_EXTINT9 << 16) | MUX_PA09A_EIC_EXTINT9)

+#define PORT_PA09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PB09A_EIC_EXTINT9             41  /**< \brief EIC signal: EXTINT9 on PB09 mux A */

+#define MUX_PB09A_EIC_EXTINT9              0

+#define PINMUX_PB09A_EIC_EXTINT9   ((PIN_PB09A_EIC_EXTINT9 << 16) | MUX_PB09A_EIC_EXTINT9)

+#define PORT_PB09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PA10A_EIC_EXTINT10            10  /**< \brief EIC signal: EXTINT10 on PA10 mux A */

+#define MUX_PA10A_EIC_EXTINT10             0

+#define PINMUX_PA10A_EIC_EXTINT10  ((PIN_PA10A_EIC_EXTINT10 << 16) | MUX_PA10A_EIC_EXTINT10)

+#define PORT_PA10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA30A_EIC_EXTINT10            30  /**< \brief EIC signal: EXTINT10 on PA30 mux A */

+#define MUX_PA30A_EIC_EXTINT10             0

+#define PINMUX_PA30A_EIC_EXTINT10  ((PIN_PA30A_EIC_EXTINT10 << 16) | MUX_PA30A_EIC_EXTINT10)

+#define PORT_PA30A_EIC_EXTINT10    (1u << 30)

+#define PIN_PB10A_EIC_EXTINT10            42  /**< \brief EIC signal: EXTINT10 on PB10 mux A */

+#define MUX_PB10A_EIC_EXTINT10             0

+#define PINMUX_PB10A_EIC_EXTINT10  ((PIN_PB10A_EIC_EXTINT10 << 16) | MUX_PB10A_EIC_EXTINT10)

+#define PORT_PB10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA11A_EIC_EXTINT11            11  /**< \brief EIC signal: EXTINT11 on PA11 mux A */

+#define MUX_PA11A_EIC_EXTINT11             0

+#define PINMUX_PA11A_EIC_EXTINT11  ((PIN_PA11A_EIC_EXTINT11 << 16) | MUX_PA11A_EIC_EXTINT11)

+#define PORT_PA11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA31A_EIC_EXTINT11            31  /**< \brief EIC signal: EXTINT11 on PA31 mux A */

+#define MUX_PA31A_EIC_EXTINT11             0

+#define PINMUX_PA31A_EIC_EXTINT11  ((PIN_PA31A_EIC_EXTINT11 << 16) | MUX_PA31A_EIC_EXTINT11)

+#define PORT_PA31A_EIC_EXTINT11    (1u << 31)

+#define PIN_PB11A_EIC_EXTINT11            43  /**< \brief EIC signal: EXTINT11 on PB11 mux A */

+#define MUX_PB11A_EIC_EXTINT11             0

+#define PINMUX_PB11A_EIC_EXTINT11  ((PIN_PB11A_EIC_EXTINT11 << 16) | MUX_PB11A_EIC_EXTINT11)

+#define PORT_PB11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA12A_EIC_EXTINT12            12  /**< \brief EIC signal: EXTINT12 on PA12 mux A */

+#define MUX_PA12A_EIC_EXTINT12             0

+#define PINMUX_PA12A_EIC_EXTINT12  ((PIN_PA12A_EIC_EXTINT12 << 16) | MUX_PA12A_EIC_EXTINT12)

+#define PORT_PA12A_EIC_EXTINT12    (1u << 12)

+#define PIN_PA24A_EIC_EXTINT12            24  /**< \brief EIC signal: EXTINT12 on PA24 mux A */

+#define MUX_PA24A_EIC_EXTINT12             0

+#define PINMUX_PA24A_EIC_EXTINT12  ((PIN_PA24A_EIC_EXTINT12 << 16) | MUX_PA24A_EIC_EXTINT12)

+#define PORT_PA24A_EIC_EXTINT12    (1u << 24)

+#define PIN_PA13A_EIC_EXTINT13            13  /**< \brief EIC signal: EXTINT13 on PA13 mux A */

+#define MUX_PA13A_EIC_EXTINT13             0

+#define PINMUX_PA13A_EIC_EXTINT13  ((PIN_PA13A_EIC_EXTINT13 << 16) | MUX_PA13A_EIC_EXTINT13)

+#define PORT_PA13A_EIC_EXTINT13    (1u << 13)

+#define PIN_PA25A_EIC_EXTINT13            25  /**< \brief EIC signal: EXTINT13 on PA25 mux A */

+#define MUX_PA25A_EIC_EXTINT13             0

+#define PINMUX_PA25A_EIC_EXTINT13  ((PIN_PA25A_EIC_EXTINT13 << 16) | MUX_PA25A_EIC_EXTINT13)

+#define PORT_PA25A_EIC_EXTINT13    (1u << 25)

+#define PIN_PA14A_EIC_EXTINT14            14  /**< \brief EIC signal: EXTINT14 on PA14 mux A */

+#define MUX_PA14A_EIC_EXTINT14             0

+#define PINMUX_PA14A_EIC_EXTINT14  ((PIN_PA14A_EIC_EXTINT14 << 16) | MUX_PA14A_EIC_EXTINT14)

+#define PORT_PA14A_EIC_EXTINT14    (1u << 14)

+#define PIN_PA27A_EIC_EXTINT15            27  /**< \brief EIC signal: EXTINT15 on PA27 mux A */

+#define MUX_PA27A_EIC_EXTINT15             0

+#define PINMUX_PA27A_EIC_EXTINT15  ((PIN_PA27A_EIC_EXTINT15 << 16) | MUX_PA27A_EIC_EXTINT15)

+#define PORT_PA27A_EIC_EXTINT15    (1u << 27)

+#define PIN_PA15A_EIC_EXTINT15            15  /**< \brief EIC signal: EXTINT15 on PA15 mux A */

+#define MUX_PA15A_EIC_EXTINT15             0

+#define PINMUX_PA15A_EIC_EXTINT15  ((PIN_PA15A_EIC_EXTINT15 << 16) | MUX_PA15A_EIC_EXTINT15)

+#define PORT_PA15A_EIC_EXTINT15    (1u << 15)

+#define PIN_PA08A_EIC_NMI                  8  /**< \brief EIC signal: NMI on PA08 mux A */

+#define MUX_PA08A_EIC_NMI                  0

+#define PINMUX_PA08A_EIC_NMI       ((PIN_PA08A_EIC_NMI << 16) | MUX_PA08A_EIC_NMI)

+#define PORT_PA08A_EIC_NMI         (1u <<  8)

+/* ========== PORT definition for SERCOM0 peripheral ========== */

+#define PIN_PA04D_SERCOM0_PAD0             4  /**< \brief SERCOM0 signal: PAD0 on PA04 mux D */

+#define MUX_PA04D_SERCOM0_PAD0             3

+#define PINMUX_PA04D_SERCOM0_PAD0  ((PIN_PA04D_SERCOM0_PAD0 << 16) | MUX_PA04D_SERCOM0_PAD0)

+#define PORT_PA04D_SERCOM0_PAD0    (1u <<  4)

+#define PIN_PA08C_SERCOM0_PAD0             8  /**< \brief SERCOM0 signal: PAD0 on PA08 mux C */

+#define MUX_PA08C_SERCOM0_PAD0             2

+#define PINMUX_PA08C_SERCOM0_PAD0  ((PIN_PA08C_SERCOM0_PAD0 << 16) | MUX_PA08C_SERCOM0_PAD0)

+#define PORT_PA08C_SERCOM0_PAD0    (1u <<  8)

+#define PIN_PA05D_SERCOM0_PAD1             5  /**< \brief SERCOM0 signal: PAD1 on PA05 mux D */

+#define MUX_PA05D_SERCOM0_PAD1             3

+#define PINMUX_PA05D_SERCOM0_PAD1  ((PIN_PA05D_SERCOM0_PAD1 << 16) | MUX_PA05D_SERCOM0_PAD1)

+#define PORT_PA05D_SERCOM0_PAD1    (1u <<  5)

+#define PIN_PA09C_SERCOM0_PAD1             9  /**< \brief SERCOM0 signal: PAD1 on PA09 mux C */

+#define MUX_PA09C_SERCOM0_PAD1             2

+#define PINMUX_PA09C_SERCOM0_PAD1  ((PIN_PA09C_SERCOM0_PAD1 << 16) | MUX_PA09C_SERCOM0_PAD1)

+#define PORT_PA09C_SERCOM0_PAD1    (1u <<  9)

+#define PIN_PA06D_SERCOM0_PAD2             6  /**< \brief SERCOM0 signal: PAD2 on PA06 mux D */

+#define MUX_PA06D_SERCOM0_PAD2             3

+#define PINMUX_PA06D_SERCOM0_PAD2  ((PIN_PA06D_SERCOM0_PAD2 << 16) | MUX_PA06D_SERCOM0_PAD2)

+#define PORT_PA06D_SERCOM0_PAD2    (1u <<  6)

+#define PIN_PA10C_SERCOM0_PAD2            10  /**< \brief SERCOM0 signal: PAD2 on PA10 mux C */

+#define MUX_PA10C_SERCOM0_PAD2             2

+#define PINMUX_PA10C_SERCOM0_PAD2  ((PIN_PA10C_SERCOM0_PAD2 << 16) | MUX_PA10C_SERCOM0_PAD2)

+#define PORT_PA10C_SERCOM0_PAD2    (1u << 10)

+#define PIN_PA07D_SERCOM0_PAD3             7  /**< \brief SERCOM0 signal: PAD3 on PA07 mux D */

+#define MUX_PA07D_SERCOM0_PAD3             3

+#define PINMUX_PA07D_SERCOM0_PAD3  ((PIN_PA07D_SERCOM0_PAD3 << 16) | MUX_PA07D_SERCOM0_PAD3)

+#define PORT_PA07D_SERCOM0_PAD3    (1u <<  7)

+#define PIN_PA11C_SERCOM0_PAD3            11  /**< \brief SERCOM0 signal: PAD3 on PA11 mux C */

+#define MUX_PA11C_SERCOM0_PAD3             2

+#define PINMUX_PA11C_SERCOM0_PAD3  ((PIN_PA11C_SERCOM0_PAD3 << 16) | MUX_PA11C_SERCOM0_PAD3)

+#define PORT_PA11C_SERCOM0_PAD3    (1u << 11)

+/* ========== PORT definition for SERCOM1 peripheral ========== */

+#define PIN_PA16C_SERCOM1_PAD0            16  /**< \brief SERCOM1 signal: PAD0 on PA16 mux C */

+#define MUX_PA16C_SERCOM1_PAD0             2

+#define PINMUX_PA16C_SERCOM1_PAD0  ((PIN_PA16C_SERCOM1_PAD0 << 16) | MUX_PA16C_SERCOM1_PAD0)

+#define PORT_PA16C_SERCOM1_PAD0    (1u << 16)

+#define PIN_PA00D_SERCOM1_PAD0             0  /**< \brief SERCOM1 signal: PAD0 on PA00 mux D */

+#define MUX_PA00D_SERCOM1_PAD0             3

+#define PINMUX_PA00D_SERCOM1_PAD0  ((PIN_PA00D_SERCOM1_PAD0 << 16) | MUX_PA00D_SERCOM1_PAD0)

+#define PORT_PA00D_SERCOM1_PAD0    (1u <<  0)

+#define PIN_PA17C_SERCOM1_PAD1            17  /**< \brief SERCOM1 signal: PAD1 on PA17 mux C */

+#define MUX_PA17C_SERCOM1_PAD1             2

+#define PINMUX_PA17C_SERCOM1_PAD1  ((PIN_PA17C_SERCOM1_PAD1 << 16) | MUX_PA17C_SERCOM1_PAD1)

+#define PORT_PA17C_SERCOM1_PAD1    (1u << 17)

+#define PIN_PA01D_SERCOM1_PAD1             1  /**< \brief SERCOM1 signal: PAD1 on PA01 mux D */

+#define MUX_PA01D_SERCOM1_PAD1             3

+#define PINMUX_PA01D_SERCOM1_PAD1  ((PIN_PA01D_SERCOM1_PAD1 << 16) | MUX_PA01D_SERCOM1_PAD1)

+#define PORT_PA01D_SERCOM1_PAD1    (1u <<  1)

+#define PIN_PA30D_SERCOM1_PAD2            30  /**< \brief SERCOM1 signal: PAD2 on PA30 mux D */

+#define MUX_PA30D_SERCOM1_PAD2             3

+#define PINMUX_PA30D_SERCOM1_PAD2  ((PIN_PA30D_SERCOM1_PAD2 << 16) | MUX_PA30D_SERCOM1_PAD2)

+#define PORT_PA30D_SERCOM1_PAD2    (1u << 30)

+#define PIN_PA18C_SERCOM1_PAD2            18  /**< \brief SERCOM1 signal: PAD2 on PA18 mux C */

+#define MUX_PA18C_SERCOM1_PAD2             2

+#define PINMUX_PA18C_SERCOM1_PAD2  ((PIN_PA18C_SERCOM1_PAD2 << 16) | MUX_PA18C_SERCOM1_PAD2)

+#define PORT_PA18C_SERCOM1_PAD2    (1u << 18)

+#define PIN_PA31D_SERCOM1_PAD3            31  /**< \brief SERCOM1 signal: PAD3 on PA31 mux D */

+#define MUX_PA31D_SERCOM1_PAD3             3

+#define PINMUX_PA31D_SERCOM1_PAD3  ((PIN_PA31D_SERCOM1_PAD3 << 16) | MUX_PA31D_SERCOM1_PAD3)

+#define PORT_PA31D_SERCOM1_PAD3    (1u << 31)

+#define PIN_PA19C_SERCOM1_PAD3            19  /**< \brief SERCOM1 signal: PAD3 on PA19 mux C */

+#define MUX_PA19C_SERCOM1_PAD3             2

+#define PINMUX_PA19C_SERCOM1_PAD3  ((PIN_PA19C_SERCOM1_PAD3 << 16) | MUX_PA19C_SERCOM1_PAD3)

+#define PORT_PA19C_SERCOM1_PAD3    (1u << 19)

+/* ========== PORT definition for SERCOM2 peripheral ========== */

+#define PIN_PA08D_SERCOM2_PAD0             8  /**< \brief SERCOM2 signal: PAD0 on PA08 mux D */

+#define MUX_PA08D_SERCOM2_PAD0             3

+#define PINMUX_PA08D_SERCOM2_PAD0  ((PIN_PA08D_SERCOM2_PAD0 << 16) | MUX_PA08D_SERCOM2_PAD0)

+#define PORT_PA08D_SERCOM2_PAD0    (1u <<  8)

+#define PIN_PA12C_SERCOM2_PAD0            12  /**< \brief SERCOM2 signal: PAD0 on PA12 mux C */

+#define MUX_PA12C_SERCOM2_PAD0             2

+#define PINMUX_PA12C_SERCOM2_PAD0  ((PIN_PA12C_SERCOM2_PAD0 << 16) | MUX_PA12C_SERCOM2_PAD0)

+#define PORT_PA12C_SERCOM2_PAD0    (1u << 12)

+#define PIN_PA09D_SERCOM2_PAD1             9  /**< \brief SERCOM2 signal: PAD1 on PA09 mux D */

+#define MUX_PA09D_SERCOM2_PAD1             3

+#define PINMUX_PA09D_SERCOM2_PAD1  ((PIN_PA09D_SERCOM2_PAD1 << 16) | MUX_PA09D_SERCOM2_PAD1)

+#define PORT_PA09D_SERCOM2_PAD1    (1u <<  9)

+#define PIN_PA13C_SERCOM2_PAD1            13  /**< \brief SERCOM2 signal: PAD1 on PA13 mux C */

+#define MUX_PA13C_SERCOM2_PAD1             2

+#define PINMUX_PA13C_SERCOM2_PAD1  ((PIN_PA13C_SERCOM2_PAD1 << 16) | MUX_PA13C_SERCOM2_PAD1)

+#define PORT_PA13C_SERCOM2_PAD1    (1u << 13)

+#define PIN_PA10D_SERCOM2_PAD2            10  /**< \brief SERCOM2 signal: PAD2 on PA10 mux D */

+#define MUX_PA10D_SERCOM2_PAD2             3

+#define PINMUX_PA10D_SERCOM2_PAD2  ((PIN_PA10D_SERCOM2_PAD2 << 16) | MUX_PA10D_SERCOM2_PAD2)

+#define PORT_PA10D_SERCOM2_PAD2    (1u << 10)

+#define PIN_PA14C_SERCOM2_PAD2            14  /**< \brief SERCOM2 signal: PAD2 on PA14 mux C */

+#define MUX_PA14C_SERCOM2_PAD2             2

+#define PINMUX_PA14C_SERCOM2_PAD2  ((PIN_PA14C_SERCOM2_PAD2 << 16) | MUX_PA14C_SERCOM2_PAD2)

+#define PORT_PA14C_SERCOM2_PAD2    (1u << 14)

+#define PIN_PA11D_SERCOM2_PAD3            11  /**< \brief SERCOM2 signal: PAD3 on PA11 mux D */

+#define MUX_PA11D_SERCOM2_PAD3             3

+#define PINMUX_PA11D_SERCOM2_PAD3  ((PIN_PA11D_SERCOM2_PAD3 << 16) | MUX_PA11D_SERCOM2_PAD3)

+#define PORT_PA11D_SERCOM2_PAD3    (1u << 11)

+#define PIN_PA15C_SERCOM2_PAD3            15  /**< \brief SERCOM2 signal: PAD3 on PA15 mux C */

+#define MUX_PA15C_SERCOM2_PAD3             2

+#define PINMUX_PA15C_SERCOM2_PAD3  ((PIN_PA15C_SERCOM2_PAD3 << 16) | MUX_PA15C_SERCOM2_PAD3)

+#define PORT_PA15C_SERCOM2_PAD3    (1u << 15)

+/* ========== PORT definition for SERCOM3 peripheral ========== */

+#define PIN_PA16D_SERCOM3_PAD0            16  /**< \brief SERCOM3 signal: PAD0 on PA16 mux D */

+#define MUX_PA16D_SERCOM3_PAD0             3

+#define PINMUX_PA16D_SERCOM3_PAD0  ((PIN_PA16D_SERCOM3_PAD0 << 16) | MUX_PA16D_SERCOM3_PAD0)

+#define PORT_PA16D_SERCOM3_PAD0    (1u << 16)

+#define PIN_PA22C_SERCOM3_PAD0            22  /**< \brief SERCOM3 signal: PAD0 on PA22 mux C */

+#define MUX_PA22C_SERCOM3_PAD0             2

+#define PINMUX_PA22C_SERCOM3_PAD0  ((PIN_PA22C_SERCOM3_PAD0 << 16) | MUX_PA22C_SERCOM3_PAD0)

+#define PORT_PA22C_SERCOM3_PAD0    (1u << 22)

+#define PIN_PA17D_SERCOM3_PAD1            17  /**< \brief SERCOM3 signal: PAD1 on PA17 mux D */

+#define MUX_PA17D_SERCOM3_PAD1             3

+#define PINMUX_PA17D_SERCOM3_PAD1  ((PIN_PA17D_SERCOM3_PAD1 << 16) | MUX_PA17D_SERCOM3_PAD1)

+#define PORT_PA17D_SERCOM3_PAD1    (1u << 17)

+#define PIN_PA23C_SERCOM3_PAD1            23  /**< \brief SERCOM3 signal: PAD1 on PA23 mux C */

+#define MUX_PA23C_SERCOM3_PAD1             2

+#define PINMUX_PA23C_SERCOM3_PAD1  ((PIN_PA23C_SERCOM3_PAD1 << 16) | MUX_PA23C_SERCOM3_PAD1)

+#define PORT_PA23C_SERCOM3_PAD1    (1u << 23)

+#define PIN_PA18D_SERCOM3_PAD2            18  /**< \brief SERCOM3 signal: PAD2 on PA18 mux D */

+#define MUX_PA18D_SERCOM3_PAD2             3

+#define PINMUX_PA18D_SERCOM3_PAD2  ((PIN_PA18D_SERCOM3_PAD2 << 16) | MUX_PA18D_SERCOM3_PAD2)

+#define PORT_PA18D_SERCOM3_PAD2    (1u << 18)

+#define PIN_PA20D_SERCOM3_PAD2            20  /**< \brief SERCOM3 signal: PAD2 on PA20 mux D */

+#define MUX_PA20D_SERCOM3_PAD2             3

+#define PINMUX_PA20D_SERCOM3_PAD2  ((PIN_PA20D_SERCOM3_PAD2 << 16) | MUX_PA20D_SERCOM3_PAD2)

+#define PORT_PA20D_SERCOM3_PAD2    (1u << 20)

+#define PIN_PA24C_SERCOM3_PAD2            24  /**< \brief SERCOM3 signal: PAD2 on PA24 mux C */

+#define MUX_PA24C_SERCOM3_PAD2             2

+#define PINMUX_PA24C_SERCOM3_PAD2  ((PIN_PA24C_SERCOM3_PAD2 << 16) | MUX_PA24C_SERCOM3_PAD2)

+#define PORT_PA24C_SERCOM3_PAD2    (1u << 24)

+#define PIN_PA19D_SERCOM3_PAD3            19  /**< \brief SERCOM3 signal: PAD3 on PA19 mux D */

+#define MUX_PA19D_SERCOM3_PAD3             3

+#define PINMUX_PA19D_SERCOM3_PAD3  ((PIN_PA19D_SERCOM3_PAD3 << 16) | MUX_PA19D_SERCOM3_PAD3)

+#define PORT_PA19D_SERCOM3_PAD3    (1u << 19)

+#define PIN_PA21D_SERCOM3_PAD3            21  /**< \brief SERCOM3 signal: PAD3 on PA21 mux D */

+#define MUX_PA21D_SERCOM3_PAD3             3

+#define PINMUX_PA21D_SERCOM3_PAD3  ((PIN_PA21D_SERCOM3_PAD3 << 16) | MUX_PA21D_SERCOM3_PAD3)

+#define PORT_PA21D_SERCOM3_PAD3    (1u << 21)

+#define PIN_PA25C_SERCOM3_PAD3            25  /**< \brief SERCOM3 signal: PAD3 on PA25 mux C */

+#define MUX_PA25C_SERCOM3_PAD3             2

+#define PINMUX_PA25C_SERCOM3_PAD3  ((PIN_PA25C_SERCOM3_PAD3 << 16) | MUX_PA25C_SERCOM3_PAD3)

+#define PORT_PA25C_SERCOM3_PAD3    (1u << 25)

+/* ========== PORT definition for SERCOM4 peripheral ========== */

+#define PIN_PA12D_SERCOM4_PAD0            12  /**< \brief SERCOM4 signal: PAD0 on PA12 mux D */

+#define MUX_PA12D_SERCOM4_PAD0             3

+#define PINMUX_PA12D_SERCOM4_PAD0  ((PIN_PA12D_SERCOM4_PAD0 << 16) | MUX_PA12D_SERCOM4_PAD0)

+#define PORT_PA12D_SERCOM4_PAD0    (1u << 12)

+#define PIN_PB08D_SERCOM4_PAD0            40  /**< \brief SERCOM4 signal: PAD0 on PB08 mux D */

+#define MUX_PB08D_SERCOM4_PAD0             3

+#define PINMUX_PB08D_SERCOM4_PAD0  ((PIN_PB08D_SERCOM4_PAD0 << 16) | MUX_PB08D_SERCOM4_PAD0)

+#define PORT_PB08D_SERCOM4_PAD0    (1u <<  8)

+#define PIN_PA13D_SERCOM4_PAD1            13  /**< \brief SERCOM4 signal: PAD1 on PA13 mux D */

+#define MUX_PA13D_SERCOM4_PAD1             3

+#define PINMUX_PA13D_SERCOM4_PAD1  ((PIN_PA13D_SERCOM4_PAD1 << 16) | MUX_PA13D_SERCOM4_PAD1)

+#define PORT_PA13D_SERCOM4_PAD1    (1u << 13)

+#define PIN_PB09D_SERCOM4_PAD1            41  /**< \brief SERCOM4 signal: PAD1 on PB09 mux D */

+#define MUX_PB09D_SERCOM4_PAD1             3

+#define PINMUX_PB09D_SERCOM4_PAD1  ((PIN_PB09D_SERCOM4_PAD1 << 16) | MUX_PB09D_SERCOM4_PAD1)

+#define PORT_PB09D_SERCOM4_PAD1    (1u <<  9)

+#define PIN_PA14D_SERCOM4_PAD2            14  /**< \brief SERCOM4 signal: PAD2 on PA14 mux D */

+#define MUX_PA14D_SERCOM4_PAD2             3

+#define PINMUX_PA14D_SERCOM4_PAD2  ((PIN_PA14D_SERCOM4_PAD2 << 16) | MUX_PA14D_SERCOM4_PAD2)

+#define PORT_PA14D_SERCOM4_PAD2    (1u << 14)

+#define PIN_PB10D_SERCOM4_PAD2            42  /**< \brief SERCOM4 signal: PAD2 on PB10 mux D */

+#define MUX_PB10D_SERCOM4_PAD2             3

+#define PINMUX_PB10D_SERCOM4_PAD2  ((PIN_PB10D_SERCOM4_PAD2 << 16) | MUX_PB10D_SERCOM4_PAD2)

+#define PORT_PB10D_SERCOM4_PAD2    (1u << 10)

+#define PIN_PA15D_SERCOM4_PAD3            15  /**< \brief SERCOM4 signal: PAD3 on PA15 mux D */

+#define MUX_PA15D_SERCOM4_PAD3             3

+#define PINMUX_PA15D_SERCOM4_PAD3  ((PIN_PA15D_SERCOM4_PAD3 << 16) | MUX_PA15D_SERCOM4_PAD3)

+#define PORT_PA15D_SERCOM4_PAD3    (1u << 15)

+#define PIN_PB11D_SERCOM4_PAD3            43  /**< \brief SERCOM4 signal: PAD3 on PB11 mux D */

+#define MUX_PB11D_SERCOM4_PAD3             3

+#define PINMUX_PB11D_SERCOM4_PAD3  ((PIN_PB11D_SERCOM4_PAD3 << 16) | MUX_PB11D_SERCOM4_PAD3)

+#define PORT_PB11D_SERCOM4_PAD3    (1u << 11)

+/* ========== PORT definition for SERCOM5 peripheral ========== */

+#define PIN_PA22D_SERCOM5_PAD0            22  /**< \brief SERCOM5 signal: PAD0 on PA22 mux D */

+#define MUX_PA22D_SERCOM5_PAD0             3

+#define PINMUX_PA22D_SERCOM5_PAD0  ((PIN_PA22D_SERCOM5_PAD0 << 16) | MUX_PA22D_SERCOM5_PAD0)

+#define PORT_PA22D_SERCOM5_PAD0    (1u << 22)

+#define PIN_PB02D_SERCOM5_PAD0            34  /**< \brief SERCOM5 signal: PAD0 on PB02 mux D */

+#define MUX_PB02D_SERCOM5_PAD0             3

+#define PINMUX_PB02D_SERCOM5_PAD0  ((PIN_PB02D_SERCOM5_PAD0 << 16) | MUX_PB02D_SERCOM5_PAD0)

+#define PORT_PB02D_SERCOM5_PAD0    (1u <<  2)

+#define PIN_PA23D_SERCOM5_PAD1            23  /**< \brief SERCOM5 signal: PAD1 on PA23 mux D */

+#define MUX_PA23D_SERCOM5_PAD1             3

+#define PINMUX_PA23D_SERCOM5_PAD1  ((PIN_PA23D_SERCOM5_PAD1 << 16) | MUX_PA23D_SERCOM5_PAD1)

+#define PORT_PA23D_SERCOM5_PAD1    (1u << 23)

+#define PIN_PB03D_SERCOM5_PAD1            35  /**< \brief SERCOM5 signal: PAD1 on PB03 mux D */

+#define MUX_PB03D_SERCOM5_PAD1             3

+#define PINMUX_PB03D_SERCOM5_PAD1  ((PIN_PB03D_SERCOM5_PAD1 << 16) | MUX_PB03D_SERCOM5_PAD1)

+#define PORT_PB03D_SERCOM5_PAD1    (1u <<  3)

+#define PIN_PA24D_SERCOM5_PAD2            24  /**< \brief SERCOM5 signal: PAD2 on PA24 mux D */

+#define MUX_PA24D_SERCOM5_PAD2             3

+#define PINMUX_PA24D_SERCOM5_PAD2  ((PIN_PA24D_SERCOM5_PAD2 << 16) | MUX_PA24D_SERCOM5_PAD2)

+#define PORT_PA24D_SERCOM5_PAD2    (1u << 24)

+#define PIN_PB22D_SERCOM5_PAD2            54  /**< \brief SERCOM5 signal: PAD2 on PB22 mux D */

+#define MUX_PB22D_SERCOM5_PAD2             3

+#define PINMUX_PB22D_SERCOM5_PAD2  ((PIN_PB22D_SERCOM5_PAD2 << 16) | MUX_PB22D_SERCOM5_PAD2)

+#define PORT_PB22D_SERCOM5_PAD2    (1u << 22)

+#define PIN_PA20C_SERCOM5_PAD2            20  /**< \brief SERCOM5 signal: PAD2 on PA20 mux C */

+#define MUX_PA20C_SERCOM5_PAD2             2

+#define PINMUX_PA20C_SERCOM5_PAD2  ((PIN_PA20C_SERCOM5_PAD2 << 16) | MUX_PA20C_SERCOM5_PAD2)

+#define PORT_PA20C_SERCOM5_PAD2    (1u << 20)

+#define PIN_PA25D_SERCOM5_PAD3            25  /**< \brief SERCOM5 signal: PAD3 on PA25 mux D */

+#define MUX_PA25D_SERCOM5_PAD3             3

+#define PINMUX_PA25D_SERCOM5_PAD3  ((PIN_PA25D_SERCOM5_PAD3 << 16) | MUX_PA25D_SERCOM5_PAD3)

+#define PORT_PA25D_SERCOM5_PAD3    (1u << 25)

+#define PIN_PB23D_SERCOM5_PAD3            55  /**< \brief SERCOM5 signal: PAD3 on PB23 mux D */

+#define MUX_PB23D_SERCOM5_PAD3             3

+#define PINMUX_PB23D_SERCOM5_PAD3  ((PIN_PB23D_SERCOM5_PAD3 << 16) | MUX_PB23D_SERCOM5_PAD3)

+#define PORT_PB23D_SERCOM5_PAD3    (1u << 23)

+#define PIN_PA21C_SERCOM5_PAD3            21  /**< \brief SERCOM5 signal: PAD3 on PA21 mux C */

+#define MUX_PA21C_SERCOM5_PAD3             2

+#define PINMUX_PA21C_SERCOM5_PAD3  ((PIN_PA21C_SERCOM5_PAD3 << 16) | MUX_PA21C_SERCOM5_PAD3)

+#define PORT_PA21C_SERCOM5_PAD3    (1u << 21)

+/* ========== PORT definition for TC0 peripheral ========== */

+#define PIN_PA04F_TC0_WO0                  4  /**< \brief TC0 signal: WO0 on PA04 mux F */

+#define MUX_PA04F_TC0_WO0                  5

+#define PINMUX_PA04F_TC0_WO0       ((PIN_PA04F_TC0_WO0 << 16) | MUX_PA04F_TC0_WO0)

+#define PORT_PA04F_TC0_WO0         (1u <<  4)

+#define PIN_PA08E_TC0_WO0                  8  /**< \brief TC0 signal: WO0 on PA08 mux E */

+#define MUX_PA08E_TC0_WO0                  4

+#define PINMUX_PA08E_TC0_WO0       ((PIN_PA08E_TC0_WO0 << 16) | MUX_PA08E_TC0_WO0)

+#define PORT_PA08E_TC0_WO0         (1u <<  8)

+#define PIN_PA05F_TC0_WO1                  5  /**< \brief TC0 signal: WO1 on PA05 mux F */

+#define MUX_PA05F_TC0_WO1                  5

+#define PINMUX_PA05F_TC0_WO1       ((PIN_PA05F_TC0_WO1 << 16) | MUX_PA05F_TC0_WO1)

+#define PORT_PA05F_TC0_WO1         (1u <<  5)

+#define PIN_PA09E_TC0_WO1                  9  /**< \brief TC0 signal: WO1 on PA09 mux E */

+#define MUX_PA09E_TC0_WO1                  4

+#define PINMUX_PA09E_TC0_WO1       ((PIN_PA09E_TC0_WO1 << 16) | MUX_PA09E_TC0_WO1)

+#define PORT_PA09E_TC0_WO1         (1u <<  9)

+/* ========== PORT definition for TC1 peripheral ========== */

+#define PIN_PA06F_TC1_WO0                  6  /**< \brief TC1 signal: WO0 on PA06 mux F */

+#define MUX_PA06F_TC1_WO0                  5

+#define PINMUX_PA06F_TC1_WO0       ((PIN_PA06F_TC1_WO0 << 16) | MUX_PA06F_TC1_WO0)

+#define PORT_PA06F_TC1_WO0         (1u <<  6)

+#define PIN_PA30F_TC1_WO0                 30  /**< \brief TC1 signal: WO0 on PA30 mux F */

+#define MUX_PA30F_TC1_WO0                  5

+#define PINMUX_PA30F_TC1_WO0       ((PIN_PA30F_TC1_WO0 << 16) | MUX_PA30F_TC1_WO0)

+#define PORT_PA30F_TC1_WO0         (1u << 30)

+#define PIN_PA10E_TC1_WO0                 10  /**< \brief TC1 signal: WO0 on PA10 mux E */

+#define MUX_PA10E_TC1_WO0                  4

+#define PINMUX_PA10E_TC1_WO0       ((PIN_PA10E_TC1_WO0 << 16) | MUX_PA10E_TC1_WO0)

+#define PORT_PA10E_TC1_WO0         (1u << 10)

+#define PIN_PA07F_TC1_WO1                  7  /**< \brief TC1 signal: WO1 on PA07 mux F */

+#define MUX_PA07F_TC1_WO1                  5

+#define PINMUX_PA07F_TC1_WO1       ((PIN_PA07F_TC1_WO1 << 16) | MUX_PA07F_TC1_WO1)

+#define PORT_PA07F_TC1_WO1         (1u <<  7)

+#define PIN_PA31F_TC1_WO1                 31  /**< \brief TC1 signal: WO1 on PA31 mux F */

+#define MUX_PA31F_TC1_WO1                  5

+#define PINMUX_PA31F_TC1_WO1       ((PIN_PA31F_TC1_WO1 << 16) | MUX_PA31F_TC1_WO1)

+#define PORT_PA31F_TC1_WO1         (1u << 31)

+#define PIN_PA11E_TC1_WO1                 11  /**< \brief TC1 signal: WO1 on PA11 mux E */

+#define MUX_PA11E_TC1_WO1                  4

+#define PINMUX_PA11E_TC1_WO1       ((PIN_PA11E_TC1_WO1 << 16) | MUX_PA11E_TC1_WO1)

+#define PORT_PA11E_TC1_WO1         (1u << 11)

+/* ========== PORT definition for TC2 peripheral ========== */

+#define PIN_PA16F_TC2_WO0                 16  /**< \brief TC2 signal: WO0 on PA16 mux F */

+#define MUX_PA16F_TC2_WO0                  5

+#define PINMUX_PA16F_TC2_WO0       ((PIN_PA16F_TC2_WO0 << 16) | MUX_PA16F_TC2_WO0)

+#define PORT_PA16F_TC2_WO0         (1u << 16)

+#define PIN_PA12E_TC2_WO0                 12  /**< \brief TC2 signal: WO0 on PA12 mux E */

+#define MUX_PA12E_TC2_WO0                  4

+#define PINMUX_PA12E_TC2_WO0       ((PIN_PA12E_TC2_WO0 << 16) | MUX_PA12E_TC2_WO0)

+#define PORT_PA12E_TC2_WO0         (1u << 12)

+#define PIN_PA00F_TC2_WO0                  0  /**< \brief TC2 signal: WO0 on PA00 mux F */

+#define MUX_PA00F_TC2_WO0                  5

+#define PINMUX_PA00F_TC2_WO0       ((PIN_PA00F_TC2_WO0 << 16) | MUX_PA00F_TC2_WO0)

+#define PORT_PA00F_TC2_WO0         (1u <<  0)

+#define PIN_PA17F_TC2_WO1                 17  /**< \brief TC2 signal: WO1 on PA17 mux F */

+#define MUX_PA17F_TC2_WO1                  5

+#define PINMUX_PA17F_TC2_WO1       ((PIN_PA17F_TC2_WO1 << 16) | MUX_PA17F_TC2_WO1)

+#define PORT_PA17F_TC2_WO1         (1u << 17)

+#define PIN_PA13E_TC2_WO1                 13  /**< \brief TC2 signal: WO1 on PA13 mux E */

+#define MUX_PA13E_TC2_WO1                  4

+#define PINMUX_PA13E_TC2_WO1       ((PIN_PA13E_TC2_WO1 << 16) | MUX_PA13E_TC2_WO1)

+#define PORT_PA13E_TC2_WO1         (1u << 13)

+#define PIN_PA01F_TC2_WO1                  1  /**< \brief TC2 signal: WO1 on PA01 mux F */

+#define MUX_PA01F_TC2_WO1                  5

+#define PINMUX_PA01F_TC2_WO1       ((PIN_PA01F_TC2_WO1 << 16) | MUX_PA01F_TC2_WO1)

+#define PORT_PA01F_TC2_WO1         (1u <<  1)

+/* ========== PORT definition for TC3 peripheral ========== */

+#define PIN_PA18F_TC3_WO0                 18  /**< \brief TC3 signal: WO0 on PA18 mux F */

+#define MUX_PA18F_TC3_WO0                  5

+#define PINMUX_PA18F_TC3_WO0       ((PIN_PA18F_TC3_WO0 << 16) | MUX_PA18F_TC3_WO0)

+#define PORT_PA18F_TC3_WO0         (1u << 18)

+#define PIN_PA14E_TC3_WO0                 14  /**< \brief TC3 signal: WO0 on PA14 mux E */

+#define MUX_PA14E_TC3_WO0                  4

+#define PINMUX_PA14E_TC3_WO0       ((PIN_PA14E_TC3_WO0 << 16) | MUX_PA14E_TC3_WO0)

+#define PORT_PA14E_TC3_WO0         (1u << 14)

+#define PIN_PA19F_TC3_WO1                 19  /**< \brief TC3 signal: WO1 on PA19 mux F */

+#define MUX_PA19F_TC3_WO1                  5

+#define PINMUX_PA19F_TC3_WO1       ((PIN_PA19F_TC3_WO1 << 16) | MUX_PA19F_TC3_WO1)

+#define PORT_PA19F_TC3_WO1         (1u << 19)

+#define PIN_PA15E_TC3_WO1                 15  /**< \brief TC3 signal: WO1 on PA15 mux E */

+#define MUX_PA15E_TC3_WO1                  4

+#define PINMUX_PA15E_TC3_WO1       ((PIN_PA15E_TC3_WO1 << 16) | MUX_PA15E_TC3_WO1)

+#define PORT_PA15E_TC3_WO1         (1u << 15)

+/* ========== PORT definition for TC4 peripheral ========== */

+#define PIN_PA22F_TC4_WO0                 22  /**< \brief TC4 signal: WO0 on PA22 mux F */

+#define MUX_PA22F_TC4_WO0                  5

+#define PINMUX_PA22F_TC4_WO0       ((PIN_PA22F_TC4_WO0 << 16) | MUX_PA22F_TC4_WO0)

+#define PORT_PA22F_TC4_WO0         (1u << 22)

+#define PIN_PB08F_TC4_WO0                 40  /**< \brief TC4 signal: WO0 on PB08 mux F */

+#define MUX_PB08F_TC4_WO0                  5

+#define PINMUX_PB08F_TC4_WO0       ((PIN_PB08F_TC4_WO0 << 16) | MUX_PB08F_TC4_WO0)

+#define PORT_PB08F_TC4_WO0         (1u <<  8)

+#define PIN_PA23F_TC4_WO1                 23  /**< \brief TC4 signal: WO1 on PA23 mux F */

+#define MUX_PA23F_TC4_WO1                  5

+#define PINMUX_PA23F_TC4_WO1       ((PIN_PA23F_TC4_WO1 << 16) | MUX_PA23F_TC4_WO1)

+#define PORT_PA23F_TC4_WO1         (1u << 23)

+#define PIN_PB09F_TC4_WO1                 41  /**< \brief TC4 signal: WO1 on PB09 mux F */

+#define MUX_PB09F_TC4_WO1                  5

+#define PINMUX_PB09F_TC4_WO1       ((PIN_PB09F_TC4_WO1 << 16) | MUX_PB09F_TC4_WO1)

+#define PORT_PB09F_TC4_WO1         (1u <<  9)

+/* ========== PORT definition for TC5 peripheral ========== */

+#define PIN_PA24F_TC5_WO0                 24  /**< \brief TC5 signal: WO0 on PA24 mux F */

+#define MUX_PA24F_TC5_WO0                  5

+#define PINMUX_PA24F_TC5_WO0       ((PIN_PA24F_TC5_WO0 << 16) | MUX_PA24F_TC5_WO0)

+#define PORT_PA24F_TC5_WO0         (1u << 24)

+#define PIN_PB10F_TC5_WO0                 42  /**< \brief TC5 signal: WO0 on PB10 mux F */

+#define MUX_PB10F_TC5_WO0                  5

+#define PINMUX_PB10F_TC5_WO0       ((PIN_PB10F_TC5_WO0 << 16) | MUX_PB10F_TC5_WO0)

+#define PORT_PB10F_TC5_WO0         (1u << 10)

+#define PIN_PA25F_TC5_WO1                 25  /**< \brief TC5 signal: WO1 on PA25 mux F */

+#define MUX_PA25F_TC5_WO1                  5

+#define PINMUX_PA25F_TC5_WO1       ((PIN_PA25F_TC5_WO1 << 16) | MUX_PA25F_TC5_WO1)

+#define PORT_PA25F_TC5_WO1         (1u << 25)

+#define PIN_PB11F_TC5_WO1                 43  /**< \brief TC5 signal: WO1 on PB11 mux F */

+#define MUX_PB11F_TC5_WO1                  5

+#define PINMUX_PB11F_TC5_WO1       ((PIN_PB11F_TC5_WO1 << 16) | MUX_PB11F_TC5_WO1)

+#define PORT_PB11F_TC5_WO1         (1u << 11)

+/* ========== PORT definition for TC6 peripheral ========== */

+#define PIN_PB02F_TC6_WO0                 34  /**< \brief TC6 signal: WO0 on PB02 mux F */

+#define MUX_PB02F_TC6_WO0                  5

+#define PINMUX_PB02F_TC6_WO0       ((PIN_PB02F_TC6_WO0 << 16) | MUX_PB02F_TC6_WO0)

+#define PORT_PB02F_TC6_WO0         (1u <<  2)

+#define PIN_PB03F_TC6_WO1                 35  /**< \brief TC6 signal: WO1 on PB03 mux F */

+#define MUX_PB03F_TC6_WO1                  5

+#define PINMUX_PB03F_TC6_WO1       ((PIN_PB03F_TC6_WO1 << 16) | MUX_PB03F_TC6_WO1)

+#define PORT_PB03F_TC6_WO1         (1u <<  3)

+/* ========== PORT definition for TC7 peripheral ========== */

+#define PIN_PB22F_TC7_WO0                 54  /**< \brief TC7 signal: WO0 on PB22 mux F */

+#define MUX_PB22F_TC7_WO0                  5

+#define PINMUX_PB22F_TC7_WO0       ((PIN_PB22F_TC7_WO0 << 16) | MUX_PB22F_TC7_WO0)

+#define PORT_PB22F_TC7_WO0         (1u << 22)

+#define PIN_PA20E_TC7_WO0                 20  /**< \brief TC7 signal: WO0 on PA20 mux E */

+#define MUX_PA20E_TC7_WO0                  4

+#define PINMUX_PA20E_TC7_WO0       ((PIN_PA20E_TC7_WO0 << 16) | MUX_PA20E_TC7_WO0)

+#define PORT_PA20E_TC7_WO0         (1u << 20)

+#define PIN_PB23F_TC7_WO1                 55  /**< \brief TC7 signal: WO1 on PB23 mux F */

+#define MUX_PB23F_TC7_WO1                  5

+#define PINMUX_PB23F_TC7_WO1       ((PIN_PB23F_TC7_WO1 << 16) | MUX_PB23F_TC7_WO1)

+#define PORT_PB23F_TC7_WO1         (1u << 23)

+#define PIN_PA21E_TC7_WO1                 21  /**< \brief TC7 signal: WO1 on PA21 mux E */

+#define MUX_PA21E_TC7_WO1                  4

+#define PINMUX_PA21E_TC7_WO1       ((PIN_PA21E_TC7_WO1 << 16) | MUX_PA21E_TC7_WO1)

+#define PORT_PA21E_TC7_WO1         (1u << 21)

+/* ========== PORT definition for ADC peripheral ========== */

+#define PIN_PA02B_ADC_AIN0                 2  /**< \brief ADC signal: AIN0 on PA02 mux B */

+#define MUX_PA02B_ADC_AIN0                 1

+#define PINMUX_PA02B_ADC_AIN0      ((PIN_PA02B_ADC_AIN0 << 16) | MUX_PA02B_ADC_AIN0)

+#define PORT_PA02B_ADC_AIN0        (1u <<  2)

+#define PIN_PA03B_ADC_AIN1                 3  /**< \brief ADC signal: AIN1 on PA03 mux B */

+#define MUX_PA03B_ADC_AIN1                 1

+#define PINMUX_PA03B_ADC_AIN1      ((PIN_PA03B_ADC_AIN1 << 16) | MUX_PA03B_ADC_AIN1)

+#define PORT_PA03B_ADC_AIN1        (1u <<  3)

+#define PIN_PB08B_ADC_AIN2                40  /**< \brief ADC signal: AIN2 on PB08 mux B */

+#define MUX_PB08B_ADC_AIN2                 1

+#define PINMUX_PB08B_ADC_AIN2      ((PIN_PB08B_ADC_AIN2 << 16) | MUX_PB08B_ADC_AIN2)

+#define PORT_PB08B_ADC_AIN2        (1u <<  8)

+#define PIN_PB09B_ADC_AIN3                41  /**< \brief ADC signal: AIN3 on PB09 mux B */

+#define MUX_PB09B_ADC_AIN3                 1

+#define PINMUX_PB09B_ADC_AIN3      ((PIN_PB09B_ADC_AIN3 << 16) | MUX_PB09B_ADC_AIN3)

+#define PORT_PB09B_ADC_AIN3        (1u <<  9)

+#define PIN_PA04B_ADC_AIN4                 4  /**< \brief ADC signal: AIN4 on PA04 mux B */

+#define MUX_PA04B_ADC_AIN4                 1

+#define PINMUX_PA04B_ADC_AIN4      ((PIN_PA04B_ADC_AIN4 << 16) | MUX_PA04B_ADC_AIN4)

+#define PORT_PA04B_ADC_AIN4        (1u <<  4)

+#define PIN_PA05B_ADC_AIN5                 5  /**< \brief ADC signal: AIN5 on PA05 mux B */

+#define MUX_PA05B_ADC_AIN5                 1

+#define PINMUX_PA05B_ADC_AIN5      ((PIN_PA05B_ADC_AIN5 << 16) | MUX_PA05B_ADC_AIN5)

+#define PORT_PA05B_ADC_AIN5        (1u <<  5)

+#define PIN_PA06B_ADC_AIN6                 6  /**< \brief ADC signal: AIN6 on PA06 mux B */

+#define MUX_PA06B_ADC_AIN6                 1

+#define PINMUX_PA06B_ADC_AIN6      ((PIN_PA06B_ADC_AIN6 << 16) | MUX_PA06B_ADC_AIN6)

+#define PORT_PA06B_ADC_AIN6        (1u <<  6)

+#define PIN_PA07B_ADC_AIN7                 7  /**< \brief ADC signal: AIN7 on PA07 mux B */

+#define MUX_PA07B_ADC_AIN7                 1

+#define PINMUX_PA07B_ADC_AIN7      ((PIN_PA07B_ADC_AIN7 << 16) | MUX_PA07B_ADC_AIN7)

+#define PORT_PA07B_ADC_AIN7        (1u <<  7)

+#define PIN_PB02B_ADC_AIN10               34  /**< \brief ADC signal: AIN10 on PB02 mux B */

+#define MUX_PB02B_ADC_AIN10                1

+#define PINMUX_PB02B_ADC_AIN10     ((PIN_PB02B_ADC_AIN10 << 16) | MUX_PB02B_ADC_AIN10)

+#define PORT_PB02B_ADC_AIN10       (1u <<  2)

+#define PIN_PB03B_ADC_AIN11               35  /**< \brief ADC signal: AIN11 on PB03 mux B */

+#define MUX_PB03B_ADC_AIN11                1

+#define PINMUX_PB03B_ADC_AIN11     ((PIN_PB03B_ADC_AIN11 << 16) | MUX_PB03B_ADC_AIN11)

+#define PORT_PB03B_ADC_AIN11       (1u <<  3)

+#define PIN_PA08B_ADC_AIN16                8  /**< \brief ADC signal: AIN16 on PA08 mux B */

+#define MUX_PA08B_ADC_AIN16                1

+#define PINMUX_PA08B_ADC_AIN16     ((PIN_PA08B_ADC_AIN16 << 16) | MUX_PA08B_ADC_AIN16)

+#define PORT_PA08B_ADC_AIN16       (1u <<  8)

+#define PIN_PA09B_ADC_AIN17                9  /**< \brief ADC signal: AIN17 on PA09 mux B */

+#define MUX_PA09B_ADC_AIN17                1

+#define PINMUX_PA09B_ADC_AIN17     ((PIN_PA09B_ADC_AIN17 << 16) | MUX_PA09B_ADC_AIN17)

+#define PORT_PA09B_ADC_AIN17       (1u <<  9)

+#define PIN_PA10B_ADC_AIN18               10  /**< \brief ADC signal: AIN18 on PA10 mux B */

+#define MUX_PA10B_ADC_AIN18                1

+#define PINMUX_PA10B_ADC_AIN18     ((PIN_PA10B_ADC_AIN18 << 16) | MUX_PA10B_ADC_AIN18)

+#define PORT_PA10B_ADC_AIN18       (1u << 10)

+#define PIN_PA11B_ADC_AIN19               11  /**< \brief ADC signal: AIN19 on PA11 mux B */

+#define MUX_PA11B_ADC_AIN19                1

+#define PINMUX_PA11B_ADC_AIN19     ((PIN_PA11B_ADC_AIN19 << 16) | MUX_PA11B_ADC_AIN19)

+#define PORT_PA11B_ADC_AIN19       (1u << 11)

+#define PIN_PA04B_ADC_VREFP                4  /**< \brief ADC signal: VREFP on PA04 mux B */

+#define MUX_PA04B_ADC_VREFP                1

+#define PINMUX_PA04B_ADC_VREFP     ((PIN_PA04B_ADC_VREFP << 16) | MUX_PA04B_ADC_VREFP)

+#define PORT_PA04B_ADC_VREFP       (1u <<  4)

+/* ========== PORT definition for AC peripheral ========== */

+#define PIN_PA04B_AC_AIN0                  4  /**< \brief AC signal: AIN0 on PA04 mux B */

+#define MUX_PA04B_AC_AIN0                  1

+#define PINMUX_PA04B_AC_AIN0       ((PIN_PA04B_AC_AIN0 << 16) | MUX_PA04B_AC_AIN0)

+#define PORT_PA04B_AC_AIN0         (1u <<  4)

+#define PIN_PA05B_AC_AIN1                  5  /**< \brief AC signal: AIN1 on PA05 mux B */

+#define MUX_PA05B_AC_AIN1                  1

+#define PINMUX_PA05B_AC_AIN1       ((PIN_PA05B_AC_AIN1 << 16) | MUX_PA05B_AC_AIN1)

+#define PORT_PA05B_AC_AIN1         (1u <<  5)

+#define PIN_PA06B_AC_AIN2                  6  /**< \brief AC signal: AIN2 on PA06 mux B */

+#define MUX_PA06B_AC_AIN2                  1

+#define PINMUX_PA06B_AC_AIN2       ((PIN_PA06B_AC_AIN2 << 16) | MUX_PA06B_AC_AIN2)

+#define PORT_PA06B_AC_AIN2         (1u <<  6)

+#define PIN_PA07B_AC_AIN3                  7  /**< \brief AC signal: AIN3 on PA07 mux B */

+#define MUX_PA07B_AC_AIN3                  1

+#define PINMUX_PA07B_AC_AIN3       ((PIN_PA07B_AC_AIN3 << 16) | MUX_PA07B_AC_AIN3)

+#define PORT_PA07B_AC_AIN3         (1u <<  7)

+#define PIN_PA12H_AC_CMP0                 12  /**< \brief AC signal: CMP0 on PA12 mux H */

+#define MUX_PA12H_AC_CMP0                  7

+#define PINMUX_PA12H_AC_CMP0       ((PIN_PA12H_AC_CMP0 << 16) | MUX_PA12H_AC_CMP0)

+#define PORT_PA12H_AC_CMP0         (1u << 12)

+#define PIN_PA18H_AC_CMP0                 18  /**< \brief AC signal: CMP0 on PA18 mux H */

+#define MUX_PA18H_AC_CMP0                  7

+#define PINMUX_PA18H_AC_CMP0       ((PIN_PA18H_AC_CMP0 << 16) | MUX_PA18H_AC_CMP0)

+#define PORT_PA18H_AC_CMP0         (1u << 18)

+#define PIN_PA13H_AC_CMP1                 13  /**< \brief AC signal: CMP1 on PA13 mux H */

+#define MUX_PA13H_AC_CMP1                  7

+#define PINMUX_PA13H_AC_CMP1       ((PIN_PA13H_AC_CMP1 << 16) | MUX_PA13H_AC_CMP1)

+#define PORT_PA13H_AC_CMP1         (1u << 13)

+#define PIN_PA19H_AC_CMP1                 19  /**< \brief AC signal: CMP1 on PA19 mux H */

+#define MUX_PA19H_AC_CMP1                  7

+#define PINMUX_PA19H_AC_CMP1       ((PIN_PA19H_AC_CMP1 << 16) | MUX_PA19H_AC_CMP1)

+#define PORT_PA19H_AC_CMP1         (1u << 19)

+/* ========== PORT definition for DAC peripheral ========== */

+#define PIN_PA02B_DAC_VOUT                 2  /**< \brief DAC signal: VOUT on PA02 mux B */

+#define MUX_PA02B_DAC_VOUT                 1

+#define PINMUX_PA02B_DAC_VOUT      ((PIN_PA02B_DAC_VOUT << 16) | MUX_PA02B_DAC_VOUT)

+#define PORT_PA02B_DAC_VOUT        (1u <<  2)

+#define PIN_PA03B_DAC_VREFP                3  /**< \brief DAC signal: VREFP on PA03 mux B */

+#define MUX_PA03B_DAC_VREFP                1

+#define PINMUX_PA03B_DAC_VREFP     ((PIN_PA03B_DAC_VREFP << 16) | MUX_PA03B_DAC_VREFP)

+#define PORT_PA03B_DAC_VREFP       (1u <<  3)

+

+#endif /* _SAMD20G16_PIO_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20g17.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20g17.h
new file mode 100644
index 0000000..473d7e7
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20g17.h
@@ -0,0 +1,812 @@
+/**

+ * \file

+ *

+ * \brief Peripheral I/O description for SAMD20G17

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20G17_PIO_

+#define _SAMD20G17_PIO_

+

+#define PIN_PA00                           0  /**< \brief Pin Number for PA00 */

+#define PORT_PA00                  (1u <<  0) /**< \brief PORT Mask  for PA00 */

+#define PIN_PA01                           1  /**< \brief Pin Number for PA01 */

+#define PORT_PA01                  (1u <<  1) /**< \brief PORT Mask  for PA01 */

+#define PIN_PA02                           2  /**< \brief Pin Number for PA02 */

+#define PORT_PA02                  (1u <<  2) /**< \brief PORT Mask  for PA02 */

+#define PIN_PA03                           3  /**< \brief Pin Number for PA03 */

+#define PORT_PA03                  (1u <<  3) /**< \brief PORT Mask  for PA03 */

+#define PIN_PA04                           4  /**< \brief Pin Number for PA04 */

+#define PORT_PA04                  (1u <<  4) /**< \brief PORT Mask  for PA04 */

+#define PIN_PA05                           5  /**< \brief Pin Number for PA05 */

+#define PORT_PA05                  (1u <<  5) /**< \brief PORT Mask  for PA05 */

+#define PIN_PA06                           6  /**< \brief Pin Number for PA06 */

+#define PORT_PA06                  (1u <<  6) /**< \brief PORT Mask  for PA06 */

+#define PIN_PA07                           7  /**< \brief Pin Number for PA07 */

+#define PORT_PA07                  (1u <<  7) /**< \brief PORT Mask  for PA07 */

+#define PIN_PA08                           8  /**< \brief Pin Number for PA08 */

+#define PORT_PA08                  (1u <<  8) /**< \brief PORT Mask  for PA08 */

+#define PIN_PA09                           9  /**< \brief Pin Number for PA09 */

+#define PORT_PA09                  (1u <<  9) /**< \brief PORT Mask  for PA09 */

+#define PIN_PA10                          10  /**< \brief Pin Number for PA10 */

+#define PORT_PA10                  (1u << 10) /**< \brief PORT Mask  for PA10 */

+#define PIN_PA11                          11  /**< \brief Pin Number for PA11 */

+#define PORT_PA11                  (1u << 11) /**< \brief PORT Mask  for PA11 */

+#define PIN_PA12                          12  /**< \brief Pin Number for PA12 */

+#define PORT_PA12                  (1u << 12) /**< \brief PORT Mask  for PA12 */

+#define PIN_PA13                          13  /**< \brief Pin Number for PA13 */

+#define PORT_PA13                  (1u << 13) /**< \brief PORT Mask  for PA13 */

+#define PIN_PA14                          14  /**< \brief Pin Number for PA14 */

+#define PORT_PA14                  (1u << 14) /**< \brief PORT Mask  for PA14 */

+#define PIN_PA15                          15  /**< \brief Pin Number for PA15 */

+#define PORT_PA15                  (1u << 15) /**< \brief PORT Mask  for PA15 */

+#define PIN_PA16                          16  /**< \brief Pin Number for PA16 */

+#define PORT_PA16                  (1u << 16) /**< \brief PORT Mask  for PA16 */

+#define PIN_PA17                          17  /**< \brief Pin Number for PA17 */

+#define PORT_PA17                  (1u << 17) /**< \brief PORT Mask  for PA17 */

+#define PIN_PA18                          18  /**< \brief Pin Number for PA18 */

+#define PORT_PA18                  (1u << 18) /**< \brief PORT Mask  for PA18 */

+#define PIN_PA19                          19  /**< \brief Pin Number for PA19 */

+#define PORT_PA19                  (1u << 19) /**< \brief PORT Mask  for PA19 */

+#define PIN_PA20                          20  /**< \brief Pin Number for PA20 */

+#define PORT_PA20                  (1u << 20) /**< \brief PORT Mask  for PA20 */

+#define PIN_PA21                          21  /**< \brief Pin Number for PA21 */

+#define PORT_PA21                  (1u << 21) /**< \brief PORT Mask  for PA21 */

+#define PIN_PA22                          22  /**< \brief Pin Number for PA22 */

+#define PORT_PA22                  (1u << 22) /**< \brief PORT Mask  for PA22 */

+#define PIN_PA23                          23  /**< \brief Pin Number for PA23 */

+#define PORT_PA23                  (1u << 23) /**< \brief PORT Mask  for PA23 */

+#define PIN_PA24                          24  /**< \brief Pin Number for PA24 */

+#define PORT_PA24                  (1u << 24) /**< \brief PORT Mask  for PA24 */

+#define PIN_PA25                          25  /**< \brief Pin Number for PA25 */

+#define PORT_PA25                  (1u << 25) /**< \brief PORT Mask  for PA25 */

+#define PIN_PA27                          27  /**< \brief Pin Number for PA27 */

+#define PORT_PA27                  (1u << 27) /**< \brief PORT Mask  for PA27 */

+#define PIN_PA28                          28  /**< \brief Pin Number for PA28 */

+#define PORT_PA28                  (1u << 28) /**< \brief PORT Mask  for PA28 */

+#define PIN_PA30                          30  /**< \brief Pin Number for PA30 */

+#define PORT_PA30                  (1u << 30) /**< \brief PORT Mask  for PA30 */

+#define PIN_PA31                          31  /**< \brief Pin Number for PA31 */

+#define PORT_PA31                  (1u << 31) /**< \brief PORT Mask  for PA31 */

+#define PIN_PB02                          34  /**< \brief Pin Number for PB02 */

+#define PORT_PB02                  (1u <<  2) /**< \brief PORT Mask  for PB02 */

+#define PIN_PB03                          35  /**< \brief Pin Number for PB03 */

+#define PORT_PB03                  (1u <<  3) /**< \brief PORT Mask  for PB03 */

+#define PIN_PB08                          40  /**< \brief Pin Number for PB08 */

+#define PORT_PB08                  (1u <<  8) /**< \brief PORT Mask  for PB08 */

+#define PIN_PB09                          41  /**< \brief Pin Number for PB09 */

+#define PORT_PB09                  (1u <<  9) /**< \brief PORT Mask  for PB09 */

+#define PIN_PB10                          42  /**< \brief Pin Number for PB10 */

+#define PORT_PB10                  (1u << 10) /**< \brief PORT Mask  for PB10 */

+#define PIN_PB11                          43  /**< \brief Pin Number for PB11 */

+#define PORT_PB11                  (1u << 11) /**< \brief PORT Mask  for PB11 */

+#define PIN_PB22                          54  /**< \brief Pin Number for PB22 */

+#define PORT_PB22                  (1u << 22) /**< \brief PORT Mask  for PB22 */

+#define PIN_PB23                          55  /**< \brief Pin Number for PB23 */

+#define PORT_PB23                  (1u << 23) /**< \brief PORT Mask  for PB23 */

+/* ========== PORT definition for CORE peripheral ========== */

+#define PIN_PA30G_CORE_SWCLK              30  /**< \brief CORE signal: SWCLK on PA30 mux G */

+#define MUX_PA30G_CORE_SWCLK               6

+#define PINMUX_PA30G_CORE_SWCLK    ((PIN_PA30G_CORE_SWCLK << 16) | MUX_PA30G_CORE_SWCLK)

+#define PORT_PA30G_CORE_SWCLK      (1u << 30)

+/* ========== PORT definition for GCLK peripheral ========== */

+#define PIN_PB22H_GCLK_IO0                54  /**< \brief GCLK signal: IO0 on PB22 mux H */

+#define MUX_PB22H_GCLK_IO0                 7

+#define PINMUX_PB22H_GCLK_IO0      ((PIN_PB22H_GCLK_IO0 << 16) | MUX_PB22H_GCLK_IO0)

+#define PORT_PB22H_GCLK_IO0        (1u << 22)

+#define PIN_PA14H_GCLK_IO0                14  /**< \brief GCLK signal: IO0 on PA14 mux H */

+#define MUX_PA14H_GCLK_IO0                 7

+#define PINMUX_PA14H_GCLK_IO0      ((PIN_PA14H_GCLK_IO0 << 16) | MUX_PA14H_GCLK_IO0)

+#define PORT_PA14H_GCLK_IO0        (1u << 14)

+#define PIN_PA27H_GCLK_IO0                27  /**< \brief GCLK signal: IO0 on PA27 mux H */

+#define MUX_PA27H_GCLK_IO0                 7

+#define PINMUX_PA27H_GCLK_IO0      ((PIN_PA27H_GCLK_IO0 << 16) | MUX_PA27H_GCLK_IO0)

+#define PORT_PA27H_GCLK_IO0        (1u << 27)

+#define PIN_PA28H_GCLK_IO0                28  /**< \brief GCLK signal: IO0 on PA28 mux H */

+#define MUX_PA28H_GCLK_IO0                 7

+#define PINMUX_PA28H_GCLK_IO0      ((PIN_PA28H_GCLK_IO0 << 16) | MUX_PA28H_GCLK_IO0)

+#define PORT_PA28H_GCLK_IO0        (1u << 28)

+#define PIN_PA30H_GCLK_IO0                30  /**< \brief GCLK signal: IO0 on PA30 mux H */

+#define MUX_PA30H_GCLK_IO0                 7

+#define PINMUX_PA30H_GCLK_IO0      ((PIN_PA30H_GCLK_IO0 << 16) | MUX_PA30H_GCLK_IO0)

+#define PORT_PA30H_GCLK_IO0        (1u << 30)

+#define PIN_PB23H_GCLK_IO1                55  /**< \brief GCLK signal: IO1 on PB23 mux H */

+#define MUX_PB23H_GCLK_IO1                 7

+#define PINMUX_PB23H_GCLK_IO1      ((PIN_PB23H_GCLK_IO1 << 16) | MUX_PB23H_GCLK_IO1)

+#define PORT_PB23H_GCLK_IO1        (1u << 23)

+#define PIN_PA15H_GCLK_IO1                15  /**< \brief GCLK signal: IO1 on PA15 mux H */

+#define MUX_PA15H_GCLK_IO1                 7

+#define PINMUX_PA15H_GCLK_IO1      ((PIN_PA15H_GCLK_IO1 << 16) | MUX_PA15H_GCLK_IO1)

+#define PORT_PA15H_GCLK_IO1        (1u << 15)

+#define PIN_PA16H_GCLK_IO2                16  /**< \brief GCLK signal: IO2 on PA16 mux H */

+#define MUX_PA16H_GCLK_IO2                 7

+#define PINMUX_PA16H_GCLK_IO2      ((PIN_PA16H_GCLK_IO2 << 16) | MUX_PA16H_GCLK_IO2)

+#define PORT_PA16H_GCLK_IO2        (1u << 16)

+#define PIN_PA17H_GCLK_IO3                17  /**< \brief GCLK signal: IO3 on PA17 mux H */

+#define MUX_PA17H_GCLK_IO3                 7

+#define PINMUX_PA17H_GCLK_IO3      ((PIN_PA17H_GCLK_IO3 << 16) | MUX_PA17H_GCLK_IO3)

+#define PORT_PA17H_GCLK_IO3        (1u << 17)

+#define PIN_PA10H_GCLK_IO4                10  /**< \brief GCLK signal: IO4 on PA10 mux H */

+#define MUX_PA10H_GCLK_IO4                 7

+#define PINMUX_PA10H_GCLK_IO4      ((PIN_PA10H_GCLK_IO4 << 16) | MUX_PA10H_GCLK_IO4)

+#define PORT_PA10H_GCLK_IO4        (1u << 10)

+#define PIN_PA20H_GCLK_IO4                20  /**< \brief GCLK signal: IO4 on PA20 mux H */

+#define MUX_PA20H_GCLK_IO4                 7

+#define PINMUX_PA20H_GCLK_IO4      ((PIN_PA20H_GCLK_IO4 << 16) | MUX_PA20H_GCLK_IO4)

+#define PORT_PA20H_GCLK_IO4        (1u << 20)

+#define PIN_PB10H_GCLK_IO4                42  /**< \brief GCLK signal: IO4 on PB10 mux H */

+#define MUX_PB10H_GCLK_IO4                 7

+#define PINMUX_PB10H_GCLK_IO4      ((PIN_PB10H_GCLK_IO4 << 16) | MUX_PB10H_GCLK_IO4)

+#define PORT_PB10H_GCLK_IO4        (1u << 10)

+#define PIN_PA11H_GCLK_IO5                11  /**< \brief GCLK signal: IO5 on PA11 mux H */

+#define MUX_PA11H_GCLK_IO5                 7

+#define PINMUX_PA11H_GCLK_IO5      ((PIN_PA11H_GCLK_IO5 << 16) | MUX_PA11H_GCLK_IO5)

+#define PORT_PA11H_GCLK_IO5        (1u << 11)

+#define PIN_PA21H_GCLK_IO5                21  /**< \brief GCLK signal: IO5 on PA21 mux H */

+#define MUX_PA21H_GCLK_IO5                 7

+#define PINMUX_PA21H_GCLK_IO5      ((PIN_PA21H_GCLK_IO5 << 16) | MUX_PA21H_GCLK_IO5)

+#define PORT_PA21H_GCLK_IO5        (1u << 21)

+#define PIN_PB11H_GCLK_IO5                43  /**< \brief GCLK signal: IO5 on PB11 mux H */

+#define MUX_PB11H_GCLK_IO5                 7

+#define PINMUX_PB11H_GCLK_IO5      ((PIN_PB11H_GCLK_IO5 << 16) | MUX_PB11H_GCLK_IO5)

+#define PORT_PB11H_GCLK_IO5        (1u << 11)

+#define PIN_PA22H_GCLK_IO6                22  /**< \brief GCLK signal: IO6 on PA22 mux H */

+#define MUX_PA22H_GCLK_IO6                 7

+#define PINMUX_PA22H_GCLK_IO6      ((PIN_PA22H_GCLK_IO6 << 16) | MUX_PA22H_GCLK_IO6)

+#define PORT_PA22H_GCLK_IO6        (1u << 22)

+#define PIN_PA23H_GCLK_IO7                23  /**< \brief GCLK signal: IO7 on PA23 mux H */

+#define MUX_PA23H_GCLK_IO7                 7

+#define PINMUX_PA23H_GCLK_IO7      ((PIN_PA23H_GCLK_IO7 << 16) | MUX_PA23H_GCLK_IO7)

+#define PORT_PA23H_GCLK_IO7        (1u << 23)

+/* ========== PORT definition for EIC peripheral ========== */

+#define PIN_PA16A_EIC_EXTINT0             16  /**< \brief EIC signal: EXTINT0 on PA16 mux A */

+#define MUX_PA16A_EIC_EXTINT0              0

+#define PINMUX_PA16A_EIC_EXTINT0   ((PIN_PA16A_EIC_EXTINT0 << 16) | MUX_PA16A_EIC_EXTINT0)

+#define PORT_PA16A_EIC_EXTINT0     (1u << 16)

+#define PIN_PA00A_EIC_EXTINT0              0  /**< \brief EIC signal: EXTINT0 on PA00 mux A */

+#define MUX_PA00A_EIC_EXTINT0              0

+#define PINMUX_PA00A_EIC_EXTINT0   ((PIN_PA00A_EIC_EXTINT0 << 16) | MUX_PA00A_EIC_EXTINT0)

+#define PORT_PA00A_EIC_EXTINT0     (1u <<  0)

+#define PIN_PA17A_EIC_EXTINT1             17  /**< \brief EIC signal: EXTINT1 on PA17 mux A */

+#define MUX_PA17A_EIC_EXTINT1              0

+#define PINMUX_PA17A_EIC_EXTINT1   ((PIN_PA17A_EIC_EXTINT1 << 16) | MUX_PA17A_EIC_EXTINT1)

+#define PORT_PA17A_EIC_EXTINT1     (1u << 17)

+#define PIN_PA01A_EIC_EXTINT1              1  /**< \brief EIC signal: EXTINT1 on PA01 mux A */

+#define MUX_PA01A_EIC_EXTINT1              0

+#define PINMUX_PA01A_EIC_EXTINT1   ((PIN_PA01A_EIC_EXTINT1 << 16) | MUX_PA01A_EIC_EXTINT1)

+#define PORT_PA01A_EIC_EXTINT1     (1u <<  1)

+#define PIN_PA02A_EIC_EXTINT2              2  /**< \brief EIC signal: EXTINT2 on PA02 mux A */

+#define MUX_PA02A_EIC_EXTINT2              0

+#define PINMUX_PA02A_EIC_EXTINT2   ((PIN_PA02A_EIC_EXTINT2 << 16) | MUX_PA02A_EIC_EXTINT2)

+#define PORT_PA02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA18A_EIC_EXTINT2             18  /**< \brief EIC signal: EXTINT2 on PA18 mux A */

+#define MUX_PA18A_EIC_EXTINT2              0

+#define PINMUX_PA18A_EIC_EXTINT2   ((PIN_PA18A_EIC_EXTINT2 << 16) | MUX_PA18A_EIC_EXTINT2)

+#define PORT_PA18A_EIC_EXTINT2     (1u << 18)

+#define PIN_PB02A_EIC_EXTINT2             34  /**< \brief EIC signal: EXTINT2 on PB02 mux A */

+#define MUX_PB02A_EIC_EXTINT2              0

+#define PINMUX_PB02A_EIC_EXTINT2   ((PIN_PB02A_EIC_EXTINT2 << 16) | MUX_PB02A_EIC_EXTINT2)

+#define PORT_PB02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA03A_EIC_EXTINT3              3  /**< \brief EIC signal: EXTINT3 on PA03 mux A */

+#define MUX_PA03A_EIC_EXTINT3              0

+#define PINMUX_PA03A_EIC_EXTINT3   ((PIN_PA03A_EIC_EXTINT3 << 16) | MUX_PA03A_EIC_EXTINT3)

+#define PORT_PA03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA19A_EIC_EXTINT3             19  /**< \brief EIC signal: EXTINT3 on PA19 mux A */

+#define MUX_PA19A_EIC_EXTINT3              0

+#define PINMUX_PA19A_EIC_EXTINT3   ((PIN_PA19A_EIC_EXTINT3 << 16) | MUX_PA19A_EIC_EXTINT3)

+#define PORT_PA19A_EIC_EXTINT3     (1u << 19)

+#define PIN_PB03A_EIC_EXTINT3             35  /**< \brief EIC signal: EXTINT3 on PB03 mux A */

+#define MUX_PB03A_EIC_EXTINT3              0

+#define PINMUX_PB03A_EIC_EXTINT3   ((PIN_PB03A_EIC_EXTINT3 << 16) | MUX_PB03A_EIC_EXTINT3)

+#define PORT_PB03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA04A_EIC_EXTINT4              4  /**< \brief EIC signal: EXTINT4 on PA04 mux A */

+#define MUX_PA04A_EIC_EXTINT4              0

+#define PINMUX_PA04A_EIC_EXTINT4   ((PIN_PA04A_EIC_EXTINT4 << 16) | MUX_PA04A_EIC_EXTINT4)

+#define PORT_PA04A_EIC_EXTINT4     (1u <<  4)

+#define PIN_PA20A_EIC_EXTINT4             20  /**< \brief EIC signal: EXTINT4 on PA20 mux A */

+#define MUX_PA20A_EIC_EXTINT4              0

+#define PINMUX_PA20A_EIC_EXTINT4   ((PIN_PA20A_EIC_EXTINT4 << 16) | MUX_PA20A_EIC_EXTINT4)

+#define PORT_PA20A_EIC_EXTINT4     (1u << 20)

+#define PIN_PA05A_EIC_EXTINT5              5  /**< \brief EIC signal: EXTINT5 on PA05 mux A */

+#define MUX_PA05A_EIC_EXTINT5              0

+#define PINMUX_PA05A_EIC_EXTINT5   ((PIN_PA05A_EIC_EXTINT5 << 16) | MUX_PA05A_EIC_EXTINT5)

+#define PORT_PA05A_EIC_EXTINT5     (1u <<  5)

+#define PIN_PA21A_EIC_EXTINT5             21  /**< \brief EIC signal: EXTINT5 on PA21 mux A */

+#define MUX_PA21A_EIC_EXTINT5              0

+#define PINMUX_PA21A_EIC_EXTINT5   ((PIN_PA21A_EIC_EXTINT5 << 16) | MUX_PA21A_EIC_EXTINT5)

+#define PORT_PA21A_EIC_EXTINT5     (1u << 21)

+#define PIN_PA06A_EIC_EXTINT6              6  /**< \brief EIC signal: EXTINT6 on PA06 mux A */

+#define MUX_PA06A_EIC_EXTINT6              0

+#define PINMUX_PA06A_EIC_EXTINT6   ((PIN_PA06A_EIC_EXTINT6 << 16) | MUX_PA06A_EIC_EXTINT6)

+#define PORT_PA06A_EIC_EXTINT6     (1u <<  6)

+#define PIN_PA22A_EIC_EXTINT6             22  /**< \brief EIC signal: EXTINT6 on PA22 mux A */

+#define MUX_PA22A_EIC_EXTINT6              0

+#define PINMUX_PA22A_EIC_EXTINT6   ((PIN_PA22A_EIC_EXTINT6 << 16) | MUX_PA22A_EIC_EXTINT6)

+#define PORT_PA22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PB22A_EIC_EXTINT6             54  /**< \brief EIC signal: EXTINT6 on PB22 mux A */

+#define MUX_PB22A_EIC_EXTINT6              0

+#define PINMUX_PB22A_EIC_EXTINT6   ((PIN_PB22A_EIC_EXTINT6 << 16) | MUX_PB22A_EIC_EXTINT6)

+#define PORT_PB22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PA07A_EIC_EXTINT7              7  /**< \brief EIC signal: EXTINT7 on PA07 mux A */

+#define MUX_PA07A_EIC_EXTINT7              0

+#define PINMUX_PA07A_EIC_EXTINT7   ((PIN_PA07A_EIC_EXTINT7 << 16) | MUX_PA07A_EIC_EXTINT7)

+#define PORT_PA07A_EIC_EXTINT7     (1u <<  7)

+#define PIN_PA23A_EIC_EXTINT7             23  /**< \brief EIC signal: EXTINT7 on PA23 mux A */

+#define MUX_PA23A_EIC_EXTINT7              0

+#define PINMUX_PA23A_EIC_EXTINT7   ((PIN_PA23A_EIC_EXTINT7 << 16) | MUX_PA23A_EIC_EXTINT7)

+#define PORT_PA23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PB23A_EIC_EXTINT7             55  /**< \brief EIC signal: EXTINT7 on PB23 mux A */

+#define MUX_PB23A_EIC_EXTINT7              0

+#define PINMUX_PB23A_EIC_EXTINT7   ((PIN_PB23A_EIC_EXTINT7 << 16) | MUX_PB23A_EIC_EXTINT7)

+#define PORT_PB23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PA28A_EIC_EXTINT8             28  /**< \brief EIC signal: EXTINT8 on PA28 mux A */

+#define MUX_PA28A_EIC_EXTINT8              0

+#define PINMUX_PA28A_EIC_EXTINT8   ((PIN_PA28A_EIC_EXTINT8 << 16) | MUX_PA28A_EIC_EXTINT8)

+#define PORT_PA28A_EIC_EXTINT8     (1u << 28)

+#define PIN_PB08A_EIC_EXTINT8             40  /**< \brief EIC signal: EXTINT8 on PB08 mux A */

+#define MUX_PB08A_EIC_EXTINT8              0

+#define PINMUX_PB08A_EIC_EXTINT8   ((PIN_PB08A_EIC_EXTINT8 << 16) | MUX_PB08A_EIC_EXTINT8)

+#define PORT_PB08A_EIC_EXTINT8     (1u <<  8)

+#define PIN_PA09A_EIC_EXTINT9              9  /**< \brief EIC signal: EXTINT9 on PA09 mux A */

+#define MUX_PA09A_EIC_EXTINT9              0

+#define PINMUX_PA09A_EIC_EXTINT9   ((PIN_PA09A_EIC_EXTINT9 << 16) | MUX_PA09A_EIC_EXTINT9)

+#define PORT_PA09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PB09A_EIC_EXTINT9             41  /**< \brief EIC signal: EXTINT9 on PB09 mux A */

+#define MUX_PB09A_EIC_EXTINT9              0

+#define PINMUX_PB09A_EIC_EXTINT9   ((PIN_PB09A_EIC_EXTINT9 << 16) | MUX_PB09A_EIC_EXTINT9)

+#define PORT_PB09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PA10A_EIC_EXTINT10            10  /**< \brief EIC signal: EXTINT10 on PA10 mux A */

+#define MUX_PA10A_EIC_EXTINT10             0

+#define PINMUX_PA10A_EIC_EXTINT10  ((PIN_PA10A_EIC_EXTINT10 << 16) | MUX_PA10A_EIC_EXTINT10)

+#define PORT_PA10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA30A_EIC_EXTINT10            30  /**< \brief EIC signal: EXTINT10 on PA30 mux A */

+#define MUX_PA30A_EIC_EXTINT10             0

+#define PINMUX_PA30A_EIC_EXTINT10  ((PIN_PA30A_EIC_EXTINT10 << 16) | MUX_PA30A_EIC_EXTINT10)

+#define PORT_PA30A_EIC_EXTINT10    (1u << 30)

+#define PIN_PB10A_EIC_EXTINT10            42  /**< \brief EIC signal: EXTINT10 on PB10 mux A */

+#define MUX_PB10A_EIC_EXTINT10             0

+#define PINMUX_PB10A_EIC_EXTINT10  ((PIN_PB10A_EIC_EXTINT10 << 16) | MUX_PB10A_EIC_EXTINT10)

+#define PORT_PB10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA11A_EIC_EXTINT11            11  /**< \brief EIC signal: EXTINT11 on PA11 mux A */

+#define MUX_PA11A_EIC_EXTINT11             0

+#define PINMUX_PA11A_EIC_EXTINT11  ((PIN_PA11A_EIC_EXTINT11 << 16) | MUX_PA11A_EIC_EXTINT11)

+#define PORT_PA11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA31A_EIC_EXTINT11            31  /**< \brief EIC signal: EXTINT11 on PA31 mux A */

+#define MUX_PA31A_EIC_EXTINT11             0

+#define PINMUX_PA31A_EIC_EXTINT11  ((PIN_PA31A_EIC_EXTINT11 << 16) | MUX_PA31A_EIC_EXTINT11)

+#define PORT_PA31A_EIC_EXTINT11    (1u << 31)

+#define PIN_PB11A_EIC_EXTINT11            43  /**< \brief EIC signal: EXTINT11 on PB11 mux A */

+#define MUX_PB11A_EIC_EXTINT11             0

+#define PINMUX_PB11A_EIC_EXTINT11  ((PIN_PB11A_EIC_EXTINT11 << 16) | MUX_PB11A_EIC_EXTINT11)

+#define PORT_PB11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA12A_EIC_EXTINT12            12  /**< \brief EIC signal: EXTINT12 on PA12 mux A */

+#define MUX_PA12A_EIC_EXTINT12             0

+#define PINMUX_PA12A_EIC_EXTINT12  ((PIN_PA12A_EIC_EXTINT12 << 16) | MUX_PA12A_EIC_EXTINT12)

+#define PORT_PA12A_EIC_EXTINT12    (1u << 12)

+#define PIN_PA24A_EIC_EXTINT12            24  /**< \brief EIC signal: EXTINT12 on PA24 mux A */

+#define MUX_PA24A_EIC_EXTINT12             0

+#define PINMUX_PA24A_EIC_EXTINT12  ((PIN_PA24A_EIC_EXTINT12 << 16) | MUX_PA24A_EIC_EXTINT12)

+#define PORT_PA24A_EIC_EXTINT12    (1u << 24)

+#define PIN_PA13A_EIC_EXTINT13            13  /**< \brief EIC signal: EXTINT13 on PA13 mux A */

+#define MUX_PA13A_EIC_EXTINT13             0

+#define PINMUX_PA13A_EIC_EXTINT13  ((PIN_PA13A_EIC_EXTINT13 << 16) | MUX_PA13A_EIC_EXTINT13)

+#define PORT_PA13A_EIC_EXTINT13    (1u << 13)

+#define PIN_PA25A_EIC_EXTINT13            25  /**< \brief EIC signal: EXTINT13 on PA25 mux A */

+#define MUX_PA25A_EIC_EXTINT13             0

+#define PINMUX_PA25A_EIC_EXTINT13  ((PIN_PA25A_EIC_EXTINT13 << 16) | MUX_PA25A_EIC_EXTINT13)

+#define PORT_PA25A_EIC_EXTINT13    (1u << 25)

+#define PIN_PA14A_EIC_EXTINT14            14  /**< \brief EIC signal: EXTINT14 on PA14 mux A */

+#define MUX_PA14A_EIC_EXTINT14             0

+#define PINMUX_PA14A_EIC_EXTINT14  ((PIN_PA14A_EIC_EXTINT14 << 16) | MUX_PA14A_EIC_EXTINT14)

+#define PORT_PA14A_EIC_EXTINT14    (1u << 14)

+#define PIN_PA27A_EIC_EXTINT15            27  /**< \brief EIC signal: EXTINT15 on PA27 mux A */

+#define MUX_PA27A_EIC_EXTINT15             0

+#define PINMUX_PA27A_EIC_EXTINT15  ((PIN_PA27A_EIC_EXTINT15 << 16) | MUX_PA27A_EIC_EXTINT15)

+#define PORT_PA27A_EIC_EXTINT15    (1u << 27)

+#define PIN_PA15A_EIC_EXTINT15            15  /**< \brief EIC signal: EXTINT15 on PA15 mux A */

+#define MUX_PA15A_EIC_EXTINT15             0

+#define PINMUX_PA15A_EIC_EXTINT15  ((PIN_PA15A_EIC_EXTINT15 << 16) | MUX_PA15A_EIC_EXTINT15)

+#define PORT_PA15A_EIC_EXTINT15    (1u << 15)

+#define PIN_PA08A_EIC_NMI                  8  /**< \brief EIC signal: NMI on PA08 mux A */

+#define MUX_PA08A_EIC_NMI                  0

+#define PINMUX_PA08A_EIC_NMI       ((PIN_PA08A_EIC_NMI << 16) | MUX_PA08A_EIC_NMI)

+#define PORT_PA08A_EIC_NMI         (1u <<  8)

+/* ========== PORT definition for SERCOM0 peripheral ========== */

+#define PIN_PA04D_SERCOM0_PAD0             4  /**< \brief SERCOM0 signal: PAD0 on PA04 mux D */

+#define MUX_PA04D_SERCOM0_PAD0             3

+#define PINMUX_PA04D_SERCOM0_PAD0  ((PIN_PA04D_SERCOM0_PAD0 << 16) | MUX_PA04D_SERCOM0_PAD0)

+#define PORT_PA04D_SERCOM0_PAD0    (1u <<  4)

+#define PIN_PA08C_SERCOM0_PAD0             8  /**< \brief SERCOM0 signal: PAD0 on PA08 mux C */

+#define MUX_PA08C_SERCOM0_PAD0             2

+#define PINMUX_PA08C_SERCOM0_PAD0  ((PIN_PA08C_SERCOM0_PAD0 << 16) | MUX_PA08C_SERCOM0_PAD0)

+#define PORT_PA08C_SERCOM0_PAD0    (1u <<  8)

+#define PIN_PA05D_SERCOM0_PAD1             5  /**< \brief SERCOM0 signal: PAD1 on PA05 mux D */

+#define MUX_PA05D_SERCOM0_PAD1             3

+#define PINMUX_PA05D_SERCOM0_PAD1  ((PIN_PA05D_SERCOM0_PAD1 << 16) | MUX_PA05D_SERCOM0_PAD1)

+#define PORT_PA05D_SERCOM0_PAD1    (1u <<  5)

+#define PIN_PA09C_SERCOM0_PAD1             9  /**< \brief SERCOM0 signal: PAD1 on PA09 mux C */

+#define MUX_PA09C_SERCOM0_PAD1             2

+#define PINMUX_PA09C_SERCOM0_PAD1  ((PIN_PA09C_SERCOM0_PAD1 << 16) | MUX_PA09C_SERCOM0_PAD1)

+#define PORT_PA09C_SERCOM0_PAD1    (1u <<  9)

+#define PIN_PA06D_SERCOM0_PAD2             6  /**< \brief SERCOM0 signal: PAD2 on PA06 mux D */

+#define MUX_PA06D_SERCOM0_PAD2             3

+#define PINMUX_PA06D_SERCOM0_PAD2  ((PIN_PA06D_SERCOM0_PAD2 << 16) | MUX_PA06D_SERCOM0_PAD2)

+#define PORT_PA06D_SERCOM0_PAD2    (1u <<  6)

+#define PIN_PA10C_SERCOM0_PAD2            10  /**< \brief SERCOM0 signal: PAD2 on PA10 mux C */

+#define MUX_PA10C_SERCOM0_PAD2             2

+#define PINMUX_PA10C_SERCOM0_PAD2  ((PIN_PA10C_SERCOM0_PAD2 << 16) | MUX_PA10C_SERCOM0_PAD2)

+#define PORT_PA10C_SERCOM0_PAD2    (1u << 10)

+#define PIN_PA07D_SERCOM0_PAD3             7  /**< \brief SERCOM0 signal: PAD3 on PA07 mux D */

+#define MUX_PA07D_SERCOM0_PAD3             3

+#define PINMUX_PA07D_SERCOM0_PAD3  ((PIN_PA07D_SERCOM0_PAD3 << 16) | MUX_PA07D_SERCOM0_PAD3)

+#define PORT_PA07D_SERCOM0_PAD3    (1u <<  7)

+#define PIN_PA11C_SERCOM0_PAD3            11  /**< \brief SERCOM0 signal: PAD3 on PA11 mux C */

+#define MUX_PA11C_SERCOM0_PAD3             2

+#define PINMUX_PA11C_SERCOM0_PAD3  ((PIN_PA11C_SERCOM0_PAD3 << 16) | MUX_PA11C_SERCOM0_PAD3)

+#define PORT_PA11C_SERCOM0_PAD3    (1u << 11)

+/* ========== PORT definition for SERCOM1 peripheral ========== */

+#define PIN_PA16C_SERCOM1_PAD0            16  /**< \brief SERCOM1 signal: PAD0 on PA16 mux C */

+#define MUX_PA16C_SERCOM1_PAD0             2

+#define PINMUX_PA16C_SERCOM1_PAD0  ((PIN_PA16C_SERCOM1_PAD0 << 16) | MUX_PA16C_SERCOM1_PAD0)

+#define PORT_PA16C_SERCOM1_PAD0    (1u << 16)

+#define PIN_PA00D_SERCOM1_PAD0             0  /**< \brief SERCOM1 signal: PAD0 on PA00 mux D */

+#define MUX_PA00D_SERCOM1_PAD0             3

+#define PINMUX_PA00D_SERCOM1_PAD0  ((PIN_PA00D_SERCOM1_PAD0 << 16) | MUX_PA00D_SERCOM1_PAD0)

+#define PORT_PA00D_SERCOM1_PAD0    (1u <<  0)

+#define PIN_PA17C_SERCOM1_PAD1            17  /**< \brief SERCOM1 signal: PAD1 on PA17 mux C */

+#define MUX_PA17C_SERCOM1_PAD1             2

+#define PINMUX_PA17C_SERCOM1_PAD1  ((PIN_PA17C_SERCOM1_PAD1 << 16) | MUX_PA17C_SERCOM1_PAD1)

+#define PORT_PA17C_SERCOM1_PAD1    (1u << 17)

+#define PIN_PA01D_SERCOM1_PAD1             1  /**< \brief SERCOM1 signal: PAD1 on PA01 mux D */

+#define MUX_PA01D_SERCOM1_PAD1             3

+#define PINMUX_PA01D_SERCOM1_PAD1  ((PIN_PA01D_SERCOM1_PAD1 << 16) | MUX_PA01D_SERCOM1_PAD1)

+#define PORT_PA01D_SERCOM1_PAD1    (1u <<  1)

+#define PIN_PA30D_SERCOM1_PAD2            30  /**< \brief SERCOM1 signal: PAD2 on PA30 mux D */

+#define MUX_PA30D_SERCOM1_PAD2             3

+#define PINMUX_PA30D_SERCOM1_PAD2  ((PIN_PA30D_SERCOM1_PAD2 << 16) | MUX_PA30D_SERCOM1_PAD2)

+#define PORT_PA30D_SERCOM1_PAD2    (1u << 30)

+#define PIN_PA18C_SERCOM1_PAD2            18  /**< \brief SERCOM1 signal: PAD2 on PA18 mux C */

+#define MUX_PA18C_SERCOM1_PAD2             2

+#define PINMUX_PA18C_SERCOM1_PAD2  ((PIN_PA18C_SERCOM1_PAD2 << 16) | MUX_PA18C_SERCOM1_PAD2)

+#define PORT_PA18C_SERCOM1_PAD2    (1u << 18)

+#define PIN_PA31D_SERCOM1_PAD3            31  /**< \brief SERCOM1 signal: PAD3 on PA31 mux D */

+#define MUX_PA31D_SERCOM1_PAD3             3

+#define PINMUX_PA31D_SERCOM1_PAD3  ((PIN_PA31D_SERCOM1_PAD3 << 16) | MUX_PA31D_SERCOM1_PAD3)

+#define PORT_PA31D_SERCOM1_PAD3    (1u << 31)

+#define PIN_PA19C_SERCOM1_PAD3            19  /**< \brief SERCOM1 signal: PAD3 on PA19 mux C */

+#define MUX_PA19C_SERCOM1_PAD3             2

+#define PINMUX_PA19C_SERCOM1_PAD3  ((PIN_PA19C_SERCOM1_PAD3 << 16) | MUX_PA19C_SERCOM1_PAD3)

+#define PORT_PA19C_SERCOM1_PAD3    (1u << 19)

+/* ========== PORT definition for SERCOM2 peripheral ========== */

+#define PIN_PA08D_SERCOM2_PAD0             8  /**< \brief SERCOM2 signal: PAD0 on PA08 mux D */

+#define MUX_PA08D_SERCOM2_PAD0             3

+#define PINMUX_PA08D_SERCOM2_PAD0  ((PIN_PA08D_SERCOM2_PAD0 << 16) | MUX_PA08D_SERCOM2_PAD0)

+#define PORT_PA08D_SERCOM2_PAD0    (1u <<  8)

+#define PIN_PA12C_SERCOM2_PAD0            12  /**< \brief SERCOM2 signal: PAD0 on PA12 mux C */

+#define MUX_PA12C_SERCOM2_PAD0             2

+#define PINMUX_PA12C_SERCOM2_PAD0  ((PIN_PA12C_SERCOM2_PAD0 << 16) | MUX_PA12C_SERCOM2_PAD0)

+#define PORT_PA12C_SERCOM2_PAD0    (1u << 12)

+#define PIN_PA09D_SERCOM2_PAD1             9  /**< \brief SERCOM2 signal: PAD1 on PA09 mux D */

+#define MUX_PA09D_SERCOM2_PAD1             3

+#define PINMUX_PA09D_SERCOM2_PAD1  ((PIN_PA09D_SERCOM2_PAD1 << 16) | MUX_PA09D_SERCOM2_PAD1)

+#define PORT_PA09D_SERCOM2_PAD1    (1u <<  9)

+#define PIN_PA13C_SERCOM2_PAD1            13  /**< \brief SERCOM2 signal: PAD1 on PA13 mux C */

+#define MUX_PA13C_SERCOM2_PAD1             2

+#define PINMUX_PA13C_SERCOM2_PAD1  ((PIN_PA13C_SERCOM2_PAD1 << 16) | MUX_PA13C_SERCOM2_PAD1)

+#define PORT_PA13C_SERCOM2_PAD1    (1u << 13)

+#define PIN_PA10D_SERCOM2_PAD2            10  /**< \brief SERCOM2 signal: PAD2 on PA10 mux D */

+#define MUX_PA10D_SERCOM2_PAD2             3

+#define PINMUX_PA10D_SERCOM2_PAD2  ((PIN_PA10D_SERCOM2_PAD2 << 16) | MUX_PA10D_SERCOM2_PAD2)

+#define PORT_PA10D_SERCOM2_PAD2    (1u << 10)

+#define PIN_PA14C_SERCOM2_PAD2            14  /**< \brief SERCOM2 signal: PAD2 on PA14 mux C */

+#define MUX_PA14C_SERCOM2_PAD2             2

+#define PINMUX_PA14C_SERCOM2_PAD2  ((PIN_PA14C_SERCOM2_PAD2 << 16) | MUX_PA14C_SERCOM2_PAD2)

+#define PORT_PA14C_SERCOM2_PAD2    (1u << 14)

+#define PIN_PA11D_SERCOM2_PAD3            11  /**< \brief SERCOM2 signal: PAD3 on PA11 mux D */

+#define MUX_PA11D_SERCOM2_PAD3             3

+#define PINMUX_PA11D_SERCOM2_PAD3  ((PIN_PA11D_SERCOM2_PAD3 << 16) | MUX_PA11D_SERCOM2_PAD3)

+#define PORT_PA11D_SERCOM2_PAD3    (1u << 11)

+#define PIN_PA15C_SERCOM2_PAD3            15  /**< \brief SERCOM2 signal: PAD3 on PA15 mux C */

+#define MUX_PA15C_SERCOM2_PAD3             2

+#define PINMUX_PA15C_SERCOM2_PAD3  ((PIN_PA15C_SERCOM2_PAD3 << 16) | MUX_PA15C_SERCOM2_PAD3)

+#define PORT_PA15C_SERCOM2_PAD3    (1u << 15)

+/* ========== PORT definition for SERCOM3 peripheral ========== */

+#define PIN_PA16D_SERCOM3_PAD0            16  /**< \brief SERCOM3 signal: PAD0 on PA16 mux D */

+#define MUX_PA16D_SERCOM3_PAD0             3

+#define PINMUX_PA16D_SERCOM3_PAD0  ((PIN_PA16D_SERCOM3_PAD0 << 16) | MUX_PA16D_SERCOM3_PAD0)

+#define PORT_PA16D_SERCOM3_PAD0    (1u << 16)

+#define PIN_PA22C_SERCOM3_PAD0            22  /**< \brief SERCOM3 signal: PAD0 on PA22 mux C */

+#define MUX_PA22C_SERCOM3_PAD0             2

+#define PINMUX_PA22C_SERCOM3_PAD0  ((PIN_PA22C_SERCOM3_PAD0 << 16) | MUX_PA22C_SERCOM3_PAD0)

+#define PORT_PA22C_SERCOM3_PAD0    (1u << 22)

+#define PIN_PA17D_SERCOM3_PAD1            17  /**< \brief SERCOM3 signal: PAD1 on PA17 mux D */

+#define MUX_PA17D_SERCOM3_PAD1             3

+#define PINMUX_PA17D_SERCOM3_PAD1  ((PIN_PA17D_SERCOM3_PAD1 << 16) | MUX_PA17D_SERCOM3_PAD1)

+#define PORT_PA17D_SERCOM3_PAD1    (1u << 17)

+#define PIN_PA23C_SERCOM3_PAD1            23  /**< \brief SERCOM3 signal: PAD1 on PA23 mux C */

+#define MUX_PA23C_SERCOM3_PAD1             2

+#define PINMUX_PA23C_SERCOM3_PAD1  ((PIN_PA23C_SERCOM3_PAD1 << 16) | MUX_PA23C_SERCOM3_PAD1)

+#define PORT_PA23C_SERCOM3_PAD1    (1u << 23)

+#define PIN_PA18D_SERCOM3_PAD2            18  /**< \brief SERCOM3 signal: PAD2 on PA18 mux D */

+#define MUX_PA18D_SERCOM3_PAD2             3

+#define PINMUX_PA18D_SERCOM3_PAD2  ((PIN_PA18D_SERCOM3_PAD2 << 16) | MUX_PA18D_SERCOM3_PAD2)

+#define PORT_PA18D_SERCOM3_PAD2    (1u << 18)

+#define PIN_PA20D_SERCOM3_PAD2            20  /**< \brief SERCOM3 signal: PAD2 on PA20 mux D */

+#define MUX_PA20D_SERCOM3_PAD2             3

+#define PINMUX_PA20D_SERCOM3_PAD2  ((PIN_PA20D_SERCOM3_PAD2 << 16) | MUX_PA20D_SERCOM3_PAD2)

+#define PORT_PA20D_SERCOM3_PAD2    (1u << 20)

+#define PIN_PA24C_SERCOM3_PAD2            24  /**< \brief SERCOM3 signal: PAD2 on PA24 mux C */

+#define MUX_PA24C_SERCOM3_PAD2             2

+#define PINMUX_PA24C_SERCOM3_PAD2  ((PIN_PA24C_SERCOM3_PAD2 << 16) | MUX_PA24C_SERCOM3_PAD2)

+#define PORT_PA24C_SERCOM3_PAD2    (1u << 24)

+#define PIN_PA19D_SERCOM3_PAD3            19  /**< \brief SERCOM3 signal: PAD3 on PA19 mux D */

+#define MUX_PA19D_SERCOM3_PAD3             3

+#define PINMUX_PA19D_SERCOM3_PAD3  ((PIN_PA19D_SERCOM3_PAD3 << 16) | MUX_PA19D_SERCOM3_PAD3)

+#define PORT_PA19D_SERCOM3_PAD3    (1u << 19)

+#define PIN_PA21D_SERCOM3_PAD3            21  /**< \brief SERCOM3 signal: PAD3 on PA21 mux D */

+#define MUX_PA21D_SERCOM3_PAD3             3

+#define PINMUX_PA21D_SERCOM3_PAD3  ((PIN_PA21D_SERCOM3_PAD3 << 16) | MUX_PA21D_SERCOM3_PAD3)

+#define PORT_PA21D_SERCOM3_PAD3    (1u << 21)

+#define PIN_PA25C_SERCOM3_PAD3            25  /**< \brief SERCOM3 signal: PAD3 on PA25 mux C */

+#define MUX_PA25C_SERCOM3_PAD3             2

+#define PINMUX_PA25C_SERCOM3_PAD3  ((PIN_PA25C_SERCOM3_PAD3 << 16) | MUX_PA25C_SERCOM3_PAD3)

+#define PORT_PA25C_SERCOM3_PAD3    (1u << 25)

+/* ========== PORT definition for SERCOM4 peripheral ========== */

+#define PIN_PA12D_SERCOM4_PAD0            12  /**< \brief SERCOM4 signal: PAD0 on PA12 mux D */

+#define MUX_PA12D_SERCOM4_PAD0             3

+#define PINMUX_PA12D_SERCOM4_PAD0  ((PIN_PA12D_SERCOM4_PAD0 << 16) | MUX_PA12D_SERCOM4_PAD0)

+#define PORT_PA12D_SERCOM4_PAD0    (1u << 12)

+#define PIN_PB08D_SERCOM4_PAD0            40  /**< \brief SERCOM4 signal: PAD0 on PB08 mux D */

+#define MUX_PB08D_SERCOM4_PAD0             3

+#define PINMUX_PB08D_SERCOM4_PAD0  ((PIN_PB08D_SERCOM4_PAD0 << 16) | MUX_PB08D_SERCOM4_PAD0)

+#define PORT_PB08D_SERCOM4_PAD0    (1u <<  8)

+#define PIN_PA13D_SERCOM4_PAD1            13  /**< \brief SERCOM4 signal: PAD1 on PA13 mux D */

+#define MUX_PA13D_SERCOM4_PAD1             3

+#define PINMUX_PA13D_SERCOM4_PAD1  ((PIN_PA13D_SERCOM4_PAD1 << 16) | MUX_PA13D_SERCOM4_PAD1)

+#define PORT_PA13D_SERCOM4_PAD1    (1u << 13)

+#define PIN_PB09D_SERCOM4_PAD1            41  /**< \brief SERCOM4 signal: PAD1 on PB09 mux D */

+#define MUX_PB09D_SERCOM4_PAD1             3

+#define PINMUX_PB09D_SERCOM4_PAD1  ((PIN_PB09D_SERCOM4_PAD1 << 16) | MUX_PB09D_SERCOM4_PAD1)

+#define PORT_PB09D_SERCOM4_PAD1    (1u <<  9)

+#define PIN_PA14D_SERCOM4_PAD2            14  /**< \brief SERCOM4 signal: PAD2 on PA14 mux D */

+#define MUX_PA14D_SERCOM4_PAD2             3

+#define PINMUX_PA14D_SERCOM4_PAD2  ((PIN_PA14D_SERCOM4_PAD2 << 16) | MUX_PA14D_SERCOM4_PAD2)

+#define PORT_PA14D_SERCOM4_PAD2    (1u << 14)

+#define PIN_PB10D_SERCOM4_PAD2            42  /**< \brief SERCOM4 signal: PAD2 on PB10 mux D */

+#define MUX_PB10D_SERCOM4_PAD2             3

+#define PINMUX_PB10D_SERCOM4_PAD2  ((PIN_PB10D_SERCOM4_PAD2 << 16) | MUX_PB10D_SERCOM4_PAD2)

+#define PORT_PB10D_SERCOM4_PAD2    (1u << 10)

+#define PIN_PA15D_SERCOM4_PAD3            15  /**< \brief SERCOM4 signal: PAD3 on PA15 mux D */

+#define MUX_PA15D_SERCOM4_PAD3             3

+#define PINMUX_PA15D_SERCOM4_PAD3  ((PIN_PA15D_SERCOM4_PAD3 << 16) | MUX_PA15D_SERCOM4_PAD3)

+#define PORT_PA15D_SERCOM4_PAD3    (1u << 15)

+#define PIN_PB11D_SERCOM4_PAD3            43  /**< \brief SERCOM4 signal: PAD3 on PB11 mux D */

+#define MUX_PB11D_SERCOM4_PAD3             3

+#define PINMUX_PB11D_SERCOM4_PAD3  ((PIN_PB11D_SERCOM4_PAD3 << 16) | MUX_PB11D_SERCOM4_PAD3)

+#define PORT_PB11D_SERCOM4_PAD3    (1u << 11)

+/* ========== PORT definition for SERCOM5 peripheral ========== */

+#define PIN_PA22D_SERCOM5_PAD0            22  /**< \brief SERCOM5 signal: PAD0 on PA22 mux D */

+#define MUX_PA22D_SERCOM5_PAD0             3

+#define PINMUX_PA22D_SERCOM5_PAD0  ((PIN_PA22D_SERCOM5_PAD0 << 16) | MUX_PA22D_SERCOM5_PAD0)

+#define PORT_PA22D_SERCOM5_PAD0    (1u << 22)

+#define PIN_PB02D_SERCOM5_PAD0            34  /**< \brief SERCOM5 signal: PAD0 on PB02 mux D */

+#define MUX_PB02D_SERCOM5_PAD0             3

+#define PINMUX_PB02D_SERCOM5_PAD0  ((PIN_PB02D_SERCOM5_PAD0 << 16) | MUX_PB02D_SERCOM5_PAD0)

+#define PORT_PB02D_SERCOM5_PAD0    (1u <<  2)

+#define PIN_PA23D_SERCOM5_PAD1            23  /**< \brief SERCOM5 signal: PAD1 on PA23 mux D */

+#define MUX_PA23D_SERCOM5_PAD1             3

+#define PINMUX_PA23D_SERCOM5_PAD1  ((PIN_PA23D_SERCOM5_PAD1 << 16) | MUX_PA23D_SERCOM5_PAD1)

+#define PORT_PA23D_SERCOM5_PAD1    (1u << 23)

+#define PIN_PB03D_SERCOM5_PAD1            35  /**< \brief SERCOM5 signal: PAD1 on PB03 mux D */

+#define MUX_PB03D_SERCOM5_PAD1             3

+#define PINMUX_PB03D_SERCOM5_PAD1  ((PIN_PB03D_SERCOM5_PAD1 << 16) | MUX_PB03D_SERCOM5_PAD1)

+#define PORT_PB03D_SERCOM5_PAD1    (1u <<  3)

+#define PIN_PA24D_SERCOM5_PAD2            24  /**< \brief SERCOM5 signal: PAD2 on PA24 mux D */

+#define MUX_PA24D_SERCOM5_PAD2             3

+#define PINMUX_PA24D_SERCOM5_PAD2  ((PIN_PA24D_SERCOM5_PAD2 << 16) | MUX_PA24D_SERCOM5_PAD2)

+#define PORT_PA24D_SERCOM5_PAD2    (1u << 24)

+#define PIN_PB22D_SERCOM5_PAD2            54  /**< \brief SERCOM5 signal: PAD2 on PB22 mux D */

+#define MUX_PB22D_SERCOM5_PAD2             3

+#define PINMUX_PB22D_SERCOM5_PAD2  ((PIN_PB22D_SERCOM5_PAD2 << 16) | MUX_PB22D_SERCOM5_PAD2)

+#define PORT_PB22D_SERCOM5_PAD2    (1u << 22)

+#define PIN_PA20C_SERCOM5_PAD2            20  /**< \brief SERCOM5 signal: PAD2 on PA20 mux C */

+#define MUX_PA20C_SERCOM5_PAD2             2

+#define PINMUX_PA20C_SERCOM5_PAD2  ((PIN_PA20C_SERCOM5_PAD2 << 16) | MUX_PA20C_SERCOM5_PAD2)

+#define PORT_PA20C_SERCOM5_PAD2    (1u << 20)

+#define PIN_PA25D_SERCOM5_PAD3            25  /**< \brief SERCOM5 signal: PAD3 on PA25 mux D */

+#define MUX_PA25D_SERCOM5_PAD3             3

+#define PINMUX_PA25D_SERCOM5_PAD3  ((PIN_PA25D_SERCOM5_PAD3 << 16) | MUX_PA25D_SERCOM5_PAD3)

+#define PORT_PA25D_SERCOM5_PAD3    (1u << 25)

+#define PIN_PB23D_SERCOM5_PAD3            55  /**< \brief SERCOM5 signal: PAD3 on PB23 mux D */

+#define MUX_PB23D_SERCOM5_PAD3             3

+#define PINMUX_PB23D_SERCOM5_PAD3  ((PIN_PB23D_SERCOM5_PAD3 << 16) | MUX_PB23D_SERCOM5_PAD3)

+#define PORT_PB23D_SERCOM5_PAD3    (1u << 23)

+#define PIN_PA21C_SERCOM5_PAD3            21  /**< \brief SERCOM5 signal: PAD3 on PA21 mux C */

+#define MUX_PA21C_SERCOM5_PAD3             2

+#define PINMUX_PA21C_SERCOM5_PAD3  ((PIN_PA21C_SERCOM5_PAD3 << 16) | MUX_PA21C_SERCOM5_PAD3)

+#define PORT_PA21C_SERCOM5_PAD3    (1u << 21)

+/* ========== PORT definition for TC0 peripheral ========== */

+#define PIN_PA04F_TC0_WO0                  4  /**< \brief TC0 signal: WO0 on PA04 mux F */

+#define MUX_PA04F_TC0_WO0                  5

+#define PINMUX_PA04F_TC0_WO0       ((PIN_PA04F_TC0_WO0 << 16) | MUX_PA04F_TC0_WO0)

+#define PORT_PA04F_TC0_WO0         (1u <<  4)

+#define PIN_PA08E_TC0_WO0                  8  /**< \brief TC0 signal: WO0 on PA08 mux E */

+#define MUX_PA08E_TC0_WO0                  4

+#define PINMUX_PA08E_TC0_WO0       ((PIN_PA08E_TC0_WO0 << 16) | MUX_PA08E_TC0_WO0)

+#define PORT_PA08E_TC0_WO0         (1u <<  8)

+#define PIN_PA05F_TC0_WO1                  5  /**< \brief TC0 signal: WO1 on PA05 mux F */

+#define MUX_PA05F_TC0_WO1                  5

+#define PINMUX_PA05F_TC0_WO1       ((PIN_PA05F_TC0_WO1 << 16) | MUX_PA05F_TC0_WO1)

+#define PORT_PA05F_TC0_WO1         (1u <<  5)

+#define PIN_PA09E_TC0_WO1                  9  /**< \brief TC0 signal: WO1 on PA09 mux E */

+#define MUX_PA09E_TC0_WO1                  4

+#define PINMUX_PA09E_TC0_WO1       ((PIN_PA09E_TC0_WO1 << 16) | MUX_PA09E_TC0_WO1)

+#define PORT_PA09E_TC0_WO1         (1u <<  9)

+/* ========== PORT definition for TC1 peripheral ========== */

+#define PIN_PA06F_TC1_WO0                  6  /**< \brief TC1 signal: WO0 on PA06 mux F */

+#define MUX_PA06F_TC1_WO0                  5

+#define PINMUX_PA06F_TC1_WO0       ((PIN_PA06F_TC1_WO0 << 16) | MUX_PA06F_TC1_WO0)

+#define PORT_PA06F_TC1_WO0         (1u <<  6)

+#define PIN_PA30F_TC1_WO0                 30  /**< \brief TC1 signal: WO0 on PA30 mux F */

+#define MUX_PA30F_TC1_WO0                  5

+#define PINMUX_PA30F_TC1_WO0       ((PIN_PA30F_TC1_WO0 << 16) | MUX_PA30F_TC1_WO0)

+#define PORT_PA30F_TC1_WO0         (1u << 30)

+#define PIN_PA10E_TC1_WO0                 10  /**< \brief TC1 signal: WO0 on PA10 mux E */

+#define MUX_PA10E_TC1_WO0                  4

+#define PINMUX_PA10E_TC1_WO0       ((PIN_PA10E_TC1_WO0 << 16) | MUX_PA10E_TC1_WO0)

+#define PORT_PA10E_TC1_WO0         (1u << 10)

+#define PIN_PA07F_TC1_WO1                  7  /**< \brief TC1 signal: WO1 on PA07 mux F */

+#define MUX_PA07F_TC1_WO1                  5

+#define PINMUX_PA07F_TC1_WO1       ((PIN_PA07F_TC1_WO1 << 16) | MUX_PA07F_TC1_WO1)

+#define PORT_PA07F_TC1_WO1         (1u <<  7)

+#define PIN_PA31F_TC1_WO1                 31  /**< \brief TC1 signal: WO1 on PA31 mux F */

+#define MUX_PA31F_TC1_WO1                  5

+#define PINMUX_PA31F_TC1_WO1       ((PIN_PA31F_TC1_WO1 << 16) | MUX_PA31F_TC1_WO1)

+#define PORT_PA31F_TC1_WO1         (1u << 31)

+#define PIN_PA11E_TC1_WO1                 11  /**< \brief TC1 signal: WO1 on PA11 mux E */

+#define MUX_PA11E_TC1_WO1                  4

+#define PINMUX_PA11E_TC1_WO1       ((PIN_PA11E_TC1_WO1 << 16) | MUX_PA11E_TC1_WO1)

+#define PORT_PA11E_TC1_WO1         (1u << 11)

+/* ========== PORT definition for TC2 peripheral ========== */

+#define PIN_PA16F_TC2_WO0                 16  /**< \brief TC2 signal: WO0 on PA16 mux F */

+#define MUX_PA16F_TC2_WO0                  5

+#define PINMUX_PA16F_TC2_WO0       ((PIN_PA16F_TC2_WO0 << 16) | MUX_PA16F_TC2_WO0)

+#define PORT_PA16F_TC2_WO0         (1u << 16)

+#define PIN_PA12E_TC2_WO0                 12  /**< \brief TC2 signal: WO0 on PA12 mux E */

+#define MUX_PA12E_TC2_WO0                  4

+#define PINMUX_PA12E_TC2_WO0       ((PIN_PA12E_TC2_WO0 << 16) | MUX_PA12E_TC2_WO0)

+#define PORT_PA12E_TC2_WO0         (1u << 12)

+#define PIN_PA00F_TC2_WO0                  0  /**< \brief TC2 signal: WO0 on PA00 mux F */

+#define MUX_PA00F_TC2_WO0                  5

+#define PINMUX_PA00F_TC2_WO0       ((PIN_PA00F_TC2_WO0 << 16) | MUX_PA00F_TC2_WO0)

+#define PORT_PA00F_TC2_WO0         (1u <<  0)

+#define PIN_PA17F_TC2_WO1                 17  /**< \brief TC2 signal: WO1 on PA17 mux F */

+#define MUX_PA17F_TC2_WO1                  5

+#define PINMUX_PA17F_TC2_WO1       ((PIN_PA17F_TC2_WO1 << 16) | MUX_PA17F_TC2_WO1)

+#define PORT_PA17F_TC2_WO1         (1u << 17)

+#define PIN_PA13E_TC2_WO1                 13  /**< \brief TC2 signal: WO1 on PA13 mux E */

+#define MUX_PA13E_TC2_WO1                  4

+#define PINMUX_PA13E_TC2_WO1       ((PIN_PA13E_TC2_WO1 << 16) | MUX_PA13E_TC2_WO1)

+#define PORT_PA13E_TC2_WO1         (1u << 13)

+#define PIN_PA01F_TC2_WO1                  1  /**< \brief TC2 signal: WO1 on PA01 mux F */

+#define MUX_PA01F_TC2_WO1                  5

+#define PINMUX_PA01F_TC2_WO1       ((PIN_PA01F_TC2_WO1 << 16) | MUX_PA01F_TC2_WO1)

+#define PORT_PA01F_TC2_WO1         (1u <<  1)

+/* ========== PORT definition for TC3 peripheral ========== */

+#define PIN_PA18F_TC3_WO0                 18  /**< \brief TC3 signal: WO0 on PA18 mux F */

+#define MUX_PA18F_TC3_WO0                  5

+#define PINMUX_PA18F_TC3_WO0       ((PIN_PA18F_TC3_WO0 << 16) | MUX_PA18F_TC3_WO0)

+#define PORT_PA18F_TC3_WO0         (1u << 18)

+#define PIN_PA14E_TC3_WO0                 14  /**< \brief TC3 signal: WO0 on PA14 mux E */

+#define MUX_PA14E_TC3_WO0                  4

+#define PINMUX_PA14E_TC3_WO0       ((PIN_PA14E_TC3_WO0 << 16) | MUX_PA14E_TC3_WO0)

+#define PORT_PA14E_TC3_WO0         (1u << 14)

+#define PIN_PA19F_TC3_WO1                 19  /**< \brief TC3 signal: WO1 on PA19 mux F */

+#define MUX_PA19F_TC3_WO1                  5

+#define PINMUX_PA19F_TC3_WO1       ((PIN_PA19F_TC3_WO1 << 16) | MUX_PA19F_TC3_WO1)

+#define PORT_PA19F_TC3_WO1         (1u << 19)

+#define PIN_PA15E_TC3_WO1                 15  /**< \brief TC3 signal: WO1 on PA15 mux E */

+#define MUX_PA15E_TC3_WO1                  4

+#define PINMUX_PA15E_TC3_WO1       ((PIN_PA15E_TC3_WO1 << 16) | MUX_PA15E_TC3_WO1)

+#define PORT_PA15E_TC3_WO1         (1u << 15)

+/* ========== PORT definition for TC4 peripheral ========== */

+#define PIN_PA22F_TC4_WO0                 22  /**< \brief TC4 signal: WO0 on PA22 mux F */

+#define MUX_PA22F_TC4_WO0                  5

+#define PINMUX_PA22F_TC4_WO0       ((PIN_PA22F_TC4_WO0 << 16) | MUX_PA22F_TC4_WO0)

+#define PORT_PA22F_TC4_WO0         (1u << 22)

+#define PIN_PB08F_TC4_WO0                 40  /**< \brief TC4 signal: WO0 on PB08 mux F */

+#define MUX_PB08F_TC4_WO0                  5

+#define PINMUX_PB08F_TC4_WO0       ((PIN_PB08F_TC4_WO0 << 16) | MUX_PB08F_TC4_WO0)

+#define PORT_PB08F_TC4_WO0         (1u <<  8)

+#define PIN_PA23F_TC4_WO1                 23  /**< \brief TC4 signal: WO1 on PA23 mux F */

+#define MUX_PA23F_TC4_WO1                  5

+#define PINMUX_PA23F_TC4_WO1       ((PIN_PA23F_TC4_WO1 << 16) | MUX_PA23F_TC4_WO1)

+#define PORT_PA23F_TC4_WO1         (1u << 23)

+#define PIN_PB09F_TC4_WO1                 41  /**< \brief TC4 signal: WO1 on PB09 mux F */

+#define MUX_PB09F_TC4_WO1                  5

+#define PINMUX_PB09F_TC4_WO1       ((PIN_PB09F_TC4_WO1 << 16) | MUX_PB09F_TC4_WO1)

+#define PORT_PB09F_TC4_WO1         (1u <<  9)

+/* ========== PORT definition for TC5 peripheral ========== */

+#define PIN_PA24F_TC5_WO0                 24  /**< \brief TC5 signal: WO0 on PA24 mux F */

+#define MUX_PA24F_TC5_WO0                  5

+#define PINMUX_PA24F_TC5_WO0       ((PIN_PA24F_TC5_WO0 << 16) | MUX_PA24F_TC5_WO0)

+#define PORT_PA24F_TC5_WO0         (1u << 24)

+#define PIN_PB10F_TC5_WO0                 42  /**< \brief TC5 signal: WO0 on PB10 mux F */

+#define MUX_PB10F_TC5_WO0                  5

+#define PINMUX_PB10F_TC5_WO0       ((PIN_PB10F_TC5_WO0 << 16) | MUX_PB10F_TC5_WO0)

+#define PORT_PB10F_TC5_WO0         (1u << 10)

+#define PIN_PA25F_TC5_WO1                 25  /**< \brief TC5 signal: WO1 on PA25 mux F */

+#define MUX_PA25F_TC5_WO1                  5

+#define PINMUX_PA25F_TC5_WO1       ((PIN_PA25F_TC5_WO1 << 16) | MUX_PA25F_TC5_WO1)

+#define PORT_PA25F_TC5_WO1         (1u << 25)

+#define PIN_PB11F_TC5_WO1                 43  /**< \brief TC5 signal: WO1 on PB11 mux F */

+#define MUX_PB11F_TC5_WO1                  5

+#define PINMUX_PB11F_TC5_WO1       ((PIN_PB11F_TC5_WO1 << 16) | MUX_PB11F_TC5_WO1)

+#define PORT_PB11F_TC5_WO1         (1u << 11)

+/* ========== PORT definition for TC6 peripheral ========== */

+#define PIN_PB02F_TC6_WO0                 34  /**< \brief TC6 signal: WO0 on PB02 mux F */

+#define MUX_PB02F_TC6_WO0                  5

+#define PINMUX_PB02F_TC6_WO0       ((PIN_PB02F_TC6_WO0 << 16) | MUX_PB02F_TC6_WO0)

+#define PORT_PB02F_TC6_WO0         (1u <<  2)

+#define PIN_PB03F_TC6_WO1                 35  /**< \brief TC6 signal: WO1 on PB03 mux F */

+#define MUX_PB03F_TC6_WO1                  5

+#define PINMUX_PB03F_TC6_WO1       ((PIN_PB03F_TC6_WO1 << 16) | MUX_PB03F_TC6_WO1)

+#define PORT_PB03F_TC6_WO1         (1u <<  3)

+/* ========== PORT definition for TC7 peripheral ========== */

+#define PIN_PB22F_TC7_WO0                 54  /**< \brief TC7 signal: WO0 on PB22 mux F */

+#define MUX_PB22F_TC7_WO0                  5

+#define PINMUX_PB22F_TC7_WO0       ((PIN_PB22F_TC7_WO0 << 16) | MUX_PB22F_TC7_WO0)

+#define PORT_PB22F_TC7_WO0         (1u << 22)

+#define PIN_PA20E_TC7_WO0                 20  /**< \brief TC7 signal: WO0 on PA20 mux E */

+#define MUX_PA20E_TC7_WO0                  4

+#define PINMUX_PA20E_TC7_WO0       ((PIN_PA20E_TC7_WO0 << 16) | MUX_PA20E_TC7_WO0)

+#define PORT_PA20E_TC7_WO0         (1u << 20)

+#define PIN_PB23F_TC7_WO1                 55  /**< \brief TC7 signal: WO1 on PB23 mux F */

+#define MUX_PB23F_TC7_WO1                  5

+#define PINMUX_PB23F_TC7_WO1       ((PIN_PB23F_TC7_WO1 << 16) | MUX_PB23F_TC7_WO1)

+#define PORT_PB23F_TC7_WO1         (1u << 23)

+#define PIN_PA21E_TC7_WO1                 21  /**< \brief TC7 signal: WO1 on PA21 mux E */

+#define MUX_PA21E_TC7_WO1                  4

+#define PINMUX_PA21E_TC7_WO1       ((PIN_PA21E_TC7_WO1 << 16) | MUX_PA21E_TC7_WO1)

+#define PORT_PA21E_TC7_WO1         (1u << 21)

+/* ========== PORT definition for ADC peripheral ========== */

+#define PIN_PA02B_ADC_AIN0                 2  /**< \brief ADC signal: AIN0 on PA02 mux B */

+#define MUX_PA02B_ADC_AIN0                 1

+#define PINMUX_PA02B_ADC_AIN0      ((PIN_PA02B_ADC_AIN0 << 16) | MUX_PA02B_ADC_AIN0)

+#define PORT_PA02B_ADC_AIN0        (1u <<  2)

+#define PIN_PA03B_ADC_AIN1                 3  /**< \brief ADC signal: AIN1 on PA03 mux B */

+#define MUX_PA03B_ADC_AIN1                 1

+#define PINMUX_PA03B_ADC_AIN1      ((PIN_PA03B_ADC_AIN1 << 16) | MUX_PA03B_ADC_AIN1)

+#define PORT_PA03B_ADC_AIN1        (1u <<  3)

+#define PIN_PB08B_ADC_AIN2                40  /**< \brief ADC signal: AIN2 on PB08 mux B */

+#define MUX_PB08B_ADC_AIN2                 1

+#define PINMUX_PB08B_ADC_AIN2      ((PIN_PB08B_ADC_AIN2 << 16) | MUX_PB08B_ADC_AIN2)

+#define PORT_PB08B_ADC_AIN2        (1u <<  8)

+#define PIN_PB09B_ADC_AIN3                41  /**< \brief ADC signal: AIN3 on PB09 mux B */

+#define MUX_PB09B_ADC_AIN3                 1

+#define PINMUX_PB09B_ADC_AIN3      ((PIN_PB09B_ADC_AIN3 << 16) | MUX_PB09B_ADC_AIN3)

+#define PORT_PB09B_ADC_AIN3        (1u <<  9)

+#define PIN_PA04B_ADC_AIN4                 4  /**< \brief ADC signal: AIN4 on PA04 mux B */

+#define MUX_PA04B_ADC_AIN4                 1

+#define PINMUX_PA04B_ADC_AIN4      ((PIN_PA04B_ADC_AIN4 << 16) | MUX_PA04B_ADC_AIN4)

+#define PORT_PA04B_ADC_AIN4        (1u <<  4)

+#define PIN_PA05B_ADC_AIN5                 5  /**< \brief ADC signal: AIN5 on PA05 mux B */

+#define MUX_PA05B_ADC_AIN5                 1

+#define PINMUX_PA05B_ADC_AIN5      ((PIN_PA05B_ADC_AIN5 << 16) | MUX_PA05B_ADC_AIN5)

+#define PORT_PA05B_ADC_AIN5        (1u <<  5)

+#define PIN_PA06B_ADC_AIN6                 6  /**< \brief ADC signal: AIN6 on PA06 mux B */

+#define MUX_PA06B_ADC_AIN6                 1

+#define PINMUX_PA06B_ADC_AIN6      ((PIN_PA06B_ADC_AIN6 << 16) | MUX_PA06B_ADC_AIN6)

+#define PORT_PA06B_ADC_AIN6        (1u <<  6)

+#define PIN_PA07B_ADC_AIN7                 7  /**< \brief ADC signal: AIN7 on PA07 mux B */

+#define MUX_PA07B_ADC_AIN7                 1

+#define PINMUX_PA07B_ADC_AIN7      ((PIN_PA07B_ADC_AIN7 << 16) | MUX_PA07B_ADC_AIN7)

+#define PORT_PA07B_ADC_AIN7        (1u <<  7)

+#define PIN_PB02B_ADC_AIN10               34  /**< \brief ADC signal: AIN10 on PB02 mux B */

+#define MUX_PB02B_ADC_AIN10                1

+#define PINMUX_PB02B_ADC_AIN10     ((PIN_PB02B_ADC_AIN10 << 16) | MUX_PB02B_ADC_AIN10)

+#define PORT_PB02B_ADC_AIN10       (1u <<  2)

+#define PIN_PB03B_ADC_AIN11               35  /**< \brief ADC signal: AIN11 on PB03 mux B */

+#define MUX_PB03B_ADC_AIN11                1

+#define PINMUX_PB03B_ADC_AIN11     ((PIN_PB03B_ADC_AIN11 << 16) | MUX_PB03B_ADC_AIN11)

+#define PORT_PB03B_ADC_AIN11       (1u <<  3)

+#define PIN_PA08B_ADC_AIN16                8  /**< \brief ADC signal: AIN16 on PA08 mux B */

+#define MUX_PA08B_ADC_AIN16                1

+#define PINMUX_PA08B_ADC_AIN16     ((PIN_PA08B_ADC_AIN16 << 16) | MUX_PA08B_ADC_AIN16)

+#define PORT_PA08B_ADC_AIN16       (1u <<  8)

+#define PIN_PA09B_ADC_AIN17                9  /**< \brief ADC signal: AIN17 on PA09 mux B */

+#define MUX_PA09B_ADC_AIN17                1

+#define PINMUX_PA09B_ADC_AIN17     ((PIN_PA09B_ADC_AIN17 << 16) | MUX_PA09B_ADC_AIN17)

+#define PORT_PA09B_ADC_AIN17       (1u <<  9)

+#define PIN_PA10B_ADC_AIN18               10  /**< \brief ADC signal: AIN18 on PA10 mux B */

+#define MUX_PA10B_ADC_AIN18                1

+#define PINMUX_PA10B_ADC_AIN18     ((PIN_PA10B_ADC_AIN18 << 16) | MUX_PA10B_ADC_AIN18)

+#define PORT_PA10B_ADC_AIN18       (1u << 10)

+#define PIN_PA11B_ADC_AIN19               11  /**< \brief ADC signal: AIN19 on PA11 mux B */

+#define MUX_PA11B_ADC_AIN19                1

+#define PINMUX_PA11B_ADC_AIN19     ((PIN_PA11B_ADC_AIN19 << 16) | MUX_PA11B_ADC_AIN19)

+#define PORT_PA11B_ADC_AIN19       (1u << 11)

+#define PIN_PA04B_ADC_VREFP                4  /**< \brief ADC signal: VREFP on PA04 mux B */

+#define MUX_PA04B_ADC_VREFP                1

+#define PINMUX_PA04B_ADC_VREFP     ((PIN_PA04B_ADC_VREFP << 16) | MUX_PA04B_ADC_VREFP)

+#define PORT_PA04B_ADC_VREFP       (1u <<  4)

+/* ========== PORT definition for AC peripheral ========== */

+#define PIN_PA04B_AC_AIN0                  4  /**< \brief AC signal: AIN0 on PA04 mux B */

+#define MUX_PA04B_AC_AIN0                  1

+#define PINMUX_PA04B_AC_AIN0       ((PIN_PA04B_AC_AIN0 << 16) | MUX_PA04B_AC_AIN0)

+#define PORT_PA04B_AC_AIN0         (1u <<  4)

+#define PIN_PA05B_AC_AIN1                  5  /**< \brief AC signal: AIN1 on PA05 mux B */

+#define MUX_PA05B_AC_AIN1                  1

+#define PINMUX_PA05B_AC_AIN1       ((PIN_PA05B_AC_AIN1 << 16) | MUX_PA05B_AC_AIN1)

+#define PORT_PA05B_AC_AIN1         (1u <<  5)

+#define PIN_PA06B_AC_AIN2                  6  /**< \brief AC signal: AIN2 on PA06 mux B */

+#define MUX_PA06B_AC_AIN2                  1

+#define PINMUX_PA06B_AC_AIN2       ((PIN_PA06B_AC_AIN2 << 16) | MUX_PA06B_AC_AIN2)

+#define PORT_PA06B_AC_AIN2         (1u <<  6)

+#define PIN_PA07B_AC_AIN3                  7  /**< \brief AC signal: AIN3 on PA07 mux B */

+#define MUX_PA07B_AC_AIN3                  1

+#define PINMUX_PA07B_AC_AIN3       ((PIN_PA07B_AC_AIN3 << 16) | MUX_PA07B_AC_AIN3)

+#define PORT_PA07B_AC_AIN3         (1u <<  7)

+#define PIN_PA12H_AC_CMP0                 12  /**< \brief AC signal: CMP0 on PA12 mux H */

+#define MUX_PA12H_AC_CMP0                  7

+#define PINMUX_PA12H_AC_CMP0       ((PIN_PA12H_AC_CMP0 << 16) | MUX_PA12H_AC_CMP0)

+#define PORT_PA12H_AC_CMP0         (1u << 12)

+#define PIN_PA18H_AC_CMP0                 18  /**< \brief AC signal: CMP0 on PA18 mux H */

+#define MUX_PA18H_AC_CMP0                  7

+#define PINMUX_PA18H_AC_CMP0       ((PIN_PA18H_AC_CMP0 << 16) | MUX_PA18H_AC_CMP0)

+#define PORT_PA18H_AC_CMP0         (1u << 18)

+#define PIN_PA13H_AC_CMP1                 13  /**< \brief AC signal: CMP1 on PA13 mux H */

+#define MUX_PA13H_AC_CMP1                  7

+#define PINMUX_PA13H_AC_CMP1       ((PIN_PA13H_AC_CMP1 << 16) | MUX_PA13H_AC_CMP1)

+#define PORT_PA13H_AC_CMP1         (1u << 13)

+#define PIN_PA19H_AC_CMP1                 19  /**< \brief AC signal: CMP1 on PA19 mux H */

+#define MUX_PA19H_AC_CMP1                  7

+#define PINMUX_PA19H_AC_CMP1       ((PIN_PA19H_AC_CMP1 << 16) | MUX_PA19H_AC_CMP1)

+#define PORT_PA19H_AC_CMP1         (1u << 19)

+/* ========== PORT definition for DAC peripheral ========== */

+#define PIN_PA02B_DAC_VOUT                 2  /**< \brief DAC signal: VOUT on PA02 mux B */

+#define MUX_PA02B_DAC_VOUT                 1

+#define PINMUX_PA02B_DAC_VOUT      ((PIN_PA02B_DAC_VOUT << 16) | MUX_PA02B_DAC_VOUT)

+#define PORT_PA02B_DAC_VOUT        (1u <<  2)

+#define PIN_PA03B_DAC_VREFP                3  /**< \brief DAC signal: VREFP on PA03 mux B */

+#define MUX_PA03B_DAC_VREFP                1

+#define PINMUX_PA03B_DAC_VREFP     ((PIN_PA03B_DAC_VREFP << 16) | MUX_PA03B_DAC_VREFP)

+#define PORT_PA03B_DAC_VREFP       (1u <<  3)

+

+#endif /* _SAMD20G17_PIO_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20g18.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20g18.h
new file mode 100644
index 0000000..4f36db3
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20g18.h
@@ -0,0 +1,812 @@
+/**

+ * \file

+ *

+ * \brief Peripheral I/O description for SAMD20G18

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20G18_PIO_

+#define _SAMD20G18_PIO_

+

+#define PIN_PA00                           0  /**< \brief Pin Number for PA00 */

+#define PORT_PA00                  (1u <<  0) /**< \brief PORT Mask  for PA00 */

+#define PIN_PA01                           1  /**< \brief Pin Number for PA01 */

+#define PORT_PA01                  (1u <<  1) /**< \brief PORT Mask  for PA01 */

+#define PIN_PA02                           2  /**< \brief Pin Number for PA02 */

+#define PORT_PA02                  (1u <<  2) /**< \brief PORT Mask  for PA02 */

+#define PIN_PA03                           3  /**< \brief Pin Number for PA03 */

+#define PORT_PA03                  (1u <<  3) /**< \brief PORT Mask  for PA03 */

+#define PIN_PA04                           4  /**< \brief Pin Number for PA04 */

+#define PORT_PA04                  (1u <<  4) /**< \brief PORT Mask  for PA04 */

+#define PIN_PA05                           5  /**< \brief Pin Number for PA05 */

+#define PORT_PA05                  (1u <<  5) /**< \brief PORT Mask  for PA05 */

+#define PIN_PA06                           6  /**< \brief Pin Number for PA06 */

+#define PORT_PA06                  (1u <<  6) /**< \brief PORT Mask  for PA06 */

+#define PIN_PA07                           7  /**< \brief Pin Number for PA07 */

+#define PORT_PA07                  (1u <<  7) /**< \brief PORT Mask  for PA07 */

+#define PIN_PA08                           8  /**< \brief Pin Number for PA08 */

+#define PORT_PA08                  (1u <<  8) /**< \brief PORT Mask  for PA08 */

+#define PIN_PA09                           9  /**< \brief Pin Number for PA09 */

+#define PORT_PA09                  (1u <<  9) /**< \brief PORT Mask  for PA09 */

+#define PIN_PA10                          10  /**< \brief Pin Number for PA10 */

+#define PORT_PA10                  (1u << 10) /**< \brief PORT Mask  for PA10 */

+#define PIN_PA11                          11  /**< \brief Pin Number for PA11 */

+#define PORT_PA11                  (1u << 11) /**< \brief PORT Mask  for PA11 */

+#define PIN_PA12                          12  /**< \brief Pin Number for PA12 */

+#define PORT_PA12                  (1u << 12) /**< \brief PORT Mask  for PA12 */

+#define PIN_PA13                          13  /**< \brief Pin Number for PA13 */

+#define PORT_PA13                  (1u << 13) /**< \brief PORT Mask  for PA13 */

+#define PIN_PA14                          14  /**< \brief Pin Number for PA14 */

+#define PORT_PA14                  (1u << 14) /**< \brief PORT Mask  for PA14 */

+#define PIN_PA15                          15  /**< \brief Pin Number for PA15 */

+#define PORT_PA15                  (1u << 15) /**< \brief PORT Mask  for PA15 */

+#define PIN_PA16                          16  /**< \brief Pin Number for PA16 */

+#define PORT_PA16                  (1u << 16) /**< \brief PORT Mask  for PA16 */

+#define PIN_PA17                          17  /**< \brief Pin Number for PA17 */

+#define PORT_PA17                  (1u << 17) /**< \brief PORT Mask  for PA17 */

+#define PIN_PA18                          18  /**< \brief Pin Number for PA18 */

+#define PORT_PA18                  (1u << 18) /**< \brief PORT Mask  for PA18 */

+#define PIN_PA19                          19  /**< \brief Pin Number for PA19 */

+#define PORT_PA19                  (1u << 19) /**< \brief PORT Mask  for PA19 */

+#define PIN_PA20                          20  /**< \brief Pin Number for PA20 */

+#define PORT_PA20                  (1u << 20) /**< \brief PORT Mask  for PA20 */

+#define PIN_PA21                          21  /**< \brief Pin Number for PA21 */

+#define PORT_PA21                  (1u << 21) /**< \brief PORT Mask  for PA21 */

+#define PIN_PA22                          22  /**< \brief Pin Number for PA22 */

+#define PORT_PA22                  (1u << 22) /**< \brief PORT Mask  for PA22 */

+#define PIN_PA23                          23  /**< \brief Pin Number for PA23 */

+#define PORT_PA23                  (1u << 23) /**< \brief PORT Mask  for PA23 */

+#define PIN_PA24                          24  /**< \brief Pin Number for PA24 */

+#define PORT_PA24                  (1u << 24) /**< \brief PORT Mask  for PA24 */

+#define PIN_PA25                          25  /**< \brief Pin Number for PA25 */

+#define PORT_PA25                  (1u << 25) /**< \brief PORT Mask  for PA25 */

+#define PIN_PA27                          27  /**< \brief Pin Number for PA27 */

+#define PORT_PA27                  (1u << 27) /**< \brief PORT Mask  for PA27 */

+#define PIN_PA28                          28  /**< \brief Pin Number for PA28 */

+#define PORT_PA28                  (1u << 28) /**< \brief PORT Mask  for PA28 */

+#define PIN_PA30                          30  /**< \brief Pin Number for PA30 */

+#define PORT_PA30                  (1u << 30) /**< \brief PORT Mask  for PA30 */

+#define PIN_PA31                          31  /**< \brief Pin Number for PA31 */

+#define PORT_PA31                  (1u << 31) /**< \brief PORT Mask  for PA31 */

+#define PIN_PB02                          34  /**< \brief Pin Number for PB02 */

+#define PORT_PB02                  (1u <<  2) /**< \brief PORT Mask  for PB02 */

+#define PIN_PB03                          35  /**< \brief Pin Number for PB03 */

+#define PORT_PB03                  (1u <<  3) /**< \brief PORT Mask  for PB03 */

+#define PIN_PB08                          40  /**< \brief Pin Number for PB08 */

+#define PORT_PB08                  (1u <<  8) /**< \brief PORT Mask  for PB08 */

+#define PIN_PB09                          41  /**< \brief Pin Number for PB09 */

+#define PORT_PB09                  (1u <<  9) /**< \brief PORT Mask  for PB09 */

+#define PIN_PB10                          42  /**< \brief Pin Number for PB10 */

+#define PORT_PB10                  (1u << 10) /**< \brief PORT Mask  for PB10 */

+#define PIN_PB11                          43  /**< \brief Pin Number for PB11 */

+#define PORT_PB11                  (1u << 11) /**< \brief PORT Mask  for PB11 */

+#define PIN_PB22                          54  /**< \brief Pin Number for PB22 */

+#define PORT_PB22                  (1u << 22) /**< \brief PORT Mask  for PB22 */

+#define PIN_PB23                          55  /**< \brief Pin Number for PB23 */

+#define PORT_PB23                  (1u << 23) /**< \brief PORT Mask  for PB23 */

+/* ========== PORT definition for CORE peripheral ========== */

+#define PIN_PA30G_CORE_SWCLK              30  /**< \brief CORE signal: SWCLK on PA30 mux G */

+#define MUX_PA30G_CORE_SWCLK               6

+#define PINMUX_PA30G_CORE_SWCLK    ((PIN_PA30G_CORE_SWCLK << 16) | MUX_PA30G_CORE_SWCLK)

+#define PORT_PA30G_CORE_SWCLK      (1u << 30)

+/* ========== PORT definition for GCLK peripheral ========== */

+#define PIN_PB22H_GCLK_IO0                54  /**< \brief GCLK signal: IO0 on PB22 mux H */

+#define MUX_PB22H_GCLK_IO0                 7

+#define PINMUX_PB22H_GCLK_IO0      ((PIN_PB22H_GCLK_IO0 << 16) | MUX_PB22H_GCLK_IO0)

+#define PORT_PB22H_GCLK_IO0        (1u << 22)

+#define PIN_PA14H_GCLK_IO0                14  /**< \brief GCLK signal: IO0 on PA14 mux H */

+#define MUX_PA14H_GCLK_IO0                 7

+#define PINMUX_PA14H_GCLK_IO0      ((PIN_PA14H_GCLK_IO0 << 16) | MUX_PA14H_GCLK_IO0)

+#define PORT_PA14H_GCLK_IO0        (1u << 14)

+#define PIN_PA27H_GCLK_IO0                27  /**< \brief GCLK signal: IO0 on PA27 mux H */

+#define MUX_PA27H_GCLK_IO0                 7

+#define PINMUX_PA27H_GCLK_IO0      ((PIN_PA27H_GCLK_IO0 << 16) | MUX_PA27H_GCLK_IO0)

+#define PORT_PA27H_GCLK_IO0        (1u << 27)

+#define PIN_PA28H_GCLK_IO0                28  /**< \brief GCLK signal: IO0 on PA28 mux H */

+#define MUX_PA28H_GCLK_IO0                 7

+#define PINMUX_PA28H_GCLK_IO0      ((PIN_PA28H_GCLK_IO0 << 16) | MUX_PA28H_GCLK_IO0)

+#define PORT_PA28H_GCLK_IO0        (1u << 28)

+#define PIN_PA30H_GCLK_IO0                30  /**< \brief GCLK signal: IO0 on PA30 mux H */

+#define MUX_PA30H_GCLK_IO0                 7

+#define PINMUX_PA30H_GCLK_IO0      ((PIN_PA30H_GCLK_IO0 << 16) | MUX_PA30H_GCLK_IO0)

+#define PORT_PA30H_GCLK_IO0        (1u << 30)

+#define PIN_PB23H_GCLK_IO1                55  /**< \brief GCLK signal: IO1 on PB23 mux H */

+#define MUX_PB23H_GCLK_IO1                 7

+#define PINMUX_PB23H_GCLK_IO1      ((PIN_PB23H_GCLK_IO1 << 16) | MUX_PB23H_GCLK_IO1)

+#define PORT_PB23H_GCLK_IO1        (1u << 23)

+#define PIN_PA15H_GCLK_IO1                15  /**< \brief GCLK signal: IO1 on PA15 mux H */

+#define MUX_PA15H_GCLK_IO1                 7

+#define PINMUX_PA15H_GCLK_IO1      ((PIN_PA15H_GCLK_IO1 << 16) | MUX_PA15H_GCLK_IO1)

+#define PORT_PA15H_GCLK_IO1        (1u << 15)

+#define PIN_PA16H_GCLK_IO2                16  /**< \brief GCLK signal: IO2 on PA16 mux H */

+#define MUX_PA16H_GCLK_IO2                 7

+#define PINMUX_PA16H_GCLK_IO2      ((PIN_PA16H_GCLK_IO2 << 16) | MUX_PA16H_GCLK_IO2)

+#define PORT_PA16H_GCLK_IO2        (1u << 16)

+#define PIN_PA17H_GCLK_IO3                17  /**< \brief GCLK signal: IO3 on PA17 mux H */

+#define MUX_PA17H_GCLK_IO3                 7

+#define PINMUX_PA17H_GCLK_IO3      ((PIN_PA17H_GCLK_IO3 << 16) | MUX_PA17H_GCLK_IO3)

+#define PORT_PA17H_GCLK_IO3        (1u << 17)

+#define PIN_PA10H_GCLK_IO4                10  /**< \brief GCLK signal: IO4 on PA10 mux H */

+#define MUX_PA10H_GCLK_IO4                 7

+#define PINMUX_PA10H_GCLK_IO4      ((PIN_PA10H_GCLK_IO4 << 16) | MUX_PA10H_GCLK_IO4)

+#define PORT_PA10H_GCLK_IO4        (1u << 10)

+#define PIN_PA20H_GCLK_IO4                20  /**< \brief GCLK signal: IO4 on PA20 mux H */

+#define MUX_PA20H_GCLK_IO4                 7

+#define PINMUX_PA20H_GCLK_IO4      ((PIN_PA20H_GCLK_IO4 << 16) | MUX_PA20H_GCLK_IO4)

+#define PORT_PA20H_GCLK_IO4        (1u << 20)

+#define PIN_PB10H_GCLK_IO4                42  /**< \brief GCLK signal: IO4 on PB10 mux H */

+#define MUX_PB10H_GCLK_IO4                 7

+#define PINMUX_PB10H_GCLK_IO4      ((PIN_PB10H_GCLK_IO4 << 16) | MUX_PB10H_GCLK_IO4)

+#define PORT_PB10H_GCLK_IO4        (1u << 10)

+#define PIN_PA11H_GCLK_IO5                11  /**< \brief GCLK signal: IO5 on PA11 mux H */

+#define MUX_PA11H_GCLK_IO5                 7

+#define PINMUX_PA11H_GCLK_IO5      ((PIN_PA11H_GCLK_IO5 << 16) | MUX_PA11H_GCLK_IO5)

+#define PORT_PA11H_GCLK_IO5        (1u << 11)

+#define PIN_PA21H_GCLK_IO5                21  /**< \brief GCLK signal: IO5 on PA21 mux H */

+#define MUX_PA21H_GCLK_IO5                 7

+#define PINMUX_PA21H_GCLK_IO5      ((PIN_PA21H_GCLK_IO5 << 16) | MUX_PA21H_GCLK_IO5)

+#define PORT_PA21H_GCLK_IO5        (1u << 21)

+#define PIN_PB11H_GCLK_IO5                43  /**< \brief GCLK signal: IO5 on PB11 mux H */

+#define MUX_PB11H_GCLK_IO5                 7

+#define PINMUX_PB11H_GCLK_IO5      ((PIN_PB11H_GCLK_IO5 << 16) | MUX_PB11H_GCLK_IO5)

+#define PORT_PB11H_GCLK_IO5        (1u << 11)

+#define PIN_PA22H_GCLK_IO6                22  /**< \brief GCLK signal: IO6 on PA22 mux H */

+#define MUX_PA22H_GCLK_IO6                 7

+#define PINMUX_PA22H_GCLK_IO6      ((PIN_PA22H_GCLK_IO6 << 16) | MUX_PA22H_GCLK_IO6)

+#define PORT_PA22H_GCLK_IO6        (1u << 22)

+#define PIN_PA23H_GCLK_IO7                23  /**< \brief GCLK signal: IO7 on PA23 mux H */

+#define MUX_PA23H_GCLK_IO7                 7

+#define PINMUX_PA23H_GCLK_IO7      ((PIN_PA23H_GCLK_IO7 << 16) | MUX_PA23H_GCLK_IO7)

+#define PORT_PA23H_GCLK_IO7        (1u << 23)

+/* ========== PORT definition for EIC peripheral ========== */

+#define PIN_PA16A_EIC_EXTINT0             16  /**< \brief EIC signal: EXTINT0 on PA16 mux A */

+#define MUX_PA16A_EIC_EXTINT0              0

+#define PINMUX_PA16A_EIC_EXTINT0   ((PIN_PA16A_EIC_EXTINT0 << 16) | MUX_PA16A_EIC_EXTINT0)

+#define PORT_PA16A_EIC_EXTINT0     (1u << 16)

+#define PIN_PA00A_EIC_EXTINT0              0  /**< \brief EIC signal: EXTINT0 on PA00 mux A */

+#define MUX_PA00A_EIC_EXTINT0              0

+#define PINMUX_PA00A_EIC_EXTINT0   ((PIN_PA00A_EIC_EXTINT0 << 16) | MUX_PA00A_EIC_EXTINT0)

+#define PORT_PA00A_EIC_EXTINT0     (1u <<  0)

+#define PIN_PA17A_EIC_EXTINT1             17  /**< \brief EIC signal: EXTINT1 on PA17 mux A */

+#define MUX_PA17A_EIC_EXTINT1              0

+#define PINMUX_PA17A_EIC_EXTINT1   ((PIN_PA17A_EIC_EXTINT1 << 16) | MUX_PA17A_EIC_EXTINT1)

+#define PORT_PA17A_EIC_EXTINT1     (1u << 17)

+#define PIN_PA01A_EIC_EXTINT1              1  /**< \brief EIC signal: EXTINT1 on PA01 mux A */

+#define MUX_PA01A_EIC_EXTINT1              0

+#define PINMUX_PA01A_EIC_EXTINT1   ((PIN_PA01A_EIC_EXTINT1 << 16) | MUX_PA01A_EIC_EXTINT1)

+#define PORT_PA01A_EIC_EXTINT1     (1u <<  1)

+#define PIN_PA02A_EIC_EXTINT2              2  /**< \brief EIC signal: EXTINT2 on PA02 mux A */

+#define MUX_PA02A_EIC_EXTINT2              0

+#define PINMUX_PA02A_EIC_EXTINT2   ((PIN_PA02A_EIC_EXTINT2 << 16) | MUX_PA02A_EIC_EXTINT2)

+#define PORT_PA02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA18A_EIC_EXTINT2             18  /**< \brief EIC signal: EXTINT2 on PA18 mux A */

+#define MUX_PA18A_EIC_EXTINT2              0

+#define PINMUX_PA18A_EIC_EXTINT2   ((PIN_PA18A_EIC_EXTINT2 << 16) | MUX_PA18A_EIC_EXTINT2)

+#define PORT_PA18A_EIC_EXTINT2     (1u << 18)

+#define PIN_PB02A_EIC_EXTINT2             34  /**< \brief EIC signal: EXTINT2 on PB02 mux A */

+#define MUX_PB02A_EIC_EXTINT2              0

+#define PINMUX_PB02A_EIC_EXTINT2   ((PIN_PB02A_EIC_EXTINT2 << 16) | MUX_PB02A_EIC_EXTINT2)

+#define PORT_PB02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA03A_EIC_EXTINT3              3  /**< \brief EIC signal: EXTINT3 on PA03 mux A */

+#define MUX_PA03A_EIC_EXTINT3              0

+#define PINMUX_PA03A_EIC_EXTINT3   ((PIN_PA03A_EIC_EXTINT3 << 16) | MUX_PA03A_EIC_EXTINT3)

+#define PORT_PA03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA19A_EIC_EXTINT3             19  /**< \brief EIC signal: EXTINT3 on PA19 mux A */

+#define MUX_PA19A_EIC_EXTINT3              0

+#define PINMUX_PA19A_EIC_EXTINT3   ((PIN_PA19A_EIC_EXTINT3 << 16) | MUX_PA19A_EIC_EXTINT3)

+#define PORT_PA19A_EIC_EXTINT3     (1u << 19)

+#define PIN_PB03A_EIC_EXTINT3             35  /**< \brief EIC signal: EXTINT3 on PB03 mux A */

+#define MUX_PB03A_EIC_EXTINT3              0

+#define PINMUX_PB03A_EIC_EXTINT3   ((PIN_PB03A_EIC_EXTINT3 << 16) | MUX_PB03A_EIC_EXTINT3)

+#define PORT_PB03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA04A_EIC_EXTINT4              4  /**< \brief EIC signal: EXTINT4 on PA04 mux A */

+#define MUX_PA04A_EIC_EXTINT4              0

+#define PINMUX_PA04A_EIC_EXTINT4   ((PIN_PA04A_EIC_EXTINT4 << 16) | MUX_PA04A_EIC_EXTINT4)

+#define PORT_PA04A_EIC_EXTINT4     (1u <<  4)

+#define PIN_PA20A_EIC_EXTINT4             20  /**< \brief EIC signal: EXTINT4 on PA20 mux A */

+#define MUX_PA20A_EIC_EXTINT4              0

+#define PINMUX_PA20A_EIC_EXTINT4   ((PIN_PA20A_EIC_EXTINT4 << 16) | MUX_PA20A_EIC_EXTINT4)

+#define PORT_PA20A_EIC_EXTINT4     (1u << 20)

+#define PIN_PA05A_EIC_EXTINT5              5  /**< \brief EIC signal: EXTINT5 on PA05 mux A */

+#define MUX_PA05A_EIC_EXTINT5              0

+#define PINMUX_PA05A_EIC_EXTINT5   ((PIN_PA05A_EIC_EXTINT5 << 16) | MUX_PA05A_EIC_EXTINT5)

+#define PORT_PA05A_EIC_EXTINT5     (1u <<  5)

+#define PIN_PA21A_EIC_EXTINT5             21  /**< \brief EIC signal: EXTINT5 on PA21 mux A */

+#define MUX_PA21A_EIC_EXTINT5              0

+#define PINMUX_PA21A_EIC_EXTINT5   ((PIN_PA21A_EIC_EXTINT5 << 16) | MUX_PA21A_EIC_EXTINT5)

+#define PORT_PA21A_EIC_EXTINT5     (1u << 21)

+#define PIN_PA06A_EIC_EXTINT6              6  /**< \brief EIC signal: EXTINT6 on PA06 mux A */

+#define MUX_PA06A_EIC_EXTINT6              0

+#define PINMUX_PA06A_EIC_EXTINT6   ((PIN_PA06A_EIC_EXTINT6 << 16) | MUX_PA06A_EIC_EXTINT6)

+#define PORT_PA06A_EIC_EXTINT6     (1u <<  6)

+#define PIN_PA22A_EIC_EXTINT6             22  /**< \brief EIC signal: EXTINT6 on PA22 mux A */

+#define MUX_PA22A_EIC_EXTINT6              0

+#define PINMUX_PA22A_EIC_EXTINT6   ((PIN_PA22A_EIC_EXTINT6 << 16) | MUX_PA22A_EIC_EXTINT6)

+#define PORT_PA22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PB22A_EIC_EXTINT6             54  /**< \brief EIC signal: EXTINT6 on PB22 mux A */

+#define MUX_PB22A_EIC_EXTINT6              0

+#define PINMUX_PB22A_EIC_EXTINT6   ((PIN_PB22A_EIC_EXTINT6 << 16) | MUX_PB22A_EIC_EXTINT6)

+#define PORT_PB22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PA07A_EIC_EXTINT7              7  /**< \brief EIC signal: EXTINT7 on PA07 mux A */

+#define MUX_PA07A_EIC_EXTINT7              0

+#define PINMUX_PA07A_EIC_EXTINT7   ((PIN_PA07A_EIC_EXTINT7 << 16) | MUX_PA07A_EIC_EXTINT7)

+#define PORT_PA07A_EIC_EXTINT7     (1u <<  7)

+#define PIN_PA23A_EIC_EXTINT7             23  /**< \brief EIC signal: EXTINT7 on PA23 mux A */

+#define MUX_PA23A_EIC_EXTINT7              0

+#define PINMUX_PA23A_EIC_EXTINT7   ((PIN_PA23A_EIC_EXTINT7 << 16) | MUX_PA23A_EIC_EXTINT7)

+#define PORT_PA23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PB23A_EIC_EXTINT7             55  /**< \brief EIC signal: EXTINT7 on PB23 mux A */

+#define MUX_PB23A_EIC_EXTINT7              0

+#define PINMUX_PB23A_EIC_EXTINT7   ((PIN_PB23A_EIC_EXTINT7 << 16) | MUX_PB23A_EIC_EXTINT7)

+#define PORT_PB23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PA28A_EIC_EXTINT8             28  /**< \brief EIC signal: EXTINT8 on PA28 mux A */

+#define MUX_PA28A_EIC_EXTINT8              0

+#define PINMUX_PA28A_EIC_EXTINT8   ((PIN_PA28A_EIC_EXTINT8 << 16) | MUX_PA28A_EIC_EXTINT8)

+#define PORT_PA28A_EIC_EXTINT8     (1u << 28)

+#define PIN_PB08A_EIC_EXTINT8             40  /**< \brief EIC signal: EXTINT8 on PB08 mux A */

+#define MUX_PB08A_EIC_EXTINT8              0

+#define PINMUX_PB08A_EIC_EXTINT8   ((PIN_PB08A_EIC_EXTINT8 << 16) | MUX_PB08A_EIC_EXTINT8)

+#define PORT_PB08A_EIC_EXTINT8     (1u <<  8)

+#define PIN_PA09A_EIC_EXTINT9              9  /**< \brief EIC signal: EXTINT9 on PA09 mux A */

+#define MUX_PA09A_EIC_EXTINT9              0

+#define PINMUX_PA09A_EIC_EXTINT9   ((PIN_PA09A_EIC_EXTINT9 << 16) | MUX_PA09A_EIC_EXTINT9)

+#define PORT_PA09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PB09A_EIC_EXTINT9             41  /**< \brief EIC signal: EXTINT9 on PB09 mux A */

+#define MUX_PB09A_EIC_EXTINT9              0

+#define PINMUX_PB09A_EIC_EXTINT9   ((PIN_PB09A_EIC_EXTINT9 << 16) | MUX_PB09A_EIC_EXTINT9)

+#define PORT_PB09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PA10A_EIC_EXTINT10            10  /**< \brief EIC signal: EXTINT10 on PA10 mux A */

+#define MUX_PA10A_EIC_EXTINT10             0

+#define PINMUX_PA10A_EIC_EXTINT10  ((PIN_PA10A_EIC_EXTINT10 << 16) | MUX_PA10A_EIC_EXTINT10)

+#define PORT_PA10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA30A_EIC_EXTINT10            30  /**< \brief EIC signal: EXTINT10 on PA30 mux A */

+#define MUX_PA30A_EIC_EXTINT10             0

+#define PINMUX_PA30A_EIC_EXTINT10  ((PIN_PA30A_EIC_EXTINT10 << 16) | MUX_PA30A_EIC_EXTINT10)

+#define PORT_PA30A_EIC_EXTINT10    (1u << 30)

+#define PIN_PB10A_EIC_EXTINT10            42  /**< \brief EIC signal: EXTINT10 on PB10 mux A */

+#define MUX_PB10A_EIC_EXTINT10             0

+#define PINMUX_PB10A_EIC_EXTINT10  ((PIN_PB10A_EIC_EXTINT10 << 16) | MUX_PB10A_EIC_EXTINT10)

+#define PORT_PB10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA11A_EIC_EXTINT11            11  /**< \brief EIC signal: EXTINT11 on PA11 mux A */

+#define MUX_PA11A_EIC_EXTINT11             0

+#define PINMUX_PA11A_EIC_EXTINT11  ((PIN_PA11A_EIC_EXTINT11 << 16) | MUX_PA11A_EIC_EXTINT11)

+#define PORT_PA11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA31A_EIC_EXTINT11            31  /**< \brief EIC signal: EXTINT11 on PA31 mux A */

+#define MUX_PA31A_EIC_EXTINT11             0

+#define PINMUX_PA31A_EIC_EXTINT11  ((PIN_PA31A_EIC_EXTINT11 << 16) | MUX_PA31A_EIC_EXTINT11)

+#define PORT_PA31A_EIC_EXTINT11    (1u << 31)

+#define PIN_PB11A_EIC_EXTINT11            43  /**< \brief EIC signal: EXTINT11 on PB11 mux A */

+#define MUX_PB11A_EIC_EXTINT11             0

+#define PINMUX_PB11A_EIC_EXTINT11  ((PIN_PB11A_EIC_EXTINT11 << 16) | MUX_PB11A_EIC_EXTINT11)

+#define PORT_PB11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA12A_EIC_EXTINT12            12  /**< \brief EIC signal: EXTINT12 on PA12 mux A */

+#define MUX_PA12A_EIC_EXTINT12             0

+#define PINMUX_PA12A_EIC_EXTINT12  ((PIN_PA12A_EIC_EXTINT12 << 16) | MUX_PA12A_EIC_EXTINT12)

+#define PORT_PA12A_EIC_EXTINT12    (1u << 12)

+#define PIN_PA24A_EIC_EXTINT12            24  /**< \brief EIC signal: EXTINT12 on PA24 mux A */

+#define MUX_PA24A_EIC_EXTINT12             0

+#define PINMUX_PA24A_EIC_EXTINT12  ((PIN_PA24A_EIC_EXTINT12 << 16) | MUX_PA24A_EIC_EXTINT12)

+#define PORT_PA24A_EIC_EXTINT12    (1u << 24)

+#define PIN_PA13A_EIC_EXTINT13            13  /**< \brief EIC signal: EXTINT13 on PA13 mux A */

+#define MUX_PA13A_EIC_EXTINT13             0

+#define PINMUX_PA13A_EIC_EXTINT13  ((PIN_PA13A_EIC_EXTINT13 << 16) | MUX_PA13A_EIC_EXTINT13)

+#define PORT_PA13A_EIC_EXTINT13    (1u << 13)

+#define PIN_PA25A_EIC_EXTINT13            25  /**< \brief EIC signal: EXTINT13 on PA25 mux A */

+#define MUX_PA25A_EIC_EXTINT13             0

+#define PINMUX_PA25A_EIC_EXTINT13  ((PIN_PA25A_EIC_EXTINT13 << 16) | MUX_PA25A_EIC_EXTINT13)

+#define PORT_PA25A_EIC_EXTINT13    (1u << 25)

+#define PIN_PA14A_EIC_EXTINT14            14  /**< \brief EIC signal: EXTINT14 on PA14 mux A */

+#define MUX_PA14A_EIC_EXTINT14             0

+#define PINMUX_PA14A_EIC_EXTINT14  ((PIN_PA14A_EIC_EXTINT14 << 16) | MUX_PA14A_EIC_EXTINT14)

+#define PORT_PA14A_EIC_EXTINT14    (1u << 14)

+#define PIN_PA27A_EIC_EXTINT15            27  /**< \brief EIC signal: EXTINT15 on PA27 mux A */

+#define MUX_PA27A_EIC_EXTINT15             0

+#define PINMUX_PA27A_EIC_EXTINT15  ((PIN_PA27A_EIC_EXTINT15 << 16) | MUX_PA27A_EIC_EXTINT15)

+#define PORT_PA27A_EIC_EXTINT15    (1u << 27)

+#define PIN_PA15A_EIC_EXTINT15            15  /**< \brief EIC signal: EXTINT15 on PA15 mux A */

+#define MUX_PA15A_EIC_EXTINT15             0

+#define PINMUX_PA15A_EIC_EXTINT15  ((PIN_PA15A_EIC_EXTINT15 << 16) | MUX_PA15A_EIC_EXTINT15)

+#define PORT_PA15A_EIC_EXTINT15    (1u << 15)

+#define PIN_PA08A_EIC_NMI                  8  /**< \brief EIC signal: NMI on PA08 mux A */

+#define MUX_PA08A_EIC_NMI                  0

+#define PINMUX_PA08A_EIC_NMI       ((PIN_PA08A_EIC_NMI << 16) | MUX_PA08A_EIC_NMI)

+#define PORT_PA08A_EIC_NMI         (1u <<  8)

+/* ========== PORT definition for SERCOM0 peripheral ========== */

+#define PIN_PA04D_SERCOM0_PAD0             4  /**< \brief SERCOM0 signal: PAD0 on PA04 mux D */

+#define MUX_PA04D_SERCOM0_PAD0             3

+#define PINMUX_PA04D_SERCOM0_PAD0  ((PIN_PA04D_SERCOM0_PAD0 << 16) | MUX_PA04D_SERCOM0_PAD0)

+#define PORT_PA04D_SERCOM0_PAD0    (1u <<  4)

+#define PIN_PA08C_SERCOM0_PAD0             8  /**< \brief SERCOM0 signal: PAD0 on PA08 mux C */

+#define MUX_PA08C_SERCOM0_PAD0             2

+#define PINMUX_PA08C_SERCOM0_PAD0  ((PIN_PA08C_SERCOM0_PAD0 << 16) | MUX_PA08C_SERCOM0_PAD0)

+#define PORT_PA08C_SERCOM0_PAD0    (1u <<  8)

+#define PIN_PA05D_SERCOM0_PAD1             5  /**< \brief SERCOM0 signal: PAD1 on PA05 mux D */

+#define MUX_PA05D_SERCOM0_PAD1             3

+#define PINMUX_PA05D_SERCOM0_PAD1  ((PIN_PA05D_SERCOM0_PAD1 << 16) | MUX_PA05D_SERCOM0_PAD1)

+#define PORT_PA05D_SERCOM0_PAD1    (1u <<  5)

+#define PIN_PA09C_SERCOM0_PAD1             9  /**< \brief SERCOM0 signal: PAD1 on PA09 mux C */

+#define MUX_PA09C_SERCOM0_PAD1             2

+#define PINMUX_PA09C_SERCOM0_PAD1  ((PIN_PA09C_SERCOM0_PAD1 << 16) | MUX_PA09C_SERCOM0_PAD1)

+#define PORT_PA09C_SERCOM0_PAD1    (1u <<  9)

+#define PIN_PA06D_SERCOM0_PAD2             6  /**< \brief SERCOM0 signal: PAD2 on PA06 mux D */

+#define MUX_PA06D_SERCOM0_PAD2             3

+#define PINMUX_PA06D_SERCOM0_PAD2  ((PIN_PA06D_SERCOM0_PAD2 << 16) | MUX_PA06D_SERCOM0_PAD2)

+#define PORT_PA06D_SERCOM0_PAD2    (1u <<  6)

+#define PIN_PA10C_SERCOM0_PAD2            10  /**< \brief SERCOM0 signal: PAD2 on PA10 mux C */

+#define MUX_PA10C_SERCOM0_PAD2             2

+#define PINMUX_PA10C_SERCOM0_PAD2  ((PIN_PA10C_SERCOM0_PAD2 << 16) | MUX_PA10C_SERCOM0_PAD2)

+#define PORT_PA10C_SERCOM0_PAD2    (1u << 10)

+#define PIN_PA07D_SERCOM0_PAD3             7  /**< \brief SERCOM0 signal: PAD3 on PA07 mux D */

+#define MUX_PA07D_SERCOM0_PAD3             3

+#define PINMUX_PA07D_SERCOM0_PAD3  ((PIN_PA07D_SERCOM0_PAD3 << 16) | MUX_PA07D_SERCOM0_PAD3)

+#define PORT_PA07D_SERCOM0_PAD3    (1u <<  7)

+#define PIN_PA11C_SERCOM0_PAD3            11  /**< \brief SERCOM0 signal: PAD3 on PA11 mux C */

+#define MUX_PA11C_SERCOM0_PAD3             2

+#define PINMUX_PA11C_SERCOM0_PAD3  ((PIN_PA11C_SERCOM0_PAD3 << 16) | MUX_PA11C_SERCOM0_PAD3)

+#define PORT_PA11C_SERCOM0_PAD3    (1u << 11)

+/* ========== PORT definition for SERCOM1 peripheral ========== */

+#define PIN_PA16C_SERCOM1_PAD0            16  /**< \brief SERCOM1 signal: PAD0 on PA16 mux C */

+#define MUX_PA16C_SERCOM1_PAD0             2

+#define PINMUX_PA16C_SERCOM1_PAD0  ((PIN_PA16C_SERCOM1_PAD0 << 16) | MUX_PA16C_SERCOM1_PAD0)

+#define PORT_PA16C_SERCOM1_PAD0    (1u << 16)

+#define PIN_PA00D_SERCOM1_PAD0             0  /**< \brief SERCOM1 signal: PAD0 on PA00 mux D */

+#define MUX_PA00D_SERCOM1_PAD0             3

+#define PINMUX_PA00D_SERCOM1_PAD0  ((PIN_PA00D_SERCOM1_PAD0 << 16) | MUX_PA00D_SERCOM1_PAD0)

+#define PORT_PA00D_SERCOM1_PAD0    (1u <<  0)

+#define PIN_PA17C_SERCOM1_PAD1            17  /**< \brief SERCOM1 signal: PAD1 on PA17 mux C */

+#define MUX_PA17C_SERCOM1_PAD1             2

+#define PINMUX_PA17C_SERCOM1_PAD1  ((PIN_PA17C_SERCOM1_PAD1 << 16) | MUX_PA17C_SERCOM1_PAD1)

+#define PORT_PA17C_SERCOM1_PAD1    (1u << 17)

+#define PIN_PA01D_SERCOM1_PAD1             1  /**< \brief SERCOM1 signal: PAD1 on PA01 mux D */

+#define MUX_PA01D_SERCOM1_PAD1             3

+#define PINMUX_PA01D_SERCOM1_PAD1  ((PIN_PA01D_SERCOM1_PAD1 << 16) | MUX_PA01D_SERCOM1_PAD1)

+#define PORT_PA01D_SERCOM1_PAD1    (1u <<  1)

+#define PIN_PA30D_SERCOM1_PAD2            30  /**< \brief SERCOM1 signal: PAD2 on PA30 mux D */

+#define MUX_PA30D_SERCOM1_PAD2             3

+#define PINMUX_PA30D_SERCOM1_PAD2  ((PIN_PA30D_SERCOM1_PAD2 << 16) | MUX_PA30D_SERCOM1_PAD2)

+#define PORT_PA30D_SERCOM1_PAD2    (1u << 30)

+#define PIN_PA18C_SERCOM1_PAD2            18  /**< \brief SERCOM1 signal: PAD2 on PA18 mux C */

+#define MUX_PA18C_SERCOM1_PAD2             2

+#define PINMUX_PA18C_SERCOM1_PAD2  ((PIN_PA18C_SERCOM1_PAD2 << 16) | MUX_PA18C_SERCOM1_PAD2)

+#define PORT_PA18C_SERCOM1_PAD2    (1u << 18)

+#define PIN_PA31D_SERCOM1_PAD3            31  /**< \brief SERCOM1 signal: PAD3 on PA31 mux D */

+#define MUX_PA31D_SERCOM1_PAD3             3

+#define PINMUX_PA31D_SERCOM1_PAD3  ((PIN_PA31D_SERCOM1_PAD3 << 16) | MUX_PA31D_SERCOM1_PAD3)

+#define PORT_PA31D_SERCOM1_PAD3    (1u << 31)

+#define PIN_PA19C_SERCOM1_PAD3            19  /**< \brief SERCOM1 signal: PAD3 on PA19 mux C */

+#define MUX_PA19C_SERCOM1_PAD3             2

+#define PINMUX_PA19C_SERCOM1_PAD3  ((PIN_PA19C_SERCOM1_PAD3 << 16) | MUX_PA19C_SERCOM1_PAD3)

+#define PORT_PA19C_SERCOM1_PAD3    (1u << 19)

+/* ========== PORT definition for SERCOM2 peripheral ========== */

+#define PIN_PA08D_SERCOM2_PAD0             8  /**< \brief SERCOM2 signal: PAD0 on PA08 mux D */

+#define MUX_PA08D_SERCOM2_PAD0             3

+#define PINMUX_PA08D_SERCOM2_PAD0  ((PIN_PA08D_SERCOM2_PAD0 << 16) | MUX_PA08D_SERCOM2_PAD0)

+#define PORT_PA08D_SERCOM2_PAD0    (1u <<  8)

+#define PIN_PA12C_SERCOM2_PAD0            12  /**< \brief SERCOM2 signal: PAD0 on PA12 mux C */

+#define MUX_PA12C_SERCOM2_PAD0             2

+#define PINMUX_PA12C_SERCOM2_PAD0  ((PIN_PA12C_SERCOM2_PAD0 << 16) | MUX_PA12C_SERCOM2_PAD0)

+#define PORT_PA12C_SERCOM2_PAD0    (1u << 12)

+#define PIN_PA09D_SERCOM2_PAD1             9  /**< \brief SERCOM2 signal: PAD1 on PA09 mux D */

+#define MUX_PA09D_SERCOM2_PAD1             3

+#define PINMUX_PA09D_SERCOM2_PAD1  ((PIN_PA09D_SERCOM2_PAD1 << 16) | MUX_PA09D_SERCOM2_PAD1)

+#define PORT_PA09D_SERCOM2_PAD1    (1u <<  9)

+#define PIN_PA13C_SERCOM2_PAD1            13  /**< \brief SERCOM2 signal: PAD1 on PA13 mux C */

+#define MUX_PA13C_SERCOM2_PAD1             2

+#define PINMUX_PA13C_SERCOM2_PAD1  ((PIN_PA13C_SERCOM2_PAD1 << 16) | MUX_PA13C_SERCOM2_PAD1)

+#define PORT_PA13C_SERCOM2_PAD1    (1u << 13)

+#define PIN_PA10D_SERCOM2_PAD2            10  /**< \brief SERCOM2 signal: PAD2 on PA10 mux D */

+#define MUX_PA10D_SERCOM2_PAD2             3

+#define PINMUX_PA10D_SERCOM2_PAD2  ((PIN_PA10D_SERCOM2_PAD2 << 16) | MUX_PA10D_SERCOM2_PAD2)

+#define PORT_PA10D_SERCOM2_PAD2    (1u << 10)

+#define PIN_PA14C_SERCOM2_PAD2            14  /**< \brief SERCOM2 signal: PAD2 on PA14 mux C */

+#define MUX_PA14C_SERCOM2_PAD2             2

+#define PINMUX_PA14C_SERCOM2_PAD2  ((PIN_PA14C_SERCOM2_PAD2 << 16) | MUX_PA14C_SERCOM2_PAD2)

+#define PORT_PA14C_SERCOM2_PAD2    (1u << 14)

+#define PIN_PA11D_SERCOM2_PAD3            11  /**< \brief SERCOM2 signal: PAD3 on PA11 mux D */

+#define MUX_PA11D_SERCOM2_PAD3             3

+#define PINMUX_PA11D_SERCOM2_PAD3  ((PIN_PA11D_SERCOM2_PAD3 << 16) | MUX_PA11D_SERCOM2_PAD3)

+#define PORT_PA11D_SERCOM2_PAD3    (1u << 11)

+#define PIN_PA15C_SERCOM2_PAD3            15  /**< \brief SERCOM2 signal: PAD3 on PA15 mux C */

+#define MUX_PA15C_SERCOM2_PAD3             2

+#define PINMUX_PA15C_SERCOM2_PAD3  ((PIN_PA15C_SERCOM2_PAD3 << 16) | MUX_PA15C_SERCOM2_PAD3)

+#define PORT_PA15C_SERCOM2_PAD3    (1u << 15)

+/* ========== PORT definition for SERCOM3 peripheral ========== */

+#define PIN_PA16D_SERCOM3_PAD0            16  /**< \brief SERCOM3 signal: PAD0 on PA16 mux D */

+#define MUX_PA16D_SERCOM3_PAD0             3

+#define PINMUX_PA16D_SERCOM3_PAD0  ((PIN_PA16D_SERCOM3_PAD0 << 16) | MUX_PA16D_SERCOM3_PAD0)

+#define PORT_PA16D_SERCOM3_PAD0    (1u << 16)

+#define PIN_PA22C_SERCOM3_PAD0            22  /**< \brief SERCOM3 signal: PAD0 on PA22 mux C */

+#define MUX_PA22C_SERCOM3_PAD0             2

+#define PINMUX_PA22C_SERCOM3_PAD0  ((PIN_PA22C_SERCOM3_PAD0 << 16) | MUX_PA22C_SERCOM3_PAD0)

+#define PORT_PA22C_SERCOM3_PAD0    (1u << 22)

+#define PIN_PA17D_SERCOM3_PAD1            17  /**< \brief SERCOM3 signal: PAD1 on PA17 mux D */

+#define MUX_PA17D_SERCOM3_PAD1             3

+#define PINMUX_PA17D_SERCOM3_PAD1  ((PIN_PA17D_SERCOM3_PAD1 << 16) | MUX_PA17D_SERCOM3_PAD1)

+#define PORT_PA17D_SERCOM3_PAD1    (1u << 17)

+#define PIN_PA23C_SERCOM3_PAD1            23  /**< \brief SERCOM3 signal: PAD1 on PA23 mux C */

+#define MUX_PA23C_SERCOM3_PAD1             2

+#define PINMUX_PA23C_SERCOM3_PAD1  ((PIN_PA23C_SERCOM3_PAD1 << 16) | MUX_PA23C_SERCOM3_PAD1)

+#define PORT_PA23C_SERCOM3_PAD1    (1u << 23)

+#define PIN_PA18D_SERCOM3_PAD2            18  /**< \brief SERCOM3 signal: PAD2 on PA18 mux D */

+#define MUX_PA18D_SERCOM3_PAD2             3

+#define PINMUX_PA18D_SERCOM3_PAD2  ((PIN_PA18D_SERCOM3_PAD2 << 16) | MUX_PA18D_SERCOM3_PAD2)

+#define PORT_PA18D_SERCOM3_PAD2    (1u << 18)

+#define PIN_PA20D_SERCOM3_PAD2            20  /**< \brief SERCOM3 signal: PAD2 on PA20 mux D */

+#define MUX_PA20D_SERCOM3_PAD2             3

+#define PINMUX_PA20D_SERCOM3_PAD2  ((PIN_PA20D_SERCOM3_PAD2 << 16) | MUX_PA20D_SERCOM3_PAD2)

+#define PORT_PA20D_SERCOM3_PAD2    (1u << 20)

+#define PIN_PA24C_SERCOM3_PAD2            24  /**< \brief SERCOM3 signal: PAD2 on PA24 mux C */

+#define MUX_PA24C_SERCOM3_PAD2             2

+#define PINMUX_PA24C_SERCOM3_PAD2  ((PIN_PA24C_SERCOM3_PAD2 << 16) | MUX_PA24C_SERCOM3_PAD2)

+#define PORT_PA24C_SERCOM3_PAD2    (1u << 24)

+#define PIN_PA19D_SERCOM3_PAD3            19  /**< \brief SERCOM3 signal: PAD3 on PA19 mux D */

+#define MUX_PA19D_SERCOM3_PAD3             3

+#define PINMUX_PA19D_SERCOM3_PAD3  ((PIN_PA19D_SERCOM3_PAD3 << 16) | MUX_PA19D_SERCOM3_PAD3)

+#define PORT_PA19D_SERCOM3_PAD3    (1u << 19)

+#define PIN_PA21D_SERCOM3_PAD3            21  /**< \brief SERCOM3 signal: PAD3 on PA21 mux D */

+#define MUX_PA21D_SERCOM3_PAD3             3

+#define PINMUX_PA21D_SERCOM3_PAD3  ((PIN_PA21D_SERCOM3_PAD3 << 16) | MUX_PA21D_SERCOM3_PAD3)

+#define PORT_PA21D_SERCOM3_PAD3    (1u << 21)

+#define PIN_PA25C_SERCOM3_PAD3            25  /**< \brief SERCOM3 signal: PAD3 on PA25 mux C */

+#define MUX_PA25C_SERCOM3_PAD3             2

+#define PINMUX_PA25C_SERCOM3_PAD3  ((PIN_PA25C_SERCOM3_PAD3 << 16) | MUX_PA25C_SERCOM3_PAD3)

+#define PORT_PA25C_SERCOM3_PAD3    (1u << 25)

+/* ========== PORT definition for SERCOM4 peripheral ========== */

+#define PIN_PA12D_SERCOM4_PAD0            12  /**< \brief SERCOM4 signal: PAD0 on PA12 mux D */

+#define MUX_PA12D_SERCOM4_PAD0             3

+#define PINMUX_PA12D_SERCOM4_PAD0  ((PIN_PA12D_SERCOM4_PAD0 << 16) | MUX_PA12D_SERCOM4_PAD0)

+#define PORT_PA12D_SERCOM4_PAD0    (1u << 12)

+#define PIN_PB08D_SERCOM4_PAD0            40  /**< \brief SERCOM4 signal: PAD0 on PB08 mux D */

+#define MUX_PB08D_SERCOM4_PAD0             3

+#define PINMUX_PB08D_SERCOM4_PAD0  ((PIN_PB08D_SERCOM4_PAD0 << 16) | MUX_PB08D_SERCOM4_PAD0)

+#define PORT_PB08D_SERCOM4_PAD0    (1u <<  8)

+#define PIN_PA13D_SERCOM4_PAD1            13  /**< \brief SERCOM4 signal: PAD1 on PA13 mux D */

+#define MUX_PA13D_SERCOM4_PAD1             3

+#define PINMUX_PA13D_SERCOM4_PAD1  ((PIN_PA13D_SERCOM4_PAD1 << 16) | MUX_PA13D_SERCOM4_PAD1)

+#define PORT_PA13D_SERCOM4_PAD1    (1u << 13)

+#define PIN_PB09D_SERCOM4_PAD1            41  /**< \brief SERCOM4 signal: PAD1 on PB09 mux D */

+#define MUX_PB09D_SERCOM4_PAD1             3

+#define PINMUX_PB09D_SERCOM4_PAD1  ((PIN_PB09D_SERCOM4_PAD1 << 16) | MUX_PB09D_SERCOM4_PAD1)

+#define PORT_PB09D_SERCOM4_PAD1    (1u <<  9)

+#define PIN_PA14D_SERCOM4_PAD2            14  /**< \brief SERCOM4 signal: PAD2 on PA14 mux D */

+#define MUX_PA14D_SERCOM4_PAD2             3

+#define PINMUX_PA14D_SERCOM4_PAD2  ((PIN_PA14D_SERCOM4_PAD2 << 16) | MUX_PA14D_SERCOM4_PAD2)

+#define PORT_PA14D_SERCOM4_PAD2    (1u << 14)

+#define PIN_PB10D_SERCOM4_PAD2            42  /**< \brief SERCOM4 signal: PAD2 on PB10 mux D */

+#define MUX_PB10D_SERCOM4_PAD2             3

+#define PINMUX_PB10D_SERCOM4_PAD2  ((PIN_PB10D_SERCOM4_PAD2 << 16) | MUX_PB10D_SERCOM4_PAD2)

+#define PORT_PB10D_SERCOM4_PAD2    (1u << 10)

+#define PIN_PA15D_SERCOM4_PAD3            15  /**< \brief SERCOM4 signal: PAD3 on PA15 mux D */

+#define MUX_PA15D_SERCOM4_PAD3             3

+#define PINMUX_PA15D_SERCOM4_PAD3  ((PIN_PA15D_SERCOM4_PAD3 << 16) | MUX_PA15D_SERCOM4_PAD3)

+#define PORT_PA15D_SERCOM4_PAD3    (1u << 15)

+#define PIN_PB11D_SERCOM4_PAD3            43  /**< \brief SERCOM4 signal: PAD3 on PB11 mux D */

+#define MUX_PB11D_SERCOM4_PAD3             3

+#define PINMUX_PB11D_SERCOM4_PAD3  ((PIN_PB11D_SERCOM4_PAD3 << 16) | MUX_PB11D_SERCOM4_PAD3)

+#define PORT_PB11D_SERCOM4_PAD3    (1u << 11)

+/* ========== PORT definition for SERCOM5 peripheral ========== */

+#define PIN_PA22D_SERCOM5_PAD0            22  /**< \brief SERCOM5 signal: PAD0 on PA22 mux D */

+#define MUX_PA22D_SERCOM5_PAD0             3

+#define PINMUX_PA22D_SERCOM5_PAD0  ((PIN_PA22D_SERCOM5_PAD0 << 16) | MUX_PA22D_SERCOM5_PAD0)

+#define PORT_PA22D_SERCOM5_PAD0    (1u << 22)

+#define PIN_PB02D_SERCOM5_PAD0            34  /**< \brief SERCOM5 signal: PAD0 on PB02 mux D */

+#define MUX_PB02D_SERCOM5_PAD0             3

+#define PINMUX_PB02D_SERCOM5_PAD0  ((PIN_PB02D_SERCOM5_PAD0 << 16) | MUX_PB02D_SERCOM5_PAD0)

+#define PORT_PB02D_SERCOM5_PAD0    (1u <<  2)

+#define PIN_PA23D_SERCOM5_PAD1            23  /**< \brief SERCOM5 signal: PAD1 on PA23 mux D */

+#define MUX_PA23D_SERCOM5_PAD1             3

+#define PINMUX_PA23D_SERCOM5_PAD1  ((PIN_PA23D_SERCOM5_PAD1 << 16) | MUX_PA23D_SERCOM5_PAD1)

+#define PORT_PA23D_SERCOM5_PAD1    (1u << 23)

+#define PIN_PB03D_SERCOM5_PAD1            35  /**< \brief SERCOM5 signal: PAD1 on PB03 mux D */

+#define MUX_PB03D_SERCOM5_PAD1             3

+#define PINMUX_PB03D_SERCOM5_PAD1  ((PIN_PB03D_SERCOM5_PAD1 << 16) | MUX_PB03D_SERCOM5_PAD1)

+#define PORT_PB03D_SERCOM5_PAD1    (1u <<  3)

+#define PIN_PA24D_SERCOM5_PAD2            24  /**< \brief SERCOM5 signal: PAD2 on PA24 mux D */

+#define MUX_PA24D_SERCOM5_PAD2             3

+#define PINMUX_PA24D_SERCOM5_PAD2  ((PIN_PA24D_SERCOM5_PAD2 << 16) | MUX_PA24D_SERCOM5_PAD2)

+#define PORT_PA24D_SERCOM5_PAD2    (1u << 24)

+#define PIN_PB22D_SERCOM5_PAD2            54  /**< \brief SERCOM5 signal: PAD2 on PB22 mux D */

+#define MUX_PB22D_SERCOM5_PAD2             3

+#define PINMUX_PB22D_SERCOM5_PAD2  ((PIN_PB22D_SERCOM5_PAD2 << 16) | MUX_PB22D_SERCOM5_PAD2)

+#define PORT_PB22D_SERCOM5_PAD2    (1u << 22)

+#define PIN_PA20C_SERCOM5_PAD2            20  /**< \brief SERCOM5 signal: PAD2 on PA20 mux C */

+#define MUX_PA20C_SERCOM5_PAD2             2

+#define PINMUX_PA20C_SERCOM5_PAD2  ((PIN_PA20C_SERCOM5_PAD2 << 16) | MUX_PA20C_SERCOM5_PAD2)

+#define PORT_PA20C_SERCOM5_PAD2    (1u << 20)

+#define PIN_PA25D_SERCOM5_PAD3            25  /**< \brief SERCOM5 signal: PAD3 on PA25 mux D */

+#define MUX_PA25D_SERCOM5_PAD3             3

+#define PINMUX_PA25D_SERCOM5_PAD3  ((PIN_PA25D_SERCOM5_PAD3 << 16) | MUX_PA25D_SERCOM5_PAD3)

+#define PORT_PA25D_SERCOM5_PAD3    (1u << 25)

+#define PIN_PB23D_SERCOM5_PAD3            55  /**< \brief SERCOM5 signal: PAD3 on PB23 mux D */

+#define MUX_PB23D_SERCOM5_PAD3             3

+#define PINMUX_PB23D_SERCOM5_PAD3  ((PIN_PB23D_SERCOM5_PAD3 << 16) | MUX_PB23D_SERCOM5_PAD3)

+#define PORT_PB23D_SERCOM5_PAD3    (1u << 23)

+#define PIN_PA21C_SERCOM5_PAD3            21  /**< \brief SERCOM5 signal: PAD3 on PA21 mux C */

+#define MUX_PA21C_SERCOM5_PAD3             2

+#define PINMUX_PA21C_SERCOM5_PAD3  ((PIN_PA21C_SERCOM5_PAD3 << 16) | MUX_PA21C_SERCOM5_PAD3)

+#define PORT_PA21C_SERCOM5_PAD3    (1u << 21)

+/* ========== PORT definition for TC0 peripheral ========== */

+#define PIN_PA04F_TC0_WO0                  4  /**< \brief TC0 signal: WO0 on PA04 mux F */

+#define MUX_PA04F_TC0_WO0                  5

+#define PINMUX_PA04F_TC0_WO0       ((PIN_PA04F_TC0_WO0 << 16) | MUX_PA04F_TC0_WO0)

+#define PORT_PA04F_TC0_WO0         (1u <<  4)

+#define PIN_PA08E_TC0_WO0                  8  /**< \brief TC0 signal: WO0 on PA08 mux E */

+#define MUX_PA08E_TC0_WO0                  4

+#define PINMUX_PA08E_TC0_WO0       ((PIN_PA08E_TC0_WO0 << 16) | MUX_PA08E_TC0_WO0)

+#define PORT_PA08E_TC0_WO0         (1u <<  8)

+#define PIN_PA05F_TC0_WO1                  5  /**< \brief TC0 signal: WO1 on PA05 mux F */

+#define MUX_PA05F_TC0_WO1                  5

+#define PINMUX_PA05F_TC0_WO1       ((PIN_PA05F_TC0_WO1 << 16) | MUX_PA05F_TC0_WO1)

+#define PORT_PA05F_TC0_WO1         (1u <<  5)

+#define PIN_PA09E_TC0_WO1                  9  /**< \brief TC0 signal: WO1 on PA09 mux E */

+#define MUX_PA09E_TC0_WO1                  4

+#define PINMUX_PA09E_TC0_WO1       ((PIN_PA09E_TC0_WO1 << 16) | MUX_PA09E_TC0_WO1)

+#define PORT_PA09E_TC0_WO1         (1u <<  9)

+/* ========== PORT definition for TC1 peripheral ========== */

+#define PIN_PA06F_TC1_WO0                  6  /**< \brief TC1 signal: WO0 on PA06 mux F */

+#define MUX_PA06F_TC1_WO0                  5

+#define PINMUX_PA06F_TC1_WO0       ((PIN_PA06F_TC1_WO0 << 16) | MUX_PA06F_TC1_WO0)

+#define PORT_PA06F_TC1_WO0         (1u <<  6)

+#define PIN_PA30F_TC1_WO0                 30  /**< \brief TC1 signal: WO0 on PA30 mux F */

+#define MUX_PA30F_TC1_WO0                  5

+#define PINMUX_PA30F_TC1_WO0       ((PIN_PA30F_TC1_WO0 << 16) | MUX_PA30F_TC1_WO0)

+#define PORT_PA30F_TC1_WO0         (1u << 30)

+#define PIN_PA10E_TC1_WO0                 10  /**< \brief TC1 signal: WO0 on PA10 mux E */

+#define MUX_PA10E_TC1_WO0                  4

+#define PINMUX_PA10E_TC1_WO0       ((PIN_PA10E_TC1_WO0 << 16) | MUX_PA10E_TC1_WO0)

+#define PORT_PA10E_TC1_WO0         (1u << 10)

+#define PIN_PA07F_TC1_WO1                  7  /**< \brief TC1 signal: WO1 on PA07 mux F */

+#define MUX_PA07F_TC1_WO1                  5

+#define PINMUX_PA07F_TC1_WO1       ((PIN_PA07F_TC1_WO1 << 16) | MUX_PA07F_TC1_WO1)

+#define PORT_PA07F_TC1_WO1         (1u <<  7)

+#define PIN_PA31F_TC1_WO1                 31  /**< \brief TC1 signal: WO1 on PA31 mux F */

+#define MUX_PA31F_TC1_WO1                  5

+#define PINMUX_PA31F_TC1_WO1       ((PIN_PA31F_TC1_WO1 << 16) | MUX_PA31F_TC1_WO1)

+#define PORT_PA31F_TC1_WO1         (1u << 31)

+#define PIN_PA11E_TC1_WO1                 11  /**< \brief TC1 signal: WO1 on PA11 mux E */

+#define MUX_PA11E_TC1_WO1                  4

+#define PINMUX_PA11E_TC1_WO1       ((PIN_PA11E_TC1_WO1 << 16) | MUX_PA11E_TC1_WO1)

+#define PORT_PA11E_TC1_WO1         (1u << 11)

+/* ========== PORT definition for TC2 peripheral ========== */

+#define PIN_PA16F_TC2_WO0                 16  /**< \brief TC2 signal: WO0 on PA16 mux F */

+#define MUX_PA16F_TC2_WO0                  5

+#define PINMUX_PA16F_TC2_WO0       ((PIN_PA16F_TC2_WO0 << 16) | MUX_PA16F_TC2_WO0)

+#define PORT_PA16F_TC2_WO0         (1u << 16)

+#define PIN_PA12E_TC2_WO0                 12  /**< \brief TC2 signal: WO0 on PA12 mux E */

+#define MUX_PA12E_TC2_WO0                  4

+#define PINMUX_PA12E_TC2_WO0       ((PIN_PA12E_TC2_WO0 << 16) | MUX_PA12E_TC2_WO0)

+#define PORT_PA12E_TC2_WO0         (1u << 12)

+#define PIN_PA00F_TC2_WO0                  0  /**< \brief TC2 signal: WO0 on PA00 mux F */

+#define MUX_PA00F_TC2_WO0                  5

+#define PINMUX_PA00F_TC2_WO0       ((PIN_PA00F_TC2_WO0 << 16) | MUX_PA00F_TC2_WO0)

+#define PORT_PA00F_TC2_WO0         (1u <<  0)

+#define PIN_PA17F_TC2_WO1                 17  /**< \brief TC2 signal: WO1 on PA17 mux F */

+#define MUX_PA17F_TC2_WO1                  5

+#define PINMUX_PA17F_TC2_WO1       ((PIN_PA17F_TC2_WO1 << 16) | MUX_PA17F_TC2_WO1)

+#define PORT_PA17F_TC2_WO1         (1u << 17)

+#define PIN_PA13E_TC2_WO1                 13  /**< \brief TC2 signal: WO1 on PA13 mux E */

+#define MUX_PA13E_TC2_WO1                  4

+#define PINMUX_PA13E_TC2_WO1       ((PIN_PA13E_TC2_WO1 << 16) | MUX_PA13E_TC2_WO1)

+#define PORT_PA13E_TC2_WO1         (1u << 13)

+#define PIN_PA01F_TC2_WO1                  1  /**< \brief TC2 signal: WO1 on PA01 mux F */

+#define MUX_PA01F_TC2_WO1                  5

+#define PINMUX_PA01F_TC2_WO1       ((PIN_PA01F_TC2_WO1 << 16) | MUX_PA01F_TC2_WO1)

+#define PORT_PA01F_TC2_WO1         (1u <<  1)

+/* ========== PORT definition for TC3 peripheral ========== */

+#define PIN_PA18F_TC3_WO0                 18  /**< \brief TC3 signal: WO0 on PA18 mux F */

+#define MUX_PA18F_TC3_WO0                  5

+#define PINMUX_PA18F_TC3_WO0       ((PIN_PA18F_TC3_WO0 << 16) | MUX_PA18F_TC3_WO0)

+#define PORT_PA18F_TC3_WO0         (1u << 18)

+#define PIN_PA14E_TC3_WO0                 14  /**< \brief TC3 signal: WO0 on PA14 mux E */

+#define MUX_PA14E_TC3_WO0                  4

+#define PINMUX_PA14E_TC3_WO0       ((PIN_PA14E_TC3_WO0 << 16) | MUX_PA14E_TC3_WO0)

+#define PORT_PA14E_TC3_WO0         (1u << 14)

+#define PIN_PA19F_TC3_WO1                 19  /**< \brief TC3 signal: WO1 on PA19 mux F */

+#define MUX_PA19F_TC3_WO1                  5

+#define PINMUX_PA19F_TC3_WO1       ((PIN_PA19F_TC3_WO1 << 16) | MUX_PA19F_TC3_WO1)

+#define PORT_PA19F_TC3_WO1         (1u << 19)

+#define PIN_PA15E_TC3_WO1                 15  /**< \brief TC3 signal: WO1 on PA15 mux E */

+#define MUX_PA15E_TC3_WO1                  4

+#define PINMUX_PA15E_TC3_WO1       ((PIN_PA15E_TC3_WO1 << 16) | MUX_PA15E_TC3_WO1)

+#define PORT_PA15E_TC3_WO1         (1u << 15)

+/* ========== PORT definition for TC4 peripheral ========== */

+#define PIN_PA22F_TC4_WO0                 22  /**< \brief TC4 signal: WO0 on PA22 mux F */

+#define MUX_PA22F_TC4_WO0                  5

+#define PINMUX_PA22F_TC4_WO0       ((PIN_PA22F_TC4_WO0 << 16) | MUX_PA22F_TC4_WO0)

+#define PORT_PA22F_TC4_WO0         (1u << 22)

+#define PIN_PB08F_TC4_WO0                 40  /**< \brief TC4 signal: WO0 on PB08 mux F */

+#define MUX_PB08F_TC4_WO0                  5

+#define PINMUX_PB08F_TC4_WO0       ((PIN_PB08F_TC4_WO0 << 16) | MUX_PB08F_TC4_WO0)

+#define PORT_PB08F_TC4_WO0         (1u <<  8)

+#define PIN_PA23F_TC4_WO1                 23  /**< \brief TC4 signal: WO1 on PA23 mux F */

+#define MUX_PA23F_TC4_WO1                  5

+#define PINMUX_PA23F_TC4_WO1       ((PIN_PA23F_TC4_WO1 << 16) | MUX_PA23F_TC4_WO1)

+#define PORT_PA23F_TC4_WO1         (1u << 23)

+#define PIN_PB09F_TC4_WO1                 41  /**< \brief TC4 signal: WO1 on PB09 mux F */

+#define MUX_PB09F_TC4_WO1                  5

+#define PINMUX_PB09F_TC4_WO1       ((PIN_PB09F_TC4_WO1 << 16) | MUX_PB09F_TC4_WO1)

+#define PORT_PB09F_TC4_WO1         (1u <<  9)

+/* ========== PORT definition for TC5 peripheral ========== */

+#define PIN_PA24F_TC5_WO0                 24  /**< \brief TC5 signal: WO0 on PA24 mux F */

+#define MUX_PA24F_TC5_WO0                  5

+#define PINMUX_PA24F_TC5_WO0       ((PIN_PA24F_TC5_WO0 << 16) | MUX_PA24F_TC5_WO0)

+#define PORT_PA24F_TC5_WO0         (1u << 24)

+#define PIN_PB10F_TC5_WO0                 42  /**< \brief TC5 signal: WO0 on PB10 mux F */

+#define MUX_PB10F_TC5_WO0                  5

+#define PINMUX_PB10F_TC5_WO0       ((PIN_PB10F_TC5_WO0 << 16) | MUX_PB10F_TC5_WO0)

+#define PORT_PB10F_TC5_WO0         (1u << 10)

+#define PIN_PA25F_TC5_WO1                 25  /**< \brief TC5 signal: WO1 on PA25 mux F */

+#define MUX_PA25F_TC5_WO1                  5

+#define PINMUX_PA25F_TC5_WO1       ((PIN_PA25F_TC5_WO1 << 16) | MUX_PA25F_TC5_WO1)

+#define PORT_PA25F_TC5_WO1         (1u << 25)

+#define PIN_PB11F_TC5_WO1                 43  /**< \brief TC5 signal: WO1 on PB11 mux F */

+#define MUX_PB11F_TC5_WO1                  5

+#define PINMUX_PB11F_TC5_WO1       ((PIN_PB11F_TC5_WO1 << 16) | MUX_PB11F_TC5_WO1)

+#define PORT_PB11F_TC5_WO1         (1u << 11)

+/* ========== PORT definition for TC6 peripheral ========== */

+#define PIN_PB02F_TC6_WO0                 34  /**< \brief TC6 signal: WO0 on PB02 mux F */

+#define MUX_PB02F_TC6_WO0                  5

+#define PINMUX_PB02F_TC6_WO0       ((PIN_PB02F_TC6_WO0 << 16) | MUX_PB02F_TC6_WO0)

+#define PORT_PB02F_TC6_WO0         (1u <<  2)

+#define PIN_PB03F_TC6_WO1                 35  /**< \brief TC6 signal: WO1 on PB03 mux F */

+#define MUX_PB03F_TC6_WO1                  5

+#define PINMUX_PB03F_TC6_WO1       ((PIN_PB03F_TC6_WO1 << 16) | MUX_PB03F_TC6_WO1)

+#define PORT_PB03F_TC6_WO1         (1u <<  3)

+/* ========== PORT definition for TC7 peripheral ========== */

+#define PIN_PB22F_TC7_WO0                 54  /**< \brief TC7 signal: WO0 on PB22 mux F */

+#define MUX_PB22F_TC7_WO0                  5

+#define PINMUX_PB22F_TC7_WO0       ((PIN_PB22F_TC7_WO0 << 16) | MUX_PB22F_TC7_WO0)

+#define PORT_PB22F_TC7_WO0         (1u << 22)

+#define PIN_PA20E_TC7_WO0                 20  /**< \brief TC7 signal: WO0 on PA20 mux E */

+#define MUX_PA20E_TC7_WO0                  4

+#define PINMUX_PA20E_TC7_WO0       ((PIN_PA20E_TC7_WO0 << 16) | MUX_PA20E_TC7_WO0)

+#define PORT_PA20E_TC7_WO0         (1u << 20)

+#define PIN_PB23F_TC7_WO1                 55  /**< \brief TC7 signal: WO1 on PB23 mux F */

+#define MUX_PB23F_TC7_WO1                  5

+#define PINMUX_PB23F_TC7_WO1       ((PIN_PB23F_TC7_WO1 << 16) | MUX_PB23F_TC7_WO1)

+#define PORT_PB23F_TC7_WO1         (1u << 23)

+#define PIN_PA21E_TC7_WO1                 21  /**< \brief TC7 signal: WO1 on PA21 mux E */

+#define MUX_PA21E_TC7_WO1                  4

+#define PINMUX_PA21E_TC7_WO1       ((PIN_PA21E_TC7_WO1 << 16) | MUX_PA21E_TC7_WO1)

+#define PORT_PA21E_TC7_WO1         (1u << 21)

+/* ========== PORT definition for ADC peripheral ========== */

+#define PIN_PA02B_ADC_AIN0                 2  /**< \brief ADC signal: AIN0 on PA02 mux B */

+#define MUX_PA02B_ADC_AIN0                 1

+#define PINMUX_PA02B_ADC_AIN0      ((PIN_PA02B_ADC_AIN0 << 16) | MUX_PA02B_ADC_AIN0)

+#define PORT_PA02B_ADC_AIN0        (1u <<  2)

+#define PIN_PA03B_ADC_AIN1                 3  /**< \brief ADC signal: AIN1 on PA03 mux B */

+#define MUX_PA03B_ADC_AIN1                 1

+#define PINMUX_PA03B_ADC_AIN1      ((PIN_PA03B_ADC_AIN1 << 16) | MUX_PA03B_ADC_AIN1)

+#define PORT_PA03B_ADC_AIN1        (1u <<  3)

+#define PIN_PB08B_ADC_AIN2                40  /**< \brief ADC signal: AIN2 on PB08 mux B */

+#define MUX_PB08B_ADC_AIN2                 1

+#define PINMUX_PB08B_ADC_AIN2      ((PIN_PB08B_ADC_AIN2 << 16) | MUX_PB08B_ADC_AIN2)

+#define PORT_PB08B_ADC_AIN2        (1u <<  8)

+#define PIN_PB09B_ADC_AIN3                41  /**< \brief ADC signal: AIN3 on PB09 mux B */

+#define MUX_PB09B_ADC_AIN3                 1

+#define PINMUX_PB09B_ADC_AIN3      ((PIN_PB09B_ADC_AIN3 << 16) | MUX_PB09B_ADC_AIN3)

+#define PORT_PB09B_ADC_AIN3        (1u <<  9)

+#define PIN_PA04B_ADC_AIN4                 4  /**< \brief ADC signal: AIN4 on PA04 mux B */

+#define MUX_PA04B_ADC_AIN4                 1

+#define PINMUX_PA04B_ADC_AIN4      ((PIN_PA04B_ADC_AIN4 << 16) | MUX_PA04B_ADC_AIN4)

+#define PORT_PA04B_ADC_AIN4        (1u <<  4)

+#define PIN_PA05B_ADC_AIN5                 5  /**< \brief ADC signal: AIN5 on PA05 mux B */

+#define MUX_PA05B_ADC_AIN5                 1

+#define PINMUX_PA05B_ADC_AIN5      ((PIN_PA05B_ADC_AIN5 << 16) | MUX_PA05B_ADC_AIN5)

+#define PORT_PA05B_ADC_AIN5        (1u <<  5)

+#define PIN_PA06B_ADC_AIN6                 6  /**< \brief ADC signal: AIN6 on PA06 mux B */

+#define MUX_PA06B_ADC_AIN6                 1

+#define PINMUX_PA06B_ADC_AIN6      ((PIN_PA06B_ADC_AIN6 << 16) | MUX_PA06B_ADC_AIN6)

+#define PORT_PA06B_ADC_AIN6        (1u <<  6)

+#define PIN_PA07B_ADC_AIN7                 7  /**< \brief ADC signal: AIN7 on PA07 mux B */

+#define MUX_PA07B_ADC_AIN7                 1

+#define PINMUX_PA07B_ADC_AIN7      ((PIN_PA07B_ADC_AIN7 << 16) | MUX_PA07B_ADC_AIN7)

+#define PORT_PA07B_ADC_AIN7        (1u <<  7)

+#define PIN_PB02B_ADC_AIN10               34  /**< \brief ADC signal: AIN10 on PB02 mux B */

+#define MUX_PB02B_ADC_AIN10                1

+#define PINMUX_PB02B_ADC_AIN10     ((PIN_PB02B_ADC_AIN10 << 16) | MUX_PB02B_ADC_AIN10)

+#define PORT_PB02B_ADC_AIN10       (1u <<  2)

+#define PIN_PB03B_ADC_AIN11               35  /**< \brief ADC signal: AIN11 on PB03 mux B */

+#define MUX_PB03B_ADC_AIN11                1

+#define PINMUX_PB03B_ADC_AIN11     ((PIN_PB03B_ADC_AIN11 << 16) | MUX_PB03B_ADC_AIN11)

+#define PORT_PB03B_ADC_AIN11       (1u <<  3)

+#define PIN_PA08B_ADC_AIN16                8  /**< \brief ADC signal: AIN16 on PA08 mux B */

+#define MUX_PA08B_ADC_AIN16                1

+#define PINMUX_PA08B_ADC_AIN16     ((PIN_PA08B_ADC_AIN16 << 16) | MUX_PA08B_ADC_AIN16)

+#define PORT_PA08B_ADC_AIN16       (1u <<  8)

+#define PIN_PA09B_ADC_AIN17                9  /**< \brief ADC signal: AIN17 on PA09 mux B */

+#define MUX_PA09B_ADC_AIN17                1

+#define PINMUX_PA09B_ADC_AIN17     ((PIN_PA09B_ADC_AIN17 << 16) | MUX_PA09B_ADC_AIN17)

+#define PORT_PA09B_ADC_AIN17       (1u <<  9)

+#define PIN_PA10B_ADC_AIN18               10  /**< \brief ADC signal: AIN18 on PA10 mux B */

+#define MUX_PA10B_ADC_AIN18                1

+#define PINMUX_PA10B_ADC_AIN18     ((PIN_PA10B_ADC_AIN18 << 16) | MUX_PA10B_ADC_AIN18)

+#define PORT_PA10B_ADC_AIN18       (1u << 10)

+#define PIN_PA11B_ADC_AIN19               11  /**< \brief ADC signal: AIN19 on PA11 mux B */

+#define MUX_PA11B_ADC_AIN19                1

+#define PINMUX_PA11B_ADC_AIN19     ((PIN_PA11B_ADC_AIN19 << 16) | MUX_PA11B_ADC_AIN19)

+#define PORT_PA11B_ADC_AIN19       (1u << 11)

+#define PIN_PA04B_ADC_VREFP                4  /**< \brief ADC signal: VREFP on PA04 mux B */

+#define MUX_PA04B_ADC_VREFP                1

+#define PINMUX_PA04B_ADC_VREFP     ((PIN_PA04B_ADC_VREFP << 16) | MUX_PA04B_ADC_VREFP)

+#define PORT_PA04B_ADC_VREFP       (1u <<  4)

+/* ========== PORT definition for AC peripheral ========== */

+#define PIN_PA04B_AC_AIN0                  4  /**< \brief AC signal: AIN0 on PA04 mux B */

+#define MUX_PA04B_AC_AIN0                  1

+#define PINMUX_PA04B_AC_AIN0       ((PIN_PA04B_AC_AIN0 << 16) | MUX_PA04B_AC_AIN0)

+#define PORT_PA04B_AC_AIN0         (1u <<  4)

+#define PIN_PA05B_AC_AIN1                  5  /**< \brief AC signal: AIN1 on PA05 mux B */

+#define MUX_PA05B_AC_AIN1                  1

+#define PINMUX_PA05B_AC_AIN1       ((PIN_PA05B_AC_AIN1 << 16) | MUX_PA05B_AC_AIN1)

+#define PORT_PA05B_AC_AIN1         (1u <<  5)

+#define PIN_PA06B_AC_AIN2                  6  /**< \brief AC signal: AIN2 on PA06 mux B */

+#define MUX_PA06B_AC_AIN2                  1

+#define PINMUX_PA06B_AC_AIN2       ((PIN_PA06B_AC_AIN2 << 16) | MUX_PA06B_AC_AIN2)

+#define PORT_PA06B_AC_AIN2         (1u <<  6)

+#define PIN_PA07B_AC_AIN3                  7  /**< \brief AC signal: AIN3 on PA07 mux B */

+#define MUX_PA07B_AC_AIN3                  1

+#define PINMUX_PA07B_AC_AIN3       ((PIN_PA07B_AC_AIN3 << 16) | MUX_PA07B_AC_AIN3)

+#define PORT_PA07B_AC_AIN3         (1u <<  7)

+#define PIN_PA12H_AC_CMP0                 12  /**< \brief AC signal: CMP0 on PA12 mux H */

+#define MUX_PA12H_AC_CMP0                  7

+#define PINMUX_PA12H_AC_CMP0       ((PIN_PA12H_AC_CMP0 << 16) | MUX_PA12H_AC_CMP0)

+#define PORT_PA12H_AC_CMP0         (1u << 12)

+#define PIN_PA18H_AC_CMP0                 18  /**< \brief AC signal: CMP0 on PA18 mux H */

+#define MUX_PA18H_AC_CMP0                  7

+#define PINMUX_PA18H_AC_CMP0       ((PIN_PA18H_AC_CMP0 << 16) | MUX_PA18H_AC_CMP0)

+#define PORT_PA18H_AC_CMP0         (1u << 18)

+#define PIN_PA13H_AC_CMP1                 13  /**< \brief AC signal: CMP1 on PA13 mux H */

+#define MUX_PA13H_AC_CMP1                  7

+#define PINMUX_PA13H_AC_CMP1       ((PIN_PA13H_AC_CMP1 << 16) | MUX_PA13H_AC_CMP1)

+#define PORT_PA13H_AC_CMP1         (1u << 13)

+#define PIN_PA19H_AC_CMP1                 19  /**< \brief AC signal: CMP1 on PA19 mux H */

+#define MUX_PA19H_AC_CMP1                  7

+#define PINMUX_PA19H_AC_CMP1       ((PIN_PA19H_AC_CMP1 << 16) | MUX_PA19H_AC_CMP1)

+#define PORT_PA19H_AC_CMP1         (1u << 19)

+/* ========== PORT definition for DAC peripheral ========== */

+#define PIN_PA02B_DAC_VOUT                 2  /**< \brief DAC signal: VOUT on PA02 mux B */

+#define MUX_PA02B_DAC_VOUT                 1

+#define PINMUX_PA02B_DAC_VOUT      ((PIN_PA02B_DAC_VOUT << 16) | MUX_PA02B_DAC_VOUT)

+#define PORT_PA02B_DAC_VOUT        (1u <<  2)

+#define PIN_PA03B_DAC_VREFP                3  /**< \brief DAC signal: VREFP on PA03 mux B */

+#define MUX_PA03B_DAC_VREFP                1

+#define PINMUX_PA03B_DAC_VREFP     ((PIN_PA03B_DAC_VREFP << 16) | MUX_PA03B_DAC_VREFP)

+#define PORT_PA03B_DAC_VREFP       (1u <<  3)

+

+#endif /* _SAMD20G18_PIO_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20j14.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20j14.h
new file mode 100644
index 0000000..82cd6f4
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20j14.h
@@ -0,0 +1,1024 @@
+/**

+ * \file

+ *

+ * \brief Peripheral I/O description for SAMD20J14

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20J14_PIO_

+#define _SAMD20J14_PIO_

+

+#define PIN_PA00                           0  /**< \brief Pin Number for PA00 */

+#define PORT_PA00                  (1u <<  0) /**< \brief PORT Mask  for PA00 */

+#define PIN_PA01                           1  /**< \brief Pin Number for PA01 */

+#define PORT_PA01                  (1u <<  1) /**< \brief PORT Mask  for PA01 */

+#define PIN_PA02                           2  /**< \brief Pin Number for PA02 */

+#define PORT_PA02                  (1u <<  2) /**< \brief PORT Mask  for PA02 */

+#define PIN_PA03                           3  /**< \brief Pin Number for PA03 */

+#define PORT_PA03                  (1u <<  3) /**< \brief PORT Mask  for PA03 */

+#define PIN_PA04                           4  /**< \brief Pin Number for PA04 */

+#define PORT_PA04                  (1u <<  4) /**< \brief PORT Mask  for PA04 */

+#define PIN_PA05                           5  /**< \brief Pin Number for PA05 */

+#define PORT_PA05                  (1u <<  5) /**< \brief PORT Mask  for PA05 */

+#define PIN_PA06                           6  /**< \brief Pin Number for PA06 */

+#define PORT_PA06                  (1u <<  6) /**< \brief PORT Mask  for PA06 */

+#define PIN_PA07                           7  /**< \brief Pin Number for PA07 */

+#define PORT_PA07                  (1u <<  7) /**< \brief PORT Mask  for PA07 */

+#define PIN_PA08                           8  /**< \brief Pin Number for PA08 */

+#define PORT_PA08                  (1u <<  8) /**< \brief PORT Mask  for PA08 */

+#define PIN_PA09                           9  /**< \brief Pin Number for PA09 */

+#define PORT_PA09                  (1u <<  9) /**< \brief PORT Mask  for PA09 */

+#define PIN_PA10                          10  /**< \brief Pin Number for PA10 */

+#define PORT_PA10                  (1u << 10) /**< \brief PORT Mask  for PA10 */

+#define PIN_PA11                          11  /**< \brief Pin Number for PA11 */

+#define PORT_PA11                  (1u << 11) /**< \brief PORT Mask  for PA11 */

+#define PIN_PA12                          12  /**< \brief Pin Number for PA12 */

+#define PORT_PA12                  (1u << 12) /**< \brief PORT Mask  for PA12 */

+#define PIN_PA13                          13  /**< \brief Pin Number for PA13 */

+#define PORT_PA13                  (1u << 13) /**< \brief PORT Mask  for PA13 */

+#define PIN_PA14                          14  /**< \brief Pin Number for PA14 */

+#define PORT_PA14                  (1u << 14) /**< \brief PORT Mask  for PA14 */

+#define PIN_PA15                          15  /**< \brief Pin Number for PA15 */

+#define PORT_PA15                  (1u << 15) /**< \brief PORT Mask  for PA15 */

+#define PIN_PA16                          16  /**< \brief Pin Number for PA16 */

+#define PORT_PA16                  (1u << 16) /**< \brief PORT Mask  for PA16 */

+#define PIN_PA17                          17  /**< \brief Pin Number for PA17 */

+#define PORT_PA17                  (1u << 17) /**< \brief PORT Mask  for PA17 */

+#define PIN_PA18                          18  /**< \brief Pin Number for PA18 */

+#define PORT_PA18                  (1u << 18) /**< \brief PORT Mask  for PA18 */

+#define PIN_PA19                          19  /**< \brief Pin Number for PA19 */

+#define PORT_PA19                  (1u << 19) /**< \brief PORT Mask  for PA19 */

+#define PIN_PA20                          20  /**< \brief Pin Number for PA20 */

+#define PORT_PA20                  (1u << 20) /**< \brief PORT Mask  for PA20 */

+#define PIN_PA21                          21  /**< \brief Pin Number for PA21 */

+#define PORT_PA21                  (1u << 21) /**< \brief PORT Mask  for PA21 */

+#define PIN_PA22                          22  /**< \brief Pin Number for PA22 */

+#define PORT_PA22                  (1u << 22) /**< \brief PORT Mask  for PA22 */

+#define PIN_PA23                          23  /**< \brief Pin Number for PA23 */

+#define PORT_PA23                  (1u << 23) /**< \brief PORT Mask  for PA23 */

+#define PIN_PA24                          24  /**< \brief Pin Number for PA24 */

+#define PORT_PA24                  (1u << 24) /**< \brief PORT Mask  for PA24 */

+#define PIN_PA25                          25  /**< \brief Pin Number for PA25 */

+#define PORT_PA25                  (1u << 25) /**< \brief PORT Mask  for PA25 */

+#define PIN_PA27                          27  /**< \brief Pin Number for PA27 */

+#define PORT_PA27                  (1u << 27) /**< \brief PORT Mask  for PA27 */

+#define PIN_PA28                          28  /**< \brief Pin Number for PA28 */

+#define PORT_PA28                  (1u << 28) /**< \brief PORT Mask  for PA28 */

+#define PIN_PA30                          30  /**< \brief Pin Number for PA30 */

+#define PORT_PA30                  (1u << 30) /**< \brief PORT Mask  for PA30 */

+#define PIN_PA31                          31  /**< \brief Pin Number for PA31 */

+#define PORT_PA31                  (1u << 31) /**< \brief PORT Mask  for PA31 */

+#define PIN_PB00                          32  /**< \brief Pin Number for PB00 */

+#define PORT_PB00                  (1u <<  0) /**< \brief PORT Mask  for PB00 */

+#define PIN_PB01                          33  /**< \brief Pin Number for PB01 */

+#define PORT_PB01                  (1u <<  1) /**< \brief PORT Mask  for PB01 */

+#define PIN_PB02                          34  /**< \brief Pin Number for PB02 */

+#define PORT_PB02                  (1u <<  2) /**< \brief PORT Mask  for PB02 */

+#define PIN_PB03                          35  /**< \brief Pin Number for PB03 */

+#define PORT_PB03                  (1u <<  3) /**< \brief PORT Mask  for PB03 */

+#define PIN_PB04                          36  /**< \brief Pin Number for PB04 */

+#define PORT_PB04                  (1u <<  4) /**< \brief PORT Mask  for PB04 */

+#define PIN_PB05                          37  /**< \brief Pin Number for PB05 */

+#define PORT_PB05                  (1u <<  5) /**< \brief PORT Mask  for PB05 */

+#define PIN_PB06                          38  /**< \brief Pin Number for PB06 */

+#define PORT_PB06                  (1u <<  6) /**< \brief PORT Mask  for PB06 */

+#define PIN_PB07                          39  /**< \brief Pin Number for PB07 */

+#define PORT_PB07                  (1u <<  7) /**< \brief PORT Mask  for PB07 */

+#define PIN_PB08                          40  /**< \brief Pin Number for PB08 */

+#define PORT_PB08                  (1u <<  8) /**< \brief PORT Mask  for PB08 */

+#define PIN_PB09                          41  /**< \brief Pin Number for PB09 */

+#define PORT_PB09                  (1u <<  9) /**< \brief PORT Mask  for PB09 */

+#define PIN_PB10                          42  /**< \brief Pin Number for PB10 */

+#define PORT_PB10                  (1u << 10) /**< \brief PORT Mask  for PB10 */

+#define PIN_PB11                          43  /**< \brief Pin Number for PB11 */

+#define PORT_PB11                  (1u << 11) /**< \brief PORT Mask  for PB11 */

+#define PIN_PB12                          44  /**< \brief Pin Number for PB12 */

+#define PORT_PB12                  (1u << 12) /**< \brief PORT Mask  for PB12 */

+#define PIN_PB13                          45  /**< \brief Pin Number for PB13 */

+#define PORT_PB13                  (1u << 13) /**< \brief PORT Mask  for PB13 */

+#define PIN_PB14                          46  /**< \brief Pin Number for PB14 */

+#define PORT_PB14                  (1u << 14) /**< \brief PORT Mask  for PB14 */

+#define PIN_PB15                          47  /**< \brief Pin Number for PB15 */

+#define PORT_PB15                  (1u << 15) /**< \brief PORT Mask  for PB15 */

+#define PIN_PB16                          48  /**< \brief Pin Number for PB16 */

+#define PORT_PB16                  (1u << 16) /**< \brief PORT Mask  for PB16 */

+#define PIN_PB17                          49  /**< \brief Pin Number for PB17 */

+#define PORT_PB17                  (1u << 17) /**< \brief PORT Mask  for PB17 */

+#define PIN_PB22                          54  /**< \brief Pin Number for PB22 */

+#define PORT_PB22                  (1u << 22) /**< \brief PORT Mask  for PB22 */

+#define PIN_PB23                          55  /**< \brief Pin Number for PB23 */

+#define PORT_PB23                  (1u << 23) /**< \brief PORT Mask  for PB23 */

+#define PIN_PB30                          62  /**< \brief Pin Number for PB30 */

+#define PORT_PB30                  (1u << 30) /**< \brief PORT Mask  for PB30 */

+#define PIN_PB31                          63  /**< \brief Pin Number for PB31 */

+#define PORT_PB31                  (1u << 31) /**< \brief PORT Mask  for PB31 */

+/* ========== PORT definition for CORE peripheral ========== */

+#define PIN_PA30G_CORE_SWCLK              30  /**< \brief CORE signal: SWCLK on PA30 mux G */

+#define MUX_PA30G_CORE_SWCLK               6

+#define PINMUX_PA30G_CORE_SWCLK    ((PIN_PA30G_CORE_SWCLK << 16) | MUX_PA30G_CORE_SWCLK)

+#define PORT_PA30G_CORE_SWCLK      (1u << 30)

+/* ========== PORT definition for GCLK peripheral ========== */

+#define PIN_PB14H_GCLK_IO0                46  /**< \brief GCLK signal: IO0 on PB14 mux H */

+#define MUX_PB14H_GCLK_IO0                 7

+#define PINMUX_PB14H_GCLK_IO0      ((PIN_PB14H_GCLK_IO0 << 16) | MUX_PB14H_GCLK_IO0)

+#define PORT_PB14H_GCLK_IO0        (1u << 14)

+#define PIN_PB22H_GCLK_IO0                54  /**< \brief GCLK signal: IO0 on PB22 mux H */

+#define MUX_PB22H_GCLK_IO0                 7

+#define PINMUX_PB22H_GCLK_IO0      ((PIN_PB22H_GCLK_IO0 << 16) | MUX_PB22H_GCLK_IO0)

+#define PORT_PB22H_GCLK_IO0        (1u << 22)

+#define PIN_PA14H_GCLK_IO0                14  /**< \brief GCLK signal: IO0 on PA14 mux H */

+#define MUX_PA14H_GCLK_IO0                 7

+#define PINMUX_PA14H_GCLK_IO0      ((PIN_PA14H_GCLK_IO0 << 16) | MUX_PA14H_GCLK_IO0)

+#define PORT_PA14H_GCLK_IO0        (1u << 14)

+#define PIN_PA27H_GCLK_IO0                27  /**< \brief GCLK signal: IO0 on PA27 mux H */

+#define MUX_PA27H_GCLK_IO0                 7

+#define PINMUX_PA27H_GCLK_IO0      ((PIN_PA27H_GCLK_IO0 << 16) | MUX_PA27H_GCLK_IO0)

+#define PORT_PA27H_GCLK_IO0        (1u << 27)

+#define PIN_PA28H_GCLK_IO0                28  /**< \brief GCLK signal: IO0 on PA28 mux H */

+#define MUX_PA28H_GCLK_IO0                 7

+#define PINMUX_PA28H_GCLK_IO0      ((PIN_PA28H_GCLK_IO0 << 16) | MUX_PA28H_GCLK_IO0)

+#define PORT_PA28H_GCLK_IO0        (1u << 28)

+#define PIN_PA30H_GCLK_IO0                30  /**< \brief GCLK signal: IO0 on PA30 mux H */

+#define MUX_PA30H_GCLK_IO0                 7

+#define PINMUX_PA30H_GCLK_IO0      ((PIN_PA30H_GCLK_IO0 << 16) | MUX_PA30H_GCLK_IO0)

+#define PORT_PA30H_GCLK_IO0        (1u << 30)

+#define PIN_PB15H_GCLK_IO1                47  /**< \brief GCLK signal: IO1 on PB15 mux H */

+#define MUX_PB15H_GCLK_IO1                 7

+#define PINMUX_PB15H_GCLK_IO1      ((PIN_PB15H_GCLK_IO1 << 16) | MUX_PB15H_GCLK_IO1)

+#define PORT_PB15H_GCLK_IO1        (1u << 15)

+#define PIN_PB23H_GCLK_IO1                55  /**< \brief GCLK signal: IO1 on PB23 mux H */

+#define MUX_PB23H_GCLK_IO1                 7

+#define PINMUX_PB23H_GCLK_IO1      ((PIN_PB23H_GCLK_IO1 << 16) | MUX_PB23H_GCLK_IO1)

+#define PORT_PB23H_GCLK_IO1        (1u << 23)

+#define PIN_PA15H_GCLK_IO1                15  /**< \brief GCLK signal: IO1 on PA15 mux H */

+#define MUX_PA15H_GCLK_IO1                 7

+#define PINMUX_PA15H_GCLK_IO1      ((PIN_PA15H_GCLK_IO1 << 16) | MUX_PA15H_GCLK_IO1)

+#define PORT_PA15H_GCLK_IO1        (1u << 15)

+#define PIN_PB16H_GCLK_IO2                48  /**< \brief GCLK signal: IO2 on PB16 mux H */

+#define MUX_PB16H_GCLK_IO2                 7

+#define PINMUX_PB16H_GCLK_IO2      ((PIN_PB16H_GCLK_IO2 << 16) | MUX_PB16H_GCLK_IO2)

+#define PORT_PB16H_GCLK_IO2        (1u << 16)

+#define PIN_PA16H_GCLK_IO2                16  /**< \brief GCLK signal: IO2 on PA16 mux H */

+#define MUX_PA16H_GCLK_IO2                 7

+#define PINMUX_PA16H_GCLK_IO2      ((PIN_PA16H_GCLK_IO2 << 16) | MUX_PA16H_GCLK_IO2)

+#define PORT_PA16H_GCLK_IO2        (1u << 16)

+#define PIN_PA17H_GCLK_IO3                17  /**< \brief GCLK signal: IO3 on PA17 mux H */

+#define MUX_PA17H_GCLK_IO3                 7

+#define PINMUX_PA17H_GCLK_IO3      ((PIN_PA17H_GCLK_IO3 << 16) | MUX_PA17H_GCLK_IO3)

+#define PORT_PA17H_GCLK_IO3        (1u << 17)

+#define PIN_PB17H_GCLK_IO3                49  /**< \brief GCLK signal: IO3 on PB17 mux H */

+#define MUX_PB17H_GCLK_IO3                 7

+#define PINMUX_PB17H_GCLK_IO3      ((PIN_PB17H_GCLK_IO3 << 16) | MUX_PB17H_GCLK_IO3)

+#define PORT_PB17H_GCLK_IO3        (1u << 17)

+#define PIN_PA10H_GCLK_IO4                10  /**< \brief GCLK signal: IO4 on PA10 mux H */

+#define MUX_PA10H_GCLK_IO4                 7

+#define PINMUX_PA10H_GCLK_IO4      ((PIN_PA10H_GCLK_IO4 << 16) | MUX_PA10H_GCLK_IO4)

+#define PORT_PA10H_GCLK_IO4        (1u << 10)

+#define PIN_PA20H_GCLK_IO4                20  /**< \brief GCLK signal: IO4 on PA20 mux H */

+#define MUX_PA20H_GCLK_IO4                 7

+#define PINMUX_PA20H_GCLK_IO4      ((PIN_PA20H_GCLK_IO4 << 16) | MUX_PA20H_GCLK_IO4)

+#define PORT_PA20H_GCLK_IO4        (1u << 20)

+#define PIN_PB10H_GCLK_IO4                42  /**< \brief GCLK signal: IO4 on PB10 mux H */

+#define MUX_PB10H_GCLK_IO4                 7

+#define PINMUX_PB10H_GCLK_IO4      ((PIN_PB10H_GCLK_IO4 << 16) | MUX_PB10H_GCLK_IO4)

+#define PORT_PB10H_GCLK_IO4        (1u << 10)

+#define PIN_PA11H_GCLK_IO5                11  /**< \brief GCLK signal: IO5 on PA11 mux H */

+#define MUX_PA11H_GCLK_IO5                 7

+#define PINMUX_PA11H_GCLK_IO5      ((PIN_PA11H_GCLK_IO5 << 16) | MUX_PA11H_GCLK_IO5)

+#define PORT_PA11H_GCLK_IO5        (1u << 11)

+#define PIN_PA21H_GCLK_IO5                21  /**< \brief GCLK signal: IO5 on PA21 mux H */

+#define MUX_PA21H_GCLK_IO5                 7

+#define PINMUX_PA21H_GCLK_IO5      ((PIN_PA21H_GCLK_IO5 << 16) | MUX_PA21H_GCLK_IO5)

+#define PORT_PA21H_GCLK_IO5        (1u << 21)

+#define PIN_PB11H_GCLK_IO5                43  /**< \brief GCLK signal: IO5 on PB11 mux H */

+#define MUX_PB11H_GCLK_IO5                 7

+#define PINMUX_PB11H_GCLK_IO5      ((PIN_PB11H_GCLK_IO5 << 16) | MUX_PB11H_GCLK_IO5)

+#define PORT_PB11H_GCLK_IO5        (1u << 11)

+#define PIN_PA22H_GCLK_IO6                22  /**< \brief GCLK signal: IO6 on PA22 mux H */

+#define MUX_PA22H_GCLK_IO6                 7

+#define PINMUX_PA22H_GCLK_IO6      ((PIN_PA22H_GCLK_IO6 << 16) | MUX_PA22H_GCLK_IO6)

+#define PORT_PA22H_GCLK_IO6        (1u << 22)

+#define PIN_PB12H_GCLK_IO6                44  /**< \brief GCLK signal: IO6 on PB12 mux H */

+#define MUX_PB12H_GCLK_IO6                 7

+#define PINMUX_PB12H_GCLK_IO6      ((PIN_PB12H_GCLK_IO6 << 16) | MUX_PB12H_GCLK_IO6)

+#define PORT_PB12H_GCLK_IO6        (1u << 12)

+#define PIN_PA23H_GCLK_IO7                23  /**< \brief GCLK signal: IO7 on PA23 mux H */

+#define MUX_PA23H_GCLK_IO7                 7

+#define PINMUX_PA23H_GCLK_IO7      ((PIN_PA23H_GCLK_IO7 << 16) | MUX_PA23H_GCLK_IO7)

+#define PORT_PA23H_GCLK_IO7        (1u << 23)

+#define PIN_PB13H_GCLK_IO7                45  /**< \brief GCLK signal: IO7 on PB13 mux H */

+#define MUX_PB13H_GCLK_IO7                 7

+#define PINMUX_PB13H_GCLK_IO7      ((PIN_PB13H_GCLK_IO7 << 16) | MUX_PB13H_GCLK_IO7)

+#define PORT_PB13H_GCLK_IO7        (1u << 13)

+/* ========== PORT definition for EIC peripheral ========== */

+#define PIN_PA16A_EIC_EXTINT0             16  /**< \brief EIC signal: EXTINT0 on PA16 mux A */

+#define MUX_PA16A_EIC_EXTINT0              0

+#define PINMUX_PA16A_EIC_EXTINT0   ((PIN_PA16A_EIC_EXTINT0 << 16) | MUX_PA16A_EIC_EXTINT0)

+#define PORT_PA16A_EIC_EXTINT0     (1u << 16)

+#define PIN_PB00A_EIC_EXTINT0             32  /**< \brief EIC signal: EXTINT0 on PB00 mux A */

+#define MUX_PB00A_EIC_EXTINT0              0

+#define PINMUX_PB00A_EIC_EXTINT0   ((PIN_PB00A_EIC_EXTINT0 << 16) | MUX_PB00A_EIC_EXTINT0)

+#define PORT_PB00A_EIC_EXTINT0     (1u <<  0)

+#define PIN_PB16A_EIC_EXTINT0             48  /**< \brief EIC signal: EXTINT0 on PB16 mux A */

+#define MUX_PB16A_EIC_EXTINT0              0

+#define PINMUX_PB16A_EIC_EXTINT0   ((PIN_PB16A_EIC_EXTINT0 << 16) | MUX_PB16A_EIC_EXTINT0)

+#define PORT_PB16A_EIC_EXTINT0     (1u << 16)

+#define PIN_PA00A_EIC_EXTINT0              0  /**< \brief EIC signal: EXTINT0 on PA00 mux A */

+#define MUX_PA00A_EIC_EXTINT0              0

+#define PINMUX_PA00A_EIC_EXTINT0   ((PIN_PA00A_EIC_EXTINT0 << 16) | MUX_PA00A_EIC_EXTINT0)

+#define PORT_PA00A_EIC_EXTINT0     (1u <<  0)

+#define PIN_PA17A_EIC_EXTINT1             17  /**< \brief EIC signal: EXTINT1 on PA17 mux A */

+#define MUX_PA17A_EIC_EXTINT1              0

+#define PINMUX_PA17A_EIC_EXTINT1   ((PIN_PA17A_EIC_EXTINT1 << 16) | MUX_PA17A_EIC_EXTINT1)

+#define PORT_PA17A_EIC_EXTINT1     (1u << 17)

+#define PIN_PB01A_EIC_EXTINT1             33  /**< \brief EIC signal: EXTINT1 on PB01 mux A */

+#define MUX_PB01A_EIC_EXTINT1              0

+#define PINMUX_PB01A_EIC_EXTINT1   ((PIN_PB01A_EIC_EXTINT1 << 16) | MUX_PB01A_EIC_EXTINT1)

+#define PORT_PB01A_EIC_EXTINT1     (1u <<  1)

+#define PIN_PB17A_EIC_EXTINT1             49  /**< \brief EIC signal: EXTINT1 on PB17 mux A */

+#define MUX_PB17A_EIC_EXTINT1              0

+#define PINMUX_PB17A_EIC_EXTINT1   ((PIN_PB17A_EIC_EXTINT1 << 16) | MUX_PB17A_EIC_EXTINT1)

+#define PORT_PB17A_EIC_EXTINT1     (1u << 17)

+#define PIN_PA01A_EIC_EXTINT1              1  /**< \brief EIC signal: EXTINT1 on PA01 mux A */

+#define MUX_PA01A_EIC_EXTINT1              0

+#define PINMUX_PA01A_EIC_EXTINT1   ((PIN_PA01A_EIC_EXTINT1 << 16) | MUX_PA01A_EIC_EXTINT1)

+#define PORT_PA01A_EIC_EXTINT1     (1u <<  1)

+#define PIN_PA02A_EIC_EXTINT2              2  /**< \brief EIC signal: EXTINT2 on PA02 mux A */

+#define MUX_PA02A_EIC_EXTINT2              0

+#define PINMUX_PA02A_EIC_EXTINT2   ((PIN_PA02A_EIC_EXTINT2 << 16) | MUX_PA02A_EIC_EXTINT2)

+#define PORT_PA02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA18A_EIC_EXTINT2             18  /**< \brief EIC signal: EXTINT2 on PA18 mux A */

+#define MUX_PA18A_EIC_EXTINT2              0

+#define PINMUX_PA18A_EIC_EXTINT2   ((PIN_PA18A_EIC_EXTINT2 << 16) | MUX_PA18A_EIC_EXTINT2)

+#define PORT_PA18A_EIC_EXTINT2     (1u << 18)

+#define PIN_PB02A_EIC_EXTINT2             34  /**< \brief EIC signal: EXTINT2 on PB02 mux A */

+#define MUX_PB02A_EIC_EXTINT2              0

+#define PINMUX_PB02A_EIC_EXTINT2   ((PIN_PB02A_EIC_EXTINT2 << 16) | MUX_PB02A_EIC_EXTINT2)

+#define PORT_PB02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA03A_EIC_EXTINT3              3  /**< \brief EIC signal: EXTINT3 on PA03 mux A */

+#define MUX_PA03A_EIC_EXTINT3              0

+#define PINMUX_PA03A_EIC_EXTINT3   ((PIN_PA03A_EIC_EXTINT3 << 16) | MUX_PA03A_EIC_EXTINT3)

+#define PORT_PA03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA19A_EIC_EXTINT3             19  /**< \brief EIC signal: EXTINT3 on PA19 mux A */

+#define MUX_PA19A_EIC_EXTINT3              0

+#define PINMUX_PA19A_EIC_EXTINT3   ((PIN_PA19A_EIC_EXTINT3 << 16) | MUX_PA19A_EIC_EXTINT3)

+#define PORT_PA19A_EIC_EXTINT3     (1u << 19)

+#define PIN_PB03A_EIC_EXTINT3             35  /**< \brief EIC signal: EXTINT3 on PB03 mux A */

+#define MUX_PB03A_EIC_EXTINT3              0

+#define PINMUX_PB03A_EIC_EXTINT3   ((PIN_PB03A_EIC_EXTINT3 << 16) | MUX_PB03A_EIC_EXTINT3)

+#define PORT_PB03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA04A_EIC_EXTINT4              4  /**< \brief EIC signal: EXTINT4 on PA04 mux A */

+#define MUX_PA04A_EIC_EXTINT4              0

+#define PINMUX_PA04A_EIC_EXTINT4   ((PIN_PA04A_EIC_EXTINT4 << 16) | MUX_PA04A_EIC_EXTINT4)

+#define PORT_PA04A_EIC_EXTINT4     (1u <<  4)

+#define PIN_PA20A_EIC_EXTINT4             20  /**< \brief EIC signal: EXTINT4 on PA20 mux A */

+#define MUX_PA20A_EIC_EXTINT4              0

+#define PINMUX_PA20A_EIC_EXTINT4   ((PIN_PA20A_EIC_EXTINT4 << 16) | MUX_PA20A_EIC_EXTINT4)

+#define PORT_PA20A_EIC_EXTINT4     (1u << 20)

+#define PIN_PB04A_EIC_EXTINT4             36  /**< \brief EIC signal: EXTINT4 on PB04 mux A */

+#define MUX_PB04A_EIC_EXTINT4              0

+#define PINMUX_PB04A_EIC_EXTINT4   ((PIN_PB04A_EIC_EXTINT4 << 16) | MUX_PB04A_EIC_EXTINT4)

+#define PORT_PB04A_EIC_EXTINT4     (1u <<  4)

+#define PIN_PA05A_EIC_EXTINT5              5  /**< \brief EIC signal: EXTINT5 on PA05 mux A */

+#define MUX_PA05A_EIC_EXTINT5              0

+#define PINMUX_PA05A_EIC_EXTINT5   ((PIN_PA05A_EIC_EXTINT5 << 16) | MUX_PA05A_EIC_EXTINT5)

+#define PORT_PA05A_EIC_EXTINT5     (1u <<  5)

+#define PIN_PA21A_EIC_EXTINT5             21  /**< \brief EIC signal: EXTINT5 on PA21 mux A */

+#define MUX_PA21A_EIC_EXTINT5              0

+#define PINMUX_PA21A_EIC_EXTINT5   ((PIN_PA21A_EIC_EXTINT5 << 16) | MUX_PA21A_EIC_EXTINT5)

+#define PORT_PA21A_EIC_EXTINT5     (1u << 21)

+#define PIN_PB05A_EIC_EXTINT5             37  /**< \brief EIC signal: EXTINT5 on PB05 mux A */

+#define MUX_PB05A_EIC_EXTINT5              0

+#define PINMUX_PB05A_EIC_EXTINT5   ((PIN_PB05A_EIC_EXTINT5 << 16) | MUX_PB05A_EIC_EXTINT5)

+#define PORT_PB05A_EIC_EXTINT5     (1u <<  5)

+#define PIN_PA06A_EIC_EXTINT6              6  /**< \brief EIC signal: EXTINT6 on PA06 mux A */

+#define MUX_PA06A_EIC_EXTINT6              0

+#define PINMUX_PA06A_EIC_EXTINT6   ((PIN_PA06A_EIC_EXTINT6 << 16) | MUX_PA06A_EIC_EXTINT6)

+#define PORT_PA06A_EIC_EXTINT6     (1u <<  6)

+#define PIN_PA22A_EIC_EXTINT6             22  /**< \brief EIC signal: EXTINT6 on PA22 mux A */

+#define MUX_PA22A_EIC_EXTINT6              0

+#define PINMUX_PA22A_EIC_EXTINT6   ((PIN_PA22A_EIC_EXTINT6 << 16) | MUX_PA22A_EIC_EXTINT6)

+#define PORT_PA22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PB06A_EIC_EXTINT6             38  /**< \brief EIC signal: EXTINT6 on PB06 mux A */

+#define MUX_PB06A_EIC_EXTINT6              0

+#define PINMUX_PB06A_EIC_EXTINT6   ((PIN_PB06A_EIC_EXTINT6 << 16) | MUX_PB06A_EIC_EXTINT6)

+#define PORT_PB06A_EIC_EXTINT6     (1u <<  6)

+#define PIN_PB22A_EIC_EXTINT6             54  /**< \brief EIC signal: EXTINT6 on PB22 mux A */

+#define MUX_PB22A_EIC_EXTINT6              0

+#define PINMUX_PB22A_EIC_EXTINT6   ((PIN_PB22A_EIC_EXTINT6 << 16) | MUX_PB22A_EIC_EXTINT6)

+#define PORT_PB22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PA07A_EIC_EXTINT7              7  /**< \brief EIC signal: EXTINT7 on PA07 mux A */

+#define MUX_PA07A_EIC_EXTINT7              0

+#define PINMUX_PA07A_EIC_EXTINT7   ((PIN_PA07A_EIC_EXTINT7 << 16) | MUX_PA07A_EIC_EXTINT7)

+#define PORT_PA07A_EIC_EXTINT7     (1u <<  7)

+#define PIN_PA23A_EIC_EXTINT7             23  /**< \brief EIC signal: EXTINT7 on PA23 mux A */

+#define MUX_PA23A_EIC_EXTINT7              0

+#define PINMUX_PA23A_EIC_EXTINT7   ((PIN_PA23A_EIC_EXTINT7 << 16) | MUX_PA23A_EIC_EXTINT7)

+#define PORT_PA23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PB07A_EIC_EXTINT7             39  /**< \brief EIC signal: EXTINT7 on PB07 mux A */

+#define MUX_PB07A_EIC_EXTINT7              0

+#define PINMUX_PB07A_EIC_EXTINT7   ((PIN_PB07A_EIC_EXTINT7 << 16) | MUX_PB07A_EIC_EXTINT7)

+#define PORT_PB07A_EIC_EXTINT7     (1u <<  7)

+#define PIN_PB23A_EIC_EXTINT7             55  /**< \brief EIC signal: EXTINT7 on PB23 mux A */

+#define MUX_PB23A_EIC_EXTINT7              0

+#define PINMUX_PB23A_EIC_EXTINT7   ((PIN_PB23A_EIC_EXTINT7 << 16) | MUX_PB23A_EIC_EXTINT7)

+#define PORT_PB23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PA28A_EIC_EXTINT8             28  /**< \brief EIC signal: EXTINT8 on PA28 mux A */

+#define MUX_PA28A_EIC_EXTINT8              0

+#define PINMUX_PA28A_EIC_EXTINT8   ((PIN_PA28A_EIC_EXTINT8 << 16) | MUX_PA28A_EIC_EXTINT8)

+#define PORT_PA28A_EIC_EXTINT8     (1u << 28)

+#define PIN_PB08A_EIC_EXTINT8             40  /**< \brief EIC signal: EXTINT8 on PB08 mux A */

+#define MUX_PB08A_EIC_EXTINT8              0

+#define PINMUX_PB08A_EIC_EXTINT8   ((PIN_PB08A_EIC_EXTINT8 << 16) | MUX_PB08A_EIC_EXTINT8)

+#define PORT_PB08A_EIC_EXTINT8     (1u <<  8)

+#define PIN_PA09A_EIC_EXTINT9              9  /**< \brief EIC signal: EXTINT9 on PA09 mux A */

+#define MUX_PA09A_EIC_EXTINT9              0

+#define PINMUX_PA09A_EIC_EXTINT9   ((PIN_PA09A_EIC_EXTINT9 << 16) | MUX_PA09A_EIC_EXTINT9)

+#define PORT_PA09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PB09A_EIC_EXTINT9             41  /**< \brief EIC signal: EXTINT9 on PB09 mux A */

+#define MUX_PB09A_EIC_EXTINT9              0

+#define PINMUX_PB09A_EIC_EXTINT9   ((PIN_PB09A_EIC_EXTINT9 << 16) | MUX_PB09A_EIC_EXTINT9)

+#define PORT_PB09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PA10A_EIC_EXTINT10            10  /**< \brief EIC signal: EXTINT10 on PA10 mux A */

+#define MUX_PA10A_EIC_EXTINT10             0

+#define PINMUX_PA10A_EIC_EXTINT10  ((PIN_PA10A_EIC_EXTINT10 << 16) | MUX_PA10A_EIC_EXTINT10)

+#define PORT_PA10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA30A_EIC_EXTINT10            30  /**< \brief EIC signal: EXTINT10 on PA30 mux A */

+#define MUX_PA30A_EIC_EXTINT10             0

+#define PINMUX_PA30A_EIC_EXTINT10  ((PIN_PA30A_EIC_EXTINT10 << 16) | MUX_PA30A_EIC_EXTINT10)

+#define PORT_PA30A_EIC_EXTINT10    (1u << 30)

+#define PIN_PB10A_EIC_EXTINT10            42  /**< \brief EIC signal: EXTINT10 on PB10 mux A */

+#define MUX_PB10A_EIC_EXTINT10             0

+#define PINMUX_PB10A_EIC_EXTINT10  ((PIN_PB10A_EIC_EXTINT10 << 16) | MUX_PB10A_EIC_EXTINT10)

+#define PORT_PB10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA11A_EIC_EXTINT11            11  /**< \brief EIC signal: EXTINT11 on PA11 mux A */

+#define MUX_PA11A_EIC_EXTINT11             0

+#define PINMUX_PA11A_EIC_EXTINT11  ((PIN_PA11A_EIC_EXTINT11 << 16) | MUX_PA11A_EIC_EXTINT11)

+#define PORT_PA11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA31A_EIC_EXTINT11            31  /**< \brief EIC signal: EXTINT11 on PA31 mux A */

+#define MUX_PA31A_EIC_EXTINT11             0

+#define PINMUX_PA31A_EIC_EXTINT11  ((PIN_PA31A_EIC_EXTINT11 << 16) | MUX_PA31A_EIC_EXTINT11)

+#define PORT_PA31A_EIC_EXTINT11    (1u << 31)

+#define PIN_PB11A_EIC_EXTINT11            43  /**< \brief EIC signal: EXTINT11 on PB11 mux A */

+#define MUX_PB11A_EIC_EXTINT11             0

+#define PINMUX_PB11A_EIC_EXTINT11  ((PIN_PB11A_EIC_EXTINT11 << 16) | MUX_PB11A_EIC_EXTINT11)

+#define PORT_PB11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA12A_EIC_EXTINT12            12  /**< \brief EIC signal: EXTINT12 on PA12 mux A */

+#define MUX_PA12A_EIC_EXTINT12             0

+#define PINMUX_PA12A_EIC_EXTINT12  ((PIN_PA12A_EIC_EXTINT12 << 16) | MUX_PA12A_EIC_EXTINT12)

+#define PORT_PA12A_EIC_EXTINT12    (1u << 12)

+#define PIN_PA24A_EIC_EXTINT12            24  /**< \brief EIC signal: EXTINT12 on PA24 mux A */

+#define MUX_PA24A_EIC_EXTINT12             0

+#define PINMUX_PA24A_EIC_EXTINT12  ((PIN_PA24A_EIC_EXTINT12 << 16) | MUX_PA24A_EIC_EXTINT12)

+#define PORT_PA24A_EIC_EXTINT12    (1u << 24)

+#define PIN_PB12A_EIC_EXTINT12            44  /**< \brief EIC signal: EXTINT12 on PB12 mux A */

+#define MUX_PB12A_EIC_EXTINT12             0

+#define PINMUX_PB12A_EIC_EXTINT12  ((PIN_PB12A_EIC_EXTINT12 << 16) | MUX_PB12A_EIC_EXTINT12)

+#define PORT_PB12A_EIC_EXTINT12    (1u << 12)

+#define PIN_PA13A_EIC_EXTINT13            13  /**< \brief EIC signal: EXTINT13 on PA13 mux A */

+#define MUX_PA13A_EIC_EXTINT13             0

+#define PINMUX_PA13A_EIC_EXTINT13  ((PIN_PA13A_EIC_EXTINT13 << 16) | MUX_PA13A_EIC_EXTINT13)

+#define PORT_PA13A_EIC_EXTINT13    (1u << 13)

+#define PIN_PA25A_EIC_EXTINT13            25  /**< \brief EIC signal: EXTINT13 on PA25 mux A */

+#define MUX_PA25A_EIC_EXTINT13             0

+#define PINMUX_PA25A_EIC_EXTINT13  ((PIN_PA25A_EIC_EXTINT13 << 16) | MUX_PA25A_EIC_EXTINT13)

+#define PORT_PA25A_EIC_EXTINT13    (1u << 25)

+#define PIN_PB13A_EIC_EXTINT13            45  /**< \brief EIC signal: EXTINT13 on PB13 mux A */

+#define MUX_PB13A_EIC_EXTINT13             0

+#define PINMUX_PB13A_EIC_EXTINT13  ((PIN_PB13A_EIC_EXTINT13 << 16) | MUX_PB13A_EIC_EXTINT13)

+#define PORT_PB13A_EIC_EXTINT13    (1u << 13)

+#define PIN_PB14A_EIC_EXTINT14            46  /**< \brief EIC signal: EXTINT14 on PB14 mux A */

+#define MUX_PB14A_EIC_EXTINT14             0

+#define PINMUX_PB14A_EIC_EXTINT14  ((PIN_PB14A_EIC_EXTINT14 << 16) | MUX_PB14A_EIC_EXTINT14)

+#define PORT_PB14A_EIC_EXTINT14    (1u << 14)

+#define PIN_PB30A_EIC_EXTINT14            62  /**< \brief EIC signal: EXTINT14 on PB30 mux A */

+#define MUX_PB30A_EIC_EXTINT14             0

+#define PINMUX_PB30A_EIC_EXTINT14  ((PIN_PB30A_EIC_EXTINT14 << 16) | MUX_PB30A_EIC_EXTINT14)

+#define PORT_PB30A_EIC_EXTINT14    (1u << 30)

+#define PIN_PA14A_EIC_EXTINT14            14  /**< \brief EIC signal: EXTINT14 on PA14 mux A */

+#define MUX_PA14A_EIC_EXTINT14             0

+#define PINMUX_PA14A_EIC_EXTINT14  ((PIN_PA14A_EIC_EXTINT14 << 16) | MUX_PA14A_EIC_EXTINT14)

+#define PORT_PA14A_EIC_EXTINT14    (1u << 14)

+#define PIN_PA27A_EIC_EXTINT15            27  /**< \brief EIC signal: EXTINT15 on PA27 mux A */

+#define MUX_PA27A_EIC_EXTINT15             0

+#define PINMUX_PA27A_EIC_EXTINT15  ((PIN_PA27A_EIC_EXTINT15 << 16) | MUX_PA27A_EIC_EXTINT15)

+#define PORT_PA27A_EIC_EXTINT15    (1u << 27)

+#define PIN_PB15A_EIC_EXTINT15            47  /**< \brief EIC signal: EXTINT15 on PB15 mux A */

+#define MUX_PB15A_EIC_EXTINT15             0

+#define PINMUX_PB15A_EIC_EXTINT15  ((PIN_PB15A_EIC_EXTINT15 << 16) | MUX_PB15A_EIC_EXTINT15)

+#define PORT_PB15A_EIC_EXTINT15    (1u << 15)

+#define PIN_PB31A_EIC_EXTINT15            63  /**< \brief EIC signal: EXTINT15 on PB31 mux A */

+#define MUX_PB31A_EIC_EXTINT15             0

+#define PINMUX_PB31A_EIC_EXTINT15  ((PIN_PB31A_EIC_EXTINT15 << 16) | MUX_PB31A_EIC_EXTINT15)

+#define PORT_PB31A_EIC_EXTINT15    (1u << 31)

+#define PIN_PA15A_EIC_EXTINT15            15  /**< \brief EIC signal: EXTINT15 on PA15 mux A */

+#define MUX_PA15A_EIC_EXTINT15             0

+#define PINMUX_PA15A_EIC_EXTINT15  ((PIN_PA15A_EIC_EXTINT15 << 16) | MUX_PA15A_EIC_EXTINT15)

+#define PORT_PA15A_EIC_EXTINT15    (1u << 15)

+#define PIN_PA08A_EIC_NMI                  8  /**< \brief EIC signal: NMI on PA08 mux A */

+#define MUX_PA08A_EIC_NMI                  0

+#define PINMUX_PA08A_EIC_NMI       ((PIN_PA08A_EIC_NMI << 16) | MUX_PA08A_EIC_NMI)

+#define PORT_PA08A_EIC_NMI         (1u <<  8)

+/* ========== PORT definition for SERCOM0 peripheral ========== */

+#define PIN_PA04D_SERCOM0_PAD0             4  /**< \brief SERCOM0 signal: PAD0 on PA04 mux D */

+#define MUX_PA04D_SERCOM0_PAD0             3

+#define PINMUX_PA04D_SERCOM0_PAD0  ((PIN_PA04D_SERCOM0_PAD0 << 16) | MUX_PA04D_SERCOM0_PAD0)

+#define PORT_PA04D_SERCOM0_PAD0    (1u <<  4)

+#define PIN_PA08C_SERCOM0_PAD0             8  /**< \brief SERCOM0 signal: PAD0 on PA08 mux C */

+#define MUX_PA08C_SERCOM0_PAD0             2

+#define PINMUX_PA08C_SERCOM0_PAD0  ((PIN_PA08C_SERCOM0_PAD0 << 16) | MUX_PA08C_SERCOM0_PAD0)

+#define PORT_PA08C_SERCOM0_PAD0    (1u <<  8)

+#define PIN_PA05D_SERCOM0_PAD1             5  /**< \brief SERCOM0 signal: PAD1 on PA05 mux D */

+#define MUX_PA05D_SERCOM0_PAD1             3

+#define PINMUX_PA05D_SERCOM0_PAD1  ((PIN_PA05D_SERCOM0_PAD1 << 16) | MUX_PA05D_SERCOM0_PAD1)

+#define PORT_PA05D_SERCOM0_PAD1    (1u <<  5)

+#define PIN_PA09C_SERCOM0_PAD1             9  /**< \brief SERCOM0 signal: PAD1 on PA09 mux C */

+#define MUX_PA09C_SERCOM0_PAD1             2

+#define PINMUX_PA09C_SERCOM0_PAD1  ((PIN_PA09C_SERCOM0_PAD1 << 16) | MUX_PA09C_SERCOM0_PAD1)

+#define PORT_PA09C_SERCOM0_PAD1    (1u <<  9)

+#define PIN_PA06D_SERCOM0_PAD2             6  /**< \brief SERCOM0 signal: PAD2 on PA06 mux D */

+#define MUX_PA06D_SERCOM0_PAD2             3

+#define PINMUX_PA06D_SERCOM0_PAD2  ((PIN_PA06D_SERCOM0_PAD2 << 16) | MUX_PA06D_SERCOM0_PAD2)

+#define PORT_PA06D_SERCOM0_PAD2    (1u <<  6)

+#define PIN_PA10C_SERCOM0_PAD2            10  /**< \brief SERCOM0 signal: PAD2 on PA10 mux C */

+#define MUX_PA10C_SERCOM0_PAD2             2

+#define PINMUX_PA10C_SERCOM0_PAD2  ((PIN_PA10C_SERCOM0_PAD2 << 16) | MUX_PA10C_SERCOM0_PAD2)

+#define PORT_PA10C_SERCOM0_PAD2    (1u << 10)

+#define PIN_PA07D_SERCOM0_PAD3             7  /**< \brief SERCOM0 signal: PAD3 on PA07 mux D */

+#define MUX_PA07D_SERCOM0_PAD3             3

+#define PINMUX_PA07D_SERCOM0_PAD3  ((PIN_PA07D_SERCOM0_PAD3 << 16) | MUX_PA07D_SERCOM0_PAD3)

+#define PORT_PA07D_SERCOM0_PAD3    (1u <<  7)

+#define PIN_PA11C_SERCOM0_PAD3            11  /**< \brief SERCOM0 signal: PAD3 on PA11 mux C */

+#define MUX_PA11C_SERCOM0_PAD3             2

+#define PINMUX_PA11C_SERCOM0_PAD3  ((PIN_PA11C_SERCOM0_PAD3 << 16) | MUX_PA11C_SERCOM0_PAD3)

+#define PORT_PA11C_SERCOM0_PAD3    (1u << 11)

+/* ========== PORT definition for SERCOM1 peripheral ========== */

+#define PIN_PA16C_SERCOM1_PAD0            16  /**< \brief SERCOM1 signal: PAD0 on PA16 mux C */

+#define MUX_PA16C_SERCOM1_PAD0             2

+#define PINMUX_PA16C_SERCOM1_PAD0  ((PIN_PA16C_SERCOM1_PAD0 << 16) | MUX_PA16C_SERCOM1_PAD0)

+#define PORT_PA16C_SERCOM1_PAD0    (1u << 16)

+#define PIN_PA00D_SERCOM1_PAD0             0  /**< \brief SERCOM1 signal: PAD0 on PA00 mux D */

+#define MUX_PA00D_SERCOM1_PAD0             3

+#define PINMUX_PA00D_SERCOM1_PAD0  ((PIN_PA00D_SERCOM1_PAD0 << 16) | MUX_PA00D_SERCOM1_PAD0)

+#define PORT_PA00D_SERCOM1_PAD0    (1u <<  0)

+#define PIN_PA17C_SERCOM1_PAD1            17  /**< \brief SERCOM1 signal: PAD1 on PA17 mux C */

+#define MUX_PA17C_SERCOM1_PAD1             2

+#define PINMUX_PA17C_SERCOM1_PAD1  ((PIN_PA17C_SERCOM1_PAD1 << 16) | MUX_PA17C_SERCOM1_PAD1)

+#define PORT_PA17C_SERCOM1_PAD1    (1u << 17)

+#define PIN_PA01D_SERCOM1_PAD1             1  /**< \brief SERCOM1 signal: PAD1 on PA01 mux D */

+#define MUX_PA01D_SERCOM1_PAD1             3

+#define PINMUX_PA01D_SERCOM1_PAD1  ((PIN_PA01D_SERCOM1_PAD1 << 16) | MUX_PA01D_SERCOM1_PAD1)

+#define PORT_PA01D_SERCOM1_PAD1    (1u <<  1)

+#define PIN_PA30D_SERCOM1_PAD2            30  /**< \brief SERCOM1 signal: PAD2 on PA30 mux D */

+#define MUX_PA30D_SERCOM1_PAD2             3

+#define PINMUX_PA30D_SERCOM1_PAD2  ((PIN_PA30D_SERCOM1_PAD2 << 16) | MUX_PA30D_SERCOM1_PAD2)

+#define PORT_PA30D_SERCOM1_PAD2    (1u << 30)

+#define PIN_PA18C_SERCOM1_PAD2            18  /**< \brief SERCOM1 signal: PAD2 on PA18 mux C */

+#define MUX_PA18C_SERCOM1_PAD2             2

+#define PINMUX_PA18C_SERCOM1_PAD2  ((PIN_PA18C_SERCOM1_PAD2 << 16) | MUX_PA18C_SERCOM1_PAD2)

+#define PORT_PA18C_SERCOM1_PAD2    (1u << 18)

+#define PIN_PA31D_SERCOM1_PAD3            31  /**< \brief SERCOM1 signal: PAD3 on PA31 mux D */

+#define MUX_PA31D_SERCOM1_PAD3             3

+#define PINMUX_PA31D_SERCOM1_PAD3  ((PIN_PA31D_SERCOM1_PAD3 << 16) | MUX_PA31D_SERCOM1_PAD3)

+#define PORT_PA31D_SERCOM1_PAD3    (1u << 31)

+#define PIN_PA19C_SERCOM1_PAD3            19  /**< \brief SERCOM1 signal: PAD3 on PA19 mux C */

+#define MUX_PA19C_SERCOM1_PAD3             2

+#define PINMUX_PA19C_SERCOM1_PAD3  ((PIN_PA19C_SERCOM1_PAD3 << 16) | MUX_PA19C_SERCOM1_PAD3)

+#define PORT_PA19C_SERCOM1_PAD3    (1u << 19)

+/* ========== PORT definition for SERCOM2 peripheral ========== */

+#define PIN_PA08D_SERCOM2_PAD0             8  /**< \brief SERCOM2 signal: PAD0 on PA08 mux D */

+#define MUX_PA08D_SERCOM2_PAD0             3

+#define PINMUX_PA08D_SERCOM2_PAD0  ((PIN_PA08D_SERCOM2_PAD0 << 16) | MUX_PA08D_SERCOM2_PAD0)

+#define PORT_PA08D_SERCOM2_PAD0    (1u <<  8)

+#define PIN_PA12C_SERCOM2_PAD0            12  /**< \brief SERCOM2 signal: PAD0 on PA12 mux C */

+#define MUX_PA12C_SERCOM2_PAD0             2

+#define PINMUX_PA12C_SERCOM2_PAD0  ((PIN_PA12C_SERCOM2_PAD0 << 16) | MUX_PA12C_SERCOM2_PAD0)

+#define PORT_PA12C_SERCOM2_PAD0    (1u << 12)

+#define PIN_PA09D_SERCOM2_PAD1             9  /**< \brief SERCOM2 signal: PAD1 on PA09 mux D */

+#define MUX_PA09D_SERCOM2_PAD1             3

+#define PINMUX_PA09D_SERCOM2_PAD1  ((PIN_PA09D_SERCOM2_PAD1 << 16) | MUX_PA09D_SERCOM2_PAD1)

+#define PORT_PA09D_SERCOM2_PAD1    (1u <<  9)

+#define PIN_PA13C_SERCOM2_PAD1            13  /**< \brief SERCOM2 signal: PAD1 on PA13 mux C */

+#define MUX_PA13C_SERCOM2_PAD1             2

+#define PINMUX_PA13C_SERCOM2_PAD1  ((PIN_PA13C_SERCOM2_PAD1 << 16) | MUX_PA13C_SERCOM2_PAD1)

+#define PORT_PA13C_SERCOM2_PAD1    (1u << 13)

+#define PIN_PA10D_SERCOM2_PAD2            10  /**< \brief SERCOM2 signal: PAD2 on PA10 mux D */

+#define MUX_PA10D_SERCOM2_PAD2             3

+#define PINMUX_PA10D_SERCOM2_PAD2  ((PIN_PA10D_SERCOM2_PAD2 << 16) | MUX_PA10D_SERCOM2_PAD2)

+#define PORT_PA10D_SERCOM2_PAD2    (1u << 10)

+#define PIN_PA14C_SERCOM2_PAD2            14  /**< \brief SERCOM2 signal: PAD2 on PA14 mux C */

+#define MUX_PA14C_SERCOM2_PAD2             2

+#define PINMUX_PA14C_SERCOM2_PAD2  ((PIN_PA14C_SERCOM2_PAD2 << 16) | MUX_PA14C_SERCOM2_PAD2)

+#define PORT_PA14C_SERCOM2_PAD2    (1u << 14)

+#define PIN_PA11D_SERCOM2_PAD3            11  /**< \brief SERCOM2 signal: PAD3 on PA11 mux D */

+#define MUX_PA11D_SERCOM2_PAD3             3

+#define PINMUX_PA11D_SERCOM2_PAD3  ((PIN_PA11D_SERCOM2_PAD3 << 16) | MUX_PA11D_SERCOM2_PAD3)

+#define PORT_PA11D_SERCOM2_PAD3    (1u << 11)

+#define PIN_PA15C_SERCOM2_PAD3            15  /**< \brief SERCOM2 signal: PAD3 on PA15 mux C */

+#define MUX_PA15C_SERCOM2_PAD3             2

+#define PINMUX_PA15C_SERCOM2_PAD3  ((PIN_PA15C_SERCOM2_PAD3 << 16) | MUX_PA15C_SERCOM2_PAD3)

+#define PORT_PA15C_SERCOM2_PAD3    (1u << 15)

+/* ========== PORT definition for SERCOM3 peripheral ========== */

+#define PIN_PA16D_SERCOM3_PAD0            16  /**< \brief SERCOM3 signal: PAD0 on PA16 mux D */

+#define MUX_PA16D_SERCOM3_PAD0             3

+#define PINMUX_PA16D_SERCOM3_PAD0  ((PIN_PA16D_SERCOM3_PAD0 << 16) | MUX_PA16D_SERCOM3_PAD0)

+#define PORT_PA16D_SERCOM3_PAD0    (1u << 16)

+#define PIN_PA22C_SERCOM3_PAD0            22  /**< \brief SERCOM3 signal: PAD0 on PA22 mux C */

+#define MUX_PA22C_SERCOM3_PAD0             2

+#define PINMUX_PA22C_SERCOM3_PAD0  ((PIN_PA22C_SERCOM3_PAD0 << 16) | MUX_PA22C_SERCOM3_PAD0)

+#define PORT_PA22C_SERCOM3_PAD0    (1u << 22)

+#define PIN_PA17D_SERCOM3_PAD1            17  /**< \brief SERCOM3 signal: PAD1 on PA17 mux D */

+#define MUX_PA17D_SERCOM3_PAD1             3

+#define PINMUX_PA17D_SERCOM3_PAD1  ((PIN_PA17D_SERCOM3_PAD1 << 16) | MUX_PA17D_SERCOM3_PAD1)

+#define PORT_PA17D_SERCOM3_PAD1    (1u << 17)

+#define PIN_PA23C_SERCOM3_PAD1            23  /**< \brief SERCOM3 signal: PAD1 on PA23 mux C */

+#define MUX_PA23C_SERCOM3_PAD1             2

+#define PINMUX_PA23C_SERCOM3_PAD1  ((PIN_PA23C_SERCOM3_PAD1 << 16) | MUX_PA23C_SERCOM3_PAD1)

+#define PORT_PA23C_SERCOM3_PAD1    (1u << 23)

+#define PIN_PA18D_SERCOM3_PAD2            18  /**< \brief SERCOM3 signal: PAD2 on PA18 mux D */

+#define MUX_PA18D_SERCOM3_PAD2             3

+#define PINMUX_PA18D_SERCOM3_PAD2  ((PIN_PA18D_SERCOM3_PAD2 << 16) | MUX_PA18D_SERCOM3_PAD2)

+#define PORT_PA18D_SERCOM3_PAD2    (1u << 18)

+#define PIN_PA20D_SERCOM3_PAD2            20  /**< \brief SERCOM3 signal: PAD2 on PA20 mux D */

+#define MUX_PA20D_SERCOM3_PAD2             3

+#define PINMUX_PA20D_SERCOM3_PAD2  ((PIN_PA20D_SERCOM3_PAD2 << 16) | MUX_PA20D_SERCOM3_PAD2)

+#define PORT_PA20D_SERCOM3_PAD2    (1u << 20)

+#define PIN_PA24C_SERCOM3_PAD2            24  /**< \brief SERCOM3 signal: PAD2 on PA24 mux C */

+#define MUX_PA24C_SERCOM3_PAD2             2

+#define PINMUX_PA24C_SERCOM3_PAD2  ((PIN_PA24C_SERCOM3_PAD2 << 16) | MUX_PA24C_SERCOM3_PAD2)

+#define PORT_PA24C_SERCOM3_PAD2    (1u << 24)

+#define PIN_PA19D_SERCOM3_PAD3            19  /**< \brief SERCOM3 signal: PAD3 on PA19 mux D */

+#define MUX_PA19D_SERCOM3_PAD3             3

+#define PINMUX_PA19D_SERCOM3_PAD3  ((PIN_PA19D_SERCOM3_PAD3 << 16) | MUX_PA19D_SERCOM3_PAD3)

+#define PORT_PA19D_SERCOM3_PAD3    (1u << 19)

+#define PIN_PA21D_SERCOM3_PAD3            21  /**< \brief SERCOM3 signal: PAD3 on PA21 mux D */

+#define MUX_PA21D_SERCOM3_PAD3             3

+#define PINMUX_PA21D_SERCOM3_PAD3  ((PIN_PA21D_SERCOM3_PAD3 << 16) | MUX_PA21D_SERCOM3_PAD3)

+#define PORT_PA21D_SERCOM3_PAD3    (1u << 21)

+#define PIN_PA25C_SERCOM3_PAD3            25  /**< \brief SERCOM3 signal: PAD3 on PA25 mux C */

+#define MUX_PA25C_SERCOM3_PAD3             2

+#define PINMUX_PA25C_SERCOM3_PAD3  ((PIN_PA25C_SERCOM3_PAD3 << 16) | MUX_PA25C_SERCOM3_PAD3)

+#define PORT_PA25C_SERCOM3_PAD3    (1u << 25)

+/* ========== PORT definition for SERCOM4 peripheral ========== */

+#define PIN_PA12D_SERCOM4_PAD0            12  /**< \brief SERCOM4 signal: PAD0 on PA12 mux D */

+#define MUX_PA12D_SERCOM4_PAD0             3

+#define PINMUX_PA12D_SERCOM4_PAD0  ((PIN_PA12D_SERCOM4_PAD0 << 16) | MUX_PA12D_SERCOM4_PAD0)

+#define PORT_PA12D_SERCOM4_PAD0    (1u << 12)

+#define PIN_PB08D_SERCOM4_PAD0            40  /**< \brief SERCOM4 signal: PAD0 on PB08 mux D */

+#define MUX_PB08D_SERCOM4_PAD0             3

+#define PINMUX_PB08D_SERCOM4_PAD0  ((PIN_PB08D_SERCOM4_PAD0 << 16) | MUX_PB08D_SERCOM4_PAD0)

+#define PORT_PB08D_SERCOM4_PAD0    (1u <<  8)

+#define PIN_PB12C_SERCOM4_PAD0            44  /**< \brief SERCOM4 signal: PAD0 on PB12 mux C */

+#define MUX_PB12C_SERCOM4_PAD0             2

+#define PINMUX_PB12C_SERCOM4_PAD0  ((PIN_PB12C_SERCOM4_PAD0 << 16) | MUX_PB12C_SERCOM4_PAD0)

+#define PORT_PB12C_SERCOM4_PAD0    (1u << 12)

+#define PIN_PA13D_SERCOM4_PAD1            13  /**< \brief SERCOM4 signal: PAD1 on PA13 mux D */

+#define MUX_PA13D_SERCOM4_PAD1             3

+#define PINMUX_PA13D_SERCOM4_PAD1  ((PIN_PA13D_SERCOM4_PAD1 << 16) | MUX_PA13D_SERCOM4_PAD1)

+#define PORT_PA13D_SERCOM4_PAD1    (1u << 13)

+#define PIN_PB09D_SERCOM4_PAD1            41  /**< \brief SERCOM4 signal: PAD1 on PB09 mux D */

+#define MUX_PB09D_SERCOM4_PAD1             3

+#define PINMUX_PB09D_SERCOM4_PAD1  ((PIN_PB09D_SERCOM4_PAD1 << 16) | MUX_PB09D_SERCOM4_PAD1)

+#define PORT_PB09D_SERCOM4_PAD1    (1u <<  9)

+#define PIN_PB13C_SERCOM4_PAD1            45  /**< \brief SERCOM4 signal: PAD1 on PB13 mux C */

+#define MUX_PB13C_SERCOM4_PAD1             2

+#define PINMUX_PB13C_SERCOM4_PAD1  ((PIN_PB13C_SERCOM4_PAD1 << 16) | MUX_PB13C_SERCOM4_PAD1)

+#define PORT_PB13C_SERCOM4_PAD1    (1u << 13)

+#define PIN_PA14D_SERCOM4_PAD2            14  /**< \brief SERCOM4 signal: PAD2 on PA14 mux D */

+#define MUX_PA14D_SERCOM4_PAD2             3

+#define PINMUX_PA14D_SERCOM4_PAD2  ((PIN_PA14D_SERCOM4_PAD2 << 16) | MUX_PA14D_SERCOM4_PAD2)

+#define PORT_PA14D_SERCOM4_PAD2    (1u << 14)

+#define PIN_PB10D_SERCOM4_PAD2            42  /**< \brief SERCOM4 signal: PAD2 on PB10 mux D */

+#define MUX_PB10D_SERCOM4_PAD2             3

+#define PINMUX_PB10D_SERCOM4_PAD2  ((PIN_PB10D_SERCOM4_PAD2 << 16) | MUX_PB10D_SERCOM4_PAD2)

+#define PORT_PB10D_SERCOM4_PAD2    (1u << 10)

+#define PIN_PB14C_SERCOM4_PAD2            46  /**< \brief SERCOM4 signal: PAD2 on PB14 mux C */

+#define MUX_PB14C_SERCOM4_PAD2             2

+#define PINMUX_PB14C_SERCOM4_PAD2  ((PIN_PB14C_SERCOM4_PAD2 << 16) | MUX_PB14C_SERCOM4_PAD2)

+#define PORT_PB14C_SERCOM4_PAD2    (1u << 14)

+#define PIN_PA15D_SERCOM4_PAD3            15  /**< \brief SERCOM4 signal: PAD3 on PA15 mux D */

+#define MUX_PA15D_SERCOM4_PAD3             3

+#define PINMUX_PA15D_SERCOM4_PAD3  ((PIN_PA15D_SERCOM4_PAD3 << 16) | MUX_PA15D_SERCOM4_PAD3)

+#define PORT_PA15D_SERCOM4_PAD3    (1u << 15)

+#define PIN_PB11D_SERCOM4_PAD3            43  /**< \brief SERCOM4 signal: PAD3 on PB11 mux D */

+#define MUX_PB11D_SERCOM4_PAD3             3

+#define PINMUX_PB11D_SERCOM4_PAD3  ((PIN_PB11D_SERCOM4_PAD3 << 16) | MUX_PB11D_SERCOM4_PAD3)

+#define PORT_PB11D_SERCOM4_PAD3    (1u << 11)

+#define PIN_PB15C_SERCOM4_PAD3            47  /**< \brief SERCOM4 signal: PAD3 on PB15 mux C */

+#define MUX_PB15C_SERCOM4_PAD3             2

+#define PINMUX_PB15C_SERCOM4_PAD3  ((PIN_PB15C_SERCOM4_PAD3 << 16) | MUX_PB15C_SERCOM4_PAD3)

+#define PORT_PB15C_SERCOM4_PAD3    (1u << 15)

+/* ========== PORT definition for SERCOM5 peripheral ========== */

+#define PIN_PA22D_SERCOM5_PAD0            22  /**< \brief SERCOM5 signal: PAD0 on PA22 mux D */

+#define MUX_PA22D_SERCOM5_PAD0             3

+#define PINMUX_PA22D_SERCOM5_PAD0  ((PIN_PA22D_SERCOM5_PAD0 << 16) | MUX_PA22D_SERCOM5_PAD0)

+#define PORT_PA22D_SERCOM5_PAD0    (1u << 22)

+#define PIN_PB02D_SERCOM5_PAD0            34  /**< \brief SERCOM5 signal: PAD0 on PB02 mux D */

+#define MUX_PB02D_SERCOM5_PAD0             3

+#define PINMUX_PB02D_SERCOM5_PAD0  ((PIN_PB02D_SERCOM5_PAD0 << 16) | MUX_PB02D_SERCOM5_PAD0)

+#define PORT_PB02D_SERCOM5_PAD0    (1u <<  2)

+#define PIN_PB30D_SERCOM5_PAD0            62  /**< \brief SERCOM5 signal: PAD0 on PB30 mux D */

+#define MUX_PB30D_SERCOM5_PAD0             3

+#define PINMUX_PB30D_SERCOM5_PAD0  ((PIN_PB30D_SERCOM5_PAD0 << 16) | MUX_PB30D_SERCOM5_PAD0)

+#define PORT_PB30D_SERCOM5_PAD0    (1u << 30)

+#define PIN_PB16C_SERCOM5_PAD0            48  /**< \brief SERCOM5 signal: PAD0 on PB16 mux C */

+#define MUX_PB16C_SERCOM5_PAD0             2

+#define PINMUX_PB16C_SERCOM5_PAD0  ((PIN_PB16C_SERCOM5_PAD0 << 16) | MUX_PB16C_SERCOM5_PAD0)

+#define PORT_PB16C_SERCOM5_PAD0    (1u << 16)

+#define PIN_PA23D_SERCOM5_PAD1            23  /**< \brief SERCOM5 signal: PAD1 on PA23 mux D */

+#define MUX_PA23D_SERCOM5_PAD1             3

+#define PINMUX_PA23D_SERCOM5_PAD1  ((PIN_PA23D_SERCOM5_PAD1 << 16) | MUX_PA23D_SERCOM5_PAD1)

+#define PORT_PA23D_SERCOM5_PAD1    (1u << 23)

+#define PIN_PB03D_SERCOM5_PAD1            35  /**< \brief SERCOM5 signal: PAD1 on PB03 mux D */

+#define MUX_PB03D_SERCOM5_PAD1             3

+#define PINMUX_PB03D_SERCOM5_PAD1  ((PIN_PB03D_SERCOM5_PAD1 << 16) | MUX_PB03D_SERCOM5_PAD1)

+#define PORT_PB03D_SERCOM5_PAD1    (1u <<  3)

+#define PIN_PB31D_SERCOM5_PAD1            63  /**< \brief SERCOM5 signal: PAD1 on PB31 mux D */

+#define MUX_PB31D_SERCOM5_PAD1             3

+#define PINMUX_PB31D_SERCOM5_PAD1  ((PIN_PB31D_SERCOM5_PAD1 << 16) | MUX_PB31D_SERCOM5_PAD1)

+#define PORT_PB31D_SERCOM5_PAD1    (1u << 31)

+#define PIN_PB17C_SERCOM5_PAD1            49  /**< \brief SERCOM5 signal: PAD1 on PB17 mux C */

+#define MUX_PB17C_SERCOM5_PAD1             2

+#define PINMUX_PB17C_SERCOM5_PAD1  ((PIN_PB17C_SERCOM5_PAD1 << 16) | MUX_PB17C_SERCOM5_PAD1)

+#define PORT_PB17C_SERCOM5_PAD1    (1u << 17)

+#define PIN_PA24D_SERCOM5_PAD2            24  /**< \brief SERCOM5 signal: PAD2 on PA24 mux D */

+#define MUX_PA24D_SERCOM5_PAD2             3

+#define PINMUX_PA24D_SERCOM5_PAD2  ((PIN_PA24D_SERCOM5_PAD2 << 16) | MUX_PA24D_SERCOM5_PAD2)

+#define PORT_PA24D_SERCOM5_PAD2    (1u << 24)

+#define PIN_PB00D_SERCOM5_PAD2            32  /**< \brief SERCOM5 signal: PAD2 on PB00 mux D */

+#define MUX_PB00D_SERCOM5_PAD2             3

+#define PINMUX_PB00D_SERCOM5_PAD2  ((PIN_PB00D_SERCOM5_PAD2 << 16) | MUX_PB00D_SERCOM5_PAD2)

+#define PORT_PB00D_SERCOM5_PAD2    (1u <<  0)

+#define PIN_PB22D_SERCOM5_PAD2            54  /**< \brief SERCOM5 signal: PAD2 on PB22 mux D */

+#define MUX_PB22D_SERCOM5_PAD2             3

+#define PINMUX_PB22D_SERCOM5_PAD2  ((PIN_PB22D_SERCOM5_PAD2 << 16) | MUX_PB22D_SERCOM5_PAD2)

+#define PORT_PB22D_SERCOM5_PAD2    (1u << 22)

+#define PIN_PA20C_SERCOM5_PAD2            20  /**< \brief SERCOM5 signal: PAD2 on PA20 mux C */

+#define MUX_PA20C_SERCOM5_PAD2             2

+#define PINMUX_PA20C_SERCOM5_PAD2  ((PIN_PA20C_SERCOM5_PAD2 << 16) | MUX_PA20C_SERCOM5_PAD2)

+#define PORT_PA20C_SERCOM5_PAD2    (1u << 20)

+#define PIN_PA25D_SERCOM5_PAD3            25  /**< \brief SERCOM5 signal: PAD3 on PA25 mux D */

+#define MUX_PA25D_SERCOM5_PAD3             3

+#define PINMUX_PA25D_SERCOM5_PAD3  ((PIN_PA25D_SERCOM5_PAD3 << 16) | MUX_PA25D_SERCOM5_PAD3)

+#define PORT_PA25D_SERCOM5_PAD3    (1u << 25)

+#define PIN_PB01D_SERCOM5_PAD3            33  /**< \brief SERCOM5 signal: PAD3 on PB01 mux D */

+#define MUX_PB01D_SERCOM5_PAD3             3

+#define PINMUX_PB01D_SERCOM5_PAD3  ((PIN_PB01D_SERCOM5_PAD3 << 16) | MUX_PB01D_SERCOM5_PAD3)

+#define PORT_PB01D_SERCOM5_PAD3    (1u <<  1)

+#define PIN_PB23D_SERCOM5_PAD3            55  /**< \brief SERCOM5 signal: PAD3 on PB23 mux D */

+#define MUX_PB23D_SERCOM5_PAD3             3

+#define PINMUX_PB23D_SERCOM5_PAD3  ((PIN_PB23D_SERCOM5_PAD3 << 16) | MUX_PB23D_SERCOM5_PAD3)

+#define PORT_PB23D_SERCOM5_PAD3    (1u << 23)

+#define PIN_PA21C_SERCOM5_PAD3            21  /**< \brief SERCOM5 signal: PAD3 on PA21 mux C */

+#define MUX_PA21C_SERCOM5_PAD3             2

+#define PINMUX_PA21C_SERCOM5_PAD3  ((PIN_PA21C_SERCOM5_PAD3 << 16) | MUX_PA21C_SERCOM5_PAD3)

+#define PORT_PA21C_SERCOM5_PAD3    (1u << 21)

+/* ========== PORT definition for TC0 peripheral ========== */

+#define PIN_PA04F_TC0_WO0                  4  /**< \brief TC0 signal: WO0 on PA04 mux F */

+#define MUX_PA04F_TC0_WO0                  5

+#define PINMUX_PA04F_TC0_WO0       ((PIN_PA04F_TC0_WO0 << 16) | MUX_PA04F_TC0_WO0)

+#define PORT_PA04F_TC0_WO0         (1u <<  4)

+#define PIN_PB30F_TC0_WO0                 62  /**< \brief TC0 signal: WO0 on PB30 mux F */

+#define MUX_PB30F_TC0_WO0                  5

+#define PINMUX_PB30F_TC0_WO0       ((PIN_PB30F_TC0_WO0 << 16) | MUX_PB30F_TC0_WO0)

+#define PORT_PB30F_TC0_WO0         (1u << 30)

+#define PIN_PA08E_TC0_WO0                  8  /**< \brief TC0 signal: WO0 on PA08 mux E */

+#define MUX_PA08E_TC0_WO0                  4

+#define PINMUX_PA08E_TC0_WO0       ((PIN_PA08E_TC0_WO0 << 16) | MUX_PA08E_TC0_WO0)

+#define PORT_PA08E_TC0_WO0         (1u <<  8)

+#define PIN_PA05F_TC0_WO1                  5  /**< \brief TC0 signal: WO1 on PA05 mux F */

+#define MUX_PA05F_TC0_WO1                  5

+#define PINMUX_PA05F_TC0_WO1       ((PIN_PA05F_TC0_WO1 << 16) | MUX_PA05F_TC0_WO1)

+#define PORT_PA05F_TC0_WO1         (1u <<  5)

+#define PIN_PB31F_TC0_WO1                 63  /**< \brief TC0 signal: WO1 on PB31 mux F */

+#define MUX_PB31F_TC0_WO1                  5

+#define PINMUX_PB31F_TC0_WO1       ((PIN_PB31F_TC0_WO1 << 16) | MUX_PB31F_TC0_WO1)

+#define PORT_PB31F_TC0_WO1         (1u << 31)

+#define PIN_PA09E_TC0_WO1                  9  /**< \brief TC0 signal: WO1 on PA09 mux E */

+#define MUX_PA09E_TC0_WO1                  4

+#define PINMUX_PA09E_TC0_WO1       ((PIN_PA09E_TC0_WO1 << 16) | MUX_PA09E_TC0_WO1)

+#define PORT_PA09E_TC0_WO1         (1u <<  9)

+/* ========== PORT definition for TC1 peripheral ========== */

+#define PIN_PA06F_TC1_WO0                  6  /**< \brief TC1 signal: WO0 on PA06 mux F */

+#define MUX_PA06F_TC1_WO0                  5

+#define PINMUX_PA06F_TC1_WO0       ((PIN_PA06F_TC1_WO0 << 16) | MUX_PA06F_TC1_WO0)

+#define PORT_PA06F_TC1_WO0         (1u <<  6)

+#define PIN_PA30F_TC1_WO0                 30  /**< \brief TC1 signal: WO0 on PA30 mux F */

+#define MUX_PA30F_TC1_WO0                  5

+#define PINMUX_PA30F_TC1_WO0       ((PIN_PA30F_TC1_WO0 << 16) | MUX_PA30F_TC1_WO0)

+#define PORT_PA30F_TC1_WO0         (1u << 30)

+#define PIN_PA10E_TC1_WO0                 10  /**< \brief TC1 signal: WO0 on PA10 mux E */

+#define MUX_PA10E_TC1_WO0                  4

+#define PINMUX_PA10E_TC1_WO0       ((PIN_PA10E_TC1_WO0 << 16) | MUX_PA10E_TC1_WO0)

+#define PORT_PA10E_TC1_WO0         (1u << 10)

+#define PIN_PA07F_TC1_WO1                  7  /**< \brief TC1 signal: WO1 on PA07 mux F */

+#define MUX_PA07F_TC1_WO1                  5

+#define PINMUX_PA07F_TC1_WO1       ((PIN_PA07F_TC1_WO1 << 16) | MUX_PA07F_TC1_WO1)

+#define PORT_PA07F_TC1_WO1         (1u <<  7)

+#define PIN_PA31F_TC1_WO1                 31  /**< \brief TC1 signal: WO1 on PA31 mux F */

+#define MUX_PA31F_TC1_WO1                  5

+#define PINMUX_PA31F_TC1_WO1       ((PIN_PA31F_TC1_WO1 << 16) | MUX_PA31F_TC1_WO1)

+#define PORT_PA31F_TC1_WO1         (1u << 31)

+#define PIN_PA11E_TC1_WO1                 11  /**< \brief TC1 signal: WO1 on PA11 mux E */

+#define MUX_PA11E_TC1_WO1                  4

+#define PINMUX_PA11E_TC1_WO1       ((PIN_PA11E_TC1_WO1 << 16) | MUX_PA11E_TC1_WO1)

+#define PORT_PA11E_TC1_WO1         (1u << 11)

+/* ========== PORT definition for TC2 peripheral ========== */

+#define PIN_PA16F_TC2_WO0                 16  /**< \brief TC2 signal: WO0 on PA16 mux F */

+#define MUX_PA16F_TC2_WO0                  5

+#define PINMUX_PA16F_TC2_WO0       ((PIN_PA16F_TC2_WO0 << 16) | MUX_PA16F_TC2_WO0)

+#define PORT_PA16F_TC2_WO0         (1u << 16)

+#define PIN_PA12E_TC2_WO0                 12  /**< \brief TC2 signal: WO0 on PA12 mux E */

+#define MUX_PA12E_TC2_WO0                  4

+#define PINMUX_PA12E_TC2_WO0       ((PIN_PA12E_TC2_WO0 << 16) | MUX_PA12E_TC2_WO0)

+#define PORT_PA12E_TC2_WO0         (1u << 12)

+#define PIN_PA00F_TC2_WO0                  0  /**< \brief TC2 signal: WO0 on PA00 mux F */

+#define MUX_PA00F_TC2_WO0                  5

+#define PINMUX_PA00F_TC2_WO0       ((PIN_PA00F_TC2_WO0 << 16) | MUX_PA00F_TC2_WO0)

+#define PORT_PA00F_TC2_WO0         (1u <<  0)

+#define PIN_PA17F_TC2_WO1                 17  /**< \brief TC2 signal: WO1 on PA17 mux F */

+#define MUX_PA17F_TC2_WO1                  5

+#define PINMUX_PA17F_TC2_WO1       ((PIN_PA17F_TC2_WO1 << 16) | MUX_PA17F_TC2_WO1)

+#define PORT_PA17F_TC2_WO1         (1u << 17)

+#define PIN_PA13E_TC2_WO1                 13  /**< \brief TC2 signal: WO1 on PA13 mux E */

+#define MUX_PA13E_TC2_WO1                  4

+#define PINMUX_PA13E_TC2_WO1       ((PIN_PA13E_TC2_WO1 << 16) | MUX_PA13E_TC2_WO1)

+#define PORT_PA13E_TC2_WO1         (1u << 13)

+#define PIN_PA01F_TC2_WO1                  1  /**< \brief TC2 signal: WO1 on PA01 mux F */

+#define MUX_PA01F_TC2_WO1                  5

+#define PINMUX_PA01F_TC2_WO1       ((PIN_PA01F_TC2_WO1 << 16) | MUX_PA01F_TC2_WO1)

+#define PORT_PA01F_TC2_WO1         (1u <<  1)

+/* ========== PORT definition for TC3 peripheral ========== */

+#define PIN_PA18F_TC3_WO0                 18  /**< \brief TC3 signal: WO0 on PA18 mux F */

+#define MUX_PA18F_TC3_WO0                  5

+#define PINMUX_PA18F_TC3_WO0       ((PIN_PA18F_TC3_WO0 << 16) | MUX_PA18F_TC3_WO0)

+#define PORT_PA18F_TC3_WO0         (1u << 18)

+#define PIN_PA14E_TC3_WO0                 14  /**< \brief TC3 signal: WO0 on PA14 mux E */

+#define MUX_PA14E_TC3_WO0                  4

+#define PINMUX_PA14E_TC3_WO0       ((PIN_PA14E_TC3_WO0 << 16) | MUX_PA14E_TC3_WO0)

+#define PORT_PA14E_TC3_WO0         (1u << 14)

+#define PIN_PA19F_TC3_WO1                 19  /**< \brief TC3 signal: WO1 on PA19 mux F */

+#define MUX_PA19F_TC3_WO1                  5

+#define PINMUX_PA19F_TC3_WO1       ((PIN_PA19F_TC3_WO1 << 16) | MUX_PA19F_TC3_WO1)

+#define PORT_PA19F_TC3_WO1         (1u << 19)

+#define PIN_PA15E_TC3_WO1                 15  /**< \brief TC3 signal: WO1 on PA15 mux E */

+#define MUX_PA15E_TC3_WO1                  4

+#define PINMUX_PA15E_TC3_WO1       ((PIN_PA15E_TC3_WO1 << 16) | MUX_PA15E_TC3_WO1)

+#define PORT_PA15E_TC3_WO1         (1u << 15)

+/* ========== PORT definition for TC4 peripheral ========== */

+#define PIN_PA22F_TC4_WO0                 22  /**< \brief TC4 signal: WO0 on PA22 mux F */

+#define MUX_PA22F_TC4_WO0                  5

+#define PINMUX_PA22F_TC4_WO0       ((PIN_PA22F_TC4_WO0 << 16) | MUX_PA22F_TC4_WO0)

+#define PORT_PA22F_TC4_WO0         (1u << 22)

+#define PIN_PB08F_TC4_WO0                 40  /**< \brief TC4 signal: WO0 on PB08 mux F */

+#define MUX_PB08F_TC4_WO0                  5

+#define PINMUX_PB08F_TC4_WO0       ((PIN_PB08F_TC4_WO0 << 16) | MUX_PB08F_TC4_WO0)

+#define PORT_PB08F_TC4_WO0         (1u <<  8)

+#define PIN_PB12E_TC4_WO0                 44  /**< \brief TC4 signal: WO0 on PB12 mux E */

+#define MUX_PB12E_TC4_WO0                  4

+#define PINMUX_PB12E_TC4_WO0       ((PIN_PB12E_TC4_WO0 << 16) | MUX_PB12E_TC4_WO0)

+#define PORT_PB12E_TC4_WO0         (1u << 12)

+#define PIN_PA23F_TC4_WO1                 23  /**< \brief TC4 signal: WO1 on PA23 mux F */

+#define MUX_PA23F_TC4_WO1                  5

+#define PINMUX_PA23F_TC4_WO1       ((PIN_PA23F_TC4_WO1 << 16) | MUX_PA23F_TC4_WO1)

+#define PORT_PA23F_TC4_WO1         (1u << 23)

+#define PIN_PB09F_TC4_WO1                 41  /**< \brief TC4 signal: WO1 on PB09 mux F */

+#define MUX_PB09F_TC4_WO1                  5

+#define PINMUX_PB09F_TC4_WO1       ((PIN_PB09F_TC4_WO1 << 16) | MUX_PB09F_TC4_WO1)

+#define PORT_PB09F_TC4_WO1         (1u <<  9)

+#define PIN_PB13E_TC4_WO1                 45  /**< \brief TC4 signal: WO1 on PB13 mux E */

+#define MUX_PB13E_TC4_WO1                  4

+#define PINMUX_PB13E_TC4_WO1       ((PIN_PB13E_TC4_WO1 << 16) | MUX_PB13E_TC4_WO1)

+#define PORT_PB13E_TC4_WO1         (1u << 13)

+/* ========== PORT definition for TC5 peripheral ========== */

+#define PIN_PA24F_TC5_WO0                 24  /**< \brief TC5 signal: WO0 on PA24 mux F */

+#define MUX_PA24F_TC5_WO0                  5

+#define PINMUX_PA24F_TC5_WO0       ((PIN_PA24F_TC5_WO0 << 16) | MUX_PA24F_TC5_WO0)

+#define PORT_PA24F_TC5_WO0         (1u << 24)

+#define PIN_PB10F_TC5_WO0                 42  /**< \brief TC5 signal: WO0 on PB10 mux F */

+#define MUX_PB10F_TC5_WO0                  5

+#define PINMUX_PB10F_TC5_WO0       ((PIN_PB10F_TC5_WO0 << 16) | MUX_PB10F_TC5_WO0)

+#define PORT_PB10F_TC5_WO0         (1u << 10)

+#define PIN_PB14E_TC5_WO0                 46  /**< \brief TC5 signal: WO0 on PB14 mux E */

+#define MUX_PB14E_TC5_WO0                  4

+#define PINMUX_PB14E_TC5_WO0       ((PIN_PB14E_TC5_WO0 << 16) | MUX_PB14E_TC5_WO0)

+#define PORT_PB14E_TC5_WO0         (1u << 14)

+#define PIN_PA25F_TC5_WO1                 25  /**< \brief TC5 signal: WO1 on PA25 mux F */

+#define MUX_PA25F_TC5_WO1                  5

+#define PINMUX_PA25F_TC5_WO1       ((PIN_PA25F_TC5_WO1 << 16) | MUX_PA25F_TC5_WO1)

+#define PORT_PA25F_TC5_WO1         (1u << 25)

+#define PIN_PB11F_TC5_WO1                 43  /**< \brief TC5 signal: WO1 on PB11 mux F */

+#define MUX_PB11F_TC5_WO1                  5

+#define PINMUX_PB11F_TC5_WO1       ((PIN_PB11F_TC5_WO1 << 16) | MUX_PB11F_TC5_WO1)

+#define PORT_PB11F_TC5_WO1         (1u << 11)

+#define PIN_PB15E_TC5_WO1                 47  /**< \brief TC5 signal: WO1 on PB15 mux E */

+#define MUX_PB15E_TC5_WO1                  4

+#define PINMUX_PB15E_TC5_WO1       ((PIN_PB15E_TC5_WO1 << 16) | MUX_PB15E_TC5_WO1)

+#define PORT_PB15E_TC5_WO1         (1u << 15)

+/* ========== PORT definition for TC6 peripheral ========== */

+#define PIN_PB02F_TC6_WO0                 34  /**< \brief TC6 signal: WO0 on PB02 mux F */

+#define MUX_PB02F_TC6_WO0                  5

+#define PINMUX_PB02F_TC6_WO0       ((PIN_PB02F_TC6_WO0 << 16) | MUX_PB02F_TC6_WO0)

+#define PORT_PB02F_TC6_WO0         (1u <<  2)

+#define PIN_PB16E_TC6_WO0                 48  /**< \brief TC6 signal: WO0 on PB16 mux E */

+#define MUX_PB16E_TC6_WO0                  4

+#define PINMUX_PB16E_TC6_WO0       ((PIN_PB16E_TC6_WO0 << 16) | MUX_PB16E_TC6_WO0)

+#define PORT_PB16E_TC6_WO0         (1u << 16)

+#define PIN_PB03F_TC6_WO1                 35  /**< \brief TC6 signal: WO1 on PB03 mux F */

+#define MUX_PB03F_TC6_WO1                  5

+#define PINMUX_PB03F_TC6_WO1       ((PIN_PB03F_TC6_WO1 << 16) | MUX_PB03F_TC6_WO1)

+#define PORT_PB03F_TC6_WO1         (1u <<  3)

+#define PIN_PB17E_TC6_WO1                 49  /**< \brief TC6 signal: WO1 on PB17 mux E */

+#define MUX_PB17E_TC6_WO1                  4

+#define PINMUX_PB17E_TC6_WO1       ((PIN_PB17E_TC6_WO1 << 16) | MUX_PB17E_TC6_WO1)

+#define PORT_PB17E_TC6_WO1         (1u << 17)

+/* ========== PORT definition for TC7 peripheral ========== */

+#define PIN_PB00F_TC7_WO0                 32  /**< \brief TC7 signal: WO0 on PB00 mux F */

+#define MUX_PB00F_TC7_WO0                  5

+#define PINMUX_PB00F_TC7_WO0       ((PIN_PB00F_TC7_WO0 << 16) | MUX_PB00F_TC7_WO0)

+#define PORT_PB00F_TC7_WO0         (1u <<  0)

+#define PIN_PB22F_TC7_WO0                 54  /**< \brief TC7 signal: WO0 on PB22 mux F */

+#define MUX_PB22F_TC7_WO0                  5

+#define PINMUX_PB22F_TC7_WO0       ((PIN_PB22F_TC7_WO0 << 16) | MUX_PB22F_TC7_WO0)

+#define PORT_PB22F_TC7_WO0         (1u << 22)

+#define PIN_PA20E_TC7_WO0                 20  /**< \brief TC7 signal: WO0 on PA20 mux E */

+#define MUX_PA20E_TC7_WO0                  4

+#define PINMUX_PA20E_TC7_WO0       ((PIN_PA20E_TC7_WO0 << 16) | MUX_PA20E_TC7_WO0)

+#define PORT_PA20E_TC7_WO0         (1u << 20)

+#define PIN_PB01F_TC7_WO1                 33  /**< \brief TC7 signal: WO1 on PB01 mux F */

+#define MUX_PB01F_TC7_WO1                  5

+#define PINMUX_PB01F_TC7_WO1       ((PIN_PB01F_TC7_WO1 << 16) | MUX_PB01F_TC7_WO1)

+#define PORT_PB01F_TC7_WO1         (1u <<  1)

+#define PIN_PB23F_TC7_WO1                 55  /**< \brief TC7 signal: WO1 on PB23 mux F */

+#define MUX_PB23F_TC7_WO1                  5

+#define PINMUX_PB23F_TC7_WO1       ((PIN_PB23F_TC7_WO1 << 16) | MUX_PB23F_TC7_WO1)

+#define PORT_PB23F_TC7_WO1         (1u << 23)

+#define PIN_PA21E_TC7_WO1                 21  /**< \brief TC7 signal: WO1 on PA21 mux E */

+#define MUX_PA21E_TC7_WO1                  4

+#define PINMUX_PA21E_TC7_WO1       ((PIN_PA21E_TC7_WO1 << 16) | MUX_PA21E_TC7_WO1)

+#define PORT_PA21E_TC7_WO1         (1u << 21)

+/* ========== PORT definition for ADC peripheral ========== */

+#define PIN_PA02B_ADC_AIN0                 2  /**< \brief ADC signal: AIN0 on PA02 mux B */

+#define MUX_PA02B_ADC_AIN0                 1

+#define PINMUX_PA02B_ADC_AIN0      ((PIN_PA02B_ADC_AIN0 << 16) | MUX_PA02B_ADC_AIN0)

+#define PORT_PA02B_ADC_AIN0        (1u <<  2)

+#define PIN_PA03B_ADC_AIN1                 3  /**< \brief ADC signal: AIN1 on PA03 mux B */

+#define MUX_PA03B_ADC_AIN1                 1

+#define PINMUX_PA03B_ADC_AIN1      ((PIN_PA03B_ADC_AIN1 << 16) | MUX_PA03B_ADC_AIN1)

+#define PORT_PA03B_ADC_AIN1        (1u <<  3)

+#define PIN_PB08B_ADC_AIN2                40  /**< \brief ADC signal: AIN2 on PB08 mux B */

+#define MUX_PB08B_ADC_AIN2                 1

+#define PINMUX_PB08B_ADC_AIN2      ((PIN_PB08B_ADC_AIN2 << 16) | MUX_PB08B_ADC_AIN2)

+#define PORT_PB08B_ADC_AIN2        (1u <<  8)

+#define PIN_PB09B_ADC_AIN3                41  /**< \brief ADC signal: AIN3 on PB09 mux B */

+#define MUX_PB09B_ADC_AIN3                 1

+#define PINMUX_PB09B_ADC_AIN3      ((PIN_PB09B_ADC_AIN3 << 16) | MUX_PB09B_ADC_AIN3)

+#define PORT_PB09B_ADC_AIN3        (1u <<  9)

+#define PIN_PA04B_ADC_AIN4                 4  /**< \brief ADC signal: AIN4 on PA04 mux B */

+#define MUX_PA04B_ADC_AIN4                 1

+#define PINMUX_PA04B_ADC_AIN4      ((PIN_PA04B_ADC_AIN4 << 16) | MUX_PA04B_ADC_AIN4)

+#define PORT_PA04B_ADC_AIN4        (1u <<  4)

+#define PIN_PA05B_ADC_AIN5                 5  /**< \brief ADC signal: AIN5 on PA05 mux B */

+#define MUX_PA05B_ADC_AIN5                 1

+#define PINMUX_PA05B_ADC_AIN5      ((PIN_PA05B_ADC_AIN5 << 16) | MUX_PA05B_ADC_AIN5)

+#define PORT_PA05B_ADC_AIN5        (1u <<  5)

+#define PIN_PA06B_ADC_AIN6                 6  /**< \brief ADC signal: AIN6 on PA06 mux B */

+#define MUX_PA06B_ADC_AIN6                 1

+#define PINMUX_PA06B_ADC_AIN6      ((PIN_PA06B_ADC_AIN6 << 16) | MUX_PA06B_ADC_AIN6)

+#define PORT_PA06B_ADC_AIN6        (1u <<  6)

+#define PIN_PA07B_ADC_AIN7                 7  /**< \brief ADC signal: AIN7 on PA07 mux B */

+#define MUX_PA07B_ADC_AIN7                 1

+#define PINMUX_PA07B_ADC_AIN7      ((PIN_PA07B_ADC_AIN7 << 16) | MUX_PA07B_ADC_AIN7)

+#define PORT_PA07B_ADC_AIN7        (1u <<  7)

+#define PIN_PB00B_ADC_AIN8                32  /**< \brief ADC signal: AIN8 on PB00 mux B */

+#define MUX_PB00B_ADC_AIN8                 1

+#define PINMUX_PB00B_ADC_AIN8      ((PIN_PB00B_ADC_AIN8 << 16) | MUX_PB00B_ADC_AIN8)

+#define PORT_PB00B_ADC_AIN8        (1u <<  0)

+#define PIN_PB01B_ADC_AIN9                33  /**< \brief ADC signal: AIN9 on PB01 mux B */

+#define MUX_PB01B_ADC_AIN9                 1

+#define PINMUX_PB01B_ADC_AIN9      ((PIN_PB01B_ADC_AIN9 << 16) | MUX_PB01B_ADC_AIN9)

+#define PORT_PB01B_ADC_AIN9        (1u <<  1)

+#define PIN_PB02B_ADC_AIN10               34  /**< \brief ADC signal: AIN10 on PB02 mux B */

+#define MUX_PB02B_ADC_AIN10                1

+#define PINMUX_PB02B_ADC_AIN10     ((PIN_PB02B_ADC_AIN10 << 16) | MUX_PB02B_ADC_AIN10)

+#define PORT_PB02B_ADC_AIN10       (1u <<  2)

+#define PIN_PB03B_ADC_AIN11               35  /**< \brief ADC signal: AIN11 on PB03 mux B */

+#define MUX_PB03B_ADC_AIN11                1

+#define PINMUX_PB03B_ADC_AIN11     ((PIN_PB03B_ADC_AIN11 << 16) | MUX_PB03B_ADC_AIN11)

+#define PORT_PB03B_ADC_AIN11       (1u <<  3)

+#define PIN_PB04B_ADC_AIN12               36  /**< \brief ADC signal: AIN12 on PB04 mux B */

+#define MUX_PB04B_ADC_AIN12                1

+#define PINMUX_PB04B_ADC_AIN12     ((PIN_PB04B_ADC_AIN12 << 16) | MUX_PB04B_ADC_AIN12)

+#define PORT_PB04B_ADC_AIN12       (1u <<  4)

+#define PIN_PB05B_ADC_AIN13               37  /**< \brief ADC signal: AIN13 on PB05 mux B */

+#define MUX_PB05B_ADC_AIN13                1

+#define PINMUX_PB05B_ADC_AIN13     ((PIN_PB05B_ADC_AIN13 << 16) | MUX_PB05B_ADC_AIN13)

+#define PORT_PB05B_ADC_AIN13       (1u <<  5)

+#define PIN_PB06B_ADC_AIN14               38  /**< \brief ADC signal: AIN14 on PB06 mux B */

+#define MUX_PB06B_ADC_AIN14                1

+#define PINMUX_PB06B_ADC_AIN14     ((PIN_PB06B_ADC_AIN14 << 16) | MUX_PB06B_ADC_AIN14)

+#define PORT_PB06B_ADC_AIN14       (1u <<  6)

+#define PIN_PB07B_ADC_AIN15               39  /**< \brief ADC signal: AIN15 on PB07 mux B */

+#define MUX_PB07B_ADC_AIN15                1

+#define PINMUX_PB07B_ADC_AIN15     ((PIN_PB07B_ADC_AIN15 << 16) | MUX_PB07B_ADC_AIN15)

+#define PORT_PB07B_ADC_AIN15       (1u <<  7)

+#define PIN_PA08B_ADC_AIN16                8  /**< \brief ADC signal: AIN16 on PA08 mux B */

+#define MUX_PA08B_ADC_AIN16                1

+#define PINMUX_PA08B_ADC_AIN16     ((PIN_PA08B_ADC_AIN16 << 16) | MUX_PA08B_ADC_AIN16)

+#define PORT_PA08B_ADC_AIN16       (1u <<  8)

+#define PIN_PA09B_ADC_AIN17                9  /**< \brief ADC signal: AIN17 on PA09 mux B */

+#define MUX_PA09B_ADC_AIN17                1

+#define PINMUX_PA09B_ADC_AIN17     ((PIN_PA09B_ADC_AIN17 << 16) | MUX_PA09B_ADC_AIN17)

+#define PORT_PA09B_ADC_AIN17       (1u <<  9)

+#define PIN_PA10B_ADC_AIN18               10  /**< \brief ADC signal: AIN18 on PA10 mux B */

+#define MUX_PA10B_ADC_AIN18                1

+#define PINMUX_PA10B_ADC_AIN18     ((PIN_PA10B_ADC_AIN18 << 16) | MUX_PA10B_ADC_AIN18)

+#define PORT_PA10B_ADC_AIN18       (1u << 10)

+#define PIN_PA11B_ADC_AIN19               11  /**< \brief ADC signal: AIN19 on PA11 mux B */

+#define MUX_PA11B_ADC_AIN19                1

+#define PINMUX_PA11B_ADC_AIN19     ((PIN_PA11B_ADC_AIN19 << 16) | MUX_PA11B_ADC_AIN19)

+#define PORT_PA11B_ADC_AIN19       (1u << 11)

+#define PIN_PA04B_ADC_VREFP                4  /**< \brief ADC signal: VREFP on PA04 mux B */

+#define MUX_PA04B_ADC_VREFP                1

+#define PINMUX_PA04B_ADC_VREFP     ((PIN_PA04B_ADC_VREFP << 16) | MUX_PA04B_ADC_VREFP)

+#define PORT_PA04B_ADC_VREFP       (1u <<  4)

+/* ========== PORT definition for AC peripheral ========== */

+#define PIN_PA04B_AC_AIN0                  4  /**< \brief AC signal: AIN0 on PA04 mux B */

+#define MUX_PA04B_AC_AIN0                  1

+#define PINMUX_PA04B_AC_AIN0       ((PIN_PA04B_AC_AIN0 << 16) | MUX_PA04B_AC_AIN0)

+#define PORT_PA04B_AC_AIN0         (1u <<  4)

+#define PIN_PA05B_AC_AIN1                  5  /**< \brief AC signal: AIN1 on PA05 mux B */

+#define MUX_PA05B_AC_AIN1                  1

+#define PINMUX_PA05B_AC_AIN1       ((PIN_PA05B_AC_AIN1 << 16) | MUX_PA05B_AC_AIN1)

+#define PORT_PA05B_AC_AIN1         (1u <<  5)

+#define PIN_PA06B_AC_AIN2                  6  /**< \brief AC signal: AIN2 on PA06 mux B */

+#define MUX_PA06B_AC_AIN2                  1

+#define PINMUX_PA06B_AC_AIN2       ((PIN_PA06B_AC_AIN2 << 16) | MUX_PA06B_AC_AIN2)

+#define PORT_PA06B_AC_AIN2         (1u <<  6)

+#define PIN_PA07B_AC_AIN3                  7  /**< \brief AC signal: AIN3 on PA07 mux B */

+#define MUX_PA07B_AC_AIN3                  1

+#define PINMUX_PA07B_AC_AIN3       ((PIN_PA07B_AC_AIN3 << 16) | MUX_PA07B_AC_AIN3)

+#define PORT_PA07B_AC_AIN3         (1u <<  7)

+#define PIN_PA12H_AC_CMP0                 12  /**< \brief AC signal: CMP0 on PA12 mux H */

+#define MUX_PA12H_AC_CMP0                  7

+#define PINMUX_PA12H_AC_CMP0       ((PIN_PA12H_AC_CMP0 << 16) | MUX_PA12H_AC_CMP0)

+#define PORT_PA12H_AC_CMP0         (1u << 12)

+#define PIN_PA18H_AC_CMP0                 18  /**< \brief AC signal: CMP0 on PA18 mux H */

+#define MUX_PA18H_AC_CMP0                  7

+#define PINMUX_PA18H_AC_CMP0       ((PIN_PA18H_AC_CMP0 << 16) | MUX_PA18H_AC_CMP0)

+#define PORT_PA18H_AC_CMP0         (1u << 18)

+#define PIN_PA13H_AC_CMP1                 13  /**< \brief AC signal: CMP1 on PA13 mux H */

+#define MUX_PA13H_AC_CMP1                  7

+#define PINMUX_PA13H_AC_CMP1       ((PIN_PA13H_AC_CMP1 << 16) | MUX_PA13H_AC_CMP1)

+#define PORT_PA13H_AC_CMP1         (1u << 13)

+#define PIN_PA19H_AC_CMP1                 19  /**< \brief AC signal: CMP1 on PA19 mux H */

+#define MUX_PA19H_AC_CMP1                  7

+#define PINMUX_PA19H_AC_CMP1       ((PIN_PA19H_AC_CMP1 << 16) | MUX_PA19H_AC_CMP1)

+#define PORT_PA19H_AC_CMP1         (1u << 19)

+/* ========== PORT definition for DAC peripheral ========== */

+#define PIN_PA02B_DAC_VOUT                 2  /**< \brief DAC signal: VOUT on PA02 mux B */

+#define MUX_PA02B_DAC_VOUT                 1

+#define PINMUX_PA02B_DAC_VOUT      ((PIN_PA02B_DAC_VOUT << 16) | MUX_PA02B_DAC_VOUT)

+#define PORT_PA02B_DAC_VOUT        (1u <<  2)

+#define PIN_PA03B_DAC_VREFP                3  /**< \brief DAC signal: VREFP on PA03 mux B */

+#define MUX_PA03B_DAC_VREFP                1

+#define PINMUX_PA03B_DAC_VREFP     ((PIN_PA03B_DAC_VREFP << 16) | MUX_PA03B_DAC_VREFP)

+#define PORT_PA03B_DAC_VREFP       (1u <<  3)

+

+#endif /* _SAMD20J14_PIO_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20j15.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20j15.h
new file mode 100644
index 0000000..4468582
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20j15.h
@@ -0,0 +1,1024 @@
+/**

+ * \file

+ *

+ * \brief Peripheral I/O description for SAMD20J15

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20J15_PIO_

+#define _SAMD20J15_PIO_

+

+#define PIN_PA00                           0  /**< \brief Pin Number for PA00 */

+#define PORT_PA00                  (1u <<  0) /**< \brief PORT Mask  for PA00 */

+#define PIN_PA01                           1  /**< \brief Pin Number for PA01 */

+#define PORT_PA01                  (1u <<  1) /**< \brief PORT Mask  for PA01 */

+#define PIN_PA02                           2  /**< \brief Pin Number for PA02 */

+#define PORT_PA02                  (1u <<  2) /**< \brief PORT Mask  for PA02 */

+#define PIN_PA03                           3  /**< \brief Pin Number for PA03 */

+#define PORT_PA03                  (1u <<  3) /**< \brief PORT Mask  for PA03 */

+#define PIN_PA04                           4  /**< \brief Pin Number for PA04 */

+#define PORT_PA04                  (1u <<  4) /**< \brief PORT Mask  for PA04 */

+#define PIN_PA05                           5  /**< \brief Pin Number for PA05 */

+#define PORT_PA05                  (1u <<  5) /**< \brief PORT Mask  for PA05 */

+#define PIN_PA06                           6  /**< \brief Pin Number for PA06 */

+#define PORT_PA06                  (1u <<  6) /**< \brief PORT Mask  for PA06 */

+#define PIN_PA07                           7  /**< \brief Pin Number for PA07 */

+#define PORT_PA07                  (1u <<  7) /**< \brief PORT Mask  for PA07 */

+#define PIN_PA08                           8  /**< \brief Pin Number for PA08 */

+#define PORT_PA08                  (1u <<  8) /**< \brief PORT Mask  for PA08 */

+#define PIN_PA09                           9  /**< \brief Pin Number for PA09 */

+#define PORT_PA09                  (1u <<  9) /**< \brief PORT Mask  for PA09 */

+#define PIN_PA10                          10  /**< \brief Pin Number for PA10 */

+#define PORT_PA10                  (1u << 10) /**< \brief PORT Mask  for PA10 */

+#define PIN_PA11                          11  /**< \brief Pin Number for PA11 */

+#define PORT_PA11                  (1u << 11) /**< \brief PORT Mask  for PA11 */

+#define PIN_PA12                          12  /**< \brief Pin Number for PA12 */

+#define PORT_PA12                  (1u << 12) /**< \brief PORT Mask  for PA12 */

+#define PIN_PA13                          13  /**< \brief Pin Number for PA13 */

+#define PORT_PA13                  (1u << 13) /**< \brief PORT Mask  for PA13 */

+#define PIN_PA14                          14  /**< \brief Pin Number for PA14 */

+#define PORT_PA14                  (1u << 14) /**< \brief PORT Mask  for PA14 */

+#define PIN_PA15                          15  /**< \brief Pin Number for PA15 */

+#define PORT_PA15                  (1u << 15) /**< \brief PORT Mask  for PA15 */

+#define PIN_PA16                          16  /**< \brief Pin Number for PA16 */

+#define PORT_PA16                  (1u << 16) /**< \brief PORT Mask  for PA16 */

+#define PIN_PA17                          17  /**< \brief Pin Number for PA17 */

+#define PORT_PA17                  (1u << 17) /**< \brief PORT Mask  for PA17 */

+#define PIN_PA18                          18  /**< \brief Pin Number for PA18 */

+#define PORT_PA18                  (1u << 18) /**< \brief PORT Mask  for PA18 */

+#define PIN_PA19                          19  /**< \brief Pin Number for PA19 */

+#define PORT_PA19                  (1u << 19) /**< \brief PORT Mask  for PA19 */

+#define PIN_PA20                          20  /**< \brief Pin Number for PA20 */

+#define PORT_PA20                  (1u << 20) /**< \brief PORT Mask  for PA20 */

+#define PIN_PA21                          21  /**< \brief Pin Number for PA21 */

+#define PORT_PA21                  (1u << 21) /**< \brief PORT Mask  for PA21 */

+#define PIN_PA22                          22  /**< \brief Pin Number for PA22 */

+#define PORT_PA22                  (1u << 22) /**< \brief PORT Mask  for PA22 */

+#define PIN_PA23                          23  /**< \brief Pin Number for PA23 */

+#define PORT_PA23                  (1u << 23) /**< \brief PORT Mask  for PA23 */

+#define PIN_PA24                          24  /**< \brief Pin Number for PA24 */

+#define PORT_PA24                  (1u << 24) /**< \brief PORT Mask  for PA24 */

+#define PIN_PA25                          25  /**< \brief Pin Number for PA25 */

+#define PORT_PA25                  (1u << 25) /**< \brief PORT Mask  for PA25 */

+#define PIN_PA27                          27  /**< \brief Pin Number for PA27 */

+#define PORT_PA27                  (1u << 27) /**< \brief PORT Mask  for PA27 */

+#define PIN_PA28                          28  /**< \brief Pin Number for PA28 */

+#define PORT_PA28                  (1u << 28) /**< \brief PORT Mask  for PA28 */

+#define PIN_PA30                          30  /**< \brief Pin Number for PA30 */

+#define PORT_PA30                  (1u << 30) /**< \brief PORT Mask  for PA30 */

+#define PIN_PA31                          31  /**< \brief Pin Number for PA31 */

+#define PORT_PA31                  (1u << 31) /**< \brief PORT Mask  for PA31 */

+#define PIN_PB00                          32  /**< \brief Pin Number for PB00 */

+#define PORT_PB00                  (1u <<  0) /**< \brief PORT Mask  for PB00 */

+#define PIN_PB01                          33  /**< \brief Pin Number for PB01 */

+#define PORT_PB01                  (1u <<  1) /**< \brief PORT Mask  for PB01 */

+#define PIN_PB02                          34  /**< \brief Pin Number for PB02 */

+#define PORT_PB02                  (1u <<  2) /**< \brief PORT Mask  for PB02 */

+#define PIN_PB03                          35  /**< \brief Pin Number for PB03 */

+#define PORT_PB03                  (1u <<  3) /**< \brief PORT Mask  for PB03 */

+#define PIN_PB04                          36  /**< \brief Pin Number for PB04 */

+#define PORT_PB04                  (1u <<  4) /**< \brief PORT Mask  for PB04 */

+#define PIN_PB05                          37  /**< \brief Pin Number for PB05 */

+#define PORT_PB05                  (1u <<  5) /**< \brief PORT Mask  for PB05 */

+#define PIN_PB06                          38  /**< \brief Pin Number for PB06 */

+#define PORT_PB06                  (1u <<  6) /**< \brief PORT Mask  for PB06 */

+#define PIN_PB07                          39  /**< \brief Pin Number for PB07 */

+#define PORT_PB07                  (1u <<  7) /**< \brief PORT Mask  for PB07 */

+#define PIN_PB08                          40  /**< \brief Pin Number for PB08 */

+#define PORT_PB08                  (1u <<  8) /**< \brief PORT Mask  for PB08 */

+#define PIN_PB09                          41  /**< \brief Pin Number for PB09 */

+#define PORT_PB09                  (1u <<  9) /**< \brief PORT Mask  for PB09 */

+#define PIN_PB10                          42  /**< \brief Pin Number for PB10 */

+#define PORT_PB10                  (1u << 10) /**< \brief PORT Mask  for PB10 */

+#define PIN_PB11                          43  /**< \brief Pin Number for PB11 */

+#define PORT_PB11                  (1u << 11) /**< \brief PORT Mask  for PB11 */

+#define PIN_PB12                          44  /**< \brief Pin Number for PB12 */

+#define PORT_PB12                  (1u << 12) /**< \brief PORT Mask  for PB12 */

+#define PIN_PB13                          45  /**< \brief Pin Number for PB13 */

+#define PORT_PB13                  (1u << 13) /**< \brief PORT Mask  for PB13 */

+#define PIN_PB14                          46  /**< \brief Pin Number for PB14 */

+#define PORT_PB14                  (1u << 14) /**< \brief PORT Mask  for PB14 */

+#define PIN_PB15                          47  /**< \brief Pin Number for PB15 */

+#define PORT_PB15                  (1u << 15) /**< \brief PORT Mask  for PB15 */

+#define PIN_PB16                          48  /**< \brief Pin Number for PB16 */

+#define PORT_PB16                  (1u << 16) /**< \brief PORT Mask  for PB16 */

+#define PIN_PB17                          49  /**< \brief Pin Number for PB17 */

+#define PORT_PB17                  (1u << 17) /**< \brief PORT Mask  for PB17 */

+#define PIN_PB22                          54  /**< \brief Pin Number for PB22 */

+#define PORT_PB22                  (1u << 22) /**< \brief PORT Mask  for PB22 */

+#define PIN_PB23                          55  /**< \brief Pin Number for PB23 */

+#define PORT_PB23                  (1u << 23) /**< \brief PORT Mask  for PB23 */

+#define PIN_PB30                          62  /**< \brief Pin Number for PB30 */

+#define PORT_PB30                  (1u << 30) /**< \brief PORT Mask  for PB30 */

+#define PIN_PB31                          63  /**< \brief Pin Number for PB31 */

+#define PORT_PB31                  (1u << 31) /**< \brief PORT Mask  for PB31 */

+/* ========== PORT definition for CORE peripheral ========== */

+#define PIN_PA30G_CORE_SWCLK              30  /**< \brief CORE signal: SWCLK on PA30 mux G */

+#define MUX_PA30G_CORE_SWCLK               6

+#define PINMUX_PA30G_CORE_SWCLK    ((PIN_PA30G_CORE_SWCLK << 16) | MUX_PA30G_CORE_SWCLK)

+#define PORT_PA30G_CORE_SWCLK      (1u << 30)

+/* ========== PORT definition for GCLK peripheral ========== */

+#define PIN_PB14H_GCLK_IO0                46  /**< \brief GCLK signal: IO0 on PB14 mux H */

+#define MUX_PB14H_GCLK_IO0                 7

+#define PINMUX_PB14H_GCLK_IO0      ((PIN_PB14H_GCLK_IO0 << 16) | MUX_PB14H_GCLK_IO0)

+#define PORT_PB14H_GCLK_IO0        (1u << 14)

+#define PIN_PB22H_GCLK_IO0                54  /**< \brief GCLK signal: IO0 on PB22 mux H */

+#define MUX_PB22H_GCLK_IO0                 7

+#define PINMUX_PB22H_GCLK_IO0      ((PIN_PB22H_GCLK_IO0 << 16) | MUX_PB22H_GCLK_IO0)

+#define PORT_PB22H_GCLK_IO0        (1u << 22)

+#define PIN_PA14H_GCLK_IO0                14  /**< \brief GCLK signal: IO0 on PA14 mux H */

+#define MUX_PA14H_GCLK_IO0                 7

+#define PINMUX_PA14H_GCLK_IO0      ((PIN_PA14H_GCLK_IO0 << 16) | MUX_PA14H_GCLK_IO0)

+#define PORT_PA14H_GCLK_IO0        (1u << 14)

+#define PIN_PA27H_GCLK_IO0                27  /**< \brief GCLK signal: IO0 on PA27 mux H */

+#define MUX_PA27H_GCLK_IO0                 7

+#define PINMUX_PA27H_GCLK_IO0      ((PIN_PA27H_GCLK_IO0 << 16) | MUX_PA27H_GCLK_IO0)

+#define PORT_PA27H_GCLK_IO0        (1u << 27)

+#define PIN_PA28H_GCLK_IO0                28  /**< \brief GCLK signal: IO0 on PA28 mux H */

+#define MUX_PA28H_GCLK_IO0                 7

+#define PINMUX_PA28H_GCLK_IO0      ((PIN_PA28H_GCLK_IO0 << 16) | MUX_PA28H_GCLK_IO0)

+#define PORT_PA28H_GCLK_IO0        (1u << 28)

+#define PIN_PA30H_GCLK_IO0                30  /**< \brief GCLK signal: IO0 on PA30 mux H */

+#define MUX_PA30H_GCLK_IO0                 7

+#define PINMUX_PA30H_GCLK_IO0      ((PIN_PA30H_GCLK_IO0 << 16) | MUX_PA30H_GCLK_IO0)

+#define PORT_PA30H_GCLK_IO0        (1u << 30)

+#define PIN_PB15H_GCLK_IO1                47  /**< \brief GCLK signal: IO1 on PB15 mux H */

+#define MUX_PB15H_GCLK_IO1                 7

+#define PINMUX_PB15H_GCLK_IO1      ((PIN_PB15H_GCLK_IO1 << 16) | MUX_PB15H_GCLK_IO1)

+#define PORT_PB15H_GCLK_IO1        (1u << 15)

+#define PIN_PB23H_GCLK_IO1                55  /**< \brief GCLK signal: IO1 on PB23 mux H */

+#define MUX_PB23H_GCLK_IO1                 7

+#define PINMUX_PB23H_GCLK_IO1      ((PIN_PB23H_GCLK_IO1 << 16) | MUX_PB23H_GCLK_IO1)

+#define PORT_PB23H_GCLK_IO1        (1u << 23)

+#define PIN_PA15H_GCLK_IO1                15  /**< \brief GCLK signal: IO1 on PA15 mux H */

+#define MUX_PA15H_GCLK_IO1                 7

+#define PINMUX_PA15H_GCLK_IO1      ((PIN_PA15H_GCLK_IO1 << 16) | MUX_PA15H_GCLK_IO1)

+#define PORT_PA15H_GCLK_IO1        (1u << 15)

+#define PIN_PB16H_GCLK_IO2                48  /**< \brief GCLK signal: IO2 on PB16 mux H */

+#define MUX_PB16H_GCLK_IO2                 7

+#define PINMUX_PB16H_GCLK_IO2      ((PIN_PB16H_GCLK_IO2 << 16) | MUX_PB16H_GCLK_IO2)

+#define PORT_PB16H_GCLK_IO2        (1u << 16)

+#define PIN_PA16H_GCLK_IO2                16  /**< \brief GCLK signal: IO2 on PA16 mux H */

+#define MUX_PA16H_GCLK_IO2                 7

+#define PINMUX_PA16H_GCLK_IO2      ((PIN_PA16H_GCLK_IO2 << 16) | MUX_PA16H_GCLK_IO2)

+#define PORT_PA16H_GCLK_IO2        (1u << 16)

+#define PIN_PA17H_GCLK_IO3                17  /**< \brief GCLK signal: IO3 on PA17 mux H */

+#define MUX_PA17H_GCLK_IO3                 7

+#define PINMUX_PA17H_GCLK_IO3      ((PIN_PA17H_GCLK_IO3 << 16) | MUX_PA17H_GCLK_IO3)

+#define PORT_PA17H_GCLK_IO3        (1u << 17)

+#define PIN_PB17H_GCLK_IO3                49  /**< \brief GCLK signal: IO3 on PB17 mux H */

+#define MUX_PB17H_GCLK_IO3                 7

+#define PINMUX_PB17H_GCLK_IO3      ((PIN_PB17H_GCLK_IO3 << 16) | MUX_PB17H_GCLK_IO3)

+#define PORT_PB17H_GCLK_IO3        (1u << 17)

+#define PIN_PA10H_GCLK_IO4                10  /**< \brief GCLK signal: IO4 on PA10 mux H */

+#define MUX_PA10H_GCLK_IO4                 7

+#define PINMUX_PA10H_GCLK_IO4      ((PIN_PA10H_GCLK_IO4 << 16) | MUX_PA10H_GCLK_IO4)

+#define PORT_PA10H_GCLK_IO4        (1u << 10)

+#define PIN_PA20H_GCLK_IO4                20  /**< \brief GCLK signal: IO4 on PA20 mux H */

+#define MUX_PA20H_GCLK_IO4                 7

+#define PINMUX_PA20H_GCLK_IO4      ((PIN_PA20H_GCLK_IO4 << 16) | MUX_PA20H_GCLK_IO4)

+#define PORT_PA20H_GCLK_IO4        (1u << 20)

+#define PIN_PB10H_GCLK_IO4                42  /**< \brief GCLK signal: IO4 on PB10 mux H */

+#define MUX_PB10H_GCLK_IO4                 7

+#define PINMUX_PB10H_GCLK_IO4      ((PIN_PB10H_GCLK_IO4 << 16) | MUX_PB10H_GCLK_IO4)

+#define PORT_PB10H_GCLK_IO4        (1u << 10)

+#define PIN_PA11H_GCLK_IO5                11  /**< \brief GCLK signal: IO5 on PA11 mux H */

+#define MUX_PA11H_GCLK_IO5                 7

+#define PINMUX_PA11H_GCLK_IO5      ((PIN_PA11H_GCLK_IO5 << 16) | MUX_PA11H_GCLK_IO5)

+#define PORT_PA11H_GCLK_IO5        (1u << 11)

+#define PIN_PA21H_GCLK_IO5                21  /**< \brief GCLK signal: IO5 on PA21 mux H */

+#define MUX_PA21H_GCLK_IO5                 7

+#define PINMUX_PA21H_GCLK_IO5      ((PIN_PA21H_GCLK_IO5 << 16) | MUX_PA21H_GCLK_IO5)

+#define PORT_PA21H_GCLK_IO5        (1u << 21)

+#define PIN_PB11H_GCLK_IO5                43  /**< \brief GCLK signal: IO5 on PB11 mux H */

+#define MUX_PB11H_GCLK_IO5                 7

+#define PINMUX_PB11H_GCLK_IO5      ((PIN_PB11H_GCLK_IO5 << 16) | MUX_PB11H_GCLK_IO5)

+#define PORT_PB11H_GCLK_IO5        (1u << 11)

+#define PIN_PA22H_GCLK_IO6                22  /**< \brief GCLK signal: IO6 on PA22 mux H */

+#define MUX_PA22H_GCLK_IO6                 7

+#define PINMUX_PA22H_GCLK_IO6      ((PIN_PA22H_GCLK_IO6 << 16) | MUX_PA22H_GCLK_IO6)

+#define PORT_PA22H_GCLK_IO6        (1u << 22)

+#define PIN_PB12H_GCLK_IO6                44  /**< \brief GCLK signal: IO6 on PB12 mux H */

+#define MUX_PB12H_GCLK_IO6                 7

+#define PINMUX_PB12H_GCLK_IO6      ((PIN_PB12H_GCLK_IO6 << 16) | MUX_PB12H_GCLK_IO6)

+#define PORT_PB12H_GCLK_IO6        (1u << 12)

+#define PIN_PA23H_GCLK_IO7                23  /**< \brief GCLK signal: IO7 on PA23 mux H */

+#define MUX_PA23H_GCLK_IO7                 7

+#define PINMUX_PA23H_GCLK_IO7      ((PIN_PA23H_GCLK_IO7 << 16) | MUX_PA23H_GCLK_IO7)

+#define PORT_PA23H_GCLK_IO7        (1u << 23)

+#define PIN_PB13H_GCLK_IO7                45  /**< \brief GCLK signal: IO7 on PB13 mux H */

+#define MUX_PB13H_GCLK_IO7                 7

+#define PINMUX_PB13H_GCLK_IO7      ((PIN_PB13H_GCLK_IO7 << 16) | MUX_PB13H_GCLK_IO7)

+#define PORT_PB13H_GCLK_IO7        (1u << 13)

+/* ========== PORT definition for EIC peripheral ========== */

+#define PIN_PA16A_EIC_EXTINT0             16  /**< \brief EIC signal: EXTINT0 on PA16 mux A */

+#define MUX_PA16A_EIC_EXTINT0              0

+#define PINMUX_PA16A_EIC_EXTINT0   ((PIN_PA16A_EIC_EXTINT0 << 16) | MUX_PA16A_EIC_EXTINT0)

+#define PORT_PA16A_EIC_EXTINT0     (1u << 16)

+#define PIN_PB00A_EIC_EXTINT0             32  /**< \brief EIC signal: EXTINT0 on PB00 mux A */

+#define MUX_PB00A_EIC_EXTINT0              0

+#define PINMUX_PB00A_EIC_EXTINT0   ((PIN_PB00A_EIC_EXTINT0 << 16) | MUX_PB00A_EIC_EXTINT0)

+#define PORT_PB00A_EIC_EXTINT0     (1u <<  0)

+#define PIN_PB16A_EIC_EXTINT0             48  /**< \brief EIC signal: EXTINT0 on PB16 mux A */

+#define MUX_PB16A_EIC_EXTINT0              0

+#define PINMUX_PB16A_EIC_EXTINT0   ((PIN_PB16A_EIC_EXTINT0 << 16) | MUX_PB16A_EIC_EXTINT0)

+#define PORT_PB16A_EIC_EXTINT0     (1u << 16)

+#define PIN_PA00A_EIC_EXTINT0              0  /**< \brief EIC signal: EXTINT0 on PA00 mux A */

+#define MUX_PA00A_EIC_EXTINT0              0

+#define PINMUX_PA00A_EIC_EXTINT0   ((PIN_PA00A_EIC_EXTINT0 << 16) | MUX_PA00A_EIC_EXTINT0)

+#define PORT_PA00A_EIC_EXTINT0     (1u <<  0)

+#define PIN_PA17A_EIC_EXTINT1             17  /**< \brief EIC signal: EXTINT1 on PA17 mux A */

+#define MUX_PA17A_EIC_EXTINT1              0

+#define PINMUX_PA17A_EIC_EXTINT1   ((PIN_PA17A_EIC_EXTINT1 << 16) | MUX_PA17A_EIC_EXTINT1)

+#define PORT_PA17A_EIC_EXTINT1     (1u << 17)

+#define PIN_PB01A_EIC_EXTINT1             33  /**< \brief EIC signal: EXTINT1 on PB01 mux A */

+#define MUX_PB01A_EIC_EXTINT1              0

+#define PINMUX_PB01A_EIC_EXTINT1   ((PIN_PB01A_EIC_EXTINT1 << 16) | MUX_PB01A_EIC_EXTINT1)

+#define PORT_PB01A_EIC_EXTINT1     (1u <<  1)

+#define PIN_PB17A_EIC_EXTINT1             49  /**< \brief EIC signal: EXTINT1 on PB17 mux A */

+#define MUX_PB17A_EIC_EXTINT1              0

+#define PINMUX_PB17A_EIC_EXTINT1   ((PIN_PB17A_EIC_EXTINT1 << 16) | MUX_PB17A_EIC_EXTINT1)

+#define PORT_PB17A_EIC_EXTINT1     (1u << 17)

+#define PIN_PA01A_EIC_EXTINT1              1  /**< \brief EIC signal: EXTINT1 on PA01 mux A */

+#define MUX_PA01A_EIC_EXTINT1              0

+#define PINMUX_PA01A_EIC_EXTINT1   ((PIN_PA01A_EIC_EXTINT1 << 16) | MUX_PA01A_EIC_EXTINT1)

+#define PORT_PA01A_EIC_EXTINT1     (1u <<  1)

+#define PIN_PA02A_EIC_EXTINT2              2  /**< \brief EIC signal: EXTINT2 on PA02 mux A */

+#define MUX_PA02A_EIC_EXTINT2              0

+#define PINMUX_PA02A_EIC_EXTINT2   ((PIN_PA02A_EIC_EXTINT2 << 16) | MUX_PA02A_EIC_EXTINT2)

+#define PORT_PA02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA18A_EIC_EXTINT2             18  /**< \brief EIC signal: EXTINT2 on PA18 mux A */

+#define MUX_PA18A_EIC_EXTINT2              0

+#define PINMUX_PA18A_EIC_EXTINT2   ((PIN_PA18A_EIC_EXTINT2 << 16) | MUX_PA18A_EIC_EXTINT2)

+#define PORT_PA18A_EIC_EXTINT2     (1u << 18)

+#define PIN_PB02A_EIC_EXTINT2             34  /**< \brief EIC signal: EXTINT2 on PB02 mux A */

+#define MUX_PB02A_EIC_EXTINT2              0

+#define PINMUX_PB02A_EIC_EXTINT2   ((PIN_PB02A_EIC_EXTINT2 << 16) | MUX_PB02A_EIC_EXTINT2)

+#define PORT_PB02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA03A_EIC_EXTINT3              3  /**< \brief EIC signal: EXTINT3 on PA03 mux A */

+#define MUX_PA03A_EIC_EXTINT3              0

+#define PINMUX_PA03A_EIC_EXTINT3   ((PIN_PA03A_EIC_EXTINT3 << 16) | MUX_PA03A_EIC_EXTINT3)

+#define PORT_PA03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA19A_EIC_EXTINT3             19  /**< \brief EIC signal: EXTINT3 on PA19 mux A */

+#define MUX_PA19A_EIC_EXTINT3              0

+#define PINMUX_PA19A_EIC_EXTINT3   ((PIN_PA19A_EIC_EXTINT3 << 16) | MUX_PA19A_EIC_EXTINT3)

+#define PORT_PA19A_EIC_EXTINT3     (1u << 19)

+#define PIN_PB03A_EIC_EXTINT3             35  /**< \brief EIC signal: EXTINT3 on PB03 mux A */

+#define MUX_PB03A_EIC_EXTINT3              0

+#define PINMUX_PB03A_EIC_EXTINT3   ((PIN_PB03A_EIC_EXTINT3 << 16) | MUX_PB03A_EIC_EXTINT3)

+#define PORT_PB03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA04A_EIC_EXTINT4              4  /**< \brief EIC signal: EXTINT4 on PA04 mux A */

+#define MUX_PA04A_EIC_EXTINT4              0

+#define PINMUX_PA04A_EIC_EXTINT4   ((PIN_PA04A_EIC_EXTINT4 << 16) | MUX_PA04A_EIC_EXTINT4)

+#define PORT_PA04A_EIC_EXTINT4     (1u <<  4)

+#define PIN_PA20A_EIC_EXTINT4             20  /**< \brief EIC signal: EXTINT4 on PA20 mux A */

+#define MUX_PA20A_EIC_EXTINT4              0

+#define PINMUX_PA20A_EIC_EXTINT4   ((PIN_PA20A_EIC_EXTINT4 << 16) | MUX_PA20A_EIC_EXTINT4)

+#define PORT_PA20A_EIC_EXTINT4     (1u << 20)

+#define PIN_PB04A_EIC_EXTINT4             36  /**< \brief EIC signal: EXTINT4 on PB04 mux A */

+#define MUX_PB04A_EIC_EXTINT4              0

+#define PINMUX_PB04A_EIC_EXTINT4   ((PIN_PB04A_EIC_EXTINT4 << 16) | MUX_PB04A_EIC_EXTINT4)

+#define PORT_PB04A_EIC_EXTINT4     (1u <<  4)

+#define PIN_PA05A_EIC_EXTINT5              5  /**< \brief EIC signal: EXTINT5 on PA05 mux A */

+#define MUX_PA05A_EIC_EXTINT5              0

+#define PINMUX_PA05A_EIC_EXTINT5   ((PIN_PA05A_EIC_EXTINT5 << 16) | MUX_PA05A_EIC_EXTINT5)

+#define PORT_PA05A_EIC_EXTINT5     (1u <<  5)

+#define PIN_PA21A_EIC_EXTINT5             21  /**< \brief EIC signal: EXTINT5 on PA21 mux A */

+#define MUX_PA21A_EIC_EXTINT5              0

+#define PINMUX_PA21A_EIC_EXTINT5   ((PIN_PA21A_EIC_EXTINT5 << 16) | MUX_PA21A_EIC_EXTINT5)

+#define PORT_PA21A_EIC_EXTINT5     (1u << 21)

+#define PIN_PB05A_EIC_EXTINT5             37  /**< \brief EIC signal: EXTINT5 on PB05 mux A */

+#define MUX_PB05A_EIC_EXTINT5              0

+#define PINMUX_PB05A_EIC_EXTINT5   ((PIN_PB05A_EIC_EXTINT5 << 16) | MUX_PB05A_EIC_EXTINT5)

+#define PORT_PB05A_EIC_EXTINT5     (1u <<  5)

+#define PIN_PA06A_EIC_EXTINT6              6  /**< \brief EIC signal: EXTINT6 on PA06 mux A */

+#define MUX_PA06A_EIC_EXTINT6              0

+#define PINMUX_PA06A_EIC_EXTINT6   ((PIN_PA06A_EIC_EXTINT6 << 16) | MUX_PA06A_EIC_EXTINT6)

+#define PORT_PA06A_EIC_EXTINT6     (1u <<  6)

+#define PIN_PA22A_EIC_EXTINT6             22  /**< \brief EIC signal: EXTINT6 on PA22 mux A */

+#define MUX_PA22A_EIC_EXTINT6              0

+#define PINMUX_PA22A_EIC_EXTINT6   ((PIN_PA22A_EIC_EXTINT6 << 16) | MUX_PA22A_EIC_EXTINT6)

+#define PORT_PA22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PB06A_EIC_EXTINT6             38  /**< \brief EIC signal: EXTINT6 on PB06 mux A */

+#define MUX_PB06A_EIC_EXTINT6              0

+#define PINMUX_PB06A_EIC_EXTINT6   ((PIN_PB06A_EIC_EXTINT6 << 16) | MUX_PB06A_EIC_EXTINT6)

+#define PORT_PB06A_EIC_EXTINT6     (1u <<  6)

+#define PIN_PB22A_EIC_EXTINT6             54  /**< \brief EIC signal: EXTINT6 on PB22 mux A */

+#define MUX_PB22A_EIC_EXTINT6              0

+#define PINMUX_PB22A_EIC_EXTINT6   ((PIN_PB22A_EIC_EXTINT6 << 16) | MUX_PB22A_EIC_EXTINT6)

+#define PORT_PB22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PA07A_EIC_EXTINT7              7  /**< \brief EIC signal: EXTINT7 on PA07 mux A */

+#define MUX_PA07A_EIC_EXTINT7              0

+#define PINMUX_PA07A_EIC_EXTINT7   ((PIN_PA07A_EIC_EXTINT7 << 16) | MUX_PA07A_EIC_EXTINT7)

+#define PORT_PA07A_EIC_EXTINT7     (1u <<  7)

+#define PIN_PA23A_EIC_EXTINT7             23  /**< \brief EIC signal: EXTINT7 on PA23 mux A */

+#define MUX_PA23A_EIC_EXTINT7              0

+#define PINMUX_PA23A_EIC_EXTINT7   ((PIN_PA23A_EIC_EXTINT7 << 16) | MUX_PA23A_EIC_EXTINT7)

+#define PORT_PA23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PB07A_EIC_EXTINT7             39  /**< \brief EIC signal: EXTINT7 on PB07 mux A */

+#define MUX_PB07A_EIC_EXTINT7              0

+#define PINMUX_PB07A_EIC_EXTINT7   ((PIN_PB07A_EIC_EXTINT7 << 16) | MUX_PB07A_EIC_EXTINT7)

+#define PORT_PB07A_EIC_EXTINT7     (1u <<  7)

+#define PIN_PB23A_EIC_EXTINT7             55  /**< \brief EIC signal: EXTINT7 on PB23 mux A */

+#define MUX_PB23A_EIC_EXTINT7              0

+#define PINMUX_PB23A_EIC_EXTINT7   ((PIN_PB23A_EIC_EXTINT7 << 16) | MUX_PB23A_EIC_EXTINT7)

+#define PORT_PB23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PA28A_EIC_EXTINT8             28  /**< \brief EIC signal: EXTINT8 on PA28 mux A */

+#define MUX_PA28A_EIC_EXTINT8              0

+#define PINMUX_PA28A_EIC_EXTINT8   ((PIN_PA28A_EIC_EXTINT8 << 16) | MUX_PA28A_EIC_EXTINT8)

+#define PORT_PA28A_EIC_EXTINT8     (1u << 28)

+#define PIN_PB08A_EIC_EXTINT8             40  /**< \brief EIC signal: EXTINT8 on PB08 mux A */

+#define MUX_PB08A_EIC_EXTINT8              0

+#define PINMUX_PB08A_EIC_EXTINT8   ((PIN_PB08A_EIC_EXTINT8 << 16) | MUX_PB08A_EIC_EXTINT8)

+#define PORT_PB08A_EIC_EXTINT8     (1u <<  8)

+#define PIN_PA09A_EIC_EXTINT9              9  /**< \brief EIC signal: EXTINT9 on PA09 mux A */

+#define MUX_PA09A_EIC_EXTINT9              0

+#define PINMUX_PA09A_EIC_EXTINT9   ((PIN_PA09A_EIC_EXTINT9 << 16) | MUX_PA09A_EIC_EXTINT9)

+#define PORT_PA09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PB09A_EIC_EXTINT9             41  /**< \brief EIC signal: EXTINT9 on PB09 mux A */

+#define MUX_PB09A_EIC_EXTINT9              0

+#define PINMUX_PB09A_EIC_EXTINT9   ((PIN_PB09A_EIC_EXTINT9 << 16) | MUX_PB09A_EIC_EXTINT9)

+#define PORT_PB09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PA10A_EIC_EXTINT10            10  /**< \brief EIC signal: EXTINT10 on PA10 mux A */

+#define MUX_PA10A_EIC_EXTINT10             0

+#define PINMUX_PA10A_EIC_EXTINT10  ((PIN_PA10A_EIC_EXTINT10 << 16) | MUX_PA10A_EIC_EXTINT10)

+#define PORT_PA10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA30A_EIC_EXTINT10            30  /**< \brief EIC signal: EXTINT10 on PA30 mux A */

+#define MUX_PA30A_EIC_EXTINT10             0

+#define PINMUX_PA30A_EIC_EXTINT10  ((PIN_PA30A_EIC_EXTINT10 << 16) | MUX_PA30A_EIC_EXTINT10)

+#define PORT_PA30A_EIC_EXTINT10    (1u << 30)

+#define PIN_PB10A_EIC_EXTINT10            42  /**< \brief EIC signal: EXTINT10 on PB10 mux A */

+#define MUX_PB10A_EIC_EXTINT10             0

+#define PINMUX_PB10A_EIC_EXTINT10  ((PIN_PB10A_EIC_EXTINT10 << 16) | MUX_PB10A_EIC_EXTINT10)

+#define PORT_PB10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA11A_EIC_EXTINT11            11  /**< \brief EIC signal: EXTINT11 on PA11 mux A */

+#define MUX_PA11A_EIC_EXTINT11             0

+#define PINMUX_PA11A_EIC_EXTINT11  ((PIN_PA11A_EIC_EXTINT11 << 16) | MUX_PA11A_EIC_EXTINT11)

+#define PORT_PA11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA31A_EIC_EXTINT11            31  /**< \brief EIC signal: EXTINT11 on PA31 mux A */

+#define MUX_PA31A_EIC_EXTINT11             0

+#define PINMUX_PA31A_EIC_EXTINT11  ((PIN_PA31A_EIC_EXTINT11 << 16) | MUX_PA31A_EIC_EXTINT11)

+#define PORT_PA31A_EIC_EXTINT11    (1u << 31)

+#define PIN_PB11A_EIC_EXTINT11            43  /**< \brief EIC signal: EXTINT11 on PB11 mux A */

+#define MUX_PB11A_EIC_EXTINT11             0

+#define PINMUX_PB11A_EIC_EXTINT11  ((PIN_PB11A_EIC_EXTINT11 << 16) | MUX_PB11A_EIC_EXTINT11)

+#define PORT_PB11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA12A_EIC_EXTINT12            12  /**< \brief EIC signal: EXTINT12 on PA12 mux A */

+#define MUX_PA12A_EIC_EXTINT12             0

+#define PINMUX_PA12A_EIC_EXTINT12  ((PIN_PA12A_EIC_EXTINT12 << 16) | MUX_PA12A_EIC_EXTINT12)

+#define PORT_PA12A_EIC_EXTINT12    (1u << 12)

+#define PIN_PA24A_EIC_EXTINT12            24  /**< \brief EIC signal: EXTINT12 on PA24 mux A */

+#define MUX_PA24A_EIC_EXTINT12             0

+#define PINMUX_PA24A_EIC_EXTINT12  ((PIN_PA24A_EIC_EXTINT12 << 16) | MUX_PA24A_EIC_EXTINT12)

+#define PORT_PA24A_EIC_EXTINT12    (1u << 24)

+#define PIN_PB12A_EIC_EXTINT12            44  /**< \brief EIC signal: EXTINT12 on PB12 mux A */

+#define MUX_PB12A_EIC_EXTINT12             0

+#define PINMUX_PB12A_EIC_EXTINT12  ((PIN_PB12A_EIC_EXTINT12 << 16) | MUX_PB12A_EIC_EXTINT12)

+#define PORT_PB12A_EIC_EXTINT12    (1u << 12)

+#define PIN_PA13A_EIC_EXTINT13            13  /**< \brief EIC signal: EXTINT13 on PA13 mux A */

+#define MUX_PA13A_EIC_EXTINT13             0

+#define PINMUX_PA13A_EIC_EXTINT13  ((PIN_PA13A_EIC_EXTINT13 << 16) | MUX_PA13A_EIC_EXTINT13)

+#define PORT_PA13A_EIC_EXTINT13    (1u << 13)

+#define PIN_PA25A_EIC_EXTINT13            25  /**< \brief EIC signal: EXTINT13 on PA25 mux A */

+#define MUX_PA25A_EIC_EXTINT13             0

+#define PINMUX_PA25A_EIC_EXTINT13  ((PIN_PA25A_EIC_EXTINT13 << 16) | MUX_PA25A_EIC_EXTINT13)

+#define PORT_PA25A_EIC_EXTINT13    (1u << 25)

+#define PIN_PB13A_EIC_EXTINT13            45  /**< \brief EIC signal: EXTINT13 on PB13 mux A */

+#define MUX_PB13A_EIC_EXTINT13             0

+#define PINMUX_PB13A_EIC_EXTINT13  ((PIN_PB13A_EIC_EXTINT13 << 16) | MUX_PB13A_EIC_EXTINT13)

+#define PORT_PB13A_EIC_EXTINT13    (1u << 13)

+#define PIN_PB14A_EIC_EXTINT14            46  /**< \brief EIC signal: EXTINT14 on PB14 mux A */

+#define MUX_PB14A_EIC_EXTINT14             0

+#define PINMUX_PB14A_EIC_EXTINT14  ((PIN_PB14A_EIC_EXTINT14 << 16) | MUX_PB14A_EIC_EXTINT14)

+#define PORT_PB14A_EIC_EXTINT14    (1u << 14)

+#define PIN_PB30A_EIC_EXTINT14            62  /**< \brief EIC signal: EXTINT14 on PB30 mux A */

+#define MUX_PB30A_EIC_EXTINT14             0

+#define PINMUX_PB30A_EIC_EXTINT14  ((PIN_PB30A_EIC_EXTINT14 << 16) | MUX_PB30A_EIC_EXTINT14)

+#define PORT_PB30A_EIC_EXTINT14    (1u << 30)

+#define PIN_PA14A_EIC_EXTINT14            14  /**< \brief EIC signal: EXTINT14 on PA14 mux A */

+#define MUX_PA14A_EIC_EXTINT14             0

+#define PINMUX_PA14A_EIC_EXTINT14  ((PIN_PA14A_EIC_EXTINT14 << 16) | MUX_PA14A_EIC_EXTINT14)

+#define PORT_PA14A_EIC_EXTINT14    (1u << 14)

+#define PIN_PA27A_EIC_EXTINT15            27  /**< \brief EIC signal: EXTINT15 on PA27 mux A */

+#define MUX_PA27A_EIC_EXTINT15             0

+#define PINMUX_PA27A_EIC_EXTINT15  ((PIN_PA27A_EIC_EXTINT15 << 16) | MUX_PA27A_EIC_EXTINT15)

+#define PORT_PA27A_EIC_EXTINT15    (1u << 27)

+#define PIN_PB15A_EIC_EXTINT15            47  /**< \brief EIC signal: EXTINT15 on PB15 mux A */

+#define MUX_PB15A_EIC_EXTINT15             0

+#define PINMUX_PB15A_EIC_EXTINT15  ((PIN_PB15A_EIC_EXTINT15 << 16) | MUX_PB15A_EIC_EXTINT15)

+#define PORT_PB15A_EIC_EXTINT15    (1u << 15)

+#define PIN_PB31A_EIC_EXTINT15            63  /**< \brief EIC signal: EXTINT15 on PB31 mux A */

+#define MUX_PB31A_EIC_EXTINT15             0

+#define PINMUX_PB31A_EIC_EXTINT15  ((PIN_PB31A_EIC_EXTINT15 << 16) | MUX_PB31A_EIC_EXTINT15)

+#define PORT_PB31A_EIC_EXTINT15    (1u << 31)

+#define PIN_PA15A_EIC_EXTINT15            15  /**< \brief EIC signal: EXTINT15 on PA15 mux A */

+#define MUX_PA15A_EIC_EXTINT15             0

+#define PINMUX_PA15A_EIC_EXTINT15  ((PIN_PA15A_EIC_EXTINT15 << 16) | MUX_PA15A_EIC_EXTINT15)

+#define PORT_PA15A_EIC_EXTINT15    (1u << 15)

+#define PIN_PA08A_EIC_NMI                  8  /**< \brief EIC signal: NMI on PA08 mux A */

+#define MUX_PA08A_EIC_NMI                  0

+#define PINMUX_PA08A_EIC_NMI       ((PIN_PA08A_EIC_NMI << 16) | MUX_PA08A_EIC_NMI)

+#define PORT_PA08A_EIC_NMI         (1u <<  8)

+/* ========== PORT definition for SERCOM0 peripheral ========== */

+#define PIN_PA04D_SERCOM0_PAD0             4  /**< \brief SERCOM0 signal: PAD0 on PA04 mux D */

+#define MUX_PA04D_SERCOM0_PAD0             3

+#define PINMUX_PA04D_SERCOM0_PAD0  ((PIN_PA04D_SERCOM0_PAD0 << 16) | MUX_PA04D_SERCOM0_PAD0)

+#define PORT_PA04D_SERCOM0_PAD0    (1u <<  4)

+#define PIN_PA08C_SERCOM0_PAD0             8  /**< \brief SERCOM0 signal: PAD0 on PA08 mux C */

+#define MUX_PA08C_SERCOM0_PAD0             2

+#define PINMUX_PA08C_SERCOM0_PAD0  ((PIN_PA08C_SERCOM0_PAD0 << 16) | MUX_PA08C_SERCOM0_PAD0)

+#define PORT_PA08C_SERCOM0_PAD0    (1u <<  8)

+#define PIN_PA05D_SERCOM0_PAD1             5  /**< \brief SERCOM0 signal: PAD1 on PA05 mux D */

+#define MUX_PA05D_SERCOM0_PAD1             3

+#define PINMUX_PA05D_SERCOM0_PAD1  ((PIN_PA05D_SERCOM0_PAD1 << 16) | MUX_PA05D_SERCOM0_PAD1)

+#define PORT_PA05D_SERCOM0_PAD1    (1u <<  5)

+#define PIN_PA09C_SERCOM0_PAD1             9  /**< \brief SERCOM0 signal: PAD1 on PA09 mux C */

+#define MUX_PA09C_SERCOM0_PAD1             2

+#define PINMUX_PA09C_SERCOM0_PAD1  ((PIN_PA09C_SERCOM0_PAD1 << 16) | MUX_PA09C_SERCOM0_PAD1)

+#define PORT_PA09C_SERCOM0_PAD1    (1u <<  9)

+#define PIN_PA06D_SERCOM0_PAD2             6  /**< \brief SERCOM0 signal: PAD2 on PA06 mux D */

+#define MUX_PA06D_SERCOM0_PAD2             3

+#define PINMUX_PA06D_SERCOM0_PAD2  ((PIN_PA06D_SERCOM0_PAD2 << 16) | MUX_PA06D_SERCOM0_PAD2)

+#define PORT_PA06D_SERCOM0_PAD2    (1u <<  6)

+#define PIN_PA10C_SERCOM0_PAD2            10  /**< \brief SERCOM0 signal: PAD2 on PA10 mux C */

+#define MUX_PA10C_SERCOM0_PAD2             2

+#define PINMUX_PA10C_SERCOM0_PAD2  ((PIN_PA10C_SERCOM0_PAD2 << 16) | MUX_PA10C_SERCOM0_PAD2)

+#define PORT_PA10C_SERCOM0_PAD2    (1u << 10)

+#define PIN_PA07D_SERCOM0_PAD3             7  /**< \brief SERCOM0 signal: PAD3 on PA07 mux D */

+#define MUX_PA07D_SERCOM0_PAD3             3

+#define PINMUX_PA07D_SERCOM0_PAD3  ((PIN_PA07D_SERCOM0_PAD3 << 16) | MUX_PA07D_SERCOM0_PAD3)

+#define PORT_PA07D_SERCOM0_PAD3    (1u <<  7)

+#define PIN_PA11C_SERCOM0_PAD3            11  /**< \brief SERCOM0 signal: PAD3 on PA11 mux C */

+#define MUX_PA11C_SERCOM0_PAD3             2

+#define PINMUX_PA11C_SERCOM0_PAD3  ((PIN_PA11C_SERCOM0_PAD3 << 16) | MUX_PA11C_SERCOM0_PAD3)

+#define PORT_PA11C_SERCOM0_PAD3    (1u << 11)

+/* ========== PORT definition for SERCOM1 peripheral ========== */

+#define PIN_PA16C_SERCOM1_PAD0            16  /**< \brief SERCOM1 signal: PAD0 on PA16 mux C */

+#define MUX_PA16C_SERCOM1_PAD0             2

+#define PINMUX_PA16C_SERCOM1_PAD0  ((PIN_PA16C_SERCOM1_PAD0 << 16) | MUX_PA16C_SERCOM1_PAD0)

+#define PORT_PA16C_SERCOM1_PAD0    (1u << 16)

+#define PIN_PA00D_SERCOM1_PAD0             0  /**< \brief SERCOM1 signal: PAD0 on PA00 mux D */

+#define MUX_PA00D_SERCOM1_PAD0             3

+#define PINMUX_PA00D_SERCOM1_PAD0  ((PIN_PA00D_SERCOM1_PAD0 << 16) | MUX_PA00D_SERCOM1_PAD0)

+#define PORT_PA00D_SERCOM1_PAD0    (1u <<  0)

+#define PIN_PA17C_SERCOM1_PAD1            17  /**< \brief SERCOM1 signal: PAD1 on PA17 mux C */

+#define MUX_PA17C_SERCOM1_PAD1             2

+#define PINMUX_PA17C_SERCOM1_PAD1  ((PIN_PA17C_SERCOM1_PAD1 << 16) | MUX_PA17C_SERCOM1_PAD1)

+#define PORT_PA17C_SERCOM1_PAD1    (1u << 17)

+#define PIN_PA01D_SERCOM1_PAD1             1  /**< \brief SERCOM1 signal: PAD1 on PA01 mux D */

+#define MUX_PA01D_SERCOM1_PAD1             3

+#define PINMUX_PA01D_SERCOM1_PAD1  ((PIN_PA01D_SERCOM1_PAD1 << 16) | MUX_PA01D_SERCOM1_PAD1)

+#define PORT_PA01D_SERCOM1_PAD1    (1u <<  1)

+#define PIN_PA30D_SERCOM1_PAD2            30  /**< \brief SERCOM1 signal: PAD2 on PA30 mux D */

+#define MUX_PA30D_SERCOM1_PAD2             3

+#define PINMUX_PA30D_SERCOM1_PAD2  ((PIN_PA30D_SERCOM1_PAD2 << 16) | MUX_PA30D_SERCOM1_PAD2)

+#define PORT_PA30D_SERCOM1_PAD2    (1u << 30)

+#define PIN_PA18C_SERCOM1_PAD2            18  /**< \brief SERCOM1 signal: PAD2 on PA18 mux C */

+#define MUX_PA18C_SERCOM1_PAD2             2

+#define PINMUX_PA18C_SERCOM1_PAD2  ((PIN_PA18C_SERCOM1_PAD2 << 16) | MUX_PA18C_SERCOM1_PAD2)

+#define PORT_PA18C_SERCOM1_PAD2    (1u << 18)

+#define PIN_PA31D_SERCOM1_PAD3            31  /**< \brief SERCOM1 signal: PAD3 on PA31 mux D */

+#define MUX_PA31D_SERCOM1_PAD3             3

+#define PINMUX_PA31D_SERCOM1_PAD3  ((PIN_PA31D_SERCOM1_PAD3 << 16) | MUX_PA31D_SERCOM1_PAD3)

+#define PORT_PA31D_SERCOM1_PAD3    (1u << 31)

+#define PIN_PA19C_SERCOM1_PAD3            19  /**< \brief SERCOM1 signal: PAD3 on PA19 mux C */

+#define MUX_PA19C_SERCOM1_PAD3             2

+#define PINMUX_PA19C_SERCOM1_PAD3  ((PIN_PA19C_SERCOM1_PAD3 << 16) | MUX_PA19C_SERCOM1_PAD3)

+#define PORT_PA19C_SERCOM1_PAD3    (1u << 19)

+/* ========== PORT definition for SERCOM2 peripheral ========== */

+#define PIN_PA08D_SERCOM2_PAD0             8  /**< \brief SERCOM2 signal: PAD0 on PA08 mux D */

+#define MUX_PA08D_SERCOM2_PAD0             3

+#define PINMUX_PA08D_SERCOM2_PAD0  ((PIN_PA08D_SERCOM2_PAD0 << 16) | MUX_PA08D_SERCOM2_PAD0)

+#define PORT_PA08D_SERCOM2_PAD0    (1u <<  8)

+#define PIN_PA12C_SERCOM2_PAD0            12  /**< \brief SERCOM2 signal: PAD0 on PA12 mux C */

+#define MUX_PA12C_SERCOM2_PAD0             2

+#define PINMUX_PA12C_SERCOM2_PAD0  ((PIN_PA12C_SERCOM2_PAD0 << 16) | MUX_PA12C_SERCOM2_PAD0)

+#define PORT_PA12C_SERCOM2_PAD0    (1u << 12)

+#define PIN_PA09D_SERCOM2_PAD1             9  /**< \brief SERCOM2 signal: PAD1 on PA09 mux D */

+#define MUX_PA09D_SERCOM2_PAD1             3

+#define PINMUX_PA09D_SERCOM2_PAD1  ((PIN_PA09D_SERCOM2_PAD1 << 16) | MUX_PA09D_SERCOM2_PAD1)

+#define PORT_PA09D_SERCOM2_PAD1    (1u <<  9)

+#define PIN_PA13C_SERCOM2_PAD1            13  /**< \brief SERCOM2 signal: PAD1 on PA13 mux C */

+#define MUX_PA13C_SERCOM2_PAD1             2

+#define PINMUX_PA13C_SERCOM2_PAD1  ((PIN_PA13C_SERCOM2_PAD1 << 16) | MUX_PA13C_SERCOM2_PAD1)

+#define PORT_PA13C_SERCOM2_PAD1    (1u << 13)

+#define PIN_PA10D_SERCOM2_PAD2            10  /**< \brief SERCOM2 signal: PAD2 on PA10 mux D */

+#define MUX_PA10D_SERCOM2_PAD2             3

+#define PINMUX_PA10D_SERCOM2_PAD2  ((PIN_PA10D_SERCOM2_PAD2 << 16) | MUX_PA10D_SERCOM2_PAD2)

+#define PORT_PA10D_SERCOM2_PAD2    (1u << 10)

+#define PIN_PA14C_SERCOM2_PAD2            14  /**< \brief SERCOM2 signal: PAD2 on PA14 mux C */

+#define MUX_PA14C_SERCOM2_PAD2             2

+#define PINMUX_PA14C_SERCOM2_PAD2  ((PIN_PA14C_SERCOM2_PAD2 << 16) | MUX_PA14C_SERCOM2_PAD2)

+#define PORT_PA14C_SERCOM2_PAD2    (1u << 14)

+#define PIN_PA11D_SERCOM2_PAD3            11  /**< \brief SERCOM2 signal: PAD3 on PA11 mux D */

+#define MUX_PA11D_SERCOM2_PAD3             3

+#define PINMUX_PA11D_SERCOM2_PAD3  ((PIN_PA11D_SERCOM2_PAD3 << 16) | MUX_PA11D_SERCOM2_PAD3)

+#define PORT_PA11D_SERCOM2_PAD3    (1u << 11)

+#define PIN_PA15C_SERCOM2_PAD3            15  /**< \brief SERCOM2 signal: PAD3 on PA15 mux C */

+#define MUX_PA15C_SERCOM2_PAD3             2

+#define PINMUX_PA15C_SERCOM2_PAD3  ((PIN_PA15C_SERCOM2_PAD3 << 16) | MUX_PA15C_SERCOM2_PAD3)

+#define PORT_PA15C_SERCOM2_PAD3    (1u << 15)

+/* ========== PORT definition for SERCOM3 peripheral ========== */

+#define PIN_PA16D_SERCOM3_PAD0            16  /**< \brief SERCOM3 signal: PAD0 on PA16 mux D */

+#define MUX_PA16D_SERCOM3_PAD0             3

+#define PINMUX_PA16D_SERCOM3_PAD0  ((PIN_PA16D_SERCOM3_PAD0 << 16) | MUX_PA16D_SERCOM3_PAD0)

+#define PORT_PA16D_SERCOM3_PAD0    (1u << 16)

+#define PIN_PA22C_SERCOM3_PAD0            22  /**< \brief SERCOM3 signal: PAD0 on PA22 mux C */

+#define MUX_PA22C_SERCOM3_PAD0             2

+#define PINMUX_PA22C_SERCOM3_PAD0  ((PIN_PA22C_SERCOM3_PAD0 << 16) | MUX_PA22C_SERCOM3_PAD0)

+#define PORT_PA22C_SERCOM3_PAD0    (1u << 22)

+#define PIN_PA17D_SERCOM3_PAD1            17  /**< \brief SERCOM3 signal: PAD1 on PA17 mux D */

+#define MUX_PA17D_SERCOM3_PAD1             3

+#define PINMUX_PA17D_SERCOM3_PAD1  ((PIN_PA17D_SERCOM3_PAD1 << 16) | MUX_PA17D_SERCOM3_PAD1)

+#define PORT_PA17D_SERCOM3_PAD1    (1u << 17)

+#define PIN_PA23C_SERCOM3_PAD1            23  /**< \brief SERCOM3 signal: PAD1 on PA23 mux C */

+#define MUX_PA23C_SERCOM3_PAD1             2

+#define PINMUX_PA23C_SERCOM3_PAD1  ((PIN_PA23C_SERCOM3_PAD1 << 16) | MUX_PA23C_SERCOM3_PAD1)

+#define PORT_PA23C_SERCOM3_PAD1    (1u << 23)

+#define PIN_PA18D_SERCOM3_PAD2            18  /**< \brief SERCOM3 signal: PAD2 on PA18 mux D */

+#define MUX_PA18D_SERCOM3_PAD2             3

+#define PINMUX_PA18D_SERCOM3_PAD2  ((PIN_PA18D_SERCOM3_PAD2 << 16) | MUX_PA18D_SERCOM3_PAD2)

+#define PORT_PA18D_SERCOM3_PAD2    (1u << 18)

+#define PIN_PA20D_SERCOM3_PAD2            20  /**< \brief SERCOM3 signal: PAD2 on PA20 mux D */

+#define MUX_PA20D_SERCOM3_PAD2             3

+#define PINMUX_PA20D_SERCOM3_PAD2  ((PIN_PA20D_SERCOM3_PAD2 << 16) | MUX_PA20D_SERCOM3_PAD2)

+#define PORT_PA20D_SERCOM3_PAD2    (1u << 20)

+#define PIN_PA24C_SERCOM3_PAD2            24  /**< \brief SERCOM3 signal: PAD2 on PA24 mux C */

+#define MUX_PA24C_SERCOM3_PAD2             2

+#define PINMUX_PA24C_SERCOM3_PAD2  ((PIN_PA24C_SERCOM3_PAD2 << 16) | MUX_PA24C_SERCOM3_PAD2)

+#define PORT_PA24C_SERCOM3_PAD2    (1u << 24)

+#define PIN_PA19D_SERCOM3_PAD3            19  /**< \brief SERCOM3 signal: PAD3 on PA19 mux D */

+#define MUX_PA19D_SERCOM3_PAD3             3

+#define PINMUX_PA19D_SERCOM3_PAD3  ((PIN_PA19D_SERCOM3_PAD3 << 16) | MUX_PA19D_SERCOM3_PAD3)

+#define PORT_PA19D_SERCOM3_PAD3    (1u << 19)

+#define PIN_PA21D_SERCOM3_PAD3            21  /**< \brief SERCOM3 signal: PAD3 on PA21 mux D */

+#define MUX_PA21D_SERCOM3_PAD3             3

+#define PINMUX_PA21D_SERCOM3_PAD3  ((PIN_PA21D_SERCOM3_PAD3 << 16) | MUX_PA21D_SERCOM3_PAD3)

+#define PORT_PA21D_SERCOM3_PAD3    (1u << 21)

+#define PIN_PA25C_SERCOM3_PAD3            25  /**< \brief SERCOM3 signal: PAD3 on PA25 mux C */

+#define MUX_PA25C_SERCOM3_PAD3             2

+#define PINMUX_PA25C_SERCOM3_PAD3  ((PIN_PA25C_SERCOM3_PAD3 << 16) | MUX_PA25C_SERCOM3_PAD3)

+#define PORT_PA25C_SERCOM3_PAD3    (1u << 25)

+/* ========== PORT definition for SERCOM4 peripheral ========== */

+#define PIN_PA12D_SERCOM4_PAD0            12  /**< \brief SERCOM4 signal: PAD0 on PA12 mux D */

+#define MUX_PA12D_SERCOM4_PAD0             3

+#define PINMUX_PA12D_SERCOM4_PAD0  ((PIN_PA12D_SERCOM4_PAD0 << 16) | MUX_PA12D_SERCOM4_PAD0)

+#define PORT_PA12D_SERCOM4_PAD0    (1u << 12)

+#define PIN_PB08D_SERCOM4_PAD0            40  /**< \brief SERCOM4 signal: PAD0 on PB08 mux D */

+#define MUX_PB08D_SERCOM4_PAD0             3

+#define PINMUX_PB08D_SERCOM4_PAD0  ((PIN_PB08D_SERCOM4_PAD0 << 16) | MUX_PB08D_SERCOM4_PAD0)

+#define PORT_PB08D_SERCOM4_PAD0    (1u <<  8)

+#define PIN_PB12C_SERCOM4_PAD0            44  /**< \brief SERCOM4 signal: PAD0 on PB12 mux C */

+#define MUX_PB12C_SERCOM4_PAD0             2

+#define PINMUX_PB12C_SERCOM4_PAD0  ((PIN_PB12C_SERCOM4_PAD0 << 16) | MUX_PB12C_SERCOM4_PAD0)

+#define PORT_PB12C_SERCOM4_PAD0    (1u << 12)

+#define PIN_PA13D_SERCOM4_PAD1            13  /**< \brief SERCOM4 signal: PAD1 on PA13 mux D */

+#define MUX_PA13D_SERCOM4_PAD1             3

+#define PINMUX_PA13D_SERCOM4_PAD1  ((PIN_PA13D_SERCOM4_PAD1 << 16) | MUX_PA13D_SERCOM4_PAD1)

+#define PORT_PA13D_SERCOM4_PAD1    (1u << 13)

+#define PIN_PB09D_SERCOM4_PAD1            41  /**< \brief SERCOM4 signal: PAD1 on PB09 mux D */

+#define MUX_PB09D_SERCOM4_PAD1             3

+#define PINMUX_PB09D_SERCOM4_PAD1  ((PIN_PB09D_SERCOM4_PAD1 << 16) | MUX_PB09D_SERCOM4_PAD1)

+#define PORT_PB09D_SERCOM4_PAD1    (1u <<  9)

+#define PIN_PB13C_SERCOM4_PAD1            45  /**< \brief SERCOM4 signal: PAD1 on PB13 mux C */

+#define MUX_PB13C_SERCOM4_PAD1             2

+#define PINMUX_PB13C_SERCOM4_PAD1  ((PIN_PB13C_SERCOM4_PAD1 << 16) | MUX_PB13C_SERCOM4_PAD1)

+#define PORT_PB13C_SERCOM4_PAD1    (1u << 13)

+#define PIN_PA14D_SERCOM4_PAD2            14  /**< \brief SERCOM4 signal: PAD2 on PA14 mux D */

+#define MUX_PA14D_SERCOM4_PAD2             3

+#define PINMUX_PA14D_SERCOM4_PAD2  ((PIN_PA14D_SERCOM4_PAD2 << 16) | MUX_PA14D_SERCOM4_PAD2)

+#define PORT_PA14D_SERCOM4_PAD2    (1u << 14)

+#define PIN_PB10D_SERCOM4_PAD2            42  /**< \brief SERCOM4 signal: PAD2 on PB10 mux D */

+#define MUX_PB10D_SERCOM4_PAD2             3

+#define PINMUX_PB10D_SERCOM4_PAD2  ((PIN_PB10D_SERCOM4_PAD2 << 16) | MUX_PB10D_SERCOM4_PAD2)

+#define PORT_PB10D_SERCOM4_PAD2    (1u << 10)

+#define PIN_PB14C_SERCOM4_PAD2            46  /**< \brief SERCOM4 signal: PAD2 on PB14 mux C */

+#define MUX_PB14C_SERCOM4_PAD2             2

+#define PINMUX_PB14C_SERCOM4_PAD2  ((PIN_PB14C_SERCOM4_PAD2 << 16) | MUX_PB14C_SERCOM4_PAD2)

+#define PORT_PB14C_SERCOM4_PAD2    (1u << 14)

+#define PIN_PA15D_SERCOM4_PAD3            15  /**< \brief SERCOM4 signal: PAD3 on PA15 mux D */

+#define MUX_PA15D_SERCOM4_PAD3             3

+#define PINMUX_PA15D_SERCOM4_PAD3  ((PIN_PA15D_SERCOM4_PAD3 << 16) | MUX_PA15D_SERCOM4_PAD3)

+#define PORT_PA15D_SERCOM4_PAD3    (1u << 15)

+#define PIN_PB11D_SERCOM4_PAD3            43  /**< \brief SERCOM4 signal: PAD3 on PB11 mux D */

+#define MUX_PB11D_SERCOM4_PAD3             3

+#define PINMUX_PB11D_SERCOM4_PAD3  ((PIN_PB11D_SERCOM4_PAD3 << 16) | MUX_PB11D_SERCOM4_PAD3)

+#define PORT_PB11D_SERCOM4_PAD3    (1u << 11)

+#define PIN_PB15C_SERCOM4_PAD3            47  /**< \brief SERCOM4 signal: PAD3 on PB15 mux C */

+#define MUX_PB15C_SERCOM4_PAD3             2

+#define PINMUX_PB15C_SERCOM4_PAD3  ((PIN_PB15C_SERCOM4_PAD3 << 16) | MUX_PB15C_SERCOM4_PAD3)

+#define PORT_PB15C_SERCOM4_PAD3    (1u << 15)

+/* ========== PORT definition for SERCOM5 peripheral ========== */

+#define PIN_PA22D_SERCOM5_PAD0            22  /**< \brief SERCOM5 signal: PAD0 on PA22 mux D */

+#define MUX_PA22D_SERCOM5_PAD0             3

+#define PINMUX_PA22D_SERCOM5_PAD0  ((PIN_PA22D_SERCOM5_PAD0 << 16) | MUX_PA22D_SERCOM5_PAD0)

+#define PORT_PA22D_SERCOM5_PAD0    (1u << 22)

+#define PIN_PB02D_SERCOM5_PAD0            34  /**< \brief SERCOM5 signal: PAD0 on PB02 mux D */

+#define MUX_PB02D_SERCOM5_PAD0             3

+#define PINMUX_PB02D_SERCOM5_PAD0  ((PIN_PB02D_SERCOM5_PAD0 << 16) | MUX_PB02D_SERCOM5_PAD0)

+#define PORT_PB02D_SERCOM5_PAD0    (1u <<  2)

+#define PIN_PB30D_SERCOM5_PAD0            62  /**< \brief SERCOM5 signal: PAD0 on PB30 mux D */

+#define MUX_PB30D_SERCOM5_PAD0             3

+#define PINMUX_PB30D_SERCOM5_PAD0  ((PIN_PB30D_SERCOM5_PAD0 << 16) | MUX_PB30D_SERCOM5_PAD0)

+#define PORT_PB30D_SERCOM5_PAD0    (1u << 30)

+#define PIN_PB16C_SERCOM5_PAD0            48  /**< \brief SERCOM5 signal: PAD0 on PB16 mux C */

+#define MUX_PB16C_SERCOM5_PAD0             2

+#define PINMUX_PB16C_SERCOM5_PAD0  ((PIN_PB16C_SERCOM5_PAD0 << 16) | MUX_PB16C_SERCOM5_PAD0)

+#define PORT_PB16C_SERCOM5_PAD0    (1u << 16)

+#define PIN_PA23D_SERCOM5_PAD1            23  /**< \brief SERCOM5 signal: PAD1 on PA23 mux D */

+#define MUX_PA23D_SERCOM5_PAD1             3

+#define PINMUX_PA23D_SERCOM5_PAD1  ((PIN_PA23D_SERCOM5_PAD1 << 16) | MUX_PA23D_SERCOM5_PAD1)

+#define PORT_PA23D_SERCOM5_PAD1    (1u << 23)

+#define PIN_PB03D_SERCOM5_PAD1            35  /**< \brief SERCOM5 signal: PAD1 on PB03 mux D */

+#define MUX_PB03D_SERCOM5_PAD1             3

+#define PINMUX_PB03D_SERCOM5_PAD1  ((PIN_PB03D_SERCOM5_PAD1 << 16) | MUX_PB03D_SERCOM5_PAD1)

+#define PORT_PB03D_SERCOM5_PAD1    (1u <<  3)

+#define PIN_PB31D_SERCOM5_PAD1            63  /**< \brief SERCOM5 signal: PAD1 on PB31 mux D */

+#define MUX_PB31D_SERCOM5_PAD1             3

+#define PINMUX_PB31D_SERCOM5_PAD1  ((PIN_PB31D_SERCOM5_PAD1 << 16) | MUX_PB31D_SERCOM5_PAD1)

+#define PORT_PB31D_SERCOM5_PAD1    (1u << 31)

+#define PIN_PB17C_SERCOM5_PAD1            49  /**< \brief SERCOM5 signal: PAD1 on PB17 mux C */

+#define MUX_PB17C_SERCOM5_PAD1             2

+#define PINMUX_PB17C_SERCOM5_PAD1  ((PIN_PB17C_SERCOM5_PAD1 << 16) | MUX_PB17C_SERCOM5_PAD1)

+#define PORT_PB17C_SERCOM5_PAD1    (1u << 17)

+#define PIN_PA24D_SERCOM5_PAD2            24  /**< \brief SERCOM5 signal: PAD2 on PA24 mux D */

+#define MUX_PA24D_SERCOM5_PAD2             3

+#define PINMUX_PA24D_SERCOM5_PAD2  ((PIN_PA24D_SERCOM5_PAD2 << 16) | MUX_PA24D_SERCOM5_PAD2)

+#define PORT_PA24D_SERCOM5_PAD2    (1u << 24)

+#define PIN_PB00D_SERCOM5_PAD2            32  /**< \brief SERCOM5 signal: PAD2 on PB00 mux D */

+#define MUX_PB00D_SERCOM5_PAD2             3

+#define PINMUX_PB00D_SERCOM5_PAD2  ((PIN_PB00D_SERCOM5_PAD2 << 16) | MUX_PB00D_SERCOM5_PAD2)

+#define PORT_PB00D_SERCOM5_PAD2    (1u <<  0)

+#define PIN_PB22D_SERCOM5_PAD2            54  /**< \brief SERCOM5 signal: PAD2 on PB22 mux D */

+#define MUX_PB22D_SERCOM5_PAD2             3

+#define PINMUX_PB22D_SERCOM5_PAD2  ((PIN_PB22D_SERCOM5_PAD2 << 16) | MUX_PB22D_SERCOM5_PAD2)

+#define PORT_PB22D_SERCOM5_PAD2    (1u << 22)

+#define PIN_PA20C_SERCOM5_PAD2            20  /**< \brief SERCOM5 signal: PAD2 on PA20 mux C */

+#define MUX_PA20C_SERCOM5_PAD2             2

+#define PINMUX_PA20C_SERCOM5_PAD2  ((PIN_PA20C_SERCOM5_PAD2 << 16) | MUX_PA20C_SERCOM5_PAD2)

+#define PORT_PA20C_SERCOM5_PAD2    (1u << 20)

+#define PIN_PA25D_SERCOM5_PAD3            25  /**< \brief SERCOM5 signal: PAD3 on PA25 mux D */

+#define MUX_PA25D_SERCOM5_PAD3             3

+#define PINMUX_PA25D_SERCOM5_PAD3  ((PIN_PA25D_SERCOM5_PAD3 << 16) | MUX_PA25D_SERCOM5_PAD3)

+#define PORT_PA25D_SERCOM5_PAD3    (1u << 25)

+#define PIN_PB01D_SERCOM5_PAD3            33  /**< \brief SERCOM5 signal: PAD3 on PB01 mux D */

+#define MUX_PB01D_SERCOM5_PAD3             3

+#define PINMUX_PB01D_SERCOM5_PAD3  ((PIN_PB01D_SERCOM5_PAD3 << 16) | MUX_PB01D_SERCOM5_PAD3)

+#define PORT_PB01D_SERCOM5_PAD3    (1u <<  1)

+#define PIN_PB23D_SERCOM5_PAD3            55  /**< \brief SERCOM5 signal: PAD3 on PB23 mux D */

+#define MUX_PB23D_SERCOM5_PAD3             3

+#define PINMUX_PB23D_SERCOM5_PAD3  ((PIN_PB23D_SERCOM5_PAD3 << 16) | MUX_PB23D_SERCOM5_PAD3)

+#define PORT_PB23D_SERCOM5_PAD3    (1u << 23)

+#define PIN_PA21C_SERCOM5_PAD3            21  /**< \brief SERCOM5 signal: PAD3 on PA21 mux C */

+#define MUX_PA21C_SERCOM5_PAD3             2

+#define PINMUX_PA21C_SERCOM5_PAD3  ((PIN_PA21C_SERCOM5_PAD3 << 16) | MUX_PA21C_SERCOM5_PAD3)

+#define PORT_PA21C_SERCOM5_PAD3    (1u << 21)

+/* ========== PORT definition for TC0 peripheral ========== */

+#define PIN_PA04F_TC0_WO0                  4  /**< \brief TC0 signal: WO0 on PA04 mux F */

+#define MUX_PA04F_TC0_WO0                  5

+#define PINMUX_PA04F_TC0_WO0       ((PIN_PA04F_TC0_WO0 << 16) | MUX_PA04F_TC0_WO0)

+#define PORT_PA04F_TC0_WO0         (1u <<  4)

+#define PIN_PB30F_TC0_WO0                 62  /**< \brief TC0 signal: WO0 on PB30 mux F */

+#define MUX_PB30F_TC0_WO0                  5

+#define PINMUX_PB30F_TC0_WO0       ((PIN_PB30F_TC0_WO0 << 16) | MUX_PB30F_TC0_WO0)

+#define PORT_PB30F_TC0_WO0         (1u << 30)

+#define PIN_PA08E_TC0_WO0                  8  /**< \brief TC0 signal: WO0 on PA08 mux E */

+#define MUX_PA08E_TC0_WO0                  4

+#define PINMUX_PA08E_TC0_WO0       ((PIN_PA08E_TC0_WO0 << 16) | MUX_PA08E_TC0_WO0)

+#define PORT_PA08E_TC0_WO0         (1u <<  8)

+#define PIN_PA05F_TC0_WO1                  5  /**< \brief TC0 signal: WO1 on PA05 mux F */

+#define MUX_PA05F_TC0_WO1                  5

+#define PINMUX_PA05F_TC0_WO1       ((PIN_PA05F_TC0_WO1 << 16) | MUX_PA05F_TC0_WO1)

+#define PORT_PA05F_TC0_WO1         (1u <<  5)

+#define PIN_PB31F_TC0_WO1                 63  /**< \brief TC0 signal: WO1 on PB31 mux F */

+#define MUX_PB31F_TC0_WO1                  5

+#define PINMUX_PB31F_TC0_WO1       ((PIN_PB31F_TC0_WO1 << 16) | MUX_PB31F_TC0_WO1)

+#define PORT_PB31F_TC0_WO1         (1u << 31)

+#define PIN_PA09E_TC0_WO1                  9  /**< \brief TC0 signal: WO1 on PA09 mux E */

+#define MUX_PA09E_TC0_WO1                  4

+#define PINMUX_PA09E_TC0_WO1       ((PIN_PA09E_TC0_WO1 << 16) | MUX_PA09E_TC0_WO1)

+#define PORT_PA09E_TC0_WO1         (1u <<  9)

+/* ========== PORT definition for TC1 peripheral ========== */

+#define PIN_PA06F_TC1_WO0                  6  /**< \brief TC1 signal: WO0 on PA06 mux F */

+#define MUX_PA06F_TC1_WO0                  5

+#define PINMUX_PA06F_TC1_WO0       ((PIN_PA06F_TC1_WO0 << 16) | MUX_PA06F_TC1_WO0)

+#define PORT_PA06F_TC1_WO0         (1u <<  6)

+#define PIN_PA30F_TC1_WO0                 30  /**< \brief TC1 signal: WO0 on PA30 mux F */

+#define MUX_PA30F_TC1_WO0                  5

+#define PINMUX_PA30F_TC1_WO0       ((PIN_PA30F_TC1_WO0 << 16) | MUX_PA30F_TC1_WO0)

+#define PORT_PA30F_TC1_WO0         (1u << 30)

+#define PIN_PA10E_TC1_WO0                 10  /**< \brief TC1 signal: WO0 on PA10 mux E */

+#define MUX_PA10E_TC1_WO0                  4

+#define PINMUX_PA10E_TC1_WO0       ((PIN_PA10E_TC1_WO0 << 16) | MUX_PA10E_TC1_WO0)

+#define PORT_PA10E_TC1_WO0         (1u << 10)

+#define PIN_PA07F_TC1_WO1                  7  /**< \brief TC1 signal: WO1 on PA07 mux F */

+#define MUX_PA07F_TC1_WO1                  5

+#define PINMUX_PA07F_TC1_WO1       ((PIN_PA07F_TC1_WO1 << 16) | MUX_PA07F_TC1_WO1)

+#define PORT_PA07F_TC1_WO1         (1u <<  7)

+#define PIN_PA31F_TC1_WO1                 31  /**< \brief TC1 signal: WO1 on PA31 mux F */

+#define MUX_PA31F_TC1_WO1                  5

+#define PINMUX_PA31F_TC1_WO1       ((PIN_PA31F_TC1_WO1 << 16) | MUX_PA31F_TC1_WO1)

+#define PORT_PA31F_TC1_WO1         (1u << 31)

+#define PIN_PA11E_TC1_WO1                 11  /**< \brief TC1 signal: WO1 on PA11 mux E */

+#define MUX_PA11E_TC1_WO1                  4

+#define PINMUX_PA11E_TC1_WO1       ((PIN_PA11E_TC1_WO1 << 16) | MUX_PA11E_TC1_WO1)

+#define PORT_PA11E_TC1_WO1         (1u << 11)

+/* ========== PORT definition for TC2 peripheral ========== */

+#define PIN_PA16F_TC2_WO0                 16  /**< \brief TC2 signal: WO0 on PA16 mux F */

+#define MUX_PA16F_TC2_WO0                  5

+#define PINMUX_PA16F_TC2_WO0       ((PIN_PA16F_TC2_WO0 << 16) | MUX_PA16F_TC2_WO0)

+#define PORT_PA16F_TC2_WO0         (1u << 16)

+#define PIN_PA12E_TC2_WO0                 12  /**< \brief TC2 signal: WO0 on PA12 mux E */

+#define MUX_PA12E_TC2_WO0                  4

+#define PINMUX_PA12E_TC2_WO0       ((PIN_PA12E_TC2_WO0 << 16) | MUX_PA12E_TC2_WO0)

+#define PORT_PA12E_TC2_WO0         (1u << 12)

+#define PIN_PA00F_TC2_WO0                  0  /**< \brief TC2 signal: WO0 on PA00 mux F */

+#define MUX_PA00F_TC2_WO0                  5

+#define PINMUX_PA00F_TC2_WO0       ((PIN_PA00F_TC2_WO0 << 16) | MUX_PA00F_TC2_WO0)

+#define PORT_PA00F_TC2_WO0         (1u <<  0)

+#define PIN_PA17F_TC2_WO1                 17  /**< \brief TC2 signal: WO1 on PA17 mux F */

+#define MUX_PA17F_TC2_WO1                  5

+#define PINMUX_PA17F_TC2_WO1       ((PIN_PA17F_TC2_WO1 << 16) | MUX_PA17F_TC2_WO1)

+#define PORT_PA17F_TC2_WO1         (1u << 17)

+#define PIN_PA13E_TC2_WO1                 13  /**< \brief TC2 signal: WO1 on PA13 mux E */

+#define MUX_PA13E_TC2_WO1                  4

+#define PINMUX_PA13E_TC2_WO1       ((PIN_PA13E_TC2_WO1 << 16) | MUX_PA13E_TC2_WO1)

+#define PORT_PA13E_TC2_WO1         (1u << 13)

+#define PIN_PA01F_TC2_WO1                  1  /**< \brief TC2 signal: WO1 on PA01 mux F */

+#define MUX_PA01F_TC2_WO1                  5

+#define PINMUX_PA01F_TC2_WO1       ((PIN_PA01F_TC2_WO1 << 16) | MUX_PA01F_TC2_WO1)

+#define PORT_PA01F_TC2_WO1         (1u <<  1)

+/* ========== PORT definition for TC3 peripheral ========== */

+#define PIN_PA18F_TC3_WO0                 18  /**< \brief TC3 signal: WO0 on PA18 mux F */

+#define MUX_PA18F_TC3_WO0                  5

+#define PINMUX_PA18F_TC3_WO0       ((PIN_PA18F_TC3_WO0 << 16) | MUX_PA18F_TC3_WO0)

+#define PORT_PA18F_TC3_WO0         (1u << 18)

+#define PIN_PA14E_TC3_WO0                 14  /**< \brief TC3 signal: WO0 on PA14 mux E */

+#define MUX_PA14E_TC3_WO0                  4

+#define PINMUX_PA14E_TC3_WO0       ((PIN_PA14E_TC3_WO0 << 16) | MUX_PA14E_TC3_WO0)

+#define PORT_PA14E_TC3_WO0         (1u << 14)

+#define PIN_PA19F_TC3_WO1                 19  /**< \brief TC3 signal: WO1 on PA19 mux F */

+#define MUX_PA19F_TC3_WO1                  5

+#define PINMUX_PA19F_TC3_WO1       ((PIN_PA19F_TC3_WO1 << 16) | MUX_PA19F_TC3_WO1)

+#define PORT_PA19F_TC3_WO1         (1u << 19)

+#define PIN_PA15E_TC3_WO1                 15  /**< \brief TC3 signal: WO1 on PA15 mux E */

+#define MUX_PA15E_TC3_WO1                  4

+#define PINMUX_PA15E_TC3_WO1       ((PIN_PA15E_TC3_WO1 << 16) | MUX_PA15E_TC3_WO1)

+#define PORT_PA15E_TC3_WO1         (1u << 15)

+/* ========== PORT definition for TC4 peripheral ========== */

+#define PIN_PA22F_TC4_WO0                 22  /**< \brief TC4 signal: WO0 on PA22 mux F */

+#define MUX_PA22F_TC4_WO0                  5

+#define PINMUX_PA22F_TC4_WO0       ((PIN_PA22F_TC4_WO0 << 16) | MUX_PA22F_TC4_WO0)

+#define PORT_PA22F_TC4_WO0         (1u << 22)

+#define PIN_PB08F_TC4_WO0                 40  /**< \brief TC4 signal: WO0 on PB08 mux F */

+#define MUX_PB08F_TC4_WO0                  5

+#define PINMUX_PB08F_TC4_WO0       ((PIN_PB08F_TC4_WO0 << 16) | MUX_PB08F_TC4_WO0)

+#define PORT_PB08F_TC4_WO0         (1u <<  8)

+#define PIN_PB12E_TC4_WO0                 44  /**< \brief TC4 signal: WO0 on PB12 mux E */

+#define MUX_PB12E_TC4_WO0                  4

+#define PINMUX_PB12E_TC4_WO0       ((PIN_PB12E_TC4_WO0 << 16) | MUX_PB12E_TC4_WO0)

+#define PORT_PB12E_TC4_WO0         (1u << 12)

+#define PIN_PA23F_TC4_WO1                 23  /**< \brief TC4 signal: WO1 on PA23 mux F */

+#define MUX_PA23F_TC4_WO1                  5

+#define PINMUX_PA23F_TC4_WO1       ((PIN_PA23F_TC4_WO1 << 16) | MUX_PA23F_TC4_WO1)

+#define PORT_PA23F_TC4_WO1         (1u << 23)

+#define PIN_PB09F_TC4_WO1                 41  /**< \brief TC4 signal: WO1 on PB09 mux F */

+#define MUX_PB09F_TC4_WO1                  5

+#define PINMUX_PB09F_TC4_WO1       ((PIN_PB09F_TC4_WO1 << 16) | MUX_PB09F_TC4_WO1)

+#define PORT_PB09F_TC4_WO1         (1u <<  9)

+#define PIN_PB13E_TC4_WO1                 45  /**< \brief TC4 signal: WO1 on PB13 mux E */

+#define MUX_PB13E_TC4_WO1                  4

+#define PINMUX_PB13E_TC4_WO1       ((PIN_PB13E_TC4_WO1 << 16) | MUX_PB13E_TC4_WO1)

+#define PORT_PB13E_TC4_WO1         (1u << 13)

+/* ========== PORT definition for TC5 peripheral ========== */

+#define PIN_PA24F_TC5_WO0                 24  /**< \brief TC5 signal: WO0 on PA24 mux F */

+#define MUX_PA24F_TC5_WO0                  5

+#define PINMUX_PA24F_TC5_WO0       ((PIN_PA24F_TC5_WO0 << 16) | MUX_PA24F_TC5_WO0)

+#define PORT_PA24F_TC5_WO0         (1u << 24)

+#define PIN_PB10F_TC5_WO0                 42  /**< \brief TC5 signal: WO0 on PB10 mux F */

+#define MUX_PB10F_TC5_WO0                  5

+#define PINMUX_PB10F_TC5_WO0       ((PIN_PB10F_TC5_WO0 << 16) | MUX_PB10F_TC5_WO0)

+#define PORT_PB10F_TC5_WO0         (1u << 10)

+#define PIN_PB14E_TC5_WO0                 46  /**< \brief TC5 signal: WO0 on PB14 mux E */

+#define MUX_PB14E_TC5_WO0                  4

+#define PINMUX_PB14E_TC5_WO0       ((PIN_PB14E_TC5_WO0 << 16) | MUX_PB14E_TC5_WO0)

+#define PORT_PB14E_TC5_WO0         (1u << 14)

+#define PIN_PA25F_TC5_WO1                 25  /**< \brief TC5 signal: WO1 on PA25 mux F */

+#define MUX_PA25F_TC5_WO1                  5

+#define PINMUX_PA25F_TC5_WO1       ((PIN_PA25F_TC5_WO1 << 16) | MUX_PA25F_TC5_WO1)

+#define PORT_PA25F_TC5_WO1         (1u << 25)

+#define PIN_PB11F_TC5_WO1                 43  /**< \brief TC5 signal: WO1 on PB11 mux F */

+#define MUX_PB11F_TC5_WO1                  5

+#define PINMUX_PB11F_TC5_WO1       ((PIN_PB11F_TC5_WO1 << 16) | MUX_PB11F_TC5_WO1)

+#define PORT_PB11F_TC5_WO1         (1u << 11)

+#define PIN_PB15E_TC5_WO1                 47  /**< \brief TC5 signal: WO1 on PB15 mux E */

+#define MUX_PB15E_TC5_WO1                  4

+#define PINMUX_PB15E_TC5_WO1       ((PIN_PB15E_TC5_WO1 << 16) | MUX_PB15E_TC5_WO1)

+#define PORT_PB15E_TC5_WO1         (1u << 15)

+/* ========== PORT definition for TC6 peripheral ========== */

+#define PIN_PB02F_TC6_WO0                 34  /**< \brief TC6 signal: WO0 on PB02 mux F */

+#define MUX_PB02F_TC6_WO0                  5

+#define PINMUX_PB02F_TC6_WO0       ((PIN_PB02F_TC6_WO0 << 16) | MUX_PB02F_TC6_WO0)

+#define PORT_PB02F_TC6_WO0         (1u <<  2)

+#define PIN_PB16E_TC6_WO0                 48  /**< \brief TC6 signal: WO0 on PB16 mux E */

+#define MUX_PB16E_TC6_WO0                  4

+#define PINMUX_PB16E_TC6_WO0       ((PIN_PB16E_TC6_WO0 << 16) | MUX_PB16E_TC6_WO0)

+#define PORT_PB16E_TC6_WO0         (1u << 16)

+#define PIN_PB03F_TC6_WO1                 35  /**< \brief TC6 signal: WO1 on PB03 mux F */

+#define MUX_PB03F_TC6_WO1                  5

+#define PINMUX_PB03F_TC6_WO1       ((PIN_PB03F_TC6_WO1 << 16) | MUX_PB03F_TC6_WO1)

+#define PORT_PB03F_TC6_WO1         (1u <<  3)

+#define PIN_PB17E_TC6_WO1                 49  /**< \brief TC6 signal: WO1 on PB17 mux E */

+#define MUX_PB17E_TC6_WO1                  4

+#define PINMUX_PB17E_TC6_WO1       ((PIN_PB17E_TC6_WO1 << 16) | MUX_PB17E_TC6_WO1)

+#define PORT_PB17E_TC6_WO1         (1u << 17)

+/* ========== PORT definition for TC7 peripheral ========== */

+#define PIN_PB00F_TC7_WO0                 32  /**< \brief TC7 signal: WO0 on PB00 mux F */

+#define MUX_PB00F_TC7_WO0                  5

+#define PINMUX_PB00F_TC7_WO0       ((PIN_PB00F_TC7_WO0 << 16) | MUX_PB00F_TC7_WO0)

+#define PORT_PB00F_TC7_WO0         (1u <<  0)

+#define PIN_PB22F_TC7_WO0                 54  /**< \brief TC7 signal: WO0 on PB22 mux F */

+#define MUX_PB22F_TC7_WO0                  5

+#define PINMUX_PB22F_TC7_WO0       ((PIN_PB22F_TC7_WO0 << 16) | MUX_PB22F_TC7_WO0)

+#define PORT_PB22F_TC7_WO0         (1u << 22)

+#define PIN_PA20E_TC7_WO0                 20  /**< \brief TC7 signal: WO0 on PA20 mux E */

+#define MUX_PA20E_TC7_WO0                  4

+#define PINMUX_PA20E_TC7_WO0       ((PIN_PA20E_TC7_WO0 << 16) | MUX_PA20E_TC7_WO0)

+#define PORT_PA20E_TC7_WO0         (1u << 20)

+#define PIN_PB01F_TC7_WO1                 33  /**< \brief TC7 signal: WO1 on PB01 mux F */

+#define MUX_PB01F_TC7_WO1                  5

+#define PINMUX_PB01F_TC7_WO1       ((PIN_PB01F_TC7_WO1 << 16) | MUX_PB01F_TC7_WO1)

+#define PORT_PB01F_TC7_WO1         (1u <<  1)

+#define PIN_PB23F_TC7_WO1                 55  /**< \brief TC7 signal: WO1 on PB23 mux F */

+#define MUX_PB23F_TC7_WO1                  5

+#define PINMUX_PB23F_TC7_WO1       ((PIN_PB23F_TC7_WO1 << 16) | MUX_PB23F_TC7_WO1)

+#define PORT_PB23F_TC7_WO1         (1u << 23)

+#define PIN_PA21E_TC7_WO1                 21  /**< \brief TC7 signal: WO1 on PA21 mux E */

+#define MUX_PA21E_TC7_WO1                  4

+#define PINMUX_PA21E_TC7_WO1       ((PIN_PA21E_TC7_WO1 << 16) | MUX_PA21E_TC7_WO1)

+#define PORT_PA21E_TC7_WO1         (1u << 21)

+/* ========== PORT definition for ADC peripheral ========== */

+#define PIN_PA02B_ADC_AIN0                 2  /**< \brief ADC signal: AIN0 on PA02 mux B */

+#define MUX_PA02B_ADC_AIN0                 1

+#define PINMUX_PA02B_ADC_AIN0      ((PIN_PA02B_ADC_AIN0 << 16) | MUX_PA02B_ADC_AIN0)

+#define PORT_PA02B_ADC_AIN0        (1u <<  2)

+#define PIN_PA03B_ADC_AIN1                 3  /**< \brief ADC signal: AIN1 on PA03 mux B */

+#define MUX_PA03B_ADC_AIN1                 1

+#define PINMUX_PA03B_ADC_AIN1      ((PIN_PA03B_ADC_AIN1 << 16) | MUX_PA03B_ADC_AIN1)

+#define PORT_PA03B_ADC_AIN1        (1u <<  3)

+#define PIN_PB08B_ADC_AIN2                40  /**< \brief ADC signal: AIN2 on PB08 mux B */

+#define MUX_PB08B_ADC_AIN2                 1

+#define PINMUX_PB08B_ADC_AIN2      ((PIN_PB08B_ADC_AIN2 << 16) | MUX_PB08B_ADC_AIN2)

+#define PORT_PB08B_ADC_AIN2        (1u <<  8)

+#define PIN_PB09B_ADC_AIN3                41  /**< \brief ADC signal: AIN3 on PB09 mux B */

+#define MUX_PB09B_ADC_AIN3                 1

+#define PINMUX_PB09B_ADC_AIN3      ((PIN_PB09B_ADC_AIN3 << 16) | MUX_PB09B_ADC_AIN3)

+#define PORT_PB09B_ADC_AIN3        (1u <<  9)

+#define PIN_PA04B_ADC_AIN4                 4  /**< \brief ADC signal: AIN4 on PA04 mux B */

+#define MUX_PA04B_ADC_AIN4                 1

+#define PINMUX_PA04B_ADC_AIN4      ((PIN_PA04B_ADC_AIN4 << 16) | MUX_PA04B_ADC_AIN4)

+#define PORT_PA04B_ADC_AIN4        (1u <<  4)

+#define PIN_PA05B_ADC_AIN5                 5  /**< \brief ADC signal: AIN5 on PA05 mux B */

+#define MUX_PA05B_ADC_AIN5                 1

+#define PINMUX_PA05B_ADC_AIN5      ((PIN_PA05B_ADC_AIN5 << 16) | MUX_PA05B_ADC_AIN5)

+#define PORT_PA05B_ADC_AIN5        (1u <<  5)

+#define PIN_PA06B_ADC_AIN6                 6  /**< \brief ADC signal: AIN6 on PA06 mux B */

+#define MUX_PA06B_ADC_AIN6                 1

+#define PINMUX_PA06B_ADC_AIN6      ((PIN_PA06B_ADC_AIN6 << 16) | MUX_PA06B_ADC_AIN6)

+#define PORT_PA06B_ADC_AIN6        (1u <<  6)

+#define PIN_PA07B_ADC_AIN7                 7  /**< \brief ADC signal: AIN7 on PA07 mux B */

+#define MUX_PA07B_ADC_AIN7                 1

+#define PINMUX_PA07B_ADC_AIN7      ((PIN_PA07B_ADC_AIN7 << 16) | MUX_PA07B_ADC_AIN7)

+#define PORT_PA07B_ADC_AIN7        (1u <<  7)

+#define PIN_PB00B_ADC_AIN8                32  /**< \brief ADC signal: AIN8 on PB00 mux B */

+#define MUX_PB00B_ADC_AIN8                 1

+#define PINMUX_PB00B_ADC_AIN8      ((PIN_PB00B_ADC_AIN8 << 16) | MUX_PB00B_ADC_AIN8)

+#define PORT_PB00B_ADC_AIN8        (1u <<  0)

+#define PIN_PB01B_ADC_AIN9                33  /**< \brief ADC signal: AIN9 on PB01 mux B */

+#define MUX_PB01B_ADC_AIN9                 1

+#define PINMUX_PB01B_ADC_AIN9      ((PIN_PB01B_ADC_AIN9 << 16) | MUX_PB01B_ADC_AIN9)

+#define PORT_PB01B_ADC_AIN9        (1u <<  1)

+#define PIN_PB02B_ADC_AIN10               34  /**< \brief ADC signal: AIN10 on PB02 mux B */

+#define MUX_PB02B_ADC_AIN10                1

+#define PINMUX_PB02B_ADC_AIN10     ((PIN_PB02B_ADC_AIN10 << 16) | MUX_PB02B_ADC_AIN10)

+#define PORT_PB02B_ADC_AIN10       (1u <<  2)

+#define PIN_PB03B_ADC_AIN11               35  /**< \brief ADC signal: AIN11 on PB03 mux B */

+#define MUX_PB03B_ADC_AIN11                1

+#define PINMUX_PB03B_ADC_AIN11     ((PIN_PB03B_ADC_AIN11 << 16) | MUX_PB03B_ADC_AIN11)

+#define PORT_PB03B_ADC_AIN11       (1u <<  3)

+#define PIN_PB04B_ADC_AIN12               36  /**< \brief ADC signal: AIN12 on PB04 mux B */

+#define MUX_PB04B_ADC_AIN12                1

+#define PINMUX_PB04B_ADC_AIN12     ((PIN_PB04B_ADC_AIN12 << 16) | MUX_PB04B_ADC_AIN12)

+#define PORT_PB04B_ADC_AIN12       (1u <<  4)

+#define PIN_PB05B_ADC_AIN13               37  /**< \brief ADC signal: AIN13 on PB05 mux B */

+#define MUX_PB05B_ADC_AIN13                1

+#define PINMUX_PB05B_ADC_AIN13     ((PIN_PB05B_ADC_AIN13 << 16) | MUX_PB05B_ADC_AIN13)

+#define PORT_PB05B_ADC_AIN13       (1u <<  5)

+#define PIN_PB06B_ADC_AIN14               38  /**< \brief ADC signal: AIN14 on PB06 mux B */

+#define MUX_PB06B_ADC_AIN14                1

+#define PINMUX_PB06B_ADC_AIN14     ((PIN_PB06B_ADC_AIN14 << 16) | MUX_PB06B_ADC_AIN14)

+#define PORT_PB06B_ADC_AIN14       (1u <<  6)

+#define PIN_PB07B_ADC_AIN15               39  /**< \brief ADC signal: AIN15 on PB07 mux B */

+#define MUX_PB07B_ADC_AIN15                1

+#define PINMUX_PB07B_ADC_AIN15     ((PIN_PB07B_ADC_AIN15 << 16) | MUX_PB07B_ADC_AIN15)

+#define PORT_PB07B_ADC_AIN15       (1u <<  7)

+#define PIN_PA08B_ADC_AIN16                8  /**< \brief ADC signal: AIN16 on PA08 mux B */

+#define MUX_PA08B_ADC_AIN16                1

+#define PINMUX_PA08B_ADC_AIN16     ((PIN_PA08B_ADC_AIN16 << 16) | MUX_PA08B_ADC_AIN16)

+#define PORT_PA08B_ADC_AIN16       (1u <<  8)

+#define PIN_PA09B_ADC_AIN17                9  /**< \brief ADC signal: AIN17 on PA09 mux B */

+#define MUX_PA09B_ADC_AIN17                1

+#define PINMUX_PA09B_ADC_AIN17     ((PIN_PA09B_ADC_AIN17 << 16) | MUX_PA09B_ADC_AIN17)

+#define PORT_PA09B_ADC_AIN17       (1u <<  9)

+#define PIN_PA10B_ADC_AIN18               10  /**< \brief ADC signal: AIN18 on PA10 mux B */

+#define MUX_PA10B_ADC_AIN18                1

+#define PINMUX_PA10B_ADC_AIN18     ((PIN_PA10B_ADC_AIN18 << 16) | MUX_PA10B_ADC_AIN18)

+#define PORT_PA10B_ADC_AIN18       (1u << 10)

+#define PIN_PA11B_ADC_AIN19               11  /**< \brief ADC signal: AIN19 on PA11 mux B */

+#define MUX_PA11B_ADC_AIN19                1

+#define PINMUX_PA11B_ADC_AIN19     ((PIN_PA11B_ADC_AIN19 << 16) | MUX_PA11B_ADC_AIN19)

+#define PORT_PA11B_ADC_AIN19       (1u << 11)

+#define PIN_PA04B_ADC_VREFP                4  /**< \brief ADC signal: VREFP on PA04 mux B */

+#define MUX_PA04B_ADC_VREFP                1

+#define PINMUX_PA04B_ADC_VREFP     ((PIN_PA04B_ADC_VREFP << 16) | MUX_PA04B_ADC_VREFP)

+#define PORT_PA04B_ADC_VREFP       (1u <<  4)

+/* ========== PORT definition for AC peripheral ========== */

+#define PIN_PA04B_AC_AIN0                  4  /**< \brief AC signal: AIN0 on PA04 mux B */

+#define MUX_PA04B_AC_AIN0                  1

+#define PINMUX_PA04B_AC_AIN0       ((PIN_PA04B_AC_AIN0 << 16) | MUX_PA04B_AC_AIN0)

+#define PORT_PA04B_AC_AIN0         (1u <<  4)

+#define PIN_PA05B_AC_AIN1                  5  /**< \brief AC signal: AIN1 on PA05 mux B */

+#define MUX_PA05B_AC_AIN1                  1

+#define PINMUX_PA05B_AC_AIN1       ((PIN_PA05B_AC_AIN1 << 16) | MUX_PA05B_AC_AIN1)

+#define PORT_PA05B_AC_AIN1         (1u <<  5)

+#define PIN_PA06B_AC_AIN2                  6  /**< \brief AC signal: AIN2 on PA06 mux B */

+#define MUX_PA06B_AC_AIN2                  1

+#define PINMUX_PA06B_AC_AIN2       ((PIN_PA06B_AC_AIN2 << 16) | MUX_PA06B_AC_AIN2)

+#define PORT_PA06B_AC_AIN2         (1u <<  6)

+#define PIN_PA07B_AC_AIN3                  7  /**< \brief AC signal: AIN3 on PA07 mux B */

+#define MUX_PA07B_AC_AIN3                  1

+#define PINMUX_PA07B_AC_AIN3       ((PIN_PA07B_AC_AIN3 << 16) | MUX_PA07B_AC_AIN3)

+#define PORT_PA07B_AC_AIN3         (1u <<  7)

+#define PIN_PA12H_AC_CMP0                 12  /**< \brief AC signal: CMP0 on PA12 mux H */

+#define MUX_PA12H_AC_CMP0                  7

+#define PINMUX_PA12H_AC_CMP0       ((PIN_PA12H_AC_CMP0 << 16) | MUX_PA12H_AC_CMP0)

+#define PORT_PA12H_AC_CMP0         (1u << 12)

+#define PIN_PA18H_AC_CMP0                 18  /**< \brief AC signal: CMP0 on PA18 mux H */

+#define MUX_PA18H_AC_CMP0                  7

+#define PINMUX_PA18H_AC_CMP0       ((PIN_PA18H_AC_CMP0 << 16) | MUX_PA18H_AC_CMP0)

+#define PORT_PA18H_AC_CMP0         (1u << 18)

+#define PIN_PA13H_AC_CMP1                 13  /**< \brief AC signal: CMP1 on PA13 mux H */

+#define MUX_PA13H_AC_CMP1                  7

+#define PINMUX_PA13H_AC_CMP1       ((PIN_PA13H_AC_CMP1 << 16) | MUX_PA13H_AC_CMP1)

+#define PORT_PA13H_AC_CMP1         (1u << 13)

+#define PIN_PA19H_AC_CMP1                 19  /**< \brief AC signal: CMP1 on PA19 mux H */

+#define MUX_PA19H_AC_CMP1                  7

+#define PINMUX_PA19H_AC_CMP1       ((PIN_PA19H_AC_CMP1 << 16) | MUX_PA19H_AC_CMP1)

+#define PORT_PA19H_AC_CMP1         (1u << 19)

+/* ========== PORT definition for DAC peripheral ========== */

+#define PIN_PA02B_DAC_VOUT                 2  /**< \brief DAC signal: VOUT on PA02 mux B */

+#define MUX_PA02B_DAC_VOUT                 1

+#define PINMUX_PA02B_DAC_VOUT      ((PIN_PA02B_DAC_VOUT << 16) | MUX_PA02B_DAC_VOUT)

+#define PORT_PA02B_DAC_VOUT        (1u <<  2)

+#define PIN_PA03B_DAC_VREFP                3  /**< \brief DAC signal: VREFP on PA03 mux B */

+#define MUX_PA03B_DAC_VREFP                1

+#define PINMUX_PA03B_DAC_VREFP     ((PIN_PA03B_DAC_VREFP << 16) | MUX_PA03B_DAC_VREFP)

+#define PORT_PA03B_DAC_VREFP       (1u <<  3)

+

+#endif /* _SAMD20J15_PIO_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20j16.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20j16.h
new file mode 100644
index 0000000..ad88803
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20j16.h
@@ -0,0 +1,1024 @@
+/**

+ * \file

+ *

+ * \brief Peripheral I/O description for SAMD20J16

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20J16_PIO_

+#define _SAMD20J16_PIO_

+

+#define PIN_PA00                           0  /**< \brief Pin Number for PA00 */

+#define PORT_PA00                  (1u <<  0) /**< \brief PORT Mask  for PA00 */

+#define PIN_PA01                           1  /**< \brief Pin Number for PA01 */

+#define PORT_PA01                  (1u <<  1) /**< \brief PORT Mask  for PA01 */

+#define PIN_PA02                           2  /**< \brief Pin Number for PA02 */

+#define PORT_PA02                  (1u <<  2) /**< \brief PORT Mask  for PA02 */

+#define PIN_PA03                           3  /**< \brief Pin Number for PA03 */

+#define PORT_PA03                  (1u <<  3) /**< \brief PORT Mask  for PA03 */

+#define PIN_PA04                           4  /**< \brief Pin Number for PA04 */

+#define PORT_PA04                  (1u <<  4) /**< \brief PORT Mask  for PA04 */

+#define PIN_PA05                           5  /**< \brief Pin Number for PA05 */

+#define PORT_PA05                  (1u <<  5) /**< \brief PORT Mask  for PA05 */

+#define PIN_PA06                           6  /**< \brief Pin Number for PA06 */

+#define PORT_PA06                  (1u <<  6) /**< \brief PORT Mask  for PA06 */

+#define PIN_PA07                           7  /**< \brief Pin Number for PA07 */

+#define PORT_PA07                  (1u <<  7) /**< \brief PORT Mask  for PA07 */

+#define PIN_PA08                           8  /**< \brief Pin Number for PA08 */

+#define PORT_PA08                  (1u <<  8) /**< \brief PORT Mask  for PA08 */

+#define PIN_PA09                           9  /**< \brief Pin Number for PA09 */

+#define PORT_PA09                  (1u <<  9) /**< \brief PORT Mask  for PA09 */

+#define PIN_PA10                          10  /**< \brief Pin Number for PA10 */

+#define PORT_PA10                  (1u << 10) /**< \brief PORT Mask  for PA10 */

+#define PIN_PA11                          11  /**< \brief Pin Number for PA11 */

+#define PORT_PA11                  (1u << 11) /**< \brief PORT Mask  for PA11 */

+#define PIN_PA12                          12  /**< \brief Pin Number for PA12 */

+#define PORT_PA12                  (1u << 12) /**< \brief PORT Mask  for PA12 */

+#define PIN_PA13                          13  /**< \brief Pin Number for PA13 */

+#define PORT_PA13                  (1u << 13) /**< \brief PORT Mask  for PA13 */

+#define PIN_PA14                          14  /**< \brief Pin Number for PA14 */

+#define PORT_PA14                  (1u << 14) /**< \brief PORT Mask  for PA14 */

+#define PIN_PA15                          15  /**< \brief Pin Number for PA15 */

+#define PORT_PA15                  (1u << 15) /**< \brief PORT Mask  for PA15 */

+#define PIN_PA16                          16  /**< \brief Pin Number for PA16 */

+#define PORT_PA16                  (1u << 16) /**< \brief PORT Mask  for PA16 */

+#define PIN_PA17                          17  /**< \brief Pin Number for PA17 */

+#define PORT_PA17                  (1u << 17) /**< \brief PORT Mask  for PA17 */

+#define PIN_PA18                          18  /**< \brief Pin Number for PA18 */

+#define PORT_PA18                  (1u << 18) /**< \brief PORT Mask  for PA18 */

+#define PIN_PA19                          19  /**< \brief Pin Number for PA19 */

+#define PORT_PA19                  (1u << 19) /**< \brief PORT Mask  for PA19 */

+#define PIN_PA20                          20  /**< \brief Pin Number for PA20 */

+#define PORT_PA20                  (1u << 20) /**< \brief PORT Mask  for PA20 */

+#define PIN_PA21                          21  /**< \brief Pin Number for PA21 */

+#define PORT_PA21                  (1u << 21) /**< \brief PORT Mask  for PA21 */

+#define PIN_PA22                          22  /**< \brief Pin Number for PA22 */

+#define PORT_PA22                  (1u << 22) /**< \brief PORT Mask  for PA22 */

+#define PIN_PA23                          23  /**< \brief Pin Number for PA23 */

+#define PORT_PA23                  (1u << 23) /**< \brief PORT Mask  for PA23 */

+#define PIN_PA24                          24  /**< \brief Pin Number for PA24 */

+#define PORT_PA24                  (1u << 24) /**< \brief PORT Mask  for PA24 */

+#define PIN_PA25                          25  /**< \brief Pin Number for PA25 */

+#define PORT_PA25                  (1u << 25) /**< \brief PORT Mask  for PA25 */

+#define PIN_PA27                          27  /**< \brief Pin Number for PA27 */

+#define PORT_PA27                  (1u << 27) /**< \brief PORT Mask  for PA27 */

+#define PIN_PA28                          28  /**< \brief Pin Number for PA28 */

+#define PORT_PA28                  (1u << 28) /**< \brief PORT Mask  for PA28 */

+#define PIN_PA30                          30  /**< \brief Pin Number for PA30 */

+#define PORT_PA30                  (1u << 30) /**< \brief PORT Mask  for PA30 */

+#define PIN_PA31                          31  /**< \brief Pin Number for PA31 */

+#define PORT_PA31                  (1u << 31) /**< \brief PORT Mask  for PA31 */

+#define PIN_PB00                          32  /**< \brief Pin Number for PB00 */

+#define PORT_PB00                  (1u <<  0) /**< \brief PORT Mask  for PB00 */

+#define PIN_PB01                          33  /**< \brief Pin Number for PB01 */

+#define PORT_PB01                  (1u <<  1) /**< \brief PORT Mask  for PB01 */

+#define PIN_PB02                          34  /**< \brief Pin Number for PB02 */

+#define PORT_PB02                  (1u <<  2) /**< \brief PORT Mask  for PB02 */

+#define PIN_PB03                          35  /**< \brief Pin Number for PB03 */

+#define PORT_PB03                  (1u <<  3) /**< \brief PORT Mask  for PB03 */

+#define PIN_PB04                          36  /**< \brief Pin Number for PB04 */

+#define PORT_PB04                  (1u <<  4) /**< \brief PORT Mask  for PB04 */

+#define PIN_PB05                          37  /**< \brief Pin Number for PB05 */

+#define PORT_PB05                  (1u <<  5) /**< \brief PORT Mask  for PB05 */

+#define PIN_PB06                          38  /**< \brief Pin Number for PB06 */

+#define PORT_PB06                  (1u <<  6) /**< \brief PORT Mask  for PB06 */

+#define PIN_PB07                          39  /**< \brief Pin Number for PB07 */

+#define PORT_PB07                  (1u <<  7) /**< \brief PORT Mask  for PB07 */

+#define PIN_PB08                          40  /**< \brief Pin Number for PB08 */

+#define PORT_PB08                  (1u <<  8) /**< \brief PORT Mask  for PB08 */

+#define PIN_PB09                          41  /**< \brief Pin Number for PB09 */

+#define PORT_PB09                  (1u <<  9) /**< \brief PORT Mask  for PB09 */

+#define PIN_PB10                          42  /**< \brief Pin Number for PB10 */

+#define PORT_PB10                  (1u << 10) /**< \brief PORT Mask  for PB10 */

+#define PIN_PB11                          43  /**< \brief Pin Number for PB11 */

+#define PORT_PB11                  (1u << 11) /**< \brief PORT Mask  for PB11 */

+#define PIN_PB12                          44  /**< \brief Pin Number for PB12 */

+#define PORT_PB12                  (1u << 12) /**< \brief PORT Mask  for PB12 */

+#define PIN_PB13                          45  /**< \brief Pin Number for PB13 */

+#define PORT_PB13                  (1u << 13) /**< \brief PORT Mask  for PB13 */

+#define PIN_PB14                          46  /**< \brief Pin Number for PB14 */

+#define PORT_PB14                  (1u << 14) /**< \brief PORT Mask  for PB14 */

+#define PIN_PB15                          47  /**< \brief Pin Number for PB15 */

+#define PORT_PB15                  (1u << 15) /**< \brief PORT Mask  for PB15 */

+#define PIN_PB16                          48  /**< \brief Pin Number for PB16 */

+#define PORT_PB16                  (1u << 16) /**< \brief PORT Mask  for PB16 */

+#define PIN_PB17                          49  /**< \brief Pin Number for PB17 */

+#define PORT_PB17                  (1u << 17) /**< \brief PORT Mask  for PB17 */

+#define PIN_PB22                          54  /**< \brief Pin Number for PB22 */

+#define PORT_PB22                  (1u << 22) /**< \brief PORT Mask  for PB22 */

+#define PIN_PB23                          55  /**< \brief Pin Number for PB23 */

+#define PORT_PB23                  (1u << 23) /**< \brief PORT Mask  for PB23 */

+#define PIN_PB30                          62  /**< \brief Pin Number for PB30 */

+#define PORT_PB30                  (1u << 30) /**< \brief PORT Mask  for PB30 */

+#define PIN_PB31                          63  /**< \brief Pin Number for PB31 */

+#define PORT_PB31                  (1u << 31) /**< \brief PORT Mask  for PB31 */

+/* ========== PORT definition for CORE peripheral ========== */

+#define PIN_PA30G_CORE_SWCLK              30  /**< \brief CORE signal: SWCLK on PA30 mux G */

+#define MUX_PA30G_CORE_SWCLK               6

+#define PINMUX_PA30G_CORE_SWCLK    ((PIN_PA30G_CORE_SWCLK << 16) | MUX_PA30G_CORE_SWCLK)

+#define PORT_PA30G_CORE_SWCLK      (1u << 30)

+/* ========== PORT definition for GCLK peripheral ========== */

+#define PIN_PB14H_GCLK_IO0                46  /**< \brief GCLK signal: IO0 on PB14 mux H */

+#define MUX_PB14H_GCLK_IO0                 7

+#define PINMUX_PB14H_GCLK_IO0      ((PIN_PB14H_GCLK_IO0 << 16) | MUX_PB14H_GCLK_IO0)

+#define PORT_PB14H_GCLK_IO0        (1u << 14)

+#define PIN_PB22H_GCLK_IO0                54  /**< \brief GCLK signal: IO0 on PB22 mux H */

+#define MUX_PB22H_GCLK_IO0                 7

+#define PINMUX_PB22H_GCLK_IO0      ((PIN_PB22H_GCLK_IO0 << 16) | MUX_PB22H_GCLK_IO0)

+#define PORT_PB22H_GCLK_IO0        (1u << 22)

+#define PIN_PA14H_GCLK_IO0                14  /**< \brief GCLK signal: IO0 on PA14 mux H */

+#define MUX_PA14H_GCLK_IO0                 7

+#define PINMUX_PA14H_GCLK_IO0      ((PIN_PA14H_GCLK_IO0 << 16) | MUX_PA14H_GCLK_IO0)

+#define PORT_PA14H_GCLK_IO0        (1u << 14)

+#define PIN_PA27H_GCLK_IO0                27  /**< \brief GCLK signal: IO0 on PA27 mux H */

+#define MUX_PA27H_GCLK_IO0                 7

+#define PINMUX_PA27H_GCLK_IO0      ((PIN_PA27H_GCLK_IO0 << 16) | MUX_PA27H_GCLK_IO0)

+#define PORT_PA27H_GCLK_IO0        (1u << 27)

+#define PIN_PA28H_GCLK_IO0                28  /**< \brief GCLK signal: IO0 on PA28 mux H */

+#define MUX_PA28H_GCLK_IO0                 7

+#define PINMUX_PA28H_GCLK_IO0      ((PIN_PA28H_GCLK_IO0 << 16) | MUX_PA28H_GCLK_IO0)

+#define PORT_PA28H_GCLK_IO0        (1u << 28)

+#define PIN_PA30H_GCLK_IO0                30  /**< \brief GCLK signal: IO0 on PA30 mux H */

+#define MUX_PA30H_GCLK_IO0                 7

+#define PINMUX_PA30H_GCLK_IO0      ((PIN_PA30H_GCLK_IO0 << 16) | MUX_PA30H_GCLK_IO0)

+#define PORT_PA30H_GCLK_IO0        (1u << 30)

+#define PIN_PB15H_GCLK_IO1                47  /**< \brief GCLK signal: IO1 on PB15 mux H */

+#define MUX_PB15H_GCLK_IO1                 7

+#define PINMUX_PB15H_GCLK_IO1      ((PIN_PB15H_GCLK_IO1 << 16) | MUX_PB15H_GCLK_IO1)

+#define PORT_PB15H_GCLK_IO1        (1u << 15)

+#define PIN_PB23H_GCLK_IO1                55  /**< \brief GCLK signal: IO1 on PB23 mux H */

+#define MUX_PB23H_GCLK_IO1                 7

+#define PINMUX_PB23H_GCLK_IO1      ((PIN_PB23H_GCLK_IO1 << 16) | MUX_PB23H_GCLK_IO1)

+#define PORT_PB23H_GCLK_IO1        (1u << 23)

+#define PIN_PA15H_GCLK_IO1                15  /**< \brief GCLK signal: IO1 on PA15 mux H */

+#define MUX_PA15H_GCLK_IO1                 7

+#define PINMUX_PA15H_GCLK_IO1      ((PIN_PA15H_GCLK_IO1 << 16) | MUX_PA15H_GCLK_IO1)

+#define PORT_PA15H_GCLK_IO1        (1u << 15)

+#define PIN_PB16H_GCLK_IO2                48  /**< \brief GCLK signal: IO2 on PB16 mux H */

+#define MUX_PB16H_GCLK_IO2                 7

+#define PINMUX_PB16H_GCLK_IO2      ((PIN_PB16H_GCLK_IO2 << 16) | MUX_PB16H_GCLK_IO2)

+#define PORT_PB16H_GCLK_IO2        (1u << 16)

+#define PIN_PA16H_GCLK_IO2                16  /**< \brief GCLK signal: IO2 on PA16 mux H */

+#define MUX_PA16H_GCLK_IO2                 7

+#define PINMUX_PA16H_GCLK_IO2      ((PIN_PA16H_GCLK_IO2 << 16) | MUX_PA16H_GCLK_IO2)

+#define PORT_PA16H_GCLK_IO2        (1u << 16)

+#define PIN_PA17H_GCLK_IO3                17  /**< \brief GCLK signal: IO3 on PA17 mux H */

+#define MUX_PA17H_GCLK_IO3                 7

+#define PINMUX_PA17H_GCLK_IO3      ((PIN_PA17H_GCLK_IO3 << 16) | MUX_PA17H_GCLK_IO3)

+#define PORT_PA17H_GCLK_IO3        (1u << 17)

+#define PIN_PB17H_GCLK_IO3                49  /**< \brief GCLK signal: IO3 on PB17 mux H */

+#define MUX_PB17H_GCLK_IO3                 7

+#define PINMUX_PB17H_GCLK_IO3      ((PIN_PB17H_GCLK_IO3 << 16) | MUX_PB17H_GCLK_IO3)

+#define PORT_PB17H_GCLK_IO3        (1u << 17)

+#define PIN_PA10H_GCLK_IO4                10  /**< \brief GCLK signal: IO4 on PA10 mux H */

+#define MUX_PA10H_GCLK_IO4                 7

+#define PINMUX_PA10H_GCLK_IO4      ((PIN_PA10H_GCLK_IO4 << 16) | MUX_PA10H_GCLK_IO4)

+#define PORT_PA10H_GCLK_IO4        (1u << 10)

+#define PIN_PA20H_GCLK_IO4                20  /**< \brief GCLK signal: IO4 on PA20 mux H */

+#define MUX_PA20H_GCLK_IO4                 7

+#define PINMUX_PA20H_GCLK_IO4      ((PIN_PA20H_GCLK_IO4 << 16) | MUX_PA20H_GCLK_IO4)

+#define PORT_PA20H_GCLK_IO4        (1u << 20)

+#define PIN_PB10H_GCLK_IO4                42  /**< \brief GCLK signal: IO4 on PB10 mux H */

+#define MUX_PB10H_GCLK_IO4                 7

+#define PINMUX_PB10H_GCLK_IO4      ((PIN_PB10H_GCLK_IO4 << 16) | MUX_PB10H_GCLK_IO4)

+#define PORT_PB10H_GCLK_IO4        (1u << 10)

+#define PIN_PA11H_GCLK_IO5                11  /**< \brief GCLK signal: IO5 on PA11 mux H */

+#define MUX_PA11H_GCLK_IO5                 7

+#define PINMUX_PA11H_GCLK_IO5      ((PIN_PA11H_GCLK_IO5 << 16) | MUX_PA11H_GCLK_IO5)

+#define PORT_PA11H_GCLK_IO5        (1u << 11)

+#define PIN_PA21H_GCLK_IO5                21  /**< \brief GCLK signal: IO5 on PA21 mux H */

+#define MUX_PA21H_GCLK_IO5                 7

+#define PINMUX_PA21H_GCLK_IO5      ((PIN_PA21H_GCLK_IO5 << 16) | MUX_PA21H_GCLK_IO5)

+#define PORT_PA21H_GCLK_IO5        (1u << 21)

+#define PIN_PB11H_GCLK_IO5                43  /**< \brief GCLK signal: IO5 on PB11 mux H */

+#define MUX_PB11H_GCLK_IO5                 7

+#define PINMUX_PB11H_GCLK_IO5      ((PIN_PB11H_GCLK_IO5 << 16) | MUX_PB11H_GCLK_IO5)

+#define PORT_PB11H_GCLK_IO5        (1u << 11)

+#define PIN_PA22H_GCLK_IO6                22  /**< \brief GCLK signal: IO6 on PA22 mux H */

+#define MUX_PA22H_GCLK_IO6                 7

+#define PINMUX_PA22H_GCLK_IO6      ((PIN_PA22H_GCLK_IO6 << 16) | MUX_PA22H_GCLK_IO6)

+#define PORT_PA22H_GCLK_IO6        (1u << 22)

+#define PIN_PB12H_GCLK_IO6                44  /**< \brief GCLK signal: IO6 on PB12 mux H */

+#define MUX_PB12H_GCLK_IO6                 7

+#define PINMUX_PB12H_GCLK_IO6      ((PIN_PB12H_GCLK_IO6 << 16) | MUX_PB12H_GCLK_IO6)

+#define PORT_PB12H_GCLK_IO6        (1u << 12)

+#define PIN_PA23H_GCLK_IO7                23  /**< \brief GCLK signal: IO7 on PA23 mux H */

+#define MUX_PA23H_GCLK_IO7                 7

+#define PINMUX_PA23H_GCLK_IO7      ((PIN_PA23H_GCLK_IO7 << 16) | MUX_PA23H_GCLK_IO7)

+#define PORT_PA23H_GCLK_IO7        (1u << 23)

+#define PIN_PB13H_GCLK_IO7                45  /**< \brief GCLK signal: IO7 on PB13 mux H */

+#define MUX_PB13H_GCLK_IO7                 7

+#define PINMUX_PB13H_GCLK_IO7      ((PIN_PB13H_GCLK_IO7 << 16) | MUX_PB13H_GCLK_IO7)

+#define PORT_PB13H_GCLK_IO7        (1u << 13)

+/* ========== PORT definition for EIC peripheral ========== */

+#define PIN_PA16A_EIC_EXTINT0             16  /**< \brief EIC signal: EXTINT0 on PA16 mux A */

+#define MUX_PA16A_EIC_EXTINT0              0

+#define PINMUX_PA16A_EIC_EXTINT0   ((PIN_PA16A_EIC_EXTINT0 << 16) | MUX_PA16A_EIC_EXTINT0)

+#define PORT_PA16A_EIC_EXTINT0     (1u << 16)

+#define PIN_PB00A_EIC_EXTINT0             32  /**< \brief EIC signal: EXTINT0 on PB00 mux A */

+#define MUX_PB00A_EIC_EXTINT0              0

+#define PINMUX_PB00A_EIC_EXTINT0   ((PIN_PB00A_EIC_EXTINT0 << 16) | MUX_PB00A_EIC_EXTINT0)

+#define PORT_PB00A_EIC_EXTINT0     (1u <<  0)

+#define PIN_PB16A_EIC_EXTINT0             48  /**< \brief EIC signal: EXTINT0 on PB16 mux A */

+#define MUX_PB16A_EIC_EXTINT0              0

+#define PINMUX_PB16A_EIC_EXTINT0   ((PIN_PB16A_EIC_EXTINT0 << 16) | MUX_PB16A_EIC_EXTINT0)

+#define PORT_PB16A_EIC_EXTINT0     (1u << 16)

+#define PIN_PA00A_EIC_EXTINT0              0  /**< \brief EIC signal: EXTINT0 on PA00 mux A */

+#define MUX_PA00A_EIC_EXTINT0              0

+#define PINMUX_PA00A_EIC_EXTINT0   ((PIN_PA00A_EIC_EXTINT0 << 16) | MUX_PA00A_EIC_EXTINT0)

+#define PORT_PA00A_EIC_EXTINT0     (1u <<  0)

+#define PIN_PA17A_EIC_EXTINT1             17  /**< \brief EIC signal: EXTINT1 on PA17 mux A */

+#define MUX_PA17A_EIC_EXTINT1              0

+#define PINMUX_PA17A_EIC_EXTINT1   ((PIN_PA17A_EIC_EXTINT1 << 16) | MUX_PA17A_EIC_EXTINT1)

+#define PORT_PA17A_EIC_EXTINT1     (1u << 17)

+#define PIN_PB01A_EIC_EXTINT1             33  /**< \brief EIC signal: EXTINT1 on PB01 mux A */

+#define MUX_PB01A_EIC_EXTINT1              0

+#define PINMUX_PB01A_EIC_EXTINT1   ((PIN_PB01A_EIC_EXTINT1 << 16) | MUX_PB01A_EIC_EXTINT1)

+#define PORT_PB01A_EIC_EXTINT1     (1u <<  1)

+#define PIN_PB17A_EIC_EXTINT1             49  /**< \brief EIC signal: EXTINT1 on PB17 mux A */

+#define MUX_PB17A_EIC_EXTINT1              0

+#define PINMUX_PB17A_EIC_EXTINT1   ((PIN_PB17A_EIC_EXTINT1 << 16) | MUX_PB17A_EIC_EXTINT1)

+#define PORT_PB17A_EIC_EXTINT1     (1u << 17)

+#define PIN_PA01A_EIC_EXTINT1              1  /**< \brief EIC signal: EXTINT1 on PA01 mux A */

+#define MUX_PA01A_EIC_EXTINT1              0

+#define PINMUX_PA01A_EIC_EXTINT1   ((PIN_PA01A_EIC_EXTINT1 << 16) | MUX_PA01A_EIC_EXTINT1)

+#define PORT_PA01A_EIC_EXTINT1     (1u <<  1)

+#define PIN_PA02A_EIC_EXTINT2              2  /**< \brief EIC signal: EXTINT2 on PA02 mux A */

+#define MUX_PA02A_EIC_EXTINT2              0

+#define PINMUX_PA02A_EIC_EXTINT2   ((PIN_PA02A_EIC_EXTINT2 << 16) | MUX_PA02A_EIC_EXTINT2)

+#define PORT_PA02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA18A_EIC_EXTINT2             18  /**< \brief EIC signal: EXTINT2 on PA18 mux A */

+#define MUX_PA18A_EIC_EXTINT2              0

+#define PINMUX_PA18A_EIC_EXTINT2   ((PIN_PA18A_EIC_EXTINT2 << 16) | MUX_PA18A_EIC_EXTINT2)

+#define PORT_PA18A_EIC_EXTINT2     (1u << 18)

+#define PIN_PB02A_EIC_EXTINT2             34  /**< \brief EIC signal: EXTINT2 on PB02 mux A */

+#define MUX_PB02A_EIC_EXTINT2              0

+#define PINMUX_PB02A_EIC_EXTINT2   ((PIN_PB02A_EIC_EXTINT2 << 16) | MUX_PB02A_EIC_EXTINT2)

+#define PORT_PB02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA03A_EIC_EXTINT3              3  /**< \brief EIC signal: EXTINT3 on PA03 mux A */

+#define MUX_PA03A_EIC_EXTINT3              0

+#define PINMUX_PA03A_EIC_EXTINT3   ((PIN_PA03A_EIC_EXTINT3 << 16) | MUX_PA03A_EIC_EXTINT3)

+#define PORT_PA03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA19A_EIC_EXTINT3             19  /**< \brief EIC signal: EXTINT3 on PA19 mux A */

+#define MUX_PA19A_EIC_EXTINT3              0

+#define PINMUX_PA19A_EIC_EXTINT3   ((PIN_PA19A_EIC_EXTINT3 << 16) | MUX_PA19A_EIC_EXTINT3)

+#define PORT_PA19A_EIC_EXTINT3     (1u << 19)

+#define PIN_PB03A_EIC_EXTINT3             35  /**< \brief EIC signal: EXTINT3 on PB03 mux A */

+#define MUX_PB03A_EIC_EXTINT3              0

+#define PINMUX_PB03A_EIC_EXTINT3   ((PIN_PB03A_EIC_EXTINT3 << 16) | MUX_PB03A_EIC_EXTINT3)

+#define PORT_PB03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA04A_EIC_EXTINT4              4  /**< \brief EIC signal: EXTINT4 on PA04 mux A */

+#define MUX_PA04A_EIC_EXTINT4              0

+#define PINMUX_PA04A_EIC_EXTINT4   ((PIN_PA04A_EIC_EXTINT4 << 16) | MUX_PA04A_EIC_EXTINT4)

+#define PORT_PA04A_EIC_EXTINT4     (1u <<  4)

+#define PIN_PA20A_EIC_EXTINT4             20  /**< \brief EIC signal: EXTINT4 on PA20 mux A */

+#define MUX_PA20A_EIC_EXTINT4              0

+#define PINMUX_PA20A_EIC_EXTINT4   ((PIN_PA20A_EIC_EXTINT4 << 16) | MUX_PA20A_EIC_EXTINT4)

+#define PORT_PA20A_EIC_EXTINT4     (1u << 20)

+#define PIN_PB04A_EIC_EXTINT4             36  /**< \brief EIC signal: EXTINT4 on PB04 mux A */

+#define MUX_PB04A_EIC_EXTINT4              0

+#define PINMUX_PB04A_EIC_EXTINT4   ((PIN_PB04A_EIC_EXTINT4 << 16) | MUX_PB04A_EIC_EXTINT4)

+#define PORT_PB04A_EIC_EXTINT4     (1u <<  4)

+#define PIN_PA05A_EIC_EXTINT5              5  /**< \brief EIC signal: EXTINT5 on PA05 mux A */

+#define MUX_PA05A_EIC_EXTINT5              0

+#define PINMUX_PA05A_EIC_EXTINT5   ((PIN_PA05A_EIC_EXTINT5 << 16) | MUX_PA05A_EIC_EXTINT5)

+#define PORT_PA05A_EIC_EXTINT5     (1u <<  5)

+#define PIN_PA21A_EIC_EXTINT5             21  /**< \brief EIC signal: EXTINT5 on PA21 mux A */

+#define MUX_PA21A_EIC_EXTINT5              0

+#define PINMUX_PA21A_EIC_EXTINT5   ((PIN_PA21A_EIC_EXTINT5 << 16) | MUX_PA21A_EIC_EXTINT5)

+#define PORT_PA21A_EIC_EXTINT5     (1u << 21)

+#define PIN_PB05A_EIC_EXTINT5             37  /**< \brief EIC signal: EXTINT5 on PB05 mux A */

+#define MUX_PB05A_EIC_EXTINT5              0

+#define PINMUX_PB05A_EIC_EXTINT5   ((PIN_PB05A_EIC_EXTINT5 << 16) | MUX_PB05A_EIC_EXTINT5)

+#define PORT_PB05A_EIC_EXTINT5     (1u <<  5)

+#define PIN_PA06A_EIC_EXTINT6              6  /**< \brief EIC signal: EXTINT6 on PA06 mux A */

+#define MUX_PA06A_EIC_EXTINT6              0

+#define PINMUX_PA06A_EIC_EXTINT6   ((PIN_PA06A_EIC_EXTINT6 << 16) | MUX_PA06A_EIC_EXTINT6)

+#define PORT_PA06A_EIC_EXTINT6     (1u <<  6)

+#define PIN_PA22A_EIC_EXTINT6             22  /**< \brief EIC signal: EXTINT6 on PA22 mux A */

+#define MUX_PA22A_EIC_EXTINT6              0

+#define PINMUX_PA22A_EIC_EXTINT6   ((PIN_PA22A_EIC_EXTINT6 << 16) | MUX_PA22A_EIC_EXTINT6)

+#define PORT_PA22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PB06A_EIC_EXTINT6             38  /**< \brief EIC signal: EXTINT6 on PB06 mux A */

+#define MUX_PB06A_EIC_EXTINT6              0

+#define PINMUX_PB06A_EIC_EXTINT6   ((PIN_PB06A_EIC_EXTINT6 << 16) | MUX_PB06A_EIC_EXTINT6)

+#define PORT_PB06A_EIC_EXTINT6     (1u <<  6)

+#define PIN_PB22A_EIC_EXTINT6             54  /**< \brief EIC signal: EXTINT6 on PB22 mux A */

+#define MUX_PB22A_EIC_EXTINT6              0

+#define PINMUX_PB22A_EIC_EXTINT6   ((PIN_PB22A_EIC_EXTINT6 << 16) | MUX_PB22A_EIC_EXTINT6)

+#define PORT_PB22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PA07A_EIC_EXTINT7              7  /**< \brief EIC signal: EXTINT7 on PA07 mux A */

+#define MUX_PA07A_EIC_EXTINT7              0

+#define PINMUX_PA07A_EIC_EXTINT7   ((PIN_PA07A_EIC_EXTINT7 << 16) | MUX_PA07A_EIC_EXTINT7)

+#define PORT_PA07A_EIC_EXTINT7     (1u <<  7)

+#define PIN_PA23A_EIC_EXTINT7             23  /**< \brief EIC signal: EXTINT7 on PA23 mux A */

+#define MUX_PA23A_EIC_EXTINT7              0

+#define PINMUX_PA23A_EIC_EXTINT7   ((PIN_PA23A_EIC_EXTINT7 << 16) | MUX_PA23A_EIC_EXTINT7)

+#define PORT_PA23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PB07A_EIC_EXTINT7             39  /**< \brief EIC signal: EXTINT7 on PB07 mux A */

+#define MUX_PB07A_EIC_EXTINT7              0

+#define PINMUX_PB07A_EIC_EXTINT7   ((PIN_PB07A_EIC_EXTINT7 << 16) | MUX_PB07A_EIC_EXTINT7)

+#define PORT_PB07A_EIC_EXTINT7     (1u <<  7)

+#define PIN_PB23A_EIC_EXTINT7             55  /**< \brief EIC signal: EXTINT7 on PB23 mux A */

+#define MUX_PB23A_EIC_EXTINT7              0

+#define PINMUX_PB23A_EIC_EXTINT7   ((PIN_PB23A_EIC_EXTINT7 << 16) | MUX_PB23A_EIC_EXTINT7)

+#define PORT_PB23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PA28A_EIC_EXTINT8             28  /**< \brief EIC signal: EXTINT8 on PA28 mux A */

+#define MUX_PA28A_EIC_EXTINT8              0

+#define PINMUX_PA28A_EIC_EXTINT8   ((PIN_PA28A_EIC_EXTINT8 << 16) | MUX_PA28A_EIC_EXTINT8)

+#define PORT_PA28A_EIC_EXTINT8     (1u << 28)

+#define PIN_PB08A_EIC_EXTINT8             40  /**< \brief EIC signal: EXTINT8 on PB08 mux A */

+#define MUX_PB08A_EIC_EXTINT8              0

+#define PINMUX_PB08A_EIC_EXTINT8   ((PIN_PB08A_EIC_EXTINT8 << 16) | MUX_PB08A_EIC_EXTINT8)

+#define PORT_PB08A_EIC_EXTINT8     (1u <<  8)

+#define PIN_PA09A_EIC_EXTINT9              9  /**< \brief EIC signal: EXTINT9 on PA09 mux A */

+#define MUX_PA09A_EIC_EXTINT9              0

+#define PINMUX_PA09A_EIC_EXTINT9   ((PIN_PA09A_EIC_EXTINT9 << 16) | MUX_PA09A_EIC_EXTINT9)

+#define PORT_PA09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PB09A_EIC_EXTINT9             41  /**< \brief EIC signal: EXTINT9 on PB09 mux A */

+#define MUX_PB09A_EIC_EXTINT9              0

+#define PINMUX_PB09A_EIC_EXTINT9   ((PIN_PB09A_EIC_EXTINT9 << 16) | MUX_PB09A_EIC_EXTINT9)

+#define PORT_PB09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PA10A_EIC_EXTINT10            10  /**< \brief EIC signal: EXTINT10 on PA10 mux A */

+#define MUX_PA10A_EIC_EXTINT10             0

+#define PINMUX_PA10A_EIC_EXTINT10  ((PIN_PA10A_EIC_EXTINT10 << 16) | MUX_PA10A_EIC_EXTINT10)

+#define PORT_PA10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA30A_EIC_EXTINT10            30  /**< \brief EIC signal: EXTINT10 on PA30 mux A */

+#define MUX_PA30A_EIC_EXTINT10             0

+#define PINMUX_PA30A_EIC_EXTINT10  ((PIN_PA30A_EIC_EXTINT10 << 16) | MUX_PA30A_EIC_EXTINT10)

+#define PORT_PA30A_EIC_EXTINT10    (1u << 30)

+#define PIN_PB10A_EIC_EXTINT10            42  /**< \brief EIC signal: EXTINT10 on PB10 mux A */

+#define MUX_PB10A_EIC_EXTINT10             0

+#define PINMUX_PB10A_EIC_EXTINT10  ((PIN_PB10A_EIC_EXTINT10 << 16) | MUX_PB10A_EIC_EXTINT10)

+#define PORT_PB10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA11A_EIC_EXTINT11            11  /**< \brief EIC signal: EXTINT11 on PA11 mux A */

+#define MUX_PA11A_EIC_EXTINT11             0

+#define PINMUX_PA11A_EIC_EXTINT11  ((PIN_PA11A_EIC_EXTINT11 << 16) | MUX_PA11A_EIC_EXTINT11)

+#define PORT_PA11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA31A_EIC_EXTINT11            31  /**< \brief EIC signal: EXTINT11 on PA31 mux A */

+#define MUX_PA31A_EIC_EXTINT11             0

+#define PINMUX_PA31A_EIC_EXTINT11  ((PIN_PA31A_EIC_EXTINT11 << 16) | MUX_PA31A_EIC_EXTINT11)

+#define PORT_PA31A_EIC_EXTINT11    (1u << 31)

+#define PIN_PB11A_EIC_EXTINT11            43  /**< \brief EIC signal: EXTINT11 on PB11 mux A */

+#define MUX_PB11A_EIC_EXTINT11             0

+#define PINMUX_PB11A_EIC_EXTINT11  ((PIN_PB11A_EIC_EXTINT11 << 16) | MUX_PB11A_EIC_EXTINT11)

+#define PORT_PB11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA12A_EIC_EXTINT12            12  /**< \brief EIC signal: EXTINT12 on PA12 mux A */

+#define MUX_PA12A_EIC_EXTINT12             0

+#define PINMUX_PA12A_EIC_EXTINT12  ((PIN_PA12A_EIC_EXTINT12 << 16) | MUX_PA12A_EIC_EXTINT12)

+#define PORT_PA12A_EIC_EXTINT12    (1u << 12)

+#define PIN_PA24A_EIC_EXTINT12            24  /**< \brief EIC signal: EXTINT12 on PA24 mux A */

+#define MUX_PA24A_EIC_EXTINT12             0

+#define PINMUX_PA24A_EIC_EXTINT12  ((PIN_PA24A_EIC_EXTINT12 << 16) | MUX_PA24A_EIC_EXTINT12)

+#define PORT_PA24A_EIC_EXTINT12    (1u << 24)

+#define PIN_PB12A_EIC_EXTINT12            44  /**< \brief EIC signal: EXTINT12 on PB12 mux A */

+#define MUX_PB12A_EIC_EXTINT12             0

+#define PINMUX_PB12A_EIC_EXTINT12  ((PIN_PB12A_EIC_EXTINT12 << 16) | MUX_PB12A_EIC_EXTINT12)

+#define PORT_PB12A_EIC_EXTINT12    (1u << 12)

+#define PIN_PA13A_EIC_EXTINT13            13  /**< \brief EIC signal: EXTINT13 on PA13 mux A */

+#define MUX_PA13A_EIC_EXTINT13             0

+#define PINMUX_PA13A_EIC_EXTINT13  ((PIN_PA13A_EIC_EXTINT13 << 16) | MUX_PA13A_EIC_EXTINT13)

+#define PORT_PA13A_EIC_EXTINT13    (1u << 13)

+#define PIN_PA25A_EIC_EXTINT13            25  /**< \brief EIC signal: EXTINT13 on PA25 mux A */

+#define MUX_PA25A_EIC_EXTINT13             0

+#define PINMUX_PA25A_EIC_EXTINT13  ((PIN_PA25A_EIC_EXTINT13 << 16) | MUX_PA25A_EIC_EXTINT13)

+#define PORT_PA25A_EIC_EXTINT13    (1u << 25)

+#define PIN_PB13A_EIC_EXTINT13            45  /**< \brief EIC signal: EXTINT13 on PB13 mux A */

+#define MUX_PB13A_EIC_EXTINT13             0

+#define PINMUX_PB13A_EIC_EXTINT13  ((PIN_PB13A_EIC_EXTINT13 << 16) | MUX_PB13A_EIC_EXTINT13)

+#define PORT_PB13A_EIC_EXTINT13    (1u << 13)

+#define PIN_PB14A_EIC_EXTINT14            46  /**< \brief EIC signal: EXTINT14 on PB14 mux A */

+#define MUX_PB14A_EIC_EXTINT14             0

+#define PINMUX_PB14A_EIC_EXTINT14  ((PIN_PB14A_EIC_EXTINT14 << 16) | MUX_PB14A_EIC_EXTINT14)

+#define PORT_PB14A_EIC_EXTINT14    (1u << 14)

+#define PIN_PB30A_EIC_EXTINT14            62  /**< \brief EIC signal: EXTINT14 on PB30 mux A */

+#define MUX_PB30A_EIC_EXTINT14             0

+#define PINMUX_PB30A_EIC_EXTINT14  ((PIN_PB30A_EIC_EXTINT14 << 16) | MUX_PB30A_EIC_EXTINT14)

+#define PORT_PB30A_EIC_EXTINT14    (1u << 30)

+#define PIN_PA14A_EIC_EXTINT14            14  /**< \brief EIC signal: EXTINT14 on PA14 mux A */

+#define MUX_PA14A_EIC_EXTINT14             0

+#define PINMUX_PA14A_EIC_EXTINT14  ((PIN_PA14A_EIC_EXTINT14 << 16) | MUX_PA14A_EIC_EXTINT14)

+#define PORT_PA14A_EIC_EXTINT14    (1u << 14)

+#define PIN_PA27A_EIC_EXTINT15            27  /**< \brief EIC signal: EXTINT15 on PA27 mux A */

+#define MUX_PA27A_EIC_EXTINT15             0

+#define PINMUX_PA27A_EIC_EXTINT15  ((PIN_PA27A_EIC_EXTINT15 << 16) | MUX_PA27A_EIC_EXTINT15)

+#define PORT_PA27A_EIC_EXTINT15    (1u << 27)

+#define PIN_PB15A_EIC_EXTINT15            47  /**< \brief EIC signal: EXTINT15 on PB15 mux A */

+#define MUX_PB15A_EIC_EXTINT15             0

+#define PINMUX_PB15A_EIC_EXTINT15  ((PIN_PB15A_EIC_EXTINT15 << 16) | MUX_PB15A_EIC_EXTINT15)

+#define PORT_PB15A_EIC_EXTINT15    (1u << 15)

+#define PIN_PB31A_EIC_EXTINT15            63  /**< \brief EIC signal: EXTINT15 on PB31 mux A */

+#define MUX_PB31A_EIC_EXTINT15             0

+#define PINMUX_PB31A_EIC_EXTINT15  ((PIN_PB31A_EIC_EXTINT15 << 16) | MUX_PB31A_EIC_EXTINT15)

+#define PORT_PB31A_EIC_EXTINT15    (1u << 31)

+#define PIN_PA15A_EIC_EXTINT15            15  /**< \brief EIC signal: EXTINT15 on PA15 mux A */

+#define MUX_PA15A_EIC_EXTINT15             0

+#define PINMUX_PA15A_EIC_EXTINT15  ((PIN_PA15A_EIC_EXTINT15 << 16) | MUX_PA15A_EIC_EXTINT15)

+#define PORT_PA15A_EIC_EXTINT15    (1u << 15)

+#define PIN_PA08A_EIC_NMI                  8  /**< \brief EIC signal: NMI on PA08 mux A */

+#define MUX_PA08A_EIC_NMI                  0

+#define PINMUX_PA08A_EIC_NMI       ((PIN_PA08A_EIC_NMI << 16) | MUX_PA08A_EIC_NMI)

+#define PORT_PA08A_EIC_NMI         (1u <<  8)

+/* ========== PORT definition for SERCOM0 peripheral ========== */

+#define PIN_PA04D_SERCOM0_PAD0             4  /**< \brief SERCOM0 signal: PAD0 on PA04 mux D */

+#define MUX_PA04D_SERCOM0_PAD0             3

+#define PINMUX_PA04D_SERCOM0_PAD0  ((PIN_PA04D_SERCOM0_PAD0 << 16) | MUX_PA04D_SERCOM0_PAD0)

+#define PORT_PA04D_SERCOM0_PAD0    (1u <<  4)

+#define PIN_PA08C_SERCOM0_PAD0             8  /**< \brief SERCOM0 signal: PAD0 on PA08 mux C */

+#define MUX_PA08C_SERCOM0_PAD0             2

+#define PINMUX_PA08C_SERCOM0_PAD0  ((PIN_PA08C_SERCOM0_PAD0 << 16) | MUX_PA08C_SERCOM0_PAD0)

+#define PORT_PA08C_SERCOM0_PAD0    (1u <<  8)

+#define PIN_PA05D_SERCOM0_PAD1             5  /**< \brief SERCOM0 signal: PAD1 on PA05 mux D */

+#define MUX_PA05D_SERCOM0_PAD1             3

+#define PINMUX_PA05D_SERCOM0_PAD1  ((PIN_PA05D_SERCOM0_PAD1 << 16) | MUX_PA05D_SERCOM0_PAD1)

+#define PORT_PA05D_SERCOM0_PAD1    (1u <<  5)

+#define PIN_PA09C_SERCOM0_PAD1             9  /**< \brief SERCOM0 signal: PAD1 on PA09 mux C */

+#define MUX_PA09C_SERCOM0_PAD1             2

+#define PINMUX_PA09C_SERCOM0_PAD1  ((PIN_PA09C_SERCOM0_PAD1 << 16) | MUX_PA09C_SERCOM0_PAD1)

+#define PORT_PA09C_SERCOM0_PAD1    (1u <<  9)

+#define PIN_PA06D_SERCOM0_PAD2             6  /**< \brief SERCOM0 signal: PAD2 on PA06 mux D */

+#define MUX_PA06D_SERCOM0_PAD2             3

+#define PINMUX_PA06D_SERCOM0_PAD2  ((PIN_PA06D_SERCOM0_PAD2 << 16) | MUX_PA06D_SERCOM0_PAD2)

+#define PORT_PA06D_SERCOM0_PAD2    (1u <<  6)

+#define PIN_PA10C_SERCOM0_PAD2            10  /**< \brief SERCOM0 signal: PAD2 on PA10 mux C */

+#define MUX_PA10C_SERCOM0_PAD2             2

+#define PINMUX_PA10C_SERCOM0_PAD2  ((PIN_PA10C_SERCOM0_PAD2 << 16) | MUX_PA10C_SERCOM0_PAD2)

+#define PORT_PA10C_SERCOM0_PAD2    (1u << 10)

+#define PIN_PA07D_SERCOM0_PAD3             7  /**< \brief SERCOM0 signal: PAD3 on PA07 mux D */

+#define MUX_PA07D_SERCOM0_PAD3             3

+#define PINMUX_PA07D_SERCOM0_PAD3  ((PIN_PA07D_SERCOM0_PAD3 << 16) | MUX_PA07D_SERCOM0_PAD3)

+#define PORT_PA07D_SERCOM0_PAD3    (1u <<  7)

+#define PIN_PA11C_SERCOM0_PAD3            11  /**< \brief SERCOM0 signal: PAD3 on PA11 mux C */

+#define MUX_PA11C_SERCOM0_PAD3             2

+#define PINMUX_PA11C_SERCOM0_PAD3  ((PIN_PA11C_SERCOM0_PAD3 << 16) | MUX_PA11C_SERCOM0_PAD3)

+#define PORT_PA11C_SERCOM0_PAD3    (1u << 11)

+/* ========== PORT definition for SERCOM1 peripheral ========== */

+#define PIN_PA16C_SERCOM1_PAD0            16  /**< \brief SERCOM1 signal: PAD0 on PA16 mux C */

+#define MUX_PA16C_SERCOM1_PAD0             2

+#define PINMUX_PA16C_SERCOM1_PAD0  ((PIN_PA16C_SERCOM1_PAD0 << 16) | MUX_PA16C_SERCOM1_PAD0)

+#define PORT_PA16C_SERCOM1_PAD0    (1u << 16)

+#define PIN_PA00D_SERCOM1_PAD0             0  /**< \brief SERCOM1 signal: PAD0 on PA00 mux D */

+#define MUX_PA00D_SERCOM1_PAD0             3

+#define PINMUX_PA00D_SERCOM1_PAD0  ((PIN_PA00D_SERCOM1_PAD0 << 16) | MUX_PA00D_SERCOM1_PAD0)

+#define PORT_PA00D_SERCOM1_PAD0    (1u <<  0)

+#define PIN_PA17C_SERCOM1_PAD1            17  /**< \brief SERCOM1 signal: PAD1 on PA17 mux C */

+#define MUX_PA17C_SERCOM1_PAD1             2

+#define PINMUX_PA17C_SERCOM1_PAD1  ((PIN_PA17C_SERCOM1_PAD1 << 16) | MUX_PA17C_SERCOM1_PAD1)

+#define PORT_PA17C_SERCOM1_PAD1    (1u << 17)

+#define PIN_PA01D_SERCOM1_PAD1             1  /**< \brief SERCOM1 signal: PAD1 on PA01 mux D */

+#define MUX_PA01D_SERCOM1_PAD1             3

+#define PINMUX_PA01D_SERCOM1_PAD1  ((PIN_PA01D_SERCOM1_PAD1 << 16) | MUX_PA01D_SERCOM1_PAD1)

+#define PORT_PA01D_SERCOM1_PAD1    (1u <<  1)

+#define PIN_PA30D_SERCOM1_PAD2            30  /**< \brief SERCOM1 signal: PAD2 on PA30 mux D */

+#define MUX_PA30D_SERCOM1_PAD2             3

+#define PINMUX_PA30D_SERCOM1_PAD2  ((PIN_PA30D_SERCOM1_PAD2 << 16) | MUX_PA30D_SERCOM1_PAD2)

+#define PORT_PA30D_SERCOM1_PAD2    (1u << 30)

+#define PIN_PA18C_SERCOM1_PAD2            18  /**< \brief SERCOM1 signal: PAD2 on PA18 mux C */

+#define MUX_PA18C_SERCOM1_PAD2             2

+#define PINMUX_PA18C_SERCOM1_PAD2  ((PIN_PA18C_SERCOM1_PAD2 << 16) | MUX_PA18C_SERCOM1_PAD2)

+#define PORT_PA18C_SERCOM1_PAD2    (1u << 18)

+#define PIN_PA31D_SERCOM1_PAD3            31  /**< \brief SERCOM1 signal: PAD3 on PA31 mux D */

+#define MUX_PA31D_SERCOM1_PAD3             3

+#define PINMUX_PA31D_SERCOM1_PAD3  ((PIN_PA31D_SERCOM1_PAD3 << 16) | MUX_PA31D_SERCOM1_PAD3)

+#define PORT_PA31D_SERCOM1_PAD3    (1u << 31)

+#define PIN_PA19C_SERCOM1_PAD3            19  /**< \brief SERCOM1 signal: PAD3 on PA19 mux C */

+#define MUX_PA19C_SERCOM1_PAD3             2

+#define PINMUX_PA19C_SERCOM1_PAD3  ((PIN_PA19C_SERCOM1_PAD3 << 16) | MUX_PA19C_SERCOM1_PAD3)

+#define PORT_PA19C_SERCOM1_PAD3    (1u << 19)

+/* ========== PORT definition for SERCOM2 peripheral ========== */

+#define PIN_PA08D_SERCOM2_PAD0             8  /**< \brief SERCOM2 signal: PAD0 on PA08 mux D */

+#define MUX_PA08D_SERCOM2_PAD0             3

+#define PINMUX_PA08D_SERCOM2_PAD0  ((PIN_PA08D_SERCOM2_PAD0 << 16) | MUX_PA08D_SERCOM2_PAD0)

+#define PORT_PA08D_SERCOM2_PAD0    (1u <<  8)

+#define PIN_PA12C_SERCOM2_PAD0            12  /**< \brief SERCOM2 signal: PAD0 on PA12 mux C */

+#define MUX_PA12C_SERCOM2_PAD0             2

+#define PINMUX_PA12C_SERCOM2_PAD0  ((PIN_PA12C_SERCOM2_PAD0 << 16) | MUX_PA12C_SERCOM2_PAD0)

+#define PORT_PA12C_SERCOM2_PAD0    (1u << 12)

+#define PIN_PA09D_SERCOM2_PAD1             9  /**< \brief SERCOM2 signal: PAD1 on PA09 mux D */

+#define MUX_PA09D_SERCOM2_PAD1             3

+#define PINMUX_PA09D_SERCOM2_PAD1  ((PIN_PA09D_SERCOM2_PAD1 << 16) | MUX_PA09D_SERCOM2_PAD1)

+#define PORT_PA09D_SERCOM2_PAD1    (1u <<  9)

+#define PIN_PA13C_SERCOM2_PAD1            13  /**< \brief SERCOM2 signal: PAD1 on PA13 mux C */

+#define MUX_PA13C_SERCOM2_PAD1             2

+#define PINMUX_PA13C_SERCOM2_PAD1  ((PIN_PA13C_SERCOM2_PAD1 << 16) | MUX_PA13C_SERCOM2_PAD1)

+#define PORT_PA13C_SERCOM2_PAD1    (1u << 13)

+#define PIN_PA10D_SERCOM2_PAD2            10  /**< \brief SERCOM2 signal: PAD2 on PA10 mux D */

+#define MUX_PA10D_SERCOM2_PAD2             3

+#define PINMUX_PA10D_SERCOM2_PAD2  ((PIN_PA10D_SERCOM2_PAD2 << 16) | MUX_PA10D_SERCOM2_PAD2)

+#define PORT_PA10D_SERCOM2_PAD2    (1u << 10)

+#define PIN_PA14C_SERCOM2_PAD2            14  /**< \brief SERCOM2 signal: PAD2 on PA14 mux C */

+#define MUX_PA14C_SERCOM2_PAD2             2

+#define PINMUX_PA14C_SERCOM2_PAD2  ((PIN_PA14C_SERCOM2_PAD2 << 16) | MUX_PA14C_SERCOM2_PAD2)

+#define PORT_PA14C_SERCOM2_PAD2    (1u << 14)

+#define PIN_PA11D_SERCOM2_PAD3            11  /**< \brief SERCOM2 signal: PAD3 on PA11 mux D */

+#define MUX_PA11D_SERCOM2_PAD3             3

+#define PINMUX_PA11D_SERCOM2_PAD3  ((PIN_PA11D_SERCOM2_PAD3 << 16) | MUX_PA11D_SERCOM2_PAD3)

+#define PORT_PA11D_SERCOM2_PAD3    (1u << 11)

+#define PIN_PA15C_SERCOM2_PAD3            15  /**< \brief SERCOM2 signal: PAD3 on PA15 mux C */

+#define MUX_PA15C_SERCOM2_PAD3             2

+#define PINMUX_PA15C_SERCOM2_PAD3  ((PIN_PA15C_SERCOM2_PAD3 << 16) | MUX_PA15C_SERCOM2_PAD3)

+#define PORT_PA15C_SERCOM2_PAD3    (1u << 15)

+/* ========== PORT definition for SERCOM3 peripheral ========== */

+#define PIN_PA16D_SERCOM3_PAD0            16  /**< \brief SERCOM3 signal: PAD0 on PA16 mux D */

+#define MUX_PA16D_SERCOM3_PAD0             3

+#define PINMUX_PA16D_SERCOM3_PAD0  ((PIN_PA16D_SERCOM3_PAD0 << 16) | MUX_PA16D_SERCOM3_PAD0)

+#define PORT_PA16D_SERCOM3_PAD0    (1u << 16)

+#define PIN_PA22C_SERCOM3_PAD0            22  /**< \brief SERCOM3 signal: PAD0 on PA22 mux C */

+#define MUX_PA22C_SERCOM3_PAD0             2

+#define PINMUX_PA22C_SERCOM3_PAD0  ((PIN_PA22C_SERCOM3_PAD0 << 16) | MUX_PA22C_SERCOM3_PAD0)

+#define PORT_PA22C_SERCOM3_PAD0    (1u << 22)

+#define PIN_PA17D_SERCOM3_PAD1            17  /**< \brief SERCOM3 signal: PAD1 on PA17 mux D */

+#define MUX_PA17D_SERCOM3_PAD1             3

+#define PINMUX_PA17D_SERCOM3_PAD1  ((PIN_PA17D_SERCOM3_PAD1 << 16) | MUX_PA17D_SERCOM3_PAD1)

+#define PORT_PA17D_SERCOM3_PAD1    (1u << 17)

+#define PIN_PA23C_SERCOM3_PAD1            23  /**< \brief SERCOM3 signal: PAD1 on PA23 mux C */

+#define MUX_PA23C_SERCOM3_PAD1             2

+#define PINMUX_PA23C_SERCOM3_PAD1  ((PIN_PA23C_SERCOM3_PAD1 << 16) | MUX_PA23C_SERCOM3_PAD1)

+#define PORT_PA23C_SERCOM3_PAD1    (1u << 23)

+#define PIN_PA18D_SERCOM3_PAD2            18  /**< \brief SERCOM3 signal: PAD2 on PA18 mux D */

+#define MUX_PA18D_SERCOM3_PAD2             3

+#define PINMUX_PA18D_SERCOM3_PAD2  ((PIN_PA18D_SERCOM3_PAD2 << 16) | MUX_PA18D_SERCOM3_PAD2)

+#define PORT_PA18D_SERCOM3_PAD2    (1u << 18)

+#define PIN_PA20D_SERCOM3_PAD2            20  /**< \brief SERCOM3 signal: PAD2 on PA20 mux D */

+#define MUX_PA20D_SERCOM3_PAD2             3

+#define PINMUX_PA20D_SERCOM3_PAD2  ((PIN_PA20D_SERCOM3_PAD2 << 16) | MUX_PA20D_SERCOM3_PAD2)

+#define PORT_PA20D_SERCOM3_PAD2    (1u << 20)

+#define PIN_PA24C_SERCOM3_PAD2            24  /**< \brief SERCOM3 signal: PAD2 on PA24 mux C */

+#define MUX_PA24C_SERCOM3_PAD2             2

+#define PINMUX_PA24C_SERCOM3_PAD2  ((PIN_PA24C_SERCOM3_PAD2 << 16) | MUX_PA24C_SERCOM3_PAD2)

+#define PORT_PA24C_SERCOM3_PAD2    (1u << 24)

+#define PIN_PA19D_SERCOM3_PAD3            19  /**< \brief SERCOM3 signal: PAD3 on PA19 mux D */

+#define MUX_PA19D_SERCOM3_PAD3             3

+#define PINMUX_PA19D_SERCOM3_PAD3  ((PIN_PA19D_SERCOM3_PAD3 << 16) | MUX_PA19D_SERCOM3_PAD3)

+#define PORT_PA19D_SERCOM3_PAD3    (1u << 19)

+#define PIN_PA21D_SERCOM3_PAD3            21  /**< \brief SERCOM3 signal: PAD3 on PA21 mux D */

+#define MUX_PA21D_SERCOM3_PAD3             3

+#define PINMUX_PA21D_SERCOM3_PAD3  ((PIN_PA21D_SERCOM3_PAD3 << 16) | MUX_PA21D_SERCOM3_PAD3)

+#define PORT_PA21D_SERCOM3_PAD3    (1u << 21)

+#define PIN_PA25C_SERCOM3_PAD3            25  /**< \brief SERCOM3 signal: PAD3 on PA25 mux C */

+#define MUX_PA25C_SERCOM3_PAD3             2

+#define PINMUX_PA25C_SERCOM3_PAD3  ((PIN_PA25C_SERCOM3_PAD3 << 16) | MUX_PA25C_SERCOM3_PAD3)

+#define PORT_PA25C_SERCOM3_PAD3    (1u << 25)

+/* ========== PORT definition for SERCOM4 peripheral ========== */

+#define PIN_PA12D_SERCOM4_PAD0            12  /**< \brief SERCOM4 signal: PAD0 on PA12 mux D */

+#define MUX_PA12D_SERCOM4_PAD0             3

+#define PINMUX_PA12D_SERCOM4_PAD0  ((PIN_PA12D_SERCOM4_PAD0 << 16) | MUX_PA12D_SERCOM4_PAD0)

+#define PORT_PA12D_SERCOM4_PAD0    (1u << 12)

+#define PIN_PB08D_SERCOM4_PAD0            40  /**< \brief SERCOM4 signal: PAD0 on PB08 mux D */

+#define MUX_PB08D_SERCOM4_PAD0             3

+#define PINMUX_PB08D_SERCOM4_PAD0  ((PIN_PB08D_SERCOM4_PAD0 << 16) | MUX_PB08D_SERCOM4_PAD0)

+#define PORT_PB08D_SERCOM4_PAD0    (1u <<  8)

+#define PIN_PB12C_SERCOM4_PAD0            44  /**< \brief SERCOM4 signal: PAD0 on PB12 mux C */

+#define MUX_PB12C_SERCOM4_PAD0             2

+#define PINMUX_PB12C_SERCOM4_PAD0  ((PIN_PB12C_SERCOM4_PAD0 << 16) | MUX_PB12C_SERCOM4_PAD0)

+#define PORT_PB12C_SERCOM4_PAD0    (1u << 12)

+#define PIN_PA13D_SERCOM4_PAD1            13  /**< \brief SERCOM4 signal: PAD1 on PA13 mux D */

+#define MUX_PA13D_SERCOM4_PAD1             3

+#define PINMUX_PA13D_SERCOM4_PAD1  ((PIN_PA13D_SERCOM4_PAD1 << 16) | MUX_PA13D_SERCOM4_PAD1)

+#define PORT_PA13D_SERCOM4_PAD1    (1u << 13)

+#define PIN_PB09D_SERCOM4_PAD1            41  /**< \brief SERCOM4 signal: PAD1 on PB09 mux D */

+#define MUX_PB09D_SERCOM4_PAD1             3

+#define PINMUX_PB09D_SERCOM4_PAD1  ((PIN_PB09D_SERCOM4_PAD1 << 16) | MUX_PB09D_SERCOM4_PAD1)

+#define PORT_PB09D_SERCOM4_PAD1    (1u <<  9)

+#define PIN_PB13C_SERCOM4_PAD1            45  /**< \brief SERCOM4 signal: PAD1 on PB13 mux C */

+#define MUX_PB13C_SERCOM4_PAD1             2

+#define PINMUX_PB13C_SERCOM4_PAD1  ((PIN_PB13C_SERCOM4_PAD1 << 16) | MUX_PB13C_SERCOM4_PAD1)

+#define PORT_PB13C_SERCOM4_PAD1    (1u << 13)

+#define PIN_PA14D_SERCOM4_PAD2            14  /**< \brief SERCOM4 signal: PAD2 on PA14 mux D */

+#define MUX_PA14D_SERCOM4_PAD2             3

+#define PINMUX_PA14D_SERCOM4_PAD2  ((PIN_PA14D_SERCOM4_PAD2 << 16) | MUX_PA14D_SERCOM4_PAD2)

+#define PORT_PA14D_SERCOM4_PAD2    (1u << 14)

+#define PIN_PB10D_SERCOM4_PAD2            42  /**< \brief SERCOM4 signal: PAD2 on PB10 mux D */

+#define MUX_PB10D_SERCOM4_PAD2             3

+#define PINMUX_PB10D_SERCOM4_PAD2  ((PIN_PB10D_SERCOM4_PAD2 << 16) | MUX_PB10D_SERCOM4_PAD2)

+#define PORT_PB10D_SERCOM4_PAD2    (1u << 10)

+#define PIN_PB14C_SERCOM4_PAD2            46  /**< \brief SERCOM4 signal: PAD2 on PB14 mux C */

+#define MUX_PB14C_SERCOM4_PAD2             2

+#define PINMUX_PB14C_SERCOM4_PAD2  ((PIN_PB14C_SERCOM4_PAD2 << 16) | MUX_PB14C_SERCOM4_PAD2)

+#define PORT_PB14C_SERCOM4_PAD2    (1u << 14)

+#define PIN_PA15D_SERCOM4_PAD3            15  /**< \brief SERCOM4 signal: PAD3 on PA15 mux D */

+#define MUX_PA15D_SERCOM4_PAD3             3

+#define PINMUX_PA15D_SERCOM4_PAD3  ((PIN_PA15D_SERCOM4_PAD3 << 16) | MUX_PA15D_SERCOM4_PAD3)

+#define PORT_PA15D_SERCOM4_PAD3    (1u << 15)

+#define PIN_PB11D_SERCOM4_PAD3            43  /**< \brief SERCOM4 signal: PAD3 on PB11 mux D */

+#define MUX_PB11D_SERCOM4_PAD3             3

+#define PINMUX_PB11D_SERCOM4_PAD3  ((PIN_PB11D_SERCOM4_PAD3 << 16) | MUX_PB11D_SERCOM4_PAD3)

+#define PORT_PB11D_SERCOM4_PAD3    (1u << 11)

+#define PIN_PB15C_SERCOM4_PAD3            47  /**< \brief SERCOM4 signal: PAD3 on PB15 mux C */

+#define MUX_PB15C_SERCOM4_PAD3             2

+#define PINMUX_PB15C_SERCOM4_PAD3  ((PIN_PB15C_SERCOM4_PAD3 << 16) | MUX_PB15C_SERCOM4_PAD3)

+#define PORT_PB15C_SERCOM4_PAD3    (1u << 15)

+/* ========== PORT definition for SERCOM5 peripheral ========== */

+#define PIN_PA22D_SERCOM5_PAD0            22  /**< \brief SERCOM5 signal: PAD0 on PA22 mux D */

+#define MUX_PA22D_SERCOM5_PAD0             3

+#define PINMUX_PA22D_SERCOM5_PAD0  ((PIN_PA22D_SERCOM5_PAD0 << 16) | MUX_PA22D_SERCOM5_PAD0)

+#define PORT_PA22D_SERCOM5_PAD0    (1u << 22)

+#define PIN_PB02D_SERCOM5_PAD0            34  /**< \brief SERCOM5 signal: PAD0 on PB02 mux D */

+#define MUX_PB02D_SERCOM5_PAD0             3

+#define PINMUX_PB02D_SERCOM5_PAD0  ((PIN_PB02D_SERCOM5_PAD0 << 16) | MUX_PB02D_SERCOM5_PAD0)

+#define PORT_PB02D_SERCOM5_PAD0    (1u <<  2)

+#define PIN_PB30D_SERCOM5_PAD0            62  /**< \brief SERCOM5 signal: PAD0 on PB30 mux D */

+#define MUX_PB30D_SERCOM5_PAD0             3

+#define PINMUX_PB30D_SERCOM5_PAD0  ((PIN_PB30D_SERCOM5_PAD0 << 16) | MUX_PB30D_SERCOM5_PAD0)

+#define PORT_PB30D_SERCOM5_PAD0    (1u << 30)

+#define PIN_PB16C_SERCOM5_PAD0            48  /**< \brief SERCOM5 signal: PAD0 on PB16 mux C */

+#define MUX_PB16C_SERCOM5_PAD0             2

+#define PINMUX_PB16C_SERCOM5_PAD0  ((PIN_PB16C_SERCOM5_PAD0 << 16) | MUX_PB16C_SERCOM5_PAD0)

+#define PORT_PB16C_SERCOM5_PAD0    (1u << 16)

+#define PIN_PA23D_SERCOM5_PAD1            23  /**< \brief SERCOM5 signal: PAD1 on PA23 mux D */

+#define MUX_PA23D_SERCOM5_PAD1             3

+#define PINMUX_PA23D_SERCOM5_PAD1  ((PIN_PA23D_SERCOM5_PAD1 << 16) | MUX_PA23D_SERCOM5_PAD1)

+#define PORT_PA23D_SERCOM5_PAD1    (1u << 23)

+#define PIN_PB03D_SERCOM5_PAD1            35  /**< \brief SERCOM5 signal: PAD1 on PB03 mux D */

+#define MUX_PB03D_SERCOM5_PAD1             3

+#define PINMUX_PB03D_SERCOM5_PAD1  ((PIN_PB03D_SERCOM5_PAD1 << 16) | MUX_PB03D_SERCOM5_PAD1)

+#define PORT_PB03D_SERCOM5_PAD1    (1u <<  3)

+#define PIN_PB31D_SERCOM5_PAD1            63  /**< \brief SERCOM5 signal: PAD1 on PB31 mux D */

+#define MUX_PB31D_SERCOM5_PAD1             3

+#define PINMUX_PB31D_SERCOM5_PAD1  ((PIN_PB31D_SERCOM5_PAD1 << 16) | MUX_PB31D_SERCOM5_PAD1)

+#define PORT_PB31D_SERCOM5_PAD1    (1u << 31)

+#define PIN_PB17C_SERCOM5_PAD1            49  /**< \brief SERCOM5 signal: PAD1 on PB17 mux C */

+#define MUX_PB17C_SERCOM5_PAD1             2

+#define PINMUX_PB17C_SERCOM5_PAD1  ((PIN_PB17C_SERCOM5_PAD1 << 16) | MUX_PB17C_SERCOM5_PAD1)

+#define PORT_PB17C_SERCOM5_PAD1    (1u << 17)

+#define PIN_PA24D_SERCOM5_PAD2            24  /**< \brief SERCOM5 signal: PAD2 on PA24 mux D */

+#define MUX_PA24D_SERCOM5_PAD2             3

+#define PINMUX_PA24D_SERCOM5_PAD2  ((PIN_PA24D_SERCOM5_PAD2 << 16) | MUX_PA24D_SERCOM5_PAD2)

+#define PORT_PA24D_SERCOM5_PAD2    (1u << 24)

+#define PIN_PB00D_SERCOM5_PAD2            32  /**< \brief SERCOM5 signal: PAD2 on PB00 mux D */

+#define MUX_PB00D_SERCOM5_PAD2             3

+#define PINMUX_PB00D_SERCOM5_PAD2  ((PIN_PB00D_SERCOM5_PAD2 << 16) | MUX_PB00D_SERCOM5_PAD2)

+#define PORT_PB00D_SERCOM5_PAD2    (1u <<  0)

+#define PIN_PB22D_SERCOM5_PAD2            54  /**< \brief SERCOM5 signal: PAD2 on PB22 mux D */

+#define MUX_PB22D_SERCOM5_PAD2             3

+#define PINMUX_PB22D_SERCOM5_PAD2  ((PIN_PB22D_SERCOM5_PAD2 << 16) | MUX_PB22D_SERCOM5_PAD2)

+#define PORT_PB22D_SERCOM5_PAD2    (1u << 22)

+#define PIN_PA20C_SERCOM5_PAD2            20  /**< \brief SERCOM5 signal: PAD2 on PA20 mux C */

+#define MUX_PA20C_SERCOM5_PAD2             2

+#define PINMUX_PA20C_SERCOM5_PAD2  ((PIN_PA20C_SERCOM5_PAD2 << 16) | MUX_PA20C_SERCOM5_PAD2)

+#define PORT_PA20C_SERCOM5_PAD2    (1u << 20)

+#define PIN_PA25D_SERCOM5_PAD3            25  /**< \brief SERCOM5 signal: PAD3 on PA25 mux D */

+#define MUX_PA25D_SERCOM5_PAD3             3

+#define PINMUX_PA25D_SERCOM5_PAD3  ((PIN_PA25D_SERCOM5_PAD3 << 16) | MUX_PA25D_SERCOM5_PAD3)

+#define PORT_PA25D_SERCOM5_PAD3    (1u << 25)

+#define PIN_PB01D_SERCOM5_PAD3            33  /**< \brief SERCOM5 signal: PAD3 on PB01 mux D */

+#define MUX_PB01D_SERCOM5_PAD3             3

+#define PINMUX_PB01D_SERCOM5_PAD3  ((PIN_PB01D_SERCOM5_PAD3 << 16) | MUX_PB01D_SERCOM5_PAD3)

+#define PORT_PB01D_SERCOM5_PAD3    (1u <<  1)

+#define PIN_PB23D_SERCOM5_PAD3            55  /**< \brief SERCOM5 signal: PAD3 on PB23 mux D */

+#define MUX_PB23D_SERCOM5_PAD3             3

+#define PINMUX_PB23D_SERCOM5_PAD3  ((PIN_PB23D_SERCOM5_PAD3 << 16) | MUX_PB23D_SERCOM5_PAD3)

+#define PORT_PB23D_SERCOM5_PAD3    (1u << 23)

+#define PIN_PA21C_SERCOM5_PAD3            21  /**< \brief SERCOM5 signal: PAD3 on PA21 mux C */

+#define MUX_PA21C_SERCOM5_PAD3             2

+#define PINMUX_PA21C_SERCOM5_PAD3  ((PIN_PA21C_SERCOM5_PAD3 << 16) | MUX_PA21C_SERCOM5_PAD3)

+#define PORT_PA21C_SERCOM5_PAD3    (1u << 21)

+/* ========== PORT definition for TC0 peripheral ========== */

+#define PIN_PA04F_TC0_WO0                  4  /**< \brief TC0 signal: WO0 on PA04 mux F */

+#define MUX_PA04F_TC0_WO0                  5

+#define PINMUX_PA04F_TC0_WO0       ((PIN_PA04F_TC0_WO0 << 16) | MUX_PA04F_TC0_WO0)

+#define PORT_PA04F_TC0_WO0         (1u <<  4)

+#define PIN_PB30F_TC0_WO0                 62  /**< \brief TC0 signal: WO0 on PB30 mux F */

+#define MUX_PB30F_TC0_WO0                  5

+#define PINMUX_PB30F_TC0_WO0       ((PIN_PB30F_TC0_WO0 << 16) | MUX_PB30F_TC0_WO0)

+#define PORT_PB30F_TC0_WO0         (1u << 30)

+#define PIN_PA08E_TC0_WO0                  8  /**< \brief TC0 signal: WO0 on PA08 mux E */

+#define MUX_PA08E_TC0_WO0                  4

+#define PINMUX_PA08E_TC0_WO0       ((PIN_PA08E_TC0_WO0 << 16) | MUX_PA08E_TC0_WO0)

+#define PORT_PA08E_TC0_WO0         (1u <<  8)

+#define PIN_PA05F_TC0_WO1                  5  /**< \brief TC0 signal: WO1 on PA05 mux F */

+#define MUX_PA05F_TC0_WO1                  5

+#define PINMUX_PA05F_TC0_WO1       ((PIN_PA05F_TC0_WO1 << 16) | MUX_PA05F_TC0_WO1)

+#define PORT_PA05F_TC0_WO1         (1u <<  5)

+#define PIN_PB31F_TC0_WO1                 63  /**< \brief TC0 signal: WO1 on PB31 mux F */

+#define MUX_PB31F_TC0_WO1                  5

+#define PINMUX_PB31F_TC0_WO1       ((PIN_PB31F_TC0_WO1 << 16) | MUX_PB31F_TC0_WO1)

+#define PORT_PB31F_TC0_WO1         (1u << 31)

+#define PIN_PA09E_TC0_WO1                  9  /**< \brief TC0 signal: WO1 on PA09 mux E */

+#define MUX_PA09E_TC0_WO1                  4

+#define PINMUX_PA09E_TC0_WO1       ((PIN_PA09E_TC0_WO1 << 16) | MUX_PA09E_TC0_WO1)

+#define PORT_PA09E_TC0_WO1         (1u <<  9)

+/* ========== PORT definition for TC1 peripheral ========== */

+#define PIN_PA06F_TC1_WO0                  6  /**< \brief TC1 signal: WO0 on PA06 mux F */

+#define MUX_PA06F_TC1_WO0                  5

+#define PINMUX_PA06F_TC1_WO0       ((PIN_PA06F_TC1_WO0 << 16) | MUX_PA06F_TC1_WO0)

+#define PORT_PA06F_TC1_WO0         (1u <<  6)

+#define PIN_PA30F_TC1_WO0                 30  /**< \brief TC1 signal: WO0 on PA30 mux F */

+#define MUX_PA30F_TC1_WO0                  5

+#define PINMUX_PA30F_TC1_WO0       ((PIN_PA30F_TC1_WO0 << 16) | MUX_PA30F_TC1_WO0)

+#define PORT_PA30F_TC1_WO0         (1u << 30)

+#define PIN_PA10E_TC1_WO0                 10  /**< \brief TC1 signal: WO0 on PA10 mux E */

+#define MUX_PA10E_TC1_WO0                  4

+#define PINMUX_PA10E_TC1_WO0       ((PIN_PA10E_TC1_WO0 << 16) | MUX_PA10E_TC1_WO0)

+#define PORT_PA10E_TC1_WO0         (1u << 10)

+#define PIN_PA07F_TC1_WO1                  7  /**< \brief TC1 signal: WO1 on PA07 mux F */

+#define MUX_PA07F_TC1_WO1                  5

+#define PINMUX_PA07F_TC1_WO1       ((PIN_PA07F_TC1_WO1 << 16) | MUX_PA07F_TC1_WO1)

+#define PORT_PA07F_TC1_WO1         (1u <<  7)

+#define PIN_PA31F_TC1_WO1                 31  /**< \brief TC1 signal: WO1 on PA31 mux F */

+#define MUX_PA31F_TC1_WO1                  5

+#define PINMUX_PA31F_TC1_WO1       ((PIN_PA31F_TC1_WO1 << 16) | MUX_PA31F_TC1_WO1)

+#define PORT_PA31F_TC1_WO1         (1u << 31)

+#define PIN_PA11E_TC1_WO1                 11  /**< \brief TC1 signal: WO1 on PA11 mux E */

+#define MUX_PA11E_TC1_WO1                  4

+#define PINMUX_PA11E_TC1_WO1       ((PIN_PA11E_TC1_WO1 << 16) | MUX_PA11E_TC1_WO1)

+#define PORT_PA11E_TC1_WO1         (1u << 11)

+/* ========== PORT definition for TC2 peripheral ========== */

+#define PIN_PA16F_TC2_WO0                 16  /**< \brief TC2 signal: WO0 on PA16 mux F */

+#define MUX_PA16F_TC2_WO0                  5

+#define PINMUX_PA16F_TC2_WO0       ((PIN_PA16F_TC2_WO0 << 16) | MUX_PA16F_TC2_WO0)

+#define PORT_PA16F_TC2_WO0         (1u << 16)

+#define PIN_PA12E_TC2_WO0                 12  /**< \brief TC2 signal: WO0 on PA12 mux E */

+#define MUX_PA12E_TC2_WO0                  4

+#define PINMUX_PA12E_TC2_WO0       ((PIN_PA12E_TC2_WO0 << 16) | MUX_PA12E_TC2_WO0)

+#define PORT_PA12E_TC2_WO0         (1u << 12)

+#define PIN_PA00F_TC2_WO0                  0  /**< \brief TC2 signal: WO0 on PA00 mux F */

+#define MUX_PA00F_TC2_WO0                  5

+#define PINMUX_PA00F_TC2_WO0       ((PIN_PA00F_TC2_WO0 << 16) | MUX_PA00F_TC2_WO0)

+#define PORT_PA00F_TC2_WO0         (1u <<  0)

+#define PIN_PA17F_TC2_WO1                 17  /**< \brief TC2 signal: WO1 on PA17 mux F */

+#define MUX_PA17F_TC2_WO1                  5

+#define PINMUX_PA17F_TC2_WO1       ((PIN_PA17F_TC2_WO1 << 16) | MUX_PA17F_TC2_WO1)

+#define PORT_PA17F_TC2_WO1         (1u << 17)

+#define PIN_PA13E_TC2_WO1                 13  /**< \brief TC2 signal: WO1 on PA13 mux E */

+#define MUX_PA13E_TC2_WO1                  4

+#define PINMUX_PA13E_TC2_WO1       ((PIN_PA13E_TC2_WO1 << 16) | MUX_PA13E_TC2_WO1)

+#define PORT_PA13E_TC2_WO1         (1u << 13)

+#define PIN_PA01F_TC2_WO1                  1  /**< \brief TC2 signal: WO1 on PA01 mux F */

+#define MUX_PA01F_TC2_WO1                  5

+#define PINMUX_PA01F_TC2_WO1       ((PIN_PA01F_TC2_WO1 << 16) | MUX_PA01F_TC2_WO1)

+#define PORT_PA01F_TC2_WO1         (1u <<  1)

+/* ========== PORT definition for TC3 peripheral ========== */

+#define PIN_PA18F_TC3_WO0                 18  /**< \brief TC3 signal: WO0 on PA18 mux F */

+#define MUX_PA18F_TC3_WO0                  5

+#define PINMUX_PA18F_TC3_WO0       ((PIN_PA18F_TC3_WO0 << 16) | MUX_PA18F_TC3_WO0)

+#define PORT_PA18F_TC3_WO0         (1u << 18)

+#define PIN_PA14E_TC3_WO0                 14  /**< \brief TC3 signal: WO0 on PA14 mux E */

+#define MUX_PA14E_TC3_WO0                  4

+#define PINMUX_PA14E_TC3_WO0       ((PIN_PA14E_TC3_WO0 << 16) | MUX_PA14E_TC3_WO0)

+#define PORT_PA14E_TC3_WO0         (1u << 14)

+#define PIN_PA19F_TC3_WO1                 19  /**< \brief TC3 signal: WO1 on PA19 mux F */

+#define MUX_PA19F_TC3_WO1                  5

+#define PINMUX_PA19F_TC3_WO1       ((PIN_PA19F_TC3_WO1 << 16) | MUX_PA19F_TC3_WO1)

+#define PORT_PA19F_TC3_WO1         (1u << 19)

+#define PIN_PA15E_TC3_WO1                 15  /**< \brief TC3 signal: WO1 on PA15 mux E */

+#define MUX_PA15E_TC3_WO1                  4

+#define PINMUX_PA15E_TC3_WO1       ((PIN_PA15E_TC3_WO1 << 16) | MUX_PA15E_TC3_WO1)

+#define PORT_PA15E_TC3_WO1         (1u << 15)

+/* ========== PORT definition for TC4 peripheral ========== */

+#define PIN_PA22F_TC4_WO0                 22  /**< \brief TC4 signal: WO0 on PA22 mux F */

+#define MUX_PA22F_TC4_WO0                  5

+#define PINMUX_PA22F_TC4_WO0       ((PIN_PA22F_TC4_WO0 << 16) | MUX_PA22F_TC4_WO0)

+#define PORT_PA22F_TC4_WO0         (1u << 22)

+#define PIN_PB08F_TC4_WO0                 40  /**< \brief TC4 signal: WO0 on PB08 mux F */

+#define MUX_PB08F_TC4_WO0                  5

+#define PINMUX_PB08F_TC4_WO0       ((PIN_PB08F_TC4_WO0 << 16) | MUX_PB08F_TC4_WO0)

+#define PORT_PB08F_TC4_WO0         (1u <<  8)

+#define PIN_PB12E_TC4_WO0                 44  /**< \brief TC4 signal: WO0 on PB12 mux E */

+#define MUX_PB12E_TC4_WO0                  4

+#define PINMUX_PB12E_TC4_WO0       ((PIN_PB12E_TC4_WO0 << 16) | MUX_PB12E_TC4_WO0)

+#define PORT_PB12E_TC4_WO0         (1u << 12)

+#define PIN_PA23F_TC4_WO1                 23  /**< \brief TC4 signal: WO1 on PA23 mux F */

+#define MUX_PA23F_TC4_WO1                  5

+#define PINMUX_PA23F_TC4_WO1       ((PIN_PA23F_TC4_WO1 << 16) | MUX_PA23F_TC4_WO1)

+#define PORT_PA23F_TC4_WO1         (1u << 23)

+#define PIN_PB09F_TC4_WO1                 41  /**< \brief TC4 signal: WO1 on PB09 mux F */

+#define MUX_PB09F_TC4_WO1                  5

+#define PINMUX_PB09F_TC4_WO1       ((PIN_PB09F_TC4_WO1 << 16) | MUX_PB09F_TC4_WO1)

+#define PORT_PB09F_TC4_WO1         (1u <<  9)

+#define PIN_PB13E_TC4_WO1                 45  /**< \brief TC4 signal: WO1 on PB13 mux E */

+#define MUX_PB13E_TC4_WO1                  4

+#define PINMUX_PB13E_TC4_WO1       ((PIN_PB13E_TC4_WO1 << 16) | MUX_PB13E_TC4_WO1)

+#define PORT_PB13E_TC4_WO1         (1u << 13)

+/* ========== PORT definition for TC5 peripheral ========== */

+#define PIN_PA24F_TC5_WO0                 24  /**< \brief TC5 signal: WO0 on PA24 mux F */

+#define MUX_PA24F_TC5_WO0                  5

+#define PINMUX_PA24F_TC5_WO0       ((PIN_PA24F_TC5_WO0 << 16) | MUX_PA24F_TC5_WO0)

+#define PORT_PA24F_TC5_WO0         (1u << 24)

+#define PIN_PB10F_TC5_WO0                 42  /**< \brief TC5 signal: WO0 on PB10 mux F */

+#define MUX_PB10F_TC5_WO0                  5

+#define PINMUX_PB10F_TC5_WO0       ((PIN_PB10F_TC5_WO0 << 16) | MUX_PB10F_TC5_WO0)

+#define PORT_PB10F_TC5_WO0         (1u << 10)

+#define PIN_PB14E_TC5_WO0                 46  /**< \brief TC5 signal: WO0 on PB14 mux E */

+#define MUX_PB14E_TC5_WO0                  4

+#define PINMUX_PB14E_TC5_WO0       ((PIN_PB14E_TC5_WO0 << 16) | MUX_PB14E_TC5_WO0)

+#define PORT_PB14E_TC5_WO0         (1u << 14)

+#define PIN_PA25F_TC5_WO1                 25  /**< \brief TC5 signal: WO1 on PA25 mux F */

+#define MUX_PA25F_TC5_WO1                  5

+#define PINMUX_PA25F_TC5_WO1       ((PIN_PA25F_TC5_WO1 << 16) | MUX_PA25F_TC5_WO1)

+#define PORT_PA25F_TC5_WO1         (1u << 25)

+#define PIN_PB11F_TC5_WO1                 43  /**< \brief TC5 signal: WO1 on PB11 mux F */

+#define MUX_PB11F_TC5_WO1                  5

+#define PINMUX_PB11F_TC5_WO1       ((PIN_PB11F_TC5_WO1 << 16) | MUX_PB11F_TC5_WO1)

+#define PORT_PB11F_TC5_WO1         (1u << 11)

+#define PIN_PB15E_TC5_WO1                 47  /**< \brief TC5 signal: WO1 on PB15 mux E */

+#define MUX_PB15E_TC5_WO1                  4

+#define PINMUX_PB15E_TC5_WO1       ((PIN_PB15E_TC5_WO1 << 16) | MUX_PB15E_TC5_WO1)

+#define PORT_PB15E_TC5_WO1         (1u << 15)

+/* ========== PORT definition for TC6 peripheral ========== */

+#define PIN_PB02F_TC6_WO0                 34  /**< \brief TC6 signal: WO0 on PB02 mux F */

+#define MUX_PB02F_TC6_WO0                  5

+#define PINMUX_PB02F_TC6_WO0       ((PIN_PB02F_TC6_WO0 << 16) | MUX_PB02F_TC6_WO0)

+#define PORT_PB02F_TC6_WO0         (1u <<  2)

+#define PIN_PB16E_TC6_WO0                 48  /**< \brief TC6 signal: WO0 on PB16 mux E */

+#define MUX_PB16E_TC6_WO0                  4

+#define PINMUX_PB16E_TC6_WO0       ((PIN_PB16E_TC6_WO0 << 16) | MUX_PB16E_TC6_WO0)

+#define PORT_PB16E_TC6_WO0         (1u << 16)

+#define PIN_PB03F_TC6_WO1                 35  /**< \brief TC6 signal: WO1 on PB03 mux F */

+#define MUX_PB03F_TC6_WO1                  5

+#define PINMUX_PB03F_TC6_WO1       ((PIN_PB03F_TC6_WO1 << 16) | MUX_PB03F_TC6_WO1)

+#define PORT_PB03F_TC6_WO1         (1u <<  3)

+#define PIN_PB17E_TC6_WO1                 49  /**< \brief TC6 signal: WO1 on PB17 mux E */

+#define MUX_PB17E_TC6_WO1                  4

+#define PINMUX_PB17E_TC6_WO1       ((PIN_PB17E_TC6_WO1 << 16) | MUX_PB17E_TC6_WO1)

+#define PORT_PB17E_TC6_WO1         (1u << 17)

+/* ========== PORT definition for TC7 peripheral ========== */

+#define PIN_PB00F_TC7_WO0                 32  /**< \brief TC7 signal: WO0 on PB00 mux F */

+#define MUX_PB00F_TC7_WO0                  5

+#define PINMUX_PB00F_TC7_WO0       ((PIN_PB00F_TC7_WO0 << 16) | MUX_PB00F_TC7_WO0)

+#define PORT_PB00F_TC7_WO0         (1u <<  0)

+#define PIN_PB22F_TC7_WO0                 54  /**< \brief TC7 signal: WO0 on PB22 mux F */

+#define MUX_PB22F_TC7_WO0                  5

+#define PINMUX_PB22F_TC7_WO0       ((PIN_PB22F_TC7_WO0 << 16) | MUX_PB22F_TC7_WO0)

+#define PORT_PB22F_TC7_WO0         (1u << 22)

+#define PIN_PA20E_TC7_WO0                 20  /**< \brief TC7 signal: WO0 on PA20 mux E */

+#define MUX_PA20E_TC7_WO0                  4

+#define PINMUX_PA20E_TC7_WO0       ((PIN_PA20E_TC7_WO0 << 16) | MUX_PA20E_TC7_WO0)

+#define PORT_PA20E_TC7_WO0         (1u << 20)

+#define PIN_PB01F_TC7_WO1                 33  /**< \brief TC7 signal: WO1 on PB01 mux F */

+#define MUX_PB01F_TC7_WO1                  5

+#define PINMUX_PB01F_TC7_WO1       ((PIN_PB01F_TC7_WO1 << 16) | MUX_PB01F_TC7_WO1)

+#define PORT_PB01F_TC7_WO1         (1u <<  1)

+#define PIN_PB23F_TC7_WO1                 55  /**< \brief TC7 signal: WO1 on PB23 mux F */

+#define MUX_PB23F_TC7_WO1                  5

+#define PINMUX_PB23F_TC7_WO1       ((PIN_PB23F_TC7_WO1 << 16) | MUX_PB23F_TC7_WO1)

+#define PORT_PB23F_TC7_WO1         (1u << 23)

+#define PIN_PA21E_TC7_WO1                 21  /**< \brief TC7 signal: WO1 on PA21 mux E */

+#define MUX_PA21E_TC7_WO1                  4

+#define PINMUX_PA21E_TC7_WO1       ((PIN_PA21E_TC7_WO1 << 16) | MUX_PA21E_TC7_WO1)

+#define PORT_PA21E_TC7_WO1         (1u << 21)

+/* ========== PORT definition for ADC peripheral ========== */

+#define PIN_PA02B_ADC_AIN0                 2  /**< \brief ADC signal: AIN0 on PA02 mux B */

+#define MUX_PA02B_ADC_AIN0                 1

+#define PINMUX_PA02B_ADC_AIN0      ((PIN_PA02B_ADC_AIN0 << 16) | MUX_PA02B_ADC_AIN0)

+#define PORT_PA02B_ADC_AIN0        (1u <<  2)

+#define PIN_PA03B_ADC_AIN1                 3  /**< \brief ADC signal: AIN1 on PA03 mux B */

+#define MUX_PA03B_ADC_AIN1                 1

+#define PINMUX_PA03B_ADC_AIN1      ((PIN_PA03B_ADC_AIN1 << 16) | MUX_PA03B_ADC_AIN1)

+#define PORT_PA03B_ADC_AIN1        (1u <<  3)

+#define PIN_PB08B_ADC_AIN2                40  /**< \brief ADC signal: AIN2 on PB08 mux B */

+#define MUX_PB08B_ADC_AIN2                 1

+#define PINMUX_PB08B_ADC_AIN2      ((PIN_PB08B_ADC_AIN2 << 16) | MUX_PB08B_ADC_AIN2)

+#define PORT_PB08B_ADC_AIN2        (1u <<  8)

+#define PIN_PB09B_ADC_AIN3                41  /**< \brief ADC signal: AIN3 on PB09 mux B */

+#define MUX_PB09B_ADC_AIN3                 1

+#define PINMUX_PB09B_ADC_AIN3      ((PIN_PB09B_ADC_AIN3 << 16) | MUX_PB09B_ADC_AIN3)

+#define PORT_PB09B_ADC_AIN3        (1u <<  9)

+#define PIN_PA04B_ADC_AIN4                 4  /**< \brief ADC signal: AIN4 on PA04 mux B */

+#define MUX_PA04B_ADC_AIN4                 1

+#define PINMUX_PA04B_ADC_AIN4      ((PIN_PA04B_ADC_AIN4 << 16) | MUX_PA04B_ADC_AIN4)

+#define PORT_PA04B_ADC_AIN4        (1u <<  4)

+#define PIN_PA05B_ADC_AIN5                 5  /**< \brief ADC signal: AIN5 on PA05 mux B */

+#define MUX_PA05B_ADC_AIN5                 1

+#define PINMUX_PA05B_ADC_AIN5      ((PIN_PA05B_ADC_AIN5 << 16) | MUX_PA05B_ADC_AIN5)

+#define PORT_PA05B_ADC_AIN5        (1u <<  5)

+#define PIN_PA06B_ADC_AIN6                 6  /**< \brief ADC signal: AIN6 on PA06 mux B */

+#define MUX_PA06B_ADC_AIN6                 1

+#define PINMUX_PA06B_ADC_AIN6      ((PIN_PA06B_ADC_AIN6 << 16) | MUX_PA06B_ADC_AIN6)

+#define PORT_PA06B_ADC_AIN6        (1u <<  6)

+#define PIN_PA07B_ADC_AIN7                 7  /**< \brief ADC signal: AIN7 on PA07 mux B */

+#define MUX_PA07B_ADC_AIN7                 1

+#define PINMUX_PA07B_ADC_AIN7      ((PIN_PA07B_ADC_AIN7 << 16) | MUX_PA07B_ADC_AIN7)

+#define PORT_PA07B_ADC_AIN7        (1u <<  7)

+#define PIN_PB00B_ADC_AIN8                32  /**< \brief ADC signal: AIN8 on PB00 mux B */

+#define MUX_PB00B_ADC_AIN8                 1

+#define PINMUX_PB00B_ADC_AIN8      ((PIN_PB00B_ADC_AIN8 << 16) | MUX_PB00B_ADC_AIN8)

+#define PORT_PB00B_ADC_AIN8        (1u <<  0)

+#define PIN_PB01B_ADC_AIN9                33  /**< \brief ADC signal: AIN9 on PB01 mux B */

+#define MUX_PB01B_ADC_AIN9                 1

+#define PINMUX_PB01B_ADC_AIN9      ((PIN_PB01B_ADC_AIN9 << 16) | MUX_PB01B_ADC_AIN9)

+#define PORT_PB01B_ADC_AIN9        (1u <<  1)

+#define PIN_PB02B_ADC_AIN10               34  /**< \brief ADC signal: AIN10 on PB02 mux B */

+#define MUX_PB02B_ADC_AIN10                1

+#define PINMUX_PB02B_ADC_AIN10     ((PIN_PB02B_ADC_AIN10 << 16) | MUX_PB02B_ADC_AIN10)

+#define PORT_PB02B_ADC_AIN10       (1u <<  2)

+#define PIN_PB03B_ADC_AIN11               35  /**< \brief ADC signal: AIN11 on PB03 mux B */

+#define MUX_PB03B_ADC_AIN11                1

+#define PINMUX_PB03B_ADC_AIN11     ((PIN_PB03B_ADC_AIN11 << 16) | MUX_PB03B_ADC_AIN11)

+#define PORT_PB03B_ADC_AIN11       (1u <<  3)

+#define PIN_PB04B_ADC_AIN12               36  /**< \brief ADC signal: AIN12 on PB04 mux B */

+#define MUX_PB04B_ADC_AIN12                1

+#define PINMUX_PB04B_ADC_AIN12     ((PIN_PB04B_ADC_AIN12 << 16) | MUX_PB04B_ADC_AIN12)

+#define PORT_PB04B_ADC_AIN12       (1u <<  4)

+#define PIN_PB05B_ADC_AIN13               37  /**< \brief ADC signal: AIN13 on PB05 mux B */

+#define MUX_PB05B_ADC_AIN13                1

+#define PINMUX_PB05B_ADC_AIN13     ((PIN_PB05B_ADC_AIN13 << 16) | MUX_PB05B_ADC_AIN13)

+#define PORT_PB05B_ADC_AIN13       (1u <<  5)

+#define PIN_PB06B_ADC_AIN14               38  /**< \brief ADC signal: AIN14 on PB06 mux B */

+#define MUX_PB06B_ADC_AIN14                1

+#define PINMUX_PB06B_ADC_AIN14     ((PIN_PB06B_ADC_AIN14 << 16) | MUX_PB06B_ADC_AIN14)

+#define PORT_PB06B_ADC_AIN14       (1u <<  6)

+#define PIN_PB07B_ADC_AIN15               39  /**< \brief ADC signal: AIN15 on PB07 mux B */

+#define MUX_PB07B_ADC_AIN15                1

+#define PINMUX_PB07B_ADC_AIN15     ((PIN_PB07B_ADC_AIN15 << 16) | MUX_PB07B_ADC_AIN15)

+#define PORT_PB07B_ADC_AIN15       (1u <<  7)

+#define PIN_PA08B_ADC_AIN16                8  /**< \brief ADC signal: AIN16 on PA08 mux B */

+#define MUX_PA08B_ADC_AIN16                1

+#define PINMUX_PA08B_ADC_AIN16     ((PIN_PA08B_ADC_AIN16 << 16) | MUX_PA08B_ADC_AIN16)

+#define PORT_PA08B_ADC_AIN16       (1u <<  8)

+#define PIN_PA09B_ADC_AIN17                9  /**< \brief ADC signal: AIN17 on PA09 mux B */

+#define MUX_PA09B_ADC_AIN17                1

+#define PINMUX_PA09B_ADC_AIN17     ((PIN_PA09B_ADC_AIN17 << 16) | MUX_PA09B_ADC_AIN17)

+#define PORT_PA09B_ADC_AIN17       (1u <<  9)

+#define PIN_PA10B_ADC_AIN18               10  /**< \brief ADC signal: AIN18 on PA10 mux B */

+#define MUX_PA10B_ADC_AIN18                1

+#define PINMUX_PA10B_ADC_AIN18     ((PIN_PA10B_ADC_AIN18 << 16) | MUX_PA10B_ADC_AIN18)

+#define PORT_PA10B_ADC_AIN18       (1u << 10)

+#define PIN_PA11B_ADC_AIN19               11  /**< \brief ADC signal: AIN19 on PA11 mux B */

+#define MUX_PA11B_ADC_AIN19                1

+#define PINMUX_PA11B_ADC_AIN19     ((PIN_PA11B_ADC_AIN19 << 16) | MUX_PA11B_ADC_AIN19)

+#define PORT_PA11B_ADC_AIN19       (1u << 11)

+#define PIN_PA04B_ADC_VREFP                4  /**< \brief ADC signal: VREFP on PA04 mux B */

+#define MUX_PA04B_ADC_VREFP                1

+#define PINMUX_PA04B_ADC_VREFP     ((PIN_PA04B_ADC_VREFP << 16) | MUX_PA04B_ADC_VREFP)

+#define PORT_PA04B_ADC_VREFP       (1u <<  4)

+/* ========== PORT definition for AC peripheral ========== */

+#define PIN_PA04B_AC_AIN0                  4  /**< \brief AC signal: AIN0 on PA04 mux B */

+#define MUX_PA04B_AC_AIN0                  1

+#define PINMUX_PA04B_AC_AIN0       ((PIN_PA04B_AC_AIN0 << 16) | MUX_PA04B_AC_AIN0)

+#define PORT_PA04B_AC_AIN0         (1u <<  4)

+#define PIN_PA05B_AC_AIN1                  5  /**< \brief AC signal: AIN1 on PA05 mux B */

+#define MUX_PA05B_AC_AIN1                  1

+#define PINMUX_PA05B_AC_AIN1       ((PIN_PA05B_AC_AIN1 << 16) | MUX_PA05B_AC_AIN1)

+#define PORT_PA05B_AC_AIN1         (1u <<  5)

+#define PIN_PA06B_AC_AIN2                  6  /**< \brief AC signal: AIN2 on PA06 mux B */

+#define MUX_PA06B_AC_AIN2                  1

+#define PINMUX_PA06B_AC_AIN2       ((PIN_PA06B_AC_AIN2 << 16) | MUX_PA06B_AC_AIN2)

+#define PORT_PA06B_AC_AIN2         (1u <<  6)

+#define PIN_PA07B_AC_AIN3                  7  /**< \brief AC signal: AIN3 on PA07 mux B */

+#define MUX_PA07B_AC_AIN3                  1

+#define PINMUX_PA07B_AC_AIN3       ((PIN_PA07B_AC_AIN3 << 16) | MUX_PA07B_AC_AIN3)

+#define PORT_PA07B_AC_AIN3         (1u <<  7)

+#define PIN_PA12H_AC_CMP0                 12  /**< \brief AC signal: CMP0 on PA12 mux H */

+#define MUX_PA12H_AC_CMP0                  7

+#define PINMUX_PA12H_AC_CMP0       ((PIN_PA12H_AC_CMP0 << 16) | MUX_PA12H_AC_CMP0)

+#define PORT_PA12H_AC_CMP0         (1u << 12)

+#define PIN_PA18H_AC_CMP0                 18  /**< \brief AC signal: CMP0 on PA18 mux H */

+#define MUX_PA18H_AC_CMP0                  7

+#define PINMUX_PA18H_AC_CMP0       ((PIN_PA18H_AC_CMP0 << 16) | MUX_PA18H_AC_CMP0)

+#define PORT_PA18H_AC_CMP0         (1u << 18)

+#define PIN_PA13H_AC_CMP1                 13  /**< \brief AC signal: CMP1 on PA13 mux H */

+#define MUX_PA13H_AC_CMP1                  7

+#define PINMUX_PA13H_AC_CMP1       ((PIN_PA13H_AC_CMP1 << 16) | MUX_PA13H_AC_CMP1)

+#define PORT_PA13H_AC_CMP1         (1u << 13)

+#define PIN_PA19H_AC_CMP1                 19  /**< \brief AC signal: CMP1 on PA19 mux H */

+#define MUX_PA19H_AC_CMP1                  7

+#define PINMUX_PA19H_AC_CMP1       ((PIN_PA19H_AC_CMP1 << 16) | MUX_PA19H_AC_CMP1)

+#define PORT_PA19H_AC_CMP1         (1u << 19)

+/* ========== PORT definition for DAC peripheral ========== */

+#define PIN_PA02B_DAC_VOUT                 2  /**< \brief DAC signal: VOUT on PA02 mux B */

+#define MUX_PA02B_DAC_VOUT                 1

+#define PINMUX_PA02B_DAC_VOUT      ((PIN_PA02B_DAC_VOUT << 16) | MUX_PA02B_DAC_VOUT)

+#define PORT_PA02B_DAC_VOUT        (1u <<  2)

+#define PIN_PA03B_DAC_VREFP                3  /**< \brief DAC signal: VREFP on PA03 mux B */

+#define MUX_PA03B_DAC_VREFP                1

+#define PINMUX_PA03B_DAC_VREFP     ((PIN_PA03B_DAC_VREFP << 16) | MUX_PA03B_DAC_VREFP)

+#define PORT_PA03B_DAC_VREFP       (1u <<  3)

+

+#endif /* _SAMD20J16_PIO_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20j17.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20j17.h
new file mode 100644
index 0000000..c8d2d15
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20j17.h
@@ -0,0 +1,1024 @@
+/**

+ * \file

+ *

+ * \brief Peripheral I/O description for SAMD20J17

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20J17_PIO_

+#define _SAMD20J17_PIO_

+

+#define PIN_PA00                           0  /**< \brief Pin Number for PA00 */

+#define PORT_PA00                  (1u <<  0) /**< \brief PORT Mask  for PA00 */

+#define PIN_PA01                           1  /**< \brief Pin Number for PA01 */

+#define PORT_PA01                  (1u <<  1) /**< \brief PORT Mask  for PA01 */

+#define PIN_PA02                           2  /**< \brief Pin Number for PA02 */

+#define PORT_PA02                  (1u <<  2) /**< \brief PORT Mask  for PA02 */

+#define PIN_PA03                           3  /**< \brief Pin Number for PA03 */

+#define PORT_PA03                  (1u <<  3) /**< \brief PORT Mask  for PA03 */

+#define PIN_PA04                           4  /**< \brief Pin Number for PA04 */

+#define PORT_PA04                  (1u <<  4) /**< \brief PORT Mask  for PA04 */

+#define PIN_PA05                           5  /**< \brief Pin Number for PA05 */

+#define PORT_PA05                  (1u <<  5) /**< \brief PORT Mask  for PA05 */

+#define PIN_PA06                           6  /**< \brief Pin Number for PA06 */

+#define PORT_PA06                  (1u <<  6) /**< \brief PORT Mask  for PA06 */

+#define PIN_PA07                           7  /**< \brief Pin Number for PA07 */

+#define PORT_PA07                  (1u <<  7) /**< \brief PORT Mask  for PA07 */

+#define PIN_PA08                           8  /**< \brief Pin Number for PA08 */

+#define PORT_PA08                  (1u <<  8) /**< \brief PORT Mask  for PA08 */

+#define PIN_PA09                           9  /**< \brief Pin Number for PA09 */

+#define PORT_PA09                  (1u <<  9) /**< \brief PORT Mask  for PA09 */

+#define PIN_PA10                          10  /**< \brief Pin Number for PA10 */

+#define PORT_PA10                  (1u << 10) /**< \brief PORT Mask  for PA10 */

+#define PIN_PA11                          11  /**< \brief Pin Number for PA11 */

+#define PORT_PA11                  (1u << 11) /**< \brief PORT Mask  for PA11 */

+#define PIN_PA12                          12  /**< \brief Pin Number for PA12 */

+#define PORT_PA12                  (1u << 12) /**< \brief PORT Mask  for PA12 */

+#define PIN_PA13                          13  /**< \brief Pin Number for PA13 */

+#define PORT_PA13                  (1u << 13) /**< \brief PORT Mask  for PA13 */

+#define PIN_PA14                          14  /**< \brief Pin Number for PA14 */

+#define PORT_PA14                  (1u << 14) /**< \brief PORT Mask  for PA14 */

+#define PIN_PA15                          15  /**< \brief Pin Number for PA15 */

+#define PORT_PA15                  (1u << 15) /**< \brief PORT Mask  for PA15 */

+#define PIN_PA16                          16  /**< \brief Pin Number for PA16 */

+#define PORT_PA16                  (1u << 16) /**< \brief PORT Mask  for PA16 */

+#define PIN_PA17                          17  /**< \brief Pin Number for PA17 */

+#define PORT_PA17                  (1u << 17) /**< \brief PORT Mask  for PA17 */

+#define PIN_PA18                          18  /**< \brief Pin Number for PA18 */

+#define PORT_PA18                  (1u << 18) /**< \brief PORT Mask  for PA18 */

+#define PIN_PA19                          19  /**< \brief Pin Number for PA19 */

+#define PORT_PA19                  (1u << 19) /**< \brief PORT Mask  for PA19 */

+#define PIN_PA20                          20  /**< \brief Pin Number for PA20 */

+#define PORT_PA20                  (1u << 20) /**< \brief PORT Mask  for PA20 */

+#define PIN_PA21                          21  /**< \brief Pin Number for PA21 */

+#define PORT_PA21                  (1u << 21) /**< \brief PORT Mask  for PA21 */

+#define PIN_PA22                          22  /**< \brief Pin Number for PA22 */

+#define PORT_PA22                  (1u << 22) /**< \brief PORT Mask  for PA22 */

+#define PIN_PA23                          23  /**< \brief Pin Number for PA23 */

+#define PORT_PA23                  (1u << 23) /**< \brief PORT Mask  for PA23 */

+#define PIN_PA24                          24  /**< \brief Pin Number for PA24 */

+#define PORT_PA24                  (1u << 24) /**< \brief PORT Mask  for PA24 */

+#define PIN_PA25                          25  /**< \brief Pin Number for PA25 */

+#define PORT_PA25                  (1u << 25) /**< \brief PORT Mask  for PA25 */

+#define PIN_PA27                          27  /**< \brief Pin Number for PA27 */

+#define PORT_PA27                  (1u << 27) /**< \brief PORT Mask  for PA27 */

+#define PIN_PA28                          28  /**< \brief Pin Number for PA28 */

+#define PORT_PA28                  (1u << 28) /**< \brief PORT Mask  for PA28 */

+#define PIN_PA30                          30  /**< \brief Pin Number for PA30 */

+#define PORT_PA30                  (1u << 30) /**< \brief PORT Mask  for PA30 */

+#define PIN_PA31                          31  /**< \brief Pin Number for PA31 */

+#define PORT_PA31                  (1u << 31) /**< \brief PORT Mask  for PA31 */

+#define PIN_PB00                          32  /**< \brief Pin Number for PB00 */

+#define PORT_PB00                  (1u <<  0) /**< \brief PORT Mask  for PB00 */

+#define PIN_PB01                          33  /**< \brief Pin Number for PB01 */

+#define PORT_PB01                  (1u <<  1) /**< \brief PORT Mask  for PB01 */

+#define PIN_PB02                          34  /**< \brief Pin Number for PB02 */

+#define PORT_PB02                  (1u <<  2) /**< \brief PORT Mask  for PB02 */

+#define PIN_PB03                          35  /**< \brief Pin Number for PB03 */

+#define PORT_PB03                  (1u <<  3) /**< \brief PORT Mask  for PB03 */

+#define PIN_PB04                          36  /**< \brief Pin Number for PB04 */

+#define PORT_PB04                  (1u <<  4) /**< \brief PORT Mask  for PB04 */

+#define PIN_PB05                          37  /**< \brief Pin Number for PB05 */

+#define PORT_PB05                  (1u <<  5) /**< \brief PORT Mask  for PB05 */

+#define PIN_PB06                          38  /**< \brief Pin Number for PB06 */

+#define PORT_PB06                  (1u <<  6) /**< \brief PORT Mask  for PB06 */

+#define PIN_PB07                          39  /**< \brief Pin Number for PB07 */

+#define PORT_PB07                  (1u <<  7) /**< \brief PORT Mask  for PB07 */

+#define PIN_PB08                          40  /**< \brief Pin Number for PB08 */

+#define PORT_PB08                  (1u <<  8) /**< \brief PORT Mask  for PB08 */

+#define PIN_PB09                          41  /**< \brief Pin Number for PB09 */

+#define PORT_PB09                  (1u <<  9) /**< \brief PORT Mask  for PB09 */

+#define PIN_PB10                          42  /**< \brief Pin Number for PB10 */

+#define PORT_PB10                  (1u << 10) /**< \brief PORT Mask  for PB10 */

+#define PIN_PB11                          43  /**< \brief Pin Number for PB11 */

+#define PORT_PB11                  (1u << 11) /**< \brief PORT Mask  for PB11 */

+#define PIN_PB12                          44  /**< \brief Pin Number for PB12 */

+#define PORT_PB12                  (1u << 12) /**< \brief PORT Mask  for PB12 */

+#define PIN_PB13                          45  /**< \brief Pin Number for PB13 */

+#define PORT_PB13                  (1u << 13) /**< \brief PORT Mask  for PB13 */

+#define PIN_PB14                          46  /**< \brief Pin Number for PB14 */

+#define PORT_PB14                  (1u << 14) /**< \brief PORT Mask  for PB14 */

+#define PIN_PB15                          47  /**< \brief Pin Number for PB15 */

+#define PORT_PB15                  (1u << 15) /**< \brief PORT Mask  for PB15 */

+#define PIN_PB16                          48  /**< \brief Pin Number for PB16 */

+#define PORT_PB16                  (1u << 16) /**< \brief PORT Mask  for PB16 */

+#define PIN_PB17                          49  /**< \brief Pin Number for PB17 */

+#define PORT_PB17                  (1u << 17) /**< \brief PORT Mask  for PB17 */

+#define PIN_PB22                          54  /**< \brief Pin Number for PB22 */

+#define PORT_PB22                  (1u << 22) /**< \brief PORT Mask  for PB22 */

+#define PIN_PB23                          55  /**< \brief Pin Number for PB23 */

+#define PORT_PB23                  (1u << 23) /**< \brief PORT Mask  for PB23 */

+#define PIN_PB30                          62  /**< \brief Pin Number for PB30 */

+#define PORT_PB30                  (1u << 30) /**< \brief PORT Mask  for PB30 */

+#define PIN_PB31                          63  /**< \brief Pin Number for PB31 */

+#define PORT_PB31                  (1u << 31) /**< \brief PORT Mask  for PB31 */

+/* ========== PORT definition for CORE peripheral ========== */

+#define PIN_PA30G_CORE_SWCLK              30  /**< \brief CORE signal: SWCLK on PA30 mux G */

+#define MUX_PA30G_CORE_SWCLK               6

+#define PINMUX_PA30G_CORE_SWCLK    ((PIN_PA30G_CORE_SWCLK << 16) | MUX_PA30G_CORE_SWCLK)

+#define PORT_PA30G_CORE_SWCLK      (1u << 30)

+/* ========== PORT definition for GCLK peripheral ========== */

+#define PIN_PB14H_GCLK_IO0                46  /**< \brief GCLK signal: IO0 on PB14 mux H */

+#define MUX_PB14H_GCLK_IO0                 7

+#define PINMUX_PB14H_GCLK_IO0      ((PIN_PB14H_GCLK_IO0 << 16) | MUX_PB14H_GCLK_IO0)

+#define PORT_PB14H_GCLK_IO0        (1u << 14)

+#define PIN_PB22H_GCLK_IO0                54  /**< \brief GCLK signal: IO0 on PB22 mux H */

+#define MUX_PB22H_GCLK_IO0                 7

+#define PINMUX_PB22H_GCLK_IO0      ((PIN_PB22H_GCLK_IO0 << 16) | MUX_PB22H_GCLK_IO0)

+#define PORT_PB22H_GCLK_IO0        (1u << 22)

+#define PIN_PA14H_GCLK_IO0                14  /**< \brief GCLK signal: IO0 on PA14 mux H */

+#define MUX_PA14H_GCLK_IO0                 7

+#define PINMUX_PA14H_GCLK_IO0      ((PIN_PA14H_GCLK_IO0 << 16) | MUX_PA14H_GCLK_IO0)

+#define PORT_PA14H_GCLK_IO0        (1u << 14)

+#define PIN_PA27H_GCLK_IO0                27  /**< \brief GCLK signal: IO0 on PA27 mux H */

+#define MUX_PA27H_GCLK_IO0                 7

+#define PINMUX_PA27H_GCLK_IO0      ((PIN_PA27H_GCLK_IO0 << 16) | MUX_PA27H_GCLK_IO0)

+#define PORT_PA27H_GCLK_IO0        (1u << 27)

+#define PIN_PA28H_GCLK_IO0                28  /**< \brief GCLK signal: IO0 on PA28 mux H */

+#define MUX_PA28H_GCLK_IO0                 7

+#define PINMUX_PA28H_GCLK_IO0      ((PIN_PA28H_GCLK_IO0 << 16) | MUX_PA28H_GCLK_IO0)

+#define PORT_PA28H_GCLK_IO0        (1u << 28)

+#define PIN_PA30H_GCLK_IO0                30  /**< \brief GCLK signal: IO0 on PA30 mux H */

+#define MUX_PA30H_GCLK_IO0                 7

+#define PINMUX_PA30H_GCLK_IO0      ((PIN_PA30H_GCLK_IO0 << 16) | MUX_PA30H_GCLK_IO0)

+#define PORT_PA30H_GCLK_IO0        (1u << 30)

+#define PIN_PB15H_GCLK_IO1                47  /**< \brief GCLK signal: IO1 on PB15 mux H */

+#define MUX_PB15H_GCLK_IO1                 7

+#define PINMUX_PB15H_GCLK_IO1      ((PIN_PB15H_GCLK_IO1 << 16) | MUX_PB15H_GCLK_IO1)

+#define PORT_PB15H_GCLK_IO1        (1u << 15)

+#define PIN_PB23H_GCLK_IO1                55  /**< \brief GCLK signal: IO1 on PB23 mux H */

+#define MUX_PB23H_GCLK_IO1                 7

+#define PINMUX_PB23H_GCLK_IO1      ((PIN_PB23H_GCLK_IO1 << 16) | MUX_PB23H_GCLK_IO1)

+#define PORT_PB23H_GCLK_IO1        (1u << 23)

+#define PIN_PA15H_GCLK_IO1                15  /**< \brief GCLK signal: IO1 on PA15 mux H */

+#define MUX_PA15H_GCLK_IO1                 7

+#define PINMUX_PA15H_GCLK_IO1      ((PIN_PA15H_GCLK_IO1 << 16) | MUX_PA15H_GCLK_IO1)

+#define PORT_PA15H_GCLK_IO1        (1u << 15)

+#define PIN_PB16H_GCLK_IO2                48  /**< \brief GCLK signal: IO2 on PB16 mux H */

+#define MUX_PB16H_GCLK_IO2                 7

+#define PINMUX_PB16H_GCLK_IO2      ((PIN_PB16H_GCLK_IO2 << 16) | MUX_PB16H_GCLK_IO2)

+#define PORT_PB16H_GCLK_IO2        (1u << 16)

+#define PIN_PA16H_GCLK_IO2                16  /**< \brief GCLK signal: IO2 on PA16 mux H */

+#define MUX_PA16H_GCLK_IO2                 7

+#define PINMUX_PA16H_GCLK_IO2      ((PIN_PA16H_GCLK_IO2 << 16) | MUX_PA16H_GCLK_IO2)

+#define PORT_PA16H_GCLK_IO2        (1u << 16)

+#define PIN_PA17H_GCLK_IO3                17  /**< \brief GCLK signal: IO3 on PA17 mux H */

+#define MUX_PA17H_GCLK_IO3                 7

+#define PINMUX_PA17H_GCLK_IO3      ((PIN_PA17H_GCLK_IO3 << 16) | MUX_PA17H_GCLK_IO3)

+#define PORT_PA17H_GCLK_IO3        (1u << 17)

+#define PIN_PB17H_GCLK_IO3                49  /**< \brief GCLK signal: IO3 on PB17 mux H */

+#define MUX_PB17H_GCLK_IO3                 7

+#define PINMUX_PB17H_GCLK_IO3      ((PIN_PB17H_GCLK_IO3 << 16) | MUX_PB17H_GCLK_IO3)

+#define PORT_PB17H_GCLK_IO3        (1u << 17)

+#define PIN_PA10H_GCLK_IO4                10  /**< \brief GCLK signal: IO4 on PA10 mux H */

+#define MUX_PA10H_GCLK_IO4                 7

+#define PINMUX_PA10H_GCLK_IO4      ((PIN_PA10H_GCLK_IO4 << 16) | MUX_PA10H_GCLK_IO4)

+#define PORT_PA10H_GCLK_IO4        (1u << 10)

+#define PIN_PA20H_GCLK_IO4                20  /**< \brief GCLK signal: IO4 on PA20 mux H */

+#define MUX_PA20H_GCLK_IO4                 7

+#define PINMUX_PA20H_GCLK_IO4      ((PIN_PA20H_GCLK_IO4 << 16) | MUX_PA20H_GCLK_IO4)

+#define PORT_PA20H_GCLK_IO4        (1u << 20)

+#define PIN_PB10H_GCLK_IO4                42  /**< \brief GCLK signal: IO4 on PB10 mux H */

+#define MUX_PB10H_GCLK_IO4                 7

+#define PINMUX_PB10H_GCLK_IO4      ((PIN_PB10H_GCLK_IO4 << 16) | MUX_PB10H_GCLK_IO4)

+#define PORT_PB10H_GCLK_IO4        (1u << 10)

+#define PIN_PA11H_GCLK_IO5                11  /**< \brief GCLK signal: IO5 on PA11 mux H */

+#define MUX_PA11H_GCLK_IO5                 7

+#define PINMUX_PA11H_GCLK_IO5      ((PIN_PA11H_GCLK_IO5 << 16) | MUX_PA11H_GCLK_IO5)

+#define PORT_PA11H_GCLK_IO5        (1u << 11)

+#define PIN_PA21H_GCLK_IO5                21  /**< \brief GCLK signal: IO5 on PA21 mux H */

+#define MUX_PA21H_GCLK_IO5                 7

+#define PINMUX_PA21H_GCLK_IO5      ((PIN_PA21H_GCLK_IO5 << 16) | MUX_PA21H_GCLK_IO5)

+#define PORT_PA21H_GCLK_IO5        (1u << 21)

+#define PIN_PB11H_GCLK_IO5                43  /**< \brief GCLK signal: IO5 on PB11 mux H */

+#define MUX_PB11H_GCLK_IO5                 7

+#define PINMUX_PB11H_GCLK_IO5      ((PIN_PB11H_GCLK_IO5 << 16) | MUX_PB11H_GCLK_IO5)

+#define PORT_PB11H_GCLK_IO5        (1u << 11)

+#define PIN_PA22H_GCLK_IO6                22  /**< \brief GCLK signal: IO6 on PA22 mux H */

+#define MUX_PA22H_GCLK_IO6                 7

+#define PINMUX_PA22H_GCLK_IO6      ((PIN_PA22H_GCLK_IO6 << 16) | MUX_PA22H_GCLK_IO6)

+#define PORT_PA22H_GCLK_IO6        (1u << 22)

+#define PIN_PB12H_GCLK_IO6                44  /**< \brief GCLK signal: IO6 on PB12 mux H */

+#define MUX_PB12H_GCLK_IO6                 7

+#define PINMUX_PB12H_GCLK_IO6      ((PIN_PB12H_GCLK_IO6 << 16) | MUX_PB12H_GCLK_IO6)

+#define PORT_PB12H_GCLK_IO6        (1u << 12)

+#define PIN_PA23H_GCLK_IO7                23  /**< \brief GCLK signal: IO7 on PA23 mux H */

+#define MUX_PA23H_GCLK_IO7                 7

+#define PINMUX_PA23H_GCLK_IO7      ((PIN_PA23H_GCLK_IO7 << 16) | MUX_PA23H_GCLK_IO7)

+#define PORT_PA23H_GCLK_IO7        (1u << 23)

+#define PIN_PB13H_GCLK_IO7                45  /**< \brief GCLK signal: IO7 on PB13 mux H */

+#define MUX_PB13H_GCLK_IO7                 7

+#define PINMUX_PB13H_GCLK_IO7      ((PIN_PB13H_GCLK_IO7 << 16) | MUX_PB13H_GCLK_IO7)

+#define PORT_PB13H_GCLK_IO7        (1u << 13)

+/* ========== PORT definition for EIC peripheral ========== */

+#define PIN_PA16A_EIC_EXTINT0             16  /**< \brief EIC signal: EXTINT0 on PA16 mux A */

+#define MUX_PA16A_EIC_EXTINT0              0

+#define PINMUX_PA16A_EIC_EXTINT0   ((PIN_PA16A_EIC_EXTINT0 << 16) | MUX_PA16A_EIC_EXTINT0)

+#define PORT_PA16A_EIC_EXTINT0     (1u << 16)

+#define PIN_PB00A_EIC_EXTINT0             32  /**< \brief EIC signal: EXTINT0 on PB00 mux A */

+#define MUX_PB00A_EIC_EXTINT0              0

+#define PINMUX_PB00A_EIC_EXTINT0   ((PIN_PB00A_EIC_EXTINT0 << 16) | MUX_PB00A_EIC_EXTINT0)

+#define PORT_PB00A_EIC_EXTINT0     (1u <<  0)

+#define PIN_PB16A_EIC_EXTINT0             48  /**< \brief EIC signal: EXTINT0 on PB16 mux A */

+#define MUX_PB16A_EIC_EXTINT0              0

+#define PINMUX_PB16A_EIC_EXTINT0   ((PIN_PB16A_EIC_EXTINT0 << 16) | MUX_PB16A_EIC_EXTINT0)

+#define PORT_PB16A_EIC_EXTINT0     (1u << 16)

+#define PIN_PA00A_EIC_EXTINT0              0  /**< \brief EIC signal: EXTINT0 on PA00 mux A */

+#define MUX_PA00A_EIC_EXTINT0              0

+#define PINMUX_PA00A_EIC_EXTINT0   ((PIN_PA00A_EIC_EXTINT0 << 16) | MUX_PA00A_EIC_EXTINT0)

+#define PORT_PA00A_EIC_EXTINT0     (1u <<  0)

+#define PIN_PA17A_EIC_EXTINT1             17  /**< \brief EIC signal: EXTINT1 on PA17 mux A */

+#define MUX_PA17A_EIC_EXTINT1              0

+#define PINMUX_PA17A_EIC_EXTINT1   ((PIN_PA17A_EIC_EXTINT1 << 16) | MUX_PA17A_EIC_EXTINT1)

+#define PORT_PA17A_EIC_EXTINT1     (1u << 17)

+#define PIN_PB01A_EIC_EXTINT1             33  /**< \brief EIC signal: EXTINT1 on PB01 mux A */

+#define MUX_PB01A_EIC_EXTINT1              0

+#define PINMUX_PB01A_EIC_EXTINT1   ((PIN_PB01A_EIC_EXTINT1 << 16) | MUX_PB01A_EIC_EXTINT1)

+#define PORT_PB01A_EIC_EXTINT1     (1u <<  1)

+#define PIN_PB17A_EIC_EXTINT1             49  /**< \brief EIC signal: EXTINT1 on PB17 mux A */

+#define MUX_PB17A_EIC_EXTINT1              0

+#define PINMUX_PB17A_EIC_EXTINT1   ((PIN_PB17A_EIC_EXTINT1 << 16) | MUX_PB17A_EIC_EXTINT1)

+#define PORT_PB17A_EIC_EXTINT1     (1u << 17)

+#define PIN_PA01A_EIC_EXTINT1              1  /**< \brief EIC signal: EXTINT1 on PA01 mux A */

+#define MUX_PA01A_EIC_EXTINT1              0

+#define PINMUX_PA01A_EIC_EXTINT1   ((PIN_PA01A_EIC_EXTINT1 << 16) | MUX_PA01A_EIC_EXTINT1)

+#define PORT_PA01A_EIC_EXTINT1     (1u <<  1)

+#define PIN_PA02A_EIC_EXTINT2              2  /**< \brief EIC signal: EXTINT2 on PA02 mux A */

+#define MUX_PA02A_EIC_EXTINT2              0

+#define PINMUX_PA02A_EIC_EXTINT2   ((PIN_PA02A_EIC_EXTINT2 << 16) | MUX_PA02A_EIC_EXTINT2)

+#define PORT_PA02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA18A_EIC_EXTINT2             18  /**< \brief EIC signal: EXTINT2 on PA18 mux A */

+#define MUX_PA18A_EIC_EXTINT2              0

+#define PINMUX_PA18A_EIC_EXTINT2   ((PIN_PA18A_EIC_EXTINT2 << 16) | MUX_PA18A_EIC_EXTINT2)

+#define PORT_PA18A_EIC_EXTINT2     (1u << 18)

+#define PIN_PB02A_EIC_EXTINT2             34  /**< \brief EIC signal: EXTINT2 on PB02 mux A */

+#define MUX_PB02A_EIC_EXTINT2              0

+#define PINMUX_PB02A_EIC_EXTINT2   ((PIN_PB02A_EIC_EXTINT2 << 16) | MUX_PB02A_EIC_EXTINT2)

+#define PORT_PB02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA03A_EIC_EXTINT3              3  /**< \brief EIC signal: EXTINT3 on PA03 mux A */

+#define MUX_PA03A_EIC_EXTINT3              0

+#define PINMUX_PA03A_EIC_EXTINT3   ((PIN_PA03A_EIC_EXTINT3 << 16) | MUX_PA03A_EIC_EXTINT3)

+#define PORT_PA03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA19A_EIC_EXTINT3             19  /**< \brief EIC signal: EXTINT3 on PA19 mux A */

+#define MUX_PA19A_EIC_EXTINT3              0

+#define PINMUX_PA19A_EIC_EXTINT3   ((PIN_PA19A_EIC_EXTINT3 << 16) | MUX_PA19A_EIC_EXTINT3)

+#define PORT_PA19A_EIC_EXTINT3     (1u << 19)

+#define PIN_PB03A_EIC_EXTINT3             35  /**< \brief EIC signal: EXTINT3 on PB03 mux A */

+#define MUX_PB03A_EIC_EXTINT3              0

+#define PINMUX_PB03A_EIC_EXTINT3   ((PIN_PB03A_EIC_EXTINT3 << 16) | MUX_PB03A_EIC_EXTINT3)

+#define PORT_PB03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA04A_EIC_EXTINT4              4  /**< \brief EIC signal: EXTINT4 on PA04 mux A */

+#define MUX_PA04A_EIC_EXTINT4              0

+#define PINMUX_PA04A_EIC_EXTINT4   ((PIN_PA04A_EIC_EXTINT4 << 16) | MUX_PA04A_EIC_EXTINT4)

+#define PORT_PA04A_EIC_EXTINT4     (1u <<  4)

+#define PIN_PA20A_EIC_EXTINT4             20  /**< \brief EIC signal: EXTINT4 on PA20 mux A */

+#define MUX_PA20A_EIC_EXTINT4              0

+#define PINMUX_PA20A_EIC_EXTINT4   ((PIN_PA20A_EIC_EXTINT4 << 16) | MUX_PA20A_EIC_EXTINT4)

+#define PORT_PA20A_EIC_EXTINT4     (1u << 20)

+#define PIN_PB04A_EIC_EXTINT4             36  /**< \brief EIC signal: EXTINT4 on PB04 mux A */

+#define MUX_PB04A_EIC_EXTINT4              0

+#define PINMUX_PB04A_EIC_EXTINT4   ((PIN_PB04A_EIC_EXTINT4 << 16) | MUX_PB04A_EIC_EXTINT4)

+#define PORT_PB04A_EIC_EXTINT4     (1u <<  4)

+#define PIN_PA05A_EIC_EXTINT5              5  /**< \brief EIC signal: EXTINT5 on PA05 mux A */

+#define MUX_PA05A_EIC_EXTINT5              0

+#define PINMUX_PA05A_EIC_EXTINT5   ((PIN_PA05A_EIC_EXTINT5 << 16) | MUX_PA05A_EIC_EXTINT5)

+#define PORT_PA05A_EIC_EXTINT5     (1u <<  5)

+#define PIN_PA21A_EIC_EXTINT5             21  /**< \brief EIC signal: EXTINT5 on PA21 mux A */

+#define MUX_PA21A_EIC_EXTINT5              0

+#define PINMUX_PA21A_EIC_EXTINT5   ((PIN_PA21A_EIC_EXTINT5 << 16) | MUX_PA21A_EIC_EXTINT5)

+#define PORT_PA21A_EIC_EXTINT5     (1u << 21)

+#define PIN_PB05A_EIC_EXTINT5             37  /**< \brief EIC signal: EXTINT5 on PB05 mux A */

+#define MUX_PB05A_EIC_EXTINT5              0

+#define PINMUX_PB05A_EIC_EXTINT5   ((PIN_PB05A_EIC_EXTINT5 << 16) | MUX_PB05A_EIC_EXTINT5)

+#define PORT_PB05A_EIC_EXTINT5     (1u <<  5)

+#define PIN_PA06A_EIC_EXTINT6              6  /**< \brief EIC signal: EXTINT6 on PA06 mux A */

+#define MUX_PA06A_EIC_EXTINT6              0

+#define PINMUX_PA06A_EIC_EXTINT6   ((PIN_PA06A_EIC_EXTINT6 << 16) | MUX_PA06A_EIC_EXTINT6)

+#define PORT_PA06A_EIC_EXTINT6     (1u <<  6)

+#define PIN_PA22A_EIC_EXTINT6             22  /**< \brief EIC signal: EXTINT6 on PA22 mux A */

+#define MUX_PA22A_EIC_EXTINT6              0

+#define PINMUX_PA22A_EIC_EXTINT6   ((PIN_PA22A_EIC_EXTINT6 << 16) | MUX_PA22A_EIC_EXTINT6)

+#define PORT_PA22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PB06A_EIC_EXTINT6             38  /**< \brief EIC signal: EXTINT6 on PB06 mux A */

+#define MUX_PB06A_EIC_EXTINT6              0

+#define PINMUX_PB06A_EIC_EXTINT6   ((PIN_PB06A_EIC_EXTINT6 << 16) | MUX_PB06A_EIC_EXTINT6)

+#define PORT_PB06A_EIC_EXTINT6     (1u <<  6)

+#define PIN_PB22A_EIC_EXTINT6             54  /**< \brief EIC signal: EXTINT6 on PB22 mux A */

+#define MUX_PB22A_EIC_EXTINT6              0

+#define PINMUX_PB22A_EIC_EXTINT6   ((PIN_PB22A_EIC_EXTINT6 << 16) | MUX_PB22A_EIC_EXTINT6)

+#define PORT_PB22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PA07A_EIC_EXTINT7              7  /**< \brief EIC signal: EXTINT7 on PA07 mux A */

+#define MUX_PA07A_EIC_EXTINT7              0

+#define PINMUX_PA07A_EIC_EXTINT7   ((PIN_PA07A_EIC_EXTINT7 << 16) | MUX_PA07A_EIC_EXTINT7)

+#define PORT_PA07A_EIC_EXTINT7     (1u <<  7)

+#define PIN_PA23A_EIC_EXTINT7             23  /**< \brief EIC signal: EXTINT7 on PA23 mux A */

+#define MUX_PA23A_EIC_EXTINT7              0

+#define PINMUX_PA23A_EIC_EXTINT7   ((PIN_PA23A_EIC_EXTINT7 << 16) | MUX_PA23A_EIC_EXTINT7)

+#define PORT_PA23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PB07A_EIC_EXTINT7             39  /**< \brief EIC signal: EXTINT7 on PB07 mux A */

+#define MUX_PB07A_EIC_EXTINT7              0

+#define PINMUX_PB07A_EIC_EXTINT7   ((PIN_PB07A_EIC_EXTINT7 << 16) | MUX_PB07A_EIC_EXTINT7)

+#define PORT_PB07A_EIC_EXTINT7     (1u <<  7)

+#define PIN_PB23A_EIC_EXTINT7             55  /**< \brief EIC signal: EXTINT7 on PB23 mux A */

+#define MUX_PB23A_EIC_EXTINT7              0

+#define PINMUX_PB23A_EIC_EXTINT7   ((PIN_PB23A_EIC_EXTINT7 << 16) | MUX_PB23A_EIC_EXTINT7)

+#define PORT_PB23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PA28A_EIC_EXTINT8             28  /**< \brief EIC signal: EXTINT8 on PA28 mux A */

+#define MUX_PA28A_EIC_EXTINT8              0

+#define PINMUX_PA28A_EIC_EXTINT8   ((PIN_PA28A_EIC_EXTINT8 << 16) | MUX_PA28A_EIC_EXTINT8)

+#define PORT_PA28A_EIC_EXTINT8     (1u << 28)

+#define PIN_PB08A_EIC_EXTINT8             40  /**< \brief EIC signal: EXTINT8 on PB08 mux A */

+#define MUX_PB08A_EIC_EXTINT8              0

+#define PINMUX_PB08A_EIC_EXTINT8   ((PIN_PB08A_EIC_EXTINT8 << 16) | MUX_PB08A_EIC_EXTINT8)

+#define PORT_PB08A_EIC_EXTINT8     (1u <<  8)

+#define PIN_PA09A_EIC_EXTINT9              9  /**< \brief EIC signal: EXTINT9 on PA09 mux A */

+#define MUX_PA09A_EIC_EXTINT9              0

+#define PINMUX_PA09A_EIC_EXTINT9   ((PIN_PA09A_EIC_EXTINT9 << 16) | MUX_PA09A_EIC_EXTINT9)

+#define PORT_PA09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PB09A_EIC_EXTINT9             41  /**< \brief EIC signal: EXTINT9 on PB09 mux A */

+#define MUX_PB09A_EIC_EXTINT9              0

+#define PINMUX_PB09A_EIC_EXTINT9   ((PIN_PB09A_EIC_EXTINT9 << 16) | MUX_PB09A_EIC_EXTINT9)

+#define PORT_PB09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PA10A_EIC_EXTINT10            10  /**< \brief EIC signal: EXTINT10 on PA10 mux A */

+#define MUX_PA10A_EIC_EXTINT10             0

+#define PINMUX_PA10A_EIC_EXTINT10  ((PIN_PA10A_EIC_EXTINT10 << 16) | MUX_PA10A_EIC_EXTINT10)

+#define PORT_PA10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA30A_EIC_EXTINT10            30  /**< \brief EIC signal: EXTINT10 on PA30 mux A */

+#define MUX_PA30A_EIC_EXTINT10             0

+#define PINMUX_PA30A_EIC_EXTINT10  ((PIN_PA30A_EIC_EXTINT10 << 16) | MUX_PA30A_EIC_EXTINT10)

+#define PORT_PA30A_EIC_EXTINT10    (1u << 30)

+#define PIN_PB10A_EIC_EXTINT10            42  /**< \brief EIC signal: EXTINT10 on PB10 mux A */

+#define MUX_PB10A_EIC_EXTINT10             0

+#define PINMUX_PB10A_EIC_EXTINT10  ((PIN_PB10A_EIC_EXTINT10 << 16) | MUX_PB10A_EIC_EXTINT10)

+#define PORT_PB10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA11A_EIC_EXTINT11            11  /**< \brief EIC signal: EXTINT11 on PA11 mux A */

+#define MUX_PA11A_EIC_EXTINT11             0

+#define PINMUX_PA11A_EIC_EXTINT11  ((PIN_PA11A_EIC_EXTINT11 << 16) | MUX_PA11A_EIC_EXTINT11)

+#define PORT_PA11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA31A_EIC_EXTINT11            31  /**< \brief EIC signal: EXTINT11 on PA31 mux A */

+#define MUX_PA31A_EIC_EXTINT11             0

+#define PINMUX_PA31A_EIC_EXTINT11  ((PIN_PA31A_EIC_EXTINT11 << 16) | MUX_PA31A_EIC_EXTINT11)

+#define PORT_PA31A_EIC_EXTINT11    (1u << 31)

+#define PIN_PB11A_EIC_EXTINT11            43  /**< \brief EIC signal: EXTINT11 on PB11 mux A */

+#define MUX_PB11A_EIC_EXTINT11             0

+#define PINMUX_PB11A_EIC_EXTINT11  ((PIN_PB11A_EIC_EXTINT11 << 16) | MUX_PB11A_EIC_EXTINT11)

+#define PORT_PB11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA12A_EIC_EXTINT12            12  /**< \brief EIC signal: EXTINT12 on PA12 mux A */

+#define MUX_PA12A_EIC_EXTINT12             0

+#define PINMUX_PA12A_EIC_EXTINT12  ((PIN_PA12A_EIC_EXTINT12 << 16) | MUX_PA12A_EIC_EXTINT12)

+#define PORT_PA12A_EIC_EXTINT12    (1u << 12)

+#define PIN_PA24A_EIC_EXTINT12            24  /**< \brief EIC signal: EXTINT12 on PA24 mux A */

+#define MUX_PA24A_EIC_EXTINT12             0

+#define PINMUX_PA24A_EIC_EXTINT12  ((PIN_PA24A_EIC_EXTINT12 << 16) | MUX_PA24A_EIC_EXTINT12)

+#define PORT_PA24A_EIC_EXTINT12    (1u << 24)

+#define PIN_PB12A_EIC_EXTINT12            44  /**< \brief EIC signal: EXTINT12 on PB12 mux A */

+#define MUX_PB12A_EIC_EXTINT12             0

+#define PINMUX_PB12A_EIC_EXTINT12  ((PIN_PB12A_EIC_EXTINT12 << 16) | MUX_PB12A_EIC_EXTINT12)

+#define PORT_PB12A_EIC_EXTINT12    (1u << 12)

+#define PIN_PA13A_EIC_EXTINT13            13  /**< \brief EIC signal: EXTINT13 on PA13 mux A */

+#define MUX_PA13A_EIC_EXTINT13             0

+#define PINMUX_PA13A_EIC_EXTINT13  ((PIN_PA13A_EIC_EXTINT13 << 16) | MUX_PA13A_EIC_EXTINT13)

+#define PORT_PA13A_EIC_EXTINT13    (1u << 13)

+#define PIN_PA25A_EIC_EXTINT13            25  /**< \brief EIC signal: EXTINT13 on PA25 mux A */

+#define MUX_PA25A_EIC_EXTINT13             0

+#define PINMUX_PA25A_EIC_EXTINT13  ((PIN_PA25A_EIC_EXTINT13 << 16) | MUX_PA25A_EIC_EXTINT13)

+#define PORT_PA25A_EIC_EXTINT13    (1u << 25)

+#define PIN_PB13A_EIC_EXTINT13            45  /**< \brief EIC signal: EXTINT13 on PB13 mux A */

+#define MUX_PB13A_EIC_EXTINT13             0

+#define PINMUX_PB13A_EIC_EXTINT13  ((PIN_PB13A_EIC_EXTINT13 << 16) | MUX_PB13A_EIC_EXTINT13)

+#define PORT_PB13A_EIC_EXTINT13    (1u << 13)

+#define PIN_PB14A_EIC_EXTINT14            46  /**< \brief EIC signal: EXTINT14 on PB14 mux A */

+#define MUX_PB14A_EIC_EXTINT14             0

+#define PINMUX_PB14A_EIC_EXTINT14  ((PIN_PB14A_EIC_EXTINT14 << 16) | MUX_PB14A_EIC_EXTINT14)

+#define PORT_PB14A_EIC_EXTINT14    (1u << 14)

+#define PIN_PB30A_EIC_EXTINT14            62  /**< \brief EIC signal: EXTINT14 on PB30 mux A */

+#define MUX_PB30A_EIC_EXTINT14             0

+#define PINMUX_PB30A_EIC_EXTINT14  ((PIN_PB30A_EIC_EXTINT14 << 16) | MUX_PB30A_EIC_EXTINT14)

+#define PORT_PB30A_EIC_EXTINT14    (1u << 30)

+#define PIN_PA14A_EIC_EXTINT14            14  /**< \brief EIC signal: EXTINT14 on PA14 mux A */

+#define MUX_PA14A_EIC_EXTINT14             0

+#define PINMUX_PA14A_EIC_EXTINT14  ((PIN_PA14A_EIC_EXTINT14 << 16) | MUX_PA14A_EIC_EXTINT14)

+#define PORT_PA14A_EIC_EXTINT14    (1u << 14)

+#define PIN_PA27A_EIC_EXTINT15            27  /**< \brief EIC signal: EXTINT15 on PA27 mux A */

+#define MUX_PA27A_EIC_EXTINT15             0

+#define PINMUX_PA27A_EIC_EXTINT15  ((PIN_PA27A_EIC_EXTINT15 << 16) | MUX_PA27A_EIC_EXTINT15)

+#define PORT_PA27A_EIC_EXTINT15    (1u << 27)

+#define PIN_PB15A_EIC_EXTINT15            47  /**< \brief EIC signal: EXTINT15 on PB15 mux A */

+#define MUX_PB15A_EIC_EXTINT15             0

+#define PINMUX_PB15A_EIC_EXTINT15  ((PIN_PB15A_EIC_EXTINT15 << 16) | MUX_PB15A_EIC_EXTINT15)

+#define PORT_PB15A_EIC_EXTINT15    (1u << 15)

+#define PIN_PB31A_EIC_EXTINT15            63  /**< \brief EIC signal: EXTINT15 on PB31 mux A */

+#define MUX_PB31A_EIC_EXTINT15             0

+#define PINMUX_PB31A_EIC_EXTINT15  ((PIN_PB31A_EIC_EXTINT15 << 16) | MUX_PB31A_EIC_EXTINT15)

+#define PORT_PB31A_EIC_EXTINT15    (1u << 31)

+#define PIN_PA15A_EIC_EXTINT15            15  /**< \brief EIC signal: EXTINT15 on PA15 mux A */

+#define MUX_PA15A_EIC_EXTINT15             0

+#define PINMUX_PA15A_EIC_EXTINT15  ((PIN_PA15A_EIC_EXTINT15 << 16) | MUX_PA15A_EIC_EXTINT15)

+#define PORT_PA15A_EIC_EXTINT15    (1u << 15)

+#define PIN_PA08A_EIC_NMI                  8  /**< \brief EIC signal: NMI on PA08 mux A */

+#define MUX_PA08A_EIC_NMI                  0

+#define PINMUX_PA08A_EIC_NMI       ((PIN_PA08A_EIC_NMI << 16) | MUX_PA08A_EIC_NMI)

+#define PORT_PA08A_EIC_NMI         (1u <<  8)

+/* ========== PORT definition for SERCOM0 peripheral ========== */

+#define PIN_PA04D_SERCOM0_PAD0             4  /**< \brief SERCOM0 signal: PAD0 on PA04 mux D */

+#define MUX_PA04D_SERCOM0_PAD0             3

+#define PINMUX_PA04D_SERCOM0_PAD0  ((PIN_PA04D_SERCOM0_PAD0 << 16) | MUX_PA04D_SERCOM0_PAD0)

+#define PORT_PA04D_SERCOM0_PAD0    (1u <<  4)

+#define PIN_PA08C_SERCOM0_PAD0             8  /**< \brief SERCOM0 signal: PAD0 on PA08 mux C */

+#define MUX_PA08C_SERCOM0_PAD0             2

+#define PINMUX_PA08C_SERCOM0_PAD0  ((PIN_PA08C_SERCOM0_PAD0 << 16) | MUX_PA08C_SERCOM0_PAD0)

+#define PORT_PA08C_SERCOM0_PAD0    (1u <<  8)

+#define PIN_PA05D_SERCOM0_PAD1             5  /**< \brief SERCOM0 signal: PAD1 on PA05 mux D */

+#define MUX_PA05D_SERCOM0_PAD1             3

+#define PINMUX_PA05D_SERCOM0_PAD1  ((PIN_PA05D_SERCOM0_PAD1 << 16) | MUX_PA05D_SERCOM0_PAD1)

+#define PORT_PA05D_SERCOM0_PAD1    (1u <<  5)

+#define PIN_PA09C_SERCOM0_PAD1             9  /**< \brief SERCOM0 signal: PAD1 on PA09 mux C */

+#define MUX_PA09C_SERCOM0_PAD1             2

+#define PINMUX_PA09C_SERCOM0_PAD1  ((PIN_PA09C_SERCOM0_PAD1 << 16) | MUX_PA09C_SERCOM0_PAD1)

+#define PORT_PA09C_SERCOM0_PAD1    (1u <<  9)

+#define PIN_PA06D_SERCOM0_PAD2             6  /**< \brief SERCOM0 signal: PAD2 on PA06 mux D */

+#define MUX_PA06D_SERCOM0_PAD2             3

+#define PINMUX_PA06D_SERCOM0_PAD2  ((PIN_PA06D_SERCOM0_PAD2 << 16) | MUX_PA06D_SERCOM0_PAD2)

+#define PORT_PA06D_SERCOM0_PAD2    (1u <<  6)

+#define PIN_PA10C_SERCOM0_PAD2            10  /**< \brief SERCOM0 signal: PAD2 on PA10 mux C */

+#define MUX_PA10C_SERCOM0_PAD2             2

+#define PINMUX_PA10C_SERCOM0_PAD2  ((PIN_PA10C_SERCOM0_PAD2 << 16) | MUX_PA10C_SERCOM0_PAD2)

+#define PORT_PA10C_SERCOM0_PAD2    (1u << 10)

+#define PIN_PA07D_SERCOM0_PAD3             7  /**< \brief SERCOM0 signal: PAD3 on PA07 mux D */

+#define MUX_PA07D_SERCOM0_PAD3             3

+#define PINMUX_PA07D_SERCOM0_PAD3  ((PIN_PA07D_SERCOM0_PAD3 << 16) | MUX_PA07D_SERCOM0_PAD3)

+#define PORT_PA07D_SERCOM0_PAD3    (1u <<  7)

+#define PIN_PA11C_SERCOM0_PAD3            11  /**< \brief SERCOM0 signal: PAD3 on PA11 mux C */

+#define MUX_PA11C_SERCOM0_PAD3             2

+#define PINMUX_PA11C_SERCOM0_PAD3  ((PIN_PA11C_SERCOM0_PAD3 << 16) | MUX_PA11C_SERCOM0_PAD3)

+#define PORT_PA11C_SERCOM0_PAD3    (1u << 11)

+/* ========== PORT definition for SERCOM1 peripheral ========== */

+#define PIN_PA16C_SERCOM1_PAD0            16  /**< \brief SERCOM1 signal: PAD0 on PA16 mux C */

+#define MUX_PA16C_SERCOM1_PAD0             2

+#define PINMUX_PA16C_SERCOM1_PAD0  ((PIN_PA16C_SERCOM1_PAD0 << 16) | MUX_PA16C_SERCOM1_PAD0)

+#define PORT_PA16C_SERCOM1_PAD0    (1u << 16)

+#define PIN_PA00D_SERCOM1_PAD0             0  /**< \brief SERCOM1 signal: PAD0 on PA00 mux D */

+#define MUX_PA00D_SERCOM1_PAD0             3

+#define PINMUX_PA00D_SERCOM1_PAD0  ((PIN_PA00D_SERCOM1_PAD0 << 16) | MUX_PA00D_SERCOM1_PAD0)

+#define PORT_PA00D_SERCOM1_PAD0    (1u <<  0)

+#define PIN_PA17C_SERCOM1_PAD1            17  /**< \brief SERCOM1 signal: PAD1 on PA17 mux C */

+#define MUX_PA17C_SERCOM1_PAD1             2

+#define PINMUX_PA17C_SERCOM1_PAD1  ((PIN_PA17C_SERCOM1_PAD1 << 16) | MUX_PA17C_SERCOM1_PAD1)

+#define PORT_PA17C_SERCOM1_PAD1    (1u << 17)

+#define PIN_PA01D_SERCOM1_PAD1             1  /**< \brief SERCOM1 signal: PAD1 on PA01 mux D */

+#define MUX_PA01D_SERCOM1_PAD1             3

+#define PINMUX_PA01D_SERCOM1_PAD1  ((PIN_PA01D_SERCOM1_PAD1 << 16) | MUX_PA01D_SERCOM1_PAD1)

+#define PORT_PA01D_SERCOM1_PAD1    (1u <<  1)

+#define PIN_PA30D_SERCOM1_PAD2            30  /**< \brief SERCOM1 signal: PAD2 on PA30 mux D */

+#define MUX_PA30D_SERCOM1_PAD2             3

+#define PINMUX_PA30D_SERCOM1_PAD2  ((PIN_PA30D_SERCOM1_PAD2 << 16) | MUX_PA30D_SERCOM1_PAD2)

+#define PORT_PA30D_SERCOM1_PAD2    (1u << 30)

+#define PIN_PA18C_SERCOM1_PAD2            18  /**< \brief SERCOM1 signal: PAD2 on PA18 mux C */

+#define MUX_PA18C_SERCOM1_PAD2             2

+#define PINMUX_PA18C_SERCOM1_PAD2  ((PIN_PA18C_SERCOM1_PAD2 << 16) | MUX_PA18C_SERCOM1_PAD2)

+#define PORT_PA18C_SERCOM1_PAD2    (1u << 18)

+#define PIN_PA31D_SERCOM1_PAD3            31  /**< \brief SERCOM1 signal: PAD3 on PA31 mux D */

+#define MUX_PA31D_SERCOM1_PAD3             3

+#define PINMUX_PA31D_SERCOM1_PAD3  ((PIN_PA31D_SERCOM1_PAD3 << 16) | MUX_PA31D_SERCOM1_PAD3)

+#define PORT_PA31D_SERCOM1_PAD3    (1u << 31)

+#define PIN_PA19C_SERCOM1_PAD3            19  /**< \brief SERCOM1 signal: PAD3 on PA19 mux C */

+#define MUX_PA19C_SERCOM1_PAD3             2

+#define PINMUX_PA19C_SERCOM1_PAD3  ((PIN_PA19C_SERCOM1_PAD3 << 16) | MUX_PA19C_SERCOM1_PAD3)

+#define PORT_PA19C_SERCOM1_PAD3    (1u << 19)

+/* ========== PORT definition for SERCOM2 peripheral ========== */

+#define PIN_PA08D_SERCOM2_PAD0             8  /**< \brief SERCOM2 signal: PAD0 on PA08 mux D */

+#define MUX_PA08D_SERCOM2_PAD0             3

+#define PINMUX_PA08D_SERCOM2_PAD0  ((PIN_PA08D_SERCOM2_PAD0 << 16) | MUX_PA08D_SERCOM2_PAD0)

+#define PORT_PA08D_SERCOM2_PAD0    (1u <<  8)

+#define PIN_PA12C_SERCOM2_PAD0            12  /**< \brief SERCOM2 signal: PAD0 on PA12 mux C */

+#define MUX_PA12C_SERCOM2_PAD0             2

+#define PINMUX_PA12C_SERCOM2_PAD0  ((PIN_PA12C_SERCOM2_PAD0 << 16) | MUX_PA12C_SERCOM2_PAD0)

+#define PORT_PA12C_SERCOM2_PAD0    (1u << 12)

+#define PIN_PA09D_SERCOM2_PAD1             9  /**< \brief SERCOM2 signal: PAD1 on PA09 mux D */

+#define MUX_PA09D_SERCOM2_PAD1             3

+#define PINMUX_PA09D_SERCOM2_PAD1  ((PIN_PA09D_SERCOM2_PAD1 << 16) | MUX_PA09D_SERCOM2_PAD1)

+#define PORT_PA09D_SERCOM2_PAD1    (1u <<  9)

+#define PIN_PA13C_SERCOM2_PAD1            13  /**< \brief SERCOM2 signal: PAD1 on PA13 mux C */

+#define MUX_PA13C_SERCOM2_PAD1             2

+#define PINMUX_PA13C_SERCOM2_PAD1  ((PIN_PA13C_SERCOM2_PAD1 << 16) | MUX_PA13C_SERCOM2_PAD1)

+#define PORT_PA13C_SERCOM2_PAD1    (1u << 13)

+#define PIN_PA10D_SERCOM2_PAD2            10  /**< \brief SERCOM2 signal: PAD2 on PA10 mux D */

+#define MUX_PA10D_SERCOM2_PAD2             3

+#define PINMUX_PA10D_SERCOM2_PAD2  ((PIN_PA10D_SERCOM2_PAD2 << 16) | MUX_PA10D_SERCOM2_PAD2)

+#define PORT_PA10D_SERCOM2_PAD2    (1u << 10)

+#define PIN_PA14C_SERCOM2_PAD2            14  /**< \brief SERCOM2 signal: PAD2 on PA14 mux C */

+#define MUX_PA14C_SERCOM2_PAD2             2

+#define PINMUX_PA14C_SERCOM2_PAD2  ((PIN_PA14C_SERCOM2_PAD2 << 16) | MUX_PA14C_SERCOM2_PAD2)

+#define PORT_PA14C_SERCOM2_PAD2    (1u << 14)

+#define PIN_PA11D_SERCOM2_PAD3            11  /**< \brief SERCOM2 signal: PAD3 on PA11 mux D */

+#define MUX_PA11D_SERCOM2_PAD3             3

+#define PINMUX_PA11D_SERCOM2_PAD3  ((PIN_PA11D_SERCOM2_PAD3 << 16) | MUX_PA11D_SERCOM2_PAD3)

+#define PORT_PA11D_SERCOM2_PAD3    (1u << 11)

+#define PIN_PA15C_SERCOM2_PAD3            15  /**< \brief SERCOM2 signal: PAD3 on PA15 mux C */

+#define MUX_PA15C_SERCOM2_PAD3             2

+#define PINMUX_PA15C_SERCOM2_PAD3  ((PIN_PA15C_SERCOM2_PAD3 << 16) | MUX_PA15C_SERCOM2_PAD3)

+#define PORT_PA15C_SERCOM2_PAD3    (1u << 15)

+/* ========== PORT definition for SERCOM3 peripheral ========== */

+#define PIN_PA16D_SERCOM3_PAD0            16  /**< \brief SERCOM3 signal: PAD0 on PA16 mux D */

+#define MUX_PA16D_SERCOM3_PAD0             3

+#define PINMUX_PA16D_SERCOM3_PAD0  ((PIN_PA16D_SERCOM3_PAD0 << 16) | MUX_PA16D_SERCOM3_PAD0)

+#define PORT_PA16D_SERCOM3_PAD0    (1u << 16)

+#define PIN_PA22C_SERCOM3_PAD0            22  /**< \brief SERCOM3 signal: PAD0 on PA22 mux C */

+#define MUX_PA22C_SERCOM3_PAD0             2

+#define PINMUX_PA22C_SERCOM3_PAD0  ((PIN_PA22C_SERCOM3_PAD0 << 16) | MUX_PA22C_SERCOM3_PAD0)

+#define PORT_PA22C_SERCOM3_PAD0    (1u << 22)

+#define PIN_PA17D_SERCOM3_PAD1            17  /**< \brief SERCOM3 signal: PAD1 on PA17 mux D */

+#define MUX_PA17D_SERCOM3_PAD1             3

+#define PINMUX_PA17D_SERCOM3_PAD1  ((PIN_PA17D_SERCOM3_PAD1 << 16) | MUX_PA17D_SERCOM3_PAD1)

+#define PORT_PA17D_SERCOM3_PAD1    (1u << 17)

+#define PIN_PA23C_SERCOM3_PAD1            23  /**< \brief SERCOM3 signal: PAD1 on PA23 mux C */

+#define MUX_PA23C_SERCOM3_PAD1             2

+#define PINMUX_PA23C_SERCOM3_PAD1  ((PIN_PA23C_SERCOM3_PAD1 << 16) | MUX_PA23C_SERCOM3_PAD1)

+#define PORT_PA23C_SERCOM3_PAD1    (1u << 23)

+#define PIN_PA18D_SERCOM3_PAD2            18  /**< \brief SERCOM3 signal: PAD2 on PA18 mux D */

+#define MUX_PA18D_SERCOM3_PAD2             3

+#define PINMUX_PA18D_SERCOM3_PAD2  ((PIN_PA18D_SERCOM3_PAD2 << 16) | MUX_PA18D_SERCOM3_PAD2)

+#define PORT_PA18D_SERCOM3_PAD2    (1u << 18)

+#define PIN_PA20D_SERCOM3_PAD2            20  /**< \brief SERCOM3 signal: PAD2 on PA20 mux D */

+#define MUX_PA20D_SERCOM3_PAD2             3

+#define PINMUX_PA20D_SERCOM3_PAD2  ((PIN_PA20D_SERCOM3_PAD2 << 16) | MUX_PA20D_SERCOM3_PAD2)

+#define PORT_PA20D_SERCOM3_PAD2    (1u << 20)

+#define PIN_PA24C_SERCOM3_PAD2            24  /**< \brief SERCOM3 signal: PAD2 on PA24 mux C */

+#define MUX_PA24C_SERCOM3_PAD2             2

+#define PINMUX_PA24C_SERCOM3_PAD2  ((PIN_PA24C_SERCOM3_PAD2 << 16) | MUX_PA24C_SERCOM3_PAD2)

+#define PORT_PA24C_SERCOM3_PAD2    (1u << 24)

+#define PIN_PA19D_SERCOM3_PAD3            19  /**< \brief SERCOM3 signal: PAD3 on PA19 mux D */

+#define MUX_PA19D_SERCOM3_PAD3             3

+#define PINMUX_PA19D_SERCOM3_PAD3  ((PIN_PA19D_SERCOM3_PAD3 << 16) | MUX_PA19D_SERCOM3_PAD3)

+#define PORT_PA19D_SERCOM3_PAD3    (1u << 19)

+#define PIN_PA21D_SERCOM3_PAD3            21  /**< \brief SERCOM3 signal: PAD3 on PA21 mux D */

+#define MUX_PA21D_SERCOM3_PAD3             3

+#define PINMUX_PA21D_SERCOM3_PAD3  ((PIN_PA21D_SERCOM3_PAD3 << 16) | MUX_PA21D_SERCOM3_PAD3)

+#define PORT_PA21D_SERCOM3_PAD3    (1u << 21)

+#define PIN_PA25C_SERCOM3_PAD3            25  /**< \brief SERCOM3 signal: PAD3 on PA25 mux C */

+#define MUX_PA25C_SERCOM3_PAD3             2

+#define PINMUX_PA25C_SERCOM3_PAD3  ((PIN_PA25C_SERCOM3_PAD3 << 16) | MUX_PA25C_SERCOM3_PAD3)

+#define PORT_PA25C_SERCOM3_PAD3    (1u << 25)

+/* ========== PORT definition for SERCOM4 peripheral ========== */

+#define PIN_PA12D_SERCOM4_PAD0            12  /**< \brief SERCOM4 signal: PAD0 on PA12 mux D */

+#define MUX_PA12D_SERCOM4_PAD0             3

+#define PINMUX_PA12D_SERCOM4_PAD0  ((PIN_PA12D_SERCOM4_PAD0 << 16) | MUX_PA12D_SERCOM4_PAD0)

+#define PORT_PA12D_SERCOM4_PAD0    (1u << 12)

+#define PIN_PB08D_SERCOM4_PAD0            40  /**< \brief SERCOM4 signal: PAD0 on PB08 mux D */

+#define MUX_PB08D_SERCOM4_PAD0             3

+#define PINMUX_PB08D_SERCOM4_PAD0  ((PIN_PB08D_SERCOM4_PAD0 << 16) | MUX_PB08D_SERCOM4_PAD0)

+#define PORT_PB08D_SERCOM4_PAD0    (1u <<  8)

+#define PIN_PB12C_SERCOM4_PAD0            44  /**< \brief SERCOM4 signal: PAD0 on PB12 mux C */

+#define MUX_PB12C_SERCOM4_PAD0             2

+#define PINMUX_PB12C_SERCOM4_PAD0  ((PIN_PB12C_SERCOM4_PAD0 << 16) | MUX_PB12C_SERCOM4_PAD0)

+#define PORT_PB12C_SERCOM4_PAD0    (1u << 12)

+#define PIN_PA13D_SERCOM4_PAD1            13  /**< \brief SERCOM4 signal: PAD1 on PA13 mux D */

+#define MUX_PA13D_SERCOM4_PAD1             3

+#define PINMUX_PA13D_SERCOM4_PAD1  ((PIN_PA13D_SERCOM4_PAD1 << 16) | MUX_PA13D_SERCOM4_PAD1)

+#define PORT_PA13D_SERCOM4_PAD1    (1u << 13)

+#define PIN_PB09D_SERCOM4_PAD1            41  /**< \brief SERCOM4 signal: PAD1 on PB09 mux D */

+#define MUX_PB09D_SERCOM4_PAD1             3

+#define PINMUX_PB09D_SERCOM4_PAD1  ((PIN_PB09D_SERCOM4_PAD1 << 16) | MUX_PB09D_SERCOM4_PAD1)

+#define PORT_PB09D_SERCOM4_PAD1    (1u <<  9)

+#define PIN_PB13C_SERCOM4_PAD1            45  /**< \brief SERCOM4 signal: PAD1 on PB13 mux C */

+#define MUX_PB13C_SERCOM4_PAD1             2

+#define PINMUX_PB13C_SERCOM4_PAD1  ((PIN_PB13C_SERCOM4_PAD1 << 16) | MUX_PB13C_SERCOM4_PAD1)

+#define PORT_PB13C_SERCOM4_PAD1    (1u << 13)

+#define PIN_PA14D_SERCOM4_PAD2            14  /**< \brief SERCOM4 signal: PAD2 on PA14 mux D */

+#define MUX_PA14D_SERCOM4_PAD2             3

+#define PINMUX_PA14D_SERCOM4_PAD2  ((PIN_PA14D_SERCOM4_PAD2 << 16) | MUX_PA14D_SERCOM4_PAD2)

+#define PORT_PA14D_SERCOM4_PAD2    (1u << 14)

+#define PIN_PB10D_SERCOM4_PAD2            42  /**< \brief SERCOM4 signal: PAD2 on PB10 mux D */

+#define MUX_PB10D_SERCOM4_PAD2             3

+#define PINMUX_PB10D_SERCOM4_PAD2  ((PIN_PB10D_SERCOM4_PAD2 << 16) | MUX_PB10D_SERCOM4_PAD2)

+#define PORT_PB10D_SERCOM4_PAD2    (1u << 10)

+#define PIN_PB14C_SERCOM4_PAD2            46  /**< \brief SERCOM4 signal: PAD2 on PB14 mux C */

+#define MUX_PB14C_SERCOM4_PAD2             2

+#define PINMUX_PB14C_SERCOM4_PAD2  ((PIN_PB14C_SERCOM4_PAD2 << 16) | MUX_PB14C_SERCOM4_PAD2)

+#define PORT_PB14C_SERCOM4_PAD2    (1u << 14)

+#define PIN_PA15D_SERCOM4_PAD3            15  /**< \brief SERCOM4 signal: PAD3 on PA15 mux D */

+#define MUX_PA15D_SERCOM4_PAD3             3

+#define PINMUX_PA15D_SERCOM4_PAD3  ((PIN_PA15D_SERCOM4_PAD3 << 16) | MUX_PA15D_SERCOM4_PAD3)

+#define PORT_PA15D_SERCOM4_PAD3    (1u << 15)

+#define PIN_PB11D_SERCOM4_PAD3            43  /**< \brief SERCOM4 signal: PAD3 on PB11 mux D */

+#define MUX_PB11D_SERCOM4_PAD3             3

+#define PINMUX_PB11D_SERCOM4_PAD3  ((PIN_PB11D_SERCOM4_PAD3 << 16) | MUX_PB11D_SERCOM4_PAD3)

+#define PORT_PB11D_SERCOM4_PAD3    (1u << 11)

+#define PIN_PB15C_SERCOM4_PAD3            47  /**< \brief SERCOM4 signal: PAD3 on PB15 mux C */

+#define MUX_PB15C_SERCOM4_PAD3             2

+#define PINMUX_PB15C_SERCOM4_PAD3  ((PIN_PB15C_SERCOM4_PAD3 << 16) | MUX_PB15C_SERCOM4_PAD3)

+#define PORT_PB15C_SERCOM4_PAD3    (1u << 15)

+/* ========== PORT definition for SERCOM5 peripheral ========== */

+#define PIN_PA22D_SERCOM5_PAD0            22  /**< \brief SERCOM5 signal: PAD0 on PA22 mux D */

+#define MUX_PA22D_SERCOM5_PAD0             3

+#define PINMUX_PA22D_SERCOM5_PAD0  ((PIN_PA22D_SERCOM5_PAD0 << 16) | MUX_PA22D_SERCOM5_PAD0)

+#define PORT_PA22D_SERCOM5_PAD0    (1u << 22)

+#define PIN_PB02D_SERCOM5_PAD0            34  /**< \brief SERCOM5 signal: PAD0 on PB02 mux D */

+#define MUX_PB02D_SERCOM5_PAD0             3

+#define PINMUX_PB02D_SERCOM5_PAD0  ((PIN_PB02D_SERCOM5_PAD0 << 16) | MUX_PB02D_SERCOM5_PAD0)

+#define PORT_PB02D_SERCOM5_PAD0    (1u <<  2)

+#define PIN_PB30D_SERCOM5_PAD0            62  /**< \brief SERCOM5 signal: PAD0 on PB30 mux D */

+#define MUX_PB30D_SERCOM5_PAD0             3

+#define PINMUX_PB30D_SERCOM5_PAD0  ((PIN_PB30D_SERCOM5_PAD0 << 16) | MUX_PB30D_SERCOM5_PAD0)

+#define PORT_PB30D_SERCOM5_PAD0    (1u << 30)

+#define PIN_PB16C_SERCOM5_PAD0            48  /**< \brief SERCOM5 signal: PAD0 on PB16 mux C */

+#define MUX_PB16C_SERCOM5_PAD0             2

+#define PINMUX_PB16C_SERCOM5_PAD0  ((PIN_PB16C_SERCOM5_PAD0 << 16) | MUX_PB16C_SERCOM5_PAD0)

+#define PORT_PB16C_SERCOM5_PAD0    (1u << 16)

+#define PIN_PA23D_SERCOM5_PAD1            23  /**< \brief SERCOM5 signal: PAD1 on PA23 mux D */

+#define MUX_PA23D_SERCOM5_PAD1             3

+#define PINMUX_PA23D_SERCOM5_PAD1  ((PIN_PA23D_SERCOM5_PAD1 << 16) | MUX_PA23D_SERCOM5_PAD1)

+#define PORT_PA23D_SERCOM5_PAD1    (1u << 23)

+#define PIN_PB03D_SERCOM5_PAD1            35  /**< \brief SERCOM5 signal: PAD1 on PB03 mux D */

+#define MUX_PB03D_SERCOM5_PAD1             3

+#define PINMUX_PB03D_SERCOM5_PAD1  ((PIN_PB03D_SERCOM5_PAD1 << 16) | MUX_PB03D_SERCOM5_PAD1)

+#define PORT_PB03D_SERCOM5_PAD1    (1u <<  3)

+#define PIN_PB31D_SERCOM5_PAD1            63  /**< \brief SERCOM5 signal: PAD1 on PB31 mux D */

+#define MUX_PB31D_SERCOM5_PAD1             3

+#define PINMUX_PB31D_SERCOM5_PAD1  ((PIN_PB31D_SERCOM5_PAD1 << 16) | MUX_PB31D_SERCOM5_PAD1)

+#define PORT_PB31D_SERCOM5_PAD1    (1u << 31)

+#define PIN_PB17C_SERCOM5_PAD1            49  /**< \brief SERCOM5 signal: PAD1 on PB17 mux C */

+#define MUX_PB17C_SERCOM5_PAD1             2

+#define PINMUX_PB17C_SERCOM5_PAD1  ((PIN_PB17C_SERCOM5_PAD1 << 16) | MUX_PB17C_SERCOM5_PAD1)

+#define PORT_PB17C_SERCOM5_PAD1    (1u << 17)

+#define PIN_PA24D_SERCOM5_PAD2            24  /**< \brief SERCOM5 signal: PAD2 on PA24 mux D */

+#define MUX_PA24D_SERCOM5_PAD2             3

+#define PINMUX_PA24D_SERCOM5_PAD2  ((PIN_PA24D_SERCOM5_PAD2 << 16) | MUX_PA24D_SERCOM5_PAD2)

+#define PORT_PA24D_SERCOM5_PAD2    (1u << 24)

+#define PIN_PB00D_SERCOM5_PAD2            32  /**< \brief SERCOM5 signal: PAD2 on PB00 mux D */

+#define MUX_PB00D_SERCOM5_PAD2             3

+#define PINMUX_PB00D_SERCOM5_PAD2  ((PIN_PB00D_SERCOM5_PAD2 << 16) | MUX_PB00D_SERCOM5_PAD2)

+#define PORT_PB00D_SERCOM5_PAD2    (1u <<  0)

+#define PIN_PB22D_SERCOM5_PAD2            54  /**< \brief SERCOM5 signal: PAD2 on PB22 mux D */

+#define MUX_PB22D_SERCOM5_PAD2             3

+#define PINMUX_PB22D_SERCOM5_PAD2  ((PIN_PB22D_SERCOM5_PAD2 << 16) | MUX_PB22D_SERCOM5_PAD2)

+#define PORT_PB22D_SERCOM5_PAD2    (1u << 22)

+#define PIN_PA20C_SERCOM5_PAD2            20  /**< \brief SERCOM5 signal: PAD2 on PA20 mux C */

+#define MUX_PA20C_SERCOM5_PAD2             2

+#define PINMUX_PA20C_SERCOM5_PAD2  ((PIN_PA20C_SERCOM5_PAD2 << 16) | MUX_PA20C_SERCOM5_PAD2)

+#define PORT_PA20C_SERCOM5_PAD2    (1u << 20)

+#define PIN_PA25D_SERCOM5_PAD3            25  /**< \brief SERCOM5 signal: PAD3 on PA25 mux D */

+#define MUX_PA25D_SERCOM5_PAD3             3

+#define PINMUX_PA25D_SERCOM5_PAD3  ((PIN_PA25D_SERCOM5_PAD3 << 16) | MUX_PA25D_SERCOM5_PAD3)

+#define PORT_PA25D_SERCOM5_PAD3    (1u << 25)

+#define PIN_PB01D_SERCOM5_PAD3            33  /**< \brief SERCOM5 signal: PAD3 on PB01 mux D */

+#define MUX_PB01D_SERCOM5_PAD3             3

+#define PINMUX_PB01D_SERCOM5_PAD3  ((PIN_PB01D_SERCOM5_PAD3 << 16) | MUX_PB01D_SERCOM5_PAD3)

+#define PORT_PB01D_SERCOM5_PAD3    (1u <<  1)

+#define PIN_PB23D_SERCOM5_PAD3            55  /**< \brief SERCOM5 signal: PAD3 on PB23 mux D */

+#define MUX_PB23D_SERCOM5_PAD3             3

+#define PINMUX_PB23D_SERCOM5_PAD3  ((PIN_PB23D_SERCOM5_PAD3 << 16) | MUX_PB23D_SERCOM5_PAD3)

+#define PORT_PB23D_SERCOM5_PAD3    (1u << 23)

+#define PIN_PA21C_SERCOM5_PAD3            21  /**< \brief SERCOM5 signal: PAD3 on PA21 mux C */

+#define MUX_PA21C_SERCOM5_PAD3             2

+#define PINMUX_PA21C_SERCOM5_PAD3  ((PIN_PA21C_SERCOM5_PAD3 << 16) | MUX_PA21C_SERCOM5_PAD3)

+#define PORT_PA21C_SERCOM5_PAD3    (1u << 21)

+/* ========== PORT definition for TC0 peripheral ========== */

+#define PIN_PA04F_TC0_WO0                  4  /**< \brief TC0 signal: WO0 on PA04 mux F */

+#define MUX_PA04F_TC0_WO0                  5

+#define PINMUX_PA04F_TC0_WO0       ((PIN_PA04F_TC0_WO0 << 16) | MUX_PA04F_TC0_WO0)

+#define PORT_PA04F_TC0_WO0         (1u <<  4)

+#define PIN_PB30F_TC0_WO0                 62  /**< \brief TC0 signal: WO0 on PB30 mux F */

+#define MUX_PB30F_TC0_WO0                  5

+#define PINMUX_PB30F_TC0_WO0       ((PIN_PB30F_TC0_WO0 << 16) | MUX_PB30F_TC0_WO0)

+#define PORT_PB30F_TC0_WO0         (1u << 30)

+#define PIN_PA08E_TC0_WO0                  8  /**< \brief TC0 signal: WO0 on PA08 mux E */

+#define MUX_PA08E_TC0_WO0                  4

+#define PINMUX_PA08E_TC0_WO0       ((PIN_PA08E_TC0_WO0 << 16) | MUX_PA08E_TC0_WO0)

+#define PORT_PA08E_TC0_WO0         (1u <<  8)

+#define PIN_PA05F_TC0_WO1                  5  /**< \brief TC0 signal: WO1 on PA05 mux F */

+#define MUX_PA05F_TC0_WO1                  5

+#define PINMUX_PA05F_TC0_WO1       ((PIN_PA05F_TC0_WO1 << 16) | MUX_PA05F_TC0_WO1)

+#define PORT_PA05F_TC0_WO1         (1u <<  5)

+#define PIN_PB31F_TC0_WO1                 63  /**< \brief TC0 signal: WO1 on PB31 mux F */

+#define MUX_PB31F_TC0_WO1                  5

+#define PINMUX_PB31F_TC0_WO1       ((PIN_PB31F_TC0_WO1 << 16) | MUX_PB31F_TC0_WO1)

+#define PORT_PB31F_TC0_WO1         (1u << 31)

+#define PIN_PA09E_TC0_WO1                  9  /**< \brief TC0 signal: WO1 on PA09 mux E */

+#define MUX_PA09E_TC0_WO1                  4

+#define PINMUX_PA09E_TC0_WO1       ((PIN_PA09E_TC0_WO1 << 16) | MUX_PA09E_TC0_WO1)

+#define PORT_PA09E_TC0_WO1         (1u <<  9)

+/* ========== PORT definition for TC1 peripheral ========== */

+#define PIN_PA06F_TC1_WO0                  6  /**< \brief TC1 signal: WO0 on PA06 mux F */

+#define MUX_PA06F_TC1_WO0                  5

+#define PINMUX_PA06F_TC1_WO0       ((PIN_PA06F_TC1_WO0 << 16) | MUX_PA06F_TC1_WO0)

+#define PORT_PA06F_TC1_WO0         (1u <<  6)

+#define PIN_PA30F_TC1_WO0                 30  /**< \brief TC1 signal: WO0 on PA30 mux F */

+#define MUX_PA30F_TC1_WO0                  5

+#define PINMUX_PA30F_TC1_WO0       ((PIN_PA30F_TC1_WO0 << 16) | MUX_PA30F_TC1_WO0)

+#define PORT_PA30F_TC1_WO0         (1u << 30)

+#define PIN_PA10E_TC1_WO0                 10  /**< \brief TC1 signal: WO0 on PA10 mux E */

+#define MUX_PA10E_TC1_WO0                  4

+#define PINMUX_PA10E_TC1_WO0       ((PIN_PA10E_TC1_WO0 << 16) | MUX_PA10E_TC1_WO0)

+#define PORT_PA10E_TC1_WO0         (1u << 10)

+#define PIN_PA07F_TC1_WO1                  7  /**< \brief TC1 signal: WO1 on PA07 mux F */

+#define MUX_PA07F_TC1_WO1                  5

+#define PINMUX_PA07F_TC1_WO1       ((PIN_PA07F_TC1_WO1 << 16) | MUX_PA07F_TC1_WO1)

+#define PORT_PA07F_TC1_WO1         (1u <<  7)

+#define PIN_PA31F_TC1_WO1                 31  /**< \brief TC1 signal: WO1 on PA31 mux F */

+#define MUX_PA31F_TC1_WO1                  5

+#define PINMUX_PA31F_TC1_WO1       ((PIN_PA31F_TC1_WO1 << 16) | MUX_PA31F_TC1_WO1)

+#define PORT_PA31F_TC1_WO1         (1u << 31)

+#define PIN_PA11E_TC1_WO1                 11  /**< \brief TC1 signal: WO1 on PA11 mux E */

+#define MUX_PA11E_TC1_WO1                  4

+#define PINMUX_PA11E_TC1_WO1       ((PIN_PA11E_TC1_WO1 << 16) | MUX_PA11E_TC1_WO1)

+#define PORT_PA11E_TC1_WO1         (1u << 11)

+/* ========== PORT definition for TC2 peripheral ========== */

+#define PIN_PA16F_TC2_WO0                 16  /**< \brief TC2 signal: WO0 on PA16 mux F */

+#define MUX_PA16F_TC2_WO0                  5

+#define PINMUX_PA16F_TC2_WO0       ((PIN_PA16F_TC2_WO0 << 16) | MUX_PA16F_TC2_WO0)

+#define PORT_PA16F_TC2_WO0         (1u << 16)

+#define PIN_PA12E_TC2_WO0                 12  /**< \brief TC2 signal: WO0 on PA12 mux E */

+#define MUX_PA12E_TC2_WO0                  4

+#define PINMUX_PA12E_TC2_WO0       ((PIN_PA12E_TC2_WO0 << 16) | MUX_PA12E_TC2_WO0)

+#define PORT_PA12E_TC2_WO0         (1u << 12)

+#define PIN_PA00F_TC2_WO0                  0  /**< \brief TC2 signal: WO0 on PA00 mux F */

+#define MUX_PA00F_TC2_WO0                  5

+#define PINMUX_PA00F_TC2_WO0       ((PIN_PA00F_TC2_WO0 << 16) | MUX_PA00F_TC2_WO0)

+#define PORT_PA00F_TC2_WO0         (1u <<  0)

+#define PIN_PA17F_TC2_WO1                 17  /**< \brief TC2 signal: WO1 on PA17 mux F */

+#define MUX_PA17F_TC2_WO1                  5

+#define PINMUX_PA17F_TC2_WO1       ((PIN_PA17F_TC2_WO1 << 16) | MUX_PA17F_TC2_WO1)

+#define PORT_PA17F_TC2_WO1         (1u << 17)

+#define PIN_PA13E_TC2_WO1                 13  /**< \brief TC2 signal: WO1 on PA13 mux E */

+#define MUX_PA13E_TC2_WO1                  4

+#define PINMUX_PA13E_TC2_WO1       ((PIN_PA13E_TC2_WO1 << 16) | MUX_PA13E_TC2_WO1)

+#define PORT_PA13E_TC2_WO1         (1u << 13)

+#define PIN_PA01F_TC2_WO1                  1  /**< \brief TC2 signal: WO1 on PA01 mux F */

+#define MUX_PA01F_TC2_WO1                  5

+#define PINMUX_PA01F_TC2_WO1       ((PIN_PA01F_TC2_WO1 << 16) | MUX_PA01F_TC2_WO1)

+#define PORT_PA01F_TC2_WO1         (1u <<  1)

+/* ========== PORT definition for TC3 peripheral ========== */

+#define PIN_PA18F_TC3_WO0                 18  /**< \brief TC3 signal: WO0 on PA18 mux F */

+#define MUX_PA18F_TC3_WO0                  5

+#define PINMUX_PA18F_TC3_WO0       ((PIN_PA18F_TC3_WO0 << 16) | MUX_PA18F_TC3_WO0)

+#define PORT_PA18F_TC3_WO0         (1u << 18)

+#define PIN_PA14E_TC3_WO0                 14  /**< \brief TC3 signal: WO0 on PA14 mux E */

+#define MUX_PA14E_TC3_WO0                  4

+#define PINMUX_PA14E_TC3_WO0       ((PIN_PA14E_TC3_WO0 << 16) | MUX_PA14E_TC3_WO0)

+#define PORT_PA14E_TC3_WO0         (1u << 14)

+#define PIN_PA19F_TC3_WO1                 19  /**< \brief TC3 signal: WO1 on PA19 mux F */

+#define MUX_PA19F_TC3_WO1                  5

+#define PINMUX_PA19F_TC3_WO1       ((PIN_PA19F_TC3_WO1 << 16) | MUX_PA19F_TC3_WO1)

+#define PORT_PA19F_TC3_WO1         (1u << 19)

+#define PIN_PA15E_TC3_WO1                 15  /**< \brief TC3 signal: WO1 on PA15 mux E */

+#define MUX_PA15E_TC3_WO1                  4

+#define PINMUX_PA15E_TC3_WO1       ((PIN_PA15E_TC3_WO1 << 16) | MUX_PA15E_TC3_WO1)

+#define PORT_PA15E_TC3_WO1         (1u << 15)

+/* ========== PORT definition for TC4 peripheral ========== */

+#define PIN_PA22F_TC4_WO0                 22  /**< \brief TC4 signal: WO0 on PA22 mux F */

+#define MUX_PA22F_TC4_WO0                  5

+#define PINMUX_PA22F_TC4_WO0       ((PIN_PA22F_TC4_WO0 << 16) | MUX_PA22F_TC4_WO0)

+#define PORT_PA22F_TC4_WO0         (1u << 22)

+#define PIN_PB08F_TC4_WO0                 40  /**< \brief TC4 signal: WO0 on PB08 mux F */

+#define MUX_PB08F_TC4_WO0                  5

+#define PINMUX_PB08F_TC4_WO0       ((PIN_PB08F_TC4_WO0 << 16) | MUX_PB08F_TC4_WO0)

+#define PORT_PB08F_TC4_WO0         (1u <<  8)

+#define PIN_PB12E_TC4_WO0                 44  /**< \brief TC4 signal: WO0 on PB12 mux E */

+#define MUX_PB12E_TC4_WO0                  4

+#define PINMUX_PB12E_TC4_WO0       ((PIN_PB12E_TC4_WO0 << 16) | MUX_PB12E_TC4_WO0)

+#define PORT_PB12E_TC4_WO0         (1u << 12)

+#define PIN_PA23F_TC4_WO1                 23  /**< \brief TC4 signal: WO1 on PA23 mux F */

+#define MUX_PA23F_TC4_WO1                  5

+#define PINMUX_PA23F_TC4_WO1       ((PIN_PA23F_TC4_WO1 << 16) | MUX_PA23F_TC4_WO1)

+#define PORT_PA23F_TC4_WO1         (1u << 23)

+#define PIN_PB09F_TC4_WO1                 41  /**< \brief TC4 signal: WO1 on PB09 mux F */

+#define MUX_PB09F_TC4_WO1                  5

+#define PINMUX_PB09F_TC4_WO1       ((PIN_PB09F_TC4_WO1 << 16) | MUX_PB09F_TC4_WO1)

+#define PORT_PB09F_TC4_WO1         (1u <<  9)

+#define PIN_PB13E_TC4_WO1                 45  /**< \brief TC4 signal: WO1 on PB13 mux E */

+#define MUX_PB13E_TC4_WO1                  4

+#define PINMUX_PB13E_TC4_WO1       ((PIN_PB13E_TC4_WO1 << 16) | MUX_PB13E_TC4_WO1)

+#define PORT_PB13E_TC4_WO1         (1u << 13)

+/* ========== PORT definition for TC5 peripheral ========== */

+#define PIN_PA24F_TC5_WO0                 24  /**< \brief TC5 signal: WO0 on PA24 mux F */

+#define MUX_PA24F_TC5_WO0                  5

+#define PINMUX_PA24F_TC5_WO0       ((PIN_PA24F_TC5_WO0 << 16) | MUX_PA24F_TC5_WO0)

+#define PORT_PA24F_TC5_WO0         (1u << 24)

+#define PIN_PB10F_TC5_WO0                 42  /**< \brief TC5 signal: WO0 on PB10 mux F */

+#define MUX_PB10F_TC5_WO0                  5

+#define PINMUX_PB10F_TC5_WO0       ((PIN_PB10F_TC5_WO0 << 16) | MUX_PB10F_TC5_WO0)

+#define PORT_PB10F_TC5_WO0         (1u << 10)

+#define PIN_PB14E_TC5_WO0                 46  /**< \brief TC5 signal: WO0 on PB14 mux E */

+#define MUX_PB14E_TC5_WO0                  4

+#define PINMUX_PB14E_TC5_WO0       ((PIN_PB14E_TC5_WO0 << 16) | MUX_PB14E_TC5_WO0)

+#define PORT_PB14E_TC5_WO0         (1u << 14)

+#define PIN_PA25F_TC5_WO1                 25  /**< \brief TC5 signal: WO1 on PA25 mux F */

+#define MUX_PA25F_TC5_WO1                  5

+#define PINMUX_PA25F_TC5_WO1       ((PIN_PA25F_TC5_WO1 << 16) | MUX_PA25F_TC5_WO1)

+#define PORT_PA25F_TC5_WO1         (1u << 25)

+#define PIN_PB11F_TC5_WO1                 43  /**< \brief TC5 signal: WO1 on PB11 mux F */

+#define MUX_PB11F_TC5_WO1                  5

+#define PINMUX_PB11F_TC5_WO1       ((PIN_PB11F_TC5_WO1 << 16) | MUX_PB11F_TC5_WO1)

+#define PORT_PB11F_TC5_WO1         (1u << 11)

+#define PIN_PB15E_TC5_WO1                 47  /**< \brief TC5 signal: WO1 on PB15 mux E */

+#define MUX_PB15E_TC5_WO1                  4

+#define PINMUX_PB15E_TC5_WO1       ((PIN_PB15E_TC5_WO1 << 16) | MUX_PB15E_TC5_WO1)

+#define PORT_PB15E_TC5_WO1         (1u << 15)

+/* ========== PORT definition for TC6 peripheral ========== */

+#define PIN_PB02F_TC6_WO0                 34  /**< \brief TC6 signal: WO0 on PB02 mux F */

+#define MUX_PB02F_TC6_WO0                  5

+#define PINMUX_PB02F_TC6_WO0       ((PIN_PB02F_TC6_WO0 << 16) | MUX_PB02F_TC6_WO0)

+#define PORT_PB02F_TC6_WO0         (1u <<  2)

+#define PIN_PB16E_TC6_WO0                 48  /**< \brief TC6 signal: WO0 on PB16 mux E */

+#define MUX_PB16E_TC6_WO0                  4

+#define PINMUX_PB16E_TC6_WO0       ((PIN_PB16E_TC6_WO0 << 16) | MUX_PB16E_TC6_WO0)

+#define PORT_PB16E_TC6_WO0         (1u << 16)

+#define PIN_PB03F_TC6_WO1                 35  /**< \brief TC6 signal: WO1 on PB03 mux F */

+#define MUX_PB03F_TC6_WO1                  5

+#define PINMUX_PB03F_TC6_WO1       ((PIN_PB03F_TC6_WO1 << 16) | MUX_PB03F_TC6_WO1)

+#define PORT_PB03F_TC6_WO1         (1u <<  3)

+#define PIN_PB17E_TC6_WO1                 49  /**< \brief TC6 signal: WO1 on PB17 mux E */

+#define MUX_PB17E_TC6_WO1                  4

+#define PINMUX_PB17E_TC6_WO1       ((PIN_PB17E_TC6_WO1 << 16) | MUX_PB17E_TC6_WO1)

+#define PORT_PB17E_TC6_WO1         (1u << 17)

+/* ========== PORT definition for TC7 peripheral ========== */

+#define PIN_PB00F_TC7_WO0                 32  /**< \brief TC7 signal: WO0 on PB00 mux F */

+#define MUX_PB00F_TC7_WO0                  5

+#define PINMUX_PB00F_TC7_WO0       ((PIN_PB00F_TC7_WO0 << 16) | MUX_PB00F_TC7_WO0)

+#define PORT_PB00F_TC7_WO0         (1u <<  0)

+#define PIN_PB22F_TC7_WO0                 54  /**< \brief TC7 signal: WO0 on PB22 mux F */

+#define MUX_PB22F_TC7_WO0                  5

+#define PINMUX_PB22F_TC7_WO0       ((PIN_PB22F_TC7_WO0 << 16) | MUX_PB22F_TC7_WO0)

+#define PORT_PB22F_TC7_WO0         (1u << 22)

+#define PIN_PA20E_TC7_WO0                 20  /**< \brief TC7 signal: WO0 on PA20 mux E */

+#define MUX_PA20E_TC7_WO0                  4

+#define PINMUX_PA20E_TC7_WO0       ((PIN_PA20E_TC7_WO0 << 16) | MUX_PA20E_TC7_WO0)

+#define PORT_PA20E_TC7_WO0         (1u << 20)

+#define PIN_PB01F_TC7_WO1                 33  /**< \brief TC7 signal: WO1 on PB01 mux F */

+#define MUX_PB01F_TC7_WO1                  5

+#define PINMUX_PB01F_TC7_WO1       ((PIN_PB01F_TC7_WO1 << 16) | MUX_PB01F_TC7_WO1)

+#define PORT_PB01F_TC7_WO1         (1u <<  1)

+#define PIN_PB23F_TC7_WO1                 55  /**< \brief TC7 signal: WO1 on PB23 mux F */

+#define MUX_PB23F_TC7_WO1                  5

+#define PINMUX_PB23F_TC7_WO1       ((PIN_PB23F_TC7_WO1 << 16) | MUX_PB23F_TC7_WO1)

+#define PORT_PB23F_TC7_WO1         (1u << 23)

+#define PIN_PA21E_TC7_WO1                 21  /**< \brief TC7 signal: WO1 on PA21 mux E */

+#define MUX_PA21E_TC7_WO1                  4

+#define PINMUX_PA21E_TC7_WO1       ((PIN_PA21E_TC7_WO1 << 16) | MUX_PA21E_TC7_WO1)

+#define PORT_PA21E_TC7_WO1         (1u << 21)

+/* ========== PORT definition for ADC peripheral ========== */

+#define PIN_PA02B_ADC_AIN0                 2  /**< \brief ADC signal: AIN0 on PA02 mux B */

+#define MUX_PA02B_ADC_AIN0                 1

+#define PINMUX_PA02B_ADC_AIN0      ((PIN_PA02B_ADC_AIN0 << 16) | MUX_PA02B_ADC_AIN0)

+#define PORT_PA02B_ADC_AIN0        (1u <<  2)

+#define PIN_PA03B_ADC_AIN1                 3  /**< \brief ADC signal: AIN1 on PA03 mux B */

+#define MUX_PA03B_ADC_AIN1                 1

+#define PINMUX_PA03B_ADC_AIN1      ((PIN_PA03B_ADC_AIN1 << 16) | MUX_PA03B_ADC_AIN1)

+#define PORT_PA03B_ADC_AIN1        (1u <<  3)

+#define PIN_PB08B_ADC_AIN2                40  /**< \brief ADC signal: AIN2 on PB08 mux B */

+#define MUX_PB08B_ADC_AIN2                 1

+#define PINMUX_PB08B_ADC_AIN2      ((PIN_PB08B_ADC_AIN2 << 16) | MUX_PB08B_ADC_AIN2)

+#define PORT_PB08B_ADC_AIN2        (1u <<  8)

+#define PIN_PB09B_ADC_AIN3                41  /**< \brief ADC signal: AIN3 on PB09 mux B */

+#define MUX_PB09B_ADC_AIN3                 1

+#define PINMUX_PB09B_ADC_AIN3      ((PIN_PB09B_ADC_AIN3 << 16) | MUX_PB09B_ADC_AIN3)

+#define PORT_PB09B_ADC_AIN3        (1u <<  9)

+#define PIN_PA04B_ADC_AIN4                 4  /**< \brief ADC signal: AIN4 on PA04 mux B */

+#define MUX_PA04B_ADC_AIN4                 1

+#define PINMUX_PA04B_ADC_AIN4      ((PIN_PA04B_ADC_AIN4 << 16) | MUX_PA04B_ADC_AIN4)

+#define PORT_PA04B_ADC_AIN4        (1u <<  4)

+#define PIN_PA05B_ADC_AIN5                 5  /**< \brief ADC signal: AIN5 on PA05 mux B */

+#define MUX_PA05B_ADC_AIN5                 1

+#define PINMUX_PA05B_ADC_AIN5      ((PIN_PA05B_ADC_AIN5 << 16) | MUX_PA05B_ADC_AIN5)

+#define PORT_PA05B_ADC_AIN5        (1u <<  5)

+#define PIN_PA06B_ADC_AIN6                 6  /**< \brief ADC signal: AIN6 on PA06 mux B */

+#define MUX_PA06B_ADC_AIN6                 1

+#define PINMUX_PA06B_ADC_AIN6      ((PIN_PA06B_ADC_AIN6 << 16) | MUX_PA06B_ADC_AIN6)

+#define PORT_PA06B_ADC_AIN6        (1u <<  6)

+#define PIN_PA07B_ADC_AIN7                 7  /**< \brief ADC signal: AIN7 on PA07 mux B */

+#define MUX_PA07B_ADC_AIN7                 1

+#define PINMUX_PA07B_ADC_AIN7      ((PIN_PA07B_ADC_AIN7 << 16) | MUX_PA07B_ADC_AIN7)

+#define PORT_PA07B_ADC_AIN7        (1u <<  7)

+#define PIN_PB00B_ADC_AIN8                32  /**< \brief ADC signal: AIN8 on PB00 mux B */

+#define MUX_PB00B_ADC_AIN8                 1

+#define PINMUX_PB00B_ADC_AIN8      ((PIN_PB00B_ADC_AIN8 << 16) | MUX_PB00B_ADC_AIN8)

+#define PORT_PB00B_ADC_AIN8        (1u <<  0)

+#define PIN_PB01B_ADC_AIN9                33  /**< \brief ADC signal: AIN9 on PB01 mux B */

+#define MUX_PB01B_ADC_AIN9                 1

+#define PINMUX_PB01B_ADC_AIN9      ((PIN_PB01B_ADC_AIN9 << 16) | MUX_PB01B_ADC_AIN9)

+#define PORT_PB01B_ADC_AIN9        (1u <<  1)

+#define PIN_PB02B_ADC_AIN10               34  /**< \brief ADC signal: AIN10 on PB02 mux B */

+#define MUX_PB02B_ADC_AIN10                1

+#define PINMUX_PB02B_ADC_AIN10     ((PIN_PB02B_ADC_AIN10 << 16) | MUX_PB02B_ADC_AIN10)

+#define PORT_PB02B_ADC_AIN10       (1u <<  2)

+#define PIN_PB03B_ADC_AIN11               35  /**< \brief ADC signal: AIN11 on PB03 mux B */

+#define MUX_PB03B_ADC_AIN11                1

+#define PINMUX_PB03B_ADC_AIN11     ((PIN_PB03B_ADC_AIN11 << 16) | MUX_PB03B_ADC_AIN11)

+#define PORT_PB03B_ADC_AIN11       (1u <<  3)

+#define PIN_PB04B_ADC_AIN12               36  /**< \brief ADC signal: AIN12 on PB04 mux B */

+#define MUX_PB04B_ADC_AIN12                1

+#define PINMUX_PB04B_ADC_AIN12     ((PIN_PB04B_ADC_AIN12 << 16) | MUX_PB04B_ADC_AIN12)

+#define PORT_PB04B_ADC_AIN12       (1u <<  4)

+#define PIN_PB05B_ADC_AIN13               37  /**< \brief ADC signal: AIN13 on PB05 mux B */

+#define MUX_PB05B_ADC_AIN13                1

+#define PINMUX_PB05B_ADC_AIN13     ((PIN_PB05B_ADC_AIN13 << 16) | MUX_PB05B_ADC_AIN13)

+#define PORT_PB05B_ADC_AIN13       (1u <<  5)

+#define PIN_PB06B_ADC_AIN14               38  /**< \brief ADC signal: AIN14 on PB06 mux B */

+#define MUX_PB06B_ADC_AIN14                1

+#define PINMUX_PB06B_ADC_AIN14     ((PIN_PB06B_ADC_AIN14 << 16) | MUX_PB06B_ADC_AIN14)

+#define PORT_PB06B_ADC_AIN14       (1u <<  6)

+#define PIN_PB07B_ADC_AIN15               39  /**< \brief ADC signal: AIN15 on PB07 mux B */

+#define MUX_PB07B_ADC_AIN15                1

+#define PINMUX_PB07B_ADC_AIN15     ((PIN_PB07B_ADC_AIN15 << 16) | MUX_PB07B_ADC_AIN15)

+#define PORT_PB07B_ADC_AIN15       (1u <<  7)

+#define PIN_PA08B_ADC_AIN16                8  /**< \brief ADC signal: AIN16 on PA08 mux B */

+#define MUX_PA08B_ADC_AIN16                1

+#define PINMUX_PA08B_ADC_AIN16     ((PIN_PA08B_ADC_AIN16 << 16) | MUX_PA08B_ADC_AIN16)

+#define PORT_PA08B_ADC_AIN16       (1u <<  8)

+#define PIN_PA09B_ADC_AIN17                9  /**< \brief ADC signal: AIN17 on PA09 mux B */

+#define MUX_PA09B_ADC_AIN17                1

+#define PINMUX_PA09B_ADC_AIN17     ((PIN_PA09B_ADC_AIN17 << 16) | MUX_PA09B_ADC_AIN17)

+#define PORT_PA09B_ADC_AIN17       (1u <<  9)

+#define PIN_PA10B_ADC_AIN18               10  /**< \brief ADC signal: AIN18 on PA10 mux B */

+#define MUX_PA10B_ADC_AIN18                1

+#define PINMUX_PA10B_ADC_AIN18     ((PIN_PA10B_ADC_AIN18 << 16) | MUX_PA10B_ADC_AIN18)

+#define PORT_PA10B_ADC_AIN18       (1u << 10)

+#define PIN_PA11B_ADC_AIN19               11  /**< \brief ADC signal: AIN19 on PA11 mux B */

+#define MUX_PA11B_ADC_AIN19                1

+#define PINMUX_PA11B_ADC_AIN19     ((PIN_PA11B_ADC_AIN19 << 16) | MUX_PA11B_ADC_AIN19)

+#define PORT_PA11B_ADC_AIN19       (1u << 11)

+#define PIN_PA04B_ADC_VREFP                4  /**< \brief ADC signal: VREFP on PA04 mux B */

+#define MUX_PA04B_ADC_VREFP                1

+#define PINMUX_PA04B_ADC_VREFP     ((PIN_PA04B_ADC_VREFP << 16) | MUX_PA04B_ADC_VREFP)

+#define PORT_PA04B_ADC_VREFP       (1u <<  4)

+/* ========== PORT definition for AC peripheral ========== */

+#define PIN_PA04B_AC_AIN0                  4  /**< \brief AC signal: AIN0 on PA04 mux B */

+#define MUX_PA04B_AC_AIN0                  1

+#define PINMUX_PA04B_AC_AIN0       ((PIN_PA04B_AC_AIN0 << 16) | MUX_PA04B_AC_AIN0)

+#define PORT_PA04B_AC_AIN0         (1u <<  4)

+#define PIN_PA05B_AC_AIN1                  5  /**< \brief AC signal: AIN1 on PA05 mux B */

+#define MUX_PA05B_AC_AIN1                  1

+#define PINMUX_PA05B_AC_AIN1       ((PIN_PA05B_AC_AIN1 << 16) | MUX_PA05B_AC_AIN1)

+#define PORT_PA05B_AC_AIN1         (1u <<  5)

+#define PIN_PA06B_AC_AIN2                  6  /**< \brief AC signal: AIN2 on PA06 mux B */

+#define MUX_PA06B_AC_AIN2                  1

+#define PINMUX_PA06B_AC_AIN2       ((PIN_PA06B_AC_AIN2 << 16) | MUX_PA06B_AC_AIN2)

+#define PORT_PA06B_AC_AIN2         (1u <<  6)

+#define PIN_PA07B_AC_AIN3                  7  /**< \brief AC signal: AIN3 on PA07 mux B */

+#define MUX_PA07B_AC_AIN3                  1

+#define PINMUX_PA07B_AC_AIN3       ((PIN_PA07B_AC_AIN3 << 16) | MUX_PA07B_AC_AIN3)

+#define PORT_PA07B_AC_AIN3         (1u <<  7)

+#define PIN_PA12H_AC_CMP0                 12  /**< \brief AC signal: CMP0 on PA12 mux H */

+#define MUX_PA12H_AC_CMP0                  7

+#define PINMUX_PA12H_AC_CMP0       ((PIN_PA12H_AC_CMP0 << 16) | MUX_PA12H_AC_CMP0)

+#define PORT_PA12H_AC_CMP0         (1u << 12)

+#define PIN_PA18H_AC_CMP0                 18  /**< \brief AC signal: CMP0 on PA18 mux H */

+#define MUX_PA18H_AC_CMP0                  7

+#define PINMUX_PA18H_AC_CMP0       ((PIN_PA18H_AC_CMP0 << 16) | MUX_PA18H_AC_CMP0)

+#define PORT_PA18H_AC_CMP0         (1u << 18)

+#define PIN_PA13H_AC_CMP1                 13  /**< \brief AC signal: CMP1 on PA13 mux H */

+#define MUX_PA13H_AC_CMP1                  7

+#define PINMUX_PA13H_AC_CMP1       ((PIN_PA13H_AC_CMP1 << 16) | MUX_PA13H_AC_CMP1)

+#define PORT_PA13H_AC_CMP1         (1u << 13)

+#define PIN_PA19H_AC_CMP1                 19  /**< \brief AC signal: CMP1 on PA19 mux H */

+#define MUX_PA19H_AC_CMP1                  7

+#define PINMUX_PA19H_AC_CMP1       ((PIN_PA19H_AC_CMP1 << 16) | MUX_PA19H_AC_CMP1)

+#define PORT_PA19H_AC_CMP1         (1u << 19)

+/* ========== PORT definition for DAC peripheral ========== */

+#define PIN_PA02B_DAC_VOUT                 2  /**< \brief DAC signal: VOUT on PA02 mux B */

+#define MUX_PA02B_DAC_VOUT                 1

+#define PINMUX_PA02B_DAC_VOUT      ((PIN_PA02B_DAC_VOUT << 16) | MUX_PA02B_DAC_VOUT)

+#define PORT_PA02B_DAC_VOUT        (1u <<  2)

+#define PIN_PA03B_DAC_VREFP                3  /**< \brief DAC signal: VREFP on PA03 mux B */

+#define MUX_PA03B_DAC_VREFP                1

+#define PINMUX_PA03B_DAC_VREFP     ((PIN_PA03B_DAC_VREFP << 16) | MUX_PA03B_DAC_VREFP)

+#define PORT_PA03B_DAC_VREFP       (1u <<  3)

+

+#endif /* _SAMD20J17_PIO_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20j18.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20j18.h
new file mode 100644
index 0000000..4c5583a
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/pio/pio_samd20j18.h
@@ -0,0 +1,1024 @@
+/**

+ * \file

+ *

+ * \brief Peripheral I/O description for SAMD20J18

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20J18_PIO_

+#define _SAMD20J18_PIO_

+

+#define PIN_PA00                           0  /**< \brief Pin Number for PA00 */

+#define PORT_PA00                  (1u <<  0) /**< \brief PORT Mask  for PA00 */

+#define PIN_PA01                           1  /**< \brief Pin Number for PA01 */

+#define PORT_PA01                  (1u <<  1) /**< \brief PORT Mask  for PA01 */

+#define PIN_PA02                           2  /**< \brief Pin Number for PA02 */

+#define PORT_PA02                  (1u <<  2) /**< \brief PORT Mask  for PA02 */

+#define PIN_PA03                           3  /**< \brief Pin Number for PA03 */

+#define PORT_PA03                  (1u <<  3) /**< \brief PORT Mask  for PA03 */

+#define PIN_PA04                           4  /**< \brief Pin Number for PA04 */

+#define PORT_PA04                  (1u <<  4) /**< \brief PORT Mask  for PA04 */

+#define PIN_PA05                           5  /**< \brief Pin Number for PA05 */

+#define PORT_PA05                  (1u <<  5) /**< \brief PORT Mask  for PA05 */

+#define PIN_PA06                           6  /**< \brief Pin Number for PA06 */

+#define PORT_PA06                  (1u <<  6) /**< \brief PORT Mask  for PA06 */

+#define PIN_PA07                           7  /**< \brief Pin Number for PA07 */

+#define PORT_PA07                  (1u <<  7) /**< \brief PORT Mask  for PA07 */

+#define PIN_PA08                           8  /**< \brief Pin Number for PA08 */

+#define PORT_PA08                  (1u <<  8) /**< \brief PORT Mask  for PA08 */

+#define PIN_PA09                           9  /**< \brief Pin Number for PA09 */

+#define PORT_PA09                  (1u <<  9) /**< \brief PORT Mask  for PA09 */

+#define PIN_PA10                          10  /**< \brief Pin Number for PA10 */

+#define PORT_PA10                  (1u << 10) /**< \brief PORT Mask  for PA10 */

+#define PIN_PA11                          11  /**< \brief Pin Number for PA11 */

+#define PORT_PA11                  (1u << 11) /**< \brief PORT Mask  for PA11 */

+#define PIN_PA12                          12  /**< \brief Pin Number for PA12 */

+#define PORT_PA12                  (1u << 12) /**< \brief PORT Mask  for PA12 */

+#define PIN_PA13                          13  /**< \brief Pin Number for PA13 */

+#define PORT_PA13                  (1u << 13) /**< \brief PORT Mask  for PA13 */

+#define PIN_PA14                          14  /**< \brief Pin Number for PA14 */

+#define PORT_PA14                  (1u << 14) /**< \brief PORT Mask  for PA14 */

+#define PIN_PA15                          15  /**< \brief Pin Number for PA15 */

+#define PORT_PA15                  (1u << 15) /**< \brief PORT Mask  for PA15 */

+#define PIN_PA16                          16  /**< \brief Pin Number for PA16 */

+#define PORT_PA16                  (1u << 16) /**< \brief PORT Mask  for PA16 */

+#define PIN_PA17                          17  /**< \brief Pin Number for PA17 */

+#define PORT_PA17                  (1u << 17) /**< \brief PORT Mask  for PA17 */

+#define PIN_PA18                          18  /**< \brief Pin Number for PA18 */

+#define PORT_PA18                  (1u << 18) /**< \brief PORT Mask  for PA18 */

+#define PIN_PA19                          19  /**< \brief Pin Number for PA19 */

+#define PORT_PA19                  (1u << 19) /**< \brief PORT Mask  for PA19 */

+#define PIN_PA20                          20  /**< \brief Pin Number for PA20 */

+#define PORT_PA20                  (1u << 20) /**< \brief PORT Mask  for PA20 */

+#define PIN_PA21                          21  /**< \brief Pin Number for PA21 */

+#define PORT_PA21                  (1u << 21) /**< \brief PORT Mask  for PA21 */

+#define PIN_PA22                          22  /**< \brief Pin Number for PA22 */

+#define PORT_PA22                  (1u << 22) /**< \brief PORT Mask  for PA22 */

+#define PIN_PA23                          23  /**< \brief Pin Number for PA23 */

+#define PORT_PA23                  (1u << 23) /**< \brief PORT Mask  for PA23 */

+#define PIN_PA24                          24  /**< \brief Pin Number for PA24 */

+#define PORT_PA24                  (1u << 24) /**< \brief PORT Mask  for PA24 */

+#define PIN_PA25                          25  /**< \brief Pin Number for PA25 */

+#define PORT_PA25                  (1u << 25) /**< \brief PORT Mask  for PA25 */

+#define PIN_PA27                          27  /**< \brief Pin Number for PA27 */

+#define PORT_PA27                  (1u << 27) /**< \brief PORT Mask  for PA27 */

+#define PIN_PA28                          28  /**< \brief Pin Number for PA28 */

+#define PORT_PA28                  (1u << 28) /**< \brief PORT Mask  for PA28 */

+#define PIN_PA30                          30  /**< \brief Pin Number for PA30 */

+#define PORT_PA30                  (1u << 30) /**< \brief PORT Mask  for PA30 */

+#define PIN_PA31                          31  /**< \brief Pin Number for PA31 */

+#define PORT_PA31                  (1u << 31) /**< \brief PORT Mask  for PA31 */

+#define PIN_PB00                          32  /**< \brief Pin Number for PB00 */

+#define PORT_PB00                  (1u <<  0) /**< \brief PORT Mask  for PB00 */

+#define PIN_PB01                          33  /**< \brief Pin Number for PB01 */

+#define PORT_PB01                  (1u <<  1) /**< \brief PORT Mask  for PB01 */

+#define PIN_PB02                          34  /**< \brief Pin Number for PB02 */

+#define PORT_PB02                  (1u <<  2) /**< \brief PORT Mask  for PB02 */

+#define PIN_PB03                          35  /**< \brief Pin Number for PB03 */

+#define PORT_PB03                  (1u <<  3) /**< \brief PORT Mask  for PB03 */

+#define PIN_PB04                          36  /**< \brief Pin Number for PB04 */

+#define PORT_PB04                  (1u <<  4) /**< \brief PORT Mask  for PB04 */

+#define PIN_PB05                          37  /**< \brief Pin Number for PB05 */

+#define PORT_PB05                  (1u <<  5) /**< \brief PORT Mask  for PB05 */

+#define PIN_PB06                          38  /**< \brief Pin Number for PB06 */

+#define PORT_PB06                  (1u <<  6) /**< \brief PORT Mask  for PB06 */

+#define PIN_PB07                          39  /**< \brief Pin Number for PB07 */

+#define PORT_PB07                  (1u <<  7) /**< \brief PORT Mask  for PB07 */

+#define PIN_PB08                          40  /**< \brief Pin Number for PB08 */

+#define PORT_PB08                  (1u <<  8) /**< \brief PORT Mask  for PB08 */

+#define PIN_PB09                          41  /**< \brief Pin Number for PB09 */

+#define PORT_PB09                  (1u <<  9) /**< \brief PORT Mask  for PB09 */

+#define PIN_PB10                          42  /**< \brief Pin Number for PB10 */

+#define PORT_PB10                  (1u << 10) /**< \brief PORT Mask  for PB10 */

+#define PIN_PB11                          43  /**< \brief Pin Number for PB11 */

+#define PORT_PB11                  (1u << 11) /**< \brief PORT Mask  for PB11 */

+#define PIN_PB12                          44  /**< \brief Pin Number for PB12 */

+#define PORT_PB12                  (1u << 12) /**< \brief PORT Mask  for PB12 */

+#define PIN_PB13                          45  /**< \brief Pin Number for PB13 */

+#define PORT_PB13                  (1u << 13) /**< \brief PORT Mask  for PB13 */

+#define PIN_PB14                          46  /**< \brief Pin Number for PB14 */

+#define PORT_PB14                  (1u << 14) /**< \brief PORT Mask  for PB14 */

+#define PIN_PB15                          47  /**< \brief Pin Number for PB15 */

+#define PORT_PB15                  (1u << 15) /**< \brief PORT Mask  for PB15 */

+#define PIN_PB16                          48  /**< \brief Pin Number for PB16 */

+#define PORT_PB16                  (1u << 16) /**< \brief PORT Mask  for PB16 */

+#define PIN_PB17                          49  /**< \brief Pin Number for PB17 */

+#define PORT_PB17                  (1u << 17) /**< \brief PORT Mask  for PB17 */

+#define PIN_PB22                          54  /**< \brief Pin Number for PB22 */

+#define PORT_PB22                  (1u << 22) /**< \brief PORT Mask  for PB22 */

+#define PIN_PB23                          55  /**< \brief Pin Number for PB23 */

+#define PORT_PB23                  (1u << 23) /**< \brief PORT Mask  for PB23 */

+#define PIN_PB30                          62  /**< \brief Pin Number for PB30 */

+#define PORT_PB30                  (1u << 30) /**< \brief PORT Mask  for PB30 */

+#define PIN_PB31                          63  /**< \brief Pin Number for PB31 */

+#define PORT_PB31                  (1u << 31) /**< \brief PORT Mask  for PB31 */

+/* ========== PORT definition for CORE peripheral ========== */

+#define PIN_PA30G_CORE_SWCLK              30  /**< \brief CORE signal: SWCLK on PA30 mux G */

+#define MUX_PA30G_CORE_SWCLK               6

+#define PINMUX_PA30G_CORE_SWCLK    ((PIN_PA30G_CORE_SWCLK << 16) | MUX_PA30G_CORE_SWCLK)

+#define PORT_PA30G_CORE_SWCLK      (1u << 30)

+/* ========== PORT definition for GCLK peripheral ========== */

+#define PIN_PB14H_GCLK_IO0                46  /**< \brief GCLK signal: IO0 on PB14 mux H */

+#define MUX_PB14H_GCLK_IO0                 7

+#define PINMUX_PB14H_GCLK_IO0      ((PIN_PB14H_GCLK_IO0 << 16) | MUX_PB14H_GCLK_IO0)

+#define PORT_PB14H_GCLK_IO0        (1u << 14)

+#define PIN_PB22H_GCLK_IO0                54  /**< \brief GCLK signal: IO0 on PB22 mux H */

+#define MUX_PB22H_GCLK_IO0                 7

+#define PINMUX_PB22H_GCLK_IO0      ((PIN_PB22H_GCLK_IO0 << 16) | MUX_PB22H_GCLK_IO0)

+#define PORT_PB22H_GCLK_IO0        (1u << 22)

+#define PIN_PA14H_GCLK_IO0                14  /**< \brief GCLK signal: IO0 on PA14 mux H */

+#define MUX_PA14H_GCLK_IO0                 7

+#define PINMUX_PA14H_GCLK_IO0      ((PIN_PA14H_GCLK_IO0 << 16) | MUX_PA14H_GCLK_IO0)

+#define PORT_PA14H_GCLK_IO0        (1u << 14)

+#define PIN_PA27H_GCLK_IO0                27  /**< \brief GCLK signal: IO0 on PA27 mux H */

+#define MUX_PA27H_GCLK_IO0                 7

+#define PINMUX_PA27H_GCLK_IO0      ((PIN_PA27H_GCLK_IO0 << 16) | MUX_PA27H_GCLK_IO0)

+#define PORT_PA27H_GCLK_IO0        (1u << 27)

+#define PIN_PA28H_GCLK_IO0                28  /**< \brief GCLK signal: IO0 on PA28 mux H */

+#define MUX_PA28H_GCLK_IO0                 7

+#define PINMUX_PA28H_GCLK_IO0      ((PIN_PA28H_GCLK_IO0 << 16) | MUX_PA28H_GCLK_IO0)

+#define PORT_PA28H_GCLK_IO0        (1u << 28)

+#define PIN_PA30H_GCLK_IO0                30  /**< \brief GCLK signal: IO0 on PA30 mux H */

+#define MUX_PA30H_GCLK_IO0                 7

+#define PINMUX_PA30H_GCLK_IO0      ((PIN_PA30H_GCLK_IO0 << 16) | MUX_PA30H_GCLK_IO0)

+#define PORT_PA30H_GCLK_IO0        (1u << 30)

+#define PIN_PB15H_GCLK_IO1                47  /**< \brief GCLK signal: IO1 on PB15 mux H */

+#define MUX_PB15H_GCLK_IO1                 7

+#define PINMUX_PB15H_GCLK_IO1      ((PIN_PB15H_GCLK_IO1 << 16) | MUX_PB15H_GCLK_IO1)

+#define PORT_PB15H_GCLK_IO1        (1u << 15)

+#define PIN_PB23H_GCLK_IO1                55  /**< \brief GCLK signal: IO1 on PB23 mux H */

+#define MUX_PB23H_GCLK_IO1                 7

+#define PINMUX_PB23H_GCLK_IO1      ((PIN_PB23H_GCLK_IO1 << 16) | MUX_PB23H_GCLK_IO1)

+#define PORT_PB23H_GCLK_IO1        (1u << 23)

+#define PIN_PA15H_GCLK_IO1                15  /**< \brief GCLK signal: IO1 on PA15 mux H */

+#define MUX_PA15H_GCLK_IO1                 7

+#define PINMUX_PA15H_GCLK_IO1      ((PIN_PA15H_GCLK_IO1 << 16) | MUX_PA15H_GCLK_IO1)

+#define PORT_PA15H_GCLK_IO1        (1u << 15)

+#define PIN_PB16H_GCLK_IO2                48  /**< \brief GCLK signal: IO2 on PB16 mux H */

+#define MUX_PB16H_GCLK_IO2                 7

+#define PINMUX_PB16H_GCLK_IO2      ((PIN_PB16H_GCLK_IO2 << 16) | MUX_PB16H_GCLK_IO2)

+#define PORT_PB16H_GCLK_IO2        (1u << 16)

+#define PIN_PA16H_GCLK_IO2                16  /**< \brief GCLK signal: IO2 on PA16 mux H */

+#define MUX_PA16H_GCLK_IO2                 7

+#define PINMUX_PA16H_GCLK_IO2      ((PIN_PA16H_GCLK_IO2 << 16) | MUX_PA16H_GCLK_IO2)

+#define PORT_PA16H_GCLK_IO2        (1u << 16)

+#define PIN_PA17H_GCLK_IO3                17  /**< \brief GCLK signal: IO3 on PA17 mux H */

+#define MUX_PA17H_GCLK_IO3                 7

+#define PINMUX_PA17H_GCLK_IO3      ((PIN_PA17H_GCLK_IO3 << 16) | MUX_PA17H_GCLK_IO3)

+#define PORT_PA17H_GCLK_IO3        (1u << 17)

+#define PIN_PB17H_GCLK_IO3                49  /**< \brief GCLK signal: IO3 on PB17 mux H */

+#define MUX_PB17H_GCLK_IO3                 7

+#define PINMUX_PB17H_GCLK_IO3      ((PIN_PB17H_GCLK_IO3 << 16) | MUX_PB17H_GCLK_IO3)

+#define PORT_PB17H_GCLK_IO3        (1u << 17)

+#define PIN_PA10H_GCLK_IO4                10  /**< \brief GCLK signal: IO4 on PA10 mux H */

+#define MUX_PA10H_GCLK_IO4                 7

+#define PINMUX_PA10H_GCLK_IO4      ((PIN_PA10H_GCLK_IO4 << 16) | MUX_PA10H_GCLK_IO4)

+#define PORT_PA10H_GCLK_IO4        (1u << 10)

+#define PIN_PA20H_GCLK_IO4                20  /**< \brief GCLK signal: IO4 on PA20 mux H */

+#define MUX_PA20H_GCLK_IO4                 7

+#define PINMUX_PA20H_GCLK_IO4      ((PIN_PA20H_GCLK_IO4 << 16) | MUX_PA20H_GCLK_IO4)

+#define PORT_PA20H_GCLK_IO4        (1u << 20)

+#define PIN_PB10H_GCLK_IO4                42  /**< \brief GCLK signal: IO4 on PB10 mux H */

+#define MUX_PB10H_GCLK_IO4                 7

+#define PINMUX_PB10H_GCLK_IO4      ((PIN_PB10H_GCLK_IO4 << 16) | MUX_PB10H_GCLK_IO4)

+#define PORT_PB10H_GCLK_IO4        (1u << 10)

+#define PIN_PA11H_GCLK_IO5                11  /**< \brief GCLK signal: IO5 on PA11 mux H */

+#define MUX_PA11H_GCLK_IO5                 7

+#define PINMUX_PA11H_GCLK_IO5      ((PIN_PA11H_GCLK_IO5 << 16) | MUX_PA11H_GCLK_IO5)

+#define PORT_PA11H_GCLK_IO5        (1u << 11)

+#define PIN_PA21H_GCLK_IO5                21  /**< \brief GCLK signal: IO5 on PA21 mux H */

+#define MUX_PA21H_GCLK_IO5                 7

+#define PINMUX_PA21H_GCLK_IO5      ((PIN_PA21H_GCLK_IO5 << 16) | MUX_PA21H_GCLK_IO5)

+#define PORT_PA21H_GCLK_IO5        (1u << 21)

+#define PIN_PB11H_GCLK_IO5                43  /**< \brief GCLK signal: IO5 on PB11 mux H */

+#define MUX_PB11H_GCLK_IO5                 7

+#define PINMUX_PB11H_GCLK_IO5      ((PIN_PB11H_GCLK_IO5 << 16) | MUX_PB11H_GCLK_IO5)

+#define PORT_PB11H_GCLK_IO5        (1u << 11)

+#define PIN_PA22H_GCLK_IO6                22  /**< \brief GCLK signal: IO6 on PA22 mux H */

+#define MUX_PA22H_GCLK_IO6                 7

+#define PINMUX_PA22H_GCLK_IO6      ((PIN_PA22H_GCLK_IO6 << 16) | MUX_PA22H_GCLK_IO6)

+#define PORT_PA22H_GCLK_IO6        (1u << 22)

+#define PIN_PB12H_GCLK_IO6                44  /**< \brief GCLK signal: IO6 on PB12 mux H */

+#define MUX_PB12H_GCLK_IO6                 7

+#define PINMUX_PB12H_GCLK_IO6      ((PIN_PB12H_GCLK_IO6 << 16) | MUX_PB12H_GCLK_IO6)

+#define PORT_PB12H_GCLK_IO6        (1u << 12)

+#define PIN_PA23H_GCLK_IO7                23  /**< \brief GCLK signal: IO7 on PA23 mux H */

+#define MUX_PA23H_GCLK_IO7                 7

+#define PINMUX_PA23H_GCLK_IO7      ((PIN_PA23H_GCLK_IO7 << 16) | MUX_PA23H_GCLK_IO7)

+#define PORT_PA23H_GCLK_IO7        (1u << 23)

+#define PIN_PB13H_GCLK_IO7                45  /**< \brief GCLK signal: IO7 on PB13 mux H */

+#define MUX_PB13H_GCLK_IO7                 7

+#define PINMUX_PB13H_GCLK_IO7      ((PIN_PB13H_GCLK_IO7 << 16) | MUX_PB13H_GCLK_IO7)

+#define PORT_PB13H_GCLK_IO7        (1u << 13)

+/* ========== PORT definition for EIC peripheral ========== */

+#define PIN_PA16A_EIC_EXTINT0             16  /**< \brief EIC signal: EXTINT0 on PA16 mux A */

+#define MUX_PA16A_EIC_EXTINT0              0

+#define PINMUX_PA16A_EIC_EXTINT0   ((PIN_PA16A_EIC_EXTINT0 << 16) | MUX_PA16A_EIC_EXTINT0)

+#define PORT_PA16A_EIC_EXTINT0     (1u << 16)

+#define PIN_PB00A_EIC_EXTINT0             32  /**< \brief EIC signal: EXTINT0 on PB00 mux A */

+#define MUX_PB00A_EIC_EXTINT0              0

+#define PINMUX_PB00A_EIC_EXTINT0   ((PIN_PB00A_EIC_EXTINT0 << 16) | MUX_PB00A_EIC_EXTINT0)

+#define PORT_PB00A_EIC_EXTINT0     (1u <<  0)

+#define PIN_PB16A_EIC_EXTINT0             48  /**< \brief EIC signal: EXTINT0 on PB16 mux A */

+#define MUX_PB16A_EIC_EXTINT0              0

+#define PINMUX_PB16A_EIC_EXTINT0   ((PIN_PB16A_EIC_EXTINT0 << 16) | MUX_PB16A_EIC_EXTINT0)

+#define PORT_PB16A_EIC_EXTINT0     (1u << 16)

+#define PIN_PA00A_EIC_EXTINT0              0  /**< \brief EIC signal: EXTINT0 on PA00 mux A */

+#define MUX_PA00A_EIC_EXTINT0              0

+#define PINMUX_PA00A_EIC_EXTINT0   ((PIN_PA00A_EIC_EXTINT0 << 16) | MUX_PA00A_EIC_EXTINT0)

+#define PORT_PA00A_EIC_EXTINT0     (1u <<  0)

+#define PIN_PA17A_EIC_EXTINT1             17  /**< \brief EIC signal: EXTINT1 on PA17 mux A */

+#define MUX_PA17A_EIC_EXTINT1              0

+#define PINMUX_PA17A_EIC_EXTINT1   ((PIN_PA17A_EIC_EXTINT1 << 16) | MUX_PA17A_EIC_EXTINT1)

+#define PORT_PA17A_EIC_EXTINT1     (1u << 17)

+#define PIN_PB01A_EIC_EXTINT1             33  /**< \brief EIC signal: EXTINT1 on PB01 mux A */

+#define MUX_PB01A_EIC_EXTINT1              0

+#define PINMUX_PB01A_EIC_EXTINT1   ((PIN_PB01A_EIC_EXTINT1 << 16) | MUX_PB01A_EIC_EXTINT1)

+#define PORT_PB01A_EIC_EXTINT1     (1u <<  1)

+#define PIN_PB17A_EIC_EXTINT1             49  /**< \brief EIC signal: EXTINT1 on PB17 mux A */

+#define MUX_PB17A_EIC_EXTINT1              0

+#define PINMUX_PB17A_EIC_EXTINT1   ((PIN_PB17A_EIC_EXTINT1 << 16) | MUX_PB17A_EIC_EXTINT1)

+#define PORT_PB17A_EIC_EXTINT1     (1u << 17)

+#define PIN_PA01A_EIC_EXTINT1              1  /**< \brief EIC signal: EXTINT1 on PA01 mux A */

+#define MUX_PA01A_EIC_EXTINT1              0

+#define PINMUX_PA01A_EIC_EXTINT1   ((PIN_PA01A_EIC_EXTINT1 << 16) | MUX_PA01A_EIC_EXTINT1)

+#define PORT_PA01A_EIC_EXTINT1     (1u <<  1)

+#define PIN_PA02A_EIC_EXTINT2              2  /**< \brief EIC signal: EXTINT2 on PA02 mux A */

+#define MUX_PA02A_EIC_EXTINT2              0

+#define PINMUX_PA02A_EIC_EXTINT2   ((PIN_PA02A_EIC_EXTINT2 << 16) | MUX_PA02A_EIC_EXTINT2)

+#define PORT_PA02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA18A_EIC_EXTINT2             18  /**< \brief EIC signal: EXTINT2 on PA18 mux A */

+#define MUX_PA18A_EIC_EXTINT2              0

+#define PINMUX_PA18A_EIC_EXTINT2   ((PIN_PA18A_EIC_EXTINT2 << 16) | MUX_PA18A_EIC_EXTINT2)

+#define PORT_PA18A_EIC_EXTINT2     (1u << 18)

+#define PIN_PB02A_EIC_EXTINT2             34  /**< \brief EIC signal: EXTINT2 on PB02 mux A */

+#define MUX_PB02A_EIC_EXTINT2              0

+#define PINMUX_PB02A_EIC_EXTINT2   ((PIN_PB02A_EIC_EXTINT2 << 16) | MUX_PB02A_EIC_EXTINT2)

+#define PORT_PB02A_EIC_EXTINT2     (1u <<  2)

+#define PIN_PA03A_EIC_EXTINT3              3  /**< \brief EIC signal: EXTINT3 on PA03 mux A */

+#define MUX_PA03A_EIC_EXTINT3              0

+#define PINMUX_PA03A_EIC_EXTINT3   ((PIN_PA03A_EIC_EXTINT3 << 16) | MUX_PA03A_EIC_EXTINT3)

+#define PORT_PA03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA19A_EIC_EXTINT3             19  /**< \brief EIC signal: EXTINT3 on PA19 mux A */

+#define MUX_PA19A_EIC_EXTINT3              0

+#define PINMUX_PA19A_EIC_EXTINT3   ((PIN_PA19A_EIC_EXTINT3 << 16) | MUX_PA19A_EIC_EXTINT3)

+#define PORT_PA19A_EIC_EXTINT3     (1u << 19)

+#define PIN_PB03A_EIC_EXTINT3             35  /**< \brief EIC signal: EXTINT3 on PB03 mux A */

+#define MUX_PB03A_EIC_EXTINT3              0

+#define PINMUX_PB03A_EIC_EXTINT3   ((PIN_PB03A_EIC_EXTINT3 << 16) | MUX_PB03A_EIC_EXTINT3)

+#define PORT_PB03A_EIC_EXTINT3     (1u <<  3)

+#define PIN_PA04A_EIC_EXTINT4              4  /**< \brief EIC signal: EXTINT4 on PA04 mux A */

+#define MUX_PA04A_EIC_EXTINT4              0

+#define PINMUX_PA04A_EIC_EXTINT4   ((PIN_PA04A_EIC_EXTINT4 << 16) | MUX_PA04A_EIC_EXTINT4)

+#define PORT_PA04A_EIC_EXTINT4     (1u <<  4)

+#define PIN_PA20A_EIC_EXTINT4             20  /**< \brief EIC signal: EXTINT4 on PA20 mux A */

+#define MUX_PA20A_EIC_EXTINT4              0

+#define PINMUX_PA20A_EIC_EXTINT4   ((PIN_PA20A_EIC_EXTINT4 << 16) | MUX_PA20A_EIC_EXTINT4)

+#define PORT_PA20A_EIC_EXTINT4     (1u << 20)

+#define PIN_PB04A_EIC_EXTINT4             36  /**< \brief EIC signal: EXTINT4 on PB04 mux A */

+#define MUX_PB04A_EIC_EXTINT4              0

+#define PINMUX_PB04A_EIC_EXTINT4   ((PIN_PB04A_EIC_EXTINT4 << 16) | MUX_PB04A_EIC_EXTINT4)

+#define PORT_PB04A_EIC_EXTINT4     (1u <<  4)

+#define PIN_PA05A_EIC_EXTINT5              5  /**< \brief EIC signal: EXTINT5 on PA05 mux A */

+#define MUX_PA05A_EIC_EXTINT5              0

+#define PINMUX_PA05A_EIC_EXTINT5   ((PIN_PA05A_EIC_EXTINT5 << 16) | MUX_PA05A_EIC_EXTINT5)

+#define PORT_PA05A_EIC_EXTINT5     (1u <<  5)

+#define PIN_PA21A_EIC_EXTINT5             21  /**< \brief EIC signal: EXTINT5 on PA21 mux A */

+#define MUX_PA21A_EIC_EXTINT5              0

+#define PINMUX_PA21A_EIC_EXTINT5   ((PIN_PA21A_EIC_EXTINT5 << 16) | MUX_PA21A_EIC_EXTINT5)

+#define PORT_PA21A_EIC_EXTINT5     (1u << 21)

+#define PIN_PB05A_EIC_EXTINT5             37  /**< \brief EIC signal: EXTINT5 on PB05 mux A */

+#define MUX_PB05A_EIC_EXTINT5              0

+#define PINMUX_PB05A_EIC_EXTINT5   ((PIN_PB05A_EIC_EXTINT5 << 16) | MUX_PB05A_EIC_EXTINT5)

+#define PORT_PB05A_EIC_EXTINT5     (1u <<  5)

+#define PIN_PA06A_EIC_EXTINT6              6  /**< \brief EIC signal: EXTINT6 on PA06 mux A */

+#define MUX_PA06A_EIC_EXTINT6              0

+#define PINMUX_PA06A_EIC_EXTINT6   ((PIN_PA06A_EIC_EXTINT6 << 16) | MUX_PA06A_EIC_EXTINT6)

+#define PORT_PA06A_EIC_EXTINT6     (1u <<  6)

+#define PIN_PA22A_EIC_EXTINT6             22  /**< \brief EIC signal: EXTINT6 on PA22 mux A */

+#define MUX_PA22A_EIC_EXTINT6              0

+#define PINMUX_PA22A_EIC_EXTINT6   ((PIN_PA22A_EIC_EXTINT6 << 16) | MUX_PA22A_EIC_EXTINT6)

+#define PORT_PA22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PB06A_EIC_EXTINT6             38  /**< \brief EIC signal: EXTINT6 on PB06 mux A */

+#define MUX_PB06A_EIC_EXTINT6              0

+#define PINMUX_PB06A_EIC_EXTINT6   ((PIN_PB06A_EIC_EXTINT6 << 16) | MUX_PB06A_EIC_EXTINT6)

+#define PORT_PB06A_EIC_EXTINT6     (1u <<  6)

+#define PIN_PB22A_EIC_EXTINT6             54  /**< \brief EIC signal: EXTINT6 on PB22 mux A */

+#define MUX_PB22A_EIC_EXTINT6              0

+#define PINMUX_PB22A_EIC_EXTINT6   ((PIN_PB22A_EIC_EXTINT6 << 16) | MUX_PB22A_EIC_EXTINT6)

+#define PORT_PB22A_EIC_EXTINT6     (1u << 22)

+#define PIN_PA07A_EIC_EXTINT7              7  /**< \brief EIC signal: EXTINT7 on PA07 mux A */

+#define MUX_PA07A_EIC_EXTINT7              0

+#define PINMUX_PA07A_EIC_EXTINT7   ((PIN_PA07A_EIC_EXTINT7 << 16) | MUX_PA07A_EIC_EXTINT7)

+#define PORT_PA07A_EIC_EXTINT7     (1u <<  7)

+#define PIN_PA23A_EIC_EXTINT7             23  /**< \brief EIC signal: EXTINT7 on PA23 mux A */

+#define MUX_PA23A_EIC_EXTINT7              0

+#define PINMUX_PA23A_EIC_EXTINT7   ((PIN_PA23A_EIC_EXTINT7 << 16) | MUX_PA23A_EIC_EXTINT7)

+#define PORT_PA23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PB07A_EIC_EXTINT7             39  /**< \brief EIC signal: EXTINT7 on PB07 mux A */

+#define MUX_PB07A_EIC_EXTINT7              0

+#define PINMUX_PB07A_EIC_EXTINT7   ((PIN_PB07A_EIC_EXTINT7 << 16) | MUX_PB07A_EIC_EXTINT7)

+#define PORT_PB07A_EIC_EXTINT7     (1u <<  7)

+#define PIN_PB23A_EIC_EXTINT7             55  /**< \brief EIC signal: EXTINT7 on PB23 mux A */

+#define MUX_PB23A_EIC_EXTINT7              0

+#define PINMUX_PB23A_EIC_EXTINT7   ((PIN_PB23A_EIC_EXTINT7 << 16) | MUX_PB23A_EIC_EXTINT7)

+#define PORT_PB23A_EIC_EXTINT7     (1u << 23)

+#define PIN_PA28A_EIC_EXTINT8             28  /**< \brief EIC signal: EXTINT8 on PA28 mux A */

+#define MUX_PA28A_EIC_EXTINT8              0

+#define PINMUX_PA28A_EIC_EXTINT8   ((PIN_PA28A_EIC_EXTINT8 << 16) | MUX_PA28A_EIC_EXTINT8)

+#define PORT_PA28A_EIC_EXTINT8     (1u << 28)

+#define PIN_PB08A_EIC_EXTINT8             40  /**< \brief EIC signal: EXTINT8 on PB08 mux A */

+#define MUX_PB08A_EIC_EXTINT8              0

+#define PINMUX_PB08A_EIC_EXTINT8   ((PIN_PB08A_EIC_EXTINT8 << 16) | MUX_PB08A_EIC_EXTINT8)

+#define PORT_PB08A_EIC_EXTINT8     (1u <<  8)

+#define PIN_PA09A_EIC_EXTINT9              9  /**< \brief EIC signal: EXTINT9 on PA09 mux A */

+#define MUX_PA09A_EIC_EXTINT9              0

+#define PINMUX_PA09A_EIC_EXTINT9   ((PIN_PA09A_EIC_EXTINT9 << 16) | MUX_PA09A_EIC_EXTINT9)

+#define PORT_PA09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PB09A_EIC_EXTINT9             41  /**< \brief EIC signal: EXTINT9 on PB09 mux A */

+#define MUX_PB09A_EIC_EXTINT9              0

+#define PINMUX_PB09A_EIC_EXTINT9   ((PIN_PB09A_EIC_EXTINT9 << 16) | MUX_PB09A_EIC_EXTINT9)

+#define PORT_PB09A_EIC_EXTINT9     (1u <<  9)

+#define PIN_PA10A_EIC_EXTINT10            10  /**< \brief EIC signal: EXTINT10 on PA10 mux A */

+#define MUX_PA10A_EIC_EXTINT10             0

+#define PINMUX_PA10A_EIC_EXTINT10  ((PIN_PA10A_EIC_EXTINT10 << 16) | MUX_PA10A_EIC_EXTINT10)

+#define PORT_PA10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA30A_EIC_EXTINT10            30  /**< \brief EIC signal: EXTINT10 on PA30 mux A */

+#define MUX_PA30A_EIC_EXTINT10             0

+#define PINMUX_PA30A_EIC_EXTINT10  ((PIN_PA30A_EIC_EXTINT10 << 16) | MUX_PA30A_EIC_EXTINT10)

+#define PORT_PA30A_EIC_EXTINT10    (1u << 30)

+#define PIN_PB10A_EIC_EXTINT10            42  /**< \brief EIC signal: EXTINT10 on PB10 mux A */

+#define MUX_PB10A_EIC_EXTINT10             0

+#define PINMUX_PB10A_EIC_EXTINT10  ((PIN_PB10A_EIC_EXTINT10 << 16) | MUX_PB10A_EIC_EXTINT10)

+#define PORT_PB10A_EIC_EXTINT10    (1u << 10)

+#define PIN_PA11A_EIC_EXTINT11            11  /**< \brief EIC signal: EXTINT11 on PA11 mux A */

+#define MUX_PA11A_EIC_EXTINT11             0

+#define PINMUX_PA11A_EIC_EXTINT11  ((PIN_PA11A_EIC_EXTINT11 << 16) | MUX_PA11A_EIC_EXTINT11)

+#define PORT_PA11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA31A_EIC_EXTINT11            31  /**< \brief EIC signal: EXTINT11 on PA31 mux A */

+#define MUX_PA31A_EIC_EXTINT11             0

+#define PINMUX_PA31A_EIC_EXTINT11  ((PIN_PA31A_EIC_EXTINT11 << 16) | MUX_PA31A_EIC_EXTINT11)

+#define PORT_PA31A_EIC_EXTINT11    (1u << 31)

+#define PIN_PB11A_EIC_EXTINT11            43  /**< \brief EIC signal: EXTINT11 on PB11 mux A */

+#define MUX_PB11A_EIC_EXTINT11             0

+#define PINMUX_PB11A_EIC_EXTINT11  ((PIN_PB11A_EIC_EXTINT11 << 16) | MUX_PB11A_EIC_EXTINT11)

+#define PORT_PB11A_EIC_EXTINT11    (1u << 11)

+#define PIN_PA12A_EIC_EXTINT12            12  /**< \brief EIC signal: EXTINT12 on PA12 mux A */

+#define MUX_PA12A_EIC_EXTINT12             0

+#define PINMUX_PA12A_EIC_EXTINT12  ((PIN_PA12A_EIC_EXTINT12 << 16) | MUX_PA12A_EIC_EXTINT12)

+#define PORT_PA12A_EIC_EXTINT12    (1u << 12)

+#define PIN_PA24A_EIC_EXTINT12            24  /**< \brief EIC signal: EXTINT12 on PA24 mux A */

+#define MUX_PA24A_EIC_EXTINT12             0

+#define PINMUX_PA24A_EIC_EXTINT12  ((PIN_PA24A_EIC_EXTINT12 << 16) | MUX_PA24A_EIC_EXTINT12)

+#define PORT_PA24A_EIC_EXTINT12    (1u << 24)

+#define PIN_PB12A_EIC_EXTINT12            44  /**< \brief EIC signal: EXTINT12 on PB12 mux A */

+#define MUX_PB12A_EIC_EXTINT12             0

+#define PINMUX_PB12A_EIC_EXTINT12  ((PIN_PB12A_EIC_EXTINT12 << 16) | MUX_PB12A_EIC_EXTINT12)

+#define PORT_PB12A_EIC_EXTINT12    (1u << 12)

+#define PIN_PA13A_EIC_EXTINT13            13  /**< \brief EIC signal: EXTINT13 on PA13 mux A */

+#define MUX_PA13A_EIC_EXTINT13             0

+#define PINMUX_PA13A_EIC_EXTINT13  ((PIN_PA13A_EIC_EXTINT13 << 16) | MUX_PA13A_EIC_EXTINT13)

+#define PORT_PA13A_EIC_EXTINT13    (1u << 13)

+#define PIN_PA25A_EIC_EXTINT13            25  /**< \brief EIC signal: EXTINT13 on PA25 mux A */

+#define MUX_PA25A_EIC_EXTINT13             0

+#define PINMUX_PA25A_EIC_EXTINT13  ((PIN_PA25A_EIC_EXTINT13 << 16) | MUX_PA25A_EIC_EXTINT13)

+#define PORT_PA25A_EIC_EXTINT13    (1u << 25)

+#define PIN_PB13A_EIC_EXTINT13            45  /**< \brief EIC signal: EXTINT13 on PB13 mux A */

+#define MUX_PB13A_EIC_EXTINT13             0

+#define PINMUX_PB13A_EIC_EXTINT13  ((PIN_PB13A_EIC_EXTINT13 << 16) | MUX_PB13A_EIC_EXTINT13)

+#define PORT_PB13A_EIC_EXTINT13    (1u << 13)

+#define PIN_PB14A_EIC_EXTINT14            46  /**< \brief EIC signal: EXTINT14 on PB14 mux A */

+#define MUX_PB14A_EIC_EXTINT14             0

+#define PINMUX_PB14A_EIC_EXTINT14  ((PIN_PB14A_EIC_EXTINT14 << 16) | MUX_PB14A_EIC_EXTINT14)

+#define PORT_PB14A_EIC_EXTINT14    (1u << 14)

+#define PIN_PB30A_EIC_EXTINT14            62  /**< \brief EIC signal: EXTINT14 on PB30 mux A */

+#define MUX_PB30A_EIC_EXTINT14             0

+#define PINMUX_PB30A_EIC_EXTINT14  ((PIN_PB30A_EIC_EXTINT14 << 16) | MUX_PB30A_EIC_EXTINT14)

+#define PORT_PB30A_EIC_EXTINT14    (1u << 30)

+#define PIN_PA14A_EIC_EXTINT14            14  /**< \brief EIC signal: EXTINT14 on PA14 mux A */

+#define MUX_PA14A_EIC_EXTINT14             0

+#define PINMUX_PA14A_EIC_EXTINT14  ((PIN_PA14A_EIC_EXTINT14 << 16) | MUX_PA14A_EIC_EXTINT14)

+#define PORT_PA14A_EIC_EXTINT14    (1u << 14)

+#define PIN_PA27A_EIC_EXTINT15            27  /**< \brief EIC signal: EXTINT15 on PA27 mux A */

+#define MUX_PA27A_EIC_EXTINT15             0

+#define PINMUX_PA27A_EIC_EXTINT15  ((PIN_PA27A_EIC_EXTINT15 << 16) | MUX_PA27A_EIC_EXTINT15)

+#define PORT_PA27A_EIC_EXTINT15    (1u << 27)

+#define PIN_PB15A_EIC_EXTINT15            47  /**< \brief EIC signal: EXTINT15 on PB15 mux A */

+#define MUX_PB15A_EIC_EXTINT15             0

+#define PINMUX_PB15A_EIC_EXTINT15  ((PIN_PB15A_EIC_EXTINT15 << 16) | MUX_PB15A_EIC_EXTINT15)

+#define PORT_PB15A_EIC_EXTINT15    (1u << 15)

+#define PIN_PB31A_EIC_EXTINT15            63  /**< \brief EIC signal: EXTINT15 on PB31 mux A */

+#define MUX_PB31A_EIC_EXTINT15             0

+#define PINMUX_PB31A_EIC_EXTINT15  ((PIN_PB31A_EIC_EXTINT15 << 16) | MUX_PB31A_EIC_EXTINT15)

+#define PORT_PB31A_EIC_EXTINT15    (1u << 31)

+#define PIN_PA15A_EIC_EXTINT15            15  /**< \brief EIC signal: EXTINT15 on PA15 mux A */

+#define MUX_PA15A_EIC_EXTINT15             0

+#define PINMUX_PA15A_EIC_EXTINT15  ((PIN_PA15A_EIC_EXTINT15 << 16) | MUX_PA15A_EIC_EXTINT15)

+#define PORT_PA15A_EIC_EXTINT15    (1u << 15)

+#define PIN_PA08A_EIC_NMI                  8  /**< \brief EIC signal: NMI on PA08 mux A */

+#define MUX_PA08A_EIC_NMI                  0

+#define PINMUX_PA08A_EIC_NMI       ((PIN_PA08A_EIC_NMI << 16) | MUX_PA08A_EIC_NMI)

+#define PORT_PA08A_EIC_NMI         (1u <<  8)

+/* ========== PORT definition for SERCOM0 peripheral ========== */

+#define PIN_PA04D_SERCOM0_PAD0             4  /**< \brief SERCOM0 signal: PAD0 on PA04 mux D */

+#define MUX_PA04D_SERCOM0_PAD0             3

+#define PINMUX_PA04D_SERCOM0_PAD0  ((PIN_PA04D_SERCOM0_PAD0 << 16) | MUX_PA04D_SERCOM0_PAD0)

+#define PORT_PA04D_SERCOM0_PAD0    (1u <<  4)

+#define PIN_PA08C_SERCOM0_PAD0             8  /**< \brief SERCOM0 signal: PAD0 on PA08 mux C */

+#define MUX_PA08C_SERCOM0_PAD0             2

+#define PINMUX_PA08C_SERCOM0_PAD0  ((PIN_PA08C_SERCOM0_PAD0 << 16) | MUX_PA08C_SERCOM0_PAD0)

+#define PORT_PA08C_SERCOM0_PAD0    (1u <<  8)

+#define PIN_PA05D_SERCOM0_PAD1             5  /**< \brief SERCOM0 signal: PAD1 on PA05 mux D */

+#define MUX_PA05D_SERCOM0_PAD1             3

+#define PINMUX_PA05D_SERCOM0_PAD1  ((PIN_PA05D_SERCOM0_PAD1 << 16) | MUX_PA05D_SERCOM0_PAD1)

+#define PORT_PA05D_SERCOM0_PAD1    (1u <<  5)

+#define PIN_PA09C_SERCOM0_PAD1             9  /**< \brief SERCOM0 signal: PAD1 on PA09 mux C */

+#define MUX_PA09C_SERCOM0_PAD1             2

+#define PINMUX_PA09C_SERCOM0_PAD1  ((PIN_PA09C_SERCOM0_PAD1 << 16) | MUX_PA09C_SERCOM0_PAD1)

+#define PORT_PA09C_SERCOM0_PAD1    (1u <<  9)

+#define PIN_PA06D_SERCOM0_PAD2             6  /**< \brief SERCOM0 signal: PAD2 on PA06 mux D */

+#define MUX_PA06D_SERCOM0_PAD2             3

+#define PINMUX_PA06D_SERCOM0_PAD2  ((PIN_PA06D_SERCOM0_PAD2 << 16) | MUX_PA06D_SERCOM0_PAD2)

+#define PORT_PA06D_SERCOM0_PAD2    (1u <<  6)

+#define PIN_PA10C_SERCOM0_PAD2            10  /**< \brief SERCOM0 signal: PAD2 on PA10 mux C */

+#define MUX_PA10C_SERCOM0_PAD2             2

+#define PINMUX_PA10C_SERCOM0_PAD2  ((PIN_PA10C_SERCOM0_PAD2 << 16) | MUX_PA10C_SERCOM0_PAD2)

+#define PORT_PA10C_SERCOM0_PAD2    (1u << 10)

+#define PIN_PA07D_SERCOM0_PAD3             7  /**< \brief SERCOM0 signal: PAD3 on PA07 mux D */

+#define MUX_PA07D_SERCOM0_PAD3             3

+#define PINMUX_PA07D_SERCOM0_PAD3  ((PIN_PA07D_SERCOM0_PAD3 << 16) | MUX_PA07D_SERCOM0_PAD3)

+#define PORT_PA07D_SERCOM0_PAD3    (1u <<  7)

+#define PIN_PA11C_SERCOM0_PAD3            11  /**< \brief SERCOM0 signal: PAD3 on PA11 mux C */

+#define MUX_PA11C_SERCOM0_PAD3             2

+#define PINMUX_PA11C_SERCOM0_PAD3  ((PIN_PA11C_SERCOM0_PAD3 << 16) | MUX_PA11C_SERCOM0_PAD3)

+#define PORT_PA11C_SERCOM0_PAD3    (1u << 11)

+/* ========== PORT definition for SERCOM1 peripheral ========== */

+#define PIN_PA16C_SERCOM1_PAD0            16  /**< \brief SERCOM1 signal: PAD0 on PA16 mux C */

+#define MUX_PA16C_SERCOM1_PAD0             2

+#define PINMUX_PA16C_SERCOM1_PAD0  ((PIN_PA16C_SERCOM1_PAD0 << 16) | MUX_PA16C_SERCOM1_PAD0)

+#define PORT_PA16C_SERCOM1_PAD0    (1u << 16)

+#define PIN_PA00D_SERCOM1_PAD0             0  /**< \brief SERCOM1 signal: PAD0 on PA00 mux D */

+#define MUX_PA00D_SERCOM1_PAD0             3

+#define PINMUX_PA00D_SERCOM1_PAD0  ((PIN_PA00D_SERCOM1_PAD0 << 16) | MUX_PA00D_SERCOM1_PAD0)

+#define PORT_PA00D_SERCOM1_PAD0    (1u <<  0)

+#define PIN_PA17C_SERCOM1_PAD1            17  /**< \brief SERCOM1 signal: PAD1 on PA17 mux C */

+#define MUX_PA17C_SERCOM1_PAD1             2

+#define PINMUX_PA17C_SERCOM1_PAD1  ((PIN_PA17C_SERCOM1_PAD1 << 16) | MUX_PA17C_SERCOM1_PAD1)

+#define PORT_PA17C_SERCOM1_PAD1    (1u << 17)

+#define PIN_PA01D_SERCOM1_PAD1             1  /**< \brief SERCOM1 signal: PAD1 on PA01 mux D */

+#define MUX_PA01D_SERCOM1_PAD1             3

+#define PINMUX_PA01D_SERCOM1_PAD1  ((PIN_PA01D_SERCOM1_PAD1 << 16) | MUX_PA01D_SERCOM1_PAD1)

+#define PORT_PA01D_SERCOM1_PAD1    (1u <<  1)

+#define PIN_PA30D_SERCOM1_PAD2            30  /**< \brief SERCOM1 signal: PAD2 on PA30 mux D */

+#define MUX_PA30D_SERCOM1_PAD2             3

+#define PINMUX_PA30D_SERCOM1_PAD2  ((PIN_PA30D_SERCOM1_PAD2 << 16) | MUX_PA30D_SERCOM1_PAD2)

+#define PORT_PA30D_SERCOM1_PAD2    (1u << 30)

+#define PIN_PA18C_SERCOM1_PAD2            18  /**< \brief SERCOM1 signal: PAD2 on PA18 mux C */

+#define MUX_PA18C_SERCOM1_PAD2             2

+#define PINMUX_PA18C_SERCOM1_PAD2  ((PIN_PA18C_SERCOM1_PAD2 << 16) | MUX_PA18C_SERCOM1_PAD2)

+#define PORT_PA18C_SERCOM1_PAD2    (1u << 18)

+#define PIN_PA31D_SERCOM1_PAD3            31  /**< \brief SERCOM1 signal: PAD3 on PA31 mux D */

+#define MUX_PA31D_SERCOM1_PAD3             3

+#define PINMUX_PA31D_SERCOM1_PAD3  ((PIN_PA31D_SERCOM1_PAD3 << 16) | MUX_PA31D_SERCOM1_PAD3)

+#define PORT_PA31D_SERCOM1_PAD3    (1u << 31)

+#define PIN_PA19C_SERCOM1_PAD3            19  /**< \brief SERCOM1 signal: PAD3 on PA19 mux C */

+#define MUX_PA19C_SERCOM1_PAD3             2

+#define PINMUX_PA19C_SERCOM1_PAD3  ((PIN_PA19C_SERCOM1_PAD3 << 16) | MUX_PA19C_SERCOM1_PAD3)

+#define PORT_PA19C_SERCOM1_PAD3    (1u << 19)

+/* ========== PORT definition for SERCOM2 peripheral ========== */

+#define PIN_PA08D_SERCOM2_PAD0             8  /**< \brief SERCOM2 signal: PAD0 on PA08 mux D */

+#define MUX_PA08D_SERCOM2_PAD0             3

+#define PINMUX_PA08D_SERCOM2_PAD0  ((PIN_PA08D_SERCOM2_PAD0 << 16) | MUX_PA08D_SERCOM2_PAD0)

+#define PORT_PA08D_SERCOM2_PAD0    (1u <<  8)

+#define PIN_PA12C_SERCOM2_PAD0            12  /**< \brief SERCOM2 signal: PAD0 on PA12 mux C */

+#define MUX_PA12C_SERCOM2_PAD0             2

+#define PINMUX_PA12C_SERCOM2_PAD0  ((PIN_PA12C_SERCOM2_PAD0 << 16) | MUX_PA12C_SERCOM2_PAD0)

+#define PORT_PA12C_SERCOM2_PAD0    (1u << 12)

+#define PIN_PA09D_SERCOM2_PAD1             9  /**< \brief SERCOM2 signal: PAD1 on PA09 mux D */

+#define MUX_PA09D_SERCOM2_PAD1             3

+#define PINMUX_PA09D_SERCOM2_PAD1  ((PIN_PA09D_SERCOM2_PAD1 << 16) | MUX_PA09D_SERCOM2_PAD1)

+#define PORT_PA09D_SERCOM2_PAD1    (1u <<  9)

+#define PIN_PA13C_SERCOM2_PAD1            13  /**< \brief SERCOM2 signal: PAD1 on PA13 mux C */

+#define MUX_PA13C_SERCOM2_PAD1             2

+#define PINMUX_PA13C_SERCOM2_PAD1  ((PIN_PA13C_SERCOM2_PAD1 << 16) | MUX_PA13C_SERCOM2_PAD1)

+#define PORT_PA13C_SERCOM2_PAD1    (1u << 13)

+#define PIN_PA10D_SERCOM2_PAD2            10  /**< \brief SERCOM2 signal: PAD2 on PA10 mux D */

+#define MUX_PA10D_SERCOM2_PAD2             3

+#define PINMUX_PA10D_SERCOM2_PAD2  ((PIN_PA10D_SERCOM2_PAD2 << 16) | MUX_PA10D_SERCOM2_PAD2)

+#define PORT_PA10D_SERCOM2_PAD2    (1u << 10)

+#define PIN_PA14C_SERCOM2_PAD2            14  /**< \brief SERCOM2 signal: PAD2 on PA14 mux C */

+#define MUX_PA14C_SERCOM2_PAD2             2

+#define PINMUX_PA14C_SERCOM2_PAD2  ((PIN_PA14C_SERCOM2_PAD2 << 16) | MUX_PA14C_SERCOM2_PAD2)

+#define PORT_PA14C_SERCOM2_PAD2    (1u << 14)

+#define PIN_PA11D_SERCOM2_PAD3            11  /**< \brief SERCOM2 signal: PAD3 on PA11 mux D */

+#define MUX_PA11D_SERCOM2_PAD3             3

+#define PINMUX_PA11D_SERCOM2_PAD3  ((PIN_PA11D_SERCOM2_PAD3 << 16) | MUX_PA11D_SERCOM2_PAD3)

+#define PORT_PA11D_SERCOM2_PAD3    (1u << 11)

+#define PIN_PA15C_SERCOM2_PAD3            15  /**< \brief SERCOM2 signal: PAD3 on PA15 mux C */

+#define MUX_PA15C_SERCOM2_PAD3             2

+#define PINMUX_PA15C_SERCOM2_PAD3  ((PIN_PA15C_SERCOM2_PAD3 << 16) | MUX_PA15C_SERCOM2_PAD3)

+#define PORT_PA15C_SERCOM2_PAD3    (1u << 15)

+/* ========== PORT definition for SERCOM3 peripheral ========== */

+#define PIN_PA16D_SERCOM3_PAD0            16  /**< \brief SERCOM3 signal: PAD0 on PA16 mux D */

+#define MUX_PA16D_SERCOM3_PAD0             3

+#define PINMUX_PA16D_SERCOM3_PAD0  ((PIN_PA16D_SERCOM3_PAD0 << 16) | MUX_PA16D_SERCOM3_PAD0)

+#define PORT_PA16D_SERCOM3_PAD0    (1u << 16)

+#define PIN_PA22C_SERCOM3_PAD0            22  /**< \brief SERCOM3 signal: PAD0 on PA22 mux C */

+#define MUX_PA22C_SERCOM3_PAD0             2

+#define PINMUX_PA22C_SERCOM3_PAD0  ((PIN_PA22C_SERCOM3_PAD0 << 16) | MUX_PA22C_SERCOM3_PAD0)

+#define PORT_PA22C_SERCOM3_PAD0    (1u << 22)

+#define PIN_PA17D_SERCOM3_PAD1            17  /**< \brief SERCOM3 signal: PAD1 on PA17 mux D */

+#define MUX_PA17D_SERCOM3_PAD1             3

+#define PINMUX_PA17D_SERCOM3_PAD1  ((PIN_PA17D_SERCOM3_PAD1 << 16) | MUX_PA17D_SERCOM3_PAD1)

+#define PORT_PA17D_SERCOM3_PAD1    (1u << 17)

+#define PIN_PA23C_SERCOM3_PAD1            23  /**< \brief SERCOM3 signal: PAD1 on PA23 mux C */

+#define MUX_PA23C_SERCOM3_PAD1             2

+#define PINMUX_PA23C_SERCOM3_PAD1  ((PIN_PA23C_SERCOM3_PAD1 << 16) | MUX_PA23C_SERCOM3_PAD1)

+#define PORT_PA23C_SERCOM3_PAD1    (1u << 23)

+#define PIN_PA18D_SERCOM3_PAD2            18  /**< \brief SERCOM3 signal: PAD2 on PA18 mux D */

+#define MUX_PA18D_SERCOM3_PAD2             3

+#define PINMUX_PA18D_SERCOM3_PAD2  ((PIN_PA18D_SERCOM3_PAD2 << 16) | MUX_PA18D_SERCOM3_PAD2)

+#define PORT_PA18D_SERCOM3_PAD2    (1u << 18)

+#define PIN_PA20D_SERCOM3_PAD2            20  /**< \brief SERCOM3 signal: PAD2 on PA20 mux D */

+#define MUX_PA20D_SERCOM3_PAD2             3

+#define PINMUX_PA20D_SERCOM3_PAD2  ((PIN_PA20D_SERCOM3_PAD2 << 16) | MUX_PA20D_SERCOM3_PAD2)

+#define PORT_PA20D_SERCOM3_PAD2    (1u << 20)

+#define PIN_PA24C_SERCOM3_PAD2            24  /**< \brief SERCOM3 signal: PAD2 on PA24 mux C */

+#define MUX_PA24C_SERCOM3_PAD2             2

+#define PINMUX_PA24C_SERCOM3_PAD2  ((PIN_PA24C_SERCOM3_PAD2 << 16) | MUX_PA24C_SERCOM3_PAD2)

+#define PORT_PA24C_SERCOM3_PAD2    (1u << 24)

+#define PIN_PA19D_SERCOM3_PAD3            19  /**< \brief SERCOM3 signal: PAD3 on PA19 mux D */

+#define MUX_PA19D_SERCOM3_PAD3             3

+#define PINMUX_PA19D_SERCOM3_PAD3  ((PIN_PA19D_SERCOM3_PAD3 << 16) | MUX_PA19D_SERCOM3_PAD3)

+#define PORT_PA19D_SERCOM3_PAD3    (1u << 19)

+#define PIN_PA21D_SERCOM3_PAD3            21  /**< \brief SERCOM3 signal: PAD3 on PA21 mux D */

+#define MUX_PA21D_SERCOM3_PAD3             3

+#define PINMUX_PA21D_SERCOM3_PAD3  ((PIN_PA21D_SERCOM3_PAD3 << 16) | MUX_PA21D_SERCOM3_PAD3)

+#define PORT_PA21D_SERCOM3_PAD3    (1u << 21)

+#define PIN_PA25C_SERCOM3_PAD3            25  /**< \brief SERCOM3 signal: PAD3 on PA25 mux C */

+#define MUX_PA25C_SERCOM3_PAD3             2

+#define PINMUX_PA25C_SERCOM3_PAD3  ((PIN_PA25C_SERCOM3_PAD3 << 16) | MUX_PA25C_SERCOM3_PAD3)

+#define PORT_PA25C_SERCOM3_PAD3    (1u << 25)

+/* ========== PORT definition for SERCOM4 peripheral ========== */

+#define PIN_PA12D_SERCOM4_PAD0            12  /**< \brief SERCOM4 signal: PAD0 on PA12 mux D */

+#define MUX_PA12D_SERCOM4_PAD0             3

+#define PINMUX_PA12D_SERCOM4_PAD0  ((PIN_PA12D_SERCOM4_PAD0 << 16) | MUX_PA12D_SERCOM4_PAD0)

+#define PORT_PA12D_SERCOM4_PAD0    (1u << 12)

+#define PIN_PB08D_SERCOM4_PAD0            40  /**< \brief SERCOM4 signal: PAD0 on PB08 mux D */

+#define MUX_PB08D_SERCOM4_PAD0             3

+#define PINMUX_PB08D_SERCOM4_PAD0  ((PIN_PB08D_SERCOM4_PAD0 << 16) | MUX_PB08D_SERCOM4_PAD0)

+#define PORT_PB08D_SERCOM4_PAD0    (1u <<  8)

+#define PIN_PB12C_SERCOM4_PAD0            44  /**< \brief SERCOM4 signal: PAD0 on PB12 mux C */

+#define MUX_PB12C_SERCOM4_PAD0             2

+#define PINMUX_PB12C_SERCOM4_PAD0  ((PIN_PB12C_SERCOM4_PAD0 << 16) | MUX_PB12C_SERCOM4_PAD0)

+#define PORT_PB12C_SERCOM4_PAD0    (1u << 12)

+#define PIN_PA13D_SERCOM4_PAD1            13  /**< \brief SERCOM4 signal: PAD1 on PA13 mux D */

+#define MUX_PA13D_SERCOM4_PAD1             3

+#define PINMUX_PA13D_SERCOM4_PAD1  ((PIN_PA13D_SERCOM4_PAD1 << 16) | MUX_PA13D_SERCOM4_PAD1)

+#define PORT_PA13D_SERCOM4_PAD1    (1u << 13)

+#define PIN_PB09D_SERCOM4_PAD1            41  /**< \brief SERCOM4 signal: PAD1 on PB09 mux D */

+#define MUX_PB09D_SERCOM4_PAD1             3

+#define PINMUX_PB09D_SERCOM4_PAD1  ((PIN_PB09D_SERCOM4_PAD1 << 16) | MUX_PB09D_SERCOM4_PAD1)

+#define PORT_PB09D_SERCOM4_PAD1    (1u <<  9)

+#define PIN_PB13C_SERCOM4_PAD1            45  /**< \brief SERCOM4 signal: PAD1 on PB13 mux C */

+#define MUX_PB13C_SERCOM4_PAD1             2

+#define PINMUX_PB13C_SERCOM4_PAD1  ((PIN_PB13C_SERCOM4_PAD1 << 16) | MUX_PB13C_SERCOM4_PAD1)

+#define PORT_PB13C_SERCOM4_PAD1    (1u << 13)

+#define PIN_PA14D_SERCOM4_PAD2            14  /**< \brief SERCOM4 signal: PAD2 on PA14 mux D */

+#define MUX_PA14D_SERCOM4_PAD2             3

+#define PINMUX_PA14D_SERCOM4_PAD2  ((PIN_PA14D_SERCOM4_PAD2 << 16) | MUX_PA14D_SERCOM4_PAD2)

+#define PORT_PA14D_SERCOM4_PAD2    (1u << 14)

+#define PIN_PB10D_SERCOM4_PAD2            42  /**< \brief SERCOM4 signal: PAD2 on PB10 mux D */

+#define MUX_PB10D_SERCOM4_PAD2             3

+#define PINMUX_PB10D_SERCOM4_PAD2  ((PIN_PB10D_SERCOM4_PAD2 << 16) | MUX_PB10D_SERCOM4_PAD2)

+#define PORT_PB10D_SERCOM4_PAD2    (1u << 10)

+#define PIN_PB14C_SERCOM4_PAD2            46  /**< \brief SERCOM4 signal: PAD2 on PB14 mux C */

+#define MUX_PB14C_SERCOM4_PAD2             2

+#define PINMUX_PB14C_SERCOM4_PAD2  ((PIN_PB14C_SERCOM4_PAD2 << 16) | MUX_PB14C_SERCOM4_PAD2)

+#define PORT_PB14C_SERCOM4_PAD2    (1u << 14)

+#define PIN_PA15D_SERCOM4_PAD3            15  /**< \brief SERCOM4 signal: PAD3 on PA15 mux D */

+#define MUX_PA15D_SERCOM4_PAD3             3

+#define PINMUX_PA15D_SERCOM4_PAD3  ((PIN_PA15D_SERCOM4_PAD3 << 16) | MUX_PA15D_SERCOM4_PAD3)

+#define PORT_PA15D_SERCOM4_PAD3    (1u << 15)

+#define PIN_PB11D_SERCOM4_PAD3            43  /**< \brief SERCOM4 signal: PAD3 on PB11 mux D */

+#define MUX_PB11D_SERCOM4_PAD3             3

+#define PINMUX_PB11D_SERCOM4_PAD3  ((PIN_PB11D_SERCOM4_PAD3 << 16) | MUX_PB11D_SERCOM4_PAD3)

+#define PORT_PB11D_SERCOM4_PAD3    (1u << 11)

+#define PIN_PB15C_SERCOM4_PAD3            47  /**< \brief SERCOM4 signal: PAD3 on PB15 mux C */

+#define MUX_PB15C_SERCOM4_PAD3             2

+#define PINMUX_PB15C_SERCOM4_PAD3  ((PIN_PB15C_SERCOM4_PAD3 << 16) | MUX_PB15C_SERCOM4_PAD3)

+#define PORT_PB15C_SERCOM4_PAD3    (1u << 15)

+/* ========== PORT definition for SERCOM5 peripheral ========== */

+#define PIN_PA22D_SERCOM5_PAD0            22  /**< \brief SERCOM5 signal: PAD0 on PA22 mux D */

+#define MUX_PA22D_SERCOM5_PAD0             3

+#define PINMUX_PA22D_SERCOM5_PAD0  ((PIN_PA22D_SERCOM5_PAD0 << 16) | MUX_PA22D_SERCOM5_PAD0)

+#define PORT_PA22D_SERCOM5_PAD0    (1u << 22)

+#define PIN_PB02D_SERCOM5_PAD0            34  /**< \brief SERCOM5 signal: PAD0 on PB02 mux D */

+#define MUX_PB02D_SERCOM5_PAD0             3

+#define PINMUX_PB02D_SERCOM5_PAD0  ((PIN_PB02D_SERCOM5_PAD0 << 16) | MUX_PB02D_SERCOM5_PAD0)

+#define PORT_PB02D_SERCOM5_PAD0    (1u <<  2)

+#define PIN_PB30D_SERCOM5_PAD0            62  /**< \brief SERCOM5 signal: PAD0 on PB30 mux D */

+#define MUX_PB30D_SERCOM5_PAD0             3

+#define PINMUX_PB30D_SERCOM5_PAD0  ((PIN_PB30D_SERCOM5_PAD0 << 16) | MUX_PB30D_SERCOM5_PAD0)

+#define PORT_PB30D_SERCOM5_PAD0    (1u << 30)

+#define PIN_PB16C_SERCOM5_PAD0            48  /**< \brief SERCOM5 signal: PAD0 on PB16 mux C */

+#define MUX_PB16C_SERCOM5_PAD0             2

+#define PINMUX_PB16C_SERCOM5_PAD0  ((PIN_PB16C_SERCOM5_PAD0 << 16) | MUX_PB16C_SERCOM5_PAD0)

+#define PORT_PB16C_SERCOM5_PAD0    (1u << 16)

+#define PIN_PA23D_SERCOM5_PAD1            23  /**< \brief SERCOM5 signal: PAD1 on PA23 mux D */

+#define MUX_PA23D_SERCOM5_PAD1             3

+#define PINMUX_PA23D_SERCOM5_PAD1  ((PIN_PA23D_SERCOM5_PAD1 << 16) | MUX_PA23D_SERCOM5_PAD1)

+#define PORT_PA23D_SERCOM5_PAD1    (1u << 23)

+#define PIN_PB03D_SERCOM5_PAD1            35  /**< \brief SERCOM5 signal: PAD1 on PB03 mux D */

+#define MUX_PB03D_SERCOM5_PAD1             3

+#define PINMUX_PB03D_SERCOM5_PAD1  ((PIN_PB03D_SERCOM5_PAD1 << 16) | MUX_PB03D_SERCOM5_PAD1)

+#define PORT_PB03D_SERCOM5_PAD1    (1u <<  3)

+#define PIN_PB31D_SERCOM5_PAD1            63  /**< \brief SERCOM5 signal: PAD1 on PB31 mux D */

+#define MUX_PB31D_SERCOM5_PAD1             3

+#define PINMUX_PB31D_SERCOM5_PAD1  ((PIN_PB31D_SERCOM5_PAD1 << 16) | MUX_PB31D_SERCOM5_PAD1)

+#define PORT_PB31D_SERCOM5_PAD1    (1u << 31)

+#define PIN_PB17C_SERCOM5_PAD1            49  /**< \brief SERCOM5 signal: PAD1 on PB17 mux C */

+#define MUX_PB17C_SERCOM5_PAD1             2

+#define PINMUX_PB17C_SERCOM5_PAD1  ((PIN_PB17C_SERCOM5_PAD1 << 16) | MUX_PB17C_SERCOM5_PAD1)

+#define PORT_PB17C_SERCOM5_PAD1    (1u << 17)

+#define PIN_PA24D_SERCOM5_PAD2            24  /**< \brief SERCOM5 signal: PAD2 on PA24 mux D */

+#define MUX_PA24D_SERCOM5_PAD2             3

+#define PINMUX_PA24D_SERCOM5_PAD2  ((PIN_PA24D_SERCOM5_PAD2 << 16) | MUX_PA24D_SERCOM5_PAD2)

+#define PORT_PA24D_SERCOM5_PAD2    (1u << 24)

+#define PIN_PB00D_SERCOM5_PAD2            32  /**< \brief SERCOM5 signal: PAD2 on PB00 mux D */

+#define MUX_PB00D_SERCOM5_PAD2             3

+#define PINMUX_PB00D_SERCOM5_PAD2  ((PIN_PB00D_SERCOM5_PAD2 << 16) | MUX_PB00D_SERCOM5_PAD2)

+#define PORT_PB00D_SERCOM5_PAD2    (1u <<  0)

+#define PIN_PB22D_SERCOM5_PAD2            54  /**< \brief SERCOM5 signal: PAD2 on PB22 mux D */

+#define MUX_PB22D_SERCOM5_PAD2             3

+#define PINMUX_PB22D_SERCOM5_PAD2  ((PIN_PB22D_SERCOM5_PAD2 << 16) | MUX_PB22D_SERCOM5_PAD2)

+#define PORT_PB22D_SERCOM5_PAD2    (1u << 22)

+#define PIN_PA20C_SERCOM5_PAD2            20  /**< \brief SERCOM5 signal: PAD2 on PA20 mux C */

+#define MUX_PA20C_SERCOM5_PAD2             2

+#define PINMUX_PA20C_SERCOM5_PAD2  ((PIN_PA20C_SERCOM5_PAD2 << 16) | MUX_PA20C_SERCOM5_PAD2)

+#define PORT_PA20C_SERCOM5_PAD2    (1u << 20)

+#define PIN_PA25D_SERCOM5_PAD3            25  /**< \brief SERCOM5 signal: PAD3 on PA25 mux D */

+#define MUX_PA25D_SERCOM5_PAD3             3

+#define PINMUX_PA25D_SERCOM5_PAD3  ((PIN_PA25D_SERCOM5_PAD3 << 16) | MUX_PA25D_SERCOM5_PAD3)

+#define PORT_PA25D_SERCOM5_PAD3    (1u << 25)

+#define PIN_PB01D_SERCOM5_PAD3            33  /**< \brief SERCOM5 signal: PAD3 on PB01 mux D */

+#define MUX_PB01D_SERCOM5_PAD3             3

+#define PINMUX_PB01D_SERCOM5_PAD3  ((PIN_PB01D_SERCOM5_PAD3 << 16) | MUX_PB01D_SERCOM5_PAD3)

+#define PORT_PB01D_SERCOM5_PAD3    (1u <<  1)

+#define PIN_PB23D_SERCOM5_PAD3            55  /**< \brief SERCOM5 signal: PAD3 on PB23 mux D */

+#define MUX_PB23D_SERCOM5_PAD3             3

+#define PINMUX_PB23D_SERCOM5_PAD3  ((PIN_PB23D_SERCOM5_PAD3 << 16) | MUX_PB23D_SERCOM5_PAD3)

+#define PORT_PB23D_SERCOM5_PAD3    (1u << 23)

+#define PIN_PA21C_SERCOM5_PAD3            21  /**< \brief SERCOM5 signal: PAD3 on PA21 mux C */

+#define MUX_PA21C_SERCOM5_PAD3             2

+#define PINMUX_PA21C_SERCOM5_PAD3  ((PIN_PA21C_SERCOM5_PAD3 << 16) | MUX_PA21C_SERCOM5_PAD3)

+#define PORT_PA21C_SERCOM5_PAD3    (1u << 21)

+/* ========== PORT definition for TC0 peripheral ========== */

+#define PIN_PA04F_TC0_WO0                  4  /**< \brief TC0 signal: WO0 on PA04 mux F */

+#define MUX_PA04F_TC0_WO0                  5

+#define PINMUX_PA04F_TC0_WO0       ((PIN_PA04F_TC0_WO0 << 16) | MUX_PA04F_TC0_WO0)

+#define PORT_PA04F_TC0_WO0         (1u <<  4)

+#define PIN_PB30F_TC0_WO0                 62  /**< \brief TC0 signal: WO0 on PB30 mux F */

+#define MUX_PB30F_TC0_WO0                  5

+#define PINMUX_PB30F_TC0_WO0       ((PIN_PB30F_TC0_WO0 << 16) | MUX_PB30F_TC0_WO0)

+#define PORT_PB30F_TC0_WO0         (1u << 30)

+#define PIN_PA08E_TC0_WO0                  8  /**< \brief TC0 signal: WO0 on PA08 mux E */

+#define MUX_PA08E_TC0_WO0                  4

+#define PINMUX_PA08E_TC0_WO0       ((PIN_PA08E_TC0_WO0 << 16) | MUX_PA08E_TC0_WO0)

+#define PORT_PA08E_TC0_WO0         (1u <<  8)

+#define PIN_PA05F_TC0_WO1                  5  /**< \brief TC0 signal: WO1 on PA05 mux F */

+#define MUX_PA05F_TC0_WO1                  5

+#define PINMUX_PA05F_TC0_WO1       ((PIN_PA05F_TC0_WO1 << 16) | MUX_PA05F_TC0_WO1)

+#define PORT_PA05F_TC0_WO1         (1u <<  5)

+#define PIN_PB31F_TC0_WO1                 63  /**< \brief TC0 signal: WO1 on PB31 mux F */

+#define MUX_PB31F_TC0_WO1                  5

+#define PINMUX_PB31F_TC0_WO1       ((PIN_PB31F_TC0_WO1 << 16) | MUX_PB31F_TC0_WO1)

+#define PORT_PB31F_TC0_WO1         (1u << 31)

+#define PIN_PA09E_TC0_WO1                  9  /**< \brief TC0 signal: WO1 on PA09 mux E */

+#define MUX_PA09E_TC0_WO1                  4

+#define PINMUX_PA09E_TC0_WO1       ((PIN_PA09E_TC0_WO1 << 16) | MUX_PA09E_TC0_WO1)

+#define PORT_PA09E_TC0_WO1         (1u <<  9)

+/* ========== PORT definition for TC1 peripheral ========== */

+#define PIN_PA06F_TC1_WO0                  6  /**< \brief TC1 signal: WO0 on PA06 mux F */

+#define MUX_PA06F_TC1_WO0                  5

+#define PINMUX_PA06F_TC1_WO0       ((PIN_PA06F_TC1_WO0 << 16) | MUX_PA06F_TC1_WO0)

+#define PORT_PA06F_TC1_WO0         (1u <<  6)

+#define PIN_PA30F_TC1_WO0                 30  /**< \brief TC1 signal: WO0 on PA30 mux F */

+#define MUX_PA30F_TC1_WO0                  5

+#define PINMUX_PA30F_TC1_WO0       ((PIN_PA30F_TC1_WO0 << 16) | MUX_PA30F_TC1_WO0)

+#define PORT_PA30F_TC1_WO0         (1u << 30)

+#define PIN_PA10E_TC1_WO0                 10  /**< \brief TC1 signal: WO0 on PA10 mux E */

+#define MUX_PA10E_TC1_WO0                  4

+#define PINMUX_PA10E_TC1_WO0       ((PIN_PA10E_TC1_WO0 << 16) | MUX_PA10E_TC1_WO0)

+#define PORT_PA10E_TC1_WO0         (1u << 10)

+#define PIN_PA07F_TC1_WO1                  7  /**< \brief TC1 signal: WO1 on PA07 mux F */

+#define MUX_PA07F_TC1_WO1                  5

+#define PINMUX_PA07F_TC1_WO1       ((PIN_PA07F_TC1_WO1 << 16) | MUX_PA07F_TC1_WO1)

+#define PORT_PA07F_TC1_WO1         (1u <<  7)

+#define PIN_PA31F_TC1_WO1                 31  /**< \brief TC1 signal: WO1 on PA31 mux F */

+#define MUX_PA31F_TC1_WO1                  5

+#define PINMUX_PA31F_TC1_WO1       ((PIN_PA31F_TC1_WO1 << 16) | MUX_PA31F_TC1_WO1)

+#define PORT_PA31F_TC1_WO1         (1u << 31)

+#define PIN_PA11E_TC1_WO1                 11  /**< \brief TC1 signal: WO1 on PA11 mux E */

+#define MUX_PA11E_TC1_WO1                  4

+#define PINMUX_PA11E_TC1_WO1       ((PIN_PA11E_TC1_WO1 << 16) | MUX_PA11E_TC1_WO1)

+#define PORT_PA11E_TC1_WO1         (1u << 11)

+/* ========== PORT definition for TC2 peripheral ========== */

+#define PIN_PA16F_TC2_WO0                 16  /**< \brief TC2 signal: WO0 on PA16 mux F */

+#define MUX_PA16F_TC2_WO0                  5

+#define PINMUX_PA16F_TC2_WO0       ((PIN_PA16F_TC2_WO0 << 16) | MUX_PA16F_TC2_WO0)

+#define PORT_PA16F_TC2_WO0         (1u << 16)

+#define PIN_PA12E_TC2_WO0                 12  /**< \brief TC2 signal: WO0 on PA12 mux E */

+#define MUX_PA12E_TC2_WO0                  4

+#define PINMUX_PA12E_TC2_WO0       ((PIN_PA12E_TC2_WO0 << 16) | MUX_PA12E_TC2_WO0)

+#define PORT_PA12E_TC2_WO0         (1u << 12)

+#define PIN_PA00F_TC2_WO0                  0  /**< \brief TC2 signal: WO0 on PA00 mux F */

+#define MUX_PA00F_TC2_WO0                  5

+#define PINMUX_PA00F_TC2_WO0       ((PIN_PA00F_TC2_WO0 << 16) | MUX_PA00F_TC2_WO0)

+#define PORT_PA00F_TC2_WO0         (1u <<  0)

+#define PIN_PA17F_TC2_WO1                 17  /**< \brief TC2 signal: WO1 on PA17 mux F */

+#define MUX_PA17F_TC2_WO1                  5

+#define PINMUX_PA17F_TC2_WO1       ((PIN_PA17F_TC2_WO1 << 16) | MUX_PA17F_TC2_WO1)

+#define PORT_PA17F_TC2_WO1         (1u << 17)

+#define PIN_PA13E_TC2_WO1                 13  /**< \brief TC2 signal: WO1 on PA13 mux E */

+#define MUX_PA13E_TC2_WO1                  4

+#define PINMUX_PA13E_TC2_WO1       ((PIN_PA13E_TC2_WO1 << 16) | MUX_PA13E_TC2_WO1)

+#define PORT_PA13E_TC2_WO1         (1u << 13)

+#define PIN_PA01F_TC2_WO1                  1  /**< \brief TC2 signal: WO1 on PA01 mux F */

+#define MUX_PA01F_TC2_WO1                  5

+#define PINMUX_PA01F_TC2_WO1       ((PIN_PA01F_TC2_WO1 << 16) | MUX_PA01F_TC2_WO1)

+#define PORT_PA01F_TC2_WO1         (1u <<  1)

+/* ========== PORT definition for TC3 peripheral ========== */

+#define PIN_PA18F_TC3_WO0                 18  /**< \brief TC3 signal: WO0 on PA18 mux F */

+#define MUX_PA18F_TC3_WO0                  5

+#define PINMUX_PA18F_TC3_WO0       ((PIN_PA18F_TC3_WO0 << 16) | MUX_PA18F_TC3_WO0)

+#define PORT_PA18F_TC3_WO0         (1u << 18)

+#define PIN_PA14E_TC3_WO0                 14  /**< \brief TC3 signal: WO0 on PA14 mux E */

+#define MUX_PA14E_TC3_WO0                  4

+#define PINMUX_PA14E_TC3_WO0       ((PIN_PA14E_TC3_WO0 << 16) | MUX_PA14E_TC3_WO0)

+#define PORT_PA14E_TC3_WO0         (1u << 14)

+#define PIN_PA19F_TC3_WO1                 19  /**< \brief TC3 signal: WO1 on PA19 mux F */

+#define MUX_PA19F_TC3_WO1                  5

+#define PINMUX_PA19F_TC3_WO1       ((PIN_PA19F_TC3_WO1 << 16) | MUX_PA19F_TC3_WO1)

+#define PORT_PA19F_TC3_WO1         (1u << 19)

+#define PIN_PA15E_TC3_WO1                 15  /**< \brief TC3 signal: WO1 on PA15 mux E */

+#define MUX_PA15E_TC3_WO1                  4

+#define PINMUX_PA15E_TC3_WO1       ((PIN_PA15E_TC3_WO1 << 16) | MUX_PA15E_TC3_WO1)

+#define PORT_PA15E_TC3_WO1         (1u << 15)

+/* ========== PORT definition for TC4 peripheral ========== */

+#define PIN_PA22F_TC4_WO0                 22  /**< \brief TC4 signal: WO0 on PA22 mux F */

+#define MUX_PA22F_TC4_WO0                  5

+#define PINMUX_PA22F_TC4_WO0       ((PIN_PA22F_TC4_WO0 << 16) | MUX_PA22F_TC4_WO0)

+#define PORT_PA22F_TC4_WO0         (1u << 22)

+#define PIN_PB08F_TC4_WO0                 40  /**< \brief TC4 signal: WO0 on PB08 mux F */

+#define MUX_PB08F_TC4_WO0                  5

+#define PINMUX_PB08F_TC4_WO0       ((PIN_PB08F_TC4_WO0 << 16) | MUX_PB08F_TC4_WO0)

+#define PORT_PB08F_TC4_WO0         (1u <<  8)

+#define PIN_PB12E_TC4_WO0                 44  /**< \brief TC4 signal: WO0 on PB12 mux E */

+#define MUX_PB12E_TC4_WO0                  4

+#define PINMUX_PB12E_TC4_WO0       ((PIN_PB12E_TC4_WO0 << 16) | MUX_PB12E_TC4_WO0)

+#define PORT_PB12E_TC4_WO0         (1u << 12)

+#define PIN_PA23F_TC4_WO1                 23  /**< \brief TC4 signal: WO1 on PA23 mux F */

+#define MUX_PA23F_TC4_WO1                  5

+#define PINMUX_PA23F_TC4_WO1       ((PIN_PA23F_TC4_WO1 << 16) | MUX_PA23F_TC4_WO1)

+#define PORT_PA23F_TC4_WO1         (1u << 23)

+#define PIN_PB09F_TC4_WO1                 41  /**< \brief TC4 signal: WO1 on PB09 mux F */

+#define MUX_PB09F_TC4_WO1                  5

+#define PINMUX_PB09F_TC4_WO1       ((PIN_PB09F_TC4_WO1 << 16) | MUX_PB09F_TC4_WO1)

+#define PORT_PB09F_TC4_WO1         (1u <<  9)

+#define PIN_PB13E_TC4_WO1                 45  /**< \brief TC4 signal: WO1 on PB13 mux E */

+#define MUX_PB13E_TC4_WO1                  4

+#define PINMUX_PB13E_TC4_WO1       ((PIN_PB13E_TC4_WO1 << 16) | MUX_PB13E_TC4_WO1)

+#define PORT_PB13E_TC4_WO1         (1u << 13)

+/* ========== PORT definition for TC5 peripheral ========== */

+#define PIN_PA24F_TC5_WO0                 24  /**< \brief TC5 signal: WO0 on PA24 mux F */

+#define MUX_PA24F_TC5_WO0                  5

+#define PINMUX_PA24F_TC5_WO0       ((PIN_PA24F_TC5_WO0 << 16) | MUX_PA24F_TC5_WO0)

+#define PORT_PA24F_TC5_WO0         (1u << 24)

+#define PIN_PB10F_TC5_WO0                 42  /**< \brief TC5 signal: WO0 on PB10 mux F */

+#define MUX_PB10F_TC5_WO0                  5

+#define PINMUX_PB10F_TC5_WO0       ((PIN_PB10F_TC5_WO0 << 16) | MUX_PB10F_TC5_WO0)

+#define PORT_PB10F_TC5_WO0         (1u << 10)

+#define PIN_PB14E_TC5_WO0                 46  /**< \brief TC5 signal: WO0 on PB14 mux E */

+#define MUX_PB14E_TC5_WO0                  4

+#define PINMUX_PB14E_TC5_WO0       ((PIN_PB14E_TC5_WO0 << 16) | MUX_PB14E_TC5_WO0)

+#define PORT_PB14E_TC5_WO0         (1u << 14)

+#define PIN_PA25F_TC5_WO1                 25  /**< \brief TC5 signal: WO1 on PA25 mux F */

+#define MUX_PA25F_TC5_WO1                  5

+#define PINMUX_PA25F_TC5_WO1       ((PIN_PA25F_TC5_WO1 << 16) | MUX_PA25F_TC5_WO1)

+#define PORT_PA25F_TC5_WO1         (1u << 25)

+#define PIN_PB11F_TC5_WO1                 43  /**< \brief TC5 signal: WO1 on PB11 mux F */

+#define MUX_PB11F_TC5_WO1                  5

+#define PINMUX_PB11F_TC5_WO1       ((PIN_PB11F_TC5_WO1 << 16) | MUX_PB11F_TC5_WO1)

+#define PORT_PB11F_TC5_WO1         (1u << 11)

+#define PIN_PB15E_TC5_WO1                 47  /**< \brief TC5 signal: WO1 on PB15 mux E */

+#define MUX_PB15E_TC5_WO1                  4

+#define PINMUX_PB15E_TC5_WO1       ((PIN_PB15E_TC5_WO1 << 16) | MUX_PB15E_TC5_WO1)

+#define PORT_PB15E_TC5_WO1         (1u << 15)

+/* ========== PORT definition for TC6 peripheral ========== */

+#define PIN_PB02F_TC6_WO0                 34  /**< \brief TC6 signal: WO0 on PB02 mux F */

+#define MUX_PB02F_TC6_WO0                  5

+#define PINMUX_PB02F_TC6_WO0       ((PIN_PB02F_TC6_WO0 << 16) | MUX_PB02F_TC6_WO0)

+#define PORT_PB02F_TC6_WO0         (1u <<  2)

+#define PIN_PB16E_TC6_WO0                 48  /**< \brief TC6 signal: WO0 on PB16 mux E */

+#define MUX_PB16E_TC6_WO0                  4

+#define PINMUX_PB16E_TC6_WO0       ((PIN_PB16E_TC6_WO0 << 16) | MUX_PB16E_TC6_WO0)

+#define PORT_PB16E_TC6_WO0         (1u << 16)

+#define PIN_PB03F_TC6_WO1                 35  /**< \brief TC6 signal: WO1 on PB03 mux F */

+#define MUX_PB03F_TC6_WO1                  5

+#define PINMUX_PB03F_TC6_WO1       ((PIN_PB03F_TC6_WO1 << 16) | MUX_PB03F_TC6_WO1)

+#define PORT_PB03F_TC6_WO1         (1u <<  3)

+#define PIN_PB17E_TC6_WO1                 49  /**< \brief TC6 signal: WO1 on PB17 mux E */

+#define MUX_PB17E_TC6_WO1                  4

+#define PINMUX_PB17E_TC6_WO1       ((PIN_PB17E_TC6_WO1 << 16) | MUX_PB17E_TC6_WO1)

+#define PORT_PB17E_TC6_WO1         (1u << 17)

+/* ========== PORT definition for TC7 peripheral ========== */

+#define PIN_PB00F_TC7_WO0                 32  /**< \brief TC7 signal: WO0 on PB00 mux F */

+#define MUX_PB00F_TC7_WO0                  5

+#define PINMUX_PB00F_TC7_WO0       ((PIN_PB00F_TC7_WO0 << 16) | MUX_PB00F_TC7_WO0)

+#define PORT_PB00F_TC7_WO0         (1u <<  0)

+#define PIN_PB22F_TC7_WO0                 54  /**< \brief TC7 signal: WO0 on PB22 mux F */

+#define MUX_PB22F_TC7_WO0                  5

+#define PINMUX_PB22F_TC7_WO0       ((PIN_PB22F_TC7_WO0 << 16) | MUX_PB22F_TC7_WO0)

+#define PORT_PB22F_TC7_WO0         (1u << 22)

+#define PIN_PA20E_TC7_WO0                 20  /**< \brief TC7 signal: WO0 on PA20 mux E */

+#define MUX_PA20E_TC7_WO0                  4

+#define PINMUX_PA20E_TC7_WO0       ((PIN_PA20E_TC7_WO0 << 16) | MUX_PA20E_TC7_WO0)

+#define PORT_PA20E_TC7_WO0         (1u << 20)

+#define PIN_PB01F_TC7_WO1                 33  /**< \brief TC7 signal: WO1 on PB01 mux F */

+#define MUX_PB01F_TC7_WO1                  5

+#define PINMUX_PB01F_TC7_WO1       ((PIN_PB01F_TC7_WO1 << 16) | MUX_PB01F_TC7_WO1)

+#define PORT_PB01F_TC7_WO1         (1u <<  1)

+#define PIN_PB23F_TC7_WO1                 55  /**< \brief TC7 signal: WO1 on PB23 mux F */

+#define MUX_PB23F_TC7_WO1                  5

+#define PINMUX_PB23F_TC7_WO1       ((PIN_PB23F_TC7_WO1 << 16) | MUX_PB23F_TC7_WO1)

+#define PORT_PB23F_TC7_WO1         (1u << 23)

+#define PIN_PA21E_TC7_WO1                 21  /**< \brief TC7 signal: WO1 on PA21 mux E */

+#define MUX_PA21E_TC7_WO1                  4

+#define PINMUX_PA21E_TC7_WO1       ((PIN_PA21E_TC7_WO1 << 16) | MUX_PA21E_TC7_WO1)

+#define PORT_PA21E_TC7_WO1         (1u << 21)

+/* ========== PORT definition for ADC peripheral ========== */

+#define PIN_PA02B_ADC_AIN0                 2  /**< \brief ADC signal: AIN0 on PA02 mux B */

+#define MUX_PA02B_ADC_AIN0                 1

+#define PINMUX_PA02B_ADC_AIN0      ((PIN_PA02B_ADC_AIN0 << 16) | MUX_PA02B_ADC_AIN0)

+#define PORT_PA02B_ADC_AIN0        (1u <<  2)

+#define PIN_PA03B_ADC_AIN1                 3  /**< \brief ADC signal: AIN1 on PA03 mux B */

+#define MUX_PA03B_ADC_AIN1                 1

+#define PINMUX_PA03B_ADC_AIN1      ((PIN_PA03B_ADC_AIN1 << 16) | MUX_PA03B_ADC_AIN1)

+#define PORT_PA03B_ADC_AIN1        (1u <<  3)

+#define PIN_PB08B_ADC_AIN2                40  /**< \brief ADC signal: AIN2 on PB08 mux B */

+#define MUX_PB08B_ADC_AIN2                 1

+#define PINMUX_PB08B_ADC_AIN2      ((PIN_PB08B_ADC_AIN2 << 16) | MUX_PB08B_ADC_AIN2)

+#define PORT_PB08B_ADC_AIN2        (1u <<  8)

+#define PIN_PB09B_ADC_AIN3                41  /**< \brief ADC signal: AIN3 on PB09 mux B */

+#define MUX_PB09B_ADC_AIN3                 1

+#define PINMUX_PB09B_ADC_AIN3      ((PIN_PB09B_ADC_AIN3 << 16) | MUX_PB09B_ADC_AIN3)

+#define PORT_PB09B_ADC_AIN3        (1u <<  9)

+#define PIN_PA04B_ADC_AIN4                 4  /**< \brief ADC signal: AIN4 on PA04 mux B */

+#define MUX_PA04B_ADC_AIN4                 1

+#define PINMUX_PA04B_ADC_AIN4      ((PIN_PA04B_ADC_AIN4 << 16) | MUX_PA04B_ADC_AIN4)

+#define PORT_PA04B_ADC_AIN4        (1u <<  4)

+#define PIN_PA05B_ADC_AIN5                 5  /**< \brief ADC signal: AIN5 on PA05 mux B */

+#define MUX_PA05B_ADC_AIN5                 1

+#define PINMUX_PA05B_ADC_AIN5      ((PIN_PA05B_ADC_AIN5 << 16) | MUX_PA05B_ADC_AIN5)

+#define PORT_PA05B_ADC_AIN5        (1u <<  5)

+#define PIN_PA06B_ADC_AIN6                 6  /**< \brief ADC signal: AIN6 on PA06 mux B */

+#define MUX_PA06B_ADC_AIN6                 1

+#define PINMUX_PA06B_ADC_AIN6      ((PIN_PA06B_ADC_AIN6 << 16) | MUX_PA06B_ADC_AIN6)

+#define PORT_PA06B_ADC_AIN6        (1u <<  6)

+#define PIN_PA07B_ADC_AIN7                 7  /**< \brief ADC signal: AIN7 on PA07 mux B */

+#define MUX_PA07B_ADC_AIN7                 1

+#define PINMUX_PA07B_ADC_AIN7      ((PIN_PA07B_ADC_AIN7 << 16) | MUX_PA07B_ADC_AIN7)

+#define PORT_PA07B_ADC_AIN7        (1u <<  7)

+#define PIN_PB00B_ADC_AIN8                32  /**< \brief ADC signal: AIN8 on PB00 mux B */

+#define MUX_PB00B_ADC_AIN8                 1

+#define PINMUX_PB00B_ADC_AIN8      ((PIN_PB00B_ADC_AIN8 << 16) | MUX_PB00B_ADC_AIN8)

+#define PORT_PB00B_ADC_AIN8        (1u <<  0)

+#define PIN_PB01B_ADC_AIN9                33  /**< \brief ADC signal: AIN9 on PB01 mux B */

+#define MUX_PB01B_ADC_AIN9                 1

+#define PINMUX_PB01B_ADC_AIN9      ((PIN_PB01B_ADC_AIN9 << 16) | MUX_PB01B_ADC_AIN9)

+#define PORT_PB01B_ADC_AIN9        (1u <<  1)

+#define PIN_PB02B_ADC_AIN10               34  /**< \brief ADC signal: AIN10 on PB02 mux B */

+#define MUX_PB02B_ADC_AIN10                1

+#define PINMUX_PB02B_ADC_AIN10     ((PIN_PB02B_ADC_AIN10 << 16) | MUX_PB02B_ADC_AIN10)

+#define PORT_PB02B_ADC_AIN10       (1u <<  2)

+#define PIN_PB03B_ADC_AIN11               35  /**< \brief ADC signal: AIN11 on PB03 mux B */

+#define MUX_PB03B_ADC_AIN11                1

+#define PINMUX_PB03B_ADC_AIN11     ((PIN_PB03B_ADC_AIN11 << 16) | MUX_PB03B_ADC_AIN11)

+#define PORT_PB03B_ADC_AIN11       (1u <<  3)

+#define PIN_PB04B_ADC_AIN12               36  /**< \brief ADC signal: AIN12 on PB04 mux B */

+#define MUX_PB04B_ADC_AIN12                1

+#define PINMUX_PB04B_ADC_AIN12     ((PIN_PB04B_ADC_AIN12 << 16) | MUX_PB04B_ADC_AIN12)

+#define PORT_PB04B_ADC_AIN12       (1u <<  4)

+#define PIN_PB05B_ADC_AIN13               37  /**< \brief ADC signal: AIN13 on PB05 mux B */

+#define MUX_PB05B_ADC_AIN13                1

+#define PINMUX_PB05B_ADC_AIN13     ((PIN_PB05B_ADC_AIN13 << 16) | MUX_PB05B_ADC_AIN13)

+#define PORT_PB05B_ADC_AIN13       (1u <<  5)

+#define PIN_PB06B_ADC_AIN14               38  /**< \brief ADC signal: AIN14 on PB06 mux B */

+#define MUX_PB06B_ADC_AIN14                1

+#define PINMUX_PB06B_ADC_AIN14     ((PIN_PB06B_ADC_AIN14 << 16) | MUX_PB06B_ADC_AIN14)

+#define PORT_PB06B_ADC_AIN14       (1u <<  6)

+#define PIN_PB07B_ADC_AIN15               39  /**< \brief ADC signal: AIN15 on PB07 mux B */

+#define MUX_PB07B_ADC_AIN15                1

+#define PINMUX_PB07B_ADC_AIN15     ((PIN_PB07B_ADC_AIN15 << 16) | MUX_PB07B_ADC_AIN15)

+#define PORT_PB07B_ADC_AIN15       (1u <<  7)

+#define PIN_PA08B_ADC_AIN16                8  /**< \brief ADC signal: AIN16 on PA08 mux B */

+#define MUX_PA08B_ADC_AIN16                1

+#define PINMUX_PA08B_ADC_AIN16     ((PIN_PA08B_ADC_AIN16 << 16) | MUX_PA08B_ADC_AIN16)

+#define PORT_PA08B_ADC_AIN16       (1u <<  8)

+#define PIN_PA09B_ADC_AIN17                9  /**< \brief ADC signal: AIN17 on PA09 mux B */

+#define MUX_PA09B_ADC_AIN17                1

+#define PINMUX_PA09B_ADC_AIN17     ((PIN_PA09B_ADC_AIN17 << 16) | MUX_PA09B_ADC_AIN17)

+#define PORT_PA09B_ADC_AIN17       (1u <<  9)

+#define PIN_PA10B_ADC_AIN18               10  /**< \brief ADC signal: AIN18 on PA10 mux B */

+#define MUX_PA10B_ADC_AIN18                1

+#define PINMUX_PA10B_ADC_AIN18     ((PIN_PA10B_ADC_AIN18 << 16) | MUX_PA10B_ADC_AIN18)

+#define PORT_PA10B_ADC_AIN18       (1u << 10)

+#define PIN_PA11B_ADC_AIN19               11  /**< \brief ADC signal: AIN19 on PA11 mux B */

+#define MUX_PA11B_ADC_AIN19                1

+#define PINMUX_PA11B_ADC_AIN19     ((PIN_PA11B_ADC_AIN19 << 16) | MUX_PA11B_ADC_AIN19)

+#define PORT_PA11B_ADC_AIN19       (1u << 11)

+#define PIN_PA04B_ADC_VREFP                4  /**< \brief ADC signal: VREFP on PA04 mux B */

+#define MUX_PA04B_ADC_VREFP                1

+#define PINMUX_PA04B_ADC_VREFP     ((PIN_PA04B_ADC_VREFP << 16) | MUX_PA04B_ADC_VREFP)

+#define PORT_PA04B_ADC_VREFP       (1u <<  4)

+/* ========== PORT definition for AC peripheral ========== */

+#define PIN_PA04B_AC_AIN0                  4  /**< \brief AC signal: AIN0 on PA04 mux B */

+#define MUX_PA04B_AC_AIN0                  1

+#define PINMUX_PA04B_AC_AIN0       ((PIN_PA04B_AC_AIN0 << 16) | MUX_PA04B_AC_AIN0)

+#define PORT_PA04B_AC_AIN0         (1u <<  4)

+#define PIN_PA05B_AC_AIN1                  5  /**< \brief AC signal: AIN1 on PA05 mux B */

+#define MUX_PA05B_AC_AIN1                  1

+#define PINMUX_PA05B_AC_AIN1       ((PIN_PA05B_AC_AIN1 << 16) | MUX_PA05B_AC_AIN1)

+#define PORT_PA05B_AC_AIN1         (1u <<  5)

+#define PIN_PA06B_AC_AIN2                  6  /**< \brief AC signal: AIN2 on PA06 mux B */

+#define MUX_PA06B_AC_AIN2                  1

+#define PINMUX_PA06B_AC_AIN2       ((PIN_PA06B_AC_AIN2 << 16) | MUX_PA06B_AC_AIN2)

+#define PORT_PA06B_AC_AIN2         (1u <<  6)

+#define PIN_PA07B_AC_AIN3                  7  /**< \brief AC signal: AIN3 on PA07 mux B */

+#define MUX_PA07B_AC_AIN3                  1

+#define PINMUX_PA07B_AC_AIN3       ((PIN_PA07B_AC_AIN3 << 16) | MUX_PA07B_AC_AIN3)

+#define PORT_PA07B_AC_AIN3         (1u <<  7)

+#define PIN_PA12H_AC_CMP0                 12  /**< \brief AC signal: CMP0 on PA12 mux H */

+#define MUX_PA12H_AC_CMP0                  7

+#define PINMUX_PA12H_AC_CMP0       ((PIN_PA12H_AC_CMP0 << 16) | MUX_PA12H_AC_CMP0)

+#define PORT_PA12H_AC_CMP0         (1u << 12)

+#define PIN_PA18H_AC_CMP0                 18  /**< \brief AC signal: CMP0 on PA18 mux H */

+#define MUX_PA18H_AC_CMP0                  7

+#define PINMUX_PA18H_AC_CMP0       ((PIN_PA18H_AC_CMP0 << 16) | MUX_PA18H_AC_CMP0)

+#define PORT_PA18H_AC_CMP0         (1u << 18)

+#define PIN_PA13H_AC_CMP1                 13  /**< \brief AC signal: CMP1 on PA13 mux H */

+#define MUX_PA13H_AC_CMP1                  7

+#define PINMUX_PA13H_AC_CMP1       ((PIN_PA13H_AC_CMP1 << 16) | MUX_PA13H_AC_CMP1)

+#define PORT_PA13H_AC_CMP1         (1u << 13)

+#define PIN_PA19H_AC_CMP1                 19  /**< \brief AC signal: CMP1 on PA19 mux H */

+#define MUX_PA19H_AC_CMP1                  7

+#define PINMUX_PA19H_AC_CMP1       ((PIN_PA19H_AC_CMP1 << 16) | MUX_PA19H_AC_CMP1)

+#define PORT_PA19H_AC_CMP1         (1u << 19)

+/* ========== PORT definition for DAC peripheral ========== */

+#define PIN_PA02B_DAC_VOUT                 2  /**< \brief DAC signal: VOUT on PA02 mux B */

+#define MUX_PA02B_DAC_VOUT                 1

+#define PINMUX_PA02B_DAC_VOUT      ((PIN_PA02B_DAC_VOUT << 16) | MUX_PA02B_DAC_VOUT)

+#define PORT_PA02B_DAC_VOUT        (1u <<  2)

+#define PIN_PA03B_DAC_VREFP                3  /**< \brief DAC signal: VREFP on PA03 mux B */

+#define MUX_PA03B_DAC_VREFP                1

+#define PINMUX_PA03B_DAC_VREFP     ((PIN_PA03B_DAC_VREFP << 16) | MUX_PA03B_DAC_VREFP)

+#define PORT_PA03B_DAC_VREFP       (1u <<  3)

+

+#endif /* _SAMD20J18_PIO_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20.h
new file mode 100644
index 0000000..5040ccf
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20.h
@@ -0,0 +1,86 @@
+/**

+ * \file

+ *

+ * \brief Top header file for SAM D20

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20_

+#define _SAMD20_

+

+/**

+ * \defgroup SAMD20_definitions SAM D20 Device Definitions

+ * \brief SAM D20 CMSIS Definitions.

+ */

+

+#if   defined(__SAMD20E14__) || defined(__ATSAMD20E14__)

+  #include "samd20e14.h"

+#elif defined(__SAMD20E15__) || defined(__ATSAMD20E15__)

+  #include "samd20e15.h"

+#elif defined(__SAMD20E16__) || defined(__ATSAMD20E16__)

+  #include "samd20e16.h"

+#elif defined(__SAMD20E17__) || defined(__ATSAMD20E17__)

+  #include "samd20e17.h"

+#elif defined(__SAMD20E18__) || defined(__ATSAMD20E18__)

+  #include "samd20e18.h"

+#elif defined(__SAMD20G14__) || defined(__ATSAMD20G14__)

+  #include "samd20g14.h"

+#elif defined(__SAMD20G15__) || defined(__ATSAMD20G15__)

+  #include "samd20g15.h"

+#elif defined(__SAMD20G16__) || defined(__ATSAMD20G16__)

+  #include "samd20g16.h"

+#elif defined(__SAMD20G17__) || defined(__ATSAMD20G17__)

+  #include "samd20g17.h"

+#elif defined(__SAMD20G18__) || defined(__ATSAMD20G18__)

+  #include "samd20g18.h"

+#elif defined(__SAMD20J14__) || defined(__ATSAMD20J14__)

+  #include "samd20j14.h"

+#elif defined(__SAMD20J15__) || defined(__ATSAMD20J15__)

+  #include "samd20j15.h"

+#elif defined(__SAMD20J16__) || defined(__ATSAMD20J16__)

+  #include "samd20j16.h"

+#elif defined(__SAMD20J17__) || defined(__ATSAMD20J17__)

+  #include "samd20j17.h"

+#elif defined(__SAMD20J18__) || defined(__ATSAMD20J18__)

+  #include "samd20j18.h"

+#else

+  #error Library does not support the specified device.

+#endif

+

+#endif /* _SAMD20_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20e14.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20e14.h
new file mode 100644
index 0000000..c2af853
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20e14.h
@@ -0,0 +1,484 @@
+/**

+ * \file

+ *

+ * \brief Header file for SAMD20E14

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20E14_

+#define _SAMD20E14_

+

+/**

+ * \ingroup SAMD20_definitions

+ * \addtogroup SAMD20E14_definitions SAMD20E14 definitions

+ * This file defines all structures and symbols for SAMD20E14:

+ *   - registers and bitfields

+ *   - peripheral base address

+ *   - peripheral ID

+ *   - PIO definitions

+*/

+/*@{*/

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#include <stdint.h>

+#ifndef __cplusplus

+typedef volatile const uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile const uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile const uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#else

+typedef volatile       uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile       uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile       uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#endif

+typedef volatile       uint32_t WoReg;   /**< Write only 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t WoReg16; /**< Write only 16-bit register (volatile unsigned int) */

+typedef volatile       uint32_t WoReg8;  /**< Write only  8-bit register (volatile unsigned int) */

+typedef volatile       uint32_t RwReg;   /**< Read-Write 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t RwReg16; /**< Read-Write 16-bit register (volatile unsigned int) */

+typedef volatile       uint8_t  RwReg8;  /**< Read-Write  8-bit register (volatile unsigned int) */

+#define CAST(type, value) ((type *)(value))

+#define REG_ACCESS(type, address) (*(type*)(address)) /**< C code: Register value */

+#else

+#define CAST(type, value) (value)

+#define REG_ACCESS(type, address) (address) /**< Assembly code: Register address */

+#endif

+

+/* ************************************************************************** */

+/**  CMSIS DEFINITIONS FOR SAMD20E14 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E14_cmsis CMSIS Definitions */

+/*@{*/

+

+/** Interrupt Number Definition */

+typedef enum IRQn

+{

+  /******  Cortex-M0+ Processor Exceptions Numbers *******************************/

+  NonMaskableInt_IRQn      = -14, /**<  2 Non Maskable Interrupt                 */

+  HardFault_IRQn           = -13, /**<  3 Cortex-M0+ Hard Fault Interrupt        */

+  SVCall_IRQn              = -5,  /**< 11 Cortex-M0+ SV Call Interrupt           */

+  PendSV_IRQn              = -2,  /**< 14 Cortex-M0+ Pend SV Interrupt           */

+  SysTick_IRQn             = -1,  /**< 15 Cortex-M0+ System Tick Interrupt       */

+  /******  SAMD20E14-specific Interrupt Numbers ***********************/

+  PM_IRQn                  =  0, /**<  0 SAMD20E14 Power Manager (PM) */

+  SYSCTRL_IRQn             =  1, /**<  1 SAMD20E14 System Control (SYSCTRL) */

+  WDT_IRQn                 =  2, /**<  2 SAMD20E14 Watchdog Timer (WDT) */

+  RTC_IRQn                 =  3, /**<  3 SAMD20E14 Real-Time Counter (RTC) */

+  EIC_IRQn                 =  4, /**<  4 SAMD20E14 External Interrupt Controller (EIC) */

+  NVMCTRL_IRQn             =  5, /**<  5 SAMD20E14 Non-Volatile Memory Controller (NVMCTRL) */

+  EVSYS_IRQn               =  6, /**<  6 SAMD20E14 Event System Interface (EVSYS) */

+  SERCOM0_IRQn             =  7, /**<  7 SAMD20E14 Serial Communication Interface 0 (SERCOM0) */

+  SERCOM1_IRQn             =  8, /**<  8 SAMD20E14 Serial Communication Interface 1 (SERCOM1) */

+  SERCOM2_IRQn             =  9, /**<  9 SAMD20E14 Serial Communication Interface 2 (SERCOM2) */

+  SERCOM3_IRQn             = 10, /**< 10 SAMD20E14 Serial Communication Interface 3 (SERCOM3) */

+  TC0_IRQn                 = 13, /**< 13 SAMD20E14 Basic Timer Counter 0 (TC0) */

+  TC1_IRQn                 = 14, /**< 14 SAMD20E14 Basic Timer Counter 1 (TC1) */

+  TC2_IRQn                 = 15, /**< 15 SAMD20E14 Basic Timer Counter 2 (TC2) */

+  TC3_IRQn                 = 16, /**< 16 SAMD20E14 Basic Timer Counter 3 (TC3) */

+  TC4_IRQn                 = 17, /**< 17 SAMD20E14 Basic Timer Counter 4 (TC4) */

+  TC5_IRQn                 = 18, /**< 18 SAMD20E14 Basic Timer Counter 5 (TC5) */

+  ADC_IRQn                 = 21, /**< 21 SAMD20E14 Analog Digital Converter (ADC) */

+  AC_IRQn                  = 22, /**< 22 SAMD20E14 Analog Comparators (AC) */

+  DAC_IRQn                 = 23, /**< 23 SAMD20E14 Digital Analog Converter (DAC) */

+

+  PERIPH_COUNT_IRQn        = 24  /**< Number of peripheral IDs */

+} IRQn_Type;

+

+typedef struct _DeviceVectors

+{

+  /* Stack pointer */

+  void* pvStack;

+

+  /* Cortex-M handlers */

+  void* pfnReset_Handler;

+  void* pfnNMI_Handler;

+  void* pfnHardFault_Handler;

+  void* pfnReservedM12;

+  void* pfnReservedM11;

+  void* pfnReservedM10;

+  void* pfnReservedM9;

+  void* pfnReservedM8;

+  void* pfnReservedM7;

+  void* pfnReservedM6;

+  void* pfnSVC_Handler;

+  void* pfnReservedM4;

+  void* pfnReservedM3;

+  void* pfnPendSV_Handler;

+  void* pfnSysTick_Handler;

+

+  /* Peripheral handlers */

+  void* pfnPM_Handler;                    /*  0 Power Manager */

+  void* pfnSYSCTRL_Handler;               /*  1 System Control */

+  void* pfnWDT_Handler;                   /*  2 Watchdog Timer */

+  void* pfnRTC_Handler;                   /*  3 Real-Time Counter */

+  void* pfnEIC_Handler;                   /*  4 External Interrupt Controller */

+  void* pfnNVMCTRL_Handler;               /*  5 Non-Volatile Memory Controller */

+  void* pfnEVSYS_Handler;                 /*  6 Event System Interface */

+  void* pfnSERCOM0_Handler;               /*  7 Serial Communication Interface 0 */

+  void* pfnSERCOM1_Handler;               /*  8 Serial Communication Interface 1 */

+  void* pfnSERCOM2_Handler;               /*  9 Serial Communication Interface 2 */

+  void* pfnSERCOM3_Handler;               /* 10 Serial Communication Interface 3 */

+  void* pfnReserved11;

+  void* pfnReserved12;

+  void* pfnTC0_Handler;                   /* 13 Basic Timer Counter 0 */

+  void* pfnTC1_Handler;                   /* 14 Basic Timer Counter 1 */

+  void* pfnTC2_Handler;                   /* 15 Basic Timer Counter 2 */

+  void* pfnTC3_Handler;                   /* 16 Basic Timer Counter 3 */

+  void* pfnTC4_Handler;                   /* 17 Basic Timer Counter 4 */

+  void* pfnTC5_Handler;                   /* 18 Basic Timer Counter 5 */

+  void* pfnReserved19;

+  void* pfnReserved20;

+  void* pfnADC_Handler;                   /* 21 Analog Digital Converter */

+  void* pfnAC_Handler;                    /* 22 Analog Comparators */

+  void* pfnDAC_Handler;                   /* 23 Digital Analog Converter */

+} DeviceVectors;

+

+/* Cortex-M0+ processor handlers */

+void Reset_Handler               ( void );

+void NMI_Handler                 ( void );

+void HardFault_Handler           ( void );

+void SVC_Handler                 ( void );

+void PendSV_Handler              ( void );

+void SysTick_Handler             ( void );

+

+/* Peripherals handlers */

+void PM_Handler                  ( void );

+void SYSCTRL_Handler             ( void );

+void WDT_Handler                 ( void );

+void RTC_Handler                 ( void );

+void EIC_Handler                 ( void );

+void NVMCTRL_Handler             ( void );

+void EVSYS_Handler               ( void );

+void SERCOM0_Handler             ( void );

+void SERCOM1_Handler             ( void );

+void SERCOM2_Handler             ( void );

+void SERCOM3_Handler             ( void );

+void TC0_Handler                 ( void );

+void TC1_Handler                 ( void );

+void TC2_Handler                 ( void );

+void TC3_Handler                 ( void );

+void TC4_Handler                 ( void );

+void TC5_Handler                 ( void );

+void ADC_Handler                 ( void );

+void AC_Handler                  ( void );

+void DAC_Handler                 ( void );

+

+/*

+ * \brief Configuration of the Cortex-M0+ Processor and Core Peripherals

+ */

+

+#define LITTLE_ENDIAN          1        

+#define __CM0PLUS_REV          1         /*!< Core revision r0p1 */

+#define __MPU_PRESENT          0         /*!< MPU present or not */

+#define __NVIC_PRIO_BITS       2         /*!< Number of bits used for Priority Levels */

+#define __VTOR_PRESENT         1         /*!< VTOR present or not */

+#define __Vendor_SysTickConfig 0         /*!< Set to 1 if different SysTick Config is used */

+

+/**

+ * \brief CMSIS includes

+ */

+

+#include <core_cm0plus.h>

+#if !defined DONT_USE_CMSIS_INIT

+#include "system_samd20.h"

+#endif /* DONT_USE_CMSIS_INIT */

+

+/*@}*/

+

+/* ************************************************************************** */

+/**  SOFTWARE PERIPHERAL API DEFINITION FOR SAMD20E14 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E14_api Peripheral Software API */

+/*@{*/

+

+#include "component/component_ac.h"

+#include "component/component_adc.h"

+#include "component/component_dac.h"

+#include "component/component_dsu.h"

+#include "component/component_eic.h"

+#include "component/component_evsys.h"

+#include "component/component_gclk.h"

+#include "component/component_nvmctrl.h"

+#include "component/component_pac.h"

+#include "component/component_pm.h"

+#include "component/component_port.h"

+#include "component/component_rtc.h"

+#include "component/component_sercom.h"

+#include "component/component_sysctrl.h"

+#include "component/component_tc.h"

+#include "component/component_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  REGISTERS ACCESS DEFINITIONS FOR SAMD20E14 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E14_reg Registers Access Definitions */

+/*@{*/

+

+#include "instance/instance_ac.h"

+#include "instance/instance_adc.h"

+#include "instance/instance_dac.h"

+#include "instance/instance_dsu.h"

+#include "instance/instance_eic.h"

+#include "instance/instance_evsys.h"

+#include "instance/instance_gclk.h"

+#include "instance/instance_nvmctrl.h"

+#include "instance/instance_pac0.h"

+#include "instance/instance_pac1.h"

+#include "instance/instance_pac2.h"

+#include "instance/instance_pm.h"

+#include "instance/instance_port.h"

+#include "instance/instance_rtc.h"

+#include "instance/instance_sercom0.h"

+#include "instance/instance_sercom1.h"

+#include "instance/instance_sercom2.h"

+#include "instance/instance_sercom3.h"

+#include "instance/instance_sysctrl.h"

+#include "instance/instance_tc0.h"

+#include "instance/instance_tc1.h"

+#include "instance/instance_tc2.h"

+#include "instance/instance_tc3.h"

+#include "instance/instance_tc4.h"

+#include "instance/instance_tc5.h"

+#include "instance/instance_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  PERIPHERAL ID DEFINITIONS FOR SAMD20E14 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E14_id Peripheral Ids Definitions */

+/*@{*/

+

+// Peripheral instances on HPB0 bridge

+#define ID_PAC0           0 /**< \brief Peripheral Access Controller PAC (PAC0) */

+#define ID_PM             1 /**< \brief Power Manager (PM) */

+#define ID_SYSCTRL        2 /**< \brief System Control (SYSCTRL) */

+#define ID_GCLK           3 /**< \brief Generic Clock Generator (GCLK) */

+#define ID_WDT            4 /**< \brief Watchdog Timer (WDT) */

+#define ID_RTC            5 /**< \brief Real-Time Counter (RTC) */

+#define ID_EIC            6 /**< \brief External Interrupt Controller (EIC) */

+

+// Peripheral instances on HPB1 bridge

+#define ID_PAC1          32 /**< \brief Peripheral Access Controller PAC (PAC1) */

+#define ID_DSU           33 /**< \brief Device Service Unit (DSU) */

+#define ID_NVMCTRL       34 /**< \brief Non-Volatile Memory Controller (NVMCTRL) */

+#define ID_PORT          35 /**< \brief Port Module (PORT) */

+

+// Peripheral instances on HPB2 bridge

+#define ID_PAC2          64 /**< \brief Peripheral Access Controller PAC (PAC2) */

+#define ID_EVSYS         65 /**< \brief Event System Interface (EVSYS) */

+#define ID_SERCOM0       66 /**< \brief Serial Communication Interface SERCOM (SERCOM0) */

+#define ID_SERCOM1       67 /**< \brief Serial Communication Interface SERCOM (SERCOM1) */

+#define ID_SERCOM2       68 /**< \brief Serial Communication Interface SERCOM (SERCOM2) */

+#define ID_SERCOM3       69 /**< \brief Serial Communication Interface SERCOM (SERCOM3) */

+#define ID_TC0           72 /**< \brief Basic Timer Counter TC (TC0) */

+#define ID_TC1           73 /**< \brief Basic Timer Counter TC (TC1) */

+#define ID_TC2           74 /**< \brief Basic Timer Counter TC (TC2) */

+#define ID_TC3           75 /**< \brief Basic Timer Counter TC (TC3) */

+#define ID_TC4           76 /**< \brief Basic Timer Counter TC (TC4) */

+#define ID_TC5           77 /**< \brief Basic Timer Counter TC (TC5) */

+#define ID_ADC           80 /**< \brief Analog Digital Converter (ADC) */

+#define ID_AC            81 /**< \brief Analog Comparators (AC) */

+#define ID_DAC           82 /**< \brief Digital Analog Converter (DAC) */

+

+#define ID_PERIPH_COUNT  83 /**< \brief Number of peripheral IDs */

+/*@}*/

+

+/* ************************************************************************** */

+/**  BASE ADDRESS DEFINITIONS FOR SAMD20E14 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E14_base Peripheral Base Address Definitions */

+/*@{*/

+

+#if defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)

+#define AC                            (0x42004400U) /**< \brief (AC) APB Base Address */

+#define ADC                           (0x42004000U) /**< \brief (ADC) APB Base Address */

+#define DAC                           (0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DSU                           (0x41002000U) /**< \brief (DSU) APB Base Address */

+#define EIC                           (0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EVSYS                         (0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define GCLK                          (0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define NVMCTRL                       (0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define PAC0                          (0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1                          (0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2                          (0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PM                            (0x40000400U) /**< \brief (PM) APB Base Address */

+#define PORT                          (0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS                    (0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define RTC                           (0x40001400U) /**< \brief (RTC) APB Base Address */

+#define SERCOM0                       (0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1                       (0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2                       (0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3                       (0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SYSCTRL                       (0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define TC0                           (0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1                           (0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2                           (0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3                           (0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4                           (0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5                           (0x42003400U) /**< \brief (TC5) APB Base Address */

+#define WDT                           (0x40001000U) /**< \brief (WDT) APB Base Address */

+#else

+#define AC                ((Ac       *)0x42004400U) /**< \brief (AC) APB Base Address */

+#define AC_INST_NUM       1                         /**< \brief (AC) Number of instances */

+#define AC_INSTS          { AC }                    /**< \brief (AC) Instances List */

+

+#define ADC               ((Adc      *)0x42004000U) /**< \brief (ADC) APB Base Address */

+#define ADC_INST_NUM      1                         /**< \brief (ADC) Number of instances */

+#define ADC_INSTS         { ADC }                   /**< \brief (ADC) Instances List */

+

+#define DAC               ((Dac      *)0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DAC_INST_NUM      1                         /**< \brief (DAC) Number of instances */

+#define DAC_INSTS         { DAC }                   /**< \brief (DAC) Instances List */

+

+#define DSU               ((Dsu      *)0x41002000U) /**< \brief (DSU) APB Base Address */

+#define DSU_INST_NUM      1                         /**< \brief (DSU) Number of instances */

+#define DSU_INSTS         { DSU }                   /**< \brief (DSU) Instances List */

+

+#define EIC               ((Eic      *)0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EIC_INST_NUM      1                         /**< \brief (EIC) Number of instances */

+#define EIC_INSTS         { EIC }                   /**< \brief (EIC) Instances List */

+

+#define EVSYS             ((Evsys    *)0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define EVSYS_INST_NUM    1                         /**< \brief (EVSYS) Number of instances */

+#define EVSYS_INSTS       { EVSYS }                 /**< \brief (EVSYS) Instances List */

+

+#define GCLK              ((Gclk     *)0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define GCLK_INST_NUM     1                         /**< \brief (GCLK) Number of instances */

+#define GCLK_INSTS        { GCLK }                  /**< \brief (GCLK) Instances List */

+

+#define NVMCTRL           ((Nvmctrl  *)0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define NVMCTRL_INST_NUM  1                         /**< \brief (NVMCTRL) Number of instances */

+#define NVMCTRL_INSTS     { NVMCTRL }               /**< \brief (NVMCTRL) Instances List */

+

+#define PAC0              ((Pac      *)0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1              ((Pac      *)0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2              ((Pac      *)0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PAC_INST_NUM      3                         /**< \brief (PAC) Number of instances */

+#define PAC_INSTS         { PAC0, PAC1, PAC2 }      /**< \brief (PAC) Instances List */

+

+#define PM                ((Pm       *)0x40000400U) /**< \brief (PM) APB Base Address */

+#define PM_INST_NUM       1                         /**< \brief (PM) Number of instances */

+#define PM_INSTS          { PM }                    /**< \brief (PM) Instances List */

+

+#define PORT              ((Port     *)0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS        ((Port     *)0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define PORT_INST_NUM     1                         /**< \brief (PORT) Number of instances */

+#define PORT_INSTS        { PORT }                  /**< \brief (PORT) Instances List */

+

+#define RTC               ((Rtc      *)0x40001400U) /**< \brief (RTC) APB Base Address */

+#define RTC_INST_NUM      1                         /**< \brief (RTC) Number of instances */

+#define RTC_INSTS         { RTC }                   /**< \brief (RTC) Instances List */

+

+#define SERCOM0           ((Sercom   *)0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1           ((Sercom   *)0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2           ((Sercom   *)0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3           ((Sercom   *)0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM_INST_NUM   4                         /**< \brief (SERCOM) Number of instances */

+#define SERCOM_INSTS      { SERCOM0, SERCOM1, SERCOM2, SERCOM3 } /**< \brief (SERCOM) Instances List */

+

+#define SYSCTRL           ((Sysctrl  *)0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define SYSCTRL_INST_NUM  1                         /**< \brief (SYSCTRL) Number of instances */

+#define SYSCTRL_INSTS     { SYSCTRL }               /**< \brief (SYSCTRL) Instances List */

+

+#define TC0               ((Tc       *)0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1               ((Tc       *)0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2               ((Tc       *)0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3               ((Tc       *)0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4               ((Tc       *)0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5               ((Tc       *)0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC_INST_NUM       6                         /**< \brief (TC) Number of instances */

+#define TC_INSTS          { TC0, TC1, TC2, TC3, TC4, TC5 } /**< \brief (TC) Instances List */

+

+#define WDT               ((Wdt      *)0x40001000U) /**< \brief (WDT) APB Base Address */

+#define WDT_INST_NUM      1                         /**< \brief (WDT) Number of instances */

+#define WDT_INSTS         { WDT }                   /**< \brief (WDT) Instances List */

+

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+/*@}*/

+

+/* ************************************************************************** */

+/**  PORT DEFINITIONS FOR SAMD20E14 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E14_port PORT Definitions */

+/*@{*/

+

+#include "pio/pio_samd20e14.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  MEMORY MAPPING DEFINITIONS FOR SAMD20E14 */

+/* ************************************************************************** */

+

+#define FLASH_SIZE            0x4000 /* 16 kB */

+#define FLASH_PAGE_SIZE       64

+#define FLASH_NB_OF_PAGES     256

+#define FLASH_USER_PAGE_SIZE  64

+#define HRAMC0_SIZE           0x800 /* 2 kB */

+#define FLASH_ADDR            (0x00000000U) /**< FLASH base address */

+#define FLASH_USER_PAGE_ADDR  (0x00800000U) /**< FLASH_USER_PAGE base address */

+#define HRAMC0_ADDR           (0x20000000U) /**< HRAMC0 base address */

+

+/* ************************************************************************** */

+/**  ELECTRICAL DEFINITIONS FOR SAMD20E14 */

+/* ************************************************************************** */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+/*@}*/

+

+#endif /* SAMD20E14_H */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20e15.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20e15.h
new file mode 100644
index 0000000..4138b6c
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20e15.h
@@ -0,0 +1,484 @@
+/**

+ * \file

+ *

+ * \brief Header file for SAMD20E15

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20E15_

+#define _SAMD20E15_

+

+/**

+ * \ingroup SAMD20_definitions

+ * \addtogroup SAMD20E15_definitions SAMD20E15 definitions

+ * This file defines all structures and symbols for SAMD20E15:

+ *   - registers and bitfields

+ *   - peripheral base address

+ *   - peripheral ID

+ *   - PIO definitions

+*/

+/*@{*/

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#include <stdint.h>

+#ifndef __cplusplus

+typedef volatile const uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile const uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile const uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#else

+typedef volatile       uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile       uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile       uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#endif

+typedef volatile       uint32_t WoReg;   /**< Write only 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t WoReg16; /**< Write only 16-bit register (volatile unsigned int) */

+typedef volatile       uint32_t WoReg8;  /**< Write only  8-bit register (volatile unsigned int) */

+typedef volatile       uint32_t RwReg;   /**< Read-Write 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t RwReg16; /**< Read-Write 16-bit register (volatile unsigned int) */

+typedef volatile       uint8_t  RwReg8;  /**< Read-Write  8-bit register (volatile unsigned int) */

+#define CAST(type, value) ((type *)(value))

+#define REG_ACCESS(type, address) (*(type*)(address)) /**< C code: Register value */

+#else

+#define CAST(type, value) (value)

+#define REG_ACCESS(type, address) (address) /**< Assembly code: Register address */

+#endif

+

+/* ************************************************************************** */

+/**  CMSIS DEFINITIONS FOR SAMD20E15 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E15_cmsis CMSIS Definitions */

+/*@{*/

+

+/** Interrupt Number Definition */

+typedef enum IRQn

+{

+  /******  Cortex-M0+ Processor Exceptions Numbers *******************************/

+  NonMaskableInt_IRQn      = -14, /**<  2 Non Maskable Interrupt                 */

+  HardFault_IRQn           = -13, /**<  3 Cortex-M0+ Hard Fault Interrupt        */

+  SVCall_IRQn              = -5,  /**< 11 Cortex-M0+ SV Call Interrupt           */

+  PendSV_IRQn              = -2,  /**< 14 Cortex-M0+ Pend SV Interrupt           */

+  SysTick_IRQn             = -1,  /**< 15 Cortex-M0+ System Tick Interrupt       */

+  /******  SAMD20E15-specific Interrupt Numbers ***********************/

+  PM_IRQn                  =  0, /**<  0 SAMD20E15 Power Manager (PM) */

+  SYSCTRL_IRQn             =  1, /**<  1 SAMD20E15 System Control (SYSCTRL) */

+  WDT_IRQn                 =  2, /**<  2 SAMD20E15 Watchdog Timer (WDT) */

+  RTC_IRQn                 =  3, /**<  3 SAMD20E15 Real-Time Counter (RTC) */

+  EIC_IRQn                 =  4, /**<  4 SAMD20E15 External Interrupt Controller (EIC) */

+  NVMCTRL_IRQn             =  5, /**<  5 SAMD20E15 Non-Volatile Memory Controller (NVMCTRL) */

+  EVSYS_IRQn               =  6, /**<  6 SAMD20E15 Event System Interface (EVSYS) */

+  SERCOM0_IRQn             =  7, /**<  7 SAMD20E15 Serial Communication Interface 0 (SERCOM0) */

+  SERCOM1_IRQn             =  8, /**<  8 SAMD20E15 Serial Communication Interface 1 (SERCOM1) */

+  SERCOM2_IRQn             =  9, /**<  9 SAMD20E15 Serial Communication Interface 2 (SERCOM2) */

+  SERCOM3_IRQn             = 10, /**< 10 SAMD20E15 Serial Communication Interface 3 (SERCOM3) */

+  TC0_IRQn                 = 13, /**< 13 SAMD20E15 Basic Timer Counter 0 (TC0) */

+  TC1_IRQn                 = 14, /**< 14 SAMD20E15 Basic Timer Counter 1 (TC1) */

+  TC2_IRQn                 = 15, /**< 15 SAMD20E15 Basic Timer Counter 2 (TC2) */

+  TC3_IRQn                 = 16, /**< 16 SAMD20E15 Basic Timer Counter 3 (TC3) */

+  TC4_IRQn                 = 17, /**< 17 SAMD20E15 Basic Timer Counter 4 (TC4) */

+  TC5_IRQn                 = 18, /**< 18 SAMD20E15 Basic Timer Counter 5 (TC5) */

+  ADC_IRQn                 = 21, /**< 21 SAMD20E15 Analog Digital Converter (ADC) */

+  AC_IRQn                  = 22, /**< 22 SAMD20E15 Analog Comparators (AC) */

+  DAC_IRQn                 = 23, /**< 23 SAMD20E15 Digital Analog Converter (DAC) */

+

+  PERIPH_COUNT_IRQn        = 24  /**< Number of peripheral IDs */

+} IRQn_Type;

+

+typedef struct _DeviceVectors

+{

+  /* Stack pointer */

+  void* pvStack;

+

+  /* Cortex-M handlers */

+  void* pfnReset_Handler;

+  void* pfnNMI_Handler;

+  void* pfnHardFault_Handler;

+  void* pfnReservedM12;

+  void* pfnReservedM11;

+  void* pfnReservedM10;

+  void* pfnReservedM9;

+  void* pfnReservedM8;

+  void* pfnReservedM7;

+  void* pfnReservedM6;

+  void* pfnSVC_Handler;

+  void* pfnReservedM4;

+  void* pfnReservedM3;

+  void* pfnPendSV_Handler;

+  void* pfnSysTick_Handler;

+

+  /* Peripheral handlers */

+  void* pfnPM_Handler;                    /*  0 Power Manager */

+  void* pfnSYSCTRL_Handler;               /*  1 System Control */

+  void* pfnWDT_Handler;                   /*  2 Watchdog Timer */

+  void* pfnRTC_Handler;                   /*  3 Real-Time Counter */

+  void* pfnEIC_Handler;                   /*  4 External Interrupt Controller */

+  void* pfnNVMCTRL_Handler;               /*  5 Non-Volatile Memory Controller */

+  void* pfnEVSYS_Handler;                 /*  6 Event System Interface */

+  void* pfnSERCOM0_Handler;               /*  7 Serial Communication Interface 0 */

+  void* pfnSERCOM1_Handler;               /*  8 Serial Communication Interface 1 */

+  void* pfnSERCOM2_Handler;               /*  9 Serial Communication Interface 2 */

+  void* pfnSERCOM3_Handler;               /* 10 Serial Communication Interface 3 */

+  void* pfnReserved11;

+  void* pfnReserved12;

+  void* pfnTC0_Handler;                   /* 13 Basic Timer Counter 0 */

+  void* pfnTC1_Handler;                   /* 14 Basic Timer Counter 1 */

+  void* pfnTC2_Handler;                   /* 15 Basic Timer Counter 2 */

+  void* pfnTC3_Handler;                   /* 16 Basic Timer Counter 3 */

+  void* pfnTC4_Handler;                   /* 17 Basic Timer Counter 4 */

+  void* pfnTC5_Handler;                   /* 18 Basic Timer Counter 5 */

+  void* pfnReserved19;

+  void* pfnReserved20;

+  void* pfnADC_Handler;                   /* 21 Analog Digital Converter */

+  void* pfnAC_Handler;                    /* 22 Analog Comparators */

+  void* pfnDAC_Handler;                   /* 23 Digital Analog Converter */

+} DeviceVectors;

+

+/* Cortex-M0+ processor handlers */

+void Reset_Handler               ( void );

+void NMI_Handler                 ( void );

+void HardFault_Handler           ( void );

+void SVC_Handler                 ( void );

+void PendSV_Handler              ( void );

+void SysTick_Handler             ( void );

+

+/* Peripherals handlers */

+void PM_Handler                  ( void );

+void SYSCTRL_Handler             ( void );

+void WDT_Handler                 ( void );

+void RTC_Handler                 ( void );

+void EIC_Handler                 ( void );

+void NVMCTRL_Handler             ( void );

+void EVSYS_Handler               ( void );

+void SERCOM0_Handler             ( void );

+void SERCOM1_Handler             ( void );

+void SERCOM2_Handler             ( void );

+void SERCOM3_Handler             ( void );

+void TC0_Handler                 ( void );

+void TC1_Handler                 ( void );

+void TC2_Handler                 ( void );

+void TC3_Handler                 ( void );

+void TC4_Handler                 ( void );

+void TC5_Handler                 ( void );

+void ADC_Handler                 ( void );

+void AC_Handler                  ( void );

+void DAC_Handler                 ( void );

+

+/*

+ * \brief Configuration of the Cortex-M0+ Processor and Core Peripherals

+ */

+

+#define LITTLE_ENDIAN          1        

+#define __CM0PLUS_REV          1         /*!< Core revision r0p1 */

+#define __MPU_PRESENT          0         /*!< MPU present or not */

+#define __NVIC_PRIO_BITS       2         /*!< Number of bits used for Priority Levels */

+#define __VTOR_PRESENT         1         /*!< VTOR present or not */

+#define __Vendor_SysTickConfig 0         /*!< Set to 1 if different SysTick Config is used */

+

+/**

+ * \brief CMSIS includes

+ */

+

+#include <core_cm0plus.h>

+#if !defined DONT_USE_CMSIS_INIT

+#include "system_samd20.h"

+#endif /* DONT_USE_CMSIS_INIT */

+

+/*@}*/

+

+/* ************************************************************************** */

+/**  SOFTWARE PERIPHERAL API DEFINITION FOR SAMD20E15 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E15_api Peripheral Software API */

+/*@{*/

+

+#include "component/component_ac.h"

+#include "component/component_adc.h"

+#include "component/component_dac.h"

+#include "component/component_dsu.h"

+#include "component/component_eic.h"

+#include "component/component_evsys.h"

+#include "component/component_gclk.h"

+#include "component/component_nvmctrl.h"

+#include "component/component_pac.h"

+#include "component/component_pm.h"

+#include "component/component_port.h"

+#include "component/component_rtc.h"

+#include "component/component_sercom.h"

+#include "component/component_sysctrl.h"

+#include "component/component_tc.h"

+#include "component/component_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  REGISTERS ACCESS DEFINITIONS FOR SAMD20E15 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E15_reg Registers Access Definitions */

+/*@{*/

+

+#include "instance/instance_ac.h"

+#include "instance/instance_adc.h"

+#include "instance/instance_dac.h"

+#include "instance/instance_dsu.h"

+#include "instance/instance_eic.h"

+#include "instance/instance_evsys.h"

+#include "instance/instance_gclk.h"

+#include "instance/instance_nvmctrl.h"

+#include "instance/instance_pac0.h"

+#include "instance/instance_pac1.h"

+#include "instance/instance_pac2.h"

+#include "instance/instance_pm.h"

+#include "instance/instance_port.h"

+#include "instance/instance_rtc.h"

+#include "instance/instance_sercom0.h"

+#include "instance/instance_sercom1.h"

+#include "instance/instance_sercom2.h"

+#include "instance/instance_sercom3.h"

+#include "instance/instance_sysctrl.h"

+#include "instance/instance_tc0.h"

+#include "instance/instance_tc1.h"

+#include "instance/instance_tc2.h"

+#include "instance/instance_tc3.h"

+#include "instance/instance_tc4.h"

+#include "instance/instance_tc5.h"

+#include "instance/instance_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  PERIPHERAL ID DEFINITIONS FOR SAMD20E15 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E15_id Peripheral Ids Definitions */

+/*@{*/

+

+// Peripheral instances on HPB0 bridge

+#define ID_PAC0           0 /**< \brief Peripheral Access Controller PAC (PAC0) */

+#define ID_PM             1 /**< \brief Power Manager (PM) */

+#define ID_SYSCTRL        2 /**< \brief System Control (SYSCTRL) */

+#define ID_GCLK           3 /**< \brief Generic Clock Generator (GCLK) */

+#define ID_WDT            4 /**< \brief Watchdog Timer (WDT) */

+#define ID_RTC            5 /**< \brief Real-Time Counter (RTC) */

+#define ID_EIC            6 /**< \brief External Interrupt Controller (EIC) */

+

+// Peripheral instances on HPB1 bridge

+#define ID_PAC1          32 /**< \brief Peripheral Access Controller PAC (PAC1) */

+#define ID_DSU           33 /**< \brief Device Service Unit (DSU) */

+#define ID_NVMCTRL       34 /**< \brief Non-Volatile Memory Controller (NVMCTRL) */

+#define ID_PORT          35 /**< \brief Port Module (PORT) */

+

+// Peripheral instances on HPB2 bridge

+#define ID_PAC2          64 /**< \brief Peripheral Access Controller PAC (PAC2) */

+#define ID_EVSYS         65 /**< \brief Event System Interface (EVSYS) */

+#define ID_SERCOM0       66 /**< \brief Serial Communication Interface SERCOM (SERCOM0) */

+#define ID_SERCOM1       67 /**< \brief Serial Communication Interface SERCOM (SERCOM1) */

+#define ID_SERCOM2       68 /**< \brief Serial Communication Interface SERCOM (SERCOM2) */

+#define ID_SERCOM3       69 /**< \brief Serial Communication Interface SERCOM (SERCOM3) */

+#define ID_TC0           72 /**< \brief Basic Timer Counter TC (TC0) */

+#define ID_TC1           73 /**< \brief Basic Timer Counter TC (TC1) */

+#define ID_TC2           74 /**< \brief Basic Timer Counter TC (TC2) */

+#define ID_TC3           75 /**< \brief Basic Timer Counter TC (TC3) */

+#define ID_TC4           76 /**< \brief Basic Timer Counter TC (TC4) */

+#define ID_TC5           77 /**< \brief Basic Timer Counter TC (TC5) */

+#define ID_ADC           80 /**< \brief Analog Digital Converter (ADC) */

+#define ID_AC            81 /**< \brief Analog Comparators (AC) */

+#define ID_DAC           82 /**< \brief Digital Analog Converter (DAC) */

+

+#define ID_PERIPH_COUNT  83 /**< \brief Number of peripheral IDs */

+/*@}*/

+

+/* ************************************************************************** */

+/**  BASE ADDRESS DEFINITIONS FOR SAMD20E15 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E15_base Peripheral Base Address Definitions */

+/*@{*/

+

+#if defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)

+#define AC                            (0x42004400U) /**< \brief (AC) APB Base Address */

+#define ADC                           (0x42004000U) /**< \brief (ADC) APB Base Address */

+#define DAC                           (0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DSU                           (0x41002000U) /**< \brief (DSU) APB Base Address */

+#define EIC                           (0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EVSYS                         (0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define GCLK                          (0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define NVMCTRL                       (0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define PAC0                          (0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1                          (0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2                          (0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PM                            (0x40000400U) /**< \brief (PM) APB Base Address */

+#define PORT                          (0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS                    (0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define RTC                           (0x40001400U) /**< \brief (RTC) APB Base Address */

+#define SERCOM0                       (0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1                       (0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2                       (0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3                       (0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SYSCTRL                       (0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define TC0                           (0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1                           (0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2                           (0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3                           (0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4                           (0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5                           (0x42003400U) /**< \brief (TC5) APB Base Address */

+#define WDT                           (0x40001000U) /**< \brief (WDT) APB Base Address */

+#else

+#define AC                ((Ac       *)0x42004400U) /**< \brief (AC) APB Base Address */

+#define AC_INST_NUM       1                         /**< \brief (AC) Number of instances */

+#define AC_INSTS          { AC }                    /**< \brief (AC) Instances List */

+

+#define ADC               ((Adc      *)0x42004000U) /**< \brief (ADC) APB Base Address */

+#define ADC_INST_NUM      1                         /**< \brief (ADC) Number of instances */

+#define ADC_INSTS         { ADC }                   /**< \brief (ADC) Instances List */

+

+#define DAC               ((Dac      *)0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DAC_INST_NUM      1                         /**< \brief (DAC) Number of instances */

+#define DAC_INSTS         { DAC }                   /**< \brief (DAC) Instances List */

+

+#define DSU               ((Dsu      *)0x41002000U) /**< \brief (DSU) APB Base Address */

+#define DSU_INST_NUM      1                         /**< \brief (DSU) Number of instances */

+#define DSU_INSTS         { DSU }                   /**< \brief (DSU) Instances List */

+

+#define EIC               ((Eic      *)0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EIC_INST_NUM      1                         /**< \brief (EIC) Number of instances */

+#define EIC_INSTS         { EIC }                   /**< \brief (EIC) Instances List */

+

+#define EVSYS             ((Evsys    *)0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define EVSYS_INST_NUM    1                         /**< \brief (EVSYS) Number of instances */

+#define EVSYS_INSTS       { EVSYS }                 /**< \brief (EVSYS) Instances List */

+

+#define GCLK              ((Gclk     *)0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define GCLK_INST_NUM     1                         /**< \brief (GCLK) Number of instances */

+#define GCLK_INSTS        { GCLK }                  /**< \brief (GCLK) Instances List */

+

+#define NVMCTRL           ((Nvmctrl  *)0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define NVMCTRL_INST_NUM  1                         /**< \brief (NVMCTRL) Number of instances */

+#define NVMCTRL_INSTS     { NVMCTRL }               /**< \brief (NVMCTRL) Instances List */

+

+#define PAC0              ((Pac      *)0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1              ((Pac      *)0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2              ((Pac      *)0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PAC_INST_NUM      3                         /**< \brief (PAC) Number of instances */

+#define PAC_INSTS         { PAC0, PAC1, PAC2 }      /**< \brief (PAC) Instances List */

+

+#define PM                ((Pm       *)0x40000400U) /**< \brief (PM) APB Base Address */

+#define PM_INST_NUM       1                         /**< \brief (PM) Number of instances */

+#define PM_INSTS          { PM }                    /**< \brief (PM) Instances List */

+

+#define PORT              ((Port     *)0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS        ((Port     *)0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define PORT_INST_NUM     1                         /**< \brief (PORT) Number of instances */

+#define PORT_INSTS        { PORT }                  /**< \brief (PORT) Instances List */

+

+#define RTC               ((Rtc      *)0x40001400U) /**< \brief (RTC) APB Base Address */

+#define RTC_INST_NUM      1                         /**< \brief (RTC) Number of instances */

+#define RTC_INSTS         { RTC }                   /**< \brief (RTC) Instances List */

+

+#define SERCOM0           ((Sercom   *)0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1           ((Sercom   *)0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2           ((Sercom   *)0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3           ((Sercom   *)0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM_INST_NUM   4                         /**< \brief (SERCOM) Number of instances */

+#define SERCOM_INSTS      { SERCOM0, SERCOM1, SERCOM2, SERCOM3 } /**< \brief (SERCOM) Instances List */

+

+#define SYSCTRL           ((Sysctrl  *)0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define SYSCTRL_INST_NUM  1                         /**< \brief (SYSCTRL) Number of instances */

+#define SYSCTRL_INSTS     { SYSCTRL }               /**< \brief (SYSCTRL) Instances List */

+

+#define TC0               ((Tc       *)0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1               ((Tc       *)0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2               ((Tc       *)0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3               ((Tc       *)0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4               ((Tc       *)0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5               ((Tc       *)0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC_INST_NUM       6                         /**< \brief (TC) Number of instances */

+#define TC_INSTS          { TC0, TC1, TC2, TC3, TC4, TC5 } /**< \brief (TC) Instances List */

+

+#define WDT               ((Wdt      *)0x40001000U) /**< \brief (WDT) APB Base Address */

+#define WDT_INST_NUM      1                         /**< \brief (WDT) Number of instances */

+#define WDT_INSTS         { WDT }                   /**< \brief (WDT) Instances List */

+

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+/*@}*/

+

+/* ************************************************************************** */

+/**  PORT DEFINITIONS FOR SAMD20E15 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E15_port PORT Definitions */

+/*@{*/

+

+#include "pio/pio_samd20e15.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  MEMORY MAPPING DEFINITIONS FOR SAMD20E15 */

+/* ************************************************************************** */

+

+#define FLASH_SIZE            0x8000 /* 32 kB */

+#define FLASH_PAGE_SIZE       64

+#define FLASH_NB_OF_PAGES     512

+#define FLASH_USER_PAGE_SIZE  64

+#define HRAMC0_SIZE           0x1000 /* 4 kB */

+#define FLASH_ADDR            (0x00000000U) /**< FLASH base address */

+#define FLASH_USER_PAGE_ADDR  (0x00800000U) /**< FLASH_USER_PAGE base address */

+#define HRAMC0_ADDR           (0x20000000U) /**< HRAMC0 base address */

+

+/* ************************************************************************** */

+/**  ELECTRICAL DEFINITIONS FOR SAMD20E15 */

+/* ************************************************************************** */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+/*@}*/

+

+#endif /* SAMD20E15_H */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20e16.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20e16.h
new file mode 100644
index 0000000..20e6019
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20e16.h
@@ -0,0 +1,484 @@
+/**

+ * \file

+ *

+ * \brief Header file for SAMD20E16

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20E16_

+#define _SAMD20E16_

+

+/**

+ * \ingroup SAMD20_definitions

+ * \addtogroup SAMD20E16_definitions SAMD20E16 definitions

+ * This file defines all structures and symbols for SAMD20E16:

+ *   - registers and bitfields

+ *   - peripheral base address

+ *   - peripheral ID

+ *   - PIO definitions

+*/

+/*@{*/

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#include <stdint.h>

+#ifndef __cplusplus

+typedef volatile const uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile const uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile const uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#else

+typedef volatile       uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile       uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile       uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#endif

+typedef volatile       uint32_t WoReg;   /**< Write only 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t WoReg16; /**< Write only 16-bit register (volatile unsigned int) */

+typedef volatile       uint32_t WoReg8;  /**< Write only  8-bit register (volatile unsigned int) */

+typedef volatile       uint32_t RwReg;   /**< Read-Write 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t RwReg16; /**< Read-Write 16-bit register (volatile unsigned int) */

+typedef volatile       uint8_t  RwReg8;  /**< Read-Write  8-bit register (volatile unsigned int) */

+#define CAST(type, value) ((type *)(value))

+#define REG_ACCESS(type, address) (*(type*)(address)) /**< C code: Register value */

+#else

+#define CAST(type, value) (value)

+#define REG_ACCESS(type, address) (address) /**< Assembly code: Register address */

+#endif

+

+/* ************************************************************************** */

+/**  CMSIS DEFINITIONS FOR SAMD20E16 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E16_cmsis CMSIS Definitions */

+/*@{*/

+

+/** Interrupt Number Definition */

+typedef enum IRQn

+{

+  /******  Cortex-M0+ Processor Exceptions Numbers *******************************/

+  NonMaskableInt_IRQn      = -14, /**<  2 Non Maskable Interrupt                 */

+  HardFault_IRQn           = -13, /**<  3 Cortex-M0+ Hard Fault Interrupt        */

+  SVCall_IRQn              = -5,  /**< 11 Cortex-M0+ SV Call Interrupt           */

+  PendSV_IRQn              = -2,  /**< 14 Cortex-M0+ Pend SV Interrupt           */

+  SysTick_IRQn             = -1,  /**< 15 Cortex-M0+ System Tick Interrupt       */

+  /******  SAMD20E16-specific Interrupt Numbers ***********************/

+  PM_IRQn                  =  0, /**<  0 SAMD20E16 Power Manager (PM) */

+  SYSCTRL_IRQn             =  1, /**<  1 SAMD20E16 System Control (SYSCTRL) */

+  WDT_IRQn                 =  2, /**<  2 SAMD20E16 Watchdog Timer (WDT) */

+  RTC_IRQn                 =  3, /**<  3 SAMD20E16 Real-Time Counter (RTC) */

+  EIC_IRQn                 =  4, /**<  4 SAMD20E16 External Interrupt Controller (EIC) */

+  NVMCTRL_IRQn             =  5, /**<  5 SAMD20E16 Non-Volatile Memory Controller (NVMCTRL) */

+  EVSYS_IRQn               =  6, /**<  6 SAMD20E16 Event System Interface (EVSYS) */

+  SERCOM0_IRQn             =  7, /**<  7 SAMD20E16 Serial Communication Interface 0 (SERCOM0) */

+  SERCOM1_IRQn             =  8, /**<  8 SAMD20E16 Serial Communication Interface 1 (SERCOM1) */

+  SERCOM2_IRQn             =  9, /**<  9 SAMD20E16 Serial Communication Interface 2 (SERCOM2) */

+  SERCOM3_IRQn             = 10, /**< 10 SAMD20E16 Serial Communication Interface 3 (SERCOM3) */

+  TC0_IRQn                 = 13, /**< 13 SAMD20E16 Basic Timer Counter 0 (TC0) */

+  TC1_IRQn                 = 14, /**< 14 SAMD20E16 Basic Timer Counter 1 (TC1) */

+  TC2_IRQn                 = 15, /**< 15 SAMD20E16 Basic Timer Counter 2 (TC2) */

+  TC3_IRQn                 = 16, /**< 16 SAMD20E16 Basic Timer Counter 3 (TC3) */

+  TC4_IRQn                 = 17, /**< 17 SAMD20E16 Basic Timer Counter 4 (TC4) */

+  TC5_IRQn                 = 18, /**< 18 SAMD20E16 Basic Timer Counter 5 (TC5) */

+  ADC_IRQn                 = 21, /**< 21 SAMD20E16 Analog Digital Converter (ADC) */

+  AC_IRQn                  = 22, /**< 22 SAMD20E16 Analog Comparators (AC) */

+  DAC_IRQn                 = 23, /**< 23 SAMD20E16 Digital Analog Converter (DAC) */

+

+  PERIPH_COUNT_IRQn        = 24  /**< Number of peripheral IDs */

+} IRQn_Type;

+

+typedef struct _DeviceVectors

+{

+  /* Stack pointer */

+  void* pvStack;

+

+  /* Cortex-M handlers */

+  void* pfnReset_Handler;

+  void* pfnNMI_Handler;

+  void* pfnHardFault_Handler;

+  void* pfnReservedM12;

+  void* pfnReservedM11;

+  void* pfnReservedM10;

+  void* pfnReservedM9;

+  void* pfnReservedM8;

+  void* pfnReservedM7;

+  void* pfnReservedM6;

+  void* pfnSVC_Handler;

+  void* pfnReservedM4;

+  void* pfnReservedM3;

+  void* pfnPendSV_Handler;

+  void* pfnSysTick_Handler;

+

+  /* Peripheral handlers */

+  void* pfnPM_Handler;                    /*  0 Power Manager */

+  void* pfnSYSCTRL_Handler;               /*  1 System Control */

+  void* pfnWDT_Handler;                   /*  2 Watchdog Timer */

+  void* pfnRTC_Handler;                   /*  3 Real-Time Counter */

+  void* pfnEIC_Handler;                   /*  4 External Interrupt Controller */

+  void* pfnNVMCTRL_Handler;               /*  5 Non-Volatile Memory Controller */

+  void* pfnEVSYS_Handler;                 /*  6 Event System Interface */

+  void* pfnSERCOM0_Handler;               /*  7 Serial Communication Interface 0 */

+  void* pfnSERCOM1_Handler;               /*  8 Serial Communication Interface 1 */

+  void* pfnSERCOM2_Handler;               /*  9 Serial Communication Interface 2 */

+  void* pfnSERCOM3_Handler;               /* 10 Serial Communication Interface 3 */

+  void* pfnReserved11;

+  void* pfnReserved12;

+  void* pfnTC0_Handler;                   /* 13 Basic Timer Counter 0 */

+  void* pfnTC1_Handler;                   /* 14 Basic Timer Counter 1 */

+  void* pfnTC2_Handler;                   /* 15 Basic Timer Counter 2 */

+  void* pfnTC3_Handler;                   /* 16 Basic Timer Counter 3 */

+  void* pfnTC4_Handler;                   /* 17 Basic Timer Counter 4 */

+  void* pfnTC5_Handler;                   /* 18 Basic Timer Counter 5 */

+  void* pfnReserved19;

+  void* pfnReserved20;

+  void* pfnADC_Handler;                   /* 21 Analog Digital Converter */

+  void* pfnAC_Handler;                    /* 22 Analog Comparators */

+  void* pfnDAC_Handler;                   /* 23 Digital Analog Converter */

+} DeviceVectors;

+

+/* Cortex-M0+ processor handlers */

+void Reset_Handler               ( void );

+void NMI_Handler                 ( void );

+void HardFault_Handler           ( void );

+void SVC_Handler                 ( void );

+void PendSV_Handler              ( void );

+void SysTick_Handler             ( void );

+

+/* Peripherals handlers */

+void PM_Handler                  ( void );

+void SYSCTRL_Handler             ( void );

+void WDT_Handler                 ( void );

+void RTC_Handler                 ( void );

+void EIC_Handler                 ( void );

+void NVMCTRL_Handler             ( void );

+void EVSYS_Handler               ( void );

+void SERCOM0_Handler             ( void );

+void SERCOM1_Handler             ( void );

+void SERCOM2_Handler             ( void );

+void SERCOM3_Handler             ( void );

+void TC0_Handler                 ( void );

+void TC1_Handler                 ( void );

+void TC2_Handler                 ( void );

+void TC3_Handler                 ( void );

+void TC4_Handler                 ( void );

+void TC5_Handler                 ( void );

+void ADC_Handler                 ( void );

+void AC_Handler                  ( void );

+void DAC_Handler                 ( void );

+

+/*

+ * \brief Configuration of the Cortex-M0+ Processor and Core Peripherals

+ */

+

+#define LITTLE_ENDIAN          1        

+#define __CM0PLUS_REV          1         /*!< Core revision r0p1 */

+#define __MPU_PRESENT          0         /*!< MPU present or not */

+#define __NVIC_PRIO_BITS       2         /*!< Number of bits used for Priority Levels */

+#define __VTOR_PRESENT         1         /*!< VTOR present or not */

+#define __Vendor_SysTickConfig 0         /*!< Set to 1 if different SysTick Config is used */

+

+/**

+ * \brief CMSIS includes

+ */

+

+#include <core_cm0plus.h>

+#if !defined DONT_USE_CMSIS_INIT

+#include "system_samd20.h"

+#endif /* DONT_USE_CMSIS_INIT */

+

+/*@}*/

+

+/* ************************************************************************** */

+/**  SOFTWARE PERIPHERAL API DEFINITION FOR SAMD20E16 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E16_api Peripheral Software API */

+/*@{*/

+

+#include "component/component_ac.h"

+#include "component/component_adc.h"

+#include "component/component_dac.h"

+#include "component/component_dsu.h"

+#include "component/component_eic.h"

+#include "component/component_evsys.h"

+#include "component/component_gclk.h"

+#include "component/component_nvmctrl.h"

+#include "component/component_pac.h"

+#include "component/component_pm.h"

+#include "component/component_port.h"

+#include "component/component_rtc.h"

+#include "component/component_sercom.h"

+#include "component/component_sysctrl.h"

+#include "component/component_tc.h"

+#include "component/component_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  REGISTERS ACCESS DEFINITIONS FOR SAMD20E16 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E16_reg Registers Access Definitions */

+/*@{*/

+

+#include "instance/instance_ac.h"

+#include "instance/instance_adc.h"

+#include "instance/instance_dac.h"

+#include "instance/instance_dsu.h"

+#include "instance/instance_eic.h"

+#include "instance/instance_evsys.h"

+#include "instance/instance_gclk.h"

+#include "instance/instance_nvmctrl.h"

+#include "instance/instance_pac0.h"

+#include "instance/instance_pac1.h"

+#include "instance/instance_pac2.h"

+#include "instance/instance_pm.h"

+#include "instance/instance_port.h"

+#include "instance/instance_rtc.h"

+#include "instance/instance_sercom0.h"

+#include "instance/instance_sercom1.h"

+#include "instance/instance_sercom2.h"

+#include "instance/instance_sercom3.h"

+#include "instance/instance_sysctrl.h"

+#include "instance/instance_tc0.h"

+#include "instance/instance_tc1.h"

+#include "instance/instance_tc2.h"

+#include "instance/instance_tc3.h"

+#include "instance/instance_tc4.h"

+#include "instance/instance_tc5.h"

+#include "instance/instance_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  PERIPHERAL ID DEFINITIONS FOR SAMD20E16 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E16_id Peripheral Ids Definitions */

+/*@{*/

+

+// Peripheral instances on HPB0 bridge

+#define ID_PAC0           0 /**< \brief Peripheral Access Controller PAC (PAC0) */

+#define ID_PM             1 /**< \brief Power Manager (PM) */

+#define ID_SYSCTRL        2 /**< \brief System Control (SYSCTRL) */

+#define ID_GCLK           3 /**< \brief Generic Clock Generator (GCLK) */

+#define ID_WDT            4 /**< \brief Watchdog Timer (WDT) */

+#define ID_RTC            5 /**< \brief Real-Time Counter (RTC) */

+#define ID_EIC            6 /**< \brief External Interrupt Controller (EIC) */

+

+// Peripheral instances on HPB1 bridge

+#define ID_PAC1          32 /**< \brief Peripheral Access Controller PAC (PAC1) */

+#define ID_DSU           33 /**< \brief Device Service Unit (DSU) */

+#define ID_NVMCTRL       34 /**< \brief Non-Volatile Memory Controller (NVMCTRL) */

+#define ID_PORT          35 /**< \brief Port Module (PORT) */

+

+// Peripheral instances on HPB2 bridge

+#define ID_PAC2          64 /**< \brief Peripheral Access Controller PAC (PAC2) */

+#define ID_EVSYS         65 /**< \brief Event System Interface (EVSYS) */

+#define ID_SERCOM0       66 /**< \brief Serial Communication Interface SERCOM (SERCOM0) */

+#define ID_SERCOM1       67 /**< \brief Serial Communication Interface SERCOM (SERCOM1) */

+#define ID_SERCOM2       68 /**< \brief Serial Communication Interface SERCOM (SERCOM2) */

+#define ID_SERCOM3       69 /**< \brief Serial Communication Interface SERCOM (SERCOM3) */

+#define ID_TC0           72 /**< \brief Basic Timer Counter TC (TC0) */

+#define ID_TC1           73 /**< \brief Basic Timer Counter TC (TC1) */

+#define ID_TC2           74 /**< \brief Basic Timer Counter TC (TC2) */

+#define ID_TC3           75 /**< \brief Basic Timer Counter TC (TC3) */

+#define ID_TC4           76 /**< \brief Basic Timer Counter TC (TC4) */

+#define ID_TC5           77 /**< \brief Basic Timer Counter TC (TC5) */

+#define ID_ADC           80 /**< \brief Analog Digital Converter (ADC) */

+#define ID_AC            81 /**< \brief Analog Comparators (AC) */

+#define ID_DAC           82 /**< \brief Digital Analog Converter (DAC) */

+

+#define ID_PERIPH_COUNT  83 /**< \brief Number of peripheral IDs */

+/*@}*/

+

+/* ************************************************************************** */

+/**  BASE ADDRESS DEFINITIONS FOR SAMD20E16 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E16_base Peripheral Base Address Definitions */

+/*@{*/

+

+#if defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)

+#define AC                            (0x42004400U) /**< \brief (AC) APB Base Address */

+#define ADC                           (0x42004000U) /**< \brief (ADC) APB Base Address */

+#define DAC                           (0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DSU                           (0x41002000U) /**< \brief (DSU) APB Base Address */

+#define EIC                           (0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EVSYS                         (0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define GCLK                          (0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define NVMCTRL                       (0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define PAC0                          (0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1                          (0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2                          (0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PM                            (0x40000400U) /**< \brief (PM) APB Base Address */

+#define PORT                          (0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS                    (0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define RTC                           (0x40001400U) /**< \brief (RTC) APB Base Address */

+#define SERCOM0                       (0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1                       (0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2                       (0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3                       (0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SYSCTRL                       (0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define TC0                           (0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1                           (0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2                           (0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3                           (0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4                           (0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5                           (0x42003400U) /**< \brief (TC5) APB Base Address */

+#define WDT                           (0x40001000U) /**< \brief (WDT) APB Base Address */

+#else

+#define AC                ((Ac       *)0x42004400U) /**< \brief (AC) APB Base Address */

+#define AC_INST_NUM       1                         /**< \brief (AC) Number of instances */

+#define AC_INSTS          { AC }                    /**< \brief (AC) Instances List */

+

+#define ADC               ((Adc      *)0x42004000U) /**< \brief (ADC) APB Base Address */

+#define ADC_INST_NUM      1                         /**< \brief (ADC) Number of instances */

+#define ADC_INSTS         { ADC }                   /**< \brief (ADC) Instances List */

+

+#define DAC               ((Dac      *)0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DAC_INST_NUM      1                         /**< \brief (DAC) Number of instances */

+#define DAC_INSTS         { DAC }                   /**< \brief (DAC) Instances List */

+

+#define DSU               ((Dsu      *)0x41002000U) /**< \brief (DSU) APB Base Address */

+#define DSU_INST_NUM      1                         /**< \brief (DSU) Number of instances */

+#define DSU_INSTS         { DSU }                   /**< \brief (DSU) Instances List */

+

+#define EIC               ((Eic      *)0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EIC_INST_NUM      1                         /**< \brief (EIC) Number of instances */

+#define EIC_INSTS         { EIC }                   /**< \brief (EIC) Instances List */

+

+#define EVSYS             ((Evsys    *)0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define EVSYS_INST_NUM    1                         /**< \brief (EVSYS) Number of instances */

+#define EVSYS_INSTS       { EVSYS }                 /**< \brief (EVSYS) Instances List */

+

+#define GCLK              ((Gclk     *)0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define GCLK_INST_NUM     1                         /**< \brief (GCLK) Number of instances */

+#define GCLK_INSTS        { GCLK }                  /**< \brief (GCLK) Instances List */

+

+#define NVMCTRL           ((Nvmctrl  *)0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define NVMCTRL_INST_NUM  1                         /**< \brief (NVMCTRL) Number of instances */

+#define NVMCTRL_INSTS     { NVMCTRL }               /**< \brief (NVMCTRL) Instances List */

+

+#define PAC0              ((Pac      *)0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1              ((Pac      *)0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2              ((Pac      *)0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PAC_INST_NUM      3                         /**< \brief (PAC) Number of instances */

+#define PAC_INSTS         { PAC0, PAC1, PAC2 }      /**< \brief (PAC) Instances List */

+

+#define PM                ((Pm       *)0x40000400U) /**< \brief (PM) APB Base Address */

+#define PM_INST_NUM       1                         /**< \brief (PM) Number of instances */

+#define PM_INSTS          { PM }                    /**< \brief (PM) Instances List */

+

+#define PORT              ((Port     *)0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS        ((Port     *)0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define PORT_INST_NUM     1                         /**< \brief (PORT) Number of instances */

+#define PORT_INSTS        { PORT }                  /**< \brief (PORT) Instances List */

+

+#define RTC               ((Rtc      *)0x40001400U) /**< \brief (RTC) APB Base Address */

+#define RTC_INST_NUM      1                         /**< \brief (RTC) Number of instances */

+#define RTC_INSTS         { RTC }                   /**< \brief (RTC) Instances List */

+

+#define SERCOM0           ((Sercom   *)0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1           ((Sercom   *)0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2           ((Sercom   *)0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3           ((Sercom   *)0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM_INST_NUM   4                         /**< \brief (SERCOM) Number of instances */

+#define SERCOM_INSTS      { SERCOM0, SERCOM1, SERCOM2, SERCOM3 } /**< \brief (SERCOM) Instances List */

+

+#define SYSCTRL           ((Sysctrl  *)0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define SYSCTRL_INST_NUM  1                         /**< \brief (SYSCTRL) Number of instances */

+#define SYSCTRL_INSTS     { SYSCTRL }               /**< \brief (SYSCTRL) Instances List */

+

+#define TC0               ((Tc       *)0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1               ((Tc       *)0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2               ((Tc       *)0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3               ((Tc       *)0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4               ((Tc       *)0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5               ((Tc       *)0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC_INST_NUM       6                         /**< \brief (TC) Number of instances */

+#define TC_INSTS          { TC0, TC1, TC2, TC3, TC4, TC5 } /**< \brief (TC) Instances List */

+

+#define WDT               ((Wdt      *)0x40001000U) /**< \brief (WDT) APB Base Address */

+#define WDT_INST_NUM      1                         /**< \brief (WDT) Number of instances */

+#define WDT_INSTS         { WDT }                   /**< \brief (WDT) Instances List */

+

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+/*@}*/

+

+/* ************************************************************************** */

+/**  PORT DEFINITIONS FOR SAMD20E16 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E16_port PORT Definitions */

+/*@{*/

+

+#include "pio/pio_samd20e16.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  MEMORY MAPPING DEFINITIONS FOR SAMD20E16 */

+/* ************************************************************************** */

+

+#define FLASH_SIZE            0x10000 /* 64 kB */

+#define FLASH_PAGE_SIZE       64

+#define FLASH_NB_OF_PAGES     1024

+#define FLASH_USER_PAGE_SIZE  64

+#define HRAMC0_SIZE           0x2000 /* 8 kB */

+#define FLASH_ADDR            (0x00000000U) /**< FLASH base address */

+#define FLASH_USER_PAGE_ADDR  (0x00800000U) /**< FLASH_USER_PAGE base address */

+#define HRAMC0_ADDR           (0x20000000U) /**< HRAMC0 base address */

+

+/* ************************************************************************** */

+/**  ELECTRICAL DEFINITIONS FOR SAMD20E16 */

+/* ************************************************************************** */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+/*@}*/

+

+#endif /* SAMD20E16_H */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20e17.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20e17.h
new file mode 100644
index 0000000..4ff2f87
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20e17.h
@@ -0,0 +1,484 @@
+/**

+ * \file

+ *

+ * \brief Header file for SAMD20E17

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20E17_

+#define _SAMD20E17_

+

+/**

+ * \ingroup SAMD20_definitions

+ * \addtogroup SAMD20E17_definitions SAMD20E17 definitions

+ * This file defines all structures and symbols for SAMD20E17:

+ *   - registers and bitfields

+ *   - peripheral base address

+ *   - peripheral ID

+ *   - PIO definitions

+*/

+/*@{*/

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#include <stdint.h>

+#ifndef __cplusplus

+typedef volatile const uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile const uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile const uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#else

+typedef volatile       uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile       uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile       uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#endif

+typedef volatile       uint32_t WoReg;   /**< Write only 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t WoReg16; /**< Write only 16-bit register (volatile unsigned int) */

+typedef volatile       uint32_t WoReg8;  /**< Write only  8-bit register (volatile unsigned int) */

+typedef volatile       uint32_t RwReg;   /**< Read-Write 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t RwReg16; /**< Read-Write 16-bit register (volatile unsigned int) */

+typedef volatile       uint8_t  RwReg8;  /**< Read-Write  8-bit register (volatile unsigned int) */

+#define CAST(type, value) ((type *)(value))

+#define REG_ACCESS(type, address) (*(type*)(address)) /**< C code: Register value */

+#else

+#define CAST(type, value) (value)

+#define REG_ACCESS(type, address) (address) /**< Assembly code: Register address */

+#endif

+

+/* ************************************************************************** */

+/**  CMSIS DEFINITIONS FOR SAMD20E17 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E17_cmsis CMSIS Definitions */

+/*@{*/

+

+/** Interrupt Number Definition */

+typedef enum IRQn

+{

+  /******  Cortex-M0+ Processor Exceptions Numbers *******************************/

+  NonMaskableInt_IRQn      = -14, /**<  2 Non Maskable Interrupt                 */

+  HardFault_IRQn           = -13, /**<  3 Cortex-M0+ Hard Fault Interrupt        */

+  SVCall_IRQn              = -5,  /**< 11 Cortex-M0+ SV Call Interrupt           */

+  PendSV_IRQn              = -2,  /**< 14 Cortex-M0+ Pend SV Interrupt           */

+  SysTick_IRQn             = -1,  /**< 15 Cortex-M0+ System Tick Interrupt       */

+  /******  SAMD20E17-specific Interrupt Numbers ***********************/

+  PM_IRQn                  =  0, /**<  0 SAMD20E17 Power Manager (PM) */

+  SYSCTRL_IRQn             =  1, /**<  1 SAMD20E17 System Control (SYSCTRL) */

+  WDT_IRQn                 =  2, /**<  2 SAMD20E17 Watchdog Timer (WDT) */

+  RTC_IRQn                 =  3, /**<  3 SAMD20E17 Real-Time Counter (RTC) */

+  EIC_IRQn                 =  4, /**<  4 SAMD20E17 External Interrupt Controller (EIC) */

+  NVMCTRL_IRQn             =  5, /**<  5 SAMD20E17 Non-Volatile Memory Controller (NVMCTRL) */

+  EVSYS_IRQn               =  6, /**<  6 SAMD20E17 Event System Interface (EVSYS) */

+  SERCOM0_IRQn             =  7, /**<  7 SAMD20E17 Serial Communication Interface 0 (SERCOM0) */

+  SERCOM1_IRQn             =  8, /**<  8 SAMD20E17 Serial Communication Interface 1 (SERCOM1) */

+  SERCOM2_IRQn             =  9, /**<  9 SAMD20E17 Serial Communication Interface 2 (SERCOM2) */

+  SERCOM3_IRQn             = 10, /**< 10 SAMD20E17 Serial Communication Interface 3 (SERCOM3) */

+  TC0_IRQn                 = 13, /**< 13 SAMD20E17 Basic Timer Counter 0 (TC0) */

+  TC1_IRQn                 = 14, /**< 14 SAMD20E17 Basic Timer Counter 1 (TC1) */

+  TC2_IRQn                 = 15, /**< 15 SAMD20E17 Basic Timer Counter 2 (TC2) */

+  TC3_IRQn                 = 16, /**< 16 SAMD20E17 Basic Timer Counter 3 (TC3) */

+  TC4_IRQn                 = 17, /**< 17 SAMD20E17 Basic Timer Counter 4 (TC4) */

+  TC5_IRQn                 = 18, /**< 18 SAMD20E17 Basic Timer Counter 5 (TC5) */

+  ADC_IRQn                 = 21, /**< 21 SAMD20E17 Analog Digital Converter (ADC) */

+  AC_IRQn                  = 22, /**< 22 SAMD20E17 Analog Comparators (AC) */

+  DAC_IRQn                 = 23, /**< 23 SAMD20E17 Digital Analog Converter (DAC) */

+

+  PERIPH_COUNT_IRQn        = 24  /**< Number of peripheral IDs */

+} IRQn_Type;

+

+typedef struct _DeviceVectors

+{

+  /* Stack pointer */

+  void* pvStack;

+

+  /* Cortex-M handlers */

+  void* pfnReset_Handler;

+  void* pfnNMI_Handler;

+  void* pfnHardFault_Handler;

+  void* pfnReservedM12;

+  void* pfnReservedM11;

+  void* pfnReservedM10;

+  void* pfnReservedM9;

+  void* pfnReservedM8;

+  void* pfnReservedM7;

+  void* pfnReservedM6;

+  void* pfnSVC_Handler;

+  void* pfnReservedM4;

+  void* pfnReservedM3;

+  void* pfnPendSV_Handler;

+  void* pfnSysTick_Handler;

+

+  /* Peripheral handlers */

+  void* pfnPM_Handler;                    /*  0 Power Manager */

+  void* pfnSYSCTRL_Handler;               /*  1 System Control */

+  void* pfnWDT_Handler;                   /*  2 Watchdog Timer */

+  void* pfnRTC_Handler;                   /*  3 Real-Time Counter */

+  void* pfnEIC_Handler;                   /*  4 External Interrupt Controller */

+  void* pfnNVMCTRL_Handler;               /*  5 Non-Volatile Memory Controller */

+  void* pfnEVSYS_Handler;                 /*  6 Event System Interface */

+  void* pfnSERCOM0_Handler;               /*  7 Serial Communication Interface 0 */

+  void* pfnSERCOM1_Handler;               /*  8 Serial Communication Interface 1 */

+  void* pfnSERCOM2_Handler;               /*  9 Serial Communication Interface 2 */

+  void* pfnSERCOM3_Handler;               /* 10 Serial Communication Interface 3 */

+  void* pfnReserved11;

+  void* pfnReserved12;

+  void* pfnTC0_Handler;                   /* 13 Basic Timer Counter 0 */

+  void* pfnTC1_Handler;                   /* 14 Basic Timer Counter 1 */

+  void* pfnTC2_Handler;                   /* 15 Basic Timer Counter 2 */

+  void* pfnTC3_Handler;                   /* 16 Basic Timer Counter 3 */

+  void* pfnTC4_Handler;                   /* 17 Basic Timer Counter 4 */

+  void* pfnTC5_Handler;                   /* 18 Basic Timer Counter 5 */

+  void* pfnReserved19;

+  void* pfnReserved20;

+  void* pfnADC_Handler;                   /* 21 Analog Digital Converter */

+  void* pfnAC_Handler;                    /* 22 Analog Comparators */

+  void* pfnDAC_Handler;                   /* 23 Digital Analog Converter */

+} DeviceVectors;

+

+/* Cortex-M0+ processor handlers */

+void Reset_Handler               ( void );

+void NMI_Handler                 ( void );

+void HardFault_Handler           ( void );

+void SVC_Handler                 ( void );

+void PendSV_Handler              ( void );

+void SysTick_Handler             ( void );

+

+/* Peripherals handlers */

+void PM_Handler                  ( void );

+void SYSCTRL_Handler             ( void );

+void WDT_Handler                 ( void );

+void RTC_Handler                 ( void );

+void EIC_Handler                 ( void );

+void NVMCTRL_Handler             ( void );

+void EVSYS_Handler               ( void );

+void SERCOM0_Handler             ( void );

+void SERCOM1_Handler             ( void );

+void SERCOM2_Handler             ( void );

+void SERCOM3_Handler             ( void );

+void TC0_Handler                 ( void );

+void TC1_Handler                 ( void );

+void TC2_Handler                 ( void );

+void TC3_Handler                 ( void );

+void TC4_Handler                 ( void );

+void TC5_Handler                 ( void );

+void ADC_Handler                 ( void );

+void AC_Handler                  ( void );

+void DAC_Handler                 ( void );

+

+/*

+ * \brief Configuration of the Cortex-M0+ Processor and Core Peripherals

+ */

+

+#define LITTLE_ENDIAN          1        

+#define __CM0PLUS_REV          1         /*!< Core revision r0p1 */

+#define __MPU_PRESENT          0         /*!< MPU present or not */

+#define __NVIC_PRIO_BITS       2         /*!< Number of bits used for Priority Levels */

+#define __VTOR_PRESENT         1         /*!< VTOR present or not */

+#define __Vendor_SysTickConfig 0         /*!< Set to 1 if different SysTick Config is used */

+

+/**

+ * \brief CMSIS includes

+ */

+

+#include <core_cm0plus.h>

+#if !defined DONT_USE_CMSIS_INIT

+#include "system_samd20.h"

+#endif /* DONT_USE_CMSIS_INIT */

+

+/*@}*/

+

+/* ************************************************************************** */

+/**  SOFTWARE PERIPHERAL API DEFINITION FOR SAMD20E17 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E17_api Peripheral Software API */

+/*@{*/

+

+#include "component/component_ac.h"

+#include "component/component_adc.h"

+#include "component/component_dac.h"

+#include "component/component_dsu.h"

+#include "component/component_eic.h"

+#include "component/component_evsys.h"

+#include "component/component_gclk.h"

+#include "component/component_nvmctrl.h"

+#include "component/component_pac.h"

+#include "component/component_pm.h"

+#include "component/component_port.h"

+#include "component/component_rtc.h"

+#include "component/component_sercom.h"

+#include "component/component_sysctrl.h"

+#include "component/component_tc.h"

+#include "component/component_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  REGISTERS ACCESS DEFINITIONS FOR SAMD20E17 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E17_reg Registers Access Definitions */

+/*@{*/

+

+#include "instance/instance_ac.h"

+#include "instance/instance_adc.h"

+#include "instance/instance_dac.h"

+#include "instance/instance_dsu.h"

+#include "instance/instance_eic.h"

+#include "instance/instance_evsys.h"

+#include "instance/instance_gclk.h"

+#include "instance/instance_nvmctrl.h"

+#include "instance/instance_pac0.h"

+#include "instance/instance_pac1.h"

+#include "instance/instance_pac2.h"

+#include "instance/instance_pm.h"

+#include "instance/instance_port.h"

+#include "instance/instance_rtc.h"

+#include "instance/instance_sercom0.h"

+#include "instance/instance_sercom1.h"

+#include "instance/instance_sercom2.h"

+#include "instance/instance_sercom3.h"

+#include "instance/instance_sysctrl.h"

+#include "instance/instance_tc0.h"

+#include "instance/instance_tc1.h"

+#include "instance/instance_tc2.h"

+#include "instance/instance_tc3.h"

+#include "instance/instance_tc4.h"

+#include "instance/instance_tc5.h"

+#include "instance/instance_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  PERIPHERAL ID DEFINITIONS FOR SAMD20E17 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E17_id Peripheral Ids Definitions */

+/*@{*/

+

+// Peripheral instances on HPB0 bridge

+#define ID_PAC0           0 /**< \brief Peripheral Access Controller PAC (PAC0) */

+#define ID_PM             1 /**< \brief Power Manager (PM) */

+#define ID_SYSCTRL        2 /**< \brief System Control (SYSCTRL) */

+#define ID_GCLK           3 /**< \brief Generic Clock Generator (GCLK) */

+#define ID_WDT            4 /**< \brief Watchdog Timer (WDT) */

+#define ID_RTC            5 /**< \brief Real-Time Counter (RTC) */

+#define ID_EIC            6 /**< \brief External Interrupt Controller (EIC) */

+

+// Peripheral instances on HPB1 bridge

+#define ID_PAC1          32 /**< \brief Peripheral Access Controller PAC (PAC1) */

+#define ID_DSU           33 /**< \brief Device Service Unit (DSU) */

+#define ID_NVMCTRL       34 /**< \brief Non-Volatile Memory Controller (NVMCTRL) */

+#define ID_PORT          35 /**< \brief Port Module (PORT) */

+

+// Peripheral instances on HPB2 bridge

+#define ID_PAC2          64 /**< \brief Peripheral Access Controller PAC (PAC2) */

+#define ID_EVSYS         65 /**< \brief Event System Interface (EVSYS) */

+#define ID_SERCOM0       66 /**< \brief Serial Communication Interface SERCOM (SERCOM0) */

+#define ID_SERCOM1       67 /**< \brief Serial Communication Interface SERCOM (SERCOM1) */

+#define ID_SERCOM2       68 /**< \brief Serial Communication Interface SERCOM (SERCOM2) */

+#define ID_SERCOM3       69 /**< \brief Serial Communication Interface SERCOM (SERCOM3) */

+#define ID_TC0           72 /**< \brief Basic Timer Counter TC (TC0) */

+#define ID_TC1           73 /**< \brief Basic Timer Counter TC (TC1) */

+#define ID_TC2           74 /**< \brief Basic Timer Counter TC (TC2) */

+#define ID_TC3           75 /**< \brief Basic Timer Counter TC (TC3) */

+#define ID_TC4           76 /**< \brief Basic Timer Counter TC (TC4) */

+#define ID_TC5           77 /**< \brief Basic Timer Counter TC (TC5) */

+#define ID_ADC           80 /**< \brief Analog Digital Converter (ADC) */

+#define ID_AC            81 /**< \brief Analog Comparators (AC) */

+#define ID_DAC           82 /**< \brief Digital Analog Converter (DAC) */

+

+#define ID_PERIPH_COUNT  83 /**< \brief Number of peripheral IDs */

+/*@}*/

+

+/* ************************************************************************** */

+/**  BASE ADDRESS DEFINITIONS FOR SAMD20E17 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E17_base Peripheral Base Address Definitions */

+/*@{*/

+

+#if defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)

+#define AC                            (0x42004400U) /**< \brief (AC) APB Base Address */

+#define ADC                           (0x42004000U) /**< \brief (ADC) APB Base Address */

+#define DAC                           (0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DSU                           (0x41002000U) /**< \brief (DSU) APB Base Address */

+#define EIC                           (0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EVSYS                         (0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define GCLK                          (0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define NVMCTRL                       (0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define PAC0                          (0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1                          (0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2                          (0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PM                            (0x40000400U) /**< \brief (PM) APB Base Address */

+#define PORT                          (0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS                    (0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define RTC                           (0x40001400U) /**< \brief (RTC) APB Base Address */

+#define SERCOM0                       (0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1                       (0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2                       (0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3                       (0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SYSCTRL                       (0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define TC0                           (0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1                           (0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2                           (0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3                           (0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4                           (0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5                           (0x42003400U) /**< \brief (TC5) APB Base Address */

+#define WDT                           (0x40001000U) /**< \brief (WDT) APB Base Address */

+#else

+#define AC                ((Ac       *)0x42004400U) /**< \brief (AC) APB Base Address */

+#define AC_INST_NUM       1                         /**< \brief (AC) Number of instances */

+#define AC_INSTS          { AC }                    /**< \brief (AC) Instances List */

+

+#define ADC               ((Adc      *)0x42004000U) /**< \brief (ADC) APB Base Address */

+#define ADC_INST_NUM      1                         /**< \brief (ADC) Number of instances */

+#define ADC_INSTS         { ADC }                   /**< \brief (ADC) Instances List */

+

+#define DAC               ((Dac      *)0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DAC_INST_NUM      1                         /**< \brief (DAC) Number of instances */

+#define DAC_INSTS         { DAC }                   /**< \brief (DAC) Instances List */

+

+#define DSU               ((Dsu      *)0x41002000U) /**< \brief (DSU) APB Base Address */

+#define DSU_INST_NUM      1                         /**< \brief (DSU) Number of instances */

+#define DSU_INSTS         { DSU }                   /**< \brief (DSU) Instances List */

+

+#define EIC               ((Eic      *)0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EIC_INST_NUM      1                         /**< \brief (EIC) Number of instances */

+#define EIC_INSTS         { EIC }                   /**< \brief (EIC) Instances List */

+

+#define EVSYS             ((Evsys    *)0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define EVSYS_INST_NUM    1                         /**< \brief (EVSYS) Number of instances */

+#define EVSYS_INSTS       { EVSYS }                 /**< \brief (EVSYS) Instances List */

+

+#define GCLK              ((Gclk     *)0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define GCLK_INST_NUM     1                         /**< \brief (GCLK) Number of instances */

+#define GCLK_INSTS        { GCLK }                  /**< \brief (GCLK) Instances List */

+

+#define NVMCTRL           ((Nvmctrl  *)0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define NVMCTRL_INST_NUM  1                         /**< \brief (NVMCTRL) Number of instances */

+#define NVMCTRL_INSTS     { NVMCTRL }               /**< \brief (NVMCTRL) Instances List */

+

+#define PAC0              ((Pac      *)0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1              ((Pac      *)0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2              ((Pac      *)0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PAC_INST_NUM      3                         /**< \brief (PAC) Number of instances */

+#define PAC_INSTS         { PAC0, PAC1, PAC2 }      /**< \brief (PAC) Instances List */

+

+#define PM                ((Pm       *)0x40000400U) /**< \brief (PM) APB Base Address */

+#define PM_INST_NUM       1                         /**< \brief (PM) Number of instances */

+#define PM_INSTS          { PM }                    /**< \brief (PM) Instances List */

+

+#define PORT              ((Port     *)0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS        ((Port     *)0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define PORT_INST_NUM     1                         /**< \brief (PORT) Number of instances */

+#define PORT_INSTS        { PORT }                  /**< \brief (PORT) Instances List */

+

+#define RTC               ((Rtc      *)0x40001400U) /**< \brief (RTC) APB Base Address */

+#define RTC_INST_NUM      1                         /**< \brief (RTC) Number of instances */

+#define RTC_INSTS         { RTC }                   /**< \brief (RTC) Instances List */

+

+#define SERCOM0           ((Sercom   *)0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1           ((Sercom   *)0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2           ((Sercom   *)0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3           ((Sercom   *)0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM_INST_NUM   4                         /**< \brief (SERCOM) Number of instances */

+#define SERCOM_INSTS      { SERCOM0, SERCOM1, SERCOM2, SERCOM3 } /**< \brief (SERCOM) Instances List */

+

+#define SYSCTRL           ((Sysctrl  *)0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define SYSCTRL_INST_NUM  1                         /**< \brief (SYSCTRL) Number of instances */

+#define SYSCTRL_INSTS     { SYSCTRL }               /**< \brief (SYSCTRL) Instances List */

+

+#define TC0               ((Tc       *)0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1               ((Tc       *)0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2               ((Tc       *)0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3               ((Tc       *)0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4               ((Tc       *)0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5               ((Tc       *)0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC_INST_NUM       6                         /**< \brief (TC) Number of instances */

+#define TC_INSTS          { TC0, TC1, TC2, TC3, TC4, TC5 } /**< \brief (TC) Instances List */

+

+#define WDT               ((Wdt      *)0x40001000U) /**< \brief (WDT) APB Base Address */

+#define WDT_INST_NUM      1                         /**< \brief (WDT) Number of instances */

+#define WDT_INSTS         { WDT }                   /**< \brief (WDT) Instances List */

+

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+/*@}*/

+

+/* ************************************************************************** */

+/**  PORT DEFINITIONS FOR SAMD20E17 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E17_port PORT Definitions */

+/*@{*/

+

+#include "pio/pio_samd20e17.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  MEMORY MAPPING DEFINITIONS FOR SAMD20E17 */

+/* ************************************************************************** */

+

+#define FLASH_SIZE            0x20000 /* 128 kB */

+#define FLASH_PAGE_SIZE       64

+#define FLASH_NB_OF_PAGES     2048

+#define FLASH_USER_PAGE_SIZE  64

+#define HRAMC0_SIZE           0x4000 /* 16 kB */

+#define FLASH_ADDR            (0x00000000U) /**< FLASH base address */

+#define FLASH_USER_PAGE_ADDR  (0x00800000U) /**< FLASH_USER_PAGE base address */

+#define HRAMC0_ADDR           (0x20000000U) /**< HRAMC0 base address */

+

+/* ************************************************************************** */

+/**  ELECTRICAL DEFINITIONS FOR SAMD20E17 */

+/* ************************************************************************** */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+/*@}*/

+

+#endif /* SAMD20E17_H */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20e18.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20e18.h
new file mode 100644
index 0000000..3d518bc
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20e18.h
@@ -0,0 +1,484 @@
+/**

+ * \file

+ *

+ * \brief Header file for SAMD20E18

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20E18_

+#define _SAMD20E18_

+

+/**

+ * \ingroup SAMD20_definitions

+ * \addtogroup SAMD20E18_definitions SAMD20E18 definitions

+ * This file defines all structures and symbols for SAMD20E18:

+ *   - registers and bitfields

+ *   - peripheral base address

+ *   - peripheral ID

+ *   - PIO definitions

+*/

+/*@{*/

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#include <stdint.h>

+#ifndef __cplusplus

+typedef volatile const uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile const uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile const uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#else

+typedef volatile       uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile       uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile       uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#endif

+typedef volatile       uint32_t WoReg;   /**< Write only 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t WoReg16; /**< Write only 16-bit register (volatile unsigned int) */

+typedef volatile       uint32_t WoReg8;  /**< Write only  8-bit register (volatile unsigned int) */

+typedef volatile       uint32_t RwReg;   /**< Read-Write 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t RwReg16; /**< Read-Write 16-bit register (volatile unsigned int) */

+typedef volatile       uint8_t  RwReg8;  /**< Read-Write  8-bit register (volatile unsigned int) */

+#define CAST(type, value) ((type *)(value))

+#define REG_ACCESS(type, address) (*(type*)(address)) /**< C code: Register value */

+#else

+#define CAST(type, value) (value)

+#define REG_ACCESS(type, address) (address) /**< Assembly code: Register address */

+#endif

+

+/* ************************************************************************** */

+/**  CMSIS DEFINITIONS FOR SAMD20E18 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E18_cmsis CMSIS Definitions */

+/*@{*/

+

+/** Interrupt Number Definition */

+typedef enum IRQn

+{

+  /******  Cortex-M0+ Processor Exceptions Numbers *******************************/

+  NonMaskableInt_IRQn      = -14, /**<  2 Non Maskable Interrupt                 */

+  HardFault_IRQn           = -13, /**<  3 Cortex-M0+ Hard Fault Interrupt        */

+  SVCall_IRQn              = -5,  /**< 11 Cortex-M0+ SV Call Interrupt           */

+  PendSV_IRQn              = -2,  /**< 14 Cortex-M0+ Pend SV Interrupt           */

+  SysTick_IRQn             = -1,  /**< 15 Cortex-M0+ System Tick Interrupt       */

+  /******  SAMD20E18-specific Interrupt Numbers ***********************/

+  PM_IRQn                  =  0, /**<  0 SAMD20E18 Power Manager (PM) */

+  SYSCTRL_IRQn             =  1, /**<  1 SAMD20E18 System Control (SYSCTRL) */

+  WDT_IRQn                 =  2, /**<  2 SAMD20E18 Watchdog Timer (WDT) */

+  RTC_IRQn                 =  3, /**<  3 SAMD20E18 Real-Time Counter (RTC) */

+  EIC_IRQn                 =  4, /**<  4 SAMD20E18 External Interrupt Controller (EIC) */

+  NVMCTRL_IRQn             =  5, /**<  5 SAMD20E18 Non-Volatile Memory Controller (NVMCTRL) */

+  EVSYS_IRQn               =  6, /**<  6 SAMD20E18 Event System Interface (EVSYS) */

+  SERCOM0_IRQn             =  7, /**<  7 SAMD20E18 Serial Communication Interface 0 (SERCOM0) */

+  SERCOM1_IRQn             =  8, /**<  8 SAMD20E18 Serial Communication Interface 1 (SERCOM1) */

+  SERCOM2_IRQn             =  9, /**<  9 SAMD20E18 Serial Communication Interface 2 (SERCOM2) */

+  SERCOM3_IRQn             = 10, /**< 10 SAMD20E18 Serial Communication Interface 3 (SERCOM3) */

+  TC0_IRQn                 = 13, /**< 13 SAMD20E18 Basic Timer Counter 0 (TC0) */

+  TC1_IRQn                 = 14, /**< 14 SAMD20E18 Basic Timer Counter 1 (TC1) */

+  TC2_IRQn                 = 15, /**< 15 SAMD20E18 Basic Timer Counter 2 (TC2) */

+  TC3_IRQn                 = 16, /**< 16 SAMD20E18 Basic Timer Counter 3 (TC3) */

+  TC4_IRQn                 = 17, /**< 17 SAMD20E18 Basic Timer Counter 4 (TC4) */

+  TC5_IRQn                 = 18, /**< 18 SAMD20E18 Basic Timer Counter 5 (TC5) */

+  ADC_IRQn                 = 21, /**< 21 SAMD20E18 Analog Digital Converter (ADC) */

+  AC_IRQn                  = 22, /**< 22 SAMD20E18 Analog Comparators (AC) */

+  DAC_IRQn                 = 23, /**< 23 SAMD20E18 Digital Analog Converter (DAC) */

+

+  PERIPH_COUNT_IRQn        = 24  /**< Number of peripheral IDs */

+} IRQn_Type;

+

+typedef struct _DeviceVectors

+{

+  /* Stack pointer */

+  void* pvStack;

+

+  /* Cortex-M handlers */

+  void* pfnReset_Handler;

+  void* pfnNMI_Handler;

+  void* pfnHardFault_Handler;

+  void* pfnReservedM12;

+  void* pfnReservedM11;

+  void* pfnReservedM10;

+  void* pfnReservedM9;

+  void* pfnReservedM8;

+  void* pfnReservedM7;

+  void* pfnReservedM6;

+  void* pfnSVC_Handler;

+  void* pfnReservedM4;

+  void* pfnReservedM3;

+  void* pfnPendSV_Handler;

+  void* pfnSysTick_Handler;

+

+  /* Peripheral handlers */

+  void* pfnPM_Handler;                    /*  0 Power Manager */

+  void* pfnSYSCTRL_Handler;               /*  1 System Control */

+  void* pfnWDT_Handler;                   /*  2 Watchdog Timer */

+  void* pfnRTC_Handler;                   /*  3 Real-Time Counter */

+  void* pfnEIC_Handler;                   /*  4 External Interrupt Controller */

+  void* pfnNVMCTRL_Handler;               /*  5 Non-Volatile Memory Controller */

+  void* pfnEVSYS_Handler;                 /*  6 Event System Interface */

+  void* pfnSERCOM0_Handler;               /*  7 Serial Communication Interface 0 */

+  void* pfnSERCOM1_Handler;               /*  8 Serial Communication Interface 1 */

+  void* pfnSERCOM2_Handler;               /*  9 Serial Communication Interface 2 */

+  void* pfnSERCOM3_Handler;               /* 10 Serial Communication Interface 3 */

+  void* pfnReserved11;

+  void* pfnReserved12;

+  void* pfnTC0_Handler;                   /* 13 Basic Timer Counter 0 */

+  void* pfnTC1_Handler;                   /* 14 Basic Timer Counter 1 */

+  void* pfnTC2_Handler;                   /* 15 Basic Timer Counter 2 */

+  void* pfnTC3_Handler;                   /* 16 Basic Timer Counter 3 */

+  void* pfnTC4_Handler;                   /* 17 Basic Timer Counter 4 */

+  void* pfnTC5_Handler;                   /* 18 Basic Timer Counter 5 */

+  void* pfnReserved19;

+  void* pfnReserved20;

+  void* pfnADC_Handler;                   /* 21 Analog Digital Converter */

+  void* pfnAC_Handler;                    /* 22 Analog Comparators */

+  void* pfnDAC_Handler;                   /* 23 Digital Analog Converter */

+} DeviceVectors;

+

+/* Cortex-M0+ processor handlers */

+void Reset_Handler               ( void );

+void NMI_Handler                 ( void );

+void HardFault_Handler           ( void );

+void SVC_Handler                 ( void );

+void PendSV_Handler              ( void );

+void SysTick_Handler             ( void );

+

+/* Peripherals handlers */

+void PM_Handler                  ( void );

+void SYSCTRL_Handler             ( void );

+void WDT_Handler                 ( void );

+void RTC_Handler                 ( void );

+void EIC_Handler                 ( void );

+void NVMCTRL_Handler             ( void );

+void EVSYS_Handler               ( void );

+void SERCOM0_Handler             ( void );

+void SERCOM1_Handler             ( void );

+void SERCOM2_Handler             ( void );

+void SERCOM3_Handler             ( void );

+void TC0_Handler                 ( void );

+void TC1_Handler                 ( void );

+void TC2_Handler                 ( void );

+void TC3_Handler                 ( void );

+void TC4_Handler                 ( void );

+void TC5_Handler                 ( void );

+void ADC_Handler                 ( void );

+void AC_Handler                  ( void );

+void DAC_Handler                 ( void );

+

+/*

+ * \brief Configuration of the Cortex-M0+ Processor and Core Peripherals

+ */

+

+#define LITTLE_ENDIAN          1        

+#define __CM0PLUS_REV          1         /*!< Core revision r0p1 */

+#define __MPU_PRESENT          0         /*!< MPU present or not */

+#define __NVIC_PRIO_BITS       2         /*!< Number of bits used for Priority Levels */

+#define __VTOR_PRESENT         1         /*!< VTOR present or not */

+#define __Vendor_SysTickConfig 0         /*!< Set to 1 if different SysTick Config is used */

+

+/**

+ * \brief CMSIS includes

+ */

+

+#include <core_cm0plus.h>

+#if !defined DONT_USE_CMSIS_INIT

+#include "system_samd20.h"

+#endif /* DONT_USE_CMSIS_INIT */

+

+/*@}*/

+

+/* ************************************************************************** */

+/**  SOFTWARE PERIPHERAL API DEFINITION FOR SAMD20E18 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E18_api Peripheral Software API */

+/*@{*/

+

+#include "component/component_ac.h"

+#include "component/component_adc.h"

+#include "component/component_dac.h"

+#include "component/component_dsu.h"

+#include "component/component_eic.h"

+#include "component/component_evsys.h"

+#include "component/component_gclk.h"

+#include "component/component_nvmctrl.h"

+#include "component/component_pac.h"

+#include "component/component_pm.h"

+#include "component/component_port.h"

+#include "component/component_rtc.h"

+#include "component/component_sercom.h"

+#include "component/component_sysctrl.h"

+#include "component/component_tc.h"

+#include "component/component_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  REGISTERS ACCESS DEFINITIONS FOR SAMD20E18 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E18_reg Registers Access Definitions */

+/*@{*/

+

+#include "instance/instance_ac.h"

+#include "instance/instance_adc.h"

+#include "instance/instance_dac.h"

+#include "instance/instance_dsu.h"

+#include "instance/instance_eic.h"

+#include "instance/instance_evsys.h"

+#include "instance/instance_gclk.h"

+#include "instance/instance_nvmctrl.h"

+#include "instance/instance_pac0.h"

+#include "instance/instance_pac1.h"

+#include "instance/instance_pac2.h"

+#include "instance/instance_pm.h"

+#include "instance/instance_port.h"

+#include "instance/instance_rtc.h"

+#include "instance/instance_sercom0.h"

+#include "instance/instance_sercom1.h"

+#include "instance/instance_sercom2.h"

+#include "instance/instance_sercom3.h"

+#include "instance/instance_sysctrl.h"

+#include "instance/instance_tc0.h"

+#include "instance/instance_tc1.h"

+#include "instance/instance_tc2.h"

+#include "instance/instance_tc3.h"

+#include "instance/instance_tc4.h"

+#include "instance/instance_tc5.h"

+#include "instance/instance_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  PERIPHERAL ID DEFINITIONS FOR SAMD20E18 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E18_id Peripheral Ids Definitions */

+/*@{*/

+

+// Peripheral instances on HPB0 bridge

+#define ID_PAC0           0 /**< \brief Peripheral Access Controller PAC (PAC0) */

+#define ID_PM             1 /**< \brief Power Manager (PM) */

+#define ID_SYSCTRL        2 /**< \brief System Control (SYSCTRL) */

+#define ID_GCLK           3 /**< \brief Generic Clock Generator (GCLK) */

+#define ID_WDT            4 /**< \brief Watchdog Timer (WDT) */

+#define ID_RTC            5 /**< \brief Real-Time Counter (RTC) */

+#define ID_EIC            6 /**< \brief External Interrupt Controller (EIC) */

+

+// Peripheral instances on HPB1 bridge

+#define ID_PAC1          32 /**< \brief Peripheral Access Controller PAC (PAC1) */

+#define ID_DSU           33 /**< \brief Device Service Unit (DSU) */

+#define ID_NVMCTRL       34 /**< \brief Non-Volatile Memory Controller (NVMCTRL) */

+#define ID_PORT          35 /**< \brief Port Module (PORT) */

+

+// Peripheral instances on HPB2 bridge

+#define ID_PAC2          64 /**< \brief Peripheral Access Controller PAC (PAC2) */

+#define ID_EVSYS         65 /**< \brief Event System Interface (EVSYS) */

+#define ID_SERCOM0       66 /**< \brief Serial Communication Interface SERCOM (SERCOM0) */

+#define ID_SERCOM1       67 /**< \brief Serial Communication Interface SERCOM (SERCOM1) */

+#define ID_SERCOM2       68 /**< \brief Serial Communication Interface SERCOM (SERCOM2) */

+#define ID_SERCOM3       69 /**< \brief Serial Communication Interface SERCOM (SERCOM3) */

+#define ID_TC0           72 /**< \brief Basic Timer Counter TC (TC0) */

+#define ID_TC1           73 /**< \brief Basic Timer Counter TC (TC1) */

+#define ID_TC2           74 /**< \brief Basic Timer Counter TC (TC2) */

+#define ID_TC3           75 /**< \brief Basic Timer Counter TC (TC3) */

+#define ID_TC4           76 /**< \brief Basic Timer Counter TC (TC4) */

+#define ID_TC5           77 /**< \brief Basic Timer Counter TC (TC5) */

+#define ID_ADC           80 /**< \brief Analog Digital Converter (ADC) */

+#define ID_AC            81 /**< \brief Analog Comparators (AC) */

+#define ID_DAC           82 /**< \brief Digital Analog Converter (DAC) */

+

+#define ID_PERIPH_COUNT  83 /**< \brief Number of peripheral IDs */

+/*@}*/

+

+/* ************************************************************************** */

+/**  BASE ADDRESS DEFINITIONS FOR SAMD20E18 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E18_base Peripheral Base Address Definitions */

+/*@{*/

+

+#if defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)

+#define AC                            (0x42004400U) /**< \brief (AC) APB Base Address */

+#define ADC                           (0x42004000U) /**< \brief (ADC) APB Base Address */

+#define DAC                           (0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DSU                           (0x41002000U) /**< \brief (DSU) APB Base Address */

+#define EIC                           (0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EVSYS                         (0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define GCLK                          (0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define NVMCTRL                       (0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define PAC0                          (0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1                          (0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2                          (0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PM                            (0x40000400U) /**< \brief (PM) APB Base Address */

+#define PORT                          (0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS                    (0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define RTC                           (0x40001400U) /**< \brief (RTC) APB Base Address */

+#define SERCOM0                       (0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1                       (0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2                       (0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3                       (0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SYSCTRL                       (0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define TC0                           (0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1                           (0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2                           (0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3                           (0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4                           (0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5                           (0x42003400U) /**< \brief (TC5) APB Base Address */

+#define WDT                           (0x40001000U) /**< \brief (WDT) APB Base Address */

+#else

+#define AC                ((Ac       *)0x42004400U) /**< \brief (AC) APB Base Address */

+#define AC_INST_NUM       1                         /**< \brief (AC) Number of instances */

+#define AC_INSTS          { AC }                    /**< \brief (AC) Instances List */

+

+#define ADC               ((Adc      *)0x42004000U) /**< \brief (ADC) APB Base Address */

+#define ADC_INST_NUM      1                         /**< \brief (ADC) Number of instances */

+#define ADC_INSTS         { ADC }                   /**< \brief (ADC) Instances List */

+

+#define DAC               ((Dac      *)0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DAC_INST_NUM      1                         /**< \brief (DAC) Number of instances */

+#define DAC_INSTS         { DAC }                   /**< \brief (DAC) Instances List */

+

+#define DSU               ((Dsu      *)0x41002000U) /**< \brief (DSU) APB Base Address */

+#define DSU_INST_NUM      1                         /**< \brief (DSU) Number of instances */

+#define DSU_INSTS         { DSU }                   /**< \brief (DSU) Instances List */

+

+#define EIC               ((Eic      *)0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EIC_INST_NUM      1                         /**< \brief (EIC) Number of instances */

+#define EIC_INSTS         { EIC }                   /**< \brief (EIC) Instances List */

+

+#define EVSYS             ((Evsys    *)0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define EVSYS_INST_NUM    1                         /**< \brief (EVSYS) Number of instances */

+#define EVSYS_INSTS       { EVSYS }                 /**< \brief (EVSYS) Instances List */

+

+#define GCLK              ((Gclk     *)0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define GCLK_INST_NUM     1                         /**< \brief (GCLK) Number of instances */

+#define GCLK_INSTS        { GCLK }                  /**< \brief (GCLK) Instances List */

+

+#define NVMCTRL           ((Nvmctrl  *)0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define NVMCTRL_INST_NUM  1                         /**< \brief (NVMCTRL) Number of instances */

+#define NVMCTRL_INSTS     { NVMCTRL }               /**< \brief (NVMCTRL) Instances List */

+

+#define PAC0              ((Pac      *)0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1              ((Pac      *)0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2              ((Pac      *)0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PAC_INST_NUM      3                         /**< \brief (PAC) Number of instances */

+#define PAC_INSTS         { PAC0, PAC1, PAC2 }      /**< \brief (PAC) Instances List */

+

+#define PM                ((Pm       *)0x40000400U) /**< \brief (PM) APB Base Address */

+#define PM_INST_NUM       1                         /**< \brief (PM) Number of instances */

+#define PM_INSTS          { PM }                    /**< \brief (PM) Instances List */

+

+#define PORT              ((Port     *)0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS        ((Port     *)0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define PORT_INST_NUM     1                         /**< \brief (PORT) Number of instances */

+#define PORT_INSTS        { PORT }                  /**< \brief (PORT) Instances List */

+

+#define RTC               ((Rtc      *)0x40001400U) /**< \brief (RTC) APB Base Address */

+#define RTC_INST_NUM      1                         /**< \brief (RTC) Number of instances */

+#define RTC_INSTS         { RTC }                   /**< \brief (RTC) Instances List */

+

+#define SERCOM0           ((Sercom   *)0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1           ((Sercom   *)0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2           ((Sercom   *)0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3           ((Sercom   *)0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM_INST_NUM   4                         /**< \brief (SERCOM) Number of instances */

+#define SERCOM_INSTS      { SERCOM0, SERCOM1, SERCOM2, SERCOM3 } /**< \brief (SERCOM) Instances List */

+

+#define SYSCTRL           ((Sysctrl  *)0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define SYSCTRL_INST_NUM  1                         /**< \brief (SYSCTRL) Number of instances */

+#define SYSCTRL_INSTS     { SYSCTRL }               /**< \brief (SYSCTRL) Instances List */

+

+#define TC0               ((Tc       *)0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1               ((Tc       *)0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2               ((Tc       *)0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3               ((Tc       *)0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4               ((Tc       *)0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5               ((Tc       *)0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC_INST_NUM       6                         /**< \brief (TC) Number of instances */

+#define TC_INSTS          { TC0, TC1, TC2, TC3, TC4, TC5 } /**< \brief (TC) Instances List */

+

+#define WDT               ((Wdt      *)0x40001000U) /**< \brief (WDT) APB Base Address */

+#define WDT_INST_NUM      1                         /**< \brief (WDT) Number of instances */

+#define WDT_INSTS         { WDT }                   /**< \brief (WDT) Instances List */

+

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+/*@}*/

+

+/* ************************************************************************** */

+/**  PORT DEFINITIONS FOR SAMD20E18 */

+/* ************************************************************************** */

+/** \defgroup SAMD20E18_port PORT Definitions */

+/*@{*/

+

+#include "pio/pio_samd20e18.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  MEMORY MAPPING DEFINITIONS FOR SAMD20E18 */

+/* ************************************************************************** */

+

+#define FLASH_SIZE            0x40000 /* 256 kB */

+#define FLASH_PAGE_SIZE       64

+#define FLASH_NB_OF_PAGES     4096

+#define FLASH_USER_PAGE_SIZE  64

+#define HRAMC0_SIZE           0x8000 /* 32 kB */

+#define FLASH_ADDR            (0x00000000U) /**< FLASH base address */

+#define FLASH_USER_PAGE_ADDR  (0x00800000U) /**< FLASH_USER_PAGE base address */

+#define HRAMC0_ADDR           (0x20000000U) /**< HRAMC0 base address */

+

+/* ************************************************************************** */

+/**  ELECTRICAL DEFINITIONS FOR SAMD20E18 */

+/* ************************************************************************** */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+/*@}*/

+

+#endif /* SAMD20E18_H */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20g14.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20g14.h
new file mode 100644
index 0000000..21a373d
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20g14.h
@@ -0,0 +1,508 @@
+/**

+ * \file

+ *

+ * \brief Header file for SAMD20G14

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20G14_

+#define _SAMD20G14_

+

+/**

+ * \ingroup SAMD20_definitions

+ * \addtogroup SAMD20G14_definitions SAMD20G14 definitions

+ * This file defines all structures and symbols for SAMD20G14:

+ *   - registers and bitfields

+ *   - peripheral base address

+ *   - peripheral ID

+ *   - PIO definitions

+*/

+/*@{*/

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#include <stdint.h>

+#ifndef __cplusplus

+typedef volatile const uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile const uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile const uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#else

+typedef volatile       uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile       uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile       uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#endif

+typedef volatile       uint32_t WoReg;   /**< Write only 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t WoReg16; /**< Write only 16-bit register (volatile unsigned int) */

+typedef volatile       uint32_t WoReg8;  /**< Write only  8-bit register (volatile unsigned int) */

+typedef volatile       uint32_t RwReg;   /**< Read-Write 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t RwReg16; /**< Read-Write 16-bit register (volatile unsigned int) */

+typedef volatile       uint8_t  RwReg8;  /**< Read-Write  8-bit register (volatile unsigned int) */

+#define CAST(type, value) ((type *)(value))

+#define REG_ACCESS(type, address) (*(type*)(address)) /**< C code: Register value */

+#else

+#define CAST(type, value) (value)

+#define REG_ACCESS(type, address) (address) /**< Assembly code: Register address */

+#endif

+

+/* ************************************************************************** */

+/**  CMSIS DEFINITIONS FOR SAMD20G14 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G14_cmsis CMSIS Definitions */

+/*@{*/

+

+/** Interrupt Number Definition */

+typedef enum IRQn

+{

+  /******  Cortex-M0+ Processor Exceptions Numbers *******************************/

+  NonMaskableInt_IRQn      = -14, /**<  2 Non Maskable Interrupt                 */

+  HardFault_IRQn           = -13, /**<  3 Cortex-M0+ Hard Fault Interrupt        */

+  SVCall_IRQn              = -5,  /**< 11 Cortex-M0+ SV Call Interrupt           */

+  PendSV_IRQn              = -2,  /**< 14 Cortex-M0+ Pend SV Interrupt           */

+  SysTick_IRQn             = -1,  /**< 15 Cortex-M0+ System Tick Interrupt       */

+  /******  SAMD20G14-specific Interrupt Numbers ***********************/

+  PM_IRQn                  =  0, /**<  0 SAMD20G14 Power Manager (PM) */

+  SYSCTRL_IRQn             =  1, /**<  1 SAMD20G14 System Control (SYSCTRL) */

+  WDT_IRQn                 =  2, /**<  2 SAMD20G14 Watchdog Timer (WDT) */

+  RTC_IRQn                 =  3, /**<  3 SAMD20G14 Real-Time Counter (RTC) */

+  EIC_IRQn                 =  4, /**<  4 SAMD20G14 External Interrupt Controller (EIC) */

+  NVMCTRL_IRQn             =  5, /**<  5 SAMD20G14 Non-Volatile Memory Controller (NVMCTRL) */

+  EVSYS_IRQn               =  6, /**<  6 SAMD20G14 Event System Interface (EVSYS) */

+  SERCOM0_IRQn             =  7, /**<  7 SAMD20G14 Serial Communication Interface 0 (SERCOM0) */

+  SERCOM1_IRQn             =  8, /**<  8 SAMD20G14 Serial Communication Interface 1 (SERCOM1) */

+  SERCOM2_IRQn             =  9, /**<  9 SAMD20G14 Serial Communication Interface 2 (SERCOM2) */

+  SERCOM3_IRQn             = 10, /**< 10 SAMD20G14 Serial Communication Interface 3 (SERCOM3) */

+  SERCOM4_IRQn             = 11, /**< 11 SAMD20G14 Serial Communication Interface 4 (SERCOM4) */

+  SERCOM5_IRQn             = 12, /**< 12 SAMD20G14 Serial Communication Interface 5 (SERCOM5) */

+  TC0_IRQn                 = 13, /**< 13 SAMD20G14 Basic Timer Counter 0 (TC0) */

+  TC1_IRQn                 = 14, /**< 14 SAMD20G14 Basic Timer Counter 1 (TC1) */

+  TC2_IRQn                 = 15, /**< 15 SAMD20G14 Basic Timer Counter 2 (TC2) */

+  TC3_IRQn                 = 16, /**< 16 SAMD20G14 Basic Timer Counter 3 (TC3) */

+  TC4_IRQn                 = 17, /**< 17 SAMD20G14 Basic Timer Counter 4 (TC4) */

+  TC5_IRQn                 = 18, /**< 18 SAMD20G14 Basic Timer Counter 5 (TC5) */

+  TC6_IRQn                 = 19, /**< 19 SAMD20G14 Basic Timer Counter 6 (TC6) */

+  TC7_IRQn                 = 20, /**< 20 SAMD20G14 Basic Timer Counter 7 (TC7) */

+  ADC_IRQn                 = 21, /**< 21 SAMD20G14 Analog Digital Converter (ADC) */

+  AC_IRQn                  = 22, /**< 22 SAMD20G14 Analog Comparators (AC) */

+  DAC_IRQn                 = 23, /**< 23 SAMD20G14 Digital Analog Converter (DAC) */

+

+  PERIPH_COUNT_IRQn        = 24  /**< Number of peripheral IDs */

+} IRQn_Type;

+

+typedef struct _DeviceVectors

+{

+  /* Stack pointer */

+  void* pvStack;

+

+  /* Cortex-M handlers */

+  void* pfnReset_Handler;

+  void* pfnNMI_Handler;

+  void* pfnHardFault_Handler;

+  void* pfnReservedM12;

+  void* pfnReservedM11;

+  void* pfnReservedM10;

+  void* pfnReservedM9;

+  void* pfnReservedM8;

+  void* pfnReservedM7;

+  void* pfnReservedM6;

+  void* pfnSVC_Handler;

+  void* pfnReservedM4;

+  void* pfnReservedM3;

+  void* pfnPendSV_Handler;

+  void* pfnSysTick_Handler;

+

+  /* Peripheral handlers */

+  void* pfnPM_Handler;                    /*  0 Power Manager */

+  void* pfnSYSCTRL_Handler;               /*  1 System Control */

+  void* pfnWDT_Handler;                   /*  2 Watchdog Timer */

+  void* pfnRTC_Handler;                   /*  3 Real-Time Counter */

+  void* pfnEIC_Handler;                   /*  4 External Interrupt Controller */

+  void* pfnNVMCTRL_Handler;               /*  5 Non-Volatile Memory Controller */

+  void* pfnEVSYS_Handler;                 /*  6 Event System Interface */

+  void* pfnSERCOM0_Handler;               /*  7 Serial Communication Interface 0 */

+  void* pfnSERCOM1_Handler;               /*  8 Serial Communication Interface 1 */

+  void* pfnSERCOM2_Handler;               /*  9 Serial Communication Interface 2 */

+  void* pfnSERCOM3_Handler;               /* 10 Serial Communication Interface 3 */

+  void* pfnSERCOM4_Handler;               /* 11 Serial Communication Interface 4 */

+  void* pfnSERCOM5_Handler;               /* 12 Serial Communication Interface 5 */

+  void* pfnTC0_Handler;                   /* 13 Basic Timer Counter 0 */

+  void* pfnTC1_Handler;                   /* 14 Basic Timer Counter 1 */

+  void* pfnTC2_Handler;                   /* 15 Basic Timer Counter 2 */

+  void* pfnTC3_Handler;                   /* 16 Basic Timer Counter 3 */

+  void* pfnTC4_Handler;                   /* 17 Basic Timer Counter 4 */

+  void* pfnTC5_Handler;                   /* 18 Basic Timer Counter 5 */

+  void* pfnTC6_Handler;                   /* 19 Basic Timer Counter 6 */

+  void* pfnTC7_Handler;                   /* 20 Basic Timer Counter 7 */

+  void* pfnADC_Handler;                   /* 21 Analog Digital Converter */

+  void* pfnAC_Handler;                    /* 22 Analog Comparators */

+  void* pfnDAC_Handler;                   /* 23 Digital Analog Converter */

+} DeviceVectors;

+

+/* Cortex-M0+ processor handlers */

+void Reset_Handler               ( void );

+void NMI_Handler                 ( void );

+void HardFault_Handler           ( void );

+void SVC_Handler                 ( void );

+void PendSV_Handler              ( void );

+void SysTick_Handler             ( void );

+

+/* Peripherals handlers */

+void PM_Handler                  ( void );

+void SYSCTRL_Handler             ( void );

+void WDT_Handler                 ( void );

+void RTC_Handler                 ( void );

+void EIC_Handler                 ( void );

+void NVMCTRL_Handler             ( void );

+void EVSYS_Handler               ( void );

+void SERCOM0_Handler             ( void );

+void SERCOM1_Handler             ( void );

+void SERCOM2_Handler             ( void );

+void SERCOM3_Handler             ( void );

+void SERCOM4_Handler             ( void );

+void SERCOM5_Handler             ( void );

+void TC0_Handler                 ( void );

+void TC1_Handler                 ( void );

+void TC2_Handler                 ( void );

+void TC3_Handler                 ( void );

+void TC4_Handler                 ( void );

+void TC5_Handler                 ( void );

+void TC6_Handler                 ( void );

+void TC7_Handler                 ( void );

+void ADC_Handler                 ( void );

+void AC_Handler                  ( void );

+void DAC_Handler                 ( void );

+

+/*

+ * \brief Configuration of the Cortex-M0+ Processor and Core Peripherals

+ */

+

+#define LITTLE_ENDIAN          1        

+#define __CM0PLUS_REV          1         /*!< Core revision r0p1 */

+#define __MPU_PRESENT          0         /*!< MPU present or not */

+#define __NVIC_PRIO_BITS       2         /*!< Number of bits used for Priority Levels */

+#define __VTOR_PRESENT         1         /*!< VTOR present or not */

+#define __Vendor_SysTickConfig 0         /*!< Set to 1 if different SysTick Config is used */

+

+/**

+ * \brief CMSIS includes

+ */

+

+#include <core_cm0plus.h>

+#if !defined DONT_USE_CMSIS_INIT

+#include "system_samd20.h"

+#endif /* DONT_USE_CMSIS_INIT */

+

+/*@}*/

+

+/* ************************************************************************** */

+/**  SOFTWARE PERIPHERAL API DEFINITION FOR SAMD20G14 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G14_api Peripheral Software API */

+/*@{*/

+

+#include "component/component_ac.h"

+#include "component/component_adc.h"

+#include "component/component_dac.h"

+#include "component/component_dsu.h"

+#include "component/component_eic.h"

+#include "component/component_evsys.h"

+#include "component/component_gclk.h"

+#include "component/component_nvmctrl.h"

+#include "component/component_pac.h"

+#include "component/component_pm.h"

+#include "component/component_port.h"

+#include "component/component_rtc.h"

+#include "component/component_sercom.h"

+#include "component/component_sysctrl.h"

+#include "component/component_tc.h"

+#include "component/component_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  REGISTERS ACCESS DEFINITIONS FOR SAMD20G14 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G14_reg Registers Access Definitions */

+/*@{*/

+

+#include "instance/instance_ac.h"

+#include "instance/instance_adc.h"

+#include "instance/instance_dac.h"

+#include "instance/instance_dsu.h"

+#include "instance/instance_eic.h"

+#include "instance/instance_evsys.h"

+#include "instance/instance_gclk.h"

+#include "instance/instance_nvmctrl.h"

+#include "instance/instance_pac0.h"

+#include "instance/instance_pac1.h"

+#include "instance/instance_pac2.h"

+#include "instance/instance_pm.h"

+#include "instance/instance_port.h"

+#include "instance/instance_rtc.h"

+#include "instance/instance_sercom0.h"

+#include "instance/instance_sercom1.h"

+#include "instance/instance_sercom2.h"

+#include "instance/instance_sercom3.h"

+#include "instance/instance_sercom4.h"

+#include "instance/instance_sercom5.h"

+#include "instance/instance_sysctrl.h"

+#include "instance/instance_tc0.h"

+#include "instance/instance_tc1.h"

+#include "instance/instance_tc2.h"

+#include "instance/instance_tc3.h"

+#include "instance/instance_tc4.h"

+#include "instance/instance_tc5.h"

+#include "instance/instance_tc6.h"

+#include "instance/instance_tc7.h"

+#include "instance/instance_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  PERIPHERAL ID DEFINITIONS FOR SAMD20G14 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G14_id Peripheral Ids Definitions */

+/*@{*/

+

+// Peripheral instances on HPB0 bridge

+#define ID_PAC0           0 /**< \brief Peripheral Access Controller PAC (PAC0) */

+#define ID_PM             1 /**< \brief Power Manager (PM) */

+#define ID_SYSCTRL        2 /**< \brief System Control (SYSCTRL) */

+#define ID_GCLK           3 /**< \brief Generic Clock Generator (GCLK) */

+#define ID_WDT            4 /**< \brief Watchdog Timer (WDT) */

+#define ID_RTC            5 /**< \brief Real-Time Counter (RTC) */

+#define ID_EIC            6 /**< \brief External Interrupt Controller (EIC) */

+

+// Peripheral instances on HPB1 bridge

+#define ID_PAC1          32 /**< \brief Peripheral Access Controller PAC (PAC1) */

+#define ID_DSU           33 /**< \brief Device Service Unit (DSU) */

+#define ID_NVMCTRL       34 /**< \brief Non-Volatile Memory Controller (NVMCTRL) */

+#define ID_PORT          35 /**< \brief Port Module (PORT) */

+

+// Peripheral instances on HPB2 bridge

+#define ID_PAC2          64 /**< \brief Peripheral Access Controller PAC (PAC2) */

+#define ID_EVSYS         65 /**< \brief Event System Interface (EVSYS) */

+#define ID_SERCOM0       66 /**< \brief Serial Communication Interface SERCOM (SERCOM0) */

+#define ID_SERCOM1       67 /**< \brief Serial Communication Interface SERCOM (SERCOM1) */

+#define ID_SERCOM2       68 /**< \brief Serial Communication Interface SERCOM (SERCOM2) */

+#define ID_SERCOM3       69 /**< \brief Serial Communication Interface SERCOM (SERCOM3) */

+#define ID_SERCOM4       70 /**< \brief Serial Communication Interface SERCOM (SERCOM4) */

+#define ID_SERCOM5       71 /**< \brief Serial Communication Interface SERCOM (SERCOM5) */

+#define ID_TC0           72 /**< \brief Basic Timer Counter TC (TC0) */

+#define ID_TC1           73 /**< \brief Basic Timer Counter TC (TC1) */

+#define ID_TC2           74 /**< \brief Basic Timer Counter TC (TC2) */

+#define ID_TC3           75 /**< \brief Basic Timer Counter TC (TC3) */

+#define ID_TC4           76 /**< \brief Basic Timer Counter TC (TC4) */

+#define ID_TC5           77 /**< \brief Basic Timer Counter TC (TC5) */

+#define ID_TC6           78 /**< \brief Basic Timer Counter TC (TC6) */

+#define ID_TC7           79 /**< \brief Basic Timer Counter TC (TC7) */

+#define ID_ADC           80 /**< \brief Analog Digital Converter (ADC) */

+#define ID_AC            81 /**< \brief Analog Comparators (AC) */

+#define ID_DAC           82 /**< \brief Digital Analog Converter (DAC) */

+

+#define ID_PERIPH_COUNT  83 /**< \brief Number of peripheral IDs */

+/*@}*/

+

+/* ************************************************************************** */

+/**  BASE ADDRESS DEFINITIONS FOR SAMD20G14 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G14_base Peripheral Base Address Definitions */

+/*@{*/

+

+#if defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)

+#define AC                            (0x42004400U) /**< \brief (AC) APB Base Address */

+#define ADC                           (0x42004000U) /**< \brief (ADC) APB Base Address */

+#define DAC                           (0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DSU                           (0x41002000U) /**< \brief (DSU) APB Base Address */

+#define EIC                           (0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EVSYS                         (0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define GCLK                          (0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define NVMCTRL                       (0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define PAC0                          (0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1                          (0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2                          (0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PM                            (0x40000400U) /**< \brief (PM) APB Base Address */

+#define PORT                          (0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS                    (0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define RTC                           (0x40001400U) /**< \brief (RTC) APB Base Address */

+#define SERCOM0                       (0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1                       (0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2                       (0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3                       (0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM4                       (0x42001800U) /**< \brief (SERCOM4) APB Base Address */

+#define SERCOM5                       (0x42001C00U) /**< \brief (SERCOM5) APB Base Address */

+#define SYSCTRL                       (0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define TC0                           (0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1                           (0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2                           (0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3                           (0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4                           (0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5                           (0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC6                           (0x42003800U) /**< \brief (TC6) APB Base Address */

+#define TC7                           (0x42003C00U) /**< \brief (TC7) APB Base Address */

+#define WDT                           (0x40001000U) /**< \brief (WDT) APB Base Address */

+#else

+#define AC                ((Ac       *)0x42004400U) /**< \brief (AC) APB Base Address */

+#define AC_INST_NUM       1                         /**< \brief (AC) Number of instances */

+#define AC_INSTS          { AC }                    /**< \brief (AC) Instances List */

+

+#define ADC               ((Adc      *)0x42004000U) /**< \brief (ADC) APB Base Address */

+#define ADC_INST_NUM      1                         /**< \brief (ADC) Number of instances */

+#define ADC_INSTS         { ADC }                   /**< \brief (ADC) Instances List */

+

+#define DAC               ((Dac      *)0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DAC_INST_NUM      1                         /**< \brief (DAC) Number of instances */

+#define DAC_INSTS         { DAC }                   /**< \brief (DAC) Instances List */

+

+#define DSU               ((Dsu      *)0x41002000U) /**< \brief (DSU) APB Base Address */

+#define DSU_INST_NUM      1                         /**< \brief (DSU) Number of instances */

+#define DSU_INSTS         { DSU }                   /**< \brief (DSU) Instances List */

+

+#define EIC               ((Eic      *)0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EIC_INST_NUM      1                         /**< \brief (EIC) Number of instances */

+#define EIC_INSTS         { EIC }                   /**< \brief (EIC) Instances List */

+

+#define EVSYS             ((Evsys    *)0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define EVSYS_INST_NUM    1                         /**< \brief (EVSYS) Number of instances */

+#define EVSYS_INSTS       { EVSYS }                 /**< \brief (EVSYS) Instances List */

+

+#define GCLK              ((Gclk     *)0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define GCLK_INST_NUM     1                         /**< \brief (GCLK) Number of instances */

+#define GCLK_INSTS        { GCLK }                  /**< \brief (GCLK) Instances List */

+

+#define NVMCTRL           ((Nvmctrl  *)0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define NVMCTRL_INST_NUM  1                         /**< \brief (NVMCTRL) Number of instances */

+#define NVMCTRL_INSTS     { NVMCTRL }               /**< \brief (NVMCTRL) Instances List */

+

+#define PAC0              ((Pac      *)0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1              ((Pac      *)0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2              ((Pac      *)0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PAC_INST_NUM      3                         /**< \brief (PAC) Number of instances */

+#define PAC_INSTS         { PAC0, PAC1, PAC2 }      /**< \brief (PAC) Instances List */

+

+#define PM                ((Pm       *)0x40000400U) /**< \brief (PM) APB Base Address */

+#define PM_INST_NUM       1                         /**< \brief (PM) Number of instances */

+#define PM_INSTS          { PM }                    /**< \brief (PM) Instances List */

+

+#define PORT              ((Port     *)0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS        ((Port     *)0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define PORT_INST_NUM     1                         /**< \brief (PORT) Number of instances */

+#define PORT_INSTS        { PORT }                  /**< \brief (PORT) Instances List */

+

+#define RTC               ((Rtc      *)0x40001400U) /**< \brief (RTC) APB Base Address */

+#define RTC_INST_NUM      1                         /**< \brief (RTC) Number of instances */

+#define RTC_INSTS         { RTC }                   /**< \brief (RTC) Instances List */

+

+#define SERCOM0           ((Sercom   *)0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1           ((Sercom   *)0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2           ((Sercom   *)0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3           ((Sercom   *)0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM4           ((Sercom   *)0x42001800U) /**< \brief (SERCOM4) APB Base Address */

+#define SERCOM5           ((Sercom   *)0x42001C00U) /**< \brief (SERCOM5) APB Base Address */

+#define SERCOM_INST_NUM   6                         /**< \brief (SERCOM) Number of instances */

+#define SERCOM_INSTS      { SERCOM0, SERCOM1, SERCOM2, SERCOM3, SERCOM4, SERCOM5 } /**< \brief (SERCOM) Instances List */

+

+#define SYSCTRL           ((Sysctrl  *)0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define SYSCTRL_INST_NUM  1                         /**< \brief (SYSCTRL) Number of instances */

+#define SYSCTRL_INSTS     { SYSCTRL }               /**< \brief (SYSCTRL) Instances List */

+

+#define TC0               ((Tc       *)0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1               ((Tc       *)0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2               ((Tc       *)0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3               ((Tc       *)0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4               ((Tc       *)0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5               ((Tc       *)0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC6               ((Tc       *)0x42003800U) /**< \brief (TC6) APB Base Address */

+#define TC7               ((Tc       *)0x42003C00U) /**< \brief (TC7) APB Base Address */

+#define TC_INST_NUM       8                         /**< \brief (TC) Number of instances */

+#define TC_INSTS          { TC0, TC1, TC2, TC3, TC4, TC5, TC6, TC7 } /**< \brief (TC) Instances List */

+

+#define WDT               ((Wdt      *)0x40001000U) /**< \brief (WDT) APB Base Address */

+#define WDT_INST_NUM      1                         /**< \brief (WDT) Number of instances */

+#define WDT_INSTS         { WDT }                   /**< \brief (WDT) Instances List */

+

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+/*@}*/

+

+/* ************************************************************************** */

+/**  PORT DEFINITIONS FOR SAMD20G14 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G14_port PORT Definitions */

+/*@{*/

+

+#include "pio/pio_samd20g14.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  MEMORY MAPPING DEFINITIONS FOR SAMD20G14 */

+/* ************************************************************************** */

+

+#define FLASH_SIZE            0x4000 /* 16 kB */

+#define FLASH_PAGE_SIZE       64

+#define FLASH_NB_OF_PAGES     256

+#define FLASH_USER_PAGE_SIZE  64

+#define HRAMC0_SIZE           0x800 /* 2 kB */

+#define FLASH_ADDR            (0x00000000U) /**< FLASH base address */

+#define FLASH_USER_PAGE_ADDR  (0x00800000U) /**< FLASH_USER_PAGE base address */

+#define HRAMC0_ADDR           (0x20000000U) /**< HRAMC0 base address */

+

+/* ************************************************************************** */

+/**  ELECTRICAL DEFINITIONS FOR SAMD20G14 */

+/* ************************************************************************** */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+/*@}*/

+

+#endif /* SAMD20G14_H */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20g15.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20g15.h
new file mode 100644
index 0000000..01583c7
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20g15.h
@@ -0,0 +1,508 @@
+/**

+ * \file

+ *

+ * \brief Header file for SAMD20G15

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20G15_

+#define _SAMD20G15_

+

+/**

+ * \ingroup SAMD20_definitions

+ * \addtogroup SAMD20G15_definitions SAMD20G15 definitions

+ * This file defines all structures and symbols for SAMD20G15:

+ *   - registers and bitfields

+ *   - peripheral base address

+ *   - peripheral ID

+ *   - PIO definitions

+*/

+/*@{*/

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#include <stdint.h>

+#ifndef __cplusplus

+typedef volatile const uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile const uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile const uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#else

+typedef volatile       uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile       uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile       uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#endif

+typedef volatile       uint32_t WoReg;   /**< Write only 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t WoReg16; /**< Write only 16-bit register (volatile unsigned int) */

+typedef volatile       uint32_t WoReg8;  /**< Write only  8-bit register (volatile unsigned int) */

+typedef volatile       uint32_t RwReg;   /**< Read-Write 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t RwReg16; /**< Read-Write 16-bit register (volatile unsigned int) */

+typedef volatile       uint8_t  RwReg8;  /**< Read-Write  8-bit register (volatile unsigned int) */

+#define CAST(type, value) ((type *)(value))

+#define REG_ACCESS(type, address) (*(type*)(address)) /**< C code: Register value */

+#else

+#define CAST(type, value) (value)

+#define REG_ACCESS(type, address) (address) /**< Assembly code: Register address */

+#endif

+

+/* ************************************************************************** */

+/**  CMSIS DEFINITIONS FOR SAMD20G15 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G15_cmsis CMSIS Definitions */

+/*@{*/

+

+/** Interrupt Number Definition */

+typedef enum IRQn

+{

+  /******  Cortex-M0+ Processor Exceptions Numbers *******************************/

+  NonMaskableInt_IRQn      = -14, /**<  2 Non Maskable Interrupt                 */

+  HardFault_IRQn           = -13, /**<  3 Cortex-M0+ Hard Fault Interrupt        */

+  SVCall_IRQn              = -5,  /**< 11 Cortex-M0+ SV Call Interrupt           */

+  PendSV_IRQn              = -2,  /**< 14 Cortex-M0+ Pend SV Interrupt           */

+  SysTick_IRQn             = -1,  /**< 15 Cortex-M0+ System Tick Interrupt       */

+  /******  SAMD20G15-specific Interrupt Numbers ***********************/

+  PM_IRQn                  =  0, /**<  0 SAMD20G15 Power Manager (PM) */

+  SYSCTRL_IRQn             =  1, /**<  1 SAMD20G15 System Control (SYSCTRL) */

+  WDT_IRQn                 =  2, /**<  2 SAMD20G15 Watchdog Timer (WDT) */

+  RTC_IRQn                 =  3, /**<  3 SAMD20G15 Real-Time Counter (RTC) */

+  EIC_IRQn                 =  4, /**<  4 SAMD20G15 External Interrupt Controller (EIC) */

+  NVMCTRL_IRQn             =  5, /**<  5 SAMD20G15 Non-Volatile Memory Controller (NVMCTRL) */

+  EVSYS_IRQn               =  6, /**<  6 SAMD20G15 Event System Interface (EVSYS) */

+  SERCOM0_IRQn             =  7, /**<  7 SAMD20G15 Serial Communication Interface 0 (SERCOM0) */

+  SERCOM1_IRQn             =  8, /**<  8 SAMD20G15 Serial Communication Interface 1 (SERCOM1) */

+  SERCOM2_IRQn             =  9, /**<  9 SAMD20G15 Serial Communication Interface 2 (SERCOM2) */

+  SERCOM3_IRQn             = 10, /**< 10 SAMD20G15 Serial Communication Interface 3 (SERCOM3) */

+  SERCOM4_IRQn             = 11, /**< 11 SAMD20G15 Serial Communication Interface 4 (SERCOM4) */

+  SERCOM5_IRQn             = 12, /**< 12 SAMD20G15 Serial Communication Interface 5 (SERCOM5) */

+  TC0_IRQn                 = 13, /**< 13 SAMD20G15 Basic Timer Counter 0 (TC0) */

+  TC1_IRQn                 = 14, /**< 14 SAMD20G15 Basic Timer Counter 1 (TC1) */

+  TC2_IRQn                 = 15, /**< 15 SAMD20G15 Basic Timer Counter 2 (TC2) */

+  TC3_IRQn                 = 16, /**< 16 SAMD20G15 Basic Timer Counter 3 (TC3) */

+  TC4_IRQn                 = 17, /**< 17 SAMD20G15 Basic Timer Counter 4 (TC4) */

+  TC5_IRQn                 = 18, /**< 18 SAMD20G15 Basic Timer Counter 5 (TC5) */

+  TC6_IRQn                 = 19, /**< 19 SAMD20G15 Basic Timer Counter 6 (TC6) */

+  TC7_IRQn                 = 20, /**< 20 SAMD20G15 Basic Timer Counter 7 (TC7) */

+  ADC_IRQn                 = 21, /**< 21 SAMD20G15 Analog Digital Converter (ADC) */

+  AC_IRQn                  = 22, /**< 22 SAMD20G15 Analog Comparators (AC) */

+  DAC_IRQn                 = 23, /**< 23 SAMD20G15 Digital Analog Converter (DAC) */

+

+  PERIPH_COUNT_IRQn        = 24  /**< Number of peripheral IDs */

+} IRQn_Type;

+

+typedef struct _DeviceVectors

+{

+  /* Stack pointer */

+  void* pvStack;

+

+  /* Cortex-M handlers */

+  void* pfnReset_Handler;

+  void* pfnNMI_Handler;

+  void* pfnHardFault_Handler;

+  void* pfnReservedM12;

+  void* pfnReservedM11;

+  void* pfnReservedM10;

+  void* pfnReservedM9;

+  void* pfnReservedM8;

+  void* pfnReservedM7;

+  void* pfnReservedM6;

+  void* pfnSVC_Handler;

+  void* pfnReservedM4;

+  void* pfnReservedM3;

+  void* pfnPendSV_Handler;

+  void* pfnSysTick_Handler;

+

+  /* Peripheral handlers */

+  void* pfnPM_Handler;                    /*  0 Power Manager */

+  void* pfnSYSCTRL_Handler;               /*  1 System Control */

+  void* pfnWDT_Handler;                   /*  2 Watchdog Timer */

+  void* pfnRTC_Handler;                   /*  3 Real-Time Counter */

+  void* pfnEIC_Handler;                   /*  4 External Interrupt Controller */

+  void* pfnNVMCTRL_Handler;               /*  5 Non-Volatile Memory Controller */

+  void* pfnEVSYS_Handler;                 /*  6 Event System Interface */

+  void* pfnSERCOM0_Handler;               /*  7 Serial Communication Interface 0 */

+  void* pfnSERCOM1_Handler;               /*  8 Serial Communication Interface 1 */

+  void* pfnSERCOM2_Handler;               /*  9 Serial Communication Interface 2 */

+  void* pfnSERCOM3_Handler;               /* 10 Serial Communication Interface 3 */

+  void* pfnSERCOM4_Handler;               /* 11 Serial Communication Interface 4 */

+  void* pfnSERCOM5_Handler;               /* 12 Serial Communication Interface 5 */

+  void* pfnTC0_Handler;                   /* 13 Basic Timer Counter 0 */

+  void* pfnTC1_Handler;                   /* 14 Basic Timer Counter 1 */

+  void* pfnTC2_Handler;                   /* 15 Basic Timer Counter 2 */

+  void* pfnTC3_Handler;                   /* 16 Basic Timer Counter 3 */

+  void* pfnTC4_Handler;                   /* 17 Basic Timer Counter 4 */

+  void* pfnTC5_Handler;                   /* 18 Basic Timer Counter 5 */

+  void* pfnTC6_Handler;                   /* 19 Basic Timer Counter 6 */

+  void* pfnTC7_Handler;                   /* 20 Basic Timer Counter 7 */

+  void* pfnADC_Handler;                   /* 21 Analog Digital Converter */

+  void* pfnAC_Handler;                    /* 22 Analog Comparators */

+  void* pfnDAC_Handler;                   /* 23 Digital Analog Converter */

+} DeviceVectors;

+

+/* Cortex-M0+ processor handlers */

+void Reset_Handler               ( void );

+void NMI_Handler                 ( void );

+void HardFault_Handler           ( void );

+void SVC_Handler                 ( void );

+void PendSV_Handler              ( void );

+void SysTick_Handler             ( void );

+

+/* Peripherals handlers */

+void PM_Handler                  ( void );

+void SYSCTRL_Handler             ( void );

+void WDT_Handler                 ( void );

+void RTC_Handler                 ( void );

+void EIC_Handler                 ( void );

+void NVMCTRL_Handler             ( void );

+void EVSYS_Handler               ( void );

+void SERCOM0_Handler             ( void );

+void SERCOM1_Handler             ( void );

+void SERCOM2_Handler             ( void );

+void SERCOM3_Handler             ( void );

+void SERCOM4_Handler             ( void );

+void SERCOM5_Handler             ( void );

+void TC0_Handler                 ( void );

+void TC1_Handler                 ( void );

+void TC2_Handler                 ( void );

+void TC3_Handler                 ( void );

+void TC4_Handler                 ( void );

+void TC5_Handler                 ( void );

+void TC6_Handler                 ( void );

+void TC7_Handler                 ( void );

+void ADC_Handler                 ( void );

+void AC_Handler                  ( void );

+void DAC_Handler                 ( void );

+

+/*

+ * \brief Configuration of the Cortex-M0+ Processor and Core Peripherals

+ */

+

+#define LITTLE_ENDIAN          1        

+#define __CM0PLUS_REV          1         /*!< Core revision r0p1 */

+#define __MPU_PRESENT          0         /*!< MPU present or not */

+#define __NVIC_PRIO_BITS       2         /*!< Number of bits used for Priority Levels */

+#define __VTOR_PRESENT         1         /*!< VTOR present or not */

+#define __Vendor_SysTickConfig 0         /*!< Set to 1 if different SysTick Config is used */

+

+/**

+ * \brief CMSIS includes

+ */

+

+#include <core_cm0plus.h>

+#if !defined DONT_USE_CMSIS_INIT

+#include "system_samd20.h"

+#endif /* DONT_USE_CMSIS_INIT */

+

+/*@}*/

+

+/* ************************************************************************** */

+/**  SOFTWARE PERIPHERAL API DEFINITION FOR SAMD20G15 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G15_api Peripheral Software API */

+/*@{*/

+

+#include "component/component_ac.h"

+#include "component/component_adc.h"

+#include "component/component_dac.h"

+#include "component/component_dsu.h"

+#include "component/component_eic.h"

+#include "component/component_evsys.h"

+#include "component/component_gclk.h"

+#include "component/component_nvmctrl.h"

+#include "component/component_pac.h"

+#include "component/component_pm.h"

+#include "component/component_port.h"

+#include "component/component_rtc.h"

+#include "component/component_sercom.h"

+#include "component/component_sysctrl.h"

+#include "component/component_tc.h"

+#include "component/component_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  REGISTERS ACCESS DEFINITIONS FOR SAMD20G15 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G15_reg Registers Access Definitions */

+/*@{*/

+

+#include "instance/instance_ac.h"

+#include "instance/instance_adc.h"

+#include "instance/instance_dac.h"

+#include "instance/instance_dsu.h"

+#include "instance/instance_eic.h"

+#include "instance/instance_evsys.h"

+#include "instance/instance_gclk.h"

+#include "instance/instance_nvmctrl.h"

+#include "instance/instance_pac0.h"

+#include "instance/instance_pac1.h"

+#include "instance/instance_pac2.h"

+#include "instance/instance_pm.h"

+#include "instance/instance_port.h"

+#include "instance/instance_rtc.h"

+#include "instance/instance_sercom0.h"

+#include "instance/instance_sercom1.h"

+#include "instance/instance_sercom2.h"

+#include "instance/instance_sercom3.h"

+#include "instance/instance_sercom4.h"

+#include "instance/instance_sercom5.h"

+#include "instance/instance_sysctrl.h"

+#include "instance/instance_tc0.h"

+#include "instance/instance_tc1.h"

+#include "instance/instance_tc2.h"

+#include "instance/instance_tc3.h"

+#include "instance/instance_tc4.h"

+#include "instance/instance_tc5.h"

+#include "instance/instance_tc6.h"

+#include "instance/instance_tc7.h"

+#include "instance/instance_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  PERIPHERAL ID DEFINITIONS FOR SAMD20G15 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G15_id Peripheral Ids Definitions */

+/*@{*/

+

+// Peripheral instances on HPB0 bridge

+#define ID_PAC0           0 /**< \brief Peripheral Access Controller PAC (PAC0) */

+#define ID_PM             1 /**< \brief Power Manager (PM) */

+#define ID_SYSCTRL        2 /**< \brief System Control (SYSCTRL) */

+#define ID_GCLK           3 /**< \brief Generic Clock Generator (GCLK) */

+#define ID_WDT            4 /**< \brief Watchdog Timer (WDT) */

+#define ID_RTC            5 /**< \brief Real-Time Counter (RTC) */

+#define ID_EIC            6 /**< \brief External Interrupt Controller (EIC) */

+

+// Peripheral instances on HPB1 bridge

+#define ID_PAC1          32 /**< \brief Peripheral Access Controller PAC (PAC1) */

+#define ID_DSU           33 /**< \brief Device Service Unit (DSU) */

+#define ID_NVMCTRL       34 /**< \brief Non-Volatile Memory Controller (NVMCTRL) */

+#define ID_PORT          35 /**< \brief Port Module (PORT) */

+

+// Peripheral instances on HPB2 bridge

+#define ID_PAC2          64 /**< \brief Peripheral Access Controller PAC (PAC2) */

+#define ID_EVSYS         65 /**< \brief Event System Interface (EVSYS) */

+#define ID_SERCOM0       66 /**< \brief Serial Communication Interface SERCOM (SERCOM0) */

+#define ID_SERCOM1       67 /**< \brief Serial Communication Interface SERCOM (SERCOM1) */

+#define ID_SERCOM2       68 /**< \brief Serial Communication Interface SERCOM (SERCOM2) */

+#define ID_SERCOM3       69 /**< \brief Serial Communication Interface SERCOM (SERCOM3) */

+#define ID_SERCOM4       70 /**< \brief Serial Communication Interface SERCOM (SERCOM4) */

+#define ID_SERCOM5       71 /**< \brief Serial Communication Interface SERCOM (SERCOM5) */

+#define ID_TC0           72 /**< \brief Basic Timer Counter TC (TC0) */

+#define ID_TC1           73 /**< \brief Basic Timer Counter TC (TC1) */

+#define ID_TC2           74 /**< \brief Basic Timer Counter TC (TC2) */

+#define ID_TC3           75 /**< \brief Basic Timer Counter TC (TC3) */

+#define ID_TC4           76 /**< \brief Basic Timer Counter TC (TC4) */

+#define ID_TC5           77 /**< \brief Basic Timer Counter TC (TC5) */

+#define ID_TC6           78 /**< \brief Basic Timer Counter TC (TC6) */

+#define ID_TC7           79 /**< \brief Basic Timer Counter TC (TC7) */

+#define ID_ADC           80 /**< \brief Analog Digital Converter (ADC) */

+#define ID_AC            81 /**< \brief Analog Comparators (AC) */

+#define ID_DAC           82 /**< \brief Digital Analog Converter (DAC) */

+

+#define ID_PERIPH_COUNT  83 /**< \brief Number of peripheral IDs */

+/*@}*/

+

+/* ************************************************************************** */

+/**  BASE ADDRESS DEFINITIONS FOR SAMD20G15 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G15_base Peripheral Base Address Definitions */

+/*@{*/

+

+#if defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)

+#define AC                            (0x42004400U) /**< \brief (AC) APB Base Address */

+#define ADC                           (0x42004000U) /**< \brief (ADC) APB Base Address */

+#define DAC                           (0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DSU                           (0x41002000U) /**< \brief (DSU) APB Base Address */

+#define EIC                           (0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EVSYS                         (0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define GCLK                          (0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define NVMCTRL                       (0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define PAC0                          (0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1                          (0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2                          (0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PM                            (0x40000400U) /**< \brief (PM) APB Base Address */

+#define PORT                          (0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS                    (0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define RTC                           (0x40001400U) /**< \brief (RTC) APB Base Address */

+#define SERCOM0                       (0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1                       (0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2                       (0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3                       (0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM4                       (0x42001800U) /**< \brief (SERCOM4) APB Base Address */

+#define SERCOM5                       (0x42001C00U) /**< \brief (SERCOM5) APB Base Address */

+#define SYSCTRL                       (0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define TC0                           (0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1                           (0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2                           (0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3                           (0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4                           (0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5                           (0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC6                           (0x42003800U) /**< \brief (TC6) APB Base Address */

+#define TC7                           (0x42003C00U) /**< \brief (TC7) APB Base Address */

+#define WDT                           (0x40001000U) /**< \brief (WDT) APB Base Address */

+#else

+#define AC                ((Ac       *)0x42004400U) /**< \brief (AC) APB Base Address */

+#define AC_INST_NUM       1                         /**< \brief (AC) Number of instances */

+#define AC_INSTS          { AC }                    /**< \brief (AC) Instances List */

+

+#define ADC               ((Adc      *)0x42004000U) /**< \brief (ADC) APB Base Address */

+#define ADC_INST_NUM      1                         /**< \brief (ADC) Number of instances */

+#define ADC_INSTS         { ADC }                   /**< \brief (ADC) Instances List */

+

+#define DAC               ((Dac      *)0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DAC_INST_NUM      1                         /**< \brief (DAC) Number of instances */

+#define DAC_INSTS         { DAC }                   /**< \brief (DAC) Instances List */

+

+#define DSU               ((Dsu      *)0x41002000U) /**< \brief (DSU) APB Base Address */

+#define DSU_INST_NUM      1                         /**< \brief (DSU) Number of instances */

+#define DSU_INSTS         { DSU }                   /**< \brief (DSU) Instances List */

+

+#define EIC               ((Eic      *)0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EIC_INST_NUM      1                         /**< \brief (EIC) Number of instances */

+#define EIC_INSTS         { EIC }                   /**< \brief (EIC) Instances List */

+

+#define EVSYS             ((Evsys    *)0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define EVSYS_INST_NUM    1                         /**< \brief (EVSYS) Number of instances */

+#define EVSYS_INSTS       { EVSYS }                 /**< \brief (EVSYS) Instances List */

+

+#define GCLK              ((Gclk     *)0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define GCLK_INST_NUM     1                         /**< \brief (GCLK) Number of instances */

+#define GCLK_INSTS        { GCLK }                  /**< \brief (GCLK) Instances List */

+

+#define NVMCTRL           ((Nvmctrl  *)0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define NVMCTRL_INST_NUM  1                         /**< \brief (NVMCTRL) Number of instances */

+#define NVMCTRL_INSTS     { NVMCTRL }               /**< \brief (NVMCTRL) Instances List */

+

+#define PAC0              ((Pac      *)0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1              ((Pac      *)0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2              ((Pac      *)0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PAC_INST_NUM      3                         /**< \brief (PAC) Number of instances */

+#define PAC_INSTS         { PAC0, PAC1, PAC2 }      /**< \brief (PAC) Instances List */

+

+#define PM                ((Pm       *)0x40000400U) /**< \brief (PM) APB Base Address */

+#define PM_INST_NUM       1                         /**< \brief (PM) Number of instances */

+#define PM_INSTS          { PM }                    /**< \brief (PM) Instances List */

+

+#define PORT              ((Port     *)0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS        ((Port     *)0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define PORT_INST_NUM     1                         /**< \brief (PORT) Number of instances */

+#define PORT_INSTS        { PORT }                  /**< \brief (PORT) Instances List */

+

+#define RTC               ((Rtc      *)0x40001400U) /**< \brief (RTC) APB Base Address */

+#define RTC_INST_NUM      1                         /**< \brief (RTC) Number of instances */

+#define RTC_INSTS         { RTC }                   /**< \brief (RTC) Instances List */

+

+#define SERCOM0           ((Sercom   *)0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1           ((Sercom   *)0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2           ((Sercom   *)0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3           ((Sercom   *)0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM4           ((Sercom   *)0x42001800U) /**< \brief (SERCOM4) APB Base Address */

+#define SERCOM5           ((Sercom   *)0x42001C00U) /**< \brief (SERCOM5) APB Base Address */

+#define SERCOM_INST_NUM   6                         /**< \brief (SERCOM) Number of instances */

+#define SERCOM_INSTS      { SERCOM0, SERCOM1, SERCOM2, SERCOM3, SERCOM4, SERCOM5 } /**< \brief (SERCOM) Instances List */

+

+#define SYSCTRL           ((Sysctrl  *)0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define SYSCTRL_INST_NUM  1                         /**< \brief (SYSCTRL) Number of instances */

+#define SYSCTRL_INSTS     { SYSCTRL }               /**< \brief (SYSCTRL) Instances List */

+

+#define TC0               ((Tc       *)0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1               ((Tc       *)0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2               ((Tc       *)0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3               ((Tc       *)0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4               ((Tc       *)0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5               ((Tc       *)0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC6               ((Tc       *)0x42003800U) /**< \brief (TC6) APB Base Address */

+#define TC7               ((Tc       *)0x42003C00U) /**< \brief (TC7) APB Base Address */

+#define TC_INST_NUM       8                         /**< \brief (TC) Number of instances */

+#define TC_INSTS          { TC0, TC1, TC2, TC3, TC4, TC5, TC6, TC7 } /**< \brief (TC) Instances List */

+

+#define WDT               ((Wdt      *)0x40001000U) /**< \brief (WDT) APB Base Address */

+#define WDT_INST_NUM      1                         /**< \brief (WDT) Number of instances */

+#define WDT_INSTS         { WDT }                   /**< \brief (WDT) Instances List */

+

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+/*@}*/

+

+/* ************************************************************************** */

+/**  PORT DEFINITIONS FOR SAMD20G15 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G15_port PORT Definitions */

+/*@{*/

+

+#include "pio/pio_samd20g15.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  MEMORY MAPPING DEFINITIONS FOR SAMD20G15 */

+/* ************************************************************************** */

+

+#define FLASH_SIZE            0x8000 /* 32 kB */

+#define FLASH_PAGE_SIZE       64

+#define FLASH_NB_OF_PAGES     512

+#define FLASH_USER_PAGE_SIZE  64

+#define HRAMC0_SIZE           0x1000 /* 4 kB */

+#define FLASH_ADDR            (0x00000000U) /**< FLASH base address */

+#define FLASH_USER_PAGE_ADDR  (0x00800000U) /**< FLASH_USER_PAGE base address */

+#define HRAMC0_ADDR           (0x20000000U) /**< HRAMC0 base address */

+

+/* ************************************************************************** */

+/**  ELECTRICAL DEFINITIONS FOR SAMD20G15 */

+/* ************************************************************************** */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+/*@}*/

+

+#endif /* SAMD20G15_H */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20g16.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20g16.h
new file mode 100644
index 0000000..55606fb
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20g16.h
@@ -0,0 +1,508 @@
+/**

+ * \file

+ *

+ * \brief Header file for SAMD20G16

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20G16_

+#define _SAMD20G16_

+

+/**

+ * \ingroup SAMD20_definitions

+ * \addtogroup SAMD20G16_definitions SAMD20G16 definitions

+ * This file defines all structures and symbols for SAMD20G16:

+ *   - registers and bitfields

+ *   - peripheral base address

+ *   - peripheral ID

+ *   - PIO definitions

+*/

+/*@{*/

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#include <stdint.h>

+#ifndef __cplusplus

+typedef volatile const uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile const uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile const uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#else

+typedef volatile       uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile       uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile       uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#endif

+typedef volatile       uint32_t WoReg;   /**< Write only 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t WoReg16; /**< Write only 16-bit register (volatile unsigned int) */

+typedef volatile       uint32_t WoReg8;  /**< Write only  8-bit register (volatile unsigned int) */

+typedef volatile       uint32_t RwReg;   /**< Read-Write 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t RwReg16; /**< Read-Write 16-bit register (volatile unsigned int) */

+typedef volatile       uint8_t  RwReg8;  /**< Read-Write  8-bit register (volatile unsigned int) */

+#define CAST(type, value) ((type *)(value))

+#define REG_ACCESS(type, address) (*(type*)(address)) /**< C code: Register value */

+#else

+#define CAST(type, value) (value)

+#define REG_ACCESS(type, address) (address) /**< Assembly code: Register address */

+#endif

+

+/* ************************************************************************** */

+/**  CMSIS DEFINITIONS FOR SAMD20G16 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G16_cmsis CMSIS Definitions */

+/*@{*/

+

+/** Interrupt Number Definition */

+typedef enum IRQn

+{

+  /******  Cortex-M0+ Processor Exceptions Numbers *******************************/

+  NonMaskableInt_IRQn      = -14, /**<  2 Non Maskable Interrupt                 */

+  HardFault_IRQn           = -13, /**<  3 Cortex-M0+ Hard Fault Interrupt        */

+  SVCall_IRQn              = -5,  /**< 11 Cortex-M0+ SV Call Interrupt           */

+  PendSV_IRQn              = -2,  /**< 14 Cortex-M0+ Pend SV Interrupt           */

+  SysTick_IRQn             = -1,  /**< 15 Cortex-M0+ System Tick Interrupt       */

+  /******  SAMD20G16-specific Interrupt Numbers ***********************/

+  PM_IRQn                  =  0, /**<  0 SAMD20G16 Power Manager (PM) */

+  SYSCTRL_IRQn             =  1, /**<  1 SAMD20G16 System Control (SYSCTRL) */

+  WDT_IRQn                 =  2, /**<  2 SAMD20G16 Watchdog Timer (WDT) */

+  RTC_IRQn                 =  3, /**<  3 SAMD20G16 Real-Time Counter (RTC) */

+  EIC_IRQn                 =  4, /**<  4 SAMD20G16 External Interrupt Controller (EIC) */

+  NVMCTRL_IRQn             =  5, /**<  5 SAMD20G16 Non-Volatile Memory Controller (NVMCTRL) */

+  EVSYS_IRQn               =  6, /**<  6 SAMD20G16 Event System Interface (EVSYS) */

+  SERCOM0_IRQn             =  7, /**<  7 SAMD20G16 Serial Communication Interface 0 (SERCOM0) */

+  SERCOM1_IRQn             =  8, /**<  8 SAMD20G16 Serial Communication Interface 1 (SERCOM1) */

+  SERCOM2_IRQn             =  9, /**<  9 SAMD20G16 Serial Communication Interface 2 (SERCOM2) */

+  SERCOM3_IRQn             = 10, /**< 10 SAMD20G16 Serial Communication Interface 3 (SERCOM3) */

+  SERCOM4_IRQn             = 11, /**< 11 SAMD20G16 Serial Communication Interface 4 (SERCOM4) */

+  SERCOM5_IRQn             = 12, /**< 12 SAMD20G16 Serial Communication Interface 5 (SERCOM5) */

+  TC0_IRQn                 = 13, /**< 13 SAMD20G16 Basic Timer Counter 0 (TC0) */

+  TC1_IRQn                 = 14, /**< 14 SAMD20G16 Basic Timer Counter 1 (TC1) */

+  TC2_IRQn                 = 15, /**< 15 SAMD20G16 Basic Timer Counter 2 (TC2) */

+  TC3_IRQn                 = 16, /**< 16 SAMD20G16 Basic Timer Counter 3 (TC3) */

+  TC4_IRQn                 = 17, /**< 17 SAMD20G16 Basic Timer Counter 4 (TC4) */

+  TC5_IRQn                 = 18, /**< 18 SAMD20G16 Basic Timer Counter 5 (TC5) */

+  TC6_IRQn                 = 19, /**< 19 SAMD20G16 Basic Timer Counter 6 (TC6) */

+  TC7_IRQn                 = 20, /**< 20 SAMD20G16 Basic Timer Counter 7 (TC7) */

+  ADC_IRQn                 = 21, /**< 21 SAMD20G16 Analog Digital Converter (ADC) */

+  AC_IRQn                  = 22, /**< 22 SAMD20G16 Analog Comparators (AC) */

+  DAC_IRQn                 = 23, /**< 23 SAMD20G16 Digital Analog Converter (DAC) */

+

+  PERIPH_COUNT_IRQn        = 24  /**< Number of peripheral IDs */

+} IRQn_Type;

+

+typedef struct _DeviceVectors

+{

+  /* Stack pointer */

+  void* pvStack;

+

+  /* Cortex-M handlers */

+  void* pfnReset_Handler;

+  void* pfnNMI_Handler;

+  void* pfnHardFault_Handler;

+  void* pfnReservedM12;

+  void* pfnReservedM11;

+  void* pfnReservedM10;

+  void* pfnReservedM9;

+  void* pfnReservedM8;

+  void* pfnReservedM7;

+  void* pfnReservedM6;

+  void* pfnSVC_Handler;

+  void* pfnReservedM4;

+  void* pfnReservedM3;

+  void* pfnPendSV_Handler;

+  void* pfnSysTick_Handler;

+

+  /* Peripheral handlers */

+  void* pfnPM_Handler;                    /*  0 Power Manager */

+  void* pfnSYSCTRL_Handler;               /*  1 System Control */

+  void* pfnWDT_Handler;                   /*  2 Watchdog Timer */

+  void* pfnRTC_Handler;                   /*  3 Real-Time Counter */

+  void* pfnEIC_Handler;                   /*  4 External Interrupt Controller */

+  void* pfnNVMCTRL_Handler;               /*  5 Non-Volatile Memory Controller */

+  void* pfnEVSYS_Handler;                 /*  6 Event System Interface */

+  void* pfnSERCOM0_Handler;               /*  7 Serial Communication Interface 0 */

+  void* pfnSERCOM1_Handler;               /*  8 Serial Communication Interface 1 */

+  void* pfnSERCOM2_Handler;               /*  9 Serial Communication Interface 2 */

+  void* pfnSERCOM3_Handler;               /* 10 Serial Communication Interface 3 */

+  void* pfnSERCOM4_Handler;               /* 11 Serial Communication Interface 4 */

+  void* pfnSERCOM5_Handler;               /* 12 Serial Communication Interface 5 */

+  void* pfnTC0_Handler;                   /* 13 Basic Timer Counter 0 */

+  void* pfnTC1_Handler;                   /* 14 Basic Timer Counter 1 */

+  void* pfnTC2_Handler;                   /* 15 Basic Timer Counter 2 */

+  void* pfnTC3_Handler;                   /* 16 Basic Timer Counter 3 */

+  void* pfnTC4_Handler;                   /* 17 Basic Timer Counter 4 */

+  void* pfnTC5_Handler;                   /* 18 Basic Timer Counter 5 */

+  void* pfnTC6_Handler;                   /* 19 Basic Timer Counter 6 */

+  void* pfnTC7_Handler;                   /* 20 Basic Timer Counter 7 */

+  void* pfnADC_Handler;                   /* 21 Analog Digital Converter */

+  void* pfnAC_Handler;                    /* 22 Analog Comparators */

+  void* pfnDAC_Handler;                   /* 23 Digital Analog Converter */

+} DeviceVectors;

+

+/* Cortex-M0+ processor handlers */

+void Reset_Handler               ( void );

+void NMI_Handler                 ( void );

+void HardFault_Handler           ( void );

+void SVC_Handler                 ( void );

+void PendSV_Handler              ( void );

+void SysTick_Handler             ( void );

+

+/* Peripherals handlers */

+void PM_Handler                  ( void );

+void SYSCTRL_Handler             ( void );

+void WDT_Handler                 ( void );

+void RTC_Handler                 ( void );

+void EIC_Handler                 ( void );

+void NVMCTRL_Handler             ( void );

+void EVSYS_Handler               ( void );

+void SERCOM0_Handler             ( void );

+void SERCOM1_Handler             ( void );

+void SERCOM2_Handler             ( void );

+void SERCOM3_Handler             ( void );

+void SERCOM4_Handler             ( void );

+void SERCOM5_Handler             ( void );

+void TC0_Handler                 ( void );

+void TC1_Handler                 ( void );

+void TC2_Handler                 ( void );

+void TC3_Handler                 ( void );

+void TC4_Handler                 ( void );

+void TC5_Handler                 ( void );

+void TC6_Handler                 ( void );

+void TC7_Handler                 ( void );

+void ADC_Handler                 ( void );

+void AC_Handler                  ( void );

+void DAC_Handler                 ( void );

+

+/*

+ * \brief Configuration of the Cortex-M0+ Processor and Core Peripherals

+ */

+

+#define LITTLE_ENDIAN          1        

+#define __CM0PLUS_REV          1         /*!< Core revision r0p1 */

+#define __MPU_PRESENT          0         /*!< MPU present or not */

+#define __NVIC_PRIO_BITS       2         /*!< Number of bits used for Priority Levels */

+#define __VTOR_PRESENT         1         /*!< VTOR present or not */

+#define __Vendor_SysTickConfig 0         /*!< Set to 1 if different SysTick Config is used */

+

+/**

+ * \brief CMSIS includes

+ */

+

+#include <core_cm0plus.h>

+#if !defined DONT_USE_CMSIS_INIT

+#include "system_samd20.h"

+#endif /* DONT_USE_CMSIS_INIT */

+

+/*@}*/

+

+/* ************************************************************************** */

+/**  SOFTWARE PERIPHERAL API DEFINITION FOR SAMD20G16 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G16_api Peripheral Software API */

+/*@{*/

+

+#include "component/component_ac.h"

+#include "component/component_adc.h"

+#include "component/component_dac.h"

+#include "component/component_dsu.h"

+#include "component/component_eic.h"

+#include "component/component_evsys.h"

+#include "component/component_gclk.h"

+#include "component/component_nvmctrl.h"

+#include "component/component_pac.h"

+#include "component/component_pm.h"

+#include "component/component_port.h"

+#include "component/component_rtc.h"

+#include "component/component_sercom.h"

+#include "component/component_sysctrl.h"

+#include "component/component_tc.h"

+#include "component/component_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  REGISTERS ACCESS DEFINITIONS FOR SAMD20G16 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G16_reg Registers Access Definitions */

+/*@{*/

+

+#include "instance/instance_ac.h"

+#include "instance/instance_adc.h"

+#include "instance/instance_dac.h"

+#include "instance/instance_dsu.h"

+#include "instance/instance_eic.h"

+#include "instance/instance_evsys.h"

+#include "instance/instance_gclk.h"

+#include "instance/instance_nvmctrl.h"

+#include "instance/instance_pac0.h"

+#include "instance/instance_pac1.h"

+#include "instance/instance_pac2.h"

+#include "instance/instance_pm.h"

+#include "instance/instance_port.h"

+#include "instance/instance_rtc.h"

+#include "instance/instance_sercom0.h"

+#include "instance/instance_sercom1.h"

+#include "instance/instance_sercom2.h"

+#include "instance/instance_sercom3.h"

+#include "instance/instance_sercom4.h"

+#include "instance/instance_sercom5.h"

+#include "instance/instance_sysctrl.h"

+#include "instance/instance_tc0.h"

+#include "instance/instance_tc1.h"

+#include "instance/instance_tc2.h"

+#include "instance/instance_tc3.h"

+#include "instance/instance_tc4.h"

+#include "instance/instance_tc5.h"

+#include "instance/instance_tc6.h"

+#include "instance/instance_tc7.h"

+#include "instance/instance_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  PERIPHERAL ID DEFINITIONS FOR SAMD20G16 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G16_id Peripheral Ids Definitions */

+/*@{*/

+

+// Peripheral instances on HPB0 bridge

+#define ID_PAC0           0 /**< \brief Peripheral Access Controller PAC (PAC0) */

+#define ID_PM             1 /**< \brief Power Manager (PM) */

+#define ID_SYSCTRL        2 /**< \brief System Control (SYSCTRL) */

+#define ID_GCLK           3 /**< \brief Generic Clock Generator (GCLK) */

+#define ID_WDT            4 /**< \brief Watchdog Timer (WDT) */

+#define ID_RTC            5 /**< \brief Real-Time Counter (RTC) */

+#define ID_EIC            6 /**< \brief External Interrupt Controller (EIC) */

+

+// Peripheral instances on HPB1 bridge

+#define ID_PAC1          32 /**< \brief Peripheral Access Controller PAC (PAC1) */

+#define ID_DSU           33 /**< \brief Device Service Unit (DSU) */

+#define ID_NVMCTRL       34 /**< \brief Non-Volatile Memory Controller (NVMCTRL) */

+#define ID_PORT          35 /**< \brief Port Module (PORT) */

+

+// Peripheral instances on HPB2 bridge

+#define ID_PAC2          64 /**< \brief Peripheral Access Controller PAC (PAC2) */

+#define ID_EVSYS         65 /**< \brief Event System Interface (EVSYS) */

+#define ID_SERCOM0       66 /**< \brief Serial Communication Interface SERCOM (SERCOM0) */

+#define ID_SERCOM1       67 /**< \brief Serial Communication Interface SERCOM (SERCOM1) */

+#define ID_SERCOM2       68 /**< \brief Serial Communication Interface SERCOM (SERCOM2) */

+#define ID_SERCOM3       69 /**< \brief Serial Communication Interface SERCOM (SERCOM3) */

+#define ID_SERCOM4       70 /**< \brief Serial Communication Interface SERCOM (SERCOM4) */

+#define ID_SERCOM5       71 /**< \brief Serial Communication Interface SERCOM (SERCOM5) */

+#define ID_TC0           72 /**< \brief Basic Timer Counter TC (TC0) */

+#define ID_TC1           73 /**< \brief Basic Timer Counter TC (TC1) */

+#define ID_TC2           74 /**< \brief Basic Timer Counter TC (TC2) */

+#define ID_TC3           75 /**< \brief Basic Timer Counter TC (TC3) */

+#define ID_TC4           76 /**< \brief Basic Timer Counter TC (TC4) */

+#define ID_TC5           77 /**< \brief Basic Timer Counter TC (TC5) */

+#define ID_TC6           78 /**< \brief Basic Timer Counter TC (TC6) */

+#define ID_TC7           79 /**< \brief Basic Timer Counter TC (TC7) */

+#define ID_ADC           80 /**< \brief Analog Digital Converter (ADC) */

+#define ID_AC            81 /**< \brief Analog Comparators (AC) */

+#define ID_DAC           82 /**< \brief Digital Analog Converter (DAC) */

+

+#define ID_PERIPH_COUNT  83 /**< \brief Number of peripheral IDs */

+/*@}*/

+

+/* ************************************************************************** */

+/**  BASE ADDRESS DEFINITIONS FOR SAMD20G16 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G16_base Peripheral Base Address Definitions */

+/*@{*/

+

+#if defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)

+#define AC                            (0x42004400U) /**< \brief (AC) APB Base Address */

+#define ADC                           (0x42004000U) /**< \brief (ADC) APB Base Address */

+#define DAC                           (0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DSU                           (0x41002000U) /**< \brief (DSU) APB Base Address */

+#define EIC                           (0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EVSYS                         (0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define GCLK                          (0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define NVMCTRL                       (0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define PAC0                          (0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1                          (0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2                          (0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PM                            (0x40000400U) /**< \brief (PM) APB Base Address */

+#define PORT                          (0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS                    (0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define RTC                           (0x40001400U) /**< \brief (RTC) APB Base Address */

+#define SERCOM0                       (0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1                       (0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2                       (0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3                       (0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM4                       (0x42001800U) /**< \brief (SERCOM4) APB Base Address */

+#define SERCOM5                       (0x42001C00U) /**< \brief (SERCOM5) APB Base Address */

+#define SYSCTRL                       (0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define TC0                           (0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1                           (0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2                           (0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3                           (0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4                           (0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5                           (0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC6                           (0x42003800U) /**< \brief (TC6) APB Base Address */

+#define TC7                           (0x42003C00U) /**< \brief (TC7) APB Base Address */

+#define WDT                           (0x40001000U) /**< \brief (WDT) APB Base Address */

+#else

+#define AC                ((Ac       *)0x42004400U) /**< \brief (AC) APB Base Address */

+#define AC_INST_NUM       1                         /**< \brief (AC) Number of instances */

+#define AC_INSTS          { AC }                    /**< \brief (AC) Instances List */

+

+#define ADC               ((Adc      *)0x42004000U) /**< \brief (ADC) APB Base Address */

+#define ADC_INST_NUM      1                         /**< \brief (ADC) Number of instances */

+#define ADC_INSTS         { ADC }                   /**< \brief (ADC) Instances List */

+

+#define DAC               ((Dac      *)0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DAC_INST_NUM      1                         /**< \brief (DAC) Number of instances */

+#define DAC_INSTS         { DAC }                   /**< \brief (DAC) Instances List */

+

+#define DSU               ((Dsu      *)0x41002000U) /**< \brief (DSU) APB Base Address */

+#define DSU_INST_NUM      1                         /**< \brief (DSU) Number of instances */

+#define DSU_INSTS         { DSU }                   /**< \brief (DSU) Instances List */

+

+#define EIC               ((Eic      *)0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EIC_INST_NUM      1                         /**< \brief (EIC) Number of instances */

+#define EIC_INSTS         { EIC }                   /**< \brief (EIC) Instances List */

+

+#define EVSYS             ((Evsys    *)0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define EVSYS_INST_NUM    1                         /**< \brief (EVSYS) Number of instances */

+#define EVSYS_INSTS       { EVSYS }                 /**< \brief (EVSYS) Instances List */

+

+#define GCLK              ((Gclk     *)0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define GCLK_INST_NUM     1                         /**< \brief (GCLK) Number of instances */

+#define GCLK_INSTS        { GCLK }                  /**< \brief (GCLK) Instances List */

+

+#define NVMCTRL           ((Nvmctrl  *)0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define NVMCTRL_INST_NUM  1                         /**< \brief (NVMCTRL) Number of instances */

+#define NVMCTRL_INSTS     { NVMCTRL }               /**< \brief (NVMCTRL) Instances List */

+

+#define PAC0              ((Pac      *)0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1              ((Pac      *)0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2              ((Pac      *)0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PAC_INST_NUM      3                         /**< \brief (PAC) Number of instances */

+#define PAC_INSTS         { PAC0, PAC1, PAC2 }      /**< \brief (PAC) Instances List */

+

+#define PM                ((Pm       *)0x40000400U) /**< \brief (PM) APB Base Address */

+#define PM_INST_NUM       1                         /**< \brief (PM) Number of instances */

+#define PM_INSTS          { PM }                    /**< \brief (PM) Instances List */

+

+#define PORT              ((Port     *)0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS        ((Port     *)0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define PORT_INST_NUM     1                         /**< \brief (PORT) Number of instances */

+#define PORT_INSTS        { PORT }                  /**< \brief (PORT) Instances List */

+

+#define RTC               ((Rtc      *)0x40001400U) /**< \brief (RTC) APB Base Address */

+#define RTC_INST_NUM      1                         /**< \brief (RTC) Number of instances */

+#define RTC_INSTS         { RTC }                   /**< \brief (RTC) Instances List */

+

+#define SERCOM0           ((Sercom   *)0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1           ((Sercom   *)0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2           ((Sercom   *)0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3           ((Sercom   *)0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM4           ((Sercom   *)0x42001800U) /**< \brief (SERCOM4) APB Base Address */

+#define SERCOM5           ((Sercom   *)0x42001C00U) /**< \brief (SERCOM5) APB Base Address */

+#define SERCOM_INST_NUM   6                         /**< \brief (SERCOM) Number of instances */

+#define SERCOM_INSTS      { SERCOM0, SERCOM1, SERCOM2, SERCOM3, SERCOM4, SERCOM5 } /**< \brief (SERCOM) Instances List */

+

+#define SYSCTRL           ((Sysctrl  *)0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define SYSCTRL_INST_NUM  1                         /**< \brief (SYSCTRL) Number of instances */

+#define SYSCTRL_INSTS     { SYSCTRL }               /**< \brief (SYSCTRL) Instances List */

+

+#define TC0               ((Tc       *)0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1               ((Tc       *)0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2               ((Tc       *)0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3               ((Tc       *)0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4               ((Tc       *)0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5               ((Tc       *)0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC6               ((Tc       *)0x42003800U) /**< \brief (TC6) APB Base Address */

+#define TC7               ((Tc       *)0x42003C00U) /**< \brief (TC7) APB Base Address */

+#define TC_INST_NUM       8                         /**< \brief (TC) Number of instances */

+#define TC_INSTS          { TC0, TC1, TC2, TC3, TC4, TC5, TC6, TC7 } /**< \brief (TC) Instances List */

+

+#define WDT               ((Wdt      *)0x40001000U) /**< \brief (WDT) APB Base Address */

+#define WDT_INST_NUM      1                         /**< \brief (WDT) Number of instances */

+#define WDT_INSTS         { WDT }                   /**< \brief (WDT) Instances List */

+

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+/*@}*/

+

+/* ************************************************************************** */

+/**  PORT DEFINITIONS FOR SAMD20G16 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G16_port PORT Definitions */

+/*@{*/

+

+#include "pio/pio_samd20g16.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  MEMORY MAPPING DEFINITIONS FOR SAMD20G16 */

+/* ************************************************************************** */

+

+#define FLASH_SIZE            0x10000 /* 64 kB */

+#define FLASH_PAGE_SIZE       64

+#define FLASH_NB_OF_PAGES     1024

+#define FLASH_USER_PAGE_SIZE  64

+#define HRAMC0_SIZE           0x2000 /* 8 kB */

+#define FLASH_ADDR            (0x00000000U) /**< FLASH base address */

+#define FLASH_USER_PAGE_ADDR  (0x00800000U) /**< FLASH_USER_PAGE base address */

+#define HRAMC0_ADDR           (0x20000000U) /**< HRAMC0 base address */

+

+/* ************************************************************************** */

+/**  ELECTRICAL DEFINITIONS FOR SAMD20G16 */

+/* ************************************************************************** */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+/*@}*/

+

+#endif /* SAMD20G16_H */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20g17.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20g17.h
new file mode 100644
index 0000000..5863558
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20g17.h
@@ -0,0 +1,508 @@
+/**

+ * \file

+ *

+ * \brief Header file for SAMD20G17

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20G17_

+#define _SAMD20G17_

+

+/**

+ * \ingroup SAMD20_definitions

+ * \addtogroup SAMD20G17_definitions SAMD20G17 definitions

+ * This file defines all structures and symbols for SAMD20G17:

+ *   - registers and bitfields

+ *   - peripheral base address

+ *   - peripheral ID

+ *   - PIO definitions

+*/

+/*@{*/

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#include <stdint.h>

+#ifndef __cplusplus

+typedef volatile const uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile const uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile const uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#else

+typedef volatile       uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile       uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile       uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#endif

+typedef volatile       uint32_t WoReg;   /**< Write only 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t WoReg16; /**< Write only 16-bit register (volatile unsigned int) */

+typedef volatile       uint32_t WoReg8;  /**< Write only  8-bit register (volatile unsigned int) */

+typedef volatile       uint32_t RwReg;   /**< Read-Write 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t RwReg16; /**< Read-Write 16-bit register (volatile unsigned int) */

+typedef volatile       uint8_t  RwReg8;  /**< Read-Write  8-bit register (volatile unsigned int) */

+#define CAST(type, value) ((type *)(value))

+#define REG_ACCESS(type, address) (*(type*)(address)) /**< C code: Register value */

+#else

+#define CAST(type, value) (value)

+#define REG_ACCESS(type, address) (address) /**< Assembly code: Register address */

+#endif

+

+/* ************************************************************************** */

+/**  CMSIS DEFINITIONS FOR SAMD20G17 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G17_cmsis CMSIS Definitions */

+/*@{*/

+

+/** Interrupt Number Definition */

+typedef enum IRQn

+{

+  /******  Cortex-M0+ Processor Exceptions Numbers *******************************/

+  NonMaskableInt_IRQn      = -14, /**<  2 Non Maskable Interrupt                 */

+  HardFault_IRQn           = -13, /**<  3 Cortex-M0+ Hard Fault Interrupt        */

+  SVCall_IRQn              = -5,  /**< 11 Cortex-M0+ SV Call Interrupt           */

+  PendSV_IRQn              = -2,  /**< 14 Cortex-M0+ Pend SV Interrupt           */

+  SysTick_IRQn             = -1,  /**< 15 Cortex-M0+ System Tick Interrupt       */

+  /******  SAMD20G17-specific Interrupt Numbers ***********************/

+  PM_IRQn                  =  0, /**<  0 SAMD20G17 Power Manager (PM) */

+  SYSCTRL_IRQn             =  1, /**<  1 SAMD20G17 System Control (SYSCTRL) */

+  WDT_IRQn                 =  2, /**<  2 SAMD20G17 Watchdog Timer (WDT) */

+  RTC_IRQn                 =  3, /**<  3 SAMD20G17 Real-Time Counter (RTC) */

+  EIC_IRQn                 =  4, /**<  4 SAMD20G17 External Interrupt Controller (EIC) */

+  NVMCTRL_IRQn             =  5, /**<  5 SAMD20G17 Non-Volatile Memory Controller (NVMCTRL) */

+  EVSYS_IRQn               =  6, /**<  6 SAMD20G17 Event System Interface (EVSYS) */

+  SERCOM0_IRQn             =  7, /**<  7 SAMD20G17 Serial Communication Interface 0 (SERCOM0) */

+  SERCOM1_IRQn             =  8, /**<  8 SAMD20G17 Serial Communication Interface 1 (SERCOM1) */

+  SERCOM2_IRQn             =  9, /**<  9 SAMD20G17 Serial Communication Interface 2 (SERCOM2) */

+  SERCOM3_IRQn             = 10, /**< 10 SAMD20G17 Serial Communication Interface 3 (SERCOM3) */

+  SERCOM4_IRQn             = 11, /**< 11 SAMD20G17 Serial Communication Interface 4 (SERCOM4) */

+  SERCOM5_IRQn             = 12, /**< 12 SAMD20G17 Serial Communication Interface 5 (SERCOM5) */

+  TC0_IRQn                 = 13, /**< 13 SAMD20G17 Basic Timer Counter 0 (TC0) */

+  TC1_IRQn                 = 14, /**< 14 SAMD20G17 Basic Timer Counter 1 (TC1) */

+  TC2_IRQn                 = 15, /**< 15 SAMD20G17 Basic Timer Counter 2 (TC2) */

+  TC3_IRQn                 = 16, /**< 16 SAMD20G17 Basic Timer Counter 3 (TC3) */

+  TC4_IRQn                 = 17, /**< 17 SAMD20G17 Basic Timer Counter 4 (TC4) */

+  TC5_IRQn                 = 18, /**< 18 SAMD20G17 Basic Timer Counter 5 (TC5) */

+  TC6_IRQn                 = 19, /**< 19 SAMD20G17 Basic Timer Counter 6 (TC6) */

+  TC7_IRQn                 = 20, /**< 20 SAMD20G17 Basic Timer Counter 7 (TC7) */

+  ADC_IRQn                 = 21, /**< 21 SAMD20G17 Analog Digital Converter (ADC) */

+  AC_IRQn                  = 22, /**< 22 SAMD20G17 Analog Comparators (AC) */

+  DAC_IRQn                 = 23, /**< 23 SAMD20G17 Digital Analog Converter (DAC) */

+

+  PERIPH_COUNT_IRQn        = 24  /**< Number of peripheral IDs */

+} IRQn_Type;

+

+typedef struct _DeviceVectors

+{

+  /* Stack pointer */

+  void* pvStack;

+

+  /* Cortex-M handlers */

+  void* pfnReset_Handler;

+  void* pfnNMI_Handler;

+  void* pfnHardFault_Handler;

+  void* pfnReservedM12;

+  void* pfnReservedM11;

+  void* pfnReservedM10;

+  void* pfnReservedM9;

+  void* pfnReservedM8;

+  void* pfnReservedM7;

+  void* pfnReservedM6;

+  void* pfnSVC_Handler;

+  void* pfnReservedM4;

+  void* pfnReservedM3;

+  void* pfnPendSV_Handler;

+  void* pfnSysTick_Handler;

+

+  /* Peripheral handlers */

+  void* pfnPM_Handler;                    /*  0 Power Manager */

+  void* pfnSYSCTRL_Handler;               /*  1 System Control */

+  void* pfnWDT_Handler;                   /*  2 Watchdog Timer */

+  void* pfnRTC_Handler;                   /*  3 Real-Time Counter */

+  void* pfnEIC_Handler;                   /*  4 External Interrupt Controller */

+  void* pfnNVMCTRL_Handler;               /*  5 Non-Volatile Memory Controller */

+  void* pfnEVSYS_Handler;                 /*  6 Event System Interface */

+  void* pfnSERCOM0_Handler;               /*  7 Serial Communication Interface 0 */

+  void* pfnSERCOM1_Handler;               /*  8 Serial Communication Interface 1 */

+  void* pfnSERCOM2_Handler;               /*  9 Serial Communication Interface 2 */

+  void* pfnSERCOM3_Handler;               /* 10 Serial Communication Interface 3 */

+  void* pfnSERCOM4_Handler;               /* 11 Serial Communication Interface 4 */

+  void* pfnSERCOM5_Handler;               /* 12 Serial Communication Interface 5 */

+  void* pfnTC0_Handler;                   /* 13 Basic Timer Counter 0 */

+  void* pfnTC1_Handler;                   /* 14 Basic Timer Counter 1 */

+  void* pfnTC2_Handler;                   /* 15 Basic Timer Counter 2 */

+  void* pfnTC3_Handler;                   /* 16 Basic Timer Counter 3 */

+  void* pfnTC4_Handler;                   /* 17 Basic Timer Counter 4 */

+  void* pfnTC5_Handler;                   /* 18 Basic Timer Counter 5 */

+  void* pfnTC6_Handler;                   /* 19 Basic Timer Counter 6 */

+  void* pfnTC7_Handler;                   /* 20 Basic Timer Counter 7 */

+  void* pfnADC_Handler;                   /* 21 Analog Digital Converter */

+  void* pfnAC_Handler;                    /* 22 Analog Comparators */

+  void* pfnDAC_Handler;                   /* 23 Digital Analog Converter */

+} DeviceVectors;

+

+/* Cortex-M0+ processor handlers */

+void Reset_Handler               ( void );

+void NMI_Handler                 ( void );

+void HardFault_Handler           ( void );

+void SVC_Handler                 ( void );

+void PendSV_Handler              ( void );

+void SysTick_Handler             ( void );

+

+/* Peripherals handlers */

+void PM_Handler                  ( void );

+void SYSCTRL_Handler             ( void );

+void WDT_Handler                 ( void );

+void RTC_Handler                 ( void );

+void EIC_Handler                 ( void );

+void NVMCTRL_Handler             ( void );

+void EVSYS_Handler               ( void );

+void SERCOM0_Handler             ( void );

+void SERCOM1_Handler             ( void );

+void SERCOM2_Handler             ( void );

+void SERCOM3_Handler             ( void );

+void SERCOM4_Handler             ( void );

+void SERCOM5_Handler             ( void );

+void TC0_Handler                 ( void );

+void TC1_Handler                 ( void );

+void TC2_Handler                 ( void );

+void TC3_Handler                 ( void );

+void TC4_Handler                 ( void );

+void TC5_Handler                 ( void );

+void TC6_Handler                 ( void );

+void TC7_Handler                 ( void );

+void ADC_Handler                 ( void );

+void AC_Handler                  ( void );

+void DAC_Handler                 ( void );

+

+/*

+ * \brief Configuration of the Cortex-M0+ Processor and Core Peripherals

+ */

+

+#define LITTLE_ENDIAN          1        

+#define __CM0PLUS_REV          1         /*!< Core revision r0p1 */

+#define __MPU_PRESENT          0         /*!< MPU present or not */

+#define __NVIC_PRIO_BITS       2         /*!< Number of bits used for Priority Levels */

+#define __VTOR_PRESENT         1         /*!< VTOR present or not */

+#define __Vendor_SysTickConfig 0         /*!< Set to 1 if different SysTick Config is used */

+

+/**

+ * \brief CMSIS includes

+ */

+

+#include <core_cm0plus.h>

+#if !defined DONT_USE_CMSIS_INIT

+#include "system_samd20.h"

+#endif /* DONT_USE_CMSIS_INIT */

+

+/*@}*/

+

+/* ************************************************************************** */

+/**  SOFTWARE PERIPHERAL API DEFINITION FOR SAMD20G17 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G17_api Peripheral Software API */

+/*@{*/

+

+#include "component/component_ac.h"

+#include "component/component_adc.h"

+#include "component/component_dac.h"

+#include "component/component_dsu.h"

+#include "component/component_eic.h"

+#include "component/component_evsys.h"

+#include "component/component_gclk.h"

+#include "component/component_nvmctrl.h"

+#include "component/component_pac.h"

+#include "component/component_pm.h"

+#include "component/component_port.h"

+#include "component/component_rtc.h"

+#include "component/component_sercom.h"

+#include "component/component_sysctrl.h"

+#include "component/component_tc.h"

+#include "component/component_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  REGISTERS ACCESS DEFINITIONS FOR SAMD20G17 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G17_reg Registers Access Definitions */

+/*@{*/

+

+#include "instance/instance_ac.h"

+#include "instance/instance_adc.h"

+#include "instance/instance_dac.h"

+#include "instance/instance_dsu.h"

+#include "instance/instance_eic.h"

+#include "instance/instance_evsys.h"

+#include "instance/instance_gclk.h"

+#include "instance/instance_nvmctrl.h"

+#include "instance/instance_pac0.h"

+#include "instance/instance_pac1.h"

+#include "instance/instance_pac2.h"

+#include "instance/instance_pm.h"

+#include "instance/instance_port.h"

+#include "instance/instance_rtc.h"

+#include "instance/instance_sercom0.h"

+#include "instance/instance_sercom1.h"

+#include "instance/instance_sercom2.h"

+#include "instance/instance_sercom3.h"

+#include "instance/instance_sercom4.h"

+#include "instance/instance_sercom5.h"

+#include "instance/instance_sysctrl.h"

+#include "instance/instance_tc0.h"

+#include "instance/instance_tc1.h"

+#include "instance/instance_tc2.h"

+#include "instance/instance_tc3.h"

+#include "instance/instance_tc4.h"

+#include "instance/instance_tc5.h"

+#include "instance/instance_tc6.h"

+#include "instance/instance_tc7.h"

+#include "instance/instance_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  PERIPHERAL ID DEFINITIONS FOR SAMD20G17 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G17_id Peripheral Ids Definitions */

+/*@{*/

+

+// Peripheral instances on HPB0 bridge

+#define ID_PAC0           0 /**< \brief Peripheral Access Controller PAC (PAC0) */

+#define ID_PM             1 /**< \brief Power Manager (PM) */

+#define ID_SYSCTRL        2 /**< \brief System Control (SYSCTRL) */

+#define ID_GCLK           3 /**< \brief Generic Clock Generator (GCLK) */

+#define ID_WDT            4 /**< \brief Watchdog Timer (WDT) */

+#define ID_RTC            5 /**< \brief Real-Time Counter (RTC) */

+#define ID_EIC            6 /**< \brief External Interrupt Controller (EIC) */

+

+// Peripheral instances on HPB1 bridge

+#define ID_PAC1          32 /**< \brief Peripheral Access Controller PAC (PAC1) */

+#define ID_DSU           33 /**< \brief Device Service Unit (DSU) */

+#define ID_NVMCTRL       34 /**< \brief Non-Volatile Memory Controller (NVMCTRL) */

+#define ID_PORT          35 /**< \brief Port Module (PORT) */

+

+// Peripheral instances on HPB2 bridge

+#define ID_PAC2          64 /**< \brief Peripheral Access Controller PAC (PAC2) */

+#define ID_EVSYS         65 /**< \brief Event System Interface (EVSYS) */

+#define ID_SERCOM0       66 /**< \brief Serial Communication Interface SERCOM (SERCOM0) */

+#define ID_SERCOM1       67 /**< \brief Serial Communication Interface SERCOM (SERCOM1) */

+#define ID_SERCOM2       68 /**< \brief Serial Communication Interface SERCOM (SERCOM2) */

+#define ID_SERCOM3       69 /**< \brief Serial Communication Interface SERCOM (SERCOM3) */

+#define ID_SERCOM4       70 /**< \brief Serial Communication Interface SERCOM (SERCOM4) */

+#define ID_SERCOM5       71 /**< \brief Serial Communication Interface SERCOM (SERCOM5) */

+#define ID_TC0           72 /**< \brief Basic Timer Counter TC (TC0) */

+#define ID_TC1           73 /**< \brief Basic Timer Counter TC (TC1) */

+#define ID_TC2           74 /**< \brief Basic Timer Counter TC (TC2) */

+#define ID_TC3           75 /**< \brief Basic Timer Counter TC (TC3) */

+#define ID_TC4           76 /**< \brief Basic Timer Counter TC (TC4) */

+#define ID_TC5           77 /**< \brief Basic Timer Counter TC (TC5) */

+#define ID_TC6           78 /**< \brief Basic Timer Counter TC (TC6) */

+#define ID_TC7           79 /**< \brief Basic Timer Counter TC (TC7) */

+#define ID_ADC           80 /**< \brief Analog Digital Converter (ADC) */

+#define ID_AC            81 /**< \brief Analog Comparators (AC) */

+#define ID_DAC           82 /**< \brief Digital Analog Converter (DAC) */

+

+#define ID_PERIPH_COUNT  83 /**< \brief Number of peripheral IDs */

+/*@}*/

+

+/* ************************************************************************** */

+/**  BASE ADDRESS DEFINITIONS FOR SAMD20G17 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G17_base Peripheral Base Address Definitions */

+/*@{*/

+

+#if defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)

+#define AC                            (0x42004400U) /**< \brief (AC) APB Base Address */

+#define ADC                           (0x42004000U) /**< \brief (ADC) APB Base Address */

+#define DAC                           (0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DSU                           (0x41002000U) /**< \brief (DSU) APB Base Address */

+#define EIC                           (0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EVSYS                         (0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define GCLK                          (0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define NVMCTRL                       (0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define PAC0                          (0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1                          (0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2                          (0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PM                            (0x40000400U) /**< \brief (PM) APB Base Address */

+#define PORT                          (0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS                    (0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define RTC                           (0x40001400U) /**< \brief (RTC) APB Base Address */

+#define SERCOM0                       (0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1                       (0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2                       (0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3                       (0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM4                       (0x42001800U) /**< \brief (SERCOM4) APB Base Address */

+#define SERCOM5                       (0x42001C00U) /**< \brief (SERCOM5) APB Base Address */

+#define SYSCTRL                       (0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define TC0                           (0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1                           (0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2                           (0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3                           (0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4                           (0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5                           (0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC6                           (0x42003800U) /**< \brief (TC6) APB Base Address */

+#define TC7                           (0x42003C00U) /**< \brief (TC7) APB Base Address */

+#define WDT                           (0x40001000U) /**< \brief (WDT) APB Base Address */

+#else

+#define AC                ((Ac       *)0x42004400U) /**< \brief (AC) APB Base Address */

+#define AC_INST_NUM       1                         /**< \brief (AC) Number of instances */

+#define AC_INSTS          { AC }                    /**< \brief (AC) Instances List */

+

+#define ADC               ((Adc      *)0x42004000U) /**< \brief (ADC) APB Base Address */

+#define ADC_INST_NUM      1                         /**< \brief (ADC) Number of instances */

+#define ADC_INSTS         { ADC }                   /**< \brief (ADC) Instances List */

+

+#define DAC               ((Dac      *)0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DAC_INST_NUM      1                         /**< \brief (DAC) Number of instances */

+#define DAC_INSTS         { DAC }                   /**< \brief (DAC) Instances List */

+

+#define DSU               ((Dsu      *)0x41002000U) /**< \brief (DSU) APB Base Address */

+#define DSU_INST_NUM      1                         /**< \brief (DSU) Number of instances */

+#define DSU_INSTS         { DSU }                   /**< \brief (DSU) Instances List */

+

+#define EIC               ((Eic      *)0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EIC_INST_NUM      1                         /**< \brief (EIC) Number of instances */

+#define EIC_INSTS         { EIC }                   /**< \brief (EIC) Instances List */

+

+#define EVSYS             ((Evsys    *)0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define EVSYS_INST_NUM    1                         /**< \brief (EVSYS) Number of instances */

+#define EVSYS_INSTS       { EVSYS }                 /**< \brief (EVSYS) Instances List */

+

+#define GCLK              ((Gclk     *)0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define GCLK_INST_NUM     1                         /**< \brief (GCLK) Number of instances */

+#define GCLK_INSTS        { GCLK }                  /**< \brief (GCLK) Instances List */

+

+#define NVMCTRL           ((Nvmctrl  *)0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define NVMCTRL_INST_NUM  1                         /**< \brief (NVMCTRL) Number of instances */

+#define NVMCTRL_INSTS     { NVMCTRL }               /**< \brief (NVMCTRL) Instances List */

+

+#define PAC0              ((Pac      *)0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1              ((Pac      *)0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2              ((Pac      *)0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PAC_INST_NUM      3                         /**< \brief (PAC) Number of instances */

+#define PAC_INSTS         { PAC0, PAC1, PAC2 }      /**< \brief (PAC) Instances List */

+

+#define PM                ((Pm       *)0x40000400U) /**< \brief (PM) APB Base Address */

+#define PM_INST_NUM       1                         /**< \brief (PM) Number of instances */

+#define PM_INSTS          { PM }                    /**< \brief (PM) Instances List */

+

+#define PORT              ((Port     *)0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS        ((Port     *)0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define PORT_INST_NUM     1                         /**< \brief (PORT) Number of instances */

+#define PORT_INSTS        { PORT }                  /**< \brief (PORT) Instances List */

+

+#define RTC               ((Rtc      *)0x40001400U) /**< \brief (RTC) APB Base Address */

+#define RTC_INST_NUM      1                         /**< \brief (RTC) Number of instances */

+#define RTC_INSTS         { RTC }                   /**< \brief (RTC) Instances List */

+

+#define SERCOM0           ((Sercom   *)0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1           ((Sercom   *)0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2           ((Sercom   *)0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3           ((Sercom   *)0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM4           ((Sercom   *)0x42001800U) /**< \brief (SERCOM4) APB Base Address */

+#define SERCOM5           ((Sercom   *)0x42001C00U) /**< \brief (SERCOM5) APB Base Address */

+#define SERCOM_INST_NUM   6                         /**< \brief (SERCOM) Number of instances */

+#define SERCOM_INSTS      { SERCOM0, SERCOM1, SERCOM2, SERCOM3, SERCOM4, SERCOM5 } /**< \brief (SERCOM) Instances List */

+

+#define SYSCTRL           ((Sysctrl  *)0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define SYSCTRL_INST_NUM  1                         /**< \brief (SYSCTRL) Number of instances */

+#define SYSCTRL_INSTS     { SYSCTRL }               /**< \brief (SYSCTRL) Instances List */

+

+#define TC0               ((Tc       *)0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1               ((Tc       *)0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2               ((Tc       *)0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3               ((Tc       *)0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4               ((Tc       *)0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5               ((Tc       *)0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC6               ((Tc       *)0x42003800U) /**< \brief (TC6) APB Base Address */

+#define TC7               ((Tc       *)0x42003C00U) /**< \brief (TC7) APB Base Address */

+#define TC_INST_NUM       8                         /**< \brief (TC) Number of instances */

+#define TC_INSTS          { TC0, TC1, TC2, TC3, TC4, TC5, TC6, TC7 } /**< \brief (TC) Instances List */

+

+#define WDT               ((Wdt      *)0x40001000U) /**< \brief (WDT) APB Base Address */

+#define WDT_INST_NUM      1                         /**< \brief (WDT) Number of instances */

+#define WDT_INSTS         { WDT }                   /**< \brief (WDT) Instances List */

+

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+/*@}*/

+

+/* ************************************************************************** */

+/**  PORT DEFINITIONS FOR SAMD20G17 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G17_port PORT Definitions */

+/*@{*/

+

+#include "pio/pio_samd20g17.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  MEMORY MAPPING DEFINITIONS FOR SAMD20G17 */

+/* ************************************************************************** */

+

+#define FLASH_SIZE            0x20000 /* 128 kB */

+#define FLASH_PAGE_SIZE       64

+#define FLASH_NB_OF_PAGES     2048

+#define FLASH_USER_PAGE_SIZE  64

+#define HRAMC0_SIZE           0x4000 /* 16 kB */

+#define FLASH_ADDR            (0x00000000U) /**< FLASH base address */

+#define FLASH_USER_PAGE_ADDR  (0x00800000U) /**< FLASH_USER_PAGE base address */

+#define HRAMC0_ADDR           (0x20000000U) /**< HRAMC0 base address */

+

+/* ************************************************************************** */

+/**  ELECTRICAL DEFINITIONS FOR SAMD20G17 */

+/* ************************************************************************** */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+/*@}*/

+

+#endif /* SAMD20G17_H */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20g18.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20g18.h
new file mode 100644
index 0000000..0d0672a
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20g18.h
@@ -0,0 +1,508 @@
+/**

+ * \file

+ *

+ * \brief Header file for SAMD20G18

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20G18_

+#define _SAMD20G18_

+

+/**

+ * \ingroup SAMD20_definitions

+ * \addtogroup SAMD20G18_definitions SAMD20G18 definitions

+ * This file defines all structures and symbols for SAMD20G18:

+ *   - registers and bitfields

+ *   - peripheral base address

+ *   - peripheral ID

+ *   - PIO definitions

+*/

+/*@{*/

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#include <stdint.h>

+#ifndef __cplusplus

+typedef volatile const uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile const uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile const uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#else

+typedef volatile       uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile       uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile       uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#endif

+typedef volatile       uint32_t WoReg;   /**< Write only 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t WoReg16; /**< Write only 16-bit register (volatile unsigned int) */

+typedef volatile       uint32_t WoReg8;  /**< Write only  8-bit register (volatile unsigned int) */

+typedef volatile       uint32_t RwReg;   /**< Read-Write 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t RwReg16; /**< Read-Write 16-bit register (volatile unsigned int) */

+typedef volatile       uint8_t  RwReg8;  /**< Read-Write  8-bit register (volatile unsigned int) */

+#define CAST(type, value) ((type *)(value))

+#define REG_ACCESS(type, address) (*(type*)(address)) /**< C code: Register value */

+#else

+#define CAST(type, value) (value)

+#define REG_ACCESS(type, address) (address) /**< Assembly code: Register address */

+#endif

+

+/* ************************************************************************** */

+/**  CMSIS DEFINITIONS FOR SAMD20G18 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G18_cmsis CMSIS Definitions */

+/*@{*/

+

+/** Interrupt Number Definition */

+typedef enum IRQn

+{

+  /******  Cortex-M0+ Processor Exceptions Numbers *******************************/

+  NonMaskableInt_IRQn      = -14, /**<  2 Non Maskable Interrupt                 */

+  HardFault_IRQn           = -13, /**<  3 Cortex-M0+ Hard Fault Interrupt        */

+  SVCall_IRQn              = -5,  /**< 11 Cortex-M0+ SV Call Interrupt           */

+  PendSV_IRQn              = -2,  /**< 14 Cortex-M0+ Pend SV Interrupt           */

+  SysTick_IRQn             = -1,  /**< 15 Cortex-M0+ System Tick Interrupt       */

+  /******  SAMD20G18-specific Interrupt Numbers ***********************/

+  PM_IRQn                  =  0, /**<  0 SAMD20G18 Power Manager (PM) */

+  SYSCTRL_IRQn             =  1, /**<  1 SAMD20G18 System Control (SYSCTRL) */

+  WDT_IRQn                 =  2, /**<  2 SAMD20G18 Watchdog Timer (WDT) */

+  RTC_IRQn                 =  3, /**<  3 SAMD20G18 Real-Time Counter (RTC) */

+  EIC_IRQn                 =  4, /**<  4 SAMD20G18 External Interrupt Controller (EIC) */

+  NVMCTRL_IRQn             =  5, /**<  5 SAMD20G18 Non-Volatile Memory Controller (NVMCTRL) */

+  EVSYS_IRQn               =  6, /**<  6 SAMD20G18 Event System Interface (EVSYS) */

+  SERCOM0_IRQn             =  7, /**<  7 SAMD20G18 Serial Communication Interface 0 (SERCOM0) */

+  SERCOM1_IRQn             =  8, /**<  8 SAMD20G18 Serial Communication Interface 1 (SERCOM1) */

+  SERCOM2_IRQn             =  9, /**<  9 SAMD20G18 Serial Communication Interface 2 (SERCOM2) */

+  SERCOM3_IRQn             = 10, /**< 10 SAMD20G18 Serial Communication Interface 3 (SERCOM3) */

+  SERCOM4_IRQn             = 11, /**< 11 SAMD20G18 Serial Communication Interface 4 (SERCOM4) */

+  SERCOM5_IRQn             = 12, /**< 12 SAMD20G18 Serial Communication Interface 5 (SERCOM5) */

+  TC0_IRQn                 = 13, /**< 13 SAMD20G18 Basic Timer Counter 0 (TC0) */

+  TC1_IRQn                 = 14, /**< 14 SAMD20G18 Basic Timer Counter 1 (TC1) */

+  TC2_IRQn                 = 15, /**< 15 SAMD20G18 Basic Timer Counter 2 (TC2) */

+  TC3_IRQn                 = 16, /**< 16 SAMD20G18 Basic Timer Counter 3 (TC3) */

+  TC4_IRQn                 = 17, /**< 17 SAMD20G18 Basic Timer Counter 4 (TC4) */

+  TC5_IRQn                 = 18, /**< 18 SAMD20G18 Basic Timer Counter 5 (TC5) */

+  TC6_IRQn                 = 19, /**< 19 SAMD20G18 Basic Timer Counter 6 (TC6) */

+  TC7_IRQn                 = 20, /**< 20 SAMD20G18 Basic Timer Counter 7 (TC7) */

+  ADC_IRQn                 = 21, /**< 21 SAMD20G18 Analog Digital Converter (ADC) */

+  AC_IRQn                  = 22, /**< 22 SAMD20G18 Analog Comparators (AC) */

+  DAC_IRQn                 = 23, /**< 23 SAMD20G18 Digital Analog Converter (DAC) */

+

+  PERIPH_COUNT_IRQn        = 24  /**< Number of peripheral IDs */

+} IRQn_Type;

+

+typedef struct _DeviceVectors

+{

+  /* Stack pointer */

+  void* pvStack;

+

+  /* Cortex-M handlers */

+  void* pfnReset_Handler;

+  void* pfnNMI_Handler;

+  void* pfnHardFault_Handler;

+  void* pfnReservedM12;

+  void* pfnReservedM11;

+  void* pfnReservedM10;

+  void* pfnReservedM9;

+  void* pfnReservedM8;

+  void* pfnReservedM7;

+  void* pfnReservedM6;

+  void* pfnSVC_Handler;

+  void* pfnReservedM4;

+  void* pfnReservedM3;

+  void* pfnPendSV_Handler;

+  void* pfnSysTick_Handler;

+

+  /* Peripheral handlers */

+  void* pfnPM_Handler;                    /*  0 Power Manager */

+  void* pfnSYSCTRL_Handler;               /*  1 System Control */

+  void* pfnWDT_Handler;                   /*  2 Watchdog Timer */

+  void* pfnRTC_Handler;                   /*  3 Real-Time Counter */

+  void* pfnEIC_Handler;                   /*  4 External Interrupt Controller */

+  void* pfnNVMCTRL_Handler;               /*  5 Non-Volatile Memory Controller */

+  void* pfnEVSYS_Handler;                 /*  6 Event System Interface */

+  void* pfnSERCOM0_Handler;               /*  7 Serial Communication Interface 0 */

+  void* pfnSERCOM1_Handler;               /*  8 Serial Communication Interface 1 */

+  void* pfnSERCOM2_Handler;               /*  9 Serial Communication Interface 2 */

+  void* pfnSERCOM3_Handler;               /* 10 Serial Communication Interface 3 */

+  void* pfnSERCOM4_Handler;               /* 11 Serial Communication Interface 4 */

+  void* pfnSERCOM5_Handler;               /* 12 Serial Communication Interface 5 */

+  void* pfnTC0_Handler;                   /* 13 Basic Timer Counter 0 */

+  void* pfnTC1_Handler;                   /* 14 Basic Timer Counter 1 */

+  void* pfnTC2_Handler;                   /* 15 Basic Timer Counter 2 */

+  void* pfnTC3_Handler;                   /* 16 Basic Timer Counter 3 */

+  void* pfnTC4_Handler;                   /* 17 Basic Timer Counter 4 */

+  void* pfnTC5_Handler;                   /* 18 Basic Timer Counter 5 */

+  void* pfnTC6_Handler;                   /* 19 Basic Timer Counter 6 */

+  void* pfnTC7_Handler;                   /* 20 Basic Timer Counter 7 */

+  void* pfnADC_Handler;                   /* 21 Analog Digital Converter */

+  void* pfnAC_Handler;                    /* 22 Analog Comparators */

+  void* pfnDAC_Handler;                   /* 23 Digital Analog Converter */

+} DeviceVectors;

+

+/* Cortex-M0+ processor handlers */

+void Reset_Handler               ( void );

+void NMI_Handler                 ( void );

+void HardFault_Handler           ( void );

+void SVC_Handler                 ( void );

+void PendSV_Handler              ( void );

+void SysTick_Handler             ( void );

+

+/* Peripherals handlers */

+void PM_Handler                  ( void );

+void SYSCTRL_Handler             ( void );

+void WDT_Handler                 ( void );

+void RTC_Handler                 ( void );

+void EIC_Handler                 ( void );

+void NVMCTRL_Handler             ( void );

+void EVSYS_Handler               ( void );

+void SERCOM0_Handler             ( void );

+void SERCOM1_Handler             ( void );

+void SERCOM2_Handler             ( void );

+void SERCOM3_Handler             ( void );

+void SERCOM4_Handler             ( void );

+void SERCOM5_Handler             ( void );

+void TC0_Handler                 ( void );

+void TC1_Handler                 ( void );

+void TC2_Handler                 ( void );

+void TC3_Handler                 ( void );

+void TC4_Handler                 ( void );

+void TC5_Handler                 ( void );

+void TC6_Handler                 ( void );

+void TC7_Handler                 ( void );

+void ADC_Handler                 ( void );

+void AC_Handler                  ( void );

+void DAC_Handler                 ( void );

+

+/*

+ * \brief Configuration of the Cortex-M0+ Processor and Core Peripherals

+ */

+

+#define LITTLE_ENDIAN          1        

+#define __CM0PLUS_REV          1         /*!< Core revision r0p1 */

+#define __MPU_PRESENT          0         /*!< MPU present or not */

+#define __NVIC_PRIO_BITS       2         /*!< Number of bits used for Priority Levels */

+#define __VTOR_PRESENT         1         /*!< VTOR present or not */

+#define __Vendor_SysTickConfig 0         /*!< Set to 1 if different SysTick Config is used */

+

+/**

+ * \brief CMSIS includes

+ */

+

+#include <core_cm0plus.h>

+#if !defined DONT_USE_CMSIS_INIT

+#include "system_samd20.h"

+#endif /* DONT_USE_CMSIS_INIT */

+

+/*@}*/

+

+/* ************************************************************************** */

+/**  SOFTWARE PERIPHERAL API DEFINITION FOR SAMD20G18 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G18_api Peripheral Software API */

+/*@{*/

+

+#include "component/component_ac.h"

+#include "component/component_adc.h"

+#include "component/component_dac.h"

+#include "component/component_dsu.h"

+#include "component/component_eic.h"

+#include "component/component_evsys.h"

+#include "component/component_gclk.h"

+#include "component/component_nvmctrl.h"

+#include "component/component_pac.h"

+#include "component/component_pm.h"

+#include "component/component_port.h"

+#include "component/component_rtc.h"

+#include "component/component_sercom.h"

+#include "component/component_sysctrl.h"

+#include "component/component_tc.h"

+#include "component/component_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  REGISTERS ACCESS DEFINITIONS FOR SAMD20G18 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G18_reg Registers Access Definitions */

+/*@{*/

+

+#include "instance/instance_ac.h"

+#include "instance/instance_adc.h"

+#include "instance/instance_dac.h"

+#include "instance/instance_dsu.h"

+#include "instance/instance_eic.h"

+#include "instance/instance_evsys.h"

+#include "instance/instance_gclk.h"

+#include "instance/instance_nvmctrl.h"

+#include "instance/instance_pac0.h"

+#include "instance/instance_pac1.h"

+#include "instance/instance_pac2.h"

+#include "instance/instance_pm.h"

+#include "instance/instance_port.h"

+#include "instance/instance_rtc.h"

+#include "instance/instance_sercom0.h"

+#include "instance/instance_sercom1.h"

+#include "instance/instance_sercom2.h"

+#include "instance/instance_sercom3.h"

+#include "instance/instance_sercom4.h"

+#include "instance/instance_sercom5.h"

+#include "instance/instance_sysctrl.h"

+#include "instance/instance_tc0.h"

+#include "instance/instance_tc1.h"

+#include "instance/instance_tc2.h"

+#include "instance/instance_tc3.h"

+#include "instance/instance_tc4.h"

+#include "instance/instance_tc5.h"

+#include "instance/instance_tc6.h"

+#include "instance/instance_tc7.h"

+#include "instance/instance_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  PERIPHERAL ID DEFINITIONS FOR SAMD20G18 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G18_id Peripheral Ids Definitions */

+/*@{*/

+

+// Peripheral instances on HPB0 bridge

+#define ID_PAC0           0 /**< \brief Peripheral Access Controller PAC (PAC0) */

+#define ID_PM             1 /**< \brief Power Manager (PM) */

+#define ID_SYSCTRL        2 /**< \brief System Control (SYSCTRL) */

+#define ID_GCLK           3 /**< \brief Generic Clock Generator (GCLK) */

+#define ID_WDT            4 /**< \brief Watchdog Timer (WDT) */

+#define ID_RTC            5 /**< \brief Real-Time Counter (RTC) */

+#define ID_EIC            6 /**< \brief External Interrupt Controller (EIC) */

+

+// Peripheral instances on HPB1 bridge

+#define ID_PAC1          32 /**< \brief Peripheral Access Controller PAC (PAC1) */

+#define ID_DSU           33 /**< \brief Device Service Unit (DSU) */

+#define ID_NVMCTRL       34 /**< \brief Non-Volatile Memory Controller (NVMCTRL) */

+#define ID_PORT          35 /**< \brief Port Module (PORT) */

+

+// Peripheral instances on HPB2 bridge

+#define ID_PAC2          64 /**< \brief Peripheral Access Controller PAC (PAC2) */

+#define ID_EVSYS         65 /**< \brief Event System Interface (EVSYS) */

+#define ID_SERCOM0       66 /**< \brief Serial Communication Interface SERCOM (SERCOM0) */

+#define ID_SERCOM1       67 /**< \brief Serial Communication Interface SERCOM (SERCOM1) */

+#define ID_SERCOM2       68 /**< \brief Serial Communication Interface SERCOM (SERCOM2) */

+#define ID_SERCOM3       69 /**< \brief Serial Communication Interface SERCOM (SERCOM3) */

+#define ID_SERCOM4       70 /**< \brief Serial Communication Interface SERCOM (SERCOM4) */

+#define ID_SERCOM5       71 /**< \brief Serial Communication Interface SERCOM (SERCOM5) */

+#define ID_TC0           72 /**< \brief Basic Timer Counter TC (TC0) */

+#define ID_TC1           73 /**< \brief Basic Timer Counter TC (TC1) */

+#define ID_TC2           74 /**< \brief Basic Timer Counter TC (TC2) */

+#define ID_TC3           75 /**< \brief Basic Timer Counter TC (TC3) */

+#define ID_TC4           76 /**< \brief Basic Timer Counter TC (TC4) */

+#define ID_TC5           77 /**< \brief Basic Timer Counter TC (TC5) */

+#define ID_TC6           78 /**< \brief Basic Timer Counter TC (TC6) */

+#define ID_TC7           79 /**< \brief Basic Timer Counter TC (TC7) */

+#define ID_ADC           80 /**< \brief Analog Digital Converter (ADC) */

+#define ID_AC            81 /**< \brief Analog Comparators (AC) */

+#define ID_DAC           82 /**< \brief Digital Analog Converter (DAC) */

+

+#define ID_PERIPH_COUNT  83 /**< \brief Number of peripheral IDs */

+/*@}*/

+

+/* ************************************************************************** */

+/**  BASE ADDRESS DEFINITIONS FOR SAMD20G18 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G18_base Peripheral Base Address Definitions */

+/*@{*/

+

+#if defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)

+#define AC                            (0x42004400U) /**< \brief (AC) APB Base Address */

+#define ADC                           (0x42004000U) /**< \brief (ADC) APB Base Address */

+#define DAC                           (0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DSU                           (0x41002000U) /**< \brief (DSU) APB Base Address */

+#define EIC                           (0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EVSYS                         (0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define GCLK                          (0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define NVMCTRL                       (0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define PAC0                          (0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1                          (0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2                          (0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PM                            (0x40000400U) /**< \brief (PM) APB Base Address */

+#define PORT                          (0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS                    (0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define RTC                           (0x40001400U) /**< \brief (RTC) APB Base Address */

+#define SERCOM0                       (0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1                       (0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2                       (0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3                       (0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM4                       (0x42001800U) /**< \brief (SERCOM4) APB Base Address */

+#define SERCOM5                       (0x42001C00U) /**< \brief (SERCOM5) APB Base Address */

+#define SYSCTRL                       (0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define TC0                           (0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1                           (0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2                           (0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3                           (0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4                           (0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5                           (0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC6                           (0x42003800U) /**< \brief (TC6) APB Base Address */

+#define TC7                           (0x42003C00U) /**< \brief (TC7) APB Base Address */

+#define WDT                           (0x40001000U) /**< \brief (WDT) APB Base Address */

+#else

+#define AC                ((Ac       *)0x42004400U) /**< \brief (AC) APB Base Address */

+#define AC_INST_NUM       1                         /**< \brief (AC) Number of instances */

+#define AC_INSTS          { AC }                    /**< \brief (AC) Instances List */

+

+#define ADC               ((Adc      *)0x42004000U) /**< \brief (ADC) APB Base Address */

+#define ADC_INST_NUM      1                         /**< \brief (ADC) Number of instances */

+#define ADC_INSTS         { ADC }                   /**< \brief (ADC) Instances List */

+

+#define DAC               ((Dac      *)0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DAC_INST_NUM      1                         /**< \brief (DAC) Number of instances */

+#define DAC_INSTS         { DAC }                   /**< \brief (DAC) Instances List */

+

+#define DSU               ((Dsu      *)0x41002000U) /**< \brief (DSU) APB Base Address */

+#define DSU_INST_NUM      1                         /**< \brief (DSU) Number of instances */

+#define DSU_INSTS         { DSU }                   /**< \brief (DSU) Instances List */

+

+#define EIC               ((Eic      *)0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EIC_INST_NUM      1                         /**< \brief (EIC) Number of instances */

+#define EIC_INSTS         { EIC }                   /**< \brief (EIC) Instances List */

+

+#define EVSYS             ((Evsys    *)0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define EVSYS_INST_NUM    1                         /**< \brief (EVSYS) Number of instances */

+#define EVSYS_INSTS       { EVSYS }                 /**< \brief (EVSYS) Instances List */

+

+#define GCLK              ((Gclk     *)0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define GCLK_INST_NUM     1                         /**< \brief (GCLK) Number of instances */

+#define GCLK_INSTS        { GCLK }                  /**< \brief (GCLK) Instances List */

+

+#define NVMCTRL           ((Nvmctrl  *)0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define NVMCTRL_INST_NUM  1                         /**< \brief (NVMCTRL) Number of instances */

+#define NVMCTRL_INSTS     { NVMCTRL }               /**< \brief (NVMCTRL) Instances List */

+

+#define PAC0              ((Pac      *)0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1              ((Pac      *)0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2              ((Pac      *)0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PAC_INST_NUM      3                         /**< \brief (PAC) Number of instances */

+#define PAC_INSTS         { PAC0, PAC1, PAC2 }      /**< \brief (PAC) Instances List */

+

+#define PM                ((Pm       *)0x40000400U) /**< \brief (PM) APB Base Address */

+#define PM_INST_NUM       1                         /**< \brief (PM) Number of instances */

+#define PM_INSTS          { PM }                    /**< \brief (PM) Instances List */

+

+#define PORT              ((Port     *)0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS        ((Port     *)0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define PORT_INST_NUM     1                         /**< \brief (PORT) Number of instances */

+#define PORT_INSTS        { PORT }                  /**< \brief (PORT) Instances List */

+

+#define RTC               ((Rtc      *)0x40001400U) /**< \brief (RTC) APB Base Address */

+#define RTC_INST_NUM      1                         /**< \brief (RTC) Number of instances */

+#define RTC_INSTS         { RTC }                   /**< \brief (RTC) Instances List */

+

+#define SERCOM0           ((Sercom   *)0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1           ((Sercom   *)0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2           ((Sercom   *)0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3           ((Sercom   *)0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM4           ((Sercom   *)0x42001800U) /**< \brief (SERCOM4) APB Base Address */

+#define SERCOM5           ((Sercom   *)0x42001C00U) /**< \brief (SERCOM5) APB Base Address */

+#define SERCOM_INST_NUM   6                         /**< \brief (SERCOM) Number of instances */

+#define SERCOM_INSTS      { SERCOM0, SERCOM1, SERCOM2, SERCOM3, SERCOM4, SERCOM5 } /**< \brief (SERCOM) Instances List */

+

+#define SYSCTRL           ((Sysctrl  *)0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define SYSCTRL_INST_NUM  1                         /**< \brief (SYSCTRL) Number of instances */

+#define SYSCTRL_INSTS     { SYSCTRL }               /**< \brief (SYSCTRL) Instances List */

+

+#define TC0               ((Tc       *)0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1               ((Tc       *)0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2               ((Tc       *)0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3               ((Tc       *)0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4               ((Tc       *)0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5               ((Tc       *)0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC6               ((Tc       *)0x42003800U) /**< \brief (TC6) APB Base Address */

+#define TC7               ((Tc       *)0x42003C00U) /**< \brief (TC7) APB Base Address */

+#define TC_INST_NUM       8                         /**< \brief (TC) Number of instances */

+#define TC_INSTS          { TC0, TC1, TC2, TC3, TC4, TC5, TC6, TC7 } /**< \brief (TC) Instances List */

+

+#define WDT               ((Wdt      *)0x40001000U) /**< \brief (WDT) APB Base Address */

+#define WDT_INST_NUM      1                         /**< \brief (WDT) Number of instances */

+#define WDT_INSTS         { WDT }                   /**< \brief (WDT) Instances List */

+

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+/*@}*/

+

+/* ************************************************************************** */

+/**  PORT DEFINITIONS FOR SAMD20G18 */

+/* ************************************************************************** */

+/** \defgroup SAMD20G18_port PORT Definitions */

+/*@{*/

+

+#include "pio/pio_samd20g18.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  MEMORY MAPPING DEFINITIONS FOR SAMD20G18 */

+/* ************************************************************************** */

+

+#define FLASH_SIZE            0x40000 /* 256 kB */

+#define FLASH_PAGE_SIZE       64

+#define FLASH_NB_OF_PAGES     4096

+#define FLASH_USER_PAGE_SIZE  64

+#define HRAMC0_SIZE           0x8000 /* 32 kB */

+#define FLASH_ADDR            (0x00000000U) /**< FLASH base address */

+#define FLASH_USER_PAGE_ADDR  (0x00800000U) /**< FLASH_USER_PAGE base address */

+#define HRAMC0_ADDR           (0x20000000U) /**< HRAMC0 base address */

+

+/* ************************************************************************** */

+/**  ELECTRICAL DEFINITIONS FOR SAMD20G18 */

+/* ************************************************************************** */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+/*@}*/

+

+#endif /* SAMD20G18_H */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20j14.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20j14.h
new file mode 100644
index 0000000..bdd81b2
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20j14.h
@@ -0,0 +1,508 @@
+/**

+ * \file

+ *

+ * \brief Header file for SAMD20J14

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20J14_

+#define _SAMD20J14_

+

+/**

+ * \ingroup SAMD20_definitions

+ * \addtogroup SAMD20J14_definitions SAMD20J14 definitions

+ * This file defines all structures and symbols for SAMD20J14:

+ *   - registers and bitfields

+ *   - peripheral base address

+ *   - peripheral ID

+ *   - PIO definitions

+*/

+/*@{*/

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#include <stdint.h>

+#ifndef __cplusplus

+typedef volatile const uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile const uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile const uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#else

+typedef volatile       uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile       uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile       uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#endif

+typedef volatile       uint32_t WoReg;   /**< Write only 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t WoReg16; /**< Write only 16-bit register (volatile unsigned int) */

+typedef volatile       uint32_t WoReg8;  /**< Write only  8-bit register (volatile unsigned int) */

+typedef volatile       uint32_t RwReg;   /**< Read-Write 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t RwReg16; /**< Read-Write 16-bit register (volatile unsigned int) */

+typedef volatile       uint8_t  RwReg8;  /**< Read-Write  8-bit register (volatile unsigned int) */

+#define CAST(type, value) ((type *)(value))

+#define REG_ACCESS(type, address) (*(type*)(address)) /**< C code: Register value */

+#else

+#define CAST(type, value) (value)

+#define REG_ACCESS(type, address) (address) /**< Assembly code: Register address */

+#endif

+

+/* ************************************************************************** */

+/**  CMSIS DEFINITIONS FOR SAMD20J14 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J14_cmsis CMSIS Definitions */

+/*@{*/

+

+/** Interrupt Number Definition */

+typedef enum IRQn

+{

+  /******  Cortex-M0+ Processor Exceptions Numbers *******************************/

+  NonMaskableInt_IRQn      = -14, /**<  2 Non Maskable Interrupt                 */

+  HardFault_IRQn           = -13, /**<  3 Cortex-M0+ Hard Fault Interrupt        */

+  SVCall_IRQn              = -5,  /**< 11 Cortex-M0+ SV Call Interrupt           */

+  PendSV_IRQn              = -2,  /**< 14 Cortex-M0+ Pend SV Interrupt           */

+  SysTick_IRQn             = -1,  /**< 15 Cortex-M0+ System Tick Interrupt       */

+  /******  SAMD20J14-specific Interrupt Numbers ***********************/

+  PM_IRQn                  =  0, /**<  0 SAMD20J14 Power Manager (PM) */

+  SYSCTRL_IRQn             =  1, /**<  1 SAMD20J14 System Control (SYSCTRL) */

+  WDT_IRQn                 =  2, /**<  2 SAMD20J14 Watchdog Timer (WDT) */

+  RTC_IRQn                 =  3, /**<  3 SAMD20J14 Real-Time Counter (RTC) */

+  EIC_IRQn                 =  4, /**<  4 SAMD20J14 External Interrupt Controller (EIC) */

+  NVMCTRL_IRQn             =  5, /**<  5 SAMD20J14 Non-Volatile Memory Controller (NVMCTRL) */

+  EVSYS_IRQn               =  6, /**<  6 SAMD20J14 Event System Interface (EVSYS) */

+  SERCOM0_IRQn             =  7, /**<  7 SAMD20J14 Serial Communication Interface 0 (SERCOM0) */

+  SERCOM1_IRQn             =  8, /**<  8 SAMD20J14 Serial Communication Interface 1 (SERCOM1) */

+  SERCOM2_IRQn             =  9, /**<  9 SAMD20J14 Serial Communication Interface 2 (SERCOM2) */

+  SERCOM3_IRQn             = 10, /**< 10 SAMD20J14 Serial Communication Interface 3 (SERCOM3) */

+  SERCOM4_IRQn             = 11, /**< 11 SAMD20J14 Serial Communication Interface 4 (SERCOM4) */

+  SERCOM5_IRQn             = 12, /**< 12 SAMD20J14 Serial Communication Interface 5 (SERCOM5) */

+  TC0_IRQn                 = 13, /**< 13 SAMD20J14 Basic Timer Counter 0 (TC0) */

+  TC1_IRQn                 = 14, /**< 14 SAMD20J14 Basic Timer Counter 1 (TC1) */

+  TC2_IRQn                 = 15, /**< 15 SAMD20J14 Basic Timer Counter 2 (TC2) */

+  TC3_IRQn                 = 16, /**< 16 SAMD20J14 Basic Timer Counter 3 (TC3) */

+  TC4_IRQn                 = 17, /**< 17 SAMD20J14 Basic Timer Counter 4 (TC4) */

+  TC5_IRQn                 = 18, /**< 18 SAMD20J14 Basic Timer Counter 5 (TC5) */

+  TC6_IRQn                 = 19, /**< 19 SAMD20J14 Basic Timer Counter 6 (TC6) */

+  TC7_IRQn                 = 20, /**< 20 SAMD20J14 Basic Timer Counter 7 (TC7) */

+  ADC_IRQn                 = 21, /**< 21 SAMD20J14 Analog Digital Converter (ADC) */

+  AC_IRQn                  = 22, /**< 22 SAMD20J14 Analog Comparators (AC) */

+  DAC_IRQn                 = 23, /**< 23 SAMD20J14 Digital Analog Converter (DAC) */

+

+  PERIPH_COUNT_IRQn        = 24  /**< Number of peripheral IDs */

+} IRQn_Type;

+

+typedef struct _DeviceVectors

+{

+  /* Stack pointer */

+  void* pvStack;

+

+  /* Cortex-M handlers */

+  void* pfnReset_Handler;

+  void* pfnNMI_Handler;

+  void* pfnHardFault_Handler;

+  void* pfnReservedM12;

+  void* pfnReservedM11;

+  void* pfnReservedM10;

+  void* pfnReservedM9;

+  void* pfnReservedM8;

+  void* pfnReservedM7;

+  void* pfnReservedM6;

+  void* pfnSVC_Handler;

+  void* pfnReservedM4;

+  void* pfnReservedM3;

+  void* pfnPendSV_Handler;

+  void* pfnSysTick_Handler;

+

+  /* Peripheral handlers */

+  void* pfnPM_Handler;                    /*  0 Power Manager */

+  void* pfnSYSCTRL_Handler;               /*  1 System Control */

+  void* pfnWDT_Handler;                   /*  2 Watchdog Timer */

+  void* pfnRTC_Handler;                   /*  3 Real-Time Counter */

+  void* pfnEIC_Handler;                   /*  4 External Interrupt Controller */

+  void* pfnNVMCTRL_Handler;               /*  5 Non-Volatile Memory Controller */

+  void* pfnEVSYS_Handler;                 /*  6 Event System Interface */

+  void* pfnSERCOM0_Handler;               /*  7 Serial Communication Interface 0 */

+  void* pfnSERCOM1_Handler;               /*  8 Serial Communication Interface 1 */

+  void* pfnSERCOM2_Handler;               /*  9 Serial Communication Interface 2 */

+  void* pfnSERCOM3_Handler;               /* 10 Serial Communication Interface 3 */

+  void* pfnSERCOM4_Handler;               /* 11 Serial Communication Interface 4 */

+  void* pfnSERCOM5_Handler;               /* 12 Serial Communication Interface 5 */

+  void* pfnTC0_Handler;                   /* 13 Basic Timer Counter 0 */

+  void* pfnTC1_Handler;                   /* 14 Basic Timer Counter 1 */

+  void* pfnTC2_Handler;                   /* 15 Basic Timer Counter 2 */

+  void* pfnTC3_Handler;                   /* 16 Basic Timer Counter 3 */

+  void* pfnTC4_Handler;                   /* 17 Basic Timer Counter 4 */

+  void* pfnTC5_Handler;                   /* 18 Basic Timer Counter 5 */

+  void* pfnTC6_Handler;                   /* 19 Basic Timer Counter 6 */

+  void* pfnTC7_Handler;                   /* 20 Basic Timer Counter 7 */

+  void* pfnADC_Handler;                   /* 21 Analog Digital Converter */

+  void* pfnAC_Handler;                    /* 22 Analog Comparators */

+  void* pfnDAC_Handler;                   /* 23 Digital Analog Converter */

+} DeviceVectors;

+

+/* Cortex-M0+ processor handlers */

+void Reset_Handler               ( void );

+void NMI_Handler                 ( void );

+void HardFault_Handler           ( void );

+void SVC_Handler                 ( void );

+void PendSV_Handler              ( void );

+void SysTick_Handler             ( void );

+

+/* Peripherals handlers */

+void PM_Handler                  ( void );

+void SYSCTRL_Handler             ( void );

+void WDT_Handler                 ( void );

+void RTC_Handler                 ( void );

+void EIC_Handler                 ( void );

+void NVMCTRL_Handler             ( void );

+void EVSYS_Handler               ( void );

+void SERCOM0_Handler             ( void );

+void SERCOM1_Handler             ( void );

+void SERCOM2_Handler             ( void );

+void SERCOM3_Handler             ( void );

+void SERCOM4_Handler             ( void );

+void SERCOM5_Handler             ( void );

+void TC0_Handler                 ( void );

+void TC1_Handler                 ( void );

+void TC2_Handler                 ( void );

+void TC3_Handler                 ( void );

+void TC4_Handler                 ( void );

+void TC5_Handler                 ( void );

+void TC6_Handler                 ( void );

+void TC7_Handler                 ( void );

+void ADC_Handler                 ( void );

+void AC_Handler                  ( void );

+void DAC_Handler                 ( void );

+

+/*

+ * \brief Configuration of the Cortex-M0+ Processor and Core Peripherals

+ */

+

+#define LITTLE_ENDIAN          1        

+#define __CM0PLUS_REV          1         /*!< Core revision r0p1 */

+#define __MPU_PRESENT          0         /*!< MPU present or not */

+#define __NVIC_PRIO_BITS       2         /*!< Number of bits used for Priority Levels */

+#define __VTOR_PRESENT         1         /*!< VTOR present or not */

+#define __Vendor_SysTickConfig 0         /*!< Set to 1 if different SysTick Config is used */

+

+/**

+ * \brief CMSIS includes

+ */

+

+#include <core_cm0plus.h>

+#if !defined DONT_USE_CMSIS_INIT

+#include "system_samd20.h"

+#endif /* DONT_USE_CMSIS_INIT */

+

+/*@}*/

+

+/* ************************************************************************** */

+/**  SOFTWARE PERIPHERAL API DEFINITION FOR SAMD20J14 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J14_api Peripheral Software API */

+/*@{*/

+

+#include "component/component_ac.h"

+#include "component/component_adc.h"

+#include "component/component_dac.h"

+#include "component/component_dsu.h"

+#include "component/component_eic.h"

+#include "component/component_evsys.h"

+#include "component/component_gclk.h"

+#include "component/component_nvmctrl.h"

+#include "component/component_pac.h"

+#include "component/component_pm.h"

+#include "component/component_port.h"

+#include "component/component_rtc.h"

+#include "component/component_sercom.h"

+#include "component/component_sysctrl.h"

+#include "component/component_tc.h"

+#include "component/component_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  REGISTERS ACCESS DEFINITIONS FOR SAMD20J14 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J14_reg Registers Access Definitions */

+/*@{*/

+

+#include "instance/instance_ac.h"

+#include "instance/instance_adc.h"

+#include "instance/instance_dac.h"

+#include "instance/instance_dsu.h"

+#include "instance/instance_eic.h"

+#include "instance/instance_evsys.h"

+#include "instance/instance_gclk.h"

+#include "instance/instance_nvmctrl.h"

+#include "instance/instance_pac0.h"

+#include "instance/instance_pac1.h"

+#include "instance/instance_pac2.h"

+#include "instance/instance_pm.h"

+#include "instance/instance_port.h"

+#include "instance/instance_rtc.h"

+#include "instance/instance_sercom0.h"

+#include "instance/instance_sercom1.h"

+#include "instance/instance_sercom2.h"

+#include "instance/instance_sercom3.h"

+#include "instance/instance_sercom4.h"

+#include "instance/instance_sercom5.h"

+#include "instance/instance_sysctrl.h"

+#include "instance/instance_tc0.h"

+#include "instance/instance_tc1.h"

+#include "instance/instance_tc2.h"

+#include "instance/instance_tc3.h"

+#include "instance/instance_tc4.h"

+#include "instance/instance_tc5.h"

+#include "instance/instance_tc6.h"

+#include "instance/instance_tc7.h"

+#include "instance/instance_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  PERIPHERAL ID DEFINITIONS FOR SAMD20J14 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J14_id Peripheral Ids Definitions */

+/*@{*/

+

+// Peripheral instances on HPB0 bridge

+#define ID_PAC0           0 /**< \brief Peripheral Access Controller PAC (PAC0) */

+#define ID_PM             1 /**< \brief Power Manager (PM) */

+#define ID_SYSCTRL        2 /**< \brief System Control (SYSCTRL) */

+#define ID_GCLK           3 /**< \brief Generic Clock Generator (GCLK) */

+#define ID_WDT            4 /**< \brief Watchdog Timer (WDT) */

+#define ID_RTC            5 /**< \brief Real-Time Counter (RTC) */

+#define ID_EIC            6 /**< \brief External Interrupt Controller (EIC) */

+

+// Peripheral instances on HPB1 bridge

+#define ID_PAC1          32 /**< \brief Peripheral Access Controller PAC (PAC1) */

+#define ID_DSU           33 /**< \brief Device Service Unit (DSU) */

+#define ID_NVMCTRL       34 /**< \brief Non-Volatile Memory Controller (NVMCTRL) */

+#define ID_PORT          35 /**< \brief Port Module (PORT) */

+

+// Peripheral instances on HPB2 bridge

+#define ID_PAC2          64 /**< \brief Peripheral Access Controller PAC (PAC2) */

+#define ID_EVSYS         65 /**< \brief Event System Interface (EVSYS) */

+#define ID_SERCOM0       66 /**< \brief Serial Communication Interface SERCOM (SERCOM0) */

+#define ID_SERCOM1       67 /**< \brief Serial Communication Interface SERCOM (SERCOM1) */

+#define ID_SERCOM2       68 /**< \brief Serial Communication Interface SERCOM (SERCOM2) */

+#define ID_SERCOM3       69 /**< \brief Serial Communication Interface SERCOM (SERCOM3) */

+#define ID_SERCOM4       70 /**< \brief Serial Communication Interface SERCOM (SERCOM4) */

+#define ID_SERCOM5       71 /**< \brief Serial Communication Interface SERCOM (SERCOM5) */

+#define ID_TC0           72 /**< \brief Basic Timer Counter TC (TC0) */

+#define ID_TC1           73 /**< \brief Basic Timer Counter TC (TC1) */

+#define ID_TC2           74 /**< \brief Basic Timer Counter TC (TC2) */

+#define ID_TC3           75 /**< \brief Basic Timer Counter TC (TC3) */

+#define ID_TC4           76 /**< \brief Basic Timer Counter TC (TC4) */

+#define ID_TC5           77 /**< \brief Basic Timer Counter TC (TC5) */

+#define ID_TC6           78 /**< \brief Basic Timer Counter TC (TC6) */

+#define ID_TC7           79 /**< \brief Basic Timer Counter TC (TC7) */

+#define ID_ADC           80 /**< \brief Analog Digital Converter (ADC) */

+#define ID_AC            81 /**< \brief Analog Comparators (AC) */

+#define ID_DAC           82 /**< \brief Digital Analog Converter (DAC) */

+

+#define ID_PERIPH_COUNT  83 /**< \brief Number of peripheral IDs */

+/*@}*/

+

+/* ************************************************************************** */

+/**  BASE ADDRESS DEFINITIONS FOR SAMD20J14 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J14_base Peripheral Base Address Definitions */

+/*@{*/

+

+#if defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)

+#define AC                            (0x42004400U) /**< \brief (AC) APB Base Address */

+#define ADC                           (0x42004000U) /**< \brief (ADC) APB Base Address */

+#define DAC                           (0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DSU                           (0x41002000U) /**< \brief (DSU) APB Base Address */

+#define EIC                           (0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EVSYS                         (0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define GCLK                          (0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define NVMCTRL                       (0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define PAC0                          (0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1                          (0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2                          (0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PM                            (0x40000400U) /**< \brief (PM) APB Base Address */

+#define PORT                          (0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS                    (0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define RTC                           (0x40001400U) /**< \brief (RTC) APB Base Address */

+#define SERCOM0                       (0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1                       (0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2                       (0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3                       (0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM4                       (0x42001800U) /**< \brief (SERCOM4) APB Base Address */

+#define SERCOM5                       (0x42001C00U) /**< \brief (SERCOM5) APB Base Address */

+#define SYSCTRL                       (0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define TC0                           (0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1                           (0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2                           (0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3                           (0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4                           (0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5                           (0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC6                           (0x42003800U) /**< \brief (TC6) APB Base Address */

+#define TC7                           (0x42003C00U) /**< \brief (TC7) APB Base Address */

+#define WDT                           (0x40001000U) /**< \brief (WDT) APB Base Address */

+#else

+#define AC                ((Ac       *)0x42004400U) /**< \brief (AC) APB Base Address */

+#define AC_INST_NUM       1                         /**< \brief (AC) Number of instances */

+#define AC_INSTS          { AC }                    /**< \brief (AC) Instances List */

+

+#define ADC               ((Adc      *)0x42004000U) /**< \brief (ADC) APB Base Address */

+#define ADC_INST_NUM      1                         /**< \brief (ADC) Number of instances */

+#define ADC_INSTS         { ADC }                   /**< \brief (ADC) Instances List */

+

+#define DAC               ((Dac      *)0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DAC_INST_NUM      1                         /**< \brief (DAC) Number of instances */

+#define DAC_INSTS         { DAC }                   /**< \brief (DAC) Instances List */

+

+#define DSU               ((Dsu      *)0x41002000U) /**< \brief (DSU) APB Base Address */

+#define DSU_INST_NUM      1                         /**< \brief (DSU) Number of instances */

+#define DSU_INSTS         { DSU }                   /**< \brief (DSU) Instances List */

+

+#define EIC               ((Eic      *)0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EIC_INST_NUM      1                         /**< \brief (EIC) Number of instances */

+#define EIC_INSTS         { EIC }                   /**< \brief (EIC) Instances List */

+

+#define EVSYS             ((Evsys    *)0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define EVSYS_INST_NUM    1                         /**< \brief (EVSYS) Number of instances */

+#define EVSYS_INSTS       { EVSYS }                 /**< \brief (EVSYS) Instances List */

+

+#define GCLK              ((Gclk     *)0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define GCLK_INST_NUM     1                         /**< \brief (GCLK) Number of instances */

+#define GCLK_INSTS        { GCLK }                  /**< \brief (GCLK) Instances List */

+

+#define NVMCTRL           ((Nvmctrl  *)0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define NVMCTRL_INST_NUM  1                         /**< \brief (NVMCTRL) Number of instances */

+#define NVMCTRL_INSTS     { NVMCTRL }               /**< \brief (NVMCTRL) Instances List */

+

+#define PAC0              ((Pac      *)0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1              ((Pac      *)0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2              ((Pac      *)0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PAC_INST_NUM      3                         /**< \brief (PAC) Number of instances */

+#define PAC_INSTS         { PAC0, PAC1, PAC2 }      /**< \brief (PAC) Instances List */

+

+#define PM                ((Pm       *)0x40000400U) /**< \brief (PM) APB Base Address */

+#define PM_INST_NUM       1                         /**< \brief (PM) Number of instances */

+#define PM_INSTS          { PM }                    /**< \brief (PM) Instances List */

+

+#define PORT              ((Port     *)0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS        ((Port     *)0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define PORT_INST_NUM     1                         /**< \brief (PORT) Number of instances */

+#define PORT_INSTS        { PORT }                  /**< \brief (PORT) Instances List */

+

+#define RTC               ((Rtc      *)0x40001400U) /**< \brief (RTC) APB Base Address */

+#define RTC_INST_NUM      1                         /**< \brief (RTC) Number of instances */

+#define RTC_INSTS         { RTC }                   /**< \brief (RTC) Instances List */

+

+#define SERCOM0           ((Sercom   *)0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1           ((Sercom   *)0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2           ((Sercom   *)0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3           ((Sercom   *)0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM4           ((Sercom   *)0x42001800U) /**< \brief (SERCOM4) APB Base Address */

+#define SERCOM5           ((Sercom   *)0x42001C00U) /**< \brief (SERCOM5) APB Base Address */

+#define SERCOM_INST_NUM   6                         /**< \brief (SERCOM) Number of instances */

+#define SERCOM_INSTS      { SERCOM0, SERCOM1, SERCOM2, SERCOM3, SERCOM4, SERCOM5 } /**< \brief (SERCOM) Instances List */

+

+#define SYSCTRL           ((Sysctrl  *)0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define SYSCTRL_INST_NUM  1                         /**< \brief (SYSCTRL) Number of instances */

+#define SYSCTRL_INSTS     { SYSCTRL }               /**< \brief (SYSCTRL) Instances List */

+

+#define TC0               ((Tc       *)0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1               ((Tc       *)0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2               ((Tc       *)0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3               ((Tc       *)0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4               ((Tc       *)0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5               ((Tc       *)0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC6               ((Tc       *)0x42003800U) /**< \brief (TC6) APB Base Address */

+#define TC7               ((Tc       *)0x42003C00U) /**< \brief (TC7) APB Base Address */

+#define TC_INST_NUM       8                         /**< \brief (TC) Number of instances */

+#define TC_INSTS          { TC0, TC1, TC2, TC3, TC4, TC5, TC6, TC7 } /**< \brief (TC) Instances List */

+

+#define WDT               ((Wdt      *)0x40001000U) /**< \brief (WDT) APB Base Address */

+#define WDT_INST_NUM      1                         /**< \brief (WDT) Number of instances */

+#define WDT_INSTS         { WDT }                   /**< \brief (WDT) Instances List */

+

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+/*@}*/

+

+/* ************************************************************************** */

+/**  PORT DEFINITIONS FOR SAMD20J14 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J14_port PORT Definitions */

+/*@{*/

+

+#include "pio/pio_samd20j14.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  MEMORY MAPPING DEFINITIONS FOR SAMD20J14 */

+/* ************************************************************************** */

+

+#define FLASH_SIZE            0x4000 /* 16 kB */

+#define FLASH_PAGE_SIZE       64

+#define FLASH_NB_OF_PAGES     256

+#define FLASH_USER_PAGE_SIZE  64

+#define HRAMC0_SIZE           0x800 /* 2 kB */

+#define FLASH_ADDR            (0x00000000U) /**< FLASH base address */

+#define FLASH_USER_PAGE_ADDR  (0x00800000U) /**< FLASH_USER_PAGE base address */

+#define HRAMC0_ADDR           (0x20000000U) /**< HRAMC0 base address */

+

+/* ************************************************************************** */

+/**  ELECTRICAL DEFINITIONS FOR SAMD20J14 */

+/* ************************************************************************** */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+/*@}*/

+

+#endif /* SAMD20J14_H */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20j15.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20j15.h
new file mode 100644
index 0000000..5c2e94f
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20j15.h
@@ -0,0 +1,508 @@
+/**

+ * \file

+ *

+ * \brief Header file for SAMD20J15

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20J15_

+#define _SAMD20J15_

+

+/**

+ * \ingroup SAMD20_definitions

+ * \addtogroup SAMD20J15_definitions SAMD20J15 definitions

+ * This file defines all structures and symbols for SAMD20J15:

+ *   - registers and bitfields

+ *   - peripheral base address

+ *   - peripheral ID

+ *   - PIO definitions

+*/

+/*@{*/

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#include <stdint.h>

+#ifndef __cplusplus

+typedef volatile const uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile const uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile const uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#else

+typedef volatile       uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile       uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile       uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#endif

+typedef volatile       uint32_t WoReg;   /**< Write only 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t WoReg16; /**< Write only 16-bit register (volatile unsigned int) */

+typedef volatile       uint32_t WoReg8;  /**< Write only  8-bit register (volatile unsigned int) */

+typedef volatile       uint32_t RwReg;   /**< Read-Write 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t RwReg16; /**< Read-Write 16-bit register (volatile unsigned int) */

+typedef volatile       uint8_t  RwReg8;  /**< Read-Write  8-bit register (volatile unsigned int) */

+#define CAST(type, value) ((type *)(value))

+#define REG_ACCESS(type, address) (*(type*)(address)) /**< C code: Register value */

+#else

+#define CAST(type, value) (value)

+#define REG_ACCESS(type, address) (address) /**< Assembly code: Register address */

+#endif

+

+/* ************************************************************************** */

+/**  CMSIS DEFINITIONS FOR SAMD20J15 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J15_cmsis CMSIS Definitions */

+/*@{*/

+

+/** Interrupt Number Definition */

+typedef enum IRQn

+{

+  /******  Cortex-M0+ Processor Exceptions Numbers *******************************/

+  NonMaskableInt_IRQn      = -14, /**<  2 Non Maskable Interrupt                 */

+  HardFault_IRQn           = -13, /**<  3 Cortex-M0+ Hard Fault Interrupt        */

+  SVCall_IRQn              = -5,  /**< 11 Cortex-M0+ SV Call Interrupt           */

+  PendSV_IRQn              = -2,  /**< 14 Cortex-M0+ Pend SV Interrupt           */

+  SysTick_IRQn             = -1,  /**< 15 Cortex-M0+ System Tick Interrupt       */

+  /******  SAMD20J15-specific Interrupt Numbers ***********************/

+  PM_IRQn                  =  0, /**<  0 SAMD20J15 Power Manager (PM) */

+  SYSCTRL_IRQn             =  1, /**<  1 SAMD20J15 System Control (SYSCTRL) */

+  WDT_IRQn                 =  2, /**<  2 SAMD20J15 Watchdog Timer (WDT) */

+  RTC_IRQn                 =  3, /**<  3 SAMD20J15 Real-Time Counter (RTC) */

+  EIC_IRQn                 =  4, /**<  4 SAMD20J15 External Interrupt Controller (EIC) */

+  NVMCTRL_IRQn             =  5, /**<  5 SAMD20J15 Non-Volatile Memory Controller (NVMCTRL) */

+  EVSYS_IRQn               =  6, /**<  6 SAMD20J15 Event System Interface (EVSYS) */

+  SERCOM0_IRQn             =  7, /**<  7 SAMD20J15 Serial Communication Interface 0 (SERCOM0) */

+  SERCOM1_IRQn             =  8, /**<  8 SAMD20J15 Serial Communication Interface 1 (SERCOM1) */

+  SERCOM2_IRQn             =  9, /**<  9 SAMD20J15 Serial Communication Interface 2 (SERCOM2) */

+  SERCOM3_IRQn             = 10, /**< 10 SAMD20J15 Serial Communication Interface 3 (SERCOM3) */

+  SERCOM4_IRQn             = 11, /**< 11 SAMD20J15 Serial Communication Interface 4 (SERCOM4) */

+  SERCOM5_IRQn             = 12, /**< 12 SAMD20J15 Serial Communication Interface 5 (SERCOM5) */

+  TC0_IRQn                 = 13, /**< 13 SAMD20J15 Basic Timer Counter 0 (TC0) */

+  TC1_IRQn                 = 14, /**< 14 SAMD20J15 Basic Timer Counter 1 (TC1) */

+  TC2_IRQn                 = 15, /**< 15 SAMD20J15 Basic Timer Counter 2 (TC2) */

+  TC3_IRQn                 = 16, /**< 16 SAMD20J15 Basic Timer Counter 3 (TC3) */

+  TC4_IRQn                 = 17, /**< 17 SAMD20J15 Basic Timer Counter 4 (TC4) */

+  TC5_IRQn                 = 18, /**< 18 SAMD20J15 Basic Timer Counter 5 (TC5) */

+  TC6_IRQn                 = 19, /**< 19 SAMD20J15 Basic Timer Counter 6 (TC6) */

+  TC7_IRQn                 = 20, /**< 20 SAMD20J15 Basic Timer Counter 7 (TC7) */

+  ADC_IRQn                 = 21, /**< 21 SAMD20J15 Analog Digital Converter (ADC) */

+  AC_IRQn                  = 22, /**< 22 SAMD20J15 Analog Comparators (AC) */

+  DAC_IRQn                 = 23, /**< 23 SAMD20J15 Digital Analog Converter (DAC) */

+

+  PERIPH_COUNT_IRQn        = 24  /**< Number of peripheral IDs */

+} IRQn_Type;

+

+typedef struct _DeviceVectors

+{

+  /* Stack pointer */

+  void* pvStack;

+

+  /* Cortex-M handlers */

+  void* pfnReset_Handler;

+  void* pfnNMI_Handler;

+  void* pfnHardFault_Handler;

+  void* pfnReservedM12;

+  void* pfnReservedM11;

+  void* pfnReservedM10;

+  void* pfnReservedM9;

+  void* pfnReservedM8;

+  void* pfnReservedM7;

+  void* pfnReservedM6;

+  void* pfnSVC_Handler;

+  void* pfnReservedM4;

+  void* pfnReservedM3;

+  void* pfnPendSV_Handler;

+  void* pfnSysTick_Handler;

+

+  /* Peripheral handlers */

+  void* pfnPM_Handler;                    /*  0 Power Manager */

+  void* pfnSYSCTRL_Handler;               /*  1 System Control */

+  void* pfnWDT_Handler;                   /*  2 Watchdog Timer */

+  void* pfnRTC_Handler;                   /*  3 Real-Time Counter */

+  void* pfnEIC_Handler;                   /*  4 External Interrupt Controller */

+  void* pfnNVMCTRL_Handler;               /*  5 Non-Volatile Memory Controller */

+  void* pfnEVSYS_Handler;                 /*  6 Event System Interface */

+  void* pfnSERCOM0_Handler;               /*  7 Serial Communication Interface 0 */

+  void* pfnSERCOM1_Handler;               /*  8 Serial Communication Interface 1 */

+  void* pfnSERCOM2_Handler;               /*  9 Serial Communication Interface 2 */

+  void* pfnSERCOM3_Handler;               /* 10 Serial Communication Interface 3 */

+  void* pfnSERCOM4_Handler;               /* 11 Serial Communication Interface 4 */

+  void* pfnSERCOM5_Handler;               /* 12 Serial Communication Interface 5 */

+  void* pfnTC0_Handler;                   /* 13 Basic Timer Counter 0 */

+  void* pfnTC1_Handler;                   /* 14 Basic Timer Counter 1 */

+  void* pfnTC2_Handler;                   /* 15 Basic Timer Counter 2 */

+  void* pfnTC3_Handler;                   /* 16 Basic Timer Counter 3 */

+  void* pfnTC4_Handler;                   /* 17 Basic Timer Counter 4 */

+  void* pfnTC5_Handler;                   /* 18 Basic Timer Counter 5 */

+  void* pfnTC6_Handler;                   /* 19 Basic Timer Counter 6 */

+  void* pfnTC7_Handler;                   /* 20 Basic Timer Counter 7 */

+  void* pfnADC_Handler;                   /* 21 Analog Digital Converter */

+  void* pfnAC_Handler;                    /* 22 Analog Comparators */

+  void* pfnDAC_Handler;                   /* 23 Digital Analog Converter */

+} DeviceVectors;

+

+/* Cortex-M0+ processor handlers */

+void Reset_Handler               ( void );

+void NMI_Handler                 ( void );

+void HardFault_Handler           ( void );

+void SVC_Handler                 ( void );

+void PendSV_Handler              ( void );

+void SysTick_Handler             ( void );

+

+/* Peripherals handlers */

+void PM_Handler                  ( void );

+void SYSCTRL_Handler             ( void );

+void WDT_Handler                 ( void );

+void RTC_Handler                 ( void );

+void EIC_Handler                 ( void );

+void NVMCTRL_Handler             ( void );

+void EVSYS_Handler               ( void );

+void SERCOM0_Handler             ( void );

+void SERCOM1_Handler             ( void );

+void SERCOM2_Handler             ( void );

+void SERCOM3_Handler             ( void );

+void SERCOM4_Handler             ( void );

+void SERCOM5_Handler             ( void );

+void TC0_Handler                 ( void );

+void TC1_Handler                 ( void );

+void TC2_Handler                 ( void );

+void TC3_Handler                 ( void );

+void TC4_Handler                 ( void );

+void TC5_Handler                 ( void );

+void TC6_Handler                 ( void );

+void TC7_Handler                 ( void );

+void ADC_Handler                 ( void );

+void AC_Handler                  ( void );

+void DAC_Handler                 ( void );

+

+/*

+ * \brief Configuration of the Cortex-M0+ Processor and Core Peripherals

+ */

+

+#define LITTLE_ENDIAN          1        

+#define __CM0PLUS_REV          1         /*!< Core revision r0p1 */

+#define __MPU_PRESENT          0         /*!< MPU present or not */

+#define __NVIC_PRIO_BITS       2         /*!< Number of bits used for Priority Levels */

+#define __VTOR_PRESENT         1         /*!< VTOR present or not */

+#define __Vendor_SysTickConfig 0         /*!< Set to 1 if different SysTick Config is used */

+

+/**

+ * \brief CMSIS includes

+ */

+

+#include <core_cm0plus.h>

+#if !defined DONT_USE_CMSIS_INIT

+#include "system_samd20.h"

+#endif /* DONT_USE_CMSIS_INIT */

+

+/*@}*/

+

+/* ************************************************************************** */

+/**  SOFTWARE PERIPHERAL API DEFINITION FOR SAMD20J15 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J15_api Peripheral Software API */

+/*@{*/

+

+#include "component/component_ac.h"

+#include "component/component_adc.h"

+#include "component/component_dac.h"

+#include "component/component_dsu.h"

+#include "component/component_eic.h"

+#include "component/component_evsys.h"

+#include "component/component_gclk.h"

+#include "component/component_nvmctrl.h"

+#include "component/component_pac.h"

+#include "component/component_pm.h"

+#include "component/component_port.h"

+#include "component/component_rtc.h"

+#include "component/component_sercom.h"

+#include "component/component_sysctrl.h"

+#include "component/component_tc.h"

+#include "component/component_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  REGISTERS ACCESS DEFINITIONS FOR SAMD20J15 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J15_reg Registers Access Definitions */

+/*@{*/

+

+#include "instance/instance_ac.h"

+#include "instance/instance_adc.h"

+#include "instance/instance_dac.h"

+#include "instance/instance_dsu.h"

+#include "instance/instance_eic.h"

+#include "instance/instance_evsys.h"

+#include "instance/instance_gclk.h"

+#include "instance/instance_nvmctrl.h"

+#include "instance/instance_pac0.h"

+#include "instance/instance_pac1.h"

+#include "instance/instance_pac2.h"

+#include "instance/instance_pm.h"

+#include "instance/instance_port.h"

+#include "instance/instance_rtc.h"

+#include "instance/instance_sercom0.h"

+#include "instance/instance_sercom1.h"

+#include "instance/instance_sercom2.h"

+#include "instance/instance_sercom3.h"

+#include "instance/instance_sercom4.h"

+#include "instance/instance_sercom5.h"

+#include "instance/instance_sysctrl.h"

+#include "instance/instance_tc0.h"

+#include "instance/instance_tc1.h"

+#include "instance/instance_tc2.h"

+#include "instance/instance_tc3.h"

+#include "instance/instance_tc4.h"

+#include "instance/instance_tc5.h"

+#include "instance/instance_tc6.h"

+#include "instance/instance_tc7.h"

+#include "instance/instance_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  PERIPHERAL ID DEFINITIONS FOR SAMD20J15 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J15_id Peripheral Ids Definitions */

+/*@{*/

+

+// Peripheral instances on HPB0 bridge

+#define ID_PAC0           0 /**< \brief Peripheral Access Controller PAC (PAC0) */

+#define ID_PM             1 /**< \brief Power Manager (PM) */

+#define ID_SYSCTRL        2 /**< \brief System Control (SYSCTRL) */

+#define ID_GCLK           3 /**< \brief Generic Clock Generator (GCLK) */

+#define ID_WDT            4 /**< \brief Watchdog Timer (WDT) */

+#define ID_RTC            5 /**< \brief Real-Time Counter (RTC) */

+#define ID_EIC            6 /**< \brief External Interrupt Controller (EIC) */

+

+// Peripheral instances on HPB1 bridge

+#define ID_PAC1          32 /**< \brief Peripheral Access Controller PAC (PAC1) */

+#define ID_DSU           33 /**< \brief Device Service Unit (DSU) */

+#define ID_NVMCTRL       34 /**< \brief Non-Volatile Memory Controller (NVMCTRL) */

+#define ID_PORT          35 /**< \brief Port Module (PORT) */

+

+// Peripheral instances on HPB2 bridge

+#define ID_PAC2          64 /**< \brief Peripheral Access Controller PAC (PAC2) */

+#define ID_EVSYS         65 /**< \brief Event System Interface (EVSYS) */

+#define ID_SERCOM0       66 /**< \brief Serial Communication Interface SERCOM (SERCOM0) */

+#define ID_SERCOM1       67 /**< \brief Serial Communication Interface SERCOM (SERCOM1) */

+#define ID_SERCOM2       68 /**< \brief Serial Communication Interface SERCOM (SERCOM2) */

+#define ID_SERCOM3       69 /**< \brief Serial Communication Interface SERCOM (SERCOM3) */

+#define ID_SERCOM4       70 /**< \brief Serial Communication Interface SERCOM (SERCOM4) */

+#define ID_SERCOM5       71 /**< \brief Serial Communication Interface SERCOM (SERCOM5) */

+#define ID_TC0           72 /**< \brief Basic Timer Counter TC (TC0) */

+#define ID_TC1           73 /**< \brief Basic Timer Counter TC (TC1) */

+#define ID_TC2           74 /**< \brief Basic Timer Counter TC (TC2) */

+#define ID_TC3           75 /**< \brief Basic Timer Counter TC (TC3) */

+#define ID_TC4           76 /**< \brief Basic Timer Counter TC (TC4) */

+#define ID_TC5           77 /**< \brief Basic Timer Counter TC (TC5) */

+#define ID_TC6           78 /**< \brief Basic Timer Counter TC (TC6) */

+#define ID_TC7           79 /**< \brief Basic Timer Counter TC (TC7) */

+#define ID_ADC           80 /**< \brief Analog Digital Converter (ADC) */

+#define ID_AC            81 /**< \brief Analog Comparators (AC) */

+#define ID_DAC           82 /**< \brief Digital Analog Converter (DAC) */

+

+#define ID_PERIPH_COUNT  83 /**< \brief Number of peripheral IDs */

+/*@}*/

+

+/* ************************************************************************** */

+/**  BASE ADDRESS DEFINITIONS FOR SAMD20J15 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J15_base Peripheral Base Address Definitions */

+/*@{*/

+

+#if defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)

+#define AC                            (0x42004400U) /**< \brief (AC) APB Base Address */

+#define ADC                           (0x42004000U) /**< \brief (ADC) APB Base Address */

+#define DAC                           (0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DSU                           (0x41002000U) /**< \brief (DSU) APB Base Address */

+#define EIC                           (0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EVSYS                         (0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define GCLK                          (0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define NVMCTRL                       (0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define PAC0                          (0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1                          (0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2                          (0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PM                            (0x40000400U) /**< \brief (PM) APB Base Address */

+#define PORT                          (0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS                    (0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define RTC                           (0x40001400U) /**< \brief (RTC) APB Base Address */

+#define SERCOM0                       (0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1                       (0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2                       (0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3                       (0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM4                       (0x42001800U) /**< \brief (SERCOM4) APB Base Address */

+#define SERCOM5                       (0x42001C00U) /**< \brief (SERCOM5) APB Base Address */

+#define SYSCTRL                       (0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define TC0                           (0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1                           (0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2                           (0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3                           (0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4                           (0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5                           (0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC6                           (0x42003800U) /**< \brief (TC6) APB Base Address */

+#define TC7                           (0x42003C00U) /**< \brief (TC7) APB Base Address */

+#define WDT                           (0x40001000U) /**< \brief (WDT) APB Base Address */

+#else

+#define AC                ((Ac       *)0x42004400U) /**< \brief (AC) APB Base Address */

+#define AC_INST_NUM       1                         /**< \brief (AC) Number of instances */

+#define AC_INSTS          { AC }                    /**< \brief (AC) Instances List */

+

+#define ADC               ((Adc      *)0x42004000U) /**< \brief (ADC) APB Base Address */

+#define ADC_INST_NUM      1                         /**< \brief (ADC) Number of instances */

+#define ADC_INSTS         { ADC }                   /**< \brief (ADC) Instances List */

+

+#define DAC               ((Dac      *)0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DAC_INST_NUM      1                         /**< \brief (DAC) Number of instances */

+#define DAC_INSTS         { DAC }                   /**< \brief (DAC) Instances List */

+

+#define DSU               ((Dsu      *)0x41002000U) /**< \brief (DSU) APB Base Address */

+#define DSU_INST_NUM      1                         /**< \brief (DSU) Number of instances */

+#define DSU_INSTS         { DSU }                   /**< \brief (DSU) Instances List */

+

+#define EIC               ((Eic      *)0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EIC_INST_NUM      1                         /**< \brief (EIC) Number of instances */

+#define EIC_INSTS         { EIC }                   /**< \brief (EIC) Instances List */

+

+#define EVSYS             ((Evsys    *)0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define EVSYS_INST_NUM    1                         /**< \brief (EVSYS) Number of instances */

+#define EVSYS_INSTS       { EVSYS }                 /**< \brief (EVSYS) Instances List */

+

+#define GCLK              ((Gclk     *)0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define GCLK_INST_NUM     1                         /**< \brief (GCLK) Number of instances */

+#define GCLK_INSTS        { GCLK }                  /**< \brief (GCLK) Instances List */

+

+#define NVMCTRL           ((Nvmctrl  *)0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define NVMCTRL_INST_NUM  1                         /**< \brief (NVMCTRL) Number of instances */

+#define NVMCTRL_INSTS     { NVMCTRL }               /**< \brief (NVMCTRL) Instances List */

+

+#define PAC0              ((Pac      *)0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1              ((Pac      *)0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2              ((Pac      *)0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PAC_INST_NUM      3                         /**< \brief (PAC) Number of instances */

+#define PAC_INSTS         { PAC0, PAC1, PAC2 }      /**< \brief (PAC) Instances List */

+

+#define PM                ((Pm       *)0x40000400U) /**< \brief (PM) APB Base Address */

+#define PM_INST_NUM       1                         /**< \brief (PM) Number of instances */

+#define PM_INSTS          { PM }                    /**< \brief (PM) Instances List */

+

+#define PORT              ((Port     *)0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS        ((Port     *)0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define PORT_INST_NUM     1                         /**< \brief (PORT) Number of instances */

+#define PORT_INSTS        { PORT }                  /**< \brief (PORT) Instances List */

+

+#define RTC               ((Rtc      *)0x40001400U) /**< \brief (RTC) APB Base Address */

+#define RTC_INST_NUM      1                         /**< \brief (RTC) Number of instances */

+#define RTC_INSTS         { RTC }                   /**< \brief (RTC) Instances List */

+

+#define SERCOM0           ((Sercom   *)0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1           ((Sercom   *)0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2           ((Sercom   *)0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3           ((Sercom   *)0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM4           ((Sercom   *)0x42001800U) /**< \brief (SERCOM4) APB Base Address */

+#define SERCOM5           ((Sercom   *)0x42001C00U) /**< \brief (SERCOM5) APB Base Address */

+#define SERCOM_INST_NUM   6                         /**< \brief (SERCOM) Number of instances */

+#define SERCOM_INSTS      { SERCOM0, SERCOM1, SERCOM2, SERCOM3, SERCOM4, SERCOM5 } /**< \brief (SERCOM) Instances List */

+

+#define SYSCTRL           ((Sysctrl  *)0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define SYSCTRL_INST_NUM  1                         /**< \brief (SYSCTRL) Number of instances */

+#define SYSCTRL_INSTS     { SYSCTRL }               /**< \brief (SYSCTRL) Instances List */

+

+#define TC0               ((Tc       *)0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1               ((Tc       *)0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2               ((Tc       *)0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3               ((Tc       *)0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4               ((Tc       *)0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5               ((Tc       *)0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC6               ((Tc       *)0x42003800U) /**< \brief (TC6) APB Base Address */

+#define TC7               ((Tc       *)0x42003C00U) /**< \brief (TC7) APB Base Address */

+#define TC_INST_NUM       8                         /**< \brief (TC) Number of instances */

+#define TC_INSTS          { TC0, TC1, TC2, TC3, TC4, TC5, TC6, TC7 } /**< \brief (TC) Instances List */

+

+#define WDT               ((Wdt      *)0x40001000U) /**< \brief (WDT) APB Base Address */

+#define WDT_INST_NUM      1                         /**< \brief (WDT) Number of instances */

+#define WDT_INSTS         { WDT }                   /**< \brief (WDT) Instances List */

+

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+/*@}*/

+

+/* ************************************************************************** */

+/**  PORT DEFINITIONS FOR SAMD20J15 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J15_port PORT Definitions */

+/*@{*/

+

+#include "pio/pio_samd20j15.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  MEMORY MAPPING DEFINITIONS FOR SAMD20J15 */

+/* ************************************************************************** */

+

+#define FLASH_SIZE            0x8000 /* 32 kB */

+#define FLASH_PAGE_SIZE       64

+#define FLASH_NB_OF_PAGES     512

+#define FLASH_USER_PAGE_SIZE  64

+#define HRAMC0_SIZE           0x1000 /* 4 kB */

+#define FLASH_ADDR            (0x00000000U) /**< FLASH base address */

+#define FLASH_USER_PAGE_ADDR  (0x00800000U) /**< FLASH_USER_PAGE base address */

+#define HRAMC0_ADDR           (0x20000000U) /**< HRAMC0 base address */

+

+/* ************************************************************************** */

+/**  ELECTRICAL DEFINITIONS FOR SAMD20J15 */

+/* ************************************************************************** */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+/*@}*/

+

+#endif /* SAMD20J15_H */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20j16.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20j16.h
new file mode 100644
index 0000000..4731b3b
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20j16.h
@@ -0,0 +1,508 @@
+/**

+ * \file

+ *

+ * \brief Header file for SAMD20J16

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20J16_

+#define _SAMD20J16_

+

+/**

+ * \ingroup SAMD20_definitions

+ * \addtogroup SAMD20J16_definitions SAMD20J16 definitions

+ * This file defines all structures and symbols for SAMD20J16:

+ *   - registers and bitfields

+ *   - peripheral base address

+ *   - peripheral ID

+ *   - PIO definitions

+*/

+/*@{*/

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#include <stdint.h>

+#ifndef __cplusplus

+typedef volatile const uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile const uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile const uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#else

+typedef volatile       uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile       uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile       uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#endif

+typedef volatile       uint32_t WoReg;   /**< Write only 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t WoReg16; /**< Write only 16-bit register (volatile unsigned int) */

+typedef volatile       uint32_t WoReg8;  /**< Write only  8-bit register (volatile unsigned int) */

+typedef volatile       uint32_t RwReg;   /**< Read-Write 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t RwReg16; /**< Read-Write 16-bit register (volatile unsigned int) */

+typedef volatile       uint8_t  RwReg8;  /**< Read-Write  8-bit register (volatile unsigned int) */

+#define CAST(type, value) ((type *)(value))

+#define REG_ACCESS(type, address) (*(type*)(address)) /**< C code: Register value */

+#else

+#define CAST(type, value) (value)

+#define REG_ACCESS(type, address) (address) /**< Assembly code: Register address */

+#endif

+

+/* ************************************************************************** */

+/**  CMSIS DEFINITIONS FOR SAMD20J16 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J16_cmsis CMSIS Definitions */

+/*@{*/

+

+/** Interrupt Number Definition */

+typedef enum IRQn

+{

+  /******  Cortex-M0+ Processor Exceptions Numbers *******************************/

+  NonMaskableInt_IRQn      = -14, /**<  2 Non Maskable Interrupt                 */

+  HardFault_IRQn           = -13, /**<  3 Cortex-M0+ Hard Fault Interrupt        */

+  SVCall_IRQn              = -5,  /**< 11 Cortex-M0+ SV Call Interrupt           */

+  PendSV_IRQn              = -2,  /**< 14 Cortex-M0+ Pend SV Interrupt           */

+  SysTick_IRQn             = -1,  /**< 15 Cortex-M0+ System Tick Interrupt       */

+  /******  SAMD20J16-specific Interrupt Numbers ***********************/

+  PM_IRQn                  =  0, /**<  0 SAMD20J16 Power Manager (PM) */

+  SYSCTRL_IRQn             =  1, /**<  1 SAMD20J16 System Control (SYSCTRL) */

+  WDT_IRQn                 =  2, /**<  2 SAMD20J16 Watchdog Timer (WDT) */

+  RTC_IRQn                 =  3, /**<  3 SAMD20J16 Real-Time Counter (RTC) */

+  EIC_IRQn                 =  4, /**<  4 SAMD20J16 External Interrupt Controller (EIC) */

+  NVMCTRL_IRQn             =  5, /**<  5 SAMD20J16 Non-Volatile Memory Controller (NVMCTRL) */

+  EVSYS_IRQn               =  6, /**<  6 SAMD20J16 Event System Interface (EVSYS) */

+  SERCOM0_IRQn             =  7, /**<  7 SAMD20J16 Serial Communication Interface 0 (SERCOM0) */

+  SERCOM1_IRQn             =  8, /**<  8 SAMD20J16 Serial Communication Interface 1 (SERCOM1) */

+  SERCOM2_IRQn             =  9, /**<  9 SAMD20J16 Serial Communication Interface 2 (SERCOM2) */

+  SERCOM3_IRQn             = 10, /**< 10 SAMD20J16 Serial Communication Interface 3 (SERCOM3) */

+  SERCOM4_IRQn             = 11, /**< 11 SAMD20J16 Serial Communication Interface 4 (SERCOM4) */

+  SERCOM5_IRQn             = 12, /**< 12 SAMD20J16 Serial Communication Interface 5 (SERCOM5) */

+  TC0_IRQn                 = 13, /**< 13 SAMD20J16 Basic Timer Counter 0 (TC0) */

+  TC1_IRQn                 = 14, /**< 14 SAMD20J16 Basic Timer Counter 1 (TC1) */

+  TC2_IRQn                 = 15, /**< 15 SAMD20J16 Basic Timer Counter 2 (TC2) */

+  TC3_IRQn                 = 16, /**< 16 SAMD20J16 Basic Timer Counter 3 (TC3) */

+  TC4_IRQn                 = 17, /**< 17 SAMD20J16 Basic Timer Counter 4 (TC4) */

+  TC5_IRQn                 = 18, /**< 18 SAMD20J16 Basic Timer Counter 5 (TC5) */

+  TC6_IRQn                 = 19, /**< 19 SAMD20J16 Basic Timer Counter 6 (TC6) */

+  TC7_IRQn                 = 20, /**< 20 SAMD20J16 Basic Timer Counter 7 (TC7) */

+  ADC_IRQn                 = 21, /**< 21 SAMD20J16 Analog Digital Converter (ADC) */

+  AC_IRQn                  = 22, /**< 22 SAMD20J16 Analog Comparators (AC) */

+  DAC_IRQn                 = 23, /**< 23 SAMD20J16 Digital Analog Converter (DAC) */

+

+  PERIPH_COUNT_IRQn        = 24  /**< Number of peripheral IDs */

+} IRQn_Type;

+

+typedef struct _DeviceVectors

+{

+  /* Stack pointer */

+  void* pvStack;

+

+  /* Cortex-M handlers */

+  void* pfnReset_Handler;

+  void* pfnNMI_Handler;

+  void* pfnHardFault_Handler;

+  void* pfnReservedM12;

+  void* pfnReservedM11;

+  void* pfnReservedM10;

+  void* pfnReservedM9;

+  void* pfnReservedM8;

+  void* pfnReservedM7;

+  void* pfnReservedM6;

+  void* pfnSVC_Handler;

+  void* pfnReservedM4;

+  void* pfnReservedM3;

+  void* pfnPendSV_Handler;

+  void* pfnSysTick_Handler;

+

+  /* Peripheral handlers */

+  void* pfnPM_Handler;                    /*  0 Power Manager */

+  void* pfnSYSCTRL_Handler;               /*  1 System Control */

+  void* pfnWDT_Handler;                   /*  2 Watchdog Timer */

+  void* pfnRTC_Handler;                   /*  3 Real-Time Counter */

+  void* pfnEIC_Handler;                   /*  4 External Interrupt Controller */

+  void* pfnNVMCTRL_Handler;               /*  5 Non-Volatile Memory Controller */

+  void* pfnEVSYS_Handler;                 /*  6 Event System Interface */

+  void* pfnSERCOM0_Handler;               /*  7 Serial Communication Interface 0 */

+  void* pfnSERCOM1_Handler;               /*  8 Serial Communication Interface 1 */

+  void* pfnSERCOM2_Handler;               /*  9 Serial Communication Interface 2 */

+  void* pfnSERCOM3_Handler;               /* 10 Serial Communication Interface 3 */

+  void* pfnSERCOM4_Handler;               /* 11 Serial Communication Interface 4 */

+  void* pfnSERCOM5_Handler;               /* 12 Serial Communication Interface 5 */

+  void* pfnTC0_Handler;                   /* 13 Basic Timer Counter 0 */

+  void* pfnTC1_Handler;                   /* 14 Basic Timer Counter 1 */

+  void* pfnTC2_Handler;                   /* 15 Basic Timer Counter 2 */

+  void* pfnTC3_Handler;                   /* 16 Basic Timer Counter 3 */

+  void* pfnTC4_Handler;                   /* 17 Basic Timer Counter 4 */

+  void* pfnTC5_Handler;                   /* 18 Basic Timer Counter 5 */

+  void* pfnTC6_Handler;                   /* 19 Basic Timer Counter 6 */

+  void* pfnTC7_Handler;                   /* 20 Basic Timer Counter 7 */

+  void* pfnADC_Handler;                   /* 21 Analog Digital Converter */

+  void* pfnAC_Handler;                    /* 22 Analog Comparators */

+  void* pfnDAC_Handler;                   /* 23 Digital Analog Converter */

+} DeviceVectors;

+

+/* Cortex-M0+ processor handlers */

+void Reset_Handler               ( void );

+void NMI_Handler                 ( void );

+void HardFault_Handler           ( void );

+void SVC_Handler                 ( void );

+void PendSV_Handler              ( void );

+void SysTick_Handler             ( void );

+

+/* Peripherals handlers */

+void PM_Handler                  ( void );

+void SYSCTRL_Handler             ( void );

+void WDT_Handler                 ( void );

+void RTC_Handler                 ( void );

+void EIC_Handler                 ( void );

+void NVMCTRL_Handler             ( void );

+void EVSYS_Handler               ( void );

+void SERCOM0_Handler             ( void );

+void SERCOM1_Handler             ( void );

+void SERCOM2_Handler             ( void );

+void SERCOM3_Handler             ( void );

+void SERCOM4_Handler             ( void );

+void SERCOM5_Handler             ( void );

+void TC0_Handler                 ( void );

+void TC1_Handler                 ( void );

+void TC2_Handler                 ( void );

+void TC3_Handler                 ( void );

+void TC4_Handler                 ( void );

+void TC5_Handler                 ( void );

+void TC6_Handler                 ( void );

+void TC7_Handler                 ( void );

+void ADC_Handler                 ( void );

+void AC_Handler                  ( void );

+void DAC_Handler                 ( void );

+

+/*

+ * \brief Configuration of the Cortex-M0+ Processor and Core Peripherals

+ */

+

+#define LITTLE_ENDIAN          1        

+#define __CM0PLUS_REV          1         /*!< Core revision r0p1 */

+#define __MPU_PRESENT          0         /*!< MPU present or not */

+#define __NVIC_PRIO_BITS       2         /*!< Number of bits used for Priority Levels */

+#define __VTOR_PRESENT         1         /*!< VTOR present or not */

+#define __Vendor_SysTickConfig 0         /*!< Set to 1 if different SysTick Config is used */

+

+/**

+ * \brief CMSIS includes

+ */

+

+#include <core_cm0plus.h>

+#if !defined DONT_USE_CMSIS_INIT

+#include "system_samd20.h"

+#endif /* DONT_USE_CMSIS_INIT */

+

+/*@}*/

+

+/* ************************************************************************** */

+/**  SOFTWARE PERIPHERAL API DEFINITION FOR SAMD20J16 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J16_api Peripheral Software API */

+/*@{*/

+

+#include "component/component_ac.h"

+#include "component/component_adc.h"

+#include "component/component_dac.h"

+#include "component/component_dsu.h"

+#include "component/component_eic.h"

+#include "component/component_evsys.h"

+#include "component/component_gclk.h"

+#include "component/component_nvmctrl.h"

+#include "component/component_pac.h"

+#include "component/component_pm.h"

+#include "component/component_port.h"

+#include "component/component_rtc.h"

+#include "component/component_sercom.h"

+#include "component/component_sysctrl.h"

+#include "component/component_tc.h"

+#include "component/component_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  REGISTERS ACCESS DEFINITIONS FOR SAMD20J16 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J16_reg Registers Access Definitions */

+/*@{*/

+

+#include "instance/instance_ac.h"

+#include "instance/instance_adc.h"

+#include "instance/instance_dac.h"

+#include "instance/instance_dsu.h"

+#include "instance/instance_eic.h"

+#include "instance/instance_evsys.h"

+#include "instance/instance_gclk.h"

+#include "instance/instance_nvmctrl.h"

+#include "instance/instance_pac0.h"

+#include "instance/instance_pac1.h"

+#include "instance/instance_pac2.h"

+#include "instance/instance_pm.h"

+#include "instance/instance_port.h"

+#include "instance/instance_rtc.h"

+#include "instance/instance_sercom0.h"

+#include "instance/instance_sercom1.h"

+#include "instance/instance_sercom2.h"

+#include "instance/instance_sercom3.h"

+#include "instance/instance_sercom4.h"

+#include "instance/instance_sercom5.h"

+#include "instance/instance_sysctrl.h"

+#include "instance/instance_tc0.h"

+#include "instance/instance_tc1.h"

+#include "instance/instance_tc2.h"

+#include "instance/instance_tc3.h"

+#include "instance/instance_tc4.h"

+#include "instance/instance_tc5.h"

+#include "instance/instance_tc6.h"

+#include "instance/instance_tc7.h"

+#include "instance/instance_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  PERIPHERAL ID DEFINITIONS FOR SAMD20J16 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J16_id Peripheral Ids Definitions */

+/*@{*/

+

+// Peripheral instances on HPB0 bridge

+#define ID_PAC0           0 /**< \brief Peripheral Access Controller PAC (PAC0) */

+#define ID_PM             1 /**< \brief Power Manager (PM) */

+#define ID_SYSCTRL        2 /**< \brief System Control (SYSCTRL) */

+#define ID_GCLK           3 /**< \brief Generic Clock Generator (GCLK) */

+#define ID_WDT            4 /**< \brief Watchdog Timer (WDT) */

+#define ID_RTC            5 /**< \brief Real-Time Counter (RTC) */

+#define ID_EIC            6 /**< \brief External Interrupt Controller (EIC) */

+

+// Peripheral instances on HPB1 bridge

+#define ID_PAC1          32 /**< \brief Peripheral Access Controller PAC (PAC1) */

+#define ID_DSU           33 /**< \brief Device Service Unit (DSU) */

+#define ID_NVMCTRL       34 /**< \brief Non-Volatile Memory Controller (NVMCTRL) */

+#define ID_PORT          35 /**< \brief Port Module (PORT) */

+

+// Peripheral instances on HPB2 bridge

+#define ID_PAC2          64 /**< \brief Peripheral Access Controller PAC (PAC2) */

+#define ID_EVSYS         65 /**< \brief Event System Interface (EVSYS) */

+#define ID_SERCOM0       66 /**< \brief Serial Communication Interface SERCOM (SERCOM0) */

+#define ID_SERCOM1       67 /**< \brief Serial Communication Interface SERCOM (SERCOM1) */

+#define ID_SERCOM2       68 /**< \brief Serial Communication Interface SERCOM (SERCOM2) */

+#define ID_SERCOM3       69 /**< \brief Serial Communication Interface SERCOM (SERCOM3) */

+#define ID_SERCOM4       70 /**< \brief Serial Communication Interface SERCOM (SERCOM4) */

+#define ID_SERCOM5       71 /**< \brief Serial Communication Interface SERCOM (SERCOM5) */

+#define ID_TC0           72 /**< \brief Basic Timer Counter TC (TC0) */

+#define ID_TC1           73 /**< \brief Basic Timer Counter TC (TC1) */

+#define ID_TC2           74 /**< \brief Basic Timer Counter TC (TC2) */

+#define ID_TC3           75 /**< \brief Basic Timer Counter TC (TC3) */

+#define ID_TC4           76 /**< \brief Basic Timer Counter TC (TC4) */

+#define ID_TC5           77 /**< \brief Basic Timer Counter TC (TC5) */

+#define ID_TC6           78 /**< \brief Basic Timer Counter TC (TC6) */

+#define ID_TC7           79 /**< \brief Basic Timer Counter TC (TC7) */

+#define ID_ADC           80 /**< \brief Analog Digital Converter (ADC) */

+#define ID_AC            81 /**< \brief Analog Comparators (AC) */

+#define ID_DAC           82 /**< \brief Digital Analog Converter (DAC) */

+

+#define ID_PERIPH_COUNT  83 /**< \brief Number of peripheral IDs */

+/*@}*/

+

+/* ************************************************************************** */

+/**  BASE ADDRESS DEFINITIONS FOR SAMD20J16 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J16_base Peripheral Base Address Definitions */

+/*@{*/

+

+#if defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)

+#define AC                            (0x42004400U) /**< \brief (AC) APB Base Address */

+#define ADC                           (0x42004000U) /**< \brief (ADC) APB Base Address */

+#define DAC                           (0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DSU                           (0x41002000U) /**< \brief (DSU) APB Base Address */

+#define EIC                           (0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EVSYS                         (0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define GCLK                          (0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define NVMCTRL                       (0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define PAC0                          (0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1                          (0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2                          (0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PM                            (0x40000400U) /**< \brief (PM) APB Base Address */

+#define PORT                          (0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS                    (0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define RTC                           (0x40001400U) /**< \brief (RTC) APB Base Address */

+#define SERCOM0                       (0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1                       (0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2                       (0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3                       (0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM4                       (0x42001800U) /**< \brief (SERCOM4) APB Base Address */

+#define SERCOM5                       (0x42001C00U) /**< \brief (SERCOM5) APB Base Address */

+#define SYSCTRL                       (0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define TC0                           (0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1                           (0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2                           (0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3                           (0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4                           (0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5                           (0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC6                           (0x42003800U) /**< \brief (TC6) APB Base Address */

+#define TC7                           (0x42003C00U) /**< \brief (TC7) APB Base Address */

+#define WDT                           (0x40001000U) /**< \brief (WDT) APB Base Address */

+#else

+#define AC                ((Ac       *)0x42004400U) /**< \brief (AC) APB Base Address */

+#define AC_INST_NUM       1                         /**< \brief (AC) Number of instances */

+#define AC_INSTS          { AC }                    /**< \brief (AC) Instances List */

+

+#define ADC               ((Adc      *)0x42004000U) /**< \brief (ADC) APB Base Address */

+#define ADC_INST_NUM      1                         /**< \brief (ADC) Number of instances */

+#define ADC_INSTS         { ADC }                   /**< \brief (ADC) Instances List */

+

+#define DAC               ((Dac      *)0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DAC_INST_NUM      1                         /**< \brief (DAC) Number of instances */

+#define DAC_INSTS         { DAC }                   /**< \brief (DAC) Instances List */

+

+#define DSU               ((Dsu      *)0x41002000U) /**< \brief (DSU) APB Base Address */

+#define DSU_INST_NUM      1                         /**< \brief (DSU) Number of instances */

+#define DSU_INSTS         { DSU }                   /**< \brief (DSU) Instances List */

+

+#define EIC               ((Eic      *)0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EIC_INST_NUM      1                         /**< \brief (EIC) Number of instances */

+#define EIC_INSTS         { EIC }                   /**< \brief (EIC) Instances List */

+

+#define EVSYS             ((Evsys    *)0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define EVSYS_INST_NUM    1                         /**< \brief (EVSYS) Number of instances */

+#define EVSYS_INSTS       { EVSYS }                 /**< \brief (EVSYS) Instances List */

+

+#define GCLK              ((Gclk     *)0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define GCLK_INST_NUM     1                         /**< \brief (GCLK) Number of instances */

+#define GCLK_INSTS        { GCLK }                  /**< \brief (GCLK) Instances List */

+

+#define NVMCTRL           ((Nvmctrl  *)0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define NVMCTRL_INST_NUM  1                         /**< \brief (NVMCTRL) Number of instances */

+#define NVMCTRL_INSTS     { NVMCTRL }               /**< \brief (NVMCTRL) Instances List */

+

+#define PAC0              ((Pac      *)0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1              ((Pac      *)0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2              ((Pac      *)0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PAC_INST_NUM      3                         /**< \brief (PAC) Number of instances */

+#define PAC_INSTS         { PAC0, PAC1, PAC2 }      /**< \brief (PAC) Instances List */

+

+#define PM                ((Pm       *)0x40000400U) /**< \brief (PM) APB Base Address */

+#define PM_INST_NUM       1                         /**< \brief (PM) Number of instances */

+#define PM_INSTS          { PM }                    /**< \brief (PM) Instances List */

+

+#define PORT              ((Port     *)0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS        ((Port     *)0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define PORT_INST_NUM     1                         /**< \brief (PORT) Number of instances */

+#define PORT_INSTS        { PORT }                  /**< \brief (PORT) Instances List */

+

+#define RTC               ((Rtc      *)0x40001400U) /**< \brief (RTC) APB Base Address */

+#define RTC_INST_NUM      1                         /**< \brief (RTC) Number of instances */

+#define RTC_INSTS         { RTC }                   /**< \brief (RTC) Instances List */

+

+#define SERCOM0           ((Sercom   *)0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1           ((Sercom   *)0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2           ((Sercom   *)0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3           ((Sercom   *)0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM4           ((Sercom   *)0x42001800U) /**< \brief (SERCOM4) APB Base Address */

+#define SERCOM5           ((Sercom   *)0x42001C00U) /**< \brief (SERCOM5) APB Base Address */

+#define SERCOM_INST_NUM   6                         /**< \brief (SERCOM) Number of instances */

+#define SERCOM_INSTS      { SERCOM0, SERCOM1, SERCOM2, SERCOM3, SERCOM4, SERCOM5 } /**< \brief (SERCOM) Instances List */

+

+#define SYSCTRL           ((Sysctrl  *)0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define SYSCTRL_INST_NUM  1                         /**< \brief (SYSCTRL) Number of instances */

+#define SYSCTRL_INSTS     { SYSCTRL }               /**< \brief (SYSCTRL) Instances List */

+

+#define TC0               ((Tc       *)0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1               ((Tc       *)0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2               ((Tc       *)0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3               ((Tc       *)0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4               ((Tc       *)0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5               ((Tc       *)0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC6               ((Tc       *)0x42003800U) /**< \brief (TC6) APB Base Address */

+#define TC7               ((Tc       *)0x42003C00U) /**< \brief (TC7) APB Base Address */

+#define TC_INST_NUM       8                         /**< \brief (TC) Number of instances */

+#define TC_INSTS          { TC0, TC1, TC2, TC3, TC4, TC5, TC6, TC7 } /**< \brief (TC) Instances List */

+

+#define WDT               ((Wdt      *)0x40001000U) /**< \brief (WDT) APB Base Address */

+#define WDT_INST_NUM      1                         /**< \brief (WDT) Number of instances */

+#define WDT_INSTS         { WDT }                   /**< \brief (WDT) Instances List */

+

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+/*@}*/

+

+/* ************************************************************************** */

+/**  PORT DEFINITIONS FOR SAMD20J16 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J16_port PORT Definitions */

+/*@{*/

+

+#include "pio/pio_samd20j16.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  MEMORY MAPPING DEFINITIONS FOR SAMD20J16 */

+/* ************************************************************************** */

+

+#define FLASH_SIZE            0x10000 /* 64 kB */

+#define FLASH_PAGE_SIZE       64

+#define FLASH_NB_OF_PAGES     1024

+#define FLASH_USER_PAGE_SIZE  64

+#define HRAMC0_SIZE           0x2000 /* 8 kB */

+#define FLASH_ADDR            (0x00000000U) /**< FLASH base address */

+#define FLASH_USER_PAGE_ADDR  (0x00800000U) /**< FLASH_USER_PAGE base address */

+#define HRAMC0_ADDR           (0x20000000U) /**< HRAMC0 base address */

+

+/* ************************************************************************** */

+/**  ELECTRICAL DEFINITIONS FOR SAMD20J16 */

+/* ************************************************************************** */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+/*@}*/

+

+#endif /* SAMD20J16_H */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20j17.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20j17.h
new file mode 100644
index 0000000..f42f829
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20j17.h
@@ -0,0 +1,508 @@
+/**

+ * \file

+ *

+ * \brief Header file for SAMD20J17

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20J17_

+#define _SAMD20J17_

+

+/**

+ * \ingroup SAMD20_definitions

+ * \addtogroup SAMD20J17_definitions SAMD20J17 definitions

+ * This file defines all structures and symbols for SAMD20J17:

+ *   - registers and bitfields

+ *   - peripheral base address

+ *   - peripheral ID

+ *   - PIO definitions

+*/

+/*@{*/

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#include <stdint.h>

+#ifndef __cplusplus

+typedef volatile const uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile const uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile const uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#else

+typedef volatile       uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile       uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile       uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#endif

+typedef volatile       uint32_t WoReg;   /**< Write only 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t WoReg16; /**< Write only 16-bit register (volatile unsigned int) */

+typedef volatile       uint32_t WoReg8;  /**< Write only  8-bit register (volatile unsigned int) */

+typedef volatile       uint32_t RwReg;   /**< Read-Write 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t RwReg16; /**< Read-Write 16-bit register (volatile unsigned int) */

+typedef volatile       uint8_t  RwReg8;  /**< Read-Write  8-bit register (volatile unsigned int) */

+#define CAST(type, value) ((type *)(value))

+#define REG_ACCESS(type, address) (*(type*)(address)) /**< C code: Register value */

+#else

+#define CAST(type, value) (value)

+#define REG_ACCESS(type, address) (address) /**< Assembly code: Register address */

+#endif

+

+/* ************************************************************************** */

+/**  CMSIS DEFINITIONS FOR SAMD20J17 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J17_cmsis CMSIS Definitions */

+/*@{*/

+

+/** Interrupt Number Definition */

+typedef enum IRQn

+{

+  /******  Cortex-M0+ Processor Exceptions Numbers *******************************/

+  NonMaskableInt_IRQn      = -14, /**<  2 Non Maskable Interrupt                 */

+  HardFault_IRQn           = -13, /**<  3 Cortex-M0+ Hard Fault Interrupt        */

+  SVCall_IRQn              = -5,  /**< 11 Cortex-M0+ SV Call Interrupt           */

+  PendSV_IRQn              = -2,  /**< 14 Cortex-M0+ Pend SV Interrupt           */

+  SysTick_IRQn             = -1,  /**< 15 Cortex-M0+ System Tick Interrupt       */

+  /******  SAMD20J17-specific Interrupt Numbers ***********************/

+  PM_IRQn                  =  0, /**<  0 SAMD20J17 Power Manager (PM) */

+  SYSCTRL_IRQn             =  1, /**<  1 SAMD20J17 System Control (SYSCTRL) */

+  WDT_IRQn                 =  2, /**<  2 SAMD20J17 Watchdog Timer (WDT) */

+  RTC_IRQn                 =  3, /**<  3 SAMD20J17 Real-Time Counter (RTC) */

+  EIC_IRQn                 =  4, /**<  4 SAMD20J17 External Interrupt Controller (EIC) */

+  NVMCTRL_IRQn             =  5, /**<  5 SAMD20J17 Non-Volatile Memory Controller (NVMCTRL) */

+  EVSYS_IRQn               =  6, /**<  6 SAMD20J17 Event System Interface (EVSYS) */

+  SERCOM0_IRQn             =  7, /**<  7 SAMD20J17 Serial Communication Interface 0 (SERCOM0) */

+  SERCOM1_IRQn             =  8, /**<  8 SAMD20J17 Serial Communication Interface 1 (SERCOM1) */

+  SERCOM2_IRQn             =  9, /**<  9 SAMD20J17 Serial Communication Interface 2 (SERCOM2) */

+  SERCOM3_IRQn             = 10, /**< 10 SAMD20J17 Serial Communication Interface 3 (SERCOM3) */

+  SERCOM4_IRQn             = 11, /**< 11 SAMD20J17 Serial Communication Interface 4 (SERCOM4) */

+  SERCOM5_IRQn             = 12, /**< 12 SAMD20J17 Serial Communication Interface 5 (SERCOM5) */

+  TC0_IRQn                 = 13, /**< 13 SAMD20J17 Basic Timer Counter 0 (TC0) */

+  TC1_IRQn                 = 14, /**< 14 SAMD20J17 Basic Timer Counter 1 (TC1) */

+  TC2_IRQn                 = 15, /**< 15 SAMD20J17 Basic Timer Counter 2 (TC2) */

+  TC3_IRQn                 = 16, /**< 16 SAMD20J17 Basic Timer Counter 3 (TC3) */

+  TC4_IRQn                 = 17, /**< 17 SAMD20J17 Basic Timer Counter 4 (TC4) */

+  TC5_IRQn                 = 18, /**< 18 SAMD20J17 Basic Timer Counter 5 (TC5) */

+  TC6_IRQn                 = 19, /**< 19 SAMD20J17 Basic Timer Counter 6 (TC6) */

+  TC7_IRQn                 = 20, /**< 20 SAMD20J17 Basic Timer Counter 7 (TC7) */

+  ADC_IRQn                 = 21, /**< 21 SAMD20J17 Analog Digital Converter (ADC) */

+  AC_IRQn                  = 22, /**< 22 SAMD20J17 Analog Comparators (AC) */

+  DAC_IRQn                 = 23, /**< 23 SAMD20J17 Digital Analog Converter (DAC) */

+

+  PERIPH_COUNT_IRQn        = 24  /**< Number of peripheral IDs */

+} IRQn_Type;

+

+typedef struct _DeviceVectors

+{

+  /* Stack pointer */

+  void* pvStack;

+

+  /* Cortex-M handlers */

+  void* pfnReset_Handler;

+  void* pfnNMI_Handler;

+  void* pfnHardFault_Handler;

+  void* pfnReservedM12;

+  void* pfnReservedM11;

+  void* pfnReservedM10;

+  void* pfnReservedM9;

+  void* pfnReservedM8;

+  void* pfnReservedM7;

+  void* pfnReservedM6;

+  void* pfnSVC_Handler;

+  void* pfnReservedM4;

+  void* pfnReservedM3;

+  void* pfnPendSV_Handler;

+  void* pfnSysTick_Handler;

+

+  /* Peripheral handlers */

+  void* pfnPM_Handler;                    /*  0 Power Manager */

+  void* pfnSYSCTRL_Handler;               /*  1 System Control */

+  void* pfnWDT_Handler;                   /*  2 Watchdog Timer */

+  void* pfnRTC_Handler;                   /*  3 Real-Time Counter */

+  void* pfnEIC_Handler;                   /*  4 External Interrupt Controller */

+  void* pfnNVMCTRL_Handler;               /*  5 Non-Volatile Memory Controller */

+  void* pfnEVSYS_Handler;                 /*  6 Event System Interface */

+  void* pfnSERCOM0_Handler;               /*  7 Serial Communication Interface 0 */

+  void* pfnSERCOM1_Handler;               /*  8 Serial Communication Interface 1 */

+  void* pfnSERCOM2_Handler;               /*  9 Serial Communication Interface 2 */

+  void* pfnSERCOM3_Handler;               /* 10 Serial Communication Interface 3 */

+  void* pfnSERCOM4_Handler;               /* 11 Serial Communication Interface 4 */

+  void* pfnSERCOM5_Handler;               /* 12 Serial Communication Interface 5 */

+  void* pfnTC0_Handler;                   /* 13 Basic Timer Counter 0 */

+  void* pfnTC1_Handler;                   /* 14 Basic Timer Counter 1 */

+  void* pfnTC2_Handler;                   /* 15 Basic Timer Counter 2 */

+  void* pfnTC3_Handler;                   /* 16 Basic Timer Counter 3 */

+  void* pfnTC4_Handler;                   /* 17 Basic Timer Counter 4 */

+  void* pfnTC5_Handler;                   /* 18 Basic Timer Counter 5 */

+  void* pfnTC6_Handler;                   /* 19 Basic Timer Counter 6 */

+  void* pfnTC7_Handler;                   /* 20 Basic Timer Counter 7 */

+  void* pfnADC_Handler;                   /* 21 Analog Digital Converter */

+  void* pfnAC_Handler;                    /* 22 Analog Comparators */

+  void* pfnDAC_Handler;                   /* 23 Digital Analog Converter */

+} DeviceVectors;

+

+/* Cortex-M0+ processor handlers */

+void Reset_Handler               ( void );

+void NMI_Handler                 ( void );

+void HardFault_Handler           ( void );

+void SVC_Handler                 ( void );

+void PendSV_Handler              ( void );

+void SysTick_Handler             ( void );

+

+/* Peripherals handlers */

+void PM_Handler                  ( void );

+void SYSCTRL_Handler             ( void );

+void WDT_Handler                 ( void );

+void RTC_Handler                 ( void );

+void EIC_Handler                 ( void );

+void NVMCTRL_Handler             ( void );

+void EVSYS_Handler               ( void );

+void SERCOM0_Handler             ( void );

+void SERCOM1_Handler             ( void );

+void SERCOM2_Handler             ( void );

+void SERCOM3_Handler             ( void );

+void SERCOM4_Handler             ( void );

+void SERCOM5_Handler             ( void );

+void TC0_Handler                 ( void );

+void TC1_Handler                 ( void );

+void TC2_Handler                 ( void );

+void TC3_Handler                 ( void );

+void TC4_Handler                 ( void );

+void TC5_Handler                 ( void );

+void TC6_Handler                 ( void );

+void TC7_Handler                 ( void );

+void ADC_Handler                 ( void );

+void AC_Handler                  ( void );

+void DAC_Handler                 ( void );

+

+/*

+ * \brief Configuration of the Cortex-M0+ Processor and Core Peripherals

+ */

+

+#define LITTLE_ENDIAN          1        

+#define __CM0PLUS_REV          1         /*!< Core revision r0p1 */

+#define __MPU_PRESENT          0         /*!< MPU present or not */

+#define __NVIC_PRIO_BITS       2         /*!< Number of bits used for Priority Levels */

+#define __VTOR_PRESENT         1         /*!< VTOR present or not */

+#define __Vendor_SysTickConfig 0         /*!< Set to 1 if different SysTick Config is used */

+

+/**

+ * \brief CMSIS includes

+ */

+

+#include <core_cm0plus.h>

+#if !defined DONT_USE_CMSIS_INIT

+#include "system_samd20.h"

+#endif /* DONT_USE_CMSIS_INIT */

+

+/*@}*/

+

+/* ************************************************************************** */

+/**  SOFTWARE PERIPHERAL API DEFINITION FOR SAMD20J17 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J17_api Peripheral Software API */

+/*@{*/

+

+#include "component/component_ac.h"

+#include "component/component_adc.h"

+#include "component/component_dac.h"

+#include "component/component_dsu.h"

+#include "component/component_eic.h"

+#include "component/component_evsys.h"

+#include "component/component_gclk.h"

+#include "component/component_nvmctrl.h"

+#include "component/component_pac.h"

+#include "component/component_pm.h"

+#include "component/component_port.h"

+#include "component/component_rtc.h"

+#include "component/component_sercom.h"

+#include "component/component_sysctrl.h"

+#include "component/component_tc.h"

+#include "component/component_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  REGISTERS ACCESS DEFINITIONS FOR SAMD20J17 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J17_reg Registers Access Definitions */

+/*@{*/

+

+#include "instance/instance_ac.h"

+#include "instance/instance_adc.h"

+#include "instance/instance_dac.h"

+#include "instance/instance_dsu.h"

+#include "instance/instance_eic.h"

+#include "instance/instance_evsys.h"

+#include "instance/instance_gclk.h"

+#include "instance/instance_nvmctrl.h"

+#include "instance/instance_pac0.h"

+#include "instance/instance_pac1.h"

+#include "instance/instance_pac2.h"

+#include "instance/instance_pm.h"

+#include "instance/instance_port.h"

+#include "instance/instance_rtc.h"

+#include "instance/instance_sercom0.h"

+#include "instance/instance_sercom1.h"

+#include "instance/instance_sercom2.h"

+#include "instance/instance_sercom3.h"

+#include "instance/instance_sercom4.h"

+#include "instance/instance_sercom5.h"

+#include "instance/instance_sysctrl.h"

+#include "instance/instance_tc0.h"

+#include "instance/instance_tc1.h"

+#include "instance/instance_tc2.h"

+#include "instance/instance_tc3.h"

+#include "instance/instance_tc4.h"

+#include "instance/instance_tc5.h"

+#include "instance/instance_tc6.h"

+#include "instance/instance_tc7.h"

+#include "instance/instance_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  PERIPHERAL ID DEFINITIONS FOR SAMD20J17 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J17_id Peripheral Ids Definitions */

+/*@{*/

+

+// Peripheral instances on HPB0 bridge

+#define ID_PAC0           0 /**< \brief Peripheral Access Controller PAC (PAC0) */

+#define ID_PM             1 /**< \brief Power Manager (PM) */

+#define ID_SYSCTRL        2 /**< \brief System Control (SYSCTRL) */

+#define ID_GCLK           3 /**< \brief Generic Clock Generator (GCLK) */

+#define ID_WDT            4 /**< \brief Watchdog Timer (WDT) */

+#define ID_RTC            5 /**< \brief Real-Time Counter (RTC) */

+#define ID_EIC            6 /**< \brief External Interrupt Controller (EIC) */

+

+// Peripheral instances on HPB1 bridge

+#define ID_PAC1          32 /**< \brief Peripheral Access Controller PAC (PAC1) */

+#define ID_DSU           33 /**< \brief Device Service Unit (DSU) */

+#define ID_NVMCTRL       34 /**< \brief Non-Volatile Memory Controller (NVMCTRL) */

+#define ID_PORT          35 /**< \brief Port Module (PORT) */

+

+// Peripheral instances on HPB2 bridge

+#define ID_PAC2          64 /**< \brief Peripheral Access Controller PAC (PAC2) */

+#define ID_EVSYS         65 /**< \brief Event System Interface (EVSYS) */

+#define ID_SERCOM0       66 /**< \brief Serial Communication Interface SERCOM (SERCOM0) */

+#define ID_SERCOM1       67 /**< \brief Serial Communication Interface SERCOM (SERCOM1) */

+#define ID_SERCOM2       68 /**< \brief Serial Communication Interface SERCOM (SERCOM2) */

+#define ID_SERCOM3       69 /**< \brief Serial Communication Interface SERCOM (SERCOM3) */

+#define ID_SERCOM4       70 /**< \brief Serial Communication Interface SERCOM (SERCOM4) */

+#define ID_SERCOM5       71 /**< \brief Serial Communication Interface SERCOM (SERCOM5) */

+#define ID_TC0           72 /**< \brief Basic Timer Counter TC (TC0) */

+#define ID_TC1           73 /**< \brief Basic Timer Counter TC (TC1) */

+#define ID_TC2           74 /**< \brief Basic Timer Counter TC (TC2) */

+#define ID_TC3           75 /**< \brief Basic Timer Counter TC (TC3) */

+#define ID_TC4           76 /**< \brief Basic Timer Counter TC (TC4) */

+#define ID_TC5           77 /**< \brief Basic Timer Counter TC (TC5) */

+#define ID_TC6           78 /**< \brief Basic Timer Counter TC (TC6) */

+#define ID_TC7           79 /**< \brief Basic Timer Counter TC (TC7) */

+#define ID_ADC           80 /**< \brief Analog Digital Converter (ADC) */

+#define ID_AC            81 /**< \brief Analog Comparators (AC) */

+#define ID_DAC           82 /**< \brief Digital Analog Converter (DAC) */

+

+#define ID_PERIPH_COUNT  83 /**< \brief Number of peripheral IDs */

+/*@}*/

+

+/* ************************************************************************** */

+/**  BASE ADDRESS DEFINITIONS FOR SAMD20J17 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J17_base Peripheral Base Address Definitions */

+/*@{*/

+

+#if defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)

+#define AC                            (0x42004400U) /**< \brief (AC) APB Base Address */

+#define ADC                           (0x42004000U) /**< \brief (ADC) APB Base Address */

+#define DAC                           (0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DSU                           (0x41002000U) /**< \brief (DSU) APB Base Address */

+#define EIC                           (0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EVSYS                         (0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define GCLK                          (0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define NVMCTRL                       (0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define PAC0                          (0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1                          (0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2                          (0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PM                            (0x40000400U) /**< \brief (PM) APB Base Address */

+#define PORT                          (0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS                    (0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define RTC                           (0x40001400U) /**< \brief (RTC) APB Base Address */

+#define SERCOM0                       (0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1                       (0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2                       (0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3                       (0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM4                       (0x42001800U) /**< \brief (SERCOM4) APB Base Address */

+#define SERCOM5                       (0x42001C00U) /**< \brief (SERCOM5) APB Base Address */

+#define SYSCTRL                       (0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define TC0                           (0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1                           (0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2                           (0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3                           (0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4                           (0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5                           (0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC6                           (0x42003800U) /**< \brief (TC6) APB Base Address */

+#define TC7                           (0x42003C00U) /**< \brief (TC7) APB Base Address */

+#define WDT                           (0x40001000U) /**< \brief (WDT) APB Base Address */

+#else

+#define AC                ((Ac       *)0x42004400U) /**< \brief (AC) APB Base Address */

+#define AC_INST_NUM       1                         /**< \brief (AC) Number of instances */

+#define AC_INSTS          { AC }                    /**< \brief (AC) Instances List */

+

+#define ADC               ((Adc      *)0x42004000U) /**< \brief (ADC) APB Base Address */

+#define ADC_INST_NUM      1                         /**< \brief (ADC) Number of instances */

+#define ADC_INSTS         { ADC }                   /**< \brief (ADC) Instances List */

+

+#define DAC               ((Dac      *)0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DAC_INST_NUM      1                         /**< \brief (DAC) Number of instances */

+#define DAC_INSTS         { DAC }                   /**< \brief (DAC) Instances List */

+

+#define DSU               ((Dsu      *)0x41002000U) /**< \brief (DSU) APB Base Address */

+#define DSU_INST_NUM      1                         /**< \brief (DSU) Number of instances */

+#define DSU_INSTS         { DSU }                   /**< \brief (DSU) Instances List */

+

+#define EIC               ((Eic      *)0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EIC_INST_NUM      1                         /**< \brief (EIC) Number of instances */

+#define EIC_INSTS         { EIC }                   /**< \brief (EIC) Instances List */

+

+#define EVSYS             ((Evsys    *)0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define EVSYS_INST_NUM    1                         /**< \brief (EVSYS) Number of instances */

+#define EVSYS_INSTS       { EVSYS }                 /**< \brief (EVSYS) Instances List */

+

+#define GCLK              ((Gclk     *)0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define GCLK_INST_NUM     1                         /**< \brief (GCLK) Number of instances */

+#define GCLK_INSTS        { GCLK }                  /**< \brief (GCLK) Instances List */

+

+#define NVMCTRL           ((Nvmctrl  *)0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define NVMCTRL_INST_NUM  1                         /**< \brief (NVMCTRL) Number of instances */

+#define NVMCTRL_INSTS     { NVMCTRL }               /**< \brief (NVMCTRL) Instances List */

+

+#define PAC0              ((Pac      *)0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1              ((Pac      *)0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2              ((Pac      *)0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PAC_INST_NUM      3                         /**< \brief (PAC) Number of instances */

+#define PAC_INSTS         { PAC0, PAC1, PAC2 }      /**< \brief (PAC) Instances List */

+

+#define PM                ((Pm       *)0x40000400U) /**< \brief (PM) APB Base Address */

+#define PM_INST_NUM       1                         /**< \brief (PM) Number of instances */

+#define PM_INSTS          { PM }                    /**< \brief (PM) Instances List */

+

+#define PORT              ((Port     *)0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS        ((Port     *)0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define PORT_INST_NUM     1                         /**< \brief (PORT) Number of instances */

+#define PORT_INSTS        { PORT }                  /**< \brief (PORT) Instances List */

+

+#define RTC               ((Rtc      *)0x40001400U) /**< \brief (RTC) APB Base Address */

+#define RTC_INST_NUM      1                         /**< \brief (RTC) Number of instances */

+#define RTC_INSTS         { RTC }                   /**< \brief (RTC) Instances List */

+

+#define SERCOM0           ((Sercom   *)0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1           ((Sercom   *)0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2           ((Sercom   *)0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3           ((Sercom   *)0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM4           ((Sercom   *)0x42001800U) /**< \brief (SERCOM4) APB Base Address */

+#define SERCOM5           ((Sercom   *)0x42001C00U) /**< \brief (SERCOM5) APB Base Address */

+#define SERCOM_INST_NUM   6                         /**< \brief (SERCOM) Number of instances */

+#define SERCOM_INSTS      { SERCOM0, SERCOM1, SERCOM2, SERCOM3, SERCOM4, SERCOM5 } /**< \brief (SERCOM) Instances List */

+

+#define SYSCTRL           ((Sysctrl  *)0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define SYSCTRL_INST_NUM  1                         /**< \brief (SYSCTRL) Number of instances */

+#define SYSCTRL_INSTS     { SYSCTRL }               /**< \brief (SYSCTRL) Instances List */

+

+#define TC0               ((Tc       *)0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1               ((Tc       *)0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2               ((Tc       *)0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3               ((Tc       *)0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4               ((Tc       *)0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5               ((Tc       *)0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC6               ((Tc       *)0x42003800U) /**< \brief (TC6) APB Base Address */

+#define TC7               ((Tc       *)0x42003C00U) /**< \brief (TC7) APB Base Address */

+#define TC_INST_NUM       8                         /**< \brief (TC) Number of instances */

+#define TC_INSTS          { TC0, TC1, TC2, TC3, TC4, TC5, TC6, TC7 } /**< \brief (TC) Instances List */

+

+#define WDT               ((Wdt      *)0x40001000U) /**< \brief (WDT) APB Base Address */

+#define WDT_INST_NUM      1                         /**< \brief (WDT) Number of instances */

+#define WDT_INSTS         { WDT }                   /**< \brief (WDT) Instances List */

+

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+/*@}*/

+

+/* ************************************************************************** */

+/**  PORT DEFINITIONS FOR SAMD20J17 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J17_port PORT Definitions */

+/*@{*/

+

+#include "pio/pio_samd20j17.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  MEMORY MAPPING DEFINITIONS FOR SAMD20J17 */

+/* ************************************************************************** */

+

+#define FLASH_SIZE            0x20000 /* 128 kB */

+#define FLASH_PAGE_SIZE       64

+#define FLASH_NB_OF_PAGES     2048

+#define FLASH_USER_PAGE_SIZE  64

+#define HRAMC0_SIZE           0x4000 /* 16 kB */

+#define FLASH_ADDR            (0x00000000U) /**< FLASH base address */

+#define FLASH_USER_PAGE_ADDR  (0x00800000U) /**< FLASH_USER_PAGE base address */

+#define HRAMC0_ADDR           (0x20000000U) /**< HRAMC0 base address */

+

+/* ************************************************************************** */

+/**  ELECTRICAL DEFINITIONS FOR SAMD20J17 */

+/* ************************************************************************** */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+/*@}*/

+

+#endif /* SAMD20J17_H */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20j18.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20j18.h
new file mode 100644
index 0000000..68a719e
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/include/samd20j18.h
@@ -0,0 +1,508 @@
+/**

+ * \file

+ *

+ * \brief Header file for SAMD20J18

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SAMD20J18_

+#define _SAMD20J18_

+

+/**

+ * \ingroup SAMD20_definitions

+ * \addtogroup SAMD20J18_definitions SAMD20J18 definitions

+ * This file defines all structures and symbols for SAMD20J18:

+ *   - registers and bitfields

+ *   - peripheral base address

+ *   - peripheral ID

+ *   - PIO definitions

+*/

+/*@{*/

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+#if !(defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__))

+#include <stdint.h>

+#ifndef __cplusplus

+typedef volatile const uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile const uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile const uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#else

+typedef volatile       uint32_t RoReg;   /**< Read only 32-bit register (volatile const unsigned int) */

+typedef volatile       uint16_t RoReg16; /**< Read only 16-bit register (volatile const unsigned int) */

+typedef volatile       uint8_t  RoReg8;  /**< Read only  8-bit register (volatile const unsigned int) */

+#endif

+typedef volatile       uint32_t WoReg;   /**< Write only 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t WoReg16; /**< Write only 16-bit register (volatile unsigned int) */

+typedef volatile       uint32_t WoReg8;  /**< Write only  8-bit register (volatile unsigned int) */

+typedef volatile       uint32_t RwReg;   /**< Read-Write 32-bit register (volatile unsigned int) */

+typedef volatile       uint16_t RwReg16; /**< Read-Write 16-bit register (volatile unsigned int) */

+typedef volatile       uint8_t  RwReg8;  /**< Read-Write  8-bit register (volatile unsigned int) */

+#define CAST(type, value) ((type *)(value))

+#define REG_ACCESS(type, address) (*(type*)(address)) /**< C code: Register value */

+#else

+#define CAST(type, value) (value)

+#define REG_ACCESS(type, address) (address) /**< Assembly code: Register address */

+#endif

+

+/* ************************************************************************** */

+/**  CMSIS DEFINITIONS FOR SAMD20J18 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J18_cmsis CMSIS Definitions */

+/*@{*/

+

+/** Interrupt Number Definition */

+typedef enum IRQn

+{

+  /******  Cortex-M0+ Processor Exceptions Numbers *******************************/

+  NonMaskableInt_IRQn      = -14, /**<  2 Non Maskable Interrupt                 */

+  HardFault_IRQn           = -13, /**<  3 Cortex-M0+ Hard Fault Interrupt        */

+  SVCall_IRQn              = -5,  /**< 11 Cortex-M0+ SV Call Interrupt           */

+  PendSV_IRQn              = -2,  /**< 14 Cortex-M0+ Pend SV Interrupt           */

+  SysTick_IRQn             = -1,  /**< 15 Cortex-M0+ System Tick Interrupt       */

+  /******  SAMD20J18-specific Interrupt Numbers ***********************/

+  PM_IRQn                  =  0, /**<  0 SAMD20J18 Power Manager (PM) */

+  SYSCTRL_IRQn             =  1, /**<  1 SAMD20J18 System Control (SYSCTRL) */

+  WDT_IRQn                 =  2, /**<  2 SAMD20J18 Watchdog Timer (WDT) */

+  RTC_IRQn                 =  3, /**<  3 SAMD20J18 Real-Time Counter (RTC) */

+  EIC_IRQn                 =  4, /**<  4 SAMD20J18 External Interrupt Controller (EIC) */

+  NVMCTRL_IRQn             =  5, /**<  5 SAMD20J18 Non-Volatile Memory Controller (NVMCTRL) */

+  EVSYS_IRQn               =  6, /**<  6 SAMD20J18 Event System Interface (EVSYS) */

+  SERCOM0_IRQn             =  7, /**<  7 SAMD20J18 Serial Communication Interface 0 (SERCOM0) */

+  SERCOM1_IRQn             =  8, /**<  8 SAMD20J18 Serial Communication Interface 1 (SERCOM1) */

+  SERCOM2_IRQn             =  9, /**<  9 SAMD20J18 Serial Communication Interface 2 (SERCOM2) */

+  SERCOM3_IRQn             = 10, /**< 10 SAMD20J18 Serial Communication Interface 3 (SERCOM3) */

+  SERCOM4_IRQn             = 11, /**< 11 SAMD20J18 Serial Communication Interface 4 (SERCOM4) */

+  SERCOM5_IRQn             = 12, /**< 12 SAMD20J18 Serial Communication Interface 5 (SERCOM5) */

+  TC0_IRQn                 = 13, /**< 13 SAMD20J18 Basic Timer Counter 0 (TC0) */

+  TC1_IRQn                 = 14, /**< 14 SAMD20J18 Basic Timer Counter 1 (TC1) */

+  TC2_IRQn                 = 15, /**< 15 SAMD20J18 Basic Timer Counter 2 (TC2) */

+  TC3_IRQn                 = 16, /**< 16 SAMD20J18 Basic Timer Counter 3 (TC3) */

+  TC4_IRQn                 = 17, /**< 17 SAMD20J18 Basic Timer Counter 4 (TC4) */

+  TC5_IRQn                 = 18, /**< 18 SAMD20J18 Basic Timer Counter 5 (TC5) */

+  TC6_IRQn                 = 19, /**< 19 SAMD20J18 Basic Timer Counter 6 (TC6) */

+  TC7_IRQn                 = 20, /**< 20 SAMD20J18 Basic Timer Counter 7 (TC7) */

+  ADC_IRQn                 = 21, /**< 21 SAMD20J18 Analog Digital Converter (ADC) */

+  AC_IRQn                  = 22, /**< 22 SAMD20J18 Analog Comparators (AC) */

+  DAC_IRQn                 = 23, /**< 23 SAMD20J18 Digital Analog Converter (DAC) */

+

+  PERIPH_COUNT_IRQn        = 24  /**< Number of peripheral IDs */

+} IRQn_Type;

+

+typedef struct _DeviceVectors

+{

+  /* Stack pointer */

+  void* pvStack;

+

+  /* Cortex-M handlers */

+  void* pfnReset_Handler;

+  void* pfnNMI_Handler;

+  void* pfnHardFault_Handler;

+  void* pfnReservedM12;

+  void* pfnReservedM11;

+  void* pfnReservedM10;

+  void* pfnReservedM9;

+  void* pfnReservedM8;

+  void* pfnReservedM7;

+  void* pfnReservedM6;

+  void* pfnSVC_Handler;

+  void* pfnReservedM4;

+  void* pfnReservedM3;

+  void* pfnPendSV_Handler;

+  void* pfnSysTick_Handler;

+

+  /* Peripheral handlers */

+  void* pfnPM_Handler;                    /*  0 Power Manager */

+  void* pfnSYSCTRL_Handler;               /*  1 System Control */

+  void* pfnWDT_Handler;                   /*  2 Watchdog Timer */

+  void* pfnRTC_Handler;                   /*  3 Real-Time Counter */

+  void* pfnEIC_Handler;                   /*  4 External Interrupt Controller */

+  void* pfnNVMCTRL_Handler;               /*  5 Non-Volatile Memory Controller */

+  void* pfnEVSYS_Handler;                 /*  6 Event System Interface */

+  void* pfnSERCOM0_Handler;               /*  7 Serial Communication Interface 0 */

+  void* pfnSERCOM1_Handler;               /*  8 Serial Communication Interface 1 */

+  void* pfnSERCOM2_Handler;               /*  9 Serial Communication Interface 2 */

+  void* pfnSERCOM3_Handler;               /* 10 Serial Communication Interface 3 */

+  void* pfnSERCOM4_Handler;               /* 11 Serial Communication Interface 4 */

+  void* pfnSERCOM5_Handler;               /* 12 Serial Communication Interface 5 */

+  void* pfnTC0_Handler;                   /* 13 Basic Timer Counter 0 */

+  void* pfnTC1_Handler;                   /* 14 Basic Timer Counter 1 */

+  void* pfnTC2_Handler;                   /* 15 Basic Timer Counter 2 */

+  void* pfnTC3_Handler;                   /* 16 Basic Timer Counter 3 */

+  void* pfnTC4_Handler;                   /* 17 Basic Timer Counter 4 */

+  void* pfnTC5_Handler;                   /* 18 Basic Timer Counter 5 */

+  void* pfnTC6_Handler;                   /* 19 Basic Timer Counter 6 */

+  void* pfnTC7_Handler;                   /* 20 Basic Timer Counter 7 */

+  void* pfnADC_Handler;                   /* 21 Analog Digital Converter */

+  void* pfnAC_Handler;                    /* 22 Analog Comparators */

+  void* pfnDAC_Handler;                   /* 23 Digital Analog Converter */

+} DeviceVectors;

+

+/* Cortex-M0+ processor handlers */

+void Reset_Handler               ( void );

+void NMI_Handler                 ( void );

+void HardFault_Handler           ( void );

+void SVC_Handler                 ( void );

+void PendSV_Handler              ( void );

+void SysTick_Handler             ( void );

+

+/* Peripherals handlers */

+void PM_Handler                  ( void );

+void SYSCTRL_Handler             ( void );

+void WDT_Handler                 ( void );

+void RTC_Handler                 ( void );

+void EIC_Handler                 ( void );

+void NVMCTRL_Handler             ( void );

+void EVSYS_Handler               ( void );

+void SERCOM0_Handler             ( void );

+void SERCOM1_Handler             ( void );

+void SERCOM2_Handler             ( void );

+void SERCOM3_Handler             ( void );

+void SERCOM4_Handler             ( void );

+void SERCOM5_Handler             ( void );

+void TC0_Handler                 ( void );

+void TC1_Handler                 ( void );

+void TC2_Handler                 ( void );

+void TC3_Handler                 ( void );

+void TC4_Handler                 ( void );

+void TC5_Handler                 ( void );

+void TC6_Handler                 ( void );

+void TC7_Handler                 ( void );

+void ADC_Handler                 ( void );

+void AC_Handler                  ( void );

+void DAC_Handler                 ( void );

+

+/*

+ * \brief Configuration of the Cortex-M0+ Processor and Core Peripherals

+ */

+

+#define LITTLE_ENDIAN          1        

+#define __CM0PLUS_REV          1         /*!< Core revision r0p1 */

+#define __MPU_PRESENT          0         /*!< MPU present or not */

+#define __NVIC_PRIO_BITS       2         /*!< Number of bits used for Priority Levels */

+#define __VTOR_PRESENT         1         /*!< VTOR present or not */

+#define __Vendor_SysTickConfig 0         /*!< Set to 1 if different SysTick Config is used */

+

+/**

+ * \brief CMSIS includes

+ */

+

+#include <core_cm0plus.h>

+#if !defined DONT_USE_CMSIS_INIT

+#include "system_samd20.h"

+#endif /* DONT_USE_CMSIS_INIT */

+

+/*@}*/

+

+/* ************************************************************************** */

+/**  SOFTWARE PERIPHERAL API DEFINITION FOR SAMD20J18 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J18_api Peripheral Software API */

+/*@{*/

+

+#include "component/component_ac.h"

+#include "component/component_adc.h"

+#include "component/component_dac.h"

+#include "component/component_dsu.h"

+#include "component/component_eic.h"

+#include "component/component_evsys.h"

+#include "component/component_gclk.h"

+#include "component/component_nvmctrl.h"

+#include "component/component_pac.h"

+#include "component/component_pm.h"

+#include "component/component_port.h"

+#include "component/component_rtc.h"

+#include "component/component_sercom.h"

+#include "component/component_sysctrl.h"

+#include "component/component_tc.h"

+#include "component/component_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  REGISTERS ACCESS DEFINITIONS FOR SAMD20J18 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J18_reg Registers Access Definitions */

+/*@{*/

+

+#include "instance/instance_ac.h"

+#include "instance/instance_adc.h"

+#include "instance/instance_dac.h"

+#include "instance/instance_dsu.h"

+#include "instance/instance_eic.h"

+#include "instance/instance_evsys.h"

+#include "instance/instance_gclk.h"

+#include "instance/instance_nvmctrl.h"

+#include "instance/instance_pac0.h"

+#include "instance/instance_pac1.h"

+#include "instance/instance_pac2.h"

+#include "instance/instance_pm.h"

+#include "instance/instance_port.h"

+#include "instance/instance_rtc.h"

+#include "instance/instance_sercom0.h"

+#include "instance/instance_sercom1.h"

+#include "instance/instance_sercom2.h"

+#include "instance/instance_sercom3.h"

+#include "instance/instance_sercom4.h"

+#include "instance/instance_sercom5.h"

+#include "instance/instance_sysctrl.h"

+#include "instance/instance_tc0.h"

+#include "instance/instance_tc1.h"

+#include "instance/instance_tc2.h"

+#include "instance/instance_tc3.h"

+#include "instance/instance_tc4.h"

+#include "instance/instance_tc5.h"

+#include "instance/instance_tc6.h"

+#include "instance/instance_tc7.h"

+#include "instance/instance_wdt.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  PERIPHERAL ID DEFINITIONS FOR SAMD20J18 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J18_id Peripheral Ids Definitions */

+/*@{*/

+

+// Peripheral instances on HPB0 bridge

+#define ID_PAC0           0 /**< \brief Peripheral Access Controller PAC (PAC0) */

+#define ID_PM             1 /**< \brief Power Manager (PM) */

+#define ID_SYSCTRL        2 /**< \brief System Control (SYSCTRL) */

+#define ID_GCLK           3 /**< \brief Generic Clock Generator (GCLK) */

+#define ID_WDT            4 /**< \brief Watchdog Timer (WDT) */

+#define ID_RTC            5 /**< \brief Real-Time Counter (RTC) */

+#define ID_EIC            6 /**< \brief External Interrupt Controller (EIC) */

+

+// Peripheral instances on HPB1 bridge

+#define ID_PAC1          32 /**< \brief Peripheral Access Controller PAC (PAC1) */

+#define ID_DSU           33 /**< \brief Device Service Unit (DSU) */

+#define ID_NVMCTRL       34 /**< \brief Non-Volatile Memory Controller (NVMCTRL) */

+#define ID_PORT          35 /**< \brief Port Module (PORT) */

+

+// Peripheral instances on HPB2 bridge

+#define ID_PAC2          64 /**< \brief Peripheral Access Controller PAC (PAC2) */

+#define ID_EVSYS         65 /**< \brief Event System Interface (EVSYS) */

+#define ID_SERCOM0       66 /**< \brief Serial Communication Interface SERCOM (SERCOM0) */

+#define ID_SERCOM1       67 /**< \brief Serial Communication Interface SERCOM (SERCOM1) */

+#define ID_SERCOM2       68 /**< \brief Serial Communication Interface SERCOM (SERCOM2) */

+#define ID_SERCOM3       69 /**< \brief Serial Communication Interface SERCOM (SERCOM3) */

+#define ID_SERCOM4       70 /**< \brief Serial Communication Interface SERCOM (SERCOM4) */

+#define ID_SERCOM5       71 /**< \brief Serial Communication Interface SERCOM (SERCOM5) */

+#define ID_TC0           72 /**< \brief Basic Timer Counter TC (TC0) */

+#define ID_TC1           73 /**< \brief Basic Timer Counter TC (TC1) */

+#define ID_TC2           74 /**< \brief Basic Timer Counter TC (TC2) */

+#define ID_TC3           75 /**< \brief Basic Timer Counter TC (TC3) */

+#define ID_TC4           76 /**< \brief Basic Timer Counter TC (TC4) */

+#define ID_TC5           77 /**< \brief Basic Timer Counter TC (TC5) */

+#define ID_TC6           78 /**< \brief Basic Timer Counter TC (TC6) */

+#define ID_TC7           79 /**< \brief Basic Timer Counter TC (TC7) */

+#define ID_ADC           80 /**< \brief Analog Digital Converter (ADC) */

+#define ID_AC            81 /**< \brief Analog Comparators (AC) */

+#define ID_DAC           82 /**< \brief Digital Analog Converter (DAC) */

+

+#define ID_PERIPH_COUNT  83 /**< \brief Number of peripheral IDs */

+/*@}*/

+

+/* ************************************************************************** */

+/**  BASE ADDRESS DEFINITIONS FOR SAMD20J18 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J18_base Peripheral Base Address Definitions */

+/*@{*/

+

+#if defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)

+#define AC                            (0x42004400U) /**< \brief (AC) APB Base Address */

+#define ADC                           (0x42004000U) /**< \brief (ADC) APB Base Address */

+#define DAC                           (0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DSU                           (0x41002000U) /**< \brief (DSU) APB Base Address */

+#define EIC                           (0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EVSYS                         (0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define GCLK                          (0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define NVMCTRL                       (0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define PAC0                          (0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1                          (0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2                          (0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PM                            (0x40000400U) /**< \brief (PM) APB Base Address */

+#define PORT                          (0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS                    (0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define RTC                           (0x40001400U) /**< \brief (RTC) APB Base Address */

+#define SERCOM0                       (0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1                       (0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2                       (0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3                       (0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM4                       (0x42001800U) /**< \brief (SERCOM4) APB Base Address */

+#define SERCOM5                       (0x42001C00U) /**< \brief (SERCOM5) APB Base Address */

+#define SYSCTRL                       (0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define TC0                           (0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1                           (0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2                           (0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3                           (0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4                           (0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5                           (0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC6                           (0x42003800U) /**< \brief (TC6) APB Base Address */

+#define TC7                           (0x42003C00U) /**< \brief (TC7) APB Base Address */

+#define WDT                           (0x40001000U) /**< \brief (WDT) APB Base Address */

+#else

+#define AC                ((Ac       *)0x42004400U) /**< \brief (AC) APB Base Address */

+#define AC_INST_NUM       1                         /**< \brief (AC) Number of instances */

+#define AC_INSTS          { AC }                    /**< \brief (AC) Instances List */

+

+#define ADC               ((Adc      *)0x42004000U) /**< \brief (ADC) APB Base Address */

+#define ADC_INST_NUM      1                         /**< \brief (ADC) Number of instances */

+#define ADC_INSTS         { ADC }                   /**< \brief (ADC) Instances List */

+

+#define DAC               ((Dac      *)0x42004800U) /**< \brief (DAC) APB Base Address */

+#define DAC_INST_NUM      1                         /**< \brief (DAC) Number of instances */

+#define DAC_INSTS         { DAC }                   /**< \brief (DAC) Instances List */

+

+#define DSU               ((Dsu      *)0x41002000U) /**< \brief (DSU) APB Base Address */

+#define DSU_INST_NUM      1                         /**< \brief (DSU) Number of instances */

+#define DSU_INSTS         { DSU }                   /**< \brief (DSU) Instances List */

+

+#define EIC               ((Eic      *)0x40001800U) /**< \brief (EIC) APB Base Address */

+#define EIC_INST_NUM      1                         /**< \brief (EIC) Number of instances */

+#define EIC_INSTS         { EIC }                   /**< \brief (EIC) Instances List */

+

+#define EVSYS             ((Evsys    *)0x42000400U) /**< \brief (EVSYS) APB Base Address */

+#define EVSYS_INST_NUM    1                         /**< \brief (EVSYS) Number of instances */

+#define EVSYS_INSTS       { EVSYS }                 /**< \brief (EVSYS) Instances List */

+

+#define GCLK              ((Gclk     *)0x40000C00U) /**< \brief (GCLK) APB Base Address */

+#define GCLK_INST_NUM     1                         /**< \brief (GCLK) Number of instances */

+#define GCLK_INSTS        { GCLK }                  /**< \brief (GCLK) Instances List */

+

+#define NVMCTRL           ((Nvmctrl  *)0x41004000U) /**< \brief (NVMCTRL) APB Base Address */

+#define NVMCTRL_CAL                   (0x00800000U) /**< \brief (NVMCTRL) CAL Base Address */

+#define NVMCTRL_LOCKBIT               (0x00802000U) /**< \brief (NVMCTRL) LOCKBIT Base Address */

+#define NVMCTRL_OTP1                  (0x00806000U) /**< \brief (NVMCTRL) OTP1 Base Address */

+#define NVMCTRL_OTP2                  (0x00806008U) /**< \brief (NVMCTRL) OTP2 Base Address */

+#define NVMCTRL_OTP4                  (0x00806020U) /**< \brief (NVMCTRL) OTP4 Base Address */

+#define NVMCTRL_USER                  (0x00804000U) /**< \brief (NVMCTRL) USER Base Address */

+#define NVMCTRL_INST_NUM  1                         /**< \brief (NVMCTRL) Number of instances */

+#define NVMCTRL_INSTS     { NVMCTRL }               /**< \brief (NVMCTRL) Instances List */

+

+#define PAC0              ((Pac      *)0x40000000U) /**< \brief (PAC0) APB Base Address */

+#define PAC1              ((Pac      *)0x41000000U) /**< \brief (PAC1) APB Base Address */

+#define PAC2              ((Pac      *)0x42000000U) /**< \brief (PAC2) APB Base Address */

+#define PAC_INST_NUM      3                         /**< \brief (PAC) Number of instances */

+#define PAC_INSTS         { PAC0, PAC1, PAC2 }      /**< \brief (PAC) Instances List */

+

+#define PM                ((Pm       *)0x40000400U) /**< \brief (PM) APB Base Address */

+#define PM_INST_NUM       1                         /**< \brief (PM) Number of instances */

+#define PM_INSTS          { PM }                    /**< \brief (PM) Instances List */

+

+#define PORT              ((Port     *)0x41004400U) /**< \brief (PORT) APB Base Address */

+#define PORT_IOBUS        ((Port     *)0x60000000U) /**< \brief (PORT) IOBUS Base Address */

+#define PORT_INST_NUM     1                         /**< \brief (PORT) Number of instances */

+#define PORT_INSTS        { PORT }                  /**< \brief (PORT) Instances List */

+

+#define RTC               ((Rtc      *)0x40001400U) /**< \brief (RTC) APB Base Address */

+#define RTC_INST_NUM      1                         /**< \brief (RTC) Number of instances */

+#define RTC_INSTS         { RTC }                   /**< \brief (RTC) Instances List */

+

+#define SERCOM0           ((Sercom   *)0x42000800U) /**< \brief (SERCOM0) APB Base Address */

+#define SERCOM1           ((Sercom   *)0x42000C00U) /**< \brief (SERCOM1) APB Base Address */

+#define SERCOM2           ((Sercom   *)0x42001000U) /**< \brief (SERCOM2) APB Base Address */

+#define SERCOM3           ((Sercom   *)0x42001400U) /**< \brief (SERCOM3) APB Base Address */

+#define SERCOM4           ((Sercom   *)0x42001800U) /**< \brief (SERCOM4) APB Base Address */

+#define SERCOM5           ((Sercom   *)0x42001C00U) /**< \brief (SERCOM5) APB Base Address */

+#define SERCOM_INST_NUM   6                         /**< \brief (SERCOM) Number of instances */

+#define SERCOM_INSTS      { SERCOM0, SERCOM1, SERCOM2, SERCOM3, SERCOM4, SERCOM5 } /**< \brief (SERCOM) Instances List */

+

+#define SYSCTRL           ((Sysctrl  *)0x40000800U) /**< \brief (SYSCTRL) APB Base Address */

+#define SYSCTRL_INST_NUM  1                         /**< \brief (SYSCTRL) Number of instances */

+#define SYSCTRL_INSTS     { SYSCTRL }               /**< \brief (SYSCTRL) Instances List */

+

+#define TC0               ((Tc       *)0x42002000U) /**< \brief (TC0) APB Base Address */

+#define TC1               ((Tc       *)0x42002400U) /**< \brief (TC1) APB Base Address */

+#define TC2               ((Tc       *)0x42002800U) /**< \brief (TC2) APB Base Address */

+#define TC3               ((Tc       *)0x42002C00U) /**< \brief (TC3) APB Base Address */

+#define TC4               ((Tc       *)0x42003000U) /**< \brief (TC4) APB Base Address */

+#define TC5               ((Tc       *)0x42003400U) /**< \brief (TC5) APB Base Address */

+#define TC6               ((Tc       *)0x42003800U) /**< \brief (TC6) APB Base Address */

+#define TC7               ((Tc       *)0x42003C00U) /**< \brief (TC7) APB Base Address */

+#define TC_INST_NUM       8                         /**< \brief (TC) Number of instances */

+#define TC_INSTS          { TC0, TC1, TC2, TC3, TC4, TC5, TC6, TC7 } /**< \brief (TC) Instances List */

+

+#define WDT               ((Wdt      *)0x40001000U) /**< \brief (WDT) APB Base Address */

+#define WDT_INST_NUM      1                         /**< \brief (WDT) Number of instances */

+#define WDT_INSTS         { WDT }                   /**< \brief (WDT) Instances List */

+

+#endif /* (defined(__ASSEMBLY__) || defined(__IAR_SYSTEMS_ASM__)) */

+/*@}*/

+

+/* ************************************************************************** */

+/**  PORT DEFINITIONS FOR SAMD20J18 */

+/* ************************************************************************** */

+/** \defgroup SAMD20J18_port PORT Definitions */

+/*@{*/

+

+#include "pio/pio_samd20j18.h"

+/*@}*/

+

+/* ************************************************************************** */

+/**  MEMORY MAPPING DEFINITIONS FOR SAMD20J18 */

+/* ************************************************************************** */

+

+#define FLASH_SIZE            0x40000 /* 256 kB */

+#define FLASH_PAGE_SIZE       64

+#define FLASH_NB_OF_PAGES     4096

+#define FLASH_USER_PAGE_SIZE  64

+#define HRAMC0_SIZE           0x8000 /* 32 kB */

+#define FLASH_ADDR            (0x00000000U) /**< FLASH base address */

+#define FLASH_USER_PAGE_ADDR  (0x00800000U) /**< FLASH_USER_PAGE base address */

+#define HRAMC0_ADDR           (0x20000000U) /**< HRAMC0 base address */

+

+/* ************************************************************************** */

+/**  ELECTRICAL DEFINITIONS FOR SAMD20J18 */

+/* ************************************************************************** */

+

+

+#ifdef __cplusplus

+}

+#endif

+

+/*@}*/

+

+#endif /* SAMD20J18_H */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/source/gcc/startup_samd20.c b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/source/gcc/startup_samd20.c
new file mode 100644
index 0000000..85722cf
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/source/gcc/startup_samd20.c
@@ -0,0 +1,193 @@
+/**

+ * \file

+ *

+ * \brief GCC start-up implementation for the SAM D20

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#include "samd20.h"

+

+/* Initialize segments */

+extern uint32_t _sfixed;

+extern uint32_t _efixed;

+extern uint32_t _etext;

+extern uint32_t _srelocate;

+extern uint32_t _erelocate;

+extern uint32_t _szero;

+extern uint32_t _ezero;

+extern uint32_t _sstack;

+extern uint32_t _estack;

+

+/** \cond DOXYGEN_SHOULD_SKIP_THIS */

+int main(void);

+/** \endcond */

+

+void __libc_init_array(void);

+

+/* Default empty handler */

+void Dummy_Handler(void);

+

+/* Cortex-M0+ core handlers */

+void NMI_Handler             ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void HardFault_Handler       ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void SVC_Handler             ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void PendSV_Handler          ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void SysTick_Handler         ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+

+/* Peripherals handlers */

+void PM_Handler              ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void SYSCTRL_Handler         ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void WDT_Handler             ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void RTC_Handler             ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void EIC_Handler             ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void NVMCTRL_Handler         ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void EVSYS_Handler           ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void SERCOM0_Handler         ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void SERCOM1_Handler         ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void SERCOM2_Handler         ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void SERCOM3_Handler         ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void SERCOM4_Handler         ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void SERCOM5_Handler         ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void TC0_Handler             ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void TC1_Handler             ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void TC2_Handler             ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void TC3_Handler             ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void TC4_Handler             ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void TC5_Handler             ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void TC6_Handler             ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void TC7_Handler             ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void ADC_Handler             ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void AC_Handler              ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+void DAC_Handler             ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

+

+/* Exception Table */

+__attribute__ ((section(".vectors")))

+const DeviceVectors exception_table = {

+

+        /* Configure Initial Stack Pointer, using linker-generated symbols */

+        (void*) (&_estack),

+

+        (void*) Reset_Handler,

+        (void*) NMI_Handler,

+        (void*) HardFault_Handler,

+        (void*) (0UL), /* Reserved */

+        (void*) (0UL), /* Reserved */

+        (void*) (0UL), /* Reserved */

+        (void*) (0UL), /* Reserved */

+        (void*) (0UL), /* Reserved */

+        (void*) (0UL), /* Reserved */

+        (void*) (0UL), /* Reserved */

+        (void*) SVC_Handler,

+        (void*) (0UL), /* Reserved */

+        (void*) (0UL), /* Reserved */

+        (void*) PendSV_Handler,

+        (void*) SysTick_Handler,

+

+        /* Configurable interrupts */

+        (void*) PM_Handler,             /*  0 Power Manager */

+        (void*) SYSCTRL_Handler,        /*  1 System Control */

+        (void*) WDT_Handler,            /*  2 Watchdog Timer */

+        (void*) RTC_Handler,            /*  3 Real-Time Counter */

+        (void*) EIC_Handler,            /*  4 External Interrupt Controller */

+        (void*) NVMCTRL_Handler,        /*  5 Non-Volatile Memory Controller */

+        (void*) EVSYS_Handler,          /*  6 Event System Interface */

+        (void*) SERCOM0_Handler,        /*  7 Serial Communication Interface 0 */

+        (void*) SERCOM1_Handler,        /*  8 Serial Communication Interface 1 */

+        (void*) SERCOM2_Handler,        /*  9 Serial Communication Interface 2 */

+        (void*) SERCOM3_Handler,        /* 10 Serial Communication Interface 3 */

+        (void*) SERCOM4_Handler,        /* 11 Serial Communication Interface 4 */

+        (void*) SERCOM5_Handler,        /* 12 Serial Communication Interface 5 */

+        (void*) TC0_Handler,            /* 13 Basic Timer Counter 0 */

+        (void*) TC1_Handler,            /* 14 Basic Timer Counter 1 */

+        (void*) TC2_Handler,            /* 15 Basic Timer Counter 2 */

+        (void*) TC3_Handler,            /* 16 Basic Timer Counter 3 */

+        (void*) TC4_Handler,            /* 17 Basic Timer Counter 4 */

+        (void*) TC5_Handler,            /* 18 Basic Timer Counter 5 */

+        (void*) TC6_Handler,            /* 19 Basic Timer Counter 6 */

+        (void*) TC7_Handler,            /* 20 Basic Timer Counter 7 */

+        (void*) ADC_Handler,            /* 21 Analog Digital Converter */

+        (void*) AC_Handler,             /* 22 Analog Comparators */

+        (void*) DAC_Handler             /* 23 Digital Analog Converter */

+};

+

+/**

+ * \brief This is the code that gets called on processor reset.

+ * To initialize the device, and call the main() routine.

+ */

+void Reset_Handler(void)

+{

+        uint32_t *pSrc, *pDest;

+

+        /* Initialize the relocate segment */

+        pSrc = &_etext;

+        pDest = &_srelocate;

+

+        if (pSrc != pDest) {

+                for (; pDest < &_erelocate;) {

+                        *pDest++ = *pSrc++;

+                }

+        }

+

+        /* Clear the zero segment */

+        for (pDest = &_szero; pDest < &_ezero;) {

+                *pDest++ = 0;

+        }

+

+        /* Set the vector table base address */

+        pSrc = (uint32_t *) & _sfixed;

+        SCB->VTOR = ((uint32_t) pSrc & SCB_VTOR_TBLOFF_Msk);

+

+        /* Initialize the C library */

+        __libc_init_array();

+

+        /* Branch to main function */

+        main();

+

+        /* Infinite loop */

+        while (1);

+}

+

+/**

+ * \brief Default interrupt handler for unused IRQs.

+ */

+void Dummy_Handler(void)

+{

+        while (1) {

+        }

+}

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/source/system_samd20.c b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/source/system_samd20.c
new file mode 100644
index 0000000..e0ada3e
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/source/system_samd20.c
@@ -0,0 +1,78 @@
+/**

+ * \file

+ *

+ * \brief Low-level initialization functions called upon chip startup.

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#include "samd20.h"

+

+/**

+ * Initial system clock frequency. The System RC Oscillator (RCSYS) provides

+ *  the source for the main clock at chip startup.

+ */

+#define __SYSTEM_CLOCK    (8000000)

+

+uint32_t SystemCoreClock = __SYSTEM_CLOCK;/*!< System Clock Frequency (Core Clock)*/

+

+/**

+ * Initialize the system

+ *

+ * @brief  Setup the microcontroller system.

+ *         Initialize the System and update the SystemCoreClock variable.

+ */

+void SystemInit(void)

+{

+	// Keep the default device state after reset

+	SystemCoreClock = __SYSTEM_CLOCK;

+	return;

+}

+

+/**

+ * Update SystemCoreClock variable

+ *

+ * @brief  Updates the SystemCoreClock with current core Clock

+ *         retrieved from cpu registers.

+ */

+void SystemCoreClockUpdate(void)

+{

+	// Not implemented

+	SystemCoreClock = __SYSTEM_CLOCK;

+	return;

+}

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/source/system_samd20.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/source/system_samd20.h
new file mode 100644
index 0000000..cadcceb
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/cmsis/samd20/source/system_samd20.h
@@ -0,0 +1,62 @@
+/**

+ * \file

+ *

+ * \brief Low-level initialization functions called upon chip startup

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+#ifndef _SYSTEM_SAMD20_H_INCLUDED_

+#define _SYSTEM_SAMD20_H_INCLUDED_

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+#include <stdint.h>

+

+extern uint32_t SystemCoreClock;   /*!< System Clock Frequency (Core Clock)  */

+

+void SystemInit(void);

+void SystemCoreClockUpdate(void);

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif /* SYSTEM_SAMD20_H_INCLUDED */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/compiler.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/compiler.h
new file mode 100644
index 0000000..34a803f
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/compiler.h
@@ -0,0 +1,1149 @@
+/**

+ * \file

+ *

+ * \brief Commonly used includes, types and macros.

+ *

+ * Copyright (C) 2012-2013 Atmel Corporation. All rights reserved.

+ *

+ * \asf_license_start

+ *

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

+ *

+ */

+

+#ifndef UTILS_COMPILER_H_INCLUDED

+#define UTILS_COMPILER_H_INCLUDED

+

+/**

+ * \defgroup group_sam0_utils Compiler abstraction layer and code utilities

+ *

+ * Compiler abstraction layer and code utilities for AT91SAMD20.

+ * This module provides various abstraction layers and utilities to make code compatible between different compilers.

+ *

+ * @{

+ */

+

+#if (defined __ICCARM__)

+#  include <intrinsics.h>

+#endif

+

+#include <stddef.h>

+#include <parts.h>

+#include <status_codes.h>

+#include <preprocessor.h>

+#include <io.h>

+

+#ifndef __ASSEMBLY__

+

+#include <stdio.h>

+#include <stdbool.h>

+#include <stdint.h>

+#include <stdlib.h>

+

+/**

+ * \def UNUSED

+ * \brief Marking \a v as a unused parameter or value.

+ */

+#define UNUSED(v)          (void)(v)

+

+/**

+ * \def barrier

+ * \brief Memory barrier

+ */

+#ifdef __GNUC__

+#  define barrier()        asm volatile("" ::: "memory")

+#else

+#  define barrier()        asm ("")

+#endif

+

+/**

+ * \brief Emit the compiler pragma \a arg.

+ *

+ * \param[in] arg  The pragma directive as it would appear after \e \#pragma

+ *             (i.e. not stringified).

+ */

+#define COMPILER_PRAGMA(arg)          _Pragma(#arg)

+

+/**

+ * \def COMPILER_PACK_SET(alignment)

+ * \brief Set maximum alignment for subsequent struct and union definitions to \a alignment.

+ */

+#define COMPILER_PACK_SET(alignment)  COMPILER_PRAGMA(pack(alignment))

+

+/**

+ * \def COMPILER_PACK_RESET()

+ * \brief Set default alignment for subsequent struct and union definitions.

+ */

+#define COMPILER_PACK_RESET()         COMPILER_PRAGMA(pack())

+

+

+/**

+ * \brief Set aligned boundary.

+ */

+#if (defined __GNUC__) || (defined __CC_ARM)

+#   define COMPILER_ALIGNED(a)        __attribute__((__aligned__(a)))

+#elif (defined __ICCARM__)

+#   define COMPILER_ALIGNED(a)        COMPILER_PRAGMA(data_alignment = a)

+#endif

+

+/**

+ * \brief Set word-aligned boundary.

+ */

+#if (defined __GNUC__) || defined(__CC_ARM)

+#define COMPILER_WORD_ALIGNED         __attribute__((__aligned__(4)))

+#elif (defined __ICCARM__)

+#define COMPILER_WORD_ALIGNED         COMPILER_PRAGMA(data_alignment = 4)

+#endif

+

+/**

+ * \def __always_inline

+ * \brief The function should always be inlined.

+ *

+ * This annotation instructs the compiler to ignore its inlining

+ * heuristics and inline the function no matter how big it thinks it

+ * becomes.

+ */

+#if defined(__CC_ARM)

+#  define __always_inline             __forceinline

+#elif (defined __GNUC__)

+#  define __always_inline             __attribute__((__always_inline__))

+#elif (defined __ICCARM__)

+#  define __always_inline             _Pragma("inline=forced")

+#endif

+

+/**

+ * \def __no_inline

+ * \brief The function should never be inlined

+ *

+ * This annotation instructs the compiler to ignore its inlining

+ * heuristics and not inline the function no matter how small it thinks it

+ * becomes.

+ */

+#if defined(__CC_ARM)

+#  define __no_inline                 __attribute__((noinline))

+#elif (defined __GNUC__)

+#  define __no_inline                 __attribute__((noinline))

+#elif (defined __ICCARM__)

+#  define __no_inline                 _Pragma("inline=never")

+#endif

+

+

+/** \brief This macro is used to test fatal errors.

+ *

+ * The macro tests if the expression is false. If it is, a fatal error is

+ * detected and the application hangs up. If \c TEST_SUITE_DEFINE_ASSERT_MACRO

+ * is defined, a unit test version of the macro is used, to allow execution

+ * of further tests after a false expression.

+ *

+ * \param[in] expr  Expression to evaluate and supposed to be nonzero.

+ */

+#if defined(_ASSERT_ENABLE_)

+#  if defined(TEST_SUITE_DEFINE_ASSERT_MACRO)

+#    include "unit_test/suite.h"

+#  else

+#    undef TEST_SUITE_DEFINE_ASSERT_MACRO

+#    define Assert(expr) \

+        {\

+           if (!(expr)) asm("BKPT #0");\

+        }

+#  endif

+#else

+#  define Assert(expr) ((void) 0)

+#endif

+

+/* Define WEAK attribute */

+#if defined   ( __CC_ARM   )

+#   define WEAK __attribute__ ((weak))

+#elif defined ( __ICCARM__ )

+#   define WEAK __weak

+#elif defined (  __GNUC__  )

+#   define WEAK __attribute__ ((weak))

+#endif

+

+/* Define NO_INIT attribute */

+#if defined   ( __CC_ARM   )

+#   define NO_INIT __attribute__((zero_init))

+#elif defined ( __ICCARM__ )

+#   define NO_INIT __no_init

+#elif defined (  __GNUC__  )

+#   define NO_INIT __attribute__((section(".no_init")))

+#endif

+

+#include "interrupt.h"

+

+/** \name Usual Types

+ * @{ */

+#ifndef __cplusplus

+#  if !defined(__bool_true_false_are_defined)

+typedef unsigned char           bool;

+#  endif

+#endif

+typedef uint16_t                le16_t;

+typedef uint16_t                be16_t;

+typedef uint32_t                le32_t;

+typedef uint32_t                be32_t;

+typedef uint32_t                iram_size_t;

+/** @} */

+

+/** \name Aliasing Aggregate Types

+ * @{ */

+

+/** 16-bit union. */

+typedef union

+{

+  int16_t  s16;

+  uint16_t u16;

+  int8_t   int8_t[2];

+  uint8_t  uint8_t[2];

+} Union16;

+

+/** 32-bit union. */

+typedef union

+{

+  int32_t  s32;

+  uint32_t u32;

+  int16_t  s16[2];

+  uint16_t u16[2];

+  int8_t   int8_t[4];

+  uint8_t  uint8_t[4];

+} Union32;

+

+/** 64-bit union. */

+typedef union

+{

+  int64_t  s64;

+  uint64_t u64;

+  int32_t  s32[2];

+  uint32_t u32[2];

+  int16_t  s16[4];

+  uint16_t u16[4];

+  int8_t   int8_t[8];

+  uint8_t  uint8_t[8];

+} Union64;

+

+/** Union of pointers to 64-, 32-, 16- and 8-bit unsigned integers. */

+typedef union

+{

+  int64_t  *s64ptr;

+  uint64_t *u64ptr;

+  int32_t  *s32ptr;

+  uint32_t *u32ptr;

+  int16_t  *s16ptr;

+  uint16_t *u16ptr;

+  int8_t   *s8ptr;

+  uint8_t  *u8ptr;

+} UnionPtr;

+

+/** Union of pointers to volatile 64-, 32-, 16- and 8-bit unsigned integers. */

+typedef union

+{

+  volatile int64_t  *s64ptr;

+  volatile uint64_t *u64ptr;

+  volatile int32_t  *s32ptr;

+  volatile uint32_t *u32ptr;

+  volatile int16_t  *s16ptr;

+  volatile uint16_t *u16ptr;

+  volatile int8_t   *s8ptr;

+  volatile uint8_t  *u8ptr;

+} UnionVPtr;

+

+/** Union of pointers to constant 64-, 32-, 16- and 8-bit unsigned integers. */

+typedef union

+{

+  const int64_t  *s64ptr;

+  const uint64_t *u64ptr;

+  const int32_t  *s32ptr;

+  const uint32_t *u32ptr;

+  const int16_t  *s16ptr;

+  const uint16_t *u16ptr;

+  const int8_t   *s8ptr;

+  const uint8_t  *u8ptr;

+} UnionCPtr;

+

+/** Union of pointers to constant volatile 64-, 32-, 16- and 8-bit unsigned integers. */

+typedef union

+{

+  const volatile int64_t  *s64ptr;

+  const volatile uint64_t *u64ptr;

+  const volatile int32_t  *s32ptr;

+  const volatile uint32_t *u32ptr;

+  const volatile int16_t  *s16ptr;

+  const volatile uint16_t *u16ptr;

+  const volatile int8_t   *s8ptr;

+  const volatile uint8_t  *u8ptr;

+} UnionCVPtr;

+

+/** Structure of pointers to 64-, 32-, 16- and 8-bit unsigned integers. */

+typedef struct

+{

+  int64_t  *s64ptr;

+  uint64_t *u64ptr;

+  int32_t  *s32ptr;

+  uint32_t *u32ptr;

+  int16_t  *s16ptr;

+  uint16_t *u16ptr;

+  int8_t   *s8ptr;

+  uint8_t  *u8ptr;

+} StructPtr;

+

+/** Structure of pointers to volatile 64-, 32-, 16- and 8-bit unsigned integers. */

+typedef struct

+{

+  volatile int64_t  *s64ptr;

+  volatile uint64_t *u64ptr;

+  volatile int32_t  *s32ptr;

+  volatile uint32_t *u32ptr;

+  volatile int16_t  *s16ptr;

+  volatile uint16_t *u16ptr;

+  volatile int8_t   *s8ptr;

+  volatile uint8_t  *u8ptr;

+} StructVPtr;

+

+/** Structure of pointers to constant 64-, 32-, 16- and 8-bit unsigned integers. */

+typedef struct

+{

+  const int64_t  *s64ptr;

+  const uint64_t *u64ptr;

+  const int32_t  *s32ptr;

+  const uint32_t *u32ptr;

+  const int16_t  *s16ptr;

+  const uint16_t *u16ptr;

+  const int8_t   *s8ptr;

+  const uint8_t  *u8ptr;

+} StructCPtr;

+

+/** Structure of pointers to constant volatile 64-, 32-, 16- and 8-bit unsigned integers. */

+typedef struct

+{

+  const volatile int64_t  *s64ptr;

+  const volatile uint64_t *u64ptr;

+  const volatile int32_t  *s32ptr;

+  const volatile uint32_t *u32ptr;

+  const volatile int16_t  *s16ptr;

+  const volatile uint16_t *u16ptr;

+  const volatile int8_t   *s8ptr;

+  const volatile uint8_t  *u8ptr;

+} StructCVPtr;

+

+/** @} */

+

+#endif  /* #ifndef __ASSEMBLY__ */

+

+/** \name Usual Constants

+ * @{ */

+#define DISABLE   0

+#define ENABLE    1

+

+#ifndef __cplusplus

+#  if !defined(__bool_true_false_are_defined)

+#    define false     0

+#    define true      1

+#  endif

+#endif

+/** @} */

+

+#ifndef __ASSEMBLY__

+

+/** \name Optimization Control

+ * @{ */

+

+/**

+ * \def likely(exp)

+ * \brief The expression \a exp is likely to be true

+ */

+#if !defined(likely) || defined(__DOXYGEN__)

+#   define likely(exp)    (exp)

+#endif

+

+/**

+ * \def unlikely(exp)

+ * \brief The expression \a exp is unlikely to be true

+ */

+#if !defined(unlikely) || defined(__DOXYGEN__)

+#   define unlikely(exp)  (exp)

+#endif

+

+/**

+ * \def is_constant(exp)

+ * \brief Determine if an expression evaluates to a constant value.

+ *

+ * \param[in] exp Any expression

+ *

+ * \return true if \a exp is constant, false otherwise.

+ */

+#if (defined __GNUC__) || (defined __CC_ARM)

+#   define is_constant(exp)       __builtin_constant_p(exp)

+#else

+#   define is_constant(exp)       (0)

+#endif

+

+/** @} */

+

+/** \name Bit-Field Handling

+ * @{ */

+

+/*! \brief Reads the bits of a value specified by a given bit-mask.

+ *

+ * \param[in] value Value to read bits from.

+ * \param[in] mask  Bit-mask indicating bits to read.

+ *

+ * \return Read bits.

+ */

+#define Rd_bits( value, mask)        ((value) & (mask))

+

+/*! \brief Writes the bits of a C lvalue specified by a given bit-mask.

+ *

+ * \param[in] lvalue  C lvalue to write bits to.

+ * \param[in] mask    Bit-mask indicating bits to write.

+ * \param[in] bits    Bits to write.

+ *

+ * \return Resulting value with written bits.

+ */

+#define Wr_bits(lvalue, mask, bits)  ((lvalue) = ((lvalue) & ~(mask)) |\

+                                                 ((bits  ) &  (mask)))

+

+/*! \brief Tests the bits of a value specified by a given bit-mask.

+ *

+ * \param[in] value Value of which to test bits.

+ * \param[in] mask  Bit-mask indicating bits to test.

+ *

+ * \return \c 1 if at least one of the tested bits is set, else \c 0.

+ */

+#define Tst_bits( value, mask)  (Rd_bits(value, mask) != 0)

+

+/*! \brief Clears the bits of a C lvalue specified by a given bit-mask.

+ *

+ * \param[in] lvalue  C lvalue of which to clear bits.

+ * \param[in] mask    Bit-mask indicating bits to clear.

+ *

+ * \return Resulting value with cleared bits.

+ */

+#define Clr_bits(lvalue, mask)  ((lvalue) &= ~(mask))

+

+/*! \brief Sets the bits of a C lvalue specified by a given bit-mask.

+ *

+ * \param[in] lvalue  C lvalue of which to set bits.

+ * \param[in] mask    Bit-mask indicating bits to set.

+ *

+ * \return Resulting value with set bits.

+ */

+#define Set_bits(lvalue, mask)  ((lvalue) |=  (mask))

+

+/*! \brief Toggles the bits of a C lvalue specified by a given bit-mask.

+ *

+ * \param[in] lvalue  C lvalue of which to toggle bits.

+ * \param[in] mask    Bit-mask indicating bits to toggle.

+ *

+ * \return Resulting value with toggled bits.

+ */

+#define Tgl_bits(lvalue, mask)  ((lvalue) ^=  (mask))

+

+/*! \brief Reads the bit-field of a value specified by a given bit-mask.

+ *

+ * \param[in] value Value to read a bit-field from.

+ * \param[in] mask  Bit-mask indicating the bit-field to read.

+ *

+ * \return Read bit-field.

+ */

+#define Rd_bitfield( value, mask)           (Rd_bits( value, mask) >> ctz(mask))

+

+/*! \brief Writes the bit-field of a C lvalue specified by a given bit-mask.

+ *

+ * \param[in] lvalue    C lvalue to write a bit-field to.

+ * \param[in] mask      Bit-mask indicating the bit-field to write.

+ * \param[in] bitfield  Bit-field to write.

+ *

+ * \return Resulting value with written bit-field.

+ */

+#define Wr_bitfield(lvalue, mask, bitfield) (Wr_bits(lvalue, mask, (uint32_t)(bitfield) << ctz(mask)))

+

+/** @} */

+

+

+/** \name Zero-Bit Counting

+ *

+ * Under GCC, __builtin_clz and __builtin_ctz behave like macros when

+ * applied to constant expressions (values known at compile time), so they are

+ * more optimized than the use of the corresponding assembly instructions and

+ * they can be used as constant expressions e.g. to initialize objects having

+ * static storage duration, and like the corresponding assembly instructions

+ * when applied to non-constant expressions (values unknown at compile time), so

+ * they are more optimized than an assembly periphrasis. Hence, clz and ctz

+ * ensure a possible and optimized behavior for both constant and non-constant

+ * expressions.

+ *

+ * @{ */

+

+/** \brief Counts the leading zero bits of the given value considered as a 32-bit integer.

+ *

+ * \param[in] u Value of which to count the leading zero bits.

+ *

+ * \return The count of leading zero bits in \a u.

+ */

+#if (defined __GNUC__) || (defined __CC_ARM)

+#   define clz(u)              __builtin_clz(u)

+#elif (defined __ICCARM__)

+#   define clz(u)              __CLZ(u)

+#else

+#   define clz(u)              (((u) == 0)          ? 32 : \

+                                ((u) & (1ul << 31)) ?  0 : \

+                                ((u) & (1ul << 30)) ?  1 : \

+                                ((u) & (1ul << 29)) ?  2 : \

+                                ((u) & (1ul << 28)) ?  3 : \

+                                ((u) & (1ul << 27)) ?  4 : \

+                                ((u) & (1ul << 26)) ?  5 : \

+                                ((u) & (1ul << 25)) ?  6 : \

+                                ((u) & (1ul << 24)) ?  7 : \

+                                ((u) & (1ul << 23)) ?  8 : \

+                                ((u) & (1ul << 22)) ?  9 : \

+                                ((u) & (1ul << 21)) ? 10 : \

+                                ((u) & (1ul << 20)) ? 11 : \

+                                ((u) & (1ul << 19)) ? 12 : \

+                                ((u) & (1ul << 18)) ? 13 : \

+                                ((u) & (1ul << 17)) ? 14 : \

+                                ((u) & (1ul << 16)) ? 15 : \

+                                ((u) & (1ul << 15)) ? 16 : \

+                                ((u) & (1ul << 14)) ? 17 : \

+                                ((u) & (1ul << 13)) ? 18 : \

+                                ((u) & (1ul << 12)) ? 19 : \

+                                ((u) & (1ul << 11)) ? 20 : \

+                                ((u) & (1ul << 10)) ? 21 : \

+                                ((u) & (1ul <<  9)) ? 22 : \

+                                ((u) & (1ul <<  8)) ? 23 : \

+                                ((u) & (1ul <<  7)) ? 24 : \

+                                ((u) & (1ul <<  6)) ? 25 : \

+                                ((u) & (1ul <<  5)) ? 26 : \

+                                ((u) & (1ul <<  4)) ? 27 : \

+                                ((u) & (1ul <<  3)) ? 28 : \

+                                ((u) & (1ul <<  2)) ? 29 : \

+                                ((u) & (1ul <<  1)) ? 30 : \

+                                31)

+#endif

+

+/** \brief Counts the trailing zero bits of the given value considered as a 32-bit integer.

+ *

+ * \param[in] u Value of which to count the trailing zero bits.

+ *

+ * \return The count of trailing zero bits in \a u.

+ */

+#if (defined __GNUC__) || (defined __CC_ARM)

+#   define ctz(u)              __builtin_ctz(u)

+#else

+#   define ctz(u)              ((u) & (1ul <<  0) ?  0 : \

+                                (u) & (1ul <<  1) ?  1 : \

+                                (u) & (1ul <<  2) ?  2 : \

+                                (u) & (1ul <<  3) ?  3 : \

+                                (u) & (1ul <<  4) ?  4 : \

+                                (u) & (1ul <<  5) ?  5 : \

+                                (u) & (1ul <<  6) ?  6 : \

+                                (u) & (1ul <<  7) ?  7 : \

+                                (u) & (1ul <<  8) ?  8 : \

+                                (u) & (1ul <<  9) ?  9 : \

+                                (u) & (1ul << 10) ? 10 : \

+                                (u) & (1ul << 11) ? 11 : \

+                                (u) & (1ul << 12) ? 12 : \

+                                (u) & (1ul << 13) ? 13 : \

+                                (u) & (1ul << 14) ? 14 : \

+                                (u) & (1ul << 15) ? 15 : \

+                                (u) & (1ul << 16) ? 16 : \

+                                (u) & (1ul << 17) ? 17 : \

+                                (u) & (1ul << 18) ? 18 : \

+                                (u) & (1ul << 19) ? 19 : \

+                                (u) & (1ul << 20) ? 20 : \

+                                (u) & (1ul << 21) ? 21 : \

+                                (u) & (1ul << 22) ? 22 : \

+                                (u) & (1ul << 23) ? 23 : \

+                                (u) & (1ul << 24) ? 24 : \

+                                (u) & (1ul << 25) ? 25 : \

+                                (u) & (1ul << 26) ? 26 : \

+                                (u) & (1ul << 27) ? 27 : \

+                                (u) & (1ul << 28) ? 28 : \

+                                (u) & (1ul << 29) ? 29 : \

+                                (u) & (1ul << 30) ? 30 : \

+                                (u) & (1ul << 31) ? 31 : \

+                                32)

+#endif

+

+/** @} */

+

+

+/** \name Bit Reversing

+ * @{ */

+

+/** \brief Reverses the bits of \a u8.

+ *

+ * \param[in] u8  U8 of which to reverse the bits.

+ *

+ * \return Value resulting from \a u8 with reversed bits.

+ */

+#define bit_reverse8(u8)    ((U8)(bit_reverse32((U8)(u8)) >> 24))

+

+/** \brief Reverses the bits of \a u16.

+ *

+ * \param[in] u16 U16 of which to reverse the bits.

+ *

+ * \return Value resulting from \a u16 with reversed bits.

+ */

+#define bit_reverse16(u16)  ((uint16_t)(bit_reverse32((uint16_t)(u16)) >> 16))

+

+/** \brief Reverses the bits of \a u32.

+ *

+ * \param[in] u32 U32 of which to reverse the bits.

+ *

+ * \return Value resulting from \a u32 with reversed bits.

+ */

+#define bit_reverse32(u32)   __RBIT(u32)

+

+/** \brief Reverses the bits of \a u64.

+ *

+ * \param[in] u64 U64 of which to reverse the bits.

+ *

+ * \return Value resulting from \a u64 with reversed bits.

+ */

+#define bit_reverse64(u64)  ((uint64_t)(((uint64_t)bit_reverse32((uint64_t)(u64) >> 32)) |\

+                                   ((uint64_t)bit_reverse32((uint64_t)(u64)) << 32)))

+

+/** @} */

+

+

+/** \name Alignment

+ * @{ */

+

+/** \brief Tests alignment of the number \a val with the \a n boundary.

+ *

+ * \param[in] val Input value.

+ * \param[in] n   Boundary.

+ *

+ * \return \c 1 if the number \a val is aligned with the \a n boundary, else \c 0.

+ */

+#define Test_align(val, n) (!Tst_bits( val, (n) - 1     )   )

+

+/** \brief Gets alignment of the number \a val with respect to the \a n boundary.

+ *

+ * \param[in] val Input value.

+ * \param[in] n   Boundary.

+ *

+ * \return Alignment of the number \a val with respect to the \a n boundary.

+ */

+#define Get_align(val, n) (  Rd_bits( val, (n) - 1     )   )

+

+/** \brief Sets alignment of the lvalue number \a lval to \a alg with respect to the \a n boundary.

+ *

+ * \param[in] lval  Input/output lvalue.

+ * \param[in] n     Boundary.

+ * \param[in] alg   Alignment.

+ *

+ * \return New value of \a lval resulting from its alignment set to \a alg with respect to the \a n boundary.

+ */

+#define Set_align(lval, n, alg) (  Wr_bits(lval, (n) - 1, alg)   )

+

+/** \brief Aligns the number \a val with the upper \a n boundary.

+ *

+ * \param[in] val Input value.

+ * \param[in] n   Boundary.

+ *

+ * \return Value resulting from the number \a val aligned with the upper \a n boundary.

+ */

+#define Align_up(  val, n) (((val) + ((n) - 1)) & ~((n) - 1))

+

+/** \brief Aligns the number \a val with the lower \a n boundary.

+ *

+ * \param[in] val Input value.

+ * \param[in] n   Boundary.

+ *

+ * \return Value resulting from the number \a val aligned with the lower \a n boundary.

+ */

+#define Align_down(val, n) ( (val)              & ~((n) - 1))

+

+/** @} */

+

+

+/** \name Mathematics

+ *

+ * The same considerations as for clz and ctz apply here but GCC does not

+ * provide built-in functions to access the assembly instructions abs, min and

+ * max and it does not produce them by itself in most cases, so two sets of

+ * macros are defined here:

+ *   - Abs, Min and Max to apply to constant expressions (values known at

+ *     compile time);

+ *   - abs, min and max to apply to non-constant expressions (values unknown at

+ *     compile time), abs is found in stdlib.h.

+ *

+ * @{ */

+

+/** \brief Takes the absolute value of \a a.

+ *

+ * \param[in] a Input value.

+ *

+ * \return Absolute value of \a a.

+ *

+ * \note More optimized if only used with values known at compile time.

+ */

+#define Abs(a)              (((a) <  0 ) ? -(a) : (a))

+

+/** \brief Takes the minimal value of \a a and \a b.

+ *

+ * \param[in] a Input value.

+ * \param[in] b Input value.

+ *

+ * \return Minimal value of \a a and \a b.

+ *

+ * \note More optimized if only used with values known at compile time.

+ */

+#define Min(a, b)           (((a) < (b)) ?  (a) : (b))

+

+/** \brief Takes the maximal value of \a a and \a b.

+ *

+ * \param[in] a Input value.

+ * \param[in] b Input value.

+ *

+ * \return Maximal value of \a a and \a b.

+ *

+ * \note More optimized if only used with values known at compile time.

+ */

+#define Max(a, b)           (((a) > (b)) ?  (a) : (b))

+

+/** \brief Takes the minimal value of \a a and \a b.

+ *

+ * \param[in] a Input value.

+ * \param[in] b Input value.

+ *

+ * \return Minimal value of \a a and \a b.

+ *

+ * \note More optimized if only used with values unknown at compile time.

+ */

+#define min(a, b)   Min(a, b)

+

+/** \brief Takes the maximal value of \a a and \a b.

+ *

+ * \param[in] a Input value.

+ * \param[in] b Input value.

+ *

+ * \return Maximal value of \a a and \a b.

+ *

+ * \note More optimized if only used with values unknown at compile time.

+ */

+#define max(a, b)   Max(a, b)

+

+/** @} */

+

+

+/** \brief Calls the routine at address \a addr.

+ *

+ * It generates a long call opcode.

+ *

+ * For example, `Long_call(0x80000000)' generates a software reset on a UC3 if

+ * it is invoked from the CPU supervisor mode.

+ *

+ * \param[in] addr  Address of the routine to call.

+ *

+ * \note It may be used as a long jump opcode in some special cases.

+ */

+#define Long_call(addr)                   ((*(void (*)(void))(addr))())

+

+

+/** \name MCU Endianism Handling

+ *  ARM is MCU little endian.

+ *

+ * @{ */

+#define  BE16(x)        Swap16(x)

+#define  LE16(x)        (x)

+

+#define  le16_to_cpu(x) (x)

+#define  cpu_to_le16(x) (x)

+#define  LE16_TO_CPU(x) (x)

+#define  CPU_TO_LE16(x) (x)

+

+#define  be16_to_cpu(x) Swap16(x)

+#define  cpu_to_be16(x) Swap16(x)

+#define  BE16_TO_CPU(x) Swap16(x)

+#define  CPU_TO_BE16(x) Swap16(x)

+

+#define  le32_to_cpu(x) (x)

+#define  cpu_to_le32(x) (x)

+#define  LE32_TO_CPU(x) (x)

+#define  CPU_TO_LE32(x) (x)

+

+#define  be32_to_cpu(x) swap32(x)

+#define  cpu_to_be32(x) swap32(x)

+#define  BE32_TO_CPU(x) swap32(x)

+#define  CPU_TO_BE32(x) swap32(x)

+/** @} */

+

+

+/** \name Endianism Conversion

+ *

+ * The same considerations as for clz and ctz apply here but GCC's

+ * __builtin_bswap_32 and __builtin_bswap_64 do not behave like macros when

+ * applied to constant expressions, so two sets of macros are defined here:

+ *   - Swap16, Swap32 and Swap64 to apply to constant expressions (values known

+ *     at compile time);

+ *   - swap16, swap32 and swap64 to apply to non-constant expressions (values

+ *     unknown at compile time).

+ *

+ * @{ */

+

+/** \brief Toggles the endianism of \a u16 (by swapping its bytes).

+ *

+ * \param[in] u16 U16 of which to toggle the endianism.

+ *

+ * \return Value resulting from \a u16 with toggled endianism.

+ *

+ * \note More optimized if only used with values known at compile time.

+ */

+#define Swap16(u16) ((uint16_t)(((uint16_t)(u16) >> 8) |\

+                           ((uint16_t)(u16) << 8)))

+

+/** \brief Toggles the endianism of \a u32 (by swapping its bytes).

+ *

+ * \param[in] u32 U32 of which to toggle the endianism.

+ *

+ * \return Value resulting from \a u32 with toggled endianism.

+ *

+ * \note More optimized if only used with values known at compile time.

+ */

+#define Swap32(u32) ((uint32_t)(((uint32_t)Swap16((uint32_t)(u32) >> 16)) |\

+                           ((uint32_t)Swap16((uint32_t)(u32)) << 16)))

+

+/** \brief Toggles the endianism of \a u64 (by swapping its bytes).

+ *

+ * \param[in] u64 U64 of which to toggle the endianism.

+ *

+ * \return Value resulting from \a u64 with toggled endianism.

+ *

+ * \note More optimized if only used with values known at compile time.

+ */

+#define Swap64(u64) ((uint64_t)(((uint64_t)Swap32((uint64_t)(u64) >> 32)) |\

+                           ((uint64_t)Swap32((uint64_t)(u64)) << 32)))

+

+/** \brief Toggles the endianism of \a u16 (by swapping its bytes).

+ *

+ * \param[in] u16 U16 of which to toggle the endianism.

+ *

+ * \return Value resulting from \a u16 with toggled endianism.

+ *

+ * \note More optimized if only used with values unknown at compile time.

+ */

+#define swap16(u16) Swap16(u16)

+

+/** \brief Toggles the endianism of \a u32 (by swapping its bytes).

+ *

+ * \param[in] u32 U32 of which to toggle the endianism.

+ *

+ * \return Value resulting from \a u32 with toggled endianism.

+ *

+ * \note More optimized if only used with values unknown at compile time.

+ */

+#if (defined __GNUC__)

+#  define swap32(u32) ((uint32_t)__builtin_bswap32((uint32_t)(u32)))

+#else

+#  define swap32(u32) Swap32(u32)

+#endif

+

+/** \brief Toggles the endianism of \a u64 (by swapping its bytes).

+ *

+ * \param[in] u64 U64 of which to toggle the endianism.

+ *

+ * \return Value resulting from \a u64 with toggled endianism.

+ *

+ * \note More optimized if only used with values unknown at compile time.

+ */

+#if (defined __GNUC__)

+#  define swap64(u64) ((uint64_t)__builtin_bswap64((uint64_t)(u64)))

+#else

+#  define swap64(u64) ((uint64_t)(((uint64_t)swap32((uint64_t)(u64) >> 32)) |\

+                         ((uint64_t)swap32((uint64_t)(u64)) << 32)))

+#endif

+

+/** @} */

+

+

+/** \name Target Abstraction

+ *

+ * @{ */

+

+#define _GLOBEXT_           extern      /**< extern storage-class specifier. */

+#define _CONST_TYPE_        const       /**< const type qualifier. */

+#define _MEM_TYPE_SLOW_                 /**< Slow memory type. */

+#define _MEM_TYPE_MEDFAST_              /**< Fairly fast memory type. */

+#define _MEM_TYPE_FAST_                 /**< Fast memory type. */

+

+#define memcmp_ram2ram      memcmp      /**< Target-specific memcmp of RAM to RAM. */

+#define memcmp_code2ram     memcmp      /**< Target-specific memcmp of RAM to NVRAM. */

+#define memcpy_ram2ram      memcpy      /**< Target-specific memcpy from RAM to RAM. */

+#define memcpy_code2ram     memcpy      /**< Target-specific memcpy from NVRAM to RAM. */

+

+/** @} */

+

+/**

+ * \brief Calculate \f$ \left\lceil \frac{a}{b} \right\rceil \f$ using

+ * integer arithmetic.

+ *

+ * \param[in] a An integer

+ * \param[in] b Another integer

+ *

+ * \return (\a a / \a b) rounded up to the nearest integer.

+ */

+#define div_ceil(a, b)      (((a) + (b) - 1) / (b))

+

+#endif  /* #ifndef __ASSEMBLY__ */

+#ifdef __ICCARM__

+/*! \name Compiler Keywords

+ *

+ * Port of some keywords from GCC to IAR Embedded Workbench.

+ */

+//! @{

+#define __asm__             asm

+#define __inline__          inline

+#define __volatile__

+//! @}

+

+#endif

+

+/**

+ * \def unused

+ * \brief Marking \a v as a unused parameter or value.

+ */

+#define unused(v)          do { (void)(v); } while(0)

+

+/* Define RAMFUNC attribute */

+#if defined   ( __CC_ARM   ) /* Keil uVision 4 */

+#   define RAMFUNC __attribute__ ((section(".ramfunc")))

+#elif defined ( __ICCARM__ ) /* IAR Ewarm 5.41+ */

+#   define RAMFUNC __ramfunc

+#elif defined (  __GNUC__  ) /* GCC CS3 2009q3-68 */

+#   define RAMFUNC __attribute__ ((section(".ramfunc")))

+#endif

+

+/* Define OPTIMIZE_HIGH attribute */

+#if defined   ( __CC_ARM   ) /* Keil uVision 4 */

+#   define OPTIMIZE_HIGH _Pragma("O3")

+#elif defined ( __ICCARM__ ) /* IAR Ewarm 5.41+ */

+#   define OPTIMIZE_HIGH _Pragma("optimize=high")

+#elif defined (  __GNUC__  ) /* GCC CS3 2009q3-68 */

+#   define OPTIMIZE_HIGH __attribute__((optimize(s)))

+#endif

+#define PASS      0

+#define FAIL      1

+#define LOW       0

+#define HIGH      1

+

+typedef int8_t                  S8 ;  //!< 8-bit signed integer.

+typedef uint8_t                 U8 ;  //!< 8-bit unsigned integer.

+typedef int16_t                 S16;  //!< 16-bit signed integer.

+typedef uint16_t                U16;  //!< 16-bit unsigned integer.

+typedef int32_t                 S32;  //!< 32-bit signed integer.

+typedef uint32_t                U32;  //!< 32-bit unsigned integer.

+typedef int64_t                 S64;  //!< 64-bit signed integer.

+typedef uint64_t                U64;  //!< 64-bit unsigned integer.

+typedef float                   F32;  //!< 32-bit floating-point number.

+typedef double                  F64;  //!< 64-bit floating-point number.

+

+#define  MSB(u16)       (((U8  *)&(u16))[1]) //!< Most significant byte of \a u16.

+#define  LSB(u16)       (((U8  *)&(u16))[0]) //!< Least significant byte of \a u16.

+

+#define  MSH(u32)       (((U16 *)&(u32))[1]) //!< Most significant half-word of \a u32.

+#define  LSH(u32)       (((U16 *)&(u32))[0]) //!< Least significant half-word of \a u32.

+#define  MSB0W(u32)     (((U8  *)&(u32))[3]) //!< Most significant byte of 1st rank of \a u32.

+#define  MSB1W(u32)     (((U8  *)&(u32))[2]) //!< Most significant byte of 2nd rank of \a u32.

+#define  MSB2W(u32)     (((U8  *)&(u32))[1]) //!< Most significant byte of 3rd rank of \a u32.

+#define  MSB3W(u32)     (((U8  *)&(u32))[0]) //!< Most significant byte of 4th rank of \a u32.

+#define  LSB3W(u32)     MSB0W(u32)           //!< Least significant byte of 4th rank of \a u32.

+#define  LSB2W(u32)     MSB1W(u32)           //!< Least significant byte of 3rd rank of \a u32.

+#define  LSB1W(u32)     MSB2W(u32)           //!< Least significant byte of 2nd rank of \a u32.

+#define  LSB0W(u32)     MSB3W(u32)           //!< Least significant byte of 1st rank of \a u32.

+

+#define  MSW(u64)       (((U32 *)&(u64))[1]) //!< Most significant word of \a u64.

+#define  LSW(u64)       (((U32 *)&(u64))[0]) //!< Least significant word of \a u64.

+#define  MSH0(u64)      (((U16 *)&(u64))[3]) //!< Most significant half-word of 1st rank of \a u64.

+#define  MSH1(u64)      (((U16 *)&(u64))[2]) //!< Most significant half-word of 2nd rank of \a u64.

+#define  MSH2(u64)      (((U16 *)&(u64))[1]) //!< Most significant half-word of 3rd rank of \a u64.

+#define  MSH3(u64)      (((U16 *)&(u64))[0]) //!< Most significant half-word of 4th rank of \a u64.

+#define  LSH3(u64)      MSH0(u64)            //!< Least significant half-word of 4th rank of \a u64.

+#define  LSH2(u64)      MSH1(u64)            //!< Least significant half-word of 3rd rank of \a u64.

+#define  LSH1(u64)      MSH2(u64)            //!< Least significant half-word of 2nd rank of \a u64.

+#define  LSH0(u64)      MSH3(u64)            //!< Least significant half-word of 1st rank of \a u64.

+#define  MSB0D(u64)     (((U8  *)&(u64))[7]) //!< Most significant byte of 1st rank of \a u64.

+#define  MSB1D(u64)     (((U8  *)&(u64))[6]) //!< Most significant byte of 2nd rank of \a u64.

+#define  MSB2D(u64)     (((U8  *)&(u64))[5]) //!< Most significant byte of 3rd rank of \a u64.

+#define  MSB3D(u64)     (((U8  *)&(u64))[4]) //!< Most significant byte of 4th rank of \a u64.

+#define  MSB4D(u64)     (((U8  *)&(u64))[3]) //!< Most significant byte of 5th rank of \a u64.

+#define  MSB5D(u64)     (((U8  *)&(u64))[2]) //!< Most significant byte of 6th rank of \a u64.

+#define  MSB6D(u64)     (((U8  *)&(u64))[1]) //!< Most significant byte of 7th rank of \a u64.

+#define  MSB7D(u64)     (((U8  *)&(u64))[0]) //!< Most significant byte of 8th rank of \a u64.

+#define  LSB7D(u64)     MSB0D(u64)           //!< Least significant byte of 8th rank of \a u64.

+#define  LSB6D(u64)     MSB1D(u64)           //!< Least significant byte of 7th rank of \a u64.

+#define  LSB5D(u64)     MSB2D(u64)           //!< Least significant byte of 6th rank of \a u64.

+#define  LSB4D(u64)     MSB3D(u64)           //!< Least significant byte of 5th rank of \a u64.

+#define  LSB3D(u64)     MSB4D(u64)           //!< Least significant byte of 4th rank of \a u64.

+#define  LSB2D(u64)     MSB5D(u64)           //!< Least significant byte of 3rd rank of \a u64.

+#define  LSB1D(u64)     MSB6D(u64)           //!< Least significant byte of 2nd rank of \a u64.

+#define  LSB0D(u64)     MSB7D(u64)           //!< Least significant byte of 1st rank of \a u64.

+

+#define LSB0(u32)           LSB0W(u32)  //!< Least significant byte of 1st rank of \a u32.

+#define LSB1(u32)           LSB1W(u32)  //!< Least significant byte of 2nd rank of \a u32.

+#define LSB2(u32)           LSB2W(u32)  //!< Least significant byte of 3rd rank of \a u32.

+#define LSB3(u32)           LSB3W(u32)  //!< Least significant byte of 4th rank of \a u32.

+#define MSB3(u32)           MSB3W(u32)  //!< Most significant byte of 4th rank of \a u32.

+#define MSB2(u32)           MSB2W(u32)  //!< Most significant byte of 3rd rank of \a u32.

+#define MSB1(u32)           MSB1W(u32)  //!< Most significant byte of 2nd rank of \a u32.

+#define MSB0(u32)           MSB0W(u32)  //!< Most significant byte of 1st rank of \a u32.

+

+#if defined(__ICCARM__)

+#define SHORTENUM           __packed

+#elif defined(__GNUC__)

+#define SHORTENUM           __attribute__((packed))

+#endif

+

+/* No operation */

+#if defined(__ICCARM__)

+#define nop()               __no_operation()

+#elif defined(__GNUC__)

+#define nop()               (__NOP())

+#endif

+

+#define FLASH_DECLARE(x)  const x

+#define FLASH_EXTERN(x) extern const x

+#define PGM_READ_BYTE(x) *(x)

+#define PGM_READ_WORD(x) *(x)

+#define MEMCPY_ENDIAN memcpy

+#define PGM_READ_BLOCK(dst, src, len) memcpy((dst), (src), (len))

+

+/* Converting of values from CPU endian to little endian. */

+#define CPU_ENDIAN_TO_LE16(x)   (x)

+#define CPU_ENDIAN_TO_LE32(x)   (x)

+#define CPU_ENDIAN_TO_LE64(x)   (x)

+

+/* Converting of values from little endian to CPU endian. */

+#define LE16_TO_CPU_ENDIAN(x)   (x)

+#define LE32_TO_CPU_ENDIAN(x)   (x)

+#define LE64_TO_CPU_ENDIAN(x)   (x)

+

+/* Converting of constants from little endian to CPU endian. */

+#define CLE16_TO_CPU_ENDIAN(x)  (x)

+#define CLE32_TO_CPU_ENDIAN(x)  (x)

+#define CLE64_TO_CPU_ENDIAN(x)  (x)

+

+/* Converting of constants from CPU endian to little endian. */

+#define CCPU_ENDIAN_TO_LE16(x)  (x)

+#define CCPU_ENDIAN_TO_LE32(x)  (x)

+#define CCPU_ENDIAN_TO_LE64(x)  (x)

+

+#define ADDR_COPY_DST_SRC_16(dst, src)  ((dst) = (src))

+#define ADDR_COPY_DST_SRC_64(dst, src)  ((dst) = (src))

+

+/**

+ * @brief Converts a 64-Bit value into  a 8 Byte array

+ *

+ * @param[in] value 64-Bit value

+ * @param[out] data Pointer to the 8 Byte array to be updated with 64-Bit value

+ * @ingroup apiPalApi

+ */

+static inline void convert_64_bit_to_byte_array(uint64_t value, uint8_t *data)

+{

+    uint8_t index = 0;

+

+    while (index < 8)

+    {

+        data[index++] = value & 0xFF;

+        value = value >> 8;

+    }

+}

+

+/**

+ * @brief Converts a 16-Bit value into  a 2 Byte array

+ *

+ * @param[in] value 16-Bit value

+ * @param[out] data Pointer to the 2 Byte array to be updated with 16-Bit value

+ * @ingroup apiPalApi

+ */

+static inline void convert_16_bit_to_byte_array(uint16_t value, uint8_t *data)

+{

+    data[0] = value & 0xFF;

+    data[1] = (value >> 8) & 0xFF;

+}

+

+/* Converts a 16-Bit value into a 2 Byte array */

+static inline void convert_spec_16_bit_to_byte_array(uint16_t value, uint8_t *data)

+{

+    data[0] = value & 0xFF;

+    data[1] = (value >> 8) & 0xFF;

+}

+

+/* Converts a 16-Bit value into a 2 Byte array */

+static inline void convert_16_bit_to_byte_address(uint16_t value, uint8_t *data)

+{

+    data[0] = value & 0xFF;

+    data[1] = (value >> 8) & 0xFF;

+}

+

+/*

+ * @brief Converts a 2 Byte array into a 16-Bit value

+ *

+ * @param data Specifies the pointer to the 2 Byte array

+ *

+ * @return 16-Bit value

+ * @ingroup apiPalApi

+ */

+static inline uint16_t convert_byte_array_to_16_bit(uint8_t *data)

+{

+    return (data[0] | ((uint16_t)data[1] << 8));

+}

+

+/**

+ * @brief Converts a 8 Byte array into a 64-Bit value

+ *

+ * @param data Specifies the pointer to the 8 Byte array

+ *

+ * @return 64-Bit value

+ * @ingroup apiPalApi

+ */

+static inline uint64_t convert_byte_array_to_64_bit(uint8_t *data)

+{

+    union

+    {

+        uint64_t u64;

+        uint8_t u8[8];

+    } long_addr;

+

+    uint8_t index;

+

+    for (index = 0; index < 8; index++)

+    {

+        long_addr.u8[index] = *data++;

+    }

+

+    return long_addr.u64;

+}

+

+/** @} */

+

+#endif /* UTILS_COMPILER_H_INCLUDED */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/header_files/io.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/header_files/io.h
new file mode 100644
index 0000000..280d7cc
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/header_files/io.h
@@ -0,0 +1,58 @@
+/**

+ * \file

+ *

+ * \brief Arch file for SAM0.

+ *

+ * This file defines common SAM0 series.

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+

+#ifndef _SAM_IO_

+#define _SAM_IO_

+

+#include <stddef.h>

+#include <stdint.h>

+#include <stdbool.h>

+

+/* SAM D20 family */

+#if (SAMD20)

+#  include "samd20.h"

+#endif

+

+#endif /* _SAM_IO_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/linker_scripts/samd20/gcc/samd20j18_flash.ld b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/linker_scripts/samd20/gcc/samd20j18_flash.ld
new file mode 100644
index 0000000..806c369
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/linker_scripts/samd20/gcc/samd20j18_flash.ld
@@ -0,0 +1,157 @@
+/**

+ * \file

+ *

+ * \brief Linker script for running in internal FLASH on the SAMD20J18

+ *

+ * Copyright (c) 2013 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

+ *

+ */

+

+

+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")

+OUTPUT_ARCH(arm)

+SEARCH_DIR(.)

+

+/* Memory Spaces Definitions */

+MEMORY

+{

+  rom (rx)  : ORIGIN = 0x00000000, LENGTH = 0x00040000

+  ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000

+}

+

+/* The stack size used by the application. NOTE: you need to adjust according to your application. */

+STACK_SIZE = DEFINED(STACK_SIZE) ? STACK_SIZE : 0x2000;

+

+/* Section Definitions */

+SECTIONS

+{

+    .text :

+    {

+        . = ALIGN(4);

+        _sfixed = .;

+        KEEP(*(.vectors .vectors.*))

+        *(.text .text.* .gnu.linkonce.t.*)

+        *(.glue_7t) *(.glue_7)

+        *(.rodata .rodata* .gnu.linkonce.r.*)

+        *(.ARM.extab* .gnu.linkonce.armextab.*)

+

+        /* Support C constructors, and C destructors in both user code

+           and the C library. This also provides support for C++ code. */

+        . = ALIGN(4);

+        KEEP(*(.init))

+        . = ALIGN(4);

+        __preinit_array_start = .;

+        KEEP (*(.preinit_array))

+        __preinit_array_end = .;

+

+        . = ALIGN(4);

+        __init_array_start = .;

+        KEEP (*(SORT(.init_array.*)))

+        KEEP (*(.init_array))

+        __init_array_end = .;

+

+        . = ALIGN(4);

+        KEEP (*crtbegin.o(.ctors))

+        KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))

+        KEEP (*(SORT(.ctors.*)))

+        KEEP (*crtend.o(.ctors))

+

+        . = ALIGN(4);

+        KEEP(*(.fini))

+

+        . = ALIGN(4);

+        __fini_array_start = .;

+        KEEP (*(.fini_array))

+        KEEP (*(SORT(.fini_array.*)))

+        __fini_array_end = .;

+

+        KEEP (*crtbegin.o(.dtors))

+        KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))

+        KEEP (*(SORT(.dtors.*)))

+        KEEP (*crtend.o(.dtors))

+

+        . = ALIGN(4);

+        _efixed = .;            /* End of text section */

+    } > rom

+

+    /* .ARM.exidx is sorted, so has to go in its own output section.  */

+    PROVIDE_HIDDEN (__exidx_start = .);

+    .ARM.exidx :

+    {

+      *(.ARM.exidx* .gnu.linkonce.armexidx.*)

+    } > rom

+    PROVIDE_HIDDEN (__exidx_end = .);

+

+    . = ALIGN(4);

+    _etext = .;

+

+    .relocate : AT (_etext)

+    {

+        . = ALIGN(4);

+        _srelocate = .;

+        *(.ramfunc .ramfunc.*);

+        *(.data .data.*);

+        . = ALIGN(4);

+        _erelocate = .;

+    } > ram

+

+    /* .bss section which is used for uninitialized data */

+    .bss (NOLOAD) :

+    {

+        . = ALIGN(4);

+        _sbss = . ;

+        _szero = .;

+        *(.bss .bss.*)

+        *(COMMON)

+        . = ALIGN(4);

+        _ebss = . ;

+        _ezero = .;

+    } > ram

+

+    /* stack section */

+    .stack (NOLOAD):

+    {

+        . = ALIGN(8);

+        _sstack = .;

+        . = . + STACK_SIZE;

+        . = ALIGN(8);

+        _estack = .;

+    } > ram

+

+    . = ALIGN(4);

+    _end = . ;

+}

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/make/Makefile.sam.in b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/make/Makefile.sam.in
new file mode 100644
index 0000000..bb19a6b
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/make/Makefile.sam.in
@@ -0,0 +1,485 @@
+# List of available make goals:

+#

+# all                     Default target, builds the project

+# clean                   Clean up the project

+# rebuild                 Rebuild the project

+# debug_flash             Builds the project and debug in flash

+# debug_sram              Builds the project and debug in sram

+#

+# doc                     Build the documentation

+# cleandoc                Clean up the documentation

+# rebuilddoc              Rebuild the documentation

+#

+# \file

+#

+# Copyright (c) 2011 - 2013 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

+#

+

+# Include the config.mk file from the current working path, e.g., where the

+# user called make.

+include config.mk

+

+# Tool to use to generate documentation from the source code

+DOCGEN          ?= doxygen

+

+# Look for source files relative to the top-level source directory

+VPATH           := $(PRJ_PATH)

+

+# Output target file

+project_type    := $(PROJECT_TYPE)

+

+# Output target file

+ifeq ($(project_type),flash)

+target          := $(TARGET_FLASH)

+linker_script   := $(PRJ_PATH)/$(LINKER_SCRIPT_FLASH)

+debug_script    := $(PRJ_PATH)/$(DEBUG_SCRIPT_FLASH)

+else

+target          := $(TARGET_SRAM)

+linker_script   := $(PRJ_PATH)/$(LINKER_SCRIPT_SRAM)

+debug_script    := $(PRJ_PATH)/$(DEBUG_SCRIPT_SRAM)

+endif

+

+# Output project name (target name minus suffix)

+project         := $(basename $(target))

+

+# Output target file (typically ELF or static library)

+ifeq ($(suffix $(target)),.a)

+target_type     := lib

+else

+ifeq ($(suffix $(target)),.elf)

+target_type     := elf

+else

+$(error "Target type $(target_type) is not supported")

+endif

+endif

+

+# Allow override of operating system detection. The user can add OS=Linux or

+# OS=Windows on the command line to explicit set the host OS.

+#

+# This allows to work around broken uname utility on certain systems.

+ifdef OS

+  ifeq ($(strip $(OS)), Linux)

+    os_type     := Linux

+  endif

+  ifeq ($(strip $(OS)), Windows)

+    os_type     := windows32_64

+  endif

+endif

+

+os_type         ?= $(strip $(shell uname))

+

+ifeq ($(os_type),windows32)

+os              := Windows

+else

+ifeq ($(os_type),windows64)

+os              := Windows

+else

+ifeq ($(os_type),windows32_64)

+os              ?= Windows

+else

+ifeq ($(os_type),)

+os              := Windows

+else

+# Default to Linux style operating system. Both Cygwin and mingw are fully

+# compatible (for this Makefile) with Linux.

+os              := Linux

+endif

+endif

+endif

+endif

+

+# Output documentation directory and configuration file.

+docdir          := ../doxygen/html

+doccfg          := ../doxygen/doxyfile.doxygen

+

+CROSS           ?= arm-none-eabi-

+AR              := $(CROSS)ar

+AS              := $(CROSS)as

+CC              := $(CROSS)gcc

+CPP             := $(CROSS)gcc -E

+CXX             := $(CROSS)g++

+LD              := $(CROSS)g++

+NM              := $(CROSS)nm

+OBJCOPY         := $(CROSS)objcopy

+OBJDUMP         := $(CROSS)objdump

+SIZE            := $(CROSS)size

+GDB             := $(CROSS)gdb

+

+RM              := rm

+ifeq ($(os),Windows)

+RMDIR           := rmdir /S /Q

+else

+RMDIR           := rmdir -p --ignore-fail-on-non-empty

+endif

+

+# On Windows, we need to override the shell to force the use of cmd.exe

+ifeq ($(os),Windows)

+SHELL           := cmd

+endif

+

+# Strings for beautifying output

+MSG_CLEAN_FILES         = "RM      *.o *.d"

+MSG_CLEAN_DIRS          = "RMDIR   $(strip $(clean-dirs))"

+MSG_CLEAN_DOC           = "RMDIR   $(docdir)"

+MSG_MKDIR               = "MKDIR   $(dir $@)"

+

+MSG_INFO                = "INFO    "

+

+MSG_ARCHIVING           = "AR      $@"

+MSG_ASSEMBLING          = "AS      $@"

+MSG_BINARY_IMAGE        = "OBJCOPY $@"

+MSG_COMPILING           = "CC      $@"

+MSG_COMPILING_CXX       = "CXX     $@"

+MSG_EXTENDED_LISTING    = "OBJDUMP $@"

+MSG_IHEX_IMAGE          = "OBJCOPY $@"

+MSG_LINKING             = "LN      $@"

+MSG_PREPROCESSING       = "CPP     $@"

+MSG_SIZE                = "SIZE    $@"

+MSG_SYMBOL_TABLE        = "NM      $@"

+

+MSG_GENERATING_DOC      = "DOXYGEN $(docdir)"

+

+# Don't use make's built-in rules and variables

+MAKEFLAGS       += -rR

+

+# Don't print 'Entering directory ...'

+MAKEFLAGS       += --no-print-directory

+

+# Function for reversing the order of a list

+reverse = $(if $(1),$(call reverse,$(wordlist 2,$(words $(1)),$(1)))) $(firstword $(1))

+

+# Hide command output by default, but allow the user to override this

+# by adding V=1 on the command line.

+#

+# This is inspired by the Kbuild system used by the Linux kernel.

+ifdef V

+  ifeq ("$(origin V)", "command line")

+    VERBOSE = $(V)

+  endif

+endif

+ifndef VERBOSE

+  VERBOSE = 0

+endif

+

+ifeq ($(VERBOSE), 1)

+  Q =

+else

+  Q = @

+endif

+

+arflags-gnu-y           := $(ARFLAGS)

+asflags-gnu-y           := $(ASFLAGS)

+cflags-gnu-y            := $(CFLAGS)

+cxxflags-gnu-y          := $(CXXFLAGS)

+cppflags-gnu-y          := $(CPPFLAGS)

+cpuflags-gnu-y          :=

+dbgflags-gnu-y          := $(DBGFLAGS)

+libflags-gnu-y          := $(foreach LIB,$(LIBS),-l$(LIB))

+ldflags-gnu-y           := $(LDFLAGS)

+flashflags-gnu-y        :=

+clean-files             :=

+clean-dirs              :=

+

+clean-files             += $(wildcard $(target) $(project).map)

+clean-files             += $(wildcard $(project).hex $(project).bin)

+clean-files             += $(wildcard $(project).lss $(project).sym)

+clean-files             += $(wildcard $(build))

+

+# Use pipes instead of temporary files for communication between processes

+cflags-gnu-y    += -pipe

+asflags-gnu-y   += -pipe

+ldflags-gnu-y   += -pipe

+

+# Archiver flags.

+arflags-gnu-y   += rcs

+

+# Always enable warnings. And be very careful about implicit

+# declarations.

+cflags-gnu-y    += -Wall -Wstrict-prototypes -Wmissing-prototypes

+cflags-gnu-y    += -Werror-implicit-function-declaration

+cxxflags-gnu-y  += -Wall

+# IAR doesn't allow arithmetic on void pointers, so warn about that.

+cflags-gnu-y    += -Wpointer-arith

+cxxflags-gnu-y  += -Wpointer-arith

+

+# Preprocessor flags.

+cppflags-gnu-y  += $(foreach INC,$(addprefix $(PRJ_PATH)/,$(INC_PATH)),-I$(INC))

+asflags-gnu-y   += $(foreach INC,$(addprefix $(PRJ_PATH)/,$(INC_PATH)),'-Wa,-I$(INC)')

+

+# CPU specific flags.

+cpuflags-gnu-y  += -mcpu=$(ARCH) -mthumb -D=__$(PART)__

+

+# Dependency file flags.

+depflags        = -MD -MP -MQ $@

+

+# Debug specific flags.

+ifdef BUILD_DEBUG_LEVEL

+dbgflags-gnu-y  += -g$(BUILD_DEBUG_LEVEL)

+else

+dbgflags-gnu-y  += -g3

+endif

+

+# Optimization specific flags.

+ifdef BUILD_OPTIMIZATION

+optflags-gnu-y  = -O$(BUILD_OPTIMIZATION)

+else

+optflags-gnu-y  = $(OPTIMIZATION)

+endif

+

+# Always preprocess assembler files.

+asflags-gnu-y   += -x assembler-with-cpp

+# Compile C files using the GNU99 standard.

+cflags-gnu-y    += -std=gnu99

+# Compile C++ files using the GNU++98 standard.

+cxxflags-gnu-y  += -std=gnu++98

+

+# Don't use strict aliasing (very common in embedded applications).

+cflags-gnu-y    += -fno-strict-aliasing

+cxxflags-gnu-y  += -fno-strict-aliasing

+

+# Separate each function and data into its own separate section to allow

+# garbage collection of unused sections.

+cflags-gnu-y    += -ffunction-sections -fdata-sections

+cxxflags-gnu-y  += -ffunction-sections -fdata-sections

+

+# Various cflags.

+cflags-gnu-y += -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int

+cflags-gnu-y += -Wmain -Wparentheses

+cflags-gnu-y += -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused

+cflags-gnu-y += -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef

+cflags-gnu-y += -Wshadow -Wbad-function-cast -Wwrite-strings

+cflags-gnu-y += -Wsign-compare -Waggregate-return

+cflags-gnu-y += -Wmissing-declarations

+cflags-gnu-y += -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations

+cflags-gnu-y += -Wpacked -Wredundant-decls -Wnested-externs -Wlong-long

+cflags-gnu-y += -Wunreachable-code

+cflags-gnu-y += -Wcast-align

+cflags-gnu-y += --param max-inline-insns-single=500

+

+# To reduce application size use only integer printf function.

+cflags-gnu-y += -Dprintf=iprintf

+

+# Garbage collect unreferred sections when linking.

+ldflags-gnu-y   += -Wl,--gc-sections

+

+# Use the linker script if provided by the project.

+ifneq ($(strip $(linker_script)),)

+ldflags-gnu-y   += -Wl,-T $(linker_script)

+endif

+

+# Output a link map file and a cross reference table

+ldflags-gnu-y   += -Wl,-Map=$(project).map,--cref

+

+# Add library search paths relative to the top level directory.

+ldflags-gnu-y   += $(foreach _LIB_PATH,$(addprefix $(PRJ_PATH)/,$(LIB_PATH)),-L$(_LIB_PATH))

+

+a_flags  = $(cpuflags-gnu-y) $(depflags) $(cppflags-gnu-y) $(asflags-gnu-y) -D__ASSEMBLY__

+c_flags  = $(cpuflags-gnu-y) $(dbgflags-gnu-y) $(depflags) $(optflags-gnu-y) $(cppflags-gnu-y) $(cflags-gnu-y)

+cxx_flags= $(cpuflags-gnu-y) $(dbgflags-gnu-y) $(depflags) $(optflags-gnu-y) $(cppflags-gnu-y) $(cxxflags-gnu-y)

+l_flags  = -Wl,--entry=Reset_Handler -Wl,--cref $(cpuflags-gnu-y) $(optflags-gnu-y) $(ldflags-gnu-y)

+ar_flags = $(arflags-gnu-y)

+

+# Source files list and part informations must already be included before

+# running this makefile

+

+# If a custom build directory is specified, use it -- force trailing / in directory name.

+ifdef BUILD_DIR

+	build-dir       := $(dir $(BUILD_DIR))$(if $(notdir $(BUILD_DIR)),$(notdir $(BUILD_DIR))/)

+else

+	build-dir        =

+endif

+

+# Create object files list from source files list.

+obj-y                   := $(addprefix $(build-dir), $(addsuffix .o,$(basename $(CSRCS) $(ASSRCS))))

+# Create dependency files list from source files list.

+dep-files               := $(wildcard $(foreach f,$(obj-y),$(basename $(f)).d))

+

+clean-files             += $(wildcard $(obj-y))

+clean-files             += $(dep-files)

+

+clean-dirs              += $(call reverse,$(sort $(wildcard $(dir $(obj-y)))))

+

+# Default target.

+.PHONY: all

+ifeq ($(project_type),all)

+all:

+	$(MAKE) all PROJECT_TYPE=flash

+	$(MAKE) all PROJECT_TYPE=sram

+else

+ifeq ($(target_type),lib)

+all: $(target) $(project).lss $(project).sym

+else

+ifeq ($(target_type),elf)

+all: $(target) $(project).lss $(project).sym $(project).hex $(project).bin

+endif

+endif

+endif

+

+# Clean up the project.

+.PHONY: clean

+clean:

+	@$(if $(strip $(clean-files)),echo $(MSG_CLEAN_FILES))

+	$(if $(strip $(clean-files)),$(Q)$(RM) $(clean-files),)

+	@$(if $(strip $(clean-dirs)),echo $(MSG_CLEAN_DIRS))

+# Remove created directories, and make sure we only remove existing

+# directories, since recursive rmdir might help us a bit on the way.

+ifeq ($(os),Windows)

+	$(Q)$(if $(strip $(clean-dirs)),                        \

+			$(RMDIR) $(strip $(subst /,\,$(clean-dirs))))

+else

+	$(Q)$(if $(strip $(clean-dirs)),                        \

+		for directory in $(strip $(clean-dirs)); do     \

+			if [ -d "$$directory" ]; then           \

+				$(RMDIR) $$directory;           \

+			fi                                      \

+		done                                            \

+	)

+endif

+

+# Rebuild the project.

+.PHONY: rebuild

+rebuild: clean all

+

+# Debug the project in flash.

+.PHONY: debug_flash

+debug_flash: all

+	$(GDB) -x "$(PRJ_PATH)/$(DEBUG_SCRIPT_FLASH)" -ex "reset" -readnow -se $(TARGET_FLASH)

+

+# Debug the project in sram.

+.PHONY: debug_sram

+debug_sram: all

+	$(GDB) -x "$(PRJ_PATH)/$(DEBUG_SCRIPT_SRAM)" -ex "reset" -readnow -se $(TARGET_SRAM)

+

+.PHONY: objfiles

+objfiles: $(obj-y)

+

+# Create object files from C source files.

+$(build-dir)%.o: %.c $(MAKEFILE_PATH) config.mk

+	$(Q)test -d $(dir $@) || echo $(MSG_MKDIR)

+ifeq ($(os),Windows)

+	$(Q)test -d $(patsubst %/,%,$(dir $@)) || mkdir $(subst /,\,$(dir $@))

+else

+	$(Q)test -d $(dir $@) || mkdir -p $(dir $@)

+endif

+	@echo $(MSG_COMPILING)

+	$(Q)$(CC) $(c_flags) -c $< -o $@

+

+# Create object files from C++ source files.

+$(build-dir)%.o: %.cpp $(MAKEFILE_PATH) config.mk

+	$(Q)test -d $(dir $@) || echo $(MSG_MKDIR)

+ifeq ($(os),Windows)

+	$(Q)test -d $(patsubst %/,%,$(dir $@)) || mkdir $(subst /,\,$(dir $@))

+else

+	$(Q)test -d $(dir $@) || mkdir -p $(dir $@)

+endif

+	@echo $(MSG_COMPILING_CXX)

+	$(Q)$(CXX) $(cxx_flags) -c $< -o $@

+

+# Preprocess and assemble: create object files from assembler source files.

+$(build-dir)%.o: %.S $(MAKEFILE_PATH) config.mk

+	$(Q)test -d $(dir $@) || echo $(MSG_MKDIR)

+ifeq ($(os),Windows)

+	$(Q)test -d $(patsubst %/,%,$(dir $@)) || mkdir $(subst /,\,$(dir $@))

+else

+	$(Q)test -d $(dir $@) || mkdir -p $(dir $@)

+endif

+	@echo $(MSG_ASSEMBLING)

+	$(Q)$(CC) $(a_flags) -c $< -o $@

+

+# Include all dependency files to add depedency to all header files in use.

+include $(dep-files)

+

+ifeq ($(target_type),lib)

+# Archive object files into an archive

+$(target): $(MAKEFILE_PATH) config.mk $(obj-y)

+	@echo $(MSG_ARCHIVING)

+	$(Q)$(AR) $(ar_flags) $@ $(obj-y)

+	@echo $(MSG_SIZE)

+	$(Q)$(SIZE) -Bxt $@

+else

+ifeq ($(target_type),elf)

+# Link the object files into an ELF file. Also make sure the target is rebuilt

+# if the common Makefile.sam.in or project config.mk is changed.

+$(target): $(linker_script) $(MAKEFILE_PATH) config.mk $(obj-y)

+	@echo $(MSG_LINKING)

+	$(Q)$(LD) $(l_flags) $(obj-y) $(libflags-gnu-y) -o $@

+	@echo $(MSG_SIZE)

+	$(Q)$(SIZE) -Ax $@

+	$(Q)$(SIZE) -Bx $@

+endif

+endif

+

+# Create extended function listing from target output file.

+%.lss: $(target)

+	@echo $(MSG_EXTENDED_LISTING)

+	$(Q)$(OBJDUMP) -h -S $< > $@

+

+# Create symbol table from target output file.

+%.sym: $(target)

+	@echo $(MSG_SYMBOL_TABLE)

+	$(Q)$(NM) -n $< > $@

+

+# Create Intel HEX image from ELF output file.

+%.hex: $(target)

+	@echo $(MSG_IHEX_IMAGE)

+	$(Q)$(OBJCOPY) -O ihex $(flashflags-gnu-y)  $< $@

+

+# Create binary image from ELF output file.

+%.bin: $(target)

+	@echo $(MSG_BINARY_IMAGE)

+	$(Q)$(OBJCOPY) -O binary $< $@

+

+# Provide information about the detected host operating system.

+.SECONDARY: info-os

+info-os:

+	@echo $(MSG_INFO)$(os) build host detected

+

+# Build Doxygen generated documentation.

+.PHONY: doc

+doc:

+	@echo $(MSG_GENERATING_DOC)

+	$(Q)cd $(dir $(doccfg)) && $(DOCGEN) $(notdir $(doccfg))

+

+# Clean Doxygen generated documentation.

+.PHONY: cleandoc

+cleandoc:

+	@$(if $(wildcard $(docdir)),echo $(MSG_CLEAN_DOC))

+	$(Q)$(if $(wildcard $(docdir)),$(RM) --recursive $(docdir))

+

+# Rebuild the Doxygen generated documentation.

+.PHONY: rebuilddoc

+rebuilddoc: cleandoc doc

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/preprocessor/mrepeat.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/preprocessor/mrepeat.h
new file mode 100644
index 0000000..179e5c2
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/preprocessor/mrepeat.h
@@ -0,0 +1,335 @@
+/**

+ * \file

+ *

+ * \brief Preprocessor macro repeating utils.

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+

+#ifndef _MREPEAT_H_

+#define _MREPEAT_H_

+

+/**

+ * \defgroup group_sam0_utils_mrepeat Preprocessor - Macro Repeat

+ *

+ * \ingroup group_sam0_utils

+ *

+ * @{

+ */

+

+#include "preprocessor.h"

+

+/** Maximal number of repetitions supported by MREPEAT. */

+#define MREPEAT_LIMIT   256

+

+/** \brief Macro repeat.

+ *

+ * This macro represents a horizontal repetition construct.

+ *

+ * \param[in] count  The number of repetitious calls to macro. Valid values

+ *                   range from 0 to MREPEAT_LIMIT.

+ * \param[in] macro  A binary operation of the form macro(n, data). This macro

+ *                   is expanded by MREPEAT with the current repetition number

+ *                   and the auxiliary data argument.

+ * \param[in] data   Auxiliary data passed to macro.

+ *

+ * \return       <tt>macro(0, data) macro(1, data) ... macro(count - 1, data)</tt>

+ */

+#define MREPEAT(count, macro, data) TPASTE2(MREPEAT, count) (macro, data)

+

+#define MREPEAT0(  macro, data)

+#define MREPEAT1(  macro, data)    MREPEAT0(  macro, data)   macro(  0, data)

+#define MREPEAT2(  macro, data)    MREPEAT1(  macro, data)   macro(  1, data)

+#define MREPEAT3(  macro, data)    MREPEAT2(  macro, data)   macro(  2, data)

+#define MREPEAT4(  macro, data)    MREPEAT3(  macro, data)   macro(  3, data)

+#define MREPEAT5(  macro, data)    MREPEAT4(  macro, data)   macro(  4, data)

+#define MREPEAT6(  macro, data)    MREPEAT5(  macro, data)   macro(  5, data)

+#define MREPEAT7(  macro, data)    MREPEAT6(  macro, data)   macro(  6, data)

+#define MREPEAT8(  macro, data)    MREPEAT7(  macro, data)   macro(  7, data)

+#define MREPEAT9(  macro, data)    MREPEAT8(  macro, data)   macro(  8, data)

+#define MREPEAT10( macro, data)    MREPEAT9(  macro, data)   macro(  9, data)

+#define MREPEAT11( macro, data)    MREPEAT10( macro, data)   macro( 10, data)

+#define MREPEAT12( macro, data)    MREPEAT11( macro, data)   macro( 11, data)

+#define MREPEAT13( macro, data)    MREPEAT12( macro, data)   macro( 12, data)

+#define MREPEAT14( macro, data)    MREPEAT13( macro, data)   macro( 13, data)

+#define MREPEAT15( macro, data)    MREPEAT14( macro, data)   macro( 14, data)

+#define MREPEAT16( macro, data)    MREPEAT15( macro, data)   macro( 15, data)

+#define MREPEAT17( macro, data)    MREPEAT16( macro, data)   macro( 16, data)

+#define MREPEAT18( macro, data)    MREPEAT17( macro, data)   macro( 17, data)

+#define MREPEAT19( macro, data)    MREPEAT18( macro, data)   macro( 18, data)

+#define MREPEAT20( macro, data)    MREPEAT19( macro, data)   macro( 19, data)

+#define MREPEAT21( macro, data)    MREPEAT20( macro, data)   macro( 20, data)

+#define MREPEAT22( macro, data)    MREPEAT21( macro, data)   macro( 21, data)

+#define MREPEAT23( macro, data)    MREPEAT22( macro, data)   macro( 22, data)

+#define MREPEAT24( macro, data)    MREPEAT23( macro, data)   macro( 23, data)

+#define MREPEAT25( macro, data)    MREPEAT24( macro, data)   macro( 24, data)

+#define MREPEAT26( macro, data)    MREPEAT25( macro, data)   macro( 25, data)

+#define MREPEAT27( macro, data)    MREPEAT26( macro, data)   macro( 26, data)

+#define MREPEAT28( macro, data)    MREPEAT27( macro, data)   macro( 27, data)

+#define MREPEAT29( macro, data)    MREPEAT28( macro, data)   macro( 28, data)

+#define MREPEAT30( macro, data)    MREPEAT29( macro, data)   macro( 29, data)

+#define MREPEAT31( macro, data)    MREPEAT30( macro, data)   macro( 30, data)

+#define MREPEAT32( macro, data)    MREPEAT31( macro, data)   macro( 31, data)

+#define MREPEAT33( macro, data)    MREPEAT32( macro, data)   macro( 32, data)

+#define MREPEAT34( macro, data)    MREPEAT33( macro, data)   macro( 33, data)

+#define MREPEAT35( macro, data)    MREPEAT34( macro, data)   macro( 34, data)

+#define MREPEAT36( macro, data)    MREPEAT35( macro, data)   macro( 35, data)

+#define MREPEAT37( macro, data)    MREPEAT36( macro, data)   macro( 36, data)

+#define MREPEAT38( macro, data)    MREPEAT37( macro, data)   macro( 37, data)

+#define MREPEAT39( macro, data)    MREPEAT38( macro, data)   macro( 38, data)

+#define MREPEAT40( macro, data)    MREPEAT39( macro, data)   macro( 39, data)

+#define MREPEAT41( macro, data)    MREPEAT40( macro, data)   macro( 40, data)

+#define MREPEAT42( macro, data)    MREPEAT41( macro, data)   macro( 41, data)

+#define MREPEAT43( macro, data)    MREPEAT42( macro, data)   macro( 42, data)

+#define MREPEAT44( macro, data)    MREPEAT43( macro, data)   macro( 43, data)

+#define MREPEAT45( macro, data)    MREPEAT44( macro, data)   macro( 44, data)

+#define MREPEAT46( macro, data)    MREPEAT45( macro, data)   macro( 45, data)

+#define MREPEAT47( macro, data)    MREPEAT46( macro, data)   macro( 46, data)

+#define MREPEAT48( macro, data)    MREPEAT47( macro, data)   macro( 47, data)

+#define MREPEAT49( macro, data)    MREPEAT48( macro, data)   macro( 48, data)

+#define MREPEAT50( macro, data)    MREPEAT49( macro, data)   macro( 49, data)

+#define MREPEAT51( macro, data)    MREPEAT50( macro, data)   macro( 50, data)

+#define MREPEAT52( macro, data)    MREPEAT51( macro, data)   macro( 51, data)

+#define MREPEAT53( macro, data)    MREPEAT52( macro, data)   macro( 52, data)

+#define MREPEAT54( macro, data)    MREPEAT53( macro, data)   macro( 53, data)

+#define MREPEAT55( macro, data)    MREPEAT54( macro, data)   macro( 54, data)

+#define MREPEAT56( macro, data)    MREPEAT55( macro, data)   macro( 55, data)

+#define MREPEAT57( macro, data)    MREPEAT56( macro, data)   macro( 56, data)

+#define MREPEAT58( macro, data)    MREPEAT57( macro, data)   macro( 57, data)

+#define MREPEAT59( macro, data)    MREPEAT58( macro, data)   macro( 58, data)

+#define MREPEAT60( macro, data)    MREPEAT59( macro, data)   macro( 59, data)

+#define MREPEAT61( macro, data)    MREPEAT60( macro, data)   macro( 60, data)

+#define MREPEAT62( macro, data)    MREPEAT61( macro, data)   macro( 61, data)

+#define MREPEAT63( macro, data)    MREPEAT62( macro, data)   macro( 62, data)

+#define MREPEAT64( macro, data)    MREPEAT63( macro, data)   macro( 63, data)

+#define MREPEAT65( macro, data)    MREPEAT64( macro, data)   macro( 64, data)

+#define MREPEAT66( macro, data)    MREPEAT65( macro, data)   macro( 65, data)

+#define MREPEAT67( macro, data)    MREPEAT66( macro, data)   macro( 66, data)

+#define MREPEAT68( macro, data)    MREPEAT67( macro, data)   macro( 67, data)

+#define MREPEAT69( macro, data)    MREPEAT68( macro, data)   macro( 68, data)

+#define MREPEAT70( macro, data)    MREPEAT69( macro, data)   macro( 69, data)

+#define MREPEAT71( macro, data)    MREPEAT70( macro, data)   macro( 70, data)

+#define MREPEAT72( macro, data)    MREPEAT71( macro, data)   macro( 71, data)

+#define MREPEAT73( macro, data)    MREPEAT72( macro, data)   macro( 72, data)

+#define MREPEAT74( macro, data)    MREPEAT73( macro, data)   macro( 73, data)

+#define MREPEAT75( macro, data)    MREPEAT74( macro, data)   macro( 74, data)

+#define MREPEAT76( macro, data)    MREPEAT75( macro, data)   macro( 75, data)

+#define MREPEAT77( macro, data)    MREPEAT76( macro, data)   macro( 76, data)

+#define MREPEAT78( macro, data)    MREPEAT77( macro, data)   macro( 77, data)

+#define MREPEAT79( macro, data)    MREPEAT78( macro, data)   macro( 78, data)

+#define MREPEAT80( macro, data)    MREPEAT79( macro, data)   macro( 79, data)

+#define MREPEAT81( macro, data)    MREPEAT80( macro, data)   macro( 80, data)

+#define MREPEAT82( macro, data)    MREPEAT81( macro, data)   macro( 81, data)

+#define MREPEAT83( macro, data)    MREPEAT82( macro, data)   macro( 82, data)

+#define MREPEAT84( macro, data)    MREPEAT83( macro, data)   macro( 83, data)

+#define MREPEAT85( macro, data)    MREPEAT84( macro, data)   macro( 84, data)

+#define MREPEAT86( macro, data)    MREPEAT85( macro, data)   macro( 85, data)

+#define MREPEAT87( macro, data)    MREPEAT86( macro, data)   macro( 86, data)

+#define MREPEAT88( macro, data)    MREPEAT87( macro, data)   macro( 87, data)

+#define MREPEAT89( macro, data)    MREPEAT88( macro, data)   macro( 88, data)

+#define MREPEAT90( macro, data)    MREPEAT89( macro, data)   macro( 89, data)

+#define MREPEAT91( macro, data)    MREPEAT90( macro, data)   macro( 90, data)

+#define MREPEAT92( macro, data)    MREPEAT91( macro, data)   macro( 91, data)

+#define MREPEAT93( macro, data)    MREPEAT92( macro, data)   macro( 92, data)

+#define MREPEAT94( macro, data)    MREPEAT93( macro, data)   macro( 93, data)

+#define MREPEAT95( macro, data)    MREPEAT94( macro, data)   macro( 94, data)

+#define MREPEAT96( macro, data)    MREPEAT95( macro, data)   macro( 95, data)

+#define MREPEAT97( macro, data)    MREPEAT96( macro, data)   macro( 96, data)

+#define MREPEAT98( macro, data)    MREPEAT97( macro, data)   macro( 97, data)

+#define MREPEAT99( macro, data)    MREPEAT98( macro, data)   macro( 98, data)

+#define MREPEAT100(macro, data)    MREPEAT99( macro, data)   macro( 99, data)

+#define MREPEAT101(macro, data)    MREPEAT100(macro, data)   macro(100, data)

+#define MREPEAT102(macro, data)    MREPEAT101(macro, data)   macro(101, data)

+#define MREPEAT103(macro, data)    MREPEAT102(macro, data)   macro(102, data)

+#define MREPEAT104(macro, data)    MREPEAT103(macro, data)   macro(103, data)

+#define MREPEAT105(macro, data)    MREPEAT104(macro, data)   macro(104, data)

+#define MREPEAT106(macro, data)    MREPEAT105(macro, data)   macro(105, data)

+#define MREPEAT107(macro, data)    MREPEAT106(macro, data)   macro(106, data)

+#define MREPEAT108(macro, data)    MREPEAT107(macro, data)   macro(107, data)

+#define MREPEAT109(macro, data)    MREPEAT108(macro, data)   macro(108, data)

+#define MREPEAT110(macro, data)    MREPEAT109(macro, data)   macro(109, data)

+#define MREPEAT111(macro, data)    MREPEAT110(macro, data)   macro(110, data)

+#define MREPEAT112(macro, data)    MREPEAT111(macro, data)   macro(111, data)

+#define MREPEAT113(macro, data)    MREPEAT112(macro, data)   macro(112, data)

+#define MREPEAT114(macro, data)    MREPEAT113(macro, data)   macro(113, data)

+#define MREPEAT115(macro, data)    MREPEAT114(macro, data)   macro(114, data)

+#define MREPEAT116(macro, data)    MREPEAT115(macro, data)   macro(115, data)

+#define MREPEAT117(macro, data)    MREPEAT116(macro, data)   macro(116, data)

+#define MREPEAT118(macro, data)    MREPEAT117(macro, data)   macro(117, data)

+#define MREPEAT119(macro, data)    MREPEAT118(macro, data)   macro(118, data)

+#define MREPEAT120(macro, data)    MREPEAT119(macro, data)   macro(119, data)

+#define MREPEAT121(macro, data)    MREPEAT120(macro, data)   macro(120, data)

+#define MREPEAT122(macro, data)    MREPEAT121(macro, data)   macro(121, data)

+#define MREPEAT123(macro, data)    MREPEAT122(macro, data)   macro(122, data)

+#define MREPEAT124(macro, data)    MREPEAT123(macro, data)   macro(123, data)

+#define MREPEAT125(macro, data)    MREPEAT124(macro, data)   macro(124, data)

+#define MREPEAT126(macro, data)    MREPEAT125(macro, data)   macro(125, data)

+#define MREPEAT127(macro, data)    MREPEAT126(macro, data)   macro(126, data)

+#define MREPEAT128(macro, data)    MREPEAT127(macro, data)   macro(127, data)

+#define MREPEAT129(macro, data)    MREPEAT128(macro, data)   macro(128, data)

+#define MREPEAT130(macro, data)    MREPEAT129(macro, data)   macro(129, data)

+#define MREPEAT131(macro, data)    MREPEAT130(macro, data)   macro(130, data)

+#define MREPEAT132(macro, data)    MREPEAT131(macro, data)   macro(131, data)

+#define MREPEAT133(macro, data)    MREPEAT132(macro, data)   macro(132, data)

+#define MREPEAT134(macro, data)    MREPEAT133(macro, data)   macro(133, data)

+#define MREPEAT135(macro, data)    MREPEAT134(macro, data)   macro(134, data)

+#define MREPEAT136(macro, data)    MREPEAT135(macro, data)   macro(135, data)

+#define MREPEAT137(macro, data)    MREPEAT136(macro, data)   macro(136, data)

+#define MREPEAT138(macro, data)    MREPEAT137(macro, data)   macro(137, data)

+#define MREPEAT139(macro, data)    MREPEAT138(macro, data)   macro(138, data)

+#define MREPEAT140(macro, data)    MREPEAT139(macro, data)   macro(139, data)

+#define MREPEAT141(macro, data)    MREPEAT140(macro, data)   macro(140, data)

+#define MREPEAT142(macro, data)    MREPEAT141(macro, data)   macro(141, data)

+#define MREPEAT143(macro, data)    MREPEAT142(macro, data)   macro(142, data)

+#define MREPEAT144(macro, data)    MREPEAT143(macro, data)   macro(143, data)

+#define MREPEAT145(macro, data)    MREPEAT144(macro, data)   macro(144, data)

+#define MREPEAT146(macro, data)    MREPEAT145(macro, data)   macro(145, data)

+#define MREPEAT147(macro, data)    MREPEAT146(macro, data)   macro(146, data)

+#define MREPEAT148(macro, data)    MREPEAT147(macro, data)   macro(147, data)

+#define MREPEAT149(macro, data)    MREPEAT148(macro, data)   macro(148, data)

+#define MREPEAT150(macro, data)    MREPEAT149(macro, data)   macro(149, data)

+#define MREPEAT151(macro, data)    MREPEAT150(macro, data)   macro(150, data)

+#define MREPEAT152(macro, data)    MREPEAT151(macro, data)   macro(151, data)

+#define MREPEAT153(macro, data)    MREPEAT152(macro, data)   macro(152, data)

+#define MREPEAT154(macro, data)    MREPEAT153(macro, data)   macro(153, data)

+#define MREPEAT155(macro, data)    MREPEAT154(macro, data)   macro(154, data)

+#define MREPEAT156(macro, data)    MREPEAT155(macro, data)   macro(155, data)

+#define MREPEAT157(macro, data)    MREPEAT156(macro, data)   macro(156, data)

+#define MREPEAT158(macro, data)    MREPEAT157(macro, data)   macro(157, data)

+#define MREPEAT159(macro, data)    MREPEAT158(macro, data)   macro(158, data)

+#define MREPEAT160(macro, data)    MREPEAT159(macro, data)   macro(159, data)

+#define MREPEAT161(macro, data)    MREPEAT160(macro, data)   macro(160, data)

+#define MREPEAT162(macro, data)    MREPEAT161(macro, data)   macro(161, data)

+#define MREPEAT163(macro, data)    MREPEAT162(macro, data)   macro(162, data)

+#define MREPEAT164(macro, data)    MREPEAT163(macro, data)   macro(163, data)

+#define MREPEAT165(macro, data)    MREPEAT164(macro, data)   macro(164, data)

+#define MREPEAT166(macro, data)    MREPEAT165(macro, data)   macro(165, data)

+#define MREPEAT167(macro, data)    MREPEAT166(macro, data)   macro(166, data)

+#define MREPEAT168(macro, data)    MREPEAT167(macro, data)   macro(167, data)

+#define MREPEAT169(macro, data)    MREPEAT168(macro, data)   macro(168, data)

+#define MREPEAT170(macro, data)    MREPEAT169(macro, data)   macro(169, data)

+#define MREPEAT171(macro, data)    MREPEAT170(macro, data)   macro(170, data)

+#define MREPEAT172(macro, data)    MREPEAT171(macro, data)   macro(171, data)

+#define MREPEAT173(macro, data)    MREPEAT172(macro, data)   macro(172, data)

+#define MREPEAT174(macro, data)    MREPEAT173(macro, data)   macro(173, data)

+#define MREPEAT175(macro, data)    MREPEAT174(macro, data)   macro(174, data)

+#define MREPEAT176(macro, data)    MREPEAT175(macro, data)   macro(175, data)

+#define MREPEAT177(macro, data)    MREPEAT176(macro, data)   macro(176, data)

+#define MREPEAT178(macro, data)    MREPEAT177(macro, data)   macro(177, data)

+#define MREPEAT179(macro, data)    MREPEAT178(macro, data)   macro(178, data)

+#define MREPEAT180(macro, data)    MREPEAT179(macro, data)   macro(179, data)

+#define MREPEAT181(macro, data)    MREPEAT180(macro, data)   macro(180, data)

+#define MREPEAT182(macro, data)    MREPEAT181(macro, data)   macro(181, data)

+#define MREPEAT183(macro, data)    MREPEAT182(macro, data)   macro(182, data)

+#define MREPEAT184(macro, data)    MREPEAT183(macro, data)   macro(183, data)

+#define MREPEAT185(macro, data)    MREPEAT184(macro, data)   macro(184, data)

+#define MREPEAT186(macro, data)    MREPEAT185(macro, data)   macro(185, data)

+#define MREPEAT187(macro, data)    MREPEAT186(macro, data)   macro(186, data)

+#define MREPEAT188(macro, data)    MREPEAT187(macro, data)   macro(187, data)

+#define MREPEAT189(macro, data)    MREPEAT188(macro, data)   macro(188, data)

+#define MREPEAT190(macro, data)    MREPEAT189(macro, data)   macro(189, data)

+#define MREPEAT191(macro, data)    MREPEAT190(macro, data)   macro(190, data)

+#define MREPEAT192(macro, data)    MREPEAT191(macro, data)   macro(191, data)

+#define MREPEAT193(macro, data)    MREPEAT192(macro, data)   macro(192, data)

+#define MREPEAT194(macro, data)    MREPEAT193(macro, data)   macro(193, data)

+#define MREPEAT195(macro, data)    MREPEAT194(macro, data)   macro(194, data)

+#define MREPEAT196(macro, data)    MREPEAT195(macro, data)   macro(195, data)

+#define MREPEAT197(macro, data)    MREPEAT196(macro, data)   macro(196, data)

+#define MREPEAT198(macro, data)    MREPEAT197(macro, data)   macro(197, data)

+#define MREPEAT199(macro, data)    MREPEAT198(macro, data)   macro(198, data)

+#define MREPEAT200(macro, data)    MREPEAT199(macro, data)   macro(199, data)

+#define MREPEAT201(macro, data)    MREPEAT200(macro, data)   macro(200, data)

+#define MREPEAT202(macro, data)    MREPEAT201(macro, data)   macro(201, data)

+#define MREPEAT203(macro, data)    MREPEAT202(macro, data)   macro(202, data)

+#define MREPEAT204(macro, data)    MREPEAT203(macro, data)   macro(203, data)

+#define MREPEAT205(macro, data)    MREPEAT204(macro, data)   macro(204, data)

+#define MREPEAT206(macro, data)    MREPEAT205(macro, data)   macro(205, data)

+#define MREPEAT207(macro, data)    MREPEAT206(macro, data)   macro(206, data)

+#define MREPEAT208(macro, data)    MREPEAT207(macro, data)   macro(207, data)

+#define MREPEAT209(macro, data)    MREPEAT208(macro, data)   macro(208, data)

+#define MREPEAT210(macro, data)    MREPEAT209(macro, data)   macro(209, data)

+#define MREPEAT211(macro, data)    MREPEAT210(macro, data)   macro(210, data)

+#define MREPEAT212(macro, data)    MREPEAT211(macro, data)   macro(211, data)

+#define MREPEAT213(macro, data)    MREPEAT212(macro, data)   macro(212, data)

+#define MREPEAT214(macro, data)    MREPEAT213(macro, data)   macro(213, data)

+#define MREPEAT215(macro, data)    MREPEAT214(macro, data)   macro(214, data)

+#define MREPEAT216(macro, data)    MREPEAT215(macro, data)   macro(215, data)

+#define MREPEAT217(macro, data)    MREPEAT216(macro, data)   macro(216, data)

+#define MREPEAT218(macro, data)    MREPEAT217(macro, data)   macro(217, data)

+#define MREPEAT219(macro, data)    MREPEAT218(macro, data)   macro(218, data)

+#define MREPEAT220(macro, data)    MREPEAT219(macro, data)   macro(219, data)

+#define MREPEAT221(macro, data)    MREPEAT220(macro, data)   macro(220, data)

+#define MREPEAT222(macro, data)    MREPEAT221(macro, data)   macro(221, data)

+#define MREPEAT223(macro, data)    MREPEAT222(macro, data)   macro(222, data)

+#define MREPEAT224(macro, data)    MREPEAT223(macro, data)   macro(223, data)

+#define MREPEAT225(macro, data)    MREPEAT224(macro, data)   macro(224, data)

+#define MREPEAT226(macro, data)    MREPEAT225(macro, data)   macro(225, data)

+#define MREPEAT227(macro, data)    MREPEAT226(macro, data)   macro(226, data)

+#define MREPEAT228(macro, data)    MREPEAT227(macro, data)   macro(227, data)

+#define MREPEAT229(macro, data)    MREPEAT228(macro, data)   macro(228, data)

+#define MREPEAT230(macro, data)    MREPEAT229(macro, data)   macro(229, data)

+#define MREPEAT231(macro, data)    MREPEAT230(macro, data)   macro(230, data)

+#define MREPEAT232(macro, data)    MREPEAT231(macro, data)   macro(231, data)

+#define MREPEAT233(macro, data)    MREPEAT232(macro, data)   macro(232, data)

+#define MREPEAT234(macro, data)    MREPEAT233(macro, data)   macro(233, data)

+#define MREPEAT235(macro, data)    MREPEAT234(macro, data)   macro(234, data)

+#define MREPEAT236(macro, data)    MREPEAT235(macro, data)   macro(235, data)

+#define MREPEAT237(macro, data)    MREPEAT236(macro, data)   macro(236, data)

+#define MREPEAT238(macro, data)    MREPEAT237(macro, data)   macro(237, data)

+#define MREPEAT239(macro, data)    MREPEAT238(macro, data)   macro(238, data)

+#define MREPEAT240(macro, data)    MREPEAT239(macro, data)   macro(239, data)

+#define MREPEAT241(macro, data)    MREPEAT240(macro, data)   macro(240, data)

+#define MREPEAT242(macro, data)    MREPEAT241(macro, data)   macro(241, data)

+#define MREPEAT243(macro, data)    MREPEAT242(macro, data)   macro(242, data)

+#define MREPEAT244(macro, data)    MREPEAT243(macro, data)   macro(243, data)

+#define MREPEAT245(macro, data)    MREPEAT244(macro, data)   macro(244, data)

+#define MREPEAT246(macro, data)    MREPEAT245(macro, data)   macro(245, data)

+#define MREPEAT247(macro, data)    MREPEAT246(macro, data)   macro(246, data)

+#define MREPEAT248(macro, data)    MREPEAT247(macro, data)   macro(247, data)

+#define MREPEAT249(macro, data)    MREPEAT248(macro, data)   macro(248, data)

+#define MREPEAT250(macro, data)    MREPEAT249(macro, data)   macro(249, data)

+#define MREPEAT251(macro, data)    MREPEAT250(macro, data)   macro(250, data)

+#define MREPEAT252(macro, data)    MREPEAT251(macro, data)   macro(251, data)

+#define MREPEAT253(macro, data)    MREPEAT252(macro, data)   macro(252, data)

+#define MREPEAT254(macro, data)    MREPEAT253(macro, data)   macro(253, data)

+#define MREPEAT255(macro, data)    MREPEAT254(macro, data)   macro(254, data)

+#define MREPEAT256(macro, data)    MREPEAT255(macro, data)   macro(255, data)

+

+/** @} */

+

+#endif  /* _MREPEAT_H_ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/preprocessor/preprocessor.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/preprocessor/preprocessor.h
new file mode 100644
index 0000000..6b43d86
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/preprocessor/preprocessor.h
@@ -0,0 +1,51 @@
+/**

+ * \file

+ *

+ * \brief Preprocessor utils.

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+

+#ifndef _PREPROCESSOR_H_

+#define _PREPROCESSOR_H_

+

+#include "tpaste.h"

+#include "stringz.h"

+#include "mrepeat.h"

+

+#endif  // _PREPROCESSOR_H_

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/preprocessor/stringz.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/preprocessor/stringz.h
new file mode 100644
index 0000000..eef3955
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/preprocessor/stringz.h
@@ -0,0 +1,81 @@
+/**

+ * \file

+ *

+ * \brief Preprocessor stringizing utils.

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+

+#ifndef _STRINGZ_H_

+#define _STRINGZ_H_

+

+/**

+ * \defgroup group_sam0_utils_stringz Preprocessor - Stringize

+ *

+ * \ingroup group_sam0_utils

+ *

+ * @{

+ */

+

+/** \brief Stringize.

+ *

+ * Stringize a preprocessing token, this token being allowed to be \#defined.

+ *

+ * May be used only within macros with the token passed as an argument if the

+ * token is \#defined.

+ *

+ * For example, writing STRINGZ(PIN) within a macro \#defined by PIN_NAME(PIN)

+ * and invoked as PIN_NAME(PIN0) with PIN0 \#defined as A0 is equivalent to

+ * writing "A0".

+ */

+#define STRINGZ(x)                                #x

+

+/** \brief Absolute stringize.

+ *

+ * Stringize a preprocessing token, this token being allowed to be \#defined.

+ *

+ * No restriction of use if the token is \#defined.

+ *

+ * For example, writing ASTRINGZ(PIN0) anywhere with PIN0 \#defined as A0 is

+ * equivalent to writing "A0".

+ */

+#define ASTRINGZ(x)                               STRINGZ(x)

+

+/** @} */

+

+#endif  // _STRINGZ_H_

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/preprocessor/tpaste.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/preprocessor/tpaste.h
new file mode 100644
index 0000000..cea9877
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/preprocessor/tpaste.h
@@ -0,0 +1,100 @@
+/**

+ * \file

+ *

+ * \brief Preprocessor token pasting utils.

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+

+#ifndef _TPASTE_H_

+#define _TPASTE_H_

+

+/**

+ * \defgroup group_sam0_utils_tpaste Preprocessor - Token Paste

+ *

+ * \ingroup group_sam0_utils

+ *

+ * @{

+ */

+

+/** \name Token Paste

+ *

+ * Paste N preprocessing tokens together, these tokens being allowed to be \#defined.

+ *

+ * May be used only within macros with the tokens passed as arguments if the tokens are \#defined.

+ *

+ * For example, writing TPASTE2(U, WIDTH) within a macro \#defined by

+ * UTYPE(WIDTH) and invoked as UTYPE(UL_WIDTH) with UL_WIDTH \#defined as 32 is

+ * equivalent to writing U32.

+ *

+ * @{ */

+#define TPASTE2( a, b)                            a##b

+#define TPASTE3( a, b, c)                         a##b##c

+#define TPASTE4( a, b, c, d)                      a##b##c##d

+#define TPASTE5( a, b, c, d, e)                   a##b##c##d##e

+#define TPASTE6( a, b, c, d, e, f)                a##b##c##d##e##f

+#define TPASTE7( a, b, c, d, e, f, g)             a##b##c##d##e##f##g

+#define TPASTE8( a, b, c, d, e, f, g, h)          a##b##c##d##e##f##g##h

+#define TPASTE9( a, b, c, d, e, f, g, h, i)       a##b##c##d##e##f##g##h##i

+#define TPASTE10(a, b, c, d, e, f, g, h, i, j)    a##b##c##d##e##f##g##h##i##j

+/** @} */

+

+/** \name Absolute Token Paste

+ *

+ * Paste N preprocessing tokens together, these tokens being allowed to be \#defined.

+ *

+ * No restriction of use if the tokens are \#defined.

+ *

+ * For example, writing ATPASTE2(U, UL_WIDTH) anywhere with UL_WIDTH \#defined

+ * as 32 is equivalent to writing U32.

+ *

+ * @{ */

+#define ATPASTE2( a, b)                           TPASTE2( a, b)

+#define ATPASTE3( a, b, c)                        TPASTE3( a, b, c)

+#define ATPASTE4( a, b, c, d)                     TPASTE4( a, b, c, d)

+#define ATPASTE5( a, b, c, d, e)                  TPASTE5( a, b, c, d, e)

+#define ATPASTE6( a, b, c, d, e, f)               TPASTE6( a, b, c, d, e, f)

+#define ATPASTE7( a, b, c, d, e, f, g)            TPASTE7( a, b, c, d, e, f, g)

+#define ATPASTE8( a, b, c, d, e, f, g, h)         TPASTE8( a, b, c, d, e, f, g, h)

+#define ATPASTE9( a, b, c, d, e, f, g, h, i)      TPASTE9( a, b, c, d, e, f, g, h, i)

+#define ATPASTE10(a, b, c, d, e, f, g, h, i, j)   TPASTE10(a, b, c, d, e, f, g, h, i, j)

+/** @} */

+

+/** @} */

+

+#endif  // _TPASTE_H_

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/status_codes.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/status_codes.h
new file mode 100644
index 0000000..66b01f1
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/status_codes.h
@@ -0,0 +1,118 @@
+/**

+ * \file

+ *

+ * \brief Status code definitions.

+ *

+ * This file defines various status codes returned by functions,

+ * indicating success or failure as well as what kind of failure.

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+

+#ifndef STATUS_CODES_H_INCLUDED

+#define STATUS_CODES_H_INCLUDED

+

+#include <stdint.h>

+

+/**

+ * \defgroup group_sam0_utils_status_codes Status Codes

+ *

+ * \ingroup group_sam0_utils

+ *

+ * @{

+ */

+

+/** Mask to retrieve the error category of a status code. */

+#define STATUS_CATEGORY_MASK  0xF0

+

+/** Mask to retrieve the error code within the category of a status code. */

+#define STATUS_ERROR_MASK     0x0F

+

+/** Status code error categories. */

+enum status_categories {

+	STATUS_CATEGORY_OK                = 0x00,

+	STATUS_CATEGORY_COMMON            = 0x10,

+	STATUS_CATEGORY_ANALOG            = 0x30,

+	STATUS_CATEGORY_COM               = 0x40,

+	STATUS_CATEGORY_IO                = 0x50,

+};

+

+/**

+ * Status code that may be returned by shell commands and protocol

+ * implementations.

+ *

+ * \note Any change to these status codes and the corresponding

+ * message strings is strictly forbidden. New codes can be added,

+ * however, but make sure that any message string tables are updated

+ * at the same time.

+ */

+enum status_code {

+	STATUS_OK                         = STATUS_CATEGORY_OK     | 0x00,

+	STATUS_VALID_DATA                 = STATUS_CATEGORY_OK     | 0x01,

+	STATUS_NO_CHANGE                  = STATUS_CATEGORY_OK     | 0x02,

+	STATUS_ABORTED                    = STATUS_CATEGORY_OK     | 0x04,

+	STATUS_BUSY                       = STATUS_CATEGORY_OK     | 0x05,

+

+	STATUS_ERR_IO                     = STATUS_CATEGORY_COMMON | 0x00,

+	STATUS_ERR_REQ_FLUSHED            = STATUS_CATEGORY_COMMON | 0x01,

+	STATUS_ERR_TIMEOUT                = STATUS_CATEGORY_COMMON | 0x02,

+	STATUS_ERR_BAD_DATA               = STATUS_CATEGORY_COMMON | 0x03,

+	STATUS_ERR_UNSUPPORTED_DEV        = STATUS_CATEGORY_COMMON | 0x05,

+	STATUS_ERR_NO_MEMORY              = STATUS_CATEGORY_COMMON | 0x06,

+	STATUS_ERR_INVALID_ARG            = STATUS_CATEGORY_COMMON | 0x07,

+	STATUS_ERR_BAD_ADDRESS            = STATUS_CATEGORY_COMMON | 0x08,

+	STATUS_ERR_BAD_FORMAT             = STATUS_CATEGORY_COMMON | 0x0A,

+	STATUS_ERR_BAD_FRQ                = STATUS_CATEGORY_COMMON | 0x0B,

+	STATUS_ERR_DENIED                 = STATUS_CATEGORY_COMMON | 0x0c,

+	STATUS_ERR_ALREADY_INITIALIZED    = STATUS_CATEGORY_COMMON | 0x0d,

+	STATUS_ERR_OVERFLOW               = STATUS_CATEGORY_COMMON | 0x0e,

+	STATUS_ERR_NOT_INITIALIZED        = STATUS_CATEGORY_COMMON | 0x0f,

+

+	STATUS_ERR_SAMPLERATE_UNAVAILABLE = STATUS_CATEGORY_ANALOG | 0x00,

+	STATUS_ERR_RESOLUTION_UNAVAILABLE = STATUS_CATEGORY_ANALOG | 0x01,

+

+	STATUS_ERR_BAUDRATE_UNAVAILABLE   = STATUS_CATEGORY_COM    | 0x00,

+	STATUS_ERR_PACKET_COLLISION       = STATUS_CATEGORY_COM    | 0x01,

+	STATUS_ERR_PROTOCOL               = STATUS_CATEGORY_COM    | 0x02,

+

+	STATUS_ERR_PIN_MUX_INVALID        = STATUS_CATEGORY_IO     | 0x00,

+};

+

+/** @} */

+

+#endif /* STATUS_CODES_H_INCLUDED */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/syscalls/gcc/syscalls.c b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/syscalls/gcc/syscalls.c
new file mode 100644
index 0000000..17f3870
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/sam0/utils/syscalls/gcc/syscalls.c
@@ -0,0 +1,128 @@
+/**

+ * \file

+ *

+ * \brief Syscalls for SAM0 (GCC).

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+

+#include <stdio.h>

+#include <stdarg.h>

+#include <sys/types.h>

+#include <sys/stat.h>

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+#undef errno

+extern int errno;

+extern int _end;

+

+extern caddr_t _sbrk(int incr);

+extern int link(char *old, char *new);

+extern int _close(int file);

+extern int _fstat(int file, struct stat *st);

+extern int _isatty(int file);

+extern int _lseek(int file, int ptr, int dir);

+extern void _exit(int status);

+extern void _kill(int pid, int sig);

+extern int _getpid(void);

+

+extern caddr_t _sbrk(int incr)

+{

+	static unsigned char *heap = NULL;

+	unsigned char *prev_heap;

+

+	if (heap == NULL) {

+		heap = (unsigned char *)&_end;

+	}

+	prev_heap = heap;

+

+	heap += incr;

+

+	return (caddr_t) prev_heap;

+}

+

+extern int link(char *old, char *new)

+{

+	return -1;

+}

+

+extern int _close(int file)

+{

+	return -1;

+}

+

+extern int _fstat(int file, struct stat *st)

+{

+	st->st_mode = S_IFCHR;

+

+	return 0;

+}

+

+extern int _isatty(int file)

+{

+	return 1;

+}

+

+extern int _lseek(int file, int ptr, int dir)

+{

+	return 0;

+}

+

+extern void _exit(int status)

+{

+	printf("Exiting with status %d.\n", status);

+

+	for (;;);

+}

+

+extern void _kill(int pid, int sig)

+{

+	return;

+}

+

+extern int _getpid(void)

+{

+	return -1;

+}

+

+#ifdef __cplusplus

+}

+#endif

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/thirdparty/CMSIS/CMSIS END USER LICENCE AGREEMENT.pdf b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/thirdparty/CMSIS/CMSIS END USER LICENCE AGREEMENT.pdf
new file mode 100644
index 0000000..c8feab4
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/thirdparty/CMSIS/CMSIS END USER LICENCE AGREEMENT.pdf
Binary files differ
diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/thirdparty/CMSIS/Include/arm_math.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/thirdparty/CMSIS/Include/arm_math.h
new file mode 100644
index 0000000..b01681c
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/thirdparty/CMSIS/Include/arm_math.h
@@ -0,0 +1,7057 @@
+/* ----------------------------------------------------------------------

+ * Copyright (C) 2010-2011 ARM Limited. All rights reserved.

+ *

+ * $Date:        15. July 2011

+ * $Revision: 	V1.0.10

+ *

+ * Project: 	    CMSIS DSP Library

+ * Title:	     arm_math.h

+ *

+ * Description:	 Public header file for CMSIS DSP Library

+ *

+ * Target Processor: Cortex-M4/Cortex-M3/Cortex-M0

+ *

+ * Version 1.0.10 2011/7/15

+ *    Big Endian support added and Merged M0 and M3/M4 Source code.

+ *

+ * Version 1.0.3 2010/11/29

+ *    Re-organized the CMSIS folders and updated documentation.

+ *

+ * Version 1.0.2 2010/11/11

+ *    Documentation updated.

+ *

+ * Version 1.0.1 2010/10/05

+ *    Production release and review comments incorporated.

+ *

+ * Version 1.0.0 2010/09/20

+ *    Production release and review comments incorporated.

+ * -------------------------------------------------------------------- */

+

+/**

+   \mainpage CMSIS DSP Software Library

+   *

+   * <b>Introduction</b>

+   *

+   * This user manual describes the CMSIS DSP software library,

+   * a suite of common signal processing functions for use on Cortex-M processor based devices.

+   *

+   * The library is divided into a number of modules each covering a specific category:

+   * - Basic math functions

+   * - Fast math functions

+   * - Complex math functions

+   * - Filters

+   * - Matrix functions

+   * - Transforms

+   * - Motor control functions

+   * - Statistical functions

+   * - Support functions

+   * - Interpolation functions

+   *

+   * The library has separate functions for operating on 8-bit integers, 16-bit integers,

+   * 32-bit integer and 32-bit floating-point values.

+   *

+   * <b>Processor Support</b>

+   *

+   * The library is completely written in C and is fully CMSIS compliant.

+   * High performance is achieved through maximum use of Cortex-M4 intrinsics.

+   *

+   * The supplied library source code also builds and runs on the Cortex-M3 and Cortex-M0 processor,

+   * with the DSP intrinsics being emulated through software.

+   *

+   *

+   * <b>Toolchain Support</b>

+   *

+   * The library has been developed and tested with MDK-ARM version 4.21.

+   * The library is being tested in GCC and IAR toolchains and updates on this activity will be made available shortly.

+   *

+   * <b>Using the Library</b>

+   *

+   * The library installer contains prebuilt versions of the libraries in the <code>Lib</code> folder.

+   * - arm_cortexM4lf_math.lib (Little endian and Floating Point Unit on Cortex-M4)

+   * - arm_cortexM4bf_math.lib (Big endian and Floating Point Unit on Cortex-M4)

+   * - arm_cortexM4l_math.lib (Little endian on Cortex-M4)

+   * - arm_cortexM4b_math.lib (Big endian on Cortex-M4)

+   * - arm_cortexM3l_math.lib (Little endian on Cortex-M3)

+   * - arm_cortexM3b_math.lib (Big endian on Cortex-M3)

+   * - arm_cortexM0l_math.lib (Little endian on Cortex-M0)

+   * - arm_cortexM0b_math.lib (Big endian on Cortex-M3)

+   *

+   * The library functions are declared in the public file <code>arm_math.h</code> which is placed in the <code>Include</code> folder.

+   * Simply include this file and link the appropriate library in the application and begin calling the library functions. The Library supports single

+   * public header file <code>arm_math.h</code> for Cortex-M4/M3/M0 with little endian and big endian. Same header file will be used for floating point unit(FPU) variants.

+   * Define the appropriate pre processor MACRO ARM_MATH_CM4 or  ARM_MATH_CM3 or

+   * ARM_MATH_CM0 depending on the target processor in the application.

+   *

+   * <b>Examples</b>

+   *

+   * The library ships with a number of examples which demonstrate how to use the library functions.

+   *

+   * <b>Building the Library</b>

+   *

+   * The library installer contains project files to re build libraries on MDK Tool chain in the <code>CMSIS\\DSP_Lib\\Source\\ARM</code> folder.

+   * - arm_cortexM0b_math.uvproj

+   * - arm_cortexM0l_math.uvproj

+   * - arm_cortexM3b_math.uvproj

+   * - arm_cortexM3l_math.uvproj

+   * - arm_cortexM4b_math.uvproj

+   * - arm_cortexM4l_math.uvproj

+   * - arm_cortexM4bf_math.uvproj

+   * - arm_cortexM4lf_math.uvproj

+   *

+   * Each library project have differant pre-processor macros.

+   *

+   * <b>ARM_MATH_CMx:</b>

+   * Define macro ARM_MATH_CM4 for building the library on Cortex-M4 target, ARM_MATH_CM3 for building library on Cortex-M3 target

+   * and ARM_MATH_CM0 for building library on cortex-M0 target.

+   *

+   * <b>ARM_MATH_BIG_ENDIAN:</b>

+   * Define macro ARM_MATH_BIG_ENDIAN to build the library for big endian targets. By default library builds for little endian targets.

+   *

+   * <b>ARM_MATH_MATRIX_CHECK:</b>

+   * Define macro for checking on the input and output sizes of matrices

+   *

+   * <b>ARM_MATH_ROUNDING:</b>

+   * Define macro for rounding on support functions

+   *

+   * <b>__FPU_PRESENT:</b>

+   * Initialize macro __FPU_PRESENT = 1 when building on FPU supported Targets. Enable this macro for M4bf and M4lf libraries

+   *

+   *

+   * The project can be built by opening the appropriate project in MDK-ARM 4.21 chain and defining the optional pre processor MACROs detailed above.

+   *

+   * <b>Copyright Notice</b>

+   *

+   * Copyright (C) 2010 ARM Limited. All rights reserved.

+   */

+

+

+/**

+ * @defgroup groupMath Basic Math Functions

+ */

+

+/**

+ * @defgroup groupFastMath Fast Math Functions

+ * This set of functions provides a fast approximation to sine, cosine, and square root.

+ * As compared to most of the other functions in the CMSIS math library, the fast math functions

+ * operate on individual values and not arrays.

+ * There are separate functions for Q15, Q31, and floating-point data.

+ *

+ */

+

+/**

+ * @defgroup groupCmplxMath Complex Math Functions

+ * This set of functions operates on complex data vectors.

+ * The data in the complex arrays is stored in an interleaved fashion

+ * (real, imag, real, imag, ...).

+ * In the API functions, the number of samples in a complex array refers

+ * to the number of complex values; the array contains twice this number of

+ * real values.

+ */

+

+/**

+ * @defgroup groupFilters Filtering Functions

+ */

+

+/**

+ * @defgroup groupMatrix Matrix Functions

+ *

+ * This set of functions provides basic matrix math operations.

+ * The functions operate on matrix data structures.  For example,

+ * the type

+ * definition for the floating-point matrix structure is shown

+ * below:

+ * <pre>

+ *     typedef struct

+ *     {

+ *       uint16_t numRows;     // number of rows of the matrix.

+ *       uint16_t numCols;     // number of columns of the matrix.

+ *       float32_t *pData;     // points to the data of the matrix.

+ *     } arm_matrix_instance_f32;

+ * </pre>

+ * There are similar definitions for Q15 and Q31 data types.

+ *

+ * The structure specifies the size of the matrix and then points to

+ * an array of data.  The array is of size <code>numRows X numCols</code>

+ * and the values are arranged in row order.  That is, the

+ * matrix element (i, j) is stored at:

+ * <pre>

+ *     pData[i*numCols + j]

+ * </pre>

+ *

+ * \par Init Functions

+ * There is an associated initialization function for each type of matrix

+ * data structure.

+ * The initialization function sets the values of the internal structure fields.

+ * Refer to the function <code>arm_mat_init_f32()</code>, <code>arm_mat_init_q31()</code>

+ * and <code>arm_mat_init_q15()</code> for floating-point, Q31 and Q15 types,  respectively.

+ *

+ * \par

+ * Use of the initialization function is optional. However, if initialization function is used

+ * then the instance structure cannot be placed into a const data section.

+ * To place the instance structure in a const data

+ * section, manually initialize the data structure.  For example:

+ * <pre>

+ * <code>arm_matrix_instance_f32 S = {nRows, nColumns, pData};</code>

+ * <code>arm_matrix_instance_q31 S = {nRows, nColumns, pData};</code>

+ * <code>arm_matrix_instance_q15 S = {nRows, nColumns, pData};</code>

+ * </pre>

+ * where <code>nRows</code> specifies the number of rows, <code>nColumns</code>

+ * specifies the number of columns, and <code>pData</code> points to the

+ * data array.

+ *

+ * \par Size Checking

+ * By default all of the matrix functions perform size checking on the input and

+ * output matrices.  For example, the matrix addition function verifies that the

+ * two input matrices and the output matrix all have the same number of rows and

+ * columns.  If the size check fails the functions return:

+ * <pre>

+ *     ARM_MATH_SIZE_MISMATCH

+ * </pre>

+ * Otherwise the functions return

+ * <pre>

+ *     ARM_MATH_SUCCESS

+ * </pre>

+ * There is some overhead associated with this matrix size checking.

+ * The matrix size checking is enabled via the \#define

+ * <pre>

+ *     ARM_MATH_MATRIX_CHECK

+ * </pre>

+ * within the library project settings.  By default this macro is defined

+ * and size checking is enabled.  By changing the project settings and

+ * undefining this macro size checking is eliminated and the functions

+ * run a bit faster.  With size checking disabled the functions always

+ * return <code>ARM_MATH_SUCCESS</code>.

+ */

+

+/**

+ * @defgroup groupTransforms Transform Functions

+ */

+

+/**

+ * @defgroup groupController Controller Functions

+ */

+

+/**

+ * @defgroup groupStats Statistics Functions

+ */

+/**

+ * @defgroup groupSupport Support Functions

+ */

+

+/**

+ * @defgroup groupInterpolation Interpolation Functions

+ * These functions perform 1- and 2-dimensional interpolation of data.

+ * Linear interpolation is used for 1-dimensional data and

+ * bilinear interpolation is used for 2-dimensional data.

+ */

+

+/**

+ * @defgroup groupExamples Examples

+ */

+#ifndef _ARM_MATH_H

+#define _ARM_MATH_H

+

+#define __CMSIS_GENERIC              /* disable NVIC and Systick functions */

+

+#if defined (ARM_MATH_CM4)

+  #include "core_cm4.h"

+#elif defined (ARM_MATH_CM3)

+  #include "core_cm3.h"

+#elif defined (ARM_MATH_CM0)

+  #include "core_cm0.h"

+#else

+#include "ARMCM4.h"

+#warning "Define either ARM_MATH_CM4 OR ARM_MATH_CM3...By Default building on ARM_MATH_CM4....."

+#endif

+

+#undef  __CMSIS_GENERIC              /* enable NVIC and Systick functions */

+#include "string.h"

+    #include "math.h"

+#ifdef	__cplusplus

+extern "C"

+{

+#endif

+

+

+  /**

+   * @brief Macros required for reciprocal calculation in Normalized LMS

+   */

+

+#define DELTA_Q31 			(0x100)

+#define DELTA_Q15 			0x5

+#define INDEX_MASK 			0x0000003F

+#define PI					3.14159265358979f

+

+  /**

+   * @brief Macros required for SINE and COSINE Fast math approximations

+   */

+

+#define TABLE_SIZE			256

+#define TABLE_SPACING_Q31	0x800000

+#define TABLE_SPACING_Q15	0x80

+

+  /**

+   * @brief Macros required for SINE and COSINE Controller functions

+   */

+  /* 1.31(q31) Fixed value of 2/360 */

+  /* -1 to +1 is divided into 360 values so total spacing is (2/360) */

+#define INPUT_SPACING			0xB60B61

+

+

+  /**

+   * @brief Error status returned by some functions in the library.

+   */

+

+  typedef enum

+    {

+      ARM_MATH_SUCCESS = 0,              /**< No error */

+      ARM_MATH_ARGUMENT_ERROR = -1,      /**< One or more arguments are incorrect */

+      ARM_MATH_LENGTH_ERROR = -2,        /**< Length of data buffer is incorrect */

+      ARM_MATH_SIZE_MISMATCH = -3,       /**< Size of matrices is not compatible with the operation. */

+      ARM_MATH_NANINF = -4,              /**< Not-a-number (NaN) or infinity is generated */

+      ARM_MATH_SINGULAR = -5,            /**< Generated by matrix inversion if the input matrix is singular and cannot be inverted. */

+      ARM_MATH_TEST_FAILURE = -6         /**< Test Failed  */

+    } arm_status;

+

+  /**

+   * @brief 8-bit fractional data type in 1.7 format.

+   */

+  typedef int8_t q7_t;

+

+  /**

+   * @brief 16-bit fractional data type in 1.15 format.

+   */

+  typedef int16_t q15_t;

+

+  /**

+   * @brief 32-bit fractional data type in 1.31 format.

+   */

+  typedef int32_t q31_t;

+

+  /**

+   * @brief 64-bit fractional data type in 1.63 format.

+   */

+  typedef int64_t q63_t;

+

+  /**

+   * @brief 32-bit floating-point type definition.

+   */

+  typedef float float32_t;

+

+  /**

+   * @brief 64-bit floating-point type definition.

+   */

+  typedef double float64_t;

+

+  /**

+   * @brief definition to read/write two 16 bit values.

+   */

+#define __SIMD32(addr)  (*(int32_t **) & (addr))

+

+#if defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0)

+  /**

+   * @brief definition to pack two 16 bit values.

+   */

+#define __PKHBT(ARG1, ARG2, ARG3)      ( (((int32_t)(ARG1) <<  0) & (int32_t)0x0000FFFF) | \

+                                         (((int32_t)(ARG2) << ARG3) & (int32_t)0xFFFF0000)  )

+

+#endif

+

+

+   /**

+   * @brief definition to pack four 8 bit values.

+   */

+#ifndef ARM_MATH_BIG_ENDIAN

+

+#define __PACKq7(v0,v1,v2,v3) ( (((int32_t)(v0) <<  0) & (int32_t)0x000000FF) |	\

+                                (((int32_t)(v1) <<  8) & (int32_t)0x0000FF00) |	\

+							    (((int32_t)(v2) << 16) & (int32_t)0x00FF0000) |	\

+							    (((int32_t)(v3) << 24) & (int32_t)0xFF000000)  )

+#else

+

+#define __PACKq7(v0,v1,v2,v3) ( (((int32_t)(v3) <<  0) & (int32_t)0x000000FF) |	\

+                                (((int32_t)(v2) <<  8) & (int32_t)0x0000FF00) |	\

+							    (((int32_t)(v1) << 16) & (int32_t)0x00FF0000) |	\

+							    (((int32_t)(v0) << 24) & (int32_t)0xFF000000)  )

+

+#endif

+

+

+  /**

+   * @brief Clips Q63 to Q31 values.

+   */

+  __STATIC_INLINE q31_t clip_q63_to_q31(

+					q63_t x)

+  {

+    return ((q31_t) (x >> 32) != ((q31_t) x >> 31)) ?

+      ((0x7FFFFFFF ^ ((q31_t) (x >> 63)))) : (q31_t) x;

+  }

+

+  /**

+   * @brief Clips Q63 to Q15 values.

+   */

+  __STATIC_INLINE q15_t clip_q63_to_q15(

+					q63_t x)

+  {

+    return ((q31_t) (x >> 32) != ((q31_t) x >> 31)) ?

+      ((0x7FFF ^ ((q15_t) (x >> 63)))) : (q15_t) (x >> 15);

+  }

+

+  /**

+   * @brief Clips Q31 to Q7 values.

+   */

+  __STATIC_INLINE q7_t clip_q31_to_q7(

+				      q31_t x)

+  {

+    return ((q31_t) (x >> 24) != ((q31_t) x >> 23)) ?

+      ((0x7F ^ ((q7_t) (x >> 31)))) : (q7_t) x;

+  }

+

+  /**

+   * @brief Clips Q31 to Q15 values.

+   */

+  __STATIC_INLINE q15_t clip_q31_to_q15(

+					q31_t x)

+  {

+    return ((q31_t) (x >> 16) != ((q31_t) x >> 15)) ?

+      ((0x7FFF ^ ((q15_t) (x >> 31)))) : (q15_t) x;

+  }

+

+  /**

+   * @brief Multiplies 32 X 64 and returns 32 bit result in 2.30 format.

+   */

+

+  __STATIC_INLINE q63_t mult32x64(

+				  q63_t x,

+				  q31_t y)

+  {

+    return ((((q63_t) (x & 0x00000000FFFFFFFF) * y) >> 32) +

+            (((q63_t) (x >> 32) * y)));

+  }

+

+

+#if defined (ARM_MATH_CM0) && defined ( __CC_ARM   )

+#define __CLZ __clz

+#endif

+

+#if defined (ARM_MATH_CM0) && defined ( __TASKING__ )

+/* No need to redefine __CLZ */

+#endif

+

+#if defined (ARM_MATH_CM0) && ((defined (__ICCARM__)) ||(defined (__GNUC__)) )

+

+  __STATIC_INLINE  uint32_t __CLZ(q31_t data);

+

+

+  __STATIC_INLINE uint32_t __CLZ(q31_t data)

+  {

+	  uint32_t count = 0;

+	  uint32_t mask = 0x80000000;

+

+	  while((data & mask) ==  0)

+	  {

+		  count += 1u;

+		  mask = mask >> 1u;

+	  }

+

+	  return(count);

+

+  }

+

+#endif

+

+  /**

+   * @brief Function to Calculates 1/in(reciprocal) value of Q31 Data type.

+   */

+

+  __STATIC_INLINE uint32_t arm_recip_q31(

+					 q31_t in,

+					 q31_t * dst,

+					 q31_t * pRecipTable)

+  {

+

+    uint32_t out, tempVal;

+    uint32_t index, i;

+    uint32_t signBits;

+

+    if(in > 0)

+      {

+	signBits = __CLZ(in) - 1;

+      }

+    else

+      {

+	signBits = __CLZ(-in) - 1;

+      }

+

+    /* Convert input sample to 1.31 format */

+    in = in << signBits;

+

+    /* calculation of index for initial approximated Val */

+    index = (uint32_t) (in >> 24u);

+    index = (index & INDEX_MASK);

+

+    /* 1.31 with exp 1 */

+    out = pRecipTable[index];

+

+    /* calculation of reciprocal value */

+    /* running approximation for two iterations */

+    for (i = 0u; i < 2u; i++)

+      {

+	tempVal = (q31_t) (((q63_t) in * out) >> 31u);

+	tempVal = 0x7FFFFFFF - tempVal;

+	/*      1.31 with exp 1 */

+	//out = (q31_t) (((q63_t) out * tempVal) >> 30u);

+	out = (q31_t) clip_q63_to_q31(((q63_t) out * tempVal) >> 30u);

+      }

+

+    /* write output */

+    *dst = out;

+

+    /* return num of signbits of out = 1/in value */

+    return (signBits + 1u);

+

+  }

+

+  /**

+   * @brief Function to Calculates 1/in(reciprocal) value of Q15 Data type.

+   */

+  __STATIC_INLINE uint32_t arm_recip_q15(

+					 q15_t in,

+					 q15_t * dst,

+					 q15_t * pRecipTable)

+  {

+

+    uint32_t out = 0, tempVal = 0;

+    uint32_t index = 0, i = 0;

+    uint32_t signBits = 0;

+

+    if(in > 0)

+      {

+	signBits = __CLZ(in) - 17;

+      }

+    else

+      {

+	signBits = __CLZ(-in) - 17;

+      }

+

+    /* Convert input sample to 1.15 format */

+    in = in << signBits;

+

+    /* calculation of index for initial approximated Val */

+    index = in >> 8;

+    index = (index & INDEX_MASK);

+

+    /*      1.15 with exp 1  */

+    out = pRecipTable[index];

+

+    /* calculation of reciprocal value */

+    /* running approximation for two iterations */

+    for (i = 0; i < 2; i++)

+      {

+	tempVal = (q15_t) (((q31_t) in * out) >> 15);

+	tempVal = 0x7FFF - tempVal;

+	/*      1.15 with exp 1 */

+	out = (q15_t) (((q31_t) out * tempVal) >> 14);

+      }

+

+    /* write output */

+    *dst = out;

+

+    /* return num of signbits of out = 1/in value */

+    return (signBits + 1);

+

+  }

+

+

+  /*

+   * @brief C custom defined intrinisic function for only M0 processors

+   */

+#if defined(ARM_MATH_CM0)

+

+  __STATIC_INLINE q31_t __SSAT(

+			       q31_t x,

+			       uint32_t y)

+  {

+    int32_t posMax, negMin;

+    uint32_t i;

+

+    posMax = 1;

+    for (i = 0; i < (y - 1); i++)

+      {

+	posMax = posMax * 2;

+      }

+

+    if(x > 0)

+      {

+	posMax = (posMax - 1);

+

+	if(x > posMax)

+	  {

+	    x = posMax;

+	  }

+      }

+    else

+      {

+	negMin = -posMax;

+

+	if(x < negMin)

+	  {

+	    x = negMin;

+	  }

+      }

+    return (x);

+

+

+  }

+

+#endif /* end of ARM_MATH_CM0 */

+

+

+

+  /*

+   * @brief C custom defined intrinsic function for M3 and M0 processors

+   */

+#if defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0)

+

+  /*

+   * @brief C custom defined QADD8 for M3 and M0 processors

+   */

+  __STATIC_INLINE q31_t __QADD8(

+				q31_t x,

+				q31_t y)

+  {

+

+    q31_t sum;

+    q7_t r, s, t, u;

+

+    r = (char) x;

+    s = (char) y;

+

+    r = __SSAT((q31_t) (r + s), 8);

+    s = __SSAT(((q31_t) (((x << 16) >> 24) + ((y << 16) >> 24))), 8);

+    t = __SSAT(((q31_t) (((x << 8) >> 24) + ((y << 8) >> 24))), 8);

+    u = __SSAT(((q31_t) ((x >> 24) + (y >> 24))), 8);

+

+    sum = (((q31_t) u << 24) & 0xFF000000) | (((q31_t) t << 16) & 0x00FF0000) |

+      (((q31_t) s << 8) & 0x0000FF00) | (r & 0x000000FF);

+

+    return sum;

+

+  }

+

+  /*

+   * @brief C custom defined QSUB8 for M3 and M0 processors

+   */

+  __STATIC_INLINE q31_t __QSUB8(

+				q31_t x,

+				q31_t y)

+  {

+

+    q31_t sum;

+    q31_t r, s, t, u;

+

+    r = (char) x;

+    s = (char) y;

+

+    r = __SSAT((r - s), 8);

+    s = __SSAT(((q31_t) (((x << 16) >> 24) - ((y << 16) >> 24))), 8) << 8;

+    t = __SSAT(((q31_t) (((x << 8) >> 24) - ((y << 8) >> 24))), 8) << 16;

+    u = __SSAT(((q31_t) ((x >> 24) - (y >> 24))), 8) << 24;

+

+    sum =

+      (u & 0xFF000000) | (t & 0x00FF0000) | (s & 0x0000FF00) | (r & 0x000000FF);

+

+    return sum;

+  }

+

+  /*

+   * @brief C custom defined QADD16 for M3 and M0 processors

+   */

+

+  /*

+   * @brief C custom defined QADD16 for M3 and M0 processors

+   */

+  __STATIC_INLINE q31_t __QADD16(

+				 q31_t x,

+				 q31_t y)

+  {

+

+    q31_t sum;

+    q31_t r, s;

+

+    r = (short) x;

+    s = (short) y;

+

+    r = __SSAT(r + s, 16);

+    s = __SSAT(((q31_t) ((x >> 16) + (y >> 16))), 16) << 16;

+

+    sum = (s & 0xFFFF0000) | (r & 0x0000FFFF);

+

+    return sum;

+

+  }

+

+  /*

+   * @brief C custom defined SHADD16 for M3 and M0 processors

+   */

+  __STATIC_INLINE q31_t __SHADD16(

+				  q31_t x,

+				  q31_t y)

+  {

+

+    q31_t sum;

+    q31_t r, s;

+

+    r = (short) x;

+    s = (short) y;

+

+    r = ((r >> 1) + (s >> 1));

+    s = ((q31_t) ((x >> 17) + (y >> 17))) << 16;

+

+    sum = (s & 0xFFFF0000) | (r & 0x0000FFFF);

+

+    return sum;

+

+  }

+

+  /*

+   * @brief C custom defined QSUB16 for M3 and M0 processors

+   */

+  __STATIC_INLINE q31_t __QSUB16(

+				 q31_t x,

+				 q31_t y)

+  {

+

+    q31_t sum;

+    q31_t r, s;

+

+    r = (short) x;

+    s = (short) y;

+

+    r = __SSAT(r - s, 16);

+    s = __SSAT(((q31_t) ((x >> 16) - (y >> 16))), 16) << 16;

+

+    sum = (s & 0xFFFF0000) | (r & 0x0000FFFF);

+

+    return sum;

+  }

+

+  /*

+   * @brief C custom defined SHSUB16 for M3 and M0 processors

+   */

+  __STATIC_INLINE q31_t __SHSUB16(

+				  q31_t x,

+				  q31_t y)

+  {

+

+    q31_t diff;

+    q31_t r, s;

+

+    r = (short) x;

+    s = (short) y;

+

+    r = ((r >> 1) - (s >> 1));

+    s = (((x >> 17) - (y >> 17)) << 16);

+

+    diff = (s & 0xFFFF0000) | (r & 0x0000FFFF);

+

+    return diff;

+  }

+

+  /*

+   * @brief C custom defined QASX for M3 and M0 processors

+   */

+  __STATIC_INLINE q31_t __QASX(

+			       q31_t x,

+			       q31_t y)

+  {

+

+    q31_t sum = 0;

+

+    sum = ((sum + clip_q31_to_q15((q31_t) ((short) (x >> 16) + (short) y))) << 16) +

+      clip_q31_to_q15((q31_t) ((short) x - (short) (y >> 16)));

+

+    return sum;

+  }

+

+  /*

+   * @brief C custom defined SHASX for M3 and M0 processors

+   */

+  __STATIC_INLINE q31_t __SHASX(

+				q31_t x,

+				q31_t y)

+  {

+

+    q31_t sum;

+    q31_t r, s;

+

+    r = (short) x;

+    s = (short) y;

+

+    r = ((r >> 1) - (y >> 17));

+    s = (((x >> 17) + (s >> 1)) << 16);

+

+    sum = (s & 0xFFFF0000) | (r & 0x0000FFFF);

+

+    return sum;

+  }

+

+

+  /*

+   * @brief C custom defined QSAX for M3 and M0 processors

+   */

+  __STATIC_INLINE q31_t __QSAX(

+			       q31_t x,

+			       q31_t y)

+  {

+

+    q31_t sum = 0;

+

+    sum = ((sum + clip_q31_to_q15((q31_t) ((short) (x >> 16) - (short) y))) << 16) +

+      clip_q31_to_q15((q31_t) ((short) x + (short) (y >> 16)));

+

+    return sum;

+  }

+

+  /*

+   * @brief C custom defined SHSAX for M3 and M0 processors

+   */

+  __STATIC_INLINE q31_t __SHSAX(

+				q31_t x,

+				q31_t y)

+  {

+

+    q31_t sum;

+    q31_t r, s;

+

+    r = (short) x;

+    s = (short) y;

+

+    r = ((r >> 1) + (y >> 17));

+    s = (((x >> 17) - (s >> 1)) << 16);

+

+    sum = (s & 0xFFFF0000) | (r & 0x0000FFFF);

+

+    return sum;

+  }

+

+  /*

+   * @brief C custom defined SMUSDX for M3 and M0 processors

+   */

+  __STATIC_INLINE q31_t __SMUSDX(

+				 q31_t x,

+				 q31_t y)

+  {

+

+    return ((q31_t)(((short) x * (short) (y >> 16)) -

+		    ((short) (x >> 16) * (short) y)));

+  }

+

+  /*

+   * @brief C custom defined SMUADX for M3 and M0 processors

+   */

+  __STATIC_INLINE q31_t __SMUADX(

+				 q31_t x,

+				 q31_t y)

+  {

+

+    return ((q31_t)(((short) x * (short) (y >> 16)) +

+		    ((short) (x >> 16) * (short) y)));

+  }

+

+  /*

+   * @brief C custom defined QADD for M3 and M0 processors

+   */

+  __STATIC_INLINE q31_t __QADD(

+			       q31_t x,

+			       q31_t y)

+  {

+    return clip_q63_to_q31((q63_t) x + y);

+  }

+

+  /*

+   * @brief C custom defined QSUB for M3 and M0 processors

+   */

+  __STATIC_INLINE q31_t __QSUB(

+			       q31_t x,

+			       q31_t y)

+  {

+    return clip_q63_to_q31((q63_t) x - y);

+  }

+

+  /*

+   * @brief C custom defined SMLAD for M3 and M0 processors

+   */

+  __STATIC_INLINE q31_t __SMLAD(

+				q31_t x,

+				q31_t y,

+				q31_t sum)

+  {

+

+    return (sum + ((short) (x >> 16) * (short) (y >> 16)) +

+            ((short) x * (short) y));

+  }

+

+  /*

+   * @brief C custom defined SMLADX for M3 and M0 processors

+   */

+  __STATIC_INLINE q31_t __SMLADX(

+				 q31_t x,

+				 q31_t y,

+				 q31_t sum)

+  {

+

+    return (sum + ((short) (x >> 16) * (short) (y)) +

+            ((short) x * (short) (y >> 16)));

+  }

+

+  /*

+   * @brief C custom defined SMLSDX for M3 and M0 processors

+   */

+  __STATIC_INLINE q31_t __SMLSDX(

+				 q31_t x,

+				 q31_t y,

+				 q31_t sum)

+  {

+

+    return (sum - ((short) (x >> 16) * (short) (y)) +

+            ((short) x * (short) (y >> 16)));

+  }

+

+  /*

+   * @brief C custom defined SMLALD for M3 and M0 processors

+   */

+  __STATIC_INLINE q63_t __SMLALD(

+				 q31_t x,

+				 q31_t y,

+				 q63_t sum)

+  {

+

+    return (sum + ((short) (x >> 16) * (short) (y >> 16)) +

+            ((short) x * (short) y));

+  }

+

+  /*

+   * @brief C custom defined SMLALDX for M3 and M0 processors

+   */

+  __STATIC_INLINE q63_t __SMLALDX(

+				  q31_t x,

+				  q31_t y,

+				  q63_t sum)

+  {

+

+    return (sum + ((short) (x >> 16) * (short) y)) +

+      ((short) x * (short) (y >> 16));

+  }

+

+  /*

+   * @brief C custom defined SMUAD for M3 and M0 processors

+   */

+  __STATIC_INLINE q31_t __SMUAD(

+				q31_t x,

+				q31_t y)

+  {

+

+    return (((x >> 16) * (y >> 16)) +

+            (((x << 16) >> 16) * ((y << 16) >> 16)));

+  }

+

+  /*

+   * @brief C custom defined SMUSD for M3 and M0 processors

+   */

+  __STATIC_INLINE q31_t __SMUSD(

+				q31_t x,

+				q31_t y)

+  {

+

+    return (-((x >> 16) * (y >> 16)) +

+            (((x << 16) >> 16) * ((y << 16) >> 16)));

+  }

+

+

+

+

+#endif /* (ARM_MATH_CM3) || defined (ARM_MATH_CM0) */

+

+

+  /**

+   * @brief Instance structure for the Q7 FIR filter.

+   */

+  typedef struct

+  {

+    uint16_t numTaps;        /**< number of filter coefficients in the filter. */

+    q7_t *pState;            /**< points to the state variable array. The array is of length numTaps+blockSize-1. */

+    q7_t *pCoeffs;           /**< points to the coefficient array. The array is of length numTaps.*/

+  } arm_fir_instance_q7;

+

+  /**

+   * @brief Instance structure for the Q15 FIR filter.

+   */

+  typedef struct

+  {

+    uint16_t numTaps;         /**< number of filter coefficients in the filter. */

+    q15_t *pState;            /**< points to the state variable array. The array is of length numTaps+blockSize-1. */

+    q15_t *pCoeffs;           /**< points to the coefficient array. The array is of length numTaps.*/

+  } arm_fir_instance_q15;

+

+  /**

+   * @brief Instance structure for the Q31 FIR filter.

+   */

+  typedef struct

+  {

+    uint16_t numTaps;         /**< number of filter coefficients in the filter. */

+    q31_t *pState;            /**< points to the state variable array. The array is of length numTaps+blockSize-1. */

+    q31_t *pCoeffs;           /**< points to the coefficient array. The array is of length numTaps. */

+  } arm_fir_instance_q31;

+

+  /**

+   * @brief Instance structure for the floating-point FIR filter.

+   */

+  typedef struct

+  {

+    uint16_t numTaps;     /**< number of filter coefficients in the filter. */

+    float32_t *pState;    /**< points to the state variable array. The array is of length numTaps+blockSize-1. */

+    float32_t *pCoeffs;   /**< points to the coefficient array. The array is of length numTaps. */

+  } arm_fir_instance_f32;

+

+

+  /**

+   * @brief Processing function for the Q7 FIR filter.

+   * @param[in] *S points to an instance of the Q7 FIR filter structure.

+   * @param[in] *pSrc points to the block of input data.

+   * @param[out] *pDst points to the block of output data.

+   * @param[in] blockSize number of samples to process.

+   * @return none.

+   */

+  void arm_fir_q7(

+		  const arm_fir_instance_q7 * S,

+		   q7_t * pSrc,

+		  q7_t * pDst,

+		  uint32_t blockSize);

+

+

+  /**

+   * @brief  Initialization function for the Q7 FIR filter.

+   * @param[in,out] *S points to an instance of the Q7 FIR structure.

+   * @param[in] numTaps  Number of filter coefficients in the filter.

+   * @param[in] *pCoeffs points to the filter coefficients.

+   * @param[in] *pState points to the state buffer.

+   * @param[in] blockSize number of samples that are processed.

+   * @return none

+   */

+  void arm_fir_init_q7(

+		       arm_fir_instance_q7 * S,

+		       uint16_t numTaps,

+		       q7_t * pCoeffs,

+		       q7_t * pState,

+		       uint32_t blockSize);

+

+

+  /**

+   * @brief Processing function for the Q15 FIR filter.

+   * @param[in] *S points to an instance of the Q15 FIR structure.

+   * @param[in] *pSrc points to the block of input data.

+   * @param[out] *pDst points to the block of output data.

+   * @param[in] blockSize number of samples to process.

+   * @return none.

+   */

+  void arm_fir_q15(

+		   const arm_fir_instance_q15 * S,

+		    q15_t * pSrc,

+		   q15_t * pDst,

+		   uint32_t blockSize);

+

+  /**

+   * @brief Processing function for the fast Q15 FIR filter for Cortex-M3 and Cortex-M4.

+   * @param[in] *S points to an instance of the Q15 FIR filter structure.

+   * @param[in] *pSrc points to the block of input data.

+   * @param[out] *pDst points to the block of output data.

+   * @param[in] blockSize number of samples to process.

+   * @return none.

+   */

+  void arm_fir_fast_q15(

+			const arm_fir_instance_q15 * S,

+			 q15_t * pSrc,

+			q15_t * pDst,

+			uint32_t blockSize);

+

+  /**

+   * @brief  Initialization function for the Q15 FIR filter.

+   * @param[in,out] *S points to an instance of the Q15 FIR filter structure.

+   * @param[in] numTaps  Number of filter coefficients in the filter. Must be even and greater than or equal to 4.

+   * @param[in] *pCoeffs points to the filter coefficients.

+   * @param[in] *pState points to the state buffer.

+   * @param[in] blockSize number of samples that are processed at a time.

+   * @return The function returns ARM_MATH_SUCCESS if initialization was successful or ARM_MATH_ARGUMENT_ERROR if

+   * <code>numTaps</code> is not a supported value.

+   */

+

+       arm_status arm_fir_init_q15(

+			      arm_fir_instance_q15 * S,

+			      uint16_t numTaps,

+			      q15_t * pCoeffs,

+			      q15_t * pState,

+			      uint32_t blockSize);

+

+  /**

+   * @brief Processing function for the Q31 FIR filter.

+   * @param[in] *S points to an instance of the Q31 FIR filter structure.

+   * @param[in] *pSrc points to the block of input data.

+   * @param[out] *pDst points to the block of output data.

+   * @param[in] blockSize number of samples to process.

+   * @return none.

+   */

+  void arm_fir_q31(

+		   const arm_fir_instance_q31 * S,

+		    q31_t * pSrc,

+		   q31_t * pDst,

+		   uint32_t blockSize);

+

+  /**

+   * @brief Processing function for the fast Q31 FIR filter for Cortex-M3 and Cortex-M4.

+   * @param[in] *S points to an instance of the Q31 FIR structure.

+   * @param[in] *pSrc points to the block of input data.

+   * @param[out] *pDst points to the block of output data.

+   * @param[in] blockSize number of samples to process.

+   * @return none.

+   */

+  void arm_fir_fast_q31(

+			const arm_fir_instance_q31 * S,

+			 q31_t * pSrc,

+			q31_t * pDst,

+			uint32_t blockSize);

+

+  /**

+   * @brief  Initialization function for the Q31 FIR filter.

+   * @param[in,out] *S points to an instance of the Q31 FIR structure.

+   * @param[in] 	numTaps  Number of filter coefficients in the filter.

+   * @param[in] 	*pCoeffs points to the filter coefficients.

+   * @param[in] 	*pState points to the state buffer.

+   * @param[in] 	blockSize number of samples that are processed at a time.

+   * @return 		none.

+   */

+  void arm_fir_init_q31(

+			arm_fir_instance_q31 * S,

+			uint16_t numTaps,

+			q31_t * pCoeffs,

+			q31_t * pState,

+			uint32_t blockSize);

+

+  /**

+   * @brief Processing function for the floating-point FIR filter.

+   * @param[in] *S points to an instance of the floating-point FIR structure.

+   * @param[in] *pSrc points to the block of input data.

+   * @param[out] *pDst points to the block of output data.

+   * @param[in] blockSize number of samples to process.

+   * @return none.

+   */

+  void arm_fir_f32(

+		   const arm_fir_instance_f32 * S,

+		    float32_t * pSrc,

+		   float32_t * pDst,

+		   uint32_t blockSize);

+

+  /**

+   * @brief  Initialization function for the floating-point FIR filter.

+   * @param[in,out] *S points to an instance of the floating-point FIR filter structure.

+   * @param[in] 	numTaps  Number of filter coefficients in the filter.

+   * @param[in] 	*pCoeffs points to the filter coefficients.

+   * @param[in] 	*pState points to the state buffer.

+   * @param[in] 	blockSize number of samples that are processed at a time.

+   * @return    	none.

+   */

+  void arm_fir_init_f32(

+			arm_fir_instance_f32 * S,

+			uint16_t numTaps,

+			float32_t * pCoeffs,

+			float32_t * pState,

+			uint32_t blockSize);

+

+

+  /**

+   * @brief Instance structure for the Q15 Biquad cascade filter.

+   */

+  typedef struct

+  {

+    int8_t numStages;         /**< number of 2nd order stages in the filter.  Overall order is 2*numStages. */

+    q15_t *pState;            /**< Points to the array of state coefficients.  The array is of length 4*numStages. */

+    q15_t *pCoeffs;           /**< Points to the array of coefficients.  The array is of length 5*numStages. */

+    int8_t postShift;         /**< Additional shift, in bits, applied to each output sample. */

+

+  } arm_biquad_casd_df1_inst_q15;

+

+

+  /**

+   * @brief Instance structure for the Q31 Biquad cascade filter.

+   */

+  typedef struct

+  {

+    uint32_t numStages;      /**< number of 2nd order stages in the filter.  Overall order is 2*numStages. */

+    q31_t *pState;           /**< Points to the array of state coefficients.  The array is of length 4*numStages. */

+    q31_t *pCoeffs;          /**< Points to the array of coefficients.  The array is of length 5*numStages. */

+    uint8_t postShift;       /**< Additional shift, in bits, applied to each output sample. */

+

+  } arm_biquad_casd_df1_inst_q31;

+

+  /**

+   * @brief Instance structure for the floating-point Biquad cascade filter.

+   */

+  typedef struct

+  {

+    uint32_t numStages;         /**< number of 2nd order stages in the filter.  Overall order is 2*numStages. */

+    float32_t *pState;          /**< Points to the array of state coefficients.  The array is of length 4*numStages. */

+    float32_t *pCoeffs;         /**< Points to the array of coefficients.  The array is of length 5*numStages. */

+

+

+  } arm_biquad_casd_df1_inst_f32;

+

+

+

+  /**

+   * @brief Processing function for the Q15 Biquad cascade filter.

+   * @param[in]  *S points to an instance of the Q15 Biquad cascade structure.

+   * @param[in]  *pSrc points to the block of input data.

+   * @param[out] *pDst points to the block of output data.

+   * @param[in]  blockSize number of samples to process.

+   * @return     none.

+   */

+

+  void arm_biquad_cascade_df1_q15(

+				  const arm_biquad_casd_df1_inst_q15 * S,

+				   q15_t * pSrc,

+				  q15_t * pDst,

+				  uint32_t blockSize);

+

+  /**

+   * @brief  Initialization function for the Q15 Biquad cascade filter.

+   * @param[in,out] *S           points to an instance of the Q15 Biquad cascade structure.

+   * @param[in]     numStages    number of 2nd order stages in the filter.

+   * @param[in]     *pCoeffs     points to the filter coefficients.

+   * @param[in]     *pState      points to the state buffer.

+   * @param[in]     postShift    Shift to be applied to the output. Varies according to the coefficients format

+   * @return        none

+   */

+

+  void arm_biquad_cascade_df1_init_q15(

+				       arm_biquad_casd_df1_inst_q15 * S,

+				       uint8_t numStages,

+				       q15_t * pCoeffs,

+				       q15_t * pState,

+				       int8_t postShift);

+

+

+  /**

+   * @brief Fast but less precise processing function for the Q15 Biquad cascade filter for Cortex-M3 and Cortex-M4.

+   * @param[in]  *S points to an instance of the Q15 Biquad cascade structure.

+   * @param[in]  *pSrc points to the block of input data.

+   * @param[out] *pDst points to the block of output data.

+   * @param[in]  blockSize number of samples to process.

+   * @return     none.

+   */

+

+  void arm_biquad_cascade_df1_fast_q15(

+				       const arm_biquad_casd_df1_inst_q15 * S,

+				        q15_t * pSrc,

+				       q15_t * pDst,

+				       uint32_t blockSize);

+

+

+  /**

+   * @brief Processing function for the Q31 Biquad cascade filter

+   * @param[in]  *S         points to an instance of the Q31 Biquad cascade structure.

+   * @param[in]  *pSrc      points to the block of input data.

+   * @param[out] *pDst      points to the block of output data.

+   * @param[in]  blockSize  number of samples to process.

+   * @return     none.

+   */

+

+  void arm_biquad_cascade_df1_q31(

+				  const arm_biquad_casd_df1_inst_q31 * S,

+				   q31_t * pSrc,

+				  q31_t * pDst,

+				  uint32_t blockSize);

+

+  /**

+   * @brief Fast but less precise processing function for the Q31 Biquad cascade filter for Cortex-M3 and Cortex-M4.

+   * @param[in]  *S         points to an instance of the Q31 Biquad cascade structure.

+   * @param[in]  *pSrc      points to the block of input data.

+   * @param[out] *pDst      points to the block of output data.

+   * @param[in]  blockSize  number of samples to process.

+   * @return     none.

+   */

+

+  void arm_biquad_cascade_df1_fast_q31(

+				       const arm_biquad_casd_df1_inst_q31 * S,

+				        q31_t * pSrc,

+				       q31_t * pDst,

+				       uint32_t blockSize);

+

+  /**

+   * @brief  Initialization function for the Q31 Biquad cascade filter.

+   * @param[in,out] *S           points to an instance of the Q31 Biquad cascade structure.

+   * @param[in]     numStages      number of 2nd order stages in the filter.

+   * @param[in]     *pCoeffs     points to the filter coefficients.

+   * @param[in]     *pState      points to the state buffer.

+   * @param[in]     postShift    Shift to be applied to the output. Varies according to the coefficients format

+   * @return        none

+   */

+

+  void arm_biquad_cascade_df1_init_q31(

+				       arm_biquad_casd_df1_inst_q31 * S,

+				       uint8_t numStages,

+				       q31_t * pCoeffs,

+				       q31_t * pState,

+				       int8_t postShift);

+

+  /**

+   * @brief Processing function for the floating-point Biquad cascade filter.

+   * @param[in]  *S         points to an instance of the floating-point Biquad cascade structure.

+   * @param[in]  *pSrc      points to the block of input data.

+   * @param[out] *pDst      points to the block of output data.

+   * @param[in]  blockSize  number of samples to process.

+   * @return     none.

+   */

+

+  void arm_biquad_cascade_df1_f32(

+				  const arm_biquad_casd_df1_inst_f32 * S,

+				   float32_t * pSrc,

+				  float32_t * pDst,

+				  uint32_t blockSize);

+

+  /**

+   * @brief  Initialization function for the floating-point Biquad cascade filter.

+   * @param[in,out] *S           points to an instance of the floating-point Biquad cascade structure.

+   * @param[in]     numStages    number of 2nd order stages in the filter.

+   * @param[in]     *pCoeffs     points to the filter coefficients.

+   * @param[in]     *pState      points to the state buffer.

+   * @return        none

+   */

+

+  void arm_biquad_cascade_df1_init_f32(

+				       arm_biquad_casd_df1_inst_f32 * S,

+				       uint8_t numStages,

+				       float32_t * pCoeffs,

+				       float32_t * pState);

+

+

+  /**

+   * @brief Instance structure for the floating-point matrix structure.

+   */

+

+  typedef struct

+  {

+    uint16_t numRows;     /**< number of rows of the matrix.     */

+    uint16_t numCols;     /**< number of columns of the matrix.  */

+    float32_t *pData;     /**< points to the data of the matrix. */

+  } arm_matrix_instance_f32;

+

+  /**

+   * @brief Instance structure for the Q15 matrix structure.

+   */

+

+  typedef struct

+  {

+    uint16_t numRows;     /**< number of rows of the matrix.     */

+    uint16_t numCols;     /**< number of columns of the matrix.  */

+    q15_t *pData;         /**< points to the data of the matrix. */

+

+  } arm_matrix_instance_q15;

+

+  /**

+   * @brief Instance structure for the Q31 matrix structure.

+   */

+

+  typedef struct

+  {

+    uint16_t numRows;     /**< number of rows of the matrix.     */

+    uint16_t numCols;     /**< number of columns of the matrix.  */

+    q31_t *pData;         /**< points to the data of the matrix. */

+

+  } arm_matrix_instance_q31;

+

+

+

+  /**

+   * @brief Floating-point matrix addition.

+   * @param[in]       *pSrcA points to the first input matrix structure

+   * @param[in]       *pSrcB points to the second input matrix structure

+   * @param[out]      *pDst points to output matrix structure

+   * @return     The function returns either

+   * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.

+   */

+

+  arm_status arm_mat_add_f32(

+			     const arm_matrix_instance_f32 * pSrcA,

+			     const arm_matrix_instance_f32 * pSrcB,

+			     arm_matrix_instance_f32 * pDst);

+

+  /**

+   * @brief Q15 matrix addition.

+   * @param[in]       *pSrcA points to the first input matrix structure

+   * @param[in]       *pSrcB points to the second input matrix structure

+   * @param[out]      *pDst points to output matrix structure

+   * @return     The function returns either

+   * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.

+   */

+

+  arm_status arm_mat_add_q15(

+			     const arm_matrix_instance_q15 * pSrcA,

+			     const arm_matrix_instance_q15 * pSrcB,

+			     arm_matrix_instance_q15 * pDst);

+

+  /**

+   * @brief Q31 matrix addition.

+   * @param[in]       *pSrcA points to the first input matrix structure

+   * @param[in]       *pSrcB points to the second input matrix structure

+   * @param[out]      *pDst points to output matrix structure

+   * @return     The function returns either

+   * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.

+   */

+

+  arm_status arm_mat_add_q31(

+			     const arm_matrix_instance_q31 * pSrcA,

+			     const arm_matrix_instance_q31 * pSrcB,

+			     arm_matrix_instance_q31 * pDst);

+

+

+  /**

+   * @brief Floating-point matrix transpose.

+   * @param[in]  *pSrc points to the input matrix

+   * @param[out] *pDst points to the output matrix

+   * @return 	The function returns either  <code>ARM_MATH_SIZE_MISMATCH</code>

+   * or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.

+   */

+

+  arm_status arm_mat_trans_f32(

+			       const arm_matrix_instance_f32 * pSrc,

+			       arm_matrix_instance_f32 * pDst);

+

+

+  /**

+   * @brief Q15 matrix transpose.

+   * @param[in]  *pSrc points to the input matrix

+   * @param[out] *pDst points to the output matrix

+   * @return 	The function returns either  <code>ARM_MATH_SIZE_MISMATCH</code>

+   * or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.

+   */

+

+  arm_status arm_mat_trans_q15(

+			       const arm_matrix_instance_q15 * pSrc,

+			       arm_matrix_instance_q15 * pDst);

+

+  /**

+   * @brief Q31 matrix transpose.

+   * @param[in]  *pSrc points to the input matrix

+   * @param[out] *pDst points to the output matrix

+   * @return 	The function returns either  <code>ARM_MATH_SIZE_MISMATCH</code>

+   * or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.

+   */

+

+  arm_status arm_mat_trans_q31(

+			       const arm_matrix_instance_q31 * pSrc,

+			       arm_matrix_instance_q31 * pDst);

+

+

+  /**

+   * @brief Floating-point matrix multiplication

+   * @param[in]       *pSrcA points to the first input matrix structure

+   * @param[in]       *pSrcB points to the second input matrix structure

+   * @param[out]      *pDst points to output matrix structure

+   * @return     The function returns either

+   * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.

+   */

+

+  arm_status arm_mat_mult_f32(

+			      const arm_matrix_instance_f32 * pSrcA,

+			      const arm_matrix_instance_f32 * pSrcB,

+			      arm_matrix_instance_f32 * pDst);

+

+  /**

+   * @brief Q15 matrix multiplication

+   * @param[in]       *pSrcA points to the first input matrix structure

+   * @param[in]       *pSrcB points to the second input matrix structure

+   * @param[out]      *pDst points to output matrix structure

+   * @return     The function returns either

+   * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.

+   */

+

+  arm_status arm_mat_mult_q15(

+			      const arm_matrix_instance_q15 * pSrcA,

+			      const arm_matrix_instance_q15 * pSrcB,

+			      arm_matrix_instance_q15 * pDst,

+			      q15_t * pState);

+

+  /**

+   * @brief Q15 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4

+   * @param[in]       *pSrcA  points to the first input matrix structure

+   * @param[in]       *pSrcB  points to the second input matrix structure

+   * @param[out]      *pDst   points to output matrix structure

+   * @param[in]		  *pState points to the array for storing intermediate results

+   * @return     The function returns either

+   * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.

+   */

+

+  arm_status arm_mat_mult_fast_q15(

+				   const arm_matrix_instance_q15 * pSrcA,

+				   const arm_matrix_instance_q15 * pSrcB,

+				   arm_matrix_instance_q15 * pDst,

+				   q15_t * pState);

+

+  /**

+   * @brief Q31 matrix multiplication

+   * @param[in]       *pSrcA points to the first input matrix structure

+   * @param[in]       *pSrcB points to the second input matrix structure

+   * @param[out]      *pDst points to output matrix structure

+   * @return     The function returns either

+   * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.

+   */

+

+  arm_status arm_mat_mult_q31(

+			      const arm_matrix_instance_q31 * pSrcA,

+			      const arm_matrix_instance_q31 * pSrcB,

+			      arm_matrix_instance_q31 * pDst);

+

+  /**

+   * @brief Q31 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4

+   * @param[in]       *pSrcA points to the first input matrix structure

+   * @param[in]       *pSrcB points to the second input matrix structure

+   * @param[out]      *pDst points to output matrix structure

+   * @return     The function returns either

+   * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.

+   */

+

+  arm_status arm_mat_mult_fast_q31(

+				   const arm_matrix_instance_q31 * pSrcA,

+				   const arm_matrix_instance_q31 * pSrcB,

+				   arm_matrix_instance_q31 * pDst);

+

+

+  /**

+   * @brief Floating-point matrix subtraction

+   * @param[in]       *pSrcA points to the first input matrix structure

+   * @param[in]       *pSrcB points to the second input matrix structure

+   * @param[out]      *pDst points to output matrix structure

+   * @return     The function returns either

+   * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.

+   */

+

+  arm_status arm_mat_sub_f32(

+			     const arm_matrix_instance_f32 * pSrcA,

+			     const arm_matrix_instance_f32 * pSrcB,

+			     arm_matrix_instance_f32 * pDst);

+

+  /**

+   * @brief Q15 matrix subtraction

+   * @param[in]       *pSrcA points to the first input matrix structure

+   * @param[in]       *pSrcB points to the second input matrix structure

+   * @param[out]      *pDst points to output matrix structure

+   * @return     The function returns either

+   * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.

+   */

+

+  arm_status arm_mat_sub_q15(

+			     const arm_matrix_instance_q15 * pSrcA,

+			     const arm_matrix_instance_q15 * pSrcB,

+			     arm_matrix_instance_q15 * pDst);

+

+  /**

+   * @brief Q31 matrix subtraction

+   * @param[in]       *pSrcA points to the first input matrix structure

+   * @param[in]       *pSrcB points to the second input matrix structure

+   * @param[out]      *pDst points to output matrix structure

+   * @return     The function returns either

+   * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.

+   */

+

+  arm_status arm_mat_sub_q31(

+			     const arm_matrix_instance_q31 * pSrcA,

+			     const arm_matrix_instance_q31 * pSrcB,

+			     arm_matrix_instance_q31 * pDst);

+

+  /**

+   * @brief Floating-point matrix scaling.

+   * @param[in]  *pSrc points to the input matrix

+   * @param[in]  scale scale factor

+   * @param[out] *pDst points to the output matrix

+   * @return     The function returns either

+   * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.

+   */

+

+  arm_status arm_mat_scale_f32(

+			       const arm_matrix_instance_f32 * pSrc,

+			       float32_t scale,

+			       arm_matrix_instance_f32 * pDst);

+

+  /**

+   * @brief Q15 matrix scaling.

+   * @param[in]       *pSrc points to input matrix

+   * @param[in]       scaleFract fractional portion of the scale factor

+   * @param[in]       shift number of bits to shift the result by

+   * @param[out]      *pDst points to output matrix

+   * @return     The function returns either

+   * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.

+   */

+

+  arm_status arm_mat_scale_q15(

+			       const arm_matrix_instance_q15 * pSrc,

+			       q15_t scaleFract,

+			       int32_t shift,

+			       arm_matrix_instance_q15 * pDst);

+

+  /**

+   * @brief Q31 matrix scaling.

+   * @param[in]       *pSrc points to input matrix

+   * @param[in]       scaleFract fractional portion of the scale factor

+   * @param[in]       shift number of bits to shift the result by

+   * @param[out]      *pDst points to output matrix structure

+   * @return     The function returns either

+   * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.

+   */

+

+  arm_status arm_mat_scale_q31(

+			       const arm_matrix_instance_q31 * pSrc,

+			       q31_t scaleFract,

+			       int32_t shift,

+			       arm_matrix_instance_q31 * pDst);

+

+

+  /**

+   * @brief  Q31 matrix initialization.

+   * @param[in,out] *S             points to an instance of the floating-point matrix structure.

+   * @param[in]     nRows          number of rows in the matrix.

+   * @param[in]     nColumns       number of columns in the matrix.

+   * @param[in]     *pData	       points to the matrix data array.

+   * @return        none

+   */

+

+  void arm_mat_init_q31(

+			arm_matrix_instance_q31 * S,

+			uint16_t nRows,

+			uint16_t nColumns,

+			q31_t   *pData);

+

+  /**

+   * @brief  Q15 matrix initialization.

+   * @param[in,out] *S             points to an instance of the floating-point matrix structure.

+   * @param[in]     nRows          number of rows in the matrix.

+   * @param[in]     nColumns       number of columns in the matrix.

+   * @param[in]     *pData	       points to the matrix data array.

+   * @return        none

+   */

+

+  void arm_mat_init_q15(

+			arm_matrix_instance_q15 * S,

+			uint16_t nRows,

+			uint16_t nColumns,

+			q15_t    *pData);

+

+  /**

+   * @brief  Floating-point matrix initialization.

+   * @param[in,out] *S             points to an instance of the floating-point matrix structure.

+   * @param[in]     nRows          number of rows in the matrix.

+   * @param[in]     nColumns       number of columns in the matrix.

+   * @param[in]     *pData	       points to the matrix data array.

+   * @return        none

+   */

+

+  void arm_mat_init_f32(

+			arm_matrix_instance_f32 * S,

+			uint16_t nRows,

+			uint16_t nColumns,

+			float32_t   *pData);

+

+

+

+  /**

+   * @brief Instance structure for the Q15 PID Control.

+   */

+  typedef struct

+  {

+    q15_t A0; 	 /**< The derived gain, A0 = Kp + Ki + Kd . */

+	#ifdef ARM_MATH_CM0

+	q15_t A1;

+	q15_t A2;

+	#else

+    q31_t A1;           /**< The derived gain A1 = -Kp - 2Kd | Kd.*/

+	#endif

+    q15_t state[3];       /**< The state array of length 3. */

+    q15_t Kp;           /**< The proportional gain. */

+    q15_t Ki;           /**< The integral gain. */

+    q15_t Kd;           /**< The derivative gain. */

+  } arm_pid_instance_q15;

+

+  /**

+   * @brief Instance structure for the Q31 PID Control.

+   */

+  typedef struct

+  {

+    q31_t A0;            /**< The derived gain, A0 = Kp + Ki + Kd . */

+    q31_t A1;            /**< The derived gain, A1 = -Kp - 2Kd. */

+    q31_t A2;            /**< The derived gain, A2 = Kd . */

+    q31_t state[3];      /**< The state array of length 3. */

+    q31_t Kp;            /**< The proportional gain. */

+    q31_t Ki;            /**< The integral gain. */

+    q31_t Kd;            /**< The derivative gain. */

+

+  } arm_pid_instance_q31;

+

+  /**

+   * @brief Instance structure for the floating-point PID Control.

+   */

+  typedef struct

+  {

+    float32_t A0;          /**< The derived gain, A0 = Kp + Ki + Kd . */

+    float32_t A1;          /**< The derived gain, A1 = -Kp - 2Kd. */

+    float32_t A2;          /**< The derived gain, A2 = Kd . */

+    float32_t state[3];    /**< The state array of length 3. */

+    float32_t Kp;               /**< The proportional gain. */

+    float32_t Ki;               /**< The integral gain. */

+    float32_t Kd;               /**< The derivative gain. */

+  } arm_pid_instance_f32;

+

+

+

+  /**

+   * @brief  Initialization function for the floating-point PID Control.

+   * @param[in,out] *S      points to an instance of the PID structure.

+   * @param[in]     resetStateFlag  flag to reset the state. 0 = no change in state 1 = reset the state.

+   * @return none.

+   */

+  void arm_pid_init_f32(

+			arm_pid_instance_f32 * S,

+			int32_t resetStateFlag);

+

+  /**

+   * @brief  Reset function for the floating-point PID Control.

+   * @param[in,out] *S is an instance of the floating-point PID Control structure

+   * @return none

+   */

+  void arm_pid_reset_f32(

+			 arm_pid_instance_f32 * S);

+

+

+  /**

+   * @brief  Initialization function for the Q31 PID Control.

+   * @param[in,out] *S points to an instance of the Q15 PID structure.

+   * @param[in]     resetStateFlag  flag to reset the state. 0 = no change in state 1 = reset the state.

+   * @return none.

+   */

+  void arm_pid_init_q31(

+			arm_pid_instance_q31 * S,

+			int32_t resetStateFlag);

+

+

+  /**

+   * @brief  Reset function for the Q31 PID Control.

+   * @param[in,out] *S points to an instance of the Q31 PID Control structure

+   * @return none

+   */

+

+  void arm_pid_reset_q31(

+			 arm_pid_instance_q31 * S);

+

+  /**

+   * @brief  Initialization function for the Q15 PID Control.

+   * @param[in,out] *S points to an instance of the Q15 PID structure.

+   * @param[in] resetStateFlag  flag to reset the state. 0 = no change in state 1 = reset the state.

+   * @return none.

+   */

+  void arm_pid_init_q15(

+			arm_pid_instance_q15 * S,

+			int32_t resetStateFlag);

+

+  /**

+   * @brief  Reset function for the Q15 PID Control.

+   * @param[in,out] *S points to an instance of the q15 PID Control structure

+   * @return none

+   */

+  void arm_pid_reset_q15(

+			 arm_pid_instance_q15 * S);

+

+

+  /**

+   * @brief Instance structure for the floating-point Linear Interpolate function.

+   */

+  typedef struct

+  {

+    uint32_t nValues;           /**< nValues */

+    float32_t x1;               /**< x1 */

+    float32_t xSpacing;         /**< xSpacing */

+    float32_t *pYData;          /**< pointer to the table of Y values */

+  } arm_linear_interp_instance_f32;

+

+  /**

+   * @brief Instance structure for the floating-point bilinear interpolation function.

+   */

+

+  typedef struct

+  {

+    uint16_t numRows;	/**< number of rows in the data table. */

+    uint16_t numCols;	/**< number of columns in the data table. */

+    float32_t *pData;	/**< points to the data table. */

+  } arm_bilinear_interp_instance_f32;

+

+   /**

+   * @brief Instance structure for the Q31 bilinear interpolation function.

+   */

+

+  typedef struct

+  {

+    uint16_t numRows;	/**< number of rows in the data table. */

+    uint16_t numCols;	/**< number of columns in the data table. */

+    q31_t *pData;	/**< points to the data table. */

+  } arm_bilinear_interp_instance_q31;

+

+   /**

+   * @brief Instance structure for the Q15 bilinear interpolation function.

+   */

+

+  typedef struct

+  {

+    uint16_t numRows;	/**< number of rows in the data table. */

+    uint16_t numCols;	/**< number of columns in the data table. */

+    q15_t *pData;	/**< points to the data table. */

+  } arm_bilinear_interp_instance_q15;

+

+   /**

+   * @brief Instance structure for the Q15 bilinear interpolation function.

+   */

+

+  typedef struct

+  {

+    uint16_t numRows; 	/**< number of rows in the data table. */

+    uint16_t numCols;	/**< number of columns in the data table. */

+    q7_t *pData;		/**< points to the data table. */

+  } arm_bilinear_interp_instance_q7;

+

+

+  /**

+   * @brief Q7 vector multiplication.

+   * @param[in]       *pSrcA points to the first input vector

+   * @param[in]       *pSrcB points to the second input vector

+   * @param[out]      *pDst  points to the output vector

+   * @param[in]       blockSize number of samples in each vector

+   * @return none.

+   */

+

+  void arm_mult_q7(

+		    q7_t * pSrcA,

+		    q7_t * pSrcB,

+		   q7_t * pDst,

+		   uint32_t blockSize);

+

+  /**

+   * @brief Q15 vector multiplication.

+   * @param[in]       *pSrcA points to the first input vector

+   * @param[in]       *pSrcB points to the second input vector

+   * @param[out]      *pDst  points to the output vector

+   * @param[in]       blockSize number of samples in each vector

+   * @return none.

+   */

+

+  void arm_mult_q15(

+		     q15_t * pSrcA,

+		     q15_t * pSrcB,

+		    q15_t * pDst,

+		    uint32_t blockSize);

+

+  /**

+   * @brief Q31 vector multiplication.

+   * @param[in]       *pSrcA points to the first input vector

+   * @param[in]       *pSrcB points to the second input vector

+   * @param[out]      *pDst points to the output vector

+   * @param[in]       blockSize number of samples in each vector

+   * @return none.

+   */

+

+  void arm_mult_q31(

+		     q31_t * pSrcA,

+		     q31_t * pSrcB,

+		    q31_t * pDst,

+		    uint32_t blockSize);

+

+  /**

+   * @brief Floating-point vector multiplication.

+   * @param[in]       *pSrcA points to the first input vector

+   * @param[in]       *pSrcB points to the second input vector

+   * @param[out]      *pDst points to the output vector

+   * @param[in]       blockSize number of samples in each vector

+   * @return none.

+   */

+

+  void arm_mult_f32(

+		     float32_t * pSrcA,

+		     float32_t * pSrcB,

+		    float32_t * pDst,

+		    uint32_t blockSize);

+

+

+  /**

+   * @brief Instance structure for the Q15 CFFT/CIFFT function.

+   */

+

+  typedef struct

+  {

+    uint16_t  fftLen;                /**< length of the FFT. */

+    uint8_t   ifftFlag;              /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */

+    uint8_t   bitReverseFlag;        /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */

+    q15_t     *pTwiddle;             /**< points to the twiddle factor table. */

+    uint16_t  *pBitRevTable;         /**< points to the bit reversal table. */

+    uint16_t  twidCoefModifier;      /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */

+    uint16_t  bitRevFactor;          /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */

+  } arm_cfft_radix4_instance_q15;

+

+  /**

+   * @brief Instance structure for the Q31 CFFT/CIFFT function.

+   */

+

+  typedef struct

+  {

+    uint16_t    fftLen;              /**< length of the FFT. */

+    uint8_t     ifftFlag;            /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */

+    uint8_t     bitReverseFlag;      /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */

+    q31_t       *pTwiddle;           /**< points to the twiddle factor table. */

+    uint16_t    *pBitRevTable;       /**< points to the bit reversal table. */

+    uint16_t    twidCoefModifier;    /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */

+    uint16_t    bitRevFactor;        /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */

+  } arm_cfft_radix4_instance_q31;

+

+  /**

+   * @brief Instance structure for the floating-point CFFT/CIFFT function.

+   */

+

+  typedef struct

+  {

+    uint16_t     fftLen;               /**< length of the FFT. */

+    uint8_t      ifftFlag;             /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */

+    uint8_t      bitReverseFlag;       /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */

+    float32_t    *pTwiddle;            /**< points to the twiddle factor table. */

+    uint16_t     *pBitRevTable;        /**< points to the bit reversal table. */

+    uint16_t     twidCoefModifier;     /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */

+    uint16_t     bitRevFactor;         /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */

+	float32_t    onebyfftLen;          /**< value of 1/fftLen. */

+  } arm_cfft_radix4_instance_f32;

+

+  /**

+   * @brief Processing function for the Q15 CFFT/CIFFT.

+   * @param[in]      *S    points to an instance of the Q15 CFFT/CIFFT structure.

+   * @param[in, out] *pSrc points to the complex data buffer. Processing occurs in-place.

+   * @return none.

+   */

+

+  void arm_cfft_radix4_q15(

+			   const arm_cfft_radix4_instance_q15 * S,

+			   q15_t * pSrc);

+

+  /**

+   * @brief Initialization function for the Q15 CFFT/CIFFT.

+   * @param[in,out] *S             points to an instance of the Q15 CFFT/CIFFT structure.

+   * @param[in]     fftLen         length of the FFT.

+   * @param[in]     ifftFlag       flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform.

+   * @param[in]     bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output.

+   * @return        arm_status     function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>fftLen</code> is not a supported value.

+   */

+

+  arm_status arm_cfft_radix4_init_q15(

+				      arm_cfft_radix4_instance_q15 * S,

+				      uint16_t fftLen,

+				      uint8_t ifftFlag,

+				      uint8_t bitReverseFlag);

+

+  /**

+   * @brief Processing function for the Q31 CFFT/CIFFT.

+   * @param[in]      *S    points to an instance of the Q31 CFFT/CIFFT structure.

+   * @param[in, out] *pSrc points to the complex data buffer. Processing occurs in-place.

+   * @return none.

+   */

+

+  void arm_cfft_radix4_q31(

+			   const arm_cfft_radix4_instance_q31 * S,

+			   q31_t * pSrc);

+

+  /**

+   * @brief  Initialization function for the Q31 CFFT/CIFFT.

+   * @param[in,out] *S             points to an instance of the Q31 CFFT/CIFFT structure.

+   * @param[in]     fftLen         length of the FFT.

+   * @param[in]     ifftFlag       flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform.

+   * @param[in]     bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output.

+   * @return        arm_status     function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>fftLen</code> is not a supported value.

+   */

+

+  arm_status arm_cfft_radix4_init_q31(

+				      arm_cfft_radix4_instance_q31 * S,

+				      uint16_t fftLen,

+				      uint8_t ifftFlag,

+				      uint8_t bitReverseFlag);

+

+  /**

+   * @brief Processing function for the floating-point CFFT/CIFFT.

+   * @param[in]      *S    points to an instance of the floating-point CFFT/CIFFT structure.

+   * @param[in, out] *pSrc points to the complex data buffer. Processing occurs in-place.

+   * @return none.

+   */

+

+  void arm_cfft_radix4_f32(

+			   const arm_cfft_radix4_instance_f32 * S,

+			   float32_t * pSrc);

+

+  /**

+   * @brief  Initialization function for the floating-point CFFT/CIFFT.

+   * @param[in,out] *S             points to an instance of the floating-point CFFT/CIFFT structure.

+   * @param[in]     fftLen         length of the FFT.

+   * @param[in]     ifftFlag       flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform.

+   * @param[in]     bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output.

+   * @return        The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>fftLen</code> is not a supported value.

+   */

+

+  arm_status arm_cfft_radix4_init_f32(

+				      arm_cfft_radix4_instance_f32 * S,

+				      uint16_t fftLen,

+				      uint8_t ifftFlag,

+				      uint8_t bitReverseFlag);

+

+

+

+  /*----------------------------------------------------------------------

+   *		Internal functions prototypes FFT function

+   ----------------------------------------------------------------------*/

+

+  /**

+   * @brief  Core function for the floating-point CFFT butterfly process.

+   * @param[in, out] *pSrc            points to the in-place buffer of floating-point data type.

+   * @param[in]      fftLen           length of the FFT.

+   * @param[in]      *pCoef           points to the twiddle coefficient buffer.

+   * @param[in]      twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table.

+   * @return none.

+   */

+

+  void arm_radix4_butterfly_f32(

+				float32_t * pSrc,

+				uint16_t fftLen,

+				float32_t * pCoef,

+				uint16_t twidCoefModifier);

+

+  /**

+   * @brief  Core function for the floating-point CIFFT butterfly process.

+   * @param[in, out] *pSrc            points to the in-place buffer of floating-point data type.

+   * @param[in]      fftLen           length of the FFT.

+   * @param[in]      *pCoef           points to twiddle coefficient buffer.

+   * @param[in]      twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table.

+   * @param[in]      onebyfftLen      value of 1/fftLen.

+   * @return none.

+   */

+

+  void arm_radix4_butterfly_inverse_f32(

+					float32_t * pSrc,

+					uint16_t fftLen,

+					float32_t * pCoef,

+					uint16_t twidCoefModifier,

+					float32_t onebyfftLen);

+

+  /**

+   * @brief  In-place bit reversal function.

+   * @param[in, out] *pSrc        points to the in-place buffer of floating-point data type.

+   * @param[in]      fftSize      length of the FFT.

+   * @param[in]      bitRevFactor bit reversal modifier that supports different size FFTs with the same bit reversal table.

+   * @param[in]      *pBitRevTab  points to the bit reversal table.

+   * @return none.

+   */

+

+  void arm_bitreversal_f32(

+			   float32_t *pSrc,

+			   uint16_t fftSize,

+			   uint16_t bitRevFactor,

+			   uint16_t *pBitRevTab);

+

+  /**

+   * @brief  Core function for the Q31 CFFT butterfly process.

+   * @param[in, out] *pSrc            points to the in-place buffer of Q31 data type.

+   * @param[in]      fftLen           length of the FFT.

+   * @param[in]      *pCoef           points to twiddle coefficient buffer.

+   * @param[in]      twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table.

+   * @return none.

+   */

+

+  void arm_radix4_butterfly_q31(

+				q31_t *pSrc,

+				uint32_t fftLen,

+				q31_t *pCoef,

+				uint32_t twidCoefModifier);

+

+  /**

+   * @brief  Core function for the Q31 CIFFT butterfly process.

+   * @param[in, out] *pSrc            points to the in-place buffer of Q31 data type.

+   * @param[in]      fftLen           length of the FFT.

+   * @param[in]      *pCoef           points to twiddle coefficient buffer.

+   * @param[in]      twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table.

+   * @return none.

+   */

+

+  void arm_radix4_butterfly_inverse_q31(

+					q31_t * pSrc,

+					uint32_t fftLen,

+					q31_t * pCoef,

+					uint32_t twidCoefModifier);

+

+  /**

+   * @brief  In-place bit reversal function.

+   * @param[in, out] *pSrc        points to the in-place buffer of Q31 data type.

+   * @param[in]      fftLen       length of the FFT.

+   * @param[in]      bitRevFactor bit reversal modifier that supports different size FFTs with the same bit reversal table

+   * @param[in]      *pBitRevTab  points to bit reversal table.

+   * @return none.

+   */

+

+  void arm_bitreversal_q31(

+			   q31_t * pSrc,

+			   uint32_t fftLen,

+			   uint16_t bitRevFactor,

+			   uint16_t *pBitRevTab);

+

+  /**

+   * @brief  Core function for the Q15 CFFT butterfly process.

+   * @param[in, out] *pSrc16          points to the in-place buffer of Q15 data type.

+   * @param[in]      fftLen           length of the FFT.

+   * @param[in]      *pCoef16         points to twiddle coefficient buffer.

+   * @param[in]      twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table.

+   * @return none.

+   */

+

+  void arm_radix4_butterfly_q15(

+				q15_t *pSrc16,

+				uint32_t fftLen,

+				q15_t *pCoef16,

+				uint32_t twidCoefModifier);

+

+  /**

+   * @brief  Core function for the Q15 CIFFT butterfly process.

+   * @param[in, out] *pSrc16          points to the in-place buffer of Q15 data type.

+   * @param[in]      fftLen           length of the FFT.

+   * @param[in]      *pCoef16         points to twiddle coefficient buffer.

+   * @param[in]      twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table.

+   * @return none.

+   */

+

+  void arm_radix4_butterfly_inverse_q15(

+					q15_t *pSrc16,

+					uint32_t fftLen,

+					q15_t *pCoef16,

+					uint32_t twidCoefModifier);

+

+  /**

+   * @brief  In-place bit reversal function.

+   * @param[in, out] *pSrc        points to the in-place buffer of Q15 data type.

+   * @param[in]      fftLen       length of the FFT.

+   * @param[in]      bitRevFactor bit reversal modifier that supports different size FFTs with the same bit reversal table

+   * @param[in]      *pBitRevTab  points to bit reversal table.

+   * @return none.

+   */

+

+  void arm_bitreversal_q15(

+			   q15_t * pSrc,

+			   uint32_t fftLen,

+			   uint16_t bitRevFactor,

+			   uint16_t *pBitRevTab);

+

+  /**

+   * @brief Instance structure for the Q15 RFFT/RIFFT function.

+   */

+

+  typedef struct

+  {

+    uint32_t fftLenReal;                      /**< length of the real FFT. */

+    uint32_t fftLenBy2;                       /**< length of the complex FFT. */

+    uint8_t  ifftFlagR;                       /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */

+	uint8_t  bitReverseFlagR;                 /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */

+    uint32_t twidCoefRModifier;               /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */

+    q15_t    *pTwiddleAReal;                  /**< points to the real twiddle factor table. */

+    q15_t    *pTwiddleBReal;                  /**< points to the imag twiddle factor table. */

+    arm_cfft_radix4_instance_q15 *pCfft;	  /**< points to the complex FFT instance. */

+  } arm_rfft_instance_q15;

+

+  /**

+   * @brief Instance structure for the Q31 RFFT/RIFFT function.

+   */

+

+  typedef struct

+  {

+    uint32_t fftLenReal;                        /**< length of the real FFT. */

+    uint32_t fftLenBy2;                         /**< length of the complex FFT. */

+    uint8_t  ifftFlagR;                         /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */

+	uint8_t  bitReverseFlagR;                   /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */

+    uint32_t twidCoefRModifier;                 /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */

+    q31_t    *pTwiddleAReal;                    /**< points to the real twiddle factor table. */

+    q31_t    *pTwiddleBReal;                    /**< points to the imag twiddle factor table. */

+    arm_cfft_radix4_instance_q31 *pCfft;        /**< points to the complex FFT instance. */

+  } arm_rfft_instance_q31;

+

+  /**

+   * @brief Instance structure for the floating-point RFFT/RIFFT function.

+   */

+

+  typedef struct

+  {

+    uint32_t  fftLenReal;                       /**< length of the real FFT. */

+    uint16_t  fftLenBy2;                        /**< length of the complex FFT. */

+    uint8_t   ifftFlagR;                        /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */

+    uint8_t   bitReverseFlagR;                  /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */

+	uint32_t  twidCoefRModifier;                /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */

+    float32_t *pTwiddleAReal;                   /**< points to the real twiddle factor table. */

+    float32_t *pTwiddleBReal;                   /**< points to the imag twiddle factor table. */

+    arm_cfft_radix4_instance_f32 *pCfft;        /**< points to the complex FFT instance. */

+  } arm_rfft_instance_f32;

+

+  /**

+   * @brief Processing function for the Q15 RFFT/RIFFT.

+   * @param[in]  *S    points to an instance of the Q15 RFFT/RIFFT structure.

+   * @param[in]  *pSrc points to the input buffer.

+   * @param[out] *pDst points to the output buffer.

+   * @return none.

+   */

+

+  void arm_rfft_q15(

+		    const arm_rfft_instance_q15 * S,

+		    q15_t * pSrc,

+		    q15_t * pDst);

+

+  /**

+   * @brief  Initialization function for the Q15 RFFT/RIFFT.

+   * @param[in, out] *S             points to an instance of the Q15 RFFT/RIFFT structure.

+   * @param[in]      *S_CFFT        points to an instance of the Q15 CFFT/CIFFT structure.

+   * @param[in]      fftLenReal     length of the FFT.

+   * @param[in]      ifftFlagR      flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform.

+   * @param[in]      bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output.

+   * @return		The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>fftLenReal</code> is not a supported value.

+   */

+

+  arm_status arm_rfft_init_q15(

+			       arm_rfft_instance_q15 * S,

+			       arm_cfft_radix4_instance_q15 * S_CFFT,

+			       uint32_t fftLenReal,

+			       uint32_t ifftFlagR,

+			       uint32_t bitReverseFlag);

+

+  /**

+   * @brief Processing function for the Q31 RFFT/RIFFT.

+   * @param[in]  *S    points to an instance of the Q31 RFFT/RIFFT structure.

+   * @param[in]  *pSrc points to the input buffer.

+   * @param[out] *pDst points to the output buffer.

+   * @return none.

+   */

+

+  void arm_rfft_q31(

+		    const arm_rfft_instance_q31 * S,

+		    q31_t * pSrc,

+		    q31_t * pDst);

+

+  /**

+   * @brief  Initialization function for the Q31 RFFT/RIFFT.

+   * @param[in, out] *S             points to an instance of the Q31 RFFT/RIFFT structure.

+   * @param[in, out] *S_CFFT        points to an instance of the Q31 CFFT/CIFFT structure.

+   * @param[in]      fftLenReal     length of the FFT.

+   * @param[in]      ifftFlagR      flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform.

+   * @param[in]      bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output.

+   * @return		The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>fftLenReal</code> is not a supported value.

+   */

+

+  arm_status arm_rfft_init_q31(

+			       arm_rfft_instance_q31 * S,

+			       arm_cfft_radix4_instance_q31 * S_CFFT,

+			       uint32_t fftLenReal,

+			       uint32_t ifftFlagR,

+			       uint32_t bitReverseFlag);

+

+  /**

+   * @brief  Initialization function for the floating-point RFFT/RIFFT.

+   * @param[in,out] *S             points to an instance of the floating-point RFFT/RIFFT structure.

+   * @param[in,out] *S_CFFT        points to an instance of the floating-point CFFT/CIFFT structure.

+   * @param[in]     fftLenReal     length of the FFT.

+   * @param[in]     ifftFlagR      flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform.

+   * @param[in]     bitReverseFlag flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output.

+   * @return		The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>fftLenReal</code> is not a supported value.

+   */

+

+  arm_status arm_rfft_init_f32(

+			       arm_rfft_instance_f32 * S,

+			       arm_cfft_radix4_instance_f32 * S_CFFT,

+			       uint32_t fftLenReal,

+			       uint32_t ifftFlagR,

+			       uint32_t bitReverseFlag);

+

+  /**

+   * @brief Processing function for the floating-point RFFT/RIFFT.

+   * @param[in]  *S    points to an instance of the floating-point RFFT/RIFFT structure.

+   * @param[in]  *pSrc points to the input buffer.

+   * @param[out] *pDst points to the output buffer.

+   * @return none.

+   */

+

+  void arm_rfft_f32(

+		    const arm_rfft_instance_f32 * S,

+		    float32_t * pSrc,

+		    float32_t * pDst);

+

+  /**

+   * @brief Instance structure for the floating-point DCT4/IDCT4 function.

+   */

+

+  typedef struct

+  {

+    uint16_t N;                         /**< length of the DCT4. */

+    uint16_t Nby2;                      /**< half of the length of the DCT4. */

+    float32_t normalize;                /**< normalizing factor. */

+    float32_t *pTwiddle;                /**< points to the twiddle factor table. */

+    float32_t *pCosFactor;              /**< points to the cosFactor table. */

+    arm_rfft_instance_f32 *pRfft;        /**< points to the real FFT instance. */

+    arm_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */

+  } arm_dct4_instance_f32;

+

+  /**

+   * @brief  Initialization function for the floating-point DCT4/IDCT4.

+   * @param[in,out] *S         points to an instance of floating-point DCT4/IDCT4 structure.

+   * @param[in]     *S_RFFT    points to an instance of floating-point RFFT/RIFFT structure.

+   * @param[in]     *S_CFFT    points to an instance of floating-point CFFT/CIFFT structure.

+   * @param[in]     N          length of the DCT4.

+   * @param[in]     Nby2       half of the length of the DCT4.

+   * @param[in]     normalize  normalizing factor.

+   * @return		arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>fftLenReal</code> is not a supported transform length.

+   */

+

+  arm_status arm_dct4_init_f32(

+			       arm_dct4_instance_f32 * S,

+			       arm_rfft_instance_f32 * S_RFFT,

+			       arm_cfft_radix4_instance_f32 * S_CFFT,

+			       uint16_t N,

+			       uint16_t Nby2,

+			       float32_t normalize);

+

+  /**

+   * @brief Processing function for the floating-point DCT4/IDCT4.

+   * @param[in]       *S             points to an instance of the floating-point DCT4/IDCT4 structure.

+   * @param[in]       *pState        points to state buffer.

+   * @param[in,out]   *pInlineBuffer points to the in-place input and output buffer.

+   * @return none.

+   */

+

+  void arm_dct4_f32(

+		    const arm_dct4_instance_f32 * S,

+		    float32_t * pState,

+		    float32_t * pInlineBuffer);

+

+  /**

+   * @brief Instance structure for the Q31 DCT4/IDCT4 function.

+   */

+

+  typedef struct

+  {

+    uint16_t N;                         /**< length of the DCT4. */

+    uint16_t Nby2;                      /**< half of the length of the DCT4. */

+    q31_t normalize;                    /**< normalizing factor. */

+    q31_t *pTwiddle;                    /**< points to the twiddle factor table. */

+    q31_t *pCosFactor;                  /**< points to the cosFactor table. */

+    arm_rfft_instance_q31 *pRfft;        /**< points to the real FFT instance. */

+    arm_cfft_radix4_instance_q31 *pCfft; /**< points to the complex FFT instance. */

+  } arm_dct4_instance_q31;

+

+  /**

+   * @brief  Initialization function for the Q31 DCT4/IDCT4.

+   * @param[in,out] *S         points to an instance of Q31 DCT4/IDCT4 structure.

+   * @param[in]     *S_RFFT    points to an instance of Q31 RFFT/RIFFT structure

+   * @param[in]     *S_CFFT    points to an instance of Q31 CFFT/CIFFT structure

+   * @param[in]     N          length of the DCT4.

+   * @param[in]     Nby2       half of the length of the DCT4.

+   * @param[in]     normalize  normalizing factor.

+   * @return		arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>N</code> is not a supported transform length.

+   */

+

+  arm_status arm_dct4_init_q31(

+			       arm_dct4_instance_q31 * S,

+			       arm_rfft_instance_q31 * S_RFFT,

+			       arm_cfft_radix4_instance_q31 * S_CFFT,

+			       uint16_t N,

+			       uint16_t Nby2,

+			       q31_t normalize);

+

+  /**

+   * @brief Processing function for the Q31 DCT4/IDCT4.

+   * @param[in]       *S             points to an instance of the Q31 DCT4 structure.

+   * @param[in]       *pState        points to state buffer.

+   * @param[in,out]   *pInlineBuffer points to the in-place input and output buffer.

+   * @return none.

+   */

+

+  void arm_dct4_q31(

+		    const arm_dct4_instance_q31 * S,

+		    q31_t * pState,

+		    q31_t * pInlineBuffer);

+

+  /**

+   * @brief Instance structure for the Q15 DCT4/IDCT4 function.

+   */

+

+  typedef struct

+  {

+    uint16_t N;                         /**< length of the DCT4. */

+    uint16_t Nby2;                      /**< half of the length of the DCT4. */

+    q15_t normalize;                    /**< normalizing factor. */

+    q15_t *pTwiddle;                    /**< points to the twiddle factor table. */

+    q15_t *pCosFactor;                  /**< points to the cosFactor table. */

+    arm_rfft_instance_q15 *pRfft;        /**< points to the real FFT instance. */

+    arm_cfft_radix4_instance_q15 *pCfft; /**< points to the complex FFT instance. */

+  } arm_dct4_instance_q15;

+

+  /**

+   * @brief  Initialization function for the Q15 DCT4/IDCT4.

+   * @param[in,out] *S         points to an instance of Q15 DCT4/IDCT4 structure.

+   * @param[in]     *S_RFFT    points to an instance of Q15 RFFT/RIFFT structure.

+   * @param[in]     *S_CFFT    points to an instance of Q15 CFFT/CIFFT structure.

+   * @param[in]     N          length of the DCT4.

+   * @param[in]     Nby2       half of the length of the DCT4.

+   * @param[in]     normalize  normalizing factor.

+   * @return		arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>N</code> is not a supported transform length.

+   */

+

+  arm_status arm_dct4_init_q15(

+			       arm_dct4_instance_q15 * S,

+			       arm_rfft_instance_q15 * S_RFFT,

+			       arm_cfft_radix4_instance_q15 * S_CFFT,

+			       uint16_t N,

+			       uint16_t Nby2,

+			       q15_t normalize);

+

+  /**

+   * @brief Processing function for the Q15 DCT4/IDCT4.

+   * @param[in]       *S             points to an instance of the Q15 DCT4 structure.

+   * @param[in]       *pState        points to state buffer.

+   * @param[in,out]   *pInlineBuffer points to the in-place input and output buffer.

+   * @return none.

+   */

+

+  void arm_dct4_q15(

+		    const arm_dct4_instance_q15 * S,

+		    q15_t * pState,

+		    q15_t * pInlineBuffer);

+

+  /**

+   * @brief Floating-point vector addition.

+   * @param[in]       *pSrcA points to the first input vector

+   * @param[in]       *pSrcB points to the second input vector

+   * @param[out]      *pDst points to the output vector

+   * @param[in]       blockSize number of samples in each vector

+   * @return none.

+   */

+

+  void arm_add_f32(

+		   float32_t * pSrcA,

+		   float32_t * pSrcB,

+		   float32_t * pDst,

+		   uint32_t blockSize);

+

+  /**

+   * @brief Q7 vector addition.

+   * @param[in]       *pSrcA points to the first input vector

+   * @param[in]       *pSrcB points to the second input vector

+   * @param[out]      *pDst points to the output vector

+   * @param[in]       blockSize number of samples in each vector

+   * @return none.

+   */

+

+  void arm_add_q7(

+		  q7_t * pSrcA,

+		  q7_t * pSrcB,

+		  q7_t * pDst,

+		  uint32_t blockSize);

+

+  /**

+   * @brief Q15 vector addition.

+   * @param[in]       *pSrcA points to the first input vector

+   * @param[in]       *pSrcB points to the second input vector

+   * @param[out]      *pDst points to the output vector

+   * @param[in]       blockSize number of samples in each vector

+   * @return none.

+   */

+

+  void arm_add_q15(

+		    q15_t * pSrcA,

+		    q15_t * pSrcB,

+		   q15_t * pDst,

+		   uint32_t blockSize);

+

+  /**

+   * @brief Q31 vector addition.

+   * @param[in]       *pSrcA points to the first input vector

+   * @param[in]       *pSrcB points to the second input vector

+   * @param[out]      *pDst points to the output vector

+   * @param[in]       blockSize number of samples in each vector

+   * @return none.

+   */

+

+  void arm_add_q31(

+		    q31_t * pSrcA,

+		    q31_t * pSrcB,

+		   q31_t * pDst,

+		   uint32_t blockSize);

+

+  /**

+   * @brief Floating-point vector subtraction.

+   * @param[in]       *pSrcA points to the first input vector

+   * @param[in]       *pSrcB points to the second input vector

+   * @param[out]      *pDst points to the output vector

+   * @param[in]       blockSize number of samples in each vector

+   * @return none.

+   */

+

+  void arm_sub_f32(

+		    float32_t * pSrcA,

+		    float32_t * pSrcB,

+		   float32_t * pDst,

+		   uint32_t blockSize);

+

+  /**

+   * @brief Q7 vector subtraction.

+   * @param[in]       *pSrcA points to the first input vector

+   * @param[in]       *pSrcB points to the second input vector

+   * @param[out]      *pDst points to the output vector

+   * @param[in]       blockSize number of samples in each vector

+   * @return none.

+   */

+

+  void arm_sub_q7(

+		   q7_t * pSrcA,

+		   q7_t * pSrcB,

+		  q7_t * pDst,

+		  uint32_t blockSize);

+

+  /**

+   * @brief Q15 vector subtraction.

+   * @param[in]       *pSrcA points to the first input vector

+   * @param[in]       *pSrcB points to the second input vector

+   * @param[out]      *pDst points to the output vector

+   * @param[in]       blockSize number of samples in each vector

+   * @return none.

+   */

+

+  void arm_sub_q15(

+		    q15_t * pSrcA,

+		    q15_t * pSrcB,

+		   q15_t * pDst,

+		   uint32_t blockSize);

+

+  /**

+   * @brief Q31 vector subtraction.

+   * @param[in]       *pSrcA points to the first input vector

+   * @param[in]       *pSrcB points to the second input vector

+   * @param[out]      *pDst points to the output vector

+   * @param[in]       blockSize number of samples in each vector

+   * @return none.

+   */

+

+  void arm_sub_q31(

+		    q31_t * pSrcA,

+		    q31_t * pSrcB,

+		   q31_t * pDst,

+		   uint32_t blockSize);

+

+  /**

+   * @brief Multiplies a floating-point vector by a scalar.

+   * @param[in]       *pSrc points to the input vector

+   * @param[in]       scale scale factor to be applied

+   * @param[out]      *pDst points to the output vector

+   * @param[in]       blockSize number of samples in the vector

+   * @return none.

+   */

+

+  void arm_scale_f32(

+		      float32_t * pSrc,

+		     float32_t scale,

+		     float32_t * pDst,

+		     uint32_t blockSize);

+

+  /**

+   * @brief Multiplies a Q7 vector by a scalar.

+   * @param[in]       *pSrc points to the input vector

+   * @param[in]       scaleFract fractional portion of the scale value

+   * @param[in]       shift number of bits to shift the result by

+   * @param[out]      *pDst points to the output vector

+   * @param[in]       blockSize number of samples in the vector

+   * @return none.

+   */

+

+  void arm_scale_q7(

+		     q7_t * pSrc,

+		    q7_t scaleFract,

+		    int8_t shift,

+		    q7_t * pDst,

+		    uint32_t blockSize);

+

+  /**

+   * @brief Multiplies a Q15 vector by a scalar.

+   * @param[in]       *pSrc points to the input vector

+   * @param[in]       scaleFract fractional portion of the scale value

+   * @param[in]       shift number of bits to shift the result by

+   * @param[out]      *pDst points to the output vector

+   * @param[in]       blockSize number of samples in the vector

+   * @return none.

+   */

+

+  void arm_scale_q15(

+		      q15_t * pSrc,

+		     q15_t scaleFract,

+		     int8_t shift,

+		     q15_t * pDst,

+		     uint32_t blockSize);

+

+  /**

+   * @brief Multiplies a Q31 vector by a scalar.

+   * @param[in]       *pSrc points to the input vector

+   * @param[in]       scaleFract fractional portion of the scale value

+   * @param[in]       shift number of bits to shift the result by

+   * @param[out]      *pDst points to the output vector

+   * @param[in]       blockSize number of samples in the vector

+   * @return none.

+   */

+

+  void arm_scale_q31(

+		      q31_t * pSrc,

+		     q31_t scaleFract,

+		     int8_t shift,

+		     q31_t * pDst,

+		     uint32_t blockSize);

+

+  /**

+   * @brief Q7 vector absolute value.

+   * @param[in]       *pSrc points to the input buffer

+   * @param[out]      *pDst points to the output buffer

+   * @param[in]       blockSize number of samples in each vector

+   * @return none.

+   */

+

+  void arm_abs_q7(

+		   q7_t * pSrc,

+		  q7_t * pDst,

+		  uint32_t blockSize);

+

+  /**

+   * @brief Floating-point vector absolute value.

+   * @param[in]       *pSrc points to the input buffer

+   * @param[out]      *pDst points to the output buffer

+   * @param[in]       blockSize number of samples in each vector

+   * @return none.

+   */

+

+  void arm_abs_f32(

+		    float32_t * pSrc,

+		   float32_t * pDst,

+		   uint32_t blockSize);

+

+  /**

+   * @brief Q15 vector absolute value.

+   * @param[in]       *pSrc points to the input buffer

+   * @param[out]      *pDst points to the output buffer

+   * @param[in]       blockSize number of samples in each vector

+   * @return none.

+   */

+

+  void arm_abs_q15(

+		    q15_t * pSrc,

+		   q15_t * pDst,

+		   uint32_t blockSize);

+

+  /**

+   * @brief Q31 vector absolute value.

+   * @param[in]       *pSrc points to the input buffer

+   * @param[out]      *pDst points to the output buffer

+   * @param[in]       blockSize number of samples in each vector

+   * @return none.

+   */

+

+  void arm_abs_q31(

+		    q31_t * pSrc,

+		   q31_t * pDst,

+		   uint32_t blockSize);

+

+  /**

+   * @brief Dot product of floating-point vectors.

+   * @param[in]       *pSrcA points to the first input vector

+   * @param[in]       *pSrcB points to the second input vector

+   * @param[in]       blockSize number of samples in each vector

+   * @param[out]      *result output result returned here

+   * @return none.

+   */

+

+  void arm_dot_prod_f32(

+			 float32_t * pSrcA,

+			 float32_t * pSrcB,

+			uint32_t blockSize,

+			float32_t * result);

+

+  /**

+   * @brief Dot product of Q7 vectors.

+   * @param[in]       *pSrcA points to the first input vector

+   * @param[in]       *pSrcB points to the second input vector

+   * @param[in]       blockSize number of samples in each vector

+   * @param[out]      *result output result returned here

+   * @return none.

+   */

+

+  void arm_dot_prod_q7(

+		        q7_t * pSrcA,

+		        q7_t * pSrcB,

+		       uint32_t blockSize,

+		       q31_t * result);

+

+  /**

+   * @brief Dot product of Q15 vectors.

+   * @param[in]       *pSrcA points to the first input vector

+   * @param[in]       *pSrcB points to the second input vector

+   * @param[in]       blockSize number of samples in each vector

+   * @param[out]      *result output result returned here

+   * @return none.

+   */

+

+  void arm_dot_prod_q15(

+			 q15_t * pSrcA,

+			 q15_t * pSrcB,

+			uint32_t blockSize,

+			q63_t * result);

+

+  /**

+   * @brief Dot product of Q31 vectors.

+   * @param[in]       *pSrcA points to the first input vector

+   * @param[in]       *pSrcB points to the second input vector

+   * @param[in]       blockSize number of samples in each vector

+   * @param[out]      *result output result returned here

+   * @return none.

+   */

+

+  void arm_dot_prod_q31(

+			 q31_t * pSrcA,

+			 q31_t * pSrcB,

+			uint32_t blockSize,

+			q63_t * result);

+

+  /**

+   * @brief  Shifts the elements of a Q7 vector a specified number of bits.

+   * @param[in]  *pSrc points to the input vector

+   * @param[in]  shiftBits number of bits to shift.  A positive value shifts left; a negative value shifts right.

+   * @param[out]  *pDst points to the output vector

+   * @param[in]  blockSize number of samples in the vector

+   * @return none.

+   */

+

+  void arm_shift_q7(

+		     q7_t * pSrc,

+		    int8_t shiftBits,

+		    q7_t * pDst,

+		    uint32_t blockSize);

+

+  /**

+   * @brief  Shifts the elements of a Q15 vector a specified number of bits.

+   * @param[in]  *pSrc points to the input vector

+   * @param[in]  shiftBits number of bits to shift.  A positive value shifts left; a negative value shifts right.

+   * @param[out]  *pDst points to the output vector

+   * @param[in]  blockSize number of samples in the vector

+   * @return none.

+   */

+

+  void arm_shift_q15(

+		      q15_t * pSrc,

+		     int8_t shiftBits,

+		     q15_t * pDst,

+		     uint32_t blockSize);

+

+  /**

+   * @brief  Shifts the elements of a Q31 vector a specified number of bits.

+   * @param[in]  *pSrc points to the input vector

+   * @param[in]  shiftBits number of bits to shift.  A positive value shifts left; a negative value shifts right.

+   * @param[out]  *pDst points to the output vector

+   * @param[in]  blockSize number of samples in the vector

+   * @return none.

+   */

+

+  void arm_shift_q31(

+		      q31_t * pSrc,

+		     int8_t shiftBits,

+		     q31_t * pDst,

+		     uint32_t blockSize);

+

+  /**

+   * @brief  Adds a constant offset to a floating-point vector.

+   * @param[in]  *pSrc points to the input vector

+   * @param[in]  offset is the offset to be added

+   * @param[out]  *pDst points to the output vector

+   * @param[in]  blockSize number of samples in the vector

+   * @return none.

+   */

+

+  void arm_offset_f32(

+		       float32_t * pSrc,

+		      float32_t offset,

+		      float32_t * pDst,

+		      uint32_t blockSize);

+

+  /**

+   * @brief  Adds a constant offset to a Q7 vector.

+   * @param[in]  *pSrc points to the input vector

+   * @param[in]  offset is the offset to be added

+   * @param[out]  *pDst points to the output vector

+   * @param[in]  blockSize number of samples in the vector

+   * @return none.

+   */

+

+  void arm_offset_q7(

+		      q7_t * pSrc,

+		     q7_t offset,

+		     q7_t * pDst,

+		     uint32_t blockSize);

+

+  /**

+   * @brief  Adds a constant offset to a Q15 vector.

+   * @param[in]  *pSrc points to the input vector

+   * @param[in]  offset is the offset to be added

+   * @param[out]  *pDst points to the output vector

+   * @param[in]  blockSize number of samples in the vector

+   * @return none.

+   */

+

+  void arm_offset_q15(

+		       q15_t * pSrc,

+		      q15_t offset,

+		      q15_t * pDst,

+		      uint32_t blockSize);

+

+  /**

+   * @brief  Adds a constant offset to a Q31 vector.

+   * @param[in]  *pSrc points to the input vector

+   * @param[in]  offset is the offset to be added

+   * @param[out]  *pDst points to the output vector

+   * @param[in]  blockSize number of samples in the vector

+   * @return none.

+   */

+

+  void arm_offset_q31(

+		       q31_t * pSrc,

+		      q31_t offset,

+		      q31_t * pDst,

+		      uint32_t blockSize);

+

+  /**

+   * @brief  Negates the elements of a floating-point vector.

+   * @param[in]  *pSrc points to the input vector

+   * @param[out]  *pDst points to the output vector

+   * @param[in]  blockSize number of samples in the vector

+   * @return none.

+   */

+

+  void arm_negate_f32(

+		       float32_t * pSrc,

+		      float32_t * pDst,

+		      uint32_t blockSize);

+

+  /**

+   * @brief  Negates the elements of a Q7 vector.

+   * @param[in]  *pSrc points to the input vector

+   * @param[out]  *pDst points to the output vector

+   * @param[in]  blockSize number of samples in the vector

+   * @return none.

+   */

+

+  void arm_negate_q7(

+		      q7_t * pSrc,

+		     q7_t * pDst,

+		     uint32_t blockSize);

+

+  /**

+   * @brief  Negates the elements of a Q15 vector.

+   * @param[in]  *pSrc points to the input vector

+   * @param[out]  *pDst points to the output vector

+   * @param[in]  blockSize number of samples in the vector

+   * @return none.

+   */

+

+  void arm_negate_q15(

+		       q15_t * pSrc,

+		      q15_t * pDst,

+		      uint32_t blockSize);

+

+  /**

+   * @brief  Negates the elements of a Q31 vector.

+   * @param[in]  *pSrc points to the input vector

+   * @param[out]  *pDst points to the output vector

+   * @param[in]  blockSize number of samples in the vector

+   * @return none.

+   */

+

+  void arm_negate_q31(

+		       q31_t * pSrc,

+		      q31_t * pDst,

+		      uint32_t blockSize);

+  /**

+   * @brief  Copies the elements of a floating-point vector.

+   * @param[in]  *pSrc input pointer

+   * @param[out]  *pDst output pointer

+   * @param[in]  blockSize number of samples to process

+   * @return none.

+   */

+  void arm_copy_f32(

+		     float32_t * pSrc,

+		    float32_t * pDst,

+		    uint32_t blockSize);

+

+  /**

+   * @brief  Copies the elements of a Q7 vector.

+   * @param[in]  *pSrc input pointer

+   * @param[out]  *pDst output pointer

+   * @param[in]  blockSize number of samples to process

+   * @return none.

+   */

+  void arm_copy_q7(

+		    q7_t * pSrc,

+		   q7_t * pDst,

+		   uint32_t blockSize);

+

+  /**

+   * @brief  Copies the elements of a Q15 vector.

+   * @param[in]  *pSrc input pointer

+   * @param[out]  *pDst output pointer

+   * @param[in]  blockSize number of samples to process

+   * @return none.

+   */

+  void arm_copy_q15(

+		     q15_t * pSrc,

+		    q15_t * pDst,

+		    uint32_t blockSize);

+

+  /**

+   * @brief  Copies the elements of a Q31 vector.

+   * @param[in]  *pSrc input pointer

+   * @param[out]  *pDst output pointer

+   * @param[in]  blockSize number of samples to process

+   * @return none.

+   */

+  void arm_copy_q31(

+		     q31_t * pSrc,

+		    q31_t * pDst,

+		    uint32_t blockSize);

+  /**

+   * @brief  Fills a constant value into a floating-point vector.

+   * @param[in]  value input value to be filled

+   * @param[out]  *pDst output pointer

+   * @param[in]  blockSize number of samples to process

+   * @return none.

+   */

+  void arm_fill_f32(

+		     float32_t value,

+		    float32_t * pDst,

+		    uint32_t blockSize);

+

+  /**

+   * @brief  Fills a constant value into a Q7 vector.

+   * @param[in]  value input value to be filled

+   * @param[out]  *pDst output pointer

+   * @param[in]  blockSize number of samples to process

+   * @return none.

+   */

+  void arm_fill_q7(

+		    q7_t value,

+		   q7_t * pDst,

+		   uint32_t blockSize);

+

+  /**

+   * @brief  Fills a constant value into a Q15 vector.

+   * @param[in]  value input value to be filled

+   * @param[out]  *pDst output pointer

+   * @param[in]  blockSize number of samples to process

+   * @return none.

+   */

+  void arm_fill_q15(

+		     q15_t value,

+		    q15_t * pDst,

+		    uint32_t blockSize);

+

+  /**

+   * @brief  Fills a constant value into a Q31 vector.

+   * @param[in]  value input value to be filled

+   * @param[out]  *pDst output pointer

+   * @param[in]  blockSize number of samples to process

+   * @return none.

+   */

+  void arm_fill_q31(

+		     q31_t value,

+		    q31_t * pDst,

+		    uint32_t blockSize);

+

+/**

+ * @brief Convolution of floating-point sequences.

+ * @param[in] *pSrcA points to the first input sequence.

+ * @param[in] srcALen length of the first input sequence.

+ * @param[in] *pSrcB points to the second input sequence.

+ * @param[in] srcBLen length of the second input sequence.

+ * @param[out] *pDst points to the location where the output result is written.  Length srcALen+srcBLen-1.

+ * @return none.

+ */

+

+  void arm_conv_f32(

+		     float32_t * pSrcA,

+		    uint32_t srcALen,

+		     float32_t * pSrcB,

+		    uint32_t srcBLen,

+		    float32_t * pDst);

+

+/**

+ * @brief Convolution of Q15 sequences.

+ * @param[in] *pSrcA points to the first input sequence.

+ * @param[in] srcALen length of the first input sequence.

+ * @param[in] *pSrcB points to the second input sequence.

+ * @param[in] srcBLen length of the second input sequence.

+ * @param[out] *pDst points to the location where the output result is written.  Length srcALen+srcBLen-1.

+ * @return none.

+ */

+

+  void arm_conv_q15(

+		     q15_t * pSrcA,

+		    uint32_t srcALen,

+		     q15_t * pSrcB,

+		    uint32_t srcBLen,

+		    q15_t * pDst);

+

+  /**

+   * @brief Convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4

+   * @param[in] *pSrcA points to the first input sequence.

+   * @param[in] srcALen length of the first input sequence.

+   * @param[in] *pSrcB points to the second input sequence.

+   * @param[in] srcBLen length of the second input sequence.

+   * @param[out] *pDst points to the block of output data  Length srcALen+srcBLen-1.

+   * @return none.

+   */

+

+  void arm_conv_fast_q15(

+			  q15_t * pSrcA,

+			 uint32_t srcALen,

+			  q15_t * pSrcB,

+			 uint32_t srcBLen,

+			 q15_t * pDst);

+

+  /**

+   * @brief Convolution of Q31 sequences.

+   * @param[in] *pSrcA points to the first input sequence.

+   * @param[in] srcALen length of the first input sequence.

+   * @param[in] *pSrcB points to the second input sequence.

+   * @param[in] srcBLen length of the second input sequence.

+   * @param[out] *pDst points to the block of output data  Length srcALen+srcBLen-1.

+   * @return none.

+   */

+

+  void arm_conv_q31(

+		     q31_t * pSrcA,

+		    uint32_t srcALen,

+		     q31_t * pSrcB,

+		    uint32_t srcBLen,

+		    q31_t * pDst);

+

+  /**

+   * @brief Convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4

+   * @param[in] *pSrcA points to the first input sequence.

+   * @param[in] srcALen length of the first input sequence.

+   * @param[in] *pSrcB points to the second input sequence.

+   * @param[in] srcBLen length of the second input sequence.

+   * @param[out] *pDst points to the block of output data  Length srcALen+srcBLen-1.

+   * @return none.

+   */

+

+  void arm_conv_fast_q31(

+			  q31_t * pSrcA,

+			 uint32_t srcALen,

+			  q31_t * pSrcB,

+			 uint32_t srcBLen,

+			 q31_t * pDst);

+

+  /**

+   * @brief Convolution of Q7 sequences.

+   * @param[in] *pSrcA points to the first input sequence.

+   * @param[in] srcALen length of the first input sequence.

+   * @param[in] *pSrcB points to the second input sequence.

+   * @param[in] srcBLen length of the second input sequence.

+   * @param[out] *pDst points to the block of output data  Length srcALen+srcBLen-1.

+   * @return none.

+   */

+

+  void arm_conv_q7(

+		    q7_t * pSrcA,

+		   uint32_t srcALen,

+		    q7_t * pSrcB,

+		   uint32_t srcBLen,

+		   q7_t * pDst);

+

+  /**

+   * @brief Partial convolution of floating-point sequences.

+   * @param[in]       *pSrcA points to the first input sequence.

+   * @param[in]       srcALen length of the first input sequence.

+   * @param[in]       *pSrcB points to the second input sequence.

+   * @param[in]       srcBLen length of the second input sequence.

+   * @param[out]      *pDst points to the block of output data

+   * @param[in]       firstIndex is the first output sample to start with.

+   * @param[in]       numPoints is the number of output points to be computed.

+   * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].

+   */

+

+  arm_status arm_conv_partial_f32(

+				   float32_t * pSrcA,

+				  uint32_t srcALen,

+				   float32_t * pSrcB,

+				  uint32_t srcBLen,

+				  float32_t * pDst,

+				  uint32_t firstIndex,

+				  uint32_t numPoints);

+

+  /**

+   * @brief Partial convolution of Q15 sequences.

+   * @param[in]       *pSrcA points to the first input sequence.

+   * @param[in]       srcALen length of the first input sequence.

+   * @param[in]       *pSrcB points to the second input sequence.

+   * @param[in]       srcBLen length of the second input sequence.

+   * @param[out]      *pDst points to the block of output data

+   * @param[in]       firstIndex is the first output sample to start with.

+   * @param[in]       numPoints is the number of output points to be computed.

+   * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].

+   */

+

+  arm_status arm_conv_partial_q15(

+				   q15_t * pSrcA,

+				  uint32_t srcALen,

+				   q15_t * pSrcB,

+				  uint32_t srcBLen,

+				  q15_t * pDst,

+				  uint32_t firstIndex,

+				  uint32_t numPoints);

+

+  /**

+   * @brief Partial convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4

+   * @param[in]       *pSrcA points to the first input sequence.

+   * @param[in]       srcALen length of the first input sequence.

+   * @param[in]       *pSrcB points to the second input sequence.

+   * @param[in]       srcBLen length of the second input sequence.

+   * @param[out]      *pDst points to the block of output data

+   * @param[in]       firstIndex is the first output sample to start with.

+   * @param[in]       numPoints is the number of output points to be computed.

+   * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].

+   */

+

+  arm_status arm_conv_partial_fast_q15(

+				        q15_t * pSrcA,

+				       uint32_t srcALen,

+				        q15_t * pSrcB,

+				       uint32_t srcBLen,

+				       q15_t * pDst,

+				       uint32_t firstIndex,

+				       uint32_t numPoints);

+

+  /**

+   * @brief Partial convolution of Q31 sequences.

+   * @param[in]       *pSrcA points to the first input sequence.

+   * @param[in]       srcALen length of the first input sequence.

+   * @param[in]       *pSrcB points to the second input sequence.

+   * @param[in]       srcBLen length of the second input sequence.

+   * @param[out]      *pDst points to the block of output data

+   * @param[in]       firstIndex is the first output sample to start with.

+   * @param[in]       numPoints is the number of output points to be computed.

+   * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].

+   */

+

+  arm_status arm_conv_partial_q31(

+				   q31_t * pSrcA,

+				  uint32_t srcALen,

+				   q31_t * pSrcB,

+				  uint32_t srcBLen,

+				  q31_t * pDst,

+				  uint32_t firstIndex,

+				  uint32_t numPoints);

+

+

+  /**

+   * @brief Partial convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4

+   * @param[in]       *pSrcA points to the first input sequence.

+   * @param[in]       srcALen length of the first input sequence.

+   * @param[in]       *pSrcB points to the second input sequence.

+   * @param[in]       srcBLen length of the second input sequence.

+   * @param[out]      *pDst points to the block of output data

+   * @param[in]       firstIndex is the first output sample to start with.

+   * @param[in]       numPoints is the number of output points to be computed.

+   * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].

+   */

+

+  arm_status arm_conv_partial_fast_q31(

+				        q31_t * pSrcA,

+				       uint32_t srcALen,

+				        q31_t * pSrcB,

+				       uint32_t srcBLen,

+				       q31_t * pDst,

+				       uint32_t firstIndex,

+				       uint32_t numPoints);

+

+  /**

+   * @brief Partial convolution of Q7 sequences.

+   * @param[in]       *pSrcA points to the first input sequence.

+   * @param[in]       srcALen length of the first input sequence.

+   * @param[in]       *pSrcB points to the second input sequence.

+   * @param[in]       srcBLen length of the second input sequence.

+   * @param[out]      *pDst points to the block of output data

+   * @param[in]       firstIndex is the first output sample to start with.

+   * @param[in]       numPoints is the number of output points to be computed.

+   * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].

+   */

+

+  arm_status arm_conv_partial_q7(

+				  q7_t * pSrcA,

+				 uint32_t srcALen,

+				  q7_t * pSrcB,

+				 uint32_t srcBLen,

+				 q7_t * pDst,

+				 uint32_t firstIndex,

+				 uint32_t numPoints);

+

+

+  /**

+   * @brief Instance structure for the Q15 FIR decimator.

+   */

+

+  typedef struct

+  {

+    uint8_t M;                      /**< decimation factor. */

+    uint16_t numTaps;               /**< number of coefficients in the filter. */

+    q15_t *pCoeffs;                  /**< points to the coefficient array. The array is of length numTaps.*/

+    q15_t *pState;                   /**< points to the state variable array. The array is of length numTaps+blockSize-1. */

+  } arm_fir_decimate_instance_q15;

+

+  /**

+   * @brief Instance structure for the Q31 FIR decimator.

+   */

+

+  typedef struct

+  {

+    uint8_t M;                  /**< decimation factor. */

+    uint16_t numTaps;           /**< number of coefficients in the filter. */

+    q31_t *pCoeffs;              /**< points to the coefficient array. The array is of length numTaps.*/

+    q31_t *pState;               /**< points to the state variable array. The array is of length numTaps+blockSize-1. */

+

+  } arm_fir_decimate_instance_q31;

+

+  /**

+   * @brief Instance structure for the floating-point FIR decimator.

+   */

+

+  typedef struct

+  {

+    uint8_t M;                          /**< decimation factor. */

+    uint16_t numTaps;                   /**< number of coefficients in the filter. */

+    float32_t *pCoeffs;                  /**< points to the coefficient array. The array is of length numTaps.*/

+    float32_t *pState;                   /**< points to the state variable array. The array is of length numTaps+blockSize-1. */

+

+  } arm_fir_decimate_instance_f32;

+

+

+

+  /**

+   * @brief Processing function for the floating-point FIR decimator.

+   * @param[in] *S points to an instance of the floating-point FIR decimator structure.

+   * @param[in] *pSrc points to the block of input data.

+   * @param[out] *pDst points to the block of output data

+   * @param[in] blockSize number of input samples to process per call.

+   * @return none

+   */

+

+  void arm_fir_decimate_f32(

+			    const arm_fir_decimate_instance_f32 * S,

+			     float32_t * pSrc,

+			    float32_t * pDst,

+			    uint32_t blockSize);

+

+

+  /**

+   * @brief  Initialization function for the floating-point FIR decimator.

+   * @param[in,out] *S points to an instance of the floating-point FIR decimator structure.

+   * @param[in] numTaps  number of coefficients in the filter.

+   * @param[in] M  decimation factor.

+   * @param[in] *pCoeffs points to the filter coefficients.

+   * @param[in] *pState points to the state buffer.

+   * @param[in] blockSize number of input samples to process per call.

+   * @return    The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if

+   * <code>blockSize</code> is not a multiple of <code>M</code>.

+   */

+

+  arm_status arm_fir_decimate_init_f32(

+				       arm_fir_decimate_instance_f32 * S,

+				       uint16_t numTaps,

+				       uint8_t M,

+				       float32_t * pCoeffs,

+				       float32_t * pState,

+				       uint32_t blockSize);

+

+  /**

+   * @brief Processing function for the Q15 FIR decimator.

+   * @param[in] *S points to an instance of the Q15 FIR decimator structure.

+   * @param[in] *pSrc points to the block of input data.

+   * @param[out] *pDst points to the block of output data

+   * @param[in] blockSize number of input samples to process per call.

+   * @return none

+   */

+

+  void arm_fir_decimate_q15(

+			    const arm_fir_decimate_instance_q15 * S,

+			     q15_t * pSrc,

+			    q15_t * pDst,

+			    uint32_t blockSize);

+

+  /**

+   * @brief Processing function for the Q15 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4.

+   * @param[in] *S points to an instance of the Q15 FIR decimator structure.

+   * @param[in] *pSrc points to the block of input data.

+   * @param[out] *pDst points to the block of output data

+   * @param[in] blockSize number of input samples to process per call.

+   * @return none

+   */

+

+  void arm_fir_decimate_fast_q15(

+				 const arm_fir_decimate_instance_q15 * S,

+				  q15_t * pSrc,

+				 q15_t * pDst,

+				 uint32_t blockSize);

+

+

+

+  /**

+   * @brief  Initialization function for the Q15 FIR decimator.

+   * @param[in,out] *S points to an instance of the Q15 FIR decimator structure.

+   * @param[in] numTaps  number of coefficients in the filter.

+   * @param[in] M  decimation factor.

+   * @param[in] *pCoeffs points to the filter coefficients.

+   * @param[in] *pState points to the state buffer.

+   * @param[in] blockSize number of input samples to process per call.

+   * @return    The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if

+   * <code>blockSize</code> is not a multiple of <code>M</code>.

+   */

+

+  arm_status arm_fir_decimate_init_q15(

+				       arm_fir_decimate_instance_q15 * S,

+				       uint16_t numTaps,

+				       uint8_t M,

+				       q15_t * pCoeffs,

+				       q15_t * pState,

+				       uint32_t blockSize);

+

+  /**

+   * @brief Processing function for the Q31 FIR decimator.

+   * @param[in] *S points to an instance of the Q31 FIR decimator structure.

+   * @param[in] *pSrc points to the block of input data.

+   * @param[out] *pDst points to the block of output data

+   * @param[in] blockSize number of input samples to process per call.

+   * @return none

+   */

+

+  void arm_fir_decimate_q31(

+			    const arm_fir_decimate_instance_q31 * S,

+			     q31_t * pSrc,

+			    q31_t * pDst,

+			    uint32_t blockSize);

+

+  /**

+   * @brief Processing function for the Q31 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4.

+   * @param[in] *S points to an instance of the Q31 FIR decimator structure.

+   * @param[in] *pSrc points to the block of input data.

+   * @param[out] *pDst points to the block of output data

+   * @param[in] blockSize number of input samples to process per call.

+   * @return none

+   */

+

+  void arm_fir_decimate_fast_q31(

+				 arm_fir_decimate_instance_q31 * S,

+				  q31_t * pSrc,

+				 q31_t * pDst,

+				 uint32_t blockSize);

+

+

+  /**

+   * @brief  Initialization function for the Q31 FIR decimator.

+   * @param[in,out] *S points to an instance of the Q31 FIR decimator structure.

+   * @param[in] numTaps  number of coefficients in the filter.

+   * @param[in] M  decimation factor.

+   * @param[in] *pCoeffs points to the filter coefficients.

+   * @param[in] *pState points to the state buffer.

+   * @param[in] blockSize number of input samples to process per call.

+   * @return    The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if

+   * <code>blockSize</code> is not a multiple of <code>M</code>.

+   */

+

+  arm_status arm_fir_decimate_init_q31(

+				       arm_fir_decimate_instance_q31 * S,

+				       uint16_t numTaps,

+				       uint8_t M,

+				       q31_t * pCoeffs,

+				       q31_t * pState,

+				       uint32_t blockSize);

+

+

+

+  /**

+   * @brief Instance structure for the Q15 FIR interpolator.

+   */

+

+  typedef struct

+  {

+    uint8_t L;                      /**< upsample factor. */

+    uint16_t phaseLength;           /**< length of each polyphase filter component. */

+    q15_t *pCoeffs;                 /**< points to the coefficient array. The array is of length L*phaseLength. */

+    q15_t *pState;                  /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */

+  } arm_fir_interpolate_instance_q15;

+

+  /**

+   * @brief Instance structure for the Q31 FIR interpolator.

+   */

+

+  typedef struct

+  {

+    uint8_t L;                      /**< upsample factor. */

+    uint16_t phaseLength;           /**< length of each polyphase filter component. */

+    q31_t *pCoeffs;                  /**< points to the coefficient array. The array is of length L*phaseLength. */

+    q31_t *pState;                   /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */

+  } arm_fir_interpolate_instance_q31;

+

+  /**

+   * @brief Instance structure for the floating-point FIR interpolator.

+   */

+

+  typedef struct

+  {

+    uint8_t L;                     /**< upsample factor. */

+    uint16_t phaseLength;          /**< length of each polyphase filter component. */

+    float32_t *pCoeffs;             /**< points to the coefficient array. The array is of length L*phaseLength. */

+    float32_t *pState;              /**< points to the state variable array. The array is of length phaseLength+numTaps-1. */

+  } arm_fir_interpolate_instance_f32;

+

+

+  /**

+   * @brief Processing function for the Q15 FIR interpolator.

+   * @param[in] *S        points to an instance of the Q15 FIR interpolator structure.

+   * @param[in] *pSrc     points to the block of input data.

+   * @param[out] *pDst    points to the block of output data.

+   * @param[in] blockSize number of input samples to process per call.

+   * @return none.

+   */

+

+  void arm_fir_interpolate_q15(

+			       const arm_fir_interpolate_instance_q15 * S,

+			        q15_t * pSrc,

+			       q15_t * pDst,

+			       uint32_t blockSize);

+

+

+  /**

+   * @brief  Initialization function for the Q15 FIR interpolator.

+   * @param[in,out] *S        points to an instance of the Q15 FIR interpolator structure.

+   * @param[in]     L         upsample factor.

+   * @param[in]     numTaps   number of filter coefficients in the filter.

+   * @param[in]     *pCoeffs  points to the filter coefficient buffer.

+   * @param[in]     *pState   points to the state buffer.

+   * @param[in]     blockSize number of input samples to process per call.

+   * @return        The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if

+   * the filter length <code>numTaps</code> is not a multiple of the interpolation factor <code>L</code>.

+   */

+

+  arm_status arm_fir_interpolate_init_q15(

+					  arm_fir_interpolate_instance_q15 * S,

+					  uint8_t L,

+					  uint16_t numTaps,

+					  q15_t * pCoeffs,

+					  q15_t * pState,

+					  uint32_t blockSize);

+

+  /**

+   * @brief Processing function for the Q31 FIR interpolator.

+   * @param[in] *S        points to an instance of the Q15 FIR interpolator structure.

+   * @param[in] *pSrc     points to the block of input data.

+   * @param[out] *pDst    points to the block of output data.

+   * @param[in] blockSize number of input samples to process per call.

+   * @return none.

+   */

+

+  void arm_fir_interpolate_q31(

+			       const arm_fir_interpolate_instance_q31 * S,

+			        q31_t * pSrc,

+			       q31_t * pDst,

+			       uint32_t blockSize);

+

+  /**

+   * @brief  Initialization function for the Q31 FIR interpolator.

+   * @param[in,out] *S        points to an instance of the Q31 FIR interpolator structure.

+   * @param[in]     L         upsample factor.

+   * @param[in]     numTaps   number of filter coefficients in the filter.

+   * @param[in]     *pCoeffs  points to the filter coefficient buffer.

+   * @param[in]     *pState   points to the state buffer.

+   * @param[in]     blockSize number of input samples to process per call.

+   * @return        The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if

+   * the filter length <code>numTaps</code> is not a multiple of the interpolation factor <code>L</code>.

+   */

+

+  arm_status arm_fir_interpolate_init_q31(

+					  arm_fir_interpolate_instance_q31 * S,

+					  uint8_t L,

+					  uint16_t numTaps,

+					  q31_t * pCoeffs,

+					  q31_t * pState,

+					  uint32_t blockSize);

+

+

+  /**

+   * @brief Processing function for the floating-point FIR interpolator.

+   * @param[in] *S        points to an instance of the floating-point FIR interpolator structure.

+   * @param[in] *pSrc     points to the block of input data.

+   * @param[out] *pDst    points to the block of output data.

+   * @param[in] blockSize number of input samples to process per call.

+   * @return none.

+   */

+

+  void arm_fir_interpolate_f32(

+			       const arm_fir_interpolate_instance_f32 * S,

+			        float32_t * pSrc,

+			       float32_t * pDst,

+			       uint32_t blockSize);

+

+  /**

+   * @brief  Initialization function for the floating-point FIR interpolator.

+   * @param[in,out] *S        points to an instance of the floating-point FIR interpolator structure.

+   * @param[in]     L         upsample factor.

+   * @param[in]     numTaps   number of filter coefficients in the filter.

+   * @param[in]     *pCoeffs  points to the filter coefficient buffer.

+   * @param[in]     *pState   points to the state buffer.

+   * @param[in]     blockSize number of input samples to process per call.

+   * @return        The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if

+   * the filter length <code>numTaps</code> is not a multiple of the interpolation factor <code>L</code>.

+   */

+

+  arm_status arm_fir_interpolate_init_f32(

+					  arm_fir_interpolate_instance_f32 * S,

+					  uint8_t L,

+					  uint16_t numTaps,

+					  float32_t * pCoeffs,

+					  float32_t * pState,

+					  uint32_t blockSize);

+

+  /**

+   * @brief Instance structure for the high precision Q31 Biquad cascade filter.

+   */

+

+  typedef struct

+  {

+    uint8_t numStages;       /**< number of 2nd order stages in the filter.  Overall order is 2*numStages. */

+    q63_t *pState;           /**< points to the array of state coefficients.  The array is of length 4*numStages. */

+    q31_t *pCoeffs;          /**< points to the array of coefficients.  The array is of length 5*numStages. */

+    uint8_t postShift;       /**< additional shift, in bits, applied to each output sample. */

+

+  } arm_biquad_cas_df1_32x64_ins_q31;

+

+

+  /**

+   * @param[in]  *S        points to an instance of the high precision Q31 Biquad cascade filter structure.

+   * @param[in]  *pSrc     points to the block of input data.

+   * @param[out] *pDst     points to the block of output data

+   * @param[in]  blockSize number of samples to process.

+   * @return none.

+   */

+

+  void arm_biquad_cas_df1_32x64_q31(

+				    const arm_biquad_cas_df1_32x64_ins_q31 * S,

+				     q31_t * pSrc,

+				    q31_t * pDst,

+				    uint32_t blockSize);

+

+

+  /**

+   * @param[in,out] *S           points to an instance of the high precision Q31 Biquad cascade filter structure.

+   * @param[in]     numStages    number of 2nd order stages in the filter.

+   * @param[in]     *pCoeffs     points to the filter coefficients.

+   * @param[in]     *pState      points to the state buffer.

+   * @param[in]     postShift    shift to be applied to the output. Varies according to the coefficients format

+   * @return        none

+   */

+

+  void arm_biquad_cas_df1_32x64_init_q31(

+					 arm_biquad_cas_df1_32x64_ins_q31 * S,

+					 uint8_t numStages,

+					 q31_t * pCoeffs,

+					 q63_t * pState,

+					 uint8_t postShift);

+

+

+

+  /**

+   * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter.

+   */

+

+  typedef struct

+  {

+    uint8_t   numStages;       /**< number of 2nd order stages in the filter.  Overall order is 2*numStages. */

+    float32_t *pState;         /**< points to the array of state coefficients.  The array is of length 2*numStages. */

+    float32_t *pCoeffs;        /**< points to the array of coefficients.  The array is of length 5*numStages. */

+  } arm_biquad_cascade_df2T_instance_f32;

+

+

+  /**

+   * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter.

+   * @param[in]  *S        points to an instance of the filter data structure.

+   * @param[in]  *pSrc     points to the block of input data.

+   * @param[out] *pDst     points to the block of output data

+   * @param[in]  blockSize number of samples to process.

+   * @return none.

+   */

+

+  void arm_biquad_cascade_df2T_f32(

+				   const arm_biquad_cascade_df2T_instance_f32 * S,

+				    float32_t * pSrc,

+				   float32_t * pDst,

+				   uint32_t blockSize);

+

+

+  /**

+   * @brief  Initialization function for the floating-point transposed direct form II Biquad cascade filter.

+   * @param[in,out] *S           points to an instance of the filter data structure.

+   * @param[in]     numStages    number of 2nd order stages in the filter.

+   * @param[in]     *pCoeffs     points to the filter coefficients.

+   * @param[in]     *pState      points to the state buffer.

+   * @return        none

+   */

+

+  void arm_biquad_cascade_df2T_init_f32(

+					arm_biquad_cascade_df2T_instance_f32 * S,

+					uint8_t numStages,

+					float32_t * pCoeffs,

+					float32_t * pState);

+

+

+

+  /**

+   * @brief Instance structure for the Q15 FIR lattice filter.

+   */

+

+  typedef struct

+  {

+    uint16_t numStages;                          /**< number of filter stages. */

+    q15_t *pState;                               /**< points to the state variable array. The array is of length numStages. */

+    q15_t *pCoeffs;                              /**< points to the coefficient array. The array is of length numStages. */

+  } arm_fir_lattice_instance_q15;

+

+  /**

+   * @brief Instance structure for the Q31 FIR lattice filter.

+   */

+

+  typedef struct

+  {

+    uint16_t numStages;                          /**< number of filter stages. */

+    q31_t *pState;                               /**< points to the state variable array. The array is of length numStages. */

+    q31_t *pCoeffs;                              /**< points to the coefficient array. The array is of length numStages. */

+  } arm_fir_lattice_instance_q31;

+

+  /**

+   * @brief Instance structure for the floating-point FIR lattice filter.

+   */

+

+  typedef struct

+  {

+    uint16_t numStages;                  /**< number of filter stages. */

+    float32_t *pState;                   /**< points to the state variable array. The array is of length numStages. */

+    float32_t *pCoeffs;                  /**< points to the coefficient array. The array is of length numStages. */

+  } arm_fir_lattice_instance_f32;

+

+  /**

+   * @brief Initialization function for the Q15 FIR lattice filter.

+   * @param[in] *S points to an instance of the Q15 FIR lattice structure.

+   * @param[in] numStages  number of filter stages.

+   * @param[in] *pCoeffs points to the coefficient buffer.  The array is of length numStages.

+   * @param[in] *pState points to the state buffer.  The array is of length numStages.

+   * @return none.

+   */

+

+  void arm_fir_lattice_init_q15(

+				arm_fir_lattice_instance_q15 * S,

+				uint16_t numStages,

+				q15_t * pCoeffs,

+				q15_t * pState);

+

+

+  /**

+   * @brief Processing function for the Q15 FIR lattice filter.

+   * @param[in] *S points to an instance of the Q15 FIR lattice structure.

+   * @param[in] *pSrc points to the block of input data.

+   * @param[out] *pDst points to the block of output data.

+   * @param[in] blockSize number of samples to process.

+   * @return none.

+   */

+  void arm_fir_lattice_q15(

+			   const arm_fir_lattice_instance_q15 * S,

+			    q15_t * pSrc,

+			   q15_t * pDst,

+			   uint32_t blockSize);

+

+  /**

+   * @brief Initialization function for the Q31 FIR lattice filter.

+   * @param[in] *S points to an instance of the Q31 FIR lattice structure.

+   * @param[in] numStages  number of filter stages.

+   * @param[in] *pCoeffs points to the coefficient buffer.  The array is of length numStages.

+   * @param[in] *pState points to the state buffer.   The array is of length numStages.

+   * @return none.

+   */

+

+  void arm_fir_lattice_init_q31(

+				arm_fir_lattice_instance_q31 * S,

+				uint16_t numStages,

+				q31_t * pCoeffs,

+				q31_t * pState);

+

+

+  /**

+   * @brief Processing function for the Q31 FIR lattice filter.

+   * @param[in]  *S        points to an instance of the Q31 FIR lattice structure.

+   * @param[in]  *pSrc     points to the block of input data.

+   * @param[out] *pDst     points to the block of output data

+   * @param[in]  blockSize number of samples to process.

+   * @return none.

+   */

+

+  void arm_fir_lattice_q31(

+			   const arm_fir_lattice_instance_q31 * S,

+			    q31_t * pSrc,

+			   q31_t * pDst,

+			   uint32_t blockSize);

+

+/**

+ * @brief Initialization function for the floating-point FIR lattice filter.

+ * @param[in] *S points to an instance of the floating-point FIR lattice structure.

+ * @param[in] numStages  number of filter stages.

+ * @param[in] *pCoeffs points to the coefficient buffer.  The array is of length numStages.

+ * @param[in] *pState points to the state buffer.  The array is of length numStages.

+ * @return none.

+ */

+

+  void arm_fir_lattice_init_f32(

+				arm_fir_lattice_instance_f32 * S,

+				uint16_t numStages,

+				float32_t * pCoeffs,

+				float32_t * pState);

+

+  /**

+   * @brief Processing function for the floating-point FIR lattice filter.

+   * @param[in]  *S        points to an instance of the floating-point FIR lattice structure.

+   * @param[in]  *pSrc     points to the block of input data.

+   * @param[out] *pDst     points to the block of output data

+   * @param[in]  blockSize number of samples to process.

+   * @return none.

+   */

+

+  void arm_fir_lattice_f32(

+			   const arm_fir_lattice_instance_f32 * S,

+			    float32_t * pSrc,

+			   float32_t * pDst,

+			   uint32_t blockSize);

+

+  /**

+   * @brief Instance structure for the Q15 IIR lattice filter.

+   */

+  typedef struct

+  {

+    uint16_t numStages;                         /**< number of stages in the filter. */

+    q15_t *pState;                              /**< points to the state variable array. The array is of length numStages+blockSize. */

+    q15_t *pkCoeffs;                            /**< points to the reflection coefficient array. The array is of length numStages. */

+    q15_t *pvCoeffs;                            /**< points to the ladder coefficient array. The array is of length numStages+1. */

+  } arm_iir_lattice_instance_q15;

+

+  /**

+   * @brief Instance structure for the Q31 IIR lattice filter.

+   */

+  typedef struct

+  {

+    uint16_t numStages;                         /**< number of stages in the filter. */

+    q31_t *pState;                              /**< points to the state variable array. The array is of length numStages+blockSize. */

+    q31_t *pkCoeffs;                            /**< points to the reflection coefficient array. The array is of length numStages. */

+    q31_t *pvCoeffs;                            /**< points to the ladder coefficient array. The array is of length numStages+1. */

+  } arm_iir_lattice_instance_q31;

+

+  /**

+   * @brief Instance structure for the floating-point IIR lattice filter.

+   */

+  typedef struct

+  {

+    uint16_t numStages;                         /**< number of stages in the filter. */

+    float32_t *pState;                          /**< points to the state variable array. The array is of length numStages+blockSize. */

+    float32_t *pkCoeffs;                        /**< points to the reflection coefficient array. The array is of length numStages. */

+    float32_t *pvCoeffs;                        /**< points to the ladder coefficient array. The array is of length numStages+1. */

+  } arm_iir_lattice_instance_f32;

+

+  /**

+   * @brief Processing function for the floating-point IIR lattice filter.

+   * @param[in] *S points to an instance of the floating-point IIR lattice structure.

+   * @param[in] *pSrc points to the block of input data.

+   * @param[out] *pDst points to the block of output data.

+   * @param[in] blockSize number of samples to process.

+   * @return none.

+   */

+

+  void arm_iir_lattice_f32(

+			   const arm_iir_lattice_instance_f32 * S,

+			    float32_t * pSrc,

+			   float32_t * pDst,

+			   uint32_t blockSize);

+

+  /**

+   * @brief Initialization function for the floating-point IIR lattice filter.

+   * @param[in] *S points to an instance of the floating-point IIR lattice structure.

+   * @param[in] numStages number of stages in the filter.

+   * @param[in] *pkCoeffs points to the reflection coefficient buffer.  The array is of length numStages.

+   * @param[in] *pvCoeffs points to the ladder coefficient buffer.  The array is of length numStages+1.

+   * @param[in] *pState points to the state buffer.  The array is of length numStages+blockSize-1.

+   * @param[in] blockSize number of samples to process.

+   * @return none.

+   */

+

+  void arm_iir_lattice_init_f32(

+				arm_iir_lattice_instance_f32 * S,

+				uint16_t numStages,

+				float32_t *pkCoeffs,

+				float32_t *pvCoeffs,

+				float32_t *pState,

+				uint32_t blockSize);

+

+

+  /**

+   * @brief Processing function for the Q31 IIR lattice filter.

+   * @param[in] *S points to an instance of the Q31 IIR lattice structure.

+   * @param[in] *pSrc points to the block of input data.

+   * @param[out] *pDst points to the block of output data.

+   * @param[in] blockSize number of samples to process.

+   * @return none.

+   */

+

+  void arm_iir_lattice_q31(

+			   const arm_iir_lattice_instance_q31 * S,

+			    q31_t * pSrc,

+			   q31_t * pDst,

+			   uint32_t blockSize);

+

+

+  /**

+   * @brief Initialization function for the Q31 IIR lattice filter.

+   * @param[in] *S points to an instance of the Q31 IIR lattice structure.

+   * @param[in] numStages number of stages in the filter.

+   * @param[in] *pkCoeffs points to the reflection coefficient buffer.  The array is of length numStages.

+   * @param[in] *pvCoeffs points to the ladder coefficient buffer.  The array is of length numStages+1.

+   * @param[in] *pState points to the state buffer.  The array is of length numStages+blockSize.

+   * @param[in] blockSize number of samples to process.

+   * @return none.

+   */

+

+  void arm_iir_lattice_init_q31(

+				arm_iir_lattice_instance_q31 * S,

+				uint16_t numStages,

+				q31_t *pkCoeffs,

+				q31_t *pvCoeffs,

+				q31_t *pState,

+				uint32_t blockSize);

+

+

+  /**

+   * @brief Processing function for the Q15 IIR lattice filter.

+   * @param[in] *S points to an instance of the Q15 IIR lattice structure.

+   * @param[in] *pSrc points to the block of input data.

+   * @param[out] *pDst points to the block of output data.

+   * @param[in] blockSize number of samples to process.

+   * @return none.

+   */

+

+  void arm_iir_lattice_q15(

+			   const arm_iir_lattice_instance_q15 * S,

+			    q15_t * pSrc,

+			   q15_t * pDst,

+			   uint32_t blockSize);

+

+

+/**

+ * @brief Initialization function for the Q15 IIR lattice filter.

+ * @param[in] *S points to an instance of the fixed-point Q15 IIR lattice structure.

+ * @param[in] numStages  number of stages in the filter.

+ * @param[in] *pkCoeffs points to reflection coefficient buffer.  The array is of length numStages.

+ * @param[in] *pvCoeffs points to ladder coefficient buffer.  The array is of length numStages+1.

+ * @param[in] *pState points to state buffer.  The array is of length numStages+blockSize.

+ * @param[in] blockSize number of samples to process per call.

+ * @return none.

+ */

+

+  void arm_iir_lattice_init_q15(

+				arm_iir_lattice_instance_q15 * S,

+				uint16_t numStages,

+				q15_t *pkCoeffs,

+				q15_t *pvCoeffs,

+				q15_t *pState,

+				uint32_t blockSize);

+

+  /**

+   * @brief Instance structure for the floating-point LMS filter.

+   */

+

+  typedef struct

+  {

+    uint16_t numTaps;    /**< number of coefficients in the filter. */

+    float32_t *pState;   /**< points to the state variable array. The array is of length numTaps+blockSize-1. */

+    float32_t *pCoeffs;  /**< points to the coefficient array. The array is of length numTaps. */

+    float32_t mu;        /**< step size that controls filter coefficient updates. */

+  } arm_lms_instance_f32;

+

+  /**

+   * @brief Processing function for floating-point LMS filter.

+   * @param[in]  *S points to an instance of the floating-point LMS filter structure.

+   * @param[in]  *pSrc points to the block of input data.

+   * @param[in]  *pRef points to the block of reference data.

+   * @param[out] *pOut points to the block of output data.

+   * @param[out] *pErr points to the block of error data.

+   * @param[in]  blockSize number of samples to process.

+   * @return     none.

+   */

+

+  void arm_lms_f32(

+		   const arm_lms_instance_f32 * S,

+		    float32_t * pSrc,

+		    float32_t * pRef,

+		   float32_t * pOut,

+		   float32_t * pErr,

+		   uint32_t blockSize);

+

+  /**

+   * @brief Initialization function for floating-point LMS filter.

+   * @param[in] *S points to an instance of the floating-point LMS filter structure.

+   * @param[in] numTaps  number of filter coefficients.

+   * @param[in] *pCoeffs points to the coefficient buffer.

+   * @param[in] *pState points to state buffer.

+   * @param[in] mu step size that controls filter coefficient updates.

+   * @param[in] blockSize number of samples to process.

+   * @return none.

+   */

+

+  void arm_lms_init_f32(

+			arm_lms_instance_f32 * S,

+			uint16_t numTaps,

+			float32_t * pCoeffs,

+			float32_t * pState,

+			float32_t mu,

+			uint32_t blockSize);

+

+  /**

+   * @brief Instance structure for the Q15 LMS filter.

+   */

+

+  typedef struct

+  {

+    uint16_t numTaps;    /**< number of coefficients in the filter. */

+    q15_t *pState;       /**< points to the state variable array. The array is of length numTaps+blockSize-1. */

+    q15_t *pCoeffs;      /**< points to the coefficient array. The array is of length numTaps. */

+    q15_t mu;            /**< step size that controls filter coefficient updates. */

+    uint32_t postShift;  /**< bit shift applied to coefficients. */

+  } arm_lms_instance_q15;

+

+

+  /**

+   * @brief Initialization function for the Q15 LMS filter.

+   * @param[in] *S points to an instance of the Q15 LMS filter structure.

+   * @param[in] numTaps  number of filter coefficients.

+   * @param[in] *pCoeffs points to the coefficient buffer.

+   * @param[in] *pState points to the state buffer.

+   * @param[in] mu step size that controls filter coefficient updates.

+   * @param[in] blockSize number of samples to process.

+   * @param[in] postShift bit shift applied to coefficients.

+   * @return    none.

+   */

+

+  void arm_lms_init_q15(

+			arm_lms_instance_q15 * S,

+			uint16_t numTaps,

+			q15_t * pCoeffs,

+			q15_t * pState,

+			q15_t mu,

+			uint32_t blockSize,

+			uint32_t postShift);

+

+  /**

+   * @brief Processing function for Q15 LMS filter.

+   * @param[in] *S points to an instance of the Q15 LMS filter structure.

+   * @param[in] *pSrc points to the block of input data.

+   * @param[in] *pRef points to the block of reference data.

+   * @param[out] *pOut points to the block of output data.

+   * @param[out] *pErr points to the block of error data.

+   * @param[in] blockSize number of samples to process.

+   * @return none.

+   */

+

+  void arm_lms_q15(

+		   const arm_lms_instance_q15 * S,

+		    q15_t * pSrc,

+		    q15_t * pRef,

+		   q15_t * pOut,

+		   q15_t * pErr,

+		   uint32_t blockSize);

+

+

+  /**

+   * @brief Instance structure for the Q31 LMS filter.

+   */

+

+  typedef struct

+  {

+    uint16_t numTaps;    /**< number of coefficients in the filter. */

+    q31_t *pState;       /**< points to the state variable array. The array is of length numTaps+blockSize-1. */

+    q31_t *pCoeffs;      /**< points to the coefficient array. The array is of length numTaps. */

+    q31_t mu;            /**< step size that controls filter coefficient updates. */

+    uint32_t postShift;  /**< bit shift applied to coefficients. */

+

+  } arm_lms_instance_q31;

+

+  /**

+   * @brief Processing function for Q31 LMS filter.

+   * @param[in]  *S points to an instance of the Q15 LMS filter structure.

+   * @param[in]  *pSrc points to the block of input data.

+   * @param[in]  *pRef points to the block of reference data.

+   * @param[out] *pOut points to the block of output data.

+   * @param[out] *pErr points to the block of error data.

+   * @param[in]  blockSize number of samples to process.

+   * @return     none.

+   */

+

+  void arm_lms_q31(

+		   const arm_lms_instance_q31 * S,

+		    q31_t * pSrc,

+		    q31_t * pRef,

+		   q31_t * pOut,

+		   q31_t * pErr,

+		   uint32_t blockSize);

+

+  /**

+   * @brief Initialization function for Q31 LMS filter.

+   * @param[in] *S points to an instance of the Q31 LMS filter structure.

+   * @param[in] numTaps  number of filter coefficients.

+   * @param[in] *pCoeffs points to coefficient buffer.

+   * @param[in] *pState points to state buffer.

+   * @param[in] mu step size that controls filter coefficient updates.

+   * @param[in] blockSize number of samples to process.

+   * @param[in] postShift bit shift applied to coefficients.

+   * @return none.

+   */

+

+  void arm_lms_init_q31(

+			arm_lms_instance_q31 * S,

+			uint16_t numTaps,

+			q31_t *pCoeffs,

+			q31_t *pState,

+			q31_t mu,

+			uint32_t blockSize,

+			uint32_t postShift);

+

+  /**

+   * @brief Instance structure for the floating-point normalized LMS filter.

+   */

+

+  typedef struct

+  {

+    uint16_t  numTaps;    /**< number of coefficients in the filter. */

+    float32_t *pState;    /**< points to the state variable array. The array is of length numTaps+blockSize-1. */

+    float32_t *pCoeffs;   /**< points to the coefficient array. The array is of length numTaps. */

+    float32_t mu;        /**< step size that control filter coefficient updates. */

+    float32_t energy;    /**< saves previous frame energy. */

+    float32_t x0;        /**< saves previous input sample. */

+  } arm_lms_norm_instance_f32;

+

+  /**

+   * @brief Processing function for floating-point normalized LMS filter.

+   * @param[in] *S points to an instance of the floating-point normalized LMS filter structure.

+   * @param[in] *pSrc points to the block of input data.

+   * @param[in] *pRef points to the block of reference data.

+   * @param[out] *pOut points to the block of output data.

+   * @param[out] *pErr points to the block of error data.

+   * @param[in] blockSize number of samples to process.

+   * @return none.

+   */

+

+  void arm_lms_norm_f32(

+			arm_lms_norm_instance_f32 * S,

+			 float32_t * pSrc,

+			 float32_t * pRef,

+			float32_t * pOut,

+			float32_t * pErr,

+			uint32_t blockSize);

+

+  /**

+   * @brief Initialization function for floating-point normalized LMS filter.

+   * @param[in] *S points to an instance of the floating-point LMS filter structure.

+   * @param[in] numTaps  number of filter coefficients.

+   * @param[in] *pCoeffs points to coefficient buffer.

+   * @param[in] *pState points to state buffer.

+   * @param[in] mu step size that controls filter coefficient updates.

+   * @param[in] blockSize number of samples to process.

+   * @return none.

+   */

+

+  void arm_lms_norm_init_f32(

+			     arm_lms_norm_instance_f32 * S,

+			     uint16_t numTaps,

+			     float32_t * pCoeffs,

+			     float32_t * pState,

+			     float32_t mu,

+			     uint32_t blockSize);

+

+

+  /**

+   * @brief Instance structure for the Q31 normalized LMS filter.

+   */

+  typedef struct

+  {

+    uint16_t numTaps;     /**< number of coefficients in the filter. */

+    q31_t *pState;        /**< points to the state variable array. The array is of length numTaps+blockSize-1. */

+    q31_t *pCoeffs;       /**< points to the coefficient array. The array is of length numTaps. */

+    q31_t mu;             /**< step size that controls filter coefficient updates. */

+    uint8_t postShift;    /**< bit shift applied to coefficients. */

+    q31_t *recipTable;    /**< points to the reciprocal initial value table. */

+    q31_t energy;         /**< saves previous frame energy. */

+    q31_t x0;             /**< saves previous input sample. */

+  } arm_lms_norm_instance_q31;

+

+  /**

+   * @brief Processing function for Q31 normalized LMS filter.

+   * @param[in] *S points to an instance of the Q31 normalized LMS filter structure.

+   * @param[in] *pSrc points to the block of input data.

+   * @param[in] *pRef points to the block of reference data.

+   * @param[out] *pOut points to the block of output data.

+   * @param[out] *pErr points to the block of error data.

+   * @param[in] blockSize number of samples to process.

+   * @return none.

+   */

+

+  void arm_lms_norm_q31(

+			arm_lms_norm_instance_q31 * S,

+			 q31_t * pSrc,

+			 q31_t * pRef,

+			q31_t * pOut,

+			q31_t * pErr,

+			uint32_t blockSize);

+

+  /**

+   * @brief Initialization function for Q31 normalized LMS filter.

+   * @param[in] *S points to an instance of the Q31 normalized LMS filter structure.

+   * @param[in] numTaps  number of filter coefficients.

+   * @param[in] *pCoeffs points to coefficient buffer.

+   * @param[in] *pState points to state buffer.

+   * @param[in] mu step size that controls filter coefficient updates.

+   * @param[in] blockSize number of samples to process.

+   * @param[in] postShift bit shift applied to coefficients.

+   * @return none.

+   */

+

+  void arm_lms_norm_init_q31(

+			     arm_lms_norm_instance_q31 * S,

+			     uint16_t numTaps,

+			     q31_t * pCoeffs,

+			     q31_t * pState,

+			     q31_t mu,

+			     uint32_t blockSize,

+			     uint8_t postShift);

+

+  /**

+   * @brief Instance structure for the Q15 normalized LMS filter.

+   */

+

+  typedef struct

+  {

+    uint16_t numTaps;    /**< Number of coefficients in the filter. */

+    q15_t *pState;        /**< points to the state variable array. The array is of length numTaps+blockSize-1. */

+    q15_t *pCoeffs;       /**< points to the coefficient array. The array is of length numTaps. */

+    q15_t mu;            /**< step size that controls filter coefficient updates. */

+    uint8_t postShift;   /**< bit shift applied to coefficients. */

+    q15_t *recipTable;   /**< Points to the reciprocal initial value table. */

+    q15_t energy;        /**< saves previous frame energy. */

+    q15_t x0;            /**< saves previous input sample. */

+  } arm_lms_norm_instance_q15;

+

+  /**

+   * @brief Processing function for Q15 normalized LMS filter.

+   * @param[in] *S points to an instance of the Q15 normalized LMS filter structure.

+   * @param[in] *pSrc points to the block of input data.

+   * @param[in] *pRef points to the block of reference data.

+   * @param[out] *pOut points to the block of output data.

+   * @param[out] *pErr points to the block of error data.

+   * @param[in] blockSize number of samples to process.

+   * @return none.

+   */

+

+  void arm_lms_norm_q15(

+			arm_lms_norm_instance_q15 * S,

+			 q15_t * pSrc,

+			 q15_t * pRef,

+			q15_t * pOut,

+			q15_t * pErr,

+			uint32_t blockSize);

+

+

+  /**

+   * @brief Initialization function for Q15 normalized LMS filter.

+   * @param[in] *S points to an instance of the Q15 normalized LMS filter structure.

+   * @param[in] numTaps  number of filter coefficients.

+   * @param[in] *pCoeffs points to coefficient buffer.

+   * @param[in] *pState points to state buffer.

+   * @param[in] mu step size that controls filter coefficient updates.

+   * @param[in] blockSize number of samples to process.

+   * @param[in] postShift bit shift applied to coefficients.

+   * @return none.

+   */

+

+  void arm_lms_norm_init_q15(

+			     arm_lms_norm_instance_q15 * S,

+			     uint16_t numTaps,

+			     q15_t * pCoeffs,

+			     q15_t * pState,

+			     q15_t mu,

+			     uint32_t blockSize,

+			     uint8_t postShift);

+

+  /**

+   * @brief Correlation of floating-point sequences.

+   * @param[in] *pSrcA points to the first input sequence.

+   * @param[in] srcALen length of the first input sequence.

+   * @param[in] *pSrcB points to the second input sequence.

+   * @param[in] srcBLen length of the second input sequence.

+   * @param[out] *pDst points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.

+   * @return none.

+   */

+

+  void arm_correlate_f32(

+			  float32_t * pSrcA,

+			 uint32_t srcALen,

+			  float32_t * pSrcB,

+			 uint32_t srcBLen,

+			 float32_t * pDst);

+

+  /**

+   * @brief Correlation of Q15 sequences.

+   * @param[in] *pSrcA points to the first input sequence.

+   * @param[in] srcALen length of the first input sequence.

+   * @param[in] *pSrcB points to the second input sequence.

+   * @param[in] srcBLen length of the second input sequence.

+   * @param[out] *pDst points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.

+   * @return none.

+   */

+

+  void arm_correlate_q15(

+			  q15_t * pSrcA,

+			 uint32_t srcALen,

+			  q15_t * pSrcB,

+			 uint32_t srcBLen,

+			 q15_t * pDst);

+

+  /**

+   * @brief Correlation of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4.

+   * @param[in] *pSrcA points to the first input sequence.

+   * @param[in] srcALen length of the first input sequence.

+   * @param[in] *pSrcB points to the second input sequence.

+   * @param[in] srcBLen length of the second input sequence.

+   * @param[out] *pDst points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.

+   * @return none.

+   */

+

+  void arm_correlate_fast_q15(

+			       q15_t * pSrcA,

+			      uint32_t srcALen,

+			       q15_t * pSrcB,

+			      uint32_t srcBLen,

+			      q15_t * pDst);

+

+  /**

+   * @brief Correlation of Q31 sequences.

+   * @param[in] *pSrcA points to the first input sequence.

+   * @param[in] srcALen length of the first input sequence.

+   * @param[in] *pSrcB points to the second input sequence.

+   * @param[in] srcBLen length of the second input sequence.

+   * @param[out] *pDst points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.

+   * @return none.

+   */

+

+  void arm_correlate_q31(

+			  q31_t * pSrcA,

+			 uint32_t srcALen,

+			  q31_t * pSrcB,

+			 uint32_t srcBLen,

+			 q31_t * pDst);

+

+  /**

+   * @brief Correlation of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4

+   * @param[in] *pSrcA points to the first input sequence.

+   * @param[in] srcALen length of the first input sequence.

+   * @param[in] *pSrcB points to the second input sequence.

+   * @param[in] srcBLen length of the second input sequence.

+   * @param[out] *pDst points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.

+   * @return none.

+   */

+

+  void arm_correlate_fast_q31(

+			       q31_t * pSrcA,

+			      uint32_t srcALen,

+			       q31_t * pSrcB,

+			      uint32_t srcBLen,

+			      q31_t * pDst);

+

+  /**

+   * @brief Correlation of Q7 sequences.

+   * @param[in] *pSrcA points to the first input sequence.

+   * @param[in] srcALen length of the first input sequence.

+   * @param[in] *pSrcB points to the second input sequence.

+   * @param[in] srcBLen length of the second input sequence.

+   * @param[out] *pDst points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.

+   * @return none.

+   */

+

+  void arm_correlate_q7(

+			 q7_t * pSrcA,

+			uint32_t srcALen,

+			 q7_t * pSrcB,

+			uint32_t srcBLen,

+			q7_t * pDst);

+

+  /**

+   * @brief Instance structure for the floating-point sparse FIR filter.

+   */

+  typedef struct

+  {

+    uint16_t numTaps;             /**< number of coefficients in the filter. */

+    uint16_t stateIndex;          /**< state buffer index.  Points to the oldest sample in the state buffer. */

+    float32_t *pState;            /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */

+    float32_t *pCoeffs;           /**< points to the coefficient array. The array is of length numTaps.*/

+    uint16_t maxDelay;            /**< maximum offset specified by the pTapDelay array. */

+    int32_t *pTapDelay;           /**< points to the array of delay values.  The array is of length numTaps. */

+  } arm_fir_sparse_instance_f32;

+

+  /**

+   * @brief Instance structure for the Q31 sparse FIR filter.

+   */

+

+  typedef struct

+  {

+    uint16_t numTaps;             /**< number of coefficients in the filter. */

+    uint16_t stateIndex;          /**< state buffer index.  Points to the oldest sample in the state buffer. */

+    q31_t *pState;                /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */

+    q31_t *pCoeffs;               /**< points to the coefficient array. The array is of length numTaps.*/

+    uint16_t maxDelay;            /**< maximum offset specified by the pTapDelay array. */

+    int32_t *pTapDelay;           /**< points to the array of delay values.  The array is of length numTaps. */

+  } arm_fir_sparse_instance_q31;

+

+  /**

+   * @brief Instance structure for the Q15 sparse FIR filter.

+   */

+

+  typedef struct

+  {

+    uint16_t numTaps;             /**< number of coefficients in the filter. */

+    uint16_t stateIndex;          /**< state buffer index.  Points to the oldest sample in the state buffer. */

+    q15_t *pState;                /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */

+    q15_t *pCoeffs;               /**< points to the coefficient array. The array is of length numTaps.*/

+    uint16_t maxDelay;            /**< maximum offset specified by the pTapDelay array. */

+    int32_t *pTapDelay;           /**< points to the array of delay values.  The array is of length numTaps. */

+  } arm_fir_sparse_instance_q15;

+

+  /**

+   * @brief Instance structure for the Q7 sparse FIR filter.

+   */

+

+  typedef struct

+  {

+    uint16_t numTaps;             /**< number of coefficients in the filter. */

+    uint16_t stateIndex;          /**< state buffer index.  Points to the oldest sample in the state buffer. */

+    q7_t *pState;                 /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */

+    q7_t *pCoeffs;                /**< points to the coefficient array. The array is of length numTaps.*/

+    uint16_t maxDelay;            /**< maximum offset specified by the pTapDelay array. */

+    int32_t *pTapDelay;           /**< points to the array of delay values.  The array is of length numTaps. */

+  } arm_fir_sparse_instance_q7;

+

+  /**

+   * @brief Processing function for the floating-point sparse FIR filter.

+   * @param[in]  *S          points to an instance of the floating-point sparse FIR structure.

+   * @param[in]  *pSrc       points to the block of input data.

+   * @param[out] *pDst       points to the block of output data

+   * @param[in]  *pScratchIn points to a temporary buffer of size blockSize.

+   * @param[in]  blockSize   number of input samples to process per call.

+   * @return none.

+   */

+

+  void arm_fir_sparse_f32(

+			  arm_fir_sparse_instance_f32 * S,

+			   float32_t * pSrc,

+			  float32_t * pDst,

+			  float32_t * pScratchIn,

+			  uint32_t blockSize);

+

+  /**

+   * @brief  Initialization function for the floating-point sparse FIR filter.

+   * @param[in,out] *S         points to an instance of the floating-point sparse FIR structure.

+   * @param[in]     numTaps    number of nonzero coefficients in the filter.

+   * @param[in]     *pCoeffs   points to the array of filter coefficients.

+   * @param[in]     *pState    points to the state buffer.

+   * @param[in]     *pTapDelay points to the array of offset times.

+   * @param[in]     maxDelay   maximum offset time supported.

+   * @param[in]     blockSize  number of samples that will be processed per block.

+   * @return none

+   */

+

+  void arm_fir_sparse_init_f32(

+			       arm_fir_sparse_instance_f32 * S,

+			       uint16_t numTaps,

+			       float32_t * pCoeffs,

+			       float32_t * pState,

+			       int32_t * pTapDelay,

+			       uint16_t maxDelay,

+			       uint32_t blockSize);

+

+  /**

+   * @brief Processing function for the Q31 sparse FIR filter.

+   * @param[in]  *S          points to an instance of the Q31 sparse FIR structure.

+   * @param[in]  *pSrc       points to the block of input data.

+   * @param[out] *pDst       points to the block of output data

+   * @param[in]  *pScratchIn points to a temporary buffer of size blockSize.

+   * @param[in]  blockSize   number of input samples to process per call.

+   * @return none.

+   */

+

+  void arm_fir_sparse_q31(

+			  arm_fir_sparse_instance_q31 * S,

+			   q31_t * pSrc,

+			  q31_t * pDst,

+			  q31_t * pScratchIn,

+			  uint32_t blockSize);

+

+  /**

+   * @brief  Initialization function for the Q31 sparse FIR filter.

+   * @param[in,out] *S         points to an instance of the Q31 sparse FIR structure.

+   * @param[in]     numTaps    number of nonzero coefficients in the filter.

+   * @param[in]     *pCoeffs   points to the array of filter coefficients.

+   * @param[in]     *pState    points to the state buffer.

+   * @param[in]     *pTapDelay points to the array of offset times.

+   * @param[in]     maxDelay   maximum offset time supported.

+   * @param[in]     blockSize  number of samples that will be processed per block.

+   * @return none

+   */

+

+  void arm_fir_sparse_init_q31(

+			       arm_fir_sparse_instance_q31 * S,

+			       uint16_t numTaps,

+			       q31_t * pCoeffs,

+			       q31_t * pState,

+			       int32_t * pTapDelay,

+			       uint16_t maxDelay,

+			       uint32_t blockSize);

+

+  /**

+   * @brief Processing function for the Q15 sparse FIR filter.

+   * @param[in]  *S           points to an instance of the Q15 sparse FIR structure.

+   * @param[in]  *pSrc        points to the block of input data.

+   * @param[out] *pDst        points to the block of output data

+   * @param[in]  *pScratchIn  points to a temporary buffer of size blockSize.

+   * @param[in]  *pScratchOut points to a temporary buffer of size blockSize.

+   * @param[in]  blockSize    number of input samples to process per call.

+   * @return none.

+   */

+

+  void arm_fir_sparse_q15(

+			  arm_fir_sparse_instance_q15 * S,

+			   q15_t * pSrc,

+			  q15_t * pDst,

+			  q15_t * pScratchIn,

+			  q31_t * pScratchOut,

+			  uint32_t blockSize);

+

+

+  /**

+   * @brief  Initialization function for the Q15 sparse FIR filter.

+   * @param[in,out] *S         points to an instance of the Q15 sparse FIR structure.

+   * @param[in]     numTaps    number of nonzero coefficients in the filter.

+   * @param[in]     *pCoeffs   points to the array of filter coefficients.

+   * @param[in]     *pState    points to the state buffer.

+   * @param[in]     *pTapDelay points to the array of offset times.

+   * @param[in]     maxDelay   maximum offset time supported.

+   * @param[in]     blockSize  number of samples that will be processed per block.

+   * @return none

+   */

+

+  void arm_fir_sparse_init_q15(

+			       arm_fir_sparse_instance_q15 * S,

+			       uint16_t numTaps,

+			       q15_t * pCoeffs,

+			       q15_t * pState,

+			       int32_t * pTapDelay,

+			       uint16_t maxDelay,

+			       uint32_t blockSize);

+

+  /**

+   * @brief Processing function for the Q7 sparse FIR filter.

+   * @param[in]  *S           points to an instance of the Q7 sparse FIR structure.

+   * @param[in]  *pSrc        points to the block of input data.

+   * @param[out] *pDst        points to the block of output data

+   * @param[in]  *pScratchIn  points to a temporary buffer of size blockSize.

+   * @param[in]  *pScratchOut points to a temporary buffer of size blockSize.

+   * @param[in]  blockSize    number of input samples to process per call.

+   * @return none.

+   */

+

+  void arm_fir_sparse_q7(

+			 arm_fir_sparse_instance_q7 * S,

+			  q7_t * pSrc,

+			 q7_t * pDst,

+			 q7_t * pScratchIn,

+			 q31_t * pScratchOut,

+			 uint32_t blockSize);

+

+  /**

+   * @brief  Initialization function for the Q7 sparse FIR filter.

+   * @param[in,out] *S         points to an instance of the Q7 sparse FIR structure.

+   * @param[in]     numTaps    number of nonzero coefficients in the filter.

+   * @param[in]     *pCoeffs   points to the array of filter coefficients.

+   * @param[in]     *pState    points to the state buffer.

+   * @param[in]     *pTapDelay points to the array of offset times.

+   * @param[in]     maxDelay   maximum offset time supported.

+   * @param[in]     blockSize  number of samples that will be processed per block.

+   * @return none

+   */

+

+  void arm_fir_sparse_init_q7(

+			      arm_fir_sparse_instance_q7 * S,

+			      uint16_t numTaps,

+			      q7_t * pCoeffs,

+			      q7_t * pState,

+			      int32_t *pTapDelay,

+			      uint16_t maxDelay,

+			      uint32_t blockSize);

+

+

+  /*

+   * @brief  Floating-point sin_cos function.

+   * @param[in]  theta    input value in degrees

+   * @param[out] *pSinVal points to the processed sine output.

+   * @param[out] *pCosVal points to the processed cos output.

+   * @return none.

+   */

+

+  void arm_sin_cos_f32(

+		       float32_t theta,

+		       float32_t *pSinVal,

+		       float32_t *pCcosVal);

+

+  /*

+   * @brief  Q31 sin_cos function.

+   * @param[in]  theta    scaled input value in degrees

+   * @param[out] *pSinVal points to the processed sine output.

+   * @param[out] *pCosVal points to the processed cosine output.

+   * @return none.

+   */

+

+  void arm_sin_cos_q31(

+		       q31_t theta,

+		       q31_t *pSinVal,

+		       q31_t *pCosVal);

+

+

+  /**

+   * @brief  Floating-point complex conjugate.

+   * @param[in]  *pSrc points to the input vector

+   * @param[out]  *pDst points to the output vector

+   * @param[in]  numSamples number of complex samples in each vector

+   * @return none.

+   */

+

+  void arm_cmplx_conj_f32(

+			   float32_t * pSrc,

+			  float32_t * pDst,

+			  uint32_t numSamples);

+

+  /**

+   * @brief  Q31 complex conjugate.

+   * @param[in]  *pSrc points to the input vector

+   * @param[out]  *pDst points to the output vector

+   * @param[in]  numSamples number of complex samples in each vector

+   * @return none.

+   */

+

+  void arm_cmplx_conj_q31(

+			   q31_t * pSrc,

+			  q31_t * pDst,

+			  uint32_t numSamples);

+

+  /**

+   * @brief  Q15 complex conjugate.

+   * @param[in]  *pSrc points to the input vector

+   * @param[out]  *pDst points to the output vector

+   * @param[in]  numSamples number of complex samples in each vector

+   * @return none.

+   */

+

+  void arm_cmplx_conj_q15(

+			   q15_t * pSrc,

+			  q15_t * pDst,

+			  uint32_t numSamples);

+

+

+

+  /**

+   * @brief  Floating-point complex magnitude squared

+   * @param[in]  *pSrc points to the complex input vector

+   * @param[out]  *pDst points to the real output vector

+   * @param[in]  numSamples number of complex samples in the input vector

+   * @return none.

+   */

+

+  void arm_cmplx_mag_squared_f32(

+				  float32_t * pSrc,

+				 float32_t * pDst,

+				 uint32_t numSamples);

+

+  /**

+   * @brief  Q31 complex magnitude squared

+   * @param[in]  *pSrc points to the complex input vector

+   * @param[out]  *pDst points to the real output vector

+   * @param[in]  numSamples number of complex samples in the input vector

+   * @return none.

+   */

+

+  void arm_cmplx_mag_squared_q31(

+				  q31_t * pSrc,

+				 q31_t * pDst,

+				 uint32_t numSamples);

+

+  /**

+   * @brief  Q15 complex magnitude squared

+   * @param[in]  *pSrc points to the complex input vector

+   * @param[out]  *pDst points to the real output vector

+   * @param[in]  numSamples number of complex samples in the input vector

+   * @return none.

+   */

+

+  void arm_cmplx_mag_squared_q15(

+				  q15_t * pSrc,

+				 q15_t * pDst,

+				 uint32_t numSamples);

+

+

+ /**

+   * @ingroup groupController

+   */

+

+  /**

+   * @defgroup PID PID Motor Control

+   *

+   * A Proportional Integral Derivative (PID) controller is a generic feedback control

+   * loop mechanism widely used in industrial control systems.

+   * A PID controller is the most commonly used type of feedback controller.

+   *

+   * This set of functions implements (PID) controllers

+   * for Q15, Q31, and floating-point data types.  The functions operate on a single sample

+   * of data and each call to the function returns a single processed value.

+   * <code>S</code> points to an instance of the PID control data structure.  <code>in</code>

+   * is the input sample value. The functions return the output value.

+   *

+   * \par Algorithm:

+   * <pre>

+   *    y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2]

+   *    A0 = Kp + Ki + Kd

+   *    A1 = (-Kp ) - (2 * Kd )

+   *    A2 = Kd  </pre>

+   *

+   * \par

+   * where \c Kp is proportional constant, \c Ki is Integral constant and \c Kd is Derivative constant

+   *

+   * \par

+   * \image html PID.gif "Proportional Integral Derivative Controller"

+   *

+   * \par

+   * The PID controller calculates an "error" value as the difference between

+   * the measured output and the reference input.

+   * The controller attempts to minimize the error by adjusting the process control inputs.

+   * The proportional value determines the reaction to the current error,

+   * the integral value determines the reaction based on the sum of recent errors,

+   * and the derivative value determines the reaction based on the rate at which the error has been changing.

+   *

+   * \par Instance Structure

+   * The Gains A0, A1, A2 and state variables for a PID controller are stored together in an instance data structure.

+   * A separate instance structure must be defined for each PID Controller.

+   * There are separate instance structure declarations for each of the 3 supported data types.

+   *

+   * \par Reset Functions

+   * There is also an associated reset function for each data type which clears the state array.

+   *

+   * \par Initialization Functions

+   * There is also an associated initialization function for each data type.

+   * The initialization function performs the following operations:

+   * - Initializes the Gains A0, A1, A2 from Kp,Ki, Kd gains.

+   * - Zeros out the values in the state buffer.

+   *

+   * \par

+   * Instance structure cannot be placed into a const data section and it is recommended to use the initialization function.

+   *

+   * \par Fixed-Point Behavior

+   * Care must be taken when using the fixed-point versions of the PID Controller functions.

+   * In particular, the overflow and saturation behavior of the accumulator used in each function must be considered.

+   * Refer to the function specific documentation below for usage guidelines.

+   */

+

+  /**

+   * @addtogroup PID

+   * @{

+   */

+

+  /**

+   * @brief  Process function for the floating-point PID Control.

+   * @param[in,out] *S is an instance of the floating-point PID Control structure

+   * @param[in] in input sample to process

+   * @return out processed output sample.

+   */

+

+

+  __STATIC_INLINE float32_t arm_pid_f32(

+					arm_pid_instance_f32 * S,

+					float32_t in)

+  {

+    float32_t out;

+

+    /* y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2]  */

+    out = (S->A0 * in) +

+      (S->A1 * S->state[0]) + (S->A2 * S->state[1]) + (S->state[2]);

+

+    /* Update state */

+    S->state[1] = S->state[0];

+    S->state[0] = in;

+    S->state[2] = out;

+

+    /* return to application */

+    return (out);

+

+  }

+

+  /**

+   * @brief  Process function for the Q31 PID Control.

+   * @param[in,out] *S points to an instance of the Q31 PID Control structure

+   * @param[in] in input sample to process

+   * @return out processed output sample.

+   *

+   * <b>Scaling and Overflow Behavior:</b>

+   * \par

+   * The function is implemented using an internal 64-bit accumulator.

+   * The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit.

+   * Thus, if the accumulator result overflows it wraps around rather than clip.

+   * In order to avoid overflows completely the input signal must be scaled down by 2 bits as there are four additions.

+   * After all multiply-accumulates are performed, the 2.62 accumulator is truncated to 1.32 format and then saturated to 1.31 format.

+   */

+

+  __STATIC_INLINE q31_t arm_pid_q31(

+				    arm_pid_instance_q31 * S,

+				    q31_t in)

+  {

+    q63_t acc;

+	q31_t out;

+

+    /* acc = A0 * x[n]  */

+    acc = (q63_t) S->A0 * in;

+

+    /* acc += A1 * x[n-1] */

+    acc += (q63_t) S->A1 * S->state[0];

+

+    /* acc += A2 * x[n-2]  */

+    acc += (q63_t) S->A2 * S->state[1];

+

+    /* convert output to 1.31 format to add y[n-1] */

+    out = (q31_t) (acc >> 31u);

+

+    /* out += y[n-1] */

+    out += S->state[2];

+

+    /* Update state */

+    S->state[1] = S->state[0];

+    S->state[0] = in;

+    S->state[2] = out;

+

+    /* return to application */

+    return (out);

+

+  }

+

+  /**

+   * @brief  Process function for the Q15 PID Control.

+   * @param[in,out] *S points to an instance of the Q15 PID Control structure

+   * @param[in] in input sample to process

+   * @return out processed output sample.

+   *

+   * <b>Scaling and Overflow Behavior:</b>

+   * \par

+   * The function is implemented using a 64-bit internal accumulator.

+   * Both Gains and state variables are represented in 1.15 format and multiplications yield a 2.30 result.

+   * The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format.

+   * There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved.

+   * After all additions have been performed, the accumulator is truncated to 34.15 format by discarding low 15 bits.

+   * Lastly, the accumulator is saturated to yield a result in 1.15 format.

+   */

+

+  __STATIC_INLINE q15_t arm_pid_q15(

+				    arm_pid_instance_q15 * S,

+				    q15_t in)

+  {

+    q63_t acc;

+    q15_t out;

+

+    /* Implementation of PID controller */

+

+	#ifdef ARM_MATH_CM0

+

+ 	/* acc = A0 * x[n]  */

+	acc = ((q31_t) S->A0 )* in ;

+

+    #else

+

+    /* acc = A0 * x[n]  */

+    acc = (q31_t) __SMUAD(S->A0, in);

+

+	#endif

+

+	#ifdef ARM_MATH_CM0

+

+	/* acc += A1 * x[n-1] + A2 * x[n-2]  */

+	acc += (q31_t) S->A1  *  S->state[0] ;

+	acc += (q31_t) S->A2  *  S->state[1] ;

+

+	#else

+

+    /* acc += A1 * x[n-1] + A2 * x[n-2]  */

+    acc = __SMLALD(S->A1, (q31_t)__SIMD32(S->state), acc);

+

+	#endif

+

+    /* acc += y[n-1] */

+    acc += (q31_t) S->state[2] << 15;

+

+    /* saturate the output */

+    out = (q15_t) (__SSAT((acc >> 15), 16));

+

+    /* Update state */

+    S->state[1] = S->state[0];

+    S->state[0] = in;

+    S->state[2] = out;

+

+    /* return to application */

+    return (out);

+

+  }

+

+  /**

+   * @} end of PID group

+   */

+

+

+  /**

+   * @brief Floating-point matrix inverse.

+   * @param[in]  *src points to the instance of the input floating-point matrix structure.

+   * @param[out] *dst points to the instance of the output floating-point matrix structure.

+   * @return The function returns ARM_MATH_SIZE_MISMATCH, if the dimensions do not match.

+   * If the input matrix is singular (does not have an inverse), then the algorithm terminates and returns error status ARM_MATH_SINGULAR.

+   */

+

+  arm_status arm_mat_inverse_f32(

+				 const arm_matrix_instance_f32 * src,

+				 arm_matrix_instance_f32 * dst);

+

+

+

+  /**

+   * @ingroup groupController

+   */

+

+

+  /**

+   * @defgroup clarke Vector Clarke Transform

+   * Forward Clarke transform converts the instantaneous stator phases into a two-coordinate time invariant vector.

+   * Generally the Clarke transform uses three-phase currents <code>Ia, Ib and Ic</code> to calculate currents

+   * in the two-phase orthogonal stator axis <code>Ialpha</code> and <code>Ibeta</code>.

+   * When <code>Ialpha</code> is superposed with <code>Ia</code> as shown in the figure below

+   * \image html clarke.gif Stator current space vector and its components in (a,b).

+   * and <code>Ia + Ib + Ic = 0</code>, in this condition <code>Ialpha</code> and <code>Ibeta</code>

+   * can be calculated using only <code>Ia</code> and <code>Ib</code>.

+   *

+   * The function operates on a single sample of data and each call to the function returns the processed output.

+   * The library provides separate functions for Q31 and floating-point data types.

+   * \par Algorithm

+   * \image html clarkeFormula.gif

+   * where <code>Ia</code> and <code>Ib</code> are the instantaneous stator phases and

+   * <code>pIalpha</code> and <code>pIbeta</code> are the two coordinates of time invariant vector.

+   * \par Fixed-Point Behavior

+   * Care must be taken when using the Q31 version of the Clarke transform.

+   * In particular, the overflow and saturation behavior of the accumulator used must be considered.

+   * Refer to the function specific documentation below for usage guidelines.

+   */

+

+  /**

+   * @addtogroup clarke

+   * @{

+   */

+

+  /**

+   *

+   * @brief  Floating-point Clarke transform

+   * @param[in]       Ia       input three-phase coordinate <code>a</code>

+   * @param[in]       Ib       input three-phase coordinate <code>b</code>

+   * @param[out]      *pIalpha points to output two-phase orthogonal vector axis alpha

+   * @param[out]      *pIbeta  points to output two-phase orthogonal vector axis beta

+   * @return none.

+   */

+

+  __STATIC_INLINE void arm_clarke_f32(

+				      float32_t Ia,

+				      float32_t Ib,

+				      float32_t * pIalpha,

+				      float32_t * pIbeta)

+  {

+    /* Calculate pIalpha using the equation, pIalpha = Ia */

+    *pIalpha = Ia;

+

+    /* Calculate pIbeta using the equation, pIbeta = (1/sqrt(3)) * Ia + (2/sqrt(3)) * Ib */

+    *pIbeta = ((float32_t) 0.57735026919 * Ia + (float32_t) 1.15470053838 * Ib);

+

+  }

+

+  /**

+   * @brief  Clarke transform for Q31 version

+   * @param[in]       Ia       input three-phase coordinate <code>a</code>

+   * @param[in]       Ib       input three-phase coordinate <code>b</code>

+   * @param[out]      *pIalpha points to output two-phase orthogonal vector axis alpha

+   * @param[out]      *pIbeta  points to output two-phase orthogonal vector axis beta

+   * @return none.

+   *

+   * <b>Scaling and Overflow Behavior:</b>

+   * \par

+   * The function is implemented using an internal 32-bit accumulator.

+   * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format.

+   * There is saturation on the addition, hence there is no risk of overflow.

+   */

+

+  __STATIC_INLINE void arm_clarke_q31(

+				      q31_t Ia,

+				      q31_t Ib,

+				      q31_t * pIalpha,

+				      q31_t * pIbeta)

+  {

+    q31_t product1, product2;                    /* Temporary variables used to store intermediate results */

+

+    /* Calculating pIalpha from Ia by equation pIalpha = Ia */

+    *pIalpha = Ia;

+

+    /* Intermediate product is calculated by (1/(sqrt(3)) * Ia) */

+    product1 = (q31_t) (((q63_t) Ia * 0x24F34E8B) >> 30);

+

+    /* Intermediate product is calculated by (2/sqrt(3) * Ib) */

+    product2 = (q31_t) (((q63_t) Ib * 0x49E69D16) >> 30);

+

+    /* pIbeta is calculated by adding the intermediate products */

+    *pIbeta = __QADD(product1, product2);

+  }

+

+  /**

+   * @} end of clarke group

+   */

+

+  /**

+   * @brief  Converts the elements of the Q7 vector to Q31 vector.

+   * @param[in]  *pSrc     input pointer

+   * @param[out]  *pDst    output pointer

+   * @param[in]  blockSize number of samples to process

+   * @return none.

+   */

+  void arm_q7_to_q31(

+		     q7_t * pSrc,

+		     q31_t * pDst,

+		     uint32_t blockSize);

+

+

+

+

+  /**

+   * @ingroup groupController

+   */

+

+  /**

+   * @defgroup inv_clarke Vector Inverse Clarke Transform

+   * Inverse Clarke transform converts the two-coordinate time invariant vector into instantaneous stator phases.

+   *

+   * The function operates on a single sample of data and each call to the function returns the processed output.

+   * The library provides separate functions for Q31 and floating-point data types.

+   * \par Algorithm

+   * \image html clarkeInvFormula.gif

+   * where <code>pIa</code> and <code>pIb</code> are the instantaneous stator phases and

+   * <code>Ialpha</code> and <code>Ibeta</code> are the two coordinates of time invariant vector.

+   * \par Fixed-Point Behavior

+   * Care must be taken when using the Q31 version of the Clarke transform.

+   * In particular, the overflow and saturation behavior of the accumulator used must be considered.

+   * Refer to the function specific documentation below for usage guidelines.

+   */

+

+  /**

+   * @addtogroup inv_clarke

+   * @{

+   */

+

+   /**

+   * @brief  Floating-point Inverse Clarke transform

+   * @param[in]       Ialpha  input two-phase orthogonal vector axis alpha

+   * @param[in]       Ibeta   input two-phase orthogonal vector axis beta

+   * @param[out]      *pIa    points to output three-phase coordinate <code>a</code>

+   * @param[out]      *pIb    points to output three-phase coordinate <code>b</code>

+   * @return none.

+   */

+

+

+  __STATIC_INLINE void arm_inv_clarke_f32(

+					  float32_t Ialpha,

+					  float32_t Ibeta,

+					  float32_t * pIa,

+					  float32_t * pIb)

+  {

+    /* Calculating pIa from Ialpha by equation pIa = Ialpha */

+    *pIa = Ialpha;

+

+    /* Calculating pIb from Ialpha and Ibeta by equation pIb = -(1/2) * Ialpha + (sqrt(3)/2) * Ibeta */

+    *pIb = -0.5 * Ialpha + (float32_t) 0.8660254039 *Ibeta;

+

+  }

+

+  /**

+   * @brief  Inverse Clarke transform for Q31 version

+   * @param[in]       Ialpha  input two-phase orthogonal vector axis alpha

+   * @param[in]       Ibeta   input two-phase orthogonal vector axis beta

+   * @param[out]      *pIa    points to output three-phase coordinate <code>a</code>

+   * @param[out]      *pIb    points to output three-phase coordinate <code>b</code>

+   * @return none.

+   *

+   * <b>Scaling and Overflow Behavior:</b>

+   * \par

+   * The function is implemented using an internal 32-bit accumulator.

+   * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format.

+   * There is saturation on the subtraction, hence there is no risk of overflow.

+   */

+

+  __STATIC_INLINE void arm_inv_clarke_q31(

+					  q31_t Ialpha,

+					  q31_t Ibeta,

+					  q31_t * pIa,

+					  q31_t * pIb)

+  {

+    q31_t product1, product2;                    /* Temporary variables used to store intermediate results */

+

+    /* Calculating pIa from Ialpha by equation pIa = Ialpha */

+    *pIa = Ialpha;

+

+    /* Intermediate product is calculated by (1/(2*sqrt(3)) * Ia) */

+    product1 = (q31_t) (((q63_t) (Ialpha) * (0x40000000)) >> 31);

+

+    /* Intermediate product is calculated by (1/sqrt(3) * pIb) */

+    product2 = (q31_t) (((q63_t) (Ibeta) * (0x6ED9EBA1)) >> 31);

+

+    /* pIb is calculated by subtracting the products */

+    *pIb = __QSUB(product2, product1);

+

+  }

+

+  /**

+   * @} end of inv_clarke group

+   */

+

+  /**

+   * @brief  Converts the elements of the Q7 vector to Q15 vector.

+   * @param[in]  *pSrc     input pointer

+   * @param[out] *pDst     output pointer

+   * @param[in]  blockSize number of samples to process

+   * @return none.

+   */

+  void arm_q7_to_q15(

+		      q7_t * pSrc,

+		     q15_t * pDst,

+		     uint32_t blockSize);

+

+

+

+  /**

+   * @ingroup groupController

+   */

+

+  /**

+   * @defgroup park Vector Park Transform

+   *

+   * Forward Park transform converts the input two-coordinate vector to flux and torque components.

+   * The Park transform can be used to realize the transformation of the <code>Ialpha</code> and the <code>Ibeta</code> currents

+   * from the stationary to the moving reference frame and control the spatial relationship between

+   * the stator vector current and rotor flux vector.

+   * If we consider the d axis aligned with the rotor flux, the diagram below shows the

+   * current vector and the relationship from the two reference frames:

+   * \image html park.gif "Stator current space vector and its component in (a,b) and in the d,q rotating reference frame"

+   *

+   * The function operates on a single sample of data and each call to the function returns the processed output.

+   * The library provides separate functions for Q31 and floating-point data types.

+   * \par Algorithm

+   * \image html parkFormula.gif

+   * where <code>Ialpha</code> and <code>Ibeta</code> are the stator vector components,

+   * <code>pId</code> and <code>pIq</code> are rotor vector components and <code>cosVal</code> and <code>sinVal</code> are the

+   * cosine and sine values of theta (rotor flux position).

+   * \par Fixed-Point Behavior

+   * Care must be taken when using the Q31 version of the Park transform.

+   * In particular, the overflow and saturation behavior of the accumulator used must be considered.

+   * Refer to the function specific documentation below for usage guidelines.

+   */

+

+  /**

+   * @addtogroup park

+   * @{

+   */

+

+  /**

+   * @brief Floating-point Park transform

+   * @param[in]       Ialpha input two-phase vector coordinate alpha

+   * @param[in]       Ibeta  input two-phase vector coordinate beta

+   * @param[out]      *pId   points to output	rotor reference frame d

+   * @param[out]      *pIq   points to output	rotor reference frame q

+   * @param[in]       sinVal sine value of rotation angle theta

+   * @param[in]       cosVal cosine value of rotation angle theta

+   * @return none.

+   *

+   * The function implements the forward Park transform.

+   *

+   */

+

+  __STATIC_INLINE void arm_park_f32(

+				    float32_t Ialpha,

+				    float32_t Ibeta,

+				    float32_t * pId,

+				    float32_t * pIq,

+				    float32_t sinVal,

+				    float32_t cosVal)

+  {

+    /* Calculate pId using the equation, pId = Ialpha * cosVal + Ibeta * sinVal */

+    *pId = Ialpha * cosVal + Ibeta * sinVal;

+

+    /* Calculate pIq using the equation, pIq = - Ialpha * sinVal + Ibeta * cosVal */

+    *pIq = -Ialpha * sinVal + Ibeta * cosVal;

+

+  }

+

+  /**

+   * @brief  Park transform for Q31 version

+   * @param[in]       Ialpha input two-phase vector coordinate alpha

+   * @param[in]       Ibeta  input two-phase vector coordinate beta

+   * @param[out]      *pId   points to output rotor reference frame d

+   * @param[out]      *pIq   points to output rotor reference frame q

+   * @param[in]       sinVal sine value of rotation angle theta

+   * @param[in]       cosVal cosine value of rotation angle theta

+   * @return none.

+   *

+   * <b>Scaling and Overflow Behavior:</b>

+   * \par

+   * The function is implemented using an internal 32-bit accumulator.

+   * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format.

+   * There is saturation on the addition and subtraction, hence there is no risk of overflow.

+   */

+

+

+  __STATIC_INLINE void arm_park_q31(

+				    q31_t Ialpha,

+				    q31_t Ibeta,

+				    q31_t * pId,

+				    q31_t * pIq,

+				    q31_t sinVal,

+				    q31_t cosVal)

+  {

+    q31_t product1, product2;                    /* Temporary variables used to store intermediate results */

+    q31_t product3, product4;                    /* Temporary variables used to store intermediate results */

+

+    /* Intermediate product is calculated by (Ialpha * cosVal) */

+    product1 = (q31_t) (((q63_t) (Ialpha) * (cosVal)) >> 31);

+

+    /* Intermediate product is calculated by (Ibeta * sinVal) */

+    product2 = (q31_t) (((q63_t) (Ibeta) * (sinVal)) >> 31);

+

+

+    /* Intermediate product is calculated by (Ialpha * sinVal) */

+    product3 = (q31_t) (((q63_t) (Ialpha) * (sinVal)) >> 31);

+

+    /* Intermediate product is calculated by (Ibeta * cosVal) */

+    product4 = (q31_t) (((q63_t) (Ibeta) * (cosVal)) >> 31);

+

+    /* Calculate pId by adding the two intermediate products 1 and 2 */

+    *pId = __QADD(product1, product2);

+

+    /* Calculate pIq by subtracting the two intermediate products 3 from 4 */

+    *pIq = __QSUB(product4, product3);

+  }

+

+  /**

+   * @} end of park group

+   */

+

+  /**

+   * @brief  Converts the elements of the Q7 vector to floating-point vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[out]  *pDst is output pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @return none.

+   */

+  void arm_q7_to_float(

+		        q7_t * pSrc,

+		       float32_t * pDst,

+		       uint32_t blockSize);

+

+

+  /**

+   * @ingroup groupController

+   */

+

+  /**

+   * @defgroup inv_park Vector Inverse Park transform

+   * Inverse Park transform converts the input flux and torque components to two-coordinate vector.

+   *

+   * The function operates on a single sample of data and each call to the function returns the processed output.

+   * The library provides separate functions for Q31 and floating-point data types.

+   * \par Algorithm

+   * \image html parkInvFormula.gif

+   * where <code>pIalpha</code> and <code>pIbeta</code> are the stator vector components,

+   * <code>Id</code> and <code>Iq</code> are rotor vector components and <code>cosVal</code> and <code>sinVal</code> are the

+   * cosine and sine values of theta (rotor flux position).

+   * \par Fixed-Point Behavior

+   * Care must be taken when using the Q31 version of the Park transform.

+   * In particular, the overflow and saturation behavior of the accumulator used must be considered.

+   * Refer to the function specific documentation below for usage guidelines.

+   */

+

+  /**

+   * @addtogroup inv_park

+   * @{

+   */

+

+   /**

+   * @brief  Floating-point Inverse Park transform

+   * @param[in]       Id        input coordinate of rotor reference frame d

+   * @param[in]       Iq        input coordinate of rotor reference frame q

+   * @param[out]      *pIalpha  points to output two-phase orthogonal vector axis alpha

+   * @param[out]      *pIbeta   points to output two-phase orthogonal vector axis beta

+   * @param[in]       sinVal    sine value of rotation angle theta

+   * @param[in]       cosVal    cosine value of rotation angle theta

+   * @return none.

+   */

+

+  __STATIC_INLINE void arm_inv_park_f32(

+					float32_t Id,

+					float32_t Iq,

+					float32_t * pIalpha,

+					float32_t * pIbeta,

+					float32_t sinVal,

+					float32_t cosVal)

+  {

+    /* Calculate pIalpha using the equation, pIalpha = Id * cosVal - Iq * sinVal */

+    *pIalpha = Id * cosVal - Iq * sinVal;

+

+    /* Calculate pIbeta using the equation, pIbeta = Id * sinVal + Iq * cosVal */

+    *pIbeta = Id * sinVal + Iq * cosVal;

+

+  }

+

+

+  /**

+   * @brief  Inverse Park transform for	Q31 version

+   * @param[in]       Id        input coordinate of rotor reference frame d

+   * @param[in]       Iq        input coordinate of rotor reference frame q

+   * @param[out]      *pIalpha  points to output two-phase orthogonal vector axis alpha

+   * @param[out]      *pIbeta   points to output two-phase orthogonal vector axis beta

+   * @param[in]       sinVal    sine value of rotation angle theta

+   * @param[in]       cosVal    cosine value of rotation angle theta

+   * @return none.

+   *

+   * <b>Scaling and Overflow Behavior:</b>

+   * \par

+   * The function is implemented using an internal 32-bit accumulator.

+   * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format.

+   * There is saturation on the addition, hence there is no risk of overflow.

+   */

+

+

+  __STATIC_INLINE void arm_inv_park_q31(

+					q31_t Id,

+					q31_t Iq,

+					q31_t * pIalpha,

+					q31_t * pIbeta,

+					q31_t sinVal,

+					q31_t cosVal)

+  {

+    q31_t product1, product2;                    /* Temporary variables used to store intermediate results */

+    q31_t product3, product4;                    /* Temporary variables used to store intermediate results */

+

+    /* Intermediate product is calculated by (Id * cosVal) */

+    product1 = (q31_t) (((q63_t) (Id) * (cosVal)) >> 31);

+

+    /* Intermediate product is calculated by (Iq * sinVal) */

+    product2 = (q31_t) (((q63_t) (Iq) * (sinVal)) >> 31);

+

+

+    /* Intermediate product is calculated by (Id * sinVal) */

+    product3 = (q31_t) (((q63_t) (Id) * (sinVal)) >> 31);

+

+    /* Intermediate product is calculated by (Iq * cosVal) */

+    product4 = (q31_t) (((q63_t) (Iq) * (cosVal)) >> 31);

+

+    /* Calculate pIalpha by using the two intermediate products 1 and 2 */

+    *pIalpha = __QSUB(product1, product2);

+

+    /* Calculate pIbeta by using the two intermediate products 3 and 4 */

+    *pIbeta = __QADD(product4, product3);

+

+  }

+

+  /**

+   * @} end of Inverse park group

+   */

+

+

+  /**

+   * @brief  Converts the elements of the Q31 vector to floating-point vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[out]  *pDst is output pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @return none.

+   */

+  void arm_q31_to_float(

+			 q31_t * pSrc,

+			float32_t * pDst,

+			uint32_t blockSize);

+

+  /**

+   * @ingroup groupInterpolation

+   */

+

+  /**

+   * @defgroup LinearInterpolate Linear Interpolation

+   *

+   * Linear interpolation is a method of curve fitting using linear polynomials.

+   * Linear interpolation works by effectively drawing a straight line between two neighboring samples and returning the appropriate point along that line

+   *

+   * \par

+   * \image html LinearInterp.gif "Linear interpolation"

+   *

+   * \par

+   * A  Linear Interpolate function calculates an output value(y), for the input(x)

+   * using linear interpolation of the input values x0, x1( nearest input values) and the output values y0 and y1(nearest output values)

+   *

+   * \par Algorithm:

+   * <pre>

+   *       y = y0 + (x - x0) * ((y1 - y0)/(x1-x0))

+   *       where x0, x1 are nearest values of input x

+   *             y0, y1 are nearest values to output y

+   * </pre>

+   *

+   * \par

+   * This set of functions implements Linear interpolation process

+   * for Q7, Q15, Q31, and floating-point data types.  The functions operate on a single

+   * sample of data and each call to the function returns a single processed value.

+   * <code>S</code> points to an instance of the Linear Interpolate function data structure.

+   * <code>x</code> is the input sample value. The functions returns the output value.

+   *

+   * \par

+   * if x is outside of the table boundary, Linear interpolation returns first value of the table

+   * if x is below input range and returns last value of table if x is above range.

+   */

+

+  /**

+   * @addtogroup LinearInterpolate

+   * @{

+   */

+

+  /**

+   * @brief  Process function for the floating-point Linear Interpolation Function.

+   * @param[in,out] *S is an instance of the floating-point Linear Interpolation structure

+   * @param[in] x input sample to process

+   * @return y processed output sample.

+   *

+   */

+

+  __STATIC_INLINE float32_t arm_linear_interp_f32(

+						  arm_linear_interp_instance_f32 * S,

+						  float32_t x)

+  {

+

+	  float32_t y;

+	  float32_t x0, x1;						/* Nearest input values */

+	  float32_t y0, y1;	  					/* Nearest output values */

+	  float32_t xSpacing = S->xSpacing;		/* spacing between input values */

+	  int32_t i;  							/* Index variable */

+	  float32_t *pYData = S->pYData;	    /* pointer to output table */

+

+	  /* Calculation of index */

+	  i =   (x - S->x1) / xSpacing;

+

+	  if(i < 0)

+	  {

+	     /* Iniatilize output for below specified range as least output value of table */

+		 y = pYData[0];

+	  }

+	  else if(i >= S->nValues)

+	  {

+	  	  /* Iniatilize output for above specified range as last output value of table */

+	  	  y = pYData[S->nValues-1];

+	  }

+	  else

+	  {

+	  	  /* Calculation of nearest input values */

+		  x0 = S->x1 + i * xSpacing;

+		  x1 = S->x1 + (i +1) * xSpacing;

+

+		 /* Read of nearest output values */

+		  y0 = pYData[i];

+		  y1 = pYData[i + 1];

+

+		  /* Calculation of output */

+		  y = y0 + (x - x0) * ((y1 - y0)/(x1-x0));

+

+	  }

+

+      /* returns output value */

+	  return (y);

+  }

+

+   /**

+   *

+   * @brief  Process function for the Q31 Linear Interpolation Function.

+   * @param[in] *pYData  pointer to Q31 Linear Interpolation table

+   * @param[in] x input sample to process

+   * @param[in] nValues number of table values

+   * @return y processed output sample.

+   *

+   * \par

+   * Input sample <code>x</code> is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part.

+   * This function can support maximum of table size 2^12.

+   *

+   */

+

+

+  __STATIC_INLINE q31_t arm_linear_interp_q31(q31_t *pYData,

+					      q31_t x, uint32_t nValues)

+  {

+    q31_t y;                                   /* output */

+    q31_t y0, y1;                                /* Nearest output values */

+    q31_t fract;                                 /* fractional part */

+    int32_t index;                              /* Index to read nearest output values */

+

+    /* Input is in 12.20 format */

+    /* 12 bits for the table index */

+    /* Index value calculation */

+    index = ((x & 0xFFF00000) >> 20);

+

+	if(index >= (nValues - 1))

+	{

+		return(pYData[nValues - 1]);

+	}

+	else if(index < 0)

+	{

+		return(pYData[0]);

+	}

+	else

+	{

+

+	    /* 20 bits for the fractional part */

+	    /* shift left by 11 to keep fract in 1.31 format */

+	    fract = (x & 0x000FFFFF) << 11;

+

+	    /* Read two nearest output values from the index in 1.31(q31) format */

+	    y0 = pYData[index];

+	    y1 = pYData[index + 1u];

+

+	    /* Calculation of y0 * (1-fract) and y is in 2.30 format */

+	    y = ((q31_t) ((q63_t) y0 * (0x7FFFFFFF - fract) >> 32));

+

+	    /* Calculation of y0 * (1-fract) + y1 *fract and y is in 2.30 format */

+	    y += ((q31_t) (((q63_t) y1 * fract) >> 32));

+

+	    /* Convert y to 1.31 format */

+	    return (y << 1u);

+

+	}

+

+  }

+

+  /**

+   *

+   * @brief  Process function for the Q15 Linear Interpolation Function.

+   * @param[in] *pYData  pointer to Q15 Linear Interpolation table

+   * @param[in] x input sample to process

+   * @param[in] nValues number of table values

+   * @return y processed output sample.

+   *

+   * \par

+   * Input sample <code>x</code> is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part.

+   * This function can support maximum of table size 2^12.

+   *

+   */

+

+

+  __STATIC_INLINE q15_t arm_linear_interp_q15(q15_t *pYData, q31_t x, uint32_t nValues)

+  {

+    q63_t y;                                   /* output */

+    q15_t y0, y1;                              /* Nearest output values */

+    q31_t fract;                               /* fractional part */

+    int32_t index;                            /* Index to read nearest output values */

+

+    /* Input is in 12.20 format */

+    /* 12 bits for the table index */

+    /* Index value calculation */

+    index = ((x & 0xFFF00000) >> 20u);

+

+	if(index >= (nValues - 1))

+	{

+		return(pYData[nValues - 1]);

+	}

+	else if(index < 0)

+	{

+		return(pYData[0]);

+	}

+	else

+	{

+	    /* 20 bits for the fractional part */

+	    /* fract is in 12.20 format */

+	    fract = (x & 0x000FFFFF);

+

+	    /* Read two nearest output values from the index */

+	    y0 = pYData[index];

+	    y1 = pYData[index + 1u];

+

+	    /* Calculation of y0 * (1-fract) and y is in 13.35 format */

+	    y = ((q63_t) y0 * (0xFFFFF - fract));

+

+	    /* Calculation of (y0 * (1-fract) + y1 * fract) and y is in 13.35 format */

+	    y += ((q63_t) y1 * (fract));

+

+	    /* convert y to 1.15 format */

+	    return (y >> 20);

+	}

+

+

+  }

+

+  /**

+   *

+   * @brief  Process function for the Q7 Linear Interpolation Function.

+   * @param[in] *pYData  pointer to Q7 Linear Interpolation table

+   * @param[in] x input sample to process

+   * @param[in] nValues number of table values

+   * @return y processed output sample.

+   *

+   * \par

+   * Input sample <code>x</code> is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part.

+   * This function can support maximum of table size 2^12.

+   */

+

+

+  __STATIC_INLINE q7_t arm_linear_interp_q7(q7_t *pYData, q31_t x,  uint32_t nValues)

+  {

+    q31_t y;                                   /* output */

+    q7_t y0, y1;                                 /* Nearest output values */

+    q31_t fract;                                 /* fractional part */

+    int32_t index;                              /* Index to read nearest output values */

+

+    /* Input is in 12.20 format */

+    /* 12 bits for the table index */

+    /* Index value calculation */

+    index = ((x & 0xFFF00000) >> 20u);

+

+

+    if(index >= (nValues - 1))

+	{

+		return(pYData[nValues - 1]);

+	}

+	else if(index < 0)

+	{

+		return(pYData[0]);

+	}

+	else

+	{

+

+	    /* 20 bits for the fractional part */

+	    /* fract is in 12.20 format */

+	    fract = (x & 0x000FFFFF);

+

+	    /* Read two nearest output values from the index and are in 1.7(q7) format */

+	    y0 = pYData[index];

+	    y1 = pYData[index + 1u];

+

+	    /* Calculation of y0 * (1-fract ) and y is in 13.27(q27) format */

+	    y = ((y0 * (0xFFFFF - fract)));

+

+	    /* Calculation of y1 * fract + y0 * (1-fract) and y is in 13.27(q27) format */

+	    y += (y1 * fract);

+

+	    /* convert y to 1.7(q7) format */

+	    return (y >> 20u);

+

+	}

+

+  }

+  /**

+   * @} end of LinearInterpolate group

+   */

+

+  /**

+   * @brief  Fast approximation to the trigonometric sine function for floating-point data.

+   * @param[in] x input value in radians.

+   * @return  sin(x).

+   */

+

+  float32_t arm_sin_f32(

+			 float32_t x);

+

+  /**

+   * @brief  Fast approximation to the trigonometric sine function for Q31 data.

+   * @param[in] x Scaled input value in radians.

+   * @return  sin(x).

+   */

+

+  q31_t arm_sin_q31(

+		     q31_t x);

+

+  /**

+   * @brief  Fast approximation to the trigonometric sine function for Q15 data.

+   * @param[in] x Scaled input value in radians.

+   * @return  sin(x).

+   */

+

+  q15_t arm_sin_q15(

+		     q15_t x);

+

+  /**

+   * @brief  Fast approximation to the trigonometric cosine function for floating-point data.

+   * @param[in] x input value in radians.

+   * @return  cos(x).

+   */

+

+  float32_t arm_cos_f32(

+			 float32_t x);

+

+  /**

+   * @brief Fast approximation to the trigonometric cosine function for Q31 data.

+   * @param[in] x Scaled input value in radians.

+   * @return  cos(x).

+   */

+

+  q31_t arm_cos_q31(

+		     q31_t x);

+

+  /**

+   * @brief  Fast approximation to the trigonometric cosine function for Q15 data.

+   * @param[in] x Scaled input value in radians.

+   * @return  cos(x).

+   */

+

+  q15_t arm_cos_q15(

+		     q15_t x);

+

+

+  /**

+   * @ingroup groupFastMath

+   */

+

+

+  /**

+   * @defgroup SQRT Square Root

+   *

+   * Computes the square root of a number.

+   * There are separate functions for Q15, Q31, and floating-point data types.

+   * The square root function is computed using the Newton-Raphson algorithm.

+   * This is an iterative algorithm of the form:

+   * <pre>

+   *      x1 = x0 - f(x0)/f'(x0)

+   * </pre>

+   * where <code>x1</code> is the current estimate,

+   * <code>x0</code> is the previous estimate and

+   * <code>f'(x0)</code> is the derivative of <code>f()</code> evaluated at <code>x0</code>.

+   * For the square root function, the algorithm reduces to:

+   * <pre>

+   *     x0 = in/2                         [initial guess]

+   *     x1 = 1/2 * ( x0 + in / x0)        [each iteration]

+   * </pre>

+   */

+

+

+  /**

+   * @addtogroup SQRT

+   * @{

+   */

+

+  /**

+   * @brief  Floating-point square root function.

+   * @param[in]  in     input value.

+   * @param[out] *pOut  square root of input value.

+   * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if

+   * <code>in</code> is negative value and returns zero output for negative values.

+   */

+

+  __STATIC_INLINE arm_status  arm_sqrt_f32(

+                      float32_t in, float32_t *pOut)

+  {

+    if(in > 0)

+    {

+

+//    #if __FPU_USED

+    #if (__FPU_USED == 1) && defined ( __CC_ARM   )

+        *pOut = __sqrtf(in);

+    #elif (__FPU_USED == 1) && defined ( __TMS_740 )

+        *pOut = __builtin_sqrtf(in);

+    #else

+        *pOut = sqrtf(in);

+    #endif

+

+        return (ARM_MATH_SUCCESS);

+    }

+    else

+    {

+        *pOut = 0.0f;

+        return (ARM_MATH_ARGUMENT_ERROR);

+    }

+

+  }

+

+

+  /**

+   * @brief Q31 square root function.

+   * @param[in]   in    input value.  The range of the input value is [0 +1) or 0x00000000 to 0x7FFFFFFF.

+   * @param[out]  *pOut square root of input value.

+   * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if

+   * <code>in</code> is negative value and returns zero output for negative values.

+   */

+  arm_status arm_sqrt_q31(

+		      q31_t in, q31_t *pOut);

+

+  /**

+   * @brief  Q15 square root function.

+   * @param[in]   in     input value.  The range of the input value is [0 +1) or 0x0000 to 0x7FFF.

+   * @param[out]  *pOut  square root of input value.

+   * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if

+   * <code>in</code> is negative value and returns zero output for negative values.

+   */

+  arm_status arm_sqrt_q15(

+		      q15_t in, q15_t *pOut);

+

+  /**

+   * @} end of SQRT group

+   */

+

+

+

+

+

+

+  /**

+   * @brief floating-point Circular write function.

+   */

+

+  __STATIC_INLINE void arm_circularWrite_f32(

+					     int32_t * circBuffer,

+					     int32_t L,

+					     uint16_t * writeOffset,

+					     int32_t bufferInc,

+					     const int32_t * src,

+					     int32_t srcInc,

+					     uint32_t blockSize)

+  {

+    uint32_t i = 0u;

+    int32_t wOffset;

+

+    /* Copy the value of Index pointer that points

+     * to the current location where the input samples to be copied */

+    wOffset = *writeOffset;

+

+    /* Loop over the blockSize */

+    i = blockSize;

+

+    while(i > 0u)

+      {

+	/* copy the input sample to the circular buffer */

+	circBuffer[wOffset] = *src;

+

+	/* Update the input pointer */

+	src += srcInc;

+

+	/* Circularly update wOffset.  Watch out for positive and negative value */

+	wOffset += bufferInc;

+	if(wOffset >= L)

+	  wOffset -= L;

+

+	/* Decrement the loop counter */

+	i--;

+      }

+

+    /* Update the index pointer */

+    *writeOffset = wOffset;

+  }

+

+

+

+  /**

+   * @brief floating-point Circular Read function.

+   */

+  __STATIC_INLINE void arm_circularRead_f32(

+					    int32_t * circBuffer,

+					    int32_t L,

+					    int32_t * readOffset,

+					    int32_t bufferInc,

+					    int32_t * dst,

+					    int32_t * dst_base,

+					    int32_t dst_length,

+					    int32_t dstInc,

+					    uint32_t blockSize)

+  {

+    uint32_t i = 0u;

+    int32_t rOffset, dst_end;

+

+    /* Copy the value of Index pointer that points

+     * to the current location from where the input samples to be read */

+    rOffset = *readOffset;

+    dst_end = (int32_t) (dst_base + dst_length);

+

+    /* Loop over the blockSize */

+    i = blockSize;

+

+    while(i > 0u)

+      {

+	/* copy the sample from the circular buffer to the destination buffer */

+	*dst = circBuffer[rOffset];

+

+	/* Update the input pointer */

+	dst += dstInc;

+

+	if(dst == (int32_t *) dst_end)

+	  {

+	    dst = dst_base;

+	  }

+

+	/* Circularly update rOffset.  Watch out for positive and negative value  */

+	rOffset += bufferInc;

+

+	if(rOffset >= L)

+	  {

+	    rOffset -= L;

+	  }

+

+	/* Decrement the loop counter */

+	i--;

+      }

+

+    /* Update the index pointer */

+    *readOffset = rOffset;

+  }

+

+  /**

+   * @brief Q15 Circular write function.

+   */

+

+  __STATIC_INLINE void arm_circularWrite_q15(

+					     q15_t * circBuffer,

+					     int32_t L,

+					     uint16_t * writeOffset,

+					     int32_t bufferInc,

+					     const q15_t * src,

+					     int32_t srcInc,

+					     uint32_t blockSize)

+  {

+    uint32_t i = 0u;

+    int32_t wOffset;

+

+    /* Copy the value of Index pointer that points

+     * to the current location where the input samples to be copied */

+    wOffset = *writeOffset;

+

+    /* Loop over the blockSize */

+    i = blockSize;

+

+    while(i > 0u)

+      {

+	/* copy the input sample to the circular buffer */

+	circBuffer[wOffset] = *src;

+

+	/* Update the input pointer */

+	src += srcInc;

+

+	/* Circularly update wOffset.  Watch out for positive and negative value */

+	wOffset += bufferInc;

+	if(wOffset >= L)

+	  wOffset -= L;

+

+	/* Decrement the loop counter */

+	i--;

+      }

+

+    /* Update the index pointer */

+    *writeOffset = wOffset;

+  }

+

+

+

+  /**

+   * @brief Q15 Circular Read function.

+   */

+  __STATIC_INLINE void arm_circularRead_q15(

+					    q15_t * circBuffer,

+					    int32_t L,

+					    int32_t * readOffset,

+					    int32_t bufferInc,

+					    q15_t * dst,

+					    q15_t * dst_base,

+					    int32_t dst_length,

+					    int32_t dstInc,

+					    uint32_t blockSize)

+  {

+    uint32_t i = 0;

+    int32_t rOffset, dst_end;

+

+    /* Copy the value of Index pointer that points

+     * to the current location from where the input samples to be read */

+    rOffset = *readOffset;

+

+    dst_end = (int32_t) (dst_base + dst_length);

+

+    /* Loop over the blockSize */

+    i = blockSize;

+

+    while(i > 0u)

+      {

+	/* copy the sample from the circular buffer to the destination buffer */

+	*dst = circBuffer[rOffset];

+

+	/* Update the input pointer */

+	dst += dstInc;

+

+	if(dst == (q15_t *) dst_end)

+	  {

+	    dst = dst_base;

+	  }

+

+	/* Circularly update wOffset.  Watch out for positive and negative value */

+	rOffset += bufferInc;

+

+	if(rOffset >= L)

+	  {

+	    rOffset -= L;

+	  }

+

+	/* Decrement the loop counter */

+	i--;

+      }

+

+    /* Update the index pointer */

+    *readOffset = rOffset;

+  }

+

+

+  /**

+   * @brief Q7 Circular write function.

+   */

+

+  __STATIC_INLINE void arm_circularWrite_q7(

+					    q7_t * circBuffer,

+					    int32_t L,

+					    uint16_t * writeOffset,

+					    int32_t bufferInc,

+					    const q7_t * src,

+					    int32_t srcInc,

+					    uint32_t blockSize)

+  {

+    uint32_t i = 0u;

+    int32_t wOffset;

+

+    /* Copy the value of Index pointer that points

+     * to the current location where the input samples to be copied */

+    wOffset = *writeOffset;

+

+    /* Loop over the blockSize */

+    i = blockSize;

+

+    while(i > 0u)

+      {

+	/* copy the input sample to the circular buffer */

+	circBuffer[wOffset] = *src;

+

+	/* Update the input pointer */

+	src += srcInc;

+

+	/* Circularly update wOffset.  Watch out for positive and negative value */

+	wOffset += bufferInc;

+	if(wOffset >= L)

+	  wOffset -= L;

+

+	/* Decrement the loop counter */

+	i--;

+      }

+

+    /* Update the index pointer */

+    *writeOffset = wOffset;

+  }

+

+

+

+  /**

+   * @brief Q7 Circular Read function.

+   */

+  __STATIC_INLINE void arm_circularRead_q7(

+					   q7_t * circBuffer,

+					   int32_t L,

+					   int32_t * readOffset,

+					   int32_t bufferInc,

+					   q7_t * dst,

+					   q7_t * dst_base,

+					   int32_t dst_length,

+					   int32_t dstInc,

+					   uint32_t blockSize)

+  {

+    uint32_t i = 0;

+    int32_t rOffset, dst_end;

+

+    /* Copy the value of Index pointer that points

+     * to the current location from where the input samples to be read */

+    rOffset = *readOffset;

+

+    dst_end = (int32_t) (dst_base + dst_length);

+

+    /* Loop over the blockSize */

+    i = blockSize;

+

+    while(i > 0u)

+      {

+	/* copy the sample from the circular buffer to the destination buffer */

+	*dst = circBuffer[rOffset];

+

+	/* Update the input pointer */

+	dst += dstInc;

+

+	if(dst == (q7_t *) dst_end)

+	  {

+	    dst = dst_base;

+	  }

+

+	/* Circularly update rOffset.  Watch out for positive and negative value */

+	rOffset += bufferInc;

+

+	if(rOffset >= L)

+	  {

+	    rOffset -= L;

+	  }

+

+	/* Decrement the loop counter */

+	i--;

+      }

+

+    /* Update the index pointer */

+    *readOffset = rOffset;

+  }

+

+

+  /**

+   * @brief  Sum of the squares of the elements of a Q31 vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @param[out]  *pResult is output value.

+   * @return none.

+   */

+

+  void arm_power_q31(

+		      q31_t * pSrc,

+		     uint32_t blockSize,

+		     q63_t * pResult);

+

+  /**

+   * @brief  Sum of the squares of the elements of a floating-point vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @param[out]  *pResult is output value.

+   * @return none.

+   */

+

+  void arm_power_f32(

+		      float32_t * pSrc,

+		     uint32_t blockSize,

+		     float32_t * pResult);

+

+  /**

+   * @brief  Sum of the squares of the elements of a Q15 vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @param[out]  *pResult is output value.

+   * @return none.

+   */

+

+  void arm_power_q15(

+		      q15_t * pSrc,

+		     uint32_t blockSize,

+		     q63_t * pResult);

+

+  /**

+   * @brief  Sum of the squares of the elements of a Q7 vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @param[out]  *pResult is output value.

+   * @return none.

+   */

+

+  void arm_power_q7(

+		     q7_t * pSrc,

+		    uint32_t blockSize,

+		    q31_t * pResult);

+

+  /**

+   * @brief  Mean value of a Q7 vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @param[out]  *pResult is output value.

+   * @return none.

+   */

+

+  void arm_mean_q7(

+		    q7_t * pSrc,

+		   uint32_t blockSize,

+		   q7_t * pResult);

+

+  /**

+   * @brief  Mean value of a Q15 vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @param[out]  *pResult is output value.

+   * @return none.

+   */

+  void arm_mean_q15(

+		     q15_t * pSrc,

+		    uint32_t blockSize,

+		    q15_t * pResult);

+

+  /**

+   * @brief  Mean value of a Q31 vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @param[out]  *pResult is output value.

+   * @return none.

+   */

+  void arm_mean_q31(

+		     q31_t * pSrc,

+		    uint32_t blockSize,

+		    q31_t * pResult);

+

+  /**

+   * @brief  Mean value of a floating-point vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @param[out]  *pResult is output value.

+   * @return none.

+   */

+  void arm_mean_f32(

+		     float32_t * pSrc,

+		    uint32_t blockSize,

+		    float32_t * pResult);

+

+  /**

+   * @brief  Variance of the elements of a floating-point vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @param[out]  *pResult is output value.

+   * @return none.

+   */

+

+  void arm_var_f32(

+		    float32_t * pSrc,

+		   uint32_t blockSize,

+		   float32_t * pResult);

+

+  /**

+   * @brief  Variance of the elements of a Q31 vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @param[out]  *pResult is output value.

+   * @return none.

+   */

+

+  void arm_var_q31(

+		    q31_t * pSrc,

+		   uint32_t blockSize,

+		   q63_t * pResult);

+

+  /**

+   * @brief  Variance of the elements of a Q15 vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @param[out]  *pResult is output value.

+   * @return none.

+   */

+

+  void arm_var_q15(

+		    q15_t * pSrc,

+		   uint32_t blockSize,

+		   q31_t * pResult);

+

+  /**

+   * @brief  Root Mean Square of the elements of a floating-point vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @param[out]  *pResult is output value.

+   * @return none.

+   */

+

+  void arm_rms_f32(

+		    float32_t * pSrc,

+		   uint32_t blockSize,

+		   float32_t * pResult);

+

+  /**

+   * @brief  Root Mean Square of the elements of a Q31 vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @param[out]  *pResult is output value.

+   * @return none.

+   */

+

+  void arm_rms_q31(

+		    q31_t * pSrc,

+		   uint32_t blockSize,

+		   q31_t * pResult);

+

+  /**

+   * @brief  Root Mean Square of the elements of a Q15 vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @param[out]  *pResult is output value.

+   * @return none.

+   */

+

+  void arm_rms_q15(

+		    q15_t * pSrc,

+		   uint32_t blockSize,

+		   q15_t * pResult);

+

+  /**

+   * @brief  Standard deviation of the elements of a floating-point vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @param[out]  *pResult is output value.

+   * @return none.

+   */

+

+  void arm_std_f32(

+		    float32_t * pSrc,

+		   uint32_t blockSize,

+		   float32_t * pResult);

+

+  /**

+   * @brief  Standard deviation of the elements of a Q31 vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @param[out]  *pResult is output value.

+   * @return none.

+   */

+

+  void arm_std_q31(

+		    q31_t * pSrc,

+		   uint32_t blockSize,

+		   q31_t * pResult);

+

+  /**

+   * @brief  Standard deviation of the elements of a Q15 vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @param[out]  *pResult is output value.

+   * @return none.

+   */

+

+  void arm_std_q15(

+		    q15_t * pSrc,

+		   uint32_t blockSize,

+		   q15_t * pResult);

+

+  /**

+   * @brief  Floating-point complex magnitude

+   * @param[in]  *pSrc points to the complex input vector

+   * @param[out]  *pDst points to the real output vector

+   * @param[in]  numSamples number of complex samples in the input vector

+   * @return none.

+   */

+

+  void arm_cmplx_mag_f32(

+			  float32_t * pSrc,

+			 float32_t * pDst,

+			 uint32_t numSamples);

+

+  /**

+   * @brief  Q31 complex magnitude

+   * @param[in]  *pSrc points to the complex input vector

+   * @param[out]  *pDst points to the real output vector

+   * @param[in]  numSamples number of complex samples in the input vector

+   * @return none.

+   */

+

+  void arm_cmplx_mag_q31(

+			  q31_t * pSrc,

+			 q31_t * pDst,

+			 uint32_t numSamples);

+

+  /**

+   * @brief  Q15 complex magnitude

+   * @param[in]  *pSrc points to the complex input vector

+   * @param[out]  *pDst points to the real output vector

+   * @param[in]  numSamples number of complex samples in the input vector

+   * @return none.

+   */

+

+  void arm_cmplx_mag_q15(

+			  q15_t * pSrc,

+			 q15_t * pDst,

+			 uint32_t numSamples);

+

+  /**

+   * @brief  Q15 complex dot product

+   * @param[in]  *pSrcA points to the first input vector

+   * @param[in]  *pSrcB points to the second input vector

+   * @param[in]  numSamples number of complex samples in each vector

+   * @param[out]  *realResult real part of the result returned here

+   * @param[out]  *imagResult imaginary part of the result returned here

+   * @return none.

+   */

+

+  void arm_cmplx_dot_prod_q15(

+			       q15_t * pSrcA,

+			       q15_t * pSrcB,

+			      uint32_t numSamples,

+			      q31_t * realResult,

+			      q31_t * imagResult);

+

+  /**

+   * @brief  Q31 complex dot product

+   * @param[in]  *pSrcA points to the first input vector

+   * @param[in]  *pSrcB points to the second input vector

+   * @param[in]  numSamples number of complex samples in each vector

+   * @param[out]  *realResult real part of the result returned here

+   * @param[out]  *imagResult imaginary part of the result returned here

+   * @return none.

+   */

+

+  void arm_cmplx_dot_prod_q31(

+			       q31_t * pSrcA,

+			       q31_t * pSrcB,

+			      uint32_t numSamples,

+			      q63_t * realResult,

+			      q63_t * imagResult);

+

+  /**

+   * @brief  Floating-point complex dot product

+   * @param[in]  *pSrcA points to the first input vector

+   * @param[in]  *pSrcB points to the second input vector

+   * @param[in]  numSamples number of complex samples in each vector

+   * @param[out]  *realResult real part of the result returned here

+   * @param[out]  *imagResult imaginary part of the result returned here

+   * @return none.

+   */

+

+  void arm_cmplx_dot_prod_f32(

+			       float32_t * pSrcA,

+			       float32_t * pSrcB,

+			      uint32_t numSamples,

+			      float32_t * realResult,

+			      float32_t * imagResult);

+

+  /**

+   * @brief  Q15 complex-by-real multiplication

+   * @param[in]  *pSrcCmplx points to the complex input vector

+   * @param[in]  *pSrcReal points to the real input vector

+   * @param[out]  *pCmplxDst points to the complex output vector

+   * @param[in]  numSamples number of samples in each vector

+   * @return none.

+   */

+

+  void arm_cmplx_mult_real_q15(

+			        q15_t * pSrcCmplx,

+			        q15_t * pSrcReal,

+			       q15_t * pCmplxDst,

+			       uint32_t numSamples);

+

+  /**

+   * @brief  Q31 complex-by-real multiplication

+   * @param[in]  *pSrcCmplx points to the complex input vector

+   * @param[in]  *pSrcReal points to the real input vector

+   * @param[out]  *pCmplxDst points to the complex output vector

+   * @param[in]  numSamples number of samples in each vector

+   * @return none.

+   */

+

+  void arm_cmplx_mult_real_q31(

+			        q31_t * pSrcCmplx,

+			        q31_t * pSrcReal,

+			       q31_t * pCmplxDst,

+			       uint32_t numSamples);

+

+  /**

+   * @brief  Floating-point complex-by-real multiplication

+   * @param[in]  *pSrcCmplx points to the complex input vector

+   * @param[in]  *pSrcReal points to the real input vector

+   * @param[out]  *pCmplxDst points to the complex output vector

+   * @param[in]  numSamples number of samples in each vector

+   * @return none.

+   */

+

+  void arm_cmplx_mult_real_f32(

+			        float32_t * pSrcCmplx,

+			        float32_t * pSrcReal,

+			       float32_t * pCmplxDst,

+			       uint32_t numSamples);

+

+  /**

+   * @brief  Minimum value of a Q7 vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @param[out]  *result is output pointer

+   * @param[in]  index is the array index of the minimum value in the input buffer.

+   * @return none.

+   */

+

+  void arm_min_q7(

+		   q7_t * pSrc,

+		  uint32_t blockSize,

+		  q7_t * result,

+		  uint32_t * index);

+

+  /**

+   * @brief  Minimum value of a Q15 vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @param[out]  *pResult is output pointer

+   * @param[in]  *pIndex is the array index of the minimum value in the input buffer.

+   * @return none.

+   */

+

+  void arm_min_q15(

+		    q15_t * pSrc,

+		   uint32_t blockSize,

+		   q15_t * pResult,

+		   uint32_t * pIndex);

+

+  /**

+   * @brief  Minimum value of a Q31 vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @param[out]  *pResult is output pointer

+   * @param[out]  *pIndex is the array index of the minimum value in the input buffer.

+   * @return none.

+   */

+  void arm_min_q31(

+		    q31_t * pSrc,

+		   uint32_t blockSize,

+		   q31_t * pResult,

+		   uint32_t * pIndex);

+

+  /**

+   * @brief  Minimum value of a floating-point vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @param[out]  *pResult is output pointer

+   * @param[out]  *pIndex is the array index of the minimum value in the input buffer.

+   * @return none.

+   */

+

+  void arm_min_f32(

+		    float32_t * pSrc,

+		   uint32_t blockSize,

+		   float32_t * pResult,

+		   uint32_t * pIndex);

+

+/**

+ * @brief Maximum value of a Q7 vector.

+ * @param[in]       *pSrc points to the input buffer

+ * @param[in]       blockSize length of the input vector

+ * @param[out]      *pResult maximum value returned here

+ * @param[out]      *pIndex index of maximum value returned here

+ * @return none.

+ */

+

+  void arm_max_q7(

+		   q7_t * pSrc,

+		  uint32_t blockSize,

+		  q7_t * pResult,

+		  uint32_t * pIndex);

+

+/**

+ * @brief Maximum value of a Q15 vector.

+ * @param[in]       *pSrc points to the input buffer

+ * @param[in]       blockSize length of the input vector

+ * @param[out]      *pResult maximum value returned here

+ * @param[out]      *pIndex index of maximum value returned here

+ * @return none.

+ */

+

+  void arm_max_q15(

+		    q15_t * pSrc,

+		   uint32_t blockSize,

+		   q15_t * pResult,

+		   uint32_t * pIndex);

+

+/**

+ * @brief Maximum value of a Q31 vector.

+ * @param[in]       *pSrc points to the input buffer

+ * @param[in]       blockSize length of the input vector

+ * @param[out]      *pResult maximum value returned here

+ * @param[out]      *pIndex index of maximum value returned here

+ * @return none.

+ */

+

+  void arm_max_q31(

+		    q31_t * pSrc,

+		   uint32_t blockSize,

+		   q31_t * pResult,

+		   uint32_t * pIndex);

+

+/**

+ * @brief Maximum value of a floating-point vector.

+ * @param[in]       *pSrc points to the input buffer

+ * @param[in]       blockSize length of the input vector

+ * @param[out]      *pResult maximum value returned here

+ * @param[out]      *pIndex index of maximum value returned here

+ * @return none.

+ */

+

+  void arm_max_f32(

+		    float32_t * pSrc,

+		   uint32_t blockSize,

+		   float32_t * pResult,

+		   uint32_t * pIndex);

+

+  /**

+   * @brief  Q15 complex-by-complex multiplication

+   * @param[in]  *pSrcA points to the first input vector

+   * @param[in]  *pSrcB points to the second input vector

+   * @param[out]  *pDst  points to the output vector

+   * @param[in]  numSamples number of complex samples in each vector

+   * @return none.

+   */

+

+  void arm_cmplx_mult_cmplx_q15(

+			        q15_t * pSrcA,

+			        q15_t * pSrcB,

+			       q15_t * pDst,

+			       uint32_t numSamples);

+

+  /**

+   * @brief  Q31 complex-by-complex multiplication

+   * @param[in]  *pSrcA points to the first input vector

+   * @param[in]  *pSrcB points to the second input vector

+   * @param[out]  *pDst  points to the output vector

+   * @param[in]  numSamples number of complex samples in each vector

+   * @return none.

+   */

+

+  void arm_cmplx_mult_cmplx_q31(

+			        q31_t * pSrcA,

+			        q31_t * pSrcB,

+			       q31_t * pDst,

+			       uint32_t numSamples);

+

+  /**

+   * @brief  Floating-point complex-by-complex multiplication

+   * @param[in]  *pSrcA points to the first input vector

+   * @param[in]  *pSrcB points to the second input vector

+   * @param[out]  *pDst  points to the output vector

+   * @param[in]  numSamples number of complex samples in each vector

+   * @return none.

+   */

+

+  void arm_cmplx_mult_cmplx_f32(

+			        float32_t * pSrcA,

+			        float32_t * pSrcB,

+			       float32_t * pDst,

+			       uint32_t numSamples);

+

+  /**

+   * @brief Converts the elements of the floating-point vector to Q31 vector.

+   * @param[in]       *pSrc points to the floating-point input vector

+   * @param[out]      *pDst points to the Q31 output vector

+   * @param[in]       blockSize length of the input vector

+   * @return none.

+   */

+  void arm_float_to_q31(

+			       float32_t * pSrc,

+			      q31_t * pDst,

+			      uint32_t blockSize);

+

+  /**

+   * @brief Converts the elements of the floating-point vector to Q15 vector.

+   * @param[in]       *pSrc points to the floating-point input vector

+   * @param[out]      *pDst points to the Q15 output vector

+   * @param[in]       blockSize length of the input vector

+   * @return          none

+   */

+  void arm_float_to_q15(

+			       float32_t * pSrc,

+			      q15_t * pDst,

+			      uint32_t blockSize);

+

+  /**

+   * @brief Converts the elements of the floating-point vector to Q7 vector.

+   * @param[in]       *pSrc points to the floating-point input vector

+   * @param[out]      *pDst points to the Q7 output vector

+   * @param[in]       blockSize length of the input vector

+   * @return          none

+   */

+  void arm_float_to_q7(

+			      float32_t * pSrc,

+			     q7_t * pDst,

+			     uint32_t blockSize);

+

+

+  /**

+   * @brief  Converts the elements of the Q31 vector to Q15 vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[out]  *pDst is output pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @return none.

+   */

+  void arm_q31_to_q15(

+		       q31_t * pSrc,

+		      q15_t * pDst,

+		      uint32_t blockSize);

+

+  /**

+   * @brief  Converts the elements of the Q31 vector to Q7 vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[out]  *pDst is output pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @return none.

+   */

+  void arm_q31_to_q7(

+		      q31_t * pSrc,

+		     q7_t * pDst,

+		     uint32_t blockSize);

+

+  /**

+   * @brief  Converts the elements of the Q15 vector to floating-point vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[out]  *pDst is output pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @return none.

+   */

+  void arm_q15_to_float(

+			 q15_t * pSrc,

+			float32_t * pDst,

+			uint32_t blockSize);

+

+

+  /**

+   * @brief  Converts the elements of the Q15 vector to Q31 vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[out]  *pDst is output pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @return none.

+   */

+  void arm_q15_to_q31(

+		       q15_t * pSrc,

+		      q31_t * pDst,

+		      uint32_t blockSize);

+

+

+  /**

+   * @brief  Converts the elements of the Q15 vector to Q7 vector.

+   * @param[in]  *pSrc is input pointer

+   * @param[out]  *pDst is output pointer

+   * @param[in]  blockSize is the number of samples to process

+   * @return none.

+   */

+  void arm_q15_to_q7(

+		      q15_t * pSrc,

+		     q7_t * pDst,

+		     uint32_t blockSize);

+

+

+  /**

+   * @ingroup groupInterpolation

+   */

+

+  /**

+   * @defgroup BilinearInterpolate Bilinear Interpolation

+   *

+   * Bilinear interpolation is an extension of linear interpolation applied to a two dimensional grid.

+   * The underlying function <code>f(x, y)</code> is sampled on a regular grid and the interpolation process

+   * determines values between the grid points.

+   * Bilinear interpolation is equivalent to two step linear interpolation, first in the x-dimension and then in the y-dimension.

+   * Bilinear interpolation is often used in image processing to rescale images.

+   * The CMSIS DSP library provides bilinear interpolation functions for Q7, Q15, Q31, and floating-point data types.

+   *

+   * <b>Algorithm</b>

+   * \par

+   * The instance structure used by the bilinear interpolation functions describes a two dimensional data table.

+   * For floating-point, the instance structure is defined as:

+   * <pre>

+   *   typedef struct

+   *   {

+   *     uint16_t numRows;

+   *     uint16_t numCols;

+   *     float32_t *pData;

+   * } arm_bilinear_interp_instance_f32;

+   * </pre>

+   *

+   * \par

+   * where <code>numRows</code> specifies the number of rows in the table;

+   * <code>numCols</code> specifies the number of columns in the table;

+   * and <code>pData</code> points to an array of size <code>numRows*numCols</code> values.

+   * The data table <code>pTable</code> is organized in row order and the supplied data values fall on integer indexes.

+   * That is, table element (x,y) is located at <code>pTable[x + y*numCols]</code> where x and y are integers.

+   *

+   * \par

+   * Let <code>(x, y)</code> specify the desired interpolation point.  Then define:

+   * <pre>

+   *     XF = floor(x)

+   *     YF = floor(y)

+   * </pre>

+   * \par

+   * The interpolated output point is computed as:

+   * <pre>

+   *  f(x, y) = f(XF, YF) * (1-(x-XF)) * (1-(y-YF))

+   *           + f(XF+1, YF) * (x-XF)*(1-(y-YF))

+   *           + f(XF, YF+1) * (1-(x-XF))*(y-YF)

+   *           + f(XF+1, YF+1) * (x-XF)*(y-YF)

+   * </pre>

+   * Note that the coordinates (x, y) contain integer and fractional components.

+   * The integer components specify which portion of the table to use while the

+   * fractional components control the interpolation processor.

+   *

+   * \par

+   * if (x,y) are outside of the table boundary, Bilinear interpolation returns zero output.

+   */

+

+  /**

+   * @addtogroup BilinearInterpolate

+   * @{

+   */

+

+  /**

+  *

+  * @brief  Floating-point bilinear interpolation.

+  * @param[in,out] *S points to an instance of the interpolation structure.

+  * @param[in] X interpolation coordinate.

+  * @param[in] Y interpolation coordinate.

+  * @return out interpolated value.

+  */

+

+

+  __STATIC_INLINE float32_t arm_bilinear_interp_f32(

+						    const arm_bilinear_interp_instance_f32 * S,

+						    float32_t X,

+						    float32_t Y)

+  {

+    float32_t out;

+    float32_t f00, f01, f10, f11;

+    float32_t *pData = S->pData;

+    int32_t xIndex, yIndex, index;

+    float32_t xdiff, ydiff;

+    float32_t b1, b2, b3, b4;

+

+    xIndex = (int32_t) X;

+    yIndex = (int32_t) Y;

+

+	/* Care taken for table outside boundary */

+	/* Returns zero output when values are outside table boundary */

+	if(xIndex < 0 || xIndex > (S->numRows-1) || yIndex < 0  || yIndex > ( S->numCols-1))

+	{

+		return(0);

+	}

+

+    /* Calculation of index for two nearest points in X-direction */

+    index = (xIndex - 1) + (yIndex-1) *  S->numCols ;

+

+

+    /* Read two nearest points in X-direction */

+    f00 = pData[index];

+    f01 = pData[index + 1];

+

+    /* Calculation of index for two nearest points in Y-direction */

+    index = (xIndex-1) + (yIndex) * S->numCols;

+

+

+    /* Read two nearest points in Y-direction */

+    f10 = pData[index];

+    f11 = pData[index + 1];

+

+    /* Calculation of intermediate values */

+    b1 = f00;

+    b2 = f01 - f00;

+    b3 = f10 - f00;

+    b4 = f00 - f01 - f10 + f11;

+

+    /* Calculation of fractional part in X */

+    xdiff = X - xIndex;

+

+    /* Calculation of fractional part in Y */

+    ydiff = Y - yIndex;

+

+    /* Calculation of bi-linear interpolated output */

+     out = b1 + b2 * xdiff + b3 * ydiff + b4 * xdiff * ydiff;

+

+   /* return to application */

+    return (out);

+

+  }

+

+  /**

+  *

+  * @brief  Q31 bilinear interpolation.

+  * @param[in,out] *S points to an instance of the interpolation structure.

+  * @param[in] X interpolation coordinate in 12.20 format.

+  * @param[in] Y interpolation coordinate in 12.20 format.

+  * @return out interpolated value.

+  */

+

+  __STATIC_INLINE q31_t arm_bilinear_interp_q31(

+						arm_bilinear_interp_instance_q31 * S,

+						q31_t X,

+						q31_t Y)

+  {

+    q31_t out;                                   /* Temporary output */

+    q31_t acc = 0;                               /* output */

+    q31_t xfract, yfract;                        /* X, Y fractional parts */

+    q31_t x1, x2, y1, y2;                        /* Nearest output values */

+    int32_t rI, cI;                             /* Row and column indices */

+    q31_t *pYData = S->pData;                    /* pointer to output table values */

+    uint32_t nCols = S->numCols;                 /* num of rows */

+

+

+    /* Input is in 12.20 format */

+    /* 12 bits for the table index */

+    /* Index value calculation */

+    rI = ((X & 0xFFF00000) >> 20u);

+

+    /* Input is in 12.20 format */

+    /* 12 bits for the table index */

+    /* Index value calculation */

+    cI = ((Y & 0xFFF00000) >> 20u);

+

+	/* Care taken for table outside boundary */

+	/* Returns zero output when values are outside table boundary */

+	if(rI < 0 || rI > (S->numRows-1) || cI < 0  || cI > ( S->numCols-1))

+	{

+		return(0);

+	}

+

+    /* 20 bits for the fractional part */

+    /* shift left xfract by 11 to keep 1.31 format */

+    xfract = (X & 0x000FFFFF) << 11u;

+

+    /* Read two nearest output values from the index */

+    x1 = pYData[(rI) + nCols * (cI)];

+    x2 = pYData[(rI) + nCols * (cI) + 1u];

+

+    /* 20 bits for the fractional part */

+    /* shift left yfract by 11 to keep 1.31 format */

+    yfract = (Y & 0x000FFFFF) << 11u;

+

+    /* Read two nearest output values from the index */

+    y1 = pYData[(rI) + nCols * (cI + 1)];

+    y2 = pYData[(rI) + nCols * (cI + 1) + 1u];

+

+    /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 3.29(q29) format */

+    out = ((q31_t) (((q63_t) x1 * (0x7FFFFFFF - xfract)) >> 32));

+    acc = ((q31_t) (((q63_t) out * (0x7FFFFFFF - yfract)) >> 32));

+

+    /* x2 * (xfract) * (1-yfract)  in 3.29(q29) and adding to acc */

+    out = ((q31_t) ((q63_t) x2 * (0x7FFFFFFF - yfract) >> 32));

+    acc += ((q31_t) ((q63_t) out * (xfract) >> 32));

+

+    /* y1 * (1 - xfract) * (yfract)  in 3.29(q29) and adding to acc */

+    out = ((q31_t) ((q63_t) y1 * (0x7FFFFFFF - xfract) >> 32));

+    acc += ((q31_t) ((q63_t) out * (yfract) >> 32));

+

+    /* y2 * (xfract) * (yfract)  in 3.29(q29) and adding to acc */

+    out = ((q31_t) ((q63_t) y2 * (xfract) >> 32));

+    acc += ((q31_t) ((q63_t) out * (yfract) >> 32));

+

+    /* Convert acc to 1.31(q31) format */

+    return (acc << 2u);

+

+  }

+

+  /**

+  * @brief  Q15 bilinear interpolation.

+  * @param[in,out] *S points to an instance of the interpolation structure.

+  * @param[in] X interpolation coordinate in 12.20 format.

+  * @param[in] Y interpolation coordinate in 12.20 format.

+  * @return out interpolated value.

+  */

+

+  __STATIC_INLINE q15_t arm_bilinear_interp_q15(

+						arm_bilinear_interp_instance_q15 * S,

+						q31_t X,

+						q31_t Y)

+  {

+    q63_t acc = 0;                               /* output */

+    q31_t out;                                   /* Temporary output */

+    q15_t x1, x2, y1, y2;                        /* Nearest output values */

+    q31_t xfract, yfract;                        /* X, Y fractional parts */

+    int32_t rI, cI;                             /* Row and column indices */

+    q15_t *pYData = S->pData;                    /* pointer to output table values */

+    uint32_t nCols = S->numCols;                 /* num of rows */

+

+    /* Input is in 12.20 format */

+    /* 12 bits for the table index */

+    /* Index value calculation */

+    rI = ((X & 0xFFF00000) >> 20);

+

+    /* Input is in 12.20 format */

+    /* 12 bits for the table index */

+    /* Index value calculation */

+    cI = ((Y & 0xFFF00000) >> 20);

+

+	/* Care taken for table outside boundary */

+	/* Returns zero output when values are outside table boundary */

+	if(rI < 0 || rI > (S->numRows-1) || cI < 0  || cI > ( S->numCols-1))

+	{

+		return(0);

+	}

+

+    /* 20 bits for the fractional part */

+    /* xfract should be in 12.20 format */

+    xfract = (X & 0x000FFFFF);

+

+    /* Read two nearest output values from the index */

+    x1 = pYData[(rI) + nCols * (cI)];

+    x2 = pYData[(rI) + nCols * (cI) + 1u];

+

+

+    /* 20 bits for the fractional part */

+    /* yfract should be in 12.20 format */

+    yfract = (Y & 0x000FFFFF);

+

+    /* Read two nearest output values from the index */

+    y1 = pYData[(rI) + nCols * (cI + 1)];

+    y2 = pYData[(rI) + nCols * (cI + 1) + 1u];

+

+    /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 13.51 format */

+

+    /* x1 is in 1.15(q15), xfract in 12.20 format and out is in 13.35 format */

+    /* convert 13.35 to 13.31 by right shifting  and out is in 1.31 */

+    out = (q31_t) (((q63_t) x1 * (0xFFFFF - xfract)) >> 4u);

+    acc = ((q63_t) out * (0xFFFFF - yfract));

+

+    /* x2 * (xfract) * (1-yfract)  in 1.51 and adding to acc */

+    out = (q31_t) (((q63_t) x2 * (0xFFFFF - yfract)) >> 4u);

+    acc += ((q63_t) out * (xfract));

+

+    /* y1 * (1 - xfract) * (yfract)  in 1.51 and adding to acc */

+    out = (q31_t) (((q63_t) y1 * (0xFFFFF - xfract)) >> 4u);

+    acc += ((q63_t) out * (yfract));

+

+    /* y2 * (xfract) * (yfract)  in 1.51 and adding to acc */

+    out = (q31_t) (((q63_t) y2 * (xfract)) >> 4u);

+    acc += ((q63_t) out * (yfract));

+

+    /* acc is in 13.51 format and down shift acc by 36 times */

+    /* Convert out to 1.15 format */

+    return (acc >> 36);

+

+  }

+

+  /**

+  * @brief  Q7 bilinear interpolation.

+  * @param[in,out] *S points to an instance of the interpolation structure.

+  * @param[in] X interpolation coordinate in 12.20 format.

+  * @param[in] Y interpolation coordinate in 12.20 format.

+  * @return out interpolated value.

+  */

+

+  __STATIC_INLINE q7_t arm_bilinear_interp_q7(

+					      arm_bilinear_interp_instance_q7 * S,

+					      q31_t X,

+					      q31_t Y)

+  {

+    q63_t acc = 0;                               /* output */

+    q31_t out;                                   /* Temporary output */

+    q31_t xfract, yfract;                        /* X, Y fractional parts */

+    q7_t x1, x2, y1, y2;                         /* Nearest output values */

+    int32_t rI, cI;                             /* Row and column indices */

+    q7_t *pYData = S->pData;                     /* pointer to output table values */

+    uint32_t nCols = S->numCols;                 /* num of rows */

+

+    /* Input is in 12.20 format */

+    /* 12 bits for the table index */

+    /* Index value calculation */

+    rI = ((X & 0xFFF00000) >> 20);

+

+    /* Input is in 12.20 format */

+    /* 12 bits for the table index */

+    /* Index value calculation */

+    cI = ((Y & 0xFFF00000) >> 20);

+

+	/* Care taken for table outside boundary */

+	/* Returns zero output when values are outside table boundary */

+	if(rI < 0 || rI > (S->numRows-1) || cI < 0  || cI > ( S->numCols-1))

+	{

+		return(0);

+	}

+

+    /* 20 bits for the fractional part */

+    /* xfract should be in 12.20 format */

+    xfract = (X & 0x000FFFFF);

+

+    /* Read two nearest output values from the index */

+    x1 = pYData[(rI) + nCols * (cI)];

+    x2 = pYData[(rI) + nCols * (cI) + 1u];

+

+

+    /* 20 bits for the fractional part */

+    /* yfract should be in 12.20 format */

+    yfract = (Y & 0x000FFFFF);

+

+    /* Read two nearest output values from the index */

+    y1 = pYData[(rI) + nCols * (cI + 1)];

+    y2 = pYData[(rI) + nCols * (cI + 1) + 1u];

+

+    /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 16.47 format */

+    out = ((x1 * (0xFFFFF - xfract)));

+    acc = (((q63_t) out * (0xFFFFF - yfract)));

+

+    /* x2 * (xfract) * (1-yfract)  in 2.22 and adding to acc */

+    out = ((x2 * (0xFFFFF - yfract)));

+    acc += (((q63_t) out * (xfract)));

+

+    /* y1 * (1 - xfract) * (yfract)  in 2.22 and adding to acc */

+    out = ((y1 * (0xFFFFF - xfract)));

+    acc += (((q63_t) out * (yfract)));

+

+    /* y2 * (xfract) * (yfract)  in 2.22 and adding to acc */

+    out = ((y2 * (yfract)));

+    acc += (((q63_t) out * (xfract)));

+

+    /* acc in 16.47 format and down shift by 40 to convert to 1.7 format */

+    return (acc >> 40);

+

+  }

+

+  /**

+   * @} end of BilinearInterpolate group

+   */

+

+

+

+

+

+

+#ifdef	__cplusplus

+}

+#endif

+

+

+#endif /* _ARM_MATH_H */

+

+

+/**

+ *

+ * End of file.

+ */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/thirdparty/CMSIS/Include/core_cm0plus.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/thirdparty/CMSIS/Include/core_cm0plus.h
new file mode 100644
index 0000000..cf92fb7
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/thirdparty/CMSIS/Include/core_cm0plus.h
@@ -0,0 +1,778 @@
+/**************************************************************************//**

+ * @file     core_cm0plus.h

+ * @brief    CMSIS Cortex-M0+ Core Peripheral Access Layer Header File

+ * @version  V3.01

+ * @date     22. March 2012

+ *

+ * @note

+ * Copyright (C) 2009-2012 ARM Limited. All rights reserved.

+ *

+ * @par

+ * ARM Limited (ARM) is supplying this software for use with Cortex-M

+ * processor based microcontrollers.  This file can be freely distributed

+ * within development tools that are supporting such ARM based processors.

+ *

+ * @par

+ * THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED

+ * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF

+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.

+ * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR

+ * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.

+ *

+ ******************************************************************************/

+#if defined ( __ICCARM__ )

+ #pragma system_include  /* treat file as system include file for MISRA check */

+#endif

+

+#ifdef __cplusplus

+ extern "C" {

+#endif

+

+#ifndef __CORE_CM0PLUS_H_GENERIC

+#define __CORE_CM0PLUS_H_GENERIC

+

+/** \page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions

+  CMSIS violates the following MISRA-C:2004 rules:

+

+   \li Required Rule 8.5, object/function definition in header file.<br>

+     Function definitions in header files are used to allow 'inlining'.

+

+   \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>

+     Unions are used for effective representation of core registers.

+

+   \li Advisory Rule 19.7, Function-like macro defined.<br>

+     Function-like macros are used to allow more efficient code.

+ */

+

+

+/*******************************************************************************

+ *                 CMSIS definitions

+ ******************************************************************************/

+/** \ingroup Cortex-M0+

+  @{

+ */

+

+/*  CMSIS CM0P definitions */

+#define __CM0PLUS_CMSIS_VERSION_MAIN (0x03)                                /*!< [31:16] CMSIS HAL main version   */

+#define __CM0PLUS_CMSIS_VERSION_SUB  (0x01)                                /*!< [15:0]  CMSIS HAL sub version    */

+#define __CM0PLUS_CMSIS_VERSION      ((__CM0PLUS_CMSIS_VERSION_MAIN << 16) | \

+                                       __CM0PLUS_CMSIS_VERSION_SUB)        /*!< CMSIS HAL version number         */

+

+#define __CORTEX_M                (0x00)                                   /*!< Cortex-M Core                    */

+

+

+#if   defined ( __CC_ARM )

+  #define __ASM            __asm                                      /*!< asm keyword for ARM Compiler          */

+  #define __INLINE         __inline                                   /*!< inline keyword for ARM Compiler       */

+  #define __STATIC_INLINE  static __inline

+

+#elif defined ( __ICCARM__ )

+  #define __ASM            __asm                                      /*!< asm keyword for IAR Compiler          */

+  #define __INLINE         inline                                     /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */

+  #define __STATIC_INLINE  static inline

+

+#elif defined ( __GNUC__ )

+  #define __ASM            __asm                                      /*!< asm keyword for GNU Compiler          */

+  #define __INLINE         inline                                     /*!< inline keyword for GNU Compiler       */

+  #define __STATIC_INLINE  static inline

+

+#elif defined ( __TASKING__ )

+  #define __ASM            __asm                                      /*!< asm keyword for TASKING Compiler      */

+  #define __INLINE         inline                                     /*!< inline keyword for TASKING Compiler   */

+  #define __STATIC_INLINE  static inline

+

+#endif

+

+/** __FPU_USED indicates whether an FPU is used or not. This core does not support an FPU at all

+*/

+#define __FPU_USED       0

+

+#if defined ( __CC_ARM )

+  #if defined __TARGET_FPU_VFP

+    #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __ICCARM__ )

+  #if defined __ARMVFP__

+    #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __GNUC__ )

+  #if defined (__VFP_FP__) && !defined(__SOFTFP__)

+    #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+

+#elif defined ( __TASKING__ )

+  #if defined __FPU_VFP__

+    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"

+  #endif

+#endif

+

+#include <stdint.h>                      /* standard types definitions                      */

+#include <core_cmInstr.h>                /* Core Instruction Access                         */

+#include <core_cmFunc.h>                 /* Core Function Access                            */

+

+#endif /* __CORE_CM0PLUS_H_GENERIC */

+

+#ifndef __CMSIS_GENERIC

+

+#ifndef __CORE_CM0PLUS_H_DEPENDANT

+#define __CORE_CM0PLUS_H_DEPENDANT

+

+/* check device defines and use defaults */

+#if defined __CHECK_DEVICE_DEFINES

+  #ifndef __CM0PLUS_REV

+    #define __CM0PLUS_REV             0x0000

+    #warning "__CM0PLUS_REV not defined in device header file; using default!"

+  #endif

+

+  #ifndef __MPU_PRESENT

+    #define __MPU_PRESENT             0

+    #warning "__MPU_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __VTOR_PRESENT

+    #define __VTOR_PRESENT            0

+    #warning "__VTOR_PRESENT not defined in device header file; using default!"

+  #endif

+

+  #ifndef __NVIC_PRIO_BITS

+    #define __NVIC_PRIO_BITS          2

+    #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"

+  #endif

+

+  #ifndef __Vendor_SysTickConfig

+    #define __Vendor_SysTickConfig    0

+    #warning "__Vendor_SysTickConfig not defined in device header file; using default!"

+  #endif

+#endif

+

+/* IO definitions (access restrictions to peripheral registers) */

+/**

+    \defgroup CMSIS_glob_defs CMSIS Global Defines

+

+    <strong>IO Type Qualifiers</strong> are used

+    \li to specify the access to peripheral variables.

+    \li for automatic generation of peripheral register debug information.

+*/

+#ifdef __cplusplus

+  #define   __I     volatile             /*!< Defines 'read only' permissions                 */

+#else

+  #define   __I     volatile const       /*!< Defines 'read only' permissions                 */

+#endif

+#define     __O     volatile             /*!< Defines 'write only' permissions                */

+#define     __IO    volatile             /*!< Defines 'read / write' permissions              */

+

+/*@} end of group Cortex-M0+ */

+

+

+

+/*******************************************************************************

+ *                 Register Abstraction

+  Core Register contain:

+  - Core Register

+  - Core NVIC Register

+  - Core SCB Register

+  - Core SysTick Register

+  - Core MPU Register

+ ******************************************************************************/

+/** \defgroup CMSIS_core_register Defines and Type Definitions

+    \brief Type definitions and defines for Cortex-M processor based devices.

+*/

+

+/** \ingroup    CMSIS_core_register

+    \defgroup   CMSIS_CORE  Status and Control Registers

+    \brief  Core Register type definitions.

+  @{

+ */

+

+/** \brief  Union type to access the Application Program Status Register (APSR).

+ */

+typedef union

+{

+  struct

+  {

+#if (__CORTEX_M != 0x04)

+    uint32_t _reserved0:27;              /*!< bit:  0..26  Reserved                           */

+#else

+    uint32_t _reserved0:16;              /*!< bit:  0..15  Reserved                           */

+    uint32_t GE:4;                       /*!< bit: 16..19  Greater than or Equal flags        */

+    uint32_t _reserved1:7;               /*!< bit: 20..26  Reserved                           */

+#endif

+    uint32_t Q:1;                        /*!< bit:     27  Saturation condition flag          */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag       */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag          */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag           */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag       */

+  } b;                                   /*!< Structure used for bit  access                  */

+  uint32_t w;                            /*!< Type      used for word access                  */

+} APSR_Type;

+

+

+/** \brief  Union type to access the Interrupt Program Status Register (IPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number                   */

+    uint32_t _reserved0:23;              /*!< bit:  9..31  Reserved                           */

+  } b;                                   /*!< Structure used for bit  access                  */

+  uint32_t w;                            /*!< Type      used for word access                  */

+} IPSR_Type;

+

+

+/** \brief  Union type to access the Special-Purpose Program Status Registers (xPSR).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number                   */

+#if (__CORTEX_M != 0x04)

+    uint32_t _reserved0:15;              /*!< bit:  9..23  Reserved                           */

+#else

+    uint32_t _reserved0:7;               /*!< bit:  9..15  Reserved                           */

+    uint32_t GE:4;                       /*!< bit: 16..19  Greater than or Equal flags        */

+    uint32_t _reserved1:4;               /*!< bit: 20..23  Reserved                           */

+#endif

+    uint32_t T:1;                        /*!< bit:     24  Thumb bit        (read 0)          */

+    uint32_t IT:2;                       /*!< bit: 25..26  saved IT state   (read 0)          */

+    uint32_t Q:1;                        /*!< bit:     27  Saturation condition flag          */

+    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag       */

+    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag          */

+    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag           */

+    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag       */

+  } b;                                   /*!< Structure used for bit  access                  */

+  uint32_t w;                            /*!< Type      used for word access                  */

+} xPSR_Type;

+

+

+/** \brief  Union type to access the Control Registers (CONTROL).

+ */

+typedef union

+{

+  struct

+  {

+    uint32_t nPRIV:1;                    /*!< bit:      0  Execution privilege in Thread mode */

+    uint32_t SPSEL:1;                    /*!< bit:      1  Stack to be used                   */

+    uint32_t FPCA:1;                     /*!< bit:      2  FP extension active flag           */

+    uint32_t _reserved0:29;              /*!< bit:  3..31  Reserved                           */

+  } b;                                   /*!< Structure used for bit  access                  */

+  uint32_t w;                            /*!< Type      used for word access                  */

+} CONTROL_Type;

+

+/*@} end of group CMSIS_CORE */

+

+

+/** \ingroup    CMSIS_core_register

+    \defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)

+    \brief      Type definitions for the NVIC Registers

+  @{

+ */

+

+/** \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).

+ */

+typedef struct

+{

+  __IO uint32_t ISER[1];                 /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register           */

+       uint32_t RESERVED0[31];

+  __IO uint32_t ICER[1];                 /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register          */

+       uint32_t RSERVED1[31];

+  __IO uint32_t ISPR[1];                 /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register           */

+       uint32_t RESERVED2[31];

+  __IO uint32_t ICPR[1];                 /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register         */

+       uint32_t RESERVED3[31];

+       uint32_t RESERVED4[64];

+  __IO uint32_t IP[8];                   /*!< Offset: 0x300 (R/W)  Interrupt Priority Register              */

+}  NVIC_Type;

+

+/*@} end of group CMSIS_NVIC */

+

+

+/** \ingroup  CMSIS_core_register

+    \defgroup CMSIS_SCB     System Control Block (SCB)

+    \brief      Type definitions for the System Control Block Registers

+  @{

+ */

+

+/** \brief  Structure type to access the System Control Block (SCB).

+ */

+typedef struct

+{

+  __I  uint32_t CPUID;                   /*!< Offset: 0x000 (R/ )  CPUID Base Register                                   */

+  __IO uint32_t ICSR;                    /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register                  */

+#if (__VTOR_PRESENT == 1)

+  __IO uint32_t VTOR;                    /*!< Offset: 0x008 (R/W)  Vector Table Offset Register                          */

+#else

+       uint32_t RESERVED0;

+#endif

+  __IO uint32_t AIRCR;                   /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register      */

+  __IO uint32_t SCR;                     /*!< Offset: 0x010 (R/W)  System Control Register                               */

+  __IO uint32_t CCR;                     /*!< Offset: 0x014 (R/W)  Configuration Control Register                        */

+       uint32_t RESERVED1;

+  __IO uint32_t SHP[2];                  /*!< Offset: 0x01C (R/W)  System Handlers Priority Registers. [0] is RESERVED   */

+  __IO uint32_t SHCSR;                   /*!< Offset: 0x024 (R/W)  System Handler Control and State Register             */

+} SCB_Type;

+

+/* SCB CPUID Register Definitions */

+#define SCB_CPUID_IMPLEMENTER_Pos          24                                             /*!< SCB CPUID: IMPLEMENTER Position */

+#define SCB_CPUID_IMPLEMENTER_Msk          (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos)          /*!< SCB CPUID: IMPLEMENTER Mask */

+

+#define SCB_CPUID_VARIANT_Pos              20                                             /*!< SCB CPUID: VARIANT Position */

+#define SCB_CPUID_VARIANT_Msk              (0xFUL << SCB_CPUID_VARIANT_Pos)               /*!< SCB CPUID: VARIANT Mask */

+

+#define SCB_CPUID_ARCHITECTURE_Pos         16                                             /*!< SCB CPUID: ARCHITECTURE Position */

+#define SCB_CPUID_ARCHITECTURE_Msk         (0xFUL << SCB_CPUID_ARCHITECTURE_Pos)          /*!< SCB CPUID: ARCHITECTURE Mask */

+

+#define SCB_CPUID_PARTNO_Pos                4                                             /*!< SCB CPUID: PARTNO Position */

+#define SCB_CPUID_PARTNO_Msk               (0xFFFUL << SCB_CPUID_PARTNO_Pos)              /*!< SCB CPUID: PARTNO Mask */

+

+#define SCB_CPUID_REVISION_Pos              0                                             /*!< SCB CPUID: REVISION Position */

+#define SCB_CPUID_REVISION_Msk             (0xFUL << SCB_CPUID_REVISION_Pos)              /*!< SCB CPUID: REVISION Mask */

+

+/* SCB Interrupt Control State Register Definitions */

+#define SCB_ICSR_NMIPENDSET_Pos            31                                             /*!< SCB ICSR: NMIPENDSET Position */

+#define SCB_ICSR_NMIPENDSET_Msk            (1UL << SCB_ICSR_NMIPENDSET_Pos)               /*!< SCB ICSR: NMIPENDSET Mask */

+

+#define SCB_ICSR_PENDSVSET_Pos             28                                             /*!< SCB ICSR: PENDSVSET Position */

+#define SCB_ICSR_PENDSVSET_Msk             (1UL << SCB_ICSR_PENDSVSET_Pos)                /*!< SCB ICSR: PENDSVSET Mask */

+

+#define SCB_ICSR_PENDSVCLR_Pos             27                                             /*!< SCB ICSR: PENDSVCLR Position */

+#define SCB_ICSR_PENDSVCLR_Msk             (1UL << SCB_ICSR_PENDSVCLR_Pos)                /*!< SCB ICSR: PENDSVCLR Mask */

+

+#define SCB_ICSR_PENDSTSET_Pos             26                                             /*!< SCB ICSR: PENDSTSET Position */

+#define SCB_ICSR_PENDSTSET_Msk             (1UL << SCB_ICSR_PENDSTSET_Pos)                /*!< SCB ICSR: PENDSTSET Mask */

+

+#define SCB_ICSR_PENDSTCLR_Pos             25                                             /*!< SCB ICSR: PENDSTCLR Position */

+#define SCB_ICSR_PENDSTCLR_Msk             (1UL << SCB_ICSR_PENDSTCLR_Pos)                /*!< SCB ICSR: PENDSTCLR Mask */

+

+#define SCB_ICSR_ISRPREEMPT_Pos            23                                             /*!< SCB ICSR: ISRPREEMPT Position */

+#define SCB_ICSR_ISRPREEMPT_Msk            (1UL << SCB_ICSR_ISRPREEMPT_Pos)               /*!< SCB ICSR: ISRPREEMPT Mask */

+

+#define SCB_ICSR_ISRPENDING_Pos            22                                             /*!< SCB ICSR: ISRPENDING Position */

+#define SCB_ICSR_ISRPENDING_Msk            (1UL << SCB_ICSR_ISRPENDING_Pos)               /*!< SCB ICSR: ISRPENDING Mask */

+

+#define SCB_ICSR_VECTPENDING_Pos           12                                             /*!< SCB ICSR: VECTPENDING Position */

+#define SCB_ICSR_VECTPENDING_Msk           (0x1FFUL << SCB_ICSR_VECTPENDING_Pos)          /*!< SCB ICSR: VECTPENDING Mask */

+

+#define SCB_ICSR_VECTACTIVE_Pos             0                                             /*!< SCB ICSR: VECTACTIVE Position */

+#define SCB_ICSR_VECTACTIVE_Msk            (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos)           /*!< SCB ICSR: VECTACTIVE Mask */

+

+#if (__VTOR_PRESENT == 1)

+/* SCB Interrupt Control State Register Definitions */

+#define SCB_VTOR_TBLOFF_Pos                 7                                             /*!< SCB VTOR: TBLOFF Position */

+#define SCB_VTOR_TBLOFF_Msk                (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos)           /*!< SCB VTOR: TBLOFF Mask */

+#endif

+

+/* SCB Application Interrupt and Reset Control Register Definitions */

+#define SCB_AIRCR_VECTKEY_Pos              16                                             /*!< SCB AIRCR: VECTKEY Position */

+#define SCB_AIRCR_VECTKEY_Msk              (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos)            /*!< SCB AIRCR: VECTKEY Mask */

+

+#define SCB_AIRCR_VECTKEYSTAT_Pos          16                                             /*!< SCB AIRCR: VECTKEYSTAT Position */

+#define SCB_AIRCR_VECTKEYSTAT_Msk          (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos)        /*!< SCB AIRCR: VECTKEYSTAT Mask */

+

+#define SCB_AIRCR_ENDIANESS_Pos            15                                             /*!< SCB AIRCR: ENDIANESS Position */

+#define SCB_AIRCR_ENDIANESS_Msk            (1UL << SCB_AIRCR_ENDIANESS_Pos)               /*!< SCB AIRCR: ENDIANESS Mask */

+

+#define SCB_AIRCR_SYSRESETREQ_Pos           2                                             /*!< SCB AIRCR: SYSRESETREQ Position */

+#define SCB_AIRCR_SYSRESETREQ_Msk          (1UL << SCB_AIRCR_SYSRESETREQ_Pos)             /*!< SCB AIRCR: SYSRESETREQ Mask */

+

+#define SCB_AIRCR_VECTCLRACTIVE_Pos         1                                             /*!< SCB AIRCR: VECTCLRACTIVE Position */

+#define SCB_AIRCR_VECTCLRACTIVE_Msk        (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos)           /*!< SCB AIRCR: VECTCLRACTIVE Mask */

+

+/* SCB System Control Register Definitions */

+#define SCB_SCR_SEVONPEND_Pos               4                                             /*!< SCB SCR: SEVONPEND Position */

+#define SCB_SCR_SEVONPEND_Msk              (1UL << SCB_SCR_SEVONPEND_Pos)                 /*!< SCB SCR: SEVONPEND Mask */

+

+#define SCB_SCR_SLEEPDEEP_Pos               2                                             /*!< SCB SCR: SLEEPDEEP Position */

+#define SCB_SCR_SLEEPDEEP_Msk              (1UL << SCB_SCR_SLEEPDEEP_Pos)                 /*!< SCB SCR: SLEEPDEEP Mask */

+

+#define SCB_SCR_SLEEPONEXIT_Pos             1                                             /*!< SCB SCR: SLEEPONEXIT Position */

+#define SCB_SCR_SLEEPONEXIT_Msk            (1UL << SCB_SCR_SLEEPONEXIT_Pos)               /*!< SCB SCR: SLEEPONEXIT Mask */

+

+/* SCB Configuration Control Register Definitions */

+#define SCB_CCR_STKALIGN_Pos                9                                             /*!< SCB CCR: STKALIGN Position */

+#define SCB_CCR_STKALIGN_Msk               (1UL << SCB_CCR_STKALIGN_Pos)                  /*!< SCB CCR: STKALIGN Mask */

+

+#define SCB_CCR_UNALIGN_TRP_Pos             3                                             /*!< SCB CCR: UNALIGN_TRP Position */

+#define SCB_CCR_UNALIGN_TRP_Msk            (1UL << SCB_CCR_UNALIGN_TRP_Pos)               /*!< SCB CCR: UNALIGN_TRP Mask */

+

+/* SCB System Handler Control and State Register Definitions */

+#define SCB_SHCSR_SVCALLPENDED_Pos         15                                             /*!< SCB SHCSR: SVCALLPENDED Position */

+#define SCB_SHCSR_SVCALLPENDED_Msk         (1UL << SCB_SHCSR_SVCALLPENDED_Pos)            /*!< SCB SHCSR: SVCALLPENDED Mask */

+

+/*@} end of group CMSIS_SCB */

+

+

+/** \ingroup  CMSIS_core_register

+    \defgroup CMSIS_SysTick     System Tick Timer (SysTick)

+    \brief      Type definitions for the System Timer Registers.

+  @{

+ */

+

+/** \brief  Structure type to access the System Timer (SysTick).

+ */

+typedef struct

+{

+  __IO uint32_t CTRL;                    /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */

+  __IO uint32_t LOAD;                    /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register       */

+  __IO uint32_t VAL;                     /*!< Offset: 0x008 (R/W)  SysTick Current Value Register      */

+  __I  uint32_t CALIB;                   /*!< Offset: 0x00C (R/ )  SysTick Calibration Register        */

+} SysTick_Type;

+

+/* SysTick Control / Status Register Definitions */

+#define SysTick_CTRL_COUNTFLAG_Pos         16                                             /*!< SysTick CTRL: COUNTFLAG Position */

+#define SysTick_CTRL_COUNTFLAG_Msk         (1UL << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */

+

+#define SysTick_CTRL_CLKSOURCE_Pos          2                                             /*!< SysTick CTRL: CLKSOURCE Position */

+#define SysTick_CTRL_CLKSOURCE_Msk         (1UL << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */

+

+#define SysTick_CTRL_TICKINT_Pos            1                                             /*!< SysTick CTRL: TICKINT Position */

+#define SysTick_CTRL_TICKINT_Msk           (1UL << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */

+

+#define SysTick_CTRL_ENABLE_Pos             0                                             /*!< SysTick CTRL: ENABLE Position */

+#define SysTick_CTRL_ENABLE_Msk            (1UL << SysTick_CTRL_ENABLE_Pos)               /*!< SysTick CTRL: ENABLE Mask */

+

+/* SysTick Reload Register Definitions */

+#define SysTick_LOAD_RELOAD_Pos             0                                             /*!< SysTick LOAD: RELOAD Position */

+#define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos)        /*!< SysTick LOAD: RELOAD Mask */

+

+/* SysTick Current Register Definitions */

+#define SysTick_VAL_CURRENT_Pos             0                                             /*!< SysTick VAL: CURRENT Position */

+#define SysTick_VAL_CURRENT_Msk            (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos)        /*!< SysTick VAL: CURRENT Mask */

+

+/* SysTick Calibration Register Definitions */

+#define SysTick_CALIB_NOREF_Pos            31                                             /*!< SysTick CALIB: NOREF Position */

+#define SysTick_CALIB_NOREF_Msk            (1UL << SysTick_CALIB_NOREF_Pos)               /*!< SysTick CALIB: NOREF Mask */

+

+#define SysTick_CALIB_SKEW_Pos             30                                             /*!< SysTick CALIB: SKEW Position */

+#define SysTick_CALIB_SKEW_Msk             (1UL << SysTick_CALIB_SKEW_Pos)                /*!< SysTick CALIB: SKEW Mask */

+

+#define SysTick_CALIB_TENMS_Pos             0                                             /*!< SysTick CALIB: TENMS Position */

+#define SysTick_CALIB_TENMS_Msk            (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos)        /*!< SysTick CALIB: TENMS Mask */

+

+/*@} end of group CMSIS_SysTick */

+

+#if (__MPU_PRESENT == 1)

+/** \ingroup  CMSIS_core_register

+    \defgroup CMSIS_MPU     Memory Protection Unit (MPU)

+    \brief      Type definitions for the Memory Protection Unit (MPU)

+  @{

+ */

+

+/** \brief  Structure type to access the Memory Protection Unit (MPU).

+ */

+typedef struct

+{

+  __I  uint32_t TYPE;                    /*!< Offset: 0x000 (R/ )  MPU Type Register                              */

+  __IO uint32_t CTRL;                    /*!< Offset: 0x004 (R/W)  MPU Control Register                           */

+  __IO uint32_t RNR;                     /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register                     */

+  __IO uint32_t RBAR;                    /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register               */

+  __IO uint32_t RASR;                    /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register         */

+} MPU_Type;

+

+/* MPU Type Register */

+#define MPU_TYPE_IREGION_Pos               16                                             /*!< MPU TYPE: IREGION Position */

+#define MPU_TYPE_IREGION_Msk               (0xFFUL << MPU_TYPE_IREGION_Pos)               /*!< MPU TYPE: IREGION Mask */

+

+#define MPU_TYPE_DREGION_Pos                8                                             /*!< MPU TYPE: DREGION Position */

+#define MPU_TYPE_DREGION_Msk               (0xFFUL << MPU_TYPE_DREGION_Pos)               /*!< MPU TYPE: DREGION Mask */

+

+#define MPU_TYPE_SEPARATE_Pos               0                                             /*!< MPU TYPE: SEPARATE Position */

+#define MPU_TYPE_SEPARATE_Msk              (1UL << MPU_TYPE_SEPARATE_Pos)                 /*!< MPU TYPE: SEPARATE Mask */

+

+/* MPU Control Register */

+#define MPU_CTRL_PRIVDEFENA_Pos             2                                             /*!< MPU CTRL: PRIVDEFENA Position */

+#define MPU_CTRL_PRIVDEFENA_Msk            (1UL << MPU_CTRL_PRIVDEFENA_Pos)               /*!< MPU CTRL: PRIVDEFENA Mask */

+

+#define MPU_CTRL_HFNMIENA_Pos               1                                             /*!< MPU CTRL: HFNMIENA Position */

+#define MPU_CTRL_HFNMIENA_Msk              (1UL << MPU_CTRL_HFNMIENA_Pos)                 /*!< MPU CTRL: HFNMIENA Mask */

+

+#define MPU_CTRL_ENABLE_Pos                 0                                             /*!< MPU CTRL: ENABLE Position */

+#define MPU_CTRL_ENABLE_Msk                (1UL << MPU_CTRL_ENABLE_Pos)                   /*!< MPU CTRL: ENABLE Mask */

+

+/* MPU Region Number Register */

+#define MPU_RNR_REGION_Pos                  0                                             /*!< MPU RNR: REGION Position */

+#define MPU_RNR_REGION_Msk                 (0xFFUL << MPU_RNR_REGION_Pos)                 /*!< MPU RNR: REGION Mask */

+

+/* MPU Region Base Address Register */

+#define MPU_RBAR_ADDR_Pos                   8                                             /*!< MPU RBAR: ADDR Position */

+#define MPU_RBAR_ADDR_Msk                  (0xFFFFFFUL << MPU_RBAR_ADDR_Pos)              /*!< MPU RBAR: ADDR Mask */

+

+#define MPU_RBAR_VALID_Pos                  4                                             /*!< MPU RBAR: VALID Position */

+#define MPU_RBAR_VALID_Msk                 (1UL << MPU_RBAR_VALID_Pos)                    /*!< MPU RBAR: VALID Mask */

+

+#define MPU_RBAR_REGION_Pos                 0                                             /*!< MPU RBAR: REGION Position */

+#define MPU_RBAR_REGION_Msk                (0xFUL << MPU_RBAR_REGION_Pos)                 /*!< MPU RBAR: REGION Mask */

+

+/* MPU Region Attribute and Size Register */

+#define MPU_RASR_ATTRS_Pos                 16                                             /*!< MPU RASR: MPU Region Attribute field Position */

+#define MPU_RASR_ATTRS_Msk                 (0xFFFFUL << MPU_RASR_ATTRS_Pos)               /*!< MPU RASR: MPU Region Attribute field Mask */

+

+#define MPU_RASR_XN_Pos                    28                                             /*!< MPU RASR: ATTRS.XN Position */

+#define MPU_RASR_XN_Msk                    (1UL << MPU_RASR_XN_Pos)                       /*!< MPU RASR: ATTRS.XN Mask */

+

+#define MPU_RASR_AP_Pos                    24                                             /*!< MPU RASR: ATTRS.AP Position */

+#define MPU_RASR_AP_Msk                    (0x7UL << MPU_RASR_AP_Pos)                     /*!< MPU RASR: ATTRS.AP Mask */

+

+#define MPU_RASR_TEX_Pos                   19                                             /*!< MPU RASR: ATTRS.TEX Position */

+#define MPU_RASR_TEX_Msk                   (0x7UL << MPU_RASR_TEX_Pos)                    /*!< MPU RASR: ATTRS.TEX Mask */

+

+#define MPU_RASR_S_Pos                     18                                             /*!< MPU RASR: ATTRS.S Position */

+#define MPU_RASR_S_Msk                     (1UL << MPU_RASR_S_Pos)                        /*!< MPU RASR: ATTRS.S Mask */

+

+#define MPU_RASR_C_Pos                     17                                             /*!< MPU RASR: ATTRS.C Position */

+#define MPU_RASR_C_Msk                     (1UL << MPU_RASR_C_Pos)                        /*!< MPU RASR: ATTRS.C Mask */

+

+#define MPU_RASR_B_Pos                     16                                             /*!< MPU RASR: ATTRS.B Position */

+#define MPU_RASR_B_Msk                     (1UL << MPU_RASR_B_Pos)                        /*!< MPU RASR: ATTRS.B Mask */

+

+#define MPU_RASR_SRD_Pos                    8                                             /*!< MPU RASR: Sub-Region Disable Position */

+#define MPU_RASR_SRD_Msk                   (0xFFUL << MPU_RASR_SRD_Pos)                   /*!< MPU RASR: Sub-Region Disable Mask */

+

+#define MPU_RASR_SIZE_Pos                   1                                             /*!< MPU RASR: Region Size Field Position */

+#define MPU_RASR_SIZE_Msk                  (0x1FUL << MPU_RASR_SIZE_Pos)                  /*!< MPU RASR: Region Size Field Mask */

+

+#define MPU_RASR_ENABLE_Pos                 0                                             /*!< MPU RASR: Region enable bit Position */

+#define MPU_RASR_ENABLE_Msk                (1UL << MPU_RASR_ENABLE_Pos)                   /*!< MPU RASR: Region enable bit Disable Mask */

+

+/*@} end of group CMSIS_MPU */

+#endif

+

+

+/** \ingroup  CMSIS_core_register

+    \defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)

+    \brief      Cortex-M0+ Core Debug Registers (DCB registers, SHCSR, and DFSR)

+                are only accessible over DAP and not via processor. Therefore

+                they are not covered by the Cortex-M0 header file.

+  @{

+ */

+/*@} end of group CMSIS_CoreDebug */

+

+

+/** \ingroup    CMSIS_core_register

+    \defgroup   CMSIS_core_base     Core Definitions

+    \brief      Definitions for base addresses, unions, and structures.

+  @{

+ */

+

+/* Memory mapping of Cortex-M0+ Hardware */

+#define SCS_BASE            (0xE000E000UL)                            /*!< System Control Space Base Address */

+#define SysTick_BASE        (SCS_BASE +  0x0010UL)                    /*!< SysTick Base Address              */

+#define NVIC_BASE           (SCS_BASE +  0x0100UL)                    /*!< NVIC Base Address                 */

+#define SCB_BASE            (SCS_BASE +  0x0D00UL)                    /*!< System Control Block Base Address */

+

+#define SCB                 ((SCB_Type       *)     SCB_BASE      )   /*!< SCB configuration struct           */

+#define SysTick             ((SysTick_Type   *)     SysTick_BASE  )   /*!< SysTick configuration struct       */

+#define NVIC                ((NVIC_Type      *)     NVIC_BASE     )   /*!< NVIC configuration struct          */

+

+#if (__MPU_PRESENT == 1)

+  #define MPU_BASE          (SCS_BASE +  0x0D90UL)                    /*!< Memory Protection Unit             */

+  #define MPU               ((MPU_Type       *)     MPU_BASE      )   /*!< Memory Protection Unit             */

+#endif

+

+/*@} */

+

+

+

+/*******************************************************************************

+ *                Hardware Abstraction Layer

+  Core Function Interface contains:

+  - Core NVIC Functions

+  - Core SysTick Functions

+  - Core Register Access Functions

+ ******************************************************************************/

+/** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference

+*/

+

+

+

+/* ##########################   NVIC functions  #################################### */

+/** \ingroup  CMSIS_Core_FunctionInterface

+    \defgroup CMSIS_Core_NVICFunctions NVIC Functions

+    \brief      Functions that manage interrupts and exceptions via the NVIC.

+    @{

+ */

+

+/* Interrupt Priorities are WORD accessible only under ARMv6M                   */

+/* The following MACROS handle generation of the register offset and byte masks */

+#define _BIT_SHIFT(IRQn)         (  (((uint32_t)(IRQn)       )    &  0x03) * 8 )

+#define _SHP_IDX(IRQn)           ( ((((uint32_t)(IRQn) & 0x0F)-8) >>    2)     )

+#define _IP_IDX(IRQn)            (   ((uint32_t)(IRQn)            >>    2)     )

+

+

+/** \brief  Enable External Interrupt

+

+    The function enables a device-specific interrupt in the NVIC interrupt controller.

+

+    \param [in]      IRQn  External interrupt number. Value cannot be negative.

+ */

+__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)

+{

+  NVIC->ISER[0] = (1 << ((uint32_t)(IRQn) & 0x1F));

+}

+

+

+/** \brief  Disable External Interrupt

+

+    The function disables a device-specific interrupt in the NVIC interrupt controller.

+

+    \param [in]      IRQn  External interrupt number. Value cannot be negative.

+ */

+__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn)

+{

+  NVIC->ICER[0] = (1 << ((uint32_t)(IRQn) & 0x1F));

+}

+

+

+/** \brief  Get Pending Interrupt

+

+    The function reads the pending register in the NVIC and returns the pending bit

+    for the specified interrupt.

+

+    \param [in]      IRQn  Interrupt number.

+

+    \return             0  Interrupt status is not pending.

+    \return             1  Interrupt status is pending.

+ */

+__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn)

+{

+  return((uint32_t) ((NVIC->ISPR[0] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0));

+}

+

+

+/** \brief  Set Pending Interrupt

+

+    The function sets the pending bit of an external interrupt.

+

+    \param [in]      IRQn  Interrupt number. Value cannot be negative.

+ */

+__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn)

+{

+  NVIC->ISPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F));

+}

+

+

+/** \brief  Clear Pending Interrupt

+

+    The function clears the pending bit of an external interrupt.

+

+    \param [in]      IRQn  External interrupt number. Value cannot be negative.

+ */

+__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn)

+{

+  NVIC->ICPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */

+}

+

+

+/** \brief  Set Interrupt Priority

+

+    The function sets the priority of an interrupt.

+

+    \note The priority cannot be set for every core interrupt.

+

+    \param [in]      IRQn  Interrupt number.

+    \param [in]  priority  Priority to set.

+ */

+__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)

+{

+  if(IRQn < 0) {

+    SCB->SHP[_SHP_IDX(IRQn)] = (SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) |

+        (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); }

+  else {

+    NVIC->IP[_IP_IDX(IRQn)] = (NVIC->IP[_IP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) |

+        (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); }

+}

+

+

+/** \brief  Get Interrupt Priority

+

+    The function reads the priority of an interrupt. The interrupt

+    number can be positive to specify an external (device specific)

+    interrupt, or negative to specify an internal (core) interrupt.

+

+

+    \param [in]   IRQn  Interrupt number.

+    \return             Interrupt Priority. Value is aligned automatically to the implemented

+                        priority bits of the microcontroller.

+ */

+__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn)

+{

+

+  if(IRQn < 0) {

+    return((uint32_t)((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) >> (8 - __NVIC_PRIO_BITS)));  } /* get priority for Cortex-M0+ system interrupts */

+  else {

+    return((uint32_t)((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) >> (8 - __NVIC_PRIO_BITS)));  } /* get priority for device specific interrupts   */

+}

+

+

+/** \brief  System Reset

+

+    The function initiates a system reset request to reset the MCU.

+ */

+__STATIC_INLINE void NVIC_SystemReset(void)

+{

+  __DSB();                                                     /* Ensure all outstanding memory accesses included

+                                                                  buffered write are completed before reset */

+  SCB->AIRCR  = ((0x5FA << SCB_AIRCR_VECTKEY_Pos)      |

+                 SCB_AIRCR_SYSRESETREQ_Msk);

+  __DSB();                                                     /* Ensure completion of memory access */

+  while(1);                                                    /* wait until reset */

+}

+

+/*@} end of CMSIS_Core_NVICFunctions */

+

+

+

+/* ##################################    SysTick function  ############################################ */

+/** \ingroup  CMSIS_Core_FunctionInterface

+    \defgroup CMSIS_Core_SysTickFunctions SysTick Functions

+    \brief      Functions that configure the System.

+  @{

+ */

+

+#if (__Vendor_SysTickConfig == 0)

+

+/** \brief  System Tick Configuration

+

+    The function initializes the System Timer and its interrupt, and starts the System Tick Timer.

+    Counter is in free running mode to generate periodic interrupts.

+

+    \param [in]  ticks  Number of ticks between two interrupts.

+

+    \return          0  Function succeeded.

+    \return          1  Function failed.

+

+    \note     When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the

+    function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>

+    must contain a vendor-specific implementation of this function.

+

+ */

+__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

+{

+  if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);            /* Reload value impossible */

+

+  SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;      /* set reload register */

+  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Systick Interrupt */

+  SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */

+  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

+                   SysTick_CTRL_TICKINT_Msk   |

+                   SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */

+  return (0);                                                  /* Function successful */

+}

+

+#endif

+

+/*@} end of CMSIS_Core_SysTickFunctions */

+

+

+

+

+#endif /* __CORE_CM0PLUS_H_DEPENDANT */

+

+#endif /* __CMSIS_GENERIC */

+

+#ifdef __cplusplus

+}

+#endif

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/thirdparty/CMSIS/Include/core_cmFunc.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/thirdparty/CMSIS/Include/core_cmFunc.h
new file mode 100644
index 0000000..1991ae3
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/thirdparty/CMSIS/Include/core_cmFunc.h
@@ -0,0 +1,616 @@
+/**************************************************************************//**

+ * @file     core_cmFunc.h

+ * @brief    CMSIS Cortex-M Core Function Access Header File

+ * @version  V3.00

+ * @date     19. January 2012

+ *

+ * @note

+ * Copyright (C) 2009-2012 ARM Limited. All rights reserved.

+ *

+ * @par

+ * ARM Limited (ARM) is supplying this software for use with Cortex-M 

+ * processor based microcontrollers.  This file can be freely distributed 

+ * within development tools that are supporting such ARM based processors. 

+ *

+ * @par

+ * THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED

+ * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF

+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.

+ * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR

+ * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.

+ *

+ ******************************************************************************/

+

+#ifndef __CORE_CMFUNC_H

+#define __CORE_CMFUNC_H

+

+

+/* ###########################  Core Function Access  ########################### */

+/** \ingroup  CMSIS_Core_FunctionInterface   

+    \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions

+  @{

+ */

+

+#if   defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/

+/* ARM armcc specific functions */

+

+#if (__ARMCC_VERSION < 400677)

+  #error "Please use ARM Compiler Toolchain V4.0.677 or later!"

+#endif

+

+/* intrinsic void __enable_irq();     */

+/* intrinsic void __disable_irq();    */

+

+/** \brief  Get Control Register

+

+    This function returns the content of the Control Register.

+

+    \return               Control Register value

+ */

+__STATIC_INLINE uint32_t __get_CONTROL(void)

+{

+  register uint32_t __regControl         __ASM("control");

+  return(__regControl);

+}

+

+

+/** \brief  Set Control Register

+

+    This function writes the given value to the Control Register.

+

+    \param [in]    control  Control Register value to set

+ */

+__STATIC_INLINE void __set_CONTROL(uint32_t control)

+{

+  register uint32_t __regControl         __ASM("control");

+  __regControl = control;

+}

+

+

+/** \brief  Get IPSR Register

+

+    This function returns the content of the IPSR Register.

+

+    \return               IPSR Register value

+ */

+__STATIC_INLINE uint32_t __get_IPSR(void)

+{

+  register uint32_t __regIPSR          __ASM("ipsr");

+  return(__regIPSR);

+}

+

+

+/** \brief  Get APSR Register

+

+    This function returns the content of the APSR Register.

+

+    \return               APSR Register value

+ */

+__STATIC_INLINE uint32_t __get_APSR(void)

+{

+  register uint32_t __regAPSR          __ASM("apsr");

+  return(__regAPSR);

+}

+

+

+/** \brief  Get xPSR Register

+

+    This function returns the content of the xPSR Register.

+

+    \return               xPSR Register value

+ */

+__STATIC_INLINE uint32_t __get_xPSR(void)

+{

+  register uint32_t __regXPSR          __ASM("xpsr");

+  return(__regXPSR);

+}

+

+

+/** \brief  Get Process Stack Pointer

+

+    This function returns the current value of the Process Stack Pointer (PSP).

+

+    \return               PSP Register value

+ */

+__STATIC_INLINE uint32_t __get_PSP(void)

+{

+  register uint32_t __regProcessStackPointer  __ASM("psp");

+  return(__regProcessStackPointer);

+}

+

+

+/** \brief  Set Process Stack Pointer

+

+    This function assigns the given value to the Process Stack Pointer (PSP).

+

+    \param [in]    topOfProcStack  Process Stack Pointer value to set

+ */

+__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack)

+{

+  register uint32_t __regProcessStackPointer  __ASM("psp");

+  __regProcessStackPointer = topOfProcStack;

+}

+

+

+/** \brief  Get Main Stack Pointer

+

+    This function returns the current value of the Main Stack Pointer (MSP).

+

+    \return               MSP Register value

+ */

+__STATIC_INLINE uint32_t __get_MSP(void)

+{

+  register uint32_t __regMainStackPointer     __ASM("msp");

+  return(__regMainStackPointer);

+}

+

+

+/** \brief  Set Main Stack Pointer

+

+    This function assigns the given value to the Main Stack Pointer (MSP).

+

+    \param [in]    topOfMainStack  Main Stack Pointer value to set

+ */

+__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack)

+{

+  register uint32_t __regMainStackPointer     __ASM("msp");

+  __regMainStackPointer = topOfMainStack;

+}

+

+

+/** \brief  Get Priority Mask

+

+    This function returns the current state of the priority mask bit from the Priority Mask Register.

+

+    \return               Priority Mask value

+ */

+__STATIC_INLINE uint32_t __get_PRIMASK(void)

+{

+  register uint32_t __regPriMask         __ASM("primask");

+  return(__regPriMask);

+}

+

+

+/** \brief  Set Priority Mask

+

+    This function assigns the given value to the Priority Mask Register.

+

+    \param [in]    priMask  Priority Mask

+ */

+__STATIC_INLINE void __set_PRIMASK(uint32_t priMask)

+{

+  register uint32_t __regPriMask         __ASM("primask");

+  __regPriMask = (priMask);

+}

+ 

+

+#if       (__CORTEX_M >= 0x03)

+

+/** \brief  Enable FIQ

+

+    This function enables FIQ interrupts by clearing the F-bit in the CPSR.

+    Can only be executed in Privileged modes.

+ */

+#define __enable_fault_irq                __enable_fiq

+

+

+/** \brief  Disable FIQ

+

+    This function disables FIQ interrupts by setting the F-bit in the CPSR.

+    Can only be executed in Privileged modes.

+ */

+#define __disable_fault_irq               __disable_fiq

+

+

+/** \brief  Get Base Priority

+

+    This function returns the current value of the Base Priority register.

+

+    \return               Base Priority register value

+ */

+__STATIC_INLINE uint32_t  __get_BASEPRI(void)

+{

+  register uint32_t __regBasePri         __ASM("basepri");

+  return(__regBasePri);

+}

+

+

+/** \brief  Set Base Priority

+

+    This function assigns the given value to the Base Priority register.

+

+    \param [in]    basePri  Base Priority value to set

+ */

+__STATIC_INLINE void __set_BASEPRI(uint32_t basePri)

+{

+  register uint32_t __regBasePri         __ASM("basepri");

+  __regBasePri = (basePri & 0xff);

+}

+ 

+

+/** \brief  Get Fault Mask

+

+    This function returns the current value of the Fault Mask register.

+

+    \return               Fault Mask register value

+ */

+__STATIC_INLINE uint32_t __get_FAULTMASK(void)

+{

+  register uint32_t __regFaultMask       __ASM("faultmask");

+  return(__regFaultMask);

+}

+

+

+/** \brief  Set Fault Mask

+

+    This function assigns the given value to the Fault Mask register.

+

+    \param [in]    faultMask  Fault Mask value to set

+ */

+__STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask)

+{

+  register uint32_t __regFaultMask       __ASM("faultmask");

+  __regFaultMask = (faultMask & (uint32_t)1);

+}

+

+#endif /* (__CORTEX_M >= 0x03) */

+

+

+#if       (__CORTEX_M == 0x04)

+

+/** \brief  Get FPSCR

+

+    This function returns the current value of the Floating Point Status/Control register.

+

+    \return               Floating Point Status/Control register value

+ */

+__STATIC_INLINE uint32_t __get_FPSCR(void)

+{

+#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)

+  register uint32_t __regfpscr         __ASM("fpscr");

+  return(__regfpscr);

+#else

+   return(0);

+#endif

+}

+

+

+/** \brief  Set FPSCR

+

+    This function assigns the given value to the Floating Point Status/Control register.

+

+    \param [in]    fpscr  Floating Point Status/Control value to set

+ */

+__STATIC_INLINE void __set_FPSCR(uint32_t fpscr)

+{

+#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)

+  register uint32_t __regfpscr         __ASM("fpscr");

+  __regfpscr = (fpscr);

+#endif

+}

+

+#endif /* (__CORTEX_M == 0x04) */

+

+

+#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/

+/* IAR iccarm specific functions */

+

+#include <cmsis_iar.h>

+

+

+#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/

+/* TI CCS specific functions */

+

+#include <cmsis_ccs.h>

+

+

+#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/

+/* GNU gcc specific functions */

+

+/** \brief  Enable IRQ Interrupts

+

+  This function enables IRQ interrupts by clearing the I-bit in the CPSR.

+  Can only be executed in Privileged modes.

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void)

+{

+  __ASM volatile ("cpsie i");

+}

+

+

+/** \brief  Disable IRQ Interrupts

+

+  This function disables IRQ interrupts by setting the I-bit in the CPSR.

+  Can only be executed in Privileged modes.

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_irq(void)

+{

+  __ASM volatile ("cpsid i");

+}

+

+

+/** \brief  Get Control Register

+

+    This function returns the content of the Control Register.

+

+    \return               Control Register value

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_CONTROL(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, control" : "=r" (result) );

+  return(result);

+}

+

+

+/** \brief  Set Control Register

+

+    This function writes the given value to the Control Register.

+

+    \param [in]    control  Control Register value to set

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_CONTROL(uint32_t control)

+{

+  __ASM volatile ("MSR control, %0" : : "r" (control) );

+}

+

+

+/** \brief  Get IPSR Register

+

+    This function returns the content of the IPSR Register.

+

+    \return               IPSR Register value

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_IPSR(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, ipsr" : "=r" (result) );

+  return(result);

+}

+

+

+/** \brief  Get APSR Register

+

+    This function returns the content of the APSR Register.

+

+    \return               APSR Register value

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_APSR(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, apsr" : "=r" (result) );

+  return(result);

+}

+

+

+/** \brief  Get xPSR Register

+

+    This function returns the content of the xPSR Register.

+

+    \return               xPSR Register value

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_xPSR(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, xpsr" : "=r" (result) );

+  return(result);

+}

+

+

+/** \brief  Get Process Stack Pointer

+

+    This function returns the current value of the Process Stack Pointer (PSP).

+

+    \return               PSP Register value

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PSP(void)

+{

+  register uint32_t result;

+

+  __ASM volatile ("MRS %0, psp\n"  : "=r" (result) );

+  return(result);

+}

+ 

+

+/** \brief  Set Process Stack Pointer

+

+    This function assigns the given value to the Process Stack Pointer (PSP).

+

+    \param [in]    topOfProcStack  Process Stack Pointer value to set

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PSP(uint32_t topOfProcStack)

+{

+  __ASM volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) );

+}

+

+

+/** \brief  Get Main Stack Pointer

+

+    This function returns the current value of the Main Stack Pointer (MSP).

+

+    \return               MSP Register value

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_MSP(void)

+{

+  register uint32_t result;

+

+  __ASM volatile ("MRS %0, msp\n" : "=r" (result) );

+  return(result);

+}

+ 

+

+/** \brief  Set Main Stack Pointer

+

+    This function assigns the given value to the Main Stack Pointer (MSP).

+

+    \param [in]    topOfMainStack  Main Stack Pointer value to set

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_MSP(uint32_t topOfMainStack)

+{

+  __ASM volatile ("MSR msp, %0\n" : : "r" (topOfMainStack) );

+}

+

+

+/** \brief  Get Priority Mask

+

+    This function returns the current state of the priority mask bit from the Priority Mask Register.

+

+    \return               Priority Mask value

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PRIMASK(void)

+{

+  uint32_t result;

+

+  __ASM volatile ("MRS %0, primask" : "=r" (result) );

+  return(result);

+}

+

+

+/** \brief  Set Priority Mask

+

+    This function assigns the given value to the Priority Mask Register.

+

+    \param [in]    priMask  Priority Mask

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PRIMASK(uint32_t priMask)

+{

+  __ASM volatile ("MSR primask, %0" : : "r" (priMask) );

+}

+ 

+

+#if       (__CORTEX_M >= 0x03)

+

+/** \brief  Enable FIQ

+

+    This function enables FIQ interrupts by clearing the F-bit in the CPSR.

+    Can only be executed in Privileged modes.

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_fault_irq(void)

+{

+  __ASM volatile ("cpsie f");

+}

+

+

+/** \brief  Disable FIQ

+

+    This function disables FIQ interrupts by setting the F-bit in the CPSR.

+    Can only be executed in Privileged modes.

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_fault_irq(void)

+{

+  __ASM volatile ("cpsid f");

+}

+

+

+/** \brief  Get Base Priority

+

+    This function returns the current value of the Base Priority register.

+

+    \return               Base Priority register value

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_BASEPRI(void)

+{

+  uint32_t result;

+  

+  __ASM volatile ("MRS %0, basepri_max" : "=r" (result) );

+  return(result);

+}

+

+

+/** \brief  Set Base Priority

+

+    This function assigns the given value to the Base Priority register.

+

+    \param [in]    basePri  Base Priority value to set

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_BASEPRI(uint32_t value)

+{

+  __ASM volatile ("MSR basepri, %0" : : "r" (value) );

+}

+

+

+/** \brief  Get Fault Mask

+

+    This function returns the current value of the Fault Mask register.

+

+    \return               Fault Mask register value

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FAULTMASK(void)

+{

+  uint32_t result;

+  

+  __ASM volatile ("MRS %0, faultmask" : "=r" (result) );

+  return(result);

+}

+

+

+/** \brief  Set Fault Mask

+

+    This function assigns the given value to the Fault Mask register.

+

+    \param [in]    faultMask  Fault Mask value to set

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask)

+{

+  __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) );

+}

+

+#endif /* (__CORTEX_M >= 0x03) */

+

+

+#if       (__CORTEX_M == 0x04)

+

+/** \brief  Get FPSCR

+

+    This function returns the current value of the Floating Point Status/Control register.

+

+    \return               Floating Point Status/Control register value

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_FPSCR(void)

+{

+#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)

+  uint32_t result;

+

+  __ASM volatile ("VMRS %0, fpscr" : "=r" (result) );

+  return(result);

+#else

+   return(0);

+#endif

+}

+

+

+/** \brief  Set FPSCR

+

+    This function assigns the given value to the Floating Point Status/Control register.

+

+    \param [in]    fpscr  Floating Point Status/Control value to set

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_FPSCR(uint32_t fpscr)

+{

+#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)

+  __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) );

+#endif

+}

+

+#endif /* (__CORTEX_M == 0x04) */

+

+

+#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/

+/* TASKING carm specific functions */

+

+/*

+ * The CMSIS functions have been implemented as intrinsics in the compiler.

+ * Please use "carm -?i" to get an up to date list of all instrinsics,

+ * Including the CMSIS ones.

+ */

+

+#endif

+

+/*@} end of CMSIS_Core_RegAccFunctions */

+

+

+#endif /* __CORE_CMFUNC_H */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/thirdparty/CMSIS/Include/core_cmInstr.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/thirdparty/CMSIS/Include/core_cmInstr.h
new file mode 100644
index 0000000..7981634
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/thirdparty/CMSIS/Include/core_cmInstr.h
@@ -0,0 +1,618 @@
+/**************************************************************************//**

+ * @file     core_cmInstr.h

+ * @brief    CMSIS Cortex-M Core Instruction Access Header File

+ * @version  V3.00

+ * @date     07. February 2012

+ *

+ * @note

+ * Copyright (C) 2009-2012 ARM Limited. All rights reserved.

+ *

+ * @par

+ * ARM Limited (ARM) is supplying this software for use with Cortex-M

+ * processor based microcontrollers.  This file can be freely distributed

+ * within development tools that are supporting such ARM based processors.

+ *

+ * @par

+ * THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED

+ * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF

+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.

+ * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR

+ * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.

+ *

+ ******************************************************************************/

+

+#ifndef __CORE_CMINSTR_H

+#define __CORE_CMINSTR_H

+

+

+/* ##########################  Core Instruction Access  ######################### */

+/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface

+  Access to dedicated instructions

+  @{

+*/

+

+#if   defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/

+/* ARM armcc specific functions */

+

+#if (__ARMCC_VERSION < 400677)

+  #error "Please use ARM Compiler Toolchain V4.0.677 or later!"

+#endif

+

+

+/** \brief  No Operation

+

+    No Operation does nothing. This instruction can be used for code alignment purposes.

+ */

+#define __NOP                             __nop

+

+

+/** \brief  Wait For Interrupt

+

+    Wait For Interrupt is a hint instruction that suspends execution

+    until one of a number of events occurs.

+ */

+#define __WFI                             __wfi

+

+

+/** \brief  Wait For Event

+

+    Wait For Event is a hint instruction that permits the processor to enter

+    a low-power state until one of a number of events occurs.

+ */

+#define __WFE                             __wfe

+

+

+/** \brief  Send Event

+

+    Send Event is a hint instruction. It causes an event to be signaled to the CPU.

+ */

+#define __SEV                             __sev

+

+

+/** \brief  Instruction Synchronization Barrier

+

+    Instruction Synchronization Barrier flushes the pipeline in the processor,

+    so that all instructions following the ISB are fetched from cache or

+    memory, after the instruction has been completed.

+ */

+#define __ISB()                           __isb(0xF)

+

+

+/** \brief  Data Synchronization Barrier

+

+    This function acts as a special kind of Data Memory Barrier.

+    It completes when all explicit memory accesses before this instruction complete.

+ */

+#define __DSB()                           __dsb(0xF)

+

+

+/** \brief  Data Memory Barrier

+

+    This function ensures the apparent order of the explicit memory operations before

+    and after the instruction, without ensuring their completion.

+ */

+#define __DMB()                           __dmb(0xF)

+

+

+/** \brief  Reverse byte order (32 bit)

+

+    This function reverses the byte order in integer value.

+

+    \param [in]    value  Value to reverse

+    \return               Reversed value

+ */

+#define __REV                             __rev

+

+

+/** \brief  Reverse byte order (16 bit)

+

+    This function reverses the byte order in two unsigned short values.

+

+    \param [in]    value  Value to reverse

+    \return               Reversed value

+ */

+__attribute__((section(".rev16_text"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value)

+{

+  rev16 r0, r0

+  bx lr

+}

+

+

+/** \brief  Reverse byte order in signed short value

+

+    This function reverses the byte order in a signed short value with sign extension to integer.

+

+    \param [in]    value  Value to reverse

+    \return               Reversed value

+ */

+__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int32_t __REVSH(int32_t value)

+{

+  revsh r0, r0

+  bx lr

+}

+

+

+/** \brief  Rotate Right in unsigned value (32 bit)

+

+    This function Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.

+

+    \param [in]    value  Value to rotate

+    \param [in]    value  Number of Bits to rotate

+    \return               Rotated value

+ */

+#define __ROR                             __ror

+

+

+#if       (__CORTEX_M >= 0x03)

+

+/** \brief  Reverse bit order of value

+

+    This function reverses the bit order of the given value.

+

+    \param [in]    value  Value to reverse

+    \return               Reversed value

+ */

+#define __RBIT                            __rbit

+

+

+/** \brief  LDR Exclusive (8 bit)

+

+    This function performs a exclusive LDR command for 8 bit value.

+

+    \param [in]    ptr  Pointer to data

+    \return             value of type uint8_t at (*ptr)

+ */

+#define __LDREXB(ptr)                     ((uint8_t ) __ldrex(ptr))

+

+

+/** \brief  LDR Exclusive (16 bit)

+

+    This function performs a exclusive LDR command for 16 bit values.

+

+    \param [in]    ptr  Pointer to data

+    \return        value of type uint16_t at (*ptr)

+ */

+#define __LDREXH(ptr)                     ((uint16_t) __ldrex(ptr))

+

+

+/** \brief  LDR Exclusive (32 bit)

+

+    This function performs a exclusive LDR command for 32 bit values.

+

+    \param [in]    ptr  Pointer to data

+    \return        value of type uint32_t at (*ptr)

+ */

+#define __LDREXW(ptr)                     ((uint32_t ) __ldrex(ptr))

+

+

+/** \brief  STR Exclusive (8 bit)

+

+    This function performs a exclusive STR command for 8 bit values.

+

+    \param [in]  value  Value to store

+    \param [in]    ptr  Pointer to location

+    \return          0  Function succeeded

+    \return          1  Function failed

+ */

+#define __STREXB(value, ptr)              __strex(value, ptr)

+

+

+/** \brief  STR Exclusive (16 bit)

+

+    This function performs a exclusive STR command for 16 bit values.

+

+    \param [in]  value  Value to store

+    \param [in]    ptr  Pointer to location

+    \return          0  Function succeeded

+    \return          1  Function failed

+ */

+#define __STREXH(value, ptr)              __strex(value, ptr)

+

+

+/** \brief  STR Exclusive (32 bit)

+

+    This function performs a exclusive STR command for 32 bit values.

+

+    \param [in]  value  Value to store

+    \param [in]    ptr  Pointer to location

+    \return          0  Function succeeded

+    \return          1  Function failed

+ */

+#define __STREXW(value, ptr)              __strex(value, ptr)

+

+

+/** \brief  Remove the exclusive lock

+

+    This function removes the exclusive lock which is created by LDREX.

+

+ */

+#define __CLREX                           __clrex

+

+

+/** \brief  Signed Saturate

+

+    This function saturates a signed value.

+

+    \param [in]  value  Value to be saturated

+    \param [in]    sat  Bit position to saturate to (1..32)

+    \return             Saturated value

+ */

+#define __SSAT                            __ssat

+

+

+/** \brief  Unsigned Saturate

+

+    This function saturates an unsigned value.

+

+    \param [in]  value  Value to be saturated

+    \param [in]    sat  Bit position to saturate to (0..31)

+    \return             Saturated value

+ */

+#define __USAT                            __usat

+

+

+/** \brief  Count leading zeros

+

+    This function counts the number of leading zeros of a data value.

+

+    \param [in]  value  Value to count the leading zeros

+    \return             number of leading zeros in value

+ */

+#define __CLZ                             __clz

+

+#endif /* (__CORTEX_M >= 0x03) */

+

+

+

+#elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/

+/* IAR iccarm specific functions */

+

+#include <cmsis_iar.h>

+

+

+#elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/

+/* TI CCS specific functions */

+

+#include <cmsis_ccs.h>

+

+

+#elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/

+/* GNU gcc specific functions */

+

+/** \brief  No Operation

+

+    No Operation does nothing. This instruction can be used for code alignment purposes.

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE void __NOP(void)

+{

+  __ASM volatile ("nop");

+}

+

+

+/** \brief  Wait For Interrupt

+

+    Wait For Interrupt is a hint instruction that suspends execution

+    until one of a number of events occurs.

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE void __WFI(void)

+{

+  __ASM volatile ("wfi");

+}

+

+

+/** \brief  Wait For Event

+

+    Wait For Event is a hint instruction that permits the processor to enter

+    a low-power state until one of a number of events occurs.

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE void __WFE(void)

+{

+  __ASM volatile ("wfe");

+}

+

+

+/** \brief  Send Event

+

+    Send Event is a hint instruction. It causes an event to be signaled to the CPU.

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE void __SEV(void)

+{

+  __ASM volatile ("sev");

+}

+

+

+/** \brief  Instruction Synchronization Barrier

+

+    Instruction Synchronization Barrier flushes the pipeline in the processor,

+    so that all instructions following the ISB are fetched from cache or

+    memory, after the instruction has been completed.

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE void __ISB(void)

+{

+  __ASM volatile ("isb");

+}

+

+

+/** \brief  Data Synchronization Barrier

+

+    This function acts as a special kind of Data Memory Barrier.

+    It completes when all explicit memory accesses before this instruction complete.

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE void __DSB(void)

+{

+  __ASM volatile ("dsb");

+}

+

+

+/** \brief  Data Memory Barrier

+

+    This function ensures the apparent order of the explicit memory operations before

+    and after the instruction, without ensuring their completion.

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE void __DMB(void)

+{

+  __ASM volatile ("dmb");

+}

+

+

+/** \brief  Reverse byte order (32 bit)

+

+    This function reverses the byte order in integer value.

+

+    \param [in]    value  Value to reverse

+    \return               Reversed value

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __REV(uint32_t value)

+{

+  uint32_t result;

+

+  __ASM volatile ("rev %0, %1" : "=r" (result) : "r" (value) );

+  return(result);

+}

+

+

+/** \brief  Reverse byte order (16 bit)

+

+    This function reverses the byte order in two unsigned short values.

+

+    \param [in]    value  Value to reverse

+    \return               Reversed value

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __REV16(uint32_t value)

+{

+  uint32_t result;

+

+  __ASM volatile ("rev16 %0, %1" : "=r" (result) : "r" (value) );

+  return(result);

+}

+

+

+/** \brief  Reverse byte order in signed short value

+

+    This function reverses the byte order in a signed short value with sign extension to integer.

+

+    \param [in]    value  Value to reverse

+    \return               Reversed value

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE int32_t __REVSH(int32_t value)

+{

+  uint32_t result;

+

+  __ASM volatile ("revsh %0, %1" : "=r" (result) : "r" (value) );

+  return(result);

+}

+

+

+/** \brief  Rotate Right in unsigned value (32 bit)

+

+    This function Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.

+

+    \param [in]    value  Value to rotate

+    \param [in]    value  Number of Bits to rotate

+    \return               Rotated value

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __ROR(uint32_t op1, uint32_t op2)

+{

+

+  __ASM volatile ("ror %0, %0, %1" : "+r" (op1) : "r" (op2) );

+  return(op1);

+}

+

+

+#if       (__CORTEX_M >= 0x03)

+

+/** \brief  Reverse bit order of value

+

+    This function reverses the bit order of the given value.

+

+    \param [in]    value  Value to reverse

+    \return               Reversed value

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __RBIT(uint32_t value)

+{

+  uint32_t result;

+

+   __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );

+   return(result);

+}

+

+

+/** \brief  LDR Exclusive (8 bit)

+

+    This function performs a exclusive LDR command for 8 bit value.

+

+    \param [in]    ptr  Pointer to data

+    \return             value of type uint8_t at (*ptr)

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __LDREXB(volatile uint8_t *addr)

+{

+    uint8_t result;

+

+   __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) );

+   return(result);

+}

+

+

+/** \brief  LDR Exclusive (16 bit)

+

+    This function performs a exclusive LDR command for 16 bit values.

+

+    \param [in]    ptr  Pointer to data

+    \return        value of type uint16_t at (*ptr)

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE uint16_t __LDREXH(volatile uint16_t *addr)

+{

+    uint16_t result;

+

+   __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) );

+   return(result);

+}

+

+

+/** \brief  LDR Exclusive (32 bit)

+

+    This function performs a exclusive LDR command for 32 bit values.

+

+    \param [in]    ptr  Pointer to data

+    \return        value of type uint32_t at (*ptr)

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __LDREXW(volatile uint32_t *addr)

+{

+    uint32_t result;

+

+   __ASM volatile ("ldrex %0, [%1]" : "=r" (result) : "r" (addr) );

+   return(result);

+}

+

+

+/** \brief  STR Exclusive (8 bit)

+

+    This function performs a exclusive STR command for 8 bit values.

+

+    \param [in]  value  Value to store

+    \param [in]    ptr  Pointer to location

+    \return          0  Function succeeded

+    \return          1  Function failed

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr)

+{

+   uint32_t result;

+

+   __ASM volatile ("strexb %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );

+   return(result);

+}

+

+

+/** \brief  STR Exclusive (16 bit)

+

+    This function performs a exclusive STR command for 16 bit values.

+

+    \param [in]  value  Value to store

+    \param [in]    ptr  Pointer to location

+    \return          0  Function succeeded

+    \return          1  Function failed

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr)

+{

+   uint32_t result;

+

+   __ASM volatile ("strexh %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );

+   return(result);

+}

+

+

+/** \brief  STR Exclusive (32 bit)

+

+    This function performs a exclusive STR command for 32 bit values.

+

+    \param [in]  value  Value to store

+    \param [in]    ptr  Pointer to location

+    \return          0  Function succeeded

+    \return          1  Function failed

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr)

+{

+   uint32_t result;

+

+   __ASM volatile ("strex %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );

+   return(result);

+}

+

+

+/** \brief  Remove the exclusive lock

+

+    This function removes the exclusive lock which is created by LDREX.

+

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE void __CLREX(void)

+{

+  __ASM volatile ("clrex");

+}

+

+

+/** \brief  Signed Saturate

+

+    This function saturates a signed value.

+

+    \param [in]  value  Value to be saturated

+    \param [in]    sat  Bit position to saturate to (1..32)

+    \return             Saturated value

+ */

+#define __SSAT(ARG1,ARG2) \

+({                          \

+  uint32_t __RES, __ARG1 = (ARG1); \

+  __ASM ("ssat %0, %1, %2" : "=r" (__RES) :  "I" (ARG2), "r" (__ARG1) ); \

+  __RES; \

+ })

+

+

+/** \brief  Unsigned Saturate

+

+    This function saturates an unsigned value.

+

+    \param [in]  value  Value to be saturated

+    \param [in]    sat  Bit position to saturate to (0..31)

+    \return             Saturated value

+ */

+#define __USAT(ARG1,ARG2) \

+({                          \

+  uint32_t __RES, __ARG1 = (ARG1); \

+  __ASM ("usat %0, %1, %2" : "=r" (__RES) :  "I" (ARG2), "r" (__ARG1) ); \

+  __RES; \

+ })

+

+

+/** \brief  Count leading zeros

+

+    This function counts the number of leading zeros of a data value.

+

+    \param [in]  value  Value to count the leading zeros

+    \return             number of leading zeros in value

+ */

+__attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __CLZ(uint32_t value)

+{

+  uint8_t result;

+

+  __ASM volatile ("clz %0, %1" : "=r" (result) : "r" (value) );

+  return(result);

+}

+

+#endif /* (__CORTEX_M >= 0x03) */

+

+

+

+

+#elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/

+/* TASKING carm specific functions */

+

+/*

+ * The CMSIS functions have been implemented as intrinsics in the compiler.

+ * Please use "carm -?i" to get an up to date list of all intrinsics,

+ * Including the CMSIS ones.

+ */

+

+#endif

+

+/*@}*/ /* end of group CMSIS_Core_InstructionInterface */

+

+#endif /* __CORE_CMINSTR_H */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/thirdparty/CMSIS/README.txt b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/thirdparty/CMSIS/README.txt
new file mode 100644
index 0000000..efa2ad1
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/thirdparty/CMSIS/README.txt
@@ -0,0 +1,37 @@
+* -------------------------------------------------------------------

+* Copyright (C) 2011 ARM Limited. All rights reserved.  

+* 

+* Date:        11 October 2011  

+* Revision:    V3.00 

+*  

+* Project:     Cortex Microcontroller Software Interface Standard (CMSIS)

+* Title:       Release Note for CMSIS

+*

+* -------------------------------------------------------------------

+

+

+NOTE - Open the index.html file to access CMSIS documentation

+

+

+The Cortex Microcontroller Software Interface Standard (CMSIS) provides a single standard across all 

+Cortex-Mx processor series vendors. It enables code re-use and code sharing across software projects 

+and reduces time-to-market for new embedded applications.

+

+CMSIS is released under the terms of the end user license agreement ("CMSIS END USER LICENCE AGREEMENT.pdf").

+Any user of the software package is bound to the terms and conditions of the end user license agreement.

+

+

+You will find the following sub-directories:

+

+Documentation           - Contains CMSIS documentation.

+ 

+DSP_Lib                 - MDK project files, Examples and source files etc.. to build the 

+                          CMSIS DSP Software Library for Cortex-M0, Cortex-M3, Cortex-M4 processors.

+

+Include                 - CMSIS Core Support and CMSIS DSP Include Files.

+

+Lib                     - CMSIS DSP Libraries.

+

+RTOS                    - CMSIS RTOS API template header file.

+

+SVD                     - CMSIS SVD Schema files and Conversion Utility.

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/thirdparty/CMSIS/license.txt b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/thirdparty/CMSIS/license.txt
new file mode 100644
index 0000000..b220574
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/ASF/thirdparty/CMSIS/license.txt
@@ -0,0 +1,167 @@
+END USER LICENCE AGREEMENT FOR THE CORTEX MICROCONTROLLER SOFTWARE INTERFACE

+STANDARD (CMSIS) SPECIFICATION AND SOFTWARE

+

+THIS END USER LICENCE AGREEMENT ("LICENCE") IS A LEGAL AGREEMENT BETWEEN YOU (EITHER A

+SINGLE INDIVIDUAL, OR SINGLE LEGAL ENTITY) AND ARM LIMITED ("ARM") FOR THE USE OF THE

+CMSIS SPECIFICATION, EXAMPLE CODE, DSP LIBRARY SPECIFICATION AND DSP LIBRARY

+IMPLEMENTATION AS SUCH TERMS ARE DEFINED BELOW (COLLECTIVELY, THE "ARM

+DELIVERABLES"). ARM IS ONLY WILLING TO LICENSE THE ARM DELIVERABLES TO YOU ON CONDITION

+THAT YOU ACCEPT ALL OF THE TERMS IN THIS LICENCE. BY CLICKING "I AGREE", OR BY INSTALLING

+OR OTHERWISE USING OR COPYING THE ARM DELIVERABLES YOU INDICATE THAT YOU AGREE TO

+BE BOUND BY ALL THE TERMS OF THIS LICENCE. IF YOU DO NOT AGREE TO THE TERMS OF THIS

+LICENCE, ARM IS UNWILLING TO LICENSE YOU TO USE THE ARM DELIVERABLES AND YOU MAY NOT

+INSTALL, USE OR COPY THE ARM DELIVERABLES.

+

+"CMSIS Specification" means any documentation and C programming language files defining the application

+programming interface, naming and coding conventions of the Cortex Microcontroller Software Interface

+Standard (CMSIS) as well as the System View Description (SVD) documentation and associated XML schema

+file. Notwithstanding the foregoing, "CMSIS Specification" shall not include (i) the implementation of other

+published specifications referenced in the CMSIS Specification; (ii) any enabling technologies that may be

+necessary to make or use any product or portion thereof that complies with the CMSIS Specification, but are not

+themselves expressly set forth in the CMSIS Specification (e.g. compiler front ends, code generators, back ends,

+libraries or other compiler, assembler or linker technologies; validation or debug software or hardware;

+applications, operating system or driver software; RISC architecture; processor microarchitecture); (iii)

+maskworks and physical layouts of integrated circuit designs; or (iv) RTL or other high level representations of

+integrated circuit designs.

+

+"DSP Library Implementation" means any C programming language source code implementing the functionality

+of the digital signal processor (DSP) algorithms and the application programming interface as defined in the DSP

+Library Specification. The DSP Library Implementation makes use of CMSIS application programming interface

+and therefore is targeted at Cortex-M class processors.

+

+"DSP Library Specification" means the DSP library documentation and C programming language file defining the

+application programming interface of the DSP Library Implementation. Notwithstanding the foregoing, "DSP

+Library Specification" shall not include (i) the implementation of other published specifications referenced in the

+DSP Library Specification; (ii) any enabling technologies that may be necessary to make or use any product or

+portion thereof that complies with the DSP Library Specification, but are not themselves expressly set forth in the

+DSP Library Specification (e.g. compiler front ends, code generators, back ends, libraries or other compiler,

+assembler or linker technologies; validation or debug software or hardware; applications, operating system or

+driver software; RISC architecture; processor microarchitecture); (iii) maskworks and physical layouts of

+integrated circuit designs; or (iv) RTL or other high level representations of integrated circuit designs.

+

+"Example Code" means any files in C, C++ or ARM assembly programming languages, associated project and

+configuration files that demonstrate the usage of the CMSIS Specification, the DSP Library Specification and the

+DSP Library Implementation, for microprocessors or device specific software applications that are for use with

+microprocessors.

+

+1. LICENCE GRANTS.

+

+1.1 ARM hereby grants to you, subject to the terms and conditions of this Licence, a non-exclusive, nontransferable

+licence, to;

+

+(i) use and copy the CMSIS Specification for the purpose of developing, having developed, manufacturing,

+having manufactured, offering to sell, selling, supplying or otherwise distributing products that comply with the

+CMSIS Specification, provided that you preserve any copyright notices which are included with, or in, the CMSIS

+Specification and provided that you do not use ARM's name, logo or trademarks to market such products;

+

+(ii) use, copy, and modify (solely to the extent necessary to incorporate the whole or any part of the DSP Library

+Specification into your documentation), the DSP Library Specification, for the purpose of developing, having

+developed, manufacturing, having manufactured, offering to sell, selling, supplying or otherwise distributing

+products that comply with the DSP Library Specification, and distribute and have distributed any documentation

+created by or for you that has been derived from the DSP Library Specification with such products, provided that

+you preserve any copyright notices which are included with, or in, the DSP Library Specification and provided that

+you do not use ARM's name, logo or trademarks to market such products;

+

+(iii) use, copy, modify and sublicense the Example Code solely for the purpose of developing, having developed,

+manufacturing, having manufactured, offering to sell, selling, supplying or otherwise distributing products that

+comply with either or both the CMSIS Specification and the DSP Library Specification, provided that you preserve

+any copyright notices which are included with, or in, the Example Code and that you do not use ARM's name,

+logo or trademarks to market such products;

+

+(iv) use, copy and modify (provided that the logical functionality and the application programming interface of the

+DSP Library Implementation are maintained) the DSP Library Implementation, solely for the purposes of

+developing; (a) software applications for use with microprocessors manufactured or simulated under licence from

+ARM ("Software Applications"); and (b) tools that are designed to develop software programs for use with

+microprocessors manufactured or simulated under licence from ARM ("Tools"); and

+

+(v) subject to clause 1.1(vi) below; (a) distribute and sublicense the use of the DSP Library Implementation

+(including any modified forms thereof created under Clause 1.1(iv) above) in binary or source format, solely as

+incorporated into Software Library Applications and Tools to third parties; and (b) sublicense to such third parties

+the right to use and copy the Tools for the purposes of developing and distribute software programs for use with

+microprocessors manufactured or simulated under licence from ARM.

+

+(vi) CONDITIONS ON REDISTRIBUTION: If you choose to redistribute the whole or any part of the DSP Library

+Implementation as incorporated into Software Library Applications or Tools, you agree to; (a) ensure that the

+DSP Library Implementation is licensed for use only as part of Software Library Applications and Tools and only

+for use with microprocessors manufactured or simulated under licence from ARM; (b) not to use ARM's name,

+logo or trademarks to market Software Applications and Tools; and (c) include valid copyright notices on

+Software Applications and Tools, and preserve any copyright notices which are included with, or in, the DSP

+Library Implementation.

+

+2. RESTRICTIONS ON USE OF THE ARM DELIVERABLES.

+

+PERMITTED USERS: The ARM Deliverables shall be used only by you (either a single individual, or single legal

+entity) your employees, or by your on-site bona fide sub-contractors for whose acts and omissions you hereby

+agree to be responsible to ARM for to the same extent as you are for your employees, and provided always that

+such sub-contractors; (i) are contractually obligated to use the ARM Deliverables only for your benefit, and (ii)

+agree to assign all their work product and any rights they create therein in the supply of such work to you.

+COPYRIGHT AND RESERVATION OF RIGHTS: The ARM Deliverables are owned by ARM or its licensors and

+are protected by copyright and other intellectual property laws and international treaties. The ARM Deliverables

+are licensed not sold. Except as expressly licensed herein, you acquire no right, title or interest in the ARM

+Deliverables or any intellectual property therein. In no event shall the licences granted herein be construed as

+granting you, expressly or by implication, estoppels or otherwise, a licence to use any ARM technology except

+the ARM Deliverables.

+

+3. SUPPORT.

+

+ARM is not obligated to support the ARM Deliverables but may do so entirely at ARM's discretion.

+

+4. NO WARRANTY

+

+YOU AGREE THAT THE ARM DELIVERABLES ARE LICENSED "AS IS", AND THAT ARM EXPRESSLY

+DISCLAIMS ALL REPRESENTATIONS, WARRANTIES, CONDITIONS OR OTHER TERMS, EXPRESS,

+IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NONINFRINGEMENT,

+SATISFACTORY QUALITY, AND FITNESS FOR A PARTICULAR PURPOSE. THE ARM

+DELIVERABLES MAY CONTAIN ERRORS. ARM RESERVES THE RIGHT TO INCORPORATE

+MODIFICATIONS TO THE ARM DELIVERABLES IN LATER REVISIONS OF THEM, AND TO MAKE

+IMPROVEMENTS OR CHANGES IN THE ARM DELIVERABLES AT ANY TIME.

+

+5. LIMITATION OF LIABILITY.

+

+THE MAXIMUM LIABILITY OF ARM TO YOU IN AGGREGATE FOR ALL CLAIMS MADE AGAINST ARM IN

+CONTRACT, TORT OR OTHERWISE UNDER OR IN CONNECTION WITH THE SUBJECT MATTER OF THIS

+LICENCE SHALL NOT EXCEED THE GREATER OF (I) THE TOTAL OF SUMS PAID BY YOU TO ARM (IF

+ANY) FOR THIS LICENCE AND (II) US$10.00. THE LIMITATIONS, EXCLUSIONS AND DISCLAIMERS IN

+THIS LICENCE SHALL APPLY TO THE MAXIMUM EXTENT ALLOWED BY APPLICABLE LAW.

+

+6. U.S. GOVERNMENT END USERS.

+US Government Restrictions: Use, duplication, reproduction, release, modification, disclosure or transfer of this

+commercial product and accompanying documentation is restricted in accordance with the terms of this Licence.

+

+7. TERM AND TERMINATION.

+

+7.1 This Licence shall remain in force until terminated in accordance with the terms of Clause 7.2 or Clause 7.3

+below.

+

+7.2 Without prejudice to any of its other rights if you are in breach of any of the terms and conditions of this

+Licence then ARM may terminate this Licence immediately upon giving written notice to you. You may terminate

+this Licence at any time.

+

+7.3 This Licence shall immediately terminate and shall be unavailable to you if you or any party affiliated to you

+asserts any patents against ARM, ARM affiliates, third parties who have a valid licence from ARM for the ARM

+Deliverables, or any customers or distributors of any of them based upon a claim that your (or your affiliate)

+patent is Necessary to implement the CMSIS Specification or DSP Library Specification. In this Licence; (i)

+"affiliate" means any entity controlling, controlled by or under common control with a party (in fact or in law, via

+voting securities, management control or otherwise) and "affiliated" shall be construed accordingly; (ii) "assert"

+means to allege infringement in legal or administrative proceedings, or proceedings before any other competent

+trade, arbitral or international authority; (iii) "Necessary" means with respect to any claims of any patent, those

+claims which, without the appropriate permission of the patent owner, will be infringed when implementing the

+CMSIS Specification or DSP Library Specification because no alternative, commercially reasonable, noninfringing

+way of implementing the CMSIS Specification or DSP Library Specification is known.

+

+7.4 Upon termination of this Licence, you shall stop using the ARM Deliverables and destroy all copies of the

+ARM Deliverables in your possession. The provisions of clauses 5, 6, 7, and 8 shall survive termination of this

+Licence.

+

+8. GENERAL.

+

+This Licence is governed by English Law. Except where ARM agrees otherwise in a written contract signed by

+you and ARM, this is the only agreement between you and ARM relating to the ARM Deliverables and it may only

+be modified by written agreement between you and ARM. Except as expressly agreed in writing, this Licence

+may not be modified by purchase orders, advertising or other representation by any person. If any clause or

+sentence in this Licence is held by a court of law to be illegal or unenforceable the remaining provisions of this

+Licence shall not be affected thereby. The failure by ARM to enforce any of the provisions of this Licence, unless

+waived in writing, shall not constitute a waiver of ARM's rights to enforce such provision or any other provision of

+this Licence in the future. This Licence may not be assigned without the prior written consent of ARM.

+

+ARM contract reference LEC-PRE-00489

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/asf.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/asf.h
new file mode 100644
index 0000000..88d35ef
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/asf.h
@@ -0,0 +1,95 @@
+/**

+ * \file

+ *

+ * \brief Autogenerated API include file for the Atmel Software Framework (ASF)

+ *

+ * Copyright (c) 2012 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

+ *

+ */

+

+#ifndef ASF_H

+#define ASF_H

+

+/*

+ * This file includes all API header files for the selected drivers from ASF.

+ * Note: There might be duplicate includes required by more than one driver.

+ *

+ * The file is automatically generated and will be re-written when

+ * running the ASF driver selector tool. Any changes will be discarded.

+ */

+

+// From module: Common SAM D20 compiler driver

+#include <compiler.h>

+#include <status_codes.h>

+

+// From module: Generic board support

+#include <board.h>

+

+// From module: Interrupt management - SAM implementation

+#include <interrupt.h>

+

+// From module: PORT - GPIO Pin Control

+#include <port.h>

+

+// From module: Part identification macros

+#include <parts.h>

+

+// From module: SERCOM

+#include <sercom.h>

+#include <sercom_interrupt.h>

+

+// From module: SERCOM USART - Serial Communications (Callback APIs)

+#include <usart.h>

+#include <usart_interrupt.h>

+

+// From module: SYSTEM - Clock Management

+#include <clock.h>

+#include <gclk.h>

+

+// From module: SYSTEM - Core System Driver

+#include <system.h>

+

+// From module: SYSTEM - I/O Pin Multiplexer

+#include <pinmux.h>

+

+// From module: SYSTEM - Interrupt Driver

+#include <system_interrupt.h>

+

+// From module: USART - Serial interface- SAM implementation for devices with only USART

+#include <serial.h>

+

+#endif // ASF_H

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/config/FreeRTOSConfig.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/config/FreeRTOSConfig.h
new file mode 100644
index 0000000..4b02ae2
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/config/FreeRTOSConfig.h
@@ -0,0 +1,145 @@
+/*

+    FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd.

+

+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.

+

+    ***************************************************************************

+     *                                                                       *

+     *    FreeRTOS provides completely free yet professionally developed,    *

+     *    robust, strictly quality controlled, supported, and cross          *

+     *    platform software that has become a de facto standard.             *

+     *                                                                       *

+     *    Help yourself get started quickly and support the FreeRTOS         *

+     *    project by purchasing a FreeRTOS tutorial book, reference          *

+     *    manual, or both from: http://www.FreeRTOS.org/Documentation        *

+     *                                                                       *

+     *    Thank you!                                                         *

+     *                                                                       *

+    ***************************************************************************

+

+    This file is part of the FreeRTOS distribution.

+

+    FreeRTOS is free software; you can redistribute it and/or modify it under

+    the terms of the GNU General Public License (version 2) as published by the

+    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.

+

+    >>! NOTE: The modification to the GPL is included to allow you to distribute

+    >>! a combined work that includes FreeRTOS without being obliged to provide

+    >>! the source code for proprietary components outside of the FreeRTOS

+    >>! kernel.

+

+    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY

+    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS

+    FOR A PARTICULAR PURPOSE.  Full license text is available from the following

+    link: http://www.freertos.org/a00114.html

+

+    1 tab == 4 spaces!

+

+    ***************************************************************************

+     *                                                                       *

+     *    Having a problem?  Start by reading the FAQ "My application does   *

+     *    not run, what could be wrong?"                                     *

+     *                                                                       *

+     *    http://www.FreeRTOS.org/FAQHelp.html                               *

+     *                                                                       *

+    ***************************************************************************

+

+    http://www.FreeRTOS.org - Documentation, books, training, latest versions,

+    license and Real Time Engineers Ltd. contact details.

+

+    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,

+    including FreeRTOS+Trace - an indispensable productivity tool, a DOS

+    compatible FAT file system, and our tiny thread aware UDP/IP stack.

+

+    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High

+    Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS

+    licenses offer ticketed support, indemnification and middleware.

+

+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety

+    engineered and independently SIL3 certified version for use in safety and

+    mission critical applications that require provable dependability.

+

+    1 tab == 4 spaces!

+*/

+

+

+#ifndef FREERTOS_CONFIG_H

+#define FREERTOS_CONFIG_H

+

+/*-----------------------------------------------------------

+ * Application specific definitions.

+ *

+ * These definitions should be adjusted for your particular hardware and

+ * application requirements.

+ *

+ * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE

+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.

+ *

+ * See http://www.freertos.org/a00110.html.

+ *----------------------------------------------------------*/

+

+#include <stdint.h>

+extern uint32_t SystemCoreClock;

+

+#define configUSE_PREEMPTION			1

+#define configUSE_IDLE_HOOK				0

+#define configUSE_TICK_HOOK				1

+#define configCPU_CLOCK_HZ				( SystemCoreClock )

+#define configTICK_RATE_HZ				( ( portTickType ) 500 )

+#define configMAX_PRIORITIES			( ( unsigned portBASE_TYPE ) 5 )

+#define configMINIMAL_STACK_SIZE		( ( unsigned short ) 60 )

+#define configTOTAL_HEAP_SIZE			( ( size_t ) ( 11000 ) )

+#define configMAX_TASK_NAME_LEN			( 5 )

+#define configUSE_TRACE_FACILITY		1

+#define configUSE_16_BIT_TICKS			0

+#define configIDLE_SHOULD_YIELD			1

+#define configUSE_MUTEXES				1

+#define configQUEUE_REGISTRY_SIZE		8

+#define configCHECK_FOR_STACK_OVERFLOW	2

+#define configUSE_RECURSIVE_MUTEXES		1

+#define configUSE_MALLOC_FAILED_HOOK	1

+#define configUSE_APPLICATION_TASK_TAG	0

+#define configUSE_COUNTING_SEMAPHORES	1

+#define configGENERATE_RUN_TIME_STATS	0

+#define configUSE_QUEUE_SETS			1

+

+/* Co-routine definitions. */

+#define configUSE_CO_ROUTINES 			0

+#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )

+

+/* Software timer definitions. */

+#define configUSE_TIMERS				1

+#define configTIMER_TASK_PRIORITY		( 2 )

+#define configTIMER_QUEUE_LENGTH		5

+#define configTIMER_TASK_STACK_DEPTH	( 80 )

+

+/* Set the following definitions to 1 to include the API function, or zero

+to exclude the API function. */

+#define INCLUDE_vTaskPrioritySet		1

+#define INCLUDE_uxTaskPriorityGet		1

+#define INCLUDE_vTaskDelete				1

+#define INCLUDE_vTaskCleanUpResources	1

+#define INCLUDE_vTaskSuspend			1

+#define INCLUDE_vTaskDelayUntil			1

+#define INCLUDE_vTaskDelay				1

+#define INCLUDE_eTaskGetState			1

+

+/* Normal assert() semantics without relying on the provision of an assert.h

+header file. */

+#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }

+

+/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS

+standard names - or at least those used in the unmodified vector table. */

+#define vPortSVCHandler SVC_Handler

+#define xPortPendSVHandler PendSV_Handler

+#define xPortSysTickHandler SysTick_Handler

+

+/* The size of the global output buffer that is available for use when there

+are multiple command interpreters running at once (for example, one on a UART

+and one on TCP/IP).  This is done to prevent an output buffer being defined by

+each implementation - which would waste RAM.  In this case, there is only one

+command interpreter running. */

+#define configCOMMAND_INT_MAX_OUTPUT_SIZE 2048

+

+#endif /* FREERTOS_CONFIG_H */

+

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/config/conf_board.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/config/conf_board.h
new file mode 100644
index 0000000..dba80d7
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/config/conf_board.h
@@ -0,0 +1,47 @@
+/**

+ * \file

+ *

+ * \brief SAMD20 Xplained PRO board configuration.

+ *

+ * Copyright (c) 2012-2013 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

+ *

+ */

+

+#ifndef CONF_BOARD_H_INCLUDED

+#define CONF_BOARD_H_INCLUDED

+

+#endif /* CONF_BOARD_H_INCLUDED */

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/config/conf_clocks.h b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/config/conf_clocks.h
new file mode 100644
index 0000000..faed281
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/config/conf_clocks.h
@@ -0,0 +1,170 @@
+/**

+ * \file

+ *

+ * \brief SAM D20 Clock configuration

+ *

+ * Copyright (C) 2012-2013 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

+ *

+ */

+#include <clock.h>

+

+#ifndef CONF_CLOCKS_H_INCLUDED

+#  define CONF_CLOCKS_H_INCLUDED

+

+/* System clock bus configuration */

+#  define CONF_CLOCK_CPU_CLOCK_FAILURE_DETECT     true

+#  define CONF_CLOCK_FLASH_WAIT_STATES            0

+#  define CONF_CLOCK_CPU_DIVIDER                  SYSTEM_MAIN_CLOCK_DIV_1

+#  define CONF_CLOCK_APBA_DIVIDER                 SYSTEM_MAIN_CLOCK_DIV_1

+#  define CONF_CLOCK_APBB_DIVIDER                 SYSTEM_MAIN_CLOCK_DIV_1

+

+

+/* SYSTEM_CLOCK_SOURCE_OSC8M configuration - Internal 8MHz oscillator */

+#  define CONF_CLOCK_OSC8M_PRESCALER              SYSTEM_OSC8M_DIV_1

+#  define CONF_CLOCK_OSC8M_ON_DEMAND              true

+#  define CONF_CLOCK_OSC8M_RUN_IN_STANDBY         false

+

+/* SYSTEM_CLOCK_SOURCE_XOSC configuration - External clock/oscillator */

+#  define CONF_CLOCK_XOSC_ENABLE                  false

+#  define CONF_CLOCK_XOSC_EXTERNAL_CRYSTAL        SYSTEM_CLOCK_EXTERNAL_CRYSTAL

+#  define CONF_CLOCK_XOSC_EXTERNAL_FREQUENCY      12000000UL

+#  define CONF_CLOCK_XOSC_STARTUP_TIME            SYSTEM_XOSC_STARTUP_32768

+#  define CONF_CLOCK_XOSC_AUTO_GAIN_CONTROL       true

+#  define CONF_CLOCK_XOSC_ON_DEMAND               true

+#  define CONF_CLOCK_XOSC_RUN_IN_STANDBY          false

+

+/* SYSTEM_CLOCK_SOURCE_XOSC32K configuration - External 32KHz crystal/clock oscillator */

+#  define CONF_CLOCK_XOSC32K_ENABLE               false

+#  define CONF_CLOCK_XOSC32K_EXTERNAL_CRYSTAL     SYSTEM_CLOCK_EXTERNAL_CRYSTAL

+#  define CONF_CLOCK_XOSC32K_STARTUP_TIME         SYSTEM_XOSC32K_STARTUP_65536

+#  define CONF_CLOCK_XOSC32K_AUTO_AMPLITUDE_CONTROL  true

+#  define CONF_CLOCK_XOSC32K_ENABLE_1KHZ_OUPUT    false

+#  define CONF_CLOCK_XOSC32K_ENABLE_32KHZ_OUTPUT  true

+#  define CONF_CLOCK_XOSC32K_ON_DEMAND            true

+#  define CONF_CLOCK_XOSC32K_RUN_IN_STANDBY       false

+

+/* SYSTEM_CLOCK_SOURCE_OSC32K configuration - Internal 32KHz oscillator */

+#  define CONF_CLOCK_OSC32K_ENABLE                false

+#  define CONF_CLOCK_OSC32K_STARTUP_TIME          SYSTEM_OSC32K_STARTUP_128

+#  define CONF_CLOCK_OSC32K_ENABLE_1KHZ_OUTPUT    true

+#  define CONF_CLOCK_OSC32K_ENABLE_32KHZ_OUTPUT   true

+#  define CONF_CLOCK_OSC32K_ON_DEMAND             true

+#  define CONF_CLOCK_OSC32K_RUN_IN_STANDBY        false

+

+/* SYSTEM_CLOCK_SOURCE_DFLL configuration - Digital Frequency Locked Loop */

+#  define CONF_CLOCK_DFLL_ENABLE                  false

+#  define CONF_CLOCK_DFLL_LOOP_MODE               SYSTEM_CLOCK_DFLL_LOOP_MODE_OPEN

+#  define CONF_CLOCK_DFLL_ON_DEMAND               false

+#  define CONF_CLOCK_DFLL_RUN_IN_STANDBY          false

+

+/* DFLL open loop mode configuration */

+#  define CONF_CLOCK_DFLL_COARSE_VALUE            (0x1f / 4)

+#  define CONF_CLOCK_DFLL_FINE_VALUE              (0xff / 4)

+

+/* DFLL closed loop mode configuration */

+#  define CONF_CLOCK_DFLL_SOURCE_GCLK_GENERATOR   GCLK_GENERATOR_1

+#  define CONF_CLOCK_DFLL_MULTIPLY_FACTOR         6

+#  define CONF_CLOCK_DFLL_QUICK_LOCK              true

+#  define CONF_CLOCK_DFLL_TRACK_AFTER_FINE_LOCK   true

+#  define CONF_CLOCK_DFLL_KEEP_LOCK_ON_WAKEUP     true

+#  define CONF_CLOCK_DFLL_ENABLE_CHILL_CYCLE      true

+#  define CONF_CLOCK_DFLL_MAX_COARSE_STEP_SIZE    (0x1f / 4)

+#  define CONF_CLOCK_DFLL_MAX_FINE_STEP_SIZE      (0xff / 4)

+

+

+/* Set this to true to configure the GCLK when running clocks_init. If set to

+ * false, none of the GCLK generators will be configured in clocks_init(). */

+#  define CONF_CLOCK_CONFIGURE_GCLK               true

+

+/* Configure GCLK generator 0 (Main Clock) */

+#  define CONF_CLOCK_GCLK_0_ENABLE                true

+#  define CONF_CLOCK_GCLK_0_RUN_IN_STANDBY        false

+#  define CONF_CLOCK_GCLK_0_CLOCK_SOURCE          SYSTEM_CLOCK_SOURCE_OSC8M

+#  define CONF_CLOCK_GCLK_0_PRESCALER             1

+#  define CONF_CLOCK_GCLK_0_OUTPUT_ENABLE         false

+

+/* Configure GCLK generator 1 */

+#  define CONF_CLOCK_GCLK_1_ENABLE                false

+#  define CONF_CLOCK_GCLK_1_RUN_IN_STANDBY        false

+#  define CONF_CLOCK_GCLK_1_CLOCK_SOURCE          SYSTEM_CLOCK_SOURCE_OSC8M

+#  define CONF_CLOCK_GCLK_1_PRESCALER             1

+#  define CONF_CLOCK_GCLK_1_OUTPUT_ENABLE         false

+

+/* Configure GCLK generator 2 (RTC) */

+#  define CONF_CLOCK_GCLK_2_ENABLE                false

+#  define CONF_CLOCK_GCLK_2_RUN_IN_STANDBY        false

+#  define CONF_CLOCK_GCLK_2_CLOCK_SOURCE          SYSTEM_CLOCK_SOURCE_OSC32K

+#  define CONF_CLOCK_GCLK_2_PRESCALER             32

+#  define CONF_CLOCK_GCLK_2_OUTPUT_ENABLE         false

+

+/* Configure GCLK generator 3 */

+#  define CONF_CLOCK_GCLK_3_ENABLE                false

+#  define CONF_CLOCK_GCLK_3_RUN_IN_STANDBY        false

+#  define CONF_CLOCK_GCLK_3_CLOCK_SOURCE          SYSTEM_CLOCK_SOURCE_OSC8M

+#  define CONF_CLOCK_GCLK_3_PRESCALER             1

+#  define CONF_CLOCK_GCLK_3_OUTPUT_ENABLE         false

+

+/* Configure GCLK generator 4 */

+#  define CONF_CLOCK_GCLK_4_ENABLE                false

+#  define CONF_CLOCK_GCLK_4_RUN_IN_STANDBY        false

+#  define CONF_CLOCK_GCLK_4_CLOCK_SOURCE          SYSTEM_CLOCK_SOURCE_OSC8M

+#  define CONF_CLOCK_GCLK_4_PRESCALER             1

+#  define CONF_CLOCK_GCLK_4_OUTPUT_ENABLE         false

+

+/* Configure GCLK generator 5 */

+#  define CONF_CLOCK_GCLK_5_ENABLE                false

+#  define CONF_CLOCK_GCLK_5_RUN_IN_STANDBY        false

+#  define CONF_CLOCK_GCLK_5_CLOCK_SOURCE          SYSTEM_CLOCK_SOURCE_OSC8M

+#  define CONF_CLOCK_GCLK_5_PRESCALER             1

+#  define CONF_CLOCK_GCLK_5_OUTPUT_ENABLE         false

+

+/* Configure GCLK generator 6 */

+#  define CONF_CLOCK_GCLK_6_ENABLE                false

+#  define CONF_CLOCK_GCLK_6_RUN_IN_STANDBY        false

+#  define CONF_CLOCK_GCLK_6_CLOCK_SOURCE          SYSTEM_CLOCK_SOURCE_OSC8M

+#  define CONF_CLOCK_GCLK_6_PRESCALER             1

+#  define CONF_CLOCK_GCLK_6_OUTPUT_ENABLE         false

+

+/* Configure GCLK generator 7 */

+#  define CONF_CLOCK_GCLK_7_ENABLE                false

+#  define CONF_CLOCK_GCLK_7_RUN_IN_STANDBY        false

+#  define CONF_CLOCK_GCLK_7_CLOCK_SOURCE          SYSTEM_CLOCK_SOURCE_OSC8M

+#  define CONF_CLOCK_GCLK_7_PRESCALER             1

+#  define CONF_CLOCK_GCLK_7_OUTPUT_ENABLE         false

+

+#endif /* CONF_CLOCKS_H_INCLUDED */

+

diff --git a/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/main.c b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/main.c
new file mode 100644
index 0000000..e8f3ba8
--- /dev/null
+++ b/FreeRTOS/Demo/CORTEX_M0+_Atmel_SAMD20_XPlained/RTOSDemo/src/main.c
@@ -0,0 +1,213 @@
+/*

+    FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd.

+

+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.

+

+    ***************************************************************************

+     *                                                                       *

+     *    FreeRTOS provides completely free yet professionally developed,    *

+     *    robust, strictly quality controlled, supported, and cross          *

+     *    platform software that has become a de facto standard.             *

+     *                                                                       *

+     *    Help yourself get started quickly and support the FreeRTOS         *

+     *    project by purchasing a FreeRTOS tutorial book, reference          *

+     *    manual, or both from: http://www.FreeRTOS.org/Documentation        *

+     *                                                                       *

+     *    Thank you!                                                         *

+     *                                                                       *

+    ***************************************************************************

+

+    This file is part of the FreeRTOS distribution.

+

+    FreeRTOS is free software; you can redistribute it and/or modify it under

+    the terms of the GNU General Public License (version 2) as published by the

+    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.

+

+    >>! NOTE: The modification to the GPL is included to allow you to distribute

+    >>! a combined work that includes FreeRTOS without being obliged to provide

+    >>! the source code for proprietary components outside of the FreeRTOS

+    >>! kernel.

+

+    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY

+    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS

+    FOR A PARTICULAR PURPOSE.  Full license text is available from the following

+    link: http://www.freertos.org/a00114.html

+

+    1 tab == 4 spaces!

+

+    ***************************************************************************

+     *                                                                       *

+     *    Having a problem?  Start by reading the FAQ "My application does   *

+     *    not run, what could be wrong?"                                     *

+     *                                                                       *

+     *    http://www.FreeRTOS.org/FAQHelp.html                               *

+     *                                                                       *

+    ***************************************************************************

+

+    http://www.FreeRTOS.org - Documentation, books, training, latest versions,

+    license and Real Time Engineers Ltd. contact details.

+

+    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,

+    including FreeRTOS+Trace - an indispensable productivity tool, a DOS

+    compatible FAT file system, and our tiny thread aware UDP/IP stack.

+

+    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High

+    Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS

+    licenses offer ticketed support, indemnification and middleware.

+

+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety

+    engineered and independently SIL3 certified version for use in safety and

+    mission critical applications that require provable dependability.

+

+    1 tab == 4 spaces!

+*/

+

+/* FreeRTOS includes. */

+#include "FreeRTOS.h"

+#include "task.h"

+

+/* Library includes. */

+#include <asf.h>

+

+void usart_read_callback(const struct usart_module *const usart_module);

+void usart_write_callback(const struct usart_module *const usart_module);

+static void prvSetupHardware( void );

+void configure_usart(void);

+void configure_usart_callbacks(void);

+void vApplicationMallocFailedHook( void );

+void vApplicationIdleHook( void );

+void vApplicationStackOverflowHook( xTaskHandle pxTask, signed char *pcTaskName );

+void vApplicationTickHook( void );

+

+struct usart_module usart_instance;

+#define MAX_RX_BUFFER_LENGTH   5

+volatile uint8_t rx_buffer[MAX_RX_BUFFER_LENGTH];

+#define NUM 1024

+char cChars[ NUM ] = { 0 };

+

+void usart_read_callback(const struct usart_module *const usart_module)

+{

+	usart_write_buffer_job(&usart_instance, (uint8_t *)rx_buffer, MAX_RX_BUFFER_LENGTH);

+}

+

+void usart_write_callback(const struct usart_module *const usart_module)

+{

+	port_pin_toggle_output_level(LED_0_PIN);

+}

+

+void configure_usart(void)

+{

+	struct usart_config config_usart;

+	usart_get_config_defaults(&config_usart);

+	config_usart.baudrate    = 115200;

+	config_usart.mux_setting = EDBG_CDC_SERCOM_MUX_SETTING;

+	config_usart.pinmux_pad0 = EDBG_CDC_SERCOM_PINMUX_PAD0;

+	config_usart.pinmux_pad1 = EDBG_CDC_SERCOM_PINMUX_PAD1;

+	config_usart.pinmux_pad2 = EDBG_CDC_SERCOM_PINMUX_PAD2;

+	config_usart.pinmux_pad3 = EDBG_CDC_SERCOM_PINMUX_PAD3;

+	while (usart_init(&usart_instance,

+	EDBG_CDC_MODULE, &config_usart) != STATUS_OK) {

+	}

+	usart_enable(&usart_instance);

+}

+

+void configure_usart_callbacks(void)

+{

+	usart_register_callback(&usart_instance,

+	usart_write_callback, USART_CALLBACK_BUFFER_TRANSMITTED);

+	usart_register_callback(&usart_instance,

+	usart_read_callback, USART_CALLBACK_BUFFER_RECEIVED);

+	usart_enable_callback(&usart_instance, USART_CALLBACK_BUFFER_TRANSMITTED);

+	usart_enable_callback(&usart_instance, USART_CALLBACK_BUFFER_RECEIVED);

+}

+

+

+

+

+int main (void)

+{

+	prvSetupHardware();

+

+	configure_usart();

+	configure_usart_callbacks();

+	system_interrupt_enable_global();

+

+	uint8_t string[] = "Hello World!\r\n";

+	usart_write_buffer_job(&usart_instance, string, sizeof(string));

+

+

+

+	while (true) {

+		usart_read_buffer_job(&usart_instance,

+		(uint8_t *)rx_buffer, MAX_RX_BUFFER_LENGTH);

+	}

+

+	while (1) {

+		if (port_pin_get_input_level(BUTTON_0_PIN) == BUTTON_0_ACTIVE) {

+			port_pin_set_output_level(LED_0_PIN, LED_0_ACTIVE);

+		} else {

+			port_pin_set_output_level(LED_0_PIN, !LED_0_ACTIVE);

+		}

+	}

+}

+/*-----------------------------------------------------------*/

+

+static void prvSetupHardware( void )

+{

+	system_init();

+}

+/*-----------------------------------------------------------*/

+

+void vApplicationMallocFailedHook( void )

+{

+	/* vApplicationMallocFailedHook() will only be called if

+	configUSE_MALLOC_FAILED_HOOK is set to 1 in FreeRTOSConfig.h.  It is a hook

+	function that will get called if a call to pvPortMalloc() fails.

+	pvPortMalloc() is called internally by the kernel whenever a task, queue,

+	timer or semaphore is created.  It is also called by various parts of the

+	demo application.  If heap_1.c or heap_2.c are used, then the size of the

+	heap available to pvPortMalloc() is defined by configTOTAL_HEAP_SIZE in

+	FreeRTOSConfig.h, and the xPortGetFreeHeapSize() API function can be used

+	to query the size of free heap space that remains (although it does not

+	provide information on how the remaining heap might be fragmented). */

+	taskDISABLE_INTERRUPTS();

+	for( ;; );

+}

+/*-----------------------------------------------------------*/

+

+void vApplicationIdleHook( void )

+{

+	/* vApplicationIdleHook() will only be called if configUSE_IDLE_HOOK is set

+	to 1 in FreeRTOSConfig.h.  It will be called on each iteration of the idle

+	task.  It is essential that code added to this hook function never attempts

+	to block in any way (for example, call xQueueReceive() with a block time

+	specified, or call vTaskDelay()).  If the application makes use of the

+	vTaskDelete() API function (as this demo application does) then it is also

+	important that vApplicationIdleHook() is permitted to return to its calling

+	function, because it is the responsibility of the idle task to clean up

+	memory allocated by the kernel to any task that has since been deleted. */

+}

+/*-----------------------------------------------------------*/

+

+void vApplicationStackOverflowHook( xTaskHandle pxTask, signed char *pcTaskName )

+{

+	( void ) pcTaskName;

+	( void ) pxTask;

+

+	/* Run time stack overflow checking is performed if

+	configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2.  This hook

+	function is called if a stack overflow is detected. */

+	taskDISABLE_INTERRUPTS();

+	for( ;; );

+}

+/*-----------------------------------------------------------*/

+

+void vApplicationTickHook( void )

+{

+	/* This function will be called by each tick interrupt if

+	configUSE_TICK_HOOK is set to 1 in FreeRTOSConfig.h.  User code can be

+	added here, but the tick hook is called from an interrupt context, so

+	code must not attempt to block, and only the interrupt safe FreeRTOS API

+	functions can be used (those that end in FromISR()). */

+}

+