fix LPC812 PWM

Dependents:   IR_LED_Send

Fork of mbed-dev by mbed official

Files at this revision

API Documentation at this revision

Comitter:
mbed_official
Date:
Wed Mar 02 14:30:11 2016 +0000
Parent:
79:7f02dc905b68
Child:
81:8b5f63428415
Commit message:
Synchronized with git revision de3b14ec9234d586b155fd24badc22775489a3dc

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

latest changes to add arduino support, plus fixes for IOTSS BEID

Changed in this revision

targets/cmsis/TARGET_ARM_SSG/TARGET_IOTSS_BEID/CMSDK_BEID.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_IOTSS_BEID/SMM_MPS2.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_IOTSS_BEID/TOOLCHAIN_ARM_STD/MPS2.sct Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_IOTSS_BEID/TOOLCHAIN_ARM_STD/startup_MPS2.s Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_IOTSS_BEID/cmsis.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_IOTSS_BEID/cmsis_nvic.c Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_IOTSS_BEID/cmsis_nvic.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_IOTSS_BEID/peripherallink.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_IOTSS_BEID/system_CMSDK_BEID.c Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_IOTSS_BEID/system_CMSDK_BEID.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_BEID/CMSDK_BEID.h Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_BEID/SMM_MPS2.h Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_BEID/TOOLCHAIN_ARM_STD/MPS2.sct Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_BEID/TOOLCHAIN_ARM_STD/startup_MPS2.s Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_BEID/cmsis.h Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_BEID/cmsis_nvic.c Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_BEID/cmsis_nvic.h Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_BEID/peripherallink.h Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_BEID/system_CMSDK_BEID.c Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_BEID/system_CMSDK_BEID.h Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/CMSDK_CM0.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/SMM_MPS2.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/TOOLCHAIN_ARM_STD/MPS2.sct Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/TOOLCHAIN_ARM_STD/startup_MPS2.s Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/cmsis.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/cmsis_nvic.c Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/cmsis_nvic.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/peripherallink.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/system_CMSDK_CM0.c Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/system_CMSDK_CM0.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/CMSDK_CM0plus.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/SMM_MPS2.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/TOOLCHAIN_ARM_STD/MPS2.sct Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/TOOLCHAIN_ARM_STD/startup_MPS2.s Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/cmsis.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/cmsis_nvic.c Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/cmsis_nvic.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/peripherallink.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/system_CMSDK_CM0plus.c Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/system_CMSDK_CM0plus.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/CMSDK_CM3.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/SMM_MPS2.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/TOOLCHAIN_ARM_STD/MPS2.sct Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/TOOLCHAIN_ARM_STD/startup_MPS2.s Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/cmsis.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/cmsis_nvic.c Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/cmsis_nvic.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/peripherallink.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/system_CMSDK_CM3.c Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/system_CMSDK_CM3.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/CMSDK_CM4.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/SMM_MPS2.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/TOOLCHAIN_ARM_STD/MPS2.sct Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/TOOLCHAIN_ARM_STD/startup_MPS2.s Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/cmsis.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/cmsis_nvic.c Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/cmsis_nvic.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/peripherallink.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/system_CMSDK_CM4.c Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/system_CMSDK_CM4.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/CMSDK_CM7.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/SMM_MPS2.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/TOOLCHAIN_ARM_STD/MPS2.sct Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/TOOLCHAIN_ARM_STD/startup_CMSDK_CM7.s Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/TOOLCHAIN_GCC_ARM/gcc_arm.ld Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/TOOLCHAIN_GCC_ARM/startup_ARMCM7.s Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/cmsis_nvic.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/system_CMSDK_CM7.c Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/system_CMSDK_CM7.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/PeripheralNames.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/PinNames.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/PortNames.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/SDK/ETH_MPS2.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/SDK/ETH_MPS2.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/SDK/fpga.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/SDK/fpga.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/SDK/mps2_ethernet_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/SDK/mps2_ethernet_api.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/analogin_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/device.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/ethernet_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/gpio_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/gpio_irq_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/gpio_object.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/i2c_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/objects.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/pinmap.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/port_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/serial_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/spi_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/spi_def.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/us_ticker.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_MPS2/PeripheralNames.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_MPS2/PinNames.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_MPS2/SDK/ETH_MPS2.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_MPS2/SDK/fpga.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_MPS2/SDK/mps2_ethernet_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_MPS2/analogin_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_MPS2/device.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_MPS2/ethernet_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_MPS2/gpio_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_MPS2/gpio_irq_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_MPS2/gpio_object.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_MPS2/i2c_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_MPS2/objects.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_MPS2/pinmap.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_MPS2/serial_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_MPS2/spi_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_ARM_SSG/TARGET_MPS2/us_ticker.c Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_IOTSS_BEID/CMSDK_BEID.h	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,793 @@
+/* MPS2 CMSIS Library
+*
+* Copyright (c) 2006-2016 ARM Limited
+* All rights reserved.
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
+* specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
+*******************************************************************************
+* @file     CMSDK_BEID.h
+* @brief    CMSIS Core Peripheral Access Layer Header File for
+*           CMSDK_BEID Device
+*
+*******************************************************************************/
+
+
+#ifndef CMSDK_BEID_H
+#define CMSDK_BEID_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+/* -------------------------  Interrupt Number Definition  ------------------------ */
+
+typedef enum IRQn
+{
+/* -------------------  Cortex-M3 Processor Exceptions Numbers  ------------------- */
+  NonMaskableInt_IRQn           = -14,        /*  2 Non Maskable Interrupt          */
+  HardFault_IRQn                = -13,        /*  3 HardFault Interrupt             */
+  MemoryManagement_IRQn         = -12,        /*  4 Memory Management Interrupt     */
+  BusFault_IRQn                 = -11,        /*  5 Bus Fault Interrupt             */
+  UsageFault_IRQn               = -10,        /*  6 Usage Fault Interrupt           */
+  SVCall_IRQn                   =  -5,        /* 11 SV Call Interrupt               */
+  DebugMonitor_IRQn             =  -4,        /* 12 Debug Monitor Interrupt         */
+  PendSV_IRQn                   =  -2,        /* 14 Pend SV Interrupt               */
+  SysTick_IRQn                  =  -1,        /* 15 System Tick Interrupt           */
+
+/* ----------------------  CMSDK_CM3 Specific Interrupt Numbers  ------------------ */
+  UART0_IRQn                    = 0,       /* UART 0 RX and TX Combined Interrupt   */
+  Spare_IRQn                    = 1,       /* Undefined                             */
+  UART1_IRQn                    = 2,       /* UART 1 RX and TX Combined Interrupt   */
+  I2C0_IRQn                     = 3,       /* I2C 0 Interrupt                       */
+  I2C1_IRQn                     = 4,       /* I2C 1 Interrupt                       */
+  RTC_IRQn                      = 5,       /* RTC Interrupt                         */
+  PORT0_ALL_IRQn                = 6,       /* GPIO Port 0 combined Interrupt        */
+  PORT1_ALL_IRQn                = 7,       /* GPIO Port 1 combined Interrupt        */
+  TIMER0_IRQn                   = 8,       /* TIMER 0 Interrupt                     */
+  TIMER1_IRQn                   = 9,       /* TIMER 1 Interrupt                     */
+  DUALTIMER_IRQn                = 10,      /* Dual Timer Interrupt                  */
+  SPI0_IRQn                     = 11,      /* SPI 0 Interrupt                       */
+  UARTOVF_IRQn                  = 12,      /* UART 0,1,2 Overflow Interrupt         */
+  SPI1_IRQn                     = 13,      /* SPI 1 Interrupt                       */
+  RESERVED0_IRQn                = 14,      /* Reserved                              */
+  TSC_IRQn                      = 15,      /* Touch Screen Interrupt                */
+  PORT01_0_IRQn                 = 16,      /* GPIO Port 0 pin 0 Handler             */
+  PORT01_1_IRQn                 = 17,      /* GPIO Port 0 pin 1 Handler             */
+  PORT01_2_IRQn                 = 18,      /* GPIO Port 0 pin 2 Handler             */
+  PORT01_3_IRQn                 = 19,      /* GPIO Port 0 pin 3 Handler             */
+  PORT01_4_IRQn                 = 20,      /* GPIO Port 0 pin 4 Handler             */
+  PORT01_5_IRQn                 = 21,      /* GPIO Port 0 pin 5 Handler             */
+  PORT01_6_IRQn                 = 22,      /* GPIO Port 0 pin 6 Handler             */
+  PORT01_7_IRQn                 = 23,      /* GPIO Port 0 pin 7 Handler             */
+  PORT01_8_IRQn                 = 24,      /* GPIO Port 0 pin 8 Handler             */
+  PORT01_9_IRQn                 = 25,      /* GPIO Port 0 pin 9 Handler             */
+  PORT01_10_IRQn                = 26,      /* GPIO Port 0 pin 10 Handler            */
+  PORT01_11_IRQn                = 27,      /* GPIO Port 0 pin 11 Handler            */
+  PORT01_12_IRQn                = 28,      /* GPIO Port 0 pin 12 Handler            */
+  PORT01_13_IRQn                = 29,      /* GPIO Port 0 pin 13 Handler            */
+  PORT01_14_IRQn                = 30,      /* GPIO Port 0 pin 14 Handler            */
+  PORT01_15_IRQn                = 31,      /* GPIO Port 0 pin 15 Handler            */
+  SYSERROR_IRQn                 = 32,      /* System Error Interrupt                */
+  EFLASH_IRQn                   = 33,      /* Embedded Flash Interrupt              */
+  RESERVED1_IRQn                = 34,      /* Reserved                              */
+  RESERVED2_IRQn                = 35,      /* Reserved                              */
+  RESERVED3_IRQn                = 36,      /* Reserved                              */
+  RESERVED4_IRQn                = 37,      /* Reserved                              */
+  RESERVED5_IRQn                = 38,      /* Reserved                              */
+  RESERVED6_IRQn                = 39,      /* Reserved                              */
+  RESERVED7_IRQn                = 40,      /* Reserved                              */
+  RESERVED8_IRQn                = 41,      /* Reserved                              */
+  PORT2_ALL_IRQn                = 42,      /* GPIO Port 2 combined Interrupt        */
+  PORT3_ALL_IRQn                = 43,      /* GPIO Port 3 combined Interrupt        */
+  TRNG_IRQn                     = 44,      /* Random number generator Interrupt     */
+  UART2_IRQn                    = 45,      /* UART 2 RX and TX Combined Interrupt   */
+  UART3_IRQn                    = 46,      /* UART 3 RX and TX Combined Interrupt   */
+  ETHERNET_IRQn                 = 47,      /* Ethernet interrupt     t.b.a.         */
+  I2S_IRQn                      = 48,      /* I2S Interrupt                         */
+  MPS2_SPI0_IRQn                = 49,      /* SPI Interrupt (spi header)            */
+  MPS2_SPI1_IRQn                = 50,      /* SPI Interrupt (clcd)                  */
+  MPS2_SPI2_IRQn                = 51,      /* SPI Interrupt (spi 1 ADC replacement) */
+  MPS2_SPI3_IRQn                = 52,      /* SPI Interrupt (spi 0 shield 0 replacement) */
+  MPS2_SPI4_IRQn                = 53       /* SPI Interrupt  (shield 1)             */
+} IRQn_Type;
+
+
+/* ================================================================================ */
+/* ================      Processor and Core Peripheral Section     ================ */
+/* ================================================================================ */
+
+/* --------  Configuration of the Cortex-M3 Processor and Core Peripherals  ------- */
+#define __BEID_REV                 0x0201      /* Core revision r2p1                              */
+#define __MPU_PRESENT             1           /* MPU present or not                              */
+#define __NVIC_PRIO_BITS          3           /* Number of Bits used for Priority Levels         */
+#define __Vendor_SysTickConfig    0           /* Set to 1 if different SysTick Config is used    */
+
+#include <core_cm3.h>                         /* Processor and core peripherals                  */
+#include "system_CMSDK_BEID.h"                 /* System Header                                   */
+
+
+/* ================================================================================ */
+/* ================       Device Specific Peripheral Section       ================ */
+/* ================================================================================ */
+
+/* -------------------  Start of section using anonymous unions  ------------------ */
+#if defined ( __CC_ARM   )
+  #pragma push
+#pragma anon_unions
+#elif defined(__ICCARM__)
+  #pragma language=extended
+#elif defined(__GNUC__)
+  /* anonymous unions are enabled by default */
+#elif defined(__TMS470__)
+/* anonymous unions are enabled by default */
+#elif defined(__TASKING__)
+  #pragma warning 586
+#else
+  #warning Not supported compiler type
+#endif
+
+/*------------- Universal Asynchronous Receiver Transmitter (UART) -----------*/
+typedef struct
+{
+  __IO   uint32_t  DATA;                     /* Offset: 0x000 (R/W) Data Register    */
+  __IO   uint32_t  STATE;                    /* Offset: 0x004 (R/W) Status Register  */
+  __IO   uint32_t  CTRL;                     /* Offset: 0x008 (R/W) Control Register */
+  union {
+    __I    uint32_t  INTSTATUS;              /* Offset: 0x00C (R/ ) Interrupt Status Register */
+    __O    uint32_t  INTCLEAR;               /* Offset: 0x00C ( /W) Interrupt Clear Register  */
+    };
+  __IO   uint32_t  BAUDDIV;                  /* Offset: 0x010 (R/W) Baudrate Divider Register */
+
+} CMSDK_UART_TypeDef;
+
+/* CMSDK_UART DATA Register Definitions */
+
+#define CMSDK_UART_DATA_Pos               0                                             /* CMSDK_UART_DATA_Pos: DATA Position */
+#define CMSDK_UART_DATA_Msk              (0xFFul << CMSDK_UART_DATA_Pos)                /* CMSDK_UART DATA: DATA Mask */
+
+#define CMSDK_UART_STATE_RXOR_Pos         3                                             /* CMSDK_UART STATE: RXOR Position */
+#define CMSDK_UART_STATE_RXOR_Msk         (0x1ul << CMSDK_UART_STATE_RXOR_Pos)          /* CMSDK_UART STATE: RXOR Mask */
+
+#define CMSDK_UART_STATE_TXOR_Pos         2                                             /* CMSDK_UART STATE: TXOR Position */
+#define CMSDK_UART_STATE_TXOR_Msk         (0x1ul << CMSDK_UART_STATE_TXOR_Pos)          /* CMSDK_UART STATE: TXOR Mask */
+
+#define CMSDK_UART_STATE_RXBF_Pos         1                                             /* CMSDK_UART STATE: RXBF Position */
+#define CMSDK_UART_STATE_RXBF_Msk         (0x1ul << CMSDK_UART_STATE_RXBF_Pos)          /* CMSDK_UART STATE: RXBF Mask */
+
+#define CMSDK_UART_STATE_TXBF_Pos         0                                             /* CMSDK_UART STATE: TXBF Position */
+#define CMSDK_UART_STATE_TXBF_Msk         (0x1ul << CMSDK_UART_STATE_TXBF_Pos )         /* CMSDK_UART STATE: TXBF Mask */
+
+#define CMSDK_UART_CTRL_HSTM_Pos          6                                             /* CMSDK_UART CTRL: HSTM Position */
+#define CMSDK_UART_CTRL_HSTM_Msk          (0x01ul << CMSDK_UART_CTRL_HSTM_Pos)          /* CMSDK_UART CTRL: HSTM Mask */
+
+#define CMSDK_UART_CTRL_RXORIRQEN_Pos     5                                             /* CMSDK_UART CTRL: RXORIRQEN Position */
+#define CMSDK_UART_CTRL_RXORIRQEN_Msk     (0x01ul << CMSDK_UART_CTRL_RXORIRQEN_Pos)     /* CMSDK_UART CTRL: RXORIRQEN Mask */
+
+#define CMSDK_UART_CTRL_TXORIRQEN_Pos     4                                             /* CMSDK_UART CTRL: TXORIRQEN Position */
+#define CMSDK_UART_CTRL_TXORIRQEN_Msk     (0x01ul << CMSDK_UART_CTRL_TXORIRQEN_Pos)     /* CMSDK_UART CTRL: TXORIRQEN Mask */
+
+#define CMSDK_UART_CTRL_RXIRQEN_Pos       3                                             /* CMSDK_UART CTRL: RXIRQEN Position */
+#define CMSDK_UART_CTRL_RXIRQEN_Msk       (0x01ul << CMSDK_UART_CTRL_RXIRQEN_Pos)       /* CMSDK_UART CTRL: RXIRQEN Mask */
+
+#define CMSDK_UART_CTRL_TXIRQEN_Pos       2                                             /* CMSDK_UART CTRL: TXIRQEN Position */
+#define CMSDK_UART_CTRL_TXIRQEN_Msk       (0x01ul << CMSDK_UART_CTRL_TXIRQEN_Pos)       /* CMSDK_UART CTRL: TXIRQEN Mask */
+
+#define CMSDK_UART_CTRL_RXEN_Pos          1                                             /* CMSDK_UART CTRL: RXEN Position */
+#define CMSDK_UART_CTRL_RXEN_Msk          (0x01ul << CMSDK_UART_CTRL_RXEN_Pos)          /* CMSDK_UART CTRL: RXEN Mask */
+
+#define CMSDK_UART_CTRL_TXEN_Pos          0                                             /* CMSDK_UART CTRL: TXEN Position */
+#define CMSDK_UART_CTRL_TXEN_Msk          (0x01ul << CMSDK_UART_CTRL_TXEN_Pos)          /* CMSDK_UART CTRL: TXEN Mask */
+
+#define CMSDK_UART_INTSTATUS_RXORIRQ_Pos  3                                             /* CMSDK_UART CTRL: RXORIRQ Position */
+#define CMSDK_UART_CTRL_RXORIRQ_Msk       (0x01ul << CMSDK_UART_INTSTATUS_RXORIRQ_Pos)  /* CMSDK_UART CTRL: RXORIRQ Mask */
+
+#define CMSDK_UART_CTRL_TXORIRQ_Pos       2                                             /* CMSDK_UART CTRL: TXORIRQ Position */
+#define CMSDK_UART_CTRL_TXORIRQ_Msk       (0x01ul << CMSDK_UART_CTRL_TXORIRQ_Pos)       /* CMSDK_UART CTRL: TXORIRQ Mask */
+
+#define CMSDK_UART_CTRL_RXIRQ_Pos         1                                             /* CMSDK_UART CTRL: RXIRQ Position */
+#define CMSDK_UART_CTRL_RXIRQ_Msk         (0x01ul << CMSDK_UART_CTRL_RXIRQ_Pos)         /* CMSDK_UART CTRL: RXIRQ Mask */
+
+#define CMSDK_UART_CTRL_TXIRQ_Pos         0                                             /* CMSDK_UART CTRL: TXIRQ Position */
+#define CMSDK_UART_CTRL_TXIRQ_Msk         (0x01ul << CMSDK_UART_CTRL_TXIRQ_Pos)         /* CMSDK_UART CTRL: TXIRQ Mask */
+
+#define CMSDK_UART_BAUDDIV_Pos            0                                             /* CMSDK_UART BAUDDIV: BAUDDIV Position */
+#define CMSDK_UART_BAUDDIV_Msk           (0xFFFFFul << CMSDK_UART_BAUDDIV_Pos)          /* CMSDK_UART BAUDDIV: BAUDDIV Mask */
+
+
+/*----------------------------- Timer (TIMER) -------------------------------*/
+typedef struct
+{
+  __IO   uint32_t  CTRL;                     /* Offset: 0x000 (R/W) Control Register */
+  __IO   uint32_t  VALUE;                    /* Offset: 0x004 (R/W) Current Value Register */
+  __IO   uint32_t  RELOAD;                   /* Offset: 0x008 (R/W) Reload Value Register */
+  union {
+    __I    uint32_t  INTSTATUS;              /* Offset: 0x00C (R/ ) Interrupt Status Register */
+    __O    uint32_t  INTCLEAR;               /* Offset: 0x00C ( /W) Interrupt Clear Register */
+    };
+
+} CMSDK_TIMER_TypeDef;
+
+/* CMSDK_TIMER CTRL Register Definitions */
+
+#define CMSDK_TIMER_CTRL_IRQEN_Pos          3                                              /* CMSDK_TIMER CTRL: IRQEN Position */
+#define CMSDK_TIMER_CTRL_IRQEN_Msk          (0x01ul << CMSDK_TIMER_CTRL_IRQEN_Pos)         /* CMSDK_TIMER CTRL: IRQEN Mask */
+
+#define CMSDK_TIMER_CTRL_SELEXTCLK_Pos      2                                              /* CMSDK_TIMER CTRL: SELEXTCLK Position */
+#define CMSDK_TIMER_CTRL_SELEXTCLK_Msk      (0x01ul << CMSDK_TIMER_CTRL_SELEXTCLK_Pos)     /* CMSDK_TIMER CTRL: SELEXTCLK Mask */
+
+#define CMSDK_TIMER_CTRL_SELEXTEN_Pos       1                                              /* CMSDK_TIMER CTRL: SELEXTEN Position */
+#define CMSDK_TIMER_CTRL_SELEXTEN_Msk       (0x01ul << CMSDK_TIMER_CTRL_SELEXTEN_Pos)      /* CMSDK_TIMER CTRL: SELEXTEN Mask */
+
+#define CMSDK_TIMER_CTRL_EN_Pos             0                                              /* CMSDK_TIMER CTRL: EN Position */
+#define CMSDK_TIMER_CTRL_EN_Msk             (0x01ul << CMSDK_TIMER_CTRL_EN_Pos)            /* CMSDK_TIMER CTRL: EN Mask */
+
+#define CMSDK_TIMER_VAL_CURRENT_Pos         0                                              /* CMSDK_TIMER VALUE: CURRENT Position */
+#define CMSDK_TIMER_VAL_CURRENT_Msk         (0xFFFFFFFFul << CMSDK_TIMER_VAL_CURRENT_Pos)  /* CMSDK_TIMER VALUE: CURRENT Mask */
+
+#define CMSDK_TIMER_RELOAD_VAL_Pos          0                                              /* CMSDK_TIMER RELOAD: RELOAD Position */
+#define CMSDK_TIMER_RELOAD_VAL_Msk          (0xFFFFFFFFul << CMSDK_TIMER_RELOAD_VAL_Pos)   /* CMSDK_TIMER RELOAD: RELOAD Mask */
+
+#define CMSDK_TIMER_INTSTATUS_Pos           0                                              /* CMSDK_TIMER INTSTATUS: INTSTATUSPosition */
+#define CMSDK_TIMER_INTSTATUS_Msk           (0x01ul << CMSDK_TIMER_INTSTATUS_Pos)          /* CMSDK_TIMER INTSTATUS: INTSTATUSMask */
+
+#define CMSDK_TIMER_INTCLEAR_Pos            0                                              /* CMSDK_TIMER INTCLEAR: INTCLEAR Position */
+#define CMSDK_TIMER_INTCLEAR_Msk            (0x01ul << CMSDK_TIMER_INTCLEAR_Pos)           /* CMSDK_TIMER INTCLEAR: INTCLEAR Mask */
+
+
+/*------------- Timer (TIM) --------------------------------------------------*/
+typedef struct
+{
+  __IO uint32_t Timer1Load;                  /* Offset: 0x000 (R/W) Timer 1 Load */
+  __I  uint32_t Timer1Value;                 /* Offset: 0x004 (R/ ) Timer 1 Counter Current Value */
+  __IO uint32_t Timer1Control;               /* Offset: 0x008 (R/W) Timer 1 Control */
+  __O  uint32_t Timer1IntClr;                /* Offset: 0x00C ( /W) Timer 1 Interrupt Clear */
+  __I  uint32_t Timer1RIS;                   /* Offset: 0x010 (R/ ) Timer 1 Raw Interrupt Status */
+  __I  uint32_t Timer1MIS;                   /* Offset: 0x014 (R/ ) Timer 1 Masked Interrupt Status */
+  __IO uint32_t Timer1BGLoad;                /* Offset: 0x018 (R/W) Background Load Register */
+       uint32_t RESERVED0;
+  __IO uint32_t Timer2Load;                  /* Offset: 0x020 (R/W) Timer 2 Load */
+  __I  uint32_t Timer2Value;                 /* Offset: 0x024 (R/ ) Timer 2 Counter Current Value */
+  __IO uint32_t Timer2Control;               /* Offset: 0x028 (R/W) Timer 2 Control */
+  __O  uint32_t Timer2IntClr;                /* Offset: 0x02C ( /W) Timer 2 Interrupt Clear */
+  __I  uint32_t Timer2RIS;                   /* Offset: 0x030 (R/ ) Timer 2 Raw Interrupt Status */
+  __I  uint32_t Timer2MIS;                   /* Offset: 0x034 (R/ ) Timer 2 Masked Interrupt Status */
+  __IO uint32_t Timer2BGLoad;                /* Offset: 0x038 (R/W) Background Load Register */
+       uint32_t RESERVED1[945];
+  __IO uint32_t ITCR;                        /* Offset: 0xF00 (R/W) Integration Test Control Register */
+  __O  uint32_t ITOP;                        /* Offset: 0xF04 ( /W) Integration Test Output Set Register */
+} CMSDK_DUALTIMER_BOTH_TypeDef;
+
+#define CMSDK_DUALTIMER1_LOAD_Pos            0                                                /* CMSDK_DUALTIMER1 LOAD: LOAD Position */
+#define CMSDK_DUALTIMER1_LOAD_Msk            (0xFFFFFFFFul << CMSDK_DUALTIMER1_LOAD_Pos)      /* CMSDK_DUALTIMER1 LOAD: LOAD Mask */
+
+#define CMSDK_DUALTIMER1_VALUE_Pos           0                                                /* CMSDK_DUALTIMER1 VALUE: VALUE Position */
+#define CMSDK_DUALTIMER1_VALUE_Msk           (0xFFFFFFFFul << CMSDK_DUALTIMER1_VALUE_Pos)     /* CMSDK_DUALTIMER1 VALUE: VALUE Mask */
+
+#define CMSDK_DUALTIMER1_CTRL_EN_Pos         7                                                /* CMSDK_DUALTIMER1 CTRL_EN: CTRL Enable Position */
+#define CMSDK_DUALTIMER1_CTRL_EN_Msk         (0x1ul << CMSDK_DUALTIMER1_CTRL_EN_Pos)          /* CMSDK_DUALTIMER1 CTRL_EN: CTRL Enable Mask */
+
+#define CMSDK_DUALTIMER1_CTRL_MODE_Pos       6                                                /* CMSDK_DUALTIMER1 CTRL_MODE: CTRL MODE Position */
+#define CMSDK_DUALTIMER1_CTRL_MODE_Msk       (0x1ul << CMSDK_DUALTIMER1_CTRL_MODE_Pos)        /* CMSDK_DUALTIMER1 CTRL_MODE: CTRL MODE Mask */
+
+#define CMSDK_DUALTIMER1_CTRL_INTEN_Pos      5                                                /* CMSDK_DUALTIMER1 CTRL_INTEN: CTRL Int Enable Position */
+#define CMSDK_DUALTIMER1_CTRL_INTEN_Msk      (0x1ul << CMSDK_DUALTIMER1_CTRL_INTEN_Pos)       /* CMSDK_DUALTIMER1 CTRL_INTEN: CTRL Int Enable Mask */
+
+#define CMSDK_DUALTIMER1_CTRL_PRESCALE_Pos   2                                                /* CMSDK_DUALTIMER1 CTRL_PRESCALE: CTRL PRESCALE Position */
+#define CMSDK_DUALTIMER1_CTRL_PRESCALE_Msk   (0x3ul << CMSDK_DUALTIMER1_CTRL_PRESCALE_Pos)    /* CMSDK_DUALTIMER1 CTRL_PRESCALE: CTRL PRESCALE Mask */
+
+#define CMSDK_DUALTIMER1_CTRL_SIZE_Pos       1                                                /* CMSDK_DUALTIMER1 CTRL_SIZE: CTRL SIZE Position */
+#define CMSDK_DUALTIMER1_CTRL_SIZE_Msk       (0x1ul << CMSDK_DUALTIMER1_CTRL_SIZE_Pos)        /* CMSDK_DUALTIMER1 CTRL_SIZE: CTRL SIZE Mask */
+
+#define CMSDK_DUALTIMER1_CTRL_ONESHOOT_Pos   0                                                /* CMSDK_DUALTIMER1 CTRL_ONESHOOT: CTRL ONESHOOT Position */
+#define CMSDK_DUALTIMER1_CTRL_ONESHOOT_Msk   (0x1ul << CMSDK_DUALTIMER1_CTRL_ONESHOOT_Pos)    /* CMSDK_DUALTIMER1 CTRL_ONESHOOT: CTRL ONESHOOT Mask */
+
+#define CMSDK_DUALTIMER1_INTCLR_Pos          0                                                /* CMSDK_DUALTIMER1 INTCLR: INT Clear Position */
+#define CMSDK_DUALTIMER1_INTCLR_Msk          (0x1ul << CMSDK_DUALTIMER1_INTCLR_Pos)           /* CMSDK_DUALTIMER1 INTCLR: INT Clear  Mask */
+
+#define CMSDK_DUALTIMER1_RAWINTSTAT_Pos      0                                                /* CMSDK_DUALTIMER1 RAWINTSTAT: Raw Int Status Position */
+#define CMSDK_DUALTIMER1_RAWINTSTAT_Msk      (0x1ul << CMSDK_DUALTIMER1_RAWINTSTAT_Pos)       /* CMSDK_DUALTIMER1 RAWINTSTAT: Raw Int Status Mask */
+
+#define CMSDK_DUALTIMER1_MASKINTSTAT_Pos     0                                                /* CMSDK_DUALTIMER1 MASKINTSTAT: Mask Int Status Position */
+#define CMSDK_DUALTIMER1_MASKINTSTAT_Msk     (0x1ul << CMSDK_DUALTIMER1_MASKINTSTAT_Pos)      /* CMSDK_DUALTIMER1 MASKINTSTAT: Mask Int Status Mask */
+
+#define CMSDK_DUALTIMER1_BGLOAD_Pos          0                                                /* CMSDK_DUALTIMER1 BGLOAD: Background Load Position */
+#define CMSDK_DUALTIMER1_BGLOAD_Msk          (0xFFFFFFFFul << CMSDK_DUALTIMER1_BGLOAD_Pos)    /* CMSDK_DUALTIMER1 BGLOAD: Background Load Mask */
+
+#define CMSDK_DUALTIMER2_LOAD_Pos            0                                                /* CMSDK_DUALTIMER2 LOAD: LOAD Position */
+#define CMSDK_DUALTIMER2_LOAD_Msk            (0xFFFFFFFFul << CMSDK_DUALTIMER2_LOAD_Pos)      /* CMSDK_DUALTIMER2 LOAD: LOAD Mask */
+
+#define CMSDK_DUALTIMER2_VALUE_Pos           0                                                /* CMSDK_DUALTIMER2 VALUE: VALUE Position */
+#define CMSDK_DUALTIMER2_VALUE_Msk           (0xFFFFFFFFul << CMSDK_DUALTIMER2_VALUE_Pos)     /* CMSDK_DUALTIMER2 VALUE: VALUE Mask */
+
+#define CMSDK_DUALTIMER2_CTRL_EN_Pos         7                                                /* CMSDK_DUALTIMER2 CTRL_EN: CTRL Enable Position */
+#define CMSDK_DUALTIMER2_CTRL_EN_Msk         (0x1ul << CMSDK_DUALTIMER2_CTRL_EN_Pos)          /* CMSDK_DUALTIMER2 CTRL_EN: CTRL Enable Mask */
+
+#define CMSDK_DUALTIMER2_CTRL_MODE_Pos       6                                                /* CMSDK_DUALTIMER2 CTRL_MODE: CTRL MODE Position */
+#define CMSDK_DUALTIMER2_CTRL_MODE_Msk       (0x1ul << CMSDK_DUALTIMER2_CTRL_MODE_Pos)        /* CMSDK_DUALTIMER2 CTRL_MODE: CTRL MODE Mask */
+
+#define CMSDK_DUALTIMER2_CTRL_INTEN_Pos      5                                                /* CMSDK_DUALTIMER2 CTRL_INTEN: CTRL Int Enable Position */
+#define CMSDK_DUALTIMER2_CTRL_INTEN_Msk      (0x1ul << CMSDK_DUALTIMER2_CTRL_INTEN_Pos)       /* CMSDK_DUALTIMER2 CTRL_INTEN: CTRL Int Enable Mask */
+
+#define CMSDK_DUALTIMER2_CTRL_PRESCALE_Pos   2                                                /* CMSDK_DUALTIMER2 CTRL_PRESCALE: CTRL PRESCALE Position */
+#define CMSDK_DUALTIMER2_CTRL_PRESCALE_Msk   (0x3ul << CMSDK_DUALTIMER2_CTRL_PRESCALE_Pos)    /* CMSDK_DUALTIMER2 CTRL_PRESCALE: CTRL PRESCALE Mask */
+
+#define CMSDK_DUALTIMER2_CTRL_SIZE_Pos       1                                                /* CMSDK_DUALTIMER2 CTRL_SIZE: CTRL SIZE Position */
+#define CMSDK_DUALTIMER2_CTRL_SIZE_Msk       (0x1ul << CMSDK_DUALTIMER2_CTRL_SIZE_Pos)        /* CMSDK_DUALTIMER2 CTRL_SIZE: CTRL SIZE Mask */
+
+#define CMSDK_DUALTIMER2_CTRL_ONESHOOT_Pos   0                                                /* CMSDK_DUALTIMER2 CTRL_ONESHOOT: CTRL ONESHOOT Position */
+#define CMSDK_DUALTIMER2_CTRL_ONESHOOT_Msk   (0x1ul << CMSDK_DUALTIMER2_CTRL_ONESHOOT_Pos)    /* CMSDK_DUALTIMER2 CTRL_ONESHOOT: CTRL ONESHOOT Mask */
+
+#define CMSDK_DUALTIMER2_INTCLR_Pos          0                                                /* CMSDK_DUALTIMER2 INTCLR: INT Clear Position */
+#define CMSDK_DUALTIMER2_INTCLR_Msk          (0x1ul << CMSDK_DUALTIMER2_INTCLR_Pos)           /* CMSDK_DUALTIMER2 INTCLR: INT Clear  Mask */
+
+#define CMSDK_DUALTIMER2_RAWINTSTAT_Pos      0                                                /* CMSDK_DUALTIMER2 RAWINTSTAT: Raw Int Status Position */
+#define CMSDK_DUALTIMER2_RAWINTSTAT_Msk      (0x1ul << CMSDK_DUALTIMER2_RAWINTSTAT_Pos)       /* CMSDK_DUALTIMER2 RAWINTSTAT: Raw Int Status Mask */
+
+#define CMSDK_DUALTIMER2_MASKINTSTAT_Pos     0                                                /* CMSDK_DUALTIMER2 MASKINTSTAT: Mask Int Status Position */
+#define CMSDK_DUALTIMER2_MASKINTSTAT_Msk     (0x1ul << CMSDK_DUALTIMER2_MASKINTSTAT_Pos)      /* CMSDK_DUALTIMER2 MASKINTSTAT: Mask Int Status Mask */
+
+#define CMSDK_DUALTIMER2_BGLOAD_Pos          0                                                /* CMSDK_DUALTIMER2 BGLOAD: Background Load Position */
+#define CMSDK_DUALTIMER2_BGLOAD_Msk          (0xFFFFFFFFul << CMSDK_DUALTIMER2_BGLOAD_Pos)    /* CMSDK_DUALTIMER2 BGLOAD: Background Load Mask */
+
+
+typedef struct
+{
+  __IO uint32_t TimerLoad;                   /* Offset: 0x000 (R/W) Timer Load */
+  __I  uint32_t TimerValue;                  /* Offset: 0x000 (R/W) Timer Counter Current Value */
+  __IO uint32_t TimerControl;                /* Offset: 0x000 (R/W) Timer Control */
+  __O  uint32_t TimerIntClr;                 /* Offset: 0x000 (R/W) Timer Interrupt Clear */
+  __I  uint32_t TimerRIS;                    /* Offset: 0x000 (R/W) Timer Raw Interrupt Status */
+  __I  uint32_t TimerMIS;                    /* Offset: 0x000 (R/W) Timer Masked Interrupt Status */
+  __IO uint32_t TimerBGLoad;                 /* Offset: 0x000 (R/W) Background Load Register */
+} CMSDK_DUALTIMER_SINGLE_TypeDef;
+
+#define CMSDK_DUALTIMER_LOAD_Pos             0                                               /* CMSDK_DUALTIMER LOAD: LOAD Position */
+#define CMSDK_DUALTIMER_LOAD_Msk             (0xFFFFFFFFul << CMSDK_DUALTIMER_LOAD_Pos)      /* CMSDK_DUALTIMER LOAD: LOAD Mask */
+
+#define CMSDK_DUALTIMER_VALUE_Pos            0                                               /* CMSDK_DUALTIMER VALUE: VALUE Position */
+#define CMSDK_DUALTIMER_VALUE_Msk            (0xFFFFFFFFul << CMSDK_DUALTIMER_VALUE_Pos)     /* CMSDK_DUALTIMER VALUE: VALUE Mask */
+
+#define CMSDK_DUALTIMER_CTRL_EN_Pos          7                                               /* CMSDK_DUALTIMER CTRL_EN: CTRL Enable Position */
+#define CMSDK_DUALTIMER_CTRL_EN_Msk          (0x1ul << CMSDK_DUALTIMER_CTRL_EN_Pos)          /* CMSDK_DUALTIMER CTRL_EN: CTRL Enable Mask */
+
+#define CMSDK_DUALTIMER_CTRL_MODE_Pos        6                                               /* CMSDK_DUALTIMER CTRL_MODE: CTRL MODE Position */
+#define CMSDK_DUALTIMER_CTRL_MODE_Msk        (0x1ul << CMSDK_DUALTIMER_CTRL_MODE_Pos)        /* CMSDK_DUALTIMER CTRL_MODE: CTRL MODE Mask */
+
+#define CMSDK_DUALTIMER_CTRL_INTEN_Pos       5                                               /* CMSDK_DUALTIMER CTRL_INTEN: CTRL Int Enable Position */
+#define CMSDK_DUALTIMER_CTRL_INTEN_Msk       (0x1ul << CMSDK_DUALTIMER_CTRL_INTEN_Pos)       /* CMSDK_DUALTIMER CTRL_INTEN: CTRL Int Enable Mask */
+
+#define CMSDK_DUALTIMER_CTRL_PRESCALE_Pos    2                                               /* CMSDK_DUALTIMER CTRL_PRESCALE: CTRL PRESCALE Position */
+#define CMSDK_DUALTIMER_CTRL_PRESCALE_Msk    (0x3ul << CMSDK_DUALTIMER_CTRL_PRESCALE_Pos)    /* CMSDK_DUALTIMER CTRL_PRESCALE: CTRL PRESCALE Mask */
+
+#define CMSDK_DUALTIMER_CTRL_SIZE_Pos        1                                               /* CMSDK_DUALTIMER CTRL_SIZE: CTRL SIZE Position */
+#define CMSDK_DUALTIMER_CTRL_SIZE_Msk        (0x1ul << CMSDK_DUALTIMER_CTRL_SIZE_Pos)        /* CMSDK_DUALTIMER CTRL_SIZE: CTRL SIZE Mask */
+
+#define CMSDK_DUALTIMER_CTRL_ONESHOOT_Pos    0                                               /* CMSDK_DUALTIMER CTRL_ONESHOOT: CTRL ONESHOOT Position */
+#define CMSDK_DUALTIMER_CTRL_ONESHOOT_Msk    (0x1ul << CMSDK_DUALTIMER_CTRL_ONESHOOT_Pos)    /* CMSDK_DUALTIMER CTRL_ONESHOOT: CTRL ONESHOOT Mask */
+
+#define CMSDK_DUALTIMER_INTCLR_Pos           0                                               /* CMSDK_DUALTIMER INTCLR: INT Clear Position */
+#define CMSDK_DUALTIMER_INTCLR_Msk           (0x1ul << CMSDK_DUALTIMER_INTCLR_Pos)           /* CMSDK_DUALTIMER INTCLR: INT Clear  Mask */
+
+#define CMSDK_DUALTIMER_RAWINTSTAT_Pos       0                                               /* CMSDK_DUALTIMER RAWINTSTAT: Raw Int Status Position */
+#define CMSDK_DUALTIMER_RAWINTSTAT_Msk       (0x1ul << CMSDK_DUALTIMER_RAWINTSTAT_Pos)       /* CMSDK_DUALTIMER RAWINTSTAT: Raw Int Status Mask */
+
+#define CMSDK_DUALTIMER_MASKINTSTAT_Pos      0                                               /* CMSDK_DUALTIMER MASKINTSTAT: Mask Int Status Position */
+#define CMSDK_DUALTIMER_MASKINTSTAT_Msk      (0x1ul << CMSDK_DUALTIMER_MASKINTSTAT_Pos)      /* CMSDK_DUALTIMER MASKINTSTAT: Mask Int Status Mask */
+
+#define CMSDK_DUALTIMER_BGLOAD_Pos           0                                               /* CMSDK_DUALTIMER BGLOAD: Background Load Position */
+#define CMSDK_DUALTIMER_BGLOAD_Msk           (0xFFFFFFFFul << CMSDK_DUALTIMER_BGLOAD_Pos)    /* CMSDK_DUALTIMER BGLOAD: Background Load Mask */
+
+
+/*-------------------- General Purpose Input Output (GPIO) -------------------*/
+typedef struct
+{
+  __IO   uint32_t  DATA;                     /* Offset: 0x000 (R/W) DATA Register */
+  __IO   uint32_t  DATAOUT;                  /* Offset: 0x004 (R/W) Data Output Latch Register */
+         uint32_t  RESERVED0[2];
+  __IO   uint32_t  OUTENABLESET;             /* Offset: 0x010 (R/W) Output Enable Set Register */
+  __IO   uint32_t  OUTENABLECLR;             /* Offset: 0x014 (R/W) Output Enable Clear Register */
+  __IO   uint32_t  ALTFUNCSET;               /* Offset: 0x018 (R/W) Alternate Function Set Register */
+  __IO   uint32_t  ALTFUNCCLR;               /* Offset: 0x01C (R/W) Alternate Function Clear Register */
+  __IO   uint32_t  INTENSET;                 /* Offset: 0x020 (R/W) Interrupt Enable Set Register */
+  __IO   uint32_t  INTENCLR;                 /* Offset: 0x024 (R/W) Interrupt Enable Clear Register */
+  __IO   uint32_t  INTTYPESET;               /* Offset: 0x028 (R/W) Interrupt Type Set Register */
+  __IO   uint32_t  INTTYPECLR;               /* Offset: 0x02C (R/W) Interrupt Type Clear Register */
+  __IO   uint32_t  INTPOLSET;                /* Offset: 0x030 (R/W) Interrupt Polarity Set Register */
+  __IO   uint32_t  INTPOLCLR;                /* Offset: 0x034 (R/W) Interrupt Polarity Clear Register */
+  union {
+    __I    uint32_t  INTSTATUS;              /* Offset: 0x038 (R/ ) Interrupt Status Register */
+    __O    uint32_t  INTCLEAR;               /* Offset: 0x038 ( /W) Interrupt Clear Register */
+    };
+         uint32_t RESERVED1[241];
+  __IO   uint32_t LB_MASKED[256];            /* Offset: 0x400 - 0x7FC Lower byte Masked Access Register (R/W) */
+  __IO   uint32_t UB_MASKED[256];            /* Offset: 0x800 - 0xBFC Upper byte Masked Access Register (R/W) */
+} CMSDK_GPIO_TypeDef;
+
+#define CMSDK_GPIO_DATA_Pos            0                                          /* CMSDK_GPIO DATA: DATA Position */
+#define CMSDK_GPIO_DATA_Msk            (0xFFFFul << CMSDK_GPIO_DATA_Pos)          /* CMSDK_GPIO DATA: DATA Mask */
+
+#define CMSDK_GPIO_DATAOUT_Pos         0                                          /* CMSDK_GPIO DATAOUT: DATAOUT Position */
+#define CMSDK_GPIO_DATAOUT_Msk         (0xFFFFul << CMSDK_GPIO_DATAOUT_Pos)       /* CMSDK_GPIO DATAOUT: DATAOUT Mask */
+
+#define CMSDK_GPIO_OUTENSET_Pos        0                                          /* CMSDK_GPIO OUTEN: OUTEN Position */
+#define CMSDK_GPIO_OUTENSET_Msk        (0xFFFFul << CMSDK_GPIO_OUTEN_Pos)         /* CMSDK_GPIO OUTEN: OUTEN Mask */
+
+#define CMSDK_GPIO_OUTENCLR_Pos        0                                          /* CMSDK_GPIO OUTEN: OUTEN Position */
+#define CMSDK_GPIO_OUTENCLR_Msk        (0xFFFFul << CMSDK_GPIO_OUTEN_Pos)         /* CMSDK_GPIO OUTEN: OUTEN Mask */
+
+#define CMSDK_GPIO_ALTFUNCSET_Pos      0                                          /* CMSDK_GPIO ALTFUNC: ALTFUNC Position */
+#define CMSDK_GPIO_ALTFUNCSET_Msk      (0xFFFFul << CMSDK_GPIO_ALTFUNC_Pos)       /* CMSDK_GPIO ALTFUNC: ALTFUNC Mask */
+
+#define CMSDK_GPIO_ALTFUNCCLR_Pos      0                                          /* CMSDK_GPIO ALTFUNC: ALTFUNC Position */
+#define CMSDK_GPIO_ALTFUNCCLR_Msk      (0xFFFFul << CMSDK_GPIO_ALTFUNC_Pos)       /* CMSDK_GPIO ALTFUNC: ALTFUNC Mask */
+
+#define CMSDK_GPIO_INTENSET_Pos        0                                          /* CMSDK_GPIO INTEN: INTEN Position */
+#define CMSDK_GPIO_INTENSET_Msk        (0xFFFFul << CMSDK_GPIO_INTEN_Pos)         /* CMSDK_GPIO INTEN: INTEN Mask */
+
+#define CMSDK_GPIO_INTENCLR_Pos        0                                          /* CMSDK_GPIO INTEN: INTEN Position */
+#define CMSDK_GPIO_INTENCLR_Msk        (0xFFFFul << CMSDK_GPIO_INTEN_Pos)         /* CMSDK_GPIO INTEN: INTEN Mask */
+
+#define CMSDK_GPIO_INTTYPESET_Pos      0                                          /* CMSDK_GPIO INTTYPE: INTTYPE Position */
+#define CMSDK_GPIO_INTTYPESET_Msk      (0xFFFFul << CMSDK_GPIO_INTTYPE_Pos)       /* CMSDK_GPIO INTTYPE: INTTYPE Mask */
+
+#define CMSDK_GPIO_INTTYPECLR_Pos      0                                          /* CMSDK_GPIO INTTYPE: INTTYPE Position */
+#define CMSDK_GPIO_INTTYPECLR_Msk      (0xFFFFul << CMSDK_GPIO_INTTYPE_Pos)       /* CMSDK_GPIO INTTYPE: INTTYPE Mask */
+
+#define CMSDK_GPIO_INTPOLSET_Pos       0                                          /* CMSDK_GPIO INTPOL: INTPOL Position */
+#define CMSDK_GPIO_INTPOLSET_Msk       (0xFFFFul << CMSDK_GPIO_INTPOL_Pos)        /* CMSDK_GPIO INTPOL: INTPOL Mask */
+
+#define CMSDK_GPIO_INTPOLCLR_Pos       0                                          /* CMSDK_GPIO INTPOL: INTPOL Position */
+#define CMSDK_GPIO_INTPOLCLR_Msk       (0xFFFFul << CMSDK_GPIO_INTPOL_Pos)        /* CMSDK_GPIO INTPOL: INTPOL Mask */
+
+#define CMSDK_GPIO_INTSTATUS_Pos       0                                          /* CMSDK_GPIO INTSTATUS: INTSTATUS Position */
+#define CMSDK_GPIO_INTSTATUS_Msk       (0xFFul << CMSDK_GPIO_INTSTATUS_Pos)       /* CMSDK_GPIO INTSTATUS: INTSTATUS Mask */
+
+#define CMSDK_GPIO_INTCLEAR_Pos        0                                          /* CMSDK_GPIO INTCLEAR: INTCLEAR Position */
+#define CMSDK_GPIO_INTCLEAR_Msk        (0xFFul << CMSDK_GPIO_INTCLEAR_Pos)        /* CMSDK_GPIO INTCLEAR: INTCLEAR Mask */
+
+#define CMSDK_GPIO_MASKLOWBYTE_Pos     0                                          /* CMSDK_GPIO MASKLOWBYTE: MASKLOWBYTE Position */
+#define CMSDK_GPIO_MASKLOWBYTE_Msk     (0x00FFul << CMSDK_GPIO_MASKLOWBYTE_Pos)   /* CMSDK_GPIO MASKLOWBYTE: MASKLOWBYTE Mask */
+
+#define CMSDK_GPIO_MASKHIGHBYTE_Pos    0                                          /* CMSDK_GPIO MASKHIGHBYTE: MASKHIGHBYTE Position */
+#define CMSDK_GPIO_MASKHIGHBYTE_Msk    (0xFF00ul << CMSDK_GPIO_MASKHIGHBYTE_Pos)  /* CMSDK_GPIO MASKHIGHBYTE: MASKHIGHBYTE Mask */
+
+
+/*------------- System Control (SYSCON) --------------------------------------*/
+typedef struct
+{
+  __IO   uint32_t  REMAP;                    /* Offset: 0x000 (R/W) Remap Control Register */
+  __IO   uint32_t  PMUCTRL;                  /* Offset: 0x004 (R/W) PMU Control Register */
+  __IO   uint32_t  RESETOP;                  /* Offset: 0x008 (R/W) Reset Option Register */
+  __IO   uint32_t  EMICTRL;                  /* Offset: 0x00C (R/W) EMI Control Register */
+  __IO   uint32_t  RSTINFO;                  /* Offset: 0x010 (R/W) Reset Information Register */
+         uint32_t  RESERVED0[3];
+  __IO   uint32_t  AHBPER0SET;               /* Offset: 0x020 (R/W)AHB peripheral access control set */
+  __IO   uint32_t  AHBPER0CLR;               /* Offset: 0x024 (R/W)AHB peripheral access control clear */
+         uint32_t  RESERVED1[2];
+  __IO   uint32_t  APBPER0SET;               /* Offset: 0x030 (R/W)APB peripheral access control set */
+  __IO   uint32_t  APBPER0CLR;               /* Offset: 0x034 (R/W)APB peripheral access control clear */
+         uint32_t  RESERVED2[2];
+  __IO   uint32_t  MAINCLK;                  /* Offset: 0x040 (R/W) Main Clock Control Register */
+  __IO   uint32_t  AUXCLK;                   /* Offset: 0x044 (R/W) Auxiliary / RTC Control Register */
+  __IO   uint32_t  PLLCTRL;                  /* Offset: 0x048 (R/W) PLL Control Register */
+  __IO   uint32_t  PLLSTATUS;                /* Offset: 0x04C (R/W) PLL Status Register */
+  __IO   uint32_t  SLEEPCFG;                 /* Offset: 0x050 (R/W) Sleep Control Register */
+  __IO   uint32_t  FLASHAUXCFG;              /* Offset: 0x054 (R/W) Flash auxiliary settings Control Register */
+         uint32_t  RESERVED3[10];
+  __IO   uint32_t  AHBCLKCFG0SET;            /* Offset: 0x080 (R/W) AHB Peripheral Clock set in Active state */
+  __IO   uint32_t  AHBCLKCFG0CLR;            /* Offset: 0x084 (R/W) AHB Peripheral Clock clear in Active state */
+  __IO   uint32_t  AHBCLKCFG1SET;            /* Offset: 0x088 (R/W) AHB Peripheral Clock set in Sleep state */
+  __IO   uint32_t  AHBCLKCFG1CLR;            /* Offset: 0x08C (R/W) AHB Peripheral Clock clear in Sleep state */
+  __IO   uint32_t  AHBCLKCFG2SET;            /* Offset: 0x090 (R/W) AHB Peripheral Clock set in Deep Sleep state */
+  __IO   uint32_t  AHBCLKCFG2CLR;            /* Offset: 0x094 (R/W) AHB Peripheral Clock clear in Deep Sleep state */
+         uint32_t  RESERVED4[2];
+  __IO   uint32_t  APBCLKCFG0SET;            /* Offset: 0x0A0 (R/W) APB Peripheral Clock set in Active state */
+  __IO   uint32_t  APBCLKCFG0CLR;            /* Offset: 0x0A4 (R/W) APB Peripheral Clock clear in Active state */
+  __IO   uint32_t  APBCLKCFG1SET;            /* Offset: 0x0A8 (R/W) APB Peripheral Clock set in Sleep state */
+  __IO   uint32_t  APBCLKCFG1CLR;            /* Offset: 0x0AC (R/W) APB Peripheral Clock clear in Sleep state */
+  __IO   uint32_t  APBCLKCFG2SET;            /* Offset: 0x0B0 (R/W) APB Peripheral Clock set in Deep Sleep state */
+  __IO   uint32_t  APBCLKCFG2CLR;            /* Offset: 0x0B4 (R/W) APB Peripheral Clock clear in Deep Sleep state */
+         uint32_t  RESERVED5[2];
+  __IO   uint32_t  AHBPRST0SET;              /* Offset: 0x0C0 (R/W) AHB Peripheral reset select set */
+  __IO   uint32_t  AHBPRST0CLR;              /* Offset: 0x0C4 (R/W) AHB Peripheral reset select clear */
+  __IO   uint32_t  APBPRST0SET;              /* Offset: 0x0C8 (R/W) APB Peripheral reset select set */
+  __IO   uint32_t  APBPRST0CLR;              /* Offset: 0x0CC (R/W) APB Peripheral reset select clear */
+  __IO   uint32_t  PWRDNCFG0SET;             /* Offset: 0x0D0 (R/W) AHB Power down sleep wakeup source set */
+  __IO   uint32_t  PWRDNCFG0CLR;             /* Offset: 0x0D4 (R/W) AHB Power down sleep wakeup source clear */
+  __IO   uint32_t  PWRDNCFG1SET;             /* Offset: 0x0D8 (R/W) APB Power down sleep wakeup source set */
+  __IO   uint32_t  PWRDNCFG1CLR;             /* Offset: 0x0DC (R/W) APB Power down sleep wakeup source clear */
+  __O    uint32_t  RTCRESET;                 /* Offset: 0x0E0 ( /W) RTC reset */
+  __IO   uint32_t  EVENTCFG;                 /* Offset: 0x0E4 (R/W) Event interface Control Register */
+         uint32_t  RESERVED6[2];
+  __IO   uint32_t  PWROVRIDE0;               /* Offset: 0x0F0 (R/W) SRAM Power control overide */
+  __IO   uint32_t  PWROVRIDE1;               /* Offset: 0x0F4 (R/W) Embedded Flash Power control overide */
+  __I    uint32_t  MEMORYSTATUS;             /* Offset: 0x0F8 (R/ ) Memory Status Register */
+         uint32_t  RESERVED7[1];
+  __IO   uint32_t  GPIOPADCFG0;              /* Offset: 0x100 (R/W) IO pad settings */
+  __IO   uint32_t  GPIOPADCFG1;              /* Offset: 0x104 (R/W) IO pad settings */
+  __IO   uint32_t  TESTMODECFG;              /* Offset: 0x108 (R/W) Testmode boot bypass */
+} CMSDK_SYSCON_TypeDef;
+
+#define CMSDK_SYSCON_REMAP_Pos                 0
+#define CMSDK_SYSCON_REMAP_Msk                 (0x01ul << CMSDK_SYSCON_REMAP_Pos)               /* CMSDK_SYSCON MEME_CTRL: REMAP Mask */
+
+#define CMSDK_SYSCON_PMUCTRL_EN_Pos            0
+#define CMSDK_SYSCON_PMUCTRL_EN_Msk            (0x01ul << CMSDK_SYSCON_PMUCTRL_EN_Pos)          /* CMSDK_SYSCON PMUCTRL: PMUCTRL ENABLE Mask */
+
+#define CMSDK_SYSCON_LOCKUPRST_RESETOP_Pos     0
+#define CMSDK_SYSCON_LOCKUPRST_RESETOP_Msk     (0x01ul << CMSDK_SYSCON_LOCKUPRST_RESETOP_Pos)   /* CMSDK_SYSCON SYS_CTRL: LOCKUP RESET ENABLE Mask */
+
+#define CMSDK_SYSCON_EMICTRL_SIZE_Pos          24
+#define CMSDK_SYSCON_EMICTRL_SIZE_Msk          (0x00001ul << CMSDK_SYSCON_EMICTRL_SIZE_Pos)     /* CMSDK_SYSCON EMICTRL: SIZE Mask */
+
+#define CMSDK_SYSCON_EMICTRL_TACYC_Pos         16
+#define CMSDK_SYSCON_EMICTRL_TACYC_Msk         (0x00007ul << CMSDK_SYSCON_EMICTRL_TACYC_Pos)    /* CMSDK_SYSCON EMICTRL: TURNAROUNDCYCLE Mask */
+
+#define CMSDK_SYSCON_EMICTRL_WCYC_Pos          8
+#define CMSDK_SYSCON_EMICTRL_WCYC_Msk          (0x00003ul << CMSDK_SYSCON_EMICTRL_WCYC_Pos)     /* CMSDK_SYSCON EMICTRL: WRITECYCLE Mask */
+
+#define CMSDK_SYSCON_EMICTRL_RCYC_Pos          0
+#define CMSDK_SYSCON_EMICTRL_RCYC_Msk          (0x00007ul << CMSDK_SYSCON_EMICTRL_RCYC_Pos)     /* CMSDK_SYSCON EMICTRL: READCYCLE Mask */
+
+#define CMSDK_SYSCON_RSTINFO_SYSRESETREQ_Pos   0
+#define CMSDK_SYSCON_RSTINFO_SYSRESETREQ_Msk   (0x00001ul << CMSDK_SYSCON_RSTINFO_SYSRESETREQ_Pos) /* CMSDK_SYSCON RSTINFO: SYSRESETREQ Mask */
+
+#define CMSDK_SYSCON_RSTINFO_WDOGRESETREQ_Pos  1
+#define CMSDK_SYSCON_RSTINFO_WDOGRESETREQ_Msk  (0x00001ul << CMSDK_SYSCON_RSTINFO_WDOGRESETREQ_Pos) /* CMSDK_SYSCON RSTINFO: WDOGRESETREQ Mask */
+
+#define CMSDK_SYSCON_RSTINFO_LOCKUPRESET_Pos   2
+#define CMSDK_SYSCON_RSTINFO_LOCKUPRESET_Msk   (0x00001ul << CMSDK_SYSCON_RSTINFO_LOCKUPRESET_Pos) /* CMSDK_SYSCON RSTINFO: LOCKUPRESET Mask */
+
+
+/*------------- PL230 uDMA (PL230) --------------------------------------*/
+typedef struct
+{
+  __I    uint32_t  DMA_STATUS;               /* Offset: 0x000 (R/W) DMA status Register */
+  __O    uint32_t  DMA_CFG;                  /* Offset: 0x004 ( /W) DMA configuration Register */
+  __IO   uint32_t  CTRL_BASE_PTR;            /* Offset: 0x008 (R/W) Channel Control Data Base Pointer Register */
+  __I    uint32_t  ALT_CTRL_BASE_PTR;        /* Offset: 0x00C (R/ ) Channel Alternate Control Data Base Pointer Register */
+  __I    uint32_t  DMA_WAITONREQ_STATUS;     /* Offset: 0x010 (R/ ) Channel Wait On Request Status Register */
+  __O    uint32_t  CHNL_SW_REQUEST;          /* Offset: 0x014 ( /W) Channel Software Request Register */
+  __IO   uint32_t  CHNL_USEBURST_SET;        /* Offset: 0x018 (R/W) Channel UseBurst Set Register */
+  __O    uint32_t  CHNL_USEBURST_CLR;        /* Offset: 0x01C ( /W) Channel UseBurst Clear Register */
+  __IO   uint32_t  CHNL_REQ_MASK_SET;        /* Offset: 0x020 (R/W) Channel Request Mask Set Register */
+  __O    uint32_t  CHNL_REQ_MASK_CLR;        /* Offset: 0x024 ( /W) Channel Request Mask Clear Register */
+  __IO   uint32_t  CHNL_ENABLE_SET;          /* Offset: 0x028 (R/W) Channel Enable Set Register */
+  __O    uint32_t  CHNL_ENABLE_CLR;          /* Offset: 0x02C ( /W) Channel Enable Clear Register */
+  __IO   uint32_t  CHNL_PRI_ALT_SET;         /* Offset: 0x030 (R/W) Channel Primary-Alterante Set Register */
+  __O    uint32_t  CHNL_PRI_ALT_CLR;         /* Offset: 0x034 ( /W) Channel Primary-Alterante Clear Register */
+  __IO   uint32_t  CHNL_PRIORITY_SET;        /* Offset: 0x038 (R/W) Channel Priority Set Register */
+  __O    uint32_t  CHNL_PRIORITY_CLR;        /* Offset: 0x03C ( /W) Channel Priority Clear Register */
+         uint32_t  RESERVED0[3];
+  __IO   uint32_t  ERR_CLR;                  /* Offset: 0x04C Bus Error Clear Register  (R/W) */
+
+} CMSDK_PL230_TypeDef;
+
+#define PL230_DMA_CHNL_BITS 0
+
+#define CMSDK_PL230_DMA_STATUS_MSTREN_Pos          0                                                          /* CMSDK_PL230 DMA STATUS: MSTREN Position */
+#define CMSDK_PL230_DMA_STATUS_MSTREN_Msk          (0x00000001ul << CMSDK_PL230_DMA_STATUS_MSTREN_Pos)        /* CMSDK_PL230 DMA STATUS: MSTREN Mask */
+
+#define CMSDK_PL230_DMA_STATUS_STATE_Pos           0                                                          /* CMSDK_PL230 DMA STATUS: STATE Position */
+#define CMSDK_PL230_DMA_STATUS_STATE_Msk           (0x0000000Ful << CMSDK_PL230_DMA_STATUS_STATE_Pos)         /* CMSDK_PL230 DMA STATUS: STATE Mask */
+
+#define CMSDK_PL230_DMA_STATUS_CHNLS_MINUS1_Pos    0                                                          /* CMSDK_PL230 DMA STATUS: CHNLS_MINUS1 Position */
+#define CMSDK_PL230_DMA_STATUS_CHNLS_MINUS1_Msk    (0x0000001Ful << CMSDK_PL230_DMA_STATUS_CHNLS_MINUS1_Pos)  /* CMSDK_PL230 DMA STATUS: CHNLS_MINUS1 Mask */
+
+#define CMSDK_PL230_DMA_STATUS_TEST_STATUS_Pos     0                                                          /* CMSDK_PL230 DMA STATUS: TEST_STATUS Position */
+#define CMSDK_PL230_DMA_STATUS_TEST_STATUS_Msk     (0x00000001ul << CMSDK_PL230_DMA_STATUS_TEST_STATUS_Pos)   /* CMSDK_PL230 DMA STATUS: TEST_STATUS Mask */
+
+#define CMSDK_PL230_DMA_CFG_MSTREN_Pos             0                                                          /* CMSDK_PL230 DMA CFG: MSTREN Position */
+#define CMSDK_PL230_DMA_CFG_MSTREN_Msk             (0x00000001ul << CMSDK_PL230_DMA_CFG_MSTREN_Pos)           /* CMSDK_PL230 DMA CFG: MSTREN Mask */
+
+#define CMSDK_PL230_DMA_CFG_CPCCACHE_Pos           2                                                          /* CMSDK_PL230 DMA CFG: CPCCACHE Position */
+#define CMSDK_PL230_DMA_CFG_CPCCACHE_Msk           (0x00000001ul << CMSDK_PL230_DMA_CFG_CPCCACHE_Pos)         /* CMSDK_PL230 DMA CFG: CPCCACHE Mask */
+
+#define CMSDK_PL230_DMA_CFG_CPCBUF_Pos             1                                                          /* CMSDK_PL230 DMA CFG: CPCBUF Position */
+#define CMSDK_PL230_DMA_CFG_CPCBUF_Msk             (0x00000001ul << CMSDK_PL230_DMA_CFG_CPCBUF_Pos)           /* CMSDK_PL230 DMA CFG: CPCBUF Mask */
+
+#define CMSDK_PL230_DMA_CFG_CPCPRIV_Pos            0                                                          /* CMSDK_PL230 DMA CFG: CPCPRIV Position */
+#define CMSDK_PL230_DMA_CFG_CPCPRIV_Msk            (0x00000001ul << CMSDK_PL230_DMA_CFG_CPCPRIV_Pos)          /* CMSDK_PL230 DMA CFG: CPCPRIV Mask */
+
+#define CMSDK_PL230_CTRL_BASE_PTR_Pos              PL230_DMA_CHNL_BITS + 5                                    /* CMSDK_PL230 STATUS: BASE_PTR Position */
+#define CMSDK_PL230_CTRL_BASE_PTR_Msk              (0x0FFFFFFFul << CMSDK_PL230_CTRL_BASE_PTR_Pos)            /* CMSDK_PL230 STATUS: BASE_PTR Mask */
+
+#define CMSDK_PL230_ALT_CTRL_BASE_PTR_Pos          0                                                          /* CMSDK_PL230 STATUS: MSTREN Position */
+#define CMSDK_PL230_ALT_CTRL_BASE_PTR_Msk          (0xFFFFFFFFul << CMSDK_PL230_ALT_CTRL_BASE_PTR_Pos)        /* CMSDK_PL230 STATUS: MSTREN Mask */
+
+#define CMSDK_PL230_DMA_WAITONREQ_STATUS_Pos       0                                                          /* CMSDK_PL230 DMA_WAITONREQ_STATUS: DMA_WAITONREQ_STATUS Position */
+#define CMSDK_PL230_DMA_WAITONREQ_STATUS_Msk       (0xFFFFFFFFul << CMSDK_PL230_DMA_WAITONREQ_STATUS_Pos)     /* CMSDK_PL230 DMA_WAITONREQ_STATUS: DMA_WAITONREQ_STATUS Mask */
+
+#define CMSDK_PL230_CHNL_SW_REQUEST_Pos            0                                                          /* CMSDK_PL230 CHNL_SW_REQUEST: CHNL_SW_REQUEST Position */
+#define CMSDK_PL230_CHNL_SW_REQUEST_Msk            (0xFFFFFFFFul << CMSDK_PL230_CHNL_SW_REQUEST_Pos)          /* CMSDK_PL230 CHNL_SW_REQUEST: CHNL_SW_REQUEST Mask */
+
+#define CMSDK_PL230_CHNL_USEBURST_SET_Pos          0                                                          /* CMSDK_PL230 CHNL_USEBURST: SET Position */
+#define CMSDK_PL230_CHNL_USEBURST_SET_Msk          (0xFFFFFFFFul << CMSDK_PL230_CHNL_USEBURST_SET_Pos)        /* CMSDK_PL230 CHNL_USEBURST: SET Mask */
+
+#define CMSDK_PL230_CHNL_USEBURST_CLR_Pos          0                                                          /* CMSDK_PL230 CHNL_USEBURST: CLR Position */
+#define CMSDK_PL230_CHNL_USEBURST_CLR_Msk          (0xFFFFFFFFul << CMSDK_PL230_CHNL_USEBURST_CLR_Pos)        /* CMSDK_PL230 CHNL_USEBURST: CLR Mask */
+
+#define CMSDK_PL230_CHNL_REQ_MASK_SET_Pos          0                                                          /* CMSDK_PL230 CHNL_REQ_MASK: SET Position */
+#define CMSDK_PL230_CHNL_REQ_MASK_SET_Msk          (0xFFFFFFFFul << CMSDK_PL230_CHNL_REQ_MASK_SET_Pos)        /* CMSDK_PL230 CHNL_REQ_MASK: SET Mask */
+
+#define CMSDK_PL230_CHNL_REQ_MASK_CLR_Pos          0                                                          /* CMSDK_PL230 CHNL_REQ_MASK: CLR Position */
+#define CMSDK_PL230_CHNL_REQ_MASK_CLR_Msk          (0xFFFFFFFFul << CMSDK_PL230_CHNL_REQ_MASK_CLR_Pos)        /* CMSDK_PL230 CHNL_REQ_MASK: CLR Mask */
+
+#define CMSDK_PL230_CHNL_ENABLE_SET_Pos            0                                                          /* CMSDK_PL230 CHNL_ENABLE: SET Position */
+#define CMSDK_PL230_CHNL_ENABLE_SET_Msk            (0xFFFFFFFFul << CMSDK_PL230_CHNL_ENABLE_SET_Pos)          /* CMSDK_PL230 CHNL_ENABLE: SET Mask */
+
+#define CMSDK_PL230_CHNL_ENABLE_CLR_Pos            0                                                          /* CMSDK_PL230 CHNL_ENABLE: CLR Position */
+#define CMSDK_PL230_CHNL_ENABLE_CLR_Msk            (0xFFFFFFFFul << CMSDK_PL230_CHNL_ENABLE_CLR_Pos)          /* CMSDK_PL230 CHNL_ENABLE: CLR Mask */
+
+#define CMSDK_PL230_CHNL_PRI_ALT_SET_Pos           0                                                          /* CMSDK_PL230 CHNL_PRI_ALT: SET Position */
+#define CMSDK_PL230_CHNL_PRI_ALT_SET_Msk           (0xFFFFFFFFul << CMSDK_PL230_CHNL_PRI_ALT_SET_Pos)         /* CMSDK_PL230 CHNL_PRI_ALT: SET Mask */
+
+#define CMSDK_PL230_CHNL_PRI_ALT_CLR_Pos           0                                                          /* CMSDK_PL230 CHNL_PRI_ALT: CLR Position */
+#define CMSDK_PL230_CHNL_PRI_ALT_CLR_Msk           (0xFFFFFFFFul << CMSDK_PL230_CHNL_PRI_ALT_CLR_Pos)         /* CMSDK_PL230 CHNL_PRI_ALT: CLR Mask */
+
+#define CMSDK_PL230_CHNL_PRIORITY_SET_Pos          0                                                          /* CMSDK_PL230 CHNL_PRIORITY: SET Position */
+#define CMSDK_PL230_CHNL_PRIORITY_SET_Msk          (0xFFFFFFFFul << CMSDK_PL230_CHNL_PRIORITY_SET_Pos)        /* CMSDK_PL230 CHNL_PRIORITY: SET Mask */
+
+#define CMSDK_PL230_CHNL_PRIORITY_CLR_Pos          0                                                          /* CMSDK_PL230 CHNL_PRIORITY: CLR Position */
+#define CMSDK_PL230_CHNL_PRIORITY_CLR_Msk          (0xFFFFFFFFul << CMSDK_PL230_CHNL_PRIORITY_CLR_Pos)        /* CMSDK_PL230 CHNL_PRIORITY: CLR Mask */
+
+#define CMSDK_PL230_ERR_CLR_Pos                    0                                                          /* CMSDK_PL230 ERR: CLR Position */
+#define CMSDK_PL230_ERR_CLR_Msk                    (0x00000001ul << CMSDK_PL230_ERR_CLR_Pos)                  /* CMSDK_PL230 ERR: CLR Mask */
+
+
+/*------------------- Watchdog ----------------------------------------------*/
+typedef struct
+{
+
+  __IO    uint32_t  LOAD;                   /* Offset: 0x000 (R/W) Watchdog Load Register */
+  __I     uint32_t  VALUE;                  /* Offset: 0x004 (R/ ) Watchdog Value Register */
+  __IO    uint32_t  CTRL;                   /* Offset: 0x008 (R/W) Watchdog Control Register */
+  __O     uint32_t  INTCLR;                 /* Offset: 0x00C ( /W) Watchdog Clear Interrupt Register */
+  __I     uint32_t  RAWINTSTAT;             /* Offset: 0x010 (R/ ) Watchdog Raw Interrupt Status Register */
+  __I     uint32_t  MASKINTSTAT;            /* Offset: 0x014 (R/ ) Watchdog Interrupt Status Register */
+        uint32_t  RESERVED0[762];
+  __IO    uint32_t  LOCK;                   /* Offset: 0xC00 (R/W) Watchdog Lock Register */
+        uint32_t  RESERVED1[191];
+  __IO    uint32_t  ITCR;                   /* Offset: 0xF00 (R/W) Watchdog Integration Test Control Register */
+  __O     uint32_t  ITOP;                   /* Offset: 0xF04 ( /W) Watchdog Integration Test Output Set Register */
+}CMSDK_WATCHDOG_TypeDef;
+
+#define CMSDK_Watchdog_LOAD_Pos               0                                              /* CMSDK_Watchdog LOAD: LOAD Position */
+#define CMSDK_Watchdog_LOAD_Msk              (0xFFFFFFFFul << CMSDK_Watchdog_LOAD_Pos)       /* CMSDK_Watchdog LOAD: LOAD Mask */
+
+#define CMSDK_Watchdog_VALUE_Pos              0                                              /* CMSDK_Watchdog VALUE: VALUE Position */
+#define CMSDK_Watchdog_VALUE_Msk             (0xFFFFFFFFul << CMSDK_Watchdog_VALUE_Pos)      /* CMSDK_Watchdog VALUE: VALUE Mask */
+
+#define CMSDK_Watchdog_CTRL_RESEN_Pos         1                                              /* CMSDK_Watchdog CTRL_RESEN: Enable Reset Output Position */
+#define CMSDK_Watchdog_CTRL_RESEN_Msk        (0x1ul << CMSDK_Watchdog_CTRL_RESEN_Pos)        /* CMSDK_Watchdog CTRL_RESEN: Enable Reset Output Mask */
+
+#define CMSDK_Watchdog_CTRL_INTEN_Pos         0                                              /* CMSDK_Watchdog CTRL_INTEN: Int Enable Position */
+#define CMSDK_Watchdog_CTRL_INTEN_Msk        (0x1ul << CMSDK_Watchdog_CTRL_INTEN_Pos)        /* CMSDK_Watchdog CTRL_INTEN: Int Enable Mask */
+
+#define CMSDK_Watchdog_INTCLR_Pos             0                                              /* CMSDK_Watchdog INTCLR: Int Clear Position */
+#define CMSDK_Watchdog_INTCLR_Msk            (0x1ul << CMSDK_Watchdog_INTCLR_Pos)            /* CMSDK_Watchdog INTCLR: Int Clear Mask */
+
+#define CMSDK_Watchdog_RAWINTSTAT_Pos         0                                              /* CMSDK_Watchdog RAWINTSTAT: Raw Int Status Position */
+#define CMSDK_Watchdog_RAWINTSTAT_Msk        (0x1ul << CMSDK_Watchdog_RAWINTSTAT_Pos)        /* CMSDK_Watchdog RAWINTSTAT: Raw Int Status Mask */
+
+#define CMSDK_Watchdog_MASKINTSTAT_Pos        0                                              /* CMSDK_Watchdog MASKINTSTAT: Mask Int Status Position */
+#define CMSDK_Watchdog_MASKINTSTAT_Msk       (0x1ul << CMSDK_Watchdog_MASKINTSTAT_Pos)       /* CMSDK_Watchdog MASKINTSTAT: Mask Int Status Mask */
+
+#define CMSDK_Watchdog_LOCK_Pos               0                                              /* CMSDK_Watchdog LOCK: LOCK Position */
+#define CMSDK_Watchdog_LOCK_Msk              (0x1ul << CMSDK_Watchdog_LOCK_Pos)              /* CMSDK_Watchdog LOCK: LOCK Mask */
+
+#define CMSDK_Watchdog_INTEGTESTEN_Pos        0                                              /* CMSDK_Watchdog INTEGTESTEN: Integration Test Enable Position */
+#define CMSDK_Watchdog_INTEGTESTEN_Msk       (0x1ul << CMSDK_Watchdog_INTEGTESTEN_Pos)       /* CMSDK_Watchdog INTEGTESTEN: Integration Test Enable Mask */
+
+#define CMSDK_Watchdog_INTEGTESTOUTSET_Pos    1                                              /* CMSDK_Watchdog INTEGTESTOUTSET: Integration Test Output Set Position */
+#define CMSDK_Watchdog_INTEGTESTOUTSET_Msk   (0x1ul << CMSDK_Watchdog_INTEGTESTOUTSET_Pos)   /* CMSDK_Watchdog INTEGTESTOUTSET: Integration Test Output Set Mask */
+
+
+
+/* --------------------  End of section using anonymous unions  ------------------- */
+#if defined ( __CC_ARM   )
+  #pragma pop
+#elif defined(__ICCARM__)
+  /* leave anonymous unions enabled */
+#elif defined(__GNUC__)
+  /* anonymous unions are enabled by default */
+#elif defined(__TMS470__)
+  /* anonymous unions are enabled by default */
+#elif defined(__TASKING__)
+  #pragma warning restore
+#else
+  #warning Not supported compiler type
+#endif
+
+
+
+
+/* ================================================================================ */
+/* ================              Peripheral memory map             ================ */
+/* ================================================================================ */
+
+/* Peripheral and SRAM base address                                                 */
+#define CMSDK_FLASH_BASE        (0x00000000UL)
+#define CMSDK_SRAM_BASE         (0x20000000UL)
+#define CMSDK_PERIPH_BASE       (0x40000000UL)
+
+#define CMSDK_RAM_BASE          (0x20000000UL)
+#define CMSDK_APB_BASE          (0x40000000UL)
+#define CMSDK_AHB_BASE          (0x40010000UL)
+
+/* APB peripherals                                                                  */
+#define CMSDK_TIMER0_BASE       (CMSDK_APB_BASE + 0x0000UL)
+#define CMSDK_TIMER1_BASE       (CMSDK_APB_BASE + 0x1000UL)
+#define CMSDK_DUALTIMER_BASE    (CMSDK_APB_BASE + 0x2000UL)
+#define CMSDK_DUALTIMER_1_BASE  (CMSDK_DUALTIMER_BASE)
+#define CMSDK_DUALTIMER_2_BASE  (CMSDK_DUALTIMER_BASE + 0x20UL)
+#define CMSDK_UART0_BASE        (CMSDK_APB_BASE + 0x4000UL)
+#define CMSDK_UART1_BASE        (CMSDK_APB_BASE + 0x5000UL)
+#define CMSDK_UART2_BASE        (0x4002C000UL)
+#define CMSDK_UART3_BASE        (0x4002D000UL)
+#define CMSDK_WATCHDOG_BASE     (CMSDK_APB_BASE + 0x8000UL)
+
+/* AHB peripherals                                                                  */
+#define CMSDK_GPIO0_BASE        (CMSDK_AHB_BASE + 0x0000UL)
+#define CMSDK_GPIO1_BASE        (CMSDK_AHB_BASE + 0x1000UL)
+#define CMSDK_GPIO2_BASE        (CMSDK_AHB_BASE + 0x2000UL)
+#define CMSDK_GPIO3_BASE        (CMSDK_AHB_BASE + 0x3000UL)
+#define CMSDK_GPIO4_BASE        (0x40030000UL)
+#define CMSDK_GPIO5_BASE        (0x40031000UL)
+#define CMSDK_SYSCTRL_BASE      (CMSDK_AHB_BASE + 0xF000UL)
+
+
+/* ================================================================================ */
+/* ================             Peripheral declaration             ================ */
+/* ================================================================================ */
+
+#define CMSDK_UART0             ((CMSDK_UART_TypeDef   *) CMSDK_UART0_BASE   )
+#define CMSDK_UART1            ((CMSDK_UART_TypeDef   *) CMSDK_UART1_BASE   )
+#define CMSDK_UART2             ((CMSDK_UART_TypeDef   *) CMSDK_UART2_BASE   )
+#define CMSDK_UART3             ((CMSDK_UART_TypeDef   *) CMSDK_UART3_BASE   )
+#define CMSDK_TIMER0            ((CMSDK_TIMER_TypeDef  *) CMSDK_TIMER0_BASE  )
+#define CMSDK_TIMER1            ((CMSDK_TIMER_TypeDef  *) CMSDK_TIMER1_BASE  )
+#define CMSDK_DUALTIMER         ((CMSDK_DUALTIMER_BOTH_TypeDef  *) CMSDK_DUALTIMER_BASE )
+#define CMSDK_DUALTIMER1        ((CMSDK_DUALTIMER_SINGLE_TypeDef  *) CMSDK_DUALTIMER_1_BASE )
+#define CMSDK_DUALTIMER2        ((CMSDK_DUALTIMER_SINGLE_TypeDef  *) CMSDK_DUALTIMER_2_BASE )
+#define CMSDK_WATCHDOG          ((CMSDK_WATCHDOG_TypeDef  *) CMSDK_WATCHDOG_BASE   )
+//#define CMSDK_DMA               ((CMSDK_PL230_TypeDef  *) CMSDK_PL230_BASE   )
+#define CMSDK_GPIO0             ((CMSDK_GPIO_TypeDef   *) CMSDK_GPIO0_BASE   )
+#define CMSDK_GPIO1             ((CMSDK_GPIO_TypeDef   *) CMSDK_GPIO1_BASE   )
+#define CMSDK_GPIO2             ((CMSDK_GPIO_TypeDef   *) CMSDK_GPIO2_BASE )
+#define CMSDK_GPIO3             ((CMSDK_GPIO_TypeDef   *) CMSDK_GPIO3_BASE )
+#define CMSDK_GPIO4             ((CMSDK_GPIO_TypeDef   *) CMSDK_GPIO4_BASE )
+#define CMSDK_GPIO5             ((CMSDK_GPIO_TypeDef   *) CMSDK_GPIO5_BASE )
+#define CMSDK_SYSCON            ((CMSDK_SYSCON_TypeDef *) CMSDK_SYSCTRL_BASE )
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* CMSDK_BEID_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_IOTSS_BEID/SMM_MPS2.h	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,610 @@
+/* MPS2 CMSIS Library
+*
+* Copyright (c) 2006-2016 ARM Limited
+* All rights reserved.
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
+* specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
+*******************************************************************************
+* File:     smm_mps2.h
+* Release:  Version 1.1
+*******************************************************************************/
+
+#ifndef __SMM_MPS2_H
+#define __SMM_MPS2_H
+
+#include "peripherallink.h"                         /* device specific header file    */
+
+#if defined ( __CC_ARM   )
+#pragma anon_unions
+#endif
+
+/******************************************************************************/
+/*                          FPGA System Register declaration                  */
+/******************************************************************************/
+
+typedef struct
+{
+  __IO uint32_t LED;             // Offset: 0x000 (R/W)  LED connections
+                                 //                         [31:2] : Reserved
+                                 //                          [1:0] : LEDs
+       uint32_t RESERVED1[1];
+  __IO uint32_t BUTTON;          // Offset: 0x008 (R/W)  Buttons
+                                 //                         [31:2] : Reserved
+                                 //                          [1:0] : Buttons
+       uint32_t RESERVED2[1];
+  __IO uint32_t CLK1HZ;          // Offset: 0x010 (R/W)  1Hz up counter
+  __IO uint32_t CLK100HZ;        // Offset: 0x014 (R/W)  100Hz up counter
+  __IO uint32_t COUNTER;         // Offset: 0x018 (R/W)  Cycle Up Counter
+                                 //                         Increments when 32-bit prescale counter reach zero
+  __IO uint32_t PRESCALE;        // Offset: 0x1C (R/W)  Prescaler
+                                 //                         Bit[31:0] : reload value for prescale counter
+  __IO uint32_t PSCNTR;          // Offset: 0x020 (R/W)  32-bit Prescale counter
+                                 //                         current value of the pre-scaler counter
+                                 //                         The Cycle Up Counter increment when the prescale down counter reach 0
+                                 //                         The pre-scaler counter is reloaded with PRESCALE after reaching 0.
+       uint32_t RESERVED4[10];
+  __IO uint32_t MISC;            // Offset: 0x04C (R/W)  Misc control */
+                                 //                         [31:10] : Reserved
+                                 //                            [9] : SHIELD_1_SPI_nCS
+                                 //                            [8] : SHIELD_0_SPI_nCS
+                                 //                            [7] : ADC_SPI_nCS
+                                 //                            [6] : CLCD_BL_CTRL
+                                 //                            [5] : CLCD_RD
+                                 //                            [4] : CLCD_RS
+                                 //                            [3] : CLCD_RESET
+                                 //                            [2] : RESERVED
+                                 //                            [1] : SPI_nSS
+                                 //                            [0] : CLCD_CS
+} MPS2_FPGAIO_TypeDef;
+
+// MISC register bit definitions
+
+#define CLCD_CS_Pos        0
+#define CLCD_CS_Msk        (1UL<<CLCD_CS_Pos)
+#define SPI_nSS_Pos        1
+#define SPI_nSS_Msk        (1UL<<SPI_nSS_Pos)
+#define CLCD_RESET_Pos     3
+#define CLCD_RESET_Msk     (1UL<<CLCD_RESET_Pos)
+#define CLCD_RS_Pos        4
+#define CLCD_RS_Msk        (1UL<<CLCD_RS_Pos)
+#define CLCD_RD_Pos        5
+#define CLCD_RD_Msk        (1UL<<CLCD_RD_Pos)
+#define CLCD_BL_Pos        6
+#define CLCD_BL_Msk        (1UL<<CLCD_BL_Pos)
+#define ADC_nCS_Pos        7
+#define ADC_nCS_Msk        (1UL<<ADC_nCS_Pos)
+#define SHIELD_0_nCS_Pos        8
+#define SHIELD_0_nCS_Msk        (1UL<<SHIELD_0_nCS_Pos)
+#define SHIELD_1_nCS_Pos        9
+#define SHIELD_1_nCS_Msk        (1UL<<SHIELD_1_nCS_Pos)
+
+/******************************************************************************/
+/*                        SCC Register declaration                            */
+/******************************************************************************/
+
+typedef struct                   //
+{
+  __IO uint32_t CFG_REG0;        // Offset: 0x000 (R/W)  Remaps block RAM to ZBT
+                                 //                         [31:1] : Reserved
+                                 //                            [0] 1 : REMAP BlockRam to ZBT
+  __IO uint32_t LEDS;            // Offset: 0x004 (R/W)  Controls the MCC user LEDs
+                                 //                         [31:8] : Reserved
+                                 //                          [7:0] : MCC LEDs
+       uint32_t RESERVED0[1];
+  __I  uint32_t SWITCHES;        // Offset: 0x00C (R/ )  Denotes the state of the MCC user switches
+                                 //                         [31:8] : Reserved
+                                 //                          [7:0] : These bits indicate state of the MCC switches
+  __I  uint32_t CFG_REG4;        // Offset: 0x010 (R/ )  Denotes the board revision
+                                 //                         [31:4] : Reserved
+                                 //                          [3:0] : Used by the MCC to pass PCB revision. 0 = A 1 = B
+       uint32_t RESERVED1[35];
+  __IO uint32_t SYS_CFGDATA_RTN; // Offset: 0x0A0 (R/W)  User data register
+                                 //                         [31:0] : Data
+  __IO uint32_t SYS_CFGDATA_OUT; // Offset: 0x0A4 (R/W)  User data register
+                                 //                         [31:0] : Data
+  __IO uint32_t SYS_CFGCTRL;     // Offset: 0x0A8 (R/W)  Control register
+                                 //                           [31] : Start (generates interrupt on write to this bit)
+                                 //                           [30] : R/W access
+                                 //                        [29:26] : Reserved
+                                 //                        [25:20] : Function value
+                                 //                        [19:12] : Reserved
+                                 //                         [11:0] : Device (value of 0/1/2 for supported clocks)
+  __IO uint32_t SYS_CFGSTAT;     // Offset: 0x0AC (R/W)  Contains status information
+                                 //                         [31:2] : Reserved
+                                 //                            [1] : Error
+                                 //                            [0] : Complete
+  __IO uint32_t RESERVED2[20];
+  __IO uint32_t SCC_DLL;         // Offset: 0x100 (R/W)  DLL Lock Register
+                                 //                        [31:24] : DLL LOCK MASK[7:0] - Indicate if the DLL locked is masked
+                                 //                        [23:16] : DLL LOCK MASK[7:0] - Indicate if the DLLs are locked or unlocked
+                                 //                         [15:1] : Reserved
+                                 //                            [0] : This bit indicates if all enabled DLLs are locked
+       uint32_t RESERVED3[957];
+  __I  uint32_t SCC_AID;         // Offset: 0xFF8 (R/ )  SCC AID Register
+                                 //                        [31:24] : FPGA build number
+                                 //                        [23:20] : V2M-MPS2 target board revision (A = 0, B = 1)
+                                 //                        [19:11] : Reserved
+                                 //                           [10] : if “1” SCC_SW register has been implemented
+                                 //                            [9] : if “1” SCC_LED register has been implemented
+                                 //                            [8] : if “1” DLL lock register has been implemented
+                                 //                          [7:0] : number of SCC configuration register
+  __I  uint32_t SCC_ID;          // Offset: 0xFFC (R/ )  Contains information about the FPGA image
+                                 //                        [31:24] : Implementer ID: 0x41 = ARM
+                                 //                        [23:20] : Application note IP variant number
+                                 //                        [19:16] : IP Architecture: 0x4 =AHB
+                                 //                         [15:4] : Primary part number: 386 = AN386
+                                 //                          [3:0] : Application note IP revision number
+} MPS2_SCC_TypeDef;
+
+
+/******************************************************************************/
+/*                        SSP Peripheral declaration                          */
+/******************************************************************************/
+
+typedef struct                   // Document DDI0194G_ssp_pl022_r1p3_trm.pdf
+{
+  __IO uint32_t CR0;             // Offset: 0x000 (R/W)  Control register 0
+                                 //                        [31:16] : Reserved
+                                 //                         [15:8] : Serial clock rate
+                                 //                            [7] : SSPCLKOUT phase,    applicable to Motorola SPI frame format only
+                                 //                            [6] : SSPCLKOUT polarity, applicable to Motorola SPI frame format only
+                                 //                          [5:4] : Frame format
+                                 //                          [3:0] : Data Size Select
+  __IO uint32_t CR1;             // Offset: 0x004 (R/W)  Control register 1
+                                 //                         [31:4] : Reserved
+                                 //                            [3] : Slave-mode output disable
+                                 //                            [2] : Master or slave mode select
+                                 //                            [1] : Synchronous serial port enable
+                                 //                            [0] : Loop back mode
+  __IO uint32_t DR;              // Offset: 0x008 (R/W)  Data register
+                                 //                        [31:16] : Reserved
+                                 //                         [15:0] : Transmit/Receive FIFO
+  __I  uint32_t SR;              // Offset: 0x00C (R/ )  Status register
+                                 //                         [31:5] : Reserved
+                                 //                            [4] : PrimeCell SSP busy flag
+                                 //                            [3] : Receive FIFO full
+                                 //                            [2] : Receive FIFO not empty
+                                 //                            [1] : Transmit FIFO not full
+                                 //                            [0] : Transmit FIFO empty
+  __IO uint32_t CPSR;            // Offset: 0x010 (R/W)  Clock prescale register
+                                 //                         [31:8] : Reserved
+                                 //                          [8:0] : Clock prescale divisor
+  __IO uint32_t IMSC;            // Offset: 0x014 (R/W)  Interrupt mask set or clear register
+                                 //                         [31:4] : Reserved
+                                 //                            [3] : Transmit FIFO interrupt mask
+                                 //                            [2] : Receive FIFO interrupt mask
+                                 //                            [1] : Receive timeout interrupt mask
+                                 //                            [0] : Receive overrun interrupt mask
+  __I  uint32_t RIS;             // Offset: 0x018 (R/ )  Raw interrupt status register
+                                 //                         [31:4] : Reserved
+                                 //                            [3] : raw interrupt state, prior to masking, of the SSPTXINTR interrupt
+                                 //                            [2] : raw interrupt state, prior to masking, of the SSPRXINTR interrupt
+                                 //                            [1] : raw interrupt state, prior to masking, of the SSPRTINTR interrupt
+                                 //                            [0] : raw interrupt state, prior to masking, of the SSPRORINTR interrupt
+  __I  uint32_t MIS;             // Offset: 0x01C (R/ )  Masked interrupt status register
+                                 //                         [31:4] : Reserved
+                                 //                            [3] : transmit FIFO masked interrupt state, after masking, of the SSPTXINTR interrupt
+                                 //                            [2] : receive FIFO masked interrupt state, after masking, of the SSPRXINTR interrupt
+                                 //                            [1] : receive timeout masked interrupt state, after masking, of the SSPRTINTR interrupt
+                                 //                            [0] : receive over run masked interrupt status, after masking, of the SSPRORINTR interrupt
+  __O  uint32_t ICR;             // Offset: 0x020 ( /W)  Interrupt clear register
+                                 //                         [31:2] : Reserved
+                                 //                            [1] : Clears the SSPRTINTR interrupt
+                                 //                            [0] : Clears the SSPRORINTR interrupt
+  __IO uint32_t DMACR;           // Offset: 0x024 (R/W)  DMA control register
+                                 //                         [31:2] : Reserved
+                                 //                            [1] : Transmit DMA Enable
+                                 //                            [0] : Receive DMA Enable
+} MPS2_SSP_TypeDef;
+
+
+// SSP_CR0 Control register 0
+#define SSP_CR0_DSS_Pos         0           // Data Size Select
+#define SSP_CR0_DSS_Msk         (0xF<<SSP_CR0_DSS_Pos)
+#define SSP_CR0_FRF_Pos         4           // Frame Format Select
+#define SSP_CR0_FRF_Msk         (3UL<<SSP_CR0_FRM_Pos)
+#define SSP_CR0_SPO_Pos         6           // SSPCLKOUT polarity
+#define SSP_CR0_SPO_Msk         (1UL<<SSP_CR0_SPO_Pos)
+#define SSP_CR0_SPH_Pos         7           // SSPCLKOUT phase
+#define SSP_CR0_SPH_Msk         (1UL<<SSP_CR0_SPH_Pos)
+#define SSP_CR0_SCR_Pos         8           // Serial Clock Rate (divide)
+#define SSP_CR0_SCR_Msk         (0xFF<<SSP_CR0_SCR_Pos)
+
+#define SSP_CR0_SCR_DFLT        0x0300      // Serial Clock Rate (divide), default set at 3
+#define SSP_CR0_FRF_MOT         0x0000      // Frame format, Motorola
+#define SSP_CR0_DSS_8           0x0007      // Data packet size, 8bits
+#define SSP_CR0_DSS_16          0x000F      // Data packet size, 16bits
+
+// SSP_CR1 Control register 1
+#define SSP_CR1_LBM_Pos         0           // Loop Back Mode
+#define SSP_CR1_LBM_Msk         (1UL<<SSP_CR1_LBM_Pos)
+#define SSP_CR1_SSE_Pos         1           // Serial port enable
+#define SSP_CR1_SSE_Msk         (1UL<<SSP_CR1_SSE_Pos)
+#define SSP_CR1_MS_Pos          2           // Master or Slave mode
+#define SSP_CR1_MS_Msk          (1UL<<SSP_CR1_MS_Pos)
+#define SSP_CR1_SOD_Pos         3           // Slave Output mode Disable
+#define SSP_CR1_SOD_Msk         (1UL<<SSP_CR1_SOD_Pos)
+
+// SSP_SR Status register
+#define SSP_SR_TFE_Pos          0           // Transmit FIFO empty
+#define SSP_SR_TFE_Msk          (1UL<<SSP_SR_TFE_Pos)
+#define SSP_SR_TNF_Pos          1           // Transmit FIFO not full
+#define SSP_SR_TNF_Msk          (1UL<<SSP_SR_TNF_Pos)
+#define SSP_SR_RNE_Pos          2           // Receive  FIFO not empty
+#define SSP_SR_RNE_Msk          (1UL<<SSP_SR_RNE_Pos)
+#define SSP_SR_RFF_Pos          3           // Receive  FIFO full
+#define SSP_SR_RFF_Msk          (1UL<<SSP_SR_RFF_Pos)
+#define SSP_SR_BSY_Pos          4           // Busy
+#define SSP_SR_BSY_Msk          (1UL<<SSP_SR_BSY_Pos)
+
+// SSP_CPSR Clock prescale register
+#define SSP_CPSR_CPD_Pos        0           // Clock prescale divisor
+#define SSP_CPSR_CPD_Msk        (0xFF<<SSP_CPSR_CDP_Pos)
+
+#define SSP_CPSR_DFLT        0x0008      // Clock prescale (use with SCR), default set at 8
+
+// SSPIMSC Interrupt mask set and clear register
+#define SSP_IMSC_RORIM_Pos         0           // Receive overrun not Masked
+#define SSP_IMSC_RORIM_Msk         (1UL<<SSP_IMSC_RORIM_Pos)
+#define SSP_IMSC_RTIM_Pos          1           // Receive timeout not Masked
+#define SSP_IMSC_RTIM_Msk          (1UL<<SSP_IMSC_RTIM_Pos)
+#define SSP_IMSC_RXIM_Pos          2           // Receive  FIFO not Masked
+#define SSP_IMSC_RXIM_Msk          (1UL<<SSP_IMSC_RXIM_Pos)
+#define SSP_IMSC_TXIM_Pos          3           // Transmit FIFO not Masked
+#define SSP_IMSC_TXIM_Msk          (1UL<<SSP_IMSC_TXIM_Pos)
+
+// SSPRIS Raw interrupt status register
+#define SSP_RIS_RORRIS_Pos         0           // Raw Overrun  interrupt flag
+#define SSP_RIS_RORRIS_Msk         (1UL<<SSP_RIS_RORRIS_Pos)
+#define SSP_RIS_RTRIS_Pos          1           // Raw Timemout interrupt flag
+#define SSP_RIS_RTRIS_Msk          (1UL<<SSP_RIS_RTRIS_Pos)
+#define SSP_RIS_RXRIS_Pos          2           // Raw Receive  interrupt flag
+#define SSP_RIS_RXRIS_Msk          (1UL<<SSP_RIS_RXRIS_Pos)
+#define SSP_RIS_TXRIS_Pos          3           // Raw Transmit interrupt flag
+#define SSP_RIS_TXRIS_Msk          (1UL<<SSP_RIS_TXRIS_Pos)
+
+// SSPMIS Masked interrupt status register
+#define SSP_MIS_RORMIS_Pos         0           // Masked Overrun  interrupt flag
+#define SSP_MIS_RORMIS_Msk         (1UL<<SSP_MIS_RORMIS_Pos)
+#define SSP_MIS_RTMIS_Pos          1           // Masked Timemout interrupt flag
+#define SSP_MIS_RTMIS_Msk          (1UL<<SSP_MIS_RTMIS_Pos)
+#define SSP_MIS_RXMIS_Pos          2           // Masked Receive  interrupt flag
+#define SSP_MIS_RXMIS_Msk          (1UL<<SSP_MIS_RXMIS_Pos)
+#define SSP_MIS_TXMIS_Pos          3           // Masked Transmit interrupt flag
+#define SSP_MIS_TXMIS_Msk          (1UL<<SSP_MIS_TXMIS_Pos)
+
+// SSPICR Interrupt clear register
+#define SSP_ICR_RORIC_Pos           0           // Clears Overrun  interrupt flag
+#define SSP_ICR_RORIC_Msk           (1UL<<SSP_ICR_RORIC_Pos)
+#define SSP_ICR_RTIC_Pos            1           // Clears Timemout interrupt flag
+#define SSP_ICR_RTIC_Msk            (1UL<<SSP_ICR_RTIC_Pos)
+
+// SSPDMACR DMA control register
+#define SSP_DMACR_RXDMAE_Pos        0           // Enable Receive  FIFO DMA
+#define SSP_DMACR_RXDMAE_Msk        (1UL<<SSP_DMACR_RXDMAE_Pos)
+#define SSP_DMACR_TXDMAE_Pos        1           // Enable Transmit FIFO DMA
+#define SSP_DMACR_TXDMAE_Msk        (1UL<<SSP_DMACR_TXDMAE_Pos)
+
+/******************************************************************************/
+/*               Audio and Touch Screen (I2C) Peripheral declaration          */
+/******************************************************************************/
+
+typedef struct
+{
+  union {
+  __O   uint32_t  CONTROLS;     // Offset: 0x000 CONTROL Set Register     ( /W)
+  __I   uint32_t  CONTROL;      // Offset: 0x000 CONTROL Status Register  (R/ )
+  };
+  __O    uint32_t  CONTROLC;     // Offset: 0x004 CONTROL Clear Register    ( /W)
+} MPS2_I2C_TypeDef;
+
+#define SDA                1 << 1
+#define SCL                1 << 0
+
+
+/******************************************************************************/
+/*               Audio I2S Peripheral declaration                             */
+/******************************************************************************/
+
+typedef struct
+{
+  /*!< Offset: 0x000 CONTROL Register    (R/W) */
+  __IO   uint32_t  CONTROL; // <h> CONTROL </h>
+                              //   <o.0> TX Enable
+                              //     <0=> TX disabled
+                              //     <1=> TX enabled
+                              //   <o.1> TX IRQ Enable
+                              //     <0=> TX IRQ disabled
+                              //     <1=> TX IRQ enabled
+                              //   <o.2> RX Enable
+                              //     <0=> RX disabled
+                              //     <1=> RX enabled
+                              //   <o.3> RX IRQ Enable
+                              //     <0=> RX IRQ disabled
+                              //     <1=> RX IRQ enabled
+                              //   <o.10..8> TX Buffer Water Level
+                              //     <0=> / IRQ triggers when any space available
+                              //     <1=> / IRQ triggers when more than 1 space available
+                              //     <2=> / IRQ triggers when more than 2 space available
+                              //     <3=> / IRQ triggers when more than 3 space available
+                              //     <4=> Undefined!
+                              //     <5=> Undefined!
+                              //     <6=> Undefined!
+                              //     <7=> Undefined!
+                              //   <o.14..12> RX Buffer Water Level
+                              //     <0=> Undefined!
+                              //     <1=> / IRQ triggers when less than 1 space available
+                              //     <2=> / IRQ triggers when less than 2 space available
+                              //     <3=> / IRQ triggers when less than 3 space available
+                              //     <4=> / IRQ triggers when less than 4 space available
+                              //     <5=> Undefined!
+                              //     <6=> Undefined!
+                              //     <7=> Undefined!
+                              //   <o.16> FIFO reset
+                              //     <0=> Normal operation
+                              //     <1=> FIFO reset
+                              //   <o.17> Audio Codec reset
+                              //     <0=> Normal operation
+                              //     <1=> Assert audio Codec reset
+  /*!< Offset: 0x004 STATUS Register     (R/ ) */
+  __I    uint32_t  STATUS;  // <h> STATUS </h>
+                              //   <o.0> TX Buffer alert
+                              //     <0=> TX buffer don't need service yet
+                              //     <1=> TX buffer need service
+                              //   <o.1> RX Buffer alert
+                              //     <0=> RX buffer don't need service yet
+                              //     <1=> RX buffer need service
+                              //   <o.2> TX Buffer Empty
+                              //     <0=> TX buffer have data
+                              //     <1=> TX buffer empty
+                              //   <o.3> TX Buffer Full
+                              //     <0=> TX buffer not full
+                              //     <1=> TX buffer full
+                              //   <o.4> RX Buffer Empty
+                              //     <0=> RX buffer have data
+                              //     <1=> RX buffer empty
+                              //   <o.5> RX Buffer Full
+                              //     <0=> RX buffer not full
+                              //     <1=> RX buffer full
+  union {
+   /*!< Offset: 0x008 Error Status Register (R/ ) */
+    __I    uint32_t  ERROR;  // <h> ERROR </h>
+                              //   <o.0> TX error
+                              //     <0=> Okay
+                              //     <1=> TX overrun/underrun
+                              //   <o.1> RX error
+                              //     <0=> Okay
+                              //     <1=> RX overrun/underrun
+   /*!< Offset: 0x008 Error Clear Register  ( /W) */
+    __O    uint32_t  ERRORCLR;  // <h> ERRORCLR </h>
+                              //   <o.0> TX error
+                              //     <0=> Okay
+                              //     <1=> Clear TX error
+                              //   <o.1> RX error
+                              //     <0=> Okay
+                              //     <1=> Clear RX error
+    };
+   /*!< Offset: 0x00C Divide ratio Register (R/W) */
+  __IO   uint32_t  DIVIDE;  // <h> Divide ratio for Left/Right clock </h>
+                              //   <o.9..0> TX error (default 0x80)
+   /*!< Offset: 0x010 Transmit Buffer       ( /W) */
+  __O    uint32_t  TXBUF;  // <h> Transmit buffer </h>
+                              //   <o.15..0> Right channel
+                              //   <o.31..16> Left channel
+   /*!< Offset: 0x014 Receive Buffer        (R/ ) */
+  __I    uint32_t  RXBUF;  // <h> Receive buffer </h>
+                              //   <o.15..0> Right channel
+                              //   <o.31..16> Left channel
+         uint32_t  RESERVED1[186];
+  __IO uint32_t ITCR;         // <h> Integration Test Control Register </h>
+                              //   <o.0> ITEN
+                              //     <0=> Normal operation
+                              //     <1=> Integration Test mode enable
+  __O  uint32_t ITIP1;        // <h> Integration Test Input Register 1</h>
+                              //   <o.0> SDIN
+  __O  uint32_t ITOP1;        // <h> Integration Test Output Register 1</h>
+                              //   <o.0> SDOUT
+                              //   <o.1> SCLK
+                              //   <o.2> LRCK
+                              //   <o.3> IRQOUT
+} MPS2_I2S_TypeDef;
+
+#define I2S_CONTROL_TXEN_Pos        0
+#define I2S_CONTROL_TXEN_Msk        (1UL<<I2S_CONTROL_TXEN_Pos)
+
+#define I2S_CONTROL_TXIRQEN_Pos     1
+#define I2S_CONTROL_TXIRQEN_Msk     (1UL<<I2S_CONTROL_TXIRQEN_Pos)
+
+#define I2S_CONTROL_RXEN_Pos        2
+#define I2S_CONTROL_RXEN_Msk        (1UL<<I2S_CONTROL_RXEN_Pos)
+
+#define I2S_CONTROL_RXIRQEN_Pos     3
+#define I2S_CONTROL_RXIRQEN_Msk     (1UL<<I2S_CONTROL_RXIRQEN_Pos)
+
+#define I2S_CONTROL_TXWLVL_Pos      8
+#define I2S_CONTROL_TXWLVL_Msk      (7UL<<I2S_CONTROL_TXWLVL_Pos)
+
+#define I2S_CONTROL_RXWLVL_Pos      12
+#define I2S_CONTROL_RXWLVL_Msk      (7UL<<I2S_CONTROL_RXWLVL_Pos)
+/* FIFO reset*/
+#define I2S_CONTROL_FIFORST_Pos     16
+#define I2S_CONTROL_FIFORST_Msk     (1UL<<I2S_CONTROL_FIFORST_Pos)
+/* Codec reset*/
+#define I2S_CONTROL_CODECRST_Pos    17
+#define I2S_CONTROL_CODECRST_Msk    (1UL<<I2S_CONTROL_CODECRST_Pos)
+
+#define I2S_STATUS_TXIRQ_Pos        0
+#define I2S_STATUS_TXIRQ_Msk        (1UL<<I2S_STATUS_TXIRQ_Pos)
+
+#define I2S_STATUS_RXIRQ_Pos        1
+#define I2S_STATUS_RXIRQ_Msk        (1UL<<I2S_STATUS_RXIRQ_Pos)
+
+#define I2S_STATUS_TXEmpty_Pos      2
+#define I2S_STATUS_TXEmpty_Msk      (1UL<<I2S_STATUS_TXEmpty_Pos)
+
+#define I2S_STATUS_TXFull_Pos       3
+#define I2S_STATUS_TXFull_Msk       (1UL<<I2S_STATUS_TXFull_Pos)
+
+#define I2S_STATUS_RXEmpty_Pos      4
+#define I2S_STATUS_RXEmpty_Msk      (1UL<<I2S_STATUS_RXEmpty_Pos)
+
+#define I2S_STATUS_RXFull_Pos       5
+#define I2S_STATUS_RXFull_Msk       (1UL<<I2S_STATUS_RXFull_Pos)
+
+#define I2S_ERROR_TXERR_Pos         0
+#define I2S_ERROR_TXERR_Msk         (1UL<<I2S_ERROR_TXERR_Pos)
+
+#define I2S_ERROR_RXERR_Pos         1
+#define I2S_ERROR_RXERR_Msk         (1UL<<I2S_ERROR_RXERR_Pos)
+
+/******************************************************************************/
+/*                       SMSC9220 Register Definitions                        */
+/******************************************************************************/
+
+typedef struct                   // SMSC LAN9220
+{
+__I   uint32_t  RX_DATA_PORT;          //   Receive FIFO Ports (offset 0x0)
+      uint32_t  RESERVED1[0x7];
+__O   uint32_t  TX_DATA_PORT;          //   Transmit FIFO Ports (offset 0x20)
+      uint32_t  RESERVED2[0x7];
+
+__I   uint32_t  RX_STAT_PORT;          //   Receive FIFO status port (offset 0x40)
+__I   uint32_t  RX_STAT_PEEK;          //   Receive FIFO status peek (offset 0x44)
+__I   uint32_t  TX_STAT_PORT;          //   Transmit FIFO status port (offset 0x48)
+__I   uint32_t  TX_STAT_PEEK;          //   Transmit FIFO status peek (offset 0x4C)
+
+__I   uint32_t  ID_REV;                //   Chip ID and Revision (offset 0x50)
+__IO  uint32_t  IRQ_CFG;               //   Main Interrupt Configuration (offset 0x54)
+__IO  uint32_t  INT_STS;               //   Interrupt Status (offset 0x58)
+__IO  uint32_t  INT_EN;                //   Interrupt Enable Register (offset 0x5C)
+      uint32_t  RESERVED3;             //   Reserved for future use (offset 0x60)
+__I   uint32_t  BYTE_TEST;             //   Read-only byte order testing register 87654321h (offset 0x64)
+__IO  uint32_t  FIFO_INT;              //   FIFO Level Interrupts (offset 0x68)
+__IO  uint32_t  RX_CFG;                //   Receive Configuration (offset 0x6C)
+__IO  uint32_t  TX_CFG;                //   Transmit Configuration (offset 0x70)
+__IO  uint32_t  HW_CFG;                //   Hardware Configuration (offset 0x74)
+__IO  uint32_t  RX_DP_CTL;             //   RX Datapath Control (offset 0x78)
+__I   uint32_t  RX_FIFO_INF;           //   Receive FIFO Information (offset 0x7C)
+__I   uint32_t  TX_FIFO_INF;           //   Transmit FIFO Information (offset 0x80)
+__IO  uint32_t  PMT_CTRL;              //   Power Management Control (offset 0x84)
+__IO  uint32_t  GPIO_CFG;              //   General Purpose IO Configuration (offset 0x88)
+__IO  uint32_t  GPT_CFG;               //   General Purpose Timer Configuration (offset 0x8C)
+__I   uint32_t  GPT_CNT;               //   General Purpose Timer Count (offset 0x90)
+      uint32_t  RESERVED4;             //   Reserved for future use (offset 0x94)
+__IO  uint32_t  ENDIAN;                //   WORD SWAP Register (offset 0x98)
+__I   uint32_t  FREE_RUN;              //   Free Run Counter (offset 0x9C)
+__I   uint32_t  RX_DROP;               //   RX Dropped Frames Counter (offset 0xA0)
+__IO  uint32_t  MAC_CSR_CMD;           //   MAC CSR Synchronizer Command (offset 0xA4)
+__IO  uint32_t  MAC_CSR_DATA;          //   MAC CSR Synchronizer Data (offset 0xA8)
+__IO  uint32_t  AFC_CFG;               //   Automatic Flow Control Configuration (offset 0xAC)
+__IO  uint32_t  E2P_CMD;               //   EEPROM Command (offset 0xB0)
+__IO  uint32_t  E2P_DATA;              //   EEPROM Data (offset 0xB4)
+
+} SMSC9220_TypeDef;
+
+// SMSC9220 MAC Registers       Indices
+#define SMSC9220_MAC_CR         0x1
+#define SMSC9220_MAC_ADDRH      0x2
+#define SMSC9220_MAC_ADDRL      0x3
+#define SMSC9220_MAC_HASHH      0x4
+#define SMSC9220_MAC_HASHL      0x5
+#define SMSC9220_MAC_MII_ACC    0x6
+#define SMSC9220_MAC_MII_DATA   0x7
+#define SMSC9220_MAC_FLOW       0x8
+#define SMSC9220_MAC_VLAN1      0x9
+#define SMSC9220_MAC_VLAN2      0xA
+#define SMSC9220_MAC_WUFF       0xB
+#define SMSC9220_MAC_WUCSR      0xC
+
+// SMSC9220 PHY Registers       Indices
+#define SMSC9220_PHY_BCONTROL   0x0
+#define SMSC9220_PHY_BSTATUS    0x1
+#define SMSC9220_PHY_ID1        0x2
+#define SMSC9220_PHY_ID2        0x3
+#define SMSC9220_PHY_ANEG_ADV   0x4
+#define SMSC9220_PHY_ANEG_LPA   0x5
+#define SMSC9220_PHY_ANEG_EXP   0x6
+#define SMSC9220_PHY_MCONTROL   0x17
+#define SMSC9220_PHY_MSTATUS    0x18
+#define SMSC9220_PHY_CSINDICATE 0x27
+#define SMSC9220_PHY_INTSRC     0x29
+#define SMSC9220_PHY_INTMASK    0x30
+#define SMSC9220_PHY_CS         0x31
+
+/******************************************************************************/
+/*                         Peripheral memory map                              */
+/******************************************************************************/
+
+#define MPS2_SSP0_BASE          (0x40020000ul)       /* User SSP Base Address   */
+#define MPS2_SSP1_BASE          (0x40021000ul)       /* CLCD SSP Base Address   */
+#define MPS2_TSC_I2C_BASE       (0x40022000ul)       /* Touch Screen I2C Base Address */
+#define MPS2_AAIC_I2C_BASE      (0x40023000ul)       /* Audio Interface I2C Base Address */
+#define MPS2_AAIC_I2S_BASE      (0x40024000ul)       /* Audio Interface I2S Base Address */
+#define MPS2_SSP2_BASE          (0x40025000ul)       /* adc SSP Base Address   */
+#define MPS2_SSP3_BASE          (0x40026000ul)       /* shield 0 SSP Base Address   */
+#define MPS2_SSP4_BASE          (0x40027000ul)       /* shield 1 SSP Base Address   */
+#define MPS2_FPGAIO_BASE        (0x40028000ul)       /* FPGAIO Base Address */
+#define MPS2_SHIELD0_I2C_BASE   (0x40029000ul)       /* Audio Interface I2C Base Address */
+#define MPS2_SHIELD1_I2C_BASE   (0x4002A000ul)       /* Audio Interface I2C Base Address */
+#define MPS2_SCC_BASE           (0x4002F000ul)       /* SCC Base Address    */
+
+#define SMSC9220_BASE           (0x40200000ul)       /* Ethernet SMSC9220 Base Address   */
+
+#define MPS2_VGA_TEXT_BUFFER    (0x41000000ul)       /* VGA Text Buffer Address */
+#define MPS2_VGA_BUFFER         (0x41100000ul)       /* VGA Buffer Base Address */
+
+/******************************************************************************/
+/*                         Peripheral declaration                             */
+/******************************************************************************/
+
+#define SMSC9220                ((SMSC9220_TypeDef      *) SMSC9220_BASE )
+#define MPS2_TS_I2C             ((MPS2_I2C_TypeDef      *) MPS2_TSC_I2C_BASE )
+#define MPS2_AAIC_I2C           ((MPS2_I2C_TypeDef      *) MPS2_AAIC_I2C_BASE )
+#define MPS2_SHIELD0_I2C        ((MPS2_I2C_TypeDef      *) MPS2_SHIELD0_I2C_BASE )
+#define MPS2_SHIELD1_I2C        ((MPS2_I2C_TypeDef      *) MPS2_SHIELD1_I2C_BASE )
+#define MPS2_AAIC_I2S           ((MPS2_I2S_TypeDef      *) MPS2_AAIC_I2S_BASE )
+#define MPS2_FPGAIO             ((MPS2_FPGAIO_TypeDef   *) MPS2_FPGAIO_BASE )
+#define MPS2_SCC                ((MPS2_SCC_TypeDef      *) MPS2_SCC_BASE )
+#define MPS2_SSP0               ((MPS2_SSP_TypeDef      *) MPS2_SSP0_BASE )
+#define MPS2_SSP1               ((MPS2_SSP_TypeDef      *) MPS2_SSP1_BASE )
+#define MPS2_SSP2               ((MPS2_SSP_TypeDef      *) MPS2_SSP2_BASE )
+#define MPS2_SSP3               ((MPS2_SSP_TypeDef      *) MPS2_SSP3_BASE )
+#define MPS2_SSP4               ((MPS2_SSP_TypeDef      *) MPS2_SSP4_BASE )
+
+/******************************************************************************/
+/*                     General Function Definitions                           */
+/******************************************************************************/
+
+
+/******************************************************************************/
+/*                     General MACRO Definitions                              */
+/******************************************************************************/
+
+
+
+#endif /* __SMM_MPS2_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_IOTSS_BEID/TOOLCHAIN_ARM_STD/MPS2.sct	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,47 @@
+;* MPS2 CMSIS Library
+;*
+;* Copyright (c) 2006-2016 ARM Limited
+;* All rights reserved.
+;*
+;* 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. Neither the name of the copyright holder nor the names of its contributors
+;* may be used to endorse or promote products derived from this software without
+;* specific prior written permission.
+;*
+;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+;* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+;* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
+;*
+; *************************************************************
+; *** Scatter-Loading Description File                      ***
+; *************************************************************
+
+LR_IROM1 0x00000000 0x00400000  {    ; load region size_region
+  ER_IROM1 0x00000000 0x00400000  {  ; load address = execution address
+   *.o (RESET, +First)
+   *(InRoot$$Sections)
+   .ANY (+RO)
+  }
+  ; Total: 80 vectors = 320 bytes (0x140) to be reserved in RAM
+  RW_IRAM1 (0x20000000+0x140) (0x400000-0x140)  {  ; RW data
+   .ANY (+RW +ZI)
+  }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_IOTSS_BEID/TOOLCHAIN_ARM_STD/startup_MPS2.s	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,358 @@
+; MPS2 CMSIS Library
+;
+; Copyright (c) 2006-2016 ARM Limited
+; All rights reserved.
+;
+; 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. Neither the name of the copyright holder nor the names of its contributors
+; may be used to endorse or promote products derived from this software without
+; specific prior written permission.
+;
+; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
+;******************************************************************************
+; @file     startup_CMSDK_BEID.s
+; @brief    CMSIS Core Device Startup File for
+;           CMSDK_BEID Device
+;
+;******************************************************************************
+;
+;-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
+;
+
+
+; <h> Stack Configuration
+;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+; </h>
+
+Stack_Size      EQU     0x00004000
+
+                AREA    STACK, NOINIT, READWRITE, ALIGN=3
+Stack_Mem       SPACE   Stack_Size
+__initial_sp
+
+
+; <h> Heap Configuration
+;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
+; </h>
+
+Heap_Size       EQU     0x00001000
+
+                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
+__heap_base
+Heap_Mem        SPACE   Heap_Size
+__heap_limit
+
+
+                PRESERVE8
+                THUMB
+
+
+; Vector Table Mapped to Address 0 at Reset
+
+                AREA    RESET, DATA, READONLY
+                EXPORT  __Vectors
+                EXPORT  __Vectors_End
+                EXPORT  __Vectors_Size
+
+__Vectors       DCD     __initial_sp              ; Top of Stack
+                DCD     Reset_Handler             ; Reset Handler
+                DCD     NMI_Handler               ; NMI Handler
+                DCD     HardFault_Handler         ; Hard Fault Handler
+                DCD     MemManage_Handler         ; MPU Fault Handler
+                DCD     BusFault_Handler          ; Bus Fault Handler
+                DCD     UsageFault_Handler        ; Usage Fault Handler
+                DCD     0                         ; Reserved
+                DCD     0                         ; Reserved
+                DCD     0                         ; Reserved
+                DCD     0                         ; Reserved
+                DCD     SVC_Handler               ; SVCall Handler
+                DCD     DebugMon_Handler          ; Debug Monitor Handler
+                DCD     0                         ; Reserved
+                DCD     PendSV_Handler            ; PendSV Handler
+                DCD     SysTick_Handler           ; SysTick Handler
+
+                ; External Interrupts
+                DCD     UART0_IRQHandler        ;   0:UART 0 RX and TX Combined Interrupt
+                DCD     Spare_IRQHandler        ;   1:Undefined
+                DCD     UART1_IRQHandler        ;   2:UART 1 RX and TX Combined Interrupt
+                DCD     I2C0_IRQHandler         ;   3:I2C 0 Interrupt
+                DCD     I2C1_IRQHandler         ;   4:I2C 1 Interrupt
+                DCD     RTC_IRQHandler          ;   5:RTC Interrupt
+                DCD     PORT0_IRQHandler        ;   6:GPIO Port 0 combined Interrupt
+                DCD     PORT1_ALL_IRQHandler    ;   7:GPIO Port 1 combined Interrupt
+                DCD     TIMER0_IRQHandler       ;   8:TIMER 0 Interrupt
+                DCD     TIMER1_IRQHandler       ;   9:TIMER 1 Interrupt
+                DCD     DUALTIMER_IRQHandler    ;   10:Dual Timer Interrupt
+                DCD     SPI0_IRQHandler         ;   11:SPI 0 Interrupt
+                DCD     UARTOVF_IRQHandler      ;   12:UART 0,1,2 Overflow Interrupt
+                DCD     SPI1_IRQHandler         ;   13:SPI 1 Interrupt
+                DCD     RESERVED0_IRQHandler    ;   14:Reserved
+                DCD     TSC_IRQHandler          ;   15:Touch Screen Interrupt
+                DCD     PORT01_0_IRQHandler     ;   16:GPIO Port 0 pin 0 Handler
+                DCD     PORT01_1_IRQHandler     ;   17:GPIO Port 0 pin 1 Handler
+                DCD     PORT01_2_IRQHandler     ;   18:GPIO Port 0 pin 2 Handler
+                DCD     PORT01_3_IRQHandler     ;   19:GPIO Port 0 pin 3 Handler
+                DCD     PORT01_4_IRQHandler     ;   20:GPIO Port 0 pin 4 Handler
+                DCD     PORT01_5_IRQHandler     ;   21:GPIO Port 0 pin 5 Handler
+                DCD     PORT01_6_IRQHandler     ;   22:GPIO Port 0 pin 6 Handler
+                DCD     PORT01_7_IRQHandler     ;   23:GPIO Port 0 pin 7 Handler
+                DCD     PORT01_8_IRQHandler     ;   24:GPIO Port 0 pin 8 Handler
+                DCD     PORT01_9_IRQHandler     ;   25:GPIO Port 0 pin 9 Handler
+                DCD     PORT01_10_IRQHandler    ;   26:GPIO Port 0 pin 10 Handler
+                DCD     PORT01_11_IRQHandler    ;   27:GPIO Port 0 pin 11 Handler
+                DCD     PORT01_12_IRQHandler    ;   28:GPIO Port 0 pin 12 Handler
+                DCD     PORT01_13_IRQHandler    ;   29:GPIO Port 0 pin 13 Handler
+                DCD     PORT01_14_IRQHandler    ;   30:GPIO Port 0 pin 14 Handler
+                DCD     PORT01_15_IRQHandler    ;   31:GPIO Port 0 pin 15 Handler
+                DCD     SYSERROR_IRQHandler     ;   32:System Error Interrupt
+                DCD     EFLASH_IRQHandler       ;   33:Embedded Flash Interrupt
+                DCD     RESERVED1_IRQHandler    ;   34:Reserved
+                DCD     RESERVED2_IRQHandler    ;   35:Reserved
+                DCD     RESERVED3_IRQHandler    ;   36:Reserved
+                DCD     RESERVED4_IRQHandler    ;   37:Reserved
+                DCD     RESERVED5_IRQHandler    ;   38:Reserved
+                DCD     RESERVED6_IRQHandler    ;   39:Reserved
+                DCD     RESERVED7_IRQHandler    ;   40:Reserved
+                DCD     RESERVED8_IRQHandler    ;   41:Reserved
+                DCD     PORT2_ALL_IRQHandler    ;   42:GPIO Port 2 combined Interrupt
+                DCD     PORT3_ALL_IRQHandler    ;   43:GPIO Port 3 combined Interrupt
+                DCD     TRNG_IRQHandler         ;   44:Random number generator Interrupt
+                DCD     UART2_IRQHandler        ;   45:UART 2 RX and TX Combined Interrupt
+                DCD     UART3_IRQHandler        ;   46:UART 3 RX and TX Combined Interrupt
+                DCD     ETHERNET_IRQHandler     ;   47:Ethernet interrupt     t.b.a.
+                DCD     I2S_IRQHandler          ;   48:I2S Interrupt
+                DCD     MPS2_SPI0_IRQHandler    ;   49:SPI Interrupt (spi header)
+                DCD     MPS2_SPI1_IRQHandler    ;   50:SPI Interrupt (clcd)
+                DCD     MPS2_SPI2_IRQHandler    ;   51:SPI Interrupt (spi 1 ADC replacement)
+                DCD     MPS2_SPI3_IRQHandler    ;   52:SPI Interrupt (spi 0 shield 0 replacement)
+                DCD     MPS2_SPI4_IRQHandler    ;   53:SPI Interrupt  (shield 1)
+
+__Vectors_End
+
+__Vectors_Size  EQU     __Vectors_End - __Vectors
+
+                AREA    |.text|, CODE, READONLY
+
+
+; Reset Handler
+
+Reset_Handler   PROC
+                EXPORT  Reset_Handler             [WEAK]
+                IMPORT  SystemInit
+                IMPORT  __main
+                LDR     R0, =SystemInit
+                BLX     R0
+                LDR     R0, =__main
+                BX      R0
+                ENDP
+
+
+; Dummy Exception Handlers (infinite loops which can be modified)
+
+NMI_Handler     PROC
+                EXPORT  NMI_Handler               [WEAK]
+                B       .
+                ENDP
+HardFault_Handler\
+                PROC
+                EXPORT  HardFault_Handler         [WEAK]
+                B       .
+                ENDP
+MemManage_Handler\
+                PROC
+                EXPORT  MemManage_Handler         [WEAK]
+                B       .
+                ENDP
+BusFault_Handler\
+                PROC
+                EXPORT  BusFault_Handler          [WEAK]
+                B       .
+                ENDP
+UsageFault_Handler\
+                PROC
+                EXPORT  UsageFault_Handler        [WEAK]
+                B       .
+                ENDP
+SVC_Handler     PROC
+                EXPORT  SVC_Handler               [WEAK]
+                B       .
+                ENDP
+DebugMon_Handler\
+                PROC
+                EXPORT  DebugMon_Handler          [WEAK]
+                B       .
+                ENDP
+PendSV_Handler  PROC
+                EXPORT  PendSV_Handler            [WEAK]
+                B       .
+                ENDP
+SysTick_Handler PROC
+                EXPORT  SysTick_Handler           [WEAK]
+                B       .
+                ENDP
+
+Default_Handler PROC
+
+                EXPORT     UART0_IRQHandler        [WEAK]       ;   0:UART 0 RX and TX Combined Interrupt
+                EXPORT     Spare_IRQHandler        [WEAK]       ;   1:Undefined
+                EXPORT     UART1_IRQHandler        [WEAK]       ;   2:UART 1 RX and TX Combined Interrupt
+                EXPORT     I2C0_IRQHandler         [WEAK]       ;   3:I2C 0 Interrupt
+                EXPORT     I2C1_IRQHandler         [WEAK]       ;   4:I2C 1 Interrupt
+                EXPORT     RTC_IRQHandler          [WEAK]       ;   5:RTC Interrupt
+                EXPORT     PORT0_IRQHandler        [WEAK]       ;   6:GPIO Port 0 combined Interrupt
+                EXPORT     PORT1_ALL_IRQHandler    [WEAK]       ;   7:GPIO Port 1 combined Interrupt
+                EXPORT     TIMER0_IRQHandler       [WEAK]       ;   8:TIMER 0 Interrupt
+                EXPORT     TIMER1_IRQHandler       [WEAK]       ;   9:TIMER 1 Interrupt
+                EXPORT     DUALTIMER_IRQHandler    [WEAK]       ;   10:Dual Timer Interrupt
+                EXPORT     SPI0_IRQHandler         [WEAK]       ;   11:SPI 0 Interrupt
+                EXPORT     UARTOVF_IRQHandler      [WEAK]       ;   12:UART 0,1,2 Overflow Interrupt
+                EXPORT     SPI1_IRQHandler         [WEAK]       ;   13:SPI 1 Interrupt
+                EXPORT     RESERVED0_IRQHandler    [WEAK]       ;   14:Reserved
+                EXPORT     TSC_IRQHandler          [WEAK]       ;   15:Touch Screen Interrupt
+                EXPORT     PORT01_0_IRQHandler     [WEAK]       ;   16:GPIO Port 0 pin 0 Handler
+                EXPORT     PORT01_1_IRQHandler     [WEAK]       ;   17:GPIO Port 0 pin 1 Handler
+                EXPORT     PORT01_2_IRQHandler     [WEAK]       ;   18:GPIO Port 0 pin 2 Handler
+                EXPORT     PORT01_3_IRQHandler     [WEAK]       ;   19:GPIO Port 0 pin 3 Handler
+                EXPORT     PORT01_4_IRQHandler     [WEAK]       ;   20:GPIO Port 0 pin 4 Handler
+                EXPORT     PORT01_5_IRQHandler     [WEAK]       ;   21:GPIO Port 0 pin 5 Handler
+                EXPORT     PORT01_6_IRQHandler     [WEAK]       ;   22:GPIO Port 0 pin 6 Handler
+                EXPORT     PORT01_7_IRQHandler     [WEAK]       ;   23:GPIO Port 0 pin 7 Handler
+                EXPORT     PORT01_8_IRQHandler     [WEAK]       ;   24:GPIO Port 0 pin 8 Handler
+                EXPORT     PORT01_9_IRQHandler     [WEAK]       ;   25:GPIO Port 0 pin 9 Handler
+                EXPORT     PORT01_10_IRQHandler    [WEAK]       ;   26:GPIO Port 0 pin 10 Handler
+                EXPORT     PORT01_11_IRQHandler    [WEAK]       ;   27:GPIO Port 0 pin 11 Handler
+                EXPORT     PORT01_12_IRQHandler    [WEAK]       ;   28:GPIO Port 0 pin 12 Handler
+                EXPORT     PORT01_13_IRQHandler    [WEAK]       ;   29:GPIO Port 0 pin 13 Handler
+                EXPORT     PORT01_14_IRQHandler    [WEAK]       ;   30:GPIO Port 0 pin 14 Handler
+                EXPORT     PORT01_15_IRQHandler    [WEAK]       ;   31:GPIO Port 0 pin 15 Handler
+                EXPORT     SYSERROR_IRQHandler     [WEAK]       ;   32:System Error Interrupt
+                EXPORT     EFLASH_IRQHandler       [WEAK]       ;   33:Embedded Flash Interrupt
+                EXPORT     RESERVED1_IRQHandler    [WEAK]       ;   34:Reserved
+                EXPORT     RESERVED2_IRQHandler    [WEAK]       ;   35:Reserved
+                EXPORT     RESERVED3_IRQHandler    [WEAK]       ;   36:Reserved
+                EXPORT     RESERVED4_IRQHandler    [WEAK]       ;   37:Reserved
+                EXPORT     RESERVED5_IRQHandler    [WEAK]       ;   38:Reserved
+                EXPORT     RESERVED6_IRQHandler    [WEAK]       ;   39:Reserved
+                EXPORT     RESERVED7_IRQHandler    [WEAK]       ;   40:Reserved
+                EXPORT     RESERVED8_IRQHandler    [WEAK]       ;   41:Reserved
+                EXPORT     PORT2_ALL_IRQHandler    [WEAK]       ;   42:GPIO Port 2 combined Interrupt
+                EXPORT     PORT3_ALL_IRQHandler    [WEAK]       ;   43:GPIO Port 3 combined Interrupt
+                EXPORT     TRNG_IRQHandler         [WEAK]       ;   44:Random number generator Interrupt
+                EXPORT     UART2_IRQHandler        [WEAK]       ;   45:UART 2 RX and TX Combined Interrupt
+                EXPORT     UART3_IRQHandler        [WEAK]       ;   46:UART 3 RX and TX Combined Interrupt
+                EXPORT     ETHERNET_IRQHandler     [WEAK]       ;   47:Ethernet interrupt     t.b.a.
+                EXPORT     I2S_IRQHandler          [WEAK]       ;   48:I2S Interrupt
+                EXPORT     MPS2_SPI0_IRQHandler    [WEAK]       ;   49:SPI Interrupt (spi header)
+                EXPORT     MPS2_SPI1_IRQHandler    [WEAK]       ;   50:SPI Interrupt (clcd)
+                EXPORT     MPS2_SPI2_IRQHandler    [WEAK]       ;   51:SPI Interrupt (spi 1 ADC replacement)
+                EXPORT     MPS2_SPI3_IRQHandler    [WEAK]       ;   52:SPI Interrupt (spi 0 shield 0 replacement)
+                EXPORT     MPS2_SPI4_IRQHandler    [WEAK]       ;   53:SPI Interrupt  (shield 1)
+
+UART0_IRQHandler
+Spare_IRQHandler
+UART1_IRQHandler
+I2C0_IRQHandler
+I2C1_IRQHandler
+RTC_IRQHandler
+PORT0_IRQHandler
+PORT1_ALL_IRQHandler
+TIMER0_IRQHandler
+TIMER1_IRQHandler
+DUALTIMER_IRQHandler
+SPI0_IRQHandler
+UARTOVF_IRQHandler
+SPI1_IRQHandler
+RESERVED0_IRQHandler
+TSC_IRQHandler
+PORT01_0_IRQHandler
+PORT01_1_IRQHandler
+PORT01_2_IRQHandler
+PORT01_3_IRQHandler
+PORT01_4_IRQHandler
+PORT01_5_IRQHandler
+PORT01_6_IRQHandler
+PORT01_7_IRQHandler
+PORT01_8_IRQHandler
+PORT01_9_IRQHandler
+PORT01_10_IRQHandler
+PORT01_11_IRQHandler
+PORT01_12_IRQHandler
+PORT01_13_IRQHandler
+PORT01_14_IRQHandler
+PORT01_15_IRQHandler
+SYSERROR_IRQHandler
+EFLASH_IRQHandler
+RESERVED1_IRQHandler
+RESERVED2_IRQHandler
+RESERVED3_IRQHandler
+RESERVED4_IRQHandler
+RESERVED5_IRQHandler
+RESERVED6_IRQHandler
+RESERVED7_IRQHandler
+RESERVED8_IRQHandler
+PORT2_ALL_IRQHandler
+PORT3_ALL_IRQHandler
+TRNG_IRQHandler
+UART2_IRQHandler
+UART3_IRQHandler
+ETHERNET_IRQHandler
+I2S_IRQHandler
+MPS2_SPI0_IRQHandler
+MPS2_SPI1_IRQHandler
+MPS2_SPI2_IRQHandler
+MPS2_SPI3_IRQHandler
+MPS2_SPI4_IRQHandler
+                B       .
+
+                ENDP
+
+
+                ALIGN
+
+
+; User Initial Stack & Heap
+
+                IF      :DEF:__MICROLIB
+
+                EXPORT  __initial_sp
+                EXPORT  __heap_base
+                EXPORT  __heap_limit
+
+                ELSE
+
+                IMPORT  __use_two_region_memory
+                EXPORT  __user_initial_stackheap
+
+__user_initial_stackheap PROC
+                LDR     R0, =  Heap_Mem
+                LDR     R1, =(Stack_Mem + Stack_Size)
+                LDR     R2, = (Heap_Mem +  Heap_Size)
+                LDR     R3, = Stack_Mem
+                BX      LR
+                ENDP
+
+                ALIGN
+
+                ENDIF
+
+
+                END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_IOTSS_BEID/cmsis.h	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,42 @@
+/* MPS2 CMSIS Library
+*
+* Copyright (c) 2006-2016 ARM Limited
+* All rights reserved.
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
+* specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
+*******************************************************************************
+* A generic CMSIS include header, pulling in MPS2 specifics
+*******************************************************************************/
+
+#ifndef MBED_CMSIS_H
+#define MBED_CMSIS_H
+
+#include "CMSDK_BEID.h"
+#include "SMM_MPS2.h"
+#include "cmsis_nvic.h"
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_IOTSS_BEID/cmsis_nvic.c	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,58 @@
+/* MPS2 CMSIS Library
+*
+* Copyright (c) 2006-2016 ARM Limited
+* All rights reserved.
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
+* specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
+*******************************************************************************
+* CMSIS-style functionality to support dynamic vectors
+*******************************************************************************/
+#include "cmsis_nvic.h"
+
+#define NVIC_RAM_VECTOR_ADDRESS   (0x20000000)  // Location of vectors in RAM
+#define NVIC_FLASH_VECTOR_ADDRESS (0x00000000)  // Initial vector position in flash
+
+void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) {
+    uint32_t *vectors = (uint32_t*)SCB->VTOR;
+    uint32_t i;
+
+    // Copy and switch to dynamic vectors if the first time called
+    if (SCB->VTOR == NVIC_FLASH_VECTOR_ADDRESS) {
+        uint32_t *old_vectors = vectors;
+        vectors = (uint32_t*)NVIC_RAM_VECTOR_ADDRESS;
+        for (i=0; i<NVIC_NUM_VECTORS; i++) {
+            vectors[i] = old_vectors[i];
+        }
+        SCB->VTOR = (uint32_t)NVIC_RAM_VECTOR_ADDRESS;
+    }
+    vectors[IRQn + NVIC_USER_IRQ_OFFSET] = vector;
+}
+
+uint32_t NVIC_GetVector(IRQn_Type IRQn) {
+    uint32_t *vectors = (uint32_t*)SCB->VTOR;
+    return vectors[IRQn + NVIC_USER_IRQ_OFFSET];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_IOTSS_BEID/cmsis_nvic.h	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,54 @@
+/* MPS2 CMSIS Library
+*
+* Copyright (c) 2006-2016 ARM Limited
+* All rights reserved.
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
+* specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
+*******************************************************************************
+* CMSIS-style functionality to support dynamic vectors
+*******************************************************************************/
+
+#ifndef MBED_CMSIS_NVIC_H
+#define MBED_CMSIS_NVIC_H
+
+#include "cmsis.h"
+
+#define NVIC_NUM_VECTORS      (16 + 64)
+#define NVIC_USER_IRQ_OFFSET  16
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector);
+uint32_t NVIC_GetVector(IRQn_Type IRQn);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_IOTSS_BEID/peripherallink.h	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,45 @@
+/* MPS2 CMSIS Library
+*
+* Copyright (c) 2006-2016 ARM Limited
+* All rights reserved.
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
+* specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
+*******************************************************************************
+* Name:    Device.h
+* Purpose: Include the correct device header file
+*******************************************************************************/
+
+#ifndef __DEVICE_H
+#define __DEVICE_H
+
+#if defined CMSDK_BEID
+  #include "CMSDK_BEID.h"                         /* device specific header file */
+#else
+  #warning "no appropriate header file found!"
+#endif
+
+#endif /* __DEVICE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_IOTSS_BEID/system_CMSDK_BEID.c	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,95 @@
+/* MPS2 CMSIS Library
+*
+* Copyright (c) 2006-2016 ARM Limited
+* All rights reserved.
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
+* specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
+*******************************************************************************
+* @file     system_CMSDK_BEID.c
+* @brief    CMSIS Device System Source File for
+*           CMSDK_BEID Device
+*
+*******************************************************************************/
+
+
+#include "CMSDK_BEID.h"
+
+/*----------------------------------------------------------------------------
+  Define clocks
+ *----------------------------------------------------------------------------*/
+#define __XTAL            (48000000UL)    /* Oscillator frequency             */
+
+#define __SYSTEM_CLOCK    (__XTAL / 2)
+
+
+/*----------------------------------------------------------------------------
+  Clock Variable definitions
+ *----------------------------------------------------------------------------*/
+uint32_t SystemCoreClock = __SYSTEM_CLOCK;/*!< System Clock Frequency (Core Clock)*/
+
+
+/*----------------------------------------------------------------------------
+  Clock functions
+ *----------------------------------------------------------------------------*/
+/**
+ * Update SystemCoreClock variable
+ *
+ * @param  none
+ * @return none
+ *
+ * @brief  Updates the SystemCoreClock with current core Clock
+ *         retrieved from cpu registers.
+ */
+void SystemCoreClockUpdate (void)
+{
+
+  SystemCoreClock = __SYSTEM_CLOCK;
+
+}
+
+/**
+ * Initialize the system
+ *
+ * @param  none
+ * @return none
+ *
+ * @brief  Setup the microcontroller system.
+ *         Initialize the System.
+ */
+void SystemInit (void)
+{
+
+#ifdef UNALIGNED_SUPPORT_DISABLE
+  SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk;
+#endif
+
+  SystemCoreClock = __SYSTEM_CLOCK;
+
+    // Enable AHB and APB clock
+    CMSDK_SYSCON->AHBCLKCFG0SET = 0xF;  // GPIO
+    CMSDK_SYSCON->APBCLKCFG0SET = 0xF9B7;    // UART0, UART1, TIMER0, TIMER1, DUAL TIMER
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_IOTSS_BEID/system_CMSDK_BEID.h	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,76 @@
+/* MPS2 CMSIS Library
+*
+* Copyright (c) 2006-2016 ARM Limited
+* All rights reserved.
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
+* specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
+*
+*******************************************************************************
+* @file     system_CMSDK_BEID.h
+* @brief    CMSIS Device Peripheral Access Layer Header File for
+*           CMSDK_BEID Device
+*
+******************************************************************************/
+
+
+#ifndef SYSTEM_CMSDK_BEID_H
+#define SYSTEM_CMSDK_BEID_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern uint32_t SystemCoreClock;     /*!< System Clock Frequency (Core Clock)  */
+
+
+/**
+ * Initialize the system
+ *
+ * @param  none
+ * @return none
+ *
+ * @brief  Setup the microcontroller system.
+ *         Initialize the System and update the SystemCoreClock variable.
+ */
+extern void SystemInit (void);
+
+/**
+ * Update SystemCoreClock variable
+ *
+ * @param  none
+ * @return none
+ *
+ * @brief  Updates the SystemCoreClock with current core Clock
+ *         retrieved from cpu registers.
+ */
+extern void SystemCoreClockUpdate (void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SYSTEM_CMSDK_BEID_H */
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_BEID/CMSDK_BEID.h	Wed Mar 02 10:15:13 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,769 +0,0 @@
-/**************************************************************************//**
- * @file     CMSDK_BEID.h
- * @brief    CMSIS Core Peripheral Access Layer Header File for
- *           CMSDK_BEID Device
- * @version  V3.02
- * @date     15. November 2013
- *
- * @note
- *
- ******************************************************************************/
-/* Copyright (c) 2011 - 2013 ARM LIMITED
-
-   All rights reserved.
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions are met:
-   - Redistributions of source code must retain the above copyright
-     notice, this list of conditions and the following disclaimer.
-   - 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.
-   - Neither the name of ARM nor the names of its contributors may be used
-     to endorse or promote products derived from this software without
-     specific prior written permission.
-   *
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS 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.
-   ---------------------------------------------------------------------------*/
-
-
-#ifndef CMSDK_BEID_H
-#define CMSDK_BEID_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-
-/* -------------------------  Interrupt Number Definition  ------------------------ */
-
-typedef enum IRQn
-{
-/* -------------------  Cortex-M3 Processor Exceptions Numbers  ------------------- */
-  NonMaskableInt_IRQn           = -14,        /*  2 Non Maskable Interrupt          */
-  HardFault_IRQn                = -13,        /*  3 HardFault Interrupt             */
-  MemoryManagement_IRQn         = -12,        /*  4 Memory Management Interrupt     */
-  BusFault_IRQn                 = -11,        /*  5 Bus Fault Interrupt             */
-  UsageFault_IRQn               = -10,        /*  6 Usage Fault Interrupt           */
-  SVCall_IRQn                   =  -5,        /* 11 SV Call Interrupt               */
-  DebugMonitor_IRQn             =  -4,        /* 12 Debug Monitor Interrupt         */
-  PendSV_IRQn                   =  -2,        /* 14 Pend SV Interrupt               */
-  SysTick_IRQn                  =  -1,        /* 15 System Tick Interrupt           */
-
-/* ----------------------  CMSDK_BEID Specific Interrupt Numbers  ------------------ */
-  UARTRX0_IRQn                  = 0,       /* UART 0 RX Interrupt                   */
-  UARTTX0_IRQn                  = 1,       /* UART 0 TX Interrupt                   */
-  UARTRX1_IRQn                  = 2,       /* UART 1 RX Interrupt                   */
-  UARTTX1_IRQn                  = 3,       /* UART 1 TX Interrupt                   */
-  UARTRX2_IRQn                  = 4,       /* UART 2 RX Interrupt                   */
-  UARTTX2_IRQn                  = 5,       /* UART 2 TX Interrupt                   */
-  UARTRX3_IRQn                  = 6,       /* Was PORT0_ALL_IRQn Port 1 combined Interrupt             */
-  UARTTX3_IRQn                  = 7,       /* Was PORT1_ALL_IRQn Port 1 combined Interrupt             */
-  TIMER0_IRQn                   = 8,       /* TIMER 0 Interrupt                     */
-  TIMER1_IRQn                   = 9,       /* TIMER 1 Interrupt                     */
-  DUALTIMER_IRQn                = 10,      /* Dual Timer Interrupt                  */
-  SPI_IRQn                      = 11,      /* SPI Interrupt                         */
-  UARTOVF_IRQn                  = 12,      /* UART 0,1,2 Overflow Interrupt         */
-  ETHERNET_IRQn                 = 13,      /* Ethernet Interrupt                    */
-  I2S_IRQn                      = 14,      /* I2S Interrupt                         */
-  TSC_IRQn                      = 15,      /* Touch Screen Interrupt                */
-//  DMA_IRQn                      = 15,      /* PL230 DMA Done + Error Interrupt      */
-  PORT0_0_IRQn                  = 16,      /* All P0 I/O pins used as irq source    */
-  PORT0_1_IRQn                  = 17,      /* There are 16 pins in total            */
-  PORT0_2_IRQn                  = 18,
-  PORT0_3_IRQn                  = 19,
-  PORT0_4_IRQn                  = 20,
-  PORT0_5_IRQn                  = 21,
-  PORT0_6_IRQn                  = 22,
-  PORT0_7_IRQn                  = 23,
-  PORT0_8_IRQn                  = 24,
-  PORT0_9_IRQn                  = 25,
-  PORT0_10_IRQn                 = 26,
-  PORT0_11_IRQn                 = 27,
-  PORT0_12_IRQn                 = 28,
-  PORT0_13_IRQn                 = 29,
-  PORT0_14_IRQn                 = 30,
-  PORT0_15_IRQn                 = 31,
-} IRQn_Type;
-
-
-/* ================================================================================ */
-/* ================      Processor and Core Peripheral Section     ================ */
-/* ================================================================================ */
-
-/* --------  Configuration of the Cortex-M3 Processor and Core Peripherals  ------- */
-#define __CM3_REV                 0x0201      /* Core revision r2p1                              */
-#define __MPU_PRESENT             1           /* MPU present or not                              */
-#define __NVIC_PRIO_BITS          3           /* Number of Bits used for Priority Levels         */
-#define __Vendor_SysTickConfig    0           /* Set to 1 if different SysTick Config is used    */
-
-#include <core_cm3.h>                         /* Processor and core peripherals                  */
-#include "system_CMSDK_BEID.h"                 /* System Header                                   */
-
-
-/* ================================================================================ */
-/* ================       Device Specific Peripheral Section       ================ */
-/* ================================================================================ */
-
-/* -------------------  Start of section using anonymous unions  ------------------ */
-#if defined ( __CC_ARM   )
-  #pragma push
-#pragma anon_unions
-#elif defined(__ICCARM__)
-  #pragma language=extended
-#elif defined(__GNUC__)
-  /* anonymous unions are enabled by default */
-#elif defined(__TMS470__)
-/* anonymous unions are enabled by default */
-#elif defined(__TASKING__)
-  #pragma warning 586
-#else
-  #warning Not supported compiler type
-#endif
-
-/*------------- Universal Asynchronous Receiver Transmitter (UART) -----------*/
-typedef struct
-{
-  __IO   uint32_t  DATA;                     /* Offset: 0x000 (R/W) Data Register    */
-  __IO   uint32_t  STATE;                    /* Offset: 0x004 (R/W) Status Register  */
-  __IO   uint32_t  CTRL;                     /* Offset: 0x008 (R/W) Control Register */
-  union {
-    __I    uint32_t  INTSTATUS;              /* Offset: 0x00C (R/ ) Interrupt Status Register */
-    __O    uint32_t  INTCLEAR;               /* Offset: 0x00C ( /W) Interrupt Clear Register  */
-    };
-  __IO   uint32_t  BAUDDIV;                  /* Offset: 0x010 (R/W) Baudrate Divider Register */
-
-} CMSDK_UART_TypeDef;
-
-/* CMSDK_UART DATA Register Definitions */
-
-#define CMSDK_UART_DATA_Pos               0                                             /* CMSDK_UART_DATA_Pos: DATA Position */
-#define CMSDK_UART_DATA_Msk              (0xFFul << CMSDK_UART_DATA_Pos)                /* CMSDK_UART DATA: DATA Mask */
-
-#define CMSDK_UART_STATE_RXOR_Pos         3                                             /* CMSDK_UART STATE: RXOR Position */
-#define CMSDK_UART_STATE_RXOR_Msk         (0x1ul << CMSDK_UART_STATE_RXOR_Pos)          /* CMSDK_UART STATE: RXOR Mask */
-
-#define CMSDK_UART_STATE_TXOR_Pos         2                                             /* CMSDK_UART STATE: TXOR Position */
-#define CMSDK_UART_STATE_TXOR_Msk         (0x1ul << CMSDK_UART_STATE_TXOR_Pos)          /* CMSDK_UART STATE: TXOR Mask */
-
-#define CMSDK_UART_STATE_RXBF_Pos         1                                             /* CMSDK_UART STATE: RXBF Position */
-#define CMSDK_UART_STATE_RXBF_Msk         (0x1ul << CMSDK_UART_STATE_RXBF_Pos)          /* CMSDK_UART STATE: RXBF Mask */
-
-#define CMSDK_UART_STATE_TXBF_Pos         0                                             /* CMSDK_UART STATE: TXBF Position */
-#define CMSDK_UART_STATE_TXBF_Msk         (0x1ul << CMSDK_UART_STATE_TXBF_Pos )         /* CMSDK_UART STATE: TXBF Mask */
-
-#define CMSDK_UART_CTRL_HSTM_Pos          6                                             /* CMSDK_UART CTRL: HSTM Position */
-#define CMSDK_UART_CTRL_HSTM_Msk          (0x01ul << CMSDK_UART_CTRL_HSTM_Pos)          /* CMSDK_UART CTRL: HSTM Mask */
-
-#define CMSDK_UART_CTRL_RXORIRQEN_Pos     5                                             /* CMSDK_UART CTRL: RXORIRQEN Position */
-#define CMSDK_UART_CTRL_RXORIRQEN_Msk     (0x01ul << CMSDK_UART_CTRL_RXORIRQEN_Pos)     /* CMSDK_UART CTRL: RXORIRQEN Mask */
-
-#define CMSDK_UART_CTRL_TXORIRQEN_Pos     4                                             /* CMSDK_UART CTRL: TXORIRQEN Position */
-#define CMSDK_UART_CTRL_TXORIRQEN_Msk     (0x01ul << CMSDK_UART_CTRL_TXORIRQEN_Pos)     /* CMSDK_UART CTRL: TXORIRQEN Mask */
-
-#define CMSDK_UART_CTRL_RXIRQEN_Pos       3                                             /* CMSDK_UART CTRL: RXIRQEN Position */
-#define CMSDK_UART_CTRL_RXIRQEN_Msk       (0x01ul << CMSDK_UART_CTRL_RXIRQEN_Pos)       /* CMSDK_UART CTRL: RXIRQEN Mask */
-
-#define CMSDK_UART_CTRL_TXIRQEN_Pos       2                                             /* CMSDK_UART CTRL: TXIRQEN Position */
-#define CMSDK_UART_CTRL_TXIRQEN_Msk       (0x01ul << CMSDK_UART_CTRL_TXIRQEN_Pos)       /* CMSDK_UART CTRL: TXIRQEN Mask */
-
-#define CMSDK_UART_CTRL_RXEN_Pos          1                                             /* CMSDK_UART CTRL: RXEN Position */
-#define CMSDK_UART_CTRL_RXEN_Msk          (0x01ul << CMSDK_UART_CTRL_RXEN_Pos)          /* CMSDK_UART CTRL: RXEN Mask */
-
-#define CMSDK_UART_CTRL_TXEN_Pos          0                                             /* CMSDK_UART CTRL: TXEN Position */
-#define CMSDK_UART_CTRL_TXEN_Msk          (0x01ul << CMSDK_UART_CTRL_TXEN_Pos)          /* CMSDK_UART CTRL: TXEN Mask */
-
-#define CMSDK_UART_INTSTATUS_RXORIRQ_Pos  3                                             /* CMSDK_UART CTRL: RXORIRQ Position */
-#define CMSDK_UART_CTRL_RXORIRQ_Msk       (0x01ul << CMSDK_UART_INTSTATUS_RXORIRQ_Pos)  /* CMSDK_UART CTRL: RXORIRQ Mask */
-
-#define CMSDK_UART_CTRL_TXORIRQ_Pos       2                                             /* CMSDK_UART CTRL: TXORIRQ Position */
-#define CMSDK_UART_CTRL_TXORIRQ_Msk       (0x01ul << CMSDK_UART_CTRL_TXORIRQ_Pos)       /* CMSDK_UART CTRL: TXORIRQ Mask */
-
-#define CMSDK_UART_CTRL_RXIRQ_Pos         1                                             /* CMSDK_UART CTRL: RXIRQ Position */
-#define CMSDK_UART_CTRL_RXIRQ_Msk         (0x01ul << CMSDK_UART_CTRL_RXIRQ_Pos)         /* CMSDK_UART CTRL: RXIRQ Mask */
-
-#define CMSDK_UART_CTRL_TXIRQ_Pos         0                                             /* CMSDK_UART CTRL: TXIRQ Position */
-#define CMSDK_UART_CTRL_TXIRQ_Msk         (0x01ul << CMSDK_UART_CTRL_TXIRQ_Pos)         /* CMSDK_UART CTRL: TXIRQ Mask */
-
-#define CMSDK_UART_BAUDDIV_Pos            0                                             /* CMSDK_UART BAUDDIV: BAUDDIV Position */
-#define CMSDK_UART_BAUDDIV_Msk           (0xFFFFFul << CMSDK_UART_BAUDDIV_Pos)          /* CMSDK_UART BAUDDIV: BAUDDIV Mask */
-
-
-/*----------------------------- Timer (TIMER) -------------------------------*/
-typedef struct
-{
-  __IO   uint32_t  CTRL;                     /* Offset: 0x000 (R/W) Control Register */
-  __IO   uint32_t  VALUE;                    /* Offset: 0x004 (R/W) Current Value Register */
-  __IO   uint32_t  RELOAD;                   /* Offset: 0x008 (R/W) Reload Value Register */
-  union {
-    __I    uint32_t  INTSTATUS;              /* Offset: 0x00C (R/ ) Interrupt Status Register */
-    __O    uint32_t  INTCLEAR;               /* Offset: 0x00C ( /W) Interrupt Clear Register */
-    };
-
-} CMSDK_TIMER_TypeDef;
-
-/* CMSDK_TIMER CTRL Register Definitions */
-
-#define CMSDK_TIMER_CTRL_IRQEN_Pos          3                                              /* CMSDK_TIMER CTRL: IRQEN Position */
-#define CMSDK_TIMER_CTRL_IRQEN_Msk          (0x01ul << CMSDK_TIMER_CTRL_IRQEN_Pos)         /* CMSDK_TIMER CTRL: IRQEN Mask */
-
-#define CMSDK_TIMER_CTRL_SELEXTCLK_Pos      2                                              /* CMSDK_TIMER CTRL: SELEXTCLK Position */
-#define CMSDK_TIMER_CTRL_SELEXTCLK_Msk      (0x01ul << CMSDK_TIMER_CTRL_SELEXTCLK_Pos)     /* CMSDK_TIMER CTRL: SELEXTCLK Mask */
-
-#define CMSDK_TIMER_CTRL_SELEXTEN_Pos       1                                              /* CMSDK_TIMER CTRL: SELEXTEN Position */
-#define CMSDK_TIMER_CTRL_SELEXTEN_Msk       (0x01ul << CMSDK_TIMER_CTRL_SELEXTEN_Pos)      /* CMSDK_TIMER CTRL: SELEXTEN Mask */
-
-#define CMSDK_TIMER_CTRL_EN_Pos             0                                              /* CMSDK_TIMER CTRL: EN Position */
-#define CMSDK_TIMER_CTRL_EN_Msk             (0x01ul << CMSDK_TIMER_CTRL_EN_Pos)            /* CMSDK_TIMER CTRL: EN Mask */
-
-#define CMSDK_TIMER_VAL_CURRENT_Pos         0                                              /* CMSDK_TIMER VALUE: CURRENT Position */
-#define CMSDK_TIMER_VAL_CURRENT_Msk         (0xFFFFFFFFul << CMSDK_TIMER_VAL_CURRENT_Pos)  /* CMSDK_TIMER VALUE: CURRENT Mask */
-
-#define CMSDK_TIMER_RELOAD_VAL_Pos          0                                              /* CMSDK_TIMER RELOAD: RELOAD Position */
-#define CMSDK_TIMER_RELOAD_VAL_Msk          (0xFFFFFFFFul << CMSDK_TIMER_RELOAD_VAL_Pos)   /* CMSDK_TIMER RELOAD: RELOAD Mask */
-
-#define CMSDK_TIMER_INTSTATUS_Pos           0                                              /* CMSDK_TIMER INTSTATUS: INTSTATUSPosition */
-#define CMSDK_TIMER_INTSTATUS_Msk           (0x01ul << CMSDK_TIMER_INTSTATUS_Pos)          /* CMSDK_TIMER INTSTATUS: INTSTATUSMask */
-
-#define CMSDK_TIMER_INTCLEAR_Pos            0                                              /* CMSDK_TIMER INTCLEAR: INTCLEAR Position */
-#define CMSDK_TIMER_INTCLEAR_Msk            (0x01ul << CMSDK_TIMER_INTCLEAR_Pos)           /* CMSDK_TIMER INTCLEAR: INTCLEAR Mask */
-
-
-/*------------- Timer (TIM) --------------------------------------------------*/
-typedef struct
-{
-  __IO uint32_t Timer1Load;                  /* Offset: 0x000 (R/W) Timer 1 Load */
-  __I  uint32_t Timer1Value;                 /* Offset: 0x004 (R/ ) Timer 1 Counter Current Value */
-  __IO uint32_t Timer1Control;               /* Offset: 0x008 (R/W) Timer 1 Control */
-  __O  uint32_t Timer1IntClr;                /* Offset: 0x00C ( /W) Timer 1 Interrupt Clear */
-  __I  uint32_t Timer1RIS;                   /* Offset: 0x010 (R/ ) Timer 1 Raw Interrupt Status */
-  __I  uint32_t Timer1MIS;                   /* Offset: 0x014 (R/ ) Timer 1 Masked Interrupt Status */
-  __IO uint32_t Timer1BGLoad;                /* Offset: 0x018 (R/W) Background Load Register */
-       uint32_t RESERVED0;
-  __IO uint32_t Timer2Load;                  /* Offset: 0x020 (R/W) Timer 2 Load */
-  __I  uint32_t Timer2Value;                 /* Offset: 0x024 (R/ ) Timer 2 Counter Current Value */
-  __IO uint32_t Timer2Control;               /* Offset: 0x028 (R/W) Timer 2 Control */
-  __O  uint32_t Timer2IntClr;                /* Offset: 0x02C ( /W) Timer 2 Interrupt Clear */
-  __I  uint32_t Timer2RIS;                   /* Offset: 0x030 (R/ ) Timer 2 Raw Interrupt Status */
-  __I  uint32_t Timer2MIS;                   /* Offset: 0x034 (R/ ) Timer 2 Masked Interrupt Status */
-  __IO uint32_t Timer2BGLoad;                /* Offset: 0x038 (R/W) Background Load Register */
-       uint32_t RESERVED1[945];
-  __IO uint32_t ITCR;                        /* Offset: 0xF00 (R/W) Integration Test Control Register */
-  __O  uint32_t ITOP;                        /* Offset: 0xF04 ( /W) Integration Test Output Set Register */
-} CMSDK_DUALTIMER_BOTH_TypeDef;
-
-#define CMSDK_DUALTIMER1_LOAD_Pos            0                                                /* CMSDK_DUALTIMER1 LOAD: LOAD Position */
-#define CMSDK_DUALTIMER1_LOAD_Msk            (0xFFFFFFFFul << CMSDK_DUALTIMER1_LOAD_Pos)      /* CMSDK_DUALTIMER1 LOAD: LOAD Mask */
-
-#define CMSDK_DUALTIMER1_VALUE_Pos           0                                                /* CMSDK_DUALTIMER1 VALUE: VALUE Position */
-#define CMSDK_DUALTIMER1_VALUE_Msk           (0xFFFFFFFFul << CMSDK_DUALTIMER1_VALUE_Pos)     /* CMSDK_DUALTIMER1 VALUE: VALUE Mask */
-
-#define CMSDK_DUALTIMER1_CTRL_EN_Pos         7                                                /* CMSDK_DUALTIMER1 CTRL_EN: CTRL Enable Position */
-#define CMSDK_DUALTIMER1_CTRL_EN_Msk         (0x1ul << CMSDK_DUALTIMER1_CTRL_EN_Pos)          /* CMSDK_DUALTIMER1 CTRL_EN: CTRL Enable Mask */
-
-#define CMSDK_DUALTIMER1_CTRL_MODE_Pos       6                                                /* CMSDK_DUALTIMER1 CTRL_MODE: CTRL MODE Position */
-#define CMSDK_DUALTIMER1_CTRL_MODE_Msk       (0x1ul << CMSDK_DUALTIMER1_CTRL_MODE_Pos)        /* CMSDK_DUALTIMER1 CTRL_MODE: CTRL MODE Mask */
-
-#define CMSDK_DUALTIMER1_CTRL_INTEN_Pos      5                                                /* CMSDK_DUALTIMER1 CTRL_INTEN: CTRL Int Enable Position */
-#define CMSDK_DUALTIMER1_CTRL_INTEN_Msk      (0x1ul << CMSDK_DUALTIMER1_CTRL_INTEN_Pos)       /* CMSDK_DUALTIMER1 CTRL_INTEN: CTRL Int Enable Mask */
-
-#define CMSDK_DUALTIMER1_CTRL_PRESCALE_Pos   2                                                /* CMSDK_DUALTIMER1 CTRL_PRESCALE: CTRL PRESCALE Position */
-#define CMSDK_DUALTIMER1_CTRL_PRESCALE_Msk   (0x3ul << CMSDK_DUALTIMER1_CTRL_PRESCALE_Pos)    /* CMSDK_DUALTIMER1 CTRL_PRESCALE: CTRL PRESCALE Mask */
-
-#define CMSDK_DUALTIMER1_CTRL_SIZE_Pos       1                                                /* CMSDK_DUALTIMER1 CTRL_SIZE: CTRL SIZE Position */
-#define CMSDK_DUALTIMER1_CTRL_SIZE_Msk       (0x1ul << CMSDK_DUALTIMER1_CTRL_SIZE_Pos)        /* CMSDK_DUALTIMER1 CTRL_SIZE: CTRL SIZE Mask */
-
-#define CMSDK_DUALTIMER1_CTRL_ONESHOOT_Pos   0                                                /* CMSDK_DUALTIMER1 CTRL_ONESHOOT: CTRL ONESHOOT Position */
-#define CMSDK_DUALTIMER1_CTRL_ONESHOOT_Msk   (0x1ul << CMSDK_DUALTIMER1_CTRL_ONESHOOT_Pos)    /* CMSDK_DUALTIMER1 CTRL_ONESHOOT: CTRL ONESHOOT Mask */
-
-#define CMSDK_DUALTIMER1_INTCLR_Pos          0                                                /* CMSDK_DUALTIMER1 INTCLR: INT Clear Position */
-#define CMSDK_DUALTIMER1_INTCLR_Msk          (0x1ul << CMSDK_DUALTIMER1_INTCLR_Pos)           /* CMSDK_DUALTIMER1 INTCLR: INT Clear  Mask */
-
-#define CMSDK_DUALTIMER1_RAWINTSTAT_Pos      0                                                /* CMSDK_DUALTIMER1 RAWINTSTAT: Raw Int Status Position */
-#define CMSDK_DUALTIMER1_RAWINTSTAT_Msk      (0x1ul << CMSDK_DUALTIMER1_RAWINTSTAT_Pos)       /* CMSDK_DUALTIMER1 RAWINTSTAT: Raw Int Status Mask */
-
-#define CMSDK_DUALTIMER1_MASKINTSTAT_Pos     0                                                /* CMSDK_DUALTIMER1 MASKINTSTAT: Mask Int Status Position */
-#define CMSDK_DUALTIMER1_MASKINTSTAT_Msk     (0x1ul << CMSDK_DUALTIMER1_MASKINTSTAT_Pos)      /* CMSDK_DUALTIMER1 MASKINTSTAT: Mask Int Status Mask */
-
-#define CMSDK_DUALTIMER1_BGLOAD_Pos          0                                                /* CMSDK_DUALTIMER1 BGLOAD: Background Load Position */
-#define CMSDK_DUALTIMER1_BGLOAD_Msk          (0xFFFFFFFFul << CMSDK_DUALTIMER1_BGLOAD_Pos)    /* CMSDK_DUALTIMER1 BGLOAD: Background Load Mask */
-
-#define CMSDK_DUALTIMER2_LOAD_Pos            0                                                /* CMSDK_DUALTIMER2 LOAD: LOAD Position */
-#define CMSDK_DUALTIMER2_LOAD_Msk            (0xFFFFFFFFul << CMSDK_DUALTIMER2_LOAD_Pos)      /* CMSDK_DUALTIMER2 LOAD: LOAD Mask */
-
-#define CMSDK_DUALTIMER2_VALUE_Pos           0                                                /* CMSDK_DUALTIMER2 VALUE: VALUE Position */
-#define CMSDK_DUALTIMER2_VALUE_Msk           (0xFFFFFFFFul << CMSDK_DUALTIMER2_VALUE_Pos)     /* CMSDK_DUALTIMER2 VALUE: VALUE Mask */
-
-#define CMSDK_DUALTIMER2_CTRL_EN_Pos         7                                                /* CMSDK_DUALTIMER2 CTRL_EN: CTRL Enable Position */
-#define CMSDK_DUALTIMER2_CTRL_EN_Msk         (0x1ul << CMSDK_DUALTIMER2_CTRL_EN_Pos)          /* CMSDK_DUALTIMER2 CTRL_EN: CTRL Enable Mask */
-
-#define CMSDK_DUALTIMER2_CTRL_MODE_Pos       6                                                /* CMSDK_DUALTIMER2 CTRL_MODE: CTRL MODE Position */
-#define CMSDK_DUALTIMER2_CTRL_MODE_Msk       (0x1ul << CMSDK_DUALTIMER2_CTRL_MODE_Pos)        /* CMSDK_DUALTIMER2 CTRL_MODE: CTRL MODE Mask */
-
-#define CMSDK_DUALTIMER2_CTRL_INTEN_Pos      5                                                /* CMSDK_DUALTIMER2 CTRL_INTEN: CTRL Int Enable Position */
-#define CMSDK_DUALTIMER2_CTRL_INTEN_Msk      (0x1ul << CMSDK_DUALTIMER2_CTRL_INTEN_Pos)       /* CMSDK_DUALTIMER2 CTRL_INTEN: CTRL Int Enable Mask */
-
-#define CMSDK_DUALTIMER2_CTRL_PRESCALE_Pos   2                                                /* CMSDK_DUALTIMER2 CTRL_PRESCALE: CTRL PRESCALE Position */
-#define CMSDK_DUALTIMER2_CTRL_PRESCALE_Msk   (0x3ul << CMSDK_DUALTIMER2_CTRL_PRESCALE_Pos)    /* CMSDK_DUALTIMER2 CTRL_PRESCALE: CTRL PRESCALE Mask */
-
-#define CMSDK_DUALTIMER2_CTRL_SIZE_Pos       1                                                /* CMSDK_DUALTIMER2 CTRL_SIZE: CTRL SIZE Position */
-#define CMSDK_DUALTIMER2_CTRL_SIZE_Msk       (0x1ul << CMSDK_DUALTIMER2_CTRL_SIZE_Pos)        /* CMSDK_DUALTIMER2 CTRL_SIZE: CTRL SIZE Mask */
-
-#define CMSDK_DUALTIMER2_CTRL_ONESHOOT_Pos   0                                                /* CMSDK_DUALTIMER2 CTRL_ONESHOOT: CTRL ONESHOOT Position */
-#define CMSDK_DUALTIMER2_CTRL_ONESHOOT_Msk   (0x1ul << CMSDK_DUALTIMER2_CTRL_ONESHOOT_Pos)    /* CMSDK_DUALTIMER2 CTRL_ONESHOOT: CTRL ONESHOOT Mask */
-
-#define CMSDK_DUALTIMER2_INTCLR_Pos          0                                                /* CMSDK_DUALTIMER2 INTCLR: INT Clear Position */
-#define CMSDK_DUALTIMER2_INTCLR_Msk          (0x1ul << CMSDK_DUALTIMER2_INTCLR_Pos)           /* CMSDK_DUALTIMER2 INTCLR: INT Clear  Mask */
-
-#define CMSDK_DUALTIMER2_RAWINTSTAT_Pos      0                                                /* CMSDK_DUALTIMER2 RAWINTSTAT: Raw Int Status Position */
-#define CMSDK_DUALTIMER2_RAWINTSTAT_Msk      (0x1ul << CMSDK_DUALTIMER2_RAWINTSTAT_Pos)       /* CMSDK_DUALTIMER2 RAWINTSTAT: Raw Int Status Mask */
-
-#define CMSDK_DUALTIMER2_MASKINTSTAT_Pos     0                                                /* CMSDK_DUALTIMER2 MASKINTSTAT: Mask Int Status Position */
-#define CMSDK_DUALTIMER2_MASKINTSTAT_Msk     (0x1ul << CMSDK_DUALTIMER2_MASKINTSTAT_Pos)      /* CMSDK_DUALTIMER2 MASKINTSTAT: Mask Int Status Mask */
-
-#define CMSDK_DUALTIMER2_BGLOAD_Pos          0                                                /* CMSDK_DUALTIMER2 BGLOAD: Background Load Position */
-#define CMSDK_DUALTIMER2_BGLOAD_Msk          (0xFFFFFFFFul << CMSDK_DUALTIMER2_BGLOAD_Pos)    /* CMSDK_DUALTIMER2 BGLOAD: Background Load Mask */
-
-
-typedef struct
-{
-  __IO uint32_t TimerLoad;                   /* Offset: 0x000 (R/W) Timer Load */
-  __I  uint32_t TimerValue;                  /* Offset: 0x000 (R/W) Timer Counter Current Value */
-  __IO uint32_t TimerControl;                /* Offset: 0x000 (R/W) Timer Control */
-  __O  uint32_t TimerIntClr;                 /* Offset: 0x000 (R/W) Timer Interrupt Clear */
-  __I  uint32_t TimerRIS;                    /* Offset: 0x000 (R/W) Timer Raw Interrupt Status */
-  __I  uint32_t TimerMIS;                    /* Offset: 0x000 (R/W) Timer Masked Interrupt Status */
-  __IO uint32_t TimerBGLoad;                 /* Offset: 0x000 (R/W) Background Load Register */
-} CMSDK_DUALTIMER_SINGLE_TypeDef;
-
-#define CMSDK_DUALTIMER_LOAD_Pos             0                                               /* CMSDK_DUALTIMER LOAD: LOAD Position */
-#define CMSDK_DUALTIMER_LOAD_Msk             (0xFFFFFFFFul << CMSDK_DUALTIMER_LOAD_Pos)      /* CMSDK_DUALTIMER LOAD: LOAD Mask */
-
-#define CMSDK_DUALTIMER_VALUE_Pos            0                                               /* CMSDK_DUALTIMER VALUE: VALUE Position */
-#define CMSDK_DUALTIMER_VALUE_Msk            (0xFFFFFFFFul << CMSDK_DUALTIMER_VALUE_Pos)     /* CMSDK_DUALTIMER VALUE: VALUE Mask */
-
-#define CMSDK_DUALTIMER_CTRL_EN_Pos          7                                               /* CMSDK_DUALTIMER CTRL_EN: CTRL Enable Position */
-#define CMSDK_DUALTIMER_CTRL_EN_Msk          (0x1ul << CMSDK_DUALTIMER_CTRL_EN_Pos)          /* CMSDK_DUALTIMER CTRL_EN: CTRL Enable Mask */
-
-#define CMSDK_DUALTIMER_CTRL_MODE_Pos        6                                               /* CMSDK_DUALTIMER CTRL_MODE: CTRL MODE Position */
-#define CMSDK_DUALTIMER_CTRL_MODE_Msk        (0x1ul << CMSDK_DUALTIMER_CTRL_MODE_Pos)        /* CMSDK_DUALTIMER CTRL_MODE: CTRL MODE Mask */
-
-#define CMSDK_DUALTIMER_CTRL_INTEN_Pos       5                                               /* CMSDK_DUALTIMER CTRL_INTEN: CTRL Int Enable Position */
-#define CMSDK_DUALTIMER_CTRL_INTEN_Msk       (0x1ul << CMSDK_DUALTIMER_CTRL_INTEN_Pos)       /* CMSDK_DUALTIMER CTRL_INTEN: CTRL Int Enable Mask */
-
-#define CMSDK_DUALTIMER_CTRL_PRESCALE_Pos    2                                               /* CMSDK_DUALTIMER CTRL_PRESCALE: CTRL PRESCALE Position */
-#define CMSDK_DUALTIMER_CTRL_PRESCALE_Msk    (0x3ul << CMSDK_DUALTIMER_CTRL_PRESCALE_Pos)    /* CMSDK_DUALTIMER CTRL_PRESCALE: CTRL PRESCALE Mask */
-
-#define CMSDK_DUALTIMER_CTRL_SIZE_Pos        1                                               /* CMSDK_DUALTIMER CTRL_SIZE: CTRL SIZE Position */
-#define CMSDK_DUALTIMER_CTRL_SIZE_Msk        (0x1ul << CMSDK_DUALTIMER_CTRL_SIZE_Pos)        /* CMSDK_DUALTIMER CTRL_SIZE: CTRL SIZE Mask */
-
-#define CMSDK_DUALTIMER_CTRL_ONESHOOT_Pos    0                                               /* CMSDK_DUALTIMER CTRL_ONESHOOT: CTRL ONESHOOT Position */
-#define CMSDK_DUALTIMER_CTRL_ONESHOOT_Msk    (0x1ul << CMSDK_DUALTIMER_CTRL_ONESHOOT_Pos)    /* CMSDK_DUALTIMER CTRL_ONESHOOT: CTRL ONESHOOT Mask */
-
-#define CMSDK_DUALTIMER_INTCLR_Pos           0                                               /* CMSDK_DUALTIMER INTCLR: INT Clear Position */
-#define CMSDK_DUALTIMER_INTCLR_Msk           (0x1ul << CMSDK_DUALTIMER_INTCLR_Pos)           /* CMSDK_DUALTIMER INTCLR: INT Clear  Mask */
-
-#define CMSDK_DUALTIMER_RAWINTSTAT_Pos       0                                               /* CMSDK_DUALTIMER RAWINTSTAT: Raw Int Status Position */
-#define CMSDK_DUALTIMER_RAWINTSTAT_Msk       (0x1ul << CMSDK_DUALTIMER_RAWINTSTAT_Pos)       /* CMSDK_DUALTIMER RAWINTSTAT: Raw Int Status Mask */
-
-#define CMSDK_DUALTIMER_MASKINTSTAT_Pos      0                                               /* CMSDK_DUALTIMER MASKINTSTAT: Mask Int Status Position */
-#define CMSDK_DUALTIMER_MASKINTSTAT_Msk      (0x1ul << CMSDK_DUALTIMER_MASKINTSTAT_Pos)      /* CMSDK_DUALTIMER MASKINTSTAT: Mask Int Status Mask */
-
-#define CMSDK_DUALTIMER_BGLOAD_Pos           0                                               /* CMSDK_DUALTIMER BGLOAD: Background Load Position */
-#define CMSDK_DUALTIMER_BGLOAD_Msk           (0xFFFFFFFFul << CMSDK_DUALTIMER_BGLOAD_Pos)    /* CMSDK_DUALTIMER BGLOAD: Background Load Mask */
-
-
-/*-------------------- General Purpose Input Output (GPIO) -------------------*/
-typedef struct
-{
-  __IO   uint32_t  DATA;                     /* Offset: 0x000 (R/W) DATA Register */
-  __IO   uint32_t  DATAOUT;                  /* Offset: 0x004 (R/W) Data Output Latch Register */
-         uint32_t  RESERVED0[2];
-  __IO   uint32_t  OUTENABLESET;             /* Offset: 0x010 (R/W) Output Enable Set Register */
-  __IO   uint32_t  OUTENABLECLR;             /* Offset: 0x014 (R/W) Output Enable Clear Register */
-  __IO   uint32_t  ALTFUNCSET;               /* Offset: 0x018 (R/W) Alternate Function Set Register */
-  __IO   uint32_t  ALTFUNCCLR;               /* Offset: 0x01C (R/W) Alternate Function Clear Register */
-  __IO   uint32_t  INTENSET;                 /* Offset: 0x020 (R/W) Interrupt Enable Set Register */
-  __IO   uint32_t  INTENCLR;                 /* Offset: 0x024 (R/W) Interrupt Enable Clear Register */
-  __IO   uint32_t  INTTYPESET;               /* Offset: 0x028 (R/W) Interrupt Type Set Register */
-  __IO   uint32_t  INTTYPECLR;               /* Offset: 0x02C (R/W) Interrupt Type Clear Register */
-  __IO   uint32_t  INTPOLSET;                /* Offset: 0x030 (R/W) Interrupt Polarity Set Register */
-  __IO   uint32_t  INTPOLCLR;                /* Offset: 0x034 (R/W) Interrupt Polarity Clear Register */
-  union {
-    __I    uint32_t  INTSTATUS;              /* Offset: 0x038 (R/ ) Interrupt Status Register */
-    __O    uint32_t  INTCLEAR;               /* Offset: 0x038 ( /W) Interrupt Clear Register */
-    };
-         uint32_t RESERVED1[241];
-  __IO   uint32_t LB_MASKED[256];            /* Offset: 0x400 - 0x7FC Lower byte Masked Access Register (R/W) */
-  __IO   uint32_t UB_MASKED[256];            /* Offset: 0x800 - 0xBFC Upper byte Masked Access Register (R/W) */
-} CMSDK_GPIO_TypeDef;
-
-#define CMSDK_GPIO_DATA_Pos            0                                          /* CMSDK_GPIO DATA: DATA Position */
-#define CMSDK_GPIO_DATA_Msk            (0xFFFFul << CMSDK_GPIO_DATA_Pos)          /* CMSDK_GPIO DATA: DATA Mask */
-
-#define CMSDK_GPIO_DATAOUT_Pos         0                                          /* CMSDK_GPIO DATAOUT: DATAOUT Position */
-#define CMSDK_GPIO_DATAOUT_Msk         (0xFFFFul << CMSDK_GPIO_DATAOUT_Pos)       /* CMSDK_GPIO DATAOUT: DATAOUT Mask */
-
-#define CMSDK_GPIO_OUTENSET_Pos        0                                          /* CMSDK_GPIO OUTEN: OUTEN Position */
-#define CMSDK_GPIO_OUTENSET_Msk        (0xFFFFul << CMSDK_GPIO_OUTEN_Pos)         /* CMSDK_GPIO OUTEN: OUTEN Mask */
-
-#define CMSDK_GPIO_OUTENCLR_Pos        0                                          /* CMSDK_GPIO OUTEN: OUTEN Position */
-#define CMSDK_GPIO_OUTENCLR_Msk        (0xFFFFul << CMSDK_GPIO_OUTEN_Pos)         /* CMSDK_GPIO OUTEN: OUTEN Mask */
-
-#define CMSDK_GPIO_ALTFUNCSET_Pos      0                                          /* CMSDK_GPIO ALTFUNC: ALTFUNC Position */
-#define CMSDK_GPIO_ALTFUNCSET_Msk      (0xFFFFul << CMSDK_GPIO_ALTFUNC_Pos)       /* CMSDK_GPIO ALTFUNC: ALTFUNC Mask */
-
-#define CMSDK_GPIO_ALTFUNCCLR_Pos      0                                          /* CMSDK_GPIO ALTFUNC: ALTFUNC Position */
-#define CMSDK_GPIO_ALTFUNCCLR_Msk      (0xFFFFul << CMSDK_GPIO_ALTFUNC_Pos)       /* CMSDK_GPIO ALTFUNC: ALTFUNC Mask */
-
-#define CMSDK_GPIO_INTENSET_Pos        0                                          /* CMSDK_GPIO INTEN: INTEN Position */
-#define CMSDK_GPIO_INTENSET_Msk        (0xFFFFul << CMSDK_GPIO_INTEN_Pos)         /* CMSDK_GPIO INTEN: INTEN Mask */
-
-#define CMSDK_GPIO_INTENCLR_Pos        0                                          /* CMSDK_GPIO INTEN: INTEN Position */
-#define CMSDK_GPIO_INTENCLR_Msk        (0xFFFFul << CMSDK_GPIO_INTEN_Pos)         /* CMSDK_GPIO INTEN: INTEN Mask */
-
-#define CMSDK_GPIO_INTTYPESET_Pos      0                                          /* CMSDK_GPIO INTTYPE: INTTYPE Position */
-#define CMSDK_GPIO_INTTYPESET_Msk      (0xFFFFul << CMSDK_GPIO_INTTYPE_Pos)       /* CMSDK_GPIO INTTYPE: INTTYPE Mask */
-
-#define CMSDK_GPIO_INTTYPECLR_Pos      0                                          /* CMSDK_GPIO INTTYPE: INTTYPE Position */
-#define CMSDK_GPIO_INTTYPECLR_Msk      (0xFFFFul << CMSDK_GPIO_INTTYPE_Pos)       /* CMSDK_GPIO INTTYPE: INTTYPE Mask */
-
-#define CMSDK_GPIO_INTPOLSET_Pos       0                                          /* CMSDK_GPIO INTPOL: INTPOL Position */
-#define CMSDK_GPIO_INTPOLSET_Msk       (0xFFFFul << CMSDK_GPIO_INTPOL_Pos)        /* CMSDK_GPIO INTPOL: INTPOL Mask */
-
-#define CMSDK_GPIO_INTPOLCLR_Pos       0                                          /* CMSDK_GPIO INTPOL: INTPOL Position */
-#define CMSDK_GPIO_INTPOLCLR_Msk       (0xFFFFul << CMSDK_GPIO_INTPOL_Pos)        /* CMSDK_GPIO INTPOL: INTPOL Mask */
-
-#define CMSDK_GPIO_INTSTATUS_Pos       0                                          /* CMSDK_GPIO INTSTATUS: INTSTATUS Position */
-#define CMSDK_GPIO_INTSTATUS_Msk       (0xFFul << CMSDK_GPIO_INTSTATUS_Pos)       /* CMSDK_GPIO INTSTATUS: INTSTATUS Mask */
-
-#define CMSDK_GPIO_INTCLEAR_Pos        0                                          /* CMSDK_GPIO INTCLEAR: INTCLEAR Position */
-#define CMSDK_GPIO_INTCLEAR_Msk        (0xFFul << CMSDK_GPIO_INTCLEAR_Pos)        /* CMSDK_GPIO INTCLEAR: INTCLEAR Mask */
-
-#define CMSDK_GPIO_MASKLOWBYTE_Pos     0                                          /* CMSDK_GPIO MASKLOWBYTE: MASKLOWBYTE Position */
-#define CMSDK_GPIO_MASKLOWBYTE_Msk     (0x00FFul << CMSDK_GPIO_MASKLOWBYTE_Pos)   /* CMSDK_GPIO MASKLOWBYTE: MASKLOWBYTE Mask */
-
-#define CMSDK_GPIO_MASKHIGHBYTE_Pos    0                                          /* CMSDK_GPIO MASKHIGHBYTE: MASKHIGHBYTE Position */
-#define CMSDK_GPIO_MASKHIGHBYTE_Msk    (0xFF00ul << CMSDK_GPIO_MASKHIGHBYTE_Pos)  /* CMSDK_GPIO MASKHIGHBYTE: MASKHIGHBYTE Mask */
-
-
-/*------------- System Control (SYSCON) --------------------------------------*/
-typedef struct
-{
-  __IO   uint32_t  REMAP;                    /* Offset: 0x000 (R/W) Remap Control Register */
-  __IO   uint32_t  PMUCTRL;                  /* Offset: 0x004 (R/W) PMU Control Register */
-  __IO   uint32_t  RESETOP;                  /* Offset: 0x008 (R/W) Reset Option Register */
-  __IO   uint32_t  EMICTRL;                  /* Offset: 0x00C (R/W) EMI Control Register */
-  __IO   uint32_t  RSTINFO;                  /* Offset: 0x010 (R/W) Reset Information Register */
-         uint32_t  RESERVED0[3];
-  __IO   uint32_t  AHBPER0SET;               /* Offset: 0x020 (R/W)AHB peripheral access control set */
-  __IO   uint32_t  AHBPER0CLR;               /* Offset: 0x024 (R/W)AHB peripheral access control clear */
-         uint32_t  RESERVED1[2];
-  __IO   uint32_t  APBPER0SET;               /* Offset: 0x030 (R/W)APB peripheral access control set */
-  __IO   uint32_t  APBPER0CLR;               /* Offset: 0x034 (R/W)APB peripheral access control clear */
-         uint32_t  RESERVED2[2];
-  __IO   uint32_t  MAINCLK;                  /* Offset: 0x040 (R/W) Main Clock Control Register */
-  __IO   uint32_t  AUXCLK;                   /* Offset: 0x044 (R/W) Auxiliary / RTC Control Register */
-  __IO   uint32_t  PLLCTRL;                  /* Offset: 0x048 (R/W) PLL Control Register */
-  __IO   uint32_t  PLLSTATUS;                /* Offset: 0x04C (R/W) PLL Status Register */
-  __IO   uint32_t  SLEEPCFG;                 /* Offset: 0x050 (R/W) Sleep Control Register */
-  __IO   uint32_t  FLASHAUXCFG;              /* Offset: 0x054 (R/W) Flash auxiliary settings Control Register */
-         uint32_t  RESERVED3[10];
-  __IO   uint32_t  AHBCLKCFG0SET;            /* Offset: 0x080 (R/W) AHB Peripheral Clock set in Active state */
-  __IO   uint32_t  AHBCLKCFG0CLR;            /* Offset: 0x084 (R/W) AHB Peripheral Clock clear in Active state */
-  __IO   uint32_t  AHBCLKCFG1SET;            /* Offset: 0x088 (R/W) AHB Peripheral Clock set in Sleep state */
-  __IO   uint32_t  AHBCLKCFG1CLR;            /* Offset: 0x08C (R/W) AHB Peripheral Clock clear in Sleep state */
-  __IO   uint32_t  AHBCLKCFG2SET;            /* Offset: 0x090 (R/W) AHB Peripheral Clock set in Deep Sleep state */
-  __IO   uint32_t  AHBCLKCFG2CLR;            /* Offset: 0x094 (R/W) AHB Peripheral Clock clear in Deep Sleep state */
-         uint32_t  RESERVED4[2];
-  __IO   uint32_t  APBCLKCFG0SET;            /* Offset: 0x0A0 (R/W) APB Peripheral Clock set in Active state */
-  __IO   uint32_t  APBCLKCFG0CLR;            /* Offset: 0x0A4 (R/W) APB Peripheral Clock clear in Active state */
-  __IO   uint32_t  APBCLKCFG1SET;            /* Offset: 0x0A8 (R/W) APB Peripheral Clock set in Sleep state */
-  __IO   uint32_t  APBCLKCFG1CLR;            /* Offset: 0x0AC (R/W) APB Peripheral Clock clear in Sleep state */
-  __IO   uint32_t  APBCLKCFG2SET;            /* Offset: 0x0B0 (R/W) APB Peripheral Clock set in Deep Sleep state */
-  __IO   uint32_t  APBCLKCFG2CLR;            /* Offset: 0x0B4 (R/W) APB Peripheral Clock clear in Deep Sleep state */
-         uint32_t  RESERVED5[2];
-  __IO   uint32_t  AHBPRST0SET;              /* Offset: 0x0C0 (R/W) AHB Peripheral reset select set */
-  __IO   uint32_t  AHBPRST0CLR;              /* Offset: 0x0C4 (R/W) AHB Peripheral reset select clear */
-  __IO   uint32_t  APBPRST0SET;              /* Offset: 0x0C8 (R/W) APB Peripheral reset select set */
-  __IO   uint32_t  APBPRST0CLR;              /* Offset: 0x0CC (R/W) APB Peripheral reset select clear */
-  __IO   uint32_t  PWRDNCFG0SET;             /* Offset: 0x0D0 (R/W) AHB Power down sleep wakeup source set */
-  __IO   uint32_t  PWRDNCFG0CLR;             /* Offset: 0x0D4 (R/W) AHB Power down sleep wakeup source clear */
-  __IO   uint32_t  PWRDNCFG1SET;             /* Offset: 0x0D8 (R/W) APB Power down sleep wakeup source set */
-  __IO   uint32_t  PWRDNCFG1CLR;             /* Offset: 0x0DC (R/W) APB Power down sleep wakeup source clear */
-  __O    uint32_t  RTCRESET;                 /* Offset: 0x0E0 ( /W) RTC reset */
-  __IO   uint32_t  EVENTCFG;                 /* Offset: 0x0E4 (R/W) Event interface Control Register */
-         uint32_t  RESERVED6[2];
-  __IO   uint32_t  PWROVRIDE0;               /* Offset: 0x0F0 (R/W) SRAM Power control overide */
-  __IO   uint32_t  PWROVRIDE1;               /* Offset: 0x0F4 (R/W) Embedded Flash Power control overide */
-  __I    uint32_t  MEMORYSTATUS;             /* Offset: 0x0F8 (R/ ) Memory Status Register */
-         uint32_t  RESERVED7[1];
-  __IO   uint32_t  GPIOPADCFG0;              /* Offset: 0x100 (R/W) IO pad settings */
-  __IO   uint32_t  GPIOPADCFG1;              /* Offset: 0x104 (R/W) IO pad settings */
-  __IO   uint32_t  TESTMODECFG;              /* Offset: 0x108 (R/W) Testmode boot bypass */
-} CMSDK_SYSCON_TypeDef;
-
-#define CMSDK_SYSCON_REMAP_Pos                 0
-#define CMSDK_SYSCON_REMAP_Msk                 (0x01ul << CMSDK_SYSCON_REMAP_Pos)               /* CMSDK_SYSCON MEME_CTRL: REMAP Mask */
-
-#define CMSDK_SYSCON_PMUCTRL_EN_Pos            0
-#define CMSDK_SYSCON_PMUCTRL_EN_Msk            (0x01ul << CMSDK_SYSCON_PMUCTRL_EN_Pos)          /* CMSDK_SYSCON PMUCTRL: PMUCTRL ENABLE Mask */
-
-#define CMSDK_SYSCON_LOCKUPRST_RESETOP_Pos     0
-#define CMSDK_SYSCON_LOCKUPRST_RESETOP_Msk     (0x01ul << CMSDK_SYSCON_LOCKUPRST_RESETOP_Pos)   /* CMSDK_SYSCON SYS_CTRL: LOCKUP RESET ENABLE Mask */
-
-#define CMSDK_SYSCON_EMICTRL_SIZE_Pos          24
-#define CMSDK_SYSCON_EMICTRL_SIZE_Msk          (0x00001ul << CMSDK_SYSCON_EMICTRL_SIZE_Pos)     /* CMSDK_SYSCON EMICTRL: SIZE Mask */
-
-#define CMSDK_SYSCON_EMICTRL_TACYC_Pos         16
-#define CMSDK_SYSCON_EMICTRL_TACYC_Msk         (0x00007ul << CMSDK_SYSCON_EMICTRL_TACYC_Pos)    /* CMSDK_SYSCON EMICTRL: TURNAROUNDCYCLE Mask */
-
-#define CMSDK_SYSCON_EMICTRL_WCYC_Pos          8
-#define CMSDK_SYSCON_EMICTRL_WCYC_Msk          (0x00003ul << CMSDK_SYSCON_EMICTRL_WCYC_Pos)     /* CMSDK_SYSCON EMICTRL: WRITECYCLE Mask */
-
-#define CMSDK_SYSCON_EMICTRL_RCYC_Pos          0
-#define CMSDK_SYSCON_EMICTRL_RCYC_Msk          (0x00007ul << CMSDK_SYSCON_EMICTRL_RCYC_Pos)     /* CMSDK_SYSCON EMICTRL: READCYCLE Mask */
-
-#define CMSDK_SYSCON_RSTINFO_SYSRESETREQ_Pos   0
-#define CMSDK_SYSCON_RSTINFO_SYSRESETREQ_Msk   (0x00001ul << CMSDK_SYSCON_RSTINFO_SYSRESETREQ_Pos) /* CMSDK_SYSCON RSTINFO: SYSRESETREQ Mask */
-
-#define CMSDK_SYSCON_RSTINFO_WDOGRESETREQ_Pos  1
-#define CMSDK_SYSCON_RSTINFO_WDOGRESETREQ_Msk  (0x00001ul << CMSDK_SYSCON_RSTINFO_WDOGRESETREQ_Pos) /* CMSDK_SYSCON RSTINFO: WDOGRESETREQ Mask */
-
-#define CMSDK_SYSCON_RSTINFO_LOCKUPRESET_Pos   2
-#define CMSDK_SYSCON_RSTINFO_LOCKUPRESET_Msk   (0x00001ul << CMSDK_SYSCON_RSTINFO_LOCKUPRESET_Pos) /* CMSDK_SYSCON RSTINFO: LOCKUPRESET Mask */
-
-
-/*------------- PL230 uDMA (PL230) --------------------------------------*/
-typedef struct
-{
-  __I    uint32_t  DMA_STATUS;               /* Offset: 0x000 (R/W) DMA status Register */
-  __O    uint32_t  DMA_CFG;                  /* Offset: 0x004 ( /W) DMA configuration Register */
-  __IO   uint32_t  CTRL_BASE_PTR;            /* Offset: 0x008 (R/W) Channel Control Data Base Pointer Register */
-  __I    uint32_t  ALT_CTRL_BASE_PTR;        /* Offset: 0x00C (R/ ) Channel Alternate Control Data Base Pointer Register */
-  __I    uint32_t  DMA_WAITONREQ_STATUS;     /* Offset: 0x010 (R/ ) Channel Wait On Request Status Register */
-  __O    uint32_t  CHNL_SW_REQUEST;          /* Offset: 0x014 ( /W) Channel Software Request Register */
-  __IO   uint32_t  CHNL_USEBURST_SET;        /* Offset: 0x018 (R/W) Channel UseBurst Set Register */
-  __O    uint32_t  CHNL_USEBURST_CLR;        /* Offset: 0x01C ( /W) Channel UseBurst Clear Register */
-  __IO   uint32_t  CHNL_REQ_MASK_SET;        /* Offset: 0x020 (R/W) Channel Request Mask Set Register */
-  __O    uint32_t  CHNL_REQ_MASK_CLR;        /* Offset: 0x024 ( /W) Channel Request Mask Clear Register */
-  __IO   uint32_t  CHNL_ENABLE_SET;          /* Offset: 0x028 (R/W) Channel Enable Set Register */
-  __O    uint32_t  CHNL_ENABLE_CLR;          /* Offset: 0x02C ( /W) Channel Enable Clear Register */
-  __IO   uint32_t  CHNL_PRI_ALT_SET;         /* Offset: 0x030 (R/W) Channel Primary-Alterante Set Register */
-  __O    uint32_t  CHNL_PRI_ALT_CLR;         /* Offset: 0x034 ( /W) Channel Primary-Alterante Clear Register */
-  __IO   uint32_t  CHNL_PRIORITY_SET;        /* Offset: 0x038 (R/W) Channel Priority Set Register */
-  __O    uint32_t  CHNL_PRIORITY_CLR;        /* Offset: 0x03C ( /W) Channel Priority Clear Register */
-         uint32_t  RESERVED0[3];
-  __IO   uint32_t  ERR_CLR;                  /* Offset: 0x04C Bus Error Clear Register  (R/W) */
-
-} CMSDK_PL230_TypeDef;
-
-#define PL230_DMA_CHNL_BITS 0
-
-#define CMSDK_PL230_DMA_STATUS_MSTREN_Pos          0                                                          /* CMSDK_PL230 DMA STATUS: MSTREN Position */
-#define CMSDK_PL230_DMA_STATUS_MSTREN_Msk          (0x00000001ul << CMSDK_PL230_DMA_STATUS_MSTREN_Pos)        /* CMSDK_PL230 DMA STATUS: MSTREN Mask */
-
-#define CMSDK_PL230_DMA_STATUS_STATE_Pos           0                                                          /* CMSDK_PL230 DMA STATUS: STATE Position */
-#define CMSDK_PL230_DMA_STATUS_STATE_Msk           (0x0000000Ful << CMSDK_PL230_DMA_STATUS_STATE_Pos)         /* CMSDK_PL230 DMA STATUS: STATE Mask */
-
-#define CMSDK_PL230_DMA_STATUS_CHNLS_MINUS1_Pos    0                                                          /* CMSDK_PL230 DMA STATUS: CHNLS_MINUS1 Position */
-#define CMSDK_PL230_DMA_STATUS_CHNLS_MINUS1_Msk    (0x0000001Ful << CMSDK_PL230_DMA_STATUS_CHNLS_MINUS1_Pos)  /* CMSDK_PL230 DMA STATUS: CHNLS_MINUS1 Mask */
-
-#define CMSDK_PL230_DMA_STATUS_TEST_STATUS_Pos     0                                                          /* CMSDK_PL230 DMA STATUS: TEST_STATUS Position */
-#define CMSDK_PL230_DMA_STATUS_TEST_STATUS_Msk     (0x00000001ul << CMSDK_PL230_DMA_STATUS_TEST_STATUS_Pos)   /* CMSDK_PL230 DMA STATUS: TEST_STATUS Mask */
-
-#define CMSDK_PL230_DMA_CFG_MSTREN_Pos             0                                                          /* CMSDK_PL230 DMA CFG: MSTREN Position */
-#define CMSDK_PL230_DMA_CFG_MSTREN_Msk             (0x00000001ul << CMSDK_PL230_DMA_CFG_MSTREN_Pos)           /* CMSDK_PL230 DMA CFG: MSTREN Mask */
-
-#define CMSDK_PL230_DMA_CFG_CPCCACHE_Pos           2                                                          /* CMSDK_PL230 DMA CFG: CPCCACHE Position */
-#define CMSDK_PL230_DMA_CFG_CPCCACHE_Msk           (0x00000001ul << CMSDK_PL230_DMA_CFG_CPCCACHE_Pos)         /* CMSDK_PL230 DMA CFG: CPCCACHE Mask */
-
-#define CMSDK_PL230_DMA_CFG_CPCBUF_Pos             1                                                          /* CMSDK_PL230 DMA CFG: CPCBUF Position */
-#define CMSDK_PL230_DMA_CFG_CPCBUF_Msk             (0x00000001ul << CMSDK_PL230_DMA_CFG_CPCBUF_Pos)           /* CMSDK_PL230 DMA CFG: CPCBUF Mask */
-
-#define CMSDK_PL230_DMA_CFG_CPCPRIV_Pos            0                                                          /* CMSDK_PL230 DMA CFG: CPCPRIV Position */
-#define CMSDK_PL230_DMA_CFG_CPCPRIV_Msk            (0x00000001ul << CMSDK_PL230_DMA_CFG_CPCPRIV_Pos)          /* CMSDK_PL230 DMA CFG: CPCPRIV Mask */
-
-#define CMSDK_PL230_CTRL_BASE_PTR_Pos              PL230_DMA_CHNL_BITS + 5                                    /* CMSDK_PL230 STATUS: BASE_PTR Position */
-#define CMSDK_PL230_CTRL_BASE_PTR_Msk              (0x0FFFFFFFul << CMSDK_PL230_CTRL_BASE_PTR_Pos)            /* CMSDK_PL230 STATUS: BASE_PTR Mask */
-
-#define CMSDK_PL230_ALT_CTRL_BASE_PTR_Pos          0                                                          /* CMSDK_PL230 STATUS: MSTREN Position */
-#define CMSDK_PL230_ALT_CTRL_BASE_PTR_Msk          (0xFFFFFFFFul << CMSDK_PL230_ALT_CTRL_BASE_PTR_Pos)        /* CMSDK_PL230 STATUS: MSTREN Mask */
-
-#define CMSDK_PL230_DMA_WAITONREQ_STATUS_Pos       0                                                          /* CMSDK_PL230 DMA_WAITONREQ_STATUS: DMA_WAITONREQ_STATUS Position */
-#define CMSDK_PL230_DMA_WAITONREQ_STATUS_Msk       (0xFFFFFFFFul << CMSDK_PL230_DMA_WAITONREQ_STATUS_Pos)     /* CMSDK_PL230 DMA_WAITONREQ_STATUS: DMA_WAITONREQ_STATUS Mask */
-
-#define CMSDK_PL230_CHNL_SW_REQUEST_Pos            0                                                          /* CMSDK_PL230 CHNL_SW_REQUEST: CHNL_SW_REQUEST Position */
-#define CMSDK_PL230_CHNL_SW_REQUEST_Msk            (0xFFFFFFFFul << CMSDK_PL230_CHNL_SW_REQUEST_Pos)          /* CMSDK_PL230 CHNL_SW_REQUEST: CHNL_SW_REQUEST Mask */
-
-#define CMSDK_PL230_CHNL_USEBURST_SET_Pos          0                                                          /* CMSDK_PL230 CHNL_USEBURST: SET Position */
-#define CMSDK_PL230_CHNL_USEBURST_SET_Msk          (0xFFFFFFFFul << CMSDK_PL230_CHNL_USEBURST_SET_Pos)        /* CMSDK_PL230 CHNL_USEBURST: SET Mask */
-
-#define CMSDK_PL230_CHNL_USEBURST_CLR_Pos          0                                                          /* CMSDK_PL230 CHNL_USEBURST: CLR Position */
-#define CMSDK_PL230_CHNL_USEBURST_CLR_Msk          (0xFFFFFFFFul << CMSDK_PL230_CHNL_USEBURST_CLR_Pos)        /* CMSDK_PL230 CHNL_USEBURST: CLR Mask */
-
-#define CMSDK_PL230_CHNL_REQ_MASK_SET_Pos          0                                                          /* CMSDK_PL230 CHNL_REQ_MASK: SET Position */
-#define CMSDK_PL230_CHNL_REQ_MASK_SET_Msk          (0xFFFFFFFFul << CMSDK_PL230_CHNL_REQ_MASK_SET_Pos)        /* CMSDK_PL230 CHNL_REQ_MASK: SET Mask */
-
-#define CMSDK_PL230_CHNL_REQ_MASK_CLR_Pos          0                                                          /* CMSDK_PL230 CHNL_REQ_MASK: CLR Position */
-#define CMSDK_PL230_CHNL_REQ_MASK_CLR_Msk          (0xFFFFFFFFul << CMSDK_PL230_CHNL_REQ_MASK_CLR_Pos)        /* CMSDK_PL230 CHNL_REQ_MASK: CLR Mask */
-
-#define CMSDK_PL230_CHNL_ENABLE_SET_Pos            0                                                          /* CMSDK_PL230 CHNL_ENABLE: SET Position */
-#define CMSDK_PL230_CHNL_ENABLE_SET_Msk            (0xFFFFFFFFul << CMSDK_PL230_CHNL_ENABLE_SET_Pos)          /* CMSDK_PL230 CHNL_ENABLE: SET Mask */
-
-#define CMSDK_PL230_CHNL_ENABLE_CLR_Pos            0                                                          /* CMSDK_PL230 CHNL_ENABLE: CLR Position */
-#define CMSDK_PL230_CHNL_ENABLE_CLR_Msk            (0xFFFFFFFFul << CMSDK_PL230_CHNL_ENABLE_CLR_Pos)          /* CMSDK_PL230 CHNL_ENABLE: CLR Mask */
-
-#define CMSDK_PL230_CHNL_PRI_ALT_SET_Pos           0                                                          /* CMSDK_PL230 CHNL_PRI_ALT: SET Position */
-#define CMSDK_PL230_CHNL_PRI_ALT_SET_Msk           (0xFFFFFFFFul << CMSDK_PL230_CHNL_PRI_ALT_SET_Pos)         /* CMSDK_PL230 CHNL_PRI_ALT: SET Mask */
-
-#define CMSDK_PL230_CHNL_PRI_ALT_CLR_Pos           0                                                          /* CMSDK_PL230 CHNL_PRI_ALT: CLR Position */
-#define CMSDK_PL230_CHNL_PRI_ALT_CLR_Msk           (0xFFFFFFFFul << CMSDK_PL230_CHNL_PRI_ALT_CLR_Pos)         /* CMSDK_PL230 CHNL_PRI_ALT: CLR Mask */
-
-#define CMSDK_PL230_CHNL_PRIORITY_SET_Pos          0                                                          /* CMSDK_PL230 CHNL_PRIORITY: SET Position */
-#define CMSDK_PL230_CHNL_PRIORITY_SET_Msk          (0xFFFFFFFFul << CMSDK_PL230_CHNL_PRIORITY_SET_Pos)        /* CMSDK_PL230 CHNL_PRIORITY: SET Mask */
-
-#define CMSDK_PL230_CHNL_PRIORITY_CLR_Pos          0                                                          /* CMSDK_PL230 CHNL_PRIORITY: CLR Position */
-#define CMSDK_PL230_CHNL_PRIORITY_CLR_Msk          (0xFFFFFFFFul << CMSDK_PL230_CHNL_PRIORITY_CLR_Pos)        /* CMSDK_PL230 CHNL_PRIORITY: CLR Mask */
-
-#define CMSDK_PL230_ERR_CLR_Pos                    0                                                          /* CMSDK_PL230 ERR: CLR Position */
-#define CMSDK_PL230_ERR_CLR_Msk                    (0x00000001ul << CMSDK_PL230_ERR_CLR_Pos)                  /* CMSDK_PL230 ERR: CLR Mask */
-
-
-/*------------------- Watchdog ----------------------------------------------*/
-typedef struct
-{
-
-  __IO    uint32_t  LOAD;                   /* Offset: 0x000 (R/W) Watchdog Load Register */
-  __I     uint32_t  VALUE;                  /* Offset: 0x004 (R/ ) Watchdog Value Register */
-  __IO    uint32_t  CTRL;                   /* Offset: 0x008 (R/W) Watchdog Control Register */
-  __O     uint32_t  INTCLR;                 /* Offset: 0x00C ( /W) Watchdog Clear Interrupt Register */
-  __I     uint32_t  RAWINTSTAT;             /* Offset: 0x010 (R/ ) Watchdog Raw Interrupt Status Register */
-  __I     uint32_t  MASKINTSTAT;            /* Offset: 0x014 (R/ ) Watchdog Interrupt Status Register */
-        uint32_t  RESERVED0[762];
-  __IO    uint32_t  LOCK;                   /* Offset: 0xC00 (R/W) Watchdog Lock Register */
-        uint32_t  RESERVED1[191];
-  __IO    uint32_t  ITCR;                   /* Offset: 0xF00 (R/W) Watchdog Integration Test Control Register */
-  __O     uint32_t  ITOP;                   /* Offset: 0xF04 ( /W) Watchdog Integration Test Output Set Register */
-}CMSDK_WATCHDOG_TypeDef;
-
-#define CMSDK_Watchdog_LOAD_Pos               0                                              /* CMSDK_Watchdog LOAD: LOAD Position */
-#define CMSDK_Watchdog_LOAD_Msk              (0xFFFFFFFFul << CMSDK_Watchdog_LOAD_Pos)       /* CMSDK_Watchdog LOAD: LOAD Mask */
-
-#define CMSDK_Watchdog_VALUE_Pos              0                                              /* CMSDK_Watchdog VALUE: VALUE Position */
-#define CMSDK_Watchdog_VALUE_Msk             (0xFFFFFFFFul << CMSDK_Watchdog_VALUE_Pos)      /* CMSDK_Watchdog VALUE: VALUE Mask */
-
-#define CMSDK_Watchdog_CTRL_RESEN_Pos         1                                              /* CMSDK_Watchdog CTRL_RESEN: Enable Reset Output Position */
-#define CMSDK_Watchdog_CTRL_RESEN_Msk        (0x1ul << CMSDK_Watchdog_CTRL_RESEN_Pos)        /* CMSDK_Watchdog CTRL_RESEN: Enable Reset Output Mask */
-
-#define CMSDK_Watchdog_CTRL_INTEN_Pos         0                                              /* CMSDK_Watchdog CTRL_INTEN: Int Enable Position */
-#define CMSDK_Watchdog_CTRL_INTEN_Msk        (0x1ul << CMSDK_Watchdog_CTRL_INTEN_Pos)        /* CMSDK_Watchdog CTRL_INTEN: Int Enable Mask */
-
-#define CMSDK_Watchdog_INTCLR_Pos             0                                              /* CMSDK_Watchdog INTCLR: Int Clear Position */
-#define CMSDK_Watchdog_INTCLR_Msk            (0x1ul << CMSDK_Watchdog_INTCLR_Pos)            /* CMSDK_Watchdog INTCLR: Int Clear Mask */
-
-#define CMSDK_Watchdog_RAWINTSTAT_Pos         0                                              /* CMSDK_Watchdog RAWINTSTAT: Raw Int Status Position */
-#define CMSDK_Watchdog_RAWINTSTAT_Msk        (0x1ul << CMSDK_Watchdog_RAWINTSTAT_Pos)        /* CMSDK_Watchdog RAWINTSTAT: Raw Int Status Mask */
-
-#define CMSDK_Watchdog_MASKINTSTAT_Pos        0                                              /* CMSDK_Watchdog MASKINTSTAT: Mask Int Status Position */
-#define CMSDK_Watchdog_MASKINTSTAT_Msk       (0x1ul << CMSDK_Watchdog_MASKINTSTAT_Pos)       /* CMSDK_Watchdog MASKINTSTAT: Mask Int Status Mask */
-
-#define CMSDK_Watchdog_LOCK_Pos               0                                              /* CMSDK_Watchdog LOCK: LOCK Position */
-#define CMSDK_Watchdog_LOCK_Msk              (0x1ul << CMSDK_Watchdog_LOCK_Pos)              /* CMSDK_Watchdog LOCK: LOCK Mask */
-
-#define CMSDK_Watchdog_INTEGTESTEN_Pos        0                                              /* CMSDK_Watchdog INTEGTESTEN: Integration Test Enable Position */
-#define CMSDK_Watchdog_INTEGTESTEN_Msk       (0x1ul << CMSDK_Watchdog_INTEGTESTEN_Pos)       /* CMSDK_Watchdog INTEGTESTEN: Integration Test Enable Mask */
-
-#define CMSDK_Watchdog_INTEGTESTOUTSET_Pos    1                                              /* CMSDK_Watchdog INTEGTESTOUTSET: Integration Test Output Set Position */
-#define CMSDK_Watchdog_INTEGTESTOUTSET_Msk   (0x1ul << CMSDK_Watchdog_INTEGTESTOUTSET_Pos)   /* CMSDK_Watchdog INTEGTESTOUTSET: Integration Test Output Set Mask */
-
-
-
-/* --------------------  End of section using anonymous unions  ------------------- */
-#if defined ( __CC_ARM   )
-  #pragma pop
-#elif defined(__ICCARM__)
-  /* leave anonymous unions enabled */
-#elif defined(__GNUC__)
-  /* anonymous unions are enabled by default */
-#elif defined(__TMS470__)
-  /* anonymous unions are enabled by default */
-#elif defined(__TASKING__)
-  #pragma warning restore
-#else
-  #warning Not supported compiler type
-#endif
-
-
-
-
-/* ================================================================================ */
-/* ================              Peripheral memory map             ================ */
-/* ================================================================================ */
-
-/* Peripheral and SRAM base address                                                 */
-#define CMSDK_FLASH_BASE        (0x00000000UL)
-#define CMSDK_SRAM_BASE         (0x20000000UL)
-#define CMSDK_PERIPH_BASE       (0x40000000UL)
-
-#define CMSDK_RAM_BASE          (0x20000000UL)
-#define CMSDK_APB_BASE          (0x40000000UL)
-#define CMSDK_AHB_BASE          (0x40010000UL)
-
-/* APB peripherals                                                                  */
-#define CMSDK_TIMER0_BASE       (CMSDK_APB_BASE + 0x0000UL)
-#define CMSDK_TIMER1_BASE       (CMSDK_APB_BASE + 0x1000UL)
-#define CMSDK_DUALTIMER_BASE    (CMSDK_APB_BASE + 0x2000UL)
-#define CMSDK_DUALTIMER_1_BASE  (CMSDK_DUALTIMER_BASE)
-#define CMSDK_DUALTIMER_2_BASE  (CMSDK_DUALTIMER_BASE + 0x20UL)
-#define CMSDK_UART0_BASE        (CMSDK_APB_BASE + 0x5000UL)
-#define CMSDK_UART1_BASE        (CMSDK_APB_BASE + 0x4000UL)
-#define CMSDK_UART2_BASE        (CMSDK_APB_BASE + 0x6000UL)
-#define CMSDK_UART3_BASE        (CMSDK_APB_BASE + 0x7000UL)
-#define CMSDK_WATCHDOG_BASE     (CMSDK_APB_BASE + 0x8000UL)
-#define CMSDK_PL230_BASE        (CMSDK_APB_BASE + 0xF000UL)
-
-/* AHB peripherals                                                                  */
-#define CMSDK_GPIO0_BASE        (CMSDK_AHB_BASE + 0x0000UL)
-#define CMSDK_GPIO1_BASE        (CMSDK_AHB_BASE + 0x1000UL)
-#define CMSDK_GPIO2_BASE        (CMSDK_AHB_BASE + 0x2000UL)
-#define CMSDK_GPIO3_BASE        (CMSDK_AHB_BASE + 0x3000UL)
-#define CMSDK_SYSCTRL_BASE      (CMSDK_AHB_BASE + 0xF000UL)
-
-
-/* ================================================================================ */
-/* ================             Peripheral declaration             ================ */
-/* ================================================================================ */
-
-#define CMSDK_UART0             ((CMSDK_UART_TypeDef   *) CMSDK_UART0_BASE   )
-#define CMSDK_UART1             ((CMSDK_UART_TypeDef   *) CMSDK_UART1_BASE   )
-#define CMSDK_UART2             ((CMSDK_UART_TypeDef   *) CMSDK_UART2_BASE   )
-#define CMSDK_UART3             ((CMSDK_UART_TypeDef   *) CMSDK_UART3_BASE   )
-#define CMSDK_TIMER0            ((CMSDK_TIMER_TypeDef  *) CMSDK_TIMER0_BASE  )
-#define CMSDK_TIMER1            ((CMSDK_TIMER_TypeDef  *) CMSDK_TIMER1_BASE  )
-#define CMSDK_DUALTIMER         ((CMSDK_DUALTIMER_BOTH_TypeDef  *) CMSDK_DUALTIMER_BASE )
-#define CMSDK_DUALTIMER1        ((CMSDK_DUALTIMER_SINGLE_TypeDef  *) CMSDK_DUALTIMER_1_BASE )
-#define CMSDK_DUALTIMER2        ((CMSDK_DUALTIMER_SINGLE_TypeDef  *) CMSDK_DUALTIMER_2_BASE )
-#define CMSDK_WATCHDOG          ((CMSDK_WATCHDOG_TypeDef  *) CMSDK_WATCHDOG_BASE   )
-#define CMSDK_DMA               ((CMSDK_PL230_TypeDef  *) CMSDK_PL230_BASE   )
-#define CMSDK_GPIO0             ((CMSDK_GPIO_TypeDef   *) CMSDK_GPIO0_BASE   )
-#define CMSDK_GPIO1             ((CMSDK_GPIO_TypeDef   *) CMSDK_GPIO1_BASE   )
-#define CMSDK_GPIO2             ((CMSDK_GPIO_TypeDef   *) CMSDK_GPIO2_BASE )
-#define CMSDK_GPIO3             ((CMSDK_GPIO_TypeDef   *) CMSDK_GPIO3_BASE )
-#define CMSDK_SYSCON            ((CMSDK_SYSCON_TypeDef *) CMSDK_SYSCTRL_BASE )
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  /* CMSDK_BEID_H */
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_BEID/SMM_MPS2.h	Wed Mar 02 10:15:13 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,616 +0,0 @@
-/*
- * Copyright:
- * ----------------------------------------------------------------
- * This confidential and proprietary software may be used only as
- * authorised by a licensing agreement from ARM Limited
- *   (C) COPYRIGHT 2014 ARM Limited
- *       ALL RIGHTS RESERVED
- * The entire notice above must be reproduced on all authorised
- * copies and copies may only be made to the extent permitted
- * by a licensing agreement from ARM Limited.
- * ----------------------------------------------------------------
- * File:     smm_mps2.h
- * Release:  Version 1.0
- * ----------------------------------------------------------------
- */
-
-#ifndef __SMM_MPS2_H
-#define __SMM_MPS2_H
-
-#include "peripherallink.h"                         /* device specific header file    */
-
-#if defined ( __CC_ARM   )
-#pragma anon_unions
-#endif
-
-/******************************************************************************/
-/*                          FPGA System Register declaration                  */
-/******************************************************************************/
-
-typedef struct                   
-{
-  __IO uint32_t LED;             // Offset: 0x000 (R/W)  LED connections
-                                 //                         [31:2] : Reserved
-                                 //                          [1:0] : LEDs
-       uint32_t RESERVED1[1];
-  __IO uint32_t BUTTON;          // Offset: 0x008 (R/W)  Buttons
-                                 //                         [31:2] : Reserved
-                                 //                          [1:0] : Buttons
-       uint32_t RESERVED2[1];
-  __IO uint32_t CLK1HZ;          // Offset: 0x010 (R/W)  1Hz up counter
-  __IO uint32_t CLK100HZ;        // Offset: 0x014 (R/W)  100Hz up counter
-  __IO uint32_t COUNTER;         // Offset: 0x018 (R/W)  Cycle Up Counter
-                                 //                         Increments when 32-bit prescale counter reach zero
-       uint32_t RESERVED3[1];
-  __IO uint32_t PRESCALE;        // Offset: 0x020 (R/W)  Prescaler
-                                 //                         Bit[31:0] : reload value for prescale counter
-  __IO uint32_t PSCNTR;          // Offset: 0x024 (R/W)  32-bit Prescale counter
-                                 //                         current value of the pre-scaler counter
-								 //                         The Cycle Up Counter increment when the prescale down counter reach 0
-								 //                         The pre-scaler counter is reloaded with PRESCALE after reaching 0.
-       uint32_t RESERVED4[9];
-  __IO uint32_t MISC;            // Offset: 0x04C (R/W)  Misc control */
-                                 //                         [31:10] : Reserved
-                                 //                            [9] : SHIELD_1_SPI_nCS
-                                 //                            [8] : SHIELD_0_SPI_nCS
-                                 //                            [7] : ADC_SPI_nCS
-                                 //                            [6] : CLCD_BL_CTRL
-                                 //                            [5] : CLCD_RD
-                                 //                            [4] : CLCD_RS
-                                 //                            [3] : CLCD_RESET
-                                 //                            [2] : RESERVED
-                                 //                            [1] : SPI_nSS
-                                 //                            [0] : CLCD_CS
-} MPS2_FPGAIO_TypeDef;
-
-// MISC register bit definitions
-
-#define CLCD_CS_Pos        0
-#define CLCD_CS_Msk        (1UL<<CLCD_CS_Pos)
-#define SPI_nSS_Pos        1
-#define SPI_nSS_Msk        (1UL<<SPI_nSS_Pos)
-#define CLCD_RESET_Pos     3
-#define CLCD_RESET_Msk     (1UL<<CLCD_RESET_Pos)
-#define CLCD_RS_Pos        4
-#define CLCD_RS_Msk        (1UL<<CLCD_RS_Pos)
-#define CLCD_RD_Pos        5
-#define CLCD_RD_Msk        (1UL<<CLCD_RD_Pos)
-#define CLCD_BL_Pos        6
-#define CLCD_BL_Msk        (1UL<<CLCD_BL_Pos)
-#define ADC_nCS_Pos        7
-#define ADC_nCS_Msk        (1UL<<ADC_nCS_Pos)
-#define SHIELD_0_nCS_Pos        8
-#define SHIELD_0_nCS_Msk        (1UL<<SHIELD_0_nCS_Pos)
-#define SHIELD_1_nCS_Pos        9
-#define SHIELD_1_nCS_Msk        (1UL<<SHIELD_1_nCS_Pos)
-
-/******************************************************************************/
-/*                        SCC Register declaration                            */
-/******************************************************************************/
-
-typedef struct                   // 
-{
-  __IO uint32_t CFG_REG0;        // Offset: 0x000 (R/W)  Remaps block RAM to ZBT
-                                 //                         [31:1] : Reserved
-                                 //                            [0] 1 : REMAP BlockRam to ZBT
-  __IO uint32_t LEDS;            // Offset: 0x004 (R/W)  Controls the MCC user LEDs
-                                 //                         [31:8] : Reserved
-                                 //                          [7:0] : MCC LEDs
-       uint32_t RESERVED0[1];
-  __I  uint32_t SWITCHES;        // Offset: 0x00C (R/ )  Denotes the state of the MCC user switches
-                                 //                         [31:8] : Reserved
-                                 //                          [7:0] : These bits indicate state of the MCC switches
-  __I  uint32_t CFG_REG4;        // Offset: 0x010 (R/ )  Denotes the board revision
-                                 //                         [31:4] : Reserved
-                                 //                          [3:0] : Used by the MCC to pass PCB revision. 0 = A 1 = B
-       uint32_t RESERVED1[35];
-  __IO uint32_t SYS_CFGDATA_RTN; // Offset: 0x0A0 (R/W)  User data register
-                                 //                         [31:0] : Data
-  __IO uint32_t SYS_CFGDATA_OUT; // Offset: 0x0A4 (R/W)  User data register
-                                 //                         [31:0] : Data
-  __IO uint32_t SYS_CFGCTRL;     // Offset: 0x0A8 (R/W)  Control register
-                                 //                           [31] : Start (generates interrupt on write to this bit)
-                                 //                           [30] : R/W access
-                                 //                        [29:26] : Reserved
-                                 //                        [25:20] : Function value
-                                 //                        [19:12] : Reserved
-                                 //                         [11:0] : Device (value of 0/1/2 for supported clocks)
-  __IO uint32_t SYS_CFGSTAT;     // Offset: 0x0AC (R/W)  Contains status information
-                                 //                         [31:2] : Reserved
-                                 //                            [1] : Error
-                                 //                            [0] : Complete
-  __IO uint32_t RESERVED2[20];
-  __IO uint32_t SCC_DLL;         // Offset: 0x100 (R/W)  DLL Lock Register
-                                 //                        [31:24] : DLL LOCK MASK[7:0] - Indicate if the DLL locked is masked
-                                 //                        [23:16] : DLL LOCK MASK[7:0] - Indicate if the DLLs are locked or unlocked
-                                 //                         [15:1] : Reserved
-                                 //                            [0] : This bit indicates if all enabled DLLs are locked
-       uint32_t RESERVED3[957];
-  __I  uint32_t SCC_AID;         // Offset: 0xFF8 (R/ )  SCC AID Register
-                                 //                        [31:24] : FPGA build number
-                                 //                        [23:20] : V2M-MPS2 target board revision (A = 0, B = 1)
-                                 //                        [19:11] : Reserved
-                                 //                           [10] : if “1” SCC_SW register has been implemented
-                                 //                            [9] : if “1” SCC_LED register has been implemented
-                                 //                            [8] : if “1” DLL lock register has been implemented
-                                 //                          [7:0] : number of SCC configuration register
-  __I  uint32_t SCC_ID;          // Offset: 0xFFC (R/ )  Contains information about the FPGA image
-                                 //                        [31:24] : Implementer ID: 0x41 = ARM
-                                 //                        [23:20] : Application note IP variant number
-                                 //                        [19:16] : IP Architecture: 0x4 =AHB
-                                 //                         [15:4] : Primary part number: 386 = AN386
-                                 //                          [3:0] : Application note IP revision number
-} MPS2_SCC_TypeDef;
-
-
-/******************************************************************************/
-/*                        SSP Peripheral declaration                          */
-/******************************************************************************/
-
-typedef struct                   // Document DDI0194G_ssp_pl022_r1p3_trm.pdf
-{
-  __IO uint32_t CR0;             // Offset: 0x000 (R/W)  Control register 0
-                                 //                        [31:16] : Reserved
-                                 //                         [15:8] : Serial clock rate
-                                 //                            [7] : SSPCLKOUT phase,    applicable to Motorola SPI frame format only
-                                 //                            [6] : SSPCLKOUT polarity, applicable to Motorola SPI frame format only
-                                 //                          [5:4] : Frame format
-                                 //                          [3:0] : Data Size Select
-  __IO uint32_t CR1;             // Offset: 0x004 (R/W)  Control register 1
-                                 //                         [31:4] : Reserved
-                                 //                            [3] : Slave-mode output disable
-                                 //                            [2] : Master or slave mode select
-                                 //                            [1] : Synchronous serial port enable
-                                 //                            [0] : Loop back mode
-  __IO uint32_t DR;              // Offset: 0x008 (R/W)  Data register
-                                 //                        [31:16] : Reserved
-                                 //                         [15:0] : Transmit/Receive FIFO
-  __I  uint32_t SR;              // Offset: 0x00C (R/ )  Status register
-                                 //                         [31:5] : Reserved
-                                 //                            [4] : PrimeCell SSP busy flag
-                                 //                            [3] : Receive FIFO full
-                                 //                            [2] : Receive FIFO not empty
-                                 //                            [1] : Transmit FIFO not full
-                                 //                            [0] : Transmit FIFO empty
-  __IO uint32_t CPSR;            // Offset: 0x010 (R/W)  Clock prescale register
-                                 //                         [31:8] : Reserved
-                                 //                          [8:0] : Clock prescale divisor
-  __IO uint32_t IMSC;            // Offset: 0x014 (R/W)  Interrupt mask set or clear register
-                                 //                         [31:4] : Reserved
-                                 //                            [3] : Transmit FIFO interrupt mask
-                                 //                            [2] : Receive FIFO interrupt mask
-                                 //                            [1] : Receive timeout interrupt mask
-                                 //                            [0] : Receive overrun interrupt mask
-  __I  uint32_t RIS;             // Offset: 0x018 (R/ )  Raw interrupt status register
-                                 //                         [31:4] : Reserved
-                                 //                            [3] : raw interrupt state, prior to masking, of the SSPTXINTR interrupt
-                                 //                            [2] : raw interrupt state, prior to masking, of the SSPRXINTR interrupt
-                                 //                            [1] : raw interrupt state, prior to masking, of the SSPRTINTR interrupt
-                                 //                            [0] : raw interrupt state, prior to masking, of the SSPRORINTR interrupt
-  __I  uint32_t MIS;             // Offset: 0x01C (R/ )  Masked interrupt status register
-                                 //                         [31:4] : Reserved
-                                 //                            [3] : transmit FIFO masked interrupt state, after masking, of the SSPTXINTR interrupt
-                                 //                            [2] : receive FIFO masked interrupt state, after masking, of the SSPRXINTR interrupt
-                                 //                            [1] : receive timeout masked interrupt state, after masking, of the SSPRTINTR interrupt
-                                 //                            [0] : receive over run masked interrupt status, after masking, of the SSPRORINTR interrupt
-  __O  uint32_t ICR;             // Offset: 0x020 ( /W)  Interrupt clear register
-                                 //                         [31:2] : Reserved
-                                 //                            [1] : Clears the SSPRTINTR interrupt
-                                 //                            [0] : Clears the SSPRORINTR interrupt
-  __IO uint32_t DMACR;           // Offset: 0x024 (R/W)  DMA control register
-                                 //                         [31:2] : Reserved
-                                 //                            [1] : Transmit DMA Enable
-                                 //                            [0] : Receive DMA Enable
-} MPS2_SSP_TypeDef;
-
-
-// SSP_CR0 Control register 0
-#define SSP_CR0_DSS_Pos         0           // Data Size Select
-#define SSP_CR0_DSS_Msk         (0xF<<SSP_CR0_DSS_Pos)
-#define SSP_CR0_FRF_Pos         4           // Frame Format Select
-#define SSP_CR0_FRF_Msk         (3UL<<SSP_CR0_FRM_Pos)
-#define SSP_CR0_SPO_Pos         6           // SSPCLKOUT polarity
-#define SSP_CR0_SPO_Msk         (1UL<<SSP_CR0_SPO_Pos)
-#define SSP_CR0_SPH_Pos         7           // SSPCLKOUT phase
-#define SSP_CR0_SPH_Msk         (1UL<<SSP_CR0_SPH_Pos)
-#define SSP_CR0_SCR_Pos         8           // Serial Clock Rate (divide)
-#define SSP_CR0_SCR_Msk         (0xFF<<SSP_CR0_SCR_Pos)
-
-#define SSP_CR0_SCR_DFLT        0x0300      // Serial Clock Rate (divide), default set at 3
-#define SSP_CR0_FRF_MOT         0x0000      // Frame format, Motorola
-#define SSP_CR0_DSS_8           0x0007      // Data packet size, 8bits
-#define SSP_CR0_DSS_16          0x000F      // Data packet size, 16bits
-
-// SSP_CR1 Control register 1
-#define SSP_CR1_LBM_Pos         0           // Loop Back Mode
-#define SSP_CR1_LBM_Msk         (1UL<<SSP_CR1_LBM_Pos)
-#define SSP_CR1_SSE_Pos         1           // Serial port enable
-#define SSP_CR1_SSE_Msk         (1UL<<SSP_CR1_SSE_Pos)
-#define SSP_CR1_MS_Pos          2           // Master or Slave mode
-#define SSP_CR1_MS_Msk          (1UL<<SSP_CR1_MS_Pos)
-#define SSP_CR1_SOD_Pos         3           // Slave Output mode Disable
-#define SSP_CR1_SOD_Msk         (1UL<<SSP_CR1_SOD_Pos)
-
-// SSP_SR Status register
-#define SSP_SR_TFE_Pos          0           // Transmit FIFO empty
-#define SSP_SR_TFE_Msk          (1UL<<SSP_SR_TFE_Pos)
-#define SSP_SR_TNF_Pos          1           // Transmit FIFO not full
-#define SSP_SR_TNF_Msk          (1UL<<SSP_SR_TNF_Pos)
-#define SSP_SR_RNE_Pos          2           // Receive  FIFO not empty
-#define SSP_SR_RNE_Msk          (1UL<<SSP_SR_RNE_Pos)
-#define SSP_SR_RFF_Pos          3           // Receive  FIFO full
-#define SSP_SR_RFF_Msk          (1UL<<SSP_SR_RFF_Pos)
-#define SSP_SR_BSY_Pos          4           // Busy
-#define SSP_SR_BSY_Msk          (1UL<<SSP_SR_BSY_Pos)
-
-// SSP_CPSR Clock prescale register
-#define SSP_CPSR_CPD_Pos        0           // Clock prescale divisor
-#define SSP_CPSR_CPD_Msk        (0xFF<<SSP_CPSR_CDP_Pos)
-
-#define SSP_CPSR_DFLT        0x0008      // Clock prescale (use with SCR), default set at 8
-
-// SSPIMSC Interrupt mask set and clear register
-#define SSP_IMSC_RORIM_Pos         0           // Receive overrun not Masked
-#define SSP_IMSC_RORIM_Msk         (1UL<<SSP_IMSC_RORIM_Pos)
-#define SSP_IMSC_RTIM_Pos          1           // Receive timeout not Masked
-#define SSP_IMSC_RTIM_Msk          (1UL<<SSP_IMSC_RTIM_Pos)
-#define SSP_IMSC_RXIM_Pos          2           // Receive  FIFO not Masked
-#define SSP_IMSC_RXIM_Msk          (1UL<<SSP_IMSC_RXIM_Pos)
-#define SSP_IMSC_TXIM_Pos          3           // Transmit FIFO not Masked
-#define SSP_IMSC_TXIM_Msk          (1UL<<SSP_IMSC_TXIM_Pos)
-
-// SSPRIS Raw interrupt status register
-#define SSP_RIS_RORRIS_Pos         0           // Raw Overrun  interrupt flag
-#define SSP_RIS_RORRIS_Msk         (1UL<<SSP_RIS_RORRIS_Pos)
-#define SSP_RIS_RTRIS_Pos          1           // Raw Timemout interrupt flag
-#define SSP_RIS_RTRIS_Msk          (1UL<<SSP_RIS_RTRIS_Pos)
-#define SSP_RIS_RXRIS_Pos          2           // Raw Receive  interrupt flag
-#define SSP_RIS_RXRIS_Msk          (1UL<<SSP_RIS_RXRIS_Pos)
-#define SSP_RIS_TXRIS_Pos          3           // Raw Transmit interrupt flag
-#define SSP_RIS_TXRIS_Msk          (1UL<<SSP_RIS_TXRIS_Pos)
-
-// SSPMIS Masked interrupt status register
-#define SSP_MIS_RORMIS_Pos         0           // Masked Overrun  interrupt flag
-#define SSP_MIS_RORMIS_Msk         (1UL<<SSP_MIS_RORMIS_Pos)
-#define SSP_MIS_RTMIS_Pos          1           // Masked Timemout interrupt flag
-#define SSP_MIS_RTMIS_Msk          (1UL<<SSP_MIS_RTMIS_Pos)
-#define SSP_MIS_RXMIS_Pos          2           // Masked Receive  interrupt flag
-#define SSP_MIS_RXMIS_Msk          (1UL<<SSP_MIS_RXMIS_Pos)
-#define SSP_MIS_TXMIS_Pos          3           // Masked Transmit interrupt flag
-#define SSP_MIS_TXMIS_Msk          (1UL<<SSP_MIS_TXMIS_Pos)
-
-// SSPICR Interrupt clear register
-#define SSP_ICR_RORIC_Pos           0           // Clears Overrun  interrupt flag
-#define SSP_ICR_RORIC_Msk           (1UL<<SSP_ICR_RORIC_Pos)
-#define SSP_ICR_RTIC_Pos            1           // Clears Timemout interrupt flag
-#define SSP_ICR_RTIC_Msk            (1UL<<SSP_ICR_RTIC_Pos)
-
-// SSPDMACR DMA control register
-#define SSP_DMACR_RXDMAE_Pos        0           // Enable Receive  FIFO DMA
-#define SSP_DMACR_RXDMAE_Msk        (1UL<<SSP_DMACR_RXDMAE_Pos)
-#define SSP_DMACR_TXDMAE_Pos        1           // Enable Transmit FIFO DMA
-#define SSP_DMACR_TXDMAE_Msk        (1UL<<SSP_DMACR_TXDMAE_Pos)
-
-/******************************************************************************/
-/*               Audio and Touch Screen (I2C) Peripheral declaration          */
-/******************************************************************************/
-
-typedef struct
-{
-  union {
-  __O   uint32_t  CONTROLS;     // Offset: 0x000 CONTROL Set Register     ( /W) 
-  __I   uint32_t  CONTROL;      // Offset: 0x000 CONTROL Status Register  (R/ ) 
-  };
-  __O    uint32_t  CONTROLC;     // Offset: 0x004 CONTROL Clear Register    ( /W)  
-} MPS2_I2C_TypeDef;
-
-#define SDA                1 << 1
-#define SCL                1 << 0
-
-
-/******************************************************************************/
-/*               Audio I2S Peripheral declaration                             */
-/******************************************************************************/
-
-typedef struct
-{
-  /*!< Offset: 0x000 CONTROL Register    (R/W) */
-  __IO   uint32_t  CONTROL; // <h> CONTROL </h>
-                              //   <o.0> TX Enable
-                              //     <0=> TX disabled
-                              //     <1=> TX enabled
-                              //   <o.1> TX IRQ Enable
-                              //     <0=> TX IRQ disabled
-                              //     <1=> TX IRQ enabled
-                              //   <o.2> RX Enable
-                              //     <0=> RX disabled
-                              //     <1=> RX enabled
-                              //   <o.3> RX IRQ Enable
-                              //     <0=> RX IRQ disabled
-                              //     <1=> RX IRQ enabled
-                              //   <o.10..8> TX Buffer Water Level
-                              //     <0=> / IRQ triggers when any space available
-                              //     <1=> / IRQ triggers when more than 1 space available
-                              //     <2=> / IRQ triggers when more than 2 space available
-                              //     <3=> / IRQ triggers when more than 3 space available
-                              //     <4=> Undefined!
-                              //     <5=> Undefined!
-                              //     <6=> Undefined!
-                              //     <7=> Undefined!  
-                              //   <o.14..12> RX Buffer Water Level
-                              //     <0=> Undefined!
-                              //     <1=> / IRQ triggers when less than 1 space available
-                              //     <2=> / IRQ triggers when less than 2 space available
-                              //     <3=> / IRQ triggers when less than 3 space available
-                              //     <4=> / IRQ triggers when less than 4 space available
-                              //     <5=> Undefined!
-                              //     <6=> Undefined!
-                              //     <7=> Undefined!  
-                              //   <o.16> FIFO reset
-                              //     <0=> Normal operation
-                              //     <1=> FIFO reset
-                              //   <o.17> Audio Codec reset
-                              //     <0=> Normal operation
-                              //     <1=> Assert audio Codec reset
-  /*!< Offset: 0x004 STATUS Register     (R/ ) */
-  __I    uint32_t  STATUS;  // <h> STATUS </h> 
-                              //   <o.0> TX Buffer alert
-                              //     <0=> TX buffer don't need service yet
-                              //     <1=> TX buffer need service
-                              //   <o.1> RX Buffer alert
-                              //     <0=> RX buffer don't need service yet 
-                              //     <1=> RX buffer need service
-                              //   <o.2> TX Buffer Empty
-                              //     <0=> TX buffer have data
-                              //     <1=> TX buffer empty
-                              //   <o.3> TX Buffer Full
-                              //     <0=> TX buffer not full
-                              //     <1=> TX buffer full
-                              //   <o.4> RX Buffer Empty
-                              //     <0=> RX buffer have data
-                              //     <1=> RX buffer empty
-                              //   <o.5> RX Buffer Full
-                              //     <0=> RX buffer not full
-                              //     <1=> RX buffer full
-  union {
-   /*!< Offset: 0x008 Error Status Register (R/ ) */  
-    __I    uint32_t  ERROR;  // <h> ERROR </h> 
-                              //   <o.0> TX error
-                              //     <0=> Okay
-                              //     <1=> TX overrun/underrun
-                              //   <o.1> RX error
-                              //     <0=> Okay 
-                              //     <1=> RX overrun/underrun
-   /*!< Offset: 0x008 Error Clear Register  ( /W) */    
-    __O    uint32_t  ERRORCLR;  // <h> ERRORCLR </h> 
-                              //   <o.0> TX error
-                              //     <0=> Okay
-                              //     <1=> Clear TX error
-                              //   <o.1> RX error
-                              //     <0=> Okay 
-                              //     <1=> Clear RX error
-    };
-   /*!< Offset: 0x00C Divide ratio Register (R/W) */  
-  __IO   uint32_t  DIVIDE;  // <h> Divide ratio for Left/Right clock </h> 
-                              //   <o.9..0> TX error (default 0x80)			      
-   /*!< Offset: 0x010 Transmit Buffer       ( /W) */
-  __O    uint32_t  TXBUF;  // <h> Transmit buffer </h> 
-                              //   <o.15..0> Right channel			      
-                              //   <o.31..16> Left channel
-   /*!< Offset: 0x014 Receive Buffer        (R/ ) */
-  __I    uint32_t  RXBUF;  // <h> Receive buffer </h> 
-                              //   <o.15..0> Right channel			      
-                              //   <o.31..16> Left channel
-         uint32_t  RESERVED1[186];
-  __IO uint32_t ITCR;         // <h> Integration Test Control Register </h>
-                              //   <o.0> ITEN
-                              //     <0=> Normal operation
-                              //     <1=> Integration Test mode enable
-  __O  uint32_t ITIP1;        // <h> Integration Test Input Register 1</h>
-                              //   <o.0> SDIN
-  __O  uint32_t ITOP1;        // <h> Integration Test Output Register 1</h>
-                              //   <o.0> SDOUT
-                              //   <o.1> SCLK
-                              //   <o.2> LRCK
-                              //   <o.3> IRQOUT
-} MPS2_I2S_TypeDef;
-
-#define I2S_CONTROL_TXEN_Pos        0
-#define I2S_CONTROL_TXEN_Msk        (1UL<<I2S_CONTROL_TXEN_Pos)
-
-#define I2S_CONTROL_TXIRQEN_Pos     1
-#define I2S_CONTROL_TXIRQEN_Msk     (1UL<<I2S_CONTROL_TXIRQEN_Pos)
-
-#define I2S_CONTROL_RXEN_Pos        2
-#define I2S_CONTROL_RXEN_Msk        (1UL<<I2S_CONTROL_RXEN_Pos)
-
-#define I2S_CONTROL_RXIRQEN_Pos     3
-#define I2S_CONTROL_RXIRQEN_Msk     (1UL<<I2S_CONTROL_RXIRQEN_Pos)
-
-#define I2S_CONTROL_TXWLVL_Pos      8
-#define I2S_CONTROL_TXWLVL_Msk      (7UL<<I2S_CONTROL_TXWLVL_Pos)
-
-#define I2S_CONTROL_RXWLVL_Pos      12
-#define I2S_CONTROL_RXWLVL_Msk      (7UL<<I2S_CONTROL_RXWLVL_Pos)
-/* FIFO reset*/
-#define I2S_CONTROL_FIFORST_Pos     16
-#define I2S_CONTROL_FIFORST_Msk     (1UL<<I2S_CONTROL_FIFORST_Pos)
-/* Codec reset*/
-#define I2S_CONTROL_CODECRST_Pos    17
-#define I2S_CONTROL_CODECRST_Msk    (1UL<<I2S_CONTROL_CODECRST_Pos)
-
-#define I2S_STATUS_TXIRQ_Pos        0
-#define I2S_STATUS_TXIRQ_Msk        (1UL<<I2S_STATUS_TXIRQ_Pos)
-
-#define I2S_STATUS_RXIRQ_Pos        1
-#define I2S_STATUS_RXIRQ_Msk        (1UL<<I2S_STATUS_RXIRQ_Pos)
-
-#define I2S_STATUS_TXEmpty_Pos      2
-#define I2S_STATUS_TXEmpty_Msk      (1UL<<I2S_STATUS_TXEmpty_Pos)
-
-#define I2S_STATUS_TXFull_Pos       3
-#define I2S_STATUS_TXFull_Msk       (1UL<<I2S_STATUS_TXFull_Pos)
-
-#define I2S_STATUS_RXEmpty_Pos      4
-#define I2S_STATUS_RXEmpty_Msk      (1UL<<I2S_STATUS_RXEmpty_Pos)
-
-#define I2S_STATUS_RXFull_Pos       5
-#define I2S_STATUS_RXFull_Msk       (1UL<<I2S_STATUS_RXFull_Pos)
-
-#define I2S_ERROR_TXERR_Pos         0
-#define I2S_ERROR_TXERR_Msk         (1UL<<I2S_ERROR_TXERR_Pos)
-
-#define I2S_ERROR_RXERR_Pos         1
-#define I2S_ERROR_RXERR_Msk         (1UL<<I2S_ERROR_RXERR_Pos)
-
-/******************************************************************************/
-/*                       SMSC9220 Register Definitions                        */
-/******************************************************************************/
-
-typedef struct                   // SMSC LAN9220
-{
-__I   uint32_t  RX_DATA_PORT;          //   Receive FIFO Ports (offset 0x0)
-      uint32_t  RESERVED1[0x7];
-__O   uint32_t  TX_DATA_PORT;          //   Transmit FIFO Ports (offset 0x20)
-      uint32_t  RESERVED2[0x7];
-
-__I   uint32_t  RX_STAT_PORT;          //   Receive FIFO status port (offset 0x40)
-__I   uint32_t  RX_STAT_PEEK;          //   Receive FIFO status peek (offset 0x44)
-__I   uint32_t  TX_STAT_PORT;          //   Transmit FIFO status port (offset 0x48)
-__I   uint32_t  TX_STAT_PEEK;          //   Transmit FIFO status peek (offset 0x4C)
-
-__I   uint32_t  ID_REV;                //   Chip ID and Revision (offset 0x50)
-__IO  uint32_t  IRQ_CFG;               //   Main Interrupt Configuration (offset 0x54)
-__IO  uint32_t  INT_STS;               //   Interrupt Status (offset 0x58)
-__IO  uint32_t  INT_EN;                //   Interrupt Enable Register (offset 0x5C)
-      uint32_t  RESERVED3;             //   Reserved for future use (offset 0x60)
-__I   uint32_t  BYTE_TEST;             //   Read-only byte order testing register 87654321h (offset 0x64)
-__IO  uint32_t  FIFO_INT;              //   FIFO Level Interrupts (offset 0x68)
-__IO  uint32_t  RX_CFG;                //   Receive Configuration (offset 0x6C)
-__IO  uint32_t  TX_CFG;                //   Transmit Configuration (offset 0x70)
-__IO  uint32_t  HW_CFG;                //   Hardware Configuration (offset 0x74)
-__IO  uint32_t  RX_DP_CTL;             //   RX Datapath Control (offset 0x78)
-__I   uint32_t  RX_FIFO_INF;           //   Receive FIFO Information (offset 0x7C)
-__I   uint32_t  TX_FIFO_INF;           //   Transmit FIFO Information (offset 0x80)
-__IO  uint32_t  PMT_CTRL;              //   Power Management Control (offset 0x84)
-__IO  uint32_t  GPIO_CFG;              //   General Purpose IO Configuration (offset 0x88)
-__IO  uint32_t  GPT_CFG;               //   General Purpose Timer Configuration (offset 0x8C)
-__I   uint32_t  GPT_CNT;               //   General Purpose Timer Count (offset 0x90)
-      uint32_t  RESERVED4;             //   Reserved for future use (offset 0x94)
-__IO  uint32_t  ENDIAN;                //   WORD SWAP Register (offset 0x98)
-__I   uint32_t  FREE_RUN;              //   Free Run Counter (offset 0x9C)
-__I   uint32_t  RX_DROP;               //   RX Dropped Frames Counter (offset 0xA0)
-__IO  uint32_t  MAC_CSR_CMD;           //   MAC CSR Synchronizer Command (offset 0xA4)
-__IO  uint32_t  MAC_CSR_DATA;          //   MAC CSR Synchronizer Data (offset 0xA8)
-__IO  uint32_t  AFC_CFG;               //   Automatic Flow Control Configuration (offset 0xAC)
-__IO  uint32_t  E2P_CMD;               //   EEPROM Command (offset 0xB0)
-__IO  uint32_t  E2P_DATA;              //   EEPROM Data (offset 0xB4)
-
-} SMSC9220_TypeDef;
-
-// SMSC9220 MAC Registers       Indices
-#define SMSC9220_MAC_CR         0x1
-#define SMSC9220_MAC_ADDRH      0x2
-#define SMSC9220_MAC_ADDRL      0x3
-#define SMSC9220_MAC_HASHH      0x4
-#define SMSC9220_MAC_HASHL      0x5
-#define SMSC9220_MAC_MII_ACC    0x6
-#define SMSC9220_MAC_MII_DATA   0x7
-#define SMSC9220_MAC_FLOW       0x8
-#define SMSC9220_MAC_VLAN1      0x9
-#define SMSC9220_MAC_VLAN2      0xA
-#define SMSC9220_MAC_WUFF       0xB
-#define SMSC9220_MAC_WUCSR      0xC
-
-// SMSC9220 PHY Registers       Indices
-#define SMSC9220_PHY_BCONTROL   0x0
-#define SMSC9220_PHY_BSTATUS    0x1
-#define SMSC9220_PHY_ID1        0x2
-#define SMSC9220_PHY_ID2        0x3
-#define SMSC9220_PHY_ANEG_ADV   0x4
-#define SMSC9220_PHY_ANEG_LPA   0x5
-#define SMSC9220_PHY_ANEG_EXP   0x6
-#define SMSC9220_PHY_MCONTROL   0x17
-#define SMSC9220_PHY_MSTATUS    0x18
-#define SMSC9220_PHY_CSINDICATE 0x27
-#define SMSC9220_PHY_INTSRC     0x29
-#define SMSC9220_PHY_INTMASK    0x30
-#define SMSC9220_PHY_CS         0x31
-
-/******************************************************************************/
-/*                         Peripheral memory map                              */
-/******************************************************************************/
-
-#define MPS2_SSP0_BASE          (0x40020000ul)       /* User SSP Base Address   */
-#define MPS2_SSP1_BASE          (0x40021000ul)       /* CLCD SSP Base Address   */
-#define MPS2_TSC_I2C_BASE       (0x40022000ul)       /* Touch Screen I2C Base Address */
-#define MPS2_AAIC_I2C_BASE      (0x40023000ul)       /* Audio Interface I2C Base Address */
-#define MPS2_AAIC_I2S_BASE      (0x40024000ul)       /* Audio Interface I2S Base Address */
-#define MPS2_SSP2_BASE          (0x40025000ul)       /* adc SSP Base Address   */
-#define MPS2_SSP3_BASE          (0x40026000ul)       /* shield 0 SSP Base Address   */
-#define MPS2_SSP4_BASE          (0x40027000ul)       /* shield 1 SSP Base Address   */
-#define MPS2_FPGAIO_BASE        (0x40028000ul)       /* FPGAIO Base Address */
-#define MPS2_SHIELD0_I2C_BASE   (0x40029000ul)       /* Audio Interface I2C Base Address */
-#define MPS2_SHIELD1_I2C_BASE   (0x4002A000ul)       /* Audio Interface I2C Base Address */
-#define MPS2_SCC_BASE           (0x4002F000ul)       /* SCC Base Address    */
-
-#ifdef CORTEX_M7
-#define SMSC9220_BASE           (0xA0000000ul)       /* Ethernet SMSC9220 Base Address   */
-#else
-#define SMSC9220_BASE           (0x40200000ul)       /* Ethernet SMSC9220 Base Address   */
-#endif
-
-#define MPS2_VGA_BUFFER         (0x41100000ul)       /* VGA Buffer Base Address */
-#define MPS2_VGA_TEXT_BUFFER    (0x41000000ul)       /* VGA Text Buffer Address */
-
-/******************************************************************************/
-/*                         Peripheral declaration                             */
-/******************************************************************************/
-
-#define SMSC9220                ((SMSC9220_TypeDef      *) SMSC9220_BASE )
-#define MPS2_TS_I2C             ((MPS2_I2C_TypeDef      *) MPS2_TSC_I2C_BASE )
-#define MPS2_AAIC_I2C           ((MPS2_I2C_TypeDef      *) MPS2_AAIC_I2C_BASE )
-#define MPS2_SHIELD0_I2C        ((MPS2_I2C_TypeDef      *) MPS2_SHIELD0_I2C_BASE )
-#define MPS2_SHIELD1_I2C        ((MPS2_I2C_TypeDef      *) MPS2_SHIELD1_I2C_BASE )
-#define MPS2_AAIC_I2S           ((MPS2_I2S_TypeDef      *) MPS2_AAIC_I2S_BASE )
-#define MPS2_FPGAIO             ((MPS2_FPGAIO_TypeDef   *) MPS2_FPGAIO_BASE )
-#define MPS2_SCC                ((MPS2_SCC_TypeDef      *) MPS2_SCC_BASE )
-#define MPS2_SSP0               ((MPS2_SSP_TypeDef      *) MPS2_SSP0_BASE )
-#define MPS2_SSP1               ((MPS2_SSP_TypeDef      *) MPS2_SSP1_BASE )
-#define MPS2_SSP2               ((MPS2_SSP_TypeDef      *) MPS2_SSP2_BASE )	
-#define MPS2_SSP3               ((MPS2_SSP_TypeDef      *) MPS2_SSP3_BASE )	
-#define MPS2_SSP4               ((MPS2_SSP_TypeDef      *) MPS2_SSP4_BASE )	
-
-//******************************************************************************/
-/*                     General MACRO Definitions                              */
-/******************************************************************************/
-
-//#define DEBUG
-//#ifdef DEBUG
-//    #define debug(...)      printf(__VA_ARGS__)
-//#else
-//    #define debug(...)
-//#endif  // ifdef DEBUG
-
-// Bit control macros
-//#define HW_REG(base,offset) *((volatile unsigned int *)((base) + (offset)))
-
-#define CREATE_MASK(msb, lsb)               (((1U << ((msb) - (lsb) + 1)) - 1) << (lsb))
-#define MASK_BITS(arg, msb, lsb)            ((arg) & CREATE_MASK(msb, lsb))
-#define EXTRACT_BITS(arg, msb, lsb)         (MASK_BITS(arg, msb, lsb) >> (lsb))
-#define INSERT_BITS(arg, msb, lsb, value) \
-    ((arg) = ((arg) & ~CREATE_MASK(msb, lsb)) | (((value) << (lsb)) & CREATE_MASK(msb, lsb)))
-
-#define MASK_FIELD(arg, field)              MASK_BITS(arg, field##_MSB, field##_LSB)
-#define EXTRACT_FIELD(arg, field)           EXTRACT_BITS(arg, field##_MSB, field##_LSB)
-#define INSERT_FIELD(arg, field, value)     INSERT_BITS(arg, field##_MSB, field##_LSB, value)
-
-#define SET_BIT(arg, bit)                   ((arg) |= (1 << (bit)))
-#define CLEAR_BIT(arg, bit)                 ((arg) &= ~(1 << (bit)))
-#define TEST_BIT(arg, bit)                  ((arg) & (1 << (bit)))
-
-#ifndef NoOfElements
-#define NoOfElements(array) (sizeof(array) / sizeof(array[0]))
-#endif
-
-#endif /* __SMM_MPS2_H */
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_BEID/TOOLCHAIN_ARM_STD/MPS2.sct	Wed Mar 02 10:15:13 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-; *************************************************************
-; *** Scatter-Loading Description File                      ***
-; *************************************************************
-
- LR_IROM1 0x00000000 0x00400000  {    ; load region size_region
-   ER_IROM1 +0  {  ; load address = execution address
-    *.o (RESET, +FIRST)
-    *(InRoot$$Sections)
-    .ANY (+RO)
-   }
-   RW_IRAM1 +0  {  ; RW data
-    .ANY (+RW +ZI)
-   }
- }
-
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_BEID/TOOLCHAIN_ARM_STD/startup_MPS2.s	Wed Mar 02 10:15:13 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,291 +0,0 @@
-;/**************************************************************************//**
-; * @file     startup_CMSDK_CM3.s
-; * @brief    CMSIS Core Device Startup File for
-; *           CMSDK_CM3 Device
-; * @version  V3.02
-; * @date     15. November 2013
-; *
-; * @note
-; * Copyright (C) 2014 ARM Limited. All rights reserved.
-; *
-; ******************************************************************************/
-;/* Copyright (c) 2011 - 2013 ARM LIMITED
-;
-;   All rights reserved.
-;   Redistribution and use in source and binary forms, with or without
-;   modification, are permitted provided that the following conditions are met:
-;   - Redistributions of source code must retain the above copyright
-;     notice, this list of conditions and the following disclaimer.
-;   - 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.
-;   - Neither the name of ARM nor the names of its contributors may be used
-;     to endorse or promote products derived from this software without
-;     specific prior written permission.
-; *
-;   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-;   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-;   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-;   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS 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.
-;   ---------------------------------------------------------------------------*/
-;/*
-;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
-;*/
-
-
-; <h> Stack Configuration
-;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
-; </h>
-
-Stack_Size      EQU     0x00004000
-
-                AREA    STACK, NOINIT, READWRITE, ALIGN=3
-Stack_Mem       SPACE   Stack_Size
-__initial_sp
-
-
-; <h> Heap Configuration
-;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
-; </h>
-
-Heap_Size       EQU     0x00001000
-
-                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
-__heap_base
-Heap_Mem        SPACE   Heap_Size
-__heap_limit
-
-
-                PRESERVE8
-                THUMB
-
-
-; Vector Table Mapped to Address 0 at Reset
-
-                AREA    RESET, DATA, READONLY
-                EXPORT  __Vectors
-                EXPORT  __Vectors_End
-                EXPORT  __Vectors_Size
-
-__Vectors       DCD     __initial_sp              ; Top of Stack
-                DCD     Reset_Handler             ; Reset Handler
-                DCD     NMI_Handler               ; NMI Handler
-                DCD     HardFault_Handler         ; Hard Fault Handler
-                DCD     MemManage_Handler         ; MPU Fault Handler
-                DCD     BusFault_Handler          ; Bus Fault Handler
-                DCD     UsageFault_Handler        ; Usage Fault Handler
-                DCD     0                         ; Reserved
-                DCD     0                         ; Reserved
-                DCD     0                         ; Reserved
-                DCD     0                         ; Reserved
-                DCD     SVC_Handler               ; SVCall Handler
-                DCD     DebugMon_Handler          ; Debug Monitor Handler
-                DCD     0                         ; Reserved
-                DCD     PendSV_Handler            ; PendSV Handler
-                DCD     SysTick_Handler           ; SysTick Handler
-
-                ; External Interrupts
-                DCD     UARTRX0_Handler           ; UART 0 RX Handler
-                DCD     UARTTX0_Handler           ; UART 0 TX Handler
-                DCD     UARTRX1_Handler           ; UART 1 RX Handler
-                DCD     UARTTX1_Handler           ; UART 1 TX Handler
-                DCD     UARTRX2_Handler           ; UART 2 RX Handler
-                DCD     UARTTX2_Handler           ; UART 2 TX Handler
-                DCD     PORT0_COMB_Handler        ; GPIO Port 0 Combined Handler
-                DCD     PORT1_COMB_Handler        ; GPIO Port 1 Combined Handler
-                DCD     TIMER0_Handler            ; TIMER 0 handler
-                DCD     TIMER1_Handler            ; TIMER 1 handler
-                DCD     DUALTIMER_HANDLER         ; Dual timer handler
-                DCD     SPI_Handler               ; SPI exceptions Handler
-                DCD     UARTOVF_Handler           ; UART 0,1,2 Overflow Handler
-                DCD     ETHERNET_Handler          ; Ethernet Overflow Handler
-                DCD     I2S_Handler               ; I2S Handler
-                DCD     TSC_Handler               ; Touch Screen handler
-                DCD     PORT0_0_Handler           ; GPIO Port 0 pin 0 Handler
-                DCD     PORT0_1_Handler           ; GPIO Port 0 pin 1 Handler
-                DCD     PORT0_2_Handler           ; GPIO Port 0 pin 2 Handler
-                DCD     PORT0_3_Handler           ; GPIO Port 0 pin 3 Handler
-                DCD     PORT0_4_Handler           ; GPIO Port 0 pin 4 Handler
-                DCD     PORT0_5_Handler           ; GPIO Port 0 pin 5 Handler
-                DCD     PORT0_6_Handler           ; GPIO Port 0 pin 6 Handler
-                DCD     PORT0_7_Handler           ; GPIO Port 0 pin 7 Handler
-                DCD     PORT0_8_Handler           ; GPIO Port 0 pin 8 Handler
-                DCD     PORT0_9_Handler           ; GPIO Port 0 pin 9 Handler
-                DCD     PORT0_10_Handler          ; GPIO Port 0 pin 10 Handler
-                DCD     PORT0_11_Handler          ; GPIO Port 0 pin 11 Handler
-                DCD     PORT0_12_Handler          ; GPIO Port 0 pin 12 Handler
-                DCD     PORT0_13_Handler          ; GPIO Port 0 pin 13 Handler
-                DCD     PORT0_14_Handler          ; GPIO Port 0 pin 14 Handler
-                DCD     PORT0_15_Handler          ; GPIO Port 0 pin 15 Handler
-__Vectors_End
-
-__Vectors_Size  EQU     __Vectors_End - __Vectors
-
-                AREA    |.text|, CODE, READONLY
-
-
-; Reset Handler
-
-Reset_Handler   PROC
-                EXPORT  Reset_Handler             [WEAK]
-                IMPORT  SystemInit
-                IMPORT  __main
-                LDR     R0, =SystemInit
-                BLX     R0
-                LDR     R0, =__main
-                BX      R0
-                ENDP
-
-
-; Dummy Exception Handlers (infinite loops which can be modified)
-
-NMI_Handler     PROC
-                EXPORT  NMI_Handler               [WEAK]
-                B       .
-                ENDP
-HardFault_Handler\
-                PROC
-                EXPORT  HardFault_Handler         [WEAK]
-                B       .
-                ENDP
-MemManage_Handler\
-                PROC
-                EXPORT  MemManage_Handler         [WEAK]
-                B       .
-                ENDP
-BusFault_Handler\
-                PROC
-                EXPORT  BusFault_Handler          [WEAK]
-                B       .
-                ENDP
-UsageFault_Handler\
-                PROC
-                EXPORT  UsageFault_Handler        [WEAK]
-                B       .
-                ENDP
-SVC_Handler     PROC
-                EXPORT  SVC_Handler               [WEAK]
-                B       .
-                ENDP
-DebugMon_Handler\
-                PROC
-                EXPORT  DebugMon_Handler          [WEAK]
-                B       .
-                ENDP
-PendSV_Handler  PROC
-                EXPORT  PendSV_Handler            [WEAK]
-                B       .
-                ENDP
-SysTick_Handler PROC
-                EXPORT  SysTick_Handler           [WEAK]
-                B       .
-                ENDP
-
-Default_Handler PROC
-                EXPORT UARTRX0_Handler            [WEAK]
-                EXPORT UARTTX0_Handler            [WEAK]
-                EXPORT UARTRX1_Handler            [WEAK]
-                EXPORT UARTTX1_Handler            [WEAK]
-                EXPORT UARTRX2_Handler            [WEAK]
-                EXPORT UARTTX2_Handler            [WEAK]
-                EXPORT PORT0_COMB_Handler         [WEAK]
-                EXPORT PORT1_COMB_Handler         [WEAK]
-                EXPORT TIMER0_Handler             [WEAK]
-                EXPORT TIMER1_Handler             [WEAK]
-                EXPORT DUALTIMER_HANDLER          [WEAK]
-                EXPORT SPI_Handler                [WEAK]
-                EXPORT UARTOVF_Handler            [WEAK]
-                EXPORT ETHERNET_Handler           [WEAK]
-                EXPORT I2S_Handler                [WEAK]
-                EXPORT TSC_Handler                [WEAK]
-                EXPORT PORT0_0_Handler            [WEAK]
-                EXPORT PORT0_1_Handler            [WEAK]
-                EXPORT PORT0_2_Handler            [WEAK]
-                EXPORT PORT0_3_Handler            [WEAK]
-                EXPORT PORT0_4_Handler            [WEAK]
-                EXPORT PORT0_5_Handler            [WEAK]
-                EXPORT PORT0_6_Handler            [WEAK]
-                EXPORT PORT0_7_Handler            [WEAK]
-                EXPORT PORT0_8_Handler            [WEAK]
-                EXPORT PORT0_9_Handler            [WEAK]
-                EXPORT PORT0_10_Handler           [WEAK]
-                EXPORT PORT0_11_Handler           [WEAK]
-                EXPORT PORT0_12_Handler           [WEAK]
-                EXPORT PORT0_13_Handler           [WEAK]
-                EXPORT PORT0_14_Handler           [WEAK]
-                EXPORT PORT0_15_Handler           [WEAK]
-
-UARTRX0_Handler
-UARTTX0_Handler
-UARTRX1_Handler
-UARTTX1_Handler
-UARTRX2_Handler
-UARTTX2_Handler
-PORT0_COMB_Handler
-PORT1_COMB_Handler
-TIMER0_Handler
-TIMER1_Handler
-DUALTIMER_HANDLER
-SPI_Handler
-UARTOVF_Handler
-ETHERNET_Handler
-I2S_Handler
-TSC_Handler
-PORT0_0_Handler
-PORT0_1_Handler
-PORT0_2_Handler
-PORT0_3_Handler
-PORT0_4_Handler
-PORT0_5_Handler
-PORT0_6_Handler
-PORT0_7_Handler
-PORT0_8_Handler
-PORT0_9_Handler
-PORT0_10_Handler
-PORT0_11_Handler
-PORT0_12_Handler
-PORT0_13_Handler
-PORT0_14_Handler
-PORT0_15_Handler
-                B       .
-
-                ENDP
-
-
-                ALIGN
-
-
-; User Initial Stack & Heap
-
-                IF      :DEF:__MICROLIB
-
-                EXPORT  __initial_sp
-                EXPORT  __heap_base
-                EXPORT  __heap_limit
-
-                ELSE
-
-                IMPORT  __use_two_region_memory
-                EXPORT  __user_initial_stackheap
-
-__user_initial_stackheap PROC
-                LDR     R0, =  Heap_Mem
-                LDR     R1, =(Stack_Mem + Stack_Size)
-                LDR     R2, = (Heap_Mem +  Heap_Size)
-                LDR     R3, = Stack_Mem
-                BX      LR
-                ENDP
-
-                ALIGN
-
-                ENDIF
-
-
-                END
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_BEID/cmsis.h	Wed Mar 02 10:15:13 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-/* mbed Microcontroller Library - CMSIS
- * Copyright (C) 2009-2011 ARM Limited. All rights reserved.
- * 
- * A generic CMSIS include header, pulling in LPC1768 specifics
- */
-
-#ifndef MBED_CMSIS_H
-#define MBED_CMSIS_H
-
-#include "CMSDK_BEID.h"
-#include "SMM_MPS2.h"
-#include "cmsis_nvic.h"
-
-#endif
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_BEID/cmsis_nvic.c	Wed Mar 02 10:15:13 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/* mbed Microcontroller Library - cmsis_nvic for LCP1768
- * Copyright (c) 2009-2011 ARM Limited. All rights reserved.
- *
- * CMSIS-style functionality to support dynamic vectors
- */ 
-#include "cmsis_nvic.h"
-
-#define NVIC_RAM_VECTOR_ADDRESS   (0x20000000)  // Location of vectors in RAM
-#define NVIC_FLASH_VECTOR_ADDRESS (0x00000000)  // Initial vector position in flash
-
-void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) {
-    uint32_t *vectors = (uint32_t*)SCB->VTOR;
-    uint32_t i;
-
-    // Copy and switch to dynamic vectors if the first time called
-    if (SCB->VTOR == NVIC_FLASH_VECTOR_ADDRESS) {
-        uint32_t *old_vectors = vectors;
-        vectors = (uint32_t*)NVIC_RAM_VECTOR_ADDRESS;
-        for (i=0; i<NVIC_NUM_VECTORS; i++) {
-            vectors[i] = old_vectors[i];
-        }
-        SCB->VTOR = (uint32_t)NVIC_RAM_VECTOR_ADDRESS;
-    }
-    vectors[IRQn + NVIC_USER_IRQ_OFFSET] = vector;
-}
-
-uint32_t NVIC_GetVector(IRQn_Type IRQn) {
-    uint32_t *vectors = (uint32_t*)SCB->VTOR;
-    return vectors[IRQn + NVIC_USER_IRQ_OFFSET];
-}
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_BEID/cmsis_nvic.h	Wed Mar 02 10:15:13 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-/* mbed Microcontroller Library - cmsis_nvic
- * Copyright (c) 2009-2011 ARM Limited. All rights reserved.
- *
- * CMSIS-style functionality to support dynamic vectors
- */ 
-
-#ifndef MBED_CMSIS_NVIC_H
-#define MBED_CMSIS_NVIC_H
-
-#include "cmsis.h"
-
-#define NVIC_NUM_VECTORS      (16 + 32)
-#define NVIC_USER_IRQ_OFFSET  16
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector);
-uint32_t NVIC_GetVector(IRQn_Type IRQn);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_BEID/peripherallink.h	Wed Mar 02 10:15:13 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*-----------------------------------------------------------------------------
- * Name:    Device.h
- * Purpose: Include the correct device header file
- *-----------------------------------------------------------------------------
- * This file is part of the uVision/ARM development tools.
- * This software may only be used under the terms of a valid, current,
- * end user licence from KEIL for a compatible version of KEIL software
- * development tools. Nothing else gives you the right to use this software.
- *
- * This software is supplied "AS IS" without warranties of any kind.
- *
- * Copyright (c) 2013 KEIL - An ARM Company. All rights reserved.
- *----------------------------------------------------------------------------*/
-
-#ifndef __DEVICE_H
-#define __DEVICE_H
-
-#if   defined CMSDK_CM0
-  #include "CMSDK_CM0.h"                         /* device specific header file */
-#elif defined CMSDK_CM0plus
-  #include "CMSDK_CM0plus.h"                     /* device specific header file */
-#elif defined CMSDK_CM3
-  #include "CMSDK_CM3.h"                         /* device specific header file */
-#elif defined CMSDK_CM4
-  #include "CMSDK_CM4.h"                         /* device specific header file */
-#elif defined CMSDK_CM7
-  #include "CMSDK_CM7.h"                         /* device specific header file */
-#elif defined CMSDK_BEID
-  #include "CMSDK_BEID.h"                         /* device specific header file */
-#else
-  #warning "no appropriate header file found!"
-#endif
-
-#endif /* __DEVICE_H */
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_BEID/system_CMSDK_BEID.c	Wed Mar 02 10:15:13 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +0,0 @@
-/**************************************************************************//**
- * @file     system_CMSDK_BEID.c
- * @brief    CMSIS Device System Source File for
- *           CMSDK_M3 Device
- * @version  V3.02
- * @date     15. November 2013
- *
- * @note
- *
- ******************************************************************************/
-/* Copyright (c) 2011 - 2013 ARM LIMITED
-
-   All rights reserved.
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions are met:
-   - Redistributions of source code must retain the above copyright
-     notice, this list of conditions and the following disclaimer.
-   - 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.
-   - Neither the name of ARM nor the names of its contributors may be used
-     to endorse or promote products derived from this software without
-     specific prior written permission.
-   *
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS 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.
-   ---------------------------------------------------------------------------*/
-
-
-#include "CMSDK_BEID.h"
-
-/*----------------------------------------------------------------------------
-  Define clocks
- *----------------------------------------------------------------------------*/
-#define __XTAL            (50000000UL)    /* Oscillator frequency             */
-
-#define __SYSTEM_CLOCK    (__XTAL / 2)
-
-
-/*----------------------------------------------------------------------------
-  Clock Variable definitions
- *----------------------------------------------------------------------------*/
-uint32_t SystemCoreClock = __SYSTEM_CLOCK;/*!< System Clock Frequency (Core Clock)*/
-
-
-/*----------------------------------------------------------------------------
-  Clock functions
- *----------------------------------------------------------------------------*/
-/**
- * Update SystemCoreClock variable
- *
- * @param  none
- * @return none
- *
- * @brief  Updates the SystemCoreClock with current core Clock
- *         retrieved from cpu registers.
- */
-void SystemCoreClockUpdate (void)
-{
-
-  SystemCoreClock = __SYSTEM_CLOCK;
-
-}
-
-/**
- * Initialize the system
- *
- * @param  none
- * @return none
- *
- * @brief  Setup the microcontroller system.
- *         Initialize the System.
- */
-void SystemInit (void)
-{
-
-#ifdef UNALIGNED_SUPPORT_DISABLE
-  SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk;
-#endif
-
-  SystemCoreClock = __SYSTEM_CLOCK;
-
-    // Enable AHB and APB clock
-    CMSDK_SYSCON->AHBCLKCFG0SET = 0xF;  // GPIO
-    CMSDK_SYSCON->APBCLKCFG0SET = 0x37;	// UART0, UART1, TIMER0, TIMER1, DUAL TIMER
-}
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_BEID/system_CMSDK_BEID.h	Wed Mar 02 10:15:13 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-/**************************************************************************//**
- * @file     system_CMSDK_BEID.h
- * @brief    CMSIS Device Peripheral Access Layer Header File for
- *           CMSDK_BEID Device
- * @version  V3.02
- * @date     15. March 2013
- *
- * @note
- *
- ******************************************************************************/
-/* Copyright (c) 2011 - 2013 ARM LIMITED
-
-   All rights reserved.
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions are met:
-   - Redistributions of source code must retain the above copyright
-     notice, this list of conditions and the following disclaimer.
-   - 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.
-   - Neither the name of ARM nor the names of its contributors may be used
-     to endorse or promote products derived from this software without
-     specific prior written permission.
-   *
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS 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.
-   ---------------------------------------------------------------------------*/
-
-
-#ifndef SYSTEM_CMSDK_BEID_H
-#define SYSTEM_CMSDK_BEID_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern uint32_t SystemCoreClock;     /*!< System Clock Frequency (Core Clock)  */
-
-
-/**
- * Initialize the system
- *
- * @param  none
- * @return none
- *
- * @brief  Setup the microcontroller system.
- *         Initialize the System and update the SystemCoreClock variable.
- */
-extern void SystemInit (void);
-
-/**
- * Update SystemCoreClock variable
- *
- * @param  none
- * @return none
- *
- * @brief  Updates the SystemCoreClock with current core Clock
- *         retrieved from cpu registers.
- */
-extern void SystemCoreClockUpdate (void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* SYSTEM_CMSDK_BEID_H */
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/CMSDK_CM0.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/CMSDK_CM0.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,41 +1,37 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * @file     CMSDK_CM0.h
 * @brief    CMSIS Core Peripheral Access Layer Header File for
 *           CMSDK_CM0 Device
-* @version  V3.02
-* @date     15. November 2013
-*
-* @note     configured for CM7 without FPU
 *
 *******************************************************************************/
 
@@ -52,51 +48,48 @@
 
 typedef enum IRQn
 {
-/* -------------------  Cortex-M0 Processor Exceptions Numbers  ------------------- */
-  NonMaskableInt_IRQn           = -14,      /*  2 Non Maskable Interrupt            */
-  HardFault_IRQn                = -13,      /*  3 HardFault Interrupt               */
-
+/******  Cortex-M0 Processor Exceptions Numbers ***************************************************/
 
-
-  SVCall_IRQn                   =  -5,      /* 11 SV Call Interrupt                 */
-
-  PendSV_IRQn                   =  -2,      /* 14 Pend SV Interrupt                 */
-  SysTick_IRQn                  =  -1,      /* 15 System Tick Interrupt             */
+/* ToDo: use this Cortex interrupt numbers if your device is a CORTEX-M0 device                   */
+  NonMaskableInt_IRQn           = -14,      /*!<  2 Cortex-M0 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               */
 
 /* ----------------------  CMSDK_CM0 Specific Interrupt Numbers  ------------------ */
-  UARTRX0_IRQn                  = 0,       /* UART 0 RX Interrupt                   */
-  UARTTX0_IRQn                  = 1,       /* UART 0 TX Interrupt                   */
-  UARTRX1_IRQn                  = 2,       /* UART 1 RX Interrupt                   */
-  UARTTX1_IRQn                  = 3,       /* UART 1 TX Interrupt                   */
-  UARTRX2_IRQn                  = 4,       /* UART 2 RX Interrupt                   */
-  UARTTX2_IRQn                  = 5,       /* UART 2 TX Interrupt                   */
-  PORT0_ALL_IRQn                = 6,       /* Port 1 combined Interrupt             */
-  PORT1_ALL_IRQn                = 7,       /* Port 1 combined Interrupt             */
-  TIMER0_IRQn                   = 8,       /* TIMER 0 Interrupt                     */
-  TIMER1_IRQn                   = 9,       /* TIMER 1 Interrupt                     */
-  DUALTIMER_IRQn                = 10,      /* Dual Timer Interrupt                  */
-  SPI_IRQn                      = 11,      /* SPI Interrupt                         */
-  UARTOVF_IRQn                  = 12,      /* UART 0,1,2 Overflow Interrupt         */
-  ETHERNET_IRQn                 = 13,      /* Ethernet Interrupt                    */
-  I2S_IRQn                      = 14,      /* I2S Interrupt                         */
-  TSC_IRQn                      = 15,      /* Touch Screen Interrupt                */
-//  DMA_IRQn                      = 15,      /* PL230 DMA Done + Error Interrupt      */
-  PORT0_0_IRQn                  = 16,      /* All P0 I/O pins used as irq source    */
-  PORT0_1_IRQn                  = 17,      /* There are 16 pins in total            */
-  PORT0_2_IRQn                  = 18,
-  PORT0_3_IRQn                  = 19,
-  PORT0_4_IRQn                  = 20,
-  PORT0_5_IRQn                  = 21,
-  PORT0_6_IRQn                  = 22,
-  PORT0_7_IRQn                  = 23,
-  PORT0_8_IRQn                  = 24,
-  PORT0_9_IRQn                  = 25,
-  PORT0_10_IRQn                 = 26,
-  PORT0_11_IRQn                 = 27,
-  PORT0_12_IRQn                 = 28,
-  PORT0_13_IRQn                 = 29,
-  PORT0_14_IRQn                 = 30,
-  PORT0_15_IRQn                 = 31,
+  UARTRX0_IRQn                  = 0,       /*!< UART 0 RX Interrupt                               */
+  UARTTX0_IRQn                  = 1,       /*!< UART 0 TX Interrupt                               */
+  UARTRX1_IRQn                  = 2,       /*!< UART 1 RX Interrupt                               */
+  UARTTX1_IRQn                  = 3,       /*!< UART 1 TX Interrupt                               */
+  UARTRX2_IRQn                  = 4,       /*!< UART 2 RX Interrupt                               */
+  UARTTX2_IRQn                  = 5,       /*!< UART 2 TX Interrupt                               */
+  PORT0_ALL_IRQn                = 6,       /*!< Port 0 combined Interrupt                         */
+  PORT1_ALL_IRQn                = 7,       /*!< Port 1 combined Interrupt                         */
+  TIMER0_IRQn                   = 8,       /*!< TIMER 0 Interrupt                                 */
+  TIMER1_IRQn                   = 9,       /*!< TIMER 1 Interrupt                                 */
+  DUALTIMER_IRQn                = 10,      /*!< Dual Timer Interrupt                              */
+  SPI_IRQn                      = 11,      /*!< SPI Interrupt                                     */
+  UARTOVF_IRQn                  = 12,      /*!< UART 0,1,2 Overflow Interrupt                     */
+  ETHERNET_IRQn                 = 13,      /*!< Ethernet Interrupt                                */
+  I2S_IRQn                      = 14,      /*!< I2S Interrupt                                     */
+  TSC_IRQn                      = 15,      /*!< Touch Screen Interrupt                            */
+  PORT2_ALL_IRQn                = 16,      /*!< Port 2 combined Interrupt                         */
+  PORT3_ALL_IRQn                = 17,      /*!< Port 3 combined Interrupt                         */
+  UARTRX3_IRQn                  = 18,      /*!< UART 3 RX Interrupt                               */
+  UARTTX3_IRQn                  = 19,      /*!< UART 3 TX Interrupt                               */
+  UARTRX4_IRQn                  = 20,      /*!< UART 4 RX Interrupt                               */
+  UARTTX4_IRQn                  = 21,      /*!< UART 4 TX Interrupt                               */
+  ADCSPI_IRQn                   = 22,      /*!< SHIELD ADC SPI Interrupt                          */
+  SHIELDSPI_IRQn                = 23,      /*!< SHIELD SPI Combined Interrupt                     */
+  PORT0_0_IRQn                  = 24,      /*!<  GPIO Port 0 pin 0 Interrupt                      */
+  PORT0_1_IRQn                  = 25,      /*!<  GPIO Port 0 pin 1 Interrupt                      */
+  PORT0_2_IRQn                  = 26,      /*!<  GPIO Port 0 pin 2 Interrupt                      */
+  PORT0_3_IRQn                  = 27,      /*!<  GPIO Port 0 pin 3 Interrupt                      */
+  PORT0_4_IRQn                  = 28,      /*!<  GPIO Port 0 pin 4 Interrupt                      */
+  PORT0_5_IRQn                  = 29,      /*!<  GPIO Port 0 pin 5 Interrupt                      */
+  PORT0_6_IRQn                  = 30,      /*!<  GPIO Port 0 pin 6 Interrupt                      */
+  PORT0_7_IRQn                  = 31,      /*!<  GPIO Port 0 pin 7 Interrupt                      */
 } IRQn_Type;
 
 
@@ -686,7 +679,9 @@
 #define CMSDK_UART0_BASE        (CMSDK_APB_BASE + 0x4000UL)
 #define CMSDK_UART1_BASE        (CMSDK_APB_BASE + 0x5000UL)
 #define CMSDK_UART2_BASE        (CMSDK_APB_BASE + 0x6000UL)
+#define CMSDK_UART3_BASE        (CMSDK_APB_BASE + 0x7000UL)
 #define CMSDK_WATCHDOG_BASE     (CMSDK_APB_BASE + 0x8000UL)
+#define CMSDK_UART4_BASE        (CMSDK_APB_BASE + 0x9000UL)
 #define CMSDK_PL230_BASE        (CMSDK_APB_BASE + 0xF000UL)
 
 /* AHB peripherals                                                                  */
@@ -704,6 +699,8 @@
 #define CMSDK_UART0             ((CMSDK_UART_TypeDef   *) CMSDK_UART0_BASE   )
 #define CMSDK_UART1             ((CMSDK_UART_TypeDef   *) CMSDK_UART1_BASE   )
 #define CMSDK_UART2             ((CMSDK_UART_TypeDef   *) CMSDK_UART2_BASE   )
+#define CMSDK_UART3             ((CMSDK_UART_TypeDef   *) CMSDK_UART3_BASE   )
+#define CMSDK_UART4             ((CMSDK_UART_TypeDef   *) CMSDK_UART4_BASE   )
 #define CMSDK_TIMER0            ((CMSDK_TIMER_TypeDef  *) CMSDK_TIMER0_BASE  )
 #define CMSDK_TIMER1            ((CMSDK_TIMER_TypeDef  *) CMSDK_TIMER1_BASE  )
 #define CMSDK_DUALTIMER         ((CMSDK_DUALTIMER_BOTH_TypeDef  *) CMSDK_DUALTIMER_BASE )
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/SMM_MPS2.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/SMM_MPS2.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,36 +1,36 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * File:     smm_mps2.h
-* Release:  Version 1.0
+* Release:  Version 1.1
 *******************************************************************************/
 
 #ifndef __SMM_MPS2_H
@@ -46,7 +46,7 @@
 /*                          FPGA System Register declaration                  */
 /******************************************************************************/
 
-typedef struct                   
+typedef struct                  
 {
   __IO uint32_t LED;             // Offset: 0x000 (R/W)  LED connections
                                  //                         [31:2] : Reserved
@@ -65,11 +65,14 @@
                                  //                         Bit[31:0] : reload value for prescale counter
   __IO uint32_t PSCNTR;          // Offset: 0x024 (R/W)  32-bit Prescale counter
                                  //                         current value of the pre-scaler counter
-								 //                         The Cycle Up Counter increment when the prescale down counter reach 0
-								 //                         The pre-scaler counter is reloaded with PRESCALE after reaching 0.
+                                 //                         The Cycle Up Counter increment when the prescale down counter reach 0
+                                 //                         The pre-scaler counter is reloaded with PRESCALE after reaching 0.
        uint32_t RESERVED4[9];
   __IO uint32_t MISC;            // Offset: 0x04C (R/W)  Misc control */
-                                 //                         [31:7] : Reserved
+                                 //                         [31:10] : Reserved
+                                 //                            [9] : SHIELD_1_SPI_nCS
+                                 //                            [8] : SHIELD_0_SPI_nCS
+                                 //                            [7] : ADC_SPI_nCS
                                  //                            [6] : CLCD_BL_CTRL
                                  //                            [5] : CLCD_RD
                                  //                            [4] : CLCD_RS
@@ -93,12 +96,18 @@
 #define CLCD_RD_Msk        (1UL<<CLCD_RD_Pos)
 #define CLCD_BL_Pos        6
 #define CLCD_BL_Msk        (1UL<<CLCD_BL_Pos)
+#define ADC_nCS_Pos        7
+#define ADC_nCS_Msk        (1UL<<ADC_nCS_Pos)
+#define SHIELD_0_nCS_Pos        8
+#define SHIELD_0_nCS_Msk        (1UL<<SHIELD_0_nCS_Pos)
+#define SHIELD_1_nCS_Pos        9
+#define SHIELD_1_nCS_Msk        (1UL<<SHIELD_1_nCS_Pos)
 
 /******************************************************************************/
 /*                        SCC Register declaration                            */
 /******************************************************************************/
 
-typedef struct                   // 
+typedef struct                   //
 {
   __IO uint32_t CFG_REG0;        // Offset: 0x000 (R/W)  Remaps block RAM to ZBT
                                  //                         [31:1] : Reserved
@@ -308,10 +317,10 @@
 typedef struct
 {
   union {
-  __O   uint32_t  CONTROLS;     // Offset: 0x000 CONTROL Set Register     ( /W) 
-  __I   uint32_t  CONTROL;      // Offset: 0x000 CONTROL Status Register  (R/ ) 
+  __O   uint32_t  CONTROLS;     // Offset: 0x000 CONTROL Set Register     ( /W)
+  __I   uint32_t  CONTROL;      // Offset: 0x000 CONTROL Status Register  (R/ )
   };
-  __O    uint32_t  CONTROLC;     // Offset: 0x004 CONTROL Clear Register    ( /W)  
+  __O    uint32_t  CONTROLC;     // Offset: 0x004 CONTROL Clear Register    ( /W) 
 } MPS2_I2C_TypeDef;
 
 #define SDA                1 << 1
@@ -346,7 +355,7 @@
                               //     <4=> Undefined!
                               //     <5=> Undefined!
                               //     <6=> Undefined!
-                              //     <7=> Undefined!  
+                              //     <7=> Undefined! 
                               //   <o.14..12> RX Buffer Water Level
                               //     <0=> Undefined!
                               //     <1=> / IRQ triggers when less than 1 space available
@@ -355,7 +364,7 @@
                               //     <4=> / IRQ triggers when less than 4 space available
                               //     <5=> Undefined!
                               //     <6=> Undefined!
-                              //     <7=> Undefined!  
+                              //     <7=> Undefined! 
                               //   <o.16> FIFO reset
                               //     <0=> Normal operation
                               //     <1=> FIFO reset
@@ -363,12 +372,12 @@
                               //     <0=> Normal operation
                               //     <1=> Assert audio Codec reset
   /*!< Offset: 0x004 STATUS Register     (R/ ) */
-  __I    uint32_t  STATUS;  // <h> STATUS </h> 
+  __I    uint32_t  STATUS;  // <h> STATUS </h>
                               //   <o.0> TX Buffer alert
                               //     <0=> TX buffer don't need service yet
                               //     <1=> TX buffer need service
                               //   <o.1> RX Buffer alert
-                              //     <0=> RX buffer don't need service yet 
+                              //     <0=> RX buffer don't need service yet
                               //     <1=> RX buffer need service
                               //   <o.2> TX Buffer Empty
                               //     <0=> TX buffer have data
@@ -383,33 +392,33 @@
                               //     <0=> RX buffer not full
                               //     <1=> RX buffer full
   union {
-   /*!< Offset: 0x008 Error Status Register (R/ ) */  
-    __I    uint32_t  ERROR;  // <h> ERROR </h> 
+   /*!< Offset: 0x008 Error Status Register (R/ ) */ 
+    __I    uint32_t  ERROR;  // <h> ERROR </h>
                               //   <o.0> TX error
                               //     <0=> Okay
                               //     <1=> TX overrun/underrun
                               //   <o.1> RX error
-                              //     <0=> Okay 
+                              //     <0=> Okay
                               //     <1=> RX overrun/underrun
-   /*!< Offset: 0x008 Error Clear Register  ( /W) */    
-    __O    uint32_t  ERRORCLR;  // <h> ERRORCLR </h> 
+   /*!< Offset: 0x008 Error Clear Register  ( /W) */   
+    __O    uint32_t  ERRORCLR;  // <h> ERRORCLR </h>
                               //   <o.0> TX error
                               //     <0=> Okay
                               //     <1=> Clear TX error
                               //   <o.1> RX error
-                              //     <0=> Okay 
+                              //     <0=> Okay
                               //     <1=> Clear RX error
     };
-   /*!< Offset: 0x00C Divide ratio Register (R/W) */  
-  __IO   uint32_t  DIVIDE;  // <h> Divide ratio for Left/Right clock </h> 
-                              //   <o.9..0> TX error (default 0x80)			      
+   /*!< Offset: 0x00C Divide ratio Register (R/W) */ 
+  __IO   uint32_t  DIVIDE;  // <h> Divide ratio for Left/Right clock </h>
+                              //   <o.9..0> TX error (default 0x80)                 
    /*!< Offset: 0x010 Transmit Buffer       ( /W) */
-  __O    uint32_t  TXBUF;  // <h> Transmit buffer </h> 
-                              //   <o.15..0> Right channel			      
+  __O    uint32_t  TXBUF;  // <h> Transmit buffer </h>
+                              //   <o.15..0> Right channel                 
                               //   <o.31..16> Left channel
    /*!< Offset: 0x014 Receive Buffer        (R/ ) */
-  __I    uint32_t  RXBUF;  // <h> Receive buffer </h> 
-                              //   <o.15..0> Right channel			      
+  __I    uint32_t  RXBUF;  // <h> Receive buffer </h>
+                              //   <o.15..0> Right channel                 
                               //   <o.31..16> Left channel
          uint32_t  RESERVED1[186];
   __IO uint32_t ITCR;         // <h> Integration Test Control Register </h>
@@ -556,7 +565,12 @@
 #define MPS2_TSC_I2C_BASE       (0x40022000ul)       /* Touch Screen I2C Base Address */
 #define MPS2_AAIC_I2C_BASE      (0x40023000ul)       /* Audio Interface I2C Base Address */
 #define MPS2_AAIC_I2S_BASE      (0x40024000ul)       /* Audio Interface I2S Base Address */
+#define MPS2_SSP2_BASE          (0x40025000ul)       /* adc SSP Base Address   */
+#define MPS2_SSP3_BASE          (0x40026000ul)       /* Shield 0 SSP Base Address   */
+#define MPS2_SSP4_BASE          (0x40027000ul)       /* Shield 1 SSP Base Address   */
 #define MPS2_FPGAIO_BASE        (0x40028000ul)       /* FPGAIO Base Address */
+#define MPS2_SHIELD0_I2C_BASE   (0x40029000ul)       /* Shield 0 I2C Base Address */
+#define MPS2_SHIELD1_I2C_BASE   (0x4002A000ul)       /* Shield 1 I2C Base Address */
 #define MPS2_SCC_BASE           (0x4002F000ul)       /* SCC Base Address    */
 
 #ifdef CORTEX_M7
@@ -565,8 +579,8 @@
 #define SMSC9220_BASE           (0x40200000ul)       /* Ethernet SMSC9220 Base Address   */
 #endif
 
+#define MPS2_VGA_TEXT_BUFFER    (0x41000000ul)       /* VGA Text Buffer Address */
 #define MPS2_VGA_BUFFER         (0x41100000ul)       /* VGA Buffer Base Address */
-#define MPS2_VGA_TEXT_BUFFER    (0x41000000ul)       /* VGA Text Buffer Address */
 
 /******************************************************************************/
 /*                         Peripheral declaration                             */
@@ -575,11 +589,16 @@
 #define SMSC9220                ((SMSC9220_TypeDef      *) SMSC9220_BASE )
 #define MPS2_TS_I2C             ((MPS2_I2C_TypeDef      *) MPS2_TSC_I2C_BASE )
 #define MPS2_AAIC_I2C           ((MPS2_I2C_TypeDef      *) MPS2_AAIC_I2C_BASE )
+#define MPS2_SHIELD0_I2C        ((MPS2_I2C_TypeDef      *) MPS2_SHIELD0_I2C_BASE )
+#define MPS2_SHIELD1_I2C        ((MPS2_I2C_TypeDef      *) MPS2_SHIELD1_I2C_BASE )
 #define MPS2_AAIC_I2S           ((MPS2_I2S_TypeDef      *) MPS2_AAIC_I2S_BASE )
 #define MPS2_FPGAIO             ((MPS2_FPGAIO_TypeDef   *) MPS2_FPGAIO_BASE )
 #define MPS2_SCC                ((MPS2_SCC_TypeDef      *) MPS2_SCC_BASE )
 #define MPS2_SSP0               ((MPS2_SSP_TypeDef      *) MPS2_SSP0_BASE )
 #define MPS2_SSP1               ((MPS2_SSP_TypeDef      *) MPS2_SSP1_BASE )
+#define MPS2_SSP2               ((MPS2_SSP_TypeDef      *) MPS2_SSP2_BASE )    
+#define MPS2_SSP3               ((MPS2_SSP_TypeDef      *) MPS2_SSP3_BASE )    
+#define MPS2_SSP4               ((MPS2_SSP_TypeDef      *) MPS2_SSP4_BASE )    
 
 /******************************************************************************/
 /*                     General Function Definitions                           */
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/TOOLCHAIN_ARM_STD/MPS2.sct	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/TOOLCHAIN_ARM_STD/MPS2.sct	Wed Mar 02 14:30:11 2016 +0000
@@ -1,33 +1,33 @@
 ;* MPS2 CMSIS Library
 ;*
-;* Copyright (c) 2006-2015 ARM Limited
+;* Copyright (c) 2006-2016 ARM Limited
 ;* All rights reserved.
-;* 
-;* Redistribution and use in source and binary forms, with or without 
+;*
+;* 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, 
+;*
+;* 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 
+;*
+;* 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. Neither the name of the copyright holder nor the names of its contributors 
-;* may be used to endorse or promote products derived from this software without 
+;*
+;* 3. Neither the name of the copyright holder nor the names of its contributors
+;* may be used to endorse or promote products derived from this software without
 ;* specific prior written permission.
-;* 
-;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-;* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-;* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-;* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+;*
+;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+;* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+;* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 ;*
 ; *************************************************************
 ; *** Scatter-Loading Description File                      ***
@@ -39,8 +39,8 @@
    *(InRoot$$Sections)
    .ANY (+RO)
   }
-  ; Total: 48 vectors = 192 bytes (0x0C0) to be reserved in RAM
-  RW_IRAM1 (0x20000000+0xC0) (0x400000-0xC0)  {  ; RW data
+  ; Total: 64 vectors = 256 bytes (0x100) to be reserved in RAM
+  RW_IRAM1 (0x20000000+0x100) (0x400000-0x100)  {  ; RW data
    .ANY (+RW +ZI)
   }
 }
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/TOOLCHAIN_ARM_STD/startup_MPS2.s	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/TOOLCHAIN_ARM_STD/startup_MPS2.s	Wed Mar 02 14:30:11 2016 +0000
@@ -1,43 +1,42 @@
-;/**************************************************************************//**
-; * @file     startup_CMSDK_CM0.s
-; * @brief    CMSIS Core Device Startup File for
-; *           CMSDK_CM0 Device
-; * @version  V3.02
-; * @date     04. February 2015
-; *
-; * @note
-; * Copyright (C) 2015 ARM Limited. All rights reserved.
-; *
-; ******************************************************************************/
-;/* Copyright (c) 2011 - 2015 ARM LIMITED
+; MPS2 CMSIS Library
+;
+; Copyright (c) 2006-2016 ARM Limited
+; All rights reserved.
+;
+; 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. Neither the name of the copyright holder nor the names of its contributors
+; may be used to endorse or promote products derived from this software without
+; specific prior written permission.
 ;
-;   All rights reserved.
-;   Redistribution and use in source and binary forms, with or without
-;   modification, are permitted provided that the following conditions are met:
-;   - Redistributions of source code must retain the above copyright
-;     notice, this list of conditions and the following disclaimer.
-;   - 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.
-;   - Neither the name of ARM nor the names of its contributors may be used
-;     to endorse or promote products derived from this software without
-;     specific prior written permission.
-;   *
-;   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-;   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-;   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-;   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS 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.
-;   ---------------------------------------------------------------------------*/
-;/*
-;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
-;*/
+; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
+;******************************************************************************
+; @file     startup_CMSDK_CM0.s
+; @brief    CMSIS Core Device Startup File for
+;           CMSDK_CM0 Device
+;
+;******************************************************************************
+;
+;-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
+;
 
 
 ; <h> Stack Configuration
@@ -108,22 +107,22 @@
                 DCD     ETHERNET_Handler          ; Ethernet Overflow Handler
                 DCD     I2S_Handler               ; I2S Handler
                 DCD     TSC_Handler               ; Touch Screen handler
-                DCD     PORT0_0_Handler           ; GPIO Port 0 pin 0 Handler
-                DCD     PORT0_1_Handler           ; GPIO Port 0 pin 1 Handler
-                DCD     PORT0_2_Handler           ; GPIO Port 0 pin 2 Handler
-                DCD     PORT0_3_Handler           ; GPIO Port 0 pin 3 Handler
-                DCD     PORT0_4_Handler           ; GPIO Port 0 pin 4 Handler
-                DCD     PORT0_5_Handler           ; GPIO Port 0 pin 5 Handler
-                DCD     PORT0_6_Handler           ; GPIO Port 0 pin 6 Handler
-                DCD     PORT0_7_Handler           ; GPIO Port 0 pin 7 Handler
-                DCD     PORT0_8_Handler           ; GPIO Port 0 pin 8 Handler
-                DCD     PORT0_9_Handler           ; GPIO Port 0 pin 9 Handler
-                DCD     PORT0_10_Handler          ; GPIO Port 0 pin 10 Handler
-                DCD     PORT0_11_Handler          ; GPIO Port 0 pin 11 Handler
-                DCD     PORT0_12_Handler          ; GPIO Port 0 pin 12 Handler
-                DCD     PORT0_13_Handler          ; GPIO Port 0 pin 13 Handler
-                DCD     PORT0_14_Handler          ; GPIO Port 0 pin 14 Handler
-                DCD     PORT0_15_Handler          ; GPIO Port 0 pin 15 Handler
+                DCD     PORT2_COMB_Handler        ; GPIO Port 2 Combined Handler
+                DCD     PORT3_COMB_Handler        ; GPIO Port 3 Combined Handler
+                DCD     UARTRX3_Handler           ; UART 3 RX Handler
+                DCD     UARTTX3_Handler           ; UART 3 TX Handler
+                DCD     UARTRX4_Handler           ; UART 4 RX Handler
+                DCD     UARTTX4_Handler           ; UART 4 TX Handler
+                DCD     ADCSPI_Handler            ; SHIELD ADC SPI exceptions Handler
+                DCD     SHIELDSPI_Handler         ; SHIELD SPI exceptions Handler
+                DCD     PORT0_0_Handler           ; GPIO Port 0 pin 0 Handler                                    
+                DCD     PORT0_1_Handler           ; GPIO Port 0 pin 1 Handler                                    
+                DCD     PORT0_2_Handler           ; GPIO Port 0 pin 2 Handler                                    
+                DCD     PORT0_3_Handler           ; GPIO Port 0 pin 3 Handler                                    
+                DCD     PORT0_4_Handler           ; GPIO Port 0 pin 4 Handler                                    
+                DCD     PORT0_5_Handler           ; GPIO Port 0 pin 5 Handler                                    
+                DCD     PORT0_6_Handler           ; GPIO Port 0 pin 6 Handler                                    
+                DCD     PORT0_7_Handler           ; GPIO Port 0 pin 7 Handler                                    
 __Vectors_End
 
 __Vectors_Size  EQU     __Vectors_End - __Vectors
@@ -185,6 +184,14 @@
                 EXPORT ETHERNET_Handler           [WEAK]
                 EXPORT I2S_Handler                [WEAK]
                 EXPORT TSC_Handler                [WEAK]
+                EXPORT PORT2_COMB_Handler         [WEAK]
+                EXPORT PORT3_COMB_Handler         [WEAK]
+                EXPORT UARTRX3_Handler            [WEAK]
+                EXPORT UARTTX3_Handler            [WEAK]
+                EXPORT UARTRX4_Handler            [WEAK]
+                EXPORT UARTTX4_Handler            [WEAK]
+                EXPORT ADCSPI_Handler             [WEAK]
+                EXPORT SHIELDSPI_Handler          [WEAK]
                 EXPORT PORT0_0_Handler            [WEAK]
                 EXPORT PORT0_1_Handler            [WEAK]
                 EXPORT PORT0_2_Handler            [WEAK]
@@ -193,14 +200,6 @@
                 EXPORT PORT0_5_Handler            [WEAK]
                 EXPORT PORT0_6_Handler            [WEAK]
                 EXPORT PORT0_7_Handler            [WEAK]
-                EXPORT PORT0_8_Handler            [WEAK]
-                EXPORT PORT0_9_Handler            [WEAK]
-                EXPORT PORT0_10_Handler           [WEAK]
-                EXPORT PORT0_11_Handler           [WEAK]
-                EXPORT PORT0_12_Handler           [WEAK]
-                EXPORT PORT0_13_Handler           [WEAK]
-                EXPORT PORT0_14_Handler           [WEAK]
-                EXPORT PORT0_15_Handler           [WEAK]
 
 UARTRX0_Handler
 UARTTX0_Handler
@@ -218,22 +217,22 @@
 ETHERNET_Handler
 I2S_Handler
 TSC_Handler
-PORT0_0_Handler
-PORT0_1_Handler
-PORT0_2_Handler
-PORT0_3_Handler
-PORT0_4_Handler
-PORT0_5_Handler
-PORT0_6_Handler
-PORT0_7_Handler
-PORT0_8_Handler
-PORT0_9_Handler
-PORT0_10_Handler
-PORT0_11_Handler
-PORT0_12_Handler
-PORT0_13_Handler
-PORT0_14_Handler
-PORT0_15_Handler
+PORT2_COMB_Handler       
+PORT3_COMB_Handler       
+UARTRX3_Handler          
+UARTTX3_Handler          
+UARTRX4_Handler          
+UARTTX4_Handler          
+ADCSPI_Handler           
+SHIELDSPI_Handler        
+PORT0_0_Handler                                   
+PORT0_1_Handler                                   
+PORT0_2_Handler                                   
+PORT0_3_Handler                                   
+PORT0_4_Handler                                   
+PORT0_5_Handler                                   
+PORT0_6_Handler                                   
+PORT0_7_Handler                                   
                 B       .
 
                 ENDP
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/cmsis.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/cmsis.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,33 +1,33 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * A generic CMSIS include header, pulling in MPS2 specifics
 *******************************************************************************/
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/cmsis_nvic.c	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/cmsis_nvic.c	Wed Mar 02 14:30:11 2016 +0000
@@ -1,33 +1,33 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * CMSIS-style functionality to support dynamic vectors
 *******************************************************************************/
@@ -41,13 +41,13 @@
     // Space for dynamic vectors, initialised to allocate in R/W
     static volatile uint32_t* vectors = (uint32_t*)NVIC_FLASH_VECTOR_ADDRESS;
 
-    // Set the vector 
-    vectors[IRQn + 16] = vector; 
+    // Set the vector
+    vectors[IRQn + 16] = vector;
 }
 
 uint32_t NVIC_GetVector(IRQn_Type IRQn) {
     // We can always read vectors at 0x0, as the addresses are remapped
-    uint32_t *vectors = (uint32_t*)NVIC_FLASH_VECTOR_ADDRESS; 
+    uint32_t *vectors = (uint32_t*)NVIC_FLASH_VECTOR_ADDRESS;
 
     // Return the vector
     return vectors[IRQn + 16];
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/cmsis_nvic.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/cmsis_nvic.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,33 +1,33 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * CMSIS-style functionality to support dynamic vectors
 *******************************************************************************/
@@ -37,7 +37,7 @@
 
 #include "cmsis.h"
 
-#define NVIC_NUM_VECTORS      (16 + 32)
+#define NVIC_NUM_VECTORS      (16 + 48)
 #define NVIC_USER_IRQ_OFFSET  16
 
 #ifdef __cplusplus
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/peripherallink.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/peripherallink.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,33 +1,33 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * Name:    Device.h
 * Purpose: Include the correct device header file
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/system_CMSDK_CM0.c	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/system_CMSDK_CM0.c	Wed Mar 02 14:30:11 2016 +0000
@@ -1,41 +1,37 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * @file     system_CMSDK_CM0.c
 * @brief    CMSIS Device System Source File for
 *           CMSDK_M0 Device
-* @version  V3.02
-* @date     15. November 2013
-*
-* @note
 *
 *******************************************************************************/
 
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/system_CMSDK_CM0.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0/system_CMSDK_CM0.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,42 +1,38 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *
 *******************************************************************************
 * @file     system_CMSDK_CM0.h
 * @brief    CMSIS Device Peripheral Access Layer Header File for
 *           CMSDK_CM0 Device
-* @version  V3.02
-* @date     15. March 2013
-*
-* @note
 *
 ******************************************************************************/
 
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/CMSDK_CM0plus.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/CMSDK_CM0plus.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,41 +1,37 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * @file     CMSDK_CM0plus.h
 * @brief    CMSIS Core Peripheral Access Layer Header File for
 *           CMSDK_CM0plus Device
-* @version  V3.02
-* @date     15. November 2013
-*
-* @note     configured for CM7 without FPU
 *
 *******************************************************************************/
 
@@ -52,51 +48,48 @@
 
 typedef enum IRQn
 {
-/* -------------------  Cortex-M0+ Processor Exceptions Numbers  ------------------ */
-  NonMaskableInt_IRQn           = -14,      /*  2 Non Maskable Interrupt            */
-  HardFault_IRQn                = -13,      /*  3 HardFault Interrupt               */
-
+/******  Cortex-M0 Processor Exceptions Numbers ***************************************************/
 
-
-  SVCall_IRQn                   =  -5,      /* 11 SV Call Interrupt                 */
-
-  PendSV_IRQn                   =  -2,      /* 14 Pend SV Interrupt                 */
-  SysTick_IRQn                  =  -1,      /* 15 System Tick Interrupt             */
+/* ToDo: use this Cortex interrupt numbers if your device is a CORTEX-M0 device                   */
+  NonMaskableInt_IRQn           = -14,      /*!<  2 Cortex-M0 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               */
 
-/* ----------------------  CMSDK_CM0plus Specific Interrupt Numbers  -------------- */
-  UARTRX0_IRQn                  = 0,       /* UART 0 RX Interrupt                   */
-  UARTTX0_IRQn                  = 1,       /* UART 0 TX Interrupt                   */
-  UARTRX1_IRQn                  = 2,       /* UART 1 RX Interrupt                   */
-  UARTTX1_IRQn                  = 3,       /* UART 1 TX Interrupt                   */
-  UARTRX2_IRQn                  = 4,       /* UART 2 RX Interrupt                   */
-  UARTTX2_IRQn                  = 5,       /* UART 2 TX Interrupt                   */
-  PORT0_ALL_IRQn                = 6,       /* Port 1 combined Interrupt             */
-  PORT1_ALL_IRQn                = 7,       /* Port 1 combined Interrupt             */
-  TIMER0_IRQn                   = 8,       /* TIMER 0 Interrupt                     */
-  TIMER1_IRQn                   = 9,       /* TIMER 1 Interrupt                     */
-  DUALTIMER_IRQn                = 10,      /* Dual Timer Interrupt                  */
-  SPI_IRQn                      = 11,      /* SPI Interrupt                         */
-  UARTOVF_IRQn                  = 12,      /* UART 0,1,2 Overflow Interrupt         */
-  ETHERNET_IRQn                 = 13,      /* Ethernet Interrupt                    */
-  I2S_IRQn                      = 14,      /* I2S Interrupt                         */
-  TSC_IRQn                      = 15,      /* Touch Screen Interrupt                */
-//  DMA_IRQn                      = 15,      /* PL230 DMA Done + Error Interrupt      */
-  PORT0_0_IRQn                  = 16,      /* All P0 I/O pins used as irq source    */
-  PORT0_1_IRQn                  = 17,      /* There are 16 pins in total            */
-  PORT0_2_IRQn                  = 18,
-  PORT0_3_IRQn                  = 19,
-  PORT0_4_IRQn                  = 20,
-  PORT0_5_IRQn                  = 21,
-  PORT0_6_IRQn                  = 22,
-  PORT0_7_IRQn                  = 23,
-  PORT0_8_IRQn                  = 24,
-  PORT0_9_IRQn                  = 25,
-  PORT0_10_IRQn                 = 26,
-  PORT0_11_IRQn                 = 27,
-  PORT0_12_IRQn                 = 28,
-  PORT0_13_IRQn                 = 29,
-  PORT0_14_IRQn                 = 30,
-  PORT0_15_IRQn                 = 31,
+/* ----------------------  CMSDK_CM0 Specific Interrupt Numbers  ------------------ */
+  UARTRX0_IRQn                  = 0,       /*!< UART 0 RX Interrupt                               */
+  UARTTX0_IRQn                  = 1,       /*!< UART 0 TX Interrupt                               */
+  UARTRX1_IRQn                  = 2,       /*!< UART 1 RX Interrupt                               */
+  UARTTX1_IRQn                  = 3,       /*!< UART 1 TX Interrupt                               */
+  UARTRX2_IRQn                  = 4,       /*!< UART 2 RX Interrupt                               */
+  UARTTX2_IRQn                  = 5,       /*!< UART 2 TX Interrupt                               */
+  PORT0_ALL_IRQn                = 6,       /*!< Port 0 combined Interrupt                         */
+  PORT1_ALL_IRQn                = 7,       /*!< Port 1 combined Interrupt                         */
+  TIMER0_IRQn                   = 8,       /*!< TIMER 0 Interrupt                                 */
+  TIMER1_IRQn                   = 9,       /*!< TIMER 1 Interrupt                                 */
+  DUALTIMER_IRQn                = 10,      /*!< Dual Timer Interrupt                              */
+  SPI_IRQn                      = 11,      /*!< SPI Interrupt                                     */
+  UARTOVF_IRQn                  = 12,      /*!< UART 0,1,2 Overflow Interrupt                     */
+  ETHERNET_IRQn                 = 13,      /*!< Ethernet Interrupt                                */
+  I2S_IRQn                      = 14,      /*!< I2S Interrupt                                     */
+  TSC_IRQn                      = 15,      /*!< Touch Screen Interrupt                            */
+  PORT2_ALL_IRQn                = 16,      /*!< Port 2 combined Interrupt                         */
+  PORT3_ALL_IRQn                = 17,      /*!< Port 3 combined Interrupt                         */
+  UARTRX3_IRQn                  = 18,      /*!< UART 3 RX Interrupt                               */
+  UARTTX3_IRQn                  = 19,      /*!< UART 3 TX Interrupt                               */
+  UARTRX4_IRQn                  = 20,      /*!< UART 4 RX Interrupt                               */
+  UARTTX4_IRQn                  = 21,      /*!< UART 4 TX Interrupt                               */
+  ADCSPI_IRQn                   = 22,      /*!< SHIELD ADC SPI Interrupt                          */
+  SHIELDSPI_IRQn                = 23,      /*!< SHIELD SPI Combined Interrupt                     */
+  PORT0_0_IRQn                  = 24,      /*!<  GPIO Port 0 pin 0 Interrupt                      */
+  PORT0_1_IRQn                  = 25,      /*!<  GPIO Port 0 pin 1 Interrupt                      */
+  PORT0_2_IRQn                  = 26,      /*!<  GPIO Port 0 pin 2 Interrupt                      */
+  PORT0_3_IRQn                  = 27,      /*!<  GPIO Port 0 pin 3 Interrupt                      */
+  PORT0_4_IRQn                  = 28,      /*!<  GPIO Port 0 pin 4 Interrupt                      */
+  PORT0_5_IRQn                  = 29,      /*!<  GPIO Port 0 pin 5 Interrupt                      */
+  PORT0_6_IRQn                  = 30,      /*!<  GPIO Port 0 pin 6 Interrupt                      */
+  PORT0_7_IRQn                  = 31,      /*!<  GPIO Port 0 pin 7 Interrupt                      */
 } IRQn_Type;
 
 
@@ -687,7 +680,9 @@
 #define CMSDK_UART0_BASE        (CMSDK_APB_BASE + 0x4000UL)
 #define CMSDK_UART1_BASE        (CMSDK_APB_BASE + 0x5000UL)
 #define CMSDK_UART2_BASE        (CMSDK_APB_BASE + 0x6000UL)
+#define CMSDK_UART3_BASE        (CMSDK_APB_BASE + 0x7000UL)
 #define CMSDK_WATCHDOG_BASE     (CMSDK_APB_BASE + 0x8000UL)
+#define CMSDK_UART4_BASE        (CMSDK_APB_BASE + 0x9000UL)
 #define CMSDK_PL230_BASE        (CMSDK_APB_BASE + 0xF000UL)
 
 /* AHB peripherals                                                                  */
@@ -705,6 +700,8 @@
 #define CMSDK_UART0             ((CMSDK_UART_TypeDef   *) CMSDK_UART0_BASE   )
 #define CMSDK_UART1             ((CMSDK_UART_TypeDef   *) CMSDK_UART1_BASE   )
 #define CMSDK_UART2             ((CMSDK_UART_TypeDef   *) CMSDK_UART2_BASE   )
+#define CMSDK_UART3             ((CMSDK_UART_TypeDef   *) CMSDK_UART3_BASE   )
+#define CMSDK_UART4             ((CMSDK_UART_TypeDef   *) CMSDK_UART4_BASE   )
 #define CMSDK_TIMER0            ((CMSDK_TIMER_TypeDef  *) CMSDK_TIMER0_BASE  )
 #define CMSDK_TIMER1            ((CMSDK_TIMER_TypeDef  *) CMSDK_TIMER1_BASE  )
 #define CMSDK_DUALTIMER         ((CMSDK_DUALTIMER_BOTH_TypeDef  *) CMSDK_DUALTIMER_BASE )
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/SMM_MPS2.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/SMM_MPS2.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,36 +1,36 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * File:     smm_mps2.h
-* Release:  Version 1.0
+* Release:  Version 1.1
 *******************************************************************************/
 
 #ifndef __SMM_MPS2_H
@@ -46,7 +46,7 @@
 /*                          FPGA System Register declaration                  */
 /******************************************************************************/
 
-typedef struct                   
+typedef struct                 
 {
   __IO uint32_t LED;             // Offset: 0x000 (R/W)  LED connections
                                  //                         [31:2] : Reserved
@@ -65,11 +65,14 @@
                                  //                         Bit[31:0] : reload value for prescale counter
   __IO uint32_t PSCNTR;          // Offset: 0x024 (R/W)  32-bit Prescale counter
                                  //                         current value of the pre-scaler counter
-								 //                         The Cycle Up Counter increment when the prescale down counter reach 0
-								 //                         The pre-scaler counter is reloaded with PRESCALE after reaching 0.
+                                 //                         The Cycle Up Counter increment when the prescale down counter reach 0
+                                 //                         The pre-scaler counter is reloaded with PRESCALE after reaching 0.
        uint32_t RESERVED4[9];
   __IO uint32_t MISC;            // Offset: 0x04C (R/W)  Misc control */
-                                 //                         [31:7] : Reserved
+                                 //                         [31:10] : Reserved
+                                 //                            [9] : SHIELD_1_SPI_nCS
+                                 //                            [8] : SHIELD_0_SPI_nCS
+                                 //                            [7] : ADC_SPI_nCS
                                  //                            [6] : CLCD_BL_CTRL
                                  //                            [5] : CLCD_RD
                                  //                            [4] : CLCD_RS
@@ -93,12 +96,18 @@
 #define CLCD_RD_Msk        (1UL<<CLCD_RD_Pos)
 #define CLCD_BL_Pos        6
 #define CLCD_BL_Msk        (1UL<<CLCD_BL_Pos)
+#define ADC_nCS_Pos        7
+#define ADC_nCS_Msk        (1UL<<ADC_nCS_Pos)
+#define SHIELD_0_nCS_Pos        8
+#define SHIELD_0_nCS_Msk        (1UL<<SHIELD_0_nCS_Pos)
+#define SHIELD_1_nCS_Pos        9
+#define SHIELD_1_nCS_Msk        (1UL<<SHIELD_1_nCS_Pos)
 
 /******************************************************************************/
 /*                        SCC Register declaration                            */
 /******************************************************************************/
 
-typedef struct                   // 
+typedef struct                   //
 {
   __IO uint32_t CFG_REG0;        // Offset: 0x000 (R/W)  Remaps block RAM to ZBT
                                  //                         [31:1] : Reserved
@@ -308,10 +317,10 @@
 typedef struct
 {
   union {
-  __O   uint32_t  CONTROLS;     // Offset: 0x000 CONTROL Set Register     ( /W) 
-  __I   uint32_t  CONTROL;      // Offset: 0x000 CONTROL Status Register  (R/ ) 
+  __O   uint32_t  CONTROLS;     // Offset: 0x000 CONTROL Set Register     ( /W)
+  __I   uint32_t  CONTROL;      // Offset: 0x000 CONTROL Status Register  (R/ )
   };
-  __O    uint32_t  CONTROLC;     // Offset: 0x004 CONTROL Clear Register    ( /W)  
+  __O    uint32_t  CONTROLC;     // Offset: 0x004 CONTROL Clear Register    ( /W)
 } MPS2_I2C_TypeDef;
 
 #define SDA                1 << 1
@@ -346,7 +355,7 @@
                               //     <4=> Undefined!
                               //     <5=> Undefined!
                               //     <6=> Undefined!
-                              //     <7=> Undefined!  
+                              //     <7=> Undefined!
                               //   <o.14..12> RX Buffer Water Level
                               //     <0=> Undefined!
                               //     <1=> / IRQ triggers when less than 1 space available
@@ -355,7 +364,7 @@
                               //     <4=> / IRQ triggers when less than 4 space available
                               //     <5=> Undefined!
                               //     <6=> Undefined!
-                              //     <7=> Undefined!  
+                              //     <7=> Undefined!
                               //   <o.16> FIFO reset
                               //     <0=> Normal operation
                               //     <1=> FIFO reset
@@ -363,12 +372,12 @@
                               //     <0=> Normal operation
                               //     <1=> Assert audio Codec reset
   /*!< Offset: 0x004 STATUS Register     (R/ ) */
-  __I    uint32_t  STATUS;  // <h> STATUS </h> 
+  __I    uint32_t  STATUS;  // <h> STATUS </h>
                               //   <o.0> TX Buffer alert
                               //     <0=> TX buffer don't need service yet
                               //     <1=> TX buffer need service
                               //   <o.1> RX Buffer alert
-                              //     <0=> RX buffer don't need service yet 
+                              //     <0=> RX buffer don't need service yet
                               //     <1=> RX buffer need service
                               //   <o.2> TX Buffer Empty
                               //     <0=> TX buffer have data
@@ -383,33 +392,33 @@
                               //     <0=> RX buffer not full
                               //     <1=> RX buffer full
   union {
-   /*!< Offset: 0x008 Error Status Register (R/ ) */  
-    __I    uint32_t  ERROR;  // <h> ERROR </h> 
+   /*!< Offset: 0x008 Error Status Register (R/ ) */
+    __I    uint32_t  ERROR;  // <h> ERROR </h>
                               //   <o.0> TX error
                               //     <0=> Okay
                               //     <1=> TX overrun/underrun
                               //   <o.1> RX error
-                              //     <0=> Okay 
+                              //     <0=> Okay
                               //     <1=> RX overrun/underrun
-   /*!< Offset: 0x008 Error Clear Register  ( /W) */    
-    __O    uint32_t  ERRORCLR;  // <h> ERRORCLR </h> 
+   /*!< Offset: 0x008 Error Clear Register  ( /W) */  
+    __O    uint32_t  ERRORCLR;  // <h> ERRORCLR </h>
                               //   <o.0> TX error
                               //     <0=> Okay
                               //     <1=> Clear TX error
                               //   <o.1> RX error
-                              //     <0=> Okay 
+                              //     <0=> Okay
                               //     <1=> Clear RX error
     };
-   /*!< Offset: 0x00C Divide ratio Register (R/W) */  
-  __IO   uint32_t  DIVIDE;  // <h> Divide ratio for Left/Right clock </h> 
-                              //   <o.9..0> TX error (default 0x80)			      
+   /*!< Offset: 0x00C Divide ratio Register (R/W) */
+  __IO   uint32_t  DIVIDE;  // <h> Divide ratio for Left/Right clock </h>
+                              //   <o.9..0> TX error (default 0x80)                
    /*!< Offset: 0x010 Transmit Buffer       ( /W) */
-  __O    uint32_t  TXBUF;  // <h> Transmit buffer </h> 
-                              //   <o.15..0> Right channel			      
+  __O    uint32_t  TXBUF;  // <h> Transmit buffer </h>
+                              //   <o.15..0> Right channel                
                               //   <o.31..16> Left channel
    /*!< Offset: 0x014 Receive Buffer        (R/ ) */
-  __I    uint32_t  RXBUF;  // <h> Receive buffer </h> 
-                              //   <o.15..0> Right channel			      
+  __I    uint32_t  RXBUF;  // <h> Receive buffer </h>
+                              //   <o.15..0> Right channel                
                               //   <o.31..16> Left channel
          uint32_t  RESERVED1[186];
   __IO uint32_t ITCR;         // <h> Integration Test Control Register </h>
@@ -556,7 +565,12 @@
 #define MPS2_TSC_I2C_BASE       (0x40022000ul)       /* Touch Screen I2C Base Address */
 #define MPS2_AAIC_I2C_BASE      (0x40023000ul)       /* Audio Interface I2C Base Address */
 #define MPS2_AAIC_I2S_BASE      (0x40024000ul)       /* Audio Interface I2S Base Address */
+#define MPS2_SSP2_BASE          (0x40025000ul)       /* adc SSP Base Address   */
+#define MPS2_SSP3_BASE          (0x40026000ul)       /* Shield 0 SSP Base Address   */
+#define MPS2_SSP4_BASE          (0x40027000ul)       /* Shield 1 SSP Base Address   */
 #define MPS2_FPGAIO_BASE        (0x40028000ul)       /* FPGAIO Base Address */
+#define MPS2_SHIELD0_I2C_BASE   (0x40029000ul)       /* Shield 0 I2C Base Address */
+#define MPS2_SHIELD1_I2C_BASE   (0x4002A000ul)       /* Shield 1 I2C Base Address */
 #define MPS2_SCC_BASE           (0x4002F000ul)       /* SCC Base Address    */
 
 #ifdef CORTEX_M7
@@ -565,8 +579,8 @@
 #define SMSC9220_BASE           (0x40200000ul)       /* Ethernet SMSC9220 Base Address   */
 #endif
 
+#define MPS2_VGA_TEXT_BUFFER    (0x41000000ul)       /* VGA Text Buffer Address */
 #define MPS2_VGA_BUFFER         (0x41100000ul)       /* VGA Buffer Base Address */
-#define MPS2_VGA_TEXT_BUFFER    (0x41000000ul)       /* VGA Text Buffer Address */
 
 /******************************************************************************/
 /*                         Peripheral declaration                             */
@@ -575,11 +589,16 @@
 #define SMSC9220                ((SMSC9220_TypeDef      *) SMSC9220_BASE )
 #define MPS2_TS_I2C             ((MPS2_I2C_TypeDef      *) MPS2_TSC_I2C_BASE )
 #define MPS2_AAIC_I2C           ((MPS2_I2C_TypeDef      *) MPS2_AAIC_I2C_BASE )
+#define MPS2_SHIELD0_I2C        ((MPS2_I2C_TypeDef      *) MPS2_SHIELD0_I2C_BASE )
+#define MPS2_SHIELD1_I2C        ((MPS2_I2C_TypeDef      *) MPS2_SHIELD1_I2C_BASE )
 #define MPS2_AAIC_I2S           ((MPS2_I2S_TypeDef      *) MPS2_AAIC_I2S_BASE )
 #define MPS2_FPGAIO             ((MPS2_FPGAIO_TypeDef   *) MPS2_FPGAIO_BASE )
 #define MPS2_SCC                ((MPS2_SCC_TypeDef      *) MPS2_SCC_BASE )
 #define MPS2_SSP0               ((MPS2_SSP_TypeDef      *) MPS2_SSP0_BASE )
 #define MPS2_SSP1               ((MPS2_SSP_TypeDef      *) MPS2_SSP1_BASE )
+#define MPS2_SSP2               ((MPS2_SSP_TypeDef      *) MPS2_SSP2_BASE )  
+#define MPS2_SSP3               ((MPS2_SSP_TypeDef      *) MPS2_SSP3_BASE )  
+#define MPS2_SSP4               ((MPS2_SSP_TypeDef      *) MPS2_SSP4_BASE )  
 
 /******************************************************************************/
 /*                     General Function Definitions                           */
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/TOOLCHAIN_ARM_STD/MPS2.sct	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/TOOLCHAIN_ARM_STD/MPS2.sct	Wed Mar 02 14:30:11 2016 +0000
@@ -1,33 +1,33 @@
 ;* MPS2 CMSIS Library
 ;*
-;* Copyright (c) 2006-2015 ARM Limited
+;* Copyright (c) 2006-2016 ARM Limited
 ;* All rights reserved.
-;* 
-;* Redistribution and use in source and binary forms, with or without 
+;*
+;* 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, 
+;*
+;* 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 
+;*
+;* 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. Neither the name of the copyright holder nor the names of its contributors 
-;* may be used to endorse or promote products derived from this software without 
+;*
+;* 3. Neither the name of the copyright holder nor the names of its contributors
+;* may be used to endorse or promote products derived from this software without
 ;* specific prior written permission.
-;* 
-;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-;* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-;* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-;* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+;*
+;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+;* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+;* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 ;*
 ; *************************************************************
 ; *** Scatter-Loading Description File                      ***
@@ -39,8 +39,8 @@
    *(InRoot$$Sections)
    .ANY (+RO)
   }
-  ; Total: 48 vectors = 192 bytes (0x0C0) to be reserved in RAM
-  RW_IRAM1 (0x20000000+0xC0) (0x400000-0xC0)  {  ; RW data
+  ; Total: 64 vectors = 256 bytes (0x100) to be reserved in RAM
+  RW_IRAM1 (0x20000000+0x100) (0x400000-0x100)  {  ; RW data
    .ANY (+RW +ZI)
   }
 }
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/TOOLCHAIN_ARM_STD/startup_MPS2.s	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/TOOLCHAIN_ARM_STD/startup_MPS2.s	Wed Mar 02 14:30:11 2016 +0000
@@ -1,43 +1,42 @@
-;/**************************************************************************//**
-; * @file     startup_CMSDK_CM0.s
-; * @brief    CMSIS Core Device Startup File for
-; *           CMSDK_CM0 Device
-; * @version  V3.02
-; * @date     15. November 2013
-; *
-; * @note
-; * Copyright (C) 2014 ARM Limited. All rights reserved.
-; *
-; ******************************************************************************/
-;/* Copyright (c) 2011 - 2013 ARM LIMITED
+; MPS2 CMSIS Library
+;
+; Copyright (c) 2006-2016 ARM Limited
+; All rights reserved.
+;
+; 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. Neither the name of the copyright holder nor the names of its contributors
+; may be used to endorse or promote products derived from this software without
+; specific prior written permission.
 ;
-;   All rights reserved.
-;   Redistribution and use in source and binary forms, with or without
-;   modification, are permitted provided that the following conditions are met:
-;   - Redistributions of source code must retain the above copyright
-;     notice, this list of conditions and the following disclaimer.
-;   - 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.
-;   - Neither the name of ARM nor the names of its contributors may be used
-;     to endorse or promote products derived from this software without
-;     specific prior written permission.
-;   *
-;   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-;   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-;   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-;   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS 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.
-;   ---------------------------------------------------------------------------*/
-;/*
-;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
-;*/
+; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
+;******************************************************************************
+; @file     startup_CMSDK_CM0P.s
+; @brief    CMSIS Core Device Startup File for
+;           CMSDK_CM0P Device
+;
+;******************************************************************************
+;
+;-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
+;
 
 
 ; <h> Stack Configuration
@@ -108,22 +107,22 @@
                 DCD     ETHERNET_Handler          ; Ethernet Overflow Handler
                 DCD     I2S_Handler               ; I2S Handler
                 DCD     TSC_Handler               ; Touch Screen handler
-                DCD     PORT0_0_Handler           ; GPIO Port 0 pin 0 Handler
-                DCD     PORT0_1_Handler           ; GPIO Port 0 pin 1 Handler
-                DCD     PORT0_2_Handler           ; GPIO Port 0 pin 2 Handler
-                DCD     PORT0_3_Handler           ; GPIO Port 0 pin 3 Handler
-                DCD     PORT0_4_Handler           ; GPIO Port 0 pin 4 Handler
-                DCD     PORT0_5_Handler           ; GPIO Port 0 pin 5 Handler
-                DCD     PORT0_6_Handler           ; GPIO Port 0 pin 6 Handler
-                DCD     PORT0_7_Handler           ; GPIO Port 0 pin 7 Handler
-                DCD     PORT0_8_Handler           ; GPIO Port 0 pin 8 Handler
-                DCD     PORT0_9_Handler           ; GPIO Port 0 pin 9 Handler
-                DCD     PORT0_10_Handler          ; GPIO Port 0 pin 10 Handler
-                DCD     PORT0_11_Handler          ; GPIO Port 0 pin 11 Handler
-                DCD     PORT0_12_Handler          ; GPIO Port 0 pin 12 Handler
-                DCD     PORT0_13_Handler          ; GPIO Port 0 pin 13 Handler
-                DCD     PORT0_14_Handler          ; GPIO Port 0 pin 14 Handler
-                DCD     PORT0_15_Handler          ; GPIO Port 0 pin 15 Handler
+                DCD     PORT2_COMB_Handler        ; GPIO Port 2 Combined Handler
+                DCD     PORT3_COMB_Handler        ; GPIO Port 3 Combined Handler
+                DCD     UARTRX3_Handler           ; UART 3 RX Handler
+                DCD     UARTTX3_Handler           ; UART 3 TX Handler
+                DCD     UARTRX4_Handler           ; UART 4 RX Handler
+                DCD     UARTTX4_Handler           ; UART 4 TX Handler
+                DCD     ADCSPI_Handler            ; SHIELD ADC SPI exceptions Handler
+                DCD     SHIELDSPI_Handler         ; SHIELD SPI exceptions Handler
+                DCD     PORT0_0_Handler           ; GPIO Port 0 pin 0 Handler                                   
+                DCD     PORT0_1_Handler           ; GPIO Port 0 pin 1 Handler                                   
+                DCD     PORT0_2_Handler           ; GPIO Port 0 pin 2 Handler                                   
+                DCD     PORT0_3_Handler           ; GPIO Port 0 pin 3 Handler                                   
+                DCD     PORT0_4_Handler           ; GPIO Port 0 pin 4 Handler                                   
+                DCD     PORT0_5_Handler           ; GPIO Port 0 pin 5 Handler                                   
+                DCD     PORT0_6_Handler           ; GPIO Port 0 pin 6 Handler                                   
+                DCD     PORT0_7_Handler           ; GPIO Port 0 pin 7 Handler                                   
 __Vectors_End
 
 __Vectors_Size  EQU     __Vectors_End - __Vectors
@@ -164,9 +163,9 @@
                 B       .
                 ENDP
 SysTick_Handler PROC
-               EXPORT  SysTick_Handler            [WEAK]
-               B       .
-               ENDP
+                EXPORT  SysTick_Handler           [WEAK]
+                B       .
+                ENDP
 
 Default_Handler PROC
                 EXPORT UARTRX0_Handler            [WEAK]
@@ -185,6 +184,14 @@
                 EXPORT ETHERNET_Handler           [WEAK]
                 EXPORT I2S_Handler                [WEAK]
                 EXPORT TSC_Handler                [WEAK]
+                EXPORT PORT2_COMB_Handler         [WEAK]
+                EXPORT PORT3_COMB_Handler         [WEAK]
+                EXPORT UARTRX3_Handler            [WEAK]
+                EXPORT UARTTX3_Handler            [WEAK]
+                EXPORT UARTRX4_Handler            [WEAK]
+                EXPORT UARTTX4_Handler            [WEAK]
+                EXPORT ADCSPI_Handler             [WEAK]
+                EXPORT SHIELDSPI_Handler          [WEAK]
                 EXPORT PORT0_0_Handler            [WEAK]
                 EXPORT PORT0_1_Handler            [WEAK]
                 EXPORT PORT0_2_Handler            [WEAK]
@@ -193,14 +200,6 @@
                 EXPORT PORT0_5_Handler            [WEAK]
                 EXPORT PORT0_6_Handler            [WEAK]
                 EXPORT PORT0_7_Handler            [WEAK]
-                EXPORT PORT0_8_Handler            [WEAK]
-                EXPORT PORT0_9_Handler            [WEAK]
-                EXPORT PORT0_10_Handler           [WEAK]
-                EXPORT PORT0_11_Handler           [WEAK]
-                EXPORT PORT0_12_Handler           [WEAK]
-                EXPORT PORT0_13_Handler           [WEAK]
-                EXPORT PORT0_14_Handler           [WEAK]
-                EXPORT PORT0_15_Handler           [WEAK]
 
 UARTRX0_Handler
 UARTTX0_Handler
@@ -218,22 +217,22 @@
 ETHERNET_Handler
 I2S_Handler
 TSC_Handler
-PORT0_0_Handler
-PORT0_1_Handler
-PORT0_2_Handler
-PORT0_3_Handler
-PORT0_4_Handler
-PORT0_5_Handler
-PORT0_6_Handler
-PORT0_7_Handler
-PORT0_8_Handler
-PORT0_9_Handler
-PORT0_10_Handler
-PORT0_11_Handler
-PORT0_12_Handler
-PORT0_13_Handler
-PORT0_14_Handler
-PORT0_15_Handler
+PORT2_COMB_Handler      
+PORT3_COMB_Handler      
+UARTRX3_Handler         
+UARTTX3_Handler         
+UARTRX4_Handler         
+UARTTX4_Handler         
+ADCSPI_Handler          
+SHIELDSPI_Handler       
+PORT0_0_Handler                                  
+PORT0_1_Handler                                  
+PORT0_2_Handler                                  
+PORT0_3_Handler                                  
+PORT0_4_Handler                                  
+PORT0_5_Handler                                  
+PORT0_6_Handler                                  
+PORT0_7_Handler                                  
                 B       .
 
                 ENDP
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/cmsis.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/cmsis.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,33 +1,33 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * A generic CMSIS include header, pulling in MPS2 specifics
 *******************************************************************************/
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/cmsis_nvic.c	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/cmsis_nvic.c	Wed Mar 02 14:30:11 2016 +0000
@@ -1,33 +1,33 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * CMSIS-style functionality to support dynamic vectors
 *******************************************************************************/
@@ -41,13 +41,13 @@
     // Space for dynamic vectors, initialised to allocate in R/W
     static volatile uint32_t* vectors = (uint32_t*)NVIC_FLASH_VECTOR_ADDRESS;
 
-    // Set the vector 
-    vectors[IRQn + 16] = vector; 
+    // Set the vector
+    vectors[IRQn + 16] = vector;
 }
 
 uint32_t NVIC_GetVector(IRQn_Type IRQn) {
     // We can always read vectors at 0x0, as the addresses are remapped
-    uint32_t *vectors = (uint32_t*)NVIC_FLASH_VECTOR_ADDRESS; 
+    uint32_t *vectors = (uint32_t*)NVIC_FLASH_VECTOR_ADDRESS;
 
     // Return the vector
     return vectors[IRQn + 16];
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/cmsis_nvic.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/cmsis_nvic.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,33 +1,33 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * CMSIS-style functionality to support dynamic vectors
 *******************************************************************************/
@@ -37,7 +37,7 @@
 
 #include "cmsis.h"
 
-#define NVIC_NUM_VECTORS      (16 + 32)
+#define NVIC_NUM_VECTORS      (16 + 48)
 #define NVIC_USER_IRQ_OFFSET  16
 
 #ifdef __cplusplus
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/peripherallink.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/peripherallink.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,33 +1,33 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * Name:    Device.h
 * Purpose: Include the correct device header file
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/system_CMSDK_CM0plus.c	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/system_CMSDK_CM0plus.c	Wed Mar 02 14:30:11 2016 +0000
@@ -1,46 +1,41 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * @file     system_CMSDK_CM0plus.c
 * @brief    CMSIS Device System Source File for
 *           CMSDK_M0 Device
-* @version  V3.02
-* @date     15. November 2013
-*
-* @note
 *
 *******************************************************************************/
 
 
-
 #include "CMSDK_CM0plus.h"
 
 /*----------------------------------------------------------------------------
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/system_CMSDK_CM0plus.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M0P/system_CMSDK_CM0plus.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,42 +1,38 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *
 *******************************************************************************
 * @file     system_CMSDK_CM0plus.h
 * @brief    CMSIS Device Peripheral Access Layer Header File for
 *           CMSDK_CM0plus Device
-* @version  V3.02
-* @date     15. March 2013
-*
-* @note
 *
 ******************************************************************************/
 
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/CMSDK_CM3.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/CMSDK_CM3.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,41 +1,37 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * @file     CMSDK_CM3.h
 * @brief    CMSIS Core Peripheral Access Layer Header File for
 *           CMSDK_CM3 Device
-* @version  V3.02
-* @date     15. November 2013
-*
-* @note     configured for CM7 without FPU
 *
 *******************************************************************************/
 
@@ -63,40 +59,39 @@
   PendSV_IRQn                   =  -2,        /* 14 Pend SV Interrupt               */
   SysTick_IRQn                  =  -1,        /* 15 System Tick Interrupt           */
 
-/* ----------------------  CMSDK_CM3 Specific Interrupt Numbers  ------------------ */
-  UARTRX0_IRQn                  = 0,       /* UART 0 RX Interrupt                   */
-  UARTTX0_IRQn                  = 1,       /* UART 0 TX Interrupt                   */
-  UARTRX1_IRQn                  = 2,       /* UART 1 RX Interrupt                   */
-  UARTTX1_IRQn                  = 3,       /* UART 1 TX Interrupt                   */
-  UARTRX2_IRQn                  = 4,       /* UART 2 RX Interrupt                   */
-  UARTTX2_IRQn                  = 5,       /* UART 2 TX Interrupt                   */
-  PORT0_ALL_IRQn                = 6,       /* Port 1 combined Interrupt             */
-  PORT1_ALL_IRQn                = 7,       /* Port 1 combined Interrupt             */
-  TIMER0_IRQn                   = 8,       /* TIMER 0 Interrupt                     */
-  TIMER1_IRQn                   = 9,       /* TIMER 1 Interrupt                     */
-  DUALTIMER_IRQn                = 10,      /* Dual Timer Interrupt                  */
-  SPI_IRQn                      = 11,      /* SPI Interrupt                         */
-  UARTOVF_IRQn                  = 12,      /* UART 0,1,2 Overflow Interrupt         */
-  ETHERNET_IRQn                 = 13,      /* Ethernet Interrupt                    */
-  I2S_IRQn                      = 14,      /* I2S Interrupt                         */
-  TSC_IRQn                      = 15,      /* Touch Screen Interrupt                */
-//  DMA_IRQn                      = 15,      /* PL230 DMA Done + Error Interrupt      */
-  PORT0_0_IRQn                  = 16,      /* All P0 I/O pins used as irq source    */
-  PORT0_1_IRQn                  = 17,      /* There are 16 pins in total            */
-  PORT0_2_IRQn                  = 18,
-  PORT0_3_IRQn                  = 19,
-  PORT0_4_IRQn                  = 20,
-  PORT0_5_IRQn                  = 21,
-  PORT0_6_IRQn                  = 22,
-  PORT0_7_IRQn                  = 23,
-  PORT0_8_IRQn                  = 24,
-  PORT0_9_IRQn                  = 25,
-  PORT0_10_IRQn                 = 26,
-  PORT0_11_IRQn                 = 27,
-  PORT0_12_IRQn                 = 28,
-  PORT0_13_IRQn                 = 29,
-  PORT0_14_IRQn                 = 30,
-  PORT0_15_IRQn                 = 31,
+/******  CMSDK Specific Interrupt Numbers *********************************************************/
+  UARTRX0_IRQn                  = 0,       /*!< UART 0 RX Interrupt                               */
+  UARTTX0_IRQn                  = 1,       /*!< UART 0 TX Interrupt                               */
+  UARTRX1_IRQn                  = 2,       /*!< UART 1 RX Interrupt                               */
+  UARTTX1_IRQn                  = 3,       /*!< UART 1 TX Interrupt                               */
+  UARTRX2_IRQn                  = 4,       /*!< UART 2 RX Interrupt                               */
+  UARTTX2_IRQn                  = 5,       /*!< UART 2 TX Interrupt                               */
+  PORT0_ALL_IRQn                = 6,       /*!< Port 0 combined Interrupt                         */
+  PORT1_ALL_IRQn                = 7,       /*!< Port 1 combined Interrupt                         */
+  TIMER0_IRQn                   = 8,       /*!< TIMER 0 Interrupt                                 */
+  TIMER1_IRQn                   = 9,       /*!< TIMER 1 Interrupt                                 */
+  DUALTIMER_IRQn                = 10,      /*!< Dual Timer Interrupt                              */
+  SPI_IRQn                      = 11,      /*!< SPI Interrupt                                     */
+  UARTOVF_IRQn                  = 12,      /*!< UART 0,1,2 Overflow Interrupt                     */
+  ETHERNET_IRQn                 = 13,      /*!< Ethernet Interrupt                                */
+  I2S_IRQn                      = 14,      /*!< I2S Interrupt                                     */
+  TSC_IRQn                      = 15,      /*!< Touch Screen Interrupt                            */
+  PORT2_ALL_IRQn                = 16,      /*!< Port 2 combined Interrupt                         */
+  PORT3_ALL_IRQn                = 17,      /*!< Port 3 combined Interrupt                         */
+  UARTRX3_IRQn                  = 18,      /*!< UART 3 RX Interrupt                               */
+  UARTTX3_IRQn                  = 19,      /*!< UART 3 TX Interrupt                               */
+  UARTRX4_IRQn                  = 20,      /*!< UART 4 RX Interrupt                               */
+  UARTTX4_IRQn                  = 21,      /*!< UART 4 TX Interrupt                               */
+  ADCSPI_IRQn                   = 22,      /*!< SHIELD ADC SPI Interrupt                          */
+  SHIELDSPI_IRQn                = 23,      /*!< SHIELD SPI Combined Interrupt                     */
+  PORT0_0_IRQn                  = 24,      /*!<  GPIO Port 0 pin 0 Interrupt                      */
+  PORT0_1_IRQn                  = 25,      /*!<  GPIO Port 0 pin 1 Interrupt                      */
+  PORT0_2_IRQn                  = 26,      /*!<  GPIO Port 0 pin 2 Interrupt                      */
+  PORT0_3_IRQn                  = 27,      /*!<  GPIO Port 0 pin 3 Interrupt                      */
+  PORT0_4_IRQn                  = 28,      /*!<  GPIO Port 0 pin 4 Interrupt                      */
+  PORT0_5_IRQn                  = 29,      /*!<  GPIO Port 0 pin 5 Interrupt                      */
+  PORT0_6_IRQn                  = 30,      /*!<  GPIO Port 0 pin 6 Interrupt                      */
+  PORT0_7_IRQn                  = 31,      /*!<  GPIO Port 0 pin 7 Interrupt                      */
 } IRQn_Type;
 
 
@@ -686,7 +681,9 @@
 #define CMSDK_UART0_BASE        (CMSDK_APB_BASE + 0x4000UL)
 #define CMSDK_UART1_BASE        (CMSDK_APB_BASE + 0x5000UL)
 #define CMSDK_UART2_BASE        (CMSDK_APB_BASE + 0x6000UL)
+#define CMSDK_UART3_BASE        (CMSDK_APB_BASE + 0x7000UL)
 #define CMSDK_WATCHDOG_BASE     (CMSDK_APB_BASE + 0x8000UL)
+#define CMSDK_UART4_BASE        (CMSDK_APB_BASE + 0x9000UL)
 #define CMSDK_PL230_BASE        (CMSDK_APB_BASE + 0xF000UL)
 
 /* AHB peripherals                                                                  */
@@ -704,6 +701,8 @@
 #define CMSDK_UART0             ((CMSDK_UART_TypeDef   *) CMSDK_UART0_BASE   )
 #define CMSDK_UART1             ((CMSDK_UART_TypeDef   *) CMSDK_UART1_BASE   )
 #define CMSDK_UART2             ((CMSDK_UART_TypeDef   *) CMSDK_UART2_BASE   )
+#define CMSDK_UART3             ((CMSDK_UART_TypeDef   *) CMSDK_UART3_BASE   )
+#define CMSDK_UART4             ((CMSDK_UART_TypeDef   *) CMSDK_UART4_BASE   )
 #define CMSDK_TIMER0            ((CMSDK_TIMER_TypeDef  *) CMSDK_TIMER0_BASE  )
 #define CMSDK_TIMER1            ((CMSDK_TIMER_TypeDef  *) CMSDK_TIMER1_BASE  )
 #define CMSDK_DUALTIMER         ((CMSDK_DUALTIMER_BOTH_TypeDef  *) CMSDK_DUALTIMER_BASE )
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/SMM_MPS2.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/SMM_MPS2.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,36 +1,36 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * File:     smm_mps2.h
-* Release:  Version 1.0
+* Release:  Version 1.1
 *******************************************************************************/
 
 #ifndef __SMM_MPS2_H
@@ -46,7 +46,7 @@
 /*                          FPGA System Register declaration                  */
 /******************************************************************************/
 
-typedef struct                   
+typedef struct                  
 {
   __IO uint32_t LED;             // Offset: 0x000 (R/W)  LED connections
                                  //                         [31:2] : Reserved
@@ -65,11 +65,14 @@
                                  //                         Bit[31:0] : reload value for prescale counter
   __IO uint32_t PSCNTR;          // Offset: 0x024 (R/W)  32-bit Prescale counter
                                  //                         current value of the pre-scaler counter
-								 //                         The Cycle Up Counter increment when the prescale down counter reach 0
-								 //                         The pre-scaler counter is reloaded with PRESCALE after reaching 0.
+                                 //                         The Cycle Up Counter increment when the prescale down counter reach 0
+                                 //                         The pre-scaler counter is reloaded with PRESCALE after reaching 0.
        uint32_t RESERVED4[9];
   __IO uint32_t MISC;            // Offset: 0x04C (R/W)  Misc control */
-                                 //                         [31:7] : Reserved
+                                 //                         [31:10] : Reserved
+                                 //                            [9] : SHIELD_1_SPI_nCS
+                                 //                            [8] : SHIELD_0_SPI_nCS
+                                 //                            [7] : ADC_SPI_nCS
                                  //                            [6] : CLCD_BL_CTRL
                                  //                            [5] : CLCD_RD
                                  //                            [4] : CLCD_RS
@@ -93,12 +96,18 @@
 #define CLCD_RD_Msk        (1UL<<CLCD_RD_Pos)
 #define CLCD_BL_Pos        6
 #define CLCD_BL_Msk        (1UL<<CLCD_BL_Pos)
+#define ADC_nCS_Pos        7
+#define ADC_nCS_Msk        (1UL<<ADC_nCS_Pos)
+#define SHIELD_0_nCS_Pos        8
+#define SHIELD_0_nCS_Msk        (1UL<<SHIELD_0_nCS_Pos)
+#define SHIELD_1_nCS_Pos        9
+#define SHIELD_1_nCS_Msk        (1UL<<SHIELD_1_nCS_Pos)
 
 /******************************************************************************/
 /*                        SCC Register declaration                            */
 /******************************************************************************/
 
-typedef struct                   // 
+typedef struct                   //
 {
   __IO uint32_t CFG_REG0;        // Offset: 0x000 (R/W)  Remaps block RAM to ZBT
                                  //                         [31:1] : Reserved
@@ -308,10 +317,10 @@
 typedef struct
 {
   union {
-  __O   uint32_t  CONTROLS;     // Offset: 0x000 CONTROL Set Register     ( /W) 
-  __I   uint32_t  CONTROL;      // Offset: 0x000 CONTROL Status Register  (R/ ) 
+  __O   uint32_t  CONTROLS;     // Offset: 0x000 CONTROL Set Register     ( /W)
+  __I   uint32_t  CONTROL;      // Offset: 0x000 CONTROL Status Register  (R/ )
   };
-  __O    uint32_t  CONTROLC;     // Offset: 0x004 CONTROL Clear Register    ( /W)  
+  __O    uint32_t  CONTROLC;     // Offset: 0x004 CONTROL Clear Register    ( /W) 
 } MPS2_I2C_TypeDef;
 
 #define SDA                1 << 1
@@ -346,7 +355,7 @@
                               //     <4=> Undefined!
                               //     <5=> Undefined!
                               //     <6=> Undefined!
-                              //     <7=> Undefined!  
+                              //     <7=> Undefined! 
                               //   <o.14..12> RX Buffer Water Level
                               //     <0=> Undefined!
                               //     <1=> / IRQ triggers when less than 1 space available
@@ -355,7 +364,7 @@
                               //     <4=> / IRQ triggers when less than 4 space available
                               //     <5=> Undefined!
                               //     <6=> Undefined!
-                              //     <7=> Undefined!  
+                              //     <7=> Undefined! 
                               //   <o.16> FIFO reset
                               //     <0=> Normal operation
                               //     <1=> FIFO reset
@@ -363,12 +372,12 @@
                               //     <0=> Normal operation
                               //     <1=> Assert audio Codec reset
   /*!< Offset: 0x004 STATUS Register     (R/ ) */
-  __I    uint32_t  STATUS;  // <h> STATUS </h> 
+  __I    uint32_t  STATUS;  // <h> STATUS </h>
                               //   <o.0> TX Buffer alert
                               //     <0=> TX buffer don't need service yet
                               //     <1=> TX buffer need service
                               //   <o.1> RX Buffer alert
-                              //     <0=> RX buffer don't need service yet 
+                              //     <0=> RX buffer don't need service yet
                               //     <1=> RX buffer need service
                               //   <o.2> TX Buffer Empty
                               //     <0=> TX buffer have data
@@ -383,33 +392,33 @@
                               //     <0=> RX buffer not full
                               //     <1=> RX buffer full
   union {
-   /*!< Offset: 0x008 Error Status Register (R/ ) */  
-    __I    uint32_t  ERROR;  // <h> ERROR </h> 
+   /*!< Offset: 0x008 Error Status Register (R/ ) */ 
+    __I    uint32_t  ERROR;  // <h> ERROR </h>
                               //   <o.0> TX error
                               //     <0=> Okay
                               //     <1=> TX overrun/underrun
                               //   <o.1> RX error
-                              //     <0=> Okay 
+                              //     <0=> Okay
                               //     <1=> RX overrun/underrun
-   /*!< Offset: 0x008 Error Clear Register  ( /W) */    
-    __O    uint32_t  ERRORCLR;  // <h> ERRORCLR </h> 
+   /*!< Offset: 0x008 Error Clear Register  ( /W) */   
+    __O    uint32_t  ERRORCLR;  // <h> ERRORCLR </h>
                               //   <o.0> TX error
                               //     <0=> Okay
                               //     <1=> Clear TX error
                               //   <o.1> RX error
-                              //     <0=> Okay 
+                              //     <0=> Okay
                               //     <1=> Clear RX error
     };
-   /*!< Offset: 0x00C Divide ratio Register (R/W) */  
-  __IO   uint32_t  DIVIDE;  // <h> Divide ratio for Left/Right clock </h> 
-                              //   <o.9..0> TX error (default 0x80)			      
+   /*!< Offset: 0x00C Divide ratio Register (R/W) */ 
+  __IO   uint32_t  DIVIDE;  // <h> Divide ratio for Left/Right clock </h>
+                              //   <o.9..0> TX error (default 0x80)                 
    /*!< Offset: 0x010 Transmit Buffer       ( /W) */
-  __O    uint32_t  TXBUF;  // <h> Transmit buffer </h> 
-                              //   <o.15..0> Right channel			      
+  __O    uint32_t  TXBUF;  // <h> Transmit buffer </h>
+                              //   <o.15..0> Right channel                 
                               //   <o.31..16> Left channel
    /*!< Offset: 0x014 Receive Buffer        (R/ ) */
-  __I    uint32_t  RXBUF;  // <h> Receive buffer </h> 
-                              //   <o.15..0> Right channel			      
+  __I    uint32_t  RXBUF;  // <h> Receive buffer </h>
+                              //   <o.15..0> Right channel                 
                               //   <o.31..16> Left channel
          uint32_t  RESERVED1[186];
   __IO uint32_t ITCR;         // <h> Integration Test Control Register </h>
@@ -556,7 +565,12 @@
 #define MPS2_TSC_I2C_BASE       (0x40022000ul)       /* Touch Screen I2C Base Address */
 #define MPS2_AAIC_I2C_BASE      (0x40023000ul)       /* Audio Interface I2C Base Address */
 #define MPS2_AAIC_I2S_BASE      (0x40024000ul)       /* Audio Interface I2S Base Address */
+#define MPS2_SSP2_BASE          (0x40025000ul)       /* adc SSP Base Address   */
+#define MPS2_SSP3_BASE          (0x40026000ul)       /* Shield 0 SSP Base Address   */
+#define MPS2_SSP4_BASE          (0x40027000ul)       /* Shield 1 SSP Base Address   */
 #define MPS2_FPGAIO_BASE        (0x40028000ul)       /* FPGAIO Base Address */
+#define MPS2_SHIELD0_I2C_BASE   (0x40029000ul)       /* Shield 0 I2C Base Address */
+#define MPS2_SHIELD1_I2C_BASE   (0x4002A000ul)       /* Shield 1 I2C Base Address */
 #define MPS2_SCC_BASE           (0x4002F000ul)       /* SCC Base Address    */
 
 #ifdef CORTEX_M7
@@ -565,8 +579,8 @@
 #define SMSC9220_BASE           (0x40200000ul)       /* Ethernet SMSC9220 Base Address   */
 #endif
 
+#define MPS2_VGA_TEXT_BUFFER    (0x41000000ul)       /* VGA Text Buffer Address */
 #define MPS2_VGA_BUFFER         (0x41100000ul)       /* VGA Buffer Base Address */
-#define MPS2_VGA_TEXT_BUFFER    (0x41000000ul)       /* VGA Text Buffer Address */
 
 /******************************************************************************/
 /*                         Peripheral declaration                             */
@@ -575,11 +589,16 @@
 #define SMSC9220                ((SMSC9220_TypeDef      *) SMSC9220_BASE )
 #define MPS2_TS_I2C             ((MPS2_I2C_TypeDef      *) MPS2_TSC_I2C_BASE )
 #define MPS2_AAIC_I2C           ((MPS2_I2C_TypeDef      *) MPS2_AAIC_I2C_BASE )
+#define MPS2_SHIELD0_I2C        ((MPS2_I2C_TypeDef      *) MPS2_SHIELD0_I2C_BASE )
+#define MPS2_SHIELD1_I2C        ((MPS2_I2C_TypeDef      *) MPS2_SHIELD1_I2C_BASE )
 #define MPS2_AAIC_I2S           ((MPS2_I2S_TypeDef      *) MPS2_AAIC_I2S_BASE )
 #define MPS2_FPGAIO             ((MPS2_FPGAIO_TypeDef   *) MPS2_FPGAIO_BASE )
 #define MPS2_SCC                ((MPS2_SCC_TypeDef      *) MPS2_SCC_BASE )
 #define MPS2_SSP0               ((MPS2_SSP_TypeDef      *) MPS2_SSP0_BASE )
 #define MPS2_SSP1               ((MPS2_SSP_TypeDef      *) MPS2_SSP1_BASE )
+#define MPS2_SSP2               ((MPS2_SSP_TypeDef      *) MPS2_SSP2_BASE )    
+#define MPS2_SSP3               ((MPS2_SSP_TypeDef      *) MPS2_SSP3_BASE )    
+#define MPS2_SSP4               ((MPS2_SSP_TypeDef      *) MPS2_SSP4_BASE )    
 
 /******************************************************************************/
 /*                     General Function Definitions                           */
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/TOOLCHAIN_ARM_STD/MPS2.sct	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/TOOLCHAIN_ARM_STD/MPS2.sct	Wed Mar 02 14:30:11 2016 +0000
@@ -1,33 +1,33 @@
 ;* MPS2 CMSIS Library
 ;*
-;* Copyright (c) 2006-2015 ARM Limited
+;* Copyright (c) 2006-2016 ARM Limited
 ;* All rights reserved.
-;* 
-;* Redistribution and use in source and binary forms, with or without 
+;*
+;* 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, 
+;*
+;* 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 
+;*
+;* 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. Neither the name of the copyright holder nor the names of its contributors 
-;* may be used to endorse or promote products derived from this software without 
+;*
+;* 3. Neither the name of the copyright holder nor the names of its contributors
+;* may be used to endorse or promote products derived from this software without
 ;* specific prior written permission.
-;* 
-;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-;* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-;* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-;* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+;*
+;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+;* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+;* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 ;*
 ; *************************************************************
 ; *** Scatter-Loading Description File                      ***
@@ -39,8 +39,8 @@
    *(InRoot$$Sections)
    .ANY (+RO)
   }
-  ; Total: 48 vectors = 192 bytes (0x0C0) to be reserved in RAM
-  RW_IRAM1 (0x20000000+0xC0) (0x400000-0xC0)  {  ; RW data
+  ; Total: 64 vectors = 256 bytes (0x100) to be reserved in RAM
+  RW_IRAM1 (0x20000000+0x100) (0x400000-0x100)  {  ; RW data
    .ANY (+RW +ZI)
   }
 }
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/TOOLCHAIN_ARM_STD/startup_MPS2.s	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/TOOLCHAIN_ARM_STD/startup_MPS2.s	Wed Mar 02 14:30:11 2016 +0000
@@ -1,43 +1,42 @@
-;/**************************************************************************//**
-; * @file     startup_CMSDK_CM3.s
-; * @brief    CMSIS Core Device Startup File for
-; *           CMSDK_CM3 Device
-; * @version  V3.02
-; * @date     15. November 2013
-; *
-; * @note
-; * Copyright (C) 2014 ARM Limited. All rights reserved.
-; *
-; ******************************************************************************/
-;/* Copyright (c) 2011 - 2013 ARM LIMITED
+; MPS2 CMSIS Library
+;
+; Copyright (c) 2006-2016 ARM Limited
+; All rights reserved.
+;
+; 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. Neither the name of the copyright holder nor the names of its contributors
+; may be used to endorse or promote products derived from this software without
+; specific prior written permission.
 ;
-;   All rights reserved.
-;   Redistribution and use in source and binary forms, with or without
-;   modification, are permitted provided that the following conditions are met:
-;   - Redistributions of source code must retain the above copyright
-;     notice, this list of conditions and the following disclaimer.
-;   - 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.
-;   - Neither the name of ARM nor the names of its contributors may be used
-;     to endorse or promote products derived from this software without
-;     specific prior written permission.
-; *
-;   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-;   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-;   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-;   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS 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.
-;   ---------------------------------------------------------------------------*/
-;/*
-;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
-;*/
+; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
+;******************************************************************************
+; @file     startup_CMSDK_CM3.s
+; @brief    CMSIS Core Device Startup File for
+;           CMSDK_CM3 Device
+;
+;******************************************************************************
+;
+;-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
+;
 
 
 ; <h> Stack Configuration
@@ -108,22 +107,22 @@
                 DCD     ETHERNET_Handler          ; Ethernet Overflow Handler
                 DCD     I2S_Handler               ; I2S Handler
                 DCD     TSC_Handler               ; Touch Screen handler
-                DCD     PORT0_0_Handler           ; GPIO Port 0 pin 0 Handler
-                DCD     PORT0_1_Handler           ; GPIO Port 0 pin 1 Handler
-                DCD     PORT0_2_Handler           ; GPIO Port 0 pin 2 Handler
-                DCD     PORT0_3_Handler           ; GPIO Port 0 pin 3 Handler
-                DCD     PORT0_4_Handler           ; GPIO Port 0 pin 4 Handler
-                DCD     PORT0_5_Handler           ; GPIO Port 0 pin 5 Handler
-                DCD     PORT0_6_Handler           ; GPIO Port 0 pin 6 Handler
-                DCD     PORT0_7_Handler           ; GPIO Port 0 pin 7 Handler
-                DCD     PORT0_8_Handler           ; GPIO Port 0 pin 8 Handler
-                DCD     PORT0_9_Handler           ; GPIO Port 0 pin 9 Handler
-                DCD     PORT0_10_Handler          ; GPIO Port 0 pin 10 Handler
-                DCD     PORT0_11_Handler          ; GPIO Port 0 pin 11 Handler
-                DCD     PORT0_12_Handler          ; GPIO Port 0 pin 12 Handler
-                DCD     PORT0_13_Handler          ; GPIO Port 0 pin 13 Handler
-                DCD     PORT0_14_Handler          ; GPIO Port 0 pin 14 Handler
-                DCD     PORT0_15_Handler          ; GPIO Port 0 pin 15 Handler
+                DCD     PORT2_COMB_Handler        ; GPIO Port 2 Combined Handler
+                DCD     PORT3_COMB_Handler        ; GPIO Port 3 Combined Handler
+                DCD     UARTRX3_Handler           ; UART 3 RX Handler
+                DCD     UARTTX3_Handler           ; UART 3 TX Handler
+                DCD     UARTRX4_Handler           ; UART 4 RX Handler
+                DCD     UARTTX4_Handler           ; UART 4 TX Handler
+                DCD     ADCSPI_Handler            ; SHIELD ADC SPI exceptions Handler
+                DCD     SHIELDSPI_Handler         ; SHIELD SPI exceptions Handler
+                DCD     PORT0_0_Handler           ; GPIO Port 0 pin 0 Handler                                    
+                DCD     PORT0_1_Handler           ; GPIO Port 0 pin 1 Handler                                    
+                DCD     PORT0_2_Handler           ; GPIO Port 0 pin 2 Handler                                    
+                DCD     PORT0_3_Handler           ; GPIO Port 0 pin 3 Handler                                    
+                DCD     PORT0_4_Handler           ; GPIO Port 0 pin 4 Handler                                    
+                DCD     PORT0_5_Handler           ; GPIO Port 0 pin 5 Handler                                    
+                DCD     PORT0_6_Handler           ; GPIO Port 0 pin 6 Handler                                    
+                DCD     PORT0_7_Handler           ; GPIO Port 0 pin 7 Handler                                    
 __Vectors_End
 
 __Vectors_Size  EQU     __Vectors_End - __Vectors
@@ -205,6 +204,14 @@
                 EXPORT ETHERNET_Handler           [WEAK]
                 EXPORT I2S_Handler                [WEAK]
                 EXPORT TSC_Handler                [WEAK]
+                EXPORT PORT2_COMB_Handler         [WEAK]
+                EXPORT PORT3_COMB_Handler         [WEAK]
+                EXPORT UARTRX3_Handler            [WEAK]
+                EXPORT UARTTX3_Handler            [WEAK]
+                EXPORT UARTRX4_Handler            [WEAK]
+                EXPORT UARTTX4_Handler            [WEAK]
+                EXPORT ADCSPI_Handler             [WEAK]
+                EXPORT SHIELDSPI_Handler          [WEAK]
                 EXPORT PORT0_0_Handler            [WEAK]
                 EXPORT PORT0_1_Handler            [WEAK]
                 EXPORT PORT0_2_Handler            [WEAK]
@@ -213,14 +220,6 @@
                 EXPORT PORT0_5_Handler            [WEAK]
                 EXPORT PORT0_6_Handler            [WEAK]
                 EXPORT PORT0_7_Handler            [WEAK]
-                EXPORT PORT0_8_Handler            [WEAK]
-                EXPORT PORT0_9_Handler            [WEAK]
-                EXPORT PORT0_10_Handler           [WEAK]
-                EXPORT PORT0_11_Handler           [WEAK]
-                EXPORT PORT0_12_Handler           [WEAK]
-                EXPORT PORT0_13_Handler           [WEAK]
-                EXPORT PORT0_14_Handler           [WEAK]
-                EXPORT PORT0_15_Handler           [WEAK]
 
 UARTRX0_Handler
 UARTTX0_Handler
@@ -238,22 +237,22 @@
 ETHERNET_Handler
 I2S_Handler
 TSC_Handler
-PORT0_0_Handler
-PORT0_1_Handler
-PORT0_2_Handler
-PORT0_3_Handler
-PORT0_4_Handler
-PORT0_5_Handler
-PORT0_6_Handler
-PORT0_7_Handler
-PORT0_8_Handler
-PORT0_9_Handler
-PORT0_10_Handler
-PORT0_11_Handler
-PORT0_12_Handler
-PORT0_13_Handler
-PORT0_14_Handler
-PORT0_15_Handler
+PORT2_COMB_Handler       
+PORT3_COMB_Handler       
+UARTRX3_Handler          
+UARTTX3_Handler          
+UARTRX4_Handler          
+UARTTX4_Handler          
+ADCSPI_Handler           
+SHIELDSPI_Handler        
+PORT0_0_Handler                                   
+PORT0_1_Handler                                   
+PORT0_2_Handler                                   
+PORT0_3_Handler                                   
+PORT0_4_Handler                                   
+PORT0_5_Handler                                   
+PORT0_6_Handler                                   
+PORT0_7_Handler                                   
                 B       .
 
                 ENDP
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/cmsis.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/cmsis.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,33 +1,33 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * A generic CMSIS include header, pulling in MPS2 specifics
 *******************************************************************************/
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/cmsis_nvic.c	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/cmsis_nvic.c	Wed Mar 02 14:30:11 2016 +0000
@@ -1,33 +1,33 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * CMSIS-style functionality to support dynamic vectors
 *******************************************************************************/
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/cmsis_nvic.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/cmsis_nvic.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,33 +1,33 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * CMSIS-style functionality to support dynamic vectors
 *******************************************************************************/
@@ -37,7 +37,7 @@
 
 #include "cmsis.h"
 
-#define NVIC_NUM_VECTORS      (16 + 32)
+#define NVIC_NUM_VECTORS      (16 + 48)
 #define NVIC_USER_IRQ_OFFSET  16
 
 #ifdef __cplusplus
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/peripherallink.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/peripherallink.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,33 +1,33 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * Name:    Device.h
 * Purpose: Include the correct device header file
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/system_CMSDK_CM3.c	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/system_CMSDK_CM3.c	Wed Mar 02 14:30:11 2016 +0000
@@ -1,41 +1,37 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * @file     system_CMSDK_CM3.c
 * @brief    CMSIS Device System Source File for
 *           CMSDK_M3 Device
-* @version  V3.02
-* @date     15. November 2013
-*
-* @note
 *
 *******************************************************************************/
 
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/system_CMSDK_CM3.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M3/system_CMSDK_CM3.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,42 +1,38 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *
 *******************************************************************************
 * @file     system_CMSDK_CM3.h
 * @brief    CMSIS Device Peripheral Access Layer Header File for
 *           CMSDK_CM3 Device
-* @version  V3.02
-* @date     15. March 2013
-*
-* @note
 *
 ******************************************************************************/
 
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/CMSDK_CM4.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/CMSDK_CM4.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,41 +1,37 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * @file     CMSDK_CM4.h
 * @brief    CMSIS Cortex-M4 Core Peripheral Access Layer Header File for
 *           Device CMSDK_CM4
-* @version  V3.01
-* @date     06. March 2012
-*
-* @note     configured for CM7 without FPU
 *
 *******************************************************************************/
 
@@ -45,80 +41,57 @@
 
 #ifdef __cplusplus
  extern "C" {
-#endif 
-
-/** @addtogroup CMSDK_CM4_Definitions CMSDK_CM4 Definitions
-  This file defines all structures and symbols for CMSDK_CM4:
-    - registers and bitfields
-    - peripheral base address
-    - peripheral ID
-    - Peripheral definitions
-  @{
-*/
+#endif
 
 
-/******************************************************************************/
-/*                Processor and Core Peripherals                              */
-/******************************************************************************/
-/** @addtogroup CMSDK_CM4_CMSIS Device CMSIS Definitions
-  Configuration of the Cortex-M4 Processor and Core Peripherals
-  @{
-*/
-
-/*
- * ==========================================================================
- * ---------- Interrupt Number Definition -----------------------------------
- * ==========================================================================
- */
+/* -------------------------  Interrupt Number Definition  ------------------------ */
 
 typedef enum IRQn
 {
-/******  Cortex-M4 Processor Exceptions Numbers ***************************************************/
-  NonMaskableInt_IRQn           = -14,      /*!<  2 Cortex-M4 Non Maskable Interrupt              */
-  MemoryManagement_IRQn         = -12,      /*!<  4 Cortex-M4 Memory Management Interrupt         */
-  BusFault_IRQn                 = -11,      /*!<  5 Cortex-M4 Bus Fault Interrupt                 */
-  UsageFault_IRQn               = -10,      /*!<  6 Cortex-M4 Usage Fault Interrupt               */
-  SVCall_IRQn                   = -5,       /*!< 11 Cortex-M4 SV Call Interrupt                   */
-  DebugMonitor_IRQn             = -4,       /*!< 12 Cortex-M4 Debug Monitor Interrupt             */
-  PendSV_IRQn                   = -2,       /*!< 14 Cortex-M4 Pend SV Interrupt                   */
-  SysTick_IRQn                  = -1,       /*!< 15 Cortex-M4 System Tick Interrupt               */
+/* -------------------  Cortex-M3 Processor Exceptions Numbers  ------------------- */
+  NonMaskableInt_IRQn           = -14,        /*  2 Non Maskable Interrupt          */
+  HardFault_IRQn                = -13,        /*  3 HardFault Interrupt             */
+  MemoryManagement_IRQn         = -12,        /*  4 Memory Management Interrupt     */
+  BusFault_IRQn                 = -11,        /*  5 Bus Fault Interrupt             */
+  UsageFault_IRQn               = -10,        /*  6 Usage Fault Interrupt           */
+  SVCall_IRQn                   =  -5,        /* 11 SV Call Interrupt               */
+  DebugMonitor_IRQn             =  -4,        /* 12 Debug Monitor Interrupt         */
+  PendSV_IRQn                   =  -2,        /* 14 Pend SV Interrupt               */
+  SysTick_IRQn                  =  -1,        /* 15 System Tick Interrupt           */
 
-/******  CMSDK Specific Interrupt Numbers *******************************************************/
-  UARTRX0_IRQn                  = 0,       /*!< UART 0 RX Interrupt                              */
-  UARTTX0_IRQn                  = 1,       /*!< UART 0 TX Interrupt                              */
-  UARTRX1_IRQn                  = 2,       /*!< UART 1 RX Interrupt                              */
-  UARTTX1_IRQn                  = 3,       /*!< UART 1 TX Interrupt                              */
-  UARTRX2_IRQn                  = 4,       /*!< UART 2 RX Interrupt                              */
-  UARTTX2_IRQn                  = 5,       /*!< UART 2 TX Interrupt                              */
-//  UARTRX3_IRQn                  = 6,       /*!< UART 2 RX Interrupt //only used in extended version                             */
-//  UARTTX3_IRQn                  = 7,       /*!< UART 2 TX Interrupt //only used in extended version                             */
-  PORT0_ALL_IRQn                = 6,       /*!< Port 1 combined Interrupt                        */
-  PORT1_ALL_IRQn                = 7,       /*!< Port 1 combined Interrupt                        */
-  TIMER0_IRQn                   = 8,       /*!< TIMER 0 Interrupt                                */
-  TIMER1_IRQn                   = 9,       /*!< TIMER 1 Interrupt                                */
-  DUALTIMER_IRQn                = 10,      /*!< Dual Timer Interrupt                             */
-  SPI_IRQn                      = 11,      /*!< SPI Interrupt                                    */
-  UARTOVF_IRQn                  = 12,      /*!< UART 0,1,2 Overflow Interrupt                    */
-  ETHERNET_IRQn                 = 13,      /*!< Ethernet Interrupt                               */
-  I2S_IRQn                      = 14,      /*!< I2S Interrupt                                    */
-  TSC_IRQn                      = 15,      /* Touch Screen Interrupt                */
-//  DMA_IRQn                      = 15,      /* PL230 DMA Done + Error Interrupt      */
-  PORT0_0_IRQn                  = 16,      /*!< All P0 I/O pins can be used as interrupt source. */
-  PORT0_1_IRQn                  = 17,      /*!< There are 16 pins in total                       */
-  PORT0_2_IRQn                  = 18,
-  PORT0_3_IRQn                  = 19,
-  PORT0_4_IRQn                  = 20,
-  PORT0_5_IRQn                  = 21,
-  PORT0_6_IRQn                  = 22,
-  PORT0_7_IRQn                  = 23,
-  PORT0_8_IRQn                  = 24,
-  PORT0_9_IRQn                  = 25,
-  PORT0_10_IRQn                 = 26,
-  PORT0_11_IRQn                 = 27,
-  PORT0_12_IRQn                 = 28,
-  PORT0_13_IRQn                 = 29,
-  PORT0_14_IRQn                 = 30,
-  PORT0_15_IRQn                 = 31,
+/******  CMSDK Specific Interrupt Numbers *********************************************************/
+  UARTRX0_IRQn                  = 0,       /*!< UART 0 RX Interrupt                               */
+  UARTTX0_IRQn                  = 1,       /*!< UART 0 TX Interrupt                               */
+  UARTRX1_IRQn                  = 2,       /*!< UART 1 RX Interrupt                               */
+  UARTTX1_IRQn                  = 3,       /*!< UART 1 TX Interrupt                               */
+  UARTRX2_IRQn                  = 4,       /*!< UART 2 RX Interrupt                               */
+  UARTTX2_IRQn                  = 5,       /*!< UART 2 TX Interrupt                               */
+  PORT0_ALL_IRQn                = 6,       /*!< Port 0 combined Interrupt                         */
+  PORT1_ALL_IRQn                = 7,       /*!< Port 1 combined Interrupt                         */
+  TIMER0_IRQn                   = 8,       /*!< TIMER 0 Interrupt                                 */
+  TIMER1_IRQn                   = 9,       /*!< TIMER 1 Interrupt                                 */
+  DUALTIMER_IRQn                = 10,      /*!< Dual Timer Interrupt                              */
+  SPI_IRQn                      = 11,      /*!< SPI Interrupt                                     */
+  UARTOVF_IRQn                  = 12,      /*!< UART 0,1,2 Overflow Interrupt                     */
+  ETHERNET_IRQn                 = 13,      /*!< Ethernet Interrupt                                */
+  I2S_IRQn                      = 14,      /*!< I2S Interrupt                                     */
+  TSC_IRQn                      = 15,      /*!< Touch Screen Interrupt                            */
+  PORT2_ALL_IRQn                = 16,      /*!< Port 2 combined Interrupt                         */
+  PORT3_ALL_IRQn                = 17,      /*!< Port 3 combined Interrupt                         */
+  UARTRX3_IRQn                  = 18,      /*!< UART 3 RX Interrupt                               */
+  UARTTX3_IRQn                  = 19,      /*!< UART 3 TX Interrupt                               */
+  UARTRX4_IRQn                  = 20,      /*!< UART 4 RX Interrupt                               */
+  UARTTX4_IRQn                  = 21,      /*!< UART 4 TX Interrupt                               */
+  ADCSPI_IRQn                   = 22,      /*!< SHIELD ADC SPI Interrupt                          */
+  SHIELDSPI_IRQn                = 23,      /*!< SHIELD SPI Combined Interrupt                     */
+  PORT0_0_IRQn                  = 24,      /*!<  GPIO Port 0 pin 0 Interrupt                      */
+  PORT0_1_IRQn                  = 25,      /*!<  GPIO Port 0 pin 1 Interrupt                      */
+  PORT0_2_IRQn                  = 26,      /*!<  GPIO Port 0 pin 2 Interrupt                      */
+  PORT0_3_IRQn                  = 27,      /*!<  GPIO Port 0 pin 3 Interrupt                      */
+  PORT0_4_IRQn                  = 28,      /*!<  GPIO Port 0 pin 4 Interrupt                      */
+  PORT0_5_IRQn                  = 29,      /*!<  GPIO Port 0 pin 5 Interrupt                      */
+  PORT0_6_IRQn                  = 30,      /*!<  GPIO Port 0 pin 6 Interrupt                      */
+  PORT0_7_IRQn                  = 31,      /*!<  GPIO Port 0 pin 7 Interrupt                      */
 } IRQn_Type;
 
 
@@ -285,23 +258,23 @@
   __IO uint32_t Timer1Load;                  /* Offset: 0x000 (R/W) Timer 1 Load */
   __I  uint32_t Timer1Value;                 /* Offset: 0x004 (R/ ) Timer 1 Counter Current Value */
   __IO uint32_t Timer1Control;               /* Offset: 0x008 (R/W) Timer 1 Control */
-                              //   <o.7> TimerEn: Timer Enable
-                              //   <o.6> TimerMode: Timer Mode
-                              //     <0=> Freerunning-mode
-                              //     <1=> Periodic mode
-                              //   <o.5> IntEnable: Interrupt Enable
-                              //   <o.2..3> TimerPre: Timer Prescale
-                              //     <0=> / 1
-                              //     <1=> / 16
-                              //     <2=> / 256
-                              //     <3=> Undefined!
-                              //   <o.1> TimerSize: Timer Size
-                              //     <0=> 16-bit counter
-                              //     <1=> 32-bit counter
-                              //   <o.0> OneShot: One-shoot mode
-                              //     <0=> Wrapping mode
-                              //     <1=> One-shot mode
-                              // </h>
+                                             /* <o.7> TimerEn: Timer Enable         */
+                                             /* <o.6> TimerMode: Timer Mode         */
+                                             /*   <0=> Freerunning-mode             */
+                                             /*   <1=> Periodic mode                */
+                                             /* <o.5> IntEnable: Interrupt Enable   */
+                                             /* <o.2..3> TimerPre: Timer Prescale   */
+                                             /*   <0=> / 1                          */
+                                             /*   <1=> / 16                         */
+                                             /*   <2=> / 256                        */
+                                             /*   <3=> Undefined!                   */
+                                             /* <o.1> TimerSize: Timer Size         */
+                                             /*   <0=> 16-bit counter               */
+                                             /*   <1=> 32-bit counter               */
+                                             /* <o.0> OneShot: One-shoot mode       */
+                                             /*   <0=> Wrapping mode                */
+                                             /*   <1=> One-shot mode                */
+                                             /* </h>                                */
   __O  uint32_t Timer1IntClr;                /* Offset: 0x00C ( /W) Timer 1 Interrupt Clear */
   __I  uint32_t Timer1RIS;                   /* Offset: 0x010 (R/ ) Timer 1 Raw Interrupt Status */
   __I  uint32_t Timer1MIS;                   /* Offset: 0x014 (R/ ) Timer 1 Masked Interrupt Status */
@@ -310,23 +283,23 @@
   __IO uint32_t Timer2Load;                  /* Offset: 0x020 (R/W) Timer 2 Load */
   __I  uint32_t Timer2Value;                 /* Offset: 0x024 (R/ ) Timer 2 Counter Current Value */
   __IO uint32_t Timer2Control;               /* Offset: 0x028 (R/W) Timer 2 Control */
-                              //   <o.7> TimerEn: Timer Enable
-                              //   <o.6> TimerMode: Timer Mode
-                              //     <0=> Freerunning-mode
-                              //     <1=> Periodic mode
-                              //   <o.5> IntEnable: Interrupt Enable
-                              //   <o.2..3> TimerPre: Timer Prescale
-                              //     <0=> / 1
-                              //     <1=> / 16
-                              //     <2=> / 256
-                              //     <3=> Undefined!
-                              //   <o.1> TimerSize: Timer Size
-                              //     <0=> 16-bit counter
-                              //     <1=> 32-bit counter
-                              //   <o.0> OneShot: One-shoot mode
-                              //     <0=> Wrapping mode
-                              //     <1=> One-shot mode
-                              // </h>
+                                             /* <o.7> TimerEn: Timer Enable         */
+                                             /* <o.6> TimerMode: Timer Mode         */
+                                             /*   <0=> Freerunning-mode             */
+                                             /*   <1=> Periodic mode                */
+                                             /* <o.5> IntEnable: Interrupt Enable   */
+                                             /* <o.2..3> TimerPre: Timer Prescale   */
+                                             /*   <0=> / 1                          */
+                                             /*   <1=> / 16                         */
+                                             /*   <2=> / 256                        */
+                                             /*   <3=> Undefined!                   */
+                                             /* <o.1> TimerSize: Timer Size         */
+                                             /*   <0=> 16-bit counter               */
+                                             /*   <1=> 32-bit counter               */
+                                             /* <o.0> OneShot: One-shoot mode       */
+                                             /*   <0=> Wrapping mode                */
+                                             /*   <1=> One-shot mode                */
+                                             /* </h>                                */
   __O  uint32_t Timer2IntClr;                /* Offset: 0x02C ( /W) Timer 2 Interrupt Clear */
   __I  uint32_t Timer2RIS;                   /* Offset: 0x030 (R/ ) Timer 2 Raw Interrupt Status */
   __I  uint32_t Timer2MIS;                   /* Offset: 0x034 (R/ ) Timer 2 Masked Interrupt Status */
@@ -413,23 +386,23 @@
   __IO uint32_t TimerLoad;                   /* Offset: 0x000 (R/W) Timer Load */
   __I  uint32_t TimerValue;                  /* Offset: 0x000 (R/W) Timer Counter Current Value */
   __IO uint32_t TimerControl;                /* Offset: 0x000 (R/W) Timer Control */
-                              //   <o.7> TimerEn: Timer Enable
-                              //   <o.6> TimerMode: Timer Mode
-                              //     <0=> Freerunning-mode
-                              //     <1=> Periodic mode
-                              //   <o.5> IntEnable: Interrupt Enable
-                              //   <o.2..3> TimerPre: Timer Prescale
-                              //     <0=> / 1
-                              //     <1=> / 16
-                              //     <2=> / 256
-                              //     <3=> Undefined!
-                              //   <o.1> TimerSize: Timer Size
-                              //     <0=> 16-bit counter
-                              //     <1=> 32-bit counter
-                              //   <o.0> OneShot: One-shoot mode
-                              //     <0=> Wrapping mode
-                              //     <1=> One-shot mode
-                              // </h>
+                                             /* <o.7> TimerEn: Timer Enable         */
+                                             /* <o.6> TimerMode: Timer Mode         */
+                                             /*   <0=> Freerunning-mode             */
+                                             /*   <1=> Periodic mode                */
+                                             /* <o.5> IntEnable: Interrupt Enable   */
+                                             /* <o.2..3> TimerPre: Timer Prescale   */
+                                             /*   <0=> / 1                          */
+                                             /*   <1=> / 16                         */
+                                             /*   <2=> / 256                        */
+                                             /*   <3=> Undefined!                   */
+                                             /* <o.1> TimerSize: Timer Size         */
+                                             /*   <0=> 16-bit counter               */
+                                             /*   <1=> 32-bit counter               */
+                                             /* <o.0> OneShot: One-shoot mode       */
+                                             /*   <0=> Wrapping mode                */
+                                             /*   <1=> One-shot mode                */
+                                             /* </h>                                */
   __O  uint32_t TimerIntClr;                 /* Offset: 0x000 (R/W) Timer Interrupt Clear */
   __I  uint32_t TimerRIS;                    /* Offset: 0x000 (R/W) Timer Raw Interrupt Status */
   __I  uint32_t TimerMIS;                    /* Offset: 0x000 (R/W) Timer Masked Interrupt Status */
@@ -1146,9 +1119,9 @@
   __IO    uint32_t  LOAD;                   /* Offset: 0x000 (R/W) Watchdog Load Register */
   __I     uint32_t  VALUE;                  /* Offset: 0x004 (R/ ) Watchdog Value Register */
   __IO    uint32_t  CTRL;                   /* Offset: 0x008 (R/W) Watchdog Control Register */
-                                   //   <o.1>    RESEN: Reset enable
-                                   //   <o.0>    INTEN: Interrupt enable
-                                   // </h>
+                                            /*    <o.1>    RESEN: Reset enable               */
+                                            /*    <o.0>    INTEN: Interrupt enable           */
+                                            /*    </h>                                       */
   __O     uint32_t  INTCLR;                 /* Offset: 0x00C ( /W) Watchdog Clear Interrupt Register */
   __I     uint32_t  RAWINTSTAT;             /* Offset: 0x010 (R/ ) Watchdog Raw Interrupt Status Register */
   __I     uint32_t  MASKINTSTAT;            /* Offset: 0x014 (R/ ) Watchdog Interrupt Status Register */
@@ -1278,8 +1251,9 @@
 #define CMSDK_UART0_BASE        (CMSDK_APB_BASE + 0x4000UL)
 #define CMSDK_UART1_BASE        (CMSDK_APB_BASE + 0x5000UL)
 #define CMSDK_UART2_BASE        (CMSDK_APB_BASE + 0x6000UL)
-//#define CMSDK_UART3_BASE        (CMSDK_APB_BASE + 0x7000UL) //only used in extended version
+#define CMSDK_UART3_BASE        (CMSDK_APB_BASE + 0x7000UL)
 #define CMSDK_WATCHDOG_BASE     (CMSDK_APB_BASE + 0x8000UL)
+#define CMSDK_UART4_BASE        (CMSDK_APB_BASE + 0x9000UL)
 #define CMSDK_PL230_BASE        (CMSDK_APB_BASE + 0xF000UL)
 
 /* AHB peripherals                                                           */
@@ -1301,9 +1275,10 @@
 #define CMSDK_UART0             ((CMSDK_UART_TypeDef   *) CMSDK_UART0_BASE )
 #define CMSDK_UART1             ((CMSDK_UART_TypeDef   *) CMSDK_UART1_BASE )
 #define CMSDK_UART2             ((CMSDK_UART_TypeDef   *) CMSDK_UART2_BASE )
-//#define CMSDK_UART3             ((CMSDK_UART_TypeDef   *) CMSDK_UART2_BASE ) //only used in extended version
-#define CMSDK_TIMER0            ((CMSDK_TIMER_TypeDef  *) CMSDK_TIMER0_BASE )
-#define CMSDK_TIMER1            ((CMSDK_TIMER_TypeDef  *) CMSDK_TIMER1_BASE )
+#define CMSDK_UART3             ((CMSDK_UART_TypeDef   *) CMSDK_UART3_BASE   )
+#define CMSDK_UART4             ((CMSDK_UART_TypeDef   *) CMSDK_UART4_BASE   )
+#define CMSDK_TIMER0            ((CMSDK_TIMER_TypeDef  *) CMSDK_TIMER0_BASE  )
+#define CMSDK_TIMER1            ((CMSDK_TIMER_TypeDef  *) CMSDK_TIMER1_BASE  )
 #define CMSDK_DUALTIMER         ((CMSDK_DUALTIMER_BOTH_TypeDef  *) CMSDK_DUALTIMER_BASE )
 #define CMSDK_DUALTIMER1        ((CMSDK_DUALTIMER_SINGLE_TypeDef  *) CMSDK_DUALTIMER_1_BASE )
 #define CMSDK_DUALTIMER2        ((CMSDK_DUALTIMER_SINGLE_TypeDef  *) CMSDK_DUALTIMER_2_BASE )
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/SMM_MPS2.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/SMM_MPS2.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,36 +1,36 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * File:     smm_mps2.h
-* Release:  Version 1.0
+* Release:  Version 1.1
 *******************************************************************************/
 
 #ifndef __SMM_MPS2_H
@@ -46,7 +46,7 @@
 /*                          FPGA System Register declaration                  */
 /******************************************************************************/
 
-typedef struct                   
+typedef struct
 {
   __IO uint32_t LED;             // Offset: 0x000 (R/W)  LED connections
                                  //                         [31:2] : Reserved
@@ -65,11 +65,14 @@
                                  //                         Bit[31:0] : reload value for prescale counter
   __IO uint32_t PSCNTR;          // Offset: 0x024 (R/W)  32-bit Prescale counter
                                  //                         current value of the pre-scaler counter
-								 //                         The Cycle Up Counter increment when the prescale down counter reach 0
-								 //                         The pre-scaler counter is reloaded with PRESCALE after reaching 0.
+                                 //                         The Cycle Up Counter increment when the prescale down counter reach 0
+                                 //                         The pre-scaler counter is reloaded with PRESCALE after reaching 0.
        uint32_t RESERVED4[9];
   __IO uint32_t MISC;            // Offset: 0x04C (R/W)  Misc control */
-                                 //                         [31:7] : Reserved
+                                 //                         [31:10] : Reserved
+                                 //                            [9] : SHIELD_1_SPI_nCS
+                                 //                            [8] : SHIELD_0_SPI_nCS
+                                 //                            [7] : ADC_SPI_nCS
                                  //                            [6] : CLCD_BL_CTRL
                                  //                            [5] : CLCD_RD
                                  //                            [4] : CLCD_RS
@@ -93,12 +96,18 @@
 #define CLCD_RD_Msk        (1UL<<CLCD_RD_Pos)
 #define CLCD_BL_Pos        6
 #define CLCD_BL_Msk        (1UL<<CLCD_BL_Pos)
+#define ADC_nCS_Pos        7
+#define ADC_nCS_Msk        (1UL<<ADC_nCS_Pos)
+#define SHIELD_0_nCS_Pos        8
+#define SHIELD_0_nCS_Msk        (1UL<<SHIELD_0_nCS_Pos)
+#define SHIELD_1_nCS_Pos        9
+#define SHIELD_1_nCS_Msk        (1UL<<SHIELD_1_nCS_Pos)
 
 /******************************************************************************/
 /*                        SCC Register declaration                            */
 /******************************************************************************/
 
-typedef struct                   // 
+typedef struct                   //
 {
   __IO uint32_t CFG_REG0;        // Offset: 0x000 (R/W)  Remaps block RAM to ZBT
                                  //                         [31:1] : Reserved
@@ -308,10 +317,10 @@
 typedef struct
 {
   union {
-  __O   uint32_t  CONTROLS;     // Offset: 0x000 CONTROL Set Register     ( /W) 
-  __I   uint32_t  CONTROL;      // Offset: 0x000 CONTROL Status Register  (R/ ) 
+  __O   uint32_t  CONTROLS;     // Offset: 0x000 CONTROL Set Register     ( /W)
+  __I   uint32_t  CONTROL;      // Offset: 0x000 CONTROL Status Register  (R/ )
   };
-  __O    uint32_t  CONTROLC;     // Offset: 0x004 CONTROL Clear Register    ( /W)  
+  __O    uint32_t  CONTROLC;     // Offset: 0x004 CONTROL Clear Register    ( /W)
 } MPS2_I2C_TypeDef;
 
 #define SDA                1 << 1
@@ -346,7 +355,7 @@
                               //     <4=> Undefined!
                               //     <5=> Undefined!
                               //     <6=> Undefined!
-                              //     <7=> Undefined!  
+                              //     <7=> Undefined!
                               //   <o.14..12> RX Buffer Water Level
                               //     <0=> Undefined!
                               //     <1=> / IRQ triggers when less than 1 space available
@@ -355,7 +364,7 @@
                               //     <4=> / IRQ triggers when less than 4 space available
                               //     <5=> Undefined!
                               //     <6=> Undefined!
-                              //     <7=> Undefined!  
+                              //     <7=> Undefined!
                               //   <o.16> FIFO reset
                               //     <0=> Normal operation
                               //     <1=> FIFO reset
@@ -363,12 +372,12 @@
                               //     <0=> Normal operation
                               //     <1=> Assert audio Codec reset
   /*!< Offset: 0x004 STATUS Register     (R/ ) */
-  __I    uint32_t  STATUS;  // <h> STATUS </h> 
+  __I    uint32_t  STATUS;  // <h> STATUS </h>
                               //   <o.0> TX Buffer alert
                               //     <0=> TX buffer don't need service yet
                               //     <1=> TX buffer need service
                               //   <o.1> RX Buffer alert
-                              //     <0=> RX buffer don't need service yet 
+                              //     <0=> RX buffer don't need service yet
                               //     <1=> RX buffer need service
                               //   <o.2> TX Buffer Empty
                               //     <0=> TX buffer have data
@@ -383,33 +392,33 @@
                               //     <0=> RX buffer not full
                               //     <1=> RX buffer full
   union {
-   /*!< Offset: 0x008 Error Status Register (R/ ) */  
-    __I    uint32_t  ERROR;  // <h> ERROR </h> 
+   /*!< Offset: 0x008 Error Status Register (R/ ) */
+    __I    uint32_t  ERROR;  // <h> ERROR </h>
                               //   <o.0> TX error
                               //     <0=> Okay
                               //     <1=> TX overrun/underrun
                               //   <o.1> RX error
-                              //     <0=> Okay 
+                              //     <0=> Okay
                               //     <1=> RX overrun/underrun
-   /*!< Offset: 0x008 Error Clear Register  ( /W) */    
-    __O    uint32_t  ERRORCLR;  // <h> ERRORCLR </h> 
+   /*!< Offset: 0x008 Error Clear Register  ( /W) */
+    __O    uint32_t  ERRORCLR;  // <h> ERRORCLR </h>
                               //   <o.0> TX error
                               //     <0=> Okay
                               //     <1=> Clear TX error
                               //   <o.1> RX error
-                              //     <0=> Okay 
+                              //     <0=> Okay
                               //     <1=> Clear RX error
     };
-   /*!< Offset: 0x00C Divide ratio Register (R/W) */  
-  __IO   uint32_t  DIVIDE;  // <h> Divide ratio for Left/Right clock </h> 
-                              //   <o.9..0> TX error (default 0x80)			      
+   /*!< Offset: 0x00C Divide ratio Register (R/W) */
+  __IO   uint32_t  DIVIDE;  // <h> Divide ratio for Left/Right clock </h>
+                              //   <o.9..0> TX error (default 0x80)
    /*!< Offset: 0x010 Transmit Buffer       ( /W) */
-  __O    uint32_t  TXBUF;  // <h> Transmit buffer </h> 
-                              //   <o.15..0> Right channel			      
+  __O    uint32_t  TXBUF;  // <h> Transmit buffer </h>
+                              //   <o.15..0> Right channel
                               //   <o.31..16> Left channel
    /*!< Offset: 0x014 Receive Buffer        (R/ ) */
-  __I    uint32_t  RXBUF;  // <h> Receive buffer </h> 
-                              //   <o.15..0> Right channel			      
+  __I    uint32_t  RXBUF;  // <h> Receive buffer </h>
+                              //   <o.15..0> Right channel
                               //   <o.31..16> Left channel
          uint32_t  RESERVED1[186];
   __IO uint32_t ITCR;         // <h> Integration Test Control Register </h>
@@ -556,7 +565,12 @@
 #define MPS2_TSC_I2C_BASE       (0x40022000ul)       /* Touch Screen I2C Base Address */
 #define MPS2_AAIC_I2C_BASE      (0x40023000ul)       /* Audio Interface I2C Base Address */
 #define MPS2_AAIC_I2S_BASE      (0x40024000ul)       /* Audio Interface I2S Base Address */
+#define MPS2_SSP2_BASE          (0x40025000ul)       /* adc SSP Base Address   */
+#define MPS2_SSP3_BASE          (0x40026000ul)       /* Shield 0 SSP Base Address   */
+#define MPS2_SSP4_BASE          (0x40027000ul)       /* Shield 1 SSP Base Address   */
 #define MPS2_FPGAIO_BASE        (0x40028000ul)       /* FPGAIO Base Address */
+#define MPS2_SHIELD0_I2C_BASE   (0x40029000ul)       /* Shield 0 I2C Base Address */
+#define MPS2_SHIELD1_I2C_BASE   (0x4002A000ul)       /* Shield 1 I2C Base Address */
 #define MPS2_SCC_BASE           (0x4002F000ul)       /* SCC Base Address    */
 
 #ifdef CORTEX_M7
@@ -565,8 +579,8 @@
 #define SMSC9220_BASE           (0x40200000ul)       /* Ethernet SMSC9220 Base Address   */
 #endif
 
+#define MPS2_VGA_TEXT_BUFFER    (0x41000000ul)       /* VGA Text Buffer Address */
 #define MPS2_VGA_BUFFER         (0x41100000ul)       /* VGA Buffer Base Address */
-#define MPS2_VGA_TEXT_BUFFER    (0x41000000ul)       /* VGA Text Buffer Address */
 
 /******************************************************************************/
 /*                         Peripheral declaration                             */
@@ -575,11 +589,16 @@
 #define SMSC9220                ((SMSC9220_TypeDef      *) SMSC9220_BASE )
 #define MPS2_TS_I2C             ((MPS2_I2C_TypeDef      *) MPS2_TSC_I2C_BASE )
 #define MPS2_AAIC_I2C           ((MPS2_I2C_TypeDef      *) MPS2_AAIC_I2C_BASE )
+#define MPS2_SHIELD0_I2C        ((MPS2_I2C_TypeDef      *) MPS2_SHIELD0_I2C_BASE )
+#define MPS2_SHIELD1_I2C        ((MPS2_I2C_TypeDef      *) MPS2_SHIELD1_I2C_BASE )
 #define MPS2_AAIC_I2S           ((MPS2_I2S_TypeDef      *) MPS2_AAIC_I2S_BASE )
 #define MPS2_FPGAIO             ((MPS2_FPGAIO_TypeDef   *) MPS2_FPGAIO_BASE )
 #define MPS2_SCC                ((MPS2_SCC_TypeDef      *) MPS2_SCC_BASE )
 #define MPS2_SSP0               ((MPS2_SSP_TypeDef      *) MPS2_SSP0_BASE )
 #define MPS2_SSP1               ((MPS2_SSP_TypeDef      *) MPS2_SSP1_BASE )
+#define MPS2_SSP2               ((MPS2_SSP_TypeDef      *) MPS2_SSP2_BASE )
+#define MPS2_SSP3               ((MPS2_SSP_TypeDef      *) MPS2_SSP3_BASE )
+#define MPS2_SSP4               ((MPS2_SSP_TypeDef      *) MPS2_SSP4_BASE )
 
 /******************************************************************************/
 /*                     General Function Definitions                           */
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/TOOLCHAIN_ARM_STD/MPS2.sct	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/TOOLCHAIN_ARM_STD/MPS2.sct	Wed Mar 02 14:30:11 2016 +0000
@@ -1,33 +1,33 @@
 ;* MPS2 CMSIS Library
 ;*
-;* Copyright (c) 2006-2015 ARM Limited
+;* Copyright (c) 2006-2016 ARM Limited
 ;* All rights reserved.
-;* 
-;* Redistribution and use in source and binary forms, with or without 
+;*
+;* 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, 
+;*
+;* 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 
+;*
+;* 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. Neither the name of the copyright holder nor the names of its contributors 
-;* may be used to endorse or promote products derived from this software without 
+;*
+;* 3. Neither the name of the copyright holder nor the names of its contributors
+;* may be used to endorse or promote products derived from this software without
 ;* specific prior written permission.
-;* 
-;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-;* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-;* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-;* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+;*
+;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+;* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+;* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+;* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 ;*
 ; *************************************************************
 ; *** Scatter-Loading Description File                      ***
@@ -39,8 +39,8 @@
    *(InRoot$$Sections)
    .ANY (+RO)
   }
-  ; Total: 48 vectors = 192 bytes (0x0C0) to be reserved in RAM
-  RW_IRAM1 (0x20000000+0xC0) (0x400000-0xC0)  {  ; RW data
+  ; Total: 64 vectors = 256 bytes (0x100) to be reserved in RAM
+  RW_IRAM1 (0x20000000+0x100) (0x400000-0x100)  {  ; RW data
    .ANY (+RW +ZI)
   }
 }
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/TOOLCHAIN_ARM_STD/startup_MPS2.s	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/TOOLCHAIN_ARM_STD/startup_MPS2.s	Wed Mar 02 14:30:11 2016 +0000
@@ -1,41 +1,38 @@
 ; MPS2 CMSIS Library
 ;
-; Copyright (c) 2006-2015 ARM Limited
+; Copyright (c) 2006-2016 ARM Limited
 ; All rights reserved.
-; 
-; Redistribution and use in source and binary forms, with or without 
+;
+; 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, 
+;
+; 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 
+;
+; 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. Neither the name of the copyright holder nor the names of its contributors 
-; may be used to endorse or promote products derived from this software without 
+;
+; 3. Neither the name of the copyright holder nor the names of its contributors
+; may be used to endorse or promote products derived from this software without
 ; specific prior written permission.
-; 
-; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+;
+; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 ;******************************************************************************
 ; @file     startup_CMSDK_CM4.s
 ; @brief    CMSIS Core Device Startup File for
 ;           CMSDK_CM4 Device
-; @version  V3.03
-; @date     04. February 2015
 ;
-; @note
 ;******************************************************************************
 ;
 ;-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
@@ -110,22 +107,22 @@
                 DCD     ETHERNET_Handler          ; Ethernet Overflow Handler
                 DCD     I2S_Handler               ; I2S Handler
                 DCD     TSC_Handler               ; Touch Screen handler
-                DCD     PORT0_0_Handler           ; GPIO Port 0 pin 0 Handler
-                DCD     PORT0_1_Handler           ; GPIO Port 0 pin 1 Handler
-                DCD     PORT0_2_Handler           ; GPIO Port 0 pin 2 Handler
-                DCD     PORT0_3_Handler           ; GPIO Port 0 pin 3 Handler
-                DCD     PORT0_4_Handler           ; GPIO Port 0 pin 4 Handler
-                DCD     PORT0_5_Handler           ; GPIO Port 0 pin 5 Handler
-                DCD     PORT0_6_Handler           ; GPIO Port 0 pin 6 Handler
-                DCD     PORT0_7_Handler           ; GPIO Port 0 pin 7 Handler
-                DCD     PORT0_8_Handler           ; GPIO Port 0 pin 8 Handler
-                DCD     PORT0_9_Handler           ; GPIO Port 0 pin 9 Handler
-                DCD     PORT0_10_Handler          ; GPIO Port 0 pin 10 Handler
-                DCD     PORT0_11_Handler          ; GPIO Port 0 pin 11 Handler
-                DCD     PORT0_12_Handler          ; GPIO Port 0 pin 12 Handler
-                DCD     PORT0_13_Handler          ; GPIO Port 0 pin 13 Handler
-                DCD     PORT0_14_Handler          ; GPIO Port 0 pin 14 Handler
-                DCD     PORT0_15_Handler          ; GPIO Port 0 pin 15 Handler
+                DCD     PORT2_COMB_Handler        ; GPIO Port 2 Combined Handler
+                DCD     PORT3_COMB_Handler        ; GPIO Port 3 Combined Handler
+                DCD     UARTRX3_Handler           ; UART 3 RX Handler
+                DCD     UARTTX3_Handler           ; UART 3 TX Handler
+                DCD     UARTRX4_Handler           ; UART 4 RX Handler
+                DCD     UARTTX4_Handler           ; UART 4 TX Handler
+                DCD     ADCSPI_Handler            ; SHIELD ADC SPI exceptions Handler
+                DCD     SHIELDSPI_Handler         ; SHIELD SPI exceptions Handler
+                DCD     PORT0_0_Handler           ; GPIO Port 0 pin 0 Handler                                    
+                DCD     PORT0_1_Handler           ; GPIO Port 0 pin 1 Handler                                    
+                DCD     PORT0_2_Handler           ; GPIO Port 0 pin 2 Handler                                    
+                DCD     PORT0_3_Handler           ; GPIO Port 0 pin 3 Handler                                    
+                DCD     PORT0_4_Handler           ; GPIO Port 0 pin 4 Handler                                    
+                DCD     PORT0_5_Handler           ; GPIO Port 0 pin 5 Handler                                    
+                DCD     PORT0_6_Handler           ; GPIO Port 0 pin 6 Handler                                    
+                DCD     PORT0_7_Handler           ; GPIO Port 0 pin 7 Handler                                    
 __Vectors_End
 
 __Vectors_Size  EQU     __Vectors_End - __Vectors
@@ -207,6 +204,14 @@
                 EXPORT ETHERNET_Handler           [WEAK]
                 EXPORT I2S_Handler                [WEAK]
                 EXPORT TSC_Handler                [WEAK]
+                EXPORT PORT2_COMB_Handler         [WEAK]
+                EXPORT PORT3_COMB_Handler         [WEAK]
+                EXPORT UARTRX3_Handler            [WEAK]
+                EXPORT UARTTX3_Handler            [WEAK]
+                EXPORT UARTRX4_Handler            [WEAK]
+                EXPORT UARTTX4_Handler            [WEAK]
+                EXPORT ADCSPI_Handler             [WEAK]
+                EXPORT SHIELDSPI_Handler          [WEAK]
                 EXPORT PORT0_0_Handler            [WEAK]
                 EXPORT PORT0_1_Handler            [WEAK]
                 EXPORT PORT0_2_Handler            [WEAK]
@@ -215,14 +220,6 @@
                 EXPORT PORT0_5_Handler            [WEAK]
                 EXPORT PORT0_6_Handler            [WEAK]
                 EXPORT PORT0_7_Handler            [WEAK]
-                EXPORT PORT0_8_Handler            [WEAK]
-                EXPORT PORT0_9_Handler            [WEAK]
-                EXPORT PORT0_10_Handler           [WEAK]
-                EXPORT PORT0_11_Handler           [WEAK]
-                EXPORT PORT0_12_Handler           [WEAK]
-                EXPORT PORT0_13_Handler           [WEAK]
-                EXPORT PORT0_14_Handler           [WEAK]
-                EXPORT PORT0_15_Handler           [WEAK]
 
 UARTRX0_Handler
 UARTTX0_Handler
@@ -240,22 +237,22 @@
 ETHERNET_Handler
 I2S_Handler
 TSC_Handler
-PORT0_0_Handler
-PORT0_1_Handler
-PORT0_2_Handler
-PORT0_3_Handler
-PORT0_4_Handler
-PORT0_5_Handler
-PORT0_6_Handler
-PORT0_7_Handler
-PORT0_8_Handler
-PORT0_9_Handler
-PORT0_10_Handler
-PORT0_11_Handler
-PORT0_12_Handler
-PORT0_13_Handler
-PORT0_14_Handler
-PORT0_15_Handler
+PORT2_COMB_Handler       
+PORT3_COMB_Handler       
+UARTRX3_Handler          
+UARTTX3_Handler          
+UARTRX4_Handler          
+UARTTX4_Handler          
+ADCSPI_Handler           
+SHIELDSPI_Handler        
+PORT0_0_Handler                                   
+PORT0_1_Handler                                   
+PORT0_2_Handler                                   
+PORT0_3_Handler                                   
+PORT0_4_Handler                                   
+PORT0_5_Handler                                   
+PORT0_6_Handler                                   
+PORT0_7_Handler                                   
                 B       .
 
                 ENDP
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/cmsis.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/cmsis.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,33 +1,33 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * A generic CMSIS include header, pulling in MPS2 specifics
 *******************************************************************************/
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/cmsis_nvic.c	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/cmsis_nvic.c	Wed Mar 02 14:30:11 2016 +0000
@@ -1,33 +1,33 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * CMSIS-style functionality to support dynamic vectors
 *******************************************************************************/
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/cmsis_nvic.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/cmsis_nvic.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,33 +1,33 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * CMSIS-style functionality to support dynamic vectors
 *******************************************************************************/
@@ -37,7 +37,7 @@
 
 #include "cmsis.h"
 
-#define NVIC_NUM_VECTORS      (16 + 32)
+#define NVIC_NUM_VECTORS      (16 + 48)
 #define NVIC_USER_IRQ_OFFSET  16
 
 #ifdef __cplusplus
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/peripherallink.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/peripherallink.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,33 +1,33 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * Name:    Device.h
 * Purpose: Include the correct device header file
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/system_CMSDK_CM4.c	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/system_CMSDK_CM4.c	Wed Mar 02 14:30:11 2016 +0000
@@ -1,46 +1,41 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *******************************************************************************
 * @file     system_CMSDK_CM4.c
 * @brief    CMSIS Device System Source File for
 *           CMSDK_M4 Device
-* @version  V3.02
-* @date     15. November 2013
-*
-* @note
 *
 *******************************************************************************/
 
 
-
 #include "CMSDK_CM4.h"
 
 /*----------------------------------------------------------------------------
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/system_CMSDK_CM4.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M4/system_CMSDK_CM4.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,42 +1,38 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
-* 
-* Redistribution and use in source and binary forms, with or without 
+*
+* 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, 
+*
+* 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 
+*
+* 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. Neither the name of the copyright holder nor the names of its contributors 
-* may be used to endorse or promote products derived from this software without 
+*
+* 3. Neither the name of the copyright holder nor the names of its contributors
+* may be used to endorse or promote products derived from this software without
 * specific prior written permission.
-* 
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
 *
 *******************************************************************************
 * @file     system_CMSDK_CM4.h
 * @brief    CMSIS Device Peripheral Access Layer Header File for
 *           CMSDK_CM4 Device
-* @version  V3.02
-* @date     15. March 2013
-*
-* @note
 *
 ******************************************************************************/
 
@@ -76,5 +72,4 @@
 #ifdef __cplusplus
 }
 #endif
-
 #endif /* SYSTEM_CMSDK_CM4_H */
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/CMSDK_CM7.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/CMSDK_CM7.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,6 +1,6 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without 
@@ -32,10 +32,6 @@
 * @file     CMSDK_CM7.h
 * @brief    CMSIS Core Peripheral Access Layer Header File for
 *           CMSDK_CM7 Device
-* @version  V1.00
-* @date     27. August 2014
-*
-* @note     configured for CM7 without FPU
 *
 *******************************************************************************/
 
@@ -52,16 +48,16 @@
 
 typedef enum IRQn
 {
-/* -------------------  CM7 Processor Exceptions Numbers  --------------------- */
-  NonMaskableInt_IRQn           = -14,     /*  2 Non Maskable Interrupt             */
-//  HardFault_IRQn                = -13,     /*  3 HardFault Interrupt                */
-  MemoryManagement_IRQn         = -12,     /*  4 Memory Management Interrupt        */
-  BusFault_IRQn                 = -11,     /*  5 Bus Fault Interrupt                */
-  UsageFault_IRQn               = -10,     /*  6 Usage Fault Interrupt              */
-  SVCall_IRQn                   =  -5,     /* 11 SV Call Interrupt                  */
-  DebugMonitor_IRQn             =  -4,     /* 12 Debug Monitor Interrupt            */
-  PendSV_IRQn                   =  -2,     /* 14 Pend SV Interrupt                  */
-  SysTick_IRQn                  =  -1,     /* 15 System Tick Interrupt              */
+/* -------------------  Cortex-M7 Processor Exceptions Numbers  ------------------- */
+  NonMaskableInt_IRQn           = -14,        /*  2 Non Maskable Interrupt          */
+  HardFault_IRQn                = -13,        /*  3 HardFault Interrupt             */
+  MemoryManagement_IRQn         = -12,        /*  4 Memory Management Interrupt     */
+  BusFault_IRQn                 = -11,        /*  5 Bus Fault Interrupt             */
+  UsageFault_IRQn               = -10,        /*  6 Usage Fault Interrupt           */
+  SVCall_IRQn                   =  -5,        /* 11 SV Call Interrupt               */
+  DebugMonitor_IRQn             =  -4,        /* 12 Debug Monitor Interrupt         */
+  PendSV_IRQn                   =  -2,        /* 14 Pend SV Interrupt               */
+  SysTick_IRQn                  =  -1,        /* 15 System Tick Interrupt           */
 
 /* ----------------------  CMSDK_CM7 Specific Interrupt Numbers  -------------- */
   UARTRX0_IRQn                  = 0,       /* UART 0 RX Interrupt                   */
@@ -80,23 +76,22 @@
   ETHERNET_IRQn                 = 13,      /* Ethernet Interrupt                    */
   I2S_IRQn                      = 14,      /* I2S Interrupt                         */
   TSC_IRQn                      = 15,      /* Touch Screen Interrupt                */
-//  DMA_IRQn                      = 15,      /* PL230 DMA Done + Error Interrupt      */
-  PORT0_0_IRQn                  = 16,      /* All P0 I/O pins used as irq source    */
-  PORT0_1_IRQn                  = 17,      /* There are 16 pins in total            */
-  PORT0_2_IRQn                  = 18,
-  PORT0_3_IRQn                  = 19,
-  PORT0_4_IRQn                  = 20,
-  PORT0_5_IRQn                  = 21,
-  PORT0_6_IRQn                  = 22,
-  PORT0_7_IRQn                  = 23,
-  PORT0_8_IRQn                  = 24,
-  PORT0_9_IRQn                  = 25,
-  PORT0_10_IRQn                 = 26,
-  PORT0_11_IRQn                 = 27,
-  PORT0_12_IRQn                 = 28,
-  PORT0_13_IRQn                 = 29,
-  PORT0_14_IRQn                 = 30,
-  PORT0_15_IRQn                 = 31,
+  PORT2_ALL_IRQn                = 16,      /*< Port 2 combined Interrupt                         */
+  PORT3_ALL_IRQn                = 17,      /*< Port 3 combined Interrupt                         */
+  UARTRX3_IRQn                  = 18,      /*< UART 3 RX Interrupt                               */
+  UARTTX3_IRQn                  = 19,      /*< UART 3 TX Interrupt                               */
+  UARTRX4_IRQn                  = 20,      /*< UART 4 RX Interrupt                               */
+  UARTTX4_IRQn                  = 21,      /*< UART 4 TX Interrupt                               */
+  ADCSPI_IRQn                   = 22,      /*< SHIELD ADC SPI Interrupt                          */
+  SHIELDSPI_IRQn                = 23,      /*< SHIELD SPI Combined Interrupt                     */
+  PORT0_0_IRQn                  = 24,      /*<  GPIO Port 0 pin 0 Interrupt                      */
+  PORT0_1_IRQn                  = 25,      /*<  GPIO Port 0 pin 1 Interrupt                      */
+  PORT0_2_IRQn                  = 26,      /*<  GPIO Port 0 pin 2 Interrupt                      */
+  PORT0_3_IRQn                  = 27,      /*<  GPIO Port 0 pin 3 Interrupt                      */
+  PORT0_4_IRQn                  = 28,      /*<  GPIO Port 0 pin 4 Interrupt                      */
+  PORT0_5_IRQn                  = 29,      /*<  GPIO Port 0 pin 5 Interrupt                      */
+  PORT0_6_IRQn                  = 30,      /*<  GPIO Port 0 pin 6 Interrupt                      */
+  PORT0_7_IRQn                  = 31,      /*<  GPIO Port 0 pin 7 Interrupt                      */
 } IRQn_Type;
 
 
@@ -105,12 +100,12 @@
 /* ================================================================================ */
 
 /* --------  Configuration of the CM7 Processor and Core Peripherals  --------- */
-#define __CM4_REV                 0x0000      /* Core revision r0p0                              */
+#define __CM7_REV                 0x0101      /* Core revision r1p1                              */
 #define __MPU_PRESENT             1           /* MPU present or not                              */
 #define __NVIC_PRIO_BITS          3           /* Number of Bits used for Priority Levels         */
 #define __Vendor_SysTickConfig    0           /* Set to 1 if different SysTick Config is used    */
 #define __FPU_PRESENT             1           /* no FPU present                                  */
-#define __FPU_DP                  1          /* unused                                          */
+#define __FPU_DP                  1           /* unused                                          */
 #define __ICACHE_PRESENT          1
 #define __DCACHE_PRESENT          1
 
@@ -694,7 +689,9 @@
 #define CMSDK_UART0_BASE        (CMSDK_APB_BASE + 0x4000UL)
 #define CMSDK_UART1_BASE        (CMSDK_APB_BASE + 0x5000UL)
 #define CMSDK_UART2_BASE        (CMSDK_APB_BASE + 0x6000UL)
+#define CMSDK_UART3_BASE        (CMSDK_APB_BASE + 0x7000UL)
 #define CMSDK_WATCHDOG_BASE     (CMSDK_APB_BASE + 0x8000UL)
+#define CMSDK_UART4_BASE        (CMSDK_APB_BASE + 0x9000UL)
 #define CMSDK_PL230_BASE        (CMSDK_APB_BASE + 0xF000UL)
 
 /* AHB peripherals */
@@ -712,6 +709,8 @@
 #define CMSDK_UART0             ((CMSDK_UART_TypeDef   *) CMSDK_UART0_BASE   )
 #define CMSDK_UART1             ((CMSDK_UART_TypeDef   *) CMSDK_UART1_BASE   )
 #define CMSDK_UART2             ((CMSDK_UART_TypeDef   *) CMSDK_UART2_BASE   )
+#define CMSDK_UART3             ((CMSDK_UART_TypeDef   *) CMSDK_UART3_BASE   )
+#define CMSDK_UART4             ((CMSDK_UART_TypeDef   *) CMSDK_UART4_BASE   )
 #define CMSDK_TIMER0            ((CMSDK_TIMER_TypeDef  *) CMSDK_TIMER0_BASE  )
 #define CMSDK_TIMER1            ((CMSDK_TIMER_TypeDef  *) CMSDK_TIMER1_BASE  )
 #define CMSDK_DUALTIMER         ((CMSDK_DUALTIMER_BOTH_TypeDef  *) CMSDK_DUALTIMER_BASE )
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/SMM_MPS2.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/SMM_MPS2.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,6 +1,6 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without 
@@ -30,7 +30,7 @@
 * POSSIBILITY OF SUCH DAMAGE. 
 *******************************************************************************
 * File:     smm_mps2.h
-* Release:  Version 1.0
+* Release:  Version 1.1
 *******************************************************************************/
 
 #ifndef __SMM_MPS2_H
@@ -65,11 +65,14 @@
                                  //                         Bit[31:0] : reload value for prescale counter
   __IO uint32_t PSCNTR;          // Offset: 0x024 (R/W)  32-bit Prescale counter
                                  //                         current value of the pre-scaler counter
-								 //                         The Cycle Up Counter increment when the prescale down counter reach 0
-								 //                         The pre-scaler counter is reloaded with PRESCALE after reaching 0.
+                                 //                         The Cycle Up Counter increment when the prescale down counter reach 0
+                                 //                         The pre-scaler counter is reloaded with PRESCALE after reaching 0.
        uint32_t RESERVED4[9];
   __IO uint32_t MISC;            // Offset: 0x04C (R/W)  Misc control */
-                                 //                         [31:7] : Reserved
+                                 //                         [31:10] : Reserved
+                                 //                            [9] : SHIELD_1_SPI_nCS
+                                 //                            [8] : SHIELD_0_SPI_nCS
+                                 //                            [7] : ADC_SPI_nCS
                                  //                            [6] : CLCD_BL_CTRL
                                  //                            [5] : CLCD_RD
                                  //                            [4] : CLCD_RS
@@ -93,6 +96,12 @@
 #define CLCD_RD_Msk        (1UL<<CLCD_RD_Pos)
 #define CLCD_BL_Pos        6
 #define CLCD_BL_Msk        (1UL<<CLCD_BL_Pos)
+#define ADC_nCS_Pos        7
+#define ADC_nCS_Msk        (1UL<<ADC_nCS_Pos)
+#define SHIELD_0_nCS_Pos        8
+#define SHIELD_0_nCS_Msk        (1UL<<SHIELD_0_nCS_Pos)
+#define SHIELD_1_nCS_Pos        9
+#define SHIELD_1_nCS_Msk        (1UL<<SHIELD_1_nCS_Pos)
 
 /******************************************************************************/
 /*                        SCC Register declaration                            */
@@ -402,14 +411,14 @@
     };
    /*!< Offset: 0x00C Divide ratio Register (R/W) */  
   __IO   uint32_t  DIVIDE;  // <h> Divide ratio for Left/Right clock </h> 
-                              //   <o.9..0> TX error (default 0x80)			      
+                              //   <o.9..0> TX error (default 0x80)                  
    /*!< Offset: 0x010 Transmit Buffer       ( /W) */
   __O    uint32_t  TXBUF;  // <h> Transmit buffer </h> 
-                              //   <o.15..0> Right channel			      
+                              //   <o.15..0> Right channel                  
                               //   <o.31..16> Left channel
    /*!< Offset: 0x014 Receive Buffer        (R/ ) */
   __I    uint32_t  RXBUF;  // <h> Receive buffer </h> 
-                              //   <o.15..0> Right channel			      
+                              //   <o.15..0> Right channel                  
                               //   <o.31..16> Left channel
          uint32_t  RESERVED1[186];
   __IO uint32_t ITCR;         // <h> Integration Test Control Register </h>
@@ -556,13 +565,18 @@
 #define MPS2_TSC_I2C_BASE       (0x40022000ul)       /* Touch Screen I2C Base Address */
 #define MPS2_AAIC_I2C_BASE      (0x40023000ul)       /* Audio Interface I2C Base Address */
 #define MPS2_AAIC_I2S_BASE      (0x40024000ul)       /* Audio Interface I2S Base Address */
+#define MPS2_SSP2_BASE          (0x40025000ul)       /* adc SSP Base Address   */
+#define MPS2_SSP3_BASE          (0x40026000ul)       /* Shield 0 SSP Base Address   */
+#define MPS2_SSP4_BASE          (0x40027000ul)       /* Shield 1 SSP Base Address   */
 #define MPS2_FPGAIO_BASE        (0x40028000ul)       /* FPGAIO Base Address */
+#define MPS2_SHIELD0_I2C_BASE   (0x40029000ul)       /* Shield 0 I2C Base Address */
+#define MPS2_SHIELD1_I2C_BASE   (0x4002A000ul)       /* Shield 1 I2C Base Address */
 #define MPS2_SCC_BASE           (0x4002F000ul)       /* SCC Base Address    */
 
 #define SMSC9220_BASE           (0xA0000000ul)       /* Ethernet SMSC9220 Base Address   */
 
+#define MPS2_VGA_TEXT_BUFFER    (0x41000000ul)       /* VGA Text Buffer Address */
 #define MPS2_VGA_BUFFER         (0x41100000ul)       /* VGA Buffer Base Address */
-#define MPS2_VGA_TEXT_BUFFER    (0x41000000ul)       /* VGA Text Buffer Address */
 
 /******************************************************************************/
 /*                         Peripheral declaration                             */
@@ -571,11 +585,16 @@
 #define SMSC9220                ((SMSC9220_TypeDef      *) SMSC9220_BASE )
 #define MPS2_TS_I2C             ((MPS2_I2C_TypeDef      *) MPS2_TSC_I2C_BASE )
 #define MPS2_AAIC_I2C           ((MPS2_I2C_TypeDef      *) MPS2_AAIC_I2C_BASE )
+#define MPS2_SHIELD0_I2C        ((MPS2_I2C_TypeDef      *) MPS2_SHIELD0_I2C_BASE )
+#define MPS2_SHIELD1_I2C        ((MPS2_I2C_TypeDef      *) MPS2_SHIELD1_I2C_BASE )
 #define MPS2_AAIC_I2S           ((MPS2_I2S_TypeDef      *) MPS2_AAIC_I2S_BASE )
 #define MPS2_FPGAIO             ((MPS2_FPGAIO_TypeDef   *) MPS2_FPGAIO_BASE )
 #define MPS2_SCC                ((MPS2_SCC_TypeDef      *) MPS2_SCC_BASE )
 #define MPS2_SSP0               ((MPS2_SSP_TypeDef      *) MPS2_SSP0_BASE )
 #define MPS2_SSP1               ((MPS2_SSP_TypeDef      *) MPS2_SSP1_BASE )
+#define MPS2_SSP2               ((MPS2_SSP_TypeDef      *) MPS2_SSP2_BASE )    
+#define MPS2_SSP3               ((MPS2_SSP_TypeDef      *) MPS2_SSP3_BASE )    
+#define MPS2_SSP4               ((MPS2_SSP_TypeDef      *) MPS2_SSP4_BASE )    
 
 /******************************************************************************/
 /*                     General Function Definitions                           */
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/TOOLCHAIN_ARM_STD/MPS2.sct	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/TOOLCHAIN_ARM_STD/MPS2.sct	Wed Mar 02 14:30:11 2016 +0000
@@ -1,6 +1,6 @@
 ;* MPS2 CMSIS Library
 ;*
-;* Copyright (c) 2006-2015 ARM Limited
+;* Copyright (c) 2006-2016 ARM Limited
 ;* All rights reserved.
 ;* 
 ;* Redistribution and use in source and binary forms, with or without 
@@ -39,8 +39,8 @@
    *(InRoot$$Sections)
    .ANY (+RO)
   }
-  ; Total: 48 vectors = 192 bytes (0x0C0) to be reserved in RAM
-  RW_IRAM1 (0x20000000+0xC0) (0x400000-0xC0)  {  ; RW data
+  ; Total: 64 vectors = 256 bytes (0x100) to be reserved in RAM
+  RW_IRAM1 (0x20000000+0x100) (0x400000-0x100)  {  ; RW data
    .ANY (+RW +ZI)
   }
 }
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/TOOLCHAIN_ARM_STD/startup_CMSDK_CM7.s	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/TOOLCHAIN_ARM_STD/startup_CMSDK_CM7.s	Wed Mar 02 14:30:11 2016 +0000
@@ -1,6 +1,6 @@
 ; MPS2 CMSIS Library
 ;
-; Copyright (c) 2006-2015 ARM Limited
+; Copyright (c) 2006-2016 ARM Limited
 ; All rights reserved.
 ; 
 ; Redistribution and use in source and binary forms, with or without 
@@ -32,10 +32,7 @@
 ; @file     startup_CMSDK_CM7.s
 ; @brief    CMSIS Core Device Startup File for
 ;           CMSDK_CM7 Device
-; @version  V1.00
-; @date     04. February 2015
 ;
-; @note
 ;******************************************************************************
 ;
 ;-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
@@ -110,22 +107,22 @@
                 DCD     ETHERNET_Handler          ; Ethernet Overflow Handler
                 DCD     I2S_Handler               ; I2S Handler
                 DCD     TSC_Handler               ; Touch Screen handler
-                DCD     PORT0_0_Handler           ; GPIO Port 0 pin 0 Handler
-                DCD     PORT0_1_Handler           ; GPIO Port 0 pin 1 Handler
-                DCD     PORT0_2_Handler           ; GPIO Port 0 pin 2 Handler
-                DCD     PORT0_3_Handler           ; GPIO Port 0 pin 3 Handler
-                DCD     PORT0_4_Handler           ; GPIO Port 0 pin 4 Handler
-                DCD     PORT0_5_Handler           ; GPIO Port 0 pin 5 Handler
-                DCD     PORT0_6_Handler           ; GPIO Port 0 pin 6 Handler
-                DCD     PORT0_7_Handler           ; GPIO Port 0 pin 7 Handler
-                DCD     PORT0_8_Handler           ; GPIO Port 0 pin 8 Handler
-                DCD     PORT0_9_Handler           ; GPIO Port 0 pin 9 Handler
-                DCD     PORT0_10_Handler          ; GPIO Port 0 pin 10 Handler
-                DCD     PORT0_11_Handler          ; GPIO Port 0 pin 11 Handler
-                DCD     PORT0_12_Handler          ; GPIO Port 0 pin 12 Handler
-                DCD     PORT0_13_Handler          ; GPIO Port 0 pin 13 Handler
-                DCD     PORT0_14_Handler          ; GPIO Port 0 pin 14 Handler
-                DCD     PORT0_15_Handler          ; GPIO Port 0 pin 15 Handler
+                DCD     PORT2_COMB_Handler        ; GPIO Port 2 Combined Handler
+                DCD     PORT3_COMB_Handler        ; GPIO Port 3 Combined Handler
+                DCD     UARTRX3_Handler           ; UART 3 RX Handler
+                DCD     UARTTX3_Handler           ; UART 3 TX Handler
+                DCD     UARTRX4_Handler           ; UART 4 RX Handler
+                DCD     UARTTX4_Handler           ; UART 4 TX Handler
+                DCD     ADCSPI_Handler            ; SHIELD ADC SPI exceptions Handler
+                DCD     SHIELDSPI_Handler         ; SHIELD SPI exceptions Handler
+                DCD     PORT0_0_Handler           ; GPIO Port 0 pin 0 Handler                                     
+                DCD     PORT0_1_Handler           ; GPIO Port 0 pin 1 Handler                                     
+                DCD     PORT0_2_Handler           ; GPIO Port 0 pin 2 Handler                                     
+                DCD     PORT0_3_Handler           ; GPIO Port 0 pin 3 Handler                                     
+                DCD     PORT0_4_Handler           ; GPIO Port 0 pin 4 Handler                                     
+                DCD     PORT0_5_Handler           ; GPIO Port 0 pin 5 Handler                                     
+                DCD     PORT0_6_Handler           ; GPIO Port 0 pin 6 Handler                                     
+                DCD     PORT0_7_Handler           ; GPIO Port 0 pin 7 Handler                                     
 __Vectors_End
 
 __Vectors_Size  EQU     __Vectors_End - __Vectors
@@ -207,6 +204,14 @@
                 EXPORT ETHERNET_Handler           [WEAK]
                 EXPORT I2S_Handler                [WEAK]
                 EXPORT TSC_Handler                [WEAK]
+                EXPORT PORT2_COMB_Handler         [WEAK]
+                EXPORT PORT3_COMB_Handler         [WEAK]
+                EXPORT UARTRX3_Handler            [WEAK]
+                EXPORT UARTTX3_Handler            [WEAK]
+                EXPORT UARTRX4_Handler            [WEAK]
+                EXPORT UARTTX4_Handler            [WEAK]
+                EXPORT ADCSPI_Handler             [WEAK]
+                EXPORT SHIELDSPI_Handler          [WEAK]
                 EXPORT PORT0_0_Handler            [WEAK]
                 EXPORT PORT0_1_Handler            [WEAK]
                 EXPORT PORT0_2_Handler            [WEAK]
@@ -215,14 +220,6 @@
                 EXPORT PORT0_5_Handler            [WEAK]
                 EXPORT PORT0_6_Handler            [WEAK]
                 EXPORT PORT0_7_Handler            [WEAK]
-                EXPORT PORT0_8_Handler            [WEAK]
-                EXPORT PORT0_9_Handler            [WEAK]
-                EXPORT PORT0_10_Handler           [WEAK]
-                EXPORT PORT0_11_Handler           [WEAK]
-                EXPORT PORT0_12_Handler           [WEAK]
-                EXPORT PORT0_13_Handler           [WEAK]
-                EXPORT PORT0_14_Handler           [WEAK]
-                EXPORT PORT0_15_Handler           [WEAK]
 
 UARTRX0_Handler
 UARTTX0_Handler
@@ -240,22 +237,22 @@
 ETHERNET_Handler
 I2S_Handler
 TSC_Handler
-PORT0_0_Handler
-PORT0_1_Handler
-PORT0_2_Handler
-PORT0_3_Handler
-PORT0_4_Handler
-PORT0_5_Handler
-PORT0_6_Handler
-PORT0_7_Handler
-PORT0_8_Handler
-PORT0_9_Handler
-PORT0_10_Handler
-PORT0_11_Handler
-PORT0_12_Handler
-PORT0_13_Handler
-PORT0_14_Handler
-PORT0_15_Handler
+PORT2_COMB_Handler        
+PORT3_COMB_Handler        
+UARTRX3_Handler           
+UARTTX3_Handler           
+UARTRX4_Handler           
+UARTTX4_Handler           
+ADCSPI_Handler            
+SHIELDSPI_Handler         
+PORT0_0_Handler                                    
+PORT0_1_Handler                                    
+PORT0_2_Handler                                    
+PORT0_3_Handler                                    
+PORT0_4_Handler                                    
+PORT0_5_Handler                                    
+PORT0_6_Handler                                    
+PORT0_7_Handler                                    
                 B       .
 
                 ENDP
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/TOOLCHAIN_GCC_ARM/gcc_arm.ld	Wed Mar 02 10:15:13 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,195 +0,0 @@
-/* Linker script to configure memory regions. */
-MEMORY
-{
-  FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x40000   /* 256k */
-  RAM (rwx)  : ORIGIN = 0x20000000, LENGTH = 0x08000   /*  32k */
-}
-
-/* Library configurations */
-GROUP(libgcc.a libc.a libm.a libnosys.a)
-
-/* Linker script to place sections and symbol values. Should be used together
- * with other linker script that defines memory regions FLASH and RAM.
- * It references following symbols, which must be defined in code:
- *   Reset_Handler : Entry of reset handler
- *
- * It defines following symbols, which code can use without definition:
- *   __exidx_start
- *   __exidx_end
- *   __copy_table_start__
- *   __copy_table_end__
- *   __zero_table_start__
- *   __zero_table_end__
- *   __etext
- *   __data_start__
- *   __preinit_array_start
- *   __preinit_array_end
- *   __init_array_start
- *   __init_array_end
- *   __fini_array_start
- *   __fini_array_end
- *   __data_end__
- *   __bss_start__
- *   __bss_end__
- *   __end__
- *   end
- *   __HeapLimit
- *   __StackLimit
- *   __StackTop
- *   __stack
- *   __Vectors_End
- *   __Vectors_Size
- */
-ENTRY(Reset_Handler)
-
-SECTIONS
-{
-	.text :
-	{
-		KEEP(*(.vectors))
-		__Vectors_End = .;
-		__Vectors_Size = __Vectors_End - __Vectors;
-		__end__ = .;
-
-		*(.text*)
-
-		KEEP(*(.init))
-		KEEP(*(.fini))
-
-		/* .ctors */
-		*crtbegin.o(.ctors)
-		*crtbegin?.o(.ctors)
-		*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
-		*(SORT(.ctors.*))
-		*(.ctors)
-
-		/* .dtors */
- 		*crtbegin.o(.dtors)
- 		*crtbegin?.o(.dtors)
- 		*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
- 		*(SORT(.dtors.*))
- 		*(.dtors)
-
-		*(.rodata*)
-
-		KEEP(*(.eh_frame*))
-	} > FLASH
-
-	.ARM.extab :
-	{
-		*(.ARM.extab* .gnu.linkonce.armextab.*)
-	} > FLASH
-
-	__exidx_start = .;
-	.ARM.exidx :
-	{
-		*(.ARM.exidx* .gnu.linkonce.armexidx.*)
-	} > FLASH
-	__exidx_end = .;
-
-	/* To copy multiple ROM to RAM sections,
-	 * uncomment .copy.table section and,
-	 * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */
-	/*
-	.copy.table :
-	{
-		. = ALIGN(4);
-		__copy_table_start__ = .;
-		LONG (__etext)
-		LONG (__data_start__)
-		LONG (__data_end__ - __data_start__)
-		LONG (__etext2)
-		LONG (__data2_start__)
-		LONG (__data2_end__ - __data2_start__)
-		__copy_table_end__ = .;
-	} > FLASH
-	*/
-
-	/* To clear multiple BSS sections,
-	 * uncomment .zero.table section and,
-	 * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */
-	/*
-	.zero.table :
-	{
-		. = ALIGN(4);
-		__zero_table_start__ = .;
-		LONG (__bss_start__)
-		LONG (__bss_end__ - __bss_start__)
-		LONG (__bss2_start__)
-		LONG (__bss2_end__ - __bss2_start__)
-		__zero_table_end__ = .;
-	} > FLASH
-	*/
-
-	__etext = .;
-
-	.data : AT (__etext)
-	{
-		__data_start__ = .;
-		*(vtable)
-		*(.data*)
-
-		. = ALIGN(4);
-		/* preinit data */
-		PROVIDE_HIDDEN (__preinit_array_start = .);
-		KEEP(*(.preinit_array))
-		PROVIDE_HIDDEN (__preinit_array_end = .);
-
-		. = ALIGN(4);
-		/* init data */
-		PROVIDE_HIDDEN (__init_array_start = .);
-		KEEP(*(SORT(.init_array.*)))
-		KEEP(*(.init_array))
-		PROVIDE_HIDDEN (__init_array_end = .);
-
-
-		. = ALIGN(4);
-		/* finit data */
-		PROVIDE_HIDDEN (__fini_array_start = .);
-		KEEP(*(SORT(.fini_array.*)))
-		KEEP(*(.fini_array))
-		PROVIDE_HIDDEN (__fini_array_end = .);
-
-		KEEP(*(.jcr*))
-		. = ALIGN(4);
-		/* All data end */
-		__data_end__ = .;
-
-	} > RAM
-
-	.bss :
-	{
-		. = ALIGN(4);
-		__bss_start__ = .;
-		*(.bss*)
-		*(COMMON)
-		. = ALIGN(4);
-		__bss_end__ = .;
-	} > RAM
-
-	.heap (COPY):
-	{
-		__HeapBase = .;
-		__end__ = .;
-		end = __end__;
-		KEEP(*(.heap*))
-		__HeapLimit = .;
-	} > RAM
-
-	/* .stack_dummy section doesn't contains any symbols. It is only
-	 * used for linker to calculate size of stack sections, and assign
-	 * values to stack symbols later */
-	.stack_dummy (COPY):
-	{
-		KEEP(*(.stack*))
-	} > RAM
-
-	/* Set stack top to end of RAM, and stack limit move down by
-	 * size of stack_dummy section */
-	__StackTop = ORIGIN(RAM) + LENGTH(RAM);
-	__StackLimit = __StackTop - SIZEOF(.stack_dummy);
-	PROVIDE(__stack = __StackTop);
-
-	/* Check if data + heap + stack exceeds RAM limit */
-	ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
-}
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/TOOLCHAIN_GCC_ARM/startup_ARMCM7.s	Wed Mar 02 10:15:13 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,314 +0,0 @@
-/* File: startup_ARMCM7.S
- * Purpose: startup file for Cortex-M7 devices. Should use with
- *   GCC for ARM Embedded Processors
- * Version: V1.00
- * Date: 22 August 2014
- *
- */
-/* Copyright (c) 2011 - 2014 ARM LIMITED
-
-   All rights reserved.
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions are met:
-   - Redistributions of source code must retain the above copyright
-     notice, this list of conditions and the following disclaimer.
-   - 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.
-   - Neither the name of ARM nor the names of its contributors may be used
-     to endorse or promote products derived from this software without
-     specific prior written permission.
-   *
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS 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.
-   ---------------------------------------------------------------------------*/
-
-
-	.syntax	unified
-	.arch	armv7-m
-
-	.section .stack
-	.align	3
-#ifdef __STACK_SIZE
-	.equ	Stack_Size, __STACK_SIZE
-#else
-	.equ	Stack_Size, 0x00000400
-#endif
-	.globl	__StackTop
-	.globl	__StackLimit
-__StackLimit:
-	.space	Stack_Size
-	.size	__StackLimit, . - __StackLimit
-__StackTop:
-	.size	__StackTop, . - __StackTop
-
-	.section .heap
-	.align	3
-#ifdef __HEAP_SIZE
-	.equ	Heap_Size, __HEAP_SIZE
-#else
-	.equ	Heap_Size, 0x00000C00
-#endif
-	.globl	__HeapBase
-	.globl	__HeapLimit
-__HeapBase:
-	.if	Heap_Size
-	.space	Heap_Size
-	.endif
-	.size	__HeapBase, . - __HeapBase
-__HeapLimit:
-	.size	__HeapLimit, . - __HeapLimit
-
-	.section .vectors
-	.align	2
-	.globl	__Vectors
-__Vectors:
-	.long	__StackTop            /* Top of Stack */
-	.long	Reset_Handler         /* Reset Handler */
-	.long	NMI_Handler           /* NMI Handler */
-	.long	HardFault_Handler     /* Hard Fault Handler */
-	.long	MemManage_Handler     /* MPU Fault Handler */
-	.long	BusFault_Handler      /* Bus Fault Handler */
-	.long	UsageFault_Handler    /* Usage Fault Handler */
-	.long	0                     /* Reserved */
-	.long	0                     /* Reserved */
-	.long	0                     /* Reserved */
-	.long	0                     /* Reserved */
-	.long	SVC_Handler           /* SVCall Handler */
-	.long	DebugMon_Handler      /* Debug Monitor Handler */
-	.long	0                     /* Reserved */
-	.long	PendSV_Handler        /* PendSV Handler */
-	.long	SysTick_Handler       /* SysTick Handler */
-
-	/* External interrupts */
-	.long	WDT_IRQHandler        /*  0:  Watchdog Timer            */
-	.long	RTC_IRQHandler        /*  1:  Real Time Clock           */
-	.long	TIM0_IRQHandler       /*  2:  Timer0 / Timer1           */
-	.long	TIM2_IRQHandler       /*  3:  Timer2 / Timer3           */
-	.long	MCIA_IRQHandler       /*  4:  MCIa                      */
-	.long	MCIB_IRQHandler       /*  5:  MCIb                      */
-	.long	UART0_IRQHandler      /*  6:  UART0 - DUT FPGA          */
-	.long	UART1_IRQHandler      /*  7:  UART1 - DUT FPGA          */
-	.long	UART2_IRQHandler      /*  8:  UART2 - DUT FPGA          */
-	.long	UART4_IRQHandler      /*  9:  UART4 - not connected     */
-	.long	AACI_IRQHandler       /* 10: AACI / AC97                */
-	.long	CLCD_IRQHandler       /* 11: CLCD Combined Interrupt    */
-	.long	ENET_IRQHandler       /* 12: Ethernet                   */
-	.long	USBDC_IRQHandler      /* 13: USB Device                 */
-	.long	USBHC_IRQHandler      /* 14: USB Host Controller        */
-	.long	CHLCD_IRQHandler      /* 15: Character LCD              */
-	.long	FLEXRAY_IRQHandler    /* 16: Flexray                    */
-	.long	CAN_IRQHandler        /* 17: CAN                        */
-	.long	LIN_IRQHandler        /* 18: LIN                        */
-	.long	I2C_IRQHandler        /* 19: I2C ADC/DAC                */
-	.long	0                     /* 20: Reserved                   */
-	.long	0                     /* 21: Reserved                   */
-	.long	0                     /* 22: Reserved                   */
-	.long	0                     /* 23: Reserved                   */
-	.long	0                     /* 24: Reserved                   */
-	.long	0                     /* 25: Reserved                   */
-	.long	0                     /* 26: Reserved                   */
-	.long	0                     /* 27: Reserved                   */
-	.long	CPU_CLCD_IRQHandler   /* 28: Reserved - CPU FPGA CLCD   */
-	.long	0                     /* 29: Reserved - CPU FPGA        */
-	.long	UART3_IRQHandler      /* 30: UART3    - CPU FPGA        */
-	.long	SPI_IRQHandler        /* 31: SPI Touchscreen - CPU FPGA */
-
-	.size	__Vectors, . - __Vectors
-
-	.text
-	.thumb
-	.thumb_func
-	.align	2
-	.globl	Reset_Handler
-	.type	Reset_Handler, %function
-Reset_Handler:
-/*  Firstly it copies data from read only memory to RAM. There are two schemes
- *  to copy. One can copy more than one sections. Another can only copy
- *  one section.  The former scheme needs more instructions and read-only
- *  data to implement than the latter.
- *  Macro __STARTUP_COPY_MULTIPLE is used to choose between two schemes.  */
-
-#ifdef __STARTUP_COPY_MULTIPLE
-/*  Multiple sections scheme.
- *
- *  Between symbol address __copy_table_start__ and __copy_table_end__,
- *  there are array of triplets, each of which specify:
- *    offset 0: LMA of start of a section to copy from
- *    offset 4: VMA of start of a section to copy to
- *    offset 8: size of the section to copy. Must be multiply of 4
- *
- *  All addresses must be aligned to 4 bytes boundary.
- */
-	ldr	r4, =__copy_table_start__
-	ldr	r5, =__copy_table_end__
-
-.L_loop0:
-	cmp	r4, r5
-	bge	.L_loop0_done
-	ldr	r1, [r4]
-	ldr	r2, [r4, #4]
-	ldr	r3, [r4, #8]
-
-.L_loop0_0:
-	subs	r3, #4
-	ittt	ge
-	ldrge	r0, [r1, r3]
-	strge	r0, [r2, r3]
-	bge	.L_loop0_0
-
-	adds	r4, #12
-	b	.L_loop0
-
-.L_loop0_done:
-#else
-/*  Single section scheme.
- *
- *  The ranges of copy from/to are specified by following symbols
- *    __etext: LMA of start of the section to copy from. Usually end of text
- *    __data_start__: VMA of start of the section to copy to
- *    __data_end__: VMA of end of the section to copy to
- *
- *  All addresses must be aligned to 4 bytes boundary.
- */
-	ldr	r1, =__etext
-	ldr	r2, =__data_start__
-	ldr	r3, =__data_end__
-
-.L_loop1:
-	cmp	r2, r3
-	ittt	lt
-	ldrlt	r0, [r1], #4
-	strlt	r0, [r2], #4
-	blt	.L_loop1
-#endif /*__STARTUP_COPY_MULTIPLE */
-
-/*  This part of work usually is done in C library startup code. Otherwise,
- *  define this macro to enable it in this startup.
- *
- *  There are two schemes too. One can clear multiple BSS sections. Another
- *  can only clear one section. The former is more size expensive than the
- *  latter.
- *
- *  Define macro __STARTUP_CLEAR_BSS_MULTIPLE to choose the former.
- *  Otherwise efine macro __STARTUP_CLEAR_BSS to choose the later.
- */
-#ifdef __STARTUP_CLEAR_BSS_MULTIPLE
-/*  Multiple sections scheme.
- *
- *  Between symbol address __copy_table_start__ and __copy_table_end__,
- *  there are array of tuples specifying:
- *    offset 0: Start of a BSS section
- *    offset 4: Size of this BSS section. Must be multiply of 4
- */
-	ldr	r3, =__zero_table_start__
-	ldr	r4, =__zero_table_end__
-
-.L_loop2:
-	cmp	r3, r4
-	bge	.L_loop2_done
-	ldr	r1, [r3]
-	ldr	r2, [r3, #4]
-	movs	r0, 0
-
-.L_loop2_0:
-	subs	r2, #4
-	itt	ge
-	strge	r0, [r1, r2]
-	bge	.L_loop2_0
-
-	adds	r3, #8
-	b	.L_loop2
-.L_loop2_done:
-#elif defined (__STARTUP_CLEAR_BSS)
-/*  Single BSS section scheme.
- *
- *  The BSS section is specified by following symbols
- *    __bss_start__: start of the BSS section.
- *    __bss_end__: end of the BSS section.
- *
- *  Both addresses must be aligned to 4 bytes boundary.
- */
-	ldr	r1, =__bss_start__
-	ldr	r2, =__bss_end__
-
-	movs	r0, 0
-.L_loop3:
-	cmp	r1, r2
-	itt	lt
-	strlt	r0, [r1], #4
-	blt	.L_loop3
-#endif /* __STARTUP_CLEAR_BSS_MULTIPLE || __STARTUP_CLEAR_BSS */
-
-#ifndef __NO_SYSTEM_INIT
-	bl	SystemInit
-#endif
-
-#ifndef __START
-#define __START _start
-#endif
-	bl	__START
-
-	.pool
-	.size	Reset_Handler, . - Reset_Handler
-
-	.align	1
-	.thumb_func
-	.weak	Default_Handler
-	.type	Default_Handler, %function
-Default_Handler:
-	b	.
-	.size	Default_Handler, . - Default_Handler
-
-/*    Macro to define default handlers. Default handler
- *    will be weak symbol and just dead loops. They can be
- *    overwritten by other handlers */
-	.macro	def_irq_handler	handler_name
-	.weak	\handler_name
-	.set	\handler_name, Default_Handler
-	.endm
-
-	def_irq_handler	NMI_Handler
-	def_irq_handler	HardFault_Handler
-	def_irq_handler	MemManage_Handler
-	def_irq_handler	BusFault_Handler
-	def_irq_handler	UsageFault_Handler
-	def_irq_handler	SVC_Handler
-	def_irq_handler	DebugMon_Handler
-	def_irq_handler	PendSV_Handler
-	def_irq_handler	SysTick_Handler
-
-	def_irq_handler	WDT_IRQHandler
-	def_irq_handler	RTC_IRQHandler
-	def_irq_handler	TIM0_IRQHandler
-	def_irq_handler	TIM2_IRQHandler
-	def_irq_handler	MCIA_IRQHandler
-	def_irq_handler	MCIB_IRQHandler
-	def_irq_handler	UART0_IRQHandler
-	def_irq_handler	UART1_IRQHandler
-	def_irq_handler	UART2_IRQHandler
-	def_irq_handler	UART3_IRQHandler
-	def_irq_handler	UART4_IRQHandler
-	def_irq_handler	AACI_IRQHandler
-	def_irq_handler	CLCD_IRQHandler
-	def_irq_handler	ENET_IRQHandler
-	def_irq_handler	USBDC_IRQHandler
-	def_irq_handler	USBHC_IRQHandler
-	def_irq_handler	CHLCD_IRQHandler
-	def_irq_handler	FLEXRAY_IRQHandler
-	def_irq_handler	CAN_IRQHandler
-	def_irq_handler	LIN_IRQHandler
-	def_irq_handler	I2C_IRQHandler
-	def_irq_handler	CPU_CLCD_IRQHandler
-	def_irq_handler	SPI_IRQHandler
-
-	.end
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/cmsis_nvic.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/cmsis_nvic.h	Wed Mar 02 14:30:11 2016 +0000
@@ -37,7 +37,7 @@
 
 #include "cmsis.h"
 
-#define NVIC_NUM_VECTORS      (16 + 32)
+#define NVIC_NUM_VECTORS      (16 + 48)
 #define NVIC_USER_IRQ_OFFSET  16
 
 #ifdef __cplusplus
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/system_CMSDK_CM7.c	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/system_CMSDK_CM7.c	Wed Mar 02 14:30:11 2016 +0000
@@ -1,6 +1,6 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without 
@@ -32,10 +32,6 @@
 * @file     system_CMSDK_CM7.c
 * @brief    CMSIS Device System Source File for
 *           CMSDK_CM7 Device
-* @version  V1.00
-* @date     27. August 2014
-*
-* @note
 *
 *******************************************************************************/
 
@@ -64,6 +60,9 @@
 uint32_t SystemCoreClock = __SYSTEM_CLOCK;/* System Core Clock Frequency      */
 
 
+/*----------------------------------------------------------------------------
+  Clock functions
+ *----------------------------------------------------------------------------*/
 /**
  * Update SystemCoreClock variable
  *
--- a/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/system_CMSDK_CM7.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/cmsis/TARGET_ARM_SSG/TARGET_MPS2_M7/system_CMSDK_CM7.h	Wed Mar 02 14:30:11 2016 +0000
@@ -1,6 +1,6 @@
 /* MPS2 CMSIS Library
 *
-* Copyright (c) 2006-2015 ARM Limited
+* Copyright (c) 2006-2016 ARM Limited
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without 
@@ -33,10 +33,6 @@
 * @file     system_CMSDK_CM7.h
 * @brief    CMSIS Device Peripheral Access Layer Header File for
 *           CMSDK_CM7 Device
-* @version  V1.00
-* @date     27. August 2014
-*
-* @note
 *
 ******************************************************************************/
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/PeripheralNames.h	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,91 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_PERIPHERALNAMES_H
+#define MBED_PERIPHERALNAMES_H
+
+#include "cmsis.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+    UART_0 = (int)CMSDK_UART1_BASE,
+    UART_1 = (int)CMSDK_UART3_BASE,
+    UART_2 = (int)CMSDK_UART0_BASE,
+    UART_3 = (int)CMSDK_UART2_BASE
+} UARTName;
+
+typedef enum {
+    I2C_0 = (int)MPS2_TSC_I2C_BASE,
+    I2C_1 = (int)MPS2_AAIC_I2C_BASE,
+    I2C_2 = (int)MPS2_SHIELD0_I2C_BASE, 
+    I2C_3 = (int)MPS2_SHIELD1_I2C_BASE 
+        
+} I2CName;
+
+typedef enum {
+    ADC0_0 = 0,
+    ADC0_1,
+    ADC0_2,
+    ADC0_3,
+    ADC0_4,
+    ADC0_5,
+    ADC0_6,
+    ADC0_7,
+    ADC0_8,
+    ADC0_9,
+    ADC0_10,
+    ADC0_11
+} ADCName;
+
+typedef enum {
+    SPI_0 = (int)MPS2_SSP0_BASE,
+    SPI_1 = (int)MPS2_SSP1_BASE,
+      SPI_2 = (int)MPS2_SSP2_BASE,
+    SPI_3 = (int)MPS2_SSP3_BASE,
+    SPI_4 = (int)MPS2_SSP4_BASE
+} SPIName;
+
+typedef enum {
+    PWM_1 = 0,
+    PWM_2,
+    PWM_3,
+    PWM_4,
+    PWM_5,
+    PWM_6,
+    PWM_7,
+    PWM_8,
+    PWM_9,
+    PWM_10,
+    PWM_11
+} PWMName;
+
+#define STDIO_UART_TX     USBTX
+#define STDIO_UART_RX     USBRX
+#define STDIO_UART        UART_0
+
+#define MBED_UART0        USBTX, USBRX
+#define MBED_UART1        XB_TX, XB_RX
+#define MBED_UART2        SH0_TX, SH0_RX
+#define MBED_UART3        SH1_TX, SH1_RX
+#define MBED_UARTUSB      USBTX, USBRX
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/PinNames.h	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,241 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_PINNAMES_H
+#define MBED_PINNAMES_H
+
+#include "cmsis.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+        PIN_INPUT,
+        PIN_OUTPUT
+} PinDirection;
+
+#define PORT_SHIFT  5
+
+typedef enum {
+    // MPS2 EXP Pin Names
+        EXP0 = 0 ,
+        EXP1 = 4 ,
+        EXP2 = 2 ,
+        EXP3 = 3 ,
+        EXP4 = 1 ,
+        EXP5 = 15,
+        EXP6 = 5 ,
+        EXP7 = 6 ,
+        EXP8 = 7 ,
+        EXP9 = 8 ,
+        EXP10 =9 ,
+        EXP11 =13,
+        EXP12 =10,
+        EXP13 =11,
+        EXP14 =12,
+        EXP15 =14,
+        EXP16 =18,
+        EXP17 =19,
+        EXP18 =20,
+        EXP19 =21,
+        EXP20 =52,
+        EXP21 =53,
+        EXP22 =54,
+        EXP23 =55,
+        EXP24 =56,
+        EXP25 =57,
+        
+        EXP26 =16,
+        EXP27 =25,
+        EXP28 =24,
+        EXP29 =31,
+        EXP30 =17,
+        EXP31 =23,
+        EXP32 =27,
+        EXP33 =30,
+        EXP34 =26,
+        EXP35 =28,
+        EXP36 =29,
+        EXP37 =58,
+        EXP38 =48,
+        EXP39 =49,
+        EXP40 =50,
+        EXP41 =22,
+        EXP42 =59,
+        EXP43 =60,
+        EXP44 =51,
+        EXP45 =61,
+        EXP46 =62,
+        EXP47 =63,
+        EXP48 =64,
+        EXP49 =65,
+        EXP50 =66,
+        EXP51 =67,
+        
+// Other mbed Pin Names
+
+        //LEDs on mps2
+        //user leds
+        USERLED1 = 100,
+        USERLED2 = 101,
+        //user switches
+        USERSW1  = 110,
+        USERSW2  = 111,
+        
+        //mcc leds
+        LED1 = 200,
+        LED2 = 201,
+        LED3 = 202,
+        LED4 = 203,
+        LED5 = 204,
+        LED6 = 205,
+        LED7 = 206,
+        LED8 = 207,
+        
+        //MCC Switches
+        SW1 = 210,
+        SW2 = 211,
+        SW3 = 212,
+        SW4 = 213,
+        SW5 = 214,
+        SW6 = 215,
+        SW7 = 216,
+        SW8 = 217,
+        
+        //MPS2 SPI header pins j21
+        MOSI_SPI = 300,
+        MISO_SPI = 301,
+        SCLK_SPI = 302,
+        SSEL_SPI = 303,
+        
+        //MPS2 CLCD SPI
+        CLCD_MOSI = 304,
+        CLCD_MISO = 305,
+        CLCD_SCLK = 306,
+        CLCD_SSEL = 307,
+        CLCD_RESET = 308,
+        CLCD_RS = 309,
+        CLCD_RD = 310,
+        CLCD_BL_CTRL = 311,
+        
+        //MPS2 shield 0 SPI
+        SHIELD_0_SPI_SCK = 320, 
+        SHIELD_0_SPI_MOSI = 321,
+        SHIELD_0_SPI_MISO = 322,
+        SHIELD_0_SPI_nCS = 323, 
+
+        //MPS2 shield 1 SPI
+        SHIELD_1_SPI_SCK = 331, 
+        SHIELD_1_SPI_MOSI = 332,
+        SHIELD_1_SPI_MISO = 333,
+        SHIELD_1_SPI_nCS = 334, 
+        
+        //MPS2 shield ADC SPI
+        ADC_MOSI = 650,
+        ADC_MISO = 651,
+        ADC_SCLK = 652,
+        ADC_SSEL = 653,
+        
+        //MPS2 Uart
+        USBTX  = 400,
+        USBRX  = 401,
+        XB_TX = 402,
+        XB_RX = 403,
+        SH0_TX = 404,
+        SH0_RX = 405,
+        SH1_TX = 406,
+        SH1_RX = 407,
+        
+        //MPS2 I2C touchscreen and audio
+        TSC_SDA = 500,
+        TSC_SCL = 501,
+        AUD_SDA = 502,
+        AUD_SCL = 503,
+    
+        //MPS2 I2C for shield
+        SHIELD_0_SDA = 504, 
+        SHIELD_0_SCL = 505, 
+        SHIELD_1_SDA = 506,
+        SHIELD_1_SCL = 507,
+        
+        //MPS2 shield Analog pins
+        A0_0 = 600,
+        A0_1 = 601,
+        A0_2 = 602,
+        A0_3 = 603,
+        A0_4 = 604,
+        A0_5 = 605,
+        A1_0 = 606,
+        A1_1 = 607,
+        A1_2 = 608,
+        A1_3 = 609,
+        A1_4 = 610,
+        A1_5 = 611,
+        //MPS2 Shield Digital pins
+        D0_0  = EXP0,
+        D0_1  = EXP4,
+        D0_2  = EXP2,
+        D0_3  = EXP3,
+        D0_4  = EXP1,
+        D0_5  = EXP6,
+        D0_6  = EXP7,
+        D0_7  = EXP8,
+        D0_8  = EXP9,
+        D0_9  = EXP10,
+        D0_10 = EXP12,
+        D0_11 = EXP13,
+        D0_12 = EXP14,
+        D0_13 = EXP11,
+        D0_14 = EXP15,
+        D0_15 = EXP5,
+    
+        D1_0  = EXP26,
+        D1_1  = EXP30,
+        D1_2  = EXP28,
+        D1_3  = EXP29,
+        D1_4  = EXP27,
+        D1_5  = EXP32,
+        D1_6  = EXP33,
+        D1_7  = EXP34,
+        D1_8  = EXP35,
+        D1_9  = EXP36,
+        D1_10 = EXP38,
+        D1_11 = EXP39,
+        D1_12 = EXP40,
+        D1_13 = EXP44,
+        D1_14 = EXP41,
+        D1_15 = EXP31,
+        
+        // Not connected
+        NC = (int)0xFFFFFFFF,
+} PinName;
+
+
+typedef enum {
+    PullUp = 2,
+    PullDown = 1,
+    PullNone = 0,
+    Repeater = 3,
+    OpenDrain = 4,
+    PullDefault = PullDown
+} PinMode;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/PortNames.h	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,31 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_PORTNAMES_H
+#define MBED_PORTNAMES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+    Port0 = 0,
+    Port1 = 1
+} PortName;
+
+#ifdef __cplusplus
+}
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/SDK/ETH_MPS2.c	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,450 @@
+/* MPS2 Peripheral Library
+*
+* Copyright (c) 2006-2015 ARM Limited
+* All rights reserved.
+* 
+* 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. Neither the name of the copyright holder nor the names of its contributors 
+* may be used to endorse or promote products derived from this software without 
+* specific prior written permission.
+* 
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*/
+
+/*
+ * Code implementation file for the LAN Ethernet interface.
+ */
+
+#include <stdio.h>
+#include "wait_api.h"
+#include "ETH_MPS2.h"
+
+// SMSC9220 low-level operations
+unsigned int smsc9220_mac_regread(unsigned char regoffset, unsigned int *data)
+{
+    unsigned int val, maccmd;
+    int timedout;
+    int error;
+
+    error = 0;
+    val = SMSC9220->MAC_CSR_CMD;
+    if(!(val & ((unsigned int)1 << 31))) {    // Make sure there's no pending operation
+        maccmd = 0;
+        maccmd |= regoffset;
+        maccmd |= ((unsigned int)1 << 30);     // Indicates read
+        maccmd |= ((unsigned int)1 << 31);     // Start bit
+        SMSC9220->MAC_CSR_CMD = maccmd;        // Start operation
+
+        timedout = 50;
+        do {
+            val = SMSC9220->BYTE_TEST;  // A no-op read.
+            wait_ms(1); //Sleepms(1);
+            timedout--;
+        } while(timedout && (SMSC9220->MAC_CSR_CMD & ((unsigned int)1 << 31)));
+
+        if(!timedout) {
+            error = 1;
+        }
+        else
+            *data = SMSC9220->MAC_CSR_DATA;
+    } else {
+        *data = 0;
+    }
+    return error;
+}
+
+unsigned int smsc9220_mac_regwrite(unsigned char regoffset, unsigned int data)
+{
+    unsigned int read, maccmd;
+    int timedout;
+    int error;
+
+    error = 0;
+    read = SMSC9220->MAC_CSR_CMD;
+    if(!(read & ((unsigned int)1 << 31))) { // Make sure there's no pending operation
+        SMSC9220->MAC_CSR_DATA = data;      // Store data.
+        maccmd = 0;
+        maccmd |= regoffset;
+        maccmd &= ~((unsigned int)1 << 30); // Clear indicates write
+        maccmd |= ((unsigned int)1 << 31);  // Indicate start of operation
+        SMSC9220->MAC_CSR_CMD = maccmd;
+
+        timedout = 50;
+        do {
+            read = SMSC9220->BYTE_TEST;     // A no-op read.
+            wait_ms(1); //Sleepms(1);
+            timedout--;
+        } while(timedout && (SMSC9220->MAC_CSR_CMD & ((unsigned int)1 << 31)));
+
+        if(!timedout) {
+            error = 1;
+        }
+    } else {
+       printf("Warning: SMSC9220 MAC CSR is busy. No data written.\n");
+    }
+    return error;
+}
+
+unsigned int smsc9220_phy_regread(unsigned char regoffset, unsigned short *data)
+{
+    unsigned int val, phycmd; int error;
+    int timedout;
+
+    error = 0;
+
+    smsc9220_mac_regread(SMSC9220_MAC_MII_ACC, &val);
+
+    if(!(val & 1)) {    // Not busy
+        phycmd = 0;
+        phycmd |= (1 << 11);                 // 1 to [15:11]
+        phycmd |= ((regoffset & 0x1F) << 6); // Put regoffset to [10:6]
+        phycmd &= ~(1 << 1);                 // Clear [1] indicates read.
+        phycmd |= (1 << 0);                  // Set [0] indicates operation start
+
+        smsc9220_mac_regwrite(SMSC9220_MAC_MII_ACC, phycmd);
+
+        val = 0;
+        timedout = 50;
+        do {
+            wait_ms(1); //Sleepms(1);
+            timedout--;
+            smsc9220_mac_regread(SMSC9220_MAC_MII_ACC,&val);
+        } while(timedout && (val & ((unsigned int)1 << 0)));
+
+        if(!timedout) {
+            error = 1;
+        }
+        else
+            smsc9220_mac_regread(SMSC9220_MAC_MII_DATA, (unsigned int *)data);
+
+    } else {
+        *data = 0;
+    }
+    return error;
+}
+
+unsigned int smsc9220_phy_regwrite(unsigned char regoffset, unsigned short data)
+{
+    unsigned int val, phycmd; int error;
+    int timedout;
+
+    error = 0;
+
+    smsc9220_mac_regread(SMSC9220_MAC_MII_ACC, &val);
+
+    if(!(val & 1)) {    // Not busy
+        smsc9220_mac_regwrite(SMSC9220_MAC_MII_DATA, (data & 0xFFFF)); // Load the data
+        phycmd = 0;
+        phycmd |= (1 << 11);                    // 1 to [15:11]
+        phycmd |= ((regoffset & 0x1F) << 6);     // Put regoffset to [10:6]
+        phycmd |= (1 << 1);                     // Set [1] indicates write.
+        phycmd |= (1 << 0);                     // Set [0] indicates operation start
+        smsc9220_mac_regwrite(SMSC9220_MAC_MII_ACC, phycmd);   // Start operation
+
+        phycmd = 0;
+        timedout = 50;
+
+        do {
+
+            wait_ms(1); //Sleepms(1);
+            timedout--;
+            smsc9220_mac_regread(SMSC9220_MAC_MII_ACC, &phycmd);
+        } while(timedout && (phycmd & (1 << 0)));
+
+        if(!timedout) {
+            error = 1;
+        }
+
+    } else {
+        printf("Warning: SMSC9220 MAC MII is busy. No data written.\n");
+    }
+    return error;
+}
+
+// Returns smsc9220 id.
+unsigned int smsc9220_read_id(void)
+{
+    return SMSC9220->ID_REV;
+}
+
+// Initiates a soft reset, returns failure or success.
+unsigned int smsc9220_soft_reset(void)
+{
+    int timedout;
+
+    timedout = 10;
+    // Soft reset
+    SMSC9220->HW_CFG |= 1;
+
+    do {
+        wait_ms(1); //Sleepms(1);
+        timedout--;
+    } while(timedout && (SMSC9220->HW_CFG & 1));
+
+    if(!timedout)
+        return 1;
+
+    return 0;
+}
+
+void smsc9220_set_txfifo(unsigned int val)
+{
+    // 2kb minimum, 14kb maximum
+    if(val < 2 || val > 14)
+        return;
+
+    SMSC9220->HW_CFG = val << 16;
+}
+
+
+unsigned int smsc9220_wait_eeprom(void)
+{
+    int timedout;
+
+    timedout = 50;
+
+    do {
+        wait_ms(1); //Sleepms(1);
+        timedout--;
+
+    } while(timedout && (SMSC9220->E2P_CMD & ((unsigned int) 1 << 31)));
+
+    if(!timedout)
+        return 1;
+
+    return 0;
+}
+
+/* initialise irqs */
+void smsc9220_init_irqs(void)
+{
+    SMSC9220->INT_EN    = 0x0;
+    SMSC9220->INT_STS   = 0xFFFFFFFF;   // clear all interrupts
+    SMSC9220->IRQ_CFG   = 0x22000100;   // irq deassertion at 220 usecs and master IRQ enable.
+}
+
+unsigned int smsc9220_check_phy(void)
+{
+    unsigned short phyid1, phyid2;
+
+    smsc9220_phy_regread(SMSC9220_PHY_ID1,&phyid1);
+    smsc9220_phy_regread(SMSC9220_PHY_ID2,&phyid2);
+    return ((phyid1 == 0xFFFF && phyid2 == 0xFFFF) ||
+            (phyid1 == 0x0 && phyid2 == 0x0));
+}
+
+unsigned int smsc9220_reset_phy(void)
+{
+    unsigned short read;
+    int error;
+
+    error = 0;
+    if(smsc9220_phy_regread(SMSC9220_PHY_BCONTROL, &read)) {
+        error = 1;
+        return error;
+    }
+
+    read |= (1 << 15);
+    if(smsc9220_phy_regwrite(SMSC9220_PHY_BCONTROL, read)) {
+        error = 1;
+        return error;
+    }
+    return 0;
+}
+
+/* Advertise all speeds and pause capabilities */
+void smsc9220_advertise_cap(void)
+{
+    unsigned short aneg_adv;
+    aneg_adv = 0;
+
+
+    smsc9220_phy_regread(SMSC9220_PHY_ANEG_ADV, &aneg_adv);
+    aneg_adv |= 0xDE0;
+
+    smsc9220_phy_regwrite(SMSC9220_PHY_ANEG_ADV, aneg_adv);
+    smsc9220_phy_regread(SMSC9220_PHY_ANEG_ADV, &aneg_adv);
+    return;
+}
+
+void smsc9220_establish_link(void)
+{
+    unsigned short bcr;
+
+    smsc9220_phy_regread(SMSC9220_PHY_BCONTROL, &bcr);
+    bcr |= (1 << 12) | (1 << 9);
+    smsc9220_phy_regwrite(SMSC9220_PHY_BCONTROL, bcr);
+    smsc9220_phy_regread(SMSC9220_PHY_BCONTROL, &bcr);
+
+    {
+        unsigned int hw_cfg;
+
+        hw_cfg = 0;
+        hw_cfg = SMSC9220->HW_CFG;
+
+        hw_cfg &= 0xF0000;
+        hw_cfg |= (1 << 20);
+        SMSC9220->HW_CFG = hw_cfg;
+    }
+
+    return;
+}
+
+void smsc9220_enable_xmit(void)
+{
+    SMSC9220->TX_CFG = 0x2; // Enable trasmission
+    return;
+}
+
+void smsc9220_enable_mac_xmit(void)
+{
+    unsigned int mac_cr;
+
+    mac_cr = 0;
+    smsc9220_mac_regread(SMSC9220_MAC_CR, &mac_cr);
+
+    mac_cr |= (1 << 3);     // xmit enable
+    mac_cr |= (1 << 28);    // Heartbeat disable
+
+    smsc9220_mac_regwrite(SMSC9220_MAC_CR, mac_cr);
+    return;
+}
+
+void smsc9220_enable_mac_recv(void)
+{
+    unsigned int mac_cr;
+
+    mac_cr = 0;
+    smsc9220_mac_regread(SMSC9220_MAC_CR, &mac_cr);
+    mac_cr |= (1 << 2);     // Recv enable
+    smsc9220_mac_regwrite(SMSC9220_MAC_CR, mac_cr);
+
+    return;
+}
+
+
+unsigned int smsc9220_check_ready(void)
+{
+    return !(SMSC9220->PMT_CTRL & 1);
+}
+
+/* Generate a soft irq */
+void smsc9220_set_soft_int(void)
+{
+    SMSC9220->INT_EN |= 0x80000000;
+}
+
+/* clear soft irq */
+void smsc9220_clear_soft_int(void)
+{
+    SMSC9220->INT_STS |= 0x80000000;
+}
+
+
+unsigned int smsc9220_recv_packet(unsigned int *recvbuf, unsigned int *index)
+{
+    unsigned int rxfifo_inf;    // Tells us the status of rx payload and status fifos.
+    unsigned int rxfifo_stat;
+
+    unsigned int pktsize;
+    unsigned int dwords_to_read;
+
+    rxfifo_inf = SMSC9220->RX_FIFO_INF;
+
+    if(rxfifo_inf & 0xFFFF) { // If there's data
+        rxfifo_stat = SMSC9220->RX_STAT_PORT;
+        if(rxfifo_stat != 0) {   // Fetch status of this packet
+            pktsize = ((rxfifo_stat >> 16) & 0x3FFF);
+            if(rxfifo_stat & (1 << 15)) {
+                printf("Error occured during receiving of packets on the bus.\n");
+                return 1;
+            } else {
+                /* Below formula (recommended by SMSC9220 code)
+                 * gives 1 more than required. This is perhaps because
+                 * a last word is needed for not word aligned packets.
+                 */
+                dwords_to_read = (pktsize + 3) >> 2;
+                // PIO copy of data received:
+                while(dwords_to_read > 0) {
+                    recvbuf[*index] = SMSC9220->RX_DATA_PORT;
+                    (*index)++;
+                    dwords_to_read--;
+                }
+            }
+        } else {
+            return 1;
+        }
+    } else {
+        return 1;
+    }
+
+    rxfifo_stat = SMSC9220->RX_STAT_PORT;
+    rxfifo_inf = SMSC9220->RX_FIFO_INF;
+
+    return 0;
+}
+
+
+// Does the actual transfer of data to FIFO, note it does no
+// fifo availability checking. This should be done by caller.
+// Assumes the whole frame is transferred at once as a single segment
+void smsc9220_xmit_packet(unsigned char * pkt, unsigned int length)
+{
+    unsigned int txcmd_a, txcmd_b;
+    unsigned int dwords_to_write;
+    volatile unsigned int dwritten;
+    unsigned int *pktptr;
+    volatile unsigned int xmit_stat, xmit_stat2, xmit_inf;
+    int i;
+
+    pktptr = (unsigned int *) pkt;
+    txcmd_a = 0;
+    txcmd_b = 0;
+
+    txcmd_a |= (1 << 12) | (1 << 13);   // First and last segments
+    txcmd_a |= length & 0x7FF;          // [10:0] contains length
+
+    txcmd_b |= ((length & 0xFFFF) << 16); // [31:16] contains length
+    txcmd_b |= length & 0x7FF;          // [10:0] also contains length
+
+
+    SMSC9220->TX_DATA_PORT = txcmd_a;
+    SMSC9220->TX_DATA_PORT = txcmd_b;
+    dwritten = dwords_to_write = (length + 3) >> 2;
+
+    // PIO Copy to FIFO. Could replace this with DMA.
+    while(dwords_to_write > 0) {
+         SMSC9220->TX_DATA_PORT = *pktptr;
+         pktptr++;
+         dwords_to_write--;
+    }
+
+    xmit_stat = SMSC9220->TX_STAT_PORT;
+    xmit_stat2 = SMSC9220->TX_STAT_PORT;
+    xmit_inf = SMSC9220->TX_FIFO_INF;
+
+    if(xmit_stat2 != 0 ) {
+        for(i = 0; i < 6; i++) {
+            xmit_stat2 = SMSC9220->TX_STAT_PORT;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/SDK/ETH_MPS2.h	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,65 @@
+/* MPS2 Peripheral Library
+*
+* Copyright (c) 2006-2015 ARM Limited
+* All rights reserved.
+* 
+* 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. Neither the name of the copyright holder nor the names of its contributors 
+* may be used to endorse or promote products derived from this software without 
+* specific prior written permission.
+* 
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. 
+*/
+
+#ifndef _ETH_MPS2_H_
+#define _ETH_MPS2_H_
+
+#include "SMM_MPS2.h"
+
+// Function declarations
+
+unsigned int smsc9220_mac_regread(unsigned char regoffset, unsigned int *data);
+unsigned int smsc9220_mac_regwrite(unsigned char regoffset, unsigned int data);
+unsigned int smsc9220_phy_regread(unsigned char regoffset, unsigned short *data);
+unsigned int smsc9220_phy_regwrite(unsigned char regoffset, unsigned short data);
+
+unsigned int smsc9220_read_id(void);
+unsigned int smsc9220_soft_reset(void);
+void smsc9220_set_txfifo(unsigned int val);
+unsigned int smsc9220_wait_eeprom(void);
+void smsc9220_init_irqs(void);
+unsigned int smsc9220_check_phy(void);
+unsigned int smsc9220_reset_phy(void);
+
+void smsc9220_advertise_cap(void);
+void smsc9220_establish_link(void);
+void smsc9220_enable_xmit(void);
+void smsc9220_enable_mac_xmit(void);
+void smsc9220_enable_mac_recv(void);
+unsigned int smsc9220_check_ready(void);
+void smsc9220_set_soft_int(void);
+void smsc9220_clear_soft_int(void);
+
+unsigned int smsc9220_recv_packet(unsigned int *recvbuf, unsigned int *index);
+void smsc9220_xmit_packet(unsigned char * pkt, unsigned int length);
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/SDK/fpga.c	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,90 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ----------------------------------------------------------------
+ * File:     fpga.c
+ * Release:  Version 1.0
+ * ----------------------------------------------------------------
+ */
+
+/*
+ * Code implementation file for the fpga functions.
+ */
+
+#include "SMM_MPS2.h"                   // MPS2 common header
+
+// Function to delay n*ticks (25MHz = 40nS per tick)
+// Used for I2C drivers
+void i2c_delay(unsigned int tick)
+{
+    unsigned int end;
+    unsigned int start;
+
+    start = MPS2_FPGAIO->COUNTER;
+    end   = start + (tick);
+
+    if(end >= start)
+    {
+        while (MPS2_FPGAIO->COUNTER >= start && MPS2_FPGAIO->COUNTER < end);
+    }
+    else
+    {
+        while (MPS2_FPGAIO->COUNTER >= start);
+        while (MPS2_FPGAIO->COUNTER < end);
+    }
+}
+
+/* Sleep function to delay n*mS
+ * Uses FPGA counter.
+ */
+void Sleepms(unsigned int msec)
+{
+    unsigned int end;
+    unsigned int start;
+
+    start = MPS2_FPGAIO->COUNTER;
+    end   = start + (25 * msec * 1000);
+
+    if(end >= start)
+    {
+        while (MPS2_FPGAIO->COUNTER >= start && MPS2_FPGAIO->COUNTER < end);
+    }
+    else
+    {
+        while (MPS2_FPGAIO->COUNTER >= start);
+        while (MPS2_FPGAIO->COUNTER < end);
+    }
+}
+
+/* Sleep function to delay n*uS
+ */
+void Sleepus(unsigned int usec)
+{
+    unsigned int end;
+    unsigned int start;
+
+    start = MPS2_FPGAIO->COUNTER;
+    end   = start + (25 * usec);
+
+    if(end >= start)
+    {
+        while (MPS2_FPGAIO->COUNTER >= start && MPS2_FPGAIO->COUNTER < end);
+    }
+    else
+    {
+        while (MPS2_FPGAIO->COUNTER >= start);
+        while (MPS2_FPGAIO->COUNTER < end);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/SDK/fpga.h	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,34 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Code implementation file for the fpga functions.
+ */
+
+#include "SMM_MPS2.h"                   // MPS2 common header
+
+// Function to delay n*ticks (25MHz = 40nS per tick)
+// Used for I2C drivers
+void i2c_delay(unsigned int tick);
+
+/* Sleep function to delay n*mS
+ * Uses FPGA counter.
+ */
+void Sleepms(unsigned int msec);
+
+/* Sleep function to delay n*uS
+ */
+void Sleepus(unsigned int usec);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/SDK/mps2_ethernet_api.c	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,166 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <string.h>
+
+#include "mps2_ethernet_api.h"
+#include "cmsis.h"
+#include "mbed_interface.h"
+#include "toolchain.h"
+#include "mbed_error.h"
+#include "ETH_MPS2.h"
+#include "wait_api.h"
+
+#define TX_PKT_SIZE 256
+#define RX_PKT_SIZE 300
+
+// Types
+#undef FALSE
+#undef TRUE
+#define FALSE   0
+#define TRUE    1
+
+
+int smsc9220_check_id(void)
+{
+    int error;
+    unsigned int id;
+    error = 0;
+
+    id = smsc9220_read_id();
+
+    // If bottom and top halves of the word are the same
+    if(((id >> 16) & 0xFFFF) == (id & 0xFFFF)) {
+        error = 1;
+        return error;
+    }
+    switch(((id >> 16) & 0xFFFF)) {
+        case 0x9220:
+            break;
+
+        default:
+            error = 1;
+            break;
+    }
+
+    return error;
+}
+
+int smsc9220_check_macaddress(void)
+{
+    int error;
+    const unsigned int mac_valid_high = 0xC00A;
+    const unsigned int mac_valid_low = 0x00F70200;
+    unsigned int mac_low;
+    unsigned int mac_high;
+
+    error = 0;
+
+    // Read current mac address.
+    smsc9220_mac_regread(SMSC9220_MAC_ADDRH, &mac_high);
+    smsc9220_mac_regread(SMSC9220_MAC_ADDRL, &mac_low);
+
+    // Writing temporary address:
+    smsc9220_mac_regwrite(SMSC9220_MAC_ADDRH, mac_valid_high);
+    smsc9220_mac_regwrite(SMSC9220_MAC_ADDRL, mac_valid_low);
+
+    // Verify write was correct:
+    smsc9220_mac_regread(SMSC9220_MAC_ADDRH, &mac_high);
+    smsc9220_mac_regread(SMSC9220_MAC_ADDRL, &mac_low);
+
+
+    if(mac_high != mac_valid_high || mac_low != mac_valid_low) {
+        error = TRUE;
+        return error;
+    }
+
+    return error;
+}
+
+void smsc9220_print_mac_registers()
+{
+    unsigned int read;
+    int i;
+
+    i = 0;
+    read = 0;
+
+    for(i = 1; i <= 0xC; i++) {
+        smsc9220_mac_regread(i, &read);
+    }
+    return;
+}
+
+
+void smsc9220_print_phy_registers()
+{
+    unsigned short read;
+    unsigned int i;
+
+    i = 0;
+    read = 0;
+    for(i = 0; i <= 6; i++) {
+        smsc9220_phy_regread(i, &read);
+    }
+    smsc9220_phy_regread(i = 17, &read);
+
+    smsc9220_phy_regread(i = 18, &read);
+
+    smsc9220_phy_regread(i = 27, &read);
+
+    smsc9220_phy_regread(i = 29, &read);
+
+    smsc9220_phy_regread(i = 30, &read);
+
+    smsc9220_phy_regread(i = 31, &read);
+
+    return;
+}
+
+/*----------------------------------------------------------------------------
+  Ethernet Device initialize
+ *----------------------------------------------------------------------------*/
+
+int ethernet_transmission(unsigned char * pkt, unsigned int length)
+{
+    smsc9220_xmit_packet(pkt, length);
+    return 0;
+}
+
+int ethernet_reception(unsigned int *recvbuf, unsigned int *index) 
+{
+    return smsc9220_recv_packet((unsigned int *)recvbuf, index);
+}
+
+int ethernet_mac_address(char *mac) 
+{
+    return smsc9220_check_macaddress();
+}
+
+unsigned int ethernet_check_ready(void)
+{
+    return smsc9220_check_ready();
+}
+
+unsigned int ethernet_intf()
+{
+  unsigned int txfifo_inf;
+ 
+    txfifo_inf = SMSC9220->TX_FIFO_INF;
+    
+    return txfifo_inf;
+
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/SDK/mps2_ethernet_api.h	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,57 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MPS2_ETHERNET_API_H
+#define MPS2_ETHERNET_API_H
+
+#include "device.h"
+
+#if DEVICE_ETHERNET
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Connection constants
+
+// send ethernet write buffer, returning the packet size sent
+int ethernet_transmission(unsigned char * pkt, unsigned int length);
+
+// recieve from ethernet buffer, returning packet size, or 0 if no packet
+int ethernet_reception(unsigned int *recvbuf, unsigned int *index);
+
+// get the ethernet address
+int ethernet_mac_address(char *mac);
+
+unsigned int ethernet_check_ready(void);
+
+unsigned int ethernet_intf(void);
+
+int smsc9220_check_id(void);
+
+int smsc9220_check_macaddress(void);
+
+void smsc9220_print_mac_registers(void);
+void smsc9220_print_phy_registers(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/analogin_api.c	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,110 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "mbed_assert.h"
+#include "analogin_api.h"
+
+#include "cmsis.h"
+#include "pinmap.h"
+
+#define ADC_12BIT_RANGE             0xFFF
+
+static const PinMap PinMap_ADC[] = {
+    {A0_0, ADC0_0,  0},
+    {A0_1, ADC0_1,  0},
+    {A0_2, ADC0_2,  0},
+    {A0_3, ADC0_3,  0},
+    {A0_4, ADC0_4,  0},
+    {A0_5, ADC0_5,  0},
+    {A1_0, ADC0_6,  0},
+    {A1_1, ADC0_7,  0},
+    {A1_2, ADC0_8,  0},
+    {A1_3, ADC0_9,  0},
+    {A1_4, ADC0_10, 0},
+    {A1_5, ADC0_11, 0},
+    {NC,    NC,     0}
+};
+
+static const PinMap PinMap_SPI_SCLK[] = {
+    {ADC_SCLK , SPI_3, 0},
+    {NC   , NC   , 0}
+};
+
+static const PinMap PinMap_SPI_MOSI[] = {
+    {ADC_MOSI, SPI_3, 0},
+    {NC   , NC   , 0}
+};
+
+static const PinMap PinMap_SPI_MISO[] = {
+    {ADC_MISO, SPI_3, 0},
+    {NC   , NC   , 0}
+};
+
+static const PinMap PinMap_SPI_SSEL[] = {
+    {ADC_SSEL, SPI_3, 0},
+    {NC   , NC   , 0}
+};
+
+#define ADC_RANGE    ADC_12BIT_RANGE
+int analog_spi_inited = 0;
+
+void analogin_init(analogin_t *obj, PinName pin) {
+    
+    obj->adc = (ADCName)pinmap_peripheral(pin, PinMap_ADC);
+  MBED_ASSERT(obj->adc != (ADCName)NC);
+  obj->pin = pin;
+    obj->pin_number = pin-600;
+    obj->address = (0x0000 | (pin-600));
+    
+    SPIName adc_mosi = (SPIName)pinmap_peripheral(ADC_MOSI, PinMap_SPI_MOSI);
+  SPIName adc_miso = (SPIName)pinmap_peripheral(ADC_MISO, PinMap_SPI_MISO);
+  SPIName adc_sclk = (SPIName)pinmap_peripheral(ADC_SCLK, PinMap_SPI_SCLK);
+  SPIName adc_ssel = (SPIName)pinmap_peripheral(ADC_SSEL, PinMap_SPI_SSEL);
+  SPIName adc_data = (SPIName)pinmap_merge(adc_mosi, adc_miso);
+  SPIName adc_cntl = (SPIName)pinmap_merge(adc_sclk, adc_ssel);
+  obj->adc_spi = (MPS2_SSP_TypeDef*)pinmap_merge(adc_data, adc_cntl);
+  
+    if(analog_spi_inited == 0){
+    obj->adc_spi->CR1       = 0;
+    obj->adc_spi->CR0       = SSP_CR0_SCR_DFLT | SSP_CR0_FRF_MOT | SSP_CR0_DSS_16;
+    obj->adc_spi->CPSR      = SSP_CPSR_DFLT; 
+    obj->adc_spi->IMSC      = 0x8; 
+    obj->adc_spi->DMACR     = 0;
+    obj->adc_spi->CR1       = SSP_CR1_SSE_Msk;
+    obj->adc_spi->ICR       = 0x3;  
+    analog_spi_inited = 1;
+    }
+    
+  pinmap_pinout(ADC_MOSI, PinMap_SPI_MOSI);
+  pinmap_pinout(ADC_MISO, PinMap_SPI_MISO);
+  pinmap_pinout(ADC_SCLK, PinMap_SPI_SCLK);
+  pinmap_pinout(ADC_SSEL, PinMap_SPI_SSEL);
+  pinmap_pinout(pin, PinMap_ADC);
+}
+
+static inline uint32_t adc_read(analogin_t *obj) {
+    return 0;
+}
+
+
+float analogin_read(analogin_t *obj) {
+    uint32_t value = adc_read(obj);
+    return 0;
+}
+
+uint16_t analogin_read_u16(analogin_t *obj) {
+    return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/device.h	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,64 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_DEVICE_H
+#define MBED_DEVICE_H
+
+#define DEVICE_PORTIN           1
+#define DEVICE_PORTOUT          1
+#define DEVICE_PORTINOUT        1
+
+#define DEVICE_INTERRUPTIN      1
+
+#define DEVICE_ANALOGIN         1
+#define DEVICE_ANALOGOUT        0
+
+#define DEVICE_SERIAL           1
+#define DEVICE_SERIAL_FC        1
+
+#define DEVICE_I2C              1
+#define DEVICE_I2CSLAVE         0
+
+#define DEVICE_SPI              1
+#define DEVICE_SPISLAVE         1
+
+#define DEVICE_CLCD             1
+
+#define DEVICE_TSC              1
+
+#define DEVICE_AACI             1
+
+#define DEVICE_CAN              0
+
+#define DEVICE_RTC              0
+
+#define DEVICE_ETHERNET         1
+
+#define DEVICE_PWMOUT           0
+
+#define DEVICE_SEMIHOST         0
+#define DEVICE_LOCALFILESYSTEM  0
+
+#define DEVICE_SLEEP            0
+
+#define DEVICE_DEBUG_AWARENESS  0
+
+#define DEVICE_STDIO_MESSAGES   0
+
+#define DEVICE_ERROR_RED        0
+
+#include "objects.h"
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/ethernet_api.c	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,164 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <string.h>
+
+#include "ethernet_api.h"
+#include "mps2_ethernet_api.h"
+#include "cmsis.h"
+#include "mbed_interface.h"
+#include "toolchain.h"
+#include "mbed_error.h"
+#include "ETH_MPS2.h"
+#include "wait_api.h"
+
+#define TX_PKT_SIZE 256
+#define RX_PKT_SIZE 300
+
+// Types
+#undef FALSE
+#undef TRUE
+#define FALSE   0
+#define TRUE    1
+
+/*----------------------------------------------------------------------------
+  Ethernet Device initialize
+ *----------------------------------------------------------------------------*/
+int ethernet_init()
+{
+      int error;
+    error = 0;
+
+    if(smsc9220_check_id()) {
+        error = TRUE;
+    }
+
+    if(smsc9220_soft_reset()) {
+        error = TRUE;
+    }
+
+    smsc9220_set_txfifo(5);
+
+    // Sets automatic flow control thresholds, and backpressure
+    // threshold to defaults specified.
+    SMSC9220->AFC_CFG = 0x006E3740;
+
+    if(smsc9220_wait_eeprom()) {
+        error = TRUE;
+    }
+
+    // Configure GPIOs as LED outputs.
+    SMSC9220->GPIO_CFG = 0x70070000;
+
+    smsc9220_init_irqs();
+
+    /* Configure MAC addresses here if needed. */
+
+    if(smsc9220_check_phy()) {
+        error = TRUE;
+    }
+
+    if(smsc9220_reset_phy()) {
+        error = TRUE;
+        return error;
+    }
+
+    wait_ms(100);
+    // Checking whether phy reset completed successfully.
+    {
+        unsigned short phyreset;
+        phyreset = 0;
+        smsc9220_phy_regread(SMSC9220_PHY_BCONTROL, &phyreset);
+        if(phyreset & (1 << 15)) {
+            error = TRUE;
+            return error;
+        }
+    }
+
+    /* Advertise capabilities */
+    smsc9220_advertise_cap();
+
+
+    /* Begin to establish link */
+    smsc9220_establish_link();      // bit [12] of BCONTROL seems self-clearing.
+                                    // Although it's not so in the manual.
+
+    /* Interrupt threshold */
+    SMSC9220->FIFO_INT = 0xFF000000;
+
+    smsc9220_enable_mac_xmit();
+
+    smsc9220_enable_xmit();
+
+    SMSC9220->RX_CFG = 0;
+
+    smsc9220_enable_mac_recv();
+
+    // Rx status FIFO level irq threshold
+    SMSC9220->FIFO_INT &= ~(0xFF);  // Clear 2 bottom nibbles
+
+    // This sleep is compulsory otherwise txmit/receive will fail.
+    wait_ms(2000);
+    return error;
+
+}
+
+/*----------------------------------------------------------------------------
+  Ethernet Device Uninitialize
+ *----------------------------------------------------------------------------*/
+void ethernet_free() {
+}
+
+int ethernet_write(const char *data, int size)
+{
+        return 0;
+}
+
+int ethernet_send() 
+{
+ return 0;
+}
+
+int ethernet_receive() 
+{
+    return 0;
+}
+
+// Read from an recevied ethernet packet.
+// After receive returnd a number bigger than 0 it is
+// possible to read bytes from this packet.
+// Read will write up to size bytes into data.
+// It is possible to use read multible times.
+// Each time read will start reading after the last read byte before.
+
+int ethernet_read(char *data, int dlen) 
+{
+    return 0;
+}
+
+void ethernet_address(char *mac) {
+    mbed_mac_address(mac);
+}
+
+int ethernet_link(void) 
+{
+    return 0;
+}
+
+void ethernet_set_link(int speed, int duplex)
+{
+    smsc9220_establish_link();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/gpio_api.c	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,140 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "gpio_api.h"
+#include "pinmap.h"
+
+// function to enable the GPIO pin
+uint32_t gpio_set(PinName pin) {
+    return (1);
+}
+
+//function to initialise the gpio pin
+// this links the board control bits for each pin 
+// with the object created for the pin
+void gpio_init(gpio_t *obj, PinName pin) {
+        if(pin == NC){ return;}
+        else {
+        int pin_value = 0;
+        obj->pin = pin;
+        if(pin <=15){
+            pin_value = pin;
+        }else if (pin >= 16 && pin <= 31){
+            pin_value = pin-16;
+        }else if (pin >= 32 && pin <= 47){
+            pin_value = pin-32;
+        }else if (pin >= 48 && pin <= 51){
+            pin_value = pin-48;
+        }else if (pin == 100 || pin == 101){
+            pin_value = pin-100;
+        }else if (pin == 110 || pin == 111){
+            pin_value = pin-110;
+        }else if (pin >= 200 && pin <= 207){
+            pin_value = pin-200;
+        }else if (pin >= 210 && pin <= 217){
+            pin_value = pin-210;
+        }else if (pin == 303){
+            pin_value = pin-302;
+        }else if (pin == 307){
+            pin_value = pin-307;
+        }else if (pin == 308){
+            pin_value = pin-305;
+        }else if (pin == 309){
+            pin_value = pin-305;
+        }else if (pin == 310){
+            pin_value = pin-305;
+        }else if (pin == 311){
+            pin_value = pin-305;
+        }else if (pin == 323){
+            pin_value = pin-315;
+        }else if (pin == 334){
+            pin_value = pin-325;
+        }else if (pin == 653){
+            pin_value = pin-646;
+        }
+        
+        obj->mask = 0x1 << pin_value;
+        obj->pin_number = pin;
+        if(pin <=15) {
+            obj->reg_data = &CMSDK_GPIO0->DATAOUT ;
+            obj->reg_in  =         &CMSDK_GPIO0->DATA ;
+            obj->reg_dir =         &CMSDK_GPIO0->OUTENABLESET ;
+            obj->reg_dirclr = &CMSDK_GPIO0->OUTENABLECLR ;
+        } else if (pin >= 16 && pin <= 31){
+            obj->reg_data = &CMSDK_GPIO1->DATAOUT ;
+            obj->reg_in  =         &CMSDK_GPIO1->DATA ;
+            obj->reg_dir =         &CMSDK_GPIO1->OUTENABLESET ;
+            obj->reg_dirclr = &CMSDK_GPIO1->OUTENABLECLR ;
+        } else if (pin >= 32 && pin <= 47){
+            obj->reg_data = &CMSDK_GPIO2->DATAOUT;
+            obj->reg_in  =         &CMSDK_GPIO2->DATA;
+            obj->reg_dir =         &CMSDK_GPIO2->OUTENABLESET ;
+            obj->reg_dirclr = &CMSDK_GPIO2->OUTENABLECLR ;
+        }    else if (pin >= 48 && pin <= 51){
+            obj->reg_data = &CMSDK_GPIO3->DATAOUT;
+            obj->reg_in  =         &CMSDK_GPIO3->DATA;
+            obj->reg_dir =         &CMSDK_GPIO3->OUTENABLESET ;
+            obj->reg_dirclr = &CMSDK_GPIO3->OUTENABLECLR ;
+        } else if (pin == 100 || pin == 101){
+            obj->reg_data = &MPS2_FPGAIO->LED; //user leds
+            obj->reg_in  =  &MPS2_FPGAIO->LED;
+        } else if (pin == 110 || pin == 111){
+            obj->reg_data = &MPS2_FPGAIO->BUTTON; //user switches
+            obj->reg_in = &MPS2_FPGAIO->BUTTON; //user switches
+        }else if (pin >= 200 && pin <= 207){
+            obj->reg_data = &MPS2_SCC->LEDS; //mcc leds
+            obj->reg_in = &MPS2_SCC->LEDS; //mcc leds
+        }else if (pin >= 210 && pin <= 217){
+            obj->reg_in = &MPS2_SCC->SWITCHES; //mcc switches
+        }else if (pin == 303 || pin == 307){
+            obj->reg_data = &MPS2_FPGAIO->MISC; //spi chip select = 303, clcd chip select = 307
+        }else if (pin == 308 || pin == 309 || pin == 310 || pin == 311){
+            obj->reg_data = &MPS2_FPGAIO->MISC; //clcd control bits
+        }else if (pin == 323 || pin == 334 || pin == 653){ //spi 3 chip select = 323, spi 4 chip select = 334, adc chip select = 653
+            obj->reg_data = &MPS2_FPGAIO->MISC; //spi cs bits
+        }
+        
+        if (pin == 323){
+            CMSDK_GPIO0->ALTFUNCSET |= 0x0400;
+        }else if (pin == 334){
+            CMSDK_GPIO4->ALTFUNCSET |= 0x0001;
+        }else if (pin == 653){
+            CMSDK_GPIO1->ALTFUNCSET |= 0x0004;
+        }
+    }
+}
+
+void gpio_mode(gpio_t *obj, PinMode mode) {
+        pin_mode(obj->pin, mode);
+}
+
+void gpio_dir(gpio_t *obj, PinDirection direction) {
+        if(obj->pin >= 0 && obj->pin <= 51)
+            {        
+        switch (direction) {
+          case PIN_INPUT : *obj->reg_dirclr = obj->mask;  break;
+          case PIN_OUTPUT: *obj->reg_dir |= obj->mask; break;
+        }
+    } else {return;}
+}
+
+int gpio_is_connected(const gpio_t *obj){
+    if(obj->pin != (PinName)NC){
+        return 1;
+    } else {
+        return 0;
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/gpio_irq_api.c	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,241 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <stddef.h>
+#include "cmsis.h"
+#include "gpio_irq_api.h"
+#include "mbed_error.h"
+
+#define CHANNEL_NUM    32
+#define CMSDK_GPIO_0 CMSDK_GPIO0
+#define CMSDK_GPIO_1 CMSDK_GPIO1
+#define PININT_IRQ 0
+
+static uint32_t channel_ids[CHANNEL_NUM] = {0};
+static gpio_irq_handler irq_handler;
+
+static inline void handle_interrupt_in(uint32_t channel) {
+        uint32_t ch_bit = (1 << channel);
+        // Return immediately if:
+        //   * The interrupt was already served
+        //   * There is no user handler
+        //   * It is a level interrupt, not an edge interrupt
+    if (ch_bit <16){
+        if ( ((CMSDK_GPIO_0->INTSTATUS) == 0) || (channel_ids[channel] == 0) || ((CMSDK_GPIO_0->INTTYPESET) == 0) ) return;
+
+        if ((CMSDK_GPIO_0->INTTYPESET & ch_bit) && (CMSDK_GPIO_0->INTPOLSET & ch_bit)) {
+                irq_handler(channel_ids[channel], IRQ_RISE);
+                CMSDK_GPIO_0->INTPOLSET = ch_bit;
+        }
+        if ((CMSDK_GPIO_0->INTTYPESET & ch_bit) && ~(CMSDK_GPIO_0->INTPOLSET & ch_bit)) {
+                irq_handler(channel_ids[channel], IRQ_FALL);
+        }
+        CMSDK_GPIO_0->INTCLEAR = ch_bit;
+    }
+    
+    if (ch_bit>=16) {
+        if ( ((CMSDK_GPIO_1->INTSTATUS) == 0) || (channel_ids[channel] == 0) || ((CMSDK_GPIO_1->INTTYPESET) == 0) ) return;
+
+        if ((CMSDK_GPIO_1->INTTYPESET & ch_bit) && (CMSDK_GPIO_1->INTPOLSET & ch_bit)) {
+                irq_handler(channel_ids[channel], IRQ_RISE);
+                CMSDK_GPIO_1->INTPOLSET = ch_bit;
+        }
+        if ((CMSDK_GPIO_1->INTTYPESET & ch_bit) && ~(CMSDK_GPIO_1->INTPOLSET & ch_bit)) {
+                irq_handler(channel_ids[channel], IRQ_FALL);
+        }
+        CMSDK_GPIO_1->INTCLEAR = ch_bit;
+    }
+}
+
+void gpio0_irq0(void)  {handle_interrupt_in(0);}
+void gpio0_irq1(void)  {handle_interrupt_in(1);}
+void gpio0_irq2(void)  {handle_interrupt_in(2);}
+void gpio0_irq3(void)  {handle_interrupt_in(3);}
+void gpio0_irq4(void)  {handle_interrupt_in(4);}
+void gpio0_irq5(void)  {handle_interrupt_in(5);}
+void gpio0_irq6(void)  {handle_interrupt_in(6);}
+void gpio0_irq7(void)  {handle_interrupt_in(7);}
+void gpio0_irq8(void)  {handle_interrupt_in(8);}
+void gpio0_irq9(void)  {handle_interrupt_in(9);}
+void gpio0_irq10(void) {handle_interrupt_in(10);}
+void gpio0_irq11(void) {handle_interrupt_in(11);}
+void gpio0_irq12(void) {handle_interrupt_in(12);}
+void gpio0_irq13(void) {handle_interrupt_in(13);}
+void gpio0_irq14(void) {handle_interrupt_in(14);}
+void gpio0_irq15(void) {handle_interrupt_in(15);}
+void gpio1_irq0(void)  {handle_interrupt_in(16);}
+void gpio1_irq1(void)  {handle_interrupt_in(17);}
+void gpio1_irq2(void)  {handle_interrupt_in(18);}
+void gpio1_irq3(void)  {handle_interrupt_in(19);}
+void gpio1_irq4(void)  {handle_interrupt_in(20);}
+void gpio1_irq5(void)  {handle_interrupt_in(21);}
+void gpio1_irq6(void)  {handle_interrupt_in(22);}
+void gpio1_irq7(void)  {handle_interrupt_in(23);}
+void gpio1_irq8(void)  {handle_interrupt_in(24);}
+void gpio1_irq9(void)  {handle_interrupt_in(25);}
+void gpio1_irq10(void) {handle_interrupt_in(26);}
+void gpio1_irq11(void) {handle_interrupt_in(27);}
+void gpio1_irq12(void) {handle_interrupt_in(28);}
+void gpio1_irq13(void) {handle_interrupt_in(29);}
+void gpio1_irq14(void) {handle_interrupt_in(30);}
+void gpio1_irq15(void) {handle_interrupt_in(31);}
+
+
+int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32_t id) {
+        if (pin == NC) {return -1;}
+        else {
+        
+        irq_handler = handler;
+        
+        int found_free_channel = 0;
+        int i = 0;
+        for (i=0; i<CHANNEL_NUM; i++) {
+                if (channel_ids[i] == 0) {
+                        channel_ids[i] = id;
+                        obj->ch = i;
+                        found_free_channel = 1;
+                        break;
+                }
+        }
+        if (!found_free_channel) return -1;
+        
+        
+        /* To select a pin for any of the eight pin interrupts, write the pin number
+         * as 0 to 23 for pins PIO0_0 to PIO0_23 and 24 to 55.
+         * @see: mbed_capi/PinNames.h
+         */
+        if (pin <16)
+        {
+        CMSDK_GPIO_0->INTENSET |= (0x1 << pin);
+        }
+        
+        if (pin >= 16)
+        {
+        CMSDK_GPIO_1->INTENSET |= (0x1 << pin);
+        }
+
+        void (*channels_irq)(void) = NULL;
+        switch (obj->ch) {
+                case 0: channels_irq = &gpio0_irq0; break;
+                case 1: channels_irq = &gpio0_irq1; break;
+                case 2: channels_irq = &gpio0_irq2; break;
+                case 3: channels_irq = &gpio0_irq3; break;
+                case 4: channels_irq = &gpio0_irq4; break;
+                case 5: channels_irq = &gpio0_irq5; break;
+                case 6: channels_irq = &gpio0_irq6; break;
+                case 7: channels_irq = &gpio0_irq7; break;
+                case 8: channels_irq = &gpio0_irq8; break;
+                case 9: channels_irq = &gpio0_irq9; break;
+                case 10: channels_irq = &gpio0_irq10; break;
+                case 11: channels_irq = &gpio0_irq11; break;
+                case 12: channels_irq = &gpio0_irq12; break;
+                case 13: channels_irq = &gpio0_irq13; break;
+                case 14: channels_irq = &gpio0_irq14; break;
+                case 15: channels_irq = &gpio0_irq15; break;
+                case 16: channels_irq = &gpio1_irq0; break;
+                case 17: channels_irq = &gpio1_irq1; break;
+                case 18: channels_irq = &gpio1_irq2; break;
+                case 19: channels_irq = &gpio1_irq3; break;
+                case 20: channels_irq = &gpio1_irq4; break;
+                case 21: channels_irq = &gpio1_irq5; break;
+                case 22: channels_irq = &gpio1_irq6; break;
+                case 23: channels_irq = &gpio1_irq7; break;
+                case 24: channels_irq = &gpio1_irq8; break;
+                case 25: channels_irq = &gpio1_irq9; break;
+                case 26: channels_irq = &gpio1_irq10; break;
+                case 27: channels_irq = &gpio1_irq11; break;
+                case 28: channels_irq = &gpio1_irq12; break;
+                case 29: channels_irq = &gpio1_irq13; break;
+                case 30: channels_irq = &gpio1_irq14; break;
+                case 31: channels_irq = &gpio1_irq15; break;
+            
+        }
+        NVIC_SetVector((IRQn_Type)(PININT_IRQ + obj->ch), (uint32_t)channels_irq);
+        NVIC_EnableIRQ((IRQn_Type)(PININT_IRQ + obj->ch));
+    
+        return 0;
+    }
+}
+
+void gpio_irq_free(gpio_irq_t *obj) {
+}
+
+void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) {
+        unsigned int ch_bit = (1 << obj->ch);
+        
+        // Clear interrupt
+        if (obj->ch <16)
+        {
+                if (!(CMSDK_GPIO_0->INTTYPESET & ch_bit))
+                {
+                    CMSDK_GPIO_0->INTCLEAR = ch_bit;
+                }
+        }
+        if (obj->ch >= 16)
+        {
+                if (!(CMSDK_GPIO_1->INTTYPESET & ch_bit))
+                {
+                    CMSDK_GPIO_1->INTCLEAR = ch_bit;
+                }
+        }
+        
+        // Edge trigger
+        if (obj->ch <16)
+        {
+                CMSDK_GPIO_0->INTTYPESET &= ch_bit;
+                if (event == IRQ_RISE) {
+                        CMSDK_GPIO_0->INTPOLSET |= ch_bit;
+                        if (enable) {
+                                CMSDK_GPIO_0->INTENSET |= ch_bit;
+                        } else {
+                                CMSDK_GPIO_0->INTENCLR |= ch_bit;
+                        }
+                } else {
+                        CMSDK_GPIO_0->INTPOLCLR |= ch_bit;
+                        if (enable) {
+                                CMSDK_GPIO_0->INTENSET |= ch_bit;
+                        } else {
+                                CMSDK_GPIO_0->INTENCLR |= ch_bit;
+                        }
+                }
+        }
+        if (obj->ch >= 16)
+        {
+                CMSDK_GPIO_1->INTTYPESET &= ch_bit;
+                if (event == IRQ_RISE) {
+                        CMSDK_GPIO_1->INTPOLSET |= ch_bit;
+                        if (enable) {
+                                CMSDK_GPIO_1->INTENSET |= ch_bit;
+                        } else {
+                                CMSDK_GPIO_1->INTENCLR |= ch_bit;
+                        }
+                } else {
+                        CMSDK_GPIO_1->INTPOLCLR |= ch_bit;
+                        if (enable) {
+                                CMSDK_GPIO_1->INTENSET |= ch_bit;
+                        } else {
+                                CMSDK_GPIO_1->INTENCLR |= ch_bit;
+                        }
+                }
+        }
+}
+
+void gpio_irq_enable(gpio_irq_t *obj) {
+        NVIC_EnableIRQ((IRQn_Type)(PININT_IRQ + obj->ch));
+}
+
+void gpio_irq_disable(gpio_irq_t *obj) {
+        NVIC_DisableIRQ((IRQn_Type)(PININT_IRQ + obj->ch));
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/gpio_object.h	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,55 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_GPIO_OBJECT_H
+#define MBED_GPIO_OBJECT_H
+
+#include "cmsis.h"
+#include "PortNames.h"
+#include "PeripheralNames.h"
+#include "PinNames.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+    
+typedef struct {
+    PinName  pin;
+    uint32_t mask;
+        uint32_t pin_number;
+    
+    __IO uint32_t *reg_dir;
+        __IO uint32_t *reg_dirclr;
+    __IO uint32_t *reg_data;
+    __I uint32_t *reg_in;
+} gpio_t;
+
+static inline void gpio_write(gpio_t *obj, int value) {
+    if (value){
+                *obj->reg_data |= (obj->mask); 
+        } else {
+                *obj->reg_data &= ~(obj->mask); 
+        }
+}
+
+static inline int gpio_read(gpio_t *obj) {
+    return ((*obj->reg_in & obj->mask) ? 1 : 0);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/i2c_api.c	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,523 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "i2c_api.h"
+#include "cmsis.h"
+#include "pinmap.h"
+#include "mbed_error.h"
+#include "SMM_MPS2.h"
+#include "wait_api.h"
+#include "fpga.h"
+
+// Types
+#undef FALSE
+#undef TRUE
+#define FALSE   0
+#define TRUE    1
+
+// TSC I2C controller
+#define TSC_I2C_ADDR          0x82
+// AACI I2C controller I2C address
+#define AAIC_I2C_ADDR          0x96
+// LM75B I2C address
+#define LM75_I2C_ADDR          0x90
+// MMA7660 I2C address
+#define MMA7660_I2C_ADDR          0x98
+
+// Timing Delays
+#define TSC_TSU            15          // Setup delay 600nS min
+#define AAIC_TSU            25           // Setup delay 1000nS min
+#define SHIELD_TSU            25           // Setup delay 1000nS min
+
+
+static const PinMap PinMap_I2C_SDA[] = {
+    {TSC_SDA, I2C_0, 0},
+    {AUD_SDA, I2C_1, 0},
+    {SHIELD_0_SDA, I2C_2, 0},
+    {SHIELD_1_SDA, I2C_3, 0},
+    {NC   , NC   , 0}
+};
+
+static const PinMap PinMap_I2C_SCL[] = {
+    {TSC_SCL, I2C_0, 0},
+    {AUD_SCL, I2C_1, 0},
+    {SHIELD_0_SCL, I2C_2, 0},
+    {SHIELD_1_SCL, I2C_3, 0},
+    {NC   , NC,    0}
+};
+
+static inline void i2c_send_byte(i2c_t *obj, unsigned char c)
+{
+    int loop;
+    switch ((int)obj->i2c) {
+        case I2C_0: 
+            obj->i2c->CONTROLC = SCL;
+            i2c_delay(TSC_TSU);
+
+            for (loop = 0; loop < 8; loop++)
+            {
+                if (c & (1 << (7 - loop)))
+                    obj->i2c->CONTROLS = SDA;
+                else
+                    obj->i2c->CONTROLC = SDA;
+                
+                i2c_delay(TSC_TSU);
+                obj->i2c->CONTROLS = SCL;
+                i2c_delay(TSC_TSU);
+                obj->i2c->CONTROLC = SCL;
+                i2c_delay(TSC_TSU);
+            }
+
+            obj->i2c->CONTROLS = SDA;
+            i2c_delay(TSC_TSU);
+        break;
+        case I2C_1:
+            for (loop = 0; loop < 8; loop++) {
+                i2c_delay(AAIC_TSU);
+                obj->i2c->CONTROLC = SCL;
+                i2c_delay(AAIC_TSU);
+                if (c & (1 << (7 - loop)))
+                    obj->i2c->CONTROLS = SDA;
+                else
+                    obj->i2c->CONTROLC = SDA;
+                
+                i2c_delay(AAIC_TSU);
+                obj->i2c->CONTROLS = SCL;
+                i2c_delay(AAIC_TSU);
+                obj->i2c->CONTROLC = SCL;
+            }
+
+            i2c_delay(AAIC_TSU);
+            obj->i2c->CONTROLS = SDA;
+            i2c_delay(AAIC_TSU);
+        break;
+        case I2C_2: 
+        case I2C_3: 
+            obj->i2c->CONTROLC = SCL;
+            i2c_delay(SHIELD_TSU);
+
+            for (loop = 0; loop < 8; loop++)
+            {
+                if (c & (1 << (7 - loop)))
+                    obj->i2c->CONTROLS = SDA;
+                else
+                    obj->i2c->CONTROLC = SDA;
+                
+                i2c_delay(SHIELD_TSU);
+                obj->i2c->CONTROLS = SCL;
+                i2c_delay(SHIELD_TSU);
+                obj->i2c->CONTROLC = SCL;
+                i2c_delay(SHIELD_TSU);
+            }
+
+            obj->i2c->CONTROLS = SDA;
+            i2c_delay(SHIELD_TSU);
+        break;
+    }
+}
+
+static inline unsigned char i2c_receive_byte(i2c_t *obj)
+{
+    int data_receive_byte, loop;
+    switch ((int)obj->i2c) {
+        case I2C_0: 
+            obj->i2c->CONTROLS = SDA;
+            i2c_delay(TSC_TSU);
+
+            data_receive_byte = 0;
+
+            for (loop = 0; loop < 8; loop++)
+            {
+                obj->i2c->CONTROLS = SCL;
+                i2c_delay(TSC_TSU);
+                if ((obj->i2c->CONTROL & SDA))
+                    data_receive_byte += (1 << (7 - loop));
+                
+                obj->i2c->CONTROLC = SCL;
+                i2c_delay(TSC_TSU);
+            }
+
+            obj->i2c->CONTROLC = SDA;
+            i2c_delay(TSC_TSU);
+        break;
+        case I2C_1:
+            obj->i2c->CONTROLS = SDA;
+            data_receive_byte = 0;
+
+            for (loop = 0; loop < 8; loop++) {
+                i2c_delay(AAIC_TSU);
+                obj->i2c->CONTROLC = SCL;
+                i2c_delay(AAIC_TSU);
+                obj->i2c->CONTROLS = SCL | SDA;
+                i2c_delay(AAIC_TSU);
+                if ((obj->i2c->CONTROL & SDA))
+                    data_receive_byte += (1 << (7 - loop));
+                
+                i2c_delay(AAIC_TSU);
+                obj->i2c->CONTROLC = SCL;
+            }
+
+            i2c_delay(AAIC_TSU);
+            obj->i2c->CONTROLC = SDA;
+            i2c_delay(AAIC_TSU);
+        break;
+        case I2C_2: 
+        case I2C_3:
+            obj->i2c->CONTROLS = SDA;
+            i2c_delay(SHIELD_TSU);
+
+            data_receive_byte = 0;
+
+            for (loop = 0; loop < 8; loop++)
+            {
+                obj->i2c->CONTROLS = SCL;
+                i2c_delay(SHIELD_TSU);
+                if ((obj->i2c->CONTROL & SDA))
+                    data_receive_byte += (1 << (7 - loop));
+                
+                obj->i2c->CONTROLC = SCL;
+                i2c_delay(SHIELD_TSU);
+            }
+
+            obj->i2c->CONTROLC = SDA;
+            i2c_delay(SHIELD_TSU);
+        break;
+    }
+    return data_receive_byte;
+}
+
+static inline int i2c_receive_ack(i2c_t *obj)
+{
+    int nack;
+    int delay_value;
+    switch ((int)obj->i2c) {
+        case I2C_0: delay_value = TSC_TSU; break;
+        case I2C_1: delay_value = AAIC_TSU; break;
+        case I2C_2: delay_value = SHIELD_TSU; break;
+        case I2C_3: delay_value = SHIELD_TSU; break;
+    }
+
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLS = SDA;
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLC = SCL;
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLS = SCL;
+    i2c_delay(delay_value);
+    nack = obj->i2c->CONTROL & SDA;
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLC = SCL;
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLS = SDA;
+    i2c_delay(delay_value);
+    if(nack==0)
+        return 1;
+
+    return 0;
+}
+
+
+static inline void i2c_send_nack(i2c_t *obj) 
+{
+    int delay_value;
+    switch ((int)obj->i2c) {
+        case I2C_0: delay_value = TSC_TSU; break;
+        case I2C_1: delay_value = AAIC_TSU; break;
+        case I2C_2: delay_value = SHIELD_TSU; break;
+        case I2C_3: delay_value = SHIELD_TSU; break;
+    }
+
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLC = SCL;
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLS = SDA;
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLS = SCL;
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLC = SCL;
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLC = SDA;
+    i2c_delay(delay_value);
+
+}
+
+static inline void i2c_send_ack(i2c_t *obj) 
+{
+    int delay_value;
+    switch ((int)obj->i2c) {
+        case I2C_0: delay_value = TSC_TSU; break;
+        case I2C_1: delay_value = AAIC_TSU; break;
+        case I2C_2: delay_value = SHIELD_TSU; break;
+        case I2C_3: delay_value = SHIELD_TSU; break;
+    }
+
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLC = SDA;
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLS = SCL;
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLC = SCL;
+    i2c_delay(delay_value);
+
+}
+
+void i2c_init(i2c_t *obj, PinName sda, PinName scl)
+{
+    // determine the SPI to use
+    I2CName i2c_sda = (I2CName)pinmap_peripheral(sda, PinMap_I2C_SDA);
+    I2CName i2c_scl = (I2CName)pinmap_peripheral(scl, PinMap_I2C_SCL);
+    obj->i2c = (MPS2_I2C_TypeDef *)pinmap_merge(i2c_sda, i2c_scl);
+    
+    if ((int)obj->i2c == NC) {
+        error("I2C pin mapping failed");
+    }
+        
+    pinmap_pinout(sda, PinMap_I2C_SDA);
+    pinmap_pinout(scl, PinMap_I2C_SCL);
+        
+    switch ((int)obj->i2c) {
+        case I2C_2: CMSDK_GPIO0->ALTFUNCSET |= 0xC000; break;
+        case I2C_3: CMSDK_GPIO1->ALTFUNCSET |= 0x00C0; break;
+    }
+        
+        
+}
+
+int i2c_start(i2c_t *obj)
+{
+    int delay_value;
+    switch ((int)obj->i2c) {
+        case I2C_0: delay_value = TSC_TSU; break;
+        case I2C_1: delay_value = AAIC_TSU; break;
+        case I2C_2: delay_value = SHIELD_TSU; break;
+        case I2C_3: delay_value = SHIELD_TSU; break;
+    }
+    
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLS = SDA | SCL;
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLC = SDA;
+    i2c_delay(delay_value);
+
+    return 0;
+}
+
+int i2c_start_tsc(i2c_t *obj)
+{
+    int delay_value;
+    switch ((int)obj->i2c) {
+        case I2C_0: delay_value = TSC_TSU; break;
+        case I2C_1: delay_value = AAIC_TSU; break;
+        case I2C_2: delay_value = SHIELD_TSU; break;
+        case I2C_3: delay_value = SHIELD_TSU; break;
+    }
+    
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLC = SDA;
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLC = SCL;
+    i2c_delay(delay_value);
+
+    return 0;
+}
+
+int i2c_stop(i2c_t *obj)
+{    
+    int delay_value;
+    switch ((int)obj->i2c) {
+        case I2C_0: delay_value = TSC_TSU; break;
+        case I2C_1: delay_value = AAIC_TSU; break;
+        case I2C_2: delay_value = SHIELD_TSU; break;
+        case I2C_3: delay_value = SHIELD_TSU; break;
+    }
+    // Actual stop bit
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLC = SDA;
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLS = SCL;
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLS = SDA;
+    i2c_delay(delay_value);
+
+    return 0;
+}
+
+
+
+void i2c_frequency(i2c_t *obj, int hz) {
+}
+
+int i2c_read(i2c_t *obj, int address, char *data, int length, int stop)
+{
+    unsigned int loop, rxdata;
+    int sadr, ack, bytes_read;
+    rxdata=0;
+    switch ((int)obj->i2c) {
+        case I2C_0: 
+            sadr = TSC_I2C_ADDR; 
+            break;
+        case I2C_1: 
+            sadr = AAIC_I2C_ADDR; 
+            break;
+        case I2C_2: 
+        case I2C_3: 
+            sadr = address;     //LM75_I2C_ADDR; or MMA7660_I2C_ADDR;
+            break;
+         }
+    bytes_read = 0;
+    // Start bit
+    i2c_start(obj);
+
+    switch ((int)obj->i2c) {
+        case I2C_0: 
+            // Set serial and register address
+            i2c_send_byte(obj,sadr);
+            ack += i2c_receive_ack(obj);
+            i2c_send_byte(obj, address);
+            ack += i2c_receive_ack(obj);
+
+            // Stop bit
+            i2c_stop(obj);
+
+            // Start bit
+            i2c_start_tsc(obj);
+
+            // Read from I2C address
+            i2c_send_byte(obj,sadr | 1);
+            ack += i2c_receive_ack(obj);
+
+            rxdata = (i2c_receive_byte(obj) & 0xFF);
+            data[((length-1)-bytes_read)] = (char)rxdata;
+            bytes_read++;
+            // Read multiple bytes
+            if ((length > 1) && (length < 5))
+            {
+                for (loop = 1; loop <= (length - 1); loop++)
+                {
+                    // Send ACK
+                    i2c_send_ack(obj);
+
+                    // Next byte
+                    //rxdata = ((rxdata << 8) & 0xFFFFFF00);
+                    //rxdata |= (i2c_receive_byte(obj) & 0xFF);
+                    rxdata = i2c_receive_byte(obj);
+                    data[(length-1)-bytes_read] = (char)rxdata;
+                    bytes_read++;
+                            
+                }
+            }
+            break;
+        case I2C_1:
+            // Set serial and register address
+            i2c_send_byte(obj,sadr);
+            ack += i2c_receive_ack(obj);
+            i2c_send_byte(obj, address);
+            ack += i2c_receive_ack(obj);
+
+            // Stop bit
+            i2c_stop(obj);
+
+            // Start bit
+            i2c_start_tsc(obj);
+            // Fall through to read data
+        case I2C_2:
+        case I2C_3:
+            // Read from preset register address pointer
+            i2c_send_byte(obj,sadr | 1);
+            ack += i2c_receive_ack(obj);
+
+            rxdata = i2c_receive_byte(obj);
+            data[bytes_read] = (char)rxdata;
+            bytes_read++;
+            // Read multiple bytes
+            if ((length > 1) && (length < 5))
+            {
+                for (loop = 1; loop <= (length - 1); loop++)
+                {
+                    // Send ACK
+                    i2c_send_ack(obj);
+
+                    // Next byte
+                    rxdata = i2c_receive_byte(obj);
+                    data[loop] = (char)rxdata;
+                    bytes_read++;
+                            
+                }
+            }
+            break;
+    }
+    i2c_send_nack(obj);  
+
+    i2c_stop(obj);    // Actual stop bit
+
+    return bytes_read;
+}
+
+int i2c_write(i2c_t *obj, int address, const char *data, int length, int stop)
+{
+    int ack=0;
+    int sadr;
+    char * ptr;
+    char addr;
+    ptr = (char*)data;
+    switch ((int)obj->i2c)
+    {
+        case I2C_0: 
+            sadr = TSC_I2C_ADDR;
+            addr = address;
+            break;
+        case I2C_1: 
+            sadr = AAIC_I2C_ADDR; 
+            addr = address;
+            break;
+        case I2C_2: 
+        case I2C_3: 
+            sadr = address; //LM75_I2C_ADDR or MMA7660_I2C_ADDR;
+            addr = *ptr++;
+            break;
+     }
+    
+//    printf("adr = %x, reg = %x\n",sadr, address);
+    i2c_start(obj);
+
+    // Set serial and register address
+    i2c_send_byte(obj,sadr);
+    ack += i2c_receive_ack(obj);
+    i2c_send_byte(obj, addr);
+    ack += i2c_receive_ack(obj);
+
+    for(int i = 1; i<length; i++)
+    {
+        i2c_send_byte(obj, *ptr++);
+        ack += i2c_receive_ack(obj);
+    }
+
+    i2c_stop(obj);
+    if(ack==3) { return 1; }
+    else{ return 0; }
+
+}
+
+void i2c_reset(i2c_t *obj) {
+    i2c_stop(obj);
+}
+
+int i2c_byte_read(i2c_t *obj, int last) {
+    return 0;
+}
+
+int i2c_byte_write(i2c_t *obj, int data) {
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/objects.h	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,82 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MBED_OBJECTS_H
+#define MBED_OBJECTS_H
+
+#include "cmsis.h"
+#include "PortNames.h"
+#include "PeripheralNames.h"
+#include "PinNames.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct gpio_irq_s {
+    uint32_t ch;
+};
+
+struct port_s {
+    __IO uint32_t *reg_dir;
+        __IO uint32_t *reg_dirclr;
+    __IO uint32_t *reg_out;
+    __IO  uint32_t *reg_in;
+    PortName port;
+    uint32_t mask;
+};
+
+struct serial_s {
+    CMSDK_UART_TypeDef *uart;
+    int index;
+};
+
+struct i2c_s {
+    MPS2_I2C_TypeDef *i2c;
+};
+
+struct tsc_s {
+    MPS2_I2C_TypeDef *tsc;
+};
+
+struct audio_s {
+    MPS2_I2S_TypeDef *audio_I2S;
+        MPS2_I2C_TypeDef *audio_I2C;
+};
+
+
+struct spi_s {
+    MPS2_SSP_TypeDef *spi;
+};
+
+struct clcd_s {
+    MPS2_SSP_TypeDef *clcd;
+};
+
+struct analogin_s {
+    ADCName adc;
+        MPS2_SSP_TypeDef *adc_spi;
+    PinName  pin;
+        uint32_t pin_number;
+    __IO uint32_t address;
+};
+
+#include "gpio_object.h"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/pinmap.c	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,28 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "mbed_assert.h"
+#include "pinmap.h"
+#include "mbed_error.h"
+
+
+void pin_function(PinName pin, int function) {
+        MBED_ASSERT(pin != (PinName)NC);
+
+}
+
+void pin_mode(PinName pin, PinMode mode) {
+        MBED_ASSERT(pin != (PinName)NC);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/port_api.c	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,68 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "port_api.h"
+#include "pinmap.h"
+#include "gpio_api.h"
+
+PinName port_pin(PortName port, int pin_n) {
+    return (PinName)((port << PORT_SHIFT) | pin_n);
+}
+
+void port_init(port_t *obj, PortName port, int mask, PinDirection dir) {
+    obj->port = port;
+    obj->mask = mask;
+    
+    CMSDK_GPIO_TypeDef *port_reg = (CMSDK_GPIO_TypeDef *)(CMSDK_GPIO0_BASE + ((int)port * 0x10));    
+
+    obj->reg_in  = &port_reg->DATAOUT;
+    obj->reg_dir = &port_reg->OUTENABLESET;
+    obj->reg_dirclr = &port_reg->OUTENABLECLR;
+ 
+    uint32_t i;
+    // The function is set per pin: reuse gpio logic
+    for (i=0; i<16; i++) {
+        if (obj->mask & (1<<i)) {
+            gpio_set(port_pin(obj->port, i));
+        }
+    }
+    
+    port_dir(obj, dir);
+}
+
+void port_mode(port_t *obj, PinMode mode) {
+    uint32_t i;
+    // The mode is set per pin: reuse pinmap logic
+    for (i=0; i<32; i++) {
+        if (obj->mask & (1<<i)) {
+            pin_mode(port_pin(obj->port, i), mode);
+        }
+    }
+}
+
+void port_dir(port_t *obj, PinDirection dir) {
+    switch (dir) {
+        case PIN_INPUT : *obj->reg_dir &= ~obj->mask; break;
+        case PIN_OUTPUT: *obj->reg_dir |=  obj->mask; break;
+    }
+}
+
+void port_write(port_t *obj, int value) {
+    *obj->reg_in = value;
+}
+
+int port_read(port_t *obj) {
+    return (*obj->reg_in);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/serial_api.c	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,367 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// math.h required for floating point operations for baud rate calculation
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "serial_api.h"
+#include "cmsis.h"
+#include "pinmap.h"
+#include "mbed_error.h"
+#include "gpio_api.h"
+
+/******************************************************************************
+ * INITIALIZATION
+ ******************************************************************************/
+
+static const PinMap PinMap_UART_TX[] = {
+    {USBTX     , UART_0, 0},
+    {XB_TX   , UART_1, 0},
+    {SH0_TX  , UART_2, 0},
+    {SH1_TX  , UART_3, 0},
+    {NC      , NC    , 0}
+};
+
+static const PinMap PinMap_UART_RX[] = {
+    {USBRX     , UART_0, 0},
+    {XB_RX   , UART_1, 0},
+    {SH0_RX  , UART_2, 0},
+    {SH1_RX  , UART_3, 0},
+    {NC      , NC    , 0}
+};
+
+#define UART_NUM    4
+
+static uart_irq_handler irq_handler;
+
+int stdio_uart_inited = 0;
+serial_t stdio_uart;
+
+struct serial_global_data_s {
+    uint32_t serial_irq_id;
+    gpio_t sw_rts, sw_cts;
+    uint8_t count, rx_irq_set_flow, rx_irq_set_api;
+};
+
+static struct serial_global_data_s uart_data[UART_NUM];
+
+void serial_init(serial_t *obj, PinName tx, PinName rx) {
+    int is_stdio_uart = 0;
+    
+    // determine the UART to use
+    UARTName uart_tx = (UARTName)pinmap_peripheral(tx, PinMap_UART_TX);
+    UARTName uart_rx = (UARTName)pinmap_peripheral(rx, PinMap_UART_RX);
+    UARTName uart = (UARTName)pinmap_merge(uart_tx, uart_rx);
+    if ((int)uart == NC) {
+        error("Serial pinout mapping failed");
+    }
+    
+    obj->uart = (CMSDK_UART_TypeDef *)uart;
+    //set baud rate and enable Uart in normarl mode (RX and TX enabled)
+    switch (uart)
+    {
+        case UART_0:     //UART HEADER
+        {
+          CMSDK_UART1->CTRL = 0x0;    // Disable UART when changing configuration
+          if((int)tx != NC)
+          {
+            CMSDK_UART1->CTRL |= 0x01;   // TX enable 
+          } else {
+            CMSDK_UART1->CTRL &= 0xFFFE;  // TX disable
+          }
+          if((int)rx != NC)
+          {
+            CMSDK_UART1->CTRL |= 0x02;  // RX enable
+          } else {
+            CMSDK_UART1->CTRL &= 0xFFFD;  // RX disable
+          } 
+        }
+        break;
+        case UART_1:     //XBEE SOCKET UART
+        {
+          CMSDK_UART3->CTRL = 0x00;    // Disable UART when changing configuration
+          if((int)tx != NC)
+          {
+            CMSDK_UART3->CTRL = 0x1;   // TX enable 
+            CMSDK_GPIO4->ALTFUNCSET |= 0x0100;
+          }
+          if((int)rx != NC)
+          {
+            CMSDK_UART3->CTRL |= 0x2;  // RX enable 
+            CMSDK_GPIO4->ALTFUNCSET |= 0x0080;
+          }
+        }
+        break;
+        case UART_2:     //Sheild0 UART
+        {
+          CMSDK_UART0->CTRL = 0x00;    // Disable UART when changing configuration
+          if((int)uart_tx != NC)
+          {
+            CMSDK_UART0->CTRL |= 0x01;  // TX enable 
+                        CMSDK_GPIO0->ALTFUNCSET |= 0x0002;
+          }
+          
+          if((int)uart_rx != NC)
+          {
+                        CMSDK_UART0->CTRL |= 0x02;  // RX enable  
+                        CMSDK_GPIO0->ALTFUNCSET |= 0x0001;
+          }
+        }
+        break;
+        case UART_3:     //Sheild1 UART
+        {     
+          CMSDK_UART2->CTRL = 0x00;    // Disable UART when changing configuration
+          if((int)tx != NC)
+          {
+            CMSDK_UART2->CTRL = 0x1;   // TX enable 
+                        CMSDK_GPIO1->ALTFUNCSET |= 0x0002;
+          }
+          if((int)rx != NC)
+          {
+            CMSDK_UART2->CTRL |= 0x2;  // RX enable 
+                        CMSDK_GPIO1->ALTFUNCSET |= 0x0001;
+          }
+        } 
+        break;
+    }
+
+    // set default baud rate and format
+    serial_baud  (obj, 9600);
+    
+    // pinout the chosen uart
+    pinmap_pinout(tx, PinMap_UART_TX);
+    pinmap_pinout(rx, PinMap_UART_RX);
+    
+    switch (uart) {
+        case UART_0: obj->index = 0; break;
+        case UART_1: obj->index = 1; break;
+        case UART_2: obj->index = 2; break;
+        case UART_3: obj->index = 3; break;
+    }
+    uart_data[obj->index].sw_rts.pin = NC;
+    uart_data[obj->index].sw_cts.pin = NC;
+    serial_set_flow_control(obj, FlowControlNone, NC, NC);
+    
+    is_stdio_uart = (uart == STDIO_UART) ? (1) : (0);
+    
+    if (is_stdio_uart) {
+        stdio_uart_inited = 1;
+        memcpy(&stdio_uart, obj, sizeof(serial_t));
+    }
+}
+
+void serial_free(serial_t *obj) {
+      uart_data[obj->index].serial_irq_id = 0;
+}
+
+// serial_baud
+// set the baud rate, taking in to account the current SystemFrequency
+void serial_baud(serial_t *obj, int baudrate) {
+    // The MPS2 has a simple divider to control the baud rate. The formula is:
+    //
+    // Baudrate = PCLK / BAUDDIV
+        //
+        // PCLK = 24 Mhz
+        // so for a desired baud rate of 9600 
+        //  24000000 / 9600 = 2500
+    //
+    //check to see if minimum baud value entered
+    int baudrate_div = 0;
+    baudrate_div = SystemCoreClock / baudrate;
+    if(baudrate >= 16){
+    switch ((int)obj->uart) {
+        case UART_0: CMSDK_UART1->BAUDDIV = baudrate_div; break;
+        case UART_1: CMSDK_UART3->BAUDDIV = baudrate_div; break;
+        case UART_2: CMSDK_UART0->BAUDDIV = baudrate_div; break;
+        case UART_3: CMSDK_UART2->BAUDDIV = baudrate_div; break;
+        default: error("serial_baud"); break;
+    }
+    } else {
+        error("serial_baud");
+    }
+
+}
+
+void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_bits) {
+}
+
+/******************************************************************************
+ * INTERRUPTS HANDLING
+ ******************************************************************************/
+static inline void uart_irq(uint32_t intstatus, uint32_t index, CMSDK_UART_TypeDef *puart) {
+    SerialIrq irq_type;
+    switch (intstatus)
+    {
+        case 1:
+        {
+            irq_type = TxIrq;
+        }
+        break;
+
+        case 2:
+        {
+            irq_type = RxIrq;
+        }
+        break;
+
+        default: return;
+    }   /* End of Switch */
+
+    if ((RxIrq == irq_type) && (NC != uart_data[index].sw_rts.pin)) 
+    {
+        gpio_write(&uart_data[index].sw_rts, 1);
+        // Disable interrupt if it wasn't enabled by other part of the application
+        if (!uart_data[index].rx_irq_set_api)
+        {
+            /* Disable Rx interrupt */
+            puart->CTRL &= ~(CMSDK_UART_CTRL_RXIRQEN_Msk);
+        }
+    }
+
+    if (uart_data[index].serial_irq_id != 0)
+    {
+        if ((irq_type != RxIrq) || (uart_data[index].rx_irq_set_api))
+        {
+            irq_handler(uart_data[index].serial_irq_id, irq_type);
+        }
+    }
+
+    if( irq_type == TxIrq )
+    {
+        /* Clear the TX interrupt Flag */
+        puart->INTCLEAR |= 0x01;
+    }
+    else
+    {
+        /* Clear the Rx interupt Flag */
+        puart->INTCLEAR |= 0x02;
+    }
+}
+
+void uart0_irq() {uart_irq(CMSDK_UART1->INTSTATUS & 0x3, 0, (CMSDK_UART_TypeDef*)CMSDK_UART1);}
+void uart1_irq() {uart_irq(CMSDK_UART3->INTSTATUS & 0x3, 1, (CMSDK_UART_TypeDef*)CMSDK_UART3);}
+void uart2_irq() {uart_irq(CMSDK_UART0->INTSTATUS & 0x3, 2, (CMSDK_UART_TypeDef*)CMSDK_UART0);}
+void uart3_irq() {uart_irq(CMSDK_UART2->INTSTATUS & 0x3, 3, (CMSDK_UART_TypeDef*)CMSDK_UART2);}
+
+void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id) {
+    irq_handler = handler;
+    uart_data[obj->index].serial_irq_id = id;
+}
+
+static void serial_irq_set_internal(serial_t *obj, SerialIrq irq, uint32_t enable) {
+    IRQn_Type irq_n = (IRQn_Type)0;
+    uint32_t vector = 0;
+    switch ((int)obj->uart)
+    {
+        case UART_0:
+            irq_n = UART0_IRQn;
+            vector = (uint32_t)&uart0_irq;
+        break;
+        case UART_1:
+            irq_n = UART1_IRQn;
+            vector = (uint32_t)&uart1_irq;
+        break;
+        case UART_2:
+        {
+            irq_n = UART2_IRQn;
+            vector  = (uint32_t)&uart2_irq;
+        }
+        break;
+        case UART_3:
+        {
+            irq_n = UART3_IRQn;
+            vector  = (uint32_t)&uart3_irq;
+        }
+        break;
+    }
+
+    if (enable)
+    {
+        if (irq == TxIrq)
+        {
+            /* set TX interrupt enable in CTRL REG */
+            obj->uart->CTRL |= CMSDK_UART_CTRL_TXIRQEN_Msk;
+        }
+        else
+        {
+            /* set Rx interrupt on in CTRL REG */
+            obj->uart->CTRL |= CMSDK_UART_CTRL_RXIRQEN_Msk;
+        }
+        NVIC_SetVector(irq_n, vector);
+        NVIC_EnableIRQ(irq_n);
+    }
+    else if ((irq == TxIrq) || (uart_data[obj->index].rx_irq_set_api + uart_data[obj->index].rx_irq_set_flow == 0))
+    {   /*      Disable   IRQ   */
+        int all_disabled = 0;
+        SerialIrq other_irq = (irq == RxIrq) ? (TxIrq) : (RxIrq);
+        
+        obj->uart->CTRL &= ~(1 << (irq + 2));
+
+        all_disabled = (obj->uart->CTRL & (1 << (other_irq + 2))) == 0;
+        
+        if (all_disabled)
+        {
+            NVIC_DisableIRQ(irq_n);   
+        }
+    }
+}
+
+void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) {
+    if (RxIrq == irq)
+        uart_data[obj->index].rx_irq_set_api = enable;
+    serial_irq_set_internal(obj, irq, enable);
+}
+
+/******************************************************************************
+ * READ/WRITE
+ ******************************************************************************/
+int serial_getc(serial_t *obj) {
+    while (serial_readable(obj) == 0);
+    int data = obj->uart->DATA;
+    return data;
+}
+
+void serial_putc(serial_t *obj, int c) {
+    while (serial_writable(obj));
+    obj->uart->DATA = c;
+}
+
+int serial_readable(serial_t *obj) {
+    return obj->uart->STATE & 0x2;
+}
+
+int serial_writable(serial_t *obj) {
+    return obj->uart->STATE & 0x1;
+}
+
+void serial_clear(serial_t *obj) {
+    obj->uart->DATA = 0x00;
+}
+
+void serial_pinout_tx(PinName tx) {
+    pinmap_pinout(tx, PinMap_UART_TX);
+}
+
+void serial_break_set(serial_t *obj) {
+}
+
+void serial_break_clear(serial_t *obj) {
+}
+void serial_set_flow_control(serial_t *obj, FlowControl type, PinName rxflow, PinName txflow) {
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/spi_api.c	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,286 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <math.h>
+
+#include "spi_api.h"
+#include "spi_def.h"
+#include "cmsis.h"
+#include "pinmap.h"
+#include "mbed_error.h"
+#include "wait_api.h"
+
+static const PinMap PinMap_SPI_SCLK[] = {
+    {SCLK_SPI , SPI_0, 0},
+    {CLCD_SCLK , SPI_1, 0},
+    {ADC_SCLK , SPI_2, 0},
+    {SHIELD_0_SPI_SCK , SPI_3, 0},
+    {SHIELD_1_SPI_SCK , SPI_4, 0},
+    {NC   , NC   , 0}
+};
+
+static const PinMap PinMap_SPI_MOSI[] = {
+    {MOSI_SPI, SPI_0, 0},
+    {CLCD_MOSI, SPI_1, 0},
+    {ADC_MOSI, SPI_2, 0},
+    {SHIELD_0_SPI_MOSI, SPI_3, 0},
+    {SHIELD_1_SPI_MOSI, SPI_4, 0},
+    {NC   , NC   , 0}
+};
+
+static const PinMap PinMap_SPI_MISO[] = {
+    {MISO_SPI, SPI_0, 0},
+    {CLCD_MISO, SPI_1, 0},
+    {ADC_MISO, SPI_2, 0},
+    {SHIELD_0_SPI_MISO, SPI_3, 0},
+    {SHIELD_1_SPI_MISO, SPI_4, 0},
+    {NC   , NC   , 0}
+};
+
+static const PinMap PinMap_SPI_SSEL[] = {
+    {SSEL_SPI, SPI_0, 0},
+    {CLCD_SSEL, SPI_1, 0},
+    {ADC_SSEL, SPI_2, 0},
+    {SHIELD_0_SPI_nCS, SPI_3, 0},
+    {SHIELD_1_SPI_nCS, SPI_4, 0},
+    {NC   , NC   , 0}
+};
+
+static inline int ssp_disable(spi_t *obj);
+static inline int ssp_enable(spi_t *obj);
+
+void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel) {
+    
+        int altfunction[4];
+        // determine the SPI to use
+    SPIName spi_mosi = (SPIName)pinmap_peripheral(mosi, PinMap_SPI_MOSI);
+    SPIName spi_miso = (SPIName)pinmap_peripheral(miso, PinMap_SPI_MISO);
+    SPIName spi_sclk = (SPIName)pinmap_peripheral(sclk, PinMap_SPI_SCLK);
+    SPIName spi_ssel = (SPIName)pinmap_peripheral(ssel, PinMap_SPI_SSEL);
+    SPIName spi_data = (SPIName)pinmap_merge(spi_mosi, spi_miso);
+    SPIName spi_cntl = (SPIName)pinmap_merge(spi_sclk, spi_ssel);
+    obj->spi = (MPS2_SSP_TypeDef*)pinmap_merge(spi_data, spi_cntl);
+    if ((int)obj->spi == NC) {
+        error("SPI pinout mapping failed");
+    }
+    
+    // enable power and clocking
+    switch ((int)obj->spi) {
+      case (int)SPI_0: 
+            obj->spi->CR1       = 0;
+            obj->spi->CR0       = SSP_CR0_SCR_DFLT | SSP_CR0_FRF_MOT | SSP_CR0_DSS_8;
+            obj->spi->CPSR      = SSP_CPSR_DFLT; 
+            obj->spi->IMSC      = 0x8; 
+            obj->spi->DMACR     = 0;
+            obj->spi->CR1       = SSP_CR1_SSE_Msk;
+            obj->spi->ICR       = 0x3;  
+            break;
+      case (int)SPI_1:
+                      /* Configure SSP used for LCD                                               */
+            obj->spi->CR1   =   0;                 /* Synchronous serial port disable  */
+            obj->spi->DMACR =   0;                 /* Disable FIFO DMA                 */
+            obj->spi->IMSC  =   0;                 /* Mask all FIFO/IRQ interrupts     */
+            obj->spi->ICR   = ((1ul <<  0) |       /* Clear SSPRORINTR interrupt       */
+                                (1ul <<  1) );      /* Clear SSPRTINTR interrupt        */
+              obj->spi->CR0   = ((7ul <<  0) |       /* 8 bit data size                  */
+                                (0ul <<  4) |       /* Motorola frame format            */
+                                (0ul <<  6) |       /* CPOL = 0                         */
+                                (0ul <<  7) |       /* CPHA = 0                         */
+                                (1ul <<  8) );      /* Set serial clock rate            */
+            obj->spi->CPSR  =  (2ul <<  0);        /* set SSP clk to 6MHz (6.6MHz max) */
+            obj->spi->CR1   = ((1ul <<  1) |       /* Synchronous serial port enable   */
+                                (0ul <<  2) );      /* Device configured as master      */
+            break;
+      case (int)SPI_2: 
+            obj->spi->CR1       = 0;
+            obj->spi->CR0       = SSP_CR0_SCR_DFLT | SSP_CR0_FRF_MOT | SSP_CR0_DSS_8;
+            obj->spi->CPSR      = SSP_CPSR_DFLT; 
+            obj->spi->IMSC      = 0x8; 
+            obj->spi->DMACR     = 0;
+            obj->spi->CR1       = SSP_CR1_SSE_Msk;
+            obj->spi->ICR       = 0x3;  
+            break;
+      case (int)SPI_3: 
+            obj->spi->CR1       = 0;
+            obj->spi->CR0       = SSP_CR0_SCR_DFLT | SSP_CR0_FRF_MOT | SSP_CR0_DSS_8;
+            obj->spi->CPSR      = SSP_CPSR_DFLT; 
+            obj->spi->IMSC      = 0x8; 
+            obj->spi->DMACR     = 0;
+            obj->spi->CR1       = SSP_CR1_SSE_Msk;
+            obj->spi->ICR       = 0x3;  
+            break;
+      case (int)SPI_4: 
+            obj->spi->CR1       = 0;
+            obj->spi->CR0       = SSP_CR0_SCR_DFLT | SSP_CR0_FRF_MOT | SSP_CR0_DSS_8;
+            obj->spi->CPSR      = SSP_CPSR_DFLT; 
+            obj->spi->IMSC      = 0x8; 
+            obj->spi->DMACR     = 0;
+            obj->spi->CR1       = SSP_CR1_SSE_Msk;
+            obj->spi->ICR       = 0x3;  
+            break;
+    }
+    
+        if(mosi != NC){ altfunction[0] = 1;}else{ altfunction[0] = 0;}
+        if(miso != NC){ altfunction[1] = 1;}else{ altfunction[1] = 0;}
+        if(sclk != NC){ altfunction[2] = 1;}else{ altfunction[2] = 0;}
+        if(ssel != NC){ altfunction[3] = 1;}else{ altfunction[3] = 0;}
+        
+    // enable alt function
+    switch ((int)obj->spi) {
+      case (int)SPI_2:
+                CMSDK_GPIO1->ALTFUNCSET |= (altfunction[2]<<5 | altfunction[0]<<4 | altfunction[1]<<3 | altfunction[3]<<2);
+            break;
+      case (int)SPI_3:
+                CMSDK_GPIO0->ALTFUNCSET |= (altfunction[2]<<13 | altfunction[1]<<12 | altfunction[0]<<11 | altfunction[3]<<10);
+            break;
+      case (int)SPI_4:
+                CMSDK_GPIO4->ALTFUNCSET |= (altfunction[2]<<3 | altfunction[1]<<2 | altfunction[0]<<1 | altfunction[3]);
+            break;
+        }
+        
+    // set default format and frequency
+    if (ssel == NC) {
+        spi_format(obj, 8, 0, 0);  // 8 bits, mode 0, master
+    } else {
+        spi_format(obj, 8, 0, 1);  // 8 bits, mode 0, slave
+    }
+    spi_frequency(obj, 1000000);
+    
+    // enable the ssp channel
+    ssp_enable(obj);
+
+    // pin out the spi pins
+    pinmap_pinout(mosi, PinMap_SPI_MOSI);
+    pinmap_pinout(miso, PinMap_SPI_MISO);
+    pinmap_pinout(sclk, PinMap_SPI_SCLK);
+    if (ssel != NC) {
+        pinmap_pinout(ssel, PinMap_SPI_SSEL);
+    }
+}
+
+void spi_free(spi_t *obj) {}
+
+void spi_format(spi_t *obj, int bits, int mode, int slave) {
+    ssp_disable(obj);
+    if (!(bits >= 4 && bits <= 16) || !(mode >= 0 && mode <= 3)) {
+        error("SPI format error");
+    }
+    
+    int polarity = (mode & 0x2) ? 1 : 0;
+    int phase = (mode & 0x1) ? 1 : 0;
+    
+    // set it up
+    int DSS = bits - 1;            // DSS (data select size)
+    int SPO = (polarity) ? 1 : 0;  // SPO - clock out polarity
+    int SPH = (phase) ? 1 : 0;     // SPH - clock out phase
+    
+    int FRF = 0;                   // FRF (frame format) = SPI
+    uint32_t tmp = obj->spi->CR0;
+    tmp &= ~(0xFFFF);
+    tmp |= DSS << 0
+        | FRF << 4
+        | SPO << 6
+        | SPH << 7;
+    obj->spi->CR0 = tmp;
+    
+    tmp = obj->spi->CR1;
+    tmp &= ~(0xD);
+    tmp |= 0 << 0                   // LBM - loop back mode - off
+        | ((slave) ? 1 : 0) << 2   // MS - master slave mode, 1 = slave
+        | 0 << 3;                  // SOD - slave output disable - na
+    obj->spi->CR1 = tmp;
+    
+    ssp_enable(obj);
+}
+
+void spi_frequency(spi_t *obj, int hz) {
+    ssp_disable(obj);
+   
+    uint32_t PCLK = SystemCoreClock;
+    
+        int prescaler;
+    
+    for (prescaler = 2; prescaler <= 254; prescaler += 2) {
+        int prescale_hz = PCLK / prescaler;
+        
+        // calculate the divider
+        int divider = floor(((float)prescale_hz / (float)hz) + 0.5f);
+        
+        // check we can support the divider
+        if (divider < 256) {
+            // prescaler
+            obj->spi->CPSR = prescaler;
+            
+            // divider
+            obj->spi->CR0 &= ~(0xFFFF << 8);
+            obj->spi->CR0 |= (divider - 1) << 8;
+            ssp_enable(obj);
+            return;
+        }
+    }
+    error("Couldn't setup requested SPI frequency");
+}
+
+static inline int ssp_disable(spi_t *obj) {
+    return obj->spi->CR1 &= ~(1 << 1);
+}
+
+static inline int ssp_enable(spi_t *obj) {
+    return obj->spi->CR1 |= SSP_CR1_SSE_Msk;
+}
+
+static inline int ssp_readable(spi_t *obj) {
+    return obj->spi->SR & (1 << 2);
+}
+
+static inline int ssp_writeable(spi_t *obj) {
+    return obj->spi->SR & SSP_SR_BSY_Msk;
+}
+
+static inline void ssp_write(spi_t *obj, int value) {
+    obj->spi->DR = value;
+    while (ssp_writeable(obj));
+}
+static inline int ssp_read(spi_t *obj) {
+    int read_DR = obj->spi->DR;
+    return read_DR;
+}
+
+static inline int ssp_busy(spi_t *obj) {
+    return (obj->spi->SR & (1 << 4)) ? (1) : (0);
+}
+
+int spi_master_write(spi_t *obj, int value) {
+    ssp_write(obj, value);
+    while (obj->spi->SR & SSP_SR_BSY_Msk);  /* Wait for send to finish      */
+    return (ssp_read(obj));
+}
+
+int spi_slave_receive(spi_t *obj) {
+    return (ssp_readable(obj) && !ssp_busy(obj)) ? (1) : (0);
+}
+
+int spi_slave_read(spi_t *obj) {
+    return obj->spi->DR;
+}
+
+void spi_slave_write(spi_t *obj, int value) {
+    while (ssp_writeable(obj) == 0) ;
+    obj->spi->DR = value;
+}
+
+int spi_busy(spi_t *obj) {
+    return ssp_busy(obj);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/spi_def.h	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,174 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ----------------------------------------------------------------
+ * File:     apspi.h
+ * Release:  Version 2.0
+ * ----------------------------------------------------------------
+ *  
+ *            SSP interface Support
+ *            =====================
+ */
+
+#define SSPCS_BASE          (0x4002804C)  // SSP chip select register
+#define SSP_BASE            (0x40020000)  // SSP Prime Cell
+
+#define SSPCR0              ((volatile unsigned int *)(SSP_BASE + 0x00))
+#define SSPCR1              ((volatile unsigned int *)(SSP_BASE + 0x04))
+#define SSPDR               ((volatile unsigned int *)(SSP_BASE + 0x08))
+#define SSPSR               ((volatile unsigned int *)(SSP_BASE + 0x0C))
+#define SSPCPSR             ((volatile unsigned int *)(SSP_BASE + 0x10))
+#define SSPIMSC             ((volatile unsigned int *)(SSP_BASE + 0x14))
+#define SSPRIS              ((volatile unsigned int *)(SSP_BASE + 0x18))
+#define SSPMIS              ((volatile unsigned int *)(SSP_BASE + 0x1C))
+#define SSPICR              ((volatile unsigned int *)(SSP_BASE + 0x20))
+#define SSPDMACR            ((volatile unsigned int *)(SSP_BASE + 0x24))
+#define SSPCS               ((volatile unsigned int *)(SSPCS_BASE))
+
+// SSPCR0 Control register 0
+#define SSPCR0_SCR_DFLT     0x0300      // Serial Clock Rate (divide), default set at 3
+#define SSPCR0_SPH          0x0080      // SSPCLKOUT phase
+#define SSPCR0_SPO          0x0040      // SSPCLKOUT polarity
+#define SSPCR0_FRF_MOT      0x0000      // Frame format, Motorola
+#define SSPCR0_DSS_8        0x0007      // Data packet size, 8bits
+#define SSPCR0_DSS_16       0x000F      // Data packet size, 16bits
+
+// SSPCR1 Control register 1
+#define SSPCR1_SOD          0x0008      // Slave Output mode Disable
+#define SSPCR1_MS           0x0004      // Master or Slave mode
+#define SSPCR1_SSE          0x0002      // Serial port enable
+#define SSPCR1_LBM          0x0001      // Loop Back Mode
+
+// SSPSR Status register
+#define SSPSR_BSY           0x0010      // Busy
+#define SSPSR_RFF           0x0008      // Receive  FIFO full
+#define SSPSR_RNE           0x0004      // Receive  FIFO not empty
+#define SSPSR_TNF           0x0002      // Transmit FIFO not full
+#define SSPSR_TFE           0x0001      // Transmit FIFO empty
+
+// SSPCPSR Clock prescale register
+#define SSPCPSR_DFLT        0x0008      // Clock prescale (use with SCR), default set at 8
+
+// SSPIMSC Interrupt mask set and clear register
+#define SSPIMSC_TXIM        0x0008      // Transmit FIFO not Masked
+#define SSPIMSC_RXIM        0x0004      // Receive  FIFO not Masked
+#define SSPIMSC_RTIM        0x0002      // Receive timeout not Masked
+#define SSPIMSC_RORIM       0x0001      // Receive overrun not Masked
+
+// SSPRIS Raw interrupt status register
+#define SSPRIS_TXRIS        0x0008      // Raw Transmit interrupt flag
+#define SSPRIS_RXRIS        0x0004      // Raw Receive  interrupt flag
+#define SSPRIS_RTRIS        0x0002      // Raw Timemout interrupt flag
+#define SSPRIS_RORRIS       0x0001      // Raw Overrun  interrupt flag
+
+// SSPMIS Masked interrupt status register
+#define SSPMIS_TXMIS        0x0008      // Masked Transmit interrupt flag
+#define SSPMIS_RXMIS        0x0004      // Masked Receive  interrupt flag
+#define SSPMIS_RTMIS        0x0002      // Masked Timemout interrupt flag
+#define SSPMIS_RORMIS       0x0001      // Masked Overrun  interrupt flag
+
+// SSPICR Interrupt clear register
+#define SSPICR_RTIC         0x0002      // Clears Timeout interrupt flag
+#define SSPICR_RORIC        0x0001      // Clears Overrun interrupt flag
+
+// SSPDMACR DMA control register
+#define SSPDMACR_TXDMAE     0x0002      // Enable Transmit FIFO DMA
+#define SSPDMACR_RXDMAE     0x0001      // Enable Receive  FIFO DMA
+
+// SPICS register (0=Chip Select low)
+#define SSPCS_nCS1          0x0002      // nCS1  (SPI_nSS)
+
+// SPI defaults
+#define SSPMAXTIME          1000        // Maximum time to wait for SSP (10*10uS)
+
+// EEPROM instruction set
+#define EEWRSR              0x0001      // Write status
+#define EEWRITE             0x0002      // Write data
+#define EEREAD              0x0003      // Read data
+#define EEWDI               0x0004      // Write disable
+#define EEWREN              0x0006      // Write enable
+#define EERDSR              0x0005      // Read status
+
+// EEPROM status register flags
+#define EERDSR_WIP          0x0001      // Write in process
+#define EERDSR_WEL          0x0002      // Write enable latch
+#define EERDSR_BP0          0x0004      // Block protect 0
+#define EERDSR_BP1          0x0008      // Block protect 1
+#define EERDSR_WPEN         0x0080      // Write protect enable
+
+ /* ----------------------------------------------------------------
+ *
+ *            Color LCD Support
+ *            =================
+ */
+
+// Color LCD Controller Internal Register addresses
+#define LSSPCS_BASE          (0x4002804C)  // LSSP chip select register
+#define LSSP_BASE            (0x40021000)  // LSSP Prime Cell
+
+#define LSSPCR0              ((volatile unsigned int *)(LSSP_BASE + 0x00))
+#define LSSPCR1              ((volatile unsigned int *)(LSSP_BASE + 0x04))
+#define LSSPDR               ((volatile unsigned int *)(LSSP_BASE + 0x08))
+#define LSSPSR               ((volatile unsigned int *)(LSSP_BASE + 0x0C))
+#define LSSPCPSR             ((volatile unsigned int *)(LSSP_BASE + 0x10))
+#define LSSPIMSC             ((volatile unsigned int *)(LSSP_BASE + 0x14))
+#define LSSPRIS              ((volatile unsigned int *)(LSSP_BASE + 0x18))
+#define LSSPMIS              ((volatile unsigned int *)(LSSP_BASE + 0x1C))
+#define LSSPICR              ((volatile unsigned int *)(LSSP_BASE + 0x20))
+#define LSSPDMACR            ((volatile unsigned int *)(LSSP_BASE + 0x24))
+#define LSSPCS               ((volatile unsigned int *)(LSSPCS_BASE))
+
+// LSSPCR0 Control register 0
+#define LSSPCR0_SCR_DFLT    0x0100      // Serial Clock Rate (divide), CLK/(CPSR*(1+SCR))
+#define LSSPCR0_SPH         0x0080      // LSSPCLKOUT phase
+#define LSSPCR0_SPO         0x0040      // LSSPCLKOUT polarity
+#define LSSPCR0_FRF_MOT     0x0000      // Frame format, Motorola
+#define LSSPCR0_DSS_8       0x0007      // Data packet size, 8bits
+#define LSSPCR0_DSS_16      0x000F      // Data packet size, 16bits
+
+// LSSPCR1 Control register 1
+#define LSSPCR1_SOD         0x0008      // Slave Output mode Disable
+#define LSSPCR1_MS          0x0004      // Master or Slave mode
+#define LSSPCR1_SSE         0x0002      // Serial port enable
+#define LSSPCR1_LBM         0x0001      // Loop Back Mode
+
+// LSSPSR Status register
+#define LSSPSR_BSY          0x0010      // Busy
+#define LSSPSR_RFF          0x0008      // Receive  FIFO full
+#define LSSPSR_RNE          0x0004      // Receive  FIFO not empty
+#define LSSPSR_TNF          0x0002      // Transmit FIFO not full
+#define LSSPSR_TFE          0x0001      // Transmit FIFO empty
+
+// LSSPCPSR Clock prescale register
+#define LSSPCPSR_DFLT       0x0002      // Clock prescale (use with SCR)
+
+// SPICS register
+#define LSSPCS_nCS0         0x0001      // nCS0      (CLCD_CS)
+#define LSSPCS_nCS2         0x0004      // nCS2      (CLCD_T_CS)
+#define LCD_RESET           0x0008      // RESET     (CLCD_RESET)
+#define LCD_RS              0x0010      // RS        (CLCD_RS)
+#define LCD_RD              0x0020      // RD        (CLCD_RD)
+#define LCD_BL              0x0040      // Backlight (CLCD_BL_CTRL)
+
+// SPI defaults
+#define LSSPMAXTIME         10000       // Maximum time to wait for LSSP (10*10uS)
+#define LSPI_START          (0x70)      // Start byte for SPI transfer
+#define LSPI_RD             (0x01)      // WR bit 1 within start
+#define LSPI_WR             (0x00)      // WR bit 0 within start
+#define LSPI_DATA           (0x02)      // RS bit 1 within start byte
+#define LSPI_INDEX          (0x00)      // RS bit 0 within start byte
+
+// Screen size
+#define LCD_WIDTH           320         // Screen Width (in pixels)
+#define LCD_HEIGHT          240         // Screen Height (in pixels)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_IOTSS/us_ticker.c	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,84 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <stddef.h>
+#include "us_ticker_api.h"
+#include "PeripheralNames.h"
+
+#define US_TICKER_TIMER1      CMSDK_DUALTIMER1
+#define US_TICKER_TIMER2      CMSDK_DUALTIMER2
+#define US_TICKER_TIMER_IRQn  DUALTIMER_IRQn
+
+int us_ticker_inited = 0;
+
+void us_ticker_init(void) {
+    if (us_ticker_inited) return;
+    us_ticker_inited = 1;
+    
+    US_TICKER_TIMER1->TimerControl = 0x0; // disable timer
+    US_TICKER_TIMER2->TimerControl = 0x00; // disable timer
+    US_TICKER_TIMER1->TimerLoad = 0xFFFFFFFF;
+    US_TICKER_TIMER2->TimerLoad = 0xFFFFFFFF;
+    
+    US_TICKER_TIMER1->TimerControl = 0x62; // enable interrupt and set to 32 bit counter and set to periodic mode
+    US_TICKER_TIMER2->TimerControl = 0x42; // enable interrupt and set to 32 bit counter
+    
+    US_TICKER_TIMER1->TimerControl |= 0x80; // enable counter
+    US_TICKER_TIMER2->TimerControl |= 0x80; // enable counter
+    
+    NVIC_SetVector(US_TICKER_TIMER_IRQn, (uint32_t)us_ticker_irq_handler);
+    NVIC_EnableIRQ(US_TICKER_TIMER_IRQn);
+}
+
+uint32_t us_ticker_read() {
+    uint32_t return_value = 0;
+
+    if (!us_ticker_inited)
+        us_ticker_init();
+    return_value = ((~US_TICKER_TIMER2->TimerValue)/24);
+    return return_value;
+}
+
+void us_ticker_set_interrupt(timestamp_t timestamp) {
+    int delta = 0;
+
+    if (!us_ticker_inited)
+        us_ticker_init();
+    delta = (int)(timestamp - us_ticker_read());
+    if (delta <= 0) {
+        // This event was in the past:
+        us_ticker_irq_handler();
+        return;
+    }
+    // enable interrupt
+    US_TICKER_TIMER1->TimerControl = 0x0; // disable timer
+    US_TICKER_TIMER1->TimerControl = 0x62; // enable interrupt and set to 32 bit counter and set to periodic mode
+    US_TICKER_TIMER1->TimerLoad = (delta)*24; //initialise the timer value
+    US_TICKER_TIMER1->TimerControl |= 0x80; //enable timer
+}
+
+void us_ticker_disable_interrupt(void) {
+    
+    US_TICKER_TIMER1->TimerControl &= 0xDF;
+    US_TICKER_TIMER2->TimerControl &= 0xDF;
+
+}
+
+void us_ticker_clear_interrupt(void) {
+
+    US_TICKER_TIMER1->TimerIntClr = 0x1;
+    US_TICKER_TIMER2->TimerIntClr = 0x1;
+
+}
--- a/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/PeripheralNames.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/PeripheralNames.h	Wed Mar 02 14:30:11 2016 +0000
@@ -24,13 +24,17 @@
 
 typedef enum {
     UART_0 = (int)CMSDK_UART0_BASE,
-    UART_1 = (int)CMSDK_UART1_BASE
+    UART_1 = (int)CMSDK_UART1_BASE,
+    UART_2 = (int)CMSDK_UART3_BASE,
+    UART_3 = (int)CMSDK_UART4_BASE
 } UARTName;
 
 typedef enum {
-    I2C_0 = (int)MPS2_TS_I2C,
-    I2C_1 = (int)MPS2_AAIC_I2C
-		
+    I2C_0 = (int)MPS2_TSC_I2C_BASE,
+    I2C_1 = (int)MPS2_AAIC_I2C_BASE,
+    I2C_2 = (int)MPS2_SHIELD0_I2C_BASE, 
+    I2C_3 = (int)MPS2_SHIELD1_I2C_BASE 
+        
 } I2CName;
 
 typedef enum {
@@ -41,12 +45,19 @@
     ADC0_4,
     ADC0_5,
     ADC0_6,
-    ADC0_7
+    ADC0_7,
+    ADC0_8,
+    ADC0_9,
+    ADC0_10,
+    ADC0_11
 } ADCName;
 
 typedef enum {
-    SPI_0 = (int)MPS2_SSP1,
-    SPI_1 = (int)MPS2_SSP0
+    SPI_0 = (int)MPS2_SSP1_BASE,
+    SPI_1 = (int)MPS2_SSP0_BASE,
+      SPI_2 = (int)MPS2_SSP2_BASE,
+    SPI_3 = (int)MPS2_SSP3_BASE,
+    SPI_4 = (int)MPS2_SSP4_BASE
 } SPIName;
 
 typedef enum {
@@ -68,8 +79,9 @@
 #define STDIO_UART        UART_0
 
 #define MBED_UART0        USBTX, USBRX
-#define MBED_UART1        UART_TX1, UART_RX1
-#define MBED_UART2        UART_TX2, UART_RX2
+#define MBED_UART1        XB_TX, XB_RX
+#define MBED_UART2        SH0_TX, SH0_RX
+#define MBED_UART3        SH1_TX, SH1_RX
 #define MBED_UARTUSB      USBTX, USBRX
 
 #ifdef __cplusplus
--- a/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/PinNames.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/PinNames.h	Wed Mar 02 14:30:11 2016 +0000
@@ -23,131 +23,206 @@
 #endif
 
 typedef enum {
-		PIN_INPUT,
-		PIN_OUTPUT
+        PIN_INPUT,
+        PIN_OUTPUT
 } PinDirection;
 
 #define PORT_SHIFT  5
 
 typedef enum {
     // MPS2 EXP Pin Names
-		EXP0 = 0,
-		EXP1 = 1,
-		EXP2 = 2,
-		EXP3 = 3,
-		EXP4 = 4,
-		EXP5 = 5,
-		EXP6 = 6,
-		EXP7 = 7,
-		EXP8 = 8,
-		EXP9 = 9,
-		EXP10 = 10,
-		EXP11 = 11,
-		EXP12 = 12,
-		EXP13 = 13,
-		EXP14 = 14,
-		EXP15 = 15,
-		EXP16 = 16,
-		EXP17 = 17,
-		EXP18 = 18,
-		EXP19 = 19,
-		EXP20 = 20,
-		EXP21 = 21,
-		EXP22 = 22,
-		EXP23 = 23,
-		EXP24 = 24,
-		EXP25 = 25,
-		
-		EXP26 = 26,
-		EXP27 = 27,
-		EXP28 = 28,
-		EXP29 = 29,
-		EXP30 = 30,
-		EXP31 = 31,
-		EXP32 = 32, 
-		EXP33 = 33, 
-		EXP34 = 34, 
-		EXP35 = 35, 
-		EXP36 = 36, 
-		EXP37 = 37, 
-		EXP38 = 38, 
-		EXP39 = 39, 
-		EXP40 = 40, 
-		EXP41 = 41, 
-		EXP42 = 42, 
-		EXP43 = 43, 
-		EXP44 = 44, 
-		EXP45 = 45, 
-		EXP46 = 46, 
-		EXP47 = 47, 
-		EXP48 = 48, 
-		EXP49 = 49, 
-		EXP50 = 50, 
-		EXP51 = 51, 
-		
+        EXP0 = 0,
+        EXP1 = 1,
+        EXP2 = 2,
+        EXP3 = 3,
+        EXP4 = 4,
+        EXP5 = 5,
+        EXP6 = 6,
+        EXP7 = 7,
+        EXP8 = 8,
+        EXP9 = 9,
+        EXP10 = 10,
+        EXP11 = 11,
+        EXP12 = 12,
+        EXP13 = 13,
+        EXP14 = 14,
+        EXP15 = 15,
+        EXP16 = 16,
+        EXP17 = 17,
+        EXP18 = 18,
+        EXP19 = 19,
+        EXP20 = 20,
+        EXP21 = 21,
+        EXP22 = 22,
+        EXP23 = 23,
+        EXP24 = 24,
+        EXP25 = 25,
+        
+        EXP26 = 26,
+        EXP27 = 27,
+        EXP28 = 28,
+        EXP29 = 29,
+        EXP30 = 30,
+        EXP31 = 31,
+        EXP32 = 32, 
+        EXP33 = 33, 
+        EXP34 = 34, 
+        EXP35 = 35, 
+        EXP36 = 36, 
+        EXP37 = 37, 
+        EXP38 = 38, 
+        EXP39 = 39, 
+        EXP40 = 40, 
+        EXP41 = 41, 
+        EXP42 = 42, 
+        EXP43 = 43, 
+        EXP44 = 44, 
+        EXP45 = 45, 
+        EXP46 = 46, 
+        EXP47 = 47, 
+        EXP48 = 48, 
+        EXP49 = 49, 
+        EXP50 = 50, 
+        EXP51 = 51, 
+        
 // Other mbed Pin Names
 
-		//LEDs on mps2
-		//user leds
-		USERLED1 = 100,
-		USERLED2 = 101,
-		//user switches
-		USERSW1  = 110,
-		USERSW2  = 111,
-		
-		//mcc leds
-		LED1 = 200,
-		LED2 = 201,
-		LED3 = 202,
-		LED4 = 203,
-		LED5 = 204,
-		LED6 = 205,
-		LED7 = 206,
-		LED8 = 207,
-		
-		//MCC Switches
-		SW1 = 210,
-		SW2 = 211,
-		SW3 = 212,
-		SW4 = 213,
-		SW5 = 214,
-		SW6 = 215,
-		SW7 = 216,
-		SW8 = 217,
-		
-		//MPS2 SPI header pins j21
-		MOSI_SPI = 300,
-		MISO_SPI = 301,
-		SCLK_SPI = 302,
-		SSEL_SPI = 303,
-		
-		//MPS2 CLCD SPI
-		CLCD_MOSI = 304,
-		CLCD_MISO = 305,
-		CLCD_SCLK = 306,
-		CLCD_SSEL = 307,
-    	CLCD_RESET = 308,
-    	CLCD_RS = 309,
-    	CLCD_RD = 310,
-    	CLCD_BL_CTRL = 311,
-		
-		
-		//MPS2 Uart
-		USBTX  = 400,
-		USBRX  = 401,
-		UART_TX1 = 402,
-		UART_RX1 = 403,
-		UART_TX2 = 404,
-		UART_RX2 = 405,
-		
-		//MPS2 I2C touchscreen and audio
-		TSC_SDA = 500,
-		TSC_SCL = 501,
-		AUD_SDA = 502,
-		AUD_SCL = 503,
-		
-		// Not connected
-		NC = (int)0xFFFFFFFF,
+        //LEDs on mps2
+        //user leds
+        USERLED1 = 100,
+        USERLED2 = 101,
+        //user switches
+        USERSW1  = 110,
+        USERSW2  = 111,
+        
+        //mcc leds
+        LED1 = 200,
+        LED2 = 201,
+        LED3 = 202,
+        LED4 = 203,
+        LED5 = 204,
+        LED6 = 205,
+        LED7 = 206,
+        LED8 = 207,
+        
+        //MCC Switches
+        SW1 = 210,
+        SW2 = 211,
+        SW3 = 212,
+        SW4 = 213,
+        SW5 = 214,
+        SW6 = 215,
+        SW7 = 216,
+        SW8 = 217,
+        
+        //MPS2 SPI header pins j21
+        MOSI_SPI = 300,
+        MISO_SPI = 301,
+        SCLK_SPI = 302,
+        SSEL_SPI = 303,
+        
+        //MPS2 CLCD SPI
+        CLCD_MOSI = 304,
+        CLCD_MISO = 305,
+        CLCD_SCLK = 306,
+        CLCD_SSEL = 307,
+        CLCD_RESET = 308,
+        CLCD_RS = 309,
+        CLCD_RD = 310,
+        CLCD_BL_CTRL = 311,
+        
+        //MPS2 shield 0 SPI
+        SHIELD_0_SPI_SCK = 320, 
+        SHIELD_0_SPI_MOSI = 321,
+        SHIELD_0_SPI_MISO = 322,
+        SHIELD_0_SPI_nCS = 323, 
+
+        //MPS2 shield 1 SPI
+        SHIELD_1_SPI_SCK = 331, 
+        SHIELD_1_SPI_MOSI = 332,
+        SHIELD_1_SPI_MISO = 333,
+        SHIELD_1_SPI_nCS = 334, 
+        
+        //MPS2 shield ADC SPI
+        ADC_MOSI = 650,
+        ADC_MISO = 651,
+        ADC_SCLK = 652,
+        ADC_SSEL = 653,
+        
+        //MPS2 Uart
+        USBTX  = 400,
+        USBRX  = 401,
+        XB_TX = 402,
+        XB_RX = 403,
+        UART_TX2 = 404,
+        UART_RX2 = 405,
+        SH0_TX = 406,
+        SH0_RX = 407,
+        SH1_TX = 408,
+        SH1_RX = 409,
+        
+        //MPS2 I2C touchscreen and audio
+        TSC_SDA = 500,
+        TSC_SCL = 501,
+        AUD_SDA = 502,
+        AUD_SCL = 503,
+    
+        //MPS2 I2C for shield
+        SHIELD_0_SDA = 504, 
+        SHIELD_0_SCL = 505, 
+        SHIELD_1_SDA = 506,
+        SHIELD_1_SCL = 507,
+        
+        //MPS2 shield Analog pins
+        A0_0 = 600,
+        A0_1 = 601,
+        A0_2 = 602,
+        A0_3 = 603,
+        A0_4 = 604,
+        A0_5 = 605,
+        A1_0 = 606,
+        A1_1 = 607,
+        A1_2 = 608,
+        A1_3 = 609,
+        A1_4 = 610,
+        A1_5 = 611,
+        //MPS2 Shield Digital pins
+        D0_0  = EXP0,
+        D0_1  = EXP4,
+        D0_2  = EXP2,
+        D0_3  = EXP3,
+        D0_4  = EXP1,
+        D0_5  = EXP6,
+        D0_6  = EXP7,
+        D0_7  = EXP8,
+        D0_8  = EXP9,
+        D0_9  = EXP10,
+        D0_10 = EXP12,
+        D0_11 = EXP13,
+        D0_12 = EXP14,
+        D0_13 = EXP11,
+        D0_14 = EXP15,
+        D0_15 = EXP5,
+    
+        D1_0  = EXP26,
+        D1_1  = EXP30,
+        D1_2  = EXP28,
+        D1_3  = EXP29,
+        D1_4  = EXP27,
+        D1_5  = EXP32,
+        D1_6  = EXP33,
+        D1_7  = EXP34,
+        D1_8  = EXP35,
+        D1_9  = EXP36,
+        D1_10 = EXP38,
+        D1_11 = EXP39,
+        D1_12 = EXP40,
+        D1_13 = EXP44,
+        D1_14 = EXP41,
+        D1_15 = EXP31,
+        
+        // Not connected
+        NC = (int)0xFFFFFFFF,
 } PinName;
 
 
--- a/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/SDK/ETH_MPS2.c	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/SDK/ETH_MPS2.c	Wed Mar 02 14:30:11 2016 +0000
@@ -35,9 +35,8 @@
  */
 
 #include <stdio.h>
-
+#include "wait_api.h"
 #include "ETH_MPS2.h"
-#include "fpga.h"
 
 // SMSC9220 low-level operations
 unsigned int smsc9220_mac_regread(unsigned char regoffset, unsigned int *data)
@@ -58,7 +57,7 @@
         timedout = 50;
         do {
             val = SMSC9220->BYTE_TEST;  // A no-op read.
-            Sleepms(1);
+            wait_ms(1);
             timedout--;
         } while(timedout && (SMSC9220->MAC_CSR_CMD & ((unsigned int)1 << 31)));
 
@@ -92,7 +91,7 @@
         timedout = 50;
         do {
             read = SMSC9220->BYTE_TEST;     // A no-op read.
-            Sleepms(1);
+            wait_ms(1);
             timedout--;
         } while(timedout && (SMSC9220->MAC_CSR_CMD & ((unsigned int)1 << 31)));
 
@@ -126,7 +125,7 @@
         val = 0;
         timedout = 50;
         do {
-            Sleepms(1);
+            wait_ms(1);
             timedout--;
             smsc9220_mac_regread(SMSC9220_MAC_MII_ACC,&val);
         } while(timedout && (val & ((unsigned int)1 << 0)));
@@ -166,7 +165,7 @@
 
         do {
 
-            Sleepms(1);
+            wait_ms(1);
             timedout--;
             smsc9220_mac_regread(SMSC9220_MAC_MII_ACC, &phycmd);
         } while(timedout && (phycmd & (1 << 0)));
@@ -197,7 +196,7 @@
     SMSC9220->HW_CFG |= 1;
 
     do {
-        Sleepms(1);
+        wait_ms(1);
         timedout--;
     } while(timedout && (SMSC9220->HW_CFG & 1));
 
@@ -224,7 +223,7 @@
     timedout = 50;
 
     do {
-        Sleepms(1);
+        wait_ms(1);
         timedout--;
 
     } while(timedout && (SMSC9220->E2P_CMD & ((unsigned int) 1 << 31)));
@@ -238,9 +237,9 @@
 /* initialise irqs */
 void smsc9220_init_irqs(void)
 {
-	SMSC9220->INT_EN    = 0x0;
-	SMSC9220->INT_STS   = 0xFFFFFFFF;   // clear all interrupts
-	SMSC9220->IRQ_CFG   = 0x22000100;   // irq deassertion at 220 usecs and master IRQ enable.
+    SMSC9220->INT_EN    = 0x0;
+    SMSC9220->INT_STS   = 0xFFFFFFFF;   // clear all interrupts
+    SMSC9220->IRQ_CFG   = 0x22000100;   // irq deassertion at 220 usecs and master IRQ enable.
 }
 
 unsigned int smsc9220_check_phy(void)
--- a/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/SDK/fpga.c	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/SDK/fpga.c	Wed Mar 02 14:30:11 2016 +0000
@@ -28,8 +28,8 @@
 // Used for I2C drivers
 void i2c_delay(unsigned int tick)
 {
-	unsigned int end;
-	unsigned int start;
+    unsigned int end;
+    unsigned int start;
 
     start = MPS2_FPGAIO->COUNTER;
     end   = start + (tick);
@@ -50,8 +50,8 @@
  */
 void Sleepms(unsigned int msec)
 {
-	unsigned int end;
-	unsigned int start;
+    unsigned int end;
+    unsigned int start;
 
     start = MPS2_FPGAIO->COUNTER;
     end   = start + (25 * msec * 1000);
@@ -71,8 +71,8 @@
  */
 void Sleepus(unsigned int usec)
 {
-	unsigned int end;
-	unsigned int start;
+    unsigned int end;
+    unsigned int start;
 
     start = MPS2_FPGAIO->COUNTER;
     end   = start + (25 * usec);
--- a/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/SDK/mps2_ethernet_api.c	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/SDK/mps2_ethernet_api.c	Wed Mar 02 14:30:11 2016 +0000
@@ -89,6 +89,45 @@
     return error;
 }
 
+void smsc9220_print_mac_registers()
+{
+    unsigned int read;
+    int i;
+
+    i = 0;
+    read = 0;
+
+    for(i = 1; i <= 0xC; i++) {
+        smsc9220_mac_regread(i, &read);
+    }
+    return;
+}
+
+
+void smsc9220_print_phy_registers()
+{
+    unsigned short read;
+    unsigned int i;
+
+    i = 0;
+    read = 0;
+    for(i = 0; i <= 6; i++) {
+        smsc9220_phy_regread(i, &read);
+    }
+    smsc9220_phy_regread(i = 17, &read);
+
+    smsc9220_phy_regread(i = 18, &read);
+
+    smsc9220_phy_regread(i = 27, &read);
+
+    smsc9220_phy_regread(i = 29, &read);
+
+    smsc9220_phy_regread(i = 30, &read);
+
+    smsc9220_phy_regread(i = 31, &read);
+
+    return;
+}
 
 /*----------------------------------------------------------------------------
   Ethernet Device initialize
@@ -96,13 +135,13 @@
 
 int ethernet_transmission(unsigned char * pkt, unsigned int length)
 {
-	smsc9220_xmit_packet(pkt, length);
-	return 0;
+    smsc9220_xmit_packet(pkt, length);
+    return 0;
 }
 
 int ethernet_reception(unsigned int *recvbuf, unsigned int *index) 
 {
-	return smsc9220_recv_packet((unsigned int *)recvbuf, index);
+    return smsc9220_recv_packet((unsigned int *)recvbuf, index);
 }
 
 int ethernet_mac_address(char *mac) 
@@ -112,16 +151,16 @@
 
 unsigned int ethernet_check_ready(void)
 {
-	return smsc9220_check_ready();
+    return smsc9220_check_ready();
 }
 
 unsigned int ethernet_intf()
 {
   unsigned int txfifo_inf;
  
-	txfifo_inf = SMSC9220->TX_FIFO_INF;
-	
-	return txfifo_inf;
+    txfifo_inf = SMSC9220->TX_FIFO_INF;
+    
+    return txfifo_inf;
 
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/analogin_api.c	Wed Mar 02 14:30:11 2016 +0000
@@ -0,0 +1,110 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "mbed_assert.h"
+#include "analogin_api.h"
+
+#include "cmsis.h"
+#include "pinmap.h"
+
+#define ADC_12BIT_RANGE             0xFFF
+
+static const PinMap PinMap_ADC[] = {
+    {A0_0, ADC0_0,  0},
+    {A0_1, ADC0_1,  0},
+    {A0_2, ADC0_2,  0},
+    {A0_3, ADC0_3,  0},
+    {A0_4, ADC0_4,  0},
+    {A0_5, ADC0_5,  0},
+    {A1_0, ADC0_6,  0},
+    {A1_1, ADC0_7,  0},
+    {A1_2, ADC0_8,  0},
+    {A1_3, ADC0_9,  0},
+    {A1_4, ADC0_10, 0},
+    {A1_5, ADC0_11, 0},
+    {NC,    NC,     0}
+};
+
+static const PinMap PinMap_SPI_SCLK[] = {
+    {ADC_SCLK , SPI_3, 0},
+    {NC   , NC   , 0}
+};
+
+static const PinMap PinMap_SPI_MOSI[] = {
+    {ADC_MOSI, SPI_3, 0},
+    {NC   , NC   , 0}
+};
+
+static const PinMap PinMap_SPI_MISO[] = {
+    {ADC_MISO, SPI_3, 0},
+    {NC   , NC   , 0}
+};
+
+static const PinMap PinMap_SPI_SSEL[] = {
+    {ADC_SSEL, SPI_3, 0},
+    {NC   , NC   , 0}
+};
+
+#define ADC_RANGE    ADC_12BIT_RANGE
+int analog_spi_inited = 0;
+
+void analogin_init(analogin_t *obj, PinName pin) {
+    
+    obj->adc = (ADCName)pinmap_peripheral(pin, PinMap_ADC);
+  MBED_ASSERT(obj->adc != (ADCName)NC);
+  obj->pin = pin;
+    obj->pin_number = pin-600;
+    obj->address = (0x0000 | (pin-600));
+    
+    SPIName adc_mosi = (SPIName)pinmap_peripheral(ADC_MOSI, PinMap_SPI_MOSI);
+  SPIName adc_miso = (SPIName)pinmap_peripheral(ADC_MISO, PinMap_SPI_MISO);
+  SPIName adc_sclk = (SPIName)pinmap_peripheral(ADC_SCLK, PinMap_SPI_SCLK);
+  SPIName adc_ssel = (SPIName)pinmap_peripheral(ADC_SSEL, PinMap_SPI_SSEL);
+  SPIName adc_data = (SPIName)pinmap_merge(adc_mosi, adc_miso);
+  SPIName adc_cntl = (SPIName)pinmap_merge(adc_sclk, adc_ssel);
+  obj->adc_spi = (MPS2_SSP_TypeDef*)pinmap_merge(adc_data, adc_cntl);
+  
+    if(analog_spi_inited == 0){
+    obj->adc_spi->CR1       = 0;
+    obj->adc_spi->CR0       = SSP_CR0_SCR_DFLT | SSP_CR0_FRF_MOT | SSP_CR0_DSS_16;
+    obj->adc_spi->CPSR      = SSP_CPSR_DFLT; 
+    obj->adc_spi->IMSC      = 0x8; 
+    obj->adc_spi->DMACR     = 0;
+    obj->adc_spi->CR1       = SSP_CR1_SSE_Msk;
+    obj->adc_spi->ICR       = 0x3;  
+    analog_spi_inited = 1;
+    }
+    
+  pinmap_pinout(ADC_MOSI, PinMap_SPI_MOSI);
+  pinmap_pinout(ADC_MISO, PinMap_SPI_MISO);
+  pinmap_pinout(ADC_SCLK, PinMap_SPI_SCLK);
+  pinmap_pinout(ADC_SSEL, PinMap_SPI_SSEL);
+  pinmap_pinout(pin, PinMap_ADC);
+}
+
+static inline uint32_t adc_read(analogin_t *obj) {
+    return 0;
+}
+
+
+float analogin_read(analogin_t *obj) {
+    uint32_t value = adc_read(obj);
+    return 0;
+}
+
+uint16_t analogin_read_u16(analogin_t *obj) {
+    return 0;
+}
+
--- a/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/device.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/device.h	Wed Mar 02 14:30:11 2016 +0000
@@ -22,14 +22,14 @@
 
 #define DEVICE_INTERRUPTIN      1
 
-#define DEVICE_ANALOGIN         0
+#define DEVICE_ANALOGIN         1
 #define DEVICE_ANALOGOUT        0
 
 #define DEVICE_SERIAL           1
 #define DEVICE_SERIAL_FC        1
 
 #define DEVICE_I2C              1
-#define DEVICE_I2CSLAVE         1
+#define DEVICE_I2CSLAVE         0
 
 #define DEVICE_SPI              1
 #define DEVICE_SPISLAVE         1
--- a/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/ethernet_api.c	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/ethernet_api.c	Wed Mar 02 14:30:11 2016 +0000
@@ -38,7 +38,7 @@
  *----------------------------------------------------------------------------*/
 int ethernet_init()
 {
-	  int error;
+      int error;
     error = 0;
 
     if(smsc9220_check_id()) {
@@ -123,7 +123,7 @@
 
 int ethernet_write(const char *data, int size)
 {
-		return 0;
+        return 0;
 }
 
 int ethernet_send() 
@@ -145,7 +145,7 @@
 
 int ethernet_read(char *data, int dlen) 
 {
-	return 0;
+    return 0;
 }
 
 void ethernet_address(char *mac) {
@@ -154,11 +154,11 @@
 
 int ethernet_link(void) 
 {
-	return 0;
+    return 0;
 }
 
 void ethernet_set_link(int speed, int duplex)
 {
-	smsc9220_establish_link();
+    smsc9220_establish_link();
 }
 
--- a/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/gpio_api.c	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/gpio_api.c	Wed Mar 02 14:30:11 2016 +0000
@@ -18,95 +18,111 @@
 
 // function to enable the GPIO pin
 uint32_t gpio_set(PinName pin) {
-	return (1);
+    return (1);
 }
 
 //function to initialise the gpio pin
 // this links the board control bits for each pin 
 // with the object created for the pin
 void gpio_init(gpio_t *obj, PinName pin) {
-		if(pin == NC){ return;}
-		else {
-		int pin_value = 0;
-		obj->pin = pin;
-		if(pin <=15){
-			pin_value = pin;
-		}else if (pin >= 16 && pin <= 31){
-			pin_value = pin-16;
-		}else if (pin >= 32 && pin <= 47){
-			pin_value = pin-32;
-		}else if (pin >= 48 && pin <= 51){
-			pin_value = pin-48;
-		}else if (pin == 100 || pin == 101){
-			pin_value = pin-100;
-		}else if (pin == 110 || pin == 111){
-			pin_value = pin-110;
-		}else if (pin >= 200 && pin <= 207){
-			pin_value = pin-200;
-		}else if (pin >= 210 && pin <= 217){
-			pin_value = pin-210;
-		}else if (pin == 303){
-			pin_value = pin-302;
-		}else if (pin == 307){
-			pin_value = pin-307;
-		}else if (pin == 308){
-			pin_value = pin-305;
-		}else if (pin == 309){
-			pin_value = pin-305;
-		}else if (pin == 310){
-			pin_value = pin-305;
-		}else if (pin == 311){
-			pin_value = pin-305;
-		}
-		
-		obj->mask = 0x1 << pin_value;
-		obj->pin_number = pin;
-		if(pin <=15) {
-			obj->reg_data = &CMSDK_GPIO0->DATAOUT ;
-			obj->reg_in  = 		&CMSDK_GPIO0->DATA ;
-			obj->reg_dir = 		&CMSDK_GPIO0->OUTENABLESET ;
-			obj->reg_dirclr = &CMSDK_GPIO0->OUTENABLECLR ;
-		} else if (pin >= 16 && pin <= 31){
-			obj->reg_data = &CMSDK_GPIO1->DATAOUT ;
-			obj->reg_in  = 		&CMSDK_GPIO1->DATA ;
-			obj->reg_dir = 		&CMSDK_GPIO1->OUTENABLESET ;
-			obj->reg_dirclr = &CMSDK_GPIO1->OUTENABLECLR ;
-		} else if (pin >= 32 && pin <= 47){
-			obj->reg_data = &CMSDK_GPIO2->DATAOUT;
-			obj->reg_in  = 		&CMSDK_GPIO2->DATA;
-			obj->reg_dir = 		&CMSDK_GPIO2->OUTENABLESET ;
-			obj->reg_dirclr = &CMSDK_GPIO2->OUTENABLECLR ;
-		}	else if (pin >= 48 && pin <= 51){
-			obj->reg_data = &CMSDK_GPIO3->DATAOUT;
-			obj->reg_in  = 		&CMSDK_GPIO3->DATA;
-			obj->reg_dir = 		&CMSDK_GPIO3->OUTENABLESET ;
-			obj->reg_dirclr = &CMSDK_GPIO3->OUTENABLECLR ;
-		} else if (pin == 100 || pin == 101){
-			obj->reg_data = &MPS2_FPGAIO->LED; //user leds
-			obj->reg_in  =  &MPS2_FPGAIO->LED;
-		} else if (pin == 110 || pin == 111){
-			obj->reg_data = &MPS2_FPGAIO->BUTTON; //user switches
-			obj->reg_in = &MPS2_FPGAIO->BUTTON; //user switches
-		}else if (pin >= 200 && pin <= 207){
-			obj->reg_data = &MPS2_SCC->LEDS; //mcc leds
-			obj->reg_in = &MPS2_SCC->LEDS; //mcc leds
-		}else if (pin >= 210 && pin <= 217){
-			obj->reg_in = &MPS2_SCC->SWITCHES; //mcc switches
-		}else if (pin == 303 || pin == 307){
-			obj->reg_data = &MPS2_FPGAIO->MISC; //spi chip select = 303, clcd chip select = 307
-		}else if (pin == 308 || pin == 309 || pin == 310 || pin == 311){
-			obj->reg_data = &MPS2_FPGAIO->MISC; //clcd control bits
-		}
-	}
+        if(pin == NC){ return;}
+        else {
+        int pin_value = 0;
+        obj->pin = pin;
+        if(pin <=15){
+            pin_value = pin;
+        }else if (pin >= 16 && pin <= 31){
+            pin_value = pin-16;
+        }else if (pin >= 32 && pin <= 47){
+            pin_value = pin-32;
+        }else if (pin >= 48 && pin <= 51){
+            pin_value = pin-48;
+        }else if (pin == 100 || pin == 101){
+            pin_value = pin-100;
+        }else if (pin == 110 || pin == 111){
+            pin_value = pin-110;
+        }else if (pin >= 200 && pin <= 207){
+            pin_value = pin-200;
+        }else if (pin >= 210 && pin <= 217){
+            pin_value = pin-210;
+        }else if (pin == 303){
+            pin_value = pin-302;
+        }else if (pin == 307){
+            pin_value = pin-307;
+        }else if (pin == 308){
+            pin_value = pin-305;
+        }else if (pin == 309){
+            pin_value = pin-305;
+        }else if (pin == 310){
+            pin_value = pin-305;
+        }else if (pin == 311){
+            pin_value = pin-305;
+        }else if (pin == 323){
+            pin_value = pin-315;
+        }else if (pin == 334){
+            pin_value = pin-325;
+        }else if (pin == 653){
+            pin_value = pin-646;
+        }
+        
+        obj->mask = 0x1 << pin_value;
+        obj->pin_number = pin;
+        if(pin <=15) {
+            obj->reg_data = &CMSDK_GPIO0->DATAOUT ;
+            obj->reg_in  =         &CMSDK_GPIO0->DATA ;
+            obj->reg_dir =         &CMSDK_GPIO0->OUTENABLESET ;
+            obj->reg_dirclr = &CMSDK_GPIO0->OUTENABLECLR ;
+        } else if (pin >= 16 && pin <= 31){
+            obj->reg_data = &CMSDK_GPIO1->DATAOUT ;
+            obj->reg_in  =         &CMSDK_GPIO1->DATA ;
+            obj->reg_dir =         &CMSDK_GPIO1->OUTENABLESET ;
+            obj->reg_dirclr = &CMSDK_GPIO1->OUTENABLECLR ;
+        } else if (pin >= 32 && pin <= 47){
+            obj->reg_data = &CMSDK_GPIO2->DATAOUT;
+            obj->reg_in  =         &CMSDK_GPIO2->DATA;
+            obj->reg_dir =         &CMSDK_GPIO2->OUTENABLESET ;
+            obj->reg_dirclr = &CMSDK_GPIO2->OUTENABLECLR ;
+        }    else if (pin >= 48 && pin <= 51){
+            obj->reg_data = &CMSDK_GPIO3->DATAOUT;
+            obj->reg_in  =         &CMSDK_GPIO3->DATA;
+            obj->reg_dir =         &CMSDK_GPIO3->OUTENABLESET ;
+            obj->reg_dirclr = &CMSDK_GPIO3->OUTENABLECLR ;
+        } else if (pin == 100 || pin == 101){
+            obj->reg_data = &MPS2_FPGAIO->LED; //user leds
+            obj->reg_in  =  &MPS2_FPGAIO->LED;
+        } else if (pin == 110 || pin == 111){
+            obj->reg_data = &MPS2_FPGAIO->BUTTON; //user switches
+            obj->reg_in = &MPS2_FPGAIO->BUTTON; //user switches
+        }else if (pin >= 200 && pin <= 207){
+            obj->reg_data = &MPS2_SCC->LEDS; //mcc leds
+            obj->reg_in = &MPS2_SCC->LEDS; //mcc leds
+        }else if (pin >= 210 && pin <= 217){
+            obj->reg_in = &MPS2_SCC->SWITCHES; //mcc switches
+        }else if (pin == 303 || pin == 307){
+            obj->reg_data = &MPS2_FPGAIO->MISC; //spi chip select = 303, clcd chip select = 307
+        }else if (pin == 308 || pin == 309 || pin == 310 || pin == 311){
+            obj->reg_data = &MPS2_FPGAIO->MISC; //clcd control bits
+        }else if (pin == 323 || pin == 334 || pin == 653){ //spi 3 chip select = 323, spi 4 chip select = 334, adc chip select = 653
+            obj->reg_data = &MPS2_FPGAIO->MISC; //spi cs bits
+        }
+        
+        if (pin == 323){
+            CMSDK_GPIO0->ALTFUNCSET |= 0x1000;
+        }else if (pin == 334){
+            CMSDK_GPIO2->ALTFUNCSET |= 0x0040;
+        }else if (pin == 653){
+            CMSDK_GPIO1->ALTFUNCSET |= 0x0001;
+        }
+    }
 }
 
 void gpio_mode(gpio_t *obj, PinMode mode) {
-		pin_mode(obj->pin, mode);
+        pin_mode(obj->pin, mode);
 }
 
 void gpio_dir(gpio_t *obj, PinDirection direction) {
-		if(obj->pin >= 0 && obj->pin <= 51)
-			{		
+        if(obj->pin >= 0 && obj->pin <= 51)
+            {        
         switch (direction) {
           case PIN_INPUT : *obj->reg_dirclr = obj->mask;  break;
           case PIN_OUTPUT: *obj->reg_dir |= obj->mask; break;
@@ -115,10 +131,10 @@
 }
 
 int gpio_is_connected(const gpio_t *obj){
-	if(obj->pin != (PinName)NC){
-		return 1;
-	} else {
-		return 0;
-	}
+    if(obj->pin != (PinName)NC){
+        return 1;
+    } else {
+        return 0;
+    }
 }
 
--- a/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/gpio_irq_api.c	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/gpio_irq_api.c	Wed Mar 02 14:30:11 2016 +0000
@@ -27,36 +27,36 @@
 static gpio_irq_handler irq_handler;
 
 static inline void handle_interrupt_in(uint32_t channel) {
-		uint32_t ch_bit = (1 << channel);
-		// Return immediately if:
-		//   * The interrupt was already served
-		//   * There is no user handler
-		//   * It is a level interrupt, not an edge interrupt
-	if (ch_bit <16){
-		if ( ((CMSDK_GPIO_0->INTSTATUS) == 0) || (channel_ids[channel] == 0) || ((CMSDK_GPIO_0->INTTYPESET) == 0) ) return;
+        uint32_t ch_bit = (1 << channel);
+        // Return immediately if:
+        //   * The interrupt was already served
+        //   * There is no user handler
+        //   * It is a level interrupt, not an edge interrupt
+    if (ch_bit <16){
+        if ( ((CMSDK_GPIO_0->INTSTATUS) == 0) || (channel_ids[channel] == 0) || ((CMSDK_GPIO_0->INTTYPESET) == 0) ) return;
 
-		if ((CMSDK_GPIO_0->INTTYPESET & ch_bit) && (CMSDK_GPIO_0->INTPOLSET & ch_bit)) {
-				irq_handler(channel_ids[channel], IRQ_RISE);
-				CMSDK_GPIO_0->INTPOLSET = ch_bit;
-		}
-		if ((CMSDK_GPIO_0->INTTYPESET & ch_bit) && ~(CMSDK_GPIO_0->INTPOLSET & ch_bit)) {
-				irq_handler(channel_ids[channel], IRQ_FALL);
-		}
-		CMSDK_GPIO_0->INTCLEAR = ch_bit;
-	}
-	
-	if (ch_bit>=16) {
-		if ( ((CMSDK_GPIO_1->INTSTATUS) == 0) || (channel_ids[channel] == 0) || ((CMSDK_GPIO_1->INTTYPESET) == 0) ) return;
+        if ((CMSDK_GPIO_0->INTTYPESET & ch_bit) && (CMSDK_GPIO_0->INTPOLSET & ch_bit)) {
+                irq_handler(channel_ids[channel], IRQ_RISE);
+                CMSDK_GPIO_0->INTPOLSET = ch_bit;
+        }
+        if ((CMSDK_GPIO_0->INTTYPESET & ch_bit) && ~(CMSDK_GPIO_0->INTPOLSET & ch_bit)) {
+                irq_handler(channel_ids[channel], IRQ_FALL);
+        }
+        CMSDK_GPIO_0->INTCLEAR = ch_bit;
+    }
+    
+    if (ch_bit>=16) {
+        if ( ((CMSDK_GPIO_1->INTSTATUS) == 0) || (channel_ids[channel] == 0) || ((CMSDK_GPIO_1->INTTYPESET) == 0) ) return;
 
-		if ((CMSDK_GPIO_1->INTTYPESET & ch_bit) && (CMSDK_GPIO_1->INTPOLSET & ch_bit)) {
-				irq_handler(channel_ids[channel], IRQ_RISE);
-				CMSDK_GPIO_1->INTPOLSET = ch_bit;
-		}
-		if ((CMSDK_GPIO_1->INTTYPESET & ch_bit) && ~(CMSDK_GPIO_1->INTPOLSET & ch_bit)) {
-				irq_handler(channel_ids[channel], IRQ_FALL);
-		}
-		CMSDK_GPIO_1->INTCLEAR = ch_bit;
-	}
+        if ((CMSDK_GPIO_1->INTTYPESET & ch_bit) && (CMSDK_GPIO_1->INTPOLSET & ch_bit)) {
+                irq_handler(channel_ids[channel], IRQ_RISE);
+                CMSDK_GPIO_1->INTPOLSET = ch_bit;
+        }
+        if ((CMSDK_GPIO_1->INTTYPESET & ch_bit) && ~(CMSDK_GPIO_1->INTPOLSET & ch_bit)) {
+                irq_handler(channel_ids[channel], IRQ_FALL);
+        }
+        CMSDK_GPIO_1->INTCLEAR = ch_bit;
+    }
 }
 
 void gpio0_irq0(void)  {handle_interrupt_in(0);}
@@ -94,148 +94,148 @@
 
 
 int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32_t id) {
-		if (pin == NC) {return -1;}
-		else {
-		
-		irq_handler = handler;
-		
-		int found_free_channel = 0;
-		int i = 0;
-		for (i=0; i<CHANNEL_NUM; i++) {
-				if (channel_ids[i] == 0) {
-						channel_ids[i] = id;
-						obj->ch = i;
-						found_free_channel = 1;
-						break;
-				}
-		}
-		if (!found_free_channel) return -1;
-		
-		
-		/* To select a pin for any of the eight pin interrupts, write the pin number
-		 * as 0 to 23 for pins PIO0_0 to PIO0_23 and 24 to 55.
-		 * @see: mbed_capi/PinNames.h
-		 */
-		if (pin <16)
-		{
-		CMSDK_GPIO_0->INTENSET |= (0x1 << pin);
-		}
-		
-		if (pin >= 16)
-		{
-		CMSDK_GPIO_1->INTENSET |= (0x1 << pin);
-		}
+        if (pin == NC) {return -1;}
+        else {
+        
+        irq_handler = handler;
+        
+        int found_free_channel = 0;
+        int i = 0;
+        for (i=0; i<CHANNEL_NUM; i++) {
+                if (channel_ids[i] == 0) {
+                        channel_ids[i] = id;
+                        obj->ch = i;
+                        found_free_channel = 1;
+                        break;
+                }
+        }
+        if (!found_free_channel) return -1;
+        
+        
+        /* To select a pin for any of the eight pin interrupts, write the pin number
+         * as 0 to 23 for pins PIO0_0 to PIO0_23 and 24 to 55.
+         * @see: mbed_capi/PinNames.h
+         */
+        if (pin <16)
+        {
+        CMSDK_GPIO_0->INTENSET |= (0x1 << pin);
+        }
+        
+        if (pin >= 16)
+        {
+        CMSDK_GPIO_1->INTENSET |= (0x1 << pin);
+        }
 
-		void (*channels_irq)(void) = NULL;
-		switch (obj->ch) {
-				case 0: channels_irq = &gpio0_irq0; break;
-				case 1: channels_irq = &gpio0_irq1; break;
-				case 2: channels_irq = &gpio0_irq2; break;
-				case 3: channels_irq = &gpio0_irq3; break;
-				case 4: channels_irq = &gpio0_irq4; break;
-				case 5: channels_irq = &gpio0_irq5; break;
-				case 6: channels_irq = &gpio0_irq6; break;
-				case 7: channels_irq = &gpio0_irq7; break;
-				case 8: channels_irq = &gpio0_irq8; break;
-				case 9: channels_irq = &gpio0_irq9; break;
-				case 10: channels_irq = &gpio0_irq10; break;
-				case 11: channels_irq = &gpio0_irq11; break;
-				case 12: channels_irq = &gpio0_irq12; break;
-				case 13: channels_irq = &gpio0_irq13; break;
-				case 14: channels_irq = &gpio0_irq14; break;
-				case 15: channels_irq = &gpio0_irq15; break;
-				case 16: channels_irq = &gpio1_irq0; break;
-				case 17: channels_irq = &gpio1_irq1; break;
-				case 18: channels_irq = &gpio1_irq2; break;
-				case 19: channels_irq = &gpio1_irq3; break;
-				case 20: channels_irq = &gpio1_irq4; break;
-				case 21: channels_irq = &gpio1_irq5; break;
-				case 22: channels_irq = &gpio1_irq6; break;
-				case 23: channels_irq = &gpio1_irq7; break;
-				case 24: channels_irq = &gpio1_irq8; break;
-				case 25: channels_irq = &gpio1_irq9; break;
-				case 26: channels_irq = &gpio1_irq10; break;
-				case 27: channels_irq = &gpio1_irq11; break;
-				case 28: channels_irq = &gpio1_irq12; break;
-				case 29: channels_irq = &gpio1_irq13; break;
-				case 30: channels_irq = &gpio1_irq14; break;
-				case 31: channels_irq = &gpio1_irq15; break;
-			
-		}
-		NVIC_SetVector((IRQn_Type)(PININT_IRQ + obj->ch), (uint32_t)channels_irq);
-		NVIC_EnableIRQ((IRQn_Type)(PININT_IRQ + obj->ch));
-	
-		return 0;
-	}
+        void (*channels_irq)(void) = NULL;
+        switch (obj->ch) {
+                case 0: channels_irq = &gpio0_irq0; break;
+                case 1: channels_irq = &gpio0_irq1; break;
+                case 2: channels_irq = &gpio0_irq2; break;
+                case 3: channels_irq = &gpio0_irq3; break;
+                case 4: channels_irq = &gpio0_irq4; break;
+                case 5: channels_irq = &gpio0_irq5; break;
+                case 6: channels_irq = &gpio0_irq6; break;
+                case 7: channels_irq = &gpio0_irq7; break;
+                case 8: channels_irq = &gpio0_irq8; break;
+                case 9: channels_irq = &gpio0_irq9; break;
+                case 10: channels_irq = &gpio0_irq10; break;
+                case 11: channels_irq = &gpio0_irq11; break;
+                case 12: channels_irq = &gpio0_irq12; break;
+                case 13: channels_irq = &gpio0_irq13; break;
+                case 14: channels_irq = &gpio0_irq14; break;
+                case 15: channels_irq = &gpio0_irq15; break;
+                case 16: channels_irq = &gpio1_irq0; break;
+                case 17: channels_irq = &gpio1_irq1; break;
+                case 18: channels_irq = &gpio1_irq2; break;
+                case 19: channels_irq = &gpio1_irq3; break;
+                case 20: channels_irq = &gpio1_irq4; break;
+                case 21: channels_irq = &gpio1_irq5; break;
+                case 22: channels_irq = &gpio1_irq6; break;
+                case 23: channels_irq = &gpio1_irq7; break;
+                case 24: channels_irq = &gpio1_irq8; break;
+                case 25: channels_irq = &gpio1_irq9; break;
+                case 26: channels_irq = &gpio1_irq10; break;
+                case 27: channels_irq = &gpio1_irq11; break;
+                case 28: channels_irq = &gpio1_irq12; break;
+                case 29: channels_irq = &gpio1_irq13; break;
+                case 30: channels_irq = &gpio1_irq14; break;
+                case 31: channels_irq = &gpio1_irq15; break;
+            
+        }
+        NVIC_SetVector((IRQn_Type)(PININT_IRQ + obj->ch), (uint32_t)channels_irq);
+        NVIC_EnableIRQ((IRQn_Type)(PININT_IRQ + obj->ch));
+    
+        return 0;
+    }
 }
 
 void gpio_irq_free(gpio_irq_t *obj) {
 }
 
 void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) {
-		unsigned int ch_bit = (1 << obj->ch);
-		
-		// Clear interrupt
-		if (obj->ch <16)
-		{
-				if (!(CMSDK_GPIO_0->INTTYPESET & ch_bit))
-				{
-					CMSDK_GPIO_0->INTCLEAR = ch_bit;
-				}
-		}
-		if (obj->ch >= 16)
-		{
-				if (!(CMSDK_GPIO_1->INTTYPESET & ch_bit))
-				{
-					CMSDK_GPIO_1->INTCLEAR = ch_bit;
-				}
-		}
-		
-		// Edge trigger
-		if (obj->ch <16)
-		{
-				CMSDK_GPIO_0->INTTYPESET &= ch_bit;
-				if (event == IRQ_RISE) {
-						CMSDK_GPIO_0->INTPOLSET |= ch_bit;
-						if (enable) {
-								CMSDK_GPIO_0->INTENSET |= ch_bit;
-						} else {
-								CMSDK_GPIO_0->INTENCLR |= ch_bit;
-						}
-				} else {
-						CMSDK_GPIO_0->INTPOLCLR |= ch_bit;
-						if (enable) {
-								CMSDK_GPIO_0->INTENSET |= ch_bit;
-						} else {
-								CMSDK_GPIO_0->INTENCLR |= ch_bit;
-						}
-				}
-		}
-		if (obj->ch >= 16)
-		{
-				CMSDK_GPIO_1->INTTYPESET &= ch_bit;
-				if (event == IRQ_RISE) {
-						CMSDK_GPIO_1->INTPOLSET |= ch_bit;
-						if (enable) {
-								CMSDK_GPIO_1->INTENSET |= ch_bit;
-						} else {
-								CMSDK_GPIO_1->INTENCLR |= ch_bit;
-						}
-				} else {
-						CMSDK_GPIO_1->INTPOLCLR |= ch_bit;
-						if (enable) {
-								CMSDK_GPIO_1->INTENSET |= ch_bit;
-						} else {
-								CMSDK_GPIO_1->INTENCLR |= ch_bit;
-						}
-				}
-		}
+        unsigned int ch_bit = (1 << obj->ch);
+        
+        // Clear interrupt
+        if (obj->ch <16)
+        {
+                if (!(CMSDK_GPIO_0->INTTYPESET & ch_bit))
+                {
+                    CMSDK_GPIO_0->INTCLEAR = ch_bit;
+                }
+        }
+        if (obj->ch >= 16)
+        {
+                if (!(CMSDK_GPIO_1->INTTYPESET & ch_bit))
+                {
+                    CMSDK_GPIO_1->INTCLEAR = ch_bit;
+                }
+        }
+        
+        // Edge trigger
+        if (obj->ch <16)
+        {
+                CMSDK_GPIO_0->INTTYPESET &= ch_bit;
+                if (event == IRQ_RISE) {
+                        CMSDK_GPIO_0->INTPOLSET |= ch_bit;
+                        if (enable) {
+                                CMSDK_GPIO_0->INTENSET |= ch_bit;
+                        } else {
+                                CMSDK_GPIO_0->INTENCLR |= ch_bit;
+                        }
+                } else {
+                        CMSDK_GPIO_0->INTPOLCLR |= ch_bit;
+                        if (enable) {
+                                CMSDK_GPIO_0->INTENSET |= ch_bit;
+                        } else {
+                                CMSDK_GPIO_0->INTENCLR |= ch_bit;
+                        }
+                }
+        }
+        if (obj->ch >= 16)
+        {
+                CMSDK_GPIO_1->INTTYPESET &= ch_bit;
+                if (event == IRQ_RISE) {
+                        CMSDK_GPIO_1->INTPOLSET |= ch_bit;
+                        if (enable) {
+                                CMSDK_GPIO_1->INTENSET |= ch_bit;
+                        } else {
+                                CMSDK_GPIO_1->INTENCLR |= ch_bit;
+                        }
+                } else {
+                        CMSDK_GPIO_1->INTPOLCLR |= ch_bit;
+                        if (enable) {
+                                CMSDK_GPIO_1->INTENSET |= ch_bit;
+                        } else {
+                                CMSDK_GPIO_1->INTENCLR |= ch_bit;
+                        }
+                }
+        }
 }
 
 void gpio_irq_enable(gpio_irq_t *obj) {
-		NVIC_EnableIRQ((IRQn_Type)(PININT_IRQ + obj->ch));
+        NVIC_EnableIRQ((IRQn_Type)(PININT_IRQ + obj->ch));
 }
 
 void gpio_irq_disable(gpio_irq_t *obj) {
-		NVIC_DisableIRQ((IRQn_Type)(PININT_IRQ + obj->ch));
+        NVIC_DisableIRQ((IRQn_Type)(PININT_IRQ + obj->ch));
 }
--- a/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/gpio_object.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/gpio_object.h	Wed Mar 02 14:30:11 2016 +0000
@@ -24,24 +24,24 @@
 #ifdef __cplusplus
 extern "C" {
 #endif
-	
+    
 typedef struct {
     PinName  pin;
     uint32_t mask;
-		uint32_t pin_number;
-	
+        uint32_t pin_number;
+    
     __IO uint32_t *reg_dir;
-		__IO uint32_t *reg_dirclr;
+        __IO uint32_t *reg_dirclr;
     __IO uint32_t *reg_data;
     __I uint32_t *reg_in;
 } gpio_t;
 
 static inline void gpio_write(gpio_t *obj, int value) {
-    if (value == 1){
-				*obj->reg_data |= (obj->mask); 
-		} else if (value == 0){
-				*obj->reg_data &= ~(obj->mask); 
-		}
+    if (value){
+                *obj->reg_data |= (obj->mask); 
+        } else {
+                *obj->reg_data &= ~(obj->mask); 
+        }
 }
 
 static inline int gpio_read(gpio_t *obj) {
--- a/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/i2c_api.c	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/i2c_api.c	Wed Mar 02 14:30:11 2016 +0000
@@ -48,111 +48,161 @@
 
 #define TSC_TSU            15          // Setup delay 600nS min
 #define AAIC_TSU            25           // Setup delay 1000nS min
+#define SHIELD_TSU            25           // Setup delay 1000nS min
 
 
 static const PinMap PinMap_I2C_SDA[] = {
     {TSC_SDA, I2C_0, 0},
     {AUD_SDA, I2C_1, 0},
-//    {EXP_SDA, I2C_2, 0},		//only used in extended version
+    {SHIELD_0_SDA, I2C_2, 0},
+    {SHIELD_1_SDA, I2C_3, 0},
     {NC   , NC   , 0}
 };
 
 static const PinMap PinMap_I2C_SCL[] = {
     {TSC_SCL, I2C_0, 0},
     {AUD_SCL, I2C_1, 0},
-//    {EXP_SCL, I2C_2, 0},		//only used in extended version
+    {SHIELD_0_SCL, I2C_2, 0},
+    {SHIELD_1_SCL, I2C_3, 0},
     {NC   , NC,    0}
 };
 
 static inline void i2c_send_byte(i2c_t *obj, unsigned char c)
 {
     int loop;
-		switch ((int)obj->i2c) {
-			case I2C_0: 
-        obj->i2c->CONTROLC = SCL;
-        i2c_delay(TSC_TSU);
-    
-        for (loop = 0; loop < 8; loop++)
-        {
-            if (c & (1 << (7 - loop)))
-                obj->i2c->CONTROLS = SDA;
-            else
-                obj->i2c->CONTROLC = SDA;
-            i2c_delay(TSC_TSU);
-            obj->i2c->CONTROLS = SCL;
-            i2c_delay(TSC_TSU);
+    switch ((int)obj->i2c) {
+        case I2C_0: 
             obj->i2c->CONTROLC = SCL;
             i2c_delay(TSC_TSU);
-        }
-    
-        obj->i2c->CONTROLS = SDA;
-        i2c_delay(TSC_TSU);
+
+            for (loop = 0; loop < 8; loop++)
+            {
+                if (c & (1 << (7 - loop)))
+                    obj->i2c->CONTROLS = SDA;
+                else
+                    obj->i2c->CONTROLC = SDA;
+                
+                i2c_delay(TSC_TSU);
+                obj->i2c->CONTROLS = SCL;
+                i2c_delay(TSC_TSU);
+                obj->i2c->CONTROLC = SCL;
+                i2c_delay(TSC_TSU);
+            }
+
+            obj->i2c->CONTROLS = SDA;
+            i2c_delay(TSC_TSU);
         break;
-      case I2C_1:
-        for (loop = 0; loop < 8; loop++) {
-            i2c_delay(AAIC_TSU);
-            obj->i2c->CONTROLC = SCL;
+        case I2C_1:
+            for (loop = 0; loop < 8; loop++) {
+                i2c_delay(AAIC_TSU);
+                obj->i2c->CONTROLC = SCL;
+                i2c_delay(AAIC_TSU);
+                if (c & (1 << (7 - loop)))
+                    obj->i2c->CONTROLS = SDA;
+                else
+                    obj->i2c->CONTROLC = SDA;
+                
+                i2c_delay(AAIC_TSU);
+                obj->i2c->CONTROLS = SCL;
+                i2c_delay(AAIC_TSU);
+                obj->i2c->CONTROLC = SCL;
+            }
+
             i2c_delay(AAIC_TSU);
-            if (c & (1 << (7 - loop)))
-                obj->i2c->CONTROLS = SDA;
-            else
-                obj->i2c->CONTROLC = SDA;
-            i2c_delay(AAIC_TSU);
-            obj->i2c->CONTROLS = SCL;
+            obj->i2c->CONTROLS = SDA;
             i2c_delay(AAIC_TSU);
+        break;
+        case I2C_2: 
+        case I2C_3: 
             obj->i2c->CONTROLC = SCL;
-        }
-     
-        i2c_delay(AAIC_TSU);
-        obj->i2c->CONTROLS = SDA;
-        i2c_delay(AAIC_TSU);
-				break;
+            i2c_delay(SHIELD_TSU);
+
+            for (loop = 0; loop < 8; loop++)
+            {
+                if (c & (1 << (7 - loop)))
+                    obj->i2c->CONTROLS = SDA;
+                else
+                    obj->i2c->CONTROLC = SDA;
+                
+                i2c_delay(SHIELD_TSU);
+                obj->i2c->CONTROLS = SCL;
+                i2c_delay(SHIELD_TSU);
+                obj->i2c->CONTROLC = SCL;
+                i2c_delay(SHIELD_TSU);
+            }
+
+            obj->i2c->CONTROLS = SDA;
+            i2c_delay(SHIELD_TSU);
+        break;
     }
 }
 
 static inline unsigned char i2c_receive_byte(i2c_t *obj)
 {
-		int data_receive_byte, loop;
-		switch ((int)obj->i2c) {
-			case I2C_0: 
-        obj->i2c->CONTROLS = SDA;
-        i2c_delay(TSC_TSU);
-    
-        data_receive_byte = 0;
-    
-        for (loop = 0; loop < 8; loop++)
-        {
-            obj->i2c->CONTROLS = SCL;
+    int data_receive_byte, loop;
+    switch ((int)obj->i2c) {
+        case I2C_0: 
+            obj->i2c->CONTROLS = SDA;
             i2c_delay(TSC_TSU);
-            if ((obj->i2c->CONTROL & SDA))
-            	data_receive_byte += (1 << (7 - loop));
-            obj->i2c->CONTROLC = SCL;
+
+            data_receive_byte = 0;
+
+            for (loop = 0; loop < 8; loop++)
+            {
+                obj->i2c->CONTROLS = SCL;
+                i2c_delay(TSC_TSU);
+                if ((obj->i2c->CONTROL & SDA))
+                    data_receive_byte += (1 << (7 - loop));
+                
+                obj->i2c->CONTROLC = SCL;
+                i2c_delay(TSC_TSU);
+            }
+
+            obj->i2c->CONTROLC = SDA;
             i2c_delay(TSC_TSU);
-        }
-    
-        obj->i2c->CONTROLC = SDA;
-        i2c_delay(TSC_TSU);
         break;
-      case I2C_1:
-        obj->i2c->CONTROLS = SDA;
-        data_receive_byte = 0;
-    
-        for (loop = 0; loop < 8; loop++) {
+        case I2C_1:
+            obj->i2c->CONTROLS = SDA;
+            data_receive_byte = 0;
+
+            for (loop = 0; loop < 8; loop++) {
+                i2c_delay(AAIC_TSU);
+                obj->i2c->CONTROLC = SCL;
+                i2c_delay(AAIC_TSU);
+                obj->i2c->CONTROLS = SCL | SDA;
+                i2c_delay(AAIC_TSU);
+                if ((obj->i2c->CONTROL & SDA))
+                    data_receive_byte += (1 << (7 - loop));
+                
+                i2c_delay(AAIC_TSU);
+                obj->i2c->CONTROLC = SCL;
+            }
+
             i2c_delay(AAIC_TSU);
-            obj->i2c->CONTROLC = SCL;
-            i2c_delay(AAIC_TSU);
-            obj->i2c->CONTROLS = SCL | SDA;
+            obj->i2c->CONTROLC = SDA;
             i2c_delay(AAIC_TSU);
-            if ((obj->i2c->CONTROL & SDA))
-            	data_receive_byte += (1 << (7 - loop));
-            i2c_delay(AAIC_TSU);
-            obj->i2c->CONTROLC = SCL;
-        }
-    
-        i2c_delay(AAIC_TSU);
-        obj->i2c->CONTROLC = SDA;
-        i2c_delay(AAIC_TSU);
-    		break;
+        break;
+        case I2C_2: 
+        case I2C_3:
+            obj->i2c->CONTROLS = SDA;
+            i2c_delay(SHIELD_TSU);
+
+            data_receive_byte = 0;
+
+            for (loop = 0; loop < 8; loop++)
+            {
+                obj->i2c->CONTROLS = SCL;
+                i2c_delay(SHIELD_TSU);
+                if ((obj->i2c->CONTROL & SDA))
+                    data_receive_byte += (1 << (7 - loop));
+                
+                obj->i2c->CONTROLC = SCL;
+                i2c_delay(SHIELD_TSU);
+            }
+
+            obj->i2c->CONTROLC = SDA;
+            i2c_delay(SHIELD_TSU);
+        break;
     }
     return data_receive_byte;
 }
@@ -160,11 +210,13 @@
 static inline int i2c_receive_ack(i2c_t *obj)
 {
     int nack;
-		int delay_value;
-		switch ((int)obj->i2c) {
-			case I2C_0: delay_value = TSC_TSU; break;
-      case I2C_1: delay_value = AAIC_TSU; break;
-		}
+    int delay_value;
+    switch ((int)obj->i2c) {
+        case I2C_0: delay_value = TSC_TSU; break;
+        case I2C_1: delay_value = AAIC_TSU; break;
+        case I2C_2: delay_value = SHIELD_TSU; break;
+        case I2C_3: delay_value = SHIELD_TSU; break;
+    }
 
     i2c_delay(delay_value);
     obj->i2c->CONTROLS = SDA;
@@ -186,13 +238,15 @@
 }
 
 
-static inline void i2c_send_ack(i2c_t *obj) 
+static inline void i2c_send_nack(i2c_t *obj) 
 {
-		int delay_value;
-		switch ((int)obj->i2c) {
-			case I2C_0: delay_value = TSC_TSU; break;
-      case I2C_1: delay_value = AAIC_TSU; break;
-		}
+    int delay_value;
+    switch ((int)obj->i2c) {
+        case I2C_0: delay_value = TSC_TSU; break;
+        case I2C_1: delay_value = AAIC_TSU; break;
+        case I2C_2: delay_value = SHIELD_TSU; break;
+        case I2C_3: delay_value = SHIELD_TSU; break;
+    }
 
     i2c_delay(delay_value);
     obj->i2c->CONTROLC = SCL;
@@ -208,10 +262,28 @@
 
 }
 
+static inline void i2c_send_ack(i2c_t *obj) 
+{
+    int delay_value;
+    switch ((int)obj->i2c) {
+        case I2C_0: delay_value = TSC_TSU; break;
+        case I2C_1: delay_value = AAIC_TSU; break;
+        case I2C_2: delay_value = SHIELD_TSU; break;
+        case I2C_3: delay_value = SHIELD_TSU; break;
+    }
 
-void i2c_init(i2c_t *obj, PinName sda, PinName scl) {
-	
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLC = SDA;
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLS = SCL;
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLC = SCL;
+    i2c_delay(delay_value);
 
+}
+
+void i2c_init(i2c_t *obj, PinName sda, PinName scl)
+{
     // determine the SPI to use
     I2CName i2c_sda = (I2CName)pinmap_peripheral(sda, PinMap_I2C_SDA);
     I2CName i2c_scl = (I2CName)pinmap_peripheral(scl, PinMap_I2C_SCL);
@@ -220,62 +292,76 @@
     if ((int)obj->i2c == NC) {
         error("I2C pin mapping failed");
     }
-		
+        
     pinmap_pinout(sda, PinMap_I2C_SDA);
     pinmap_pinout(scl, PinMap_I2C_SCL);
+        
+    switch ((int)obj->i2c) {
+        case I2C_2: CMSDK_GPIO0->ALTFUNCSET |= 0x8020; break;
+        case I2C_3: CMSDK_GPIO1->ALTFUNCSET |= 0x8000; 
+                                        CMSDK_GPIO2->ALTFUNCSET |= 0x0200; break;
+    }
+        
+        
 }
 
-int i2c_start(i2c_t *obj) {
-
-		int delay_value;
-		switch ((int)obj->i2c) {
-			case I2C_0: delay_value = TSC_TSU; break;
-      case I2C_1: delay_value = AAIC_TSU; break;
-		}
-				i2c_delay(delay_value);
-				obj->i2c->CONTROLS = SDA | SCL;
-				i2c_delay(delay_value);
-				obj->i2c->CONTROLC = SDA;
-				i2c_delay(delay_value);
-
-
+int i2c_start(i2c_t *obj)
+{
+    int delay_value;
+    switch ((int)obj->i2c) {
+        case I2C_0: delay_value = TSC_TSU; break;
+        case I2C_1: delay_value = AAIC_TSU; break;
+        case I2C_2: delay_value = SHIELD_TSU; break;
+        case I2C_3: delay_value = SHIELD_TSU; break;
+    }
+    
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLS = SDA | SCL;
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLC = SDA;
+    i2c_delay(delay_value);
 
     return 0;
 }
 
-int i2c_start_tsc(i2c_t *obj) {
-
-		int delay_value;
-		switch ((int)obj->i2c) {
-			case I2C_0: delay_value = TSC_TSU; break;
-      case I2C_1: delay_value = AAIC_TSU; break;
-		}
-				i2c_delay(delay_value);
-				obj->i2c->CONTROLC = SDA;
-				i2c_delay(delay_value);
-				obj->i2c->CONTROLC = SCL;
-				i2c_delay(delay_value);
+int i2c_start_tsc(i2c_t *obj)
+{
+    int delay_value;
+    switch ((int)obj->i2c) {
+        case I2C_0: delay_value = TSC_TSU; break;
+        case I2C_1: delay_value = AAIC_TSU; break;
+        case I2C_2: delay_value = SHIELD_TSU; break;
+        case I2C_3: delay_value = SHIELD_TSU; break;
+    }
+    
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLC = SDA;
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLC = SCL;
+    i2c_delay(delay_value);
 
     return 0;
 }
 
-int i2c_stop(i2c_t *obj) {
-	
-		int delay_value;
-		switch ((int)obj->i2c) {
-			case I2C_0: delay_value = TSC_TSU; break;
-      case I2C_1: delay_value = AAIC_TSU; break;
-		}
-		// Actual stop bit
-		i2c_delay(delay_value);
-		obj->i2c->CONTROLC = SDA;
-		i2c_delay(delay_value);
-		obj->i2c->CONTROLS = SCL;
-		i2c_delay(delay_value);
-		obj->i2c->CONTROLS = SDA;
-		i2c_delay(delay_value);
+int i2c_stop(i2c_t *obj)
+{    
+    int delay_value;
+    switch ((int)obj->i2c) {
+        case I2C_0: delay_value = TSC_TSU; break;
+        case I2C_1: delay_value = AAIC_TSU; break;
+        case I2C_2: delay_value = SHIELD_TSU; break;
+        case I2C_3: delay_value = SHIELD_TSU; break;
+    }
+    // Actual stop bit
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLC = SDA;
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLS = SCL;
+    i2c_delay(delay_value);
+    obj->i2c->CONTROLS = SDA;
+    i2c_delay(delay_value);
 
-		return 0;
+    return 0;
 }
 
 
@@ -283,103 +369,154 @@
 void i2c_frequency(i2c_t *obj, int hz) {
 }
 
-int i2c_read(i2c_t *obj, int address, char *data, int length, int stop) {
-		unsigned int loop, rxdata;
-		int delay_value, sadr, ack, bytes_read;
-		rxdata=0;
-		switch ((int)obj->i2c) {
-			case I2C_0: 
-				delay_value = TSC_TSU; 
-				sadr = TSC_I2C_ADDR; 
-				break;
-      case I2C_1: 
-				delay_value = AAIC_TSU; 
-				sadr = AAIC_I2C_ADDR; 
-				break;
-		}
-    // Start bit
-		i2c_start(obj);
-
-    // Set serial and register address
-		i2c_send_byte(obj,sadr);
-		ack += i2c_receive_ack(obj);
-		i2c_send_byte(obj, address);
-		ack += i2c_receive_ack(obj);
-
-    // Stop bit
-		i2c_stop(obj);
-
+int i2c_read(i2c_t *obj, int address, char *data, int length, int stop)
+{
+    unsigned int loop, rxdata;
+    int sadr, ack, bytes_read;
+    rxdata=0;
+    switch ((int)obj->i2c) {
+        case I2C_0: 
+            sadr = TSC_I2C_ADDR; 
+            break;
+        case I2C_1: 
+            sadr = AAIC_I2C_ADDR; 
+            break;
+        case I2C_2: 
+        case I2C_3: 
+            sadr = address;     //LM75_I2C_ADDR; or MMA7660_I2C_ADDR;
+            break;
+         }
+    bytes_read = 0;
     // Start bit
-		i2c_start_tsc(obj);
-		
-    // Read from serial address
-    i2c_send_byte(obj,sadr | 1);
-		ack += i2c_receive_ack(obj);
-		bytes_read = 0;
-		
-		switch ((int)obj->i2c) {
-			case I2C_0: 
-        rxdata = (i2c_receive_byte(obj) & 0xFF);
-				data[((length-1)-bytes_read)] = (char)rxdata;
-				bytes_read++;
-        // Read multiple bytes
-        if ((length > 1) && (length < 5))
-        {
-          for (loop = 1; loop <= (length - 1); loop++)
-          {
-              // Send ACK
-                i2c_delay(delay_value);
-                obj->i2c->CONTROLC = SDA;
-                i2c_delay(delay_value);
-                obj->i2c->CONTROLS = SCL;
-                i2c_delay(delay_value);
-                obj->i2c->CONTROLC = SCL;
-                i2c_delay(delay_value);
-     
-              rxdata = i2c_receive_byte(obj);
-							data[(length-1)-bytes_read] = (char)rxdata;
-							bytes_read++;
-						
-          }
-        }
-        break;
-      case I2C_1:
-        rxdata = i2c_receive_byte(obj);
-				data[bytes_read] = (char)rxdata;
-				bytes_read++;
-    		break;
+    i2c_start(obj);
+
+    switch ((int)obj->i2c) {
+        case I2C_0: 
+            // Set serial and register address
+            i2c_send_byte(obj,sadr);
+            ack += i2c_receive_ack(obj);
+            i2c_send_byte(obj, address);
+            ack += i2c_receive_ack(obj);
+
+            // Stop bit
+            i2c_stop(obj);
+
+            // Start bit
+            i2c_start_tsc(obj);
+
+            // Read from I2C address
+            i2c_send_byte(obj,sadr | 1);
+            ack += i2c_receive_ack(obj);
+
+            rxdata = (i2c_receive_byte(obj) & 0xFF);
+            data[((length-1)-bytes_read)] = (char)rxdata;
+            bytes_read++;
+            // Read multiple bytes
+            if ((length > 1) && (length < 5))
+            {
+                for (loop = 1; loop <= (length - 1); loop++)
+                {
+                    // Send ACK
+                    i2c_send_ack(obj);
+
+                    // Next byte
+                    //rxdata = ((rxdata << 8) & 0xFFFFFF00);
+                    //rxdata |= (i2c_receive_byte(obj) & 0xFF);
+                    rxdata = i2c_receive_byte(obj);
+                    data[(length-1)-bytes_read] = (char)rxdata;
+                    bytes_read++;
+                            
+                }
+            }
+            break;
+        case I2C_1:
+            // Set serial and register address
+            i2c_send_byte(obj,sadr);
+            ack += i2c_receive_ack(obj);
+            i2c_send_byte(obj, address);
+            ack += i2c_receive_ack(obj);
+
+            // Stop bit
+            i2c_stop(obj);
+
+            // Start bit
+            i2c_start_tsc(obj);
+            // Fall through to read data
+        case I2C_2:
+        case I2C_3:
+            // Read from preset register address pointer
+            i2c_send_byte(obj,sadr | 1);
+            ack += i2c_receive_ack(obj);
+
+            rxdata = i2c_receive_byte(obj);
+            data[bytes_read] = (char)rxdata;
+            bytes_read++;
+            // Read multiple bytes
+            if ((length > 1) && (length < 5))
+            {
+                for (loop = 1; loop <= (length - 1); loop++)
+                {
+                    // Send ACK
+                    i2c_send_ack(obj);
+
+                    // Next byte
+                    rxdata = i2c_receive_byte(obj);
+                    data[loop] = (char)rxdata;
+                    bytes_read++;
+                            
+                }
+            }
+            break;
     }
-    i2c_send_ack(obj);
+    i2c_send_nack(obj);  
 
-    // Actual stop bit
-		i2c_stop(obj);
+    i2c_stop(obj);    // Actual stop bit
 
     return bytes_read;
 }
 
-int i2c_write(i2c_t *obj, int address, const char *data, int length, int stop) {
-		int ack=0;
-		int sadr;
-		switch ((int)obj->i2c) {
-			case I2C_0: sadr = TSC_I2C_ADDR; break;
-      case I2C_1: sadr = AAIC_I2C_ADDR; break;
-		}
-		for(int i = 1; i<=length; i++)
-		{
-			i2c_start(obj);
-		
-			// Set serial and register address
-			i2c_send_byte(obj,sadr);
-			ack += i2c_receive_ack(obj);
-			i2c_send_byte(obj, address);
-			ack += i2c_receive_ack(obj);
-			i2c_send_byte(obj, *data);
-			ack += i2c_receive_ack(obj);
-		}
+int i2c_write(i2c_t *obj, int address, const char *data, int length, int stop)
+{
+    int ack=0;
+    int sadr;
+    char * ptr;
+    char addr;
+    ptr = (char*)data;
+    switch ((int)obj->i2c)
+    {
+        case I2C_0: 
+            sadr = TSC_I2C_ADDR;
+            addr = address;
+            break;
+        case I2C_1: 
+            sadr = AAIC_I2C_ADDR; 
+            addr = address;
+            break;
+        case I2C_2: 
+        case I2C_3: 
+            sadr = address; //LM75_I2C_ADDR or MMA7660_I2C_ADDR;
+            addr = *ptr++;
+            break;
+     }
+    
+//    printf("adr = %x, reg = %x\n",sadr, address);
+    i2c_start(obj);
 
-		i2c_stop(obj);
-		if(ack==3) { return 1; }
-		else{ return 0; }
+    // Set serial and register address
+    i2c_send_byte(obj,sadr);
+    ack += i2c_receive_ack(obj);
+    i2c_send_byte(obj, addr);
+    ack += i2c_receive_ack(obj);
+
+    for(int i = 1; i<length; i++)
+    {
+        i2c_send_byte(obj, *ptr++);
+        ack += i2c_receive_ack(obj);
+    }
+
+    i2c_stop(obj);
+    if(ack==3) { return 1; }
+    else{ return 0; }
 
 }
 
@@ -394,22 +531,3 @@
 int i2c_byte_write(i2c_t *obj, int data) {
     return 0;
 }
-
-void i2c_slave_mode(i2c_t *obj, int enable_slave) {
-}
-
-int i2c_slave_receive(i2c_t *obj) {
-	return 0;
-}
-
-int i2c_slave_read(i2c_t *obj, char *data, int length) {
-	return 0;
-}
-
-int i2c_slave_write(i2c_t *obj, const char *data, int length) {
-	return 0;
-}
-
-void i2c_slave_address(i2c_t *obj, int idx, uint32_t address, uint32_t mask) {
-}
-
--- a/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/objects.h	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/objects.h	Wed Mar 02 14:30:11 2016 +0000
@@ -31,7 +31,7 @@
 
 struct port_s {
     __IO uint32_t *reg_dir;
-		__IO uint32_t *reg_dirclr;
+        __IO uint32_t *reg_dirclr;
     __IO uint32_t *reg_out;
     __IO  uint32_t *reg_in;
     PortName port;
@@ -53,7 +53,7 @@
 
 struct audio_s {
     MPS2_I2S_TypeDef *audio_I2S;
-		MPS2_I2C_TypeDef *audio_I2C;
+        MPS2_I2C_TypeDef *audio_I2C;
 };
 
 
@@ -65,6 +65,14 @@
     MPS2_SSP_TypeDef *clcd;
 };
 
+struct analogin_s {
+    ADCName adc;
+        MPS2_SSP_TypeDef *adc_spi;
+    PinName  pin;
+        uint32_t pin_number;
+    __IO uint32_t address;
+};
+
 #include "gpio_object.h"
 
 #ifdef __cplusplus
--- a/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/pinmap.c	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/pinmap.c	Wed Mar 02 14:30:11 2016 +0000
@@ -19,10 +19,10 @@
 
 
 void pin_function(PinName pin, int function) {
-	    MBED_ASSERT(pin != (PinName)NC);
+        MBED_ASSERT(pin != (PinName)NC);
 
 }
 
 void pin_mode(PinName pin, PinMode mode) {
-	    MBED_ASSERT(pin != (PinName)NC);
+        MBED_ASSERT(pin != (PinName)NC);
 }
--- a/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/serial_api.c	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/serial_api.c	Wed Mar 02 14:30:11 2016 +0000
@@ -30,18 +30,22 @@
  ******************************************************************************/
 
 static const PinMap PinMap_UART_TX[] = {
-    {USBTX	 , UART_0, 0},
-    {UART_TX1, UART_1, 0},
+    {USBTX     , UART_0, 0},
+    {XB_TX   , UART_1, 0},
+    {SH0_TX  , UART_2, 0},
+    {SH1_TX  , UART_3, 0},
     {NC      , NC    , 0}
 };
 
 static const PinMap PinMap_UART_RX[] = {
-    {USBRX	 , UART_0, 0},
-    {UART_RX1, UART_1, 0},
-    {NC , NC      , 0}
+    {USBRX     , UART_0, 0},
+    {XB_RX   , UART_1, 0},
+    {SH0_RX  , UART_2, 0},
+    {SH1_RX  , UART_3, 0},
+    {NC      , NC    , 0}
 };
 
-#define UART_NUM    3
+#define UART_NUM    4
 
 static uart_irq_handler irq_handler;
 
@@ -69,13 +73,73 @@
     
     obj->uart = (CMSDK_UART_TypeDef *)uart;
     //set baud rate and enable Uart in normarl mode (RX and TX enabled)
-    switch (uart) {
-        case UART_0: 	CMSDK_UART0->CTRL = 0;         // Disable UART when changing configuration 
-											CMSDK_UART0->CTRL    = 0x3;  // Normal mode 
-											break;
-        case UART_1: 	CMSDK_UART1->CTRL = 0;         // Disable UART when changing configuration 
-											CMSDK_UART1->CTRL    = 0x3;  // Normal mode 
-											break;
+    switch (uart)
+    {
+        case UART_0:
+        {
+          CMSDK_UART0->CTRL = 0x00;    // Disable UART when changing configuration
+          if((int)uart_tx != NC)
+          {
+            CMSDK_UART0->CTRL |= 0x01;  // TX enable 
+          } else {
+            CMSDK_UART0->CTRL &= 0xFFFE;  // TX disable
+          } 
+          
+          
+          if((int)uart_rx != NC)
+          {
+            CMSDK_UART0->CTRL |= 0x02;  // RX enable  
+          } else {
+            CMSDK_UART0->CTRL &= 0xFFFD;  // RX disable
+          } 
+
+        }
+        break;
+        case UART_1:     //XBEE SOCKET UART
+                {
+          CMSDK_UART1->CTRL = 0x00;    // Disable UART when changing configuration
+          if((int)tx != NC)
+          {
+            CMSDK_UART1->CTRL = 0x1;   // TX enable 
+             CMSDK_GPIO1->ALTFUNCSET |= 0x0100;
+          }
+          if((int)rx != NC)
+          {
+            CMSDK_UART1->CTRL |= 0x2;  // RX enable
+            CMSDK_GPIO1->ALTFUNCSET |= 0x0080;
+          } 
+        }
+        break;
+        case UART_2:     //Sheild0 UART
+        {     
+          CMSDK_UART3->CTRL = 0x00;    // Disable UART when changing configuration
+          if((int)tx != NC)
+          {
+            CMSDK_UART3->CTRL = 0x1;   // TX enable 
+            CMSDK_GPIO0->ALTFUNCSET |= 0x0010;
+          }
+          if((int)rx != NC)
+          {
+            CMSDK_UART3->CTRL |= 0x2;  // RX enable 
+            CMSDK_GPIO0->ALTFUNCSET |= 0x0001;
+          }
+        } 
+        break;
+        case UART_3:     //Sheild1 UART
+        {
+          CMSDK_UART4->CTRL = 0x00;    // Disable UART when changing configuration
+          if((int)tx != NC)
+          {
+            CMSDK_UART4->CTRL = 0x1;   // TX enable 
+             CMSDK_GPIO1->ALTFUNCSET |= 0x4000;
+          }
+          if((int)rx != NC)
+          {
+            CMSDK_UART4->CTRL |= 0x2;  // RX enable 
+            CMSDK_GPIO1->ALTFUNCSET |= 0x0400;
+          }
+        }
+        break;
     }
 
     // set default baud rate and format
@@ -88,6 +152,8 @@
     switch (uart) {
         case UART_0: obj->index = 0; break;
         case UART_1: obj->index = 1; break;
+        case UART_2: obj->index = 2; break;
+        case UART_3: obj->index = 3; break;
     }
     uart_data[obj->index].sw_rts.pin = NC;
     uart_data[obj->index].sw_cts.pin = NC;
@@ -102,6 +168,7 @@
 }
 
 void serial_free(serial_t *obj) {
+      uart_data[obj->index].serial_irq_id = 0;
 }
 
 // serial_baud
@@ -110,24 +177,26 @@
     // The MPS2 has a simple divider to control the baud rate. The formula is:
     //
     // Baudrate = PCLK / BAUDDIV
-		//
-		// PCLK = 25 Mhz
-		// so for a desired baud rate of 9600 
-		//  25000000 / 9600 = 2604
+        //
+        // PCLK = 25 Mhz
+        // so for a desired baud rate of 9600
+        //  25000000 / 9600 = 2604
     //
-	//check to see if minimum baud value entered
-	int baudrate_div = 0;
-	baudrate_div = 25000000 / baudrate;
-	if(baudrate >= 16){
+    //check to see if minimum baud value entered
+    int baudrate_div = 0;
+    baudrate_div = SystemCoreClock / baudrate;
+    if(baudrate >= 16){
     switch ((int)obj->uart) {
         case UART_0: CMSDK_UART0->BAUDDIV = baudrate_div; break;
         case UART_1: CMSDK_UART1->BAUDDIV = baudrate_div; break;
+        case UART_2: CMSDK_UART3->BAUDDIV = baudrate_div; break;
+        case UART_3: CMSDK_UART4->BAUDDIV = baudrate_div; break;
         default: error("serial_baud"); break;
     }
-	} else {
-		error("serial_baud");
-	}
-    
+    } else {
+        error("serial_baud");
+    }
+
 }
 
 void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_bits) {
@@ -138,24 +207,58 @@
  ******************************************************************************/
 static inline void uart_irq(uint32_t intstatus, uint32_t index, CMSDK_UART_TypeDef *puart) {
     SerialIrq irq_type;
-    switch (intstatus) {
-        case 1: irq_type = TxIrq; break;
-        case 2: irq_type = RxIrq; break;
+    switch (intstatus)
+    {
+        case 1:
+        {
+            irq_type = TxIrq;
+        }
+        break;
+
+        case 2:
+        {
+            irq_type = RxIrq;
+        }
+        break;
+
         default: return;
-    }
-    if ((RxIrq == irq_type) && (NC != uart_data[index].sw_rts.pin)) {
+    }   /* End of Switch */
+
+    if ((RxIrq == irq_type) && (NC != uart_data[index].sw_rts.pin)) 
+    {
         gpio_write(&uart_data[index].sw_rts, 1);
         // Disable interrupt if it wasn't enabled by other part of the application
         if (!uart_data[index].rx_irq_set_api)
-            puart->CTRL &= ~(1 << RxIrq);
+        {
+            /* Disable Rx interrupt */
+            puart->CTRL &= ~(CMSDK_UART_CTRL_RXIRQEN_Msk);
+        }
     }
+
     if (uart_data[index].serial_irq_id != 0)
+    {
         if ((irq_type != RxIrq) || (uart_data[index].rx_irq_set_api))
+        {
             irq_handler(uart_data[index].serial_irq_id, irq_type);
+        }
+    }
+
+    if( irq_type == TxIrq )
+    {
+        /* Clear the TX interrupt Flag */
+        puart->INTCLEAR |= 0x01;
+    }
+    else
+    {
+        /* Clear the Rx interupt Flag */
+        puart->INTCLEAR |= 0x02;
+    }
 }
 
 void uart0_irq() {uart_irq(CMSDK_UART0->INTSTATUS & 0x3, 0, (CMSDK_UART_TypeDef*)CMSDK_UART0);}
 void uart1_irq() {uart_irq(CMSDK_UART1->INTSTATUS & 0x3, 1, (CMSDK_UART_TypeDef*)CMSDK_UART1);}
+void uart2_irq() {uart_irq(CMSDK_UART3->INTSTATUS & 0x3, 2, (CMSDK_UART_TypeDef*)CMSDK_UART3);}
+void uart3_irq() {uart_irq(CMSDK_UART4->INTSTATUS & 0x3, 3, (CMSDK_UART_TypeDef*)CMSDK_UART4);}
 
 void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id) {
     irq_handler = handler;
@@ -163,30 +266,66 @@
 }
 
 static void serial_irq_set_internal(serial_t *obj, SerialIrq irq, uint32_t enable) {
+    /* Declare a variable of type IRQn, initialise to 0  */
     IRQn_Type irq_n = (IRQn_Type)0;
     uint32_t vector = 0;
-    switch ((int)obj->uart) {
-		case UART_0: irq_n=((irq>> 2) ? UARTRX0_IRQn : UARTTX0_IRQn); vector = (uint32_t)&uart0_irq; break;
-		case UART_1: irq_n=((irq>> 2) ? UARTRX1_IRQn : UARTTX1_IRQn); vector = (uint32_t)&uart1_irq; break;
+    switch ((int)obj->uart)
+        {
+            case UART_0:
+            {
+                irq_n   = (( irq == TxIrq ) ?  UARTTX0_IRQn : UARTRX0_IRQn);
+                vector  = (uint32_t)&uart0_irq;
+            }
+            break;
+
+            case UART_1:
+            {
+                irq_n   = (( irq == TxIrq ) ?  UARTTX1_IRQn : UARTRX1_IRQn);
+                vector  = (uint32_t)&uart1_irq;
+            }
+            break;
+            case UART_2:
+            {
+                irq_n   = (( irq == TxIrq ) ?  UARTTX3_IRQn : UARTRX3_IRQn);
+                vector  = (uint32_t)&uart2_irq;
+            }
+            break;
+            case UART_3:
+            {
+                irq_n   = (( irq == TxIrq ) ?  UARTTX4_IRQn : UARTRX4_IRQn);
+            vector  = (uint32_t)&uart3_irq;
+            }
+            break;
     }
-    
-    if (enable) {
-        obj->uart->CTRL |= 1 << irq;
+
+    if (enable)
+    {
+        if( irq == TxIrq )
+        {
+            /* Transmit IRQ, set appripriate enable */
+
+            /* set TX interrupt enable in CTRL REG */
+            obj->uart->CTRL |= CMSDK_UART_CTRL_TXIRQEN_Msk;
+        }
+        else
+        {
+            /* set Rx interrupt on in CTRL REG */
+            obj->uart->CTRL |= CMSDK_UART_CTRL_RXIRQEN_Msk;
+        }
         NVIC_SetVector(irq_n, vector);
         NVIC_EnableIRQ(irq_n);
-    } else if ((TxIrq == irq) || (uart_data[obj->index].rx_irq_set_api + uart_data[obj->index].rx_irq_set_flow == 0)) { // disable
-        int all_disabled = 0;
-        SerialIrq other_irq = (irq == RxIrq) ? (TxIrq) : (RxIrq);
-        obj->uart->CTRL &= ~(1 << irq);
-        all_disabled = (obj->uart->CTRL & (1 << other_irq)) == 0;
-        if (all_disabled)
+
+    }
+    else 
+    {   /*      Disable   IRQ   */
+        
+        obj->uart->CTRL &= ~(1 << (irq + 2));
+
             NVIC_DisableIRQ(irq_n);
     }
 }
 
 void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) {
-    if (RxIrq == irq)
-        uart_data[obj->index].rx_irq_set_api = enable;
     serial_irq_set_internal(obj, irq, enable);
 }
 
@@ -205,11 +344,11 @@
 }
 
 int serial_readable(serial_t *obj) {
-    return obj->uart->STATE & 2;
+    return obj->uart->STATE & 0x2;
 }
 
 int serial_writable(serial_t *obj) {
-		return obj->uart->STATE & 1;
+    return obj->uart->STATE & 0x1;
 }
 
 void serial_clear(serial_t *obj) {
--- a/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/spi_api.c	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/spi_api.c	Wed Mar 02 14:30:11 2016 +0000
@@ -25,24 +25,36 @@
 static const PinMap PinMap_SPI_SCLK[] = {
     {SCLK_SPI , SPI_0, 0},
     {CLCD_SCLK , SPI_1, 0},
+    {ADC_SCLK , SPI_2, 0},
+    {SHIELD_0_SPI_SCK , SPI_3, 0},
+    {SHIELD_1_SPI_SCK , SPI_4, 0},
     {NC   , NC   , 0}
 };
 
 static const PinMap PinMap_SPI_MOSI[] = {
     {MOSI_SPI, SPI_0, 0},
     {CLCD_MOSI, SPI_1, 0},
+    {ADC_MOSI, SPI_2, 0},
+    {SHIELD_0_SPI_MOSI, SPI_3, 0},
+    {SHIELD_1_SPI_MOSI, SPI_4, 0},
     {NC   , NC   , 0}
 };
 
 static const PinMap PinMap_SPI_MISO[] = {
     {MISO_SPI, SPI_0, 0},
     {CLCD_MISO, SPI_1, 0},
+    {ADC_MISO, SPI_2, 0},
+    {SHIELD_0_SPI_MISO, SPI_3, 0},
+    {SHIELD_1_SPI_MISO, SPI_4, 0},
     {NC   , NC   , 0}
 };
 
 static const PinMap PinMap_SPI_SSEL[] = {
     {SSEL_SPI, SPI_0, 0},
     {CLCD_SSEL, SPI_1, 0},
+    {ADC_SSEL, SPI_2, 0},
+    {SHIELD_0_SPI_nCS, SPI_3, 0},
+    {SHIELD_1_SPI_nCS, SPI_4, 0},
     {NC   , NC   , 0}
 };
 
@@ -50,7 +62,9 @@
 static inline int ssp_enable(spi_t *obj);
 
 void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel) {
-    // determine the SPI to use
+    
+        int altfunction[4];
+        // determine the SPI to use
     SPIName spi_mosi = (SPIName)pinmap_peripheral(mosi, PinMap_SPI_MOSI);
     SPIName spi_miso = (SPIName)pinmap_peripheral(miso, PinMap_SPI_MISO);
     SPIName spi_sclk = (SPIName)pinmap_peripheral(sclk, PinMap_SPI_SCLK);
@@ -64,33 +78,78 @@
     
     // enable power and clocking
     switch ((int)obj->spi) {
-        case (int)SPI_0: 
-			obj->spi->CR1   	= 0;
-			obj->spi->CR0   	= SSP_CR0_SCR_DFLT | SSP_CR0_FRF_MOT | SSP_CR0_DSS_8;
-			obj->spi->CPSR  	= SSP_CPSR_DFLT; 
-			obj->spi->IMSC  	= 0x8; 
-			obj->spi->DMACR 	= 0;
-			obj->spi->CR1   	= SSP_CR1_SSE_Msk;
-			obj->spi->ICR   	= 0x3;  
-			break;
+      case (int)SPI_0: 
+            obj->spi->CR1       = 0;
+            obj->spi->CR0       = SSP_CR0_SCR_DFLT | SSP_CR0_FRF_MOT | SSP_CR0_DSS_8;
+            obj->spi->CPSR      = SSP_CPSR_DFLT; 
+            obj->spi->IMSC      = 0x8; 
+            obj->spi->DMACR     = 0;
+            obj->spi->CR1       = SSP_CR1_SSE_Msk;
+            obj->spi->ICR       = 0x3;  
+            break;
       case (int)SPI_1:
-					  /* Configure SSP used for LCD                                               */
-			obj->spi->CR1   =   0;                 /* Synchronous serial port disable  */
-			obj->spi->DMACR =   0;                 /* Disable FIFO DMA                 */
-			obj->spi->IMSC  =   0;                 /* Mask all FIFO/IRQ interrupts     */
-			obj->spi->ICR   = ((1ul <<  0) |       /* Clear SSPRORINTR interrupt       */
-								(1ul <<  1) );      /* Clear SSPRTINTR interrupt        */
-          	obj->spi->CR0   = ((7ul <<  0) |       /* 8 bit data size                  */
-								(0ul <<  4) |       /* Motorola frame format            */
-								(0ul <<  6) |       /* CPOL = 0                         */
-								(0ul <<  7) |       /* CPHA = 0                         */
-								(1ul <<  8) );      /* Set serial clock rate            */
-			obj->spi->CPSR  =  (2ul <<  0);        /* set SSP clk to 6MHz (6.6MHz max) */
-			obj->spi->CR1   = ((1ul <<  1) |       /* Synchronous serial port enable   */
-								(0ul <<  2) );      /* Device configured as master      */
-			break;
+                      /* Configure SSP used for LCD                                               */
+            obj->spi->CR1   =   0;                 /* Synchronous serial port disable  */
+            obj->spi->DMACR =   0;                 /* Disable FIFO DMA                 */
+            obj->spi->IMSC  =   0;                 /* Mask all FIFO/IRQ interrupts     */
+            obj->spi->ICR   = ((1ul <<  0) |       /* Clear SSPRORINTR interrupt       */
+                                (1ul <<  1) );      /* Clear SSPRTINTR interrupt        */
+              obj->spi->CR0   = ((7ul <<  0) |       /* 8 bit data size                  */
+                                (0ul <<  4) |       /* Motorola frame format            */
+                                (0ul <<  6) |       /* CPOL = 0                         */
+                                (0ul <<  7) |       /* CPHA = 0                         */
+                                (1ul <<  8) );      /* Set serial clock rate            */
+            obj->spi->CPSR  =  (2ul <<  0);        /* set SSP clk to 6MHz (6.6MHz max) */
+            obj->spi->CR1   = ((1ul <<  1) |       /* Synchronous serial port enable   */
+                                (0ul <<  2) );      /* Device configured as master      */
+            break;
+      case (int)SPI_2: 
+            obj->spi->CR1       = 0;
+            obj->spi->CR0       = SSP_CR0_SCR_DFLT | SSP_CR0_FRF_MOT | SSP_CR0_DSS_8;
+            obj->spi->CPSR      = SSP_CPSR_DFLT; 
+            obj->spi->IMSC      = 0x8; 
+            obj->spi->DMACR     = 0;
+            obj->spi->CR1       = SSP_CR1_SSE_Msk;
+            obj->spi->ICR       = 0x3;  
+            break;
+      case (int)SPI_3: 
+            obj->spi->CR1       = 0;
+            obj->spi->CR0       = SSP_CR0_SCR_DFLT | SSP_CR0_FRF_MOT | SSP_CR0_DSS_8;
+            obj->spi->CPSR      = SSP_CPSR_DFLT; 
+            obj->spi->IMSC      = 0x8; 
+            obj->spi->DMACR     = 0;
+            obj->spi->CR1       = SSP_CR1_SSE_Msk;
+            obj->spi->ICR       = 0x3;  
+            break;
+      case (int)SPI_4: 
+            obj->spi->CR1       = 0;
+            obj->spi->CR0       = SSP_CR0_SCR_DFLT | SSP_CR0_FRF_MOT | SSP_CR0_DSS_8;
+            obj->spi->CPSR      = SSP_CPSR_DFLT; 
+            obj->spi->IMSC      = 0x8; 
+            obj->spi->DMACR     = 0;
+            obj->spi->CR1       = SSP_CR1_SSE_Msk;
+            obj->spi->ICR       = 0x3;  
+            break;
     }
     
+        if(mosi != NC){ altfunction[0] = 1;}else{ altfunction[0] = 0;}
+        if(miso != NC){ altfunction[1] = 1;}else{ altfunction[1] = 0;}
+        if(sclk != NC){ altfunction[2] = 1;}else{ altfunction[2] = 0;}
+        if(ssel != NC){ altfunction[3] = 1;}else{ altfunction[3] = 0;}
+        
+    // enable alt function
+    switch ((int)obj->spi) {
+      case (int)SPI_2:
+                CMSDK_GPIO1->ALTFUNCSET |= (altfunction[2]<<3 | altfunction[0]<<2 | altfunction[1]<<1 | altfunction[3]);
+            break;
+      case (int)SPI_3:
+                CMSDK_GPIO0->ALTFUNCSET |= (altfunction[1]<<14 | altfunction[0]<<13 | altfunction[3]<<12 | altfunction[2]<<11);
+            break;
+      case (int)SPI_4:
+                CMSDK_GPIO2->ALTFUNCSET |= (altfunction[2]<<12 | altfunction[1]<<8 | altfunction[0]<<7 | altfunction[3]<<6);
+            break;
+        }
+        
     // set default format and frequency
     if (ssel == NC) {
         spi_format(obj, 8, 0, 0);  // 8 bits, mode 0, master
@@ -151,7 +210,7 @@
    
     uint32_t PCLK = SystemCoreClock;
     
-	    int prescaler;
+        int prescaler;
     
     for (prescaler = 2; prescaler <= 254; prescaler += 2) {
         int prescale_hz = PCLK / prescaler;
@@ -195,7 +254,7 @@
     while (ssp_writeable(obj));
 }
 static inline int ssp_read(spi_t *obj) {
-	int read_DR = obj->spi->DR;
+    int read_DR = obj->spi->DR;
     return read_DR;
 }
 
@@ -205,7 +264,7 @@
 
 int spi_master_write(spi_t *obj, int value) {
     ssp_write(obj, value);
-    while (MPS2_SSP0->SR & SSP_SR_BSY_Msk);  /* Wait for send to finish      */
+    while (obj->spi->SR & SSP_SR_BSY_Msk);  /* Wait for send to finish      */
     return (ssp_read(obj));
 }
 
--- a/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/us_ticker.c	Wed Mar 02 10:15:13 2016 +0000
+++ b/targets/hal/TARGET_ARM_SSG/TARGET_MPS2/us_ticker.c	Wed Mar 02 14:30:11 2016 +0000
@@ -19,7 +19,7 @@
 
 #define US_TICKER_TIMER1      CMSDK_DUALTIMER1
 #define US_TICKER_TIMER2      CMSDK_DUALTIMER2
-#define US_TICKER_TIMER_IRQn DUALTIMER_IRQn
+#define US_TICKER_TIMER_IRQn  DUALTIMER_IRQn
 
 int us_ticker_inited = 0;
 
@@ -29,9 +29,9 @@
     
     US_TICKER_TIMER1->TimerControl = 0x0; // disable timer
     US_TICKER_TIMER2->TimerControl = 0x00; // disable timer
-	US_TICKER_TIMER1->TimerLoad = 0xFFFFFFFF;
-	US_TICKER_TIMER2->TimerLoad = 0xFFFFFFFF;
-	
+    US_TICKER_TIMER1->TimerLoad = 0xFFFFFFFF;
+    US_TICKER_TIMER2->TimerLoad = 0xFFFFFFFF;
+    
     US_TICKER_TIMER1->TimerControl = 0x62; // enable interrupt and set to 32 bit counter and set to periodic mode
     US_TICKER_TIMER2->TimerControl = 0x42; // enable interrupt and set to 32 bit counter
     
@@ -47,11 +47,10 @@
     if (!us_ticker_inited)
         us_ticker_init();
     return_value = ((~US_TICKER_TIMER2->TimerValue)/25);
-	return return_value;
+    return return_value;
 }
 
 void us_ticker_set_interrupt(timestamp_t timestamp) {
-uint32_t timer_value = 0;
 int delta = 0;
     if (!us_ticker_inited)
         us_ticker_init();
@@ -61,24 +60,23 @@
         us_ticker_irq_handler();
         return;
     }
-		timer_value = (delta)*25;
-		// enable interrupt
+        // enable interrupt
     US_TICKER_TIMER1->TimerControl = 0x0; // disable timer
     US_TICKER_TIMER1->TimerControl = 0x62; // enable interrupt and set to 32 bit counter and set to periodic mode
-	US_TICKER_TIMER1->TimerLoad = (delta)*25; //initialise the timer value
-	US_TICKER_TIMER1->TimerControl |= 0x80; //enable timer
+    US_TICKER_TIMER1->TimerLoad = (delta)*25; //initialise the timer value
+    US_TICKER_TIMER1->TimerControl |= 0x80; //enable timer
 }
 
 void us_ticker_disable_interrupt(void) {
     
-	US_TICKER_TIMER1->TimerControl &= 0xDF;
-	US_TICKER_TIMER2->TimerControl &= 0xDF;
+    US_TICKER_TIMER1->TimerControl &= 0xDF;
+    US_TICKER_TIMER2->TimerControl &= 0xDF;
 
 }
 
 void us_ticker_clear_interrupt(void) {
 
-	US_TICKER_TIMER1->TimerIntClr = 0x1;
-	US_TICKER_TIMER2->TimerIntClr = 0x1;
+    US_TICKER_TIMER1->TimerIntClr = 0x1;
+    US_TICKER_TIMER2->TimerIntClr = 0x1;
 
 }