mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Files at this revision

API Documentation at this revision

Comitter:
mbed_official
Date:
Fri Sep 04 09:30:10 2015 +0100
Parent:
618:484341a108bc
Child:
620:49241b7c6da5
Commit message:
Synchronized with git revision 92d1bfad30082571776c810a56fd471d30514ccf

Full URL: https://github.com/mbedmicro/mbed/commit/92d1bfad30082571776c810a56fd471d30514ccf/

Change directory structure and move files.

Changed in this revision

targets/cmsis/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/W7500x.h Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/cmsis.h Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/cmsis_nvic.c Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/cmsis_nvic.h Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/system_W7500x.c Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/system_W7500x.h Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_adc.c Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_adc.h Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_conf.h Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_crg.c Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_crg.h Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.c Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.h Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_exti.c Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_exti.h Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_gpio.c Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_gpio.h Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_i2c.c Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_i2c.h Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_pwm.c Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_pwm.h Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_uart.c Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_uart.h Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/cmsis.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/cmsis_nvic.c Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/cmsis_nvic.h Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/system_W7500x.c Show annotated file Show diff for this revision Revisions of this file
targets/cmsis/TARGET_WIZNET/TARGET_W7500x/system_W7500x.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/PeripheralNames.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/PortNames.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/PeripheralNames.h Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/PeripheralPins.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/PortNames.h Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/device.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/objects.h Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_adc.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_adc.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_conf.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_crg.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_crg.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_dualtimer.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_dualtimer.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_exti.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_exti.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_gpio.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_gpio.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_i2c.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_i2c.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_pwm.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_pwm.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_uart.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_uart.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/analogin_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/gpio_irq_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/gpio_object.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/i2c_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/objects.h Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/pinmap.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/pwmout_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/rtc_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/serial_api.c Show annotated file Show diff for this revision Revisions of this file
targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c Show annotated file Show diff for this revision Revisions of this file
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/W7500x.h	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1168 +0,0 @@
-/**************************************************************************//**
- * @file     W7500x.h
- * @brief    CMSIS Cortex-M0 Core Peripheral Access Layer Header File for
- *           Device W7500x
- * @version  V3.01
- * @date     06. March 2012
- *
- * @note
- * Copyright (C) 2010-2012 ARM Limited. All rights reserved.
- *
- * @par
- * ARM Limited (ARM) is supplying this software for use with Cortex-M
- * processor based microcontrollers.  This file can be freely distributed
- * within development tools that are supporting such ARM based processors.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED
- * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
- * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
- * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
- *
- ******************************************************************************/
-
-
-#ifndef W7500x_H
-#define W7500x_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/** @addtogroup W7500x_Definitions W7500x Definitions
-  This file defines all structures and symbols for W7500x:
-    - registers and bitfields
-    - peripheral base address
-    - peripheral ID
-    - Peripheral definitions
-  @{
-*/
-
-
-/******************************************************************************/
-/*                Processor and Core Peripherals                              */
-/******************************************************************************/
-/** @addtogroup W7500x_CMSIS Device CMSIS Definitions
-  Configuration of the Cortex-M0 Processor and Core Peripherals
-  @{
-*/
-
-/*
- * ==========================================================================
- * ---------- Interrupt Number Definition -----------------------------------
- * ==========================================================================
- */
-
-typedef enum IRQn
-{
-/******  Cortex-M0 Processor Exceptions Numbers **************************************************/
-
-/* 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               */
-/******  W7500x Specific Interrupt Numbers *********************************************************/
-  SSP0_IRQn                    = 0,        /*!< SSP 0 Interrupt                                   */ 
-  SSP1_IRQn                    = 1,        /*!< SSP 1 Interrupt                                   */ 
-  UART0_IRQn                   = 2,        /*!< UART 0 Interrupt                                  */
-  UART1_IRQn                   = 3,        /*!< UART 1 Interrupt                                  */
-  UART2_IRQn                   = 4,        /*!< UART 2 Interrupt                                  */
-  I2C0_IRQn                    = 5,        /*!< I2C 0 Interrupt                                   */ 
-  I2C1_IRQn                    = 6,        /*!< I2C 1 Interrupt                                   */ 
-  PORT0_IRQn                   = 7,        /*!< Port 1 combined Interrupt                         */  
-  PORT1_IRQn                   = 8,        /*!< Port 2 combined Interrupt                         */  
-  PORT2_IRQn                   = 9,        /*!< Port 2 combined Interrupt                         */  
-  PORT3_IRQn                   = 10,       /*!< Port 2 combined Interrupt                         */  
-  DMA_IRQn                     = 11,       /*!< DMA combined Interrupt                            */   
-  DUALTIMER0_IRQn              = 12,       /*!< Dual Timer 0 Interrupt                            */
-  DUALTIMER1_IRQn              = 13,       /*!< Dual Timer 1 Interrupt                            */
-  PWM0_IRQn                    = 14,       /*!< PWM 0 Interrupt                                   */ 
-  PWM1_IRQn                    = 15,       /*!< PWM 1 Interrupt                                   */ 
-  PWM2_IRQn                    = 16,       /*!< PWM 2 Interrupt                                   */ 
-  PWM3_IRQn                    = 17,       /*!< PWM 3 Interrupt                                   */ 
-  PWM4_IRQn                    = 18,       /*!< PWM 4 Interrupt                                   */ 
-  PWM5_IRQn                    = 19,       /*!< PWM 5 Interrupt                                   */ 
-  PWM6_IRQn                    = 20,       /*!< PWM 6 Interrupt                                   */ 
-  PWM7_IRQn                    = 21,       /*!< PWM 7 Interrupt                                   */ 
-  RTC_IRQn                     = 22,       /*!< RTC Interrupt                                     */ 
-  ADC_IRQn                     = 23,       /*!< ADC Interrupt                                     */ 
-  WZTOE_IRQn                   = 24,       /*!< WZTOE Interrupt                                   */       
-  EXTI_IRQn                    = 25        /*!< EXTI Interrupt                                   */       
-} IRQn_Type;
-
-/*
- * ==========================================================================
- * ----------- Processor and Core Peripheral Section ------------------------
- * ==========================================================================
- */
-
-/* Configuration of the Cortex-M0 Processor and Core Peripherals */
-#define __CM0_REV                 0x0000    /*!< Core Revision r0p0                               */
-#define __NVIC_PRIO_BITS          2         /*!< Number of Bits used for Priority Levels          */
-#define __Vendor_SysTickConfig    0         /*!< Set to 1 if different SysTick Config is used     */
-#define __MPU_PRESENT             0         /*!< MPU present or not                               */
-
-/*@}*/ /* end of group W7500x_CMSIS */
-
-
-#include "core_cm0.h"                    /* Cortex-M0 processor and core peripherals           */
-#include "system_W7500x.h"               /* W7500x System include file                          */
-
-
-/** @addtogroup Exported_types
-  * @{
-  */  
-
-typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;
-typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
-#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))
-
-typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;
-
-
-
-
-
-/**
-  * @}
-  */
-
-
-
-
-/** @addtogroup Peripheral_registers_structures
-  * @{
-  */   
-
-/**
-  * @brief Clock Reset Generator
-  */
-typedef struct
-{
-  __IO  uint32_t  OSC_PDR;            /*!< Oscillator power down register,               Address offset : 0x00 */
-        uint32_t  RESERVED0[3];
-  __IO  uint32_t  PLL_PDR;            /*!< PLL power down register,                      Address offset : 0x10 */
-  __IO  uint32_t  PLL_FCR;            /*!< PLL frequency calculating register,           Address offset : 0x14 */
-  __IO  uint32_t  PLL_OER;            /*!< PLL output enable register,                   Address offset : 0x18 */
-  __IO  uint32_t  PLL_BPR;            /*!< PLL bypass register,                          Address offset : 0x1c */     
-  __IO  uint32_t  PLL_IFSR;           /*!< PLL input frequency select register,          Address offset : 0x20 */     
-        uint32_t  RESERVED1[3];
-  __IO  uint32_t  FCLK_SSR;           /*!< FCLK source select register,                  Address offset : 0x30 */     
-  __IO  uint32_t  FCLK_PVSR;          /*!< FCLK prescale value select register,          Address offset : 0x34 */     
-        uint32_t  RESERVED2[2];
-  __IO  uint32_t  SSPCLK_SSR;         /*!< SSPCLK source select register,                Address offset : 0x40 */     
-  __IO  uint32_t  SSPCLK_PVSR;        /*!< SSPCLK prescale value select register,        Address offset : 0x44 */     
-        uint32_t  RESERVED3[6];
-  __IO  uint32_t  ADCCLK_SSR;         /*!< ADCCLK source select register,                Address offset : 0x60 */     
-  __IO  uint32_t  ADCCLK_PVSR;        /*!< ADCCLK prescale value select register,        Address offset : 0x64 */     
-        uint32_t  RESERVED4[2];
-  __IO  uint32_t  TIMER0CLK_SSR;      /*!< TIMER0CLK source select register,             Address offset : 0x70 */     
-  __IO  uint32_t  TIMER0CLK_PVSR;     /*!< TIMER0CLK prescale value select register,     Address offset : 0x74 */     
-        uint32_t  RESERVED5[2];
-  __IO  uint32_t  TIMER1CLK_SSR;      /*!< TIMER1CLK source select register,             Address offset : 0x80 */     
-  __IO  uint32_t  TIMER1CLK_PVSR;     /*!< TIMER1CLK prescale value select register,     Address offset : 0x84 */     
-        uint32_t  RESERVED6[10];
-  __IO  uint32_t  PWM0CLK_SSR;        /*!< PWM0CLK source select register,               Address offset : 0xb0 */     
-  __IO  uint32_t  PWM0CLK_PVSR;       /*!< PWM0CLK prescale value select register,       Address offset : 0xb4 */     
-        uint32_t  RESERVED7[2];
-  __IO  uint32_t  PWM1CLK_SSR;        /*!< PWM1CLK source select register,               Address offset : 0xc0 */     
-  __IO  uint32_t  PWM1CLK_PVSR;       /*!< PWM1CLK prescale value select register,       Address offset : 0xc4 */     
-        uint32_t  RESERVED8[2];
-  __IO  uint32_t  PWM2CLK_SSR;        /*!< PWM2CLK source select register,               Address offset : 0xd0 */     
-  __IO  uint32_t  PWM2CLK_PVSR;       /*!< PWM2CLK prescale value select register,       Address offset : 0xd4 */     
-        uint32_t  RESERVED9[2];
-  __IO  uint32_t  PWM3CLK_SSR;        /*!< PWM3CLK source select register,               Address offset : 0xe0 */     
-  __IO  uint32_t  PWM3CLK_PVSR;       /*!< PWM3CLK prescale value select register,       Address offset : 0xe4 */     
-        uint32_t  RESERVED10[2];
-  __IO  uint32_t  PWM4CLK_SSR;        /*!< PWM4CLK source select register,               Address offset : 0xf0 */     
-  __IO  uint32_t  PWM4CLK_PVSR;       /*!< PWM4CLK prescale value select register,       Address offset : 0xf4 */     
-        uint32_t  RESERVED11[2];
-  __IO  uint32_t  PWM5CLK_SSR;        /*!< PWM5CLK source select register,               Address offset : 0x100 */     
-  __IO  uint32_t  PWM5LK_PVSR;        /*!< PWM5CLK prescale value select register,       Address offset : 0x104 */     
-        uint32_t  RESERVED12[2];
-  __IO  uint32_t  PWM6CLK_SSR;        /*!< PWM6CLK source select register,               Address offset : 0x110 */     
-  __IO  uint32_t  PWM6CLK_PVSR;       /*!< PWM6CLK prescale value select register,       Address offset : 0x114 */     
-        uint32_t  RESERVED13[2];
-  __IO  uint32_t  PWM7CLK_SSR;        /*!< PWM7CLK source select register,               Address offset : 0x120 */     
-  __IO  uint32_t  PWM7CLK_PVSR;       /*!< PWM7CLK prescale value select register,       Address offset : 0x124 */     
-        uint32_t  RESERVED14[2];
-  __IO  uint32_t  RTC_HS_SSR;         /*!< RTC High Speed source select register,             Address offset : 0x130 */     
-  __IO  uint32_t  RTC_HS_PVSR;        /*!< RTC High Speed prescale value select register,     Address offset : 0x134 */     
-        uint32_t  RESERVED15;
-  __IO  uint32_t  RTC_SSR;            /*!< RTC source select register,                        Address offset : 0x13c */
-
-  __IO  uint32_t  WDOGCLK_HS_SSR;     /*!< WDOGCLK High Speed source select register,         Address offset : 0x140 */     
-  __IO  uint32_t  WDOGCLK_HS_PVSR;    /*!< WDOGCLK High Speed prescale value select register, Address offset : 0x144 */     
-        uint32_t  RESERVED16;
-  __IO  uint32_t  WDOGCLK_SSR;        /*!< WDOGCLK source select register,               Address offset : 0x14c */
-
-  __IO  uint32_t  UARTCLK_SSR;        /*!< UARTCLK source select register,               Address offset : 0x150 */     
-  __IO  uint32_t  UARTCLK_PVSR;       /*!< UARTCLK prescale value select register,       Address offset : 0x154 */     
-        uint32_t  RESERVED17[2];
-  __IO  uint32_t  MIICLK_ECR;         /*!< MII clock enable control register,            Address offset : 0x160 */     
-        uint32_t  RESERVED18[3];
-  __IO  uint32_t  MONCLK_SSR;         /*!< Monitoring clock source select I found Treasure was IoT Base Station in March.register,      Address offset : 0x170 */
-}CRG_TypeDef;
-
-
-/**
-  * @brief UART
-  */
-typedef struct
-{
-  __IO uint32_t DR;             /*!< Data,                              Address offset : 0x00 */
- union {
-  __I  uint32_t RSR;            /*!< Receive Status,                    Address offset : 0x04 */  
-  __O  uint32_t ECR;            /*!< Error Clear,                       Address offset : 0x04 */
-  } STATUS;
-       uint32_t RESERVED0[4];
-  __IO uint32_t FR;             /*!< Flags,                             Address offset : 0x18 */
-       uint32_t RESERVED1;
-  __IO uint32_t ILPR;           /*!< IrDA Low-power Counter,            Address offset : 0x20 */                              
-  __IO uint32_t IBRD;           /*!< Integer Baud Rate,                 Address offset : 0x24 */
-  __IO uint32_t FBRD;           /*!< Fractional Baud Rate,              Address offset : 0x28 */
-  __IO uint32_t LCR_H;          /*!< Line Control,                      Address offset : 0x2C */
-  __IO uint32_t CR;             /*!< Control,                           Address offset : 0x30 */
-  __IO uint32_t IFLS;           /*!< Interrupt FIFO Level Select,       Address offset : 0x34 */
-  __IO uint32_t IMSC;           /*!< Interrupt Mask Set / Clear,        Address offset : 0x38 */
-  __IO uint32_t RIS;            /*!< Raw Interrupt Status ,             Address offset : 0x3C */
-  __IO uint32_t MIS;            /*!< Masked Interrupt Status ,          Address offset : 0x40 */
-  __O  uint32_t ICR;            /*!< Interrupt Clear,                   Address offset : 0x44 */
-  __IO uint32_t DMACR;          /*!< DMA Control,                       Address offset : 0x48 */
-} UART_TypeDef;
-
-
-/**
-  * @brief Simple UART
-  */
-typedef struct
-{
-  __IO   uint32_t  DATA;          /*!< Offset: 0x000 Data Register    (R/W) */
-  __IO   uint32_t  STATE;         /*!< Offset: 0x004 Status Register  (R/W) */
-  __IO   uint32_t  CTRL;          /*!< Offset: 0x008 Control Register (R/W) */
-  union {
-    __I    uint32_t  STATUS;   /*!< Offset: 0x00C Interrupt Status Register (R/ ) */
-    __O    uint32_t  CLEAR;    /*!< Offset: 0x00C Interrupt Clear Register ( /W) */
-    }INT;
-  __IO   uint32_t  BAUDDIV;       /*!< Offset: 0x010 Baudrate Divider Register (R/W) */
-
-} S_UART_TypeDef;
-
-/**
-  * @brief Analog Digital Converter
-  */
-
-typedef struct
-{
-  __IO  uint32_t  ADC_CTR;          /* ADC control register,                    Address offset : 0x000 */
-  __IO  uint32_t  ADC_CHSEL;        /* ADC channel select register,             Address offset : 0x004 */
-  __IO  uint32_t  ADC_START;        /* ADC start register,                      Address offset : 0x008 */
-  __I   uint32_t  ADC_DATA;         /* ADC conversion data register,            Address offset : 0x00c */
-  __IO  uint32_t  ADC_INT;          /* ADC interrupt register,                  Address offset : 0x010 */
-        uint32_t  RESERVED0[2];
-  __IO  uint32_t  ADC_INTCLR;       /* ADC interrupt clear register,            Address offset : 0x01c */
-}ADC_TypeDef;
-
-/**
-  * @brief dualtimer
-  */
-typedef struct
-{
-  __IO uint32_t TimerLoad;    // <h> Timer Load </h>
-  __I  uint32_t TimerValue;   // <h> Timer Counter Current Value <r></h>
-  __IO uint32_t TimerControl; // <h> 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  uint32_t TimerIntClr;  // <h> Timer Interrupt Clear <w></h>
-  __I  uint32_t TimerRIS;     // <h> Timer Raw Interrupt Status <r></h>
-  __I  uint32_t TimerMIS;     // <h> Timer Masked Interrupt Status <r></h>
-  __IO uint32_t TimerBGLoad;  // <h> Background Load Register </h>
-} DUALTIMER_TypeDef;
-
-/**
-  * @brief GPIO
-  */
-typedef struct
-{
-  __IO   uint32_t  DATA;            /* DATA Register (R/W),                        offset : 0x000 */
-  __IO   uint32_t  DATAOUT;         /* Data Output Latch Register (R/W),           offset : 0x004 */
-         uint32_t  RESERVED0[2];
-  __IO   uint32_t  OUTENSET;        /* Output Enable Set Register  (R/W)           offset : 0x010 */
-  __IO   uint32_t  OUTENCLR;        /* Output Enable Clear Register  (R/W)         offset : 0x014 */
-  __IO   uint32_t  RESERVED1;       /* Alternate Function Set Register  (R/W)      offset : 0x018 */
-  __IO   uint32_t  RESERVED2;       /* Alternate Function Clear Register  (R/W)    offset : 0x01C */
-  __IO   uint32_t  INTENSET;        /* Interrupt Enable Set Register  (R/W)        offset : 0x020 */
-  __IO   uint32_t  INTENCLR;        /* Interrupt Enable Clear Register  (R/W)      offset : 0x024 */
-  __IO   uint32_t  INTTYPESET;      /* Interrupt Type Set Register  (R/W)          offset : 0x028 */
-  __IO   uint32_t  INTTYPECLR;      /* Interrupt Type Clear Register  (R/W)        offset : 0x02C */
-  __IO   uint32_t  INTPOLSET;       /* Interrupt Polarity Set Register  (R/W)      offset : 0x030 */
-  __IO   uint32_t  INTPOLCLR;       /* Interrupt Polarity Clear Register  (R/W)    offset : 0x034 */
-  union {
-    __I    uint32_t  INTSTATUS;     /* Interrupt Status Register (R/ )             offset : 0x038 */
-    __O    uint32_t  INTCLEAR;      /* Interrupt Clear Register ( /W)              offset : 0x038 */
-    }Interrupt;
-         uint32_t RESERVED3[241];
-  __IO   uint32_t LB_MASKED[256];   /* Lower byte Masked Access Register (R/W)     offset : 0x400 - 0x7FC  */
-  __IO   uint32_t UB_MASKED[256];   /* Upper byte Masked Access Register (R/W)     offset : 0x800 - 0xBFC  */
-} GPIO_TypeDef;
-
-typedef struct
-{
-  __IO  uint32_t  Port[16]; /* Port_00,      offset : 0x00 */
-                            /* Port_01,      offset : 0x04 */
-                            /* Port_02,      offset : 0x08 */
-                            /* Port_03,      offset : 0x0C */
-                            /* Port_04,      offset : 0x10 */
-                            /* Port_05,      offset : 0x14 */
-                            /* Port_06,      offset : 0x18 */
-                            /* Port_07,      offset : 0x1C */
-                            /* Port_08,      offset : 0x20 */
-                            /* Port_09,      offset : 0x24 */
-                            /* Port_10,      offset : 0x28 */
-                            /* Port_11,      offset : 0x2C */
-                            /* Port_12,      offset : 0x30 */
-                            /* Port_13,      offset : 0x34 */
-                            /* Port_14,      offset : 0x38 */
-                            /* Port_15,      offset : 0x3C */
-} P_Port_Def;
-
-typedef struct
-{
-  __IO  uint32_t  Port[5];  /* Port_00,      offset : 0x00 */
-                            /* Port_01,      offset : 0x04 */
-                            /* Port_02,      offset : 0x08 */
-                            /* Port_03,      offset : 0x0C */
-                            /* Port_04,      offset : 0x10 */
-} P_Port_D_Def;
-
-/**
-  * @brief  I2C Register structure definition
-  */
-typedef struct
-{
-    __IO uint32_t PRER;              //0x00
-    __IO uint32_t CTR;              //0x04
-    __IO uint32_t CMDR;              //0x08
-    __I  uint32_t SR;               //0x0C
-    __IO uint32_t TSR;               //0x10
-    __IO uint32_t SADDR;            //0x14
-    __IO uint32_t TXR;               //0x18
-    __I  uint32_t RXR;               //0x1C
-    __I  uint32_t ISR;              //0x20
-    __IO uint32_t ISCR;             //0x24
-    __IO uint32_t ISMR;             //0x28
-}I2C_TypeDef;
-
-/**
- * @brief PWM Register structure definition
- */
-typedef struct
-{
-    __IO    uint32_t    IER;    //Interrupt enable register
-                                //   <7>   IE7 : Channel 7 interrupt enable <R/W>
-                                //   <6>   IE6 : Channel 6 interrupt enable <R/W>
-                                //   <5>   IE5 : Channel 5 interrupt enable <R/W>
-                                //   <4>   IE4 : Channel 4 interrupt enable <R/W>
-                                //   <3>   IE3 : Channel 3 interrupt enable <R/W>
-                                //   <2>   IE2 : Channel 2 interrupt enable <R/W>
-                                //   <1>   IE1 : Channel 1 interrupt enable <R/W>
-                                //   <0>   IE0 : Channel 0 interrupt enable <R/W>
-
-    __IO    uint32_t    SSR;    //Start Stop register
-                                //   <7>   SS7 : Channel 7 TC start or stop <R/W>
-                                //   <6>   SS6 : Channel 6 TC start or stop <R/W>
-                                //   <5>   SS5 : Channel 5 TC start or stop <R/W>
-                                //   <4>   SS4 : Channel 4 TC start or stop <R/W>
-                                //   <3>   SS3 : Channel 3 TC start or stop <R/W>
-                                //   <2>   SS2 : Channel 2 TC start or stop <R/W>
-                                //   <1>   SS1 : Channel 1 TC start or stop <R/W>
-                                //   <0>   SS0 : Channel 0 TC start or stop <R/W>
-
-    __IO    uint32_t    PSR;    //Pause register
-                                //   <7>   PS7 : Channel 7 TC pasue <R/W>
-                                //   <6>   PS6 : Channel 6 TC pasue <R/W>
-                                //   <5>   PS5 : Channel 5 TC pasue <R/W>
-                                //   <4>   PS4 : Channel 4 TC pasue <R/W>
-                                //   <3>   PS3 : Channel 3 TC pasue <R/W>
-                                //   <2>   PS2 : Channel 2 TC pasue <R/W>
-                                //   <1>   PS1 : Channel 1 TC pasue <R/W>
-                                //   <0>   PS0 : Channel 0 TC pasue <R/W>
-} PWM_TypeDef;
-
-typedef struct
-{
-    __I     uint32_t    IR;     //Interrupt register
-                                //   <2>   CI : Capture interrupt <R>
-                                //   <1>   OI : Overflow interrupt <R>
-                                //   <0>   MI : Match interrupt <R>
-
-    __IO    uint32_t    IER;    //Interrupt enable register
-                                //   <2>   CIE : Capture interrupt enable <R/W>
-                                //   <1>   OIE : Overflow interrupt enable <R/W>
-                                //   <0>   MIE : Match interrupt enable <R/W>
-
-    __O     uint32_t    ICR;    //Interrupt clear register
-                                //   <2>   CIC : Capture interrupt clear <W>
-                                //   <1>   OIC : Overflow interrupt clear <W>
-                                //   <0>   MIC : Match interrupt clear <W>
-
-    __I     uint32_t    TCR;    //Timer/Counter register
-                                //   <0..31>   TCR : Timer/Counter register <R>
-
-    __I     uint32_t    PCR;    //Prescale counter register
-                                //   <0..5>   PCR : Prescale Counter register <R>
-
-    __IO    uint32_t    PR;     //Prescale register
-                                //   <0..5>   PR : prescale register <R/W>
-
-    __IO    uint32_t    MR;     //Match register
-                                //   <0..31>   MR : Match register <R/W>
-
-    __IO    uint32_t    LR;     //Limit register
-                                //   <0..31>   LR : Limit register <R/W>
-    __IO    uint32_t    UDMR;   //Up-Down mode register
-                                //   <0>   UDM : Up-down mode <R/W>
-
-    __IO    uint32_t    TCMR;   //Timer/Counter mode register
-                                //   <0>   TCM : Timer/Counter mode <R/W>
-
-    __IO    uint32_t    PEEER;  //PWM output enable and external input enable register
-                                //   <0..1>   PEEE : PWM output enable and external input enable <R/W>
-
-    __IO    uint32_t    CMR;    //Capture mode register
-                                //   <0>   CM : Capture mode <R/W>
-
-    __IO    uint32_t    CR;     //Capture register
-                                //   <0..31>   CR : Capture register <R>
-
-    __IO    uint32_t    PDMR;   //Periodic mode register
-                                //   <0>   PDM : Periodic mode <R/W>
-
-    __IO    uint32_t    DZER;   //Dead-zone enable register
-                                //   <0>   DZE : Dead-zone enable <R/W>
-
-    __IO    uint32_t    DZCR;   //Dead-zone counter register
-                                //   <0..9>   DZC : Dead-zone counter <R/W>
-} PWM_CHn_TypeDef;
-
-typedef struct
-{
-    __IO uint32_t    PWM_CHn_PR;   //Prescale register
-                                   //   <0..5>   PR : prescale register <R/W>
-    __IO uint32_t    PWM_CHn_MR;   //Match register
-                                   //   <0..31>   MR : Match register <R/W>
-    __IO uint32_t    PWM_CHn_LR;   //Limit register
-                                   //   <0..31>   LR : Limit register <R/W>
-    __IO uint32_t    PWM_CHn_UDMR; //Up-Down mode register
-                                   //   <0>   UDM : Up-down mode <R/W>
-    __IO uint32_t    PWM_CHn_PDMR; //Periodic mode register
-                                   //   <0>   PDM : Periodic mode <R/W>
-}PWM_TimerModeInitTypeDef;
-
-typedef struct
-{
-    __IO uint32_t    PWM_CHn_PR;   //Prescale register
-                                   //   <0..5>   PR : prescale register <R/W>
-    __IO uint32_t    PWM_CHn_MR;   //Match register
-                                   //   <0..31>   MR : Match register <R/W>
-    __IO uint32_t    PWM_CHn_LR;   //Limit register
-                                   //   <0..31>   LR : Limit register <R/W>
-    __IO uint32_t    PWM_CHn_UDMR; //Up-Down mode register
-                                   //   <0>   UDM : Up-down mode <R/W>
-    __IO uint32_t    PWM_CHn_PDMR; //Periodic mode register
-                                   //   <0>   PDM : Peiodic mode <R/W>
-    __IO uint32_t    PWM_CHn_CMR;  //Capture mode register
-                                   //   <0>   CM : Capture mode <R/W>
-}PWM_CaptureModeInitTypeDef;
-
-typedef struct
-{
-    __IO uint32_t    PWM_CHn_MR;
-    __IO uint32_t    PWM_CHn_LR;
-    __IO uint32_t    PWM_CHn_UDMR;
-    __IO uint32_t    PWM_CHn_PDMR;
-    __IO uint32_t    PWM_CHn_TCMR;
-}PWM_CounterModeInitTypeDef;
-
-
-/**
-  * @brief Random Number generator
-  */
-typedef struct
-{
-  __IO  uint32_t  RNG_RUN;          /* RNG run register,                    Address offset : 0x000 */
-  __IO  uint32_t  RNG_SEED;         /* RNG seed value register,             Address offset : 0x004 */
-  __IO  uint32_t  RNG_CLKSEL;       /* RNG Clock source select register,    Address offset : 0x008 */
-  __IO  uint32_t  RNG_MODE;         /* RNG MODE select register,            Address offset : 0x00c */
-  __I   uint32_t  RNG_RN;           /* RNG random number value register,    Address offset : 0x010 */
-  __IO  uint32_t  RNG_POLY;         /* RNG polynomial register,             Address offset : 0x014 */
-}RNG_TypeDef;
-
-/**
-  * @brief Serial Peripheral Interface
-  */
-typedef struct
-{
-  __IO uint32_t CR0;
-  __IO uint32_t CR1;
-  __IO uint32_t DR;
-  __IO uint32_t SR;
-  __IO uint32_t CPSR;
-  __IO uint32_t IMSC;
-  __IO uint32_t RIS;
-  __IO uint32_t MIS;
-  __IO uint32_t ICR;
-  __IO uint32_t DMACR;
-} SSP_TypeDef;
-
-typedef struct
-{
-    __IO    uint32_t  WatchdogLoad;         // <h> Watchdog Load Register </h>
-    __I     uint32_t  WatchdogValue;        // <h> Watchdog Value Register </h>
-    __IO    uint32_t  WatchdogControl;      // <h> Watchdog Control Register
-                                            //   <o.1>    RESEN: Reset enable
-                                            //   <o.0>    INTEN: Interrupt enable
-                                            // </h>
-    __O     uint32_t  WatchdogIntClr;       // <h> Watchdog Clear Interrupt Register </h>
-    __I     uint32_t  WatchdogRIS;          // <h> Watchdog Raw Interrupt Status Register </h>
-    __I     uint32_t  WatchdogMIS;          // <h> Watchdog Interrupt Status Register </h>
-            uint32_t  RESERVED[762];
-    __IO    uint32_t  WatchdogLock;         // <h> Watchdog Lock Register </h>
-}WATCHDOG_TypeDef;
-
-/** @addtogroup Peripheral_memory_map
-  * @{
-  */
-
-/* Peripheral and SRAM base address */
-#define W7500x_FLASH_BASE        (0x00000000UL)  /*!< (FLASH     ) Base Address */
-#define W7500x_SRAM_BASE         (0x20000000UL)  /*!< (SRAM      ) Base Address */
-#define W7500x_PERIPH_BASE       (0x40000000UL)  /*!< (Peripheral) Base Address */
-
-#define W7500x_RAM_BASE          (0x20000000UL)
-#define W7500x_APB1_BASE         (0x40000000UL)
-#define W7500x_APB2_BASE         (0x41000000UL)
-#define W7500x_AHB_BASE          (0x42000000UL)
-
-#define W7500x_UART0_BASE        (W7500x_APB1_BASE + 0x0000C000UL)
-#define W7500x_UART1_BASE        (W7500x_APB1_BASE + 0x0000D000UL)
-#define W7500x_UART2_BASE        (W7500x_APB1_BASE + 0x00006000UL)
-
-#define W7500x_CRG_BASE          (W7500x_APB2_BASE + 0x00001000UL)
-#define W7500x_ADC_BASE          (W7500x_APB2_BASE + 0x00000000UL)
-
-#define W7500x_INFO_BGT          (0x0003FDB8)
-#define W7500x_INFO_OSC          (0x0003FDBC)
-
-#define W7500x_TRIM_BGT          (0x41001210)
-#define W7500x_TRIM_OSC          (0x41001004)
-
-#define W7500x_DUALTIMER0_BASE   (W7500x_APB1_BASE + 0x00001000ul)
-#define W7500x_DUALTIMER1_BASE   (W7500x_APB1_BASE + 0x00002000ul)
-
-#define EXTI_Px_BASE            (W7500x_APB2_BASE + 0x00002200UL)
-
-#define GPIOA_BASE              (W7500x_AHB_BASE + 0x00000000UL)    // W7500x_AHB_BASE : 0x42000000UL
-#define GPIOB_BASE              (W7500x_AHB_BASE + 0x01000000UL)
-#define GPIOC_BASE              (W7500x_AHB_BASE + 0x02000000UL)
-#define GPIOD_BASE              (W7500x_AHB_BASE + 0x03000000UL)
-
-#define P_AFSR_BASE             (W7500x_APB2_BASE + 0x00002000UL)
-
-#define P_PCR_BASE              (W7500x_APB2_BASE + 0x00003000UL)
-
-#define I2C0_BASE               (W7500x_APB1_BASE + 0x8000)
-#define I2C1_BASE               (W7500x_APB1_BASE + 0x9000)
-
-#define W7500x_PWM_BASE         (W7500x_APB1_BASE + 0x00005000UL)
-
-#define W7500x_RNG_BASE         (W7500x_APB1_BASE + 0x00007000UL)
-
-#define SSP0_BASE 	          (0x4000A000)
-#define SSP1_BASE 	          (0x4000B000)
-
-#define W7500x_WATCHDOG_BASE    (W7500x_APB1_BASE + 0x0000UL)
-
-/**
-  * @}
-  */
-
-
-/** @addtogroup Peripheral_declaration
-  * @{
-  */  
-#define CRG               ((CRG_TypeDef *) W7500x_CRG_BASE)
-
-#define UART0             ((UART_TypeDef  *)   W7500x_UART0_BASE)
-#define UART1             ((UART_TypeDef  *)   W7500x_UART1_BASE)
-#define UART2             ((S_UART_TypeDef *)  W7500x_UART2_BASE)
-
-#define ADC               ((ADC_TypeDef *) W7500x_ADC_BASE)
-
-#define DUALTIMER0_0      ((DUALTIMER_TypeDef  *) (W7500x_DUALTIMER0_BASE) )
-#define DUALTIMER0_1      ((DUALTIMER_TypeDef  *) (W7500x_DUALTIMER0_BASE + 0x20ul))
-#define DUALTIMER1_0      ((DUALTIMER_TypeDef  *) (W7500x_DUALTIMER1_BASE) )
-#define DUALTIMER1_1      ((DUALTIMER_TypeDef  *) (W7500x_DUALTIMER1_BASE + 0x20ul))
-
-#define EXTI_PA         ((P_Port_Def *)   (EXTI_Px_BASE + 0x00000000UL))  /* PA_XX External interrupt Enable Register */
-#define EXTI_PB         ((P_Port_Def *)   (EXTI_Px_BASE + 0x00000040UL))  /* PB_XX External interrupt Enable Register */
-#define EXTI_PC         ((P_Port_Def *)   (EXTI_Px_BASE + 0x00000080UL))  /* PC_XX External interrupt Enable Register */
-#define EXTI_PD         ((P_Port_D_Def *) (EXTI_Px_BASE + 0x000000C0UL))  /* PD_XX External interrupt Enable Register */
-
-#define GPIOA   ((GPIO_TypeDef *) (GPIOA_BASE) )
-#define GPIOB   ((GPIO_TypeDef *) (GPIOB_BASE) )
-#define GPIOC   ((GPIO_TypeDef *) (GPIOC_BASE) )
-#define GPIOD   ((GPIO_TypeDef *) (GPIOD_BASE) )
-
-#define PA_AFSR ((P_Port_Def *)   (P_AFSR_BASE + 0x00000000UL))  /* PA_XX Pad Alternate Function Select Register */
-#define PB_AFSR ((P_Port_Def *)   (P_AFSR_BASE + 0x00000040UL))  /* PB_XX Pad Alternate Function Select Register */
-#define PC_AFSR ((P_Port_Def *)   (P_AFSR_BASE + 0x00000080UL))  /* PC_XX Pad Alternate Function Select Register */
-#define PD_AFSR ((P_Port_D_Def *) (P_AFSR_BASE + 0x000000C0UL))  /* PD_XX Pad Alternate Function Select Register */
-
-#define PA_PCR  ((P_Port_Def *)   (P_PCR_BASE + 0x00000000UL))   /* PA_XX Pad Control Register */
-#define PB_PCR  ((P_Port_Def *)   (P_PCR_BASE + 0x00000040UL))   /* PB_XX Pad Control Register */
-#define PC_PCR  ((P_Port_Def *)   (P_PCR_BASE + 0x00000080UL))   /* PC_XX Pad Control Register */
-#define PD_PCR  ((P_Port_D_Def *) (P_PCR_BASE + 0x000000C0UL))   /* PD_XX Pad Control Register */
-
-#define I2C0    ((I2C_TypeDef      *)  I2C0_BASE)
-#define I2C1    ((I2C_TypeDef      *)  I2C1_BASE)
-
-
-#define TIMCLKEN0_0                         *(uint32_t *)(W7500x_DUALTIMER0_BASE + 0x80ul)
-#define TIMCLKEN0_1                         *(uint32_t *)(W7500x_DUALTIMER0_BASE + 0xA0ul)
-#define TIMCLKEN1_0                         *(uint32_t *)(W7500x_DUALTIMER1_BASE + 0x80ul)
-#define TIMCLKEN1_1                         *(uint32_t *)(W7500x_DUALTIMER1_BASE + 0xA0ul)
-
-#define PWM                             ((PWM_TypeDef *)         (W7500x_PWM_BASE + 0x800UL ))
-#define PWM_CH0                         ((PWM_CHn_TypeDef *)     (W7500x_PWM_BASE))
-#define PWM_CH1                         ((PWM_CHn_TypeDef *)     (W7500x_PWM_BASE + 0x100UL))
-#define PWM_CH2                         ((PWM_CHn_TypeDef *)     (W7500x_PWM_BASE + 0x200UL))
-#define PWM_CH3                         ((PWM_CHn_TypeDef *)     (W7500x_PWM_BASE + 0x300UL))
-#define PWM_CH4                         ((PWM_CHn_TypeDef *)     (W7500x_PWM_BASE + 0x400UL))
-#define PWM_CH5                         ((PWM_CHn_TypeDef *)     (W7500x_PWM_BASE + 0x500UL))
-#define PWM_CH6                         ((PWM_CHn_TypeDef *)     (W7500x_PWM_BASE + 0x600UL))
-#define PWM_CH7                         ((PWM_CHn_TypeDef *)     (W7500x_PWM_BASE + 0x700UL))
-
-#define PWM_CH0_BASE                    (W7500x_PWM_BASE)
-#define PWM_CH1_BASE                    (W7500x_PWM_BASE + 0x100UL)
-#define PWM_CH2_BASE                    (W7500x_PWM_BASE + 0x200UL)
-#define PWM_CH3_BASE                    (W7500x_PWM_BASE + 0x300UL)
-#define PWM_CH4_BASE                    (W7500x_PWM_BASE + 0x400UL)
-#define PWM_CH5_BASE                    (W7500x_PWM_BASE + 0x500UL)
-#define PWM_CH6_BASE                    (W7500x_PWM_BASE + 0x600UL)
-#define PWM_CH7_BASE                    (W7500x_PWM_BASE + 0x700UL)
-
-#define RNG                               ((RNG_TypeDef *) W7500x_RNG_BASE)
-
-#define SSP0    ((SSP_TypeDef*)   (SSP0_BASE))
-#define SSP1    ((SSP_TypeDef*)   (SSP1_BASE))
-
-#define WATCHDOG                ((WATCHDOG_TypeDef  *) W7500x_WATCHDOG_BASE)
-
-/**
-  * @}
-  */
-
-
-
-/******************************************************************************/
-/*                                                                            */
-/*                  Clock Reset Generator                                     */
-/*                                                                            */
-/******************************************************************************/
-/****************   Bit definition for CRG_OSC_PDR   **************************/
-#define CRG_OSC_PDR_NRMLOP      (0x0ul)             // Normal Operation
-#define CRG_OSC_PDR_PD          (0x1ul)             // Power Down
-/****************   Bit definition for CRG_PLL_PDR   **************************/
-#define CRG_PLL_PDR_PD          (0x0ul)             // Power Down
-#define CRG_PLL_PDR_NRMLOP      (0x1ul)             // Normal Operation
-/****************   Bit definition for CRG_PLL_FCR   **************************/
-//ToDo
-/****************   Bit definition for CRG_PLL_OER   **************************/
-#define CRG_PLL_OER_DIS         (0x0ul)             // Clock out is disable
-#define CRG_PLL_OER_EN          (0x1ul)             // Clock out is enable
-/****************   Bit definition for CRG_PLL_BPR   **************************/
-#define CRG_PLL_BPR_DIS         (0x0ul)             // Bypass disable. Normal operation
-#define CRG_PLL_BPR_EN          (0x1ul)             // Bypass enable. Clock will be set to external clock
-/****************   Bit definition for CRG_PLL_IFSR  **************************/
-#define CRG_PLL_IFSR_RCLK       (0x0ul)             // Internal 8MHz RC oscillator clock(RCLK)
-#define CRG_PLL_IFSR_OCLK       (0x1ul)             // External oscillator clock (OCLK, 8MHz ~ 24MHz)
-/****************   Bit definition for CRG_FCLK_SSR  **************************/
-#define CRG_FCLK_SSR_MCLK       (0x01ul)            // 00,01 Output clock of PLL(MCLK)
-#define CRG_FCLK_SSR_RCLK       (0x02ul)            // Internal 8MHz RC oscillator clock(RCLK)
-#define CRG_FCLK_SSR_OCLK       (0x03ul)            // External oscillator clock(OCLK, 8MHz ~ 24MHz)
-/****************   Bit definition for CRG_FCLK_PVSR   **************************/
-#define CRG_FCLK_PVSR_DIV1      (0x00ul)            // 1/1 (bypass)
-#define CRG_FCLK_PVSR_DIV2      (0x01ul)            // 1/2
-#define CRG_FCLK_PVSR_DIV4      (0x02ul)            // 1/4
-#define CRG_FCLK_PVSR_DIV8      (0x03ul)            // 1/8
-/****************   Bit definition for CRG_SSPCLK_SSR   **************************/
-#define CRG_SSPCLK_SSR_DIS      (0x00ul)            // Disable clock
-#define CRG_SSPCLK_SSR_MCLK     (0x01ul)            // PLL output clock(MCLK)
-#define CRG_SSPCLK_SSR_RCLK     (0x02ul)            // Internal 8MHz RC oscillator clock(RCLK)
-#define CRG_SSPCLK_SSR_OCLK     (0x03ul)            // External oscillator clock(OCLK, 8MHz ~ 24MHz)
-/****************   Bit definition for CRG_SSPCLK_PVSR   **************************/
-#define CRG_SSPCLK_PVSR_DIV1    (0x00ul)            // 1/1 (bypass)
-#define CRG_SSPCLK_PVSR_DIV2    (0x01ul)            // 1/2
-#define CRG_SSPCLK_PVSR_DIV4    (0x02ul)            // 1/4
-#define CRG_SSPCLK_PVSR_DIV8    (0x03ul)            // 1/8
-/****************   Bit definition for CRG_ADCCLK_SSR   **************************/
-#define CRG_ADCCLK_SSR_DIS      (0x00ul)            // Disable clock
-#define CRG_ADCCLK_SSR_MCLK     (0x01ul)            // PLL output clock(MCLK)
-#define CRG_ADCCLK_SSR_RCLK     (0x02ul)            // Internal 8MHz RC oscillator clock(RCLK)
-#define CRG_ADCCLK_SSR_OCLK     (0x03ul)            // External oscillator clock(OCLK, 8MHz ~ 24MHz)
-/****************   Bit definition for CRG_ADCCLK_PVSR   **************************/
-#define CRG_ADCCLK_PVSR_DIV1    (0x00ul)            // 1/1 (bypass)
-#define CRG_ADCCLK_PVSR_DIV2    (0x01ul)            // 1/2
-#define CRG_ADCCLK_PVSR_DIV4    (0x02ul)            // 1/4
-#define CRG_ADCCLK_PVSR_DIV8    (0x03ul)            // 1/8
-/****************   Bit definition for CRG_TIMER0/1CLK_SSR   **************************/
-#define CRG_TIMERCLK_SSR_DIS      (0x00ul)            // Disable clock
-#define CRG_TIMERCLK_SSR_MCLK     (0x01ul)            // PLL output clock(MCLK)
-#define CRG_TIMERCLK_SSR_RCLK     (0x02ul)            // Internal 8MHz RC oscillator clock(RCLK)
-#define CRG_TIMERCLK_SSR_OCLK     (0x03ul)            // External oscillator clock(OCLK, 8MHz ~ 24MHz)
-/****************   Bit definition for CRG_TIMER0/1CLK_PVSR   **************************/
-#define CRG_TIMERCLK_PVSR_DIV1    (0x00ul)           // 1/1 (bypass)
-#define CRG_TIMERCLK_PVSR_DIV2    (0x01ul)           // 1/2
-#define CRG_TIMERCLK_PVSR_DIV4    (0x02ul)           // 1/4
-#define CRG_TIMERCLK_PVSR_DIV8    (0x03ul)           // 1/8
-#define CRG_TIMERCLK_PVSR_DIV16   (0x04ul)           // 1/16
-#define CRG_TIMERCLK_PVSR_DIV32   (0x05ul)           // 1/32
-#define CRG_TIMERCLK_PVSR_DIV64   (0x06ul)           // 1/64
-#define CRG_TIMERCLK_PVSR_DIV128  (0x07ul)           // 1/128
-/****************   Bit definition for CRG_PWMnCLK_SSR   **************************/
-#define CRG_PWMCLK_SSR_DIS      (0x00ul)            // Disable clock
-#define CRG_PWMCLK_SSR_MCLK     (0x01ul)            // PLL output clock(MCLK)
-#define CRG_PWMCLK_SSR_RCLK     (0x02ul)            // Internal 8MHz RC oscillator clock(RCLK)
-#define CRG_PWMCLK_SSR_OCLK     (0x03ul)            // External oscillator clock(OCLK, 8MHz ~ 24MHz)
-/****************   Bit definition for CRG_PWMnCLK_PVSR   **************************/
-#define CRG_PWMCLK_PVSR_DIV1    (0x00ul)           // 1/1 (bypass)
-#define CRG_PWMCLK_PVSR_DIV2    (0x01ul)           // 1/2
-#define CRG_PWMCLK_PVSR_DIV4    (0x02ul)           // 1/4
-#define CRG_PWMCLK_PVSR_DIV8    (0x03ul)           // 1/8
-#define CRG_PWMCLK_PVSR_DIV16   (0x04ul)           // 1/16
-#define CRG_PWMCLK_PVSR_DIV32   (0x05ul)           // 1/32
-#define CRG_PWMCLK_PVSR_DIV64   (0x06ul)           // 1/64
-#define CRG_PWMCLK_PVSR_DIV128  (0x07ul)           // 1/128
-/****************   Bit definition for CRG_RTC_HS_SSR   **************************/
-#define CRG_RTC_HS_SSR_DIS      (0x00ul)            // Disable clock
-#define CRG_RTC_HS_SSR_MCLK     (0x01ul)            // PLL output clock(MCLK)
-#define CRG_RTC_HS_SSR_RCLK     (0x02ul)            // Internal 8MHz RC oscillator clock(RCLK)
-#define CRG_RTC_HS_SSR_OCLK     (0x03ul)            // External oscillator clock(OCLK, 8MHz ~ 24MHz)
-/****************   Bit definition for CRG_RTC_HS_PVSR   **************************/
-#define CRG_RTC_HS_PVSR_DIV1    (0x00ul)           // 1/1 (bypass)
-#define CRG_RTC_HS_PVSR_DIV2    (0x01ul)           // 1/2
-#define CRG_RTC_HS_PVSR_DIV4    (0x02ul)           // 1/4
-#define CRG_RTC_HS_PVSR_DIV8    (0x03ul)           // 1/8
-#define CRG_RTC_HS_PVSR_DIV16   (0x04ul)           // 1/16
-#define CRG_RTC_HS_PVSR_DIV32   (0x05ul)           // 1/32
-#define CRG_RTC_HS_PVSR_DIV64   (0x06ul)           // 1/64
-#define CRG_RTC_HS_PVSR_DIV128  (0x07ul)           // 1/128
-/****************   Bit definition for CRG_RTC_SSR   **************************/
-#define CRG_RTC_SSR_HS          (0x00ul)            // RTCCLK HS(High Speed clock) 
-#define CRG_RTC_SSR_LW          (0x01ul)            // 32K_OSC_CLK(Low Speed external oscillator clock) 
-/****************   Bit definition for CRG_WDOGCLK_HS_SSR   **************************/
-#define CRG_WDOGCLK_HS_SSR_DIS      (0x00ul)        // Disable clock
-#define CRG_WDOGCLK_HS_SSR_MCLK     (0x01ul)        // PLL output clock(MCLK)
-#define CRG_WDOGCLK_HS_SSR_RCLK     (0x02ul)        // Internal 8MHz RC oscillator clock(RCLK)
-#define CRG_WDOGCLK_HS_SSR_OCLK     (0x03ul)        // External oscillator clock(OCLK, 8MHz ~ 24MHz)
-/****************   Bit definition for CRG_WDOGCLK_HS_PVSR   **************************/
-#define CRG_WDOGCLK_HS_PVSR_DIV1    (0x00ul)       // 1/1 (bypass)
-#define CRG_WDOGCLK_HS_PVSR_DIV2    (0x01ul)       // 1/2
-#define CRG_WDOGCLK_HS_PVSR_DIV4    (0x02ul)       // 1/4
-#define CRG_WDOGCLK_HS_PVSR_DIV8    (0x03ul)       // 1/8
-#define CRG_WDOGCLK_HS_PVSR_DIV16   (0x04ul)       // 1/16
-#define CRG_WDOGCLK_HS_PVSR_DIV32   (0x05ul)       // 1/32
-#define CRG_WDOGCLK_HS_PVSR_DIV64   (0x06ul)       // 1/64
-#define CRG_WDOGCLK_HS_PVSR_DIV128  (0x07ul)       // 1/128
-/****************   Bit definition for CRG_WDOGCLK_SSR   **************************/
-#define CRG_WDOGCLK_SSR_HS          (0x00ul)        // RTCCLK HS(High Speed clock) 
-#define CRG_WDOGCLK_SSR_LW          (0x01ul)        // 32K_OSC_CLK(Low Speed external oscillator clock) 
-/****************   Bit definition for CRG_UARTCLK_SSR   **************************/
-#define CRG_UARTCLK_SSR_DIS      (0x00ul)           // Disable clock
-#define CRG_UARTCLK_SSR_MCLK     (0x01ul)           // PLL output clock(MCLK)
-#define CRG_UARTCLK_SSR_RCLK     (0x02ul)           // Internal 8MHz RC oscillator clock(RCLK)
-#define CRG_UARTCLK_SSR_OCLK     (0x03ul)           // External oscillator clock(OCLK, 8MHz ~ 24MHz)
-/****************   Bit definition for CRG_UARTCLK_PVSR   **************************/
-#define CRG_UARTCLK_PVSR_DIV1    (0x00ul)           // 1/1 (bypass)
-#define CRG_UARTCLK_PVSR_DIV2    (0x01ul)           // 1/2
-#define CRG_UARTCLK_PVSR_DIV4    (0x02ul)           // 1/4
-#define CRG_UARTCLK_PVSR_DIV8    (0x03ul)           // 1/8
-/****************   Bit definition for CRG_MIICLK_ECR   **************************/
-#define CRG_MIICLK_ECR_EN_RXCLK  (0x01ul << 0)      // Enable MII_RCK and MII_RCK_N
-#define CRG_MIICLK_ECR_EN_TXCLK  (0x01ul << 1)      // Enable MII_TCK and MII_TCK_N
-/****************   Bit definition for CRG_MONCLK_SSR   **************************/
-#define CRG_MONCLK_SSR_MCLK      (0x00ul)        // PLL output clock (MCLK)
-#define CRG_MONCLK_SSR_FCLK      (0x01ul)        // FCLK
-#define CRG_MONCLK_SSR_RCLK      (0x02ul)        // Internal 8MHz RC oscillator clock(RCLK)
-#define CRG_MONCLK_SSR_OCLK      (0x03ul)        // External oscillator clock(OCLK, 8MHz ~ 24MHz)
-#define CRG_MONCLK_SSR_ADCCLK    (0x04ul)        // ADCCLK
-#define CRG_MONCLK_SSR_SSPCLK    (0x05ul)        // SSPCLK
-#define CRG_MONCLK_SSR_TIMCLK0   (0x06ul)        // TIMCLK0
-#define CRG_MONCLK_SSR_TIMCLK1   (0x07ul)        // TIMCLK1
-#define CRG_MONCLK_SSR_PWMCLK0   (0x08ul)        // PWMCLK0
-#define CRG_MONCLK_SSR_PWMCLK1   (0x09ul)        // PWMCLK1
-#define CRG_MONCLK_SSR_PWMCLK2   (0x0Aul)        // PWMCLK2
-#define CRG_MONCLK_SSR_PWMCLK3   (0x0Bul)        // PWMCLK3
-#define CRG_MONCLK_SSR_PWMCLK4   (0x0Cul)        // PWMCLK4
-#define CRG_MONCLK_SSR_PWMCLK5   (0x0Dul)        // PWMCLK5
-#define CRG_MONCLK_SSR_PWMCLK6   (0x0Eul)        // PWMCLK6
-#define CRG_MONCLK_SSR_PWMCLK7   (0x0Ful)        // PWMCLK7
-#define CRG_MONCLK_SSR_UARTCLK   (0x10ul)        // UARTCLK
-#define CRG_MONCLK_SSR_MII_RXCLK (0x11ul)        // MII_RXCLK 
-#define CRG_MONCLK_SSR_MII_TXCLK (0x12ul)        // MII_TXCLK
-#define CRG_MONCLK_SSR_RTCCLK    (0x13ul)        // RTCCLK
-
-/******************************************************************************/
-/*                                                                            */
-/*                                  UART                                      */
-/*                                                                            */
-/******************************************************************************/
-/****************** Bit definition for UART Data(UARTDR) register *************************/
-#define UART_DR_OE           (0x01ul << 11)      // Overrun Error
-#define UART_DR_BE           (0x01ul << 10)      // Break Error
-#define UART_DR_PE           (0x01ul <<  9)      // Parity Error
-#define UART_DR_FE           (0x01ul <<  8)      // Framing Error
-//#define UART_DR_DR                               // ToDo
-/***************** Bit definition for UART Receive Status(UARTRSR) register ***************/
-#define UARTR_SR_OE           (0x01ul << 3)      // Overrun Error
-#define UARTR_SR_BE           (0x01ul << 2)      // Break Error
-#define UARTR_SR_PE           (0x01ul << 1)      // Parity Error
-#define UARTR_SR_FE           (0x01ul << 0)      // Framing Error
-/***************** Bit definition for UART Error Clear(UARTECR) register ******************/
-#define UARTE_CR_OE           (0x01ul << 3)      // Overrun Error
-#define UARTE_CR_BE           (0x01ul << 2)      // Break Error
-#define UARTE_CR_PE           (0x01ul << 1)      // Parity Error
-#define UARTE_CR_FE           (0x01ul << 0)      // Framing Error
-/****************** Bit definition for UART Flags(UARTFR) register ************************/
-#define UART_FR_RI            (0x01ul << 8)      // Ring indicator
-#define UART_FR_TXFE          (0x01ul << 7)      // Transmit FIFO empty
-#define UART_FR_RXFF          (0x01ul << 6)      // Receive FIFO full
-#define UART_FR_TXFF          (0x01ul << 5)      // Transmit FIFO full
-#define UART_FR_RXFE          (0x01ul << 4)      // Receive FIFO empty
-#define UART_FR_BUSY          (0x01ul << 3)      // UART busy
-#define UART_FR_DCD           (0x01ul << 2)      // Data carrier detect
-#define UART_FR_DSR           (0x01ul << 1)      // Data set ready
-#define UART_FR_CTS           (0x01ul << 0)      // Clear to send
-/********** Bit definition for UART Low-power Counter(UARTILPR) register *******************/
-#define UARTILPR_COUNTER     (0xFFul << 0)      // 8-bit low-power divisor value (0..255)
-/********************* Bit definition for Line Control(UARTLCR_H) register *****************/
-#define UART_LCR_H_SPS        (0x1ul << 7)       // Stick parity select
-#define UART_LCR_H_WLEN(n)    ((n & 0x3ul) << 5) // Word length ( 0=5bits, 1=6bits, 2=7bits, 3=8bits )
-#define UART_LCR_H_FEN        (0x1ul << 4)       // Enable FIFOs
-#define UART_LCR_H_STP2       (0x1ul << 3)       // Two stop bits select 
-#define UART_LCR_H_EPS        (0x1ul << 2)       // Even parity select
-#define UART_LCR_H_PEN        (0x1ul << 1)       // Parity enable
-#define UART_LCR_H_BRK        (0x1ul << 0)       // Send break
-/********************* Bit definition for Contro(UARTCR) register *************************/
-#define UART_CR_CTSEn        (0x1ul << 15)    // CTS hardware flow control enable
-#define UART_CR_RTSEn        (0x1ul << 14)    // RTS hardware flow control enable
-#define UART_CR_Out2         (0x1ul << 13)    // Complement of Out2 modem status output
-#define UART_CR_Out1         (0x1ul << 12)    // Complement of Out1 modem status output
-#define UART_CR_RTS          (0x1ul << 11)    // Request to send
-#define UART_CR_DTR          (0x1ul << 10)    // Data transmit ready
-#define UART_CR_RXE          (0x1ul <<  9)    // Receive enable
-#define UART_CR_TXE          (0x1ul <<  8)    // Transmit enable
-#define UART_CR_LBE          (0x1ul <<  7)    // Loop-back enable
-#define UART_CR_SIRLP        (0x1ul <<  2)    // IrDA SIR low power mode
-#define UART_CR_SIREN        (0x1ul <<  1)    // SIR enable
-#define UART_CR_UARTEN       (0x1ul <<  0)    // UART enable
-/******* Bit definition for Interrupt FIFO Level Select(UARTIFLS) register *****************/
-#define UART_IFLS_RXIFLSEL(n)    ((n & 0x7ul) << 3) // Receive interrupt FIFO level select(0=1/8 full, 1=1/4 full, 2=1/2 full, 3=3/4 full, 4=7/8 full)
-#define UART_IFLS_TXIFLSEL(n)    ((n & 0x7ul) << 0) // Transmit interrupt FIFO level select(0=1/8 full, 1=1/4 full, 2=1/2 full, 3=3/4 full, 4=7/8 full)
-/******* Bit definition for Interrupt Mask Set/Clear(UARTIMSC) register ********************/
-#define UART_IMSC_OEIM       (0x1ul << 10)    // Overrun error interrupt mask
-#define UART_IMSC_BEIM       (0x1ul <<  9)    // Break error interrupt mask
-#define UART_IMSC_PEIM       (0x1ul <<  8)    // Parity error interrupt mask
-#define UART_IMSC_FEIM       (0x1ul <<  7)    // Framing error interrupt mask
-#define UART_IMSC_RTIM       (0x1ul <<  6)    // Receive interrupt mask
-#define UART_IMSC_TXIM       (0x1ul <<  5)    // Transmit interrupt mask
-#define UART_IMSC_RXIM       (0x1ul <<  4)    // Receive interrupt mask
-#define UART_IMSC_DSRMIM     (0x1ul <<  3)    // nUARTDSR modem interrupt mask
-#define UART_IMSC_DCDMIM     (0x1ul <<  2)    // nUARTDCD modem interrupt mask
-#define UART_IMSC_CTSMIM     (0x1ul <<  1)    // nUARTCTS modem interrupt mask
-#define UART_IMSC_RIMIM      (0x1ul <<  0)    // nUARTRI modem interrupt mask
-/*************** Bit definition for Raw Interrupt Status(UARTRIS) register *****************/
-#define UART_RIS_OEIM       (0x1ul << 10)    // Overrun error interrupt status
-#define UART_RIS_BEIM       (0x1ul <<  9)    // Break error interrupt status
-#define UART_RIS_PEIM       (0x1ul <<  8)    // Parity error interrupt status 
-#define UART_RIS_FEIM       (0x1ul <<  7)    // Framing error interrupt status
-#define UART_RIS_RTIM       (0x1ul <<  6)    // Receive interrupt status
-#define UART_RIS_TXIM       (0x1ul <<  5)    // Transmit interrupt status
-#define UART_RIS_RXIM       (0x1ul <<  4)    // Receive interrupt status
-#define UART_RIS_DSRMIM     (0x1ul <<  3)    // nUARTDSR modem interrupt status
-#define UART_RIS_DCDMIM     (0x1ul <<  2)    // nUARTDCD modem interrupt status
-#define UART_RIS_CTSMIM     (0x1ul <<  1)    // nUARTCTS modem interrupt status
-#define UART_RIS_RIMIM      (0x1ul <<  0)    // nUARTRI modem interrupt status
-/************** Bit definition for Masked Interrupt Status(UARTMIS) register ****************/
-#define UART_MIS_OEIM       (0x1ul << 10)    // Overrun error masked interrupt status
-#define UART_MIS_BEIM       (0x1ul <<  9)    // Break error masked interrupt status
-#define UART_MIS_PEIM       (0x1ul <<  8)    // Parity error masked interrupt status 
-#define UART_MIS_FEIM       (0x1ul <<  7)    // Framing error masked interrupt status
-#define UART_MIS_RTIM       (0x1ul <<  6)    // Receive masked interrupt status
-#define UART_MIS_TXIM       (0x1ul <<  5)    // Transmit masked interrupt status
-#define UART_MIS_RXIM       (0x1ul <<  4)    // Receive masked interrupt status
-#define UART_MIS_DSRMIM     (0x1ul <<  3)    // nUARTDSR modem masked interrupt status
-#define UART_MIS_DCDMIM     (0x1ul <<  2)    // nUARTDCD modem masked interrupt status
-#define UART_MIS_CTSMIM     (0x1ul <<  1)    // nUARTCTS modem masked interrupt status
-#define UART_MIS_RIMIM      (0x1ul <<  0)    // nUARTRI modem masked interrupt status
-/*************** Bit definition for Interrupt Clear(UARTICR) register ************************/
-#define UART_ICR_OEIM       (0x1ul << 10)    // Overrun error interrupt clear 
-#define UART_ICR_BEIM       (0x1ul <<  9)    // Break error interrupt clear
-#define UART_ICR_PEIM       (0x1ul <<  8)    // Parity error interrupt clear
-#define UART_ICR_FEIM       (0x1ul <<  7)    // Framing error interrupt clear
-#define UART_ICR_RTIM       (0x1ul <<  6)    // Receive interrupt clear
-#define UART_ICR_TXIM       (0x1ul <<  5)    // Transmit interrupt clear
-#define UART_ICR_RXIM       (0x1ul <<  4)    // Receive interrupt clear
-#define UART_ICR_DSRMIM     (0x1ul <<  3)    // nUARTDSR modem interrupt clear
-#define UART_ICR_DCDMIM     (0x1ul <<  2)    // nUARTDCD modem interrupt clear
-#define UART_ICR_CTSMIM     (0x1ul <<  1)    // nUARTCTS modem interrupt clear
-#define UART_ICR_RIMIM      (0x1ul <<  0)    // nUARTRI modem interrupt clear
-/***************** Bit definition for DMA Control(UARTDMACR) register ************************/
-#define UART_DMACR_DMAONERR (0x1ul <<  2)    // DMA on error
-#define UART_DMACR_TXDMAE   (0x1ul <<  1)    // Transmit DMA enable
-#define UART_DMACR_RXDMAE   (0x1ul <<  0)    // Receive DMA enable
-
-/******************************************************************************/
-/*                                                                            */
-/*                           Simple UART                                      */
-/*                                                                            */
-/******************************************************************************/
-/***************** Bit definition for S_UART Data () register ************************/
-#define S_UART_DATA                  (0xFFul << 0)    
-/***************** Bit definition for S_UART State() register ************************/
-#define S_UART_STATE_TX_BUF_OVERRUN  (0x01ul << 2)       // TX buffer overrun, wirte 1 to clear.
-#define S_UART_STATE_RX_BUF_FULL     (0x01ul << 1)       // RX buffer full, read only.
-#define S_UART_STATE_TX_BUF_FULL     (0x01ul << 0)       // TX buffer full, read only.
-/***************** Bit definition for S_UART Control() register ************************/
-#define S_UART_CTRL_HIGH_SPEED_TEST  (0x01ul << 6)       // High-speed test mode for TX only.
-#define S_UART_CTRL_RX_OVERRUN_EN    (0x01ul << 5)       // RX overrun interrupt enable.
-#define S_UART_CTRL_TX_OVERRUN_EN    (0x01ul << 4)       // TX overrun interrupt enable.
-#define S_UART_CTRL_RX_INT_EN        (0x01ul << 3)       // RX interrupt enable.
-#define S_UART_CTRL_TX_INT_EN        (0x01ul << 2)       // TX interrupt enable.
-#define S_UART_CTRL_RX_EN            (0x01ul << 1)       // RX enable.
-#define S_UART_CTRL_TX_EN            (0x01ul << 0)       // TX enable.
-/***************** Bit definition for S_UART Interrupt() register ************************/
-#define S_UART_INT_RX_OVERRUN        (0x01ul << 3)       // RX overrun interrupt. Wirte 1 to clear
-#define S_UART_INT_TX_OVERRUN        (0x01ul << 2)       // TX overrun interrupt. Write 1 to clear
-#define S_UART_INT_RX                (0x01ul << 1)       // RX interrupt. Write 1 to clear
-#define S_UART_INT_TX                (0x01ul << 0)       // TX interrupt. Write 1 to clear
-
-/******************************************************************************/
-/*                                                                            */
-/*                          Analog Digital Register                           */
-/*                                                                            */
-/******************************************************************************/
-
-/*********************** Bit definition for ADC_CTR     ***********************/
-//#define ADC_CTR_SAMSEL_ABNORMAL           (0x0ul)	  // Abnormal Operation
-//#define ADC_CTR_SAMSEL_NORMAL             (0x1ul)       // Normal Operation
-#define ADC_CTR_PWD_NRMOP                 (0x1ul)  // Active Operation
-#define ADC_CTR_PWD_PD                    (0x3ul)  // Power down
-/*********************** Bit definition for ADC_CHSEL   ***********************/
-#define ADC_CHSEL_CH0                     (0x0ul)       // Channel 0
-#define ADC_CHSEL_CH1                     (0x1ul)       // Channel 1
-#define ADC_CHSEL_CH2                     (0x2ul)       // Channel 2
-#define ADC_CHSEL_CH3                     (0x3ul)       // Channel 3
-#define ADC_CHSEL_CH4                     (0x4ul)       // Channel 4
-#define ADC_CHSEL_CH5                     (0x5ul)       // Channel 5
-#define ADC_CHSEL_CH6                     (0x6ul)       // Channel 6
-#define ADC_CHSEL_CH7                     (0x7ul)       // Channel 7
-#define ADC_CHSEL_CH15                   (0xful)        // LDO output(1.5V)
-/*********************** Bit definition for ADC_START   ***********************/
-#define ADC_START_START                   (0x1ul)       // ADC conversion start
-/*********************** Bit definition for ADC_DATA    ***********************/
-//ToDo (Readonly)
-
-/*********************** Bit definition for ADC_INT     ***********************/
-#define ADC_INT_MASK_DIS                  (0x0ul << 1)  // Interrupt disable
-#define ADC_INT_MASK_ENA                  (0x1ul << 1)  // Interrupt enable
-//ToDo (Readonly)
-
-/*********************** Bit definition for ADC_INTCLR  ***********************/
-#define ADC_INTCLEAR                      (0x1ul)       // ADC Interrupt clear
-
-#define W7500x_ADC_BASE                   (W7500x_APB2_BASE + 0x00000000UL)
-#define ADC                               ((ADC_TypeDef *) W7500x_ADC_BASE)
-
-/******************************************************************************/
-/*                                                                            */
-/*                                  Dual Timer                                */
-/*                                                                            */
-/******************************************************************************/
-
-/*********************** Bit definition for dualtimer   ***********************/
-#define DUALTIMER_TimerControl_TimerDIsable     0x0ul
-#define DUALTIMER_TimerControl_TimerEnable      0x1ul
-#define DUALTIMER_TimerControl_TimerEnable_Pos  7
-
-#define DUALTIMER_TimerControl_FreeRunning      0x0ul
-#define DUALTIMER_TimerControl_Periodic         0x1ul
-#define DUALTIMER_TimerControl_TimerMode_Pos    6
-
-#define DUALTIMER_TimerControl_IntDisable       0x0ul
-#define DUALTIMER_TimerControl_IntEnable        0x1ul
-#define DUALTIMER_TimerControl_IntEnable_Pos    5
-
-#define DUALTIMER_TimerControl_Pre_1            0x0ul
-#define DUALTIMER_TimerControl_Pre_16           0x1ul
-#define DUALTIMER_TimerControl_Pre_256          0x2ul
-#define DUALTIMER_TimerControl_Pre_Pos          2
-
-#define DUALTIMER_TimerControl_Size_16          0x0ul
-#define DUALTIMER_TimerControl_Size_32          0x1ul
-#define DUALTIMER_TimerControl_Size_Pos         1
-
-#define DUALTIMER_TimerControl_Wrapping         0x0ul
-#define DUALTIMER_TimerControl_OneShot          0x1ul
-#define DUALTIMER_TimerControl_OneShot_Pos      0
-
-/******************************************************************************/
-/*                                                                            */
-/*                              External Interrupt                            */
-/*                                                                            */
-/******************************************************************************/
-
-/****************   Bit definition for Px_IER   **************************/
-#define EXTI_Px_INTPOR_RISING_EDGE   (0x00ul << 0)
-#define EXTI_Px_INTPOR_FALLING_EDGE  (0x01ul << 0)
-#define EXTI_Px_INTEN_DISABLE        (0x00ul << 1)
-#define EXTI_Px_INTEN_ENABLE         (0x01ul << 1)
-
-/******************************************************************************/
-/*                                                                            */
-/*                             GPIO                                           */
-/*                                                                            */
-/******************************************************************************/
-
-/****************   Bit definition for Px_AFSR   **************************/
-#define Px_AFSR_AF0     (0x00ul)
-#define Px_AFSR_AF1     (0x01ul)
-#define Px_AFSR_AF2     (0x02ul)
-#define Px_AFSR_AF3     (0x03ul)
-/****************   Bit definition for Px_PCR   **************************/
-#define Px_PCR_PUPD_DOWN    (0x01ul << 0)       // Pull Down
-#define Px_PCR_PUPD_UP      (0x01ul << 1)       // Pull Up
-#define Px_PCR_DS_HIGH      (0x01ul << 2)       // High Driving
-#define Px_PCR_OD           (0x01ul << 3)       // Open Drain
-#define Px_PCR_IE           (0x01ul << 5)       // Input Buffer Enable
-#define Px_PCR_CS_SUMMIT    (0x01ul << 6)       // Use Summit Trigger Input Buffer
-
-/******************************************************************************/
-/*                                                                            */
-/*                                   I2C                                      */
-/*                                                                            */
-/******************************************************************************/
-
-/****************   Bit definition for I2C_CTR    **************************/
-#define I2C_CTR_COREEN        (0x01ul  << 7 )   //  0x80
-#define I2C_CTR_INTEREN       (0x01ul  << 6 )   //  0x40
-#define I2C_CTR_MODE          (0x01ul  << 5 )   //  0x20
-#define I2C_CTR_ADDR10        (0x01ul  << 4 )   //  0x10
-#define I2C_CTR_CTRRWN        (0x01ul  << 3 )   //  0x08
-#define I2C_CTR_CTEN          (0x01ul  << 2 )   //  0x04
-
-/****************   Bit definition for I2C_CMDR   **************************/
-#define I2C_CMDR_STA           (0x01ul  << 7 )    //    0x80
-#define I2C_CMDR_STO           (0x01ul  << 6 )    //    0x40
-#define I2C_CMDR_ACK           (0x01ul  << 5 )    //    0x20
-#define I2C_CMDR_RESTA         (0x01ul  << 4 )    //    0x10
-
-/****************   Bit definition for I2C_ISCR   **************************/
-#define I2C_ISCR_RST          (0x01ul  << 1)    //     0x01
-
-/****************   Bit definition for I2C_SR     **************************/
-#define I2C_SR_TX             (0x01ul  << 9 )   //  0x200
-#define I2C_SR_RX             (0x01ul  << 8 )   //  0x100
-#define I2C_SR_ACKT           (0x01ul  << 7 )   //  0x080
-#define I2C_SR_BT             (0x01ul  << 6 )   //  0x040
-#define I2C_SR_SA             (0x01ul  << 5 )   //  0x020
-#define I2C_SR_SB             (0x01ul  << 4 )   //  0x010
-#define I2C_SR_AL             (0x01ul  << 3 )   //  0x008
-#define I2C_SR_TO             (0x01ul  << 2 )   //  0x004
-#define I2C_SR_SRW            (0x01ul  << 1 )   //  0x002
-#define I2C_SR_ACKR           (0x01ul  << 0 )   //  0x001
-
-/****************   Bit definition for I2C_ISR    **************************/
-#define I2C_ISR_STAE            (0x01ul  << 4 )   //  0x010
-#define I2C_ISR_STOE            (0x01ul  << 3 )   //  0x008
-#define I2C_ISR_TOE             (0x01ul  << 2 )   //  0x004
-#define I2C_ISR_ACK_RXE         (0x01ul  << 1 )   //  0x002
-#define I2C_ISR_ACK_TXE         (0x01ul  << 0 )   //  0x001
-
-/****************   Bit definition for I2C_ISMR   **************************/
-#define I2C_ISR_STAEM            (0x01ul  << 4 )   //  0x010
-#define I2C_ISR_STOEM            (0x01ul  << 3 )   //  0x008
-#define I2C_ISR_TOEM             (0x01ul  << 2 )   //  0x004
-#define I2C_ISR_ACK_RXEM         (0x01ul  << 1 )   //  0x002
-#define I2C_ISR_ACK_TXEM         (0x01ul  << 0 )   //  0x001
-
-/******************************************************************************/
-/*                                                                            */
-/*                                   PWM                                      */
-/*                                                                            */
-/******************************************************************************/
-
-/******************************************************************************/
-/*                                                                            */
-/*                      Random number generator Register                      */
-/*                                                                            */
-/******************************************************************************/
-
-/*********************** Bit definition for RNG_RUN     ***********************/
-#define RNG_RUN_STOP                      (0x0ul)       // STOP RNG shift register
-#define RNG_RUN_RUN                       (0x1ul)       // RUN RNG shift register
-/*********************** Bit definition for RNG_SEED    ***********************/
-//ToDo
-
-/*********************** Bit definition for RNG_CLKSEL  ***********************/
-#define RNG_CLKSEL_RNGCLK                 (0x0ul)       // RNGCLK is source clock for rng shift register
-#define RNG_CLKSEL_APBCLK                 (0x1ul)       // APBCLK is source clock for rng shift register
-/*********************** Bit definition for RNG_ENABLE  ***********************/
-#define RNG_MANUAL_DISABLE                  (0x0ul)       // RNG disble
-#define RNG_MANUAL_ENABLE                   (0x1ul)       // RNG enable
-/*********************** Bit definition for RNG_RN      ***********************/
-//ToDo
-
-/*********************** Bit definition for RNG_POLY    ***********************/
-//ToDo
-
-
-
-#if !defined  (USE_HAL_DRIVER)
-#define USE_HAL_DRIVER
-#endif /* USE_HAL_DRIVER */
-
-
-
-#if defined (USE_HAL_DRIVER)
-    #include "W7500x_conf.h"
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  /* W7500x_H */
-
-
-
-/************************ (C) COPYRIGHT Wiznet *****END OF FILE****/
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/cmsis.h	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-/* mbed Microcontroller Library
- * A generic CMSIS include header
- *******************************************************************************
- * Copyright (c) 2014, STMicroelectronics
- * 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 STMicroelectronics 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 MBED_CMSIS_H
-#define MBED_CMSIS_H
-
-#include "W7500x.h"
-#include "cmsis_nvic.h"
-
-#endif
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/cmsis_nvic.c	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-/* mbed Microcontroller Library
- * CMSIS-style functionality to support dynamic vectors
- *******************************************************************************
- * Copyright (c) 2014, STMicroelectronics
- * 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 STMicroelectronics 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.
- *******************************************************************************
- */ 
-#include "cmsis_nvic.h"
-
-#define NVIC_RAM_VECTOR_ADDRESS   (0x20000000)  // Vectors positioned at start of RAM
-#define NVIC_FLASH_VECTOR_ADDRESS (0x00000000)  // Initial vector position in flash
-
-
-void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) {
-    static volatile uint32_t *vectors = (uint32_t *)NVIC_RAM_VECTOR_ADDRESS;
-
-    vectors[IRQn + 16] = vector;
-}
-
-uint32_t NVIC_GetVector(IRQn_Type IRQn) {
-    uint32_t *vectors = (uint32_t*)NVIC_RAM_VECTOR_ADDRESS;
-    // Return the vector
-    return vectors[IRQn + 16];
-}
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/cmsis_nvic.h	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/* mbed Microcontroller Library
- * CMSIS-style functionality to support dynamic vectors
- *******************************************************************************
- * Copyright (c) 2014, STMicroelectronics
- * 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 STMicroelectronics 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 MBED_CMSIS_NVIC_H
-#define MBED_CMSIS_NVIC_H
-
-#define NVIC_NUM_VECTORS      41
-#define NVIC_USER_IRQ_OFFSET  16
-
-#include "cmsis.h"
-
-#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_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/system_W7500x.c	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,104 +0,0 @@
-/**************************************************************************//**
- * @file     system_CMSDK_CM0.c
- * @brief    CMSIS Cortex-M0 Device Peripheral Access Layer Source File for
- *           Device CMSDK
- * @version  V3.01
- * @date     06. March 2012
- *
- * @note
- * Copyright (C) 2010-2012 ARM Limited. All rights reserved.
- *
- * @par
- * ARM Limited (ARM) is supplying this software for use with Cortex-M
- * processor based microcontrollers.  This file can be freely distributed
- * within development tools that are supporting such ARM based processors.
- *
- * @par
- * THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED
- * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
- * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
- * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
- *
- ******************************************************************************/
-
-
-#include "system_W7500x.h"
-
-
-/*----------------------------------------------------------------------------
-  DEFINES
- *----------------------------------------------------------------------------*/
-//#define SYSCLK_EXTERN_OSC
-
-
-
-/*----------------------------------------------------------------------------
-  Clock Variable definitions
- *----------------------------------------------------------------------------*/
-uint32_t SystemFrequency = 0;    /*!< System Clock Frequency (Core Clock)  */
-uint32_t SystemCoreClock = 0;    /*!< Processor Clock Frequency            */
-
-
-/*----------------------------------------------------------------------------
-  Clock functions
- *----------------------------------------------------------------------------*/
-void SystemCoreClockUpdate (void)            /* Get Core Clock Frequency      */
-{
-    uint8_t M,N,OD;
-
-#ifdef SYSCLK_EXTERN_OSC
-    CRG->PLL_IFSR = CRG_PLL_IFSR_OCLK;
-#else
-    CRG->PLL_IFSR = CRG_PLL_IFSR_RCLK;
-#endif    
-    OD = (1 << (CRG->PLL_FCR & 0x01)) * (1 << ((CRG->PLL_FCR & 0x02) >> 1));
-    N = (CRG->PLL_FCR >>  8 ) & 0x3F;
-    M = (CRG->PLL_FCR >> 16) & 0x3F;
-
-#ifdef SYSCLK_EXTERN_OSC
-    SystemCoreClock = EXTERN_XTAL * M / N * 1 / OD;
-#else
-    SystemCoreClock = INTERN_XTAL * M / N * 1 / OD;
-#endif
-}
-
-uint32_t GetSystemClock()
-{
-    return SystemCoreClock;
-}
-
-
-/**
- * Initialize the system
- *
- * @param  none
- * @return none
- *
- * @brief  Setup the microcontroller system.
- *         Initialize the System.
- */
-void SystemInit (void)
-{
-    uint8_t M,N,OD;
-
-    (*((volatile uint32_t *)(W7500x_TRIM_BGT))) = (*((volatile uint32_t *)(W7500x_INFO_BGT)));
-    (*((volatile uint32_t *)(W7500x_TRIM_OSC))) = (*((volatile uint32_t *)(W7500x_INFO_OSC)));
-
-    
-    // Set PLL input frequency
-#ifdef SYSCLK_EXTERN_OSC
-    CRG->PLL_IFSR = CRG_PLL_IFSR_OCLK;
-#else
-    CRG->PLL_IFSR = CRG_PLL_IFSR_RCLK;
-#endif    
-    OD = (1 << (CRG->PLL_FCR & 0x01)) * (1 << ((CRG->PLL_FCR & 0x02) >> 1));
-    N = (CRG->PLL_FCR >>  8 ) & 0x3F;
-    M = (CRG->PLL_FCR >> 16) & 0x3F;
-
-#ifdef SYSCLK_EXTERN_OSC
-    SystemCoreClock = EXTERN_XTAL * M / N * 1 / OD;
-#else
-    SystemCoreClock = INTERN_XTAL * M / N * 1 / OD;
-#endif
-}
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/system_W7500x.h	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-/**************************************************************************//**
- * @file     system_W7500x.h
- * @brief    CMSIS Cortex-M# Device Peripheral Access Layer Header File for
- *           Device W7500x
- * @version  V3.10
- * @date     23. November 2012
- *
- * @note
- *
- ******************************************************************************/
-/* Copyright (c) 2012 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_W7500x_H   /* ToDo: replace '<Device>' with your device name */
-#define SYSTEM_W7500x_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "W7500x.h"
-
-extern uint32_t SystemCoreClock;     /*!< System Clock Frequency (Core Clock)  */
-extern uint32_t GetSystemClock(void);    /*!< Get System Clock Frequency */
-
-
-/**
- * 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);
-
-/*----------------------------------------------------------------------------
-  Define clocks
- *----------------------------------------------------------------------------*/
-#define EXTERN_XTAL     (8000000UL)     /* External Oscillator Frequency        */
-#define INTERN_XTAL     (8000000UL)     /* Internal Oscillator Frequency         */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* SYSTEM_W7500x_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x.h	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,1191 @@
+/**************************************************************************//**
+ * @file     W7500x.h
+ * @brief    CMSIS Cortex-M0 Core Peripheral Access Layer Header File for
+ *           Device W7500x
+ * @version  V3.01
+ * @date     06. March 2012
+ *
+ * @note
+ * Copyright (C) 2010-2012 ARM Limited. All rights reserved.
+ *
+ * @par
+ * ARM Limited (ARM) is supplying this software for use with Cortex-M
+ * processor based microcontrollers.  This file can be freely distributed
+ * within development tools that are supporting such ARM based processors.
+ *
+ * @par
+ * THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED
+ * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
+ * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
+ * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
+ *
+ ******************************************************************************/
+
+
+#ifndef W7500x_H
+#define W7500x_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/** @addtogroup W7500x_Definitions W7500x Definitions
+  This file defines all structures and symbols for W7500x:
+    - registers and bitfields
+    - peripheral base address
+    - peripheral ID
+    - Peripheral definitions
+  @{
+*/
+
+
+/******************************************************************************/
+/*                Processor and Core Peripherals                              */
+/******************************************************************************/
+/** @addtogroup W7500x_CMSIS Device CMSIS Definitions
+  Configuration of the Cortex-M0 Processor and Core Peripherals
+  @{
+*/
+
+/*
+ * ==========================================================================
+ * ---------- Interrupt Number Definition -----------------------------------
+ * ==========================================================================
+ */
+
+typedef enum IRQn
+{
+/******  Cortex-M0 Processor Exceptions Numbers **************************************************/
+
+/* 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               */
+/******  W7500x Specific Interrupt Numbers *********************************************************/
+  SSP0_IRQn                    = 0,        /*!< SSP 0 Interrupt                                   */ 
+  SSP1_IRQn                    = 1,        /*!< SSP 1 Interrupt                                   */ 
+  UART0_IRQn                   = 2,        /*!< UART 0 Interrupt                                  */
+  UART1_IRQn                   = 3,        /*!< UART 1 Interrupt                                  */
+  UART2_IRQn                   = 4,        /*!< UART 2 Interrupt                                  */
+  I2C0_IRQn                    = 5,        /*!< I2C 0 Interrupt                                   */ 
+  I2C1_IRQn                    = 6,        /*!< I2C 1 Interrupt                                   */ 
+  PORT0_IRQn                   = 7,        /*!< Port 1 combined Interrupt                         */  
+  PORT1_IRQn                   = 8,        /*!< Port 2 combined Interrupt                         */  
+  PORT2_IRQn                   = 9,        /*!< Port 2 combined Interrupt                         */  
+  PORT3_IRQn                   = 10,       /*!< Port 2 combined Interrupt                         */  
+  DMA_IRQn                     = 11,       /*!< DMA combined Interrupt                            */   
+  DUALTIMER0_IRQn              = 12,       /*!< Dual Timer 0 Interrupt                            */
+  DUALTIMER1_IRQn              = 13,       /*!< Dual Timer 1 Interrupt                            */
+  PWM0_IRQn                    = 14,       /*!< PWM 0 Interrupt                                   */ 
+  PWM1_IRQn                    = 15,       /*!< PWM 1 Interrupt                                   */ 
+  PWM2_IRQn                    = 16,       /*!< PWM 2 Interrupt                                   */ 
+  PWM3_IRQn                    = 17,       /*!< PWM 3 Interrupt                                   */ 
+  PWM4_IRQn                    = 18,       /*!< PWM 4 Interrupt                                   */ 
+  PWM5_IRQn                    = 19,       /*!< PWM 5 Interrupt                                   */ 
+  PWM6_IRQn                    = 20,       /*!< PWM 6 Interrupt                                   */ 
+  PWM7_IRQn                    = 21,       /*!< PWM 7 Interrupt                                   */ 
+  RTC_IRQn                     = 22,       /*!< RTC Interrupt                                     */ 
+  ADC_IRQn                     = 23,       /*!< ADC Interrupt                                     */ 
+  WZTOE_IRQn                   = 24,       /*!< WZTOE Interrupt                                   */       
+  EXTI_IRQn                    = 25        /*!< EXTI Interrupt                                   */       
+} IRQn_Type;
+
+/*
+ * ==========================================================================
+ * ----------- Processor and Core Peripheral Section ------------------------
+ * ==========================================================================
+ */
+
+/* Configuration of the Cortex-M0 Processor and Core Peripherals */
+#define __CM0_REV                 0x0000    /*!< Core Revision r0p0                               */
+#define __NVIC_PRIO_BITS          2         /*!< Number of Bits used for Priority Levels          */
+#define __Vendor_SysTickConfig    0         /*!< Set to 1 if different SysTick Config is used     */
+#define __MPU_PRESENT             0         /*!< MPU present or not                               */
+
+/*@}*/ /* end of group W7500x_CMSIS */
+
+
+#include "core_cm0.h"                    /* Cortex-M0 processor and core peripherals           */
+#include "system_W7500x.h"               /* W7500x System include file                          */
+
+
+/** @addtogroup Exported_types
+  * @{
+  */  
+
+typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;
+typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
+#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))
+
+typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;
+
+
+
+
+/**
+  * @}
+  */
+
+
+
+
+/** @addtogroup Peripheral_registers_structures
+  * @{
+  */   
+
+/**
+  * @brief Clock Reset Generator
+  */
+typedef struct
+{
+  __IO  uint32_t  OSC_PDR;            /*!< Oscillator power down register,               Address offset : 0x00 */
+        uint32_t  RESERVED0[3];
+  __IO  uint32_t  PLL_PDR;            /*!< PLL power down register,                      Address offset : 0x10 */
+  __IO  uint32_t  PLL_FCR;            /*!< PLL frequency calculating register,           Address offset : 0x14 */
+  __IO  uint32_t  PLL_OER;            /*!< PLL output enable register,                   Address offset : 0x18 */
+  __IO  uint32_t  PLL_BPR;            /*!< PLL bypass register,                          Address offset : 0x1c */     
+  __IO  uint32_t  PLL_IFSR;           /*!< PLL input frequency select register,          Address offset : 0x20 */     
+        uint32_t  RESERVED1[3];
+  __IO  uint32_t  FCLK_SSR;           /*!< FCLK source select register,                  Address offset : 0x30 */     
+  __IO  uint32_t  FCLK_PVSR;          /*!< FCLK prescale value select register,          Address offset : 0x34 */     
+        uint32_t  RESERVED2[2];
+  __IO  uint32_t  SSPCLK_SSR;         /*!< SSPCLK source select register,                Address offset : 0x40 */     
+  __IO  uint32_t  SSPCLK_PVSR;        /*!< SSPCLK prescale value select register,        Address offset : 0x44 */     
+        uint32_t  RESERVED3[6];
+  __IO  uint32_t  ADCCLK_SSR;         /*!< ADCCLK source select register,                Address offset : 0x60 */     
+  __IO  uint32_t  ADCCLK_PVSR;        /*!< ADCCLK prescale value select register,        Address offset : 0x64 */     
+        uint32_t  RESERVED4[2];
+  __IO  uint32_t  TIMER0CLK_SSR;      /*!< TIMER0CLK source select register,             Address offset : 0x70 */     
+  __IO  uint32_t  TIMER0CLK_PVSR;     /*!< TIMER0CLK prescale value select register,     Address offset : 0x74 */     
+        uint32_t  RESERVED5[2];
+  __IO  uint32_t  TIMER1CLK_SSR;      /*!< TIMER1CLK source select register,             Address offset : 0x80 */     
+  __IO  uint32_t  TIMER1CLK_PVSR;     /*!< TIMER1CLK prescale value select register,     Address offset : 0x84 */     
+        uint32_t  RESERVED6[10];
+  __IO  uint32_t  PWM0CLK_SSR;        /*!< PWM0CLK source select register,               Address offset : 0xb0 */     
+  __IO  uint32_t  PWM0CLK_PVSR;       /*!< PWM0CLK prescale value select register,       Address offset : 0xb4 */     
+        uint32_t  RESERVED7[2];
+  __IO  uint32_t  PWM1CLK_SSR;        /*!< PWM1CLK source select register,               Address offset : 0xc0 */     
+  __IO  uint32_t  PWM1CLK_PVSR;       /*!< PWM1CLK prescale value select register,       Address offset : 0xc4 */     
+        uint32_t  RESERVED8[2];
+  __IO  uint32_t  PWM2CLK_SSR;        /*!< PWM2CLK source select register,               Address offset : 0xd0 */     
+  __IO  uint32_t  PWM2CLK_PVSR;       /*!< PWM2CLK prescale value select register,       Address offset : 0xd4 */     
+        uint32_t  RESERVED9[2];
+  __IO  uint32_t  PWM3CLK_SSR;        /*!< PWM3CLK source select register,               Address offset : 0xe0 */     
+  __IO  uint32_t  PWM3CLK_PVSR;       /*!< PWM3CLK prescale value select register,       Address offset : 0xe4 */     
+        uint32_t  RESERVED10[2];
+  __IO  uint32_t  PWM4CLK_SSR;        /*!< PWM4CLK source select register,               Address offset : 0xf0 */     
+  __IO  uint32_t  PWM4CLK_PVSR;       /*!< PWM4CLK prescale value select register,       Address offset : 0xf4 */     
+        uint32_t  RESERVED11[2];
+  __IO  uint32_t  PWM5CLK_SSR;        /*!< PWM5CLK source select register,               Address offset : 0x100 */     
+  __IO  uint32_t  PWM5LK_PVSR;        /*!< PWM5CLK prescale value select register,       Address offset : 0x104 */     
+        uint32_t  RESERVED12[2];
+  __IO  uint32_t  PWM6CLK_SSR;        /*!< PWM6CLK source select register,               Address offset : 0x110 */     
+  __IO  uint32_t  PWM6CLK_PVSR;       /*!< PWM6CLK prescale value select register,       Address offset : 0x114 */     
+        uint32_t  RESERVED13[2];
+  __IO  uint32_t  PWM7CLK_SSR;        /*!< PWM7CLK source select register,               Address offset : 0x120 */     
+  __IO  uint32_t  PWM7CLK_PVSR;       /*!< PWM7CLK prescale value select register,       Address offset : 0x124 */     
+        uint32_t  RESERVED14[2];
+  __IO  uint32_t  RTC_HS_SSR;         /*!< RTC High Speed source select register,             Address offset : 0x130 */     
+  __IO  uint32_t  RTC_HS_PVSR;        /*!< RTC High Speed prescale value select register,     Address offset : 0x134 */     
+        uint32_t  RESERVED15;
+  __IO  uint32_t  RTC_SSR;            /*!< RTC source select register,                        Address offset : 0x13c */
+
+  __IO  uint32_t  WDOGCLK_HS_SSR;     /*!< WDOGCLK High Speed source select register,         Address offset : 0x140 */     
+  __IO  uint32_t  WDOGCLK_HS_PVSR;    /*!< WDOGCLK High Speed prescale value select register, Address offset : 0x144 */     
+        uint32_t  RESERVED16;
+  __IO  uint32_t  WDOGCLK_SSR;        /*!< WDOGCLK source select register,               Address offset : 0x14c */
+
+  __IO  uint32_t  UARTCLK_SSR;        /*!< UARTCLK source select register,               Address offset : 0x150 */     
+  __IO  uint32_t  UARTCLK_PVSR;       /*!< UARTCLK prescale value select register,       Address offset : 0x154 */     
+        uint32_t  RESERVED17[2];
+  __IO  uint32_t  MIICLK_ECR;         /*!< MII clock enable control register,            Address offset : 0x160 */     
+        uint32_t  RESERVED18[3];
+  __IO  uint32_t  MONCLK_SSR;         /*!< Monitoring clock source select I found Treasure was IoT Base Station in March.register,      Address offset : 0x170 */
+}CRG_TypeDef;
+
+
+/**
+  * @brief UART
+  */
+typedef struct
+{
+  __IO uint32_t DR;             /*!< Data,                              Address offset : 0x00 */
+ union {
+  __I  uint32_t RSR;            /*!< Receive Status,                    Address offset : 0x04 */  
+  __O  uint32_t ECR;            /*!< Error Clear,                       Address offset : 0x04 */
+  } STATUS;
+       uint32_t RESERVED0[4];
+  __IO uint32_t FR;             /*!< Flags,                             Address offset : 0x18 */
+       uint32_t RESERVED1;
+  __IO uint32_t ILPR;           /*!< IrDA Low-power Counter,            Address offset : 0x20 */                              
+  __IO uint32_t IBRD;           /*!< Integer Baud Rate,                 Address offset : 0x24 */
+  __IO uint32_t FBRD;           /*!< Fractional Baud Rate,              Address offset : 0x28 */
+  __IO uint32_t LCR_H;          /*!< Line Control,                      Address offset : 0x2C */
+  __IO uint32_t CR;             /*!< Control,                           Address offset : 0x30 */
+  __IO uint32_t IFLS;           /*!< Interrupt FIFO Level Select,       Address offset : 0x34 */
+  __IO uint32_t IMSC;           /*!< Interrupt Mask Set / Clear,        Address offset : 0x38 */
+  __IO uint32_t RIS;            /*!< Raw Interrupt Status ,             Address offset : 0x3C */
+  __IO uint32_t MIS;            /*!< Masked Interrupt Status ,          Address offset : 0x40 */
+  __O  uint32_t ICR;            /*!< Interrupt Clear,                   Address offset : 0x44 */
+  __IO uint32_t DMACR;          /*!< DMA Control,                       Address offset : 0x48 */
+} UART_TypeDef;
+
+
+/**
+  * @brief Simple UART
+  */
+typedef struct
+{
+  __IO   uint32_t  DATA;          /*!< Offset: 0x000 Data Register    (R/W) */
+  __IO   uint32_t  STATE;         /*!< Offset: 0x004 Status Register  (R/W) */
+  __IO   uint32_t  CTRL;          /*!< Offset: 0x008 Control Register (R/W) */
+  union {
+    __I    uint32_t  STATUS;   /*!< Offset: 0x00C Interrupt Status Register (R/ ) */
+    __O    uint32_t  CLEAR;    /*!< Offset: 0x00C Interrupt Clear Register ( /W) */
+    }INT;
+  __IO   uint32_t  BAUDDIV;       /*!< Offset: 0x010 Baudrate Divider Register (R/W) */
+
+} S_UART_TypeDef;
+
+/**
+  * @brief Analog Digital Converter
+  */
+
+typedef struct
+{
+  __IO  uint32_t  ADC_CTR;          /* ADC control register,                    Address offset : 0x000 */
+  __IO  uint32_t  ADC_CHSEL;        /* ADC channel select register,             Address offset : 0x004 */
+  __IO  uint32_t  ADC_START;        /* ADC start register,                      Address offset : 0x008 */
+  __I   uint32_t  ADC_DATA;         /* ADC conversion data register,            Address offset : 0x00c */
+  __IO  uint32_t  ADC_INT;          /* ADC interrupt register,                  Address offset : 0x010 */
+        uint32_t  RESERVED0[2];
+  __IO  uint32_t  ADC_INTCLR;       /* ADC interrupt clear register,            Address offset : 0x01c */
+}ADC_TypeDef;
+
+/**
+  * @brief dualtimer
+  */
+typedef struct
+{
+  __IO uint32_t TimerLoad;    // <h> Timer Load </h>
+  __I  uint32_t TimerValue;   // <h> Timer Counter Current Value <r></h>
+  __IO uint32_t TimerControl; // <h> 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  uint32_t TimerIntClr;  // <h> Timer Interrupt Clear <w></h>
+  __I  uint32_t TimerRIS;     // <h> Timer Raw Interrupt Status <r></h>
+  __I  uint32_t TimerMIS;     // <h> Timer Masked Interrupt Status <r></h>
+  __IO uint32_t TimerBGLoad;  // <h> Background Load Register </h>
+} DUALTIMER_TypeDef;
+
+/**
+  * @brief GPIO
+  */
+typedef struct
+{
+  __IO   uint32_t  DATA;            /* DATA Register (R/W),                        offset : 0x000 */
+  __IO   uint32_t  DATAOUT;         /* Data Output Latch Register (R/W),           offset : 0x004 */
+         uint32_t  RESERVED0[2];
+  __IO   uint32_t  OUTENSET;        /* Output Enable Set Register  (R/W)           offset : 0x010 */
+  __IO   uint32_t  OUTENCLR;        /* Output Enable Clear Register  (R/W)         offset : 0x014 */
+  __IO   uint32_t  RESERVED1;       /* Alternate Function Set Register  (R/W)      offset : 0x018 */
+  __IO   uint32_t  RESERVED2;       /* Alternate Function Clear Register  (R/W)    offset : 0x01C */
+  __IO   uint32_t  INTENSET;        /* Interrupt Enable Set Register  (R/W)        offset : 0x020 */
+  __IO   uint32_t  INTENCLR;        /* Interrupt Enable Clear Register  (R/W)      offset : 0x024 */
+  __IO   uint32_t  INTTYPESET;      /* Interrupt Type Set Register  (R/W)          offset : 0x028 */
+  __IO   uint32_t  INTTYPECLR;      /* Interrupt Type Clear Register  (R/W)        offset : 0x02C */
+  __IO   uint32_t  INTPOLSET;       /* Interrupt Polarity Set Register  (R/W)      offset : 0x030 */
+  __IO   uint32_t  INTPOLCLR;       /* Interrupt Polarity Clear Register  (R/W)    offset : 0x034 */
+  union {
+    __I    uint32_t  INTSTATUS;     /* Interrupt Status Register (R/ )             offset : 0x038 */
+    __O    uint32_t  INTCLEAR;      /* Interrupt Clear Register ( /W)              offset : 0x038 */
+    }Interrupt;
+         uint32_t RESERVED3[241];
+  __IO   uint32_t LB_MASKED[256];   /* Lower byte Masked Access Register (R/W)     offset : 0x400 - 0x7FC  */
+  __IO   uint32_t UB_MASKED[256];   /* Upper byte Masked Access Register (R/W)     offset : 0x800 - 0xBFC  */
+} GPIO_TypeDef;
+
+typedef struct
+{
+  __IO  uint32_t  Port[16]; /* Port_00,      offset : 0x00 */
+                            /* Port_01,      offset : 0x04 */
+                            /* Port_02,      offset : 0x08 */
+                            /* Port_03,      offset : 0x0C */
+                            /* Port_04,      offset : 0x10 */
+                            /* Port_05,      offset : 0x14 */
+                            /* Port_06,      offset : 0x18 */
+                            /* Port_07,      offset : 0x1C */
+                            /* Port_08,      offset : 0x20 */
+                            /* Port_09,      offset : 0x24 */
+                            /* Port_10,      offset : 0x28 */
+                            /* Port_11,      offset : 0x2C */
+                            /* Port_12,      offset : 0x30 */
+                            /* Port_13,      offset : 0x34 */
+                            /* Port_14,      offset : 0x38 */
+                            /* Port_15,      offset : 0x3C */
+} P_Port_Def;
+
+typedef struct
+{
+  __IO  uint32_t  Port[5];  /* Port_00,      offset : 0x00 */
+                            /* Port_01,      offset : 0x04 */
+                            /* Port_02,      offset : 0x08 */
+                            /* Port_03,      offset : 0x0C */
+                            /* Port_04,      offset : 0x10 */
+} P_Port_D_Def;
+
+/**
+  * @brief  I2C Register structure definition
+  */
+typedef struct
+{
+    __IO uint32_t PRER;              //0x00
+    __IO uint32_t CTR;              //0x04
+    __IO uint32_t CMDR;              //0x08
+    __I  uint32_t SR;               //0x0C
+    __IO uint32_t TSR;               //0x10
+    __IO uint32_t SADDR;            //0x14
+    __IO uint32_t TXR;               //0x18
+    __I  uint32_t RXR;               //0x1C
+    __I  uint32_t ISR;              //0x20
+    __IO uint32_t ISCR;             //0x24
+    __IO uint32_t ISMR;             //0x28
+}I2C_TypeDef;
+
+/**
+ * @brief PWM Register structure definition
+ */
+typedef struct
+{
+    __IO    uint32_t    IER;    //Interrupt enable register
+                                //   <7>   IE7 : Channel 7 interrupt enable <R/W>
+                                //   <6>   IE6 : Channel 6 interrupt enable <R/W>
+                                //   <5>   IE5 : Channel 5 interrupt enable <R/W>
+                                //   <4>   IE4 : Channel 4 interrupt enable <R/W>
+                                //   <3>   IE3 : Channel 3 interrupt enable <R/W>
+                                //   <2>   IE2 : Channel 2 interrupt enable <R/W>
+                                //   <1>   IE1 : Channel 1 interrupt enable <R/W>
+                                //   <0>   IE0 : Channel 0 interrupt enable <R/W>
+
+    __IO    uint32_t    SSR;    //Start Stop register
+                                //   <7>   SS7 : Channel 7 TC start or stop <R/W>
+                                //   <6>   SS6 : Channel 6 TC start or stop <R/W>
+                                //   <5>   SS5 : Channel 5 TC start or stop <R/W>
+                                //   <4>   SS4 : Channel 4 TC start or stop <R/W>
+                                //   <3>   SS3 : Channel 3 TC start or stop <R/W>
+                                //   <2>   SS2 : Channel 2 TC start or stop <R/W>
+                                //   <1>   SS1 : Channel 1 TC start or stop <R/W>
+                                //   <0>   SS0 : Channel 0 TC start or stop <R/W>
+
+    __IO    uint32_t    PSR;    //Pause register
+                                //   <7>   PS7 : Channel 7 TC pasue <R/W>
+                                //   <6>   PS6 : Channel 6 TC pasue <R/W>
+                                //   <5>   PS5 : Channel 5 TC pasue <R/W>
+                                //   <4>   PS4 : Channel 4 TC pasue <R/W>
+                                //   <3>   PS3 : Channel 3 TC pasue <R/W>
+                                //   <2>   PS2 : Channel 2 TC pasue <R/W>
+                                //   <1>   PS1 : Channel 1 TC pasue <R/W>
+                                //   <0>   PS0 : Channel 0 TC pasue <R/W>
+} PWM_TypeDef;
+
+typedef struct
+{
+    __I     uint32_t    IR;     //Interrupt register
+                                //   <2>   CI : Capture interrupt <R>
+                                //   <1>   OI : Overflow interrupt <R>
+                                //   <0>   MI : Match interrupt <R>
+
+    __IO    uint32_t    IER;    //Interrupt enable register
+                                //   <2>   CIE : Capture interrupt enable <R/W>
+                                //   <1>   OIE : Overflow interrupt enable <R/W>
+                                //   <0>   MIE : Match interrupt enable <R/W>
+
+    __O     uint32_t    ICR;    //Interrupt clear register
+                                //   <2>   CIC : Capture interrupt clear <W>
+                                //   <1>   OIC : Overflow interrupt clear <W>
+                                //   <0>   MIC : Match interrupt clear <W>
+
+    __I     uint32_t    TCR;    //Timer/Counter register
+                                //   <0..31>   TCR : Timer/Counter register <R>
+
+    __I     uint32_t    PCR;    //Prescale counter register
+                                //   <0..5>   PCR : Prescale Counter register <R>
+
+    __IO    uint32_t    PR;     //Prescale register
+                                //   <0..5>   PR : prescale register <R/W>
+
+    __IO    uint32_t    MR;     //Match register
+                                //   <0..31>   MR : Match register <R/W>
+
+    __IO    uint32_t    LR;     //Limit register
+                                //   <0..31>   LR : Limit register <R/W>
+    __IO    uint32_t    UDMR;   //Up-Down mode register
+                                //   <0>   UDM : Up-down mode <R/W>
+
+    __IO    uint32_t    TCMR;   //Timer/Counter mode register
+                                //   <0>   TCM : Timer/Counter mode <R/W>
+
+    __IO    uint32_t    PEEER;  //PWM output enable and external input enable register
+                                //   <0..1>   PEEE : PWM output enable and external input enable <R/W>
+
+    __IO    uint32_t    CMR;    //Capture mode register
+                                //   <0>   CM : Capture mode <R/W>
+
+    __IO    uint32_t    CR;     //Capture register
+                                //   <0..31>   CR : Capture register <R>
+
+    __IO    uint32_t    PDMR;   //Periodic mode register
+                                //   <0>   PDM : Periodic mode <R/W>
+
+    __IO    uint32_t    DZER;   //Dead-zone enable register
+                                //   <0>   DZE : Dead-zone enable <R/W>
+
+    __IO    uint32_t    DZCR;   //Dead-zone counter register
+                                //   <0..9>   DZC : Dead-zone counter <R/W>
+} PWM_CHn_TypeDef;
+
+typedef struct
+{
+    __IO uint32_t    PWM_CHn_PR;   //Prescale register
+                                   //   <0..5>   PR : prescale register <R/W>
+    __IO uint32_t    PWM_CHn_MR;   //Match register
+                                   //   <0..31>   MR : Match register <R/W>
+    __IO uint32_t    PWM_CHn_LR;   //Limit register
+                                   //   <0..31>   LR : Limit register <R/W>
+    __IO uint32_t    PWM_CHn_UDMR; //Up-Down mode register
+                                   //   <0>   UDM : Up-down mode <R/W>
+    __IO uint32_t    PWM_CHn_PDMR; //Periodic mode register
+                                   //   <0>   PDM : Periodic mode <R/W>
+}PWM_TimerModeInitTypeDef;
+
+typedef struct
+{
+    __IO uint32_t    PWM_CHn_PR;   //Prescale register
+                                   //   <0..5>   PR : prescale register <R/W>
+    __IO uint32_t    PWM_CHn_MR;   //Match register
+                                   //   <0..31>   MR : Match register <R/W>
+    __IO uint32_t    PWM_CHn_LR;   //Limit register
+                                   //   <0..31>   LR : Limit register <R/W>
+    __IO uint32_t    PWM_CHn_UDMR; //Up-Down mode register
+                                   //   <0>   UDM : Up-down mode <R/W>
+    __IO uint32_t    PWM_CHn_PDMR; //Periodic mode register
+                                   //   <0>   PDM : Peiodic mode <R/W>
+    __IO uint32_t    PWM_CHn_CMR;  //Capture mode register
+                                   //   <0>   CM : Capture mode <R/W>
+}PWM_CaptureModeInitTypeDef;
+
+typedef struct
+{
+    __IO uint32_t    PWM_CHn_MR;
+    __IO uint32_t    PWM_CHn_LR;
+    __IO uint32_t    PWM_CHn_UDMR;
+    __IO uint32_t    PWM_CHn_PDMR;
+    __IO uint32_t    PWM_CHn_TCMR;
+}PWM_CounterModeInitTypeDef;
+
+
+/**
+  * @brief Random Number generator
+  */
+typedef struct
+{
+  __IO  uint32_t  RNG_RUN;          /* RNG run register,                    Address offset : 0x000 */
+  __IO  uint32_t  RNG_SEED;         /* RNG seed value register,             Address offset : 0x004 */
+  __IO  uint32_t  RNG_CLKSEL;       /* RNG Clock source select register,    Address offset : 0x008 */
+  __IO  uint32_t  RNG_MODE;         /* RNG MODE select register,            Address offset : 0x00c */
+  __I   uint32_t  RNG_RN;           /* RNG random number value register,    Address offset : 0x010 */
+  __IO  uint32_t  RNG_POLY;         /* RNG polynomial register,             Address offset : 0x014 */
+}RNG_TypeDef;
+
+/**
+  * @brief Serial Peripheral Interface
+  */
+typedef struct
+{
+  __IO uint32_t CR0;
+  __IO uint32_t CR1;
+  __IO uint32_t DR;
+  __IO uint32_t SR;
+  __IO uint32_t CPSR;
+  __IO uint32_t IMSC;
+  __IO uint32_t RIS;
+  __IO uint32_t MIS;
+  __IO uint32_t ICR;
+  __IO uint32_t DMACR;
+} SSP_TypeDef;
+
+typedef struct
+{
+    __IO    uint32_t  WatchdogLoad;         // <h> Watchdog Load Register </h>
+    __I     uint32_t  WatchdogValue;        // <h> Watchdog Value Register </h>
+    __IO    uint32_t  WatchdogControl;      // <h> Watchdog Control Register
+                                            //   <o.1>    RESEN: Reset enable
+                                            //   <o.0>    INTEN: Interrupt enable
+                                            // </h>
+    __O     uint32_t  WatchdogIntClr;       // <h> Watchdog Clear Interrupt Register </h>
+    __I     uint32_t  WatchdogRIS;          // <h> Watchdog Raw Interrupt Status Register </h>
+    __I     uint32_t  WatchdogMIS;          // <h> Watchdog Interrupt Status Register </h>
+            uint32_t  RESERVED[762];
+    __IO    uint32_t  WatchdogLock;         // <h> Watchdog Lock Register </h>
+}WATCHDOG_TypeDef;
+
+/** @addtogroup Peripheral_memory_map
+  * @{
+  */
+
+/* Peripheral and SRAM base address */
+#define W7500x_FLASH_BASE        (0x00000000UL)  /*!< (FLASH     ) Base Address */
+#define W7500x_SRAM_BASE         (0x20000000UL)  /*!< (SRAM      ) Base Address */
+#define W7500x_PERIPH_BASE       (0x40000000UL)  /*!< (Peripheral) Base Address */
+
+#define W7500x_RAM_BASE          (0x20000000UL)
+#define W7500x_APB1_BASE         (0x40000000UL)
+#define W7500x_APB2_BASE         (0x41000000UL)
+#define W7500x_AHB_BASE          (0x42000000UL)
+
+#define W7500x_UART0_BASE        (W7500x_APB1_BASE + 0x0000C000UL)
+#define W7500x_UART1_BASE        (W7500x_APB1_BASE + 0x0000D000UL)
+#define W7500x_UART2_BASE        (W7500x_APB1_BASE + 0x00006000UL)
+
+#define W7500x_CRG_BASE          (W7500x_APB2_BASE + 0x00001000UL)
+#define W7500x_ADC_BASE          (W7500x_APB2_BASE + 0x00000000UL)
+
+#define W7500x_INFO_BGT          (0x0003FDB8)
+#define W7500x_INFO_OSC          (0x0003FDBC)
+
+#define W7500x_TRIM_BGT          (0x41001210)
+#define W7500x_TRIM_OSC          (0x41001004)
+
+#define W7500x_DUALTIMER0_BASE   (W7500x_APB1_BASE + 0x00001000ul)
+#define W7500x_DUALTIMER1_BASE   (W7500x_APB1_BASE + 0x00002000ul)
+
+#define EXTI_Px_BASE            (W7500x_APB2_BASE + 0x00002200UL)
+
+#define GPIOA_BASE              (W7500x_AHB_BASE + 0x00000000UL)    // W7500x_AHB_BASE : 0x42000000UL
+#define GPIOB_BASE              (W7500x_AHB_BASE + 0x01000000UL)
+#define GPIOC_BASE              (W7500x_AHB_BASE + 0x02000000UL)
+#define GPIOD_BASE              (W7500x_AHB_BASE + 0x03000000UL)
+
+#define P_AFSR_BASE             (W7500x_APB2_BASE + 0x00002000UL)
+
+#define P_PCR_BASE              (W7500x_APB2_BASE + 0x00003000UL)
+
+#define I2C0_BASE               (W7500x_APB1_BASE + 0x8000)
+#define I2C1_BASE               (W7500x_APB1_BASE + 0x9000)
+
+#define W7500x_PWM_BASE         (W7500x_APB1_BASE + 0x00005000UL)
+
+#define W7500x_RNG_BASE         (W7500x_APB1_BASE + 0x00007000UL)
+
+#define SSP0_BASE 	          (0x4000A000)
+#define SSP1_BASE 	          (0x4000B000)
+
+#define W7500x_WATCHDOG_BASE    (W7500x_APB1_BASE + 0x0000UL)
+
+/**
+  * @}
+  */
+
+
+/** @addtogroup Peripheral_declaration
+  * @{
+  */  
+#define CRG               ((CRG_TypeDef *) W7500x_CRG_BASE)
+
+#define UART0             ((UART_TypeDef  *)   W7500x_UART0_BASE)
+#define UART1             ((UART_TypeDef  *)   W7500x_UART1_BASE)
+#define UART2             ((S_UART_TypeDef *)  W7500x_UART2_BASE)
+
+#define ADC               ((ADC_TypeDef *) W7500x_ADC_BASE)
+
+#define DUALTIMER0_0      ((DUALTIMER_TypeDef  *) (W7500x_DUALTIMER0_BASE) )
+#define DUALTIMER0_1      ((DUALTIMER_TypeDef  *) (W7500x_DUALTIMER0_BASE + 0x20ul))
+#define DUALTIMER1_0      ((DUALTIMER_TypeDef  *) (W7500x_DUALTIMER1_BASE) )
+#define DUALTIMER1_1      ((DUALTIMER_TypeDef  *) (W7500x_DUALTIMER1_BASE + 0x20ul))
+
+#define EXTI_PA         ((P_Port_Def *)   (EXTI_Px_BASE + 0x00000000UL))  /* PA_XX External interrupt Enable Register */
+#define EXTI_PB         ((P_Port_Def *)   (EXTI_Px_BASE + 0x00000040UL))  /* PB_XX External interrupt Enable Register */
+#define EXTI_PC         ((P_Port_Def *)   (EXTI_Px_BASE + 0x00000080UL))  /* PC_XX External interrupt Enable Register */
+#define EXTI_PD         ((P_Port_D_Def *) (EXTI_Px_BASE + 0x000000C0UL))  /* PD_XX External interrupt Enable Register */
+
+#define GPIOA   ((GPIO_TypeDef *) (GPIOA_BASE) )
+#define GPIOB   ((GPIO_TypeDef *) (GPIOB_BASE) )
+#define GPIOC   ((GPIO_TypeDef *) (GPIOC_BASE) )
+#define GPIOD   ((GPIO_TypeDef *) (GPIOD_BASE) )
+
+#define PA_AFSR ((P_Port_Def *)   (P_AFSR_BASE + 0x00000000UL))  /* PA_XX Pad Alternate Function Select Register */
+#define PB_AFSR ((P_Port_Def *)   (P_AFSR_BASE + 0x00000040UL))  /* PB_XX Pad Alternate Function Select Register */
+#define PC_AFSR ((P_Port_Def *)   (P_AFSR_BASE + 0x00000080UL))  /* PC_XX Pad Alternate Function Select Register */
+#define PD_AFSR ((P_Port_D_Def *) (P_AFSR_BASE + 0x000000C0UL))  /* PD_XX Pad Alternate Function Select Register */
+
+#define PA_PCR  ((P_Port_Def *)   (P_PCR_BASE + 0x00000000UL))   /* PA_XX Pad Control Register */
+#define PB_PCR  ((P_Port_Def *)   (P_PCR_BASE + 0x00000040UL))   /* PB_XX Pad Control Register */
+#define PC_PCR  ((P_Port_Def *)   (P_PCR_BASE + 0x00000080UL))   /* PC_XX Pad Control Register */
+#define PD_PCR  ((P_Port_D_Def *) (P_PCR_BASE + 0x000000C0UL))   /* PD_XX Pad Control Register */
+
+#define I2C0    ((I2C_TypeDef      *)  I2C0_BASE)
+#define I2C1    ((I2C_TypeDef      *)  I2C1_BASE)
+
+
+#define TIMCLKEN0_0                         *(uint32_t *)(W7500x_DUALTIMER0_BASE + 0x80ul)
+#define TIMCLKEN0_1                         *(uint32_t *)(W7500x_DUALTIMER0_BASE + 0xA0ul)
+#define TIMCLKEN1_0                         *(uint32_t *)(W7500x_DUALTIMER1_BASE + 0x80ul)
+#define TIMCLKEN1_1                         *(uint32_t *)(W7500x_DUALTIMER1_BASE + 0xA0ul)
+
+#define PWM                             ((PWM_TypeDef *)         (W7500x_PWM_BASE + 0x800UL ))
+#define PWM_CH0                         ((PWM_CHn_TypeDef *)     (W7500x_PWM_BASE))
+#define PWM_CH1                         ((PWM_CHn_TypeDef *)     (W7500x_PWM_BASE + 0x100UL))
+#define PWM_CH2                         ((PWM_CHn_TypeDef *)     (W7500x_PWM_BASE + 0x200UL))
+#define PWM_CH3                         ((PWM_CHn_TypeDef *)     (W7500x_PWM_BASE + 0x300UL))
+#define PWM_CH4                         ((PWM_CHn_TypeDef *)     (W7500x_PWM_BASE + 0x400UL))
+#define PWM_CH5                         ((PWM_CHn_TypeDef *)     (W7500x_PWM_BASE + 0x500UL))
+#define PWM_CH6                         ((PWM_CHn_TypeDef *)     (W7500x_PWM_BASE + 0x600UL))
+#define PWM_CH7                         ((PWM_CHn_TypeDef *)     (W7500x_PWM_BASE + 0x700UL))
+
+#define PWM_CH0_BASE                    (W7500x_PWM_BASE)
+#define PWM_CH1_BASE                    (W7500x_PWM_BASE + 0x100UL)
+#define PWM_CH2_BASE                    (W7500x_PWM_BASE + 0x200UL)
+#define PWM_CH3_BASE                    (W7500x_PWM_BASE + 0x300UL)
+#define PWM_CH4_BASE                    (W7500x_PWM_BASE + 0x400UL)
+#define PWM_CH5_BASE                    (W7500x_PWM_BASE + 0x500UL)
+#define PWM_CH6_BASE                    (W7500x_PWM_BASE + 0x600UL)
+#define PWM_CH7_BASE                    (W7500x_PWM_BASE + 0x700UL)
+
+#define RNG                               ((RNG_TypeDef *) W7500x_RNG_BASE)
+
+#define SSP0    ((SSP_TypeDef*)   (SSP0_BASE))
+#define SSP1    ((SSP_TypeDef*)   (SSP1_BASE))
+
+#define WATCHDOG                ((WATCHDOG_TypeDef  *) W7500x_WATCHDOG_BASE)
+
+/**
+  * @}
+  */
+
+
+
+/******************************************************************************/
+/*                                                                            */
+/*                  Clock Reset Generator                                     */
+/*                                                                            */
+/******************************************************************************/
+/****************   Bit definition for CRG_OSC_PDR   **************************/
+#define CRG_OSC_PDR_NRMLOP      (0x0ul)             // Normal Operation
+#define CRG_OSC_PDR_PD          (0x1ul)             // Power Down
+/****************   Bit definition for CRG_PLL_PDR   **************************/
+#define CRG_PLL_PDR_PD          (0x0ul)             // Power Down
+#define CRG_PLL_PDR_NRMLOP      (0x1ul)             // Normal Operation
+/****************   Bit definition for CRG_PLL_FCR   **************************/
+//ToDo
+/****************   Bit definition for CRG_PLL_OER   **************************/
+#define CRG_PLL_OER_DIS         (0x0ul)             // Clock out is disable
+#define CRG_PLL_OER_EN          (0x1ul)             // Clock out is enable
+/****************   Bit definition for CRG_PLL_BPR   **************************/
+#define CRG_PLL_BPR_DIS         (0x0ul)             // Bypass disable. Normal operation
+#define CRG_PLL_BPR_EN          (0x1ul)             // Bypass enable. Clock will be set to external clock
+/****************   Bit definition for CRG_PLL_IFSR  **************************/
+#define CRG_PLL_IFSR_RCLK       (0x0ul)             // Internal 8MHz RC oscillator clock(RCLK)
+#define CRG_PLL_IFSR_OCLK       (0x1ul)             // External oscillator clock (OCLK, 8MHz ~ 24MHz)
+/****************   Bit definition for CRG_FCLK_SSR  **************************/
+#define CRG_FCLK_SSR_MCLK       (0x01ul)            // 00,01 Output clock of PLL(MCLK)
+#define CRG_FCLK_SSR_RCLK       (0x02ul)            // Internal 8MHz RC oscillator clock(RCLK)
+#define CRG_FCLK_SSR_OCLK       (0x03ul)            // External oscillator clock(OCLK, 8MHz ~ 24MHz)
+/****************   Bit definition for CRG_FCLK_PVSR   **************************/
+#define CRG_FCLK_PVSR_DIV1      (0x00ul)            // 1/1 (bypass)
+#define CRG_FCLK_PVSR_DIV2      (0x01ul)            // 1/2
+#define CRG_FCLK_PVSR_DIV4      (0x02ul)            // 1/4
+#define CRG_FCLK_PVSR_DIV8      (0x03ul)            // 1/8
+/****************   Bit definition for CRG_SSPCLK_SSR   **************************/
+#define CRG_SSPCLK_SSR_DIS      (0x00ul)            // Disable clock
+#define CRG_SSPCLK_SSR_MCLK     (0x01ul)            // PLL output clock(MCLK)
+#define CRG_SSPCLK_SSR_RCLK     (0x02ul)            // Internal 8MHz RC oscillator clock(RCLK)
+#define CRG_SSPCLK_SSR_OCLK     (0x03ul)            // External oscillator clock(OCLK, 8MHz ~ 24MHz)
+/****************   Bit definition for CRG_SSPCLK_PVSR   **************************/
+#define CRG_SSPCLK_PVSR_DIV1    (0x00ul)            // 1/1 (bypass)
+#define CRG_SSPCLK_PVSR_DIV2    (0x01ul)            // 1/2
+#define CRG_SSPCLK_PVSR_DIV4    (0x02ul)            // 1/4
+#define CRG_SSPCLK_PVSR_DIV8    (0x03ul)            // 1/8
+/****************   Bit definition for CRG_ADCCLK_SSR   **************************/
+#define CRG_ADCCLK_SSR_DIS      (0x00ul)            // Disable clock
+#define CRG_ADCCLK_SSR_MCLK     (0x01ul)            // PLL output clock(MCLK)
+#define CRG_ADCCLK_SSR_RCLK     (0x02ul)            // Internal 8MHz RC oscillator clock(RCLK)
+#define CRG_ADCCLK_SSR_OCLK     (0x03ul)            // External oscillator clock(OCLK, 8MHz ~ 24MHz)
+/****************   Bit definition for CRG_ADCCLK_PVSR   **************************/
+#define CRG_ADCCLK_PVSR_DIV1    (0x00ul)            // 1/1 (bypass)
+#define CRG_ADCCLK_PVSR_DIV2    (0x01ul)            // 1/2
+#define CRG_ADCCLK_PVSR_DIV4    (0x02ul)            // 1/4
+#define CRG_ADCCLK_PVSR_DIV8    (0x03ul)            // 1/8
+/****************   Bit definition for CRG_TIMER0/1CLK_SSR   **************************/
+#define CRG_TIMERCLK_SSR_DIS      (0x00ul)            // Disable clock
+#define CRG_TIMERCLK_SSR_MCLK     (0x01ul)            // PLL output clock(MCLK)
+#define CRG_TIMERCLK_SSR_RCLK     (0x02ul)            // Internal 8MHz RC oscillator clock(RCLK)
+#define CRG_TIMERCLK_SSR_OCLK     (0x03ul)            // External oscillator clock(OCLK, 8MHz ~ 24MHz)
+/****************   Bit definition for CRG_TIMER0/1CLK_PVSR   **************************/
+#define CRG_TIMERCLK_PVSR_DIV1    (0x00ul)           // 1/1 (bypass)
+#define CRG_TIMERCLK_PVSR_DIV2    (0x01ul)           // 1/2
+#define CRG_TIMERCLK_PVSR_DIV4    (0x02ul)           // 1/4
+#define CRG_TIMERCLK_PVSR_DIV8    (0x03ul)           // 1/8
+#define CRG_TIMERCLK_PVSR_DIV16   (0x04ul)           // 1/16
+#define CRG_TIMERCLK_PVSR_DIV32   (0x05ul)           // 1/32
+#define CRG_TIMERCLK_PVSR_DIV64   (0x06ul)           // 1/64
+#define CRG_TIMERCLK_PVSR_DIV128  (0x07ul)           // 1/128
+/****************   Bit definition for CRG_PWMnCLK_SSR   **************************/
+#define CRG_PWMCLK_SSR_DIS      (0x00ul)            // Disable clock
+#define CRG_PWMCLK_SSR_MCLK     (0x01ul)            // PLL output clock(MCLK)
+#define CRG_PWMCLK_SSR_RCLK     (0x02ul)            // Internal 8MHz RC oscillator clock(RCLK)
+#define CRG_PWMCLK_SSR_OCLK     (0x03ul)            // External oscillator clock(OCLK, 8MHz ~ 24MHz)
+/****************   Bit definition for CRG_PWMnCLK_PVSR   **************************/
+#define CRG_PWMCLK_PVSR_DIV1    (0x00ul)           // 1/1 (bypass)
+#define CRG_PWMCLK_PVSR_DIV2    (0x01ul)           // 1/2
+#define CRG_PWMCLK_PVSR_DIV4    (0x02ul)           // 1/4
+#define CRG_PWMCLK_PVSR_DIV8    (0x03ul)           // 1/8
+#define CRG_PWMCLK_PVSR_DIV16   (0x04ul)           // 1/16
+#define CRG_PWMCLK_PVSR_DIV32   (0x05ul)           // 1/32
+#define CRG_PWMCLK_PVSR_DIV64   (0x06ul)           // 1/64
+#define CRG_PWMCLK_PVSR_DIV128  (0x07ul)           // 1/128
+/****************   Bit definition for CRG_RTC_HS_SSR   **************************/
+#define CRG_RTC_HS_SSR_DIS      (0x00ul)            // Disable clock
+#define CRG_RTC_HS_SSR_MCLK     (0x01ul)            // PLL output clock(MCLK)
+#define CRG_RTC_HS_SSR_RCLK     (0x02ul)            // Internal 8MHz RC oscillator clock(RCLK)
+#define CRG_RTC_HS_SSR_OCLK     (0x03ul)            // External oscillator clock(OCLK, 8MHz ~ 24MHz)
+/****************   Bit definition for CRG_RTC_HS_PVSR   **************************/
+#define CRG_RTC_HS_PVSR_DIV1    (0x00ul)           // 1/1 (bypass)
+#define CRG_RTC_HS_PVSR_DIV2    (0x01ul)           // 1/2
+#define CRG_RTC_HS_PVSR_DIV4    (0x02ul)           // 1/4
+#define CRG_RTC_HS_PVSR_DIV8    (0x03ul)           // 1/8
+#define CRG_RTC_HS_PVSR_DIV16   (0x04ul)           // 1/16
+#define CRG_RTC_HS_PVSR_DIV32   (0x05ul)           // 1/32
+#define CRG_RTC_HS_PVSR_DIV64   (0x06ul)           // 1/64
+#define CRG_RTC_HS_PVSR_DIV128  (0x07ul)           // 1/128
+/****************   Bit definition for CRG_RTC_SSR   **************************/
+#define CRG_RTC_SSR_HS          (0x00ul)            // RTCCLK HS(High Speed clock) 
+#define CRG_RTC_SSR_LW          (0x01ul)            // 32K_OSC_CLK(Low Speed external oscillator clock) 
+/****************   Bit definition for CRG_WDOGCLK_HS_SSR   **************************/
+#define CRG_WDOGCLK_HS_SSR_DIS      (0x00ul)        // Disable clock
+#define CRG_WDOGCLK_HS_SSR_MCLK     (0x01ul)        // PLL output clock(MCLK)
+#define CRG_WDOGCLK_HS_SSR_RCLK     (0x02ul)        // Internal 8MHz RC oscillator clock(RCLK)
+#define CRG_WDOGCLK_HS_SSR_OCLK     (0x03ul)        // External oscillator clock(OCLK, 8MHz ~ 24MHz)
+/****************   Bit definition for CRG_WDOGCLK_HS_PVSR   **************************/
+#define CRG_WDOGCLK_HS_PVSR_DIV1    (0x00ul)       // 1/1 (bypass)
+#define CRG_WDOGCLK_HS_PVSR_DIV2    (0x01ul)       // 1/2
+#define CRG_WDOGCLK_HS_PVSR_DIV4    (0x02ul)       // 1/4
+#define CRG_WDOGCLK_HS_PVSR_DIV8    (0x03ul)       // 1/8
+#define CRG_WDOGCLK_HS_PVSR_DIV16   (0x04ul)       // 1/16
+#define CRG_WDOGCLK_HS_PVSR_DIV32   (0x05ul)       // 1/32
+#define CRG_WDOGCLK_HS_PVSR_DIV64   (0x06ul)       // 1/64
+#define CRG_WDOGCLK_HS_PVSR_DIV128  (0x07ul)       // 1/128
+/****************   Bit definition for CRG_WDOGCLK_SSR   **************************/
+#define CRG_WDOGCLK_SSR_HS          (0x00ul)        // RTCCLK HS(High Speed clock) 
+#define CRG_WDOGCLK_SSR_LW          (0x01ul)        // 32K_OSC_CLK(Low Speed external oscillator clock) 
+/****************   Bit definition for CRG_UARTCLK_SSR   **************************/
+#define CRG_UARTCLK_SSR_DIS      (0x00ul)           // Disable clock
+#define CRG_UARTCLK_SSR_MCLK     (0x01ul)           // PLL output clock(MCLK)
+#define CRG_UARTCLK_SSR_RCLK     (0x02ul)           // Internal 8MHz RC oscillator clock(RCLK)
+#define CRG_UARTCLK_SSR_OCLK     (0x03ul)           // External oscillator clock(OCLK, 8MHz ~ 24MHz)
+/****************   Bit definition for CRG_UARTCLK_PVSR   **************************/
+#define CRG_UARTCLK_PVSR_DIV1    (0x00ul)           // 1/1 (bypass)
+#define CRG_UARTCLK_PVSR_DIV2    (0x01ul)           // 1/2
+#define CRG_UARTCLK_PVSR_DIV4    (0x02ul)           // 1/4
+#define CRG_UARTCLK_PVSR_DIV8    (0x03ul)           // 1/8
+/****************   Bit definition for CRG_MIICLK_ECR   **************************/
+#define CRG_MIICLK_ECR_EN_RXCLK  (0x01ul << 0)      // Enable MII_RCK and MII_RCK_N
+#define CRG_MIICLK_ECR_EN_TXCLK  (0x01ul << 1)      // Enable MII_TCK and MII_TCK_N
+/****************   Bit definition for CRG_MONCLK_SSR   **************************/
+#define CRG_MONCLK_SSR_MCLK      (0x00ul)        // PLL output clock (MCLK)
+#define CRG_MONCLK_SSR_FCLK      (0x01ul)        // FCLK
+#define CRG_MONCLK_SSR_RCLK      (0x02ul)        // Internal 8MHz RC oscillator clock(RCLK)
+#define CRG_MONCLK_SSR_OCLK      (0x03ul)        // External oscillator clock(OCLK, 8MHz ~ 24MHz)
+#define CRG_MONCLK_SSR_ADCCLK    (0x04ul)        // ADCCLK
+#define CRG_MONCLK_SSR_SSPCLK    (0x05ul)        // SSPCLK
+#define CRG_MONCLK_SSR_TIMCLK0   (0x06ul)        // TIMCLK0
+#define CRG_MONCLK_SSR_TIMCLK1   (0x07ul)        // TIMCLK1
+#define CRG_MONCLK_SSR_PWMCLK0   (0x08ul)        // PWMCLK0
+#define CRG_MONCLK_SSR_PWMCLK1   (0x09ul)        // PWMCLK1
+#define CRG_MONCLK_SSR_PWMCLK2   (0x0Aul)        // PWMCLK2
+#define CRG_MONCLK_SSR_PWMCLK3   (0x0Bul)        // PWMCLK3
+#define CRG_MONCLK_SSR_PWMCLK4   (0x0Cul)        // PWMCLK4
+#define CRG_MONCLK_SSR_PWMCLK5   (0x0Dul)        // PWMCLK5
+#define CRG_MONCLK_SSR_PWMCLK6   (0x0Eul)        // PWMCLK6
+#define CRG_MONCLK_SSR_PWMCLK7   (0x0Ful)        // PWMCLK7
+#define CRG_MONCLK_SSR_UARTCLK   (0x10ul)        // UARTCLK
+#define CRG_MONCLK_SSR_MII_RXCLK (0x11ul)        // MII_RXCLK 
+#define CRG_MONCLK_SSR_MII_TXCLK (0x12ul)        // MII_TXCLK
+#define CRG_MONCLK_SSR_RTCCLK    (0x13ul)        // RTCCLK
+
+/******************************************************************************/
+/*                                                                            */
+/*                                  UART                                      */
+/*                                                                            */
+/******************************************************************************/
+/****************** Bit definition for UART Data(UARTDR) register *************************/
+#define UART_DR_OE           (0x01ul << 11)      // Overrun Error
+#define UART_DR_BE           (0x01ul << 10)      // Break Error
+#define UART_DR_PE           (0x01ul <<  9)      // Parity Error
+#define UART_DR_FE           (0x01ul <<  8)      // Framing Error
+//#define UART_DR_DR                               // ToDo
+/***************** Bit definition for UART Receive Status(UARTRSR) register ***************/
+#define UARTR_SR_OE           (0x01ul << 3)      // Overrun Error
+#define UARTR_SR_BE           (0x01ul << 2)      // Break Error
+#define UARTR_SR_PE           (0x01ul << 1)      // Parity Error
+#define UARTR_SR_FE           (0x01ul << 0)      // Framing Error
+/***************** Bit definition for UART Error Clear(UARTECR) register ******************/
+#define UARTE_CR_OE           (0x01ul << 3)      // Overrun Error
+#define UARTE_CR_BE           (0x01ul << 2)      // Break Error
+#define UARTE_CR_PE           (0x01ul << 1)      // Parity Error
+#define UARTE_CR_FE           (0x01ul << 0)      // Framing Error
+/****************** Bit definition for UART Flags(UARTFR) register ************************/
+#define UART_FR_RI            (0x01ul << 8)      // Ring indicator
+#define UART_FR_TXFE          (0x01ul << 7)      // Transmit FIFO empty
+#define UART_FR_RXFF          (0x01ul << 6)      // Receive FIFO full
+#define UART_FR_TXFF          (0x01ul << 5)      // Transmit FIFO full
+#define UART_FR_RXFE          (0x01ul << 4)      // Receive FIFO empty
+#define UART_FR_BUSY          (0x01ul << 3)      // UART busy
+#define UART_FR_DCD           (0x01ul << 2)      // Data carrier detect
+#define UART_FR_DSR           (0x01ul << 1)      // Data set ready
+#define UART_FR_CTS           (0x01ul << 0)      // Clear to send
+/********** Bit definition for UART Low-power Counter(UARTILPR) register *******************/
+#define UARTILPR_COUNTER     (0xFFul << 0)      // 8-bit low-power divisor value (0..255)
+/********************* Bit definition for Line Control(UARTLCR_H) register *****************/
+#define UART_LCR_H_SPS        (0x1ul << 7)       // Stick parity select
+#define UART_LCR_H_WLEN(n)    ((n & 0x3ul) << 5) // Word length ( 0=5bits, 1=6bits, 2=7bits, 3=8bits )
+#define UART_LCR_H_FEN        (0x1ul << 4)       // Enable FIFOs
+#define UART_LCR_H_STP2       (0x1ul << 3)       // Two stop bits select 
+#define UART_LCR_H_EPS        (0x1ul << 2)       // Even parity select
+#define UART_LCR_H_PEN        (0x1ul << 1)       // Parity enable
+#define UART_LCR_H_BRK        (0x1ul << 0)       // Send break
+/********************* Bit definition for Contro(UARTCR) register *************************/
+#define UART_CR_CTSEn        (0x1ul << 15)    // CTS hardware flow control enable
+#define UART_CR_RTSEn        (0x1ul << 14)    // RTS hardware flow control enable
+#define UART_CR_Out2         (0x1ul << 13)    // Complement of Out2 modem status output
+#define UART_CR_Out1         (0x1ul << 12)    // Complement of Out1 modem status output
+#define UART_CR_RTS          (0x1ul << 11)    // Request to send
+#define UART_CR_DTR          (0x1ul << 10)    // Data transmit ready
+#define UART_CR_RXE          (0x1ul <<  9)    // Receive enable
+#define UART_CR_TXE          (0x1ul <<  8)    // Transmit enable
+#define UART_CR_LBE          (0x1ul <<  7)    // Loop-back enable
+#define UART_CR_SIRLP        (0x1ul <<  2)    // IrDA SIR low power mode
+#define UART_CR_SIREN        (0x1ul <<  1)    // SIR enable
+#define UART_CR_UARTEN       (0x1ul <<  0)    // UART enable
+/******* Bit definition for Interrupt FIFO Level Select(UARTIFLS) register *****************/
+#define UART_IFLS_RXIFLSEL(n)    ((n & 0x7ul) << 3) // Receive interrupt FIFO level select(0=1/8 full, 1=1/4 full, 2=1/2 full, 3=3/4 full, 4=7/8 full)
+#define UART_IFLS_TXIFLSEL(n)    ((n & 0x7ul) << 0) // Transmit interrupt FIFO level select(0=1/8 full, 1=1/4 full, 2=1/2 full, 3=3/4 full, 4=7/8 full)
+/******* Bit definition for Interrupt Mask Set/Clear(UARTIMSC) register ********************/
+#define UART_IMSC_OEIM       (0x1ul << 10)    // Overrun error interrupt mask
+#define UART_IMSC_BEIM       (0x1ul <<  9)    // Break error interrupt mask
+#define UART_IMSC_PEIM       (0x1ul <<  8)    // Parity error interrupt mask
+#define UART_IMSC_FEIM       (0x1ul <<  7)    // Framing error interrupt mask
+#define UART_IMSC_RTIM       (0x1ul <<  6)    // Receive interrupt mask
+#define UART_IMSC_TXIM       (0x1ul <<  5)    // Transmit interrupt mask
+#define UART_IMSC_RXIM       (0x1ul <<  4)    // Receive interrupt mask
+#define UART_IMSC_DSRMIM     (0x1ul <<  3)    // nUARTDSR modem interrupt mask
+#define UART_IMSC_DCDMIM     (0x1ul <<  2)    // nUARTDCD modem interrupt mask
+#define UART_IMSC_CTSMIM     (0x1ul <<  1)    // nUARTCTS modem interrupt mask
+#define UART_IMSC_RIMIM      (0x1ul <<  0)    // nUARTRI modem interrupt mask
+/*************** Bit definition for Raw Interrupt Status(UARTRIS) register *****************/
+#define UART_RIS_OEIM       (0x1ul << 10)    // Overrun error interrupt status
+#define UART_RIS_BEIM       (0x1ul <<  9)    // Break error interrupt status
+#define UART_RIS_PEIM       (0x1ul <<  8)    // Parity error interrupt status 
+#define UART_RIS_FEIM       (0x1ul <<  7)    // Framing error interrupt status
+#define UART_RIS_RTIM       (0x1ul <<  6)    // Receive interrupt status
+#define UART_RIS_TXIM       (0x1ul <<  5)    // Transmit interrupt status
+#define UART_RIS_RXIM       (0x1ul <<  4)    // Receive interrupt status
+#define UART_RIS_DSRMIM     (0x1ul <<  3)    // nUARTDSR modem interrupt status
+#define UART_RIS_DCDMIM     (0x1ul <<  2)    // nUARTDCD modem interrupt status
+#define UART_RIS_CTSMIM     (0x1ul <<  1)    // nUARTCTS modem interrupt status
+#define UART_RIS_RIMIM      (0x1ul <<  0)    // nUARTRI modem interrupt status
+/************** Bit definition for Masked Interrupt Status(UARTMIS) register ****************/
+#define UART_MIS_OEIM       (0x1ul << 10)    // Overrun error masked interrupt status
+#define UART_MIS_BEIM       (0x1ul <<  9)    // Break error masked interrupt status
+#define UART_MIS_PEIM       (0x1ul <<  8)    // Parity error masked interrupt status 
+#define UART_MIS_FEIM       (0x1ul <<  7)    // Framing error masked interrupt status
+#define UART_MIS_RTIM       (0x1ul <<  6)    // Receive masked interrupt status
+#define UART_MIS_TXIM       (0x1ul <<  5)    // Transmit masked interrupt status
+#define UART_MIS_RXIM       (0x1ul <<  4)    // Receive masked interrupt status
+#define UART_MIS_DSRMIM     (0x1ul <<  3)    // nUARTDSR modem masked interrupt status
+#define UART_MIS_DCDMIM     (0x1ul <<  2)    // nUARTDCD modem masked interrupt status
+#define UART_MIS_CTSMIM     (0x1ul <<  1)    // nUARTCTS modem masked interrupt status
+#define UART_MIS_RIMIM      (0x1ul <<  0)    // nUARTRI modem masked interrupt status
+/*************** Bit definition for Interrupt Clear(UARTICR) register ************************/
+#define UART_ICR_OEIM       (0x1ul << 10)    // Overrun error interrupt clear 
+#define UART_ICR_BEIM       (0x1ul <<  9)    // Break error interrupt clear
+#define UART_ICR_PEIM       (0x1ul <<  8)    // Parity error interrupt clear
+#define UART_ICR_FEIM       (0x1ul <<  7)    // Framing error interrupt clear
+#define UART_ICR_RTIM       (0x1ul <<  6)    // Receive interrupt clear
+#define UART_ICR_TXIM       (0x1ul <<  5)    // Transmit interrupt clear
+#define UART_ICR_RXIM       (0x1ul <<  4)    // Receive interrupt clear
+#define UART_ICR_DSRMIM     (0x1ul <<  3)    // nUARTDSR modem interrupt clear
+#define UART_ICR_DCDMIM     (0x1ul <<  2)    // nUARTDCD modem interrupt clear
+#define UART_ICR_CTSMIM     (0x1ul <<  1)    // nUARTCTS modem interrupt clear
+#define UART_ICR_RIMIM      (0x1ul <<  0)    // nUARTRI modem interrupt clear
+/***************** Bit definition for DMA Control(UARTDMACR) register ************************/
+#define UART_DMACR_DMAONERR (0x1ul <<  2)    // DMA on error
+#define UART_DMACR_TXDMAE   (0x1ul <<  1)    // Transmit DMA enable
+#define UART_DMACR_RXDMAE   (0x1ul <<  0)    // Receive DMA enable
+
+/******************************************************************************/
+/*                                                                            */
+/*                           Simple UART                                      */
+/*                                                                            */
+/******************************************************************************/
+/***************** Bit definition for S_UART Data () register ************************/
+#define S_UART_DATA                  (0xFFul << 0)    
+/***************** Bit definition for S_UART State() register ************************/
+#define S_UART_STATE_TX_BUF_OVERRUN  (0x01ul << 2)       // TX buffer overrun, wirte 1 to clear.
+#define S_UART_STATE_RX_BUF_FULL     (0x01ul << 1)       // RX buffer full, read only.
+#define S_UART_STATE_TX_BUF_FULL     (0x01ul << 0)       // TX buffer full, read only.
+/***************** Bit definition for S_UART Control() register ************************/
+#define S_UART_CTRL_HIGH_SPEED_TEST  (0x01ul << 6)       // High-speed test mode for TX only.
+#define S_UART_CTRL_RX_OVERRUN_EN    (0x01ul << 5)       // RX overrun interrupt enable.
+#define S_UART_CTRL_TX_OVERRUN_EN    (0x01ul << 4)       // TX overrun interrupt enable.
+#define S_UART_CTRL_RX_INT_EN        (0x01ul << 3)       // RX interrupt enable.
+#define S_UART_CTRL_TX_INT_EN        (0x01ul << 2)       // TX interrupt enable.
+#define S_UART_CTRL_RX_EN            (0x01ul << 1)       // RX enable.
+#define S_UART_CTRL_TX_EN            (0x01ul << 0)       // TX enable.
+/***************** Bit definition for S_UART Interrupt() register ************************/
+#define S_UART_INT_RX_OVERRUN        (0x01ul << 3)       // RX overrun interrupt. Wirte 1 to clear
+#define S_UART_INT_TX_OVERRUN        (0x01ul << 2)       // TX overrun interrupt. Write 1 to clear
+#define S_UART_INT_RX                (0x01ul << 1)       // RX interrupt. Write 1 to clear
+#define S_UART_INT_TX                (0x01ul << 0)       // TX interrupt. Write 1 to clear
+
+/******************************************************************************/
+/*                                                                            */
+/*                          Analog Digital Register                           */
+/*                                                                            */
+/******************************************************************************/
+
+/*********************** Bit definition for ADC_CTR     ***********************/
+//#define ADC_CTR_SAMSEL_ABNORMAL           (0x0ul)	  // Abnormal Operation
+//#define ADC_CTR_SAMSEL_NORMAL             (0x1ul)       // Normal Operation
+#define ADC_CTR_PWD_NRMOP                 (0x1ul)  // Active Operation
+#define ADC_CTR_PWD_PD                    (0x3ul)  // Power down
+/*********************** Bit definition for ADC_CHSEL   ***********************/
+#define ADC_CHSEL_CH0                     (0x0ul)       // Channel 0
+#define ADC_CHSEL_CH1                     (0x1ul)       // Channel 1
+#define ADC_CHSEL_CH2                     (0x2ul)       // Channel 2
+#define ADC_CHSEL_CH3                     (0x3ul)       // Channel 3
+#define ADC_CHSEL_CH4                     (0x4ul)       // Channel 4
+#define ADC_CHSEL_CH5                     (0x5ul)       // Channel 5
+#define ADC_CHSEL_CH6                     (0x6ul)       // Channel 6
+#define ADC_CHSEL_CH7                     (0x7ul)       // Channel 7
+#define ADC_CHSEL_CH15                   (0xful)        // LDO output(1.5V)
+/*********************** Bit definition for ADC_START   ***********************/
+#define ADC_START_START                   (0x1ul)       // ADC conversion start
+/*********************** Bit definition for ADC_DATA    ***********************/
+//ToDo (Readonly)
+
+/*********************** Bit definition for ADC_INT     ***********************/
+#define ADC_INT_MASK_DIS                  (0x0ul << 1)  // Interrupt disable
+#define ADC_INT_MASK_ENA                  (0x1ul << 1)  // Interrupt enable
+//ToDo (Readonly)
+
+/*********************** Bit definition for ADC_INTCLR  ***********************/
+#define ADC_INTCLEAR                      (0x1ul)       // ADC Interrupt clear
+
+#define W7500x_ADC_BASE                   (W7500x_APB2_BASE + 0x00000000UL)
+#define ADC                               ((ADC_TypeDef *) W7500x_ADC_BASE)
+
+/******************************************************************************/
+/*                                                                            */
+/*                                  Dual Timer                                */
+/*                                                                            */
+/******************************************************************************/
+
+/*********************** Bit definition for dualtimer   ***********************/
+#define DUALTIMER_TimerControl_TimerDIsable     0x0ul
+#define DUALTIMER_TimerControl_TimerEnable      0x1ul
+#define DUALTIMER_TimerControl_TimerEnable_Pos  7
+
+#define DUALTIMER_TimerControl_FreeRunning      0x0ul
+#define DUALTIMER_TimerControl_Periodic         0x1ul
+#define DUALTIMER_TimerControl_TimerMode_Pos    6
+
+#define DUALTIMER_TimerControl_IntDisable       0x0ul
+#define DUALTIMER_TimerControl_IntEnable        0x1ul
+#define DUALTIMER_TimerControl_IntEnable_Pos    5
+
+#define DUALTIMER_TimerControl_Pre_1            0x0ul
+#define DUALTIMER_TimerControl_Pre_16           0x1ul
+#define DUALTIMER_TimerControl_Pre_256          0x2ul
+#define DUALTIMER_TimerControl_Pre_Pos          2
+
+#define DUALTIMER_TimerControl_Size_16          0x0ul
+#define DUALTIMER_TimerControl_Size_32          0x1ul
+#define DUALTIMER_TimerControl_Size_Pos         1
+
+#define DUALTIMER_TimerControl_Wrapping         0x0ul
+#define DUALTIMER_TimerControl_OneShot          0x1ul
+#define DUALTIMER_TimerControl_OneShot_Pos      0
+
+/******************************************************************************/
+/*                                                                            */
+/*                              External Interrupt                            */
+/*                                                                            */
+/******************************************************************************/
+
+/****************   Bit definition for Px_IER   **************************/
+#define EXTI_Px_INTPOR_RISING_EDGE   (0x00ul << 0)
+#define EXTI_Px_INTPOR_FALLING_EDGE  (0x01ul << 0)
+#define EXTI_Px_INTEN_DISABLE        (0x00ul << 1)
+#define EXTI_Px_INTEN_ENABLE         (0x01ul << 1)
+
+/******************************************************************************/
+/*                                                                            */
+/*                             GPIO                                           */
+/*                                                                            */
+/******************************************************************************/
+
+/****************   Bit definition for Px_AFSR   **************************/
+#define Px_AFSR_AF0     (0x00ul)
+#define Px_AFSR_AF1     (0x01ul)
+#define Px_AFSR_AF2     (0x02ul)
+#define Px_AFSR_AF3     (0x03ul)
+/****************   Bit definition for Px_PCR   **************************/
+#define Px_PCR_PUPD_DOWN    (0x01ul << 0)       // Pull Down
+#define Px_PCR_PUPD_UP      (0x01ul << 1)       // Pull Up
+#define Px_PCR_DS_HIGH      (0x01ul << 2)       // High Driving
+#define Px_PCR_OD           (0x01ul << 3)       // Open Drain
+#define Px_PCR_IE           (0x01ul << 5)       // Input Buffer Enable
+#define Px_PCR_CS_SUMMIT    (0x01ul << 6)       // Use Summit Trigger Input Buffer
+
+/******************************************************************************/
+/*                                                                            */
+/*                                   I2C                                      */
+/*                                                                            */
+/******************************************************************************/
+
+/****************   Bit definition for I2C_CTR    **************************/
+#define I2C_CTR_COREEN        (0x01ul  << 7 )   //  0x80
+#define I2C_CTR_INTEREN       (0x01ul  << 6 )   //  0x40
+#define I2C_CTR_MODE          (0x01ul  << 5 )   //  0x20
+#define I2C_CTR_ADDR10        (0x01ul  << 4 )   //  0x10
+#define I2C_CTR_CTRRWN        (0x01ul  << 3 )   //  0x08
+#define I2C_CTR_CTEN          (0x01ul  << 2 )   //  0x04
+
+/****************   Bit definition for I2C_CMDR   **************************/
+#define I2C_CMDR_STA           (0x01ul  << 7 )    //    0x80
+#define I2C_CMDR_STO           (0x01ul  << 6 )    //    0x40
+#define I2C_CMDR_ACK           (0x01ul  << 5 )    //    0x20
+#define I2C_CMDR_RESTA         (0x01ul  << 4 )    //    0x10
+
+/****************   Bit definition for I2C_ISCR   **************************/
+#define I2C_ISCR_RST          (0x01ul  << 1)    //     0x01
+
+/****************   Bit definition for I2C_SR     **************************/
+#define I2C_SR_TX             (0x01ul  << 9 )   //  0x200
+#define I2C_SR_RX             (0x01ul  << 8 )   //  0x100
+#define I2C_SR_ACKT           (0x01ul  << 7 )   //  0x080
+#define I2C_SR_BT             (0x01ul  << 6 )   //  0x040
+#define I2C_SR_SA             (0x01ul  << 5 )   //  0x020
+#define I2C_SR_SB             (0x01ul  << 4 )   //  0x010
+#define I2C_SR_AL             (0x01ul  << 3 )   //  0x008
+#define I2C_SR_TO             (0x01ul  << 2 )   //  0x004
+#define I2C_SR_SRW            (0x01ul  << 1 )   //  0x002
+#define I2C_SR_ACKR           (0x01ul  << 0 )   //  0x001
+
+/****************   Bit definition for I2C_ISR    **************************/
+#define I2C_ISR_STAE            (0x01ul  << 4 )   //  0x010
+#define I2C_ISR_STOE            (0x01ul  << 3 )   //  0x008
+#define I2C_ISR_TOE             (0x01ul  << 2 )   //  0x004
+#define I2C_ISR_ACK_RXE         (0x01ul  << 1 )   //  0x002
+#define I2C_ISR_ACK_TXE         (0x01ul  << 0 )   //  0x001
+
+/****************   Bit definition for I2C_ISMR   **************************/
+#define I2C_ISR_STAEM            (0x01ul  << 4 )   //  0x010
+#define I2C_ISR_STOEM            (0x01ul  << 3 )   //  0x008
+#define I2C_ISR_TOEM             (0x01ul  << 2 )   //  0x004
+#define I2C_ISR_ACK_RXEM         (0x01ul  << 1 )   //  0x002
+#define I2C_ISR_ACK_TXEM         (0x01ul  << 0 )   //  0x001
+
+/******************************************************************************/
+/*                                                                            */
+/*                                   PWM                                      */
+/*                                                                            */
+/******************************************************************************/
+
+/******************************************************************************/
+/*                                                                            */
+/*                      Random number generator Register                      */
+/*                                                                            */
+/******************************************************************************/
+
+/*********************** Bit definition for RNG_RUN     ***********************/
+#define RNG_RUN_STOP                      (0x0ul)       // STOP RNG shift register
+#define RNG_RUN_RUN                       (0x1ul)       // RUN RNG shift register
+/*********************** Bit definition for RNG_SEED    ***********************/
+//ToDo
+
+/*********************** Bit definition for RNG_CLKSEL  ***********************/
+#define RNG_CLKSEL_RNGCLK                 (0x0ul)       // RNGCLK is source clock for rng shift register
+#define RNG_CLKSEL_APBCLK                 (0x1ul)       // APBCLK is source clock for rng shift register
+/*********************** Bit definition for RNG_ENABLE  ***********************/
+#define RNG_MANUAL_DISABLE                  (0x0ul)       // RNG disble
+#define RNG_MANUAL_ENABLE                   (0x1ul)       // RNG enable
+/*********************** Bit definition for RNG_RN      ***********************/
+//ToDo
+
+/*********************** Bit definition for RNG_POLY    ***********************/
+//ToDo
+
+
+
+typedef enum
+{
+    PAD_PA = 0,
+    PAD_PB,
+    PAD_PC,
+    PAD_PD
+}PAD_Type;
+
+typedef enum
+{
+    PAD_AF0    = Px_AFSR_AF0,
+    PAD_AF1    = Px_AFSR_AF1,
+    PAD_AF2    = Px_AFSR_AF2,
+    PAD_AF3    = Px_AFSR_AF3
+}PAD_AF_TypeDef;
+
+
+#if !defined  (USE_HAL_DRIVER)
+#define USE_HAL_DRIVER
+#endif /* USE_HAL_DRIVER */
+
+
+
+#if defined (USE_HAL_DRIVER)
+//    #include "system_W7500x.h"
+//    #include "W7500x_conf.h"
+#endif
+
+#ifdef USE_FULL_ASSERT
+    #define assert_param(expr)  ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__,__LINE__))
+#else
+    #define assert_param(expr)   ((void)0)
+#endif /* USE_FULL_ASSERT */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* W7500x_H */
+
+
+
+/************************ (C) COPYRIGHT Wiznet *****END OF FILE****/
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_adc.c	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-#include "W7500x.h"
-
-void ADC_PowerDownEnable (FunctionalState NewState)
-{
-	if (NewState != DISABLE)    ADC->ADC_CTR = ADC_CTR_PWD_PD;
-	else                        ADC->ADC_CTR = ADC_CTR_PWD_NRMOP;
-}
-
-void ADC_ChannelSelect (ADC_CH num)
-{
-	assert_param(IS_ADC_CH_NUM(num));
-	ADC->ADC_CHSEL = num;
-}
-
-void ADC_Start (void)
-{
-	ADC->ADC_START = ADC_START_START;
-}
-
-uint16_t ADC_ReadData (void)
-{
-	return ((uint16_t)ADC->ADC_DATA);
-}
-
-void ADC_InterruptMask (FunctionalState NewState)
-{
-	if (NewState != DISABLE)    ADC->ADC_INT = ADC_INT_MASK_ENA;
-	else                        ADC->ADC_INT = ADC_INT_MASK_DIS;
-}
-
-uint8_t ADC_IsInterrupt (void)
-{
-	return (((uint8_t)ADC->ADC_INT && 0x01ul));
-}
-		
-void ADC_InterruptClear (void)
-{
-	ADC->ADC_INT = ADC_INTCLEAR;
-}
-
-void ADC_Init (void)
-{
-	// ADC_CLK on
-	ADC_PowerDownEnable(DISABLE);
-	//ADC_ChannelSelect(num);
-}
-
-void ADC_DeInit (void)
-{
-	// ADC_CLK off
-	ADC_PowerDownEnable(ENABLE);
-	ADC_InterruptMask(DISABLE);
-}
-
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_adc.h	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    
-  * @author  
-  * @version 
-  * @date    
-  * @brief   This file contains all the functions prototypes for the ADC 
-  *          firmware library.
-  ******************************************************************************
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __W7500X_ADC_H
-#define __W7500X_ADC_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "W7500x.h"
-
-typedef enum { ADC_CH0 = 0, 
-	       ADC_CH1 = 1,
-	       ADC_CH2 = 2, 
-	       ADC_CH3 = 3,
-	       ADC_CH4 = 4,
-	       ADC_CH5 = 5,
-	       ADC_CH6 = 6,
-	       ADC_CH7 = 7,
-	       ADC_CH15 = 15} ADC_CH;
-
-#define IS_ADC_CH_NUM(NUM)                (((NUM) == ADC_CH0) || \
-		                           ((NUM) == ADC_CH1) || \
-		                           ((NUM) == ADC_CH2) || \
-		                           ((NUM) == ADC_CH3) || \
-		                           ((NUM) == ADC_CH4) || \
-		                           ((NUM) == ADC_CH5) || \
-		                           ((NUM) == ADC_CH6) || \
-		                           ((NUM) == ADC_CH7) || \
-		                           ((NUM) == ADC_CH15))
-
-void ADC_Init(void); 
-void ADC_DeInit(void);
-void ADC_PowerDownEnable (FunctionalState NewState);
-void ADC_ChannelSelect (ADC_CH num);
-void ADC_Start (void);
-uint16_t ADC_ReadData (void);
-void ADC_InterruptMask (FunctionalState NewState);
-uint8_t ADC_IsInterrupt (void);
-void ADC_InterruptClear (void);
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif  //__W7500X_ADC_H
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_conf.h	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-#include "W7500x_gpio.h"
-#include "W7500x_exti.h"
-#include "W7500x_pwm.h"
-#include "W7500x_uart.h"
-#include "W7500x_i2c.h"
-#include "W7500x_adc.h"
-#include "W7500x_dualtimer.h"
-#include "system_W7500x.h"
-
-
-#ifdef USE_FULL_ASSERT
-    #define assert_param(expr)  ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__,__LINE__))
-#else
-    #define assert_param(expr)   ((void)0)
-#endif /* USE_FULL_ASSERT */
-
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_crg.c	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,276 +0,0 @@
-#include "W7500x_crg.h"
-
-void CRG_DeInit(void)
-{
-//To Do
-}
-
-void CRG_OSC_PowerDownEnable(FunctionalState NewState)
-{
-    if(NewState != DISABLE)     CRG->OSC_PDR = CRG_OSC_PDR_PD;    
-    else                        CRG->OSC_PDR = CRG_OSC_PDR_NRMLOP;
-}
-
-void CRG_PLL_PowerDownEnable(FunctionalState NewState)
-{
-    if(NewState != DISABLE)     CRG->PLL_PDR = CRG_PLL_PDR_PD;
-    else                        CRG->PLL_PDR = CRG_PLL_PDR_NRMLOP;
-}
-
-void CRG_PLL_OutputEnable(FunctionalState NewState)
-{
-    if(NewState != DISABLE)     CRG->PLL_OER = CRG_PLL_OER_EN;
-    else                        CRG->PLL_OER = CRG_PLL_OER_DIS;
-}
-
-void CRG_PLL_BypassEnable(FunctionalState NewState)
-{
-    if(NewState != DISABLE)     CRG->PLL_BPR = CRG_PLL_BPR_EN;
-    else                        CRG->PLL_BPR = CRG_PLL_BPR_DIS;
-}
-
-void CRG_PLL_InputFrequencySelect(CRG_CLK_SOURCE src)
-{
-    assert_param(IS_CRG_PLL_SRC(src));
-
-    if( src == CRG_RCLK )   CRG->PLL_IFSR = CRG_PLL_IFSR_RCLK; 
-    else                    CRG->PLL_IFSR = CRG_PLL_IFSR_OCLK;
-}
-
-void CRG_FCLK_SourceSelect(CRG_CLK_SOURCE src)
-{
-    assert_param(IS_CRG_FCLK_SRC(src));
-
-    if      ( src == CRG_RCLK )     CRG->FCLK_SSR = CRG_FCLK_SSR_RCLK; 
-    else if ( src == CRG_OCLK )     CRG->FCLK_SSR = CRG_FCLK_SSR_OCLK;
-    else                            CRG->FCLK_SSR = CRG_FCLK_SSR_MCLK;
-}
-
-void CRG_FCLK_SetPrescale(CRG_PREDIV prediv)
-{
-    assert_param(IS_CRG_FCLK_PREDIV(prediv));
-
-    if      ( prediv == CRG_PREDIV1 )   CRG->FCLK_PVSR = CRG_FCLK_PVSR_DIV1; 
-    else if ( prediv == CRG_PREDIV2 )   CRG->FCLK_PVSR = CRG_FCLK_PVSR_DIV2; 
-    else if ( prediv == CRG_PREDIV4 )   CRG->FCLK_PVSR = CRG_FCLK_PVSR_DIV4; 
-    else                                CRG->FCLK_PVSR = CRG_FCLK_PVSR_DIV8; 
-}
-
-void CRG_SSPCLK_SourceSelect(CRG_CLK_SOURCE src)
-{
-    assert_param(IS_CRG_SSPCLK_SRC(src));
-
-    if      ( src == CRG_CLK_DIS )     CRG->SSPCLK_SSR = CRG_SSPCLK_SSR_DIS;
-    else if ( src == CRG_MCLK )        CRG->SSPCLK_SSR = CRG_SSPCLK_SSR_MCLK;
-    else if ( src == CRG_RCLK )        CRG->SSPCLK_SSR = CRG_SSPCLK_SSR_RCLK;
-    else                               CRG->SSPCLK_SSR = CRG_SSPCLK_SSR_OCLK;
-}
-
-void CRG_SSPCLK_SetPrescale(CRG_PREDIV prediv)
-{
-    assert_param(IS_CRG_SSPCLK_PREDIV(prediv));
-
-    if      ( prediv == CRG_PREDIV1 )   CRG->SSPCLK_PVSR = CRG_SSPCLK_PVSR_DIV1; 
-    else if ( prediv == CRG_PREDIV2 )   CRG->SSPCLK_PVSR = CRG_SSPCLK_PVSR_DIV2; 
-    else if ( prediv == CRG_PREDIV4 )   CRG->SSPCLK_PVSR = CRG_SSPCLK_PVSR_DIV4; 
-    else                                CRG->SSPCLK_PVSR = CRG_SSPCLK_PVSR_DIV8; 
-}
-
-void CRG_ADCCLK_SourceSelect(CRG_CLK_SOURCE src)
-{
-    assert_param(IS_CRG_ADCCLK_SRC(src));
-
-    if      ( src == CRG_CLK_DIS )   CRG->ADCCLK_SSR = CRG_ADCCLK_SSR_DIS;
-    else if ( src == CRG_MCLK )      CRG->ADCCLK_SSR = CRG_ADCCLK_SSR_MCLK;
-    else if ( src == CRG_RCLK )      CRG->ADCCLK_SSR = CRG_ADCCLK_SSR_RCLK;
-    else                             CRG->ADCCLK_SSR = CRG_ADCCLK_SSR_OCLK;
-}
-
-void CRG_ADCCLK_SetPrescale(CRG_PREDIV prediv)
-{
-    assert_param(IS_CRG_ADCCLK_PREDIV(prediv));
-
-    if      ( prediv == CRG_PREDIV1 )   CRG->ADCCLK_PVSR = CRG_ADCCLK_PVSR_DIV1; 
-    else if ( prediv == CRG_PREDIV2 )   CRG->ADCCLK_PVSR = CRG_ADCCLK_PVSR_DIV2; 
-    else if ( prediv == CRG_PREDIV4 )   CRG->ADCCLK_PVSR = CRG_ADCCLK_PVSR_DIV4; 
-    else                                CRG->ADCCLK_PVSR = CRG_ADCCLK_PVSR_DIV8; 
-}
-
-void CRG_TIMERCLK_SourceSelect(CRG_TIMER num, CRG_CLK_SOURCE src)
-{
-    assert_param(IS_CRG_TIMERCLK_NUM(num));
-    assert_param(IS_CRG_TIMERCLK_SRC(src));
-
-    if      ( src == CRG_CLK_DIS )   CRG_SET_TIMERCLK_SSR(num,CRG_TIMERCLK_SSR_DIS);
-    else if ( src == CRG_MCLK )      CRG_SET_TIMERCLK_SSR(num,CRG_TIMERCLK_SSR_MCLK);
-    else if ( src == CRG_RCLK )      CRG_SET_TIMERCLK_SSR(num,CRG_TIMERCLK_SSR_RCLK); 
-    else                             CRG_SET_TIMERCLK_SSR(num,CRG_TIMERCLK_SSR_OCLK);
-}
-
-void CRG_TIMERCLK_SetPrescale(CRG_TIMER num, CRG_PREDIV prediv)
-{
-    assert_param(IS_CRG_TIMERCLK_NUM(num));
-    assert_param(IS_CRG_TIMERCLK_PREDIV(prediv));
-
-    if      ( prediv == CRG_PREDIV1 )   CRG_SET_TIMERCLK_PREDIV(num,CRG_TIMERCLK_PVSR_DIV1); 
-    else if ( prediv == CRG_PREDIV2 )   CRG_SET_TIMERCLK_PREDIV(num,CRG_TIMERCLK_PVSR_DIV2); 
-    else if ( prediv == CRG_PREDIV4 )   CRG_SET_TIMERCLK_PREDIV(num,CRG_TIMERCLK_PVSR_DIV4);
-    else if ( prediv == CRG_PREDIV8 )   CRG_SET_TIMERCLK_PREDIV(num,CRG_TIMERCLK_PVSR_DIV8);
-    else if ( prediv == CRG_PREDIV16 )  CRG_SET_TIMERCLK_PREDIV(num,CRG_TIMERCLK_PVSR_DIV16);
-    else if ( prediv == CRG_PREDIV32 )  CRG_SET_TIMERCLK_PREDIV(num,CRG_TIMERCLK_PVSR_DIV32);
-    else if ( prediv == CRG_PREDIV64 )  CRG_SET_TIMERCLK_PREDIV(num,CRG_TIMERCLK_PVSR_DIV64);
-    else                                CRG_SET_TIMERCLK_PREDIV(num,CRG_TIMERCLK_PVSR_DIV128);
-}
-
-void CRG_PWMCLK_SourceSelect(CRG_PWM num, CRG_CLK_SOURCE src)
-{
-    assert_param(IS_CRG_PWMCLK_NUM(num));
-    assert_param(IS_CRG_PWMCLK_SRC(src));
-
-    if      ( src == CRG_CLK_DIS )   CRG_SET_PWMCLK_SSR(num,CRG_PWMCLK_SSR_DIS);
-    else if ( src == CRG_MCLK )      CRG_SET_PWMCLK_SSR(num,CRG_PWMCLK_SSR_MCLK);
-    else if ( src == CRG_RCLK )      CRG_SET_PWMCLK_SSR(num,CRG_PWMCLK_SSR_RCLK); 
-    else                             CRG_SET_PWMCLK_SSR(num,CRG_PWMCLK_SSR_OCLK);
-}
-
-void CRG_PWMCLK_SetPrescale(CRG_PWM num, CRG_PREDIV prediv)
-{
-    assert_param(IS_CRG_PWMCLK_NUM(num));
-    assert_param(IS_CRG_PWMCLK_PREDIV(prediv));
-
-    if      ( prediv == CRG_PREDIV1 )   CRG_SET_PWMCLK_PREDIV(num,CRG_PWMCLK_PVSR_DIV1); 
-    else if ( prediv == CRG_PREDIV2 )   CRG_SET_PWMCLK_PREDIV(num,CRG_PWMCLK_PVSR_DIV2); 
-    else if ( prediv == CRG_PREDIV4 )   CRG_SET_PWMCLK_PREDIV(num,CRG_PWMCLK_PVSR_DIV4);
-    else if ( prediv == CRG_PREDIV8 )   CRG_SET_PWMCLK_PREDIV(num,CRG_PWMCLK_PVSR_DIV8);
-    else if ( prediv == CRG_PREDIV16 )  CRG_SET_PWMCLK_PREDIV(num,CRG_PWMCLK_PVSR_DIV16);
-    else if ( prediv == CRG_PREDIV32 )  CRG_SET_PWMCLK_PREDIV(num,CRG_PWMCLK_PVSR_DIV32);
-    else if ( prediv == CRG_PREDIV64 )  CRG_SET_PWMCLK_PREDIV(num,CRG_PWMCLK_PVSR_DIV64);
-    else                                CRG_SET_PWMCLK_PREDIV(num,CRG_PWMCLK_PVSR_DIV128);
-}
-
-void CRG_RTC_HS_SourceSelect(CRG_CLK_SOURCE src)
-{
-    assert_param(IS_CRG_RTC_HS_SRC(src));
-
-    if      ( src == CRG_CLK_DIS )   CRG->RTC_HS_SSR = CRG_RTC_HS_SSR_DIS;
-    else if ( src == CRG_MCLK )      CRG->RTC_HS_SSR = CRG_RTC_HS_SSR_MCLK;
-    else if ( src == CRG_RCLK )      CRG->RTC_HS_SSR = CRG_RTC_HS_SSR_RCLK;
-    else                             CRG->RTC_HS_SSR = CRG_RTC_HS_SSR_OCLK;
-
-    if ( src != CRG_CLK_DIS )        CRG_RTC_SourceSelect(CRG_CLK_HIGH);
-}
-
-void CRG_RTC_HS_SetPrescale(CRG_PREDIV prediv)
-{
-    assert_param(IS_CRG_RTC_HS_PREDIV(prediv));
-
-    if      ( prediv == CRG_PREDIV1 )   CRG->RTC_HS_PVSR = CRG_RTC_HS_PVSR_DIV1; 
-    else if ( prediv == CRG_PREDIV2 )   CRG->RTC_HS_PVSR = CRG_RTC_HS_PVSR_DIV2; 
-    else if ( prediv == CRG_PREDIV4 )   CRG->RTC_HS_PVSR = CRG_RTC_HS_PVSR_DIV4;
-    else if ( prediv == CRG_PREDIV8 )   CRG->RTC_HS_PVSR = CRG_RTC_HS_PVSR_DIV8;
-    else if ( prediv == CRG_PREDIV16 )  CRG->RTC_HS_PVSR = CRG_RTC_HS_PVSR_DIV16;
-    else if ( prediv == CRG_PREDIV32 )  CRG->RTC_HS_PVSR = CRG_RTC_HS_PVSR_DIV32;
-    else if ( prediv == CRG_PREDIV64 )  CRG->RTC_HS_PVSR = CRG_RTC_HS_PVSR_DIV64;
-    else                                CRG->RTC_HS_PVSR = CRG_RTC_HS_PVSR_DIV128;
-}
-
-void CRG_RTC_SourceSelect(CRG_CLK_LOW_SOURCE src)
-{
-    assert_param(IS_CRG_RTC_LOW_SRC(src));
-
-    if (src == CRG_CLK_LOW)
-    {
-        CRG_RTC_HS_SourceSelect(CRG_CLK_DIS);
-        CRG->RTC_SSR = CRG_RTC_SSR_LW; 
-    }
-    else
-    {
-        CRG->RTC_SSR = CRG_RTC_SSR_HS;
-    }
-}
-
-void CRG_WDOGCLK_HS_SourceSelect(CRG_CLK_SOURCE src)
-{
-    assert_param(IS_CRG_WDOGCLK_HS_SRC(src));
-
-    if      ( src == CRG_CLK_DIS )   CRG->WDOGCLK_HS_SSR = CRG_WDOGCLK_HS_SSR_DIS;
-    else if ( src == CRG_MCLK )      CRG->WDOGCLK_HS_SSR = CRG_WDOGCLK_HS_SSR_MCLK;
-    else if ( src == CRG_RCLK )      CRG->WDOGCLK_HS_SSR = CRG_WDOGCLK_HS_SSR_RCLK;
-    else                             CRG->WDOGCLK_HS_SSR = CRG_WDOGCLK_HS_SSR_OCLK;
-
-    if ( src != CRG_CLK_DIS )        CRG_WDOGCLK_SourceSelect(CRG_CLK_HIGH);
-}
-
-void CRG_WDOGCLK_HS_SetPrescale(CRG_PREDIV prediv)
-{
-    assert_param(IS_CRG_WDOGCLK_HS_PREDIV(prediv));
-
-    if      ( prediv == CRG_PREDIV1 )   CRG->WDOGCLK_HS_PVSR = CRG_WDOGCLK_HS_PVSR_DIV1; 
-    else if ( prediv == CRG_PREDIV2 )   CRG->WDOGCLK_HS_PVSR = CRG_WDOGCLK_HS_PVSR_DIV2; 
-    else if ( prediv == CRG_PREDIV4 )   CRG->WDOGCLK_HS_PVSR = CRG_WDOGCLK_HS_PVSR_DIV4;
-    else if ( prediv == CRG_PREDIV8 )   CRG->WDOGCLK_HS_PVSR = CRG_WDOGCLK_HS_PVSR_DIV8;
-    else if ( prediv == CRG_PREDIV16 )  CRG->WDOGCLK_HS_PVSR = CRG_WDOGCLK_HS_PVSR_DIV16;
-    else if ( prediv == CRG_PREDIV32 )  CRG->WDOGCLK_HS_PVSR = CRG_WDOGCLK_HS_PVSR_DIV32;
-    else if ( prediv == CRG_PREDIV64 )  CRG->WDOGCLK_HS_PVSR = CRG_WDOGCLK_HS_PVSR_DIV64;
-    else                                CRG->WDOGCLK_HS_PVSR = CRG_WDOGCLK_HS_PVSR_DIV128;
-}
-
-void CRG_WDOGCLK_SourceSelect(CRG_CLK_LOW_SOURCE src)
-{
-    assert_param(IS_CRG_WDOGCLK_LOW_SRC(src));
-
-    if (src == CRG_CLK_LOW)
-    {
-        CRG_WDOGCLK_HS_SourceSelect(CRG_CLK_DIS);
-        CRG->WDOGCLK_SSR = CRG_WDOGCLK_SSR_LW; 
-    }
-    else
-    {
-        CRG->WDOGCLK_SSR = CRG_WDOGCLK_SSR_HS;
-    }
-}
-
-void CRG_UARTCLK_SourceSelect(CRG_CLK_SOURCE src)
-{
-    assert_param(IS_CRG_UARTCLK_SRC(src));
-
-    if      ( src == CRG_CLK_DIS )   CRG->UARTCLK_SSR = CRG_UARTCLK_SSR_DIS;
-    else if ( src == CRG_MCLK )      CRG->UARTCLK_SSR = CRG_UARTCLK_SSR_MCLK;
-    else if ( src == CRG_RCLK )      CRG->UARTCLK_SSR = CRG_UARTCLK_SSR_RCLK;
-    else                             CRG->UARTCLK_SSR = CRG_UARTCLK_SSR_OCLK;
-}
-
-void CRG_UARTCLK_SetPrescale(CRG_PREDIV prediv)
-{
-    assert_param(IS_CRG_UARTCLK_PREDIV(prediv));
-
-    if      ( prediv == CRG_PREDIV1 )   CRG->UARTCLK_PVSR = CRG_UARTCLK_PVSR_DIV1; 
-    else if ( prediv == CRG_PREDIV2 )   CRG->UARTCLK_PVSR = CRG_UARTCLK_PVSR_DIV2; 
-    else if ( prediv == CRG_PREDIV4 )   CRG->UARTCLK_PVSR = CRG_UARTCLK_PVSR_DIV4; 
-    else                                CRG->UARTCLK_PVSR = CRG_UARTCLK_PVSR_DIV8; 
-}
-
-void CRG_MII_Enable(FunctionalState rx_clk, FunctionalState tx_clk)
-{
-    assert_param(IS_FUNCTIONAL_STATE(rx_clk));
-    assert_param(IS_FUNCTIONAL_STATE(tx_clk));
-
-    if  ( rx_clk != DISABLE )   CRG->MIICLK_ECR |= CRG_MIICLK_ECR_EN_RXCLK;
-    else                        CRG->MIICLK_ECR &= ~(CRG_MIICLK_ECR_EN_RXCLK);    
-
-    if  ( tx_clk != DISABLE )   CRG->MIICLK_ECR |= CRG_MIICLK_ECR_EN_TXCLK;
-    else                        CRG->MIICLK_ECR &= ~(CRG_MIICLK_ECR_EN_TXCLK);
-}
-
-void CRG_SetMonitoringClock(uint32_t value)
-{
-    assert_param(IS_CRG_MONCLK_SSR(value));
-
-    CRG->MONCLK_SSR = value;
-}
-
-uint32_t CRG_GetMonitoringClock(void)
-{
-    return (uint8_t)CRG->MONCLK_SSR;
-}
-
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_crg.h	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,145 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    
-  * @author  
-  * @version 
-  * @date    
-  * @brief   This file contains all the functions prototypes for the Clock Reset Generator 
-  *          firmware library.
-  ******************************************************************************
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __W7500X_CRG_H
-#define __W7500X_CRG_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "W7500x.h"
-
-// It will be in W7500x_crg.h
-typedef enum { CRG_CLK_DIS = 0, CRG_MCLK, CRG_RCLK, CRG_OCLK } CRG_CLK_SOURCE;
-typedef enum { CRG_CLK_HIGH = 0, CRG_CLK_LOW }  CRG_CLK_LOW_SOURCE;
-typedef enum { CRG_PREDIV1 = 0, CRG_PREDIV2, CRG_PREDIV4, CRG_PREDIV8, CRG_PREDIV16, \
-               CRG_PREDIV32, CRG_PREDIV64, CRG_PREDIV128 } CRG_PREDIV;
-typedef enum { CRG_TIMER0 = 0, CRG_TIMER1 } CRG_TIMER;
-typedef enum { CRG_PWM0 = 0, CRG_PWM1, CRG_PWM2, CRG_PWM3, CRG_PWM4, CRG_PWM5, CRG_PWM6, CRG_PWM7 } CRG_PWM;
-
-
-
-#define IS_CRG_PLL_SRC(SRC)          (((SRC) == CRG_RCLK) || ((SRC) == CRG_OCLK))
-#define IS_CRG_FCLK_SRC(SRC)         (((SRC) == CRG_MCLK) || ((SRC) == CRG_RCLK) || ((SRC) == CRG_OCLK))
-
-#define CRG_CLK_SRC_DEFAULT(SRC)     (((SRC) == CRG_CLK_DIS) || ((SRC) == CRG_MCLK) || \
-                                      ((SRC) == CRG_RCLK) || ((SRC) == CRG_OCLK))
-#define CRG_CLK_SRC_LOW(SRC)         (((SRC) == CRG_CLK_HIGH) || ((SRC) == CRG_CLK_LOW))
-
-#define CRG_CLK_PREDIV_DEFAULT(DIV)  (((DIV) == CRG_PREDIV1) || ((DIV) == CRG_PREDIV2) || \
-                                      ((DIV) == CRG_PREDIV4) || ((DIV) == CRG_PREDIV8))
-#define CRG_CLK_PREDIV_ADVANCE(DIV)  (((DIV) == CRG_PREDIV1)  || ((DIV) == CRG_PREDIV2)  || \
-                                      ((DIV) == CRG_PREDIV4)  || ((DIV) == CRG_PREDIV8)  || \
-                                      ((DIV) == CRG_PREDIV16) || ((DIV) == CRG_PREDIV32) || \
-                                      ((DIV) == CRG_PREDIV64)  || ((DIV) == CRG_PREDIV128))
-
-
-#define IS_CRG_FCLK_PREDIV(DIV)     CRG_CLK_PREDIV_DEFAULT(DIV) 
-
-#define IS_CRG_SSPCLK_SRC(SRC)      CRG_CLK_SRC_DEFAULT(SRC)
-#define IS_CRG_SSPCLK_PREDIV(DIV)   CRG_CLK_PREDIV_DEFAULT(DIV)
-
-#define IS_CRG_ADCCLK_PREDIV(DIV)   CRG_CLK_PREDIV_DEFAULT(DIV)
-#define IS_CRG_ADCCLK_SRC(SRC)      CRG_CLK_SRC_DEFAULT(SRC)
-
-
-
-
-
-#define IS_CRG_TIMERCLK_NUM(NUM)            (((NUM) == CRG_TIMER0) || ((NUM) == CRG_TIMER1))
-#define IS_CRG_TIMERCLK_SRC(SRC)            CRG_CLK_SRC_DEFAULT(SRC)
-#define IS_CRG_TIMERCLK_PREDIV(DIV)         CRG_CLK_PREDIV_ADVANCE(DIV)
-
-#define CRG_SET_TIMERCLK_SSR(NUM,VALUE) \
-            (*((volatile uint32_t *)(CRG->TIMER0CLK_SSR) + (0x10ul * NUM)) = VALUE)
-#define CRG_SET_TIMERCLK_PREDIV(NUM,VALUE) \
-            (*((volatile uint32_t *)(CRG->TIMER0CLK_PVSR) + (0x10ul * NUM)) = VALUE)
-//#define CRG_SET_TIMERCLK_SSR(num,value)     CRG->TIMER##num##CLK_SSR = value
-//#define CRG_SET_TIMERCLK_PREDIV(num,value)  CRG->TIMER##num##CLK_PVSR = value
-
-
-#define IS_CRG_PWMCLK_NUM(NUM)              (((NUM) == CRG_PWM0) || ((NUM) == CRG_PWM1) || \
-                                             ((NUM) == CRG_PWM2) || ((NUM) == CRG_PWM3) || \
-                                             ((NUM) == CRG_PWM4) || ((NUM) == CRG_PWM5) || \
-                                             ((NUM) == CRG_PWM6) || ((NUM) == CRG_PWM7) )
-#define IS_CRG_PWMCLK_SRC(SRC)              CRG_CLK_SRC_DEFAULT(SRC)
-#define IS_CRG_PWMCLK_PREDIV(DIV)           CRG_CLK_PREDIV_ADVANCE(DIV)
-
-#define CRG_SET_PWMCLK_SSR(NUM,VALUE)       \
-            (*((volatile uint32_t *)(CRG->PWM0CLK_SSR) + (0x10ul * NUM)) = VALUE)
-#define CRG_SET_PWMCLK_PREDIV(NUM,VALUE)    \
-            (*((volatile uint32_t *)(CRG->PWM0CLK_PVSR) + (0x10ul * NUM)) = VALUE)
-//#define CRG_SET_PWMCLK_SSR(num,value)       CRG->PWM##num##CLK_SSR = value
-//#define CRG_SET_PWMCLK_PREDIV(num,value)    CRG->PWM##num##CLK_PVSR = value
-
-#define IS_CRG_RTC_HS_SRC(SRC)              CRG_CLK_SRC_DEFAULT(SRC)
-#define IS_CRG_RTC_HS_PREDIV(DIV)           CRG_CLK_PREDIV_ADVANCE(DIV)
-#define IS_CRG_RTC_LOW_SRC(SRC)             CRG_CLK_SRC_LOW(SRC) 
-
-#define IS_CRG_WDOGCLK_HS_SRC(SRC)          CRG_CLK_SRC_DEFAULT(SRC)
-#define IS_CRG_WDOGCLK_HS_PREDIV(DIV)       CRG_CLK_PREDIV_ADVANCE(DIV)
-#define IS_CRG_WDOGCLK_LOW_SRC(SRC)         CRG_CLK_SRC_LOW(SRC)
-
-#define IS_CRG_UARTCLK_SRC(SRC)             CRG_CLK_SRC_DEFAULT(SRC)
-#define IS_CRG_UARTCLK_PREDIV(DIV)          CRG_CLK_PREDIV_DEFAULT(DIV)
-
-#define IS_CRG_MONCLK_SSR(value)            (((value) >= 0x00ul) || ((value) <= 0x13ul))
-
-void CRG_DeInit(void);
-void CRG_OSC_PowerDownEnable        (FunctionalState NewState);
-void CRG_PLL_PowerDownEnable        (FunctionalState NewState);
-void CRG_PLL_OutputEnable           (FunctionalState NewState);
-void CRG_PLL_BypassEnable           (FunctionalState NewState);
-void CRG_PLL_InputFrequencySelect   (CRG_CLK_SOURCE src);
-
-void CRG_FCLK_SourceSelect          (CRG_CLK_SOURCE src);
-void CRG_FCLK_SetPrescale           (CRG_PREDIV prediv);
-
-void CRG_SSPCLK_SourceSelect    (CRG_CLK_SOURCE src);
-void CRG_SSPCLK_SetPrescale     (CRG_PREDIV prediv);
-
-void CRG_ADCCLK_SourceSelect    (CRG_CLK_SOURCE src);
-void CRG_ADCCLK_SetPrescale     (CRG_PREDIV prediv);
-
-void CRG_TIMERCLK_SourceSelect  (CRG_TIMER num, CRG_CLK_SOURCE src);
-void CRG_TIMERCLK_SetPrescale   (CRG_TIMER num, CRG_PREDIV prediv);
-
-void CRG_PWMCLK_SourceSelect    (CRG_PWM num, CRG_CLK_SOURCE src);
-void CRG_PWMCLK_SetPrescale     (CRG_PWM num, CRG_PREDIV prediv);
-
-void CRG_RTC_HS_SourceSelect    (CRG_CLK_SOURCE src);
-void CRG_RTC_HS_SetPrescale     (CRG_PREDIV prediv);
-void CRG_RTC_SourceSelect       (CRG_CLK_LOW_SOURCE src);
-
-void CRG_WDOGCLK_HS_SourceSelect    (CRG_CLK_SOURCE src);
-void CRG_WDOGCLK_HS_SetPrescale     (CRG_PREDIV prediv);
-void CRG_WDOGCLK_SourceSelect       (CRG_CLK_LOW_SOURCE src);
-
-void CRG_UARTCLK_SourceSelect   (CRG_CLK_SOURCE src);
-void CRG_UARTCLK_SetPrescale    (CRG_PREDIV prediv);
-
-void CRG_MII_Enable (FunctionalState rx_clk, FunctionalState tx_clk);
-
-void    CRG_SetMonitoringClock  (uint32_t value);
-uint32_t CRG_GetMonitoringClock  (void);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.c	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,205 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    W7500x_stdPeriph_Driver/src/W7500x_dualtimer.c    
-  * @author  IOP Team
-  * @version v1.0.0
-  * @date    01-May-2015
-  * @brief   This file contains all the functions prototypes for the dualtimer 
-  *          firmware library.
-  ******************************************************************************
-  *
-  ******************************************************************************
-  */
-
-/* Includes -------------------------------------------*/
-#include "W7500x.h"
-
-void DUALTIMER_ClockEnable(DUALTIMER_TypeDef* DUALTIMERn)
-{
-    /* Check the parameters */
-    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
-
-    if(DUALTIMERn == DUALTIMER0_0)
-        TIMCLKEN0_0 = DUALTIMER_Clock_Enable;
-    else if(DUALTIMERn == DUALTIMER0_1)
-        TIMCLKEN0_1 = DUALTIMER_Clock_Enable;
-    else if(DUALTIMERn == DUALTIMER1_0)
-        TIMCLKEN1_0 = DUALTIMER_Clock_Enable;
-    else if(DUALTIMERn == DUALTIMER1_1)
-        TIMCLKEN1_1 = DUALTIMER_Clock_Enable;
-}
-
-void DUALTIMER_ClockDisable(DUALTIMER_TypeDef* DUALTIMERn)
-{
-    /* Check the parameters */
-    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
-
-    if(DUALTIMERn == DUALTIMER0_0)
-        TIMCLKEN0_0 = DUALTIMER_Clock_Disable;
-    else if(DUALTIMERn == DUALTIMER0_1)
-        TIMCLKEN0_1 = DUALTIMER_Clock_Disable;
-    else if(DUALTIMERn == DUALTIMER1_0)
-        TIMCLKEN1_0 = DUALTIMER_Clock_Disable;
-    else if(DUALTIMERn == DUALTIMER1_1)
-        TIMCLKEN1_1 = DUALTIMER_Clock_Disable;
-}
-
-void DUALTIMER_DeInit(DUALTIMER_TypeDef* DUALTIMERn)
-{
-    /* Check the parameters */
-    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
-
-    DUALTIMER_Stop(DUALTIMERn);
-
-    DUALTIMERn->TimerLoad = 0x0;
-    DUALTIMERn->TimerControl = 0x20;
-    DUALTIMERn->TimerBGLoad = 0x0;
-}
-
-void DUALTIMER_Init(DUALTIMER_TypeDef* DUALTIMERn, DUALTIMER_InitTypDef* DUALTIMER_InitStruct)
-{
-    uint32_t tmp = 0;
-    /* Check the parameters */
-    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
-    assert_param(IS_DUALTIMER_TimerMode(DUALTIMER_InitStruct->TimerControl_Mode));
-    assert_param(IS_DUALTIMER_TimerPre(DUALTIMER_InitStruct->TimerControl_Pre));
-    assert_param(IS_DUALTIMER_TimerSize(DUALTIMER_InitStruct->TimerControl_Size));
-    assert_param(IS_DUALTIMER_OneShot(DUALTIMER_InitStruct->TimerControl_OneShot));
-    
-    DUALTIMER_Stop(DUALTIMERn);
-
-    DUALTIMERn->TimerLoad = DUALTIMER_InitStruct->TimerLoad;
-
-    tmp = DUALTIMERn->TimerControl;
-    tmp |= (DUALTIMER_InitStruct->TimerControl_Mode << DUALTIMER_TimerControl_TimerMode_Pos);
-    tmp |= (DUALTIMER_InitStruct->TimerControl_Pre << DUALTIMER_TimerControl_Pre_Pos); 
-    tmp |= (DUALTIMER_InitStruct->TimerControl_Size << DUALTIMER_TimerControl_Size_Pos);
-    tmp |= (DUALTIMER_InitStruct->TimerControl_OneShot << DUALTIMER_TimerControl_OneShot_Pos);
-    //Reset values not used
-    tmp &= 0xEF;
-
-    DUALTIMERn->TimerControl = tmp;
-}
-
-void DUALTIMER_IntConfig(DUALTIMER_TypeDef* DUALTIMERn, FunctionalState state)
-{
-    /* Check the parameters */
-    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
-
-    if(state == ENABLE)
-        DUALTIMERn->TimerControl |= (DUALTIMER_TimerControl_IntEnable << DUALTIMER_TimerControl_IntEnable_Pos);
-    else 
-        DUALTIMERn->TimerControl &= ~(DUALTIMER_TimerControl_IntEnable << DUALTIMER_TimerControl_IntEnable_Pos);
-}
-
-void DUALTIMER_IntClear(DUALTIMER_TypeDef* DUALTIMERn)
-{
-    /* Check the parameters */
-    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
-
-    DUALTIMERn->TimerIntClr = DUALTIMER_Int_Clear;
-}
-
-ITStatus DUALTIMER_GetIntStatus(DUALTIMER_TypeDef* DUALTIMERn)
-{
-    /* Check the parameters */
-    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
-
-    return (ITStatus)DUALTIMERn->TimerMIS;
-}
-
-FlagStatus DUALTIMER_GetIntEnableStatus(DUALTIMER_TypeDef* DUALTIMERn)
-{
-    /* Check the parameters */
-    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
-
-    return (FlagStatus)((DUALTIMERn->TimerControl >> DUALTIMER_TimerControl_IntEnable_Pos) & 0x1);
-}
-
-void DUALTIMER_Start(DUALTIMER_TypeDef* DUALTIMERn)
-{
-    /* Check the parameters */
-    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
-
-    DUALTIMERn->TimerControl |= (DUALTIMER_TimerControl_TimerEnable << DUALTIMER_TimerControl_TimerEnable_Pos);
-}
-
-void DUALTIMER_Stop(DUALTIMER_TypeDef* DUALTIMERn)
-{
-    /* Check the parameters */
-    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
-
-    DUALTIMERn->TimerControl &= ~(DUALTIMER_TimerControl_TimerEnable << DUALTIMER_TimerControl_TimerEnable_Pos);
-}
-
-uint32_t DUALTIMER_GetTimerLoad(DUALTIMER_TypeDef* DUALTIMERn)
-{
-    /* Check the parameters */
-    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
-
-    return DUALTIMERn->TimerLoad;
-}
-
-void DUALTIMER_SetTimerLoad(DUALTIMER_TypeDef* DUALTIMERn, uint32_t TimerLoad)
-{
-    /* Check the parameters */
-    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
-
-    DUALTIMERn->TimerLoad = TimerLoad;
-}
-
-uint32_t DUALTIMER_GetTimerValue(DUALTIMER_TypeDef* DUALTIMERn)
-{
-    /* Check the parameters */
-    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
-
-    return DUALTIMERn->TimerValue;
-}
-
-uint32_t DUALTIMER_GetTimerControl(DUALTIMER_TypeDef* DUALTIMERn)
-{
-    /* Check the parameters */
-    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
-
-    return DUALTIMERn->TimerControl;
-}
-
-void DUALTIMER_SetTimerControl(DUALTIMER_TypeDef* DUALTIMERn, uint32_t TimerControl)
-{
-    /* Check the parameters */
-    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
-
-    DUALTIMERn->TimerControl = TimerControl;
-}
-
-uint32_t DUALTIMER_GetTimerRIS(DUALTIMER_TypeDef* DUALTIMERn)
-{
-    /* Check the parameters */
-    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
-
-    return DUALTIMERn->TimerRIS;
-}
-
-uint32_t DUALTIMER_GetTimerMIS(DUALTIMER_TypeDef* DUALTIMERn)
-{
-    /* Check the parameters */
-    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
-
-    return DUALTIMERn->TimerMIS;
-}
-
-uint32_t DUALTIMER_GetTimerBGLoad(DUALTIMER_TypeDef* DUALTIMERn)
-{
-    /* Check the parameters */
-    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
-
-    return DUALTIMERn->TimerBGLoad;
-}
-
-void DUALTIMER_SetTimerBGLoad(DUALTIMER_TypeDef* DUALTIMERn, uint32_t TimerBGLoad)
-{
-    /* Check the parameters */
-    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
-
-    DUALTIMERn->TimerBGLoad = TimerBGLoad;
-}
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_dualtimer.h	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    W7500x_stdPeriph_Driver/inc/W7500x_dualtimer.h
-  * @author  IOP Team
-  * @version V1.0.0
-  * @date    01-May-2015
-  * @brief   This file contains all the functions prototypes for the dualtimer 
-  *          firmware library.
-  ******************************************************************************
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __W7500X_DUALTIMER_H
-#define __W7500X_DUALTIMER_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "W7500x.h"
-
-/**********************************************************************************************/
-/**********************************************************************************************/
-//                This structure and define must be in W7500x.h
-/**********************************************************************************************/
-/**********************************************************************************************/
-
-typedef struct
-{
-    uint32_t TimerLoad;
-    uint32_t TimerControl_Mode;
-    uint32_t TimerControl_Pre;
-    uint32_t TimerControl_Size;
-    uint32_t TimerControl_OneShot;    
-}DUALTIMER_InitTypDef;
-
-
-#define IS_DUALTIMER_TimerMode(MODE)        (MODE <= 1) 
-#define IS_DUALTIMER_TimerPre(PREE)         (PRE <= 2) 
-#define IS_DUALTIMER_TimerSize(SIZE)        (SIZE <= 1) 
-#define IS_DUALTIMER_OneShot(ONESHOT)       (ONESHOT <= 1)
-
-
-
-
-
-
-#define DUALTIMER_Int_Clear                 0x1ul
-
-#define DUALTIMER_Clock_Enable              0x1ul
-#define DUALTIMER_Clock_Disable             ~DUALTIMER_Clock_Enable
-
-
-#define IS_DUALTIMER_ALL_CH(CH)            ((CH == DUALTIMER0_0) || \
-                                            (CH == DUALTIMER0_1) || \
-                                            (CH == DUALTIMER1_0) || \
-                                            (CH == DUALTIMER1_1)) 
-
-
-
-void DUALTIMER_ClockEnable(DUALTIMER_TypeDef* DUALTIMERn);
-void DUALTIMER_ClockDisable(DUALTIMER_TypeDef* DUALTIMERn);
-void DUALTIMER_DeInit(DUALTIMER_TypeDef* DUALTIMERn);
-void DUALTIMER_Init(DUALTIMER_TypeDef* DUALTIMERn, DUALTIMER_InitTypDef* DUALTIMER_InitStruct);
-void DUALTIMER_IntConfig(DUALTIMER_TypeDef* DUALTIMERn, FunctionalState state);
-void DUALTIMER_IntClear(DUALTIMER_TypeDef* DUALTIMERn);
-ITStatus DUALTIMER_GetIntStatus(DUALTIMER_TypeDef* DUALTIMERn);
-FlagStatus DUALTIMER_GetIntEnableStatus(DUALTIMER_TypeDef* DUALTIMERn);
-void DUALTIMER_Start(DUALTIMER_TypeDef* DUALTIMERn);
-void DUALTIMER_Stop(DUALTIMER_TypeDef* DUALTIMERn);
-uint32_t DUALTIMER_GetTimerLoad(DUALTIMER_TypeDef* DUALTIMERn);
-void DUALTIMER_SetTimerLoad(DUALTIMER_TypeDef* DUALTIMERn, uint32_t TimerLoad);
-uint32_t DUALTIMER_GetTimerValue(DUALTIMER_TypeDef* DUALTIMERn);
-uint32_t DUALTIMER_GetTimerControl(DUALTIMER_TypeDef* DUALTIMERn);
-void DUALTIMER_SetTimerControl(DUALTIMER_TypeDef* DUALTIMERn, uint32_t TimerControl);
-uint32_t DUALTIMER_GetTimerRIS(DUALTIMER_TypeDef* DUALTIMERn);
-uint32_t DUALTIMER_GetTimerMIS(DUALTIMER_TypeDef* DUALTIMERn);
-uint32_t DUALTIMER_GetTimerBGLoad(DUALTIMER_TypeDef* DUALTIMERn);
-void DUALTIMER_SetTimerBGLoad(DUALTIMER_TypeDef* DUALTIMERn, uint32_t TimerBGLoad);
-
-
-
-//======================= Interrupt handler ==============================
-//void DUALTIMER0_Handler();
-//void DUALTIMER1_Handler();
-
-
-#ifdef __cplusplus
- }
-#endif
-
-
-#endif //__W7500X_DUALTIMER_H
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_exti.c	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,157 +0,0 @@
-#include "W7500x.h"
-
-
-
-/**
-  * @brief  Deinitializes the EXTI peripheral registers to their default reset values.
-  * @param  None
-  * @retval None
-  */
-void EXTI_DeInit(void)
-{
-    uint32_t i, loop =16;
-    for(i=0; i<loop; i++)
-    {
-        EXTI_PA->Port[i] = 0x00;
-        EXTI_PB->Port[i] = 0x00;
-        EXTI_PC->Port[i] = 0x00;
-    }
-    for(i=0; i<5; i++)
-    {
-        EXTI_PD->Port[i] = 0x00;
-    }
-}
-
-/**
-  * @brief  Initializes the EXTI peripheral according to the specified
-  *         parameters in the EXTI_InitStruct.
-  * @param  EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure
-  *         that contains the configuration information for the EXTI peripheral.
-  * @retval None
-  */
-void EXTI_Init(PAD_Type Px, EXTI_InitTypeDef* EXTI_InitStruct)
-{
-    uint32_t pinpos = 0x00, pos = 0x00, currentpin = 0x00, loop = 16;
-    P_Port_Def *px_exti;
-
-    assert_param(IS_PAD_TYPE(Px));
-
-    if      (Px == PAD_PA)        px_exti  = EXTI_PA;
-    else if (Px == PAD_PB)        px_exti  = EXTI_PB;
-    else if (Px == PAD_PC)        px_exti  = EXTI_PC;
-    else
-    {        
-        px_exti  = (P_Port_Def*)EXTI_PD;
-        loop = 5;
-    }
-
-    for(pinpos = 0x00; pinpos < loop; pinpos++)
-    {
-        pos = ((uint32_t)0x01) << pinpos;
-
-        currentpin = (EXTI_InitStruct->EXTI_Line) & pos;
-        if(currentpin == pos)
-        {   
-            px_exti->Port[pinpos] |= EXTI_Px_INTEN_ENABLE;
-
-            if(EXTI_InitStruct->EXTI_Trigger == EXTI_Trigger_Rising)
-                px_exti->Port[pinpos] |=  EXTI_Px_INTPOR_RISING_EDGE;
-            else
-                px_exti->Port[pinpos] |= EXTI_Px_INTPOR_FALLING_EDGE;
-        }
-    }
-
-}
-
-void EXTI_Polarity_Set(PAD_Type Px, uint16_t GPIO_Pin, uint16_t Polarity )
-{
-    uint32_t pinpos = 0x00, pos = 0x00, currentpin = 0x00, loop = 16;
-    P_Port_Def *px_exti;
-
-    assert_param(IS_PAD_TYPE(Px));
-
-    if      (Px == PAD_PA)        px_exti  = EXTI_PA;
-    else if (Px == PAD_PB)        px_exti  = EXTI_PB;
-    else if (Px == PAD_PC)        px_exti  = EXTI_PC;
-    else
-    {        
-        px_exti  = (P_Port_Def*)EXTI_PD;
-        loop = 5;
-    }
-
-    for(pinpos = 0x00; pinpos < loop; pinpos++)
-    {
-        pos = ((uint32_t)0x01) << pinpos;
-
-        currentpin = GPIO_Pin & pos;
-        if(currentpin == pos)
-        {   
-            if(Polarity == EXTI_Trigger_Rising)
-                px_exti->Port[pinpos] |= EXTI_Px_INTPOR_RISING_EDGE;
-            else
-                px_exti->Port[pinpos] |= EXTI_Px_INTPOR_FALLING_EDGE;
-        }
-    }
-
-}
-
-/**
-  * @brief  Fills each EXTI_InitStruct member with its reset value.
-  * @param  EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure which will
-  *         be initialized.
-  * @retval None
-  */
-void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct)
-{
-  EXTI_InitStruct->EXTI_Line = 0xFF;
-  EXTI_InitStruct->EXTI_Mode = EXTI_Mode_Interrupt;
-  EXTI_InitStruct->EXTI_Trigger = EXTI_Trigger_Falling;
-}
-
-uint16_t EXTI_Px_GetEXTEN(PAD_Type Px)
-{
-    uint32_t i, loop = 16;
-	  uint16_t ret=0;
-    P_Port_Def *px_exti;
-
-    assert_param(IS_PAD_TYPE(Px));
-
-    if      (Px == PAD_PA)        px_exti  = EXTI_PA;
-    else if (Px == PAD_PB)        px_exti  = EXTI_PB;
-    else if (Px == PAD_PC)        px_exti  = EXTI_PC;
-    else
-    {        
-        px_exti  = (P_Port_Def*)EXTI_PD;
-        loop = 5;
-    }
-
-    for(i = 0x00; i < loop; i++)
-    {
-             ret |= (((px_exti->Port[i]&0x2)>>1)<<i);
-		}
-		return ret;
-}
-
-uint16_t EXTI_Px_GetEXTINTPOL(PAD_Type Px)
-{
-    uint32_t i, loop = 16;
-	uint16_t ret=0;
-    P_Port_Def *px_exti;
-
-    assert_param(IS_PAD_TYPE(Px));
-
-    if      (Px == PAD_PA)        px_exti  = EXTI_PA;
-    else if (Px == PAD_PB)        px_exti  = EXTI_PB;
-    else if (Px == PAD_PC)        px_exti  = EXTI_PC;
-    else
-    {        
-        px_exti  = (P_Port_Def*)EXTI_PD;
-        loop = 5;
-    }
-
-    for(i = 0x00; i < loop; i++)
-    {
-             ret |= ((px_exti->Port[i]&0x1)<<i);
-		}
-		return ret;
-}
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_exti.h	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    
-  * @author  
-  * @version 
-  * @date    
-  * @brief   This file contains all the functions prototypes for the GPIO
-  *          firmware library.
-  ******************************************************************************
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __W7500X_EXTI_H
-#define __W7500X_EXTI_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
- /* Includes ------------------------------------------------------------------*/
-#include "W7500x.h"
-
-
- /**
-  * @brief  EXTI mode enumeration  
-  */
-
-typedef enum
-{
-  EXTI_Mode_Disable = 0x00,
-  EXTI_Mode_Interrupt = 0x02
-}EXTIMode_TypeDef;
-
-#define IS_EXTI_MODE(MODE) (((MODE) == EXTI_Mode_Rising) || \
-                            ((MODE) == EXTI_Mode_Interrupt)) 
-
-/** 
-  * @brief  EXTI Trigger enumeration  
-  */
-
-typedef enum
-{
-  EXTI_Trigger_Rising = 0x00,
-  EXTI_Trigger_Falling = 0x01  
-}EXTITrigger_TypeDef;
-
-#define IS_EXTI_TRIGGER(TRIGGER) (((TRIGGER) == EXTI_Trigger_Rising) || \
-                                  ((TRIGGER) == EXTI_Trigger_Falling))
-
-/** 
-  * @brief  EXTI Init Structure definition  
-  */
-
-typedef struct
-{
-  uint32_t EXTI_Line;               /*!< Specifies the EXTI lines to be enabled or disabled.
-                                         This parameter can be any combination of @ref EXTI_Lines */
-   
-  EXTIMode_TypeDef EXTI_Mode;       /*!< Specifies the mode for the EXTI lines.This parameter can be a value of @ref EXTIMode_TypeDef */
-
-  EXTITrigger_TypeDef EXTI_Trigger; /*!< Specifies the trigger signal active edge for the EXTI lines.
-                                         This parameter can be a value of @ref EXTIMode_TypeDef */
-
-}EXTI_InitTypeDef;
-
-/**
-  * @}
-  */
-
-void EXTI_DeInit(void);
-void EXTI_Init(PAD_Type Px, EXTI_InitTypeDef* EXTI_InitStruct);
-void EXTI_Polarity_Set(PAD_Type Px, uint16_t GPIO_Pin, uint16_t Polarity );
-void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct);
-uint32_t EXTI_GetEXTIConfig(PAD_Type Px, uint16_t GPIO_Pin);
-uint16_t EXTI_Px_GetEXTEN(PAD_Type Px);
-uint16_t EXTI_Px_GetEXTINTPOL(PAD_Type Px);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif //__W7500X_EXTI_H
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_gpio.c	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,298 +0,0 @@
-#include "W7500x.h"
-
-
-
-void HAL_GPIO_DeInit(GPIO_TypeDef* GPIOx)
-{
-    uint32_t i, loop =16;
-    P_Port_Def *px_pcr;
-    P_Port_Def *px_afsr;
-
-    /* Check the parameters */
-    assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
-
-    /* DeInit GPIOx Registers */
-    GPIOx->DATA = 0x0000;        
-    GPIOx->DATAOUT = 0x0000;     
-    //GPIOx->OUTENSET = 0x0000;    
-    GPIOx->OUTENCLR = 0xFFFF;    
-    //GPIOx->INTENSET = 0x0000;    
-    GPIOx->INTENCLR = 0xFFFF;    
-    //GPIOx->INTTYPESET = 0x0000;  
-    GPIOx->INTTYPECLR = 0xFFFF;  
-    //GPIOx->INTPOLSET = 0x0000;
-    GPIOx->INTPOLCLR = 0xFFFF;   
-
-
-    /* DeInit GPIOx 
-     *      Pad Control Register
-     *      Pad Extern interrupt Enable Register
-     *      Pad Alternate Function Select Register
-     */     
-    if (GPIOx == GPIOA)
-    {
-        px_pcr = PA_PCR;
-        px_afsr = PA_AFSR;
-    }
-    else if (GPIOx == GPIOB)
-    {
-        px_pcr = PB_PCR;
-        px_afsr = PB_AFSR;
-    }
-    else if (GPIOx == GPIOC)
-    {
-        px_pcr = PC_PCR;
-        px_afsr = PC_AFSR;
-    }  
-    else // if (GPIOx == GPIOD)
-    {
-        px_pcr = (P_Port_Def*)PD_PCR;
-        px_afsr = (P_Port_Def*)PD_AFSR;
-        loop = 5;
-    }
-
-    for(i=0; i<loop; i++)
-    {
-        px_pcr->Port[i] = 0x60;
-        px_afsr->Port[i] = PAD_AF0;
-
-    }
-}
-
-void HAL_GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
-{
-    uint32_t pinpos = 0x00, pos = 0x00, currentpin = 0x00, loop = 16;
-    P_Port_Def *px_pcr;
-
-    assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
-    assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));
-//    assert_param(IS_GPIO_PUPD(GPIO_InitStruct->GPIO_PuPd));
-
-    if      (GPIOx == GPIOA)        px_pcr  = PA_PCR;
-    else if (GPIOx == GPIOB)        px_pcr  = PB_PCR;
-    else if (GPIOx == GPIOC)        px_pcr  = PC_PCR;
-    else
-    {
-        px_pcr  = (P_Port_Def*)PD_PCR;
-        loop = 5;
-    }
-
-    for(pinpos = 0x00; pinpos < loop; pinpos++)
-    {
-        pos = ((uint32_t)0x01) << pinpos;
-
-        currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
-
-        if(currentpin == pos)
-        {
-            if(GPIO_InitStruct->GPIO_Mode == GPIO_Mode_OUT)
-            {
-                GPIOx->OUTENSET |= pos;
-            }
-            else        // GPIO_Mode_In
-            {
-                GPIOx->OUTENCLR = pos;
-            }
-
-            // Configure pull-up pull-down bits 
-            if(GPIO_InitStruct->GPIO_Pad & Px_PCR_PUPD_UP)
-            {
-                px_pcr->Port[pinpos] &= ~(Px_PCR_PUPD_UP | Px_PCR_PUPD_DOWN);
-                px_pcr->Port[pinpos] |= Px_PCR_PUPD_UP;
-            }
-            else
-            {
-                px_pcr->Port[pinpos] &= ~(Px_PCR_PUPD_UP | Px_PCR_PUPD_DOWN);
-                px_pcr->Port[pinpos] |= Px_PCR_PUPD_DOWN;
-            }
-
-            // Configure Driving stregnth selections bit 
-            if(GPIO_InitStruct->GPIO_Pad & Px_PCR_DS_HIGH)
-            {
-                px_pcr->Port[pinpos] |= Px_PCR_DS_HIGH;
-            }
-            else
-            {
-                px_pcr->Port[pinpos] &= ~(Px_PCR_DS_HIGH);
-            }
-
-            // Configure Open Drain selections bit
-            if(GPIO_InitStruct->GPIO_Pad & Px_PCR_OD)
-            {
-                px_pcr->Port[pinpos] |= Px_PCR_OD;
-            }
-           else
-            {
-                px_pcr->Port[pinpos] &= ~(Px_PCR_OD);
-            }
-
-            // Configure Input buffer enable selection bit 
-            if(GPIO_InitStruct->GPIO_Pad & Px_PCR_IE)
-            {
-                px_pcr->Port[pinpos] |= Px_PCR_IE;
-            }
-            else
-            {
-                px_pcr->Port[pinpos] &= ~(Px_PCR_IE);
-            }
-
-            // Configure input type (CMOS input or Summit trigger input) select bit 
-            if(GPIO_InitStruct->GPIO_Pad & Px_PCR_CS_SUMMIT)
-            {
-                px_pcr->Port[pinpos] |= Px_PCR_CS_SUMMIT;
-            }
-            else
-            {
-                px_pcr->Port[pinpos] &= ~(Px_PCR_CS_SUMMIT);
-            }
-        }
-    }
-}
-
-void HAL_GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)
-{
-    GPIO_InitStruct->GPIO_Pin  = GPIO_Pin_All;
-    GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN;
-    GPIO_InitStruct->GPIO_Pad = (GPIOPad_TypeDef)(GPIO_PuPd_UP);
-}
-
-
-uint8_t HAL_GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
-{
-    uint8_t bitstatus = 0x00;
-
-    assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
-    assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
-
-    if((GPIOx->DATA & GPIO_Pin) != (uint32_t)Bit_RESET)
-    {
-        bitstatus = (uint8_t)Bit_SET;
-    }
-    else
-    {
-        bitstatus = (uint8_t)Bit_RESET;
-    }
-
-    return bitstatus;
-}
-
-uint16_t HAL_GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
-{
-    assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
-    return ((uint16_t)GPIOx->DATA);
-}
-
-uint8_t HAL_GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
-{
-    uint8_t bitstatus = 0x00;
-
-
-
-    assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
-    assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
-
-    if((GPIOx->DATAOUT & GPIO_Pin) != (uint32_t)Bit_RESET)
-    {
-        bitstatus = (uint8_t)Bit_SET;
-    }
-    else
-    {
-        bitstatus = (uint8_t)Bit_RESET;
-    }
-
-    return bitstatus;
-}
-uint16_t HAL_GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
-{
-    /* Check the parameters */
-    assert_param(IS_GPIO_ALLPERIPH(GPIOx));
-    return ((uint16_t)GPIOx->DATAOUT);
-}
-
-void HAL_GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
-{
-    /* Check the parameters */
-    assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
-    assert_param(IS_GPIO_PIN(GPIO_Pin)); 
-
-    (GPIOx->LB_MASKED[(uint8_t)(GPIO_Pin)]) = GPIO_Pin;
-    (GPIOx->UB_MASKED[(uint8_t)((GPIO_Pin)>>8)]) = GPIO_Pin;
-}
-
-void HAL_GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
-{
-    /* Check the parameters */
-    assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
-    assert_param(IS_GPIO_PIN(GPIO_Pin));
-
-    (GPIOx->LB_MASKED[(uint8_t)(GPIO_Pin)]) = ~(GPIO_Pin);
-    (GPIOx->UB_MASKED[(uint8_t)(GPIO_Pin>>8)]) = ~(GPIO_Pin);
-}
-
-void HAL_GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
-{
-    /* Check the parameters */
-    assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
-    assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
-    assert_param(IS_GPIO_BIT_ACTION(BitVal)); 
-
-    (GPIOx->LB_MASKED[(uint8_t)(GPIO_Pin)]) = BitVal;
-    (GPIOx->UB_MASKED[(uint8_t)((GPIO_Pin)>>8)]) = BitVal;
-}
-
-void HAL_GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
-{
-    /* Check the parameters */
-    assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
-
-    GPIOx->DATAOUT = PortVal;
-}
-
-void HAL_PAD_AFConfig(PAD_Type Px, uint16_t GPIO_Pin, PAD_AF_TypeDef P_AF)
-{
-    int i;
-    uint16_t idx =0x1;
-    assert_param(IS_PAD_Type(Px));
-
-    for(i=0;i<16;i++)
-    {
-        if(GPIO_Pin & (idx<<i))
-        {
-            if(Px == PAD_PA)
-            {
-                assert_param(IS_PA_NUM(i));
-                PA_AFSR->Port[i] &= ~(0x03ul);
-                PA_AFSR->Port[i] |= P_AF;
-            }
-            else if(Px == PAD_PB)
-            {
-                assert_param(IS_PB_NUM(i));
-                PB_AFSR->Port[i] &= ~(0x03ul);
-                PB_AFSR->Port[i] |= P_AF;
-            }
-            else if(Px == PAD_PC)
-            {
-                assert_param(IS_PC_NUM(i));
-                PC_AFSR->Port[i] &= ~(0x03ul);
-                PC_AFSR->Port[i] |= P_AF;
-            }
-            else
-            {
-                assert_param(IS_PD_NUM(i));
-                PD_AFSR->Port[i] &= ~(0x03ul);
-                PD_AFSR->Port[i] |= P_AF;
-            }				
-        }
-    }
-}
-
-void GPIO_OutEnClr(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
-{
-    GPIOx->OUTENCLR = GPIO_Pin;
-}
-
-void GPIO_OutEnSet(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
-{
-    GPIOx->OUTENSET = GPIO_Pin;
-}
-
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_gpio.h	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,137 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    
-  * @author  
-  * @version 
-  * @date    
-  * @brief   This file contains all the functions prototypes for the GPIO
-  *          firmware library.
-  ******************************************************************************
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __W7500X_HAL_GPIO_H
-#define __W7500X_HAL_GPIO_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "W7500x.h"
-
-#define GPIO_Pin_0      (uint16_t)(0x01 <<  0)     // Pin  0 Selected
-#define GPIO_Pin_1      (uint16_t)(0x01 <<  1)     // Pin  1 Selected
-#define GPIO_Pin_2      (uint16_t)(0x01 <<  2)     // Pin  2 Selected
-#define GPIO_Pin_3      (uint16_t)(0x01 <<  3)     // Pin  3 Selected
-#define GPIO_Pin_4      (uint16_t)(0x01 <<  4)     // Pin  4 Selected
-#define GPIO_Pin_5      (uint16_t)(0x01 <<  5)     // Pin  5 Selected
-#define GPIO_Pin_6      (uint16_t)(0x01 <<  6)     // Pin  6 Selected
-#define GPIO_Pin_7      (uint16_t)(0x01 <<  7)     // Pin  7 Selected
-#define GPIO_Pin_8      (uint16_t)(0x01 <<  8)     // Pin  8 Selected
-#define GPIO_Pin_9      (uint16_t)(0x01 <<  9)     // Pin  9 Selected
-#define GPIO_Pin_10     (uint16_t)(0x01 << 10)     // Pin 10 Selected
-#define GPIO_Pin_11     (uint16_t)(0x01 << 11)     // Pin 11 Selected
-#define GPIO_Pin_12     (uint16_t)(0x01 << 12)     // Pin 12 Selected
-#define GPIO_Pin_13     (uint16_t)(0x01 << 13)     // Pin 13 Selected
-#define GPIO_Pin_14     (uint16_t)(0x01 << 14)     // Pin 14 Selected
-#define GPIO_Pin_15     (uint16_t)(0x01 << 15)     // Pin 15 Selected
-#define GPIO_Pin_All    (uint16_t)(0xFFFF)         // All pins Selected
-
-
-#define IS_GPIO_PIN(PIN)        ((PIN) != (uint16_t)0x00)
-#define IS_GET_GPIO_PIN(PIN)    (((PIN) == GPIO_Pin_0)  || ((PIN) == GPIO_Pin_1)  || \
-                                (((PIN) == GPIO_Pin_2)  || ((PIN) == GPIO_Pin_3)  || \
-                                (((PIN) == GPIO_Pin_4)  || ((PIN) == GPIO_Pin_5)  || \
-                                (((PIN) == GPIO_Pin_6)  || ((PIN) == GPIO_Pin_7)  || \
-                                (((PIN) == GPIO_Pin_8)  || ((PIN) == GPIO_Pin_9)  || \
-                                (((PIN) == GPIO_Pin_10) || ((PIN) == GPIO_Pin_11) || \
-                                (((PIN) == GPIO_Pin_12) || ((PIN) == GPIO_Pin_13) || \
-                                (((PIN) == GPIO_Pin_14) || ((PIN) == GPIO_Pin_15) )
-
-
-#define IS_GPIO_ALL_PERIPH(PERIPH)  (((PERIPH) == GPIOA) || ((PERIPH) == GPIOB) || \
-                                     ((PERIPH) == GPIOC) || ((PERIPH) == GPIOD) )
-
-typedef enum
-{
-    GPIO_Mode_IN    = 0x00, /*!< GPIO Input Mode                 */
-    GPIO_Mode_OUT   = 0x01, /*!< GPIO Output Mode                */
-    GPIO_Mode_AF    = 0x02 /*!< GPIO Alternate function Mode    */
-}GPIOMode_TypeDef;
-
-typedef enum
-{
-    GPIO_NO_PUPD = 0x0ul,
-    GPIO_PuPd_UP = Px_PCR_PUPD_UP,
-    GPIO_PuPd_DOWN = Px_PCR_PUPD_DOWN,
-    GPIO_PuPd_Default = 0x0ul,
-}GPIOPad_TypeDef;
-
-typedef struct
-{
-    uint32_t GPIO_Pin;
-    GPIOMode_TypeDef GPIO_Mode;
-    GPIOPad_TypeDef GPIO_Pad;
-}GPIO_InitTypeDef;
-
-typedef enum
-{
-    Bit_RESET = 0,
-    Bit_SET
-}BitAction;
-
-typedef enum
-{
-    PAD_PA = 0,
-    PAD_PB,
-    PAD_PC,
-    PAD_PD
-}PAD_Type;
-
-typedef enum
-{
-    PAD_AF0    = Px_AFSR_AF0,
-    PAD_AF1    = Px_AFSR_AF1,
-    PAD_AF2    = Px_AFSR_AF2,
-    PAD_AF3    = Px_AFSR_AF3
-}PAD_AF_TypeDef;
-
-#define IS_PAD_TYPE(Px)  (((Px) == PAD_PA) || ((Px) == PAD_PB) \
-                          ((Px) == PAD_PC) || ((Px) == PAD_PD))
-
-#define IS_PA_NUM(NUM) (((NUM)>=0) && ((NUM)<16))
-#define IS_PB_NUM(NUM) (((NUM)>=0) && ((NUM)<16))
-#define IS_PC_NUM(NUM) (((NUM)>=0) && ((NUM)<16))
-#define IS_PD_NUM(NUM) (((NUM)>=0) && ((NUM)< 5))
-
-#define IS_PAD_AF(AF)       (((AF) == PAD_AF0) || ((AF) == PAD_AF1) || \
-                             ((AF) == PAD_AF2) || ((AF) == PAD_AF3))
-
-
-#define IS_GPIO_BIT_ACTION(ACTION)  (((ACTION_ == Bit_RESET) || (ACTION) ==Bit_SET))
-
-void HAL_GPIO_DeInit(GPIO_TypeDef* GPIOx);
-void HAL_GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
-void HAL_GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
-uint8_t HAL_GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
-uint16_t HAL_GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
-uint8_t HAL_GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
-uint16_t HAL_GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
-void HAL_GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
-void HAL_GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
-void HAL_GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
-void HAL_GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
-void HAL_PAD_AFConfig(PAD_Type Px, uint16_t Pnum, PAD_AF_TypeDef P_AF);
-
-void GPIO_OutEnClr(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
-void GPIO_OutEnSet(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // __W7500X_HAL_GPIO_H
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_i2c.c	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,290 +0,0 @@
-/* mbed Microcontroller Library 
- *******************************************************************************
- * Copyright (c) 2015 WIZnet Co.,Ltd. All rights reserved.
- * 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 ARM Limited 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.
- *******************************************************************************
- */
-/*include -------------------------------------*/
-#include <stdio.h>
-#include "W7500x.h"
-
-GPIO_InitTypeDef GPIO_InitDef;
-
-uint32_t I2C_Init(I2C_ConfigStruct* conf)
-{
-    uint32_t scl_port_num;
-    uint32_t scl_pin_index;
-    uint32_t sda_port_num;
-    uint32_t sda_pin_index;
-    
-    scl_port_num = I2C_PORT(conf->scl);
-    scl_pin_index = I2C_PIN_INDEX(conf->scl);
-    
-    sda_port_num = I2C_PORT(conf->sda);
-    sda_pin_index = I2C_PIN_INDEX(conf->sda);
-    
-    //SCL setting
-    GPIO_InitDef.GPIO_Pin = scl_pin_index;
-    GPIO_InitDef.GPIO_Mode = GPIO_Mode_OUT;
-
-    HAL_GPIO_Init((GPIO_TypeDef*)(GPIOA_BASE + (scl_port_num << 24)), &GPIO_InitDef);
-    HAL_GPIO_SetBits((GPIO_TypeDef*)(GPIOA_BASE + (scl_port_num << 24)), scl_pin_index);
-    
-    //SDA setting
-    GPIO_InitDef.GPIO_Pin = sda_pin_index;
-    GPIO_InitDef.GPIO_Mode = GPIO_Mode_IN;
-    
-    HAL_GPIO_Init((GPIO_TypeDef*)(GPIOA_BASE + (sda_port_num << 24)), &GPIO_InitDef);
-    HAL_GPIO_ResetBits((GPIO_TypeDef*)(GPIOA_BASE + (sda_port_num << 24)), sda_pin_index);
-    
-    //Pin muxing
-    HAL_PAD_AFConfig(scl_port_num, scl_pin_index, PAD_AF1);
-    HAL_PAD_AFConfig(sda_port_num, sda_pin_index, PAD_AF1);
-
-    return 0;
-}
-
-void I2C_WriteBitSCL(I2C_ConfigStruct* conf, uint8_t data)
-{
-    uint32_t scl_port_num = I2C_PORT(conf->scl);
-    uint32_t scl_pin_index = I2C_PIN_INDEX(conf->scl);
-
-    if(data == 1)
-        HAL_GPIO_SetBits((GPIO_TypeDef*)(GPIOA_BASE + (scl_port_num << 24)), scl_pin_index);
-    else
-        HAL_GPIO_ResetBits((GPIO_TypeDef*)(GPIOA_BASE + (scl_port_num << 24)), scl_pin_index);
-    
-}
-
-void I2C_WriteBitSDA(I2C_ConfigStruct* conf, uint8_t data)
-{
-    uint32_t sda_port_num = I2C_PORT(conf->sda);
-    uint32_t sda_pin_index = I2C_PIN_INDEX(conf->sda);
-
-    if(data == 1)
-        GPIO_OutEnClr((GPIO_TypeDef*)(GPIOA_BASE + (sda_port_num << 24)), sda_pin_index);
-    else
-        GPIO_OutEnSet((GPIO_TypeDef*)(GPIOA_BASE + (sda_port_num << 24)), sda_pin_index);
-    
-}
-
-uint8_t I2C_ReadBitSDA(I2C_ConfigStruct* conf)
-{
-    uint32_t sda_port_num = I2C_PORT(conf->sda);
-    uint32_t sda_pin_index = I2C_PIN_INDEX(conf->sda);
-    
-    if(HAL_GPIO_ReadInputDataBit((GPIO_TypeDef*)(GPIOA_BASE + (sda_port_num << 24)), sda_pin_index))
-        return 1;
-    else
-        return 0;
-    
-    
-    return 0;
-}
-
-void I2C_Start(I2C_ConfigStruct* conf)
-{
-    I2C_WriteBitSCL(conf, 1);
-    I2C_WriteBitSDA(conf, 1);
-    
-    I2C_WriteBitSDA(conf, 0);
-    I2C_WriteBitSCL(conf, 0);
-}
-
-void I2C_Stop(I2C_ConfigStruct* conf)
-{
-    I2C_WriteBitSCL(conf, 0);
-    I2C_WriteBitSDA(conf, 0);
-    
-    I2C_WriteBitSCL(conf, 1);
-    I2C_WriteBitSDA(conf, 1);
-}
-
-uint8_t I2C_WriteByte(I2C_ConfigStruct* conf, uint8_t data)
-{
-    int i;
-    uint8_t ret;
-    
-    //Write byte
-    for(i=0; i<8; i++)
-    {
-        if((data << i) & 0x80)
-            I2C_WriteBitSDA(conf, 1);
-        else
-            I2C_WriteBitSDA(conf, 0);
-        
-        I2C_WriteBitSCL(conf, 1);
-        I2C_WriteBitSCL(conf, 0);
-    }
-    //Make clk for receiving ack
-    I2C_WriteBitSDA(conf, 1);
-    I2C_WriteBitSCL(conf, 1);
-    //Read Ack/Nack
-    ret = I2C_ReadBitSDA(conf);
-    
-    I2C_WriteBitSCL(conf, 0);
-    
-    return ret;
-}
-
-void I2C_SendACK(I2C_ConfigStruct* conf)
-{
-    I2C_WriteBitSDA(conf, 0);
-    I2C_WriteBitSCL(conf, 1);
-    
-    I2C_WriteBitSCL(conf, 0);
-}
-    
-void I2C_SendNACK(I2C_ConfigStruct* conf)
-{
-    I2C_WriteBitSDA(conf, 1);
-    I2C_WriteBitSCL(conf, 1);
-    
-    I2C_WriteBitSCL(conf, 0);
-}
-
-uint8_t I2C_ReadByte(I2C_ConfigStruct* conf)
-{
-    int i;
-    uint8_t ret = 0;
-    
-    I2C_WriteBitSDA(conf, 1); //out enable clear(GPIO is input)
-    
-    //Read byte
-    for(i=0; i<8; i++)
-    {
-        I2C_WriteBitSCL(conf, 1);
-        ret = (ret << 1) | (I2C_ReadBitSDA(conf));
-        I2C_WriteBitSCL(conf, 0);
-    }
-        
-    return ret;
-}
-
-int I2C_Write(I2C_ConfigStruct* conf, uint8_t addr, uint8_t* data, uint32_t len)
-{
-    int i;
-    
-    I2C_Start(conf);
-    
-    //Write addr
-    if(I2C_WriteByte(conf, addr) != 0)
-    {
-        printf("Received NACK at address phase!!\r\n");
-        return -1;
-    }
-
-    //Write data
-    for(i=0; i<len; i++)
-    {
-        if(I2C_WriteByte(conf, data[i]))
-            return -1;
-    }
-    
-    I2C_Stop(conf);
-    
-    return 0;//success
-}
-
-int I2C_WriteRepeated(I2C_ConfigStruct* conf, uint8_t addr, uint8_t* data, uint32_t len)
-{
-    int i;
-    
-    I2C_Start(conf);
-    
-    //Write addr
-    if(I2C_WriteByte(conf, addr) != 0)
-    {
-        printf("Received NACK at address phase!!\r\n");
-        return -1;
-    }
-
-    //Write data
-    for(i=0; i<len; i++)
-    {
-        if(I2C_WriteByte(conf, data[i]))
-            return -1;
-    }
-    
-    return 0;//success
-}
-
-int I2C_Read(I2C_ConfigStruct* conf, uint8_t addr, uint8_t* data, uint32_t len)
-{
-    int i;
-    
-    I2C_Start(conf);
-    
-    //Write addr | read command
-    if(I2C_WriteByte(conf, (addr | 1)) != 0)
-    {
-        printf("Received NACK at address phase!!\r\n");
-        return -1;
-    }
-    
-    //Read data
-    for(i=0; i<len; i++)
-    {
-        data[i] = I2C_ReadByte(conf);
-        
-        if( i == (len - 1) )
-            I2C_SendNACK(conf);
-        else
-            I2C_SendACK(conf);
-    }
-    
-    I2C_Stop(conf);
-    
-    return 0;//success
-}
-
-int I2C_ReadRepeated(I2C_ConfigStruct* conf, uint8_t addr, uint8_t* data, uint32_t len)
-{
-    int i;
-    
-    I2C_Start(conf);
-    
-    //Write addr | read command
-    if(I2C_WriteByte(conf, (addr | 1)) != 0)
-    {
-        printf("Received NACK at address phase!!\r\n");
-        return -1;
-    }
-    
-    //Read data
-    for(i=0; i<len; i++)
-    {
-        data[i] = I2C_ReadByte(conf);
-        
-        if( i == (len - 1) )
-            I2C_SendNACK(conf);
-        else
-            I2C_SendACK(conf);
-    }
-    
-    return 0;//success
-}
-
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_i2c.h	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/* mbed Microcontroller Library 
- *******************************************************************************
- * Copyright (c) 2015 WIZnet Co.,Ltd. All rights reserved.
- * 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 ARM Limited 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.
- *******************************************************************************
- */
-/*include -------------------------------------*/
-#include "W7500x.h"
-
-#ifndef __W7500X_I2C_H
-#define __W7500X_I2C_H
-
-
-typedef enum {
-    I2C_PA_5    = 0x05,
-    I2C_PA_6    = 0x06,
-    I2C_PA_9    = 0x09,
-    I2C_PA_10   = 0x0A,
-    I2C_PC_4    = 0x24,
-    I2C_PC_5    = 0x25,
-    I2C_PC_8    = 0x28,
-    // Not connected
-    I2C_NC = (int)0xFFFFFFFF
-} I2C_PinName;
-
-typedef struct
-{
-    I2C_PinName scl;
-    I2C_PinName sda;
-}I2C_ConfigStruct;
-
-
-#define I2C_PORT(X) (((uint32_t)(X) >> 4) & 0xF)    // port number (0=A, 1=B, 2=C, 3=D)
-#define I2C_PIN_INDEX(X)  (1 << ((uint32_t)(X) & 0xF))    // pin index : flag bit 
- 
-uint32_t I2C_Init(I2C_ConfigStruct* conf);
-
-void I2C_WriteBitSDA(I2C_ConfigStruct* conf, uint8_t data);
-void I2C_WriteBitSCL(I2C_ConfigStruct* conf, uint8_t data);
-uint8_t I2C_ReadBitSDA(I2C_ConfigStruct* conf);
-
-void I2C_SendACK(I2C_ConfigStruct* conf);
-void I2C_SendNACK(I2C_ConfigStruct* conf);
-
-uint8_t I2C_WriteByte(I2C_ConfigStruct* conf, uint8_t data);
-uint8_t I2C_ReadByte(I2C_ConfigStruct* conf);
-
-void I2C_Start(I2C_ConfigStruct* conf);
-void I2C_Stop(I2C_ConfigStruct* conf);
-
-int I2C_Write(I2C_ConfigStruct* conf, uint8_t addr, uint8_t* data, uint32_t len);
-int I2C_WriteRepeated(I2C_ConfigStruct* conf, uint8_t addr, uint8_t* data, uint32_t len);
-int I2C_Read(I2C_ConfigStruct* conf, uint8_t addr, uint8_t* data, uint32_t len);
-int I2C_ReadRepeated(I2C_ConfigStruct* conf, uint8_t addr, uint8_t* data, uint32_t len);
-
-
- #endif //__W7500X_I2C_H
-
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_pwm.c	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,905 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    
-  * @author  
-  * @version 
-  * @date    
-  * @brief   This file contains all the functions prototypes for the UART 
-  *          firmware library.
-  ******************************************************************************
-  *
-  ******************************************************************************
-  */
-  
-/* Includes -------------------------------------------*/
-#include "W7500x.h"
-
-void PWM_DeInit(PWM_CHn_TypeDef* PWM_CHn)
-{
-    if( PWM_CHn == PWM_CH0 )
-    {
-        PWM->IER        &= PWM_IER_IE0_Disable;  ///< Interrupt enable register 
-        PWM->SSR        &= PWM_SSR_SS0_Stop;     ///< Start Stop register 
-        PWM->PSR        &= PWM_PSR_PS0_Restart;  ///< Pause register 
-        PWM_CH0->IER    = 0;                    ///< Interrupt enable register 
-        PWM_CH0->ICR    =  PWM_CHn_ICR_MatchInterruptClear      | 
-                           PWM_CHn_ICR_OverflowInterruptClear   | 
-                           PWM_CHn_ICR_CaptureInterruptClear;   ///< Interrupt clear register
-        PWM_CH0->PR     = 0;                    ///< Prescale register 
-        PWM_CH0->MR     = 0;                    ///< Match register 
-        PWM_CH0->LR     = 0xFFFFFFFF;           ///< Limit register 
-        PWM_CH0->UDMR   = 0;                    ///< Up Dowm mode register
-        PWM_CH0->TCMR   = 0;                    ///< Timer Counter mode register
-        PWM_CH0->PEEER  = 0;                    ///< PWM output Enable and External input Enable register
-        PWM_CH0->CMR    = 0;                    ///< Capture mode register
-        PWM_CH0->PDMR   = 0;                    ///< Periodic Mode register
-        PWM_CH0->DZER   = 0;                    ///< Dead Zone Enable register
-        PWM_CH0->DZCR   = 0;                    ///< Dead Zone Counter register
-    }
-    else if( PWM_CHn == PWM_CH1 )
-    {
-        PWM->IER        &= PWM_IER_IE1_Disable;  ///< Reset Interrupt enable register 
-        PWM->SSR        &= PWM_SSR_SS1_Stop;     ///< Reset Start Stop register 
-        PWM->PSR        &= PWM_PSR_PS1_Restart;  ///< Reset Pause register 
-        PWM_CH1->IER    = 0;                    ///< Interrupt enable register 
-        PWM_CH1->ICR    =  PWM_CHn_ICR_MatchInterruptClear      | 
-                           PWM_CHn_ICR_OverflowInterruptClear   | 
-                           PWM_CHn_ICR_CaptureInterruptClear;   ///< Interrupt clear register
-        PWM_CH1->PR     = 0;                    ///< Prescale register 
-        PWM_CH1->MR     = 0;                    ///< Match register 
-        PWM_CH1->LR     = 0xFFFFFFFF;           ///< Limit register 
-        PWM_CH1->UDMR   = 0;                    ///< Up Dowm mode register
-        PWM_CH1->TCMR   = 0;                    ///< Timer Counter mode register
-        PWM_CH1->PEEER  = 0;                    ///< PWM output Enable and External input Enable register
-        PWM_CH1->CMR    = 0;                    ///< Capture mode register
-        PWM_CH1->PDMR   = 0;                    ///< Periodic Mode register
-        PWM_CH1->DZER   = 0;                    ///< Dead Zone Enable register
-        PWM_CH1->DZCR   = 0;                    ///< Dead Zone Counter register
-    }
-    else if( PWM_CHn == PWM_CH2)
-    {
-        PWM->IER        &= PWM_IER_IE2_Disable;  ///< Interrupt enable register 
-        PWM->SSR        &= PWM_SSR_SS2_Stop;     ///< Start Stop register 
-        PWM->PSR        &= PWM_PSR_PS2_Restart;  ///< Pause register 
-        PWM_CH2->IER    = 0;                    ///< Interrupt enable register 
-        PWM_CH2->ICR    =  PWM_CHn_ICR_MatchInterruptClear      | 
-                           PWM_CHn_ICR_OverflowInterruptClear   | 
-                           PWM_CHn_ICR_CaptureInterruptClear;   ///< Interrupt clear register
-        PWM_CH2->PR     = 0;                    ///< Prescale register 
-        PWM_CH2->MR     = 0;                    ///< Match register 
-        PWM_CH2->LR     = 0xFFFFFFFF;           ///< Limit register 
-        PWM_CH2->UDMR   = 0;                    ///< Up Dowm mode register
-        PWM_CH2->TCMR   = 0;                    ///< Timer Counter mode register
-        PWM_CH2->PEEER  = 0;                    ///< PWM output Enable and External input Enable register
-        PWM_CH2->CMR    = 0;                    ///< Capture mode register
-        PWM_CH2->PDMR   = 0;                    ///< Periodic Mode register
-        PWM_CH2->DZER   = 0;                    ///< Dead Zone Enable register
-        PWM_CH2->DZCR   = 0;                    ///< Dead Zone Counter register
-    }
-    else if( PWM_CHn == PWM_CH3 )
-    {
-        PWM->IER        &= PWM_IER_IE3_Disable;  ///< Interrupt enable register 
-        PWM->SSR        &= PWM_SSR_SS3_Stop;     ///< Start Stop register 
-        PWM->PSR        &= PWM_PSR_PS3_Restart;  ///< Pause register 
-        PWM_CH3->IER    = 0;                    ///< Interrupt enable register 
-        PWM_CH3->ICR    =  PWM_CHn_ICR_MatchInterruptClear      | 
-                           PWM_CHn_ICR_OverflowInterruptClear   | 
-                           PWM_CHn_ICR_CaptureInterruptClear;   ///< Interrupt clear register
-        PWM_CH3->MR     = 0;                    ///< Match register 
-        PWM_CH3->LR     = 0xFFFFFFFF;           ///< Limit register 
-        PWM_CH3->UDMR   = 0;                    ///< Up Dowm mode register
-        PWM_CH3->TCMR   = 0;                    ///< Timer Counter mode register
-        PWM_CH3->PEEER  = 0;                    ///< PWM output Enable and External input Enable register
-        PWM_CH3->CMR    = 0;                    ///< Capture mode register
-        PWM_CH3->PDMR   = 0;                    ///< Periodic Mode register
-        PWM_CH3->DZER   = 0;                    ///< Dead Zone Enable register
-        PWM_CH3->DZCR   = 0;                    ///< Dead Zone Counter register
-    }
-    else if( PWM_CHn == PWM_CH4 )
-    {
-        PWM->SSR        &= PWM_IER_IE4_Disable;  ///< Start Stop register 
-        PWM->PSR        &= PWM_SSR_SS4_Stop;     ///< Pause register 
-        PWM->IER        &= PWM_PSR_PS4_Restart;  ///< Interrupt enable register 
-        PWM_CH4->IER    = 0;                    ///< Interrupt enable register 
-        PWM_CH4->ICR    =  PWM_CHn_ICR_MatchInterruptClear      | 
-                           PWM_CHn_ICR_OverflowInterruptClear   | 
-                           PWM_CHn_ICR_CaptureInterruptClear;   ///< Interrupt clear register
-        PWM_CH4->PR     = 0;                    ///< Prescale register 
-        PWM_CH4->MR     = 0;                    ///< Match register 
-        PWM_CH4->LR     = 0xFFFF;               ///< Limit register 
-        PWM_CH4->UDMR   = 0;                    ///< Up Dowm mode register
-        PWM_CH4->TCMR   = 0;                    ///< Timer Counter mode register
-        PWM_CH4->PEEER  = 0;                    ///< PWM output Enable and External input Enable register
-        PWM_CH4->CMR    = 0;                    ///< Capture mode register
-        PWM_CH4->PDMR   = 0;                    ///< Periodic Mode register
-        PWM_CH4->DZER   = 0;                    ///< Dead Zone Enable register
-        PWM_CH4->DZCR   = 0;                    ///< Dead Zone Counter register
-    }
-    else if( PWM_CHn == PWM_CH5 )
-    {
-        PWM->SSR        &= PWM_IER_IE5_Disable;  ///< Start Stop register 
-        PWM->PSR        &= PWM_SSR_SS5_Stop;     ///< Pause register 
-        PWM->IER        &= PWM_PSR_PS5_Restart;  ///< Interrupt enable register 
-        PWM_CH5->IER    = 0;                    ///< Interrupt enable register 
-        PWM_CH5->ICR    =  PWM_CHn_ICR_MatchInterruptClear      |
-                           PWM_CHn_ICR_OverflowInterruptClear   | 
-                           PWM_CHn_ICR_CaptureInterruptClear;   ///< Interrupt clear register
-        PWM_CH5->PR     = 0;                    ///< Prescale register 
-        PWM_CH5->MR     = 0;                    ///< Match register 
-        PWM_CH5->LR     = 0xFFFFFFFF;           ///< Limit register 
-        PWM_CH5->UDMR   = 0;                    ///< Up Dowm mode register
-        PWM_CH5->TCMR   = 0;                    ///< Timer Counter mode register
-        PWM_CH5->PEEER  = 0;                    ///< PWM output Enable and External input Enable register
-        PWM_CH5->CMR    = 0;                    ///< Capture mode register
-        PWM_CH5->PDMR   = 0;                    ///< Periodic Mode register
-        PWM_CH5->DZER   = 0;                    ///< Dead Zone Enable register
-        PWM_CH5->DZCR   = 0;                    ///< Dead Zone Counter register
-    }
-    else if( PWM_CHn == PWM_CH6 )
-    {
-        PWM->SSR        &= PWM_IER_IE6_Disable;  ///< Start Stop register 
-        PWM->PSR        &= PWM_SSR_SS6_Stop;     ///< Pause register 
-        PWM->IER        &= PWM_PSR_PS6_Restart;  ///< Interrupt enable register 
-        PWM_CH6->IER    = 0;                    ///< Interrupt enable register 
-        PWM_CH6->ICR    =  PWM_CHn_ICR_MatchInterruptClear      | 
-                           PWM_CHn_ICR_OverflowInterruptClear   | 
-                           PWM_CHn_ICR_CaptureInterruptClear;   ///< Interrupt clear register
-        PWM_CH6->PR     = 0;                    ///< Prescale register 
-        PWM_CH6->MR     = 0;                    ///< Match register 
-        PWM_CH6->LR     = 0xFFFFFFFF;           ///< Limit register 
-        PWM_CH6->UDMR   = 0;                    ///< Up Dowm mode register
-        PWM_CH6->TCMR   = 0;                    ///< Timer Counter mode register
-        PWM_CH6->PEEER  = 0;                    ///< PWM output Enable and External input Enable register
-        PWM_CH6->CMR    = 0;                    ///< Capture mode register
-        PWM_CH6->PDMR   = 0;                    ///< Periodic Mode register
-        PWM_CH6->DZER   = 0;                    ///< Dead Zone Enable register
-        PWM_CH6->DZCR   = 0;                    ///< Dead Zone Counter register
-    }
-    else if( PWM_CHn == PWM_CH7 )
-    {
-        PWM->SSR        &= PWM_IER_IE7_Disable;  ///< Start Stop register 
-        PWM->PSR        &= PWM_SSR_SS7_Stop;     ///< Pause register 
-        PWM->IER        &= PWM_PSR_PS7_Restart;  ///< Interrupt enable register 
-        PWM_CH7->IER    = 0;                    ///< Interrupt enable register 
-        PWM_CH7->ICR    = PWM_CHn_ICR_MatchInterruptClear      | 
-                          PWM_CHn_ICR_OverflowInterruptClear   | 
-                          PWM_CHn_ICR_CaptureInterruptClear;   ///< Interrupt clear register
-        PWM_CH7->PR     = 0;                    ///< Prescale register 
-        PWM_CH7->MR     = 0;                    ///< Match register 
-        PWM_CH7->LR     = 0xFFFFFFFF;           ///< Limit register 
-        PWM_CH7->UDMR   = 0;                    ///< Up Dowm mode register
-        PWM_CH7->TCMR   = 0;                    ///< Timer Counter mode register
-        PWM_CH7->PEEER  = 0;                    ///< PWM output Enable and External input Enable register
-        PWM_CH7->CMR    = 0;                    ///< Capture mode register
-        PWM_CH7->PDMR   = 0;                    ///< Periodic Mode register
-        PWM_CH7->DZER   = 0;                    ///< Dead Zone Enable register
-        PWM_CH7->DZCR   = 0;                    ///< Dead Zone Counter register
-    }
-}
-
-
-void PWM_TimerModeInit(PWM_CHn_TypeDef* PWM_CHn, PWM_TimerModeInitTypeDef* PWM_TimerModeInitStruct) //complet
-{
-    /* Stop PWM_CHn */
-    PWM_CHn_Stop(PWM_CHn);
-    /* Select Timer/Counter mode as Timer mode */ 
-    PWM_CHn->TCMR = PWM_CHn_TCMR_TimerMode;
-    /* Set Prescale register value */
-    PWM_CHn->PR = PWM_TimerModeInitStruct->PWM_CHn_PR;
-    /* Set Match register value */
-    PWM_CHn->MR = PWM_TimerModeInitStruct->PWM_CHn_MR;
-    /* Set Limit register value */
-    PWM_CHn->LR = PWM_TimerModeInitStruct->PWM_CHn_LR;
-    /* Select Up-down mode */
-    PWM_CHn->UDMR = PWM_TimerModeInitStruct->PWM_CHn_UDMR;
-    /* Select Periodic mode */ 
-    PWM_CHn->PDMR = PWM_TimerModeInitStruct->PWM_CHn_PDMR;
-}
-
-void PWM_CaptureModeInit(PWM_CHn_TypeDef* PWM_CHn, PWM_CaptureModeInitTypeDef* PWM_CaptureModeInitStruct) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-    assert_param(IS_PWM_PR_FILTER(PWM_CaptureModeInitStruct->PWM_CHn_PR));
-    assert_param(IS_PWM_MR_FILTER(PWM_CHn, PWM_CaptureModeInitStruct->PWM_CHn_MR));
-    assert_param(IS_PWM_LR_FILTER(PWM_CHn, PWM_CaptureModeInitStruct->PWM_CHn_LR));
-    assert_param(IS_PWM_CHn_UDMR(PWM_CaptureModeInitStruct->PWM_CHn_UDMR));
-    assert_param(IS_PWM_CHn_PDMR(PWM_CaptureModeInitStruct->PWM_CHn_PDMR));
-    assert_param(IS_PWM_CHn_CMR(PWM_CaptureModeInitStruct->PWM_CHn_CMR));
-
-    /* Stop PWM_CHn */
-    PWM_CHn_Stop(PWM_CHn);
-    /* Select Timer/Counter mode as Timer mode */ 
-    PWM_CHn->TCMR = PWM_CHn_TCMR_TimerMode;
-    /* Set Prescale register value */
-    PWM_CHn->PR = PWM_CaptureModeInitStruct->PWM_CHn_PR;
-    /* Set Match register value */
-    PWM_CHn->MR = PWM_CaptureModeInitStruct->PWM_CHn_MR;
-    /* Set Limit register value */
-    PWM_CHn->LR = PWM_CaptureModeInitStruct->PWM_CHn_LR;
-    /* Select Up-down mode */
-    PWM_CHn->UDMR = PWM_CaptureModeInitStruct->PWM_CHn_UDMR;
-    /* Select Periodic mode */ 
-    PWM_CHn->PDMR = PWM_CaptureModeInitStruct->PWM_CHn_PDMR;
-    /* Select Capture mode */
-    PWM_CHn->CMR = PWM_CaptureModeInitStruct->PWM_CHn_CMR;
-    /* External input enable */
-    PWM_CHn->PEEER = PWM_CHn_PEEER_ExtEnable;
-}
-
-void PWM_CounterModeInit(PWM_CHn_TypeDef* PWM_CHn, PWM_CounterModeInitTypeDef* PWM_CounterModeInitStruct) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-    /* Stop PWM_CHn */
-    PWM_CHn_Stop(PWM_CHn);
-    /* Select Timer/Counter mode as Timer mode */ 
-    PWM_CHn->TCMR = PWM_CHn_TCMR_TimerMode;    
-    /* Set Match register value */
-    PWM_CHn->MR = PWM_CounterModeInitStruct->PWM_CHn_MR;
-    /* Set Limit register value */
-    PWM_CHn->LR = PWM_CounterModeInitStruct->PWM_CHn_LR;
-    /* Select Up-down mode */
-    PWM_CHn->UDMR = PWM_CounterModeInitStruct->PWM_CHn_UDMR;
-    /* Select Periodic mode */ 
-    PWM_CHn->PDMR = PWM_CounterModeInitStruct->PWM_CHn_PDMR;
-    /* Select Counter mode */ 
-    PWM_CHn->TCMR = PWM_CounterModeInitStruct->PWM_CHn_TCMR;
-    /* Enable external input */
-    PWM_CHn->PEEER = PWM_CHn_PEEER_ExtEnable; 
-}
-
-void PWM_DeadzoneModeInit(PWM_CHn_TypeDef* PWM_CHn, PWM_DeadzoneModeInitTypDef* PWM_DeadzoneModeInitStruct) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-    assert_param(IS_PWM_PR_FILTER(PWM_DeadzoneModeInitStruct->PWM_CHn_PR));
-    assert_param(IS_PWM_MR_FILTER(PWM_CHn, PWM_DeadzoneModeInitStruct->PWM_CHn_MR));
-    assert_param(IS_PWM_LR_FILTER(PWM_CHn, PWM_DeadzoneModeInitStruct->PWM_CHn_LR));
-    assert_param(IS_PWM_CHn_UDMR(PWM_DeadzoneModeInitStruct->PWM_CHn_UDMR));
-    assert_param(IS_PWM_CHn_PDMR(PWM_DeadzoneModeInitStruct->PWM_CHn_PDMR));
-    assert_param(IS_PWM_Deadznoe(PWM_CHn));
-
-    /* Stop PWM_CHn */
-    PWM_CHn_Stop(PWM_CHn);
-    /* Select Timer/Counter mode as Timer mode */ 
-    PWM_CHn->TCMR = PWM_CHn_TCMR_TimerMode;
-    /* Set Prescale register value */
-    PWM_CHn->PR = PWM_DeadzoneModeInitStruct->PWM_CHn_PR;
-    /* Set Match register value */
-    PWM_CHn->MR = PWM_DeadzoneModeInitStruct->PWM_CHn_MR;
-    /* Set Limit register value */
-    PWM_CHn->LR = PWM_DeadzoneModeInitStruct->PWM_CHn_LR;
-    /* Select Up-down mode */
-    PWM_CHn->UDMR = PWM_DeadzoneModeInitStruct->PWM_CHn_UDMR;
-    /* Select Periodic mode */ 
-    PWM_CHn->PDMR = PWM_DeadzoneModeInitStruct->PWM_CHn_PDMR;
-    /* Enable Dead Zone generation */
-    PWM_CHn->DZER = PWM_CHn_DZER_Enable; 
-    /* Set Dead Zone Counter */
-    PWM_CHn->DZCR = PWM_DeadzoneModeInitStruct->PWM_CHn_DZCR;
-}
-
-void PWM_CtrlPWMOutput(PWM_CHn_TypeDef* PWM_CHn, uint32_t outputEnDisable ) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-    assert_param(IS_PWM_Output(outputEnDisable)); 
-    if( PWM_CHn->DZER )
-        assert_param(IS_PWM_Deadznoe(PWM_CHn));
-
-    /* Stop PWM_CHn */
-    PWM_CHn_Stop(PWM_CHn);
-    /*Config PWM output and External input */
-    PWM_CHn->PEEER = outputEnDisable; 
-}
-
-void PWM_CtrlPWMOutputEnable(PWM_CHn_TypeDef* PWM_CHn) 
-{
-    PWM_CtrlPWMOutput(PWM_CHn, PWM_CHn_PEEER_PWMEnable);
-}
-
-void PWM_CtrlPWMOutputDisable(PWM_CHn_TypeDef* PWM_CHn) 
-{
-    PWM_CtrlPWMOutput(PWM_CHn, PWM_CHn_PEEER_Disable);
-}
-
-void PWM_IntConfig(PWM_CHn_TypeDef* PWM_CHn, FunctionalState state) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-    
-    /* Stop PWM_CHn */
-    PWM_CHn_Stop(PWM_CHn);
-
-    if(state == ENABLE)
-    {
-        if(PWM_CHn == PWM_CH0) { 
-            PWM->IER |= PWM_IER_IE0_Enable;
-        }
-        else if(PWM_CHn == PWM_CH1) {
-            PWM->IER |= PWM_IER_IE1_Enable;
-        }
-        else if(PWM_CHn == PWM_CH2) {
-            PWM->IER |= PWM_IER_IE2_Enable;
-        }
-        else if(PWM_CHn == PWM_CH3) {
-            PWM->IER |= PWM_IER_IE3_Enable;
-        }
-        else if(PWM_CHn == PWM_CH4) {
-            PWM->IER |= PWM_IER_IE4_Enable;
-        }
-        else if(PWM_CHn == PWM_CH5) {
-            PWM->IER |= PWM_IER_IE5_Enable;
-        }
-        else if(PWM_CHn == PWM_CH6) {
-            PWM->IER |= PWM_IER_IE6_Enable;
-        }
-        else if(PWM_CHn == PWM_CH7) {
-            PWM->IER |= PWM_IER_IE7_Enable;
-        }
-    }
-    else
-    {
-        if(PWM_CHn == PWM_CH0) { 
-            PWM->IER &= PWM_IER_IE0_Disable;
-        }
-        else if(PWM_CHn == PWM_CH1) {
-            PWM->IER &= PWM_IER_IE1_Disable;
-        }
-        else if(PWM_CHn == PWM_CH2) {
-            PWM->IER &= PWM_IER_IE2_Disable;
-        }
-        else if(PWM_CHn == PWM_CH3) {
-            PWM->IER &= PWM_IER_IE3_Disable;
-        }
-        else if(PWM_CHn == PWM_CH4) {
-            PWM->IER &= PWM_IER_IE4_Disable;
-        }
-        else if(PWM_CHn == PWM_CH5) {
-            PWM->IER &= PWM_IER_IE5_Disable;
-        }
-        else if(PWM_CHn == PWM_CH6) {
-            PWM->IER &= PWM_IER_IE6_Disable;
-        }
-        else if(PWM_CHn == PWM_CH7) {
-            PWM->IER &= PWM_IER_IE7_Disable;
-        }
-    }
-}
- 
-FlagStatus PWM_GetIntEnableStatus(PWM_CHn_TypeDef* PWM_CHn)
-{
-    FlagStatus ret_val = RESET;
-
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-    if(PWM_CHn == PWM_CH0) { 
-        ret_val = (FlagStatus)((PWM->IER & 0x01) >> 0);
-    }
-    else if(PWM_CHn == PWM_CH1) {
-        ret_val = (FlagStatus)((PWM->IER & 0x02) >> 1);
-    }
-    else if(PWM_CHn == PWM_CH2) {
-        ret_val = (FlagStatus)((PWM->IER & 0x04) >> 2);
-    }
-    else if(PWM_CHn == PWM_CH3) {
-        ret_val = (FlagStatus)((PWM->IER & 0x08) >> 3);
-    }
-    else if(PWM_CHn == PWM_CH4) {
-        ret_val = (FlagStatus)((PWM->IER & 0x10) >> 4);
-    }
-    else if(PWM_CHn == PWM_CH5) {
-        ret_val = (FlagStatus)((PWM->IER & 0x20) >> 5);
-    }
-    else if(PWM_CHn == PWM_CH6) {
-        ret_val = (FlagStatus)((PWM->IER & 0x40) >> 6);
-    }
-    else if(PWM_CHn == PWM_CH7) {
-        ret_val =  (FlagStatus)((PWM->IER & 0x80) >> 7);
-    }
-
-    return ret_val;
-}
-
-void PWM_CHn_IntConfig(PWM_CHn_TypeDef* PWM_CHn, uint32_t PWM_CHn_IER, FunctionalState state) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-    
-	
-	 assert_param(IS_PWM_CHn_IER(PWM_CHn_IER));
-    
-    /* Stop PWM_CHn */
-    PWM_CHn_Stop(PWM_CHn);
-
-    if(state == ENABLE)
-        PWM_CHn->IER |= PWM_CHn_IER;
-    else 
-        PWM_CHn->IER &= ~PWM_CHn_IER;
-}
-
-uint32_t PWM_CHn_GetIntEnableStatus(PWM_CHn_TypeDef* PWM_CHn) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-    return PWM_CHn->IER;
-}
-
-uint32_t PWM_CHn_GetIntFlagStatus(PWM_CHn_TypeDef* PWM_CHn) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-    return PWM_CHn->IR;
-}
-
-void PWM_CHn_ClearInt(PWM_CHn_TypeDef* PWM_CHn, uint32_t PWM_CHn_ICR)
-{
-    /* Check the parameters */
-
-    PWM_CHn->ICR = PWM_CHn_ICR;
-}
-
-void PWM_CHn_Start(PWM_CHn_TypeDef* PWM_CHn) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-    /* Set Start Stop register */
-    if(PWM_CHn == PWM_CH0) { 
-        PWM->SSR |= PWM_SSR_SS0_Start;
-    }
-    else if(PWM_CHn == PWM_CH1) {
-        PWM->SSR |= PWM_SSR_SS1_Start;
-    }
-    else if(PWM_CHn == PWM_CH2) {
-        PWM->SSR |= PWM_SSR_SS2_Start;
-    }
-    else if(PWM_CHn == PWM_CH3) {
-        PWM->SSR |= PWM_SSR_SS3_Start;
-    }
-    else if(PWM_CHn == PWM_CH4) {
-        PWM->SSR |= PWM_SSR_SS4_Start;
-    }
-    else if(PWM_CHn == PWM_CH5) {
-        PWM->SSR |= PWM_SSR_SS5_Start;
-    }
-    else if(PWM_CHn == PWM_CH6) {
-        PWM->SSR |= PWM_SSR_SS6_Start;
-    }
-    else if(PWM_CHn == PWM_CH7) {
-        PWM->SSR |= PWM_SSR_SS7_Start;
-    }
-}
-
-void PWM_Multi_Start(uint32_t ssr_bit_flag) //complete
-{
-    /* Set Start Stop register */
-    PWM->SSR |= ssr_bit_flag;
-}
-
-void PWM_CHn_Stop(PWM_CHn_TypeDef* PWM_CHn) //complete
-{
-    /* Reset Start Stop register */
-    if(PWM_CHn == PWM_CH0) { 
-        PWM->SSR &= PWM_SSR_SS0_Stop;
-    }
-    else if(PWM_CHn == PWM_CH1) {
-        PWM->SSR &= PWM_SSR_SS1_Stop;
-    }
-    else if(PWM_CHn == PWM_CH2) {
-        PWM->SSR &= PWM_SSR_SS2_Stop;
-    }
-    else if(PWM_CHn == PWM_CH3) {
-        PWM->SSR &= PWM_SSR_SS3_Stop;
-    }
-    else if(PWM_CHn == PWM_CH4) {
-        PWM->SSR &= PWM_SSR_SS4_Stop;
-    }
-    else if(PWM_CHn == PWM_CH5) {
-        PWM->SSR &= PWM_SSR_SS5_Stop;
-    }
-    else if(PWM_CHn == PWM_CH6) {
-        PWM->SSR &= PWM_SSR_SS6_Stop;
-    }
-    else if(PWM_CHn == PWM_CH7) {
-        PWM->SSR &= PWM_SSR_SS7_Stop;
-    }
-}
-
-void PWM_Multi_Stop(uint32_t ssr_bit_flag) //complete
-{
-    /* Reset Start Stop register */
-    PWM->SSR &= ~ssr_bit_flag;
-}
-
-void PWM_CHn_Pause(PWM_CHn_TypeDef* PWM_CHn)
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-    /* Set Pause register */
-    if(PWM_CHn == PWM_CH0) { 
-        PWM->PSR |= PWM_PSR_PS0_Pause;
-    }
-    else if(PWM_CHn == PWM_CH1) {
-        PWM->PSR |= PWM_PSR_PS1_Pause;
-    }
-    else if(PWM_CHn == PWM_CH2) {
-        PWM->PSR |= PWM_PSR_PS2_Pause;
-    }
-    else if(PWM_CHn == PWM_CH3) {
-        PWM->PSR |= PWM_PSR_PS3_Pause;
-    }
-    else if(PWM_CHn == PWM_CH4) {
-        PWM->PSR |= PWM_PSR_PS4_Pause;
-    }
-    else if(PWM_CHn == PWM_CH5) {
-        PWM->PSR |= PWM_PSR_PS5_Pause;
-    }
-    else if(PWM_CHn == PWM_CH6) {
-        PWM->PSR |= PWM_PSR_PS6_Pause;
-    }
-    else if(PWM_CHn == PWM_CH7) {
-        PWM->PSR |= PWM_PSR_PS7_Pause;
-    }
-}
-
-void PWM_Multi_Pause(uint32_t psr_bit_flag)
-{
-    PWM->PSR |= psr_bit_flag;
-}
-
-void PWM_CHn_Restart(PWM_CHn_TypeDef* PWM_CHn)
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-    /* Reset Pause register */
-    if(PWM_CHn == PWM_CH0) { 
-        PWM->PSR &= PWM_PSR_PS0_Restart;
-    }
-    else if(PWM_CHn == PWM_CH1) {
-        PWM->PSR &= PWM_PSR_PS1_Restart;
-    }
-    else if(PWM_CHn == PWM_CH2) {
-        PWM->PSR &= PWM_PSR_PS2_Restart;
-    }
-    else if(PWM_CHn == PWM_CH3) {
-        PWM->PSR &= PWM_PSR_PS3_Restart;
-    }
-    else if(PWM_CHn == PWM_CH4) {
-        PWM->PSR &= PWM_PSR_PS4_Restart;
-    }
-    else if(PWM_CHn == PWM_CH5) {
-        PWM->PSR &= PWM_PSR_PS5_Restart;
-    }
-    else if(PWM_CHn == PWM_CH6) {
-        PWM->PSR &= PWM_PSR_PS6_Restart;
-    }
-    else if(PWM_CHn == PWM_CH7) {
-        PWM->PSR &= PWM_PSR_PS7_Restart;
-    }
-}
-
-void PWM_Multi_Restart(uint32_t psr_bit_flag)
-{
-    PWM->PSR &= ~psr_bit_flag;
-}
-
-
-uint32_t PWM_CHn_GetTCR(PWM_CHn_TypeDef* PWM_CHn) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-    return PWM_CHn->TCR;
-}
-
-uint32_t PWM_CHn_GetPCR(PWM_CHn_TypeDef* PWM_CHn) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-    return PWM_CHn->PCR;
-}
-
-uint32_t PWM_CHn_GetPR(PWM_CHn_TypeDef* PWM_CHn) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-    return PWM_CHn->PR;
-}
-
-void PWM_CHn_SetPR(PWM_CHn_TypeDef* PWM_CHn, uint32_t PR) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-    assert_param(IS_PWM_PR_FILTER(PR));
-
-    PWM_CHn->PR = PR;
-}
-
-uint32_t PWM_CHn_GetMR(PWM_CHn_TypeDef* PWM_CHn) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-    return PWM_CHn->MR;
-}
-
-void PWM_CHn_SetMR(PWM_CHn_TypeDef* PWM_CHn, uint32_t MR) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-    PWM_CHn->MR = MR;
-}
-
-uint32_t PWM_CHn_GetLR(PWM_CHn_TypeDef* PWM_CHn) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-    return PWM_CHn->LR;
-}
-
-void PWM_CHn_SetLR(PWM_CHn_TypeDef* PWM_CHn, uint32_t LR) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-    PWM_CHn->LR = LR;
-}
-
-uint32_t PWM_CHn_GetUDMR(PWM_CHn_TypeDef* PWM_CHn) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-    return PWM_CHn->UDMR;
-}
-
-void PWM_CHn_SetUDMR(PWM_CHn_TypeDef* PWM_CHn, uint32_t UDMR) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-    assert_param(IS_PWM_CHn_UDMR(UDMR));
-
-    PWM_CHn->UDMR = UDMR;
-}
-
-uint32_t PWM_CHn_GetTCMR(PWM_CHn_TypeDef* PWM_CHn) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-    return PWM_CHn->TCMR;
-}
-
-void PWM_CHn_SetTCMR(PWM_CHn_TypeDef* PWM_CHn, uint32_t TCMR) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-    assert_param(IS_PWM_CHn_TCMR(TCMR));
-
-    PWM_CHn->TCMR = TCMR;
-}
-
-uint32_t PWM_CHn_GetPEEER(PWM_CHn_TypeDef* PWM_CHn) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-    return PWM_CHn->PEEER;
-}
-
-void PWM_CHn_SetPEEER(PWM_CHn_TypeDef* PWM_CHn, uint32_t PEEER) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-    assert_param(IS_PWM_CHn_PEEER(PEEER));
-
-    PWM_CHn->PEEER = PEEER;
-}
-
-uint32_t PWM_CHn_GetCMR(PWM_CHn_TypeDef* PWM_CHn) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-    return PWM_CHn->CMR;
-}
-
-void PWM_CHn_SetCMR(PWM_CHn_TypeDef* PWM_CHn, uint32_t CMR) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-    assert_param(IS_PWM_CHn_CMR(CMR));
-
-    PWM_CHn->CMR = CMR;
-}
-
-uint32_t PWM_CHn_GetCR(PWM_CHn_TypeDef* PWM_CHn)
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-    return PWM_CHn->CR;
-}
-
-uint32_t PWM_CHn_GetPDMR(PWM_CHn_TypeDef* PWM_CHn) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-    return PWM_CHn->PDMR;
-}
-
-void PWM_CHn_SetPDMR(PWM_CHn_TypeDef* PWM_CHn, uint32_t PDMR) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-    assert_param(IS_PWM_CHn_PDMR(PDMR));
-
-    PWM_CHn->PDMR = PDMR; 
-}
-
-uint32_t PWM_CHn_GetDZER(PWM_CHn_TypeDef* PWM_CHn) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-   return PWM_CHn->DZER;
-}
-
-void PWM_CHn_SetDZER(PWM_CHn_TypeDef* PWM_CHn, uint32_t DZER) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-    assert_param(IS_PWM_CHn_DZER(DZER));
-
-    PWM_CHn->DZER = DZER;
-}
-
-uint32_t PWM_CHn_GetDZCR(PWM_CHn_TypeDef* PWM_CHn) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-
-   return PWM_CHn->DZCR;
-}
-
-void PWM_CHn_SetDZCR(PWM_CHn_TypeDef* PWM_CHn, uint32_t DZCR) //complete
-{
-    /* Check the parameters */
-    assert_param(IS_PWM_ALL_CH(PWM_CHn));
-    assert_param(IS_PWM_CHn_DZCR_FILTER(DZCR));
-
-    PWM_CHn->DZCR = DZCR; 
-}
-
-void PWM_CH0_ClearMatchInt(void)
-{
-    PWM_CHn_ClearInt(PWM_CH0, PWM_CHn_ICR_MatchInterruptClear);
-}
-
-void PWM_CH0_ClearOverflowInt(void)
-{
-   PWM_CHn_ClearInt(PWM_CH0, PWM_CHn_ICR_OverflowInterruptClear);
-}
-
-void PWM_CH0_ClearCaptureInt(void)
-{
-   PWM_CHn_ClearInt(PWM_CH0, PWM_CHn_ICR_CaptureInterruptClear);
-}
-
-void PWM_CH1_ClearMatchInt(void)
-{
-    PWM_CHn_ClearInt(PWM_CH1, PWM_CHn_ICR_MatchInterruptClear);
-}
-
-void PWM_CH1_ClearOverflowInt(void)
-{
-   PWM_CHn_ClearInt(PWM_CH1, PWM_CHn_ICR_OverflowInterruptClear);
-}
-
-void PWM_CH1_ClearCaptureInt(void)
-{
-   PWM_CHn_ClearInt(PWM_CH1, PWM_CHn_ICR_CaptureInterruptClear);
-}
-
-void PWM_CH2_ClearMatchInt(void)
-{
-    PWM_CHn_ClearInt(PWM_CH2, PWM_CHn_ICR_MatchInterruptClear);
-}
-
-void PWM_CH2_ClearOverflowInt(void)
-{
-   PWM_CHn_ClearInt(PWM_CH2, PWM_CHn_ICR_OverflowInterruptClear);
-}
-
-void PWM_CH2_ClearCaptureInt(void)
-{
-   PWM_CHn_ClearInt(PWM_CH2, PWM_CHn_ICR_CaptureInterruptClear);
-}
-
-void PWM_CH3_ClearMatchInt(void)
-{
-    PWM_CHn_ClearInt(PWM_CH3, PWM_CHn_ICR_MatchInterruptClear);
-}
-
-void PWM_CH3_ClearOverflowInt(void)
-{
-   PWM_CHn_ClearInt(PWM_CH3, PWM_CHn_ICR_OverflowInterruptClear);
-}
-
-void PWM_CH3_ClearCaptureInt(void)
-{
-   PWM_CHn_ClearInt(PWM_CH3, PWM_CHn_ICR_CaptureInterruptClear);
-}
-
-void PWM_CH4_ClearMatchInt(void)
-{
-    PWM_CHn_ClearInt(PWM_CH4, PWM_CHn_ICR_MatchInterruptClear);
-}
-
-void PWM_CH4_ClearOverflowInt(void)
-{
-   PWM_CHn_ClearInt(PWM_CH4, PWM_CHn_ICR_OverflowInterruptClear);
-}
-
-void PWM_CH4_ClearCaptureInt(void)
-{
-   PWM_CHn_ClearInt(PWM_CH4, PWM_CHn_ICR_CaptureInterruptClear);
-}
-
-void PWM_CH5_ClearMatchInt(void)
-{
-    PWM_CHn_ClearInt(PWM_CH5, PWM_CHn_ICR_MatchInterruptClear);
-}
-
-void PWM_CH5_ClearOverflowInt(void)
-{
-   PWM_CHn_ClearInt(PWM_CH5, PWM_CHn_ICR_OverflowInterruptClear);
-}
-
-void PWM_CH5_ClearCaptureInt(void)
-{
-   PWM_CHn_ClearInt(PWM_CH5, PWM_CHn_ICR_CaptureInterruptClear);
-}
-
-void PWM_CH6_ClearMatchInt(void)
-{
-    PWM_CHn_ClearInt(PWM_CH6, PWM_CHn_ICR_MatchInterruptClear);
-}
-
-void PWM_CH6_ClearOverflowInt(void)
-{
-   PWM_CHn_ClearInt(PWM_CH6, PWM_CHn_ICR_OverflowInterruptClear);
-}
-
-void PWM_CH6_ClearCaptureInt(void)
-{
-   PWM_CHn_ClearInt(PWM_CH6, PWM_CHn_ICR_CaptureInterruptClear);
-}
-
-void PWM_CH7_ClearMatchInt(void)
-{
-    PWM_CHn_ClearInt(PWM_CH7, PWM_CHn_ICR_MatchInterruptClear);
-}
-
-void PWM_CH7_ClearOverflowInt(void)
-{
-   PWM_CHn_ClearInt(PWM_CH7, PWM_CHn_ICR_OverflowInterruptClear);
-}
-
-void PWM_CH7_ClearCaptureInt(void)
-{
-   PWM_CHn_ClearInt(PWM_CH7, PWM_CHn_ICR_CaptureInterruptClear);
-}
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_pwm.h	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,289 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    
-  * @author  
-  * @version 
-  * @date    
-  * @brief   This file contains all the functions prototypes for the UART 
-  *          firmware library.
-  ******************************************************************************
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __W7500X_PWM_H
-#define __W7500X_PWM_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "W7500x.h"
-
-/**********************************************************************************************/
-/**********************************************************************************************/
-//                This structure and define must be in W7500x.h
-/**********************************************************************************************/
-/**********************************************************************************************/
-
-typedef struct
-{
-    uint32_t    PWM_CHn_PEEER;
-}PWM_CtrlPWMOutputTypeDef;
-
-typedef struct
-{
-    uint32_t    PWM_CHn_PR;
-    uint32_t    PWM_CHn_MR;
-    uint32_t    PWM_CHn_LR;
-    uint32_t    PWM_CHn_UDMR;
-    uint32_t    PWM_CHn_PDMR;
-    uint32_t    PWM_CHn_DZCR;
-}PWM_DeadzoneModeInitTypDef;
-
-#define IS_PWM_ALL_CH(CHn)             ((CHn == PWM_CH0) || \
-                                        (CHn == PWM_CH1) || \
-                                        (CHn == PWM_CH2) || \
-                                        (CHn == PWM_CH3) || \
-                                        (CHn == PWM_CH4) || \
-                                        (CHn == PWM_CH5) || \
-                                        (CHn == PWM_CH6) || \
-                                        (CHn == PWM_CH7))
-
-#define PWM_IER_IE0_Enable              (0x1ul << 0) 
-#define PWM_IER_IE1_Enable              (0x1ul << 1)
-#define PWM_IER_IE2_Enable              (0x1ul << 2)
-#define PWM_IER_IE3_Enable              (0x1ul << 3)
-#define PWM_IER_IE4_Enable              (0x1ul << 4)
-#define PWM_IER_IE5_Enable              (0x1ul << 5)
-#define PWM_IER_IE6_Enable              (0x1ul << 6)
-#define PWM_IER_IE7_Enable              (0x1ul << 7)
-
-#define PWM_IER_IE0_Disable             ~PWM_IER_IE0_Enable
-#define PWM_IER_IE1_Disable             ~PWM_IER_IE1_Enable
-#define PWM_IER_IE2_Disable             ~PWM_IER_IE2_Enable
-#define PWM_IER_IE3_Disable             ~PWM_IER_IE3_Enable
-#define PWM_IER_IE4_Disable             ~PWM_IER_IE4_Enable
-#define PWM_IER_IE5_Disable             ~PWM_IER_IE5_Enable
-#define PWM_IER_IE6_Disable             ~PWM_IER_IE6_Enable
-#define PWM_IER_IE7_Disable             ~PWM_IER_IE7_Enable
-
-#define PWM_SSR_SS0_Start               (0x1ul << 0)
-#define PWM_SSR_SS1_Start               (0x1ul << 1)
-#define PWM_SSR_SS2_Start               (0x1ul << 2)
-#define PWM_SSR_SS3_Start               (0x1ul << 3)
-#define PWM_SSR_SS4_Start               (0x1ul << 4)
-#define PWM_SSR_SS5_Start               (0x1ul << 5)
-#define PWM_SSR_SS6_Start               (0x1ul << 6)
-#define PWM_SSR_SS7_Start               (0x1ul << 7)
-
-#define PWM_SSR_SS0_Stop                ~PWM_SSR_SS0_Start
-#define PWM_SSR_SS1_Stop                ~PWM_SSR_SS1_Start
-#define PWM_SSR_SS2_Stop                ~PWM_SSR_SS2_Start
-#define PWM_SSR_SS3_Stop                ~PWM_SSR_SS3_Start
-#define PWM_SSR_SS4_Stop                ~PWM_SSR_SS4_Start
-#define PWM_SSR_SS5_Stop                ~PWM_SSR_SS5_Start
-#define PWM_SSR_SS6_Stop                ~PWM_SSR_SS6_Start
-#define PWM_SSR_SS7_Stop                ~PWM_SSR_SS7_Start
-
-#define IS_SSR_BIT_FLAG(FLAG)           (FLAG <= 0xFF)
-
-#define PWM_PSR_PS0_Pause               (0x1ul << 0)
-#define PWM_PSR_PS1_Pause               (0x1ul << 1)
-#define PWM_PSR_PS2_Pause               (0x1ul << 2)
-#define PWM_PSR_PS3_Pause               (0x1ul << 3)
-#define PWM_PSR_PS4_Pause               (0x1ul << 4)
-#define PWM_PSR_PS5_Pause               (0x1ul << 5)
-#define PWM_PSR_PS6_Pause               (0x1ul << 6)
-#define PWM_PSR_PS7_Pause               (0x1ul << 7)
-
-#define PWM_PSR_PS0_Restart             ~PWM_PSR_PS0_Pause
-#define PWM_PSR_PS1_Restart             ~PWM_PSR_PS1_Pause
-#define PWM_PSR_PS2_Restart             ~PWM_PSR_PS2_Pause
-#define PWM_PSR_PS3_Restart             ~PWM_PSR_PS3_Pause
-#define PWM_PSR_PS4_Restart             ~PWM_PSR_PS4_Pause
-#define PWM_PSR_PS5_Restart             ~PWM_PSR_PS5_Pause
-#define PWM_PSR_PS6_Restart             ~PWM_PSR_PS6_Pause
-#define PWM_PSR_PS7_Restart             ~PWM_PSR_PS7_Pause
-
-#define IS_PWM_PSR_BIT_FLAG(FLAG)       (FLAG <= 0xFF)
-
-#define PWM_CHn_IER_MIE                 (0x1ul << 0) ///< Match Interrupt Enable
-#define PWM_CHn_IER_OIE                 (0x1ul << 1) ///< Overflow Interrupt Enable
-#define PWM_CHn_IER_CIE                 (0x1ul << 2) ///< Capture Interrupt Enable
-#define IS_PWM_CHn_IER(FLAG)            (FLAG <= 0x7)
-
-#define PWM_CHn_IER_MI_Msk              (0x1ul << 0) ///< Match Interrupt Enable Mask
-#define PWM_CHn_IER_OI_Msk              (0x1ul << 1) ///< Overflow Interrupt Enable Mask
-#define PWM_CHn_IER_CI_Msk              (0x1ul << 2) ///< Capture Interrupt Enable Mask
-
-#define PWM_CHn_ICR_MatchInterruptClear     (0x1ul << 0)
-#define PWM_CHn_ICR_OverflowInterruptClear  (0x1ul << 1)
-#define PWM_CHn_ICR_CaptureInterruptClear   (0x1ul << 2)
-#define IS_PWM_CHn_IntClearFlag(FLAG)       FLAG <= 0x7
-
-/*
-#define IS_PWM_STOP(CHn)               (((CHn == PWM_CH0) && (PWM->SSR & PWM_SSR_SS0)) || \
-                                        ((CHn == PWM_CH1) && (PWM->SSR & PWM_SSR_SS1)) || \
-                                        ((CHn == PWM_CH2) && (PWM->SSR & PWM_SSR_SS2)) || \
-                                        ((CHn == PWM_CH3) && (PWM->SSR & PWM_SSR_SS3)) || \
-                                        ((CHn == PWM_CH4) && (PWM->SSR & PWM_SSR_SS4)) || \
-                                        ((CHn == PWM_CH5) && (PWM->SSR & PWM_SSR_SS5)) || \
-                                        ((CHn == PWM_CH6) && (PWM->SSR & PWM_SSR_SS6)) || \
-                                        ((CHn == PWM_CH7) && (PWM->SSR & PWM_SSR_SS7)))
-*/ 
-
-
-#define IS_PWM_PR_FILTER(MAXVAL)        (MAXVAL <= 0x1F)
-                                     
-
-#define PWM_CHn_UDMR_UpCount            (0x0ul)
-#define PWM_CHn_UDMR_DownCount          (0x1ul)
-#define IS_PWM_CHn_UDMR(MODE)          ((MODE == PWM_CHn_UDMR_UpCount) || \
-                                        (MODE == PWM_CHn_UDMR_DownCount))
-
-#define PWM_CHn_TCMR_TimerMode          (0x0ul)
-#define PWM_CHn_TCMR_RisingCounterMode  (0x1ul)
-#define PWM_CHn_TCMR_FallingCounterMode (0x2ul)
-#define PWM_CHn_TCMR_BothCounterMode    (0x3ul)
-#define IS_PWM_CHn_TCMR(MODE)          ((MODE == PWM_CHn_TCMR_RisingCounterMode)  || \
-                                        (MODE == PWM_CHn_TCMR_FallingCounterMode) || \
-                                        (MODE == PWM_CHn_TCMR_BothCounterMode))
-
-#define PWM_CHn_PEEER_Disable           (0x0ul)
-#define PWM_CHn_PEEER_ExtEnable         (0x1ul)
-#define PWM_CHn_PEEER_PWMEnable         (0x2ul)
-#define IS_PWM_CHn_PEEER(ENABLE)       ((ENABLE == PWM_CHn_PEEER_Disable)   || \
-                                        (ENABLE == PWM_CHn_PEEER_ExtEnable) || \
-                                        (ENABLE == PWM_CHn_PEEER_PWMEnable))  
-
-#define IS_PWM_Output(ENABLE)          ((ENABLE == PWM_CHn_PEEER_Disable)   || \
-                                        (ENABLE == PWM_CHn_PEEER_PWMEnable))  
-
-#define PWM_CHn_CMR_RisingEdge          0x0ul
-#define PWM_CHn_CMR_FallingEdge         0x1ul
-#define IS_PWM_CHn_CMR(MODE)           ((MODE == PWM_CHn_CMR_RisingEdge) || \
-                                        (MODE == PWM_CHn_CMR_FallingEdge)) 
-
-#define PWM_CHn_PDMR_Oneshot            (0x0ul)
-#define PWM_CHn_PDMR_Periodic           (0x1ul)
-#define IS_PWM_CHn_PDMR(MODE)          ((MODE == PWM_CHn_PDMR_Periodic) || \
-                                        (MODE == PWM_CHn_PDMR_Oneshot))
-
-#define PWM_CHn_DZER_Enable             (0x1ul)             
-#define PWM_CHn_DZER_Disable            (0x0ul)             
-#define PWM_CHn_DZER(ENABLE)           ((ENABLE == PWM_CHn_DZER_Enable) || \
-                                        (ENABLE == PWM_CHn_DZER_Disable)) 
-
-#define IS_PWM_Deadznoe(CHn)           (((CHn == PWM_CH0) && (PWM_CH1->DZER == PWM_CHn_DZER_Disable)) || \
-                                        ((CHn == PWM_CH1) && (PWM_CH0->DZER == PWM_CHn_DZER_Disable)) || \
-                                        ((CHn == PWM_CH2) && (PWM_CH3->DZER == PWM_CHn_DZER_Disable)) || \
-                                        ((CHn == PWM_CH3) && (PWM_CH2->DZER == PWM_CHn_DZER_Disable)) || \
-                                        ((CHn == PWM_CH4) && (PWM_CH5->DZER == PWM_CHn_DZER_Disable)) || \
-                                        ((CHn == PWM_CH5) && (PWM_CH4->DZER == PWM_CHn_DZER_Disable)) || \
-                                        ((CHn == PWM_CH6) && (PWM_CH7->DZER == PWM_CHn_DZER_Disable)) || \
-                                        ((CHn == PWM_CH7) && (PWM_CH6->DZER == PWM_CHn_DZER_Disable)))
-
-#define IS_PWM_CHn_DZCR_FILTER(MAXVAL)  (MAXVAL <= 0x3FF)
-
-
-
-
-
-
-void PWM_DeInit(PWM_CHn_TypeDef* PWM_CHn);
-void PWM_TimerModeInit(PWM_CHn_TypeDef* PWM_CHn, PWM_TimerModeInitTypeDef* PWM_TimerModeInitStruct);
-void PWM_CaptureModeInit(PWM_CHn_TypeDef* PWM_CHn, PWM_CaptureModeInitTypeDef* PWM_CaptureModeInitStruct);
-void PWM_CounterModeInit(PWM_CHn_TypeDef* PWM_CHn, PWM_CounterModeInitTypeDef* PWM_CounterModeInitStruct);
-void PWM_DeadzoneModeInit(PWM_CHn_TypeDef* PWM_CHn, PWM_DeadzoneModeInitTypDef* PWM_DeadzoneModeInitStruct);
-void PWM_CtrlPWMOutput(PWM_CHn_TypeDef* PWM_CHn, uint32_t outputEnDisable );
-void PWM_CtrlPWMOutputEnable(PWM_CHn_TypeDef* PWM_CHn) ;
-void PWM_CtrlPWMOutputDisable(PWM_CHn_TypeDef* PWM_CHn) ;
-void PWM_IntConfig(PWM_CHn_TypeDef* PWM_CHn, FunctionalState state);
-FlagStatus PWM_GetIntEnableStatus(PWM_CHn_TypeDef* PWM_CHn);
-void PWM_CHn_IntConfig(PWM_CHn_TypeDef* PWM_CHn, uint32_t PWM_CHn_IER, FunctionalState state);
-void PWM_CHn_Start(PWM_CHn_TypeDef* PWM_CHn);
-void PWM_Multi_Start(uint32_t ssr_bit_flag);
-void PWM_CHn_Stop(PWM_CHn_TypeDef* PWM_CHn);
-void PWM_Multi_Stop(uint32_t ssr_bit_flag);
-void PWM_CHn_Pause(PWM_CHn_TypeDef* PWM_CHn);
-void PWM_Multi_Pause(uint32_t psr_bit_flag);
-void PWM_CHn_Restart(PWM_CHn_TypeDef* PWM_CHn);
-void PWM_Multi_Restart(uint32_t psr_bit_flag);
-uint32_t PWM_CHn_GetIntEnableStatus(PWM_CHn_TypeDef* PWM_CHn);
-uint32_t PWM_CHn_GetIntFlagStatus(PWM_CHn_TypeDef* PWM_CHn);
-void PWM_CHn_ClearInt(PWM_CHn_TypeDef* PWM_CHn, uint32_t PWM_CHn_ICR);
-uint32_t PWM_CHn_GetTCR(PWM_CHn_TypeDef* PWM_CHn);
-uint32_t PWM_CHn_GetPCR(PWM_CHn_TypeDef* PWM_CHn);
-uint32_t PWM_CHn_GetPR(PWM_CHn_TypeDef* PWM_CHn);
-void PWM_CHn_SetPR(PWM_CHn_TypeDef* PWM_CHn, uint32_t PR);
-uint32_t PWM_CHn_GetMR(PWM_CHn_TypeDef* PWM_CHn);
-void PWM_CHn_SetMR(PWM_CHn_TypeDef* PWM_CHn, uint32_t MR);
-uint32_t PWM_CHn_GetLR(PWM_CHn_TypeDef* PWM_CHn);
-void PWM_CHn_SetLR(PWM_CHn_TypeDef* PWM_CHn, uint32_t LR);
-uint32_t PWM_CHn_GetUDMR(PWM_CHn_TypeDef* PWM_CHn);
-void PWM_CHn_SetUDMR(PWM_CHn_TypeDef* PWM_CHn, uint32_t UDMR);
-uint32_t PWM_CHn_GetTCMR(PWM_CHn_TypeDef* PWM_CHn);
-void PWM_CHn_SetTCMR(PWM_CHn_TypeDef* PWM_CHn, uint32_t TCMR);
-uint32_t PWM_CHn_GetPEEER(PWM_CHn_TypeDef* PWM_CHn);
-void PWM_CHn_SetPEEER(PWM_CHn_TypeDef* PWM_CHn, uint32_t PEEER);
-uint32_t PWM_CHn_GetCMR(PWM_CHn_TypeDef* PWM_CHn);
-void PWM_CHn_SetCMR(PWM_CHn_TypeDef* PWM_CHn, uint32_t CMR);
-uint32_t PWM_CHn_GetCR(PWM_CHn_TypeDef* PWM_CHn);
-uint32_t PWM_CHn_GetPDMR(PWM_CHn_TypeDef* PWM_CHn);
-void PWM_CHn_SetPDMR(PWM_CHn_TypeDef* PWM_CHn, uint32_t PDMR);
-void PWM_CHn_SetDZER(PWM_CHn_TypeDef* PWM_CHn, uint32_t DZER);
-uint32_t PWM_CHn_GetDZCR(PWM_CHn_TypeDef* PWM_CHn);
-void PWM_CHn_SetDZCR(PWM_CHn_TypeDef* PWM_CHn, uint32_t DZCR);
-void PWM_CH0_ClearMatchInt(void);
-void PWM_CH0_ClearOverflowInt(void);
-void PWM_CH0_ClearCaptureInt(void);
-void PWM_CH1_ClearMatchInt(void);
-void PWM_CH1_ClearOverflowInt(void);
-void PWM_CH1_ClearCaptureInt(void);
-void PWM_CH2_ClearMatchInt(void);
-void PWM_CH2_ClearOverflowInt(void);
-void PWM_CH2_ClearCaptureInt(void);
-void PWM_CH3_ClearMatchInt(void);
-void PWM_CH3_ClearOverflowInt(void);
-void PWM_CH3_ClearCaptureInt(void);
-void PWM_CH4_ClearMatchInt(void);
-void PWM_CH4_ClearOverflowInt(void);
-void PWM_CH4_ClearCaptureInt(void);
-void PWM_CH5_ClearMatchInt(void);
-void PWM_CH5_ClearOverflowInt(void);
-void PWM_CH5_ClearCaptureInt(void);
-void PWM_CH6_ClearMatchInt(void);
-void PWM_CH6_ClearOverflowInt(void);
-void PWM_CH6_ClearCaptureInt(void);
-void PWM_CH7_ClearMatchInt(void);
-void PWM_CH7_ClearOverflowInt(void);
-void PWM_CH7_ClearCaptureInt(void);
-
-
-void PWM0_Handler(void);
-void PWM1_Handler(void);
-void PWM2_Handler(void);
-void PWM3_Handler(void);
-void PWM4_Handler(void);
-void PWM5_Handler(void);
-void PWM6_Handler(void);
-void PWM7_Handler(void);
-
-
-
-
-//Temporary macro=======
-#define PWM_CH(N)                       ((PWM_CHn_TypeDef *)     (W7500x_PWM_BASE + (N * 0x100UL)))
-//====================== 
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif //__W7500X_PWM_H
-
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_uart.c	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,370 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    W7500x_uart.c
-  * @author  
-  * @version 
-  * @date    
-  * @brief   
-  ******************************************************************************
-  * @attention
-  *
- *
-  ******************************************************************************
-  */
-
-/* Includes ------------------------------------------------------------------*/
-#include "W7500x.h"
-
-void UART_StructInit(UART_InitTypeDef* UART_InitStruct)
-{
-  /* UART_InitStruct members default value */
-  UART_InitStruct->UART_BaudRate = 115200;
-  UART_InitStruct->UART_WordLength = UART_WordLength_8b ;
-  UART_InitStruct->UART_StopBits = UART_StopBits_1;
-  UART_InitStruct->UART_Parity = UART_Parity_No ;
-  UART_InitStruct->UART_Mode = UART_Mode_Rx | UART_Mode_Tx;
-  UART_InitStruct->UART_HardwareFlowControl = UART_HardwareFlowControl_None ;  
-}
-
-void UART_DeInit(UART_TypeDef *UARTx)
-{
-    
-}
-
-uint32_t UART_Init(UART_TypeDef *UARTx, UART_InitTypeDef* UART_InitStruct)
-{
-	float baud_divisor;
-    uint32_t tmpreg=0x00, uartclock=0x00;
-    uint32_t integer_baud = 0x00, fractional_baud = 0x00;
-
-	assert_param(IS_UART_01_PERIPH(UARTx));
-	assert_param(IS_UART_WORD_LENGTH(UART_InitStruct->UART_WordLength));
-	assert_param(IS_UART_PARITY(UART_InitStruct->UART_Parity));
-	assert_param(IS_UART_STOPBITS(UART_InitStruct->UART_StopBits));
-	assert_param(IS_UART_HARDWARE_FLOW_CONTROL(UART_InitStruct->UART_HardwareFlowControl));
-	assert_param(IS_UART_MODE(UART_InitStruct->UART_Mode));
-
-
-    UARTx->CR &= ~(UART_CR_UARTEN); 
-
-    // Set baudrate
-    CRG->UARTCLK_SSR = CRG_UARTCLK_SSR_RCLK;  // Set UART Clock using internal Oscilator ( 8MHz )
-    uartclock =  (8000000UL) /  (1 << CRG->UARTCLK_PVSR);
-
-    baud_divisor = ((float)uartclock / (16 * UART_InitStruct->UART_BaudRate));
-    integer_baud = (uint32_t)baud_divisor;
-    fractional_baud = (uint32_t)((baud_divisor - integer_baud) * 64 + 0.5);
-
-    UARTx->IBRD = integer_baud;
-    UARTx->FBRD = fractional_baud;
-
-
-    tmpreg = UARTx->LCR_H;
-    tmpreg &= ~(0x00EE);
-    tmpreg |= (UART_InitStruct->UART_WordLength | UART_InitStruct->UART_StopBits | UART_InitStruct->UART_Parity);
-    UARTx->LCR_H |= tmpreg;
-
-    tmpreg = UARTx->CR;
-    tmpreg &= ~(UART_CR_CTSEn | UART_CR_RTSEn | UART_CR_RXE | UART_CR_TXE | UART_CR_UARTEN);
-    tmpreg |= (UART_InitStruct->UART_Mode | UART_InitStruct->UART_HardwareFlowControl);
-    UARTx->CR |= tmpreg;
-
-    UARTx->CR |= UART_CR_UARTEN;
-
-    return 0;
-}
-
-
-void UART_SendData(UART_TypeDef* UARTx, uint16_t Data)
-{
-    assert_param(IS_UART_01_PERIPH(UARTx));
-
-    UARTx->DR = Data;
-}
-
-
-uint16_t UART_ReceiveData(UART_TypeDef* UARTx)
-{
-    assert_param(IS_UART_01_PERIPH(UARTx));
-
-    return (uint16_t)(UARTx->DR);
-}
-
-
-void UART_SendBreak(UART_TypeDef* UARTx)
-{
-    assert_param(IS_UART_01_PERIPH(UARTx));
-
-    UARTx->LCR_H |= UART_LCR_H_BRK; 
-}
-
-
-FlagStatus UART_GetRecvStatus(UART_TypeDef* UARTx, uint16_t UART_RECV_STATUS)
-{
-    FlagStatus bitstatus = RESET;
-
-    assert_param(IS_UART_01_PERIPH(UARTx));
-    assert_param(IS_UART_RECV_STATUS(UART_RECV_STATUS));
-
-    if( (UARTx->STATUS.RSR & UART_RECV_STATUS) != (uint16_t)RESET)
-    {
-        bitstatus = SET;
-    }
-    else
-    {
-        bitstatus = RESET;
-    }
-
-    return bitstatus;
-}
-
-
-void UART_ClearRecvStatus(UART_TypeDef* UARTx, uint16_t UART_RECV_STATUS)
-{
-    assert_param(IS_UART_01_PERIPH(UARTx));
-    assert_param(IS_UART_RECV_STATUS(UART_RECV_STATUS));
-
-    UARTx->STATUS.ECR = (uint16_t)UART_RECV_STATUS;
-}
-
-
-FlagStatus UART_GetFlagStatus(UART_TypeDef* UARTx, uint16_t UART_FLAG)
-{
-    FlagStatus bitstatus = RESET;
-
-    assert_param(IS_UART_01_PERIPH(UARTx));
-    assert_param(IS_UART_FLAG(UART_FLAG));
-
-    if ((UARTx->FR & UART_FLAG) != (uint16_t)RESET)
-    {
-        bitstatus = SET;    
-    }
-    else
-    {
-        bitstatus = RESET;
-    }
- 
-    return bitstatus;
-    
-}
-
-/*
-void UART_ClearFlag(UART_TypeDef* UARTx, uint16_t UART_FLAG)
-{
-
-}
-*/
-
-void UART_ITConfig(UART_TypeDef* UARTx, uint16_t UART_IT, FunctionalState NewState)
-{
-    assert_param(IS_UART_01_PERIPH(UARTx));
-    assert_param(IS_UART_IT_FLAG(UART_IT));
-
-    if ( NewState != DISABLE )
-    {
-        UARTx->IMSC |= UART_IT;
-    }
-    else
-    {
-        UARTx->ICR |= UART_IT;
-    }
-}
-
-
-ITStatus UART_GetITStatus(UART_TypeDef* UARTx, uint16_t UART_IT)
-{
-    ITStatus bitstatus = RESET;
-
-    assert_param(IS_UART_01_PERIPH(UARTx));
-    assert_param(IS_UART_IT_FLAG(UART_IT));
-
-    if ((UARTx->MIS & UART_IT) != (uint16_t)RESET)
-    {
-        bitstatus = SET;
-    }
-    else
-    {
-        bitstatus = RESET;
-    }
-
-    return bitstatus;
-}
-
-void UART_ClearITPendingBit(UART_TypeDef* UARTx, uint16_t UART_IT)
-{
-    assert_param(IS_UART_01_PERIPH(UARTx));
-    assert_param(IS_UART_IT_FLAG(UART_IT));
-
-    UARTx->ICR |= UART_IT;
-}
-
-
-void S_UART_DeInit()
-{
-
-}
-
-uint32_t S_UART_Init(uint32_t baud)
-{
-    uint32_t tmpreg=0x00;
-    uint32_t uartclock = 0x00, integer_baud = 0x00;
-
-    assert_param(IS_UART_MODE(S_UART_InitStruct->UART_Mode));
-
-    if(CRG->FCLK_SSR == CRG_FCLK_SSR_RCLK)
-    {
-        uartclock = INTERN_XTAL;  
-    }
-    else if(CRG->FCLK_SSR == CRG_FCLK_SSR_OCLK)
-    {
-        uartclock = EXTERN_XTAL;
-    }
-    else
-    {
-        uartclock = GetSystemClock();
-    }
-
-    integer_baud = (uint32_t)(uartclock / baud);
-    UART2->BAUDDIV = integer_baud;
-
-    tmpreg = UART2->CTRL;
-    tmpreg &= ~(S_UART_CTRL_RX_EN | S_UART_CTRL_TX_EN);
-    tmpreg |= (S_UART_CTRL_RX_EN | S_UART_CTRL_TX_EN);
-    UART2->CTRL = tmpreg;
-
-    return 0;
-}
-
-void S_UART_SendData(uint16_t Data)
-{
-    while(UART2->STATE & S_UART_STATE_TX_BUF_FULL); 
-    UART2->DATA = Data;
-}
-
-uint16_t S_UART_ReceiveData()
-{
-    return (uint16_t)(UART2->DATA);
-}
-
-
-FlagStatus S_UART_GetFlagStatus(uint16_t S_UART_FLAG)
-{
-    FlagStatus bitstatus = RESET;
-
-    assert_param(IS_S_UART_FLAG(S_UART_FLAG));
-
-    if ((UART2->STATE & S_UART_FLAG) != (uint16_t)RESET)
-    {
-        bitstatus = SET;
-    }
-    else
-    {
-        bitstatus = RESET;
-    }
-
-    return bitstatus;
-}
-
-
-void S_UART_ITConfig(uint16_t S_UART_IT, FunctionalState NewState)
-{
-    assert_param(IS_S_UART_IT_FLAG(S_UART_IT));
-
-    if ( NewState != DISABLE )
-    {
-        UART2->CTRL |= S_UART_IT;
-    }
-    else
-    {
-        UART2->CTRL &= ~(S_UART_IT);
-    }
-}
-
-ITStatus S_UART_GetITStatus(uint16_t S_UART_IT)
-{
-    ITStatus bitstatus = RESET;
-
-    assert_param(IS_S_UART_IT_FLAG(S_UART_IT));
-
-    if ((UART2->INT.STATUS & (S_UART_IT >> 2)) != (uint16_t) RESET)
-    {
-        bitstatus = SET;
-    }
-    else
-    {
-        bitstatus = RESET;
-    }
-
-    return bitstatus;
-}
-
-void S_UART_ClearITPendingBit(uint16_t S_UART_IT)
-{
-    assert_param(IS_S_UART_IT_FLAG(S_UART_IT));
-
-    UART2->INT.CLEAR |= (S_UART_IT >> 2);
-}
-
-
-/**************************************************/
-// It will be moved to application board's driver */
-/**************************************************/
-uint8_t UartPutc(UART_TypeDef* UARTx, uint8_t ch)
-{
-    UART_SendData(UARTx,ch);
-
-    while(UARTx->FR & UART_FR_BUSY);
-
-    return (ch);
-}
-
-void UartPuts(UART_TypeDef* UARTx, uint8_t *str)
-{
-    uint8_t ch;
-
-    do{
-        ch = *str;
-        if(ch != (uint8_t)0x0)
-        {
-            UartPutc(UARTx, ch);
-        }
-        *str++;
-    }while(ch != 0);
-}
-
-uint8_t UartGetc(UART_TypeDef* UARTx)
-{
-    while(UARTx->FR & UART_FR_RXFE);
-
-    return (UARTx->DR & 0xFF);
-}
-
-
-uint8_t S_UartPutc(uint8_t ch)
-{
-    S_UART_SendData(ch);
-
-    return (ch);
-}
-
-void S_UartPuts(uint8_t *str)
-{
-    uint8_t ch;
-
-    do{
-        ch = *str;
-        if(ch != (uint8_t)0x0)
-        {
-            S_UART_SendData(ch);
-        }
-        *str++;
-    }while(ch != 0);
-}
-
-uint8_t S_UartGetc()
-{
-    while( (UART2->STATE & S_UART_STATE_RX_BUF_FULL) == 0 ); 
-    return (uint8_t)S_UART_ReceiveData();
-}
-
-
--- a/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/W7500x_uart.h	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,289 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    
-  * @author  
-  * @version 
-  * @date    
-  * @brief   This file contains all the functions prototypes for the UART 
-  *          firmware library.
-  ******************************************************************************
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __W7500X_UART_H
-#define __W7500X_UART_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "W7500x.h"
-
-
-/** 
-  * @brief  UART Init Structure definition  
-  */ 
-  
-typedef struct
-{
-    uint32_t UART_BaudRate;
-    uint16_t UART_WordLength;
-    uint16_t UART_StopBits;
-    uint16_t UART_Parity;
-    uint16_t UART_Mode;
-    uint16_t UART_HardwareFlowControl;
-} UART_InitTypeDef;
-
-/**
-  * @}
-  */
-
-
-/** @defgroup UART_Exported_Constants 
-  * @{
-  */
-
-#define IS_UART_01_PERIPH(PERIPH)   (((PERIPH) == UART0) || ((PERIPH) == UART1))
-#define IS_UART_2_PERIPH(PERIPH)    ((PERIPH) == UART2)                                    
-
-/**
-  * @}
-  */
-
-
-
-/** @addtogroup UART_Word_Length
-  * @{
-  */
-
-#define UART_WordLength_8b          ((uint16_t)UART_LCR_H_WLEN(3))
-#define UART_WordLength_7b          ((uint16_t)UART_LCR_H_WLEN(2))
-#define UART_WordLength_6b          ((uint16_t)UART_LCR_H_WLEN(1))
-#define UART_WordLength_5b          ((uint16_t)UART_LCR_H_WLEN(0))
-#define IS_UART_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WordLength_8b) || \
-                                     ((LENGTH) == UART_WordLength_7b) || \
-                                     ((LENGTH) == UART_WordLength_6b) || \
-                                     ((LENGTH) == UART_WordLength_5b) )
-/**
-  * @}
-  */
-
-
-/** @addtogroup UART_Parity
-  * @{
-  */
-
-#define UART_Parity_No              ((uint16_t)0x0000)
-#define UART_Parity_Even            ((uint16_t)(UART_LCR_H_PEN | UART_LCR_H_EPS))
-#define UART_Parity_Odd             ((uint16_t)(UART_LCR_H_PEN))
-#define IS_UART_PARITY(PARITY)      (((PARITY) == UART_Parity_No)   || \
-                                     ((PARITY) == UART_Parity_Even) || \
-                                     ((PARITY) == UART_Parity_Odd))
-
-/**
-  * @}
-  */
-
-
-/** @addtogroup UART_Stop_Bits
-  * @{
-  */
-
-#define UART_StopBits_1             ((uint16_t)0x0000)
-#define UART_StopBits_2             ((uint16_t)(UART_LCR_H_STP2))
-#define IS_UART_STOPBITS(STOPBITS)  (((STOPBITS) == UART_StopBits_1) || \
-                                     ((STOPBITS) == UART_StopBits_2))
-/**
-  * @}
-  */
-
-
-/** @addtogroup UART_Mode
-  * @{
-  */
-
-#define UART_Mode_Rx                ((uint16_t)(UART_CR_RXE))
-#define UART_Mode_Tx                ((uint16_t)(UART_CR_TXE))
-#define IS_UART_MODE(MODE)          (((MODE) == UART_Mode_Rx) || \
-                                     ((MODE) == UART_Mode_Tx))
-
-/**
-  * @}
-  */
-
-
-/** @addtogroup UART_Hardware_Flow_Control
-  * @{
-  */
-
-#define UART_HardwareFlowControl_None       ((uint16_t)0x0000)
-#define UART_HardwareFlowControl_RTS        ((uint16_t)UART_CR_RTSEn)
-#define UART_HardwareFlowControl_CTS        ((uint16_t)UART_CR_CTSEn)
-#define UART_HardwareFlowControl_RTS_CTS    ((uint16_t)(UART_CR_RTSEn | UART_CR_CTSEn))
-#define IS_UART_HARDWARE_FLOW_CONTROL(CONTROL) \
-                                    (((CONTROL) == UART_HardwareFlowControl_None) || \
-                                     ((CONTROL) == UART_HardwareFlowControl_RTS)  || \
-                                     ((CONTROL) == UART_HardwareFlowControl_CTS)  || \
-                                     ((CONTROL) == UART_HardwareFlowControl_RTS_CTS))
-/**
-  * @}
-  */
-
-
-/** @addtogroup UART_Receive Status
-  * @{
-  */
-
-#define UART_RECV_STATUS_OE    ((uint16_t)0x01UL << 3) /*!< Overrun error  */
-#define UART_RECV_STATUS_BE    ((uint16_t)0x01UL << 2) /*!< Break error    */
-#define UART_RECV_STATUS_PE    ((uint16_t)0x01UL << 1) /*!< Parity error   */
-#define UART_RECV_STATUS_FE    ((uint16_t)0x01UL << 0) /*!< Framing error  */
-#define IS_UART_RECV_STATUS(FLAG)  (((FLAG) == UART_RECV_STATUS_OE) || ((FLAG) == UART_RECV_STATUS_BE) || \
-                                    ((FLAG) == UART_RECV_STATUS_PE) || ((FLAG) == UART_RECV_STATUS_FE)) 
-/**
-  * @}
-  */
-
-
-
-/** @addtogroup UART_Flags
-  * @{
-  */
-
-#define UART_FLAG_RI    ((uint16_t)0x01UL << 8) /*!< Ring indicator        */
-#define UART_FLAG_TXFE  ((uint16_t)0x01UL << 7) /*!< Transmit FIFO empty   */
-#define UART_FLAG_RXFF  ((uint16_t)0x01UL << 6) /*!< Receive FIFO full     */
-#define UART_FLAG_TXFF  ((uint16_t)0x01UL << 5) /*!< Transmit FIFO full    */
-#define UART_FLAG_RXFE  ((uint16_t)0x01UL << 4) /*!< Receive FIFO empty    */
-#define UART_FLAG_BUSY  ((uint16_t)0x01UL << 3) /*!< UART busy             */
-#define UART_FLAG_DCD   ((uint16_t)0x01UL << 2) /*!< Data carrier detect   */
-#define UART_FLAG_DSR   ((uint16_t)0x01UL << 1) /*!< Data set ready        */
-#define UART_FLAG_CTS   ((uint16_t)0x01UL << 0) /*!< Clear to send         */
-#define IS_UART_FLAG(FLAG)  (((FLAG) == UART_FLAG_RI)   || ((FLAG) == UART_FLAG_TXFE) || \
-                             ((FLAG) == UART_FLAG_RXFF) || ((FLAG) == UART_FLAG_TXFF) || \
-                             ((FLAG) == UART_FLAG_RXFE) || ((FLAG) == UART_FLAG_BUSY) || \
-                             ((FLAG) == UART_FLAG_DCD)  || ((FLAG) == UART_FLAG_DSR)  || \
-                             ((FLAG) == UART_FLAG_CTS))
-
-/**
-  * @}
-  */
-
-
-/** @addtogroup UART_IT_Flags
-  * @{
-  */
-
-#define UART_IT_FLAG_OEI        ((uint16_t)0x01UL << 10) /*!< Overrun error interrupt   */
-#define UART_IT_FLAG_BEI        ((uint16_t)0x01UL <<  9) /*!< Break error interrupt     */
-#define UART_IT_FLAG_PEI        ((uint16_t)0x01UL <<  8) /*!< Parity error interrupt    */
-#define UART_IT_FLAG_FEI        ((uint16_t)0x01UL <<  7) /*!< Framing error interrupt   */
-#define UART_IT_FLAG_RTI        ((uint16_t)0x01UL <<  6) /*!< Receive timeout interrupt */
-#define UART_IT_FLAG_TXI        ((uint16_t)0x01UL <<  5) /*!< Transmit interrupt        */
-#define UART_IT_FLAG_RXI        ((uint16_t)0x01UL <<  4) /*!< Receive interrupt        */
-#define UART_IT_FLAG_DSRMI      ((uint16_t)0x01UL <<  3) /*!< UARTDSR modem interrupt   */
-#define UART_IT_FLAG_DCDMI      ((uint16_t)0x01UL <<  2) /*!< UARTDCD modem interrupt   */
-#define UART_IT_FLAG_CTSMI      ((uint16_t)0x01UL <<  1) /*!< UARTCTS modem interrupt   */
-#define UART_IT_FLAG_RIMI       ((uint16_t)0x01UL <<  0) /*!< UARTRI modem  interrupt   */
-#define IS_UART_IT_FLAG(FLAG)   (((FLAG) == UART_IT_FLAG_OEI)  || ((FLAG) == UART_IT_FLAG_BEI)    || \
-                                 ((FLAG) == UART_IT_FLAG_PEI)  || ((FLAG) == UART_IT_FLAG_FEI)    || \
-                                 ((FLAG) == UART_IT_FLAG_RTI)  || ((FLAG) == UART_IT_FLAG_TXI)    || \
-                                 ((FLAG) == UART_IT_FLAG_RXI)  || ((FLAG) == UART_IT_FLAG_DSRMI)  || \
-                                 ((FLAG) == UART_IT_FLAG_DCDMI)|| ((FLAG) == UART_IT_FLAG_CTSMI)  || \
-                                 ((FLAG) == UART_IT_FLAG_RIMI))
-/**
-  * @}
-  */
-/** @addtogroup UART_FIFO_Level Select 
-  * @{
-  */
-
-#define UART_IFLS_RXIFLSEL7_8                ((uint16_t)(UART_IFLS_RXIFLSEL(4)))
-#define UART_IFLS_RXIFLSEL3_4                ((uint16_t)(UART_IFLS_RXIFLSEL(3)))
-#define UART_IFLS_RXIFLSEL1_2                ((uint16_t)(UART_IFLS_RXIFLSEL(2)))
-#define UART_IFLS_RXIFLSEL1_4                ((uint16_t)(UART_IFLS_RXIFLSEL(1)))
-#define UART_IFLS_RXIFLSEL1_8                ((uint16_t)(UART_IFLS_RXIFLSEL(0)))
-#define UART_IFLS_TXIFLSEL7_8                ((uint16_t)(UART_IFLS_TXIFLSEL(4)))
-#define UART_IFLS_TXIFLSEL3_4                ((uint16_t)(UART_IFLS_TXIFLSEL(3)))
-#define UART_IFLS_TXIFLSEL1_2                ((uint16_t)(UART_IFLS_TXIFLSEL(2)))
-#define UART_IFLS_TXIFLSEL1_4                ((uint16_t)(UART_IFLS_TXIFLSEL(1)))
-#define UART_IFLS_TXIFLSEL1_8                ((uint16_t)(UART_IFLS_TXIFLSEL(0)))
-
-#define IS_UART_FIFO_Level(FLAG)          (((FLAG) == UART_IFLS_RXIFLSEL7_8) || ((FLAG) == UART_IFLS_RXIFLSEL3_4)|| \
-                                     ((FLAG) == UART_IFLS_RXIFLSEL1_2)|| ((FLAG) == UART_IFLS_RXIFLSEL1_4)|| ((FLAG) == UART_IFLS_RXIFLSEL1_8)||\
-                                     ((FLAG) == UART_IFLS_TXIFLSEL7_8)|| ((FLAG) == UART_IFLS_TXIFLSEL3_4)|| \
-                                     ((FLAG) == UART_IFLS_TXIFLSEL1_2)|| ((FLAG) == UART_IFLS_TXIFLSEL1_4)||((FLAG) == UART_IFLS_TXIFLSEL1_8))
-
-/**
-  * @}
-  */
-
-/** @addtogroup S_UART_Flags
-  * @{
-  */
-#define S_UART_FLAG_RXO        ((uint16_t)0x01UL << 3) /*!< RX buffer Overrun   */
-#define S_UART_FLAG_TXO        ((uint16_t)0x01UL << 2) /*!< TX buffer Overrun   */
-#define S_UART_FLAG_RXF        ((uint16_t)0x01UL << 1) /*!< RX buffer Full      */
-#define S_UART_FLAG_TXF        ((uint16_t)0x01UL << 0) /*!< TX buffer Full      */
-#define IS_S_UART_FLAG(FLAG)   (((FLAG) == S_UART_FLAG_RXO) || ((FLAG) == S_UART_FLAG_TXO) || \
-                                ((FLAG) == S_UART_FLAG_RXF) || ((FLAG) == S_UART_FLAG_TXF))
-/**
-  * @}
-  */
-
-
-/** @addtogroup S_UART_IT_Flags
-  * @{
-  */
-
-#define S_UART_IT_FLAG_RXOI        ((uint16_t)0x01UL << 5) /*!< RX overrun interrupt   */
-#define S_UART_IT_FLAG_TXOI        ((uint16_t)0x01UL << 4) /*!< TX overrun interrupt   */
-#define S_UART_IT_FLAG_RXI         ((uint16_t)0x01UL << 3) /*!< RX interrupt           */
-#define S_UART_IT_FLAG_TXI         ((uint16_t)0x01UL << 2) /*!< TX interrupt           */
-#define IS_S_UART_IT_FLAG(FLAG)   (((FLAG) == S_UART_IT_FLAG_RXOI)  || ((FLAG) == S_UART_IT_FLAG_TXOI) || \
-                                   ((FLAG) == S_UART_IT_FLAG_RXI)   || ((FLAG) == S_UART_IT_FLAG_TXI))
-
-/**
-  * @}
-  */
-
-
-void        UART_StructInit         (UART_InitTypeDef* UART_InitStruct);
-
-uint32_t    UART_Init               (UART_TypeDef *UARTx, UART_InitTypeDef* UART_InitStruct);
-void        UART_SendData           (UART_TypeDef* UARTx, uint16_t Data);
-uint16_t    UART_ReceiveData        (UART_TypeDef* UARTx);
-void        UART_SendBreak          (UART_TypeDef* UARTx);
-void        UART_ClearRecvStatus    (UART_TypeDef* UARTx, uint16_t UART_RECV_STATUS);
-FlagStatus  UART_GetFlagStatus      (UART_TypeDef* UARTx, uint16_t UART_FLAG);
-void        UART_ITConfig           (UART_TypeDef* UARTx, uint16_t UART_IT, FunctionalState NewState);
-ITStatus    UART_GetITStatus        (UART_TypeDef* UARTx, uint16_t UART_IT);
-void        UART_ClearITPendingBit  (UART_TypeDef* UARTx, uint16_t UART_IT);
-
-
-void S_UART_DeInit(void);
-uint32_t S_UART_Init(uint32_t baud);
-void S_UART_SendData(uint16_t Data);
-uint16_t S_UART_ReceiveData(void);
-
-
-
-uint8_t     UartPutc                (UART_TypeDef* UARTx, uint8_t ch);
-void        UartPuts                (UART_TypeDef* UARTx, uint8_t *str);
-uint8_t     UartGetc                (UART_TypeDef* UARTx);
-
-uint8_t S_UartPutc(uint8_t ch);
-void S_UartPuts(uint8_t *str);
-uint8_t S_UartGetc(void);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif // __W7500X_UART_H
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/cmsis.h	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,38 @@
+/* mbed Microcontroller Library
+ * A generic CMSIS include header
+ *******************************************************************************
+ * Copyright (c) 2014, STMicroelectronics
+ * 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 STMicroelectronics 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 MBED_CMSIS_H
+#define MBED_CMSIS_H
+
+#include "W7500x.h"
+#include "cmsis_nvic.h"
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/cmsis_nvic.c	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,47 @@
+/* mbed Microcontroller Library
+ * CMSIS-style functionality to support dynamic vectors
+ *******************************************************************************
+ * Copyright (c) 2014, STMicroelectronics
+ * 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 STMicroelectronics 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.
+ *******************************************************************************
+ */ 
+#include "cmsis_nvic.h"
+
+#define NVIC_RAM_VECTOR_ADDRESS   (0x20000000)  // Vectors positioned at start of RAM
+#define NVIC_FLASH_VECTOR_ADDRESS (0x00000000)  // Initial vector position in flash
+
+
+void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) {
+    static volatile uint32_t *vectors = (uint32_t *)NVIC_RAM_VECTOR_ADDRESS;
+
+    vectors[IRQn + 16] = vector;
+}
+
+uint32_t NVIC_GetVector(IRQn_Type IRQn) {
+    uint32_t *vectors = (uint32_t*)NVIC_RAM_VECTOR_ADDRESS;
+    // Return the vector
+    return vectors[IRQn + 16];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/cmsis_nvic.h	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,51 @@
+/* mbed Microcontroller Library
+ * CMSIS-style functionality to support dynamic vectors
+ *******************************************************************************
+ * Copyright (c) 2014, STMicroelectronics
+ * 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 STMicroelectronics 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 MBED_CMSIS_NVIC_H
+#define MBED_CMSIS_NVIC_H
+
+#define NVIC_NUM_VECTORS      41
+#define NVIC_USER_IRQ_OFFSET  16
+
+#include "cmsis.h"
+
+#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_WIZNET/TARGET_W7500x/system_W7500x.c	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,104 @@
+/**************************************************************************//**
+ * @file     system_CMSDK_CM0.c
+ * @brief    CMSIS Cortex-M0 Device Peripheral Access Layer Source File for
+ *           Device CMSDK
+ * @version  V3.01
+ * @date     06. March 2012
+ *
+ * @note
+ * Copyright (C) 2010-2012 ARM Limited. All rights reserved.
+ *
+ * @par
+ * ARM Limited (ARM) is supplying this software for use with Cortex-M
+ * processor based microcontrollers.  This file can be freely distributed
+ * within development tools that are supporting such ARM based processors.
+ *
+ * @par
+ * THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED
+ * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
+ * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
+ * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
+ *
+ ******************************************************************************/
+
+
+#include "system_W7500x.h"
+
+
+/*----------------------------------------------------------------------------
+  DEFINES
+ *----------------------------------------------------------------------------*/
+//#define SYSCLK_EXTERN_OSC
+
+
+
+/*----------------------------------------------------------------------------
+  Clock Variable definitions
+ *----------------------------------------------------------------------------*/
+uint32_t SystemFrequency = 0;    /*!< System Clock Frequency (Core Clock)  */
+uint32_t SystemCoreClock = 0;    /*!< Processor Clock Frequency            */
+
+
+/*----------------------------------------------------------------------------
+  Clock functions
+ *----------------------------------------------------------------------------*/
+void SystemCoreClockUpdate (void)            /* Get Core Clock Frequency      */
+{
+    uint8_t M,N,OD;
+
+#ifdef SYSCLK_EXTERN_OSC
+    CRG->PLL_IFSR = CRG_PLL_IFSR_OCLK;
+#else
+    CRG->PLL_IFSR = CRG_PLL_IFSR_RCLK;
+#endif    
+    OD = (1 << (CRG->PLL_FCR & 0x01)) * (1 << ((CRG->PLL_FCR & 0x02) >> 1));
+    N = (CRG->PLL_FCR >>  8 ) & 0x3F;
+    M = (CRG->PLL_FCR >> 16) & 0x3F;
+
+#ifdef SYSCLK_EXTERN_OSC
+    SystemCoreClock = EXTERN_XTAL * M / N * 1 / OD;
+#else
+    SystemCoreClock = INTERN_XTAL * M / N * 1 / OD;
+#endif
+}
+
+uint32_t GetSystemClock()
+{
+    return SystemCoreClock;
+}
+
+
+/**
+ * Initialize the system
+ *
+ * @param  none
+ * @return none
+ *
+ * @brief  Setup the microcontroller system.
+ *         Initialize the System.
+ */
+void SystemInit (void)
+{
+    uint8_t M,N,OD;
+
+    (*((volatile uint32_t *)(W7500x_TRIM_BGT))) = (*((volatile uint32_t *)(W7500x_INFO_BGT)));
+    (*((volatile uint32_t *)(W7500x_TRIM_OSC))) = (*((volatile uint32_t *)(W7500x_INFO_OSC)));
+
+    
+    // Set PLL input frequency
+#ifdef SYSCLK_EXTERN_OSC
+    CRG->PLL_IFSR = CRG_PLL_IFSR_OCLK;
+#else
+    CRG->PLL_IFSR = CRG_PLL_IFSR_RCLK;
+#endif    
+    OD = (1 << (CRG->PLL_FCR & 0x01)) * (1 << ((CRG->PLL_FCR & 0x02) >> 1));
+    N = (CRG->PLL_FCR >>  8 ) & 0x3F;
+    M = (CRG->PLL_FCR >> 16) & 0x3F;
+
+#ifdef SYSCLK_EXTERN_OSC
+    SystemCoreClock = EXTERN_XTAL * M / N * 1 / OD;
+#else
+    SystemCoreClock = INTERN_XTAL * M / N * 1 / OD;
+#endif
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/cmsis/TARGET_WIZNET/TARGET_W7500x/system_W7500x.h	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,84 @@
+/**************************************************************************//**
+ * @file     system_W7500x.h
+ * @brief    CMSIS Cortex-M# Device Peripheral Access Layer Header File for
+ *           Device W7500x
+ * @version  V3.10
+ * @date     23. November 2012
+ *
+ * @note
+ *
+ ******************************************************************************/
+/* Copyright (c) 2012 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_W7500x_H   /* ToDo: replace '<Device>' with your device name */
+#define SYSTEM_W7500x_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "W7500x.h"
+
+extern uint32_t SystemCoreClock;     /*!< System Clock Frequency (Core Clock)  */
+extern uint32_t GetSystemClock(void);    /*!< Get System Clock Frequency */
+
+
+/**
+ * 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);
+
+/*----------------------------------------------------------------------------
+  Define clocks
+ *----------------------------------------------------------------------------*/
+#define EXTERN_XTAL     (8000000UL)     /* External Oscillator Frequency        */
+#define INTERN_XTAL     (8000000UL)     /* Internal Oscillator Frequency         */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SYSTEM_W7500x_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/PeripheralNames.h	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,75 @@
+/* mbed Microcontroller Library 
+ *******************************************************************************
+ * Copyright (c) 2015 WIZnet Co.,Ltd. All rights reserved.
+ * 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 ARM Limited 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 MBED_PERIPHERALNAMES_H
+#define MBED_PERIPHERALNAMES_H
+
+#include "cmsis.h"
+#include "PinNames.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+    ADC_0 = (int)W7500x_ADC_BASE
+} ADCName;
+
+typedef enum {
+    UART_0 = (int)W7500x_UART0_BASE,
+    UART_1 = (int)W7500x_UART1_BASE
+} UARTName;
+
+
+typedef enum {
+    SPI_0 = (int)SSP0_BASE,
+    SPI_1 = (int)SSP1_BASE
+} SPIName;
+
+typedef enum {
+    I2C_0 = (int)I2C0_BASE,
+    I2C_1 = (int)I2C1_BASE
+} I2CName;
+
+typedef enum {    
+    PWM_0 = (int)PWM_CH0_BASE,
+    PWM_1 = (int)PWM_CH1_BASE,
+    PWM_2 = (int)PWM_CH2_BASE,
+    PWM_3 = (int)PWM_CH3_BASE,
+    PWM_4 = (int)PWM_CH4_BASE,
+    PWM_5 = (int)PWM_CH5_BASE,
+    PWM_6 = (int)PWM_CH6_BASE,
+    PWM_7 = (int)PWM_CH7_BASE
+} PWMName;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/PortNames.h	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,48 @@
+/* mbed Microcontroller Library 
+ *******************************************************************************
+ * Copyright (c) 2015 WIZnet Co.,Ltd. All rights reserved.
+ * 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 ARM Limited 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 MBED_PORTNAMES_H
+#define MBED_PORTNAMES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+    PortA = 0,
+    PortB = 1,
+    PortC = 2,
+    PortD = 3,
+} PortName;
+
+#ifdef __cplusplus
+}
+#endif
+#endif
--- a/targets/hal/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/PeripheralNames.h	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-/* mbed Microcontroller Library 
- *******************************************************************************
- * Copyright (c) 2015 WIZnet Co.,Ltd. All rights reserved.
- * 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 ARM Limited 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 MBED_PERIPHERALNAMES_H
-#define MBED_PERIPHERALNAMES_H
-
-#include "cmsis.h"
-#include "PinNames.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef enum {
-    ADC_0 = (int)W7500x_ADC_BASE
-} ADCName;
-
-typedef enum {
-    UART_0 = (int)W7500x_UART0_BASE,
-    UART_1 = (int)W7500x_UART1_BASE
-} UARTName;
-
-#define STDIO_UART_TX  PC_2
-#define STDIO_UART_RX  PC_3
-#define STDIO_UART     UART_1
-
-typedef enum {
-    SPI_0 = (int)SSP0_BASE,
-    SPI_1 = (int)SSP1_BASE
-} SPIName;
-
-typedef enum {
-    I2C_0 = (int)I2C0_BASE,
-    I2C_1 = (int)I2C1_BASE
-} I2CName;
-
-typedef enum {    
-    PWM_0 = (int)PWM_CH0_BASE,
-    PWM_1 = (int)PWM_CH1_BASE,
-    PWM_2 = (int)PWM_CH2_BASE,
-    PWM_3 = (int)PWM_CH3_BASE,
-    PWM_4 = (int)PWM_CH4_BASE,
-    PWM_5 = (int)PWM_CH5_BASE,
-    PWM_6 = (int)PWM_CH6_BASE,
-    PWM_7 = (int)PWM_CH7_BASE
-} PWMName;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
--- a/targets/hal/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/PeripheralPins.c	Fri Sep 04 08:45:09 2015 +0100
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/PeripheralPins.c	Fri Sep 04 09:30:10 2015 +0100
@@ -73,7 +73,7 @@
     {PA_9, I2C_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
     {PC_8, I2C_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
     {PC_4, I2C_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
-    {PC_5, I2C_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
+    {PA_5, I2C_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
     {NC,    NC,    0}
 };
 
@@ -82,32 +82,32 @@
 const PinMap PinMap_SPI_SCLK[] = {
     {PA_6 , SPI_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
     {PB_1 , SPI_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
-    {PC_12, SPI_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF3)},
-    {PA_12, SPI_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF3)},
+    {PC_13, SPI_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
+    {PA_12, SPI_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
     {NC   , NC   , 0}
 };
 
 const PinMap PinMap_SPI_MOSI[] = {
     {PA_8 , SPI_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
     {PB_3 , SPI_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
-    {PC_10, SPI_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF3)},
-    {PA_14, SPI_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF3)},
+    {PC_15, SPI_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
+    {PA_14, SPI_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
     {NC   , NC   , 0}
 };
 
 const PinMap PinMap_SPI_MISO[] = {
     {PA_7 , SPI_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
     {PB_2 , SPI_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
-    {PC_11, SPI_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF3)},
-    {PA_13, SPI_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF3)},
+    {PC_14, SPI_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
+    {PA_13, SPI_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
     {NC   , NC   , 0}
 };
 
 const PinMap PinMap_SPI_SSEL[] = {
     {PA_5 , SPI_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
     {PB_0 , SPI_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF0)},
-    {PC_13, SPI_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF3)},
-    {PA_11, SPI_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF3)},
+    {PC_12, SPI_0, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
+    {PA_11, SPI_1, WIZ_PIN_DATA(WIZ_MODE_AF, WIZ_GPIO_NOPULL, Px_AFSR_AF2)},
     {NC   , NC   , 0}
 };
 
--- a/targets/hal/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/PortNames.h	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/* mbed Microcontroller Library 
- *******************************************************************************
- * Copyright (c) 2015 WIZnet Co.,Ltd. All rights reserved.
- * 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 ARM Limited 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 MBED_PORTNAMES_H
-#define MBED_PORTNAMES_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef enum {
-    PortA = 0,
-    PortB = 1,
-    PortC = 2,
-    PortD = 3,
-} PortName;
-
-#ifdef __cplusplus
-}
-#endif
-#endif
--- a/targets/hal/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/device.h	Fri Sep 04 08:45:09 2015 +0100
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/device.h	Fri Sep 04 09:30:10 2015 +0100
@@ -67,6 +67,11 @@
 
 #define DEVICE_STDIO_MESSAGES   1
 
+#define STDIO_UART_TX  PC_2
+#define STDIO_UART_RX  PC_3
+#define STDIO_UART     UART_1
+
+
 #define DEVICE_ERROR_RED        0
 
 #include "objects.h"
--- a/targets/hal/TARGET_WIZNET/TARGET_W7500x/TARGET_WIZwiki_W7500/objects.h	Fri Sep 04 08:45:09 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,105 +0,0 @@
-/* mbed Microcontroller Library 
- *******************************************************************************
- * Copyright (c) 2015 WIZnet Co.,Ltd. All rights reserved.
- * 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 ARM Limited 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 MBED_OBJECTS_H
-#define MBED_OBJECTS_H
-
-#include "cmsis.h"
-#include "PortNames.h"
-#include "PeripheralNames.h"
-#include "PinNames.h"
-#include "PortNames.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct gpio_irq_s {
-    IRQn_Type irq_n;
-    uint32_t event;
-    PinName pin;
-    uint32_t pin_index;
-    uint32_t pin_num;
-    uint32_t port_num;
-    uint32_t rise_null;
-    uint32_t fall_null;
-};
-
-struct port_s {
-    PortName port;
-    uint32_t mask;
-    PinDirection direction;
-    __IO uint32_t *reg_in;
-    __IO uint32_t *reg_out;
-};
-
-struct analogin_s {
-    ADCName adc;
-    PinName pin;
-};
-
-struct serial_s {
-    UARTName uart;
-    int index; // Used by irq
-    uint32_t baudrate;
-    uint32_t databits;
-    uint32_t stopbits;
-    uint32_t parity;
-    PinName pin_tx;
-    PinName pin_rx;
-};
-
-struct spi_s {
-	SSP_TypeDef *spi;
-};
-
-struct i2c_s {
-    I2CName I2Cx;
-    PinName sda;
-    PinName scl; 
-    uint16_t ADDRESS;
-    uint16_t is_setAddress;
-};
-
-struct pwmout_s {
-    PWM_CHn_TypeDef * PWM_CHx;
-    PinName pin;
-    uint32_t period;
-    uint32_t pulse;
-    uint32_t PrescalerValue;
-};
-
-#include "gpio_object.h"
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_adc.c	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,55 @@
+#include "W7500x.h"
+#include "W7500x_adc.h"
+
+void ADC_PowerDownEnable (FunctionalState NewState)
+{
+	if (NewState != DISABLE)    ADC->ADC_CTR = ADC_CTR_PWD_PD;
+	else                        ADC->ADC_CTR = ADC_CTR_PWD_NRMOP;
+}
+
+void ADC_ChannelSelect (ADC_CH num)
+{
+	assert_param(IS_ADC_CH_NUM(num));
+	ADC->ADC_CHSEL = num;
+}
+
+void ADC_Start (void)
+{
+	ADC->ADC_START = ADC_START_START;
+}
+
+uint16_t ADC_ReadData (void)
+{
+	return ((uint16_t)ADC->ADC_DATA);
+}
+
+void ADC_InterruptMask (FunctionalState NewState)
+{
+	if (NewState != DISABLE)    ADC->ADC_INT = ADC_INT_MASK_ENA;
+	else                        ADC->ADC_INT = ADC_INT_MASK_DIS;
+}
+
+uint8_t ADC_IsInterrupt (void)
+{
+	return (((uint8_t)ADC->ADC_INT && 0x01ul));
+}
+		
+void ADC_InterruptClear (void)
+{
+	ADC->ADC_INT = ADC_INTCLEAR;
+}
+
+void ADC_Init (void)
+{
+	// ADC_CLK on
+	ADC_PowerDownEnable(DISABLE);
+	//ADC_ChannelSelect(num);
+}
+
+void ADC_DeInit (void)
+{
+	// ADC_CLK off
+	ADC_PowerDownEnable(ENABLE);
+	ADC_InterruptMask(DISABLE);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_adc.h	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,59 @@
+/**
+  ******************************************************************************
+  * @file    
+  * @author  
+  * @version 
+  * @date    
+  * @brief   This file contains all the functions prototypes for the ADC 
+  *          firmware library.
+  ******************************************************************************
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __W7500X_ADC_H
+#define __W7500X_ADC_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "W7500x.h"
+
+typedef enum { ADC_CH0 = 0, 
+	       ADC_CH1 = 1,
+	       ADC_CH2 = 2, 
+	       ADC_CH3 = 3,
+	       ADC_CH4 = 4,
+	       ADC_CH5 = 5,
+	       ADC_CH6 = 6,
+	       ADC_CH7 = 7,
+	       ADC_CH15 = 15} ADC_CH;
+
+#define IS_ADC_CH_NUM(NUM)                (((NUM) == ADC_CH0) || \
+		                           ((NUM) == ADC_CH1) || \
+		                           ((NUM) == ADC_CH2) || \
+		                           ((NUM) == ADC_CH3) || \
+		                           ((NUM) == ADC_CH4) || \
+		                           ((NUM) == ADC_CH5) || \
+		                           ((NUM) == ADC_CH6) || \
+		                           ((NUM) == ADC_CH7) || \
+		                           ((NUM) == ADC_CH15))
+
+void ADC_Init(void); 
+void ADC_DeInit(void);
+void ADC_PowerDownEnable (FunctionalState NewState);
+void ADC_ChannelSelect (ADC_CH num);
+void ADC_Start (void);
+uint16_t ADC_ReadData (void);
+void ADC_InterruptMask (FunctionalState NewState);
+uint8_t ADC_IsInterrupt (void);
+void ADC_InterruptClear (void);
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif  //__W7500X_ADC_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_conf.h	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,16 @@
+#include "W7500x_gpio.h"
+#include "W7500x_exti.h"
+#include "W7500x_pwm.h"
+#include "W7500x_uart.h"
+#include "W7500x_i2c.h"
+#include "W7500x_adc.h"
+#include "W7500x_dualtimer.h"
+#include "system_W7500x.h"
+
+
+#ifdef USE_FULL_ASSERT
+    #define assert_param(expr)  ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__,__LINE__))
+#else
+    #define assert_param(expr)   ((void)0)
+#endif /* USE_FULL_ASSERT */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_crg.c	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,276 @@
+#include "W7500x_crg.h"
+
+void CRG_DeInit(void)
+{
+//To Do
+}
+
+void CRG_OSC_PowerDownEnable(FunctionalState NewState)
+{
+    if(NewState != DISABLE)     CRG->OSC_PDR = CRG_OSC_PDR_PD;    
+    else                        CRG->OSC_PDR = CRG_OSC_PDR_NRMLOP;
+}
+
+void CRG_PLL_PowerDownEnable(FunctionalState NewState)
+{
+    if(NewState != DISABLE)     CRG->PLL_PDR = CRG_PLL_PDR_PD;
+    else                        CRG->PLL_PDR = CRG_PLL_PDR_NRMLOP;
+}
+
+void CRG_PLL_OutputEnable(FunctionalState NewState)
+{
+    if(NewState != DISABLE)     CRG->PLL_OER = CRG_PLL_OER_EN;
+    else                        CRG->PLL_OER = CRG_PLL_OER_DIS;
+}
+
+void CRG_PLL_BypassEnable(FunctionalState NewState)
+{
+    if(NewState != DISABLE)     CRG->PLL_BPR = CRG_PLL_BPR_EN;
+    else                        CRG->PLL_BPR = CRG_PLL_BPR_DIS;
+}
+
+void CRG_PLL_InputFrequencySelect(CRG_CLK_SOURCE src)
+{
+    assert_param(IS_CRG_PLL_SRC(src));
+
+    if( src == CRG_RCLK )   CRG->PLL_IFSR = CRG_PLL_IFSR_RCLK; 
+    else                    CRG->PLL_IFSR = CRG_PLL_IFSR_OCLK;
+}
+
+void CRG_FCLK_SourceSelect(CRG_CLK_SOURCE src)
+{
+    assert_param(IS_CRG_FCLK_SRC(src));
+
+    if      ( src == CRG_RCLK )     CRG->FCLK_SSR = CRG_FCLK_SSR_RCLK; 
+    else if ( src == CRG_OCLK )     CRG->FCLK_SSR = CRG_FCLK_SSR_OCLK;
+    else                            CRG->FCLK_SSR = CRG_FCLK_SSR_MCLK;
+}
+
+void CRG_FCLK_SetPrescale(CRG_PREDIV prediv)
+{
+    assert_param(IS_CRG_FCLK_PREDIV(prediv));
+
+    if      ( prediv == CRG_PREDIV1 )   CRG->FCLK_PVSR = CRG_FCLK_PVSR_DIV1; 
+    else if ( prediv == CRG_PREDIV2 )   CRG->FCLK_PVSR = CRG_FCLK_PVSR_DIV2; 
+    else if ( prediv == CRG_PREDIV4 )   CRG->FCLK_PVSR = CRG_FCLK_PVSR_DIV4; 
+    else                                CRG->FCLK_PVSR = CRG_FCLK_PVSR_DIV8; 
+}
+
+void CRG_SSPCLK_SourceSelect(CRG_CLK_SOURCE src)
+{
+    assert_param(IS_CRG_SSPCLK_SRC(src));
+
+    if      ( src == CRG_CLK_DIS )     CRG->SSPCLK_SSR = CRG_SSPCLK_SSR_DIS;
+    else if ( src == CRG_MCLK )        CRG->SSPCLK_SSR = CRG_SSPCLK_SSR_MCLK;
+    else if ( src == CRG_RCLK )        CRG->SSPCLK_SSR = CRG_SSPCLK_SSR_RCLK;
+    else                               CRG->SSPCLK_SSR = CRG_SSPCLK_SSR_OCLK;
+}
+
+void CRG_SSPCLK_SetPrescale(CRG_PREDIV prediv)
+{
+    assert_param(IS_CRG_SSPCLK_PREDIV(prediv));
+
+    if      ( prediv == CRG_PREDIV1 )   CRG->SSPCLK_PVSR = CRG_SSPCLK_PVSR_DIV1; 
+    else if ( prediv == CRG_PREDIV2 )   CRG->SSPCLK_PVSR = CRG_SSPCLK_PVSR_DIV2; 
+    else if ( prediv == CRG_PREDIV4 )   CRG->SSPCLK_PVSR = CRG_SSPCLK_PVSR_DIV4; 
+    else                                CRG->SSPCLK_PVSR = CRG_SSPCLK_PVSR_DIV8; 
+}
+
+void CRG_ADCCLK_SourceSelect(CRG_CLK_SOURCE src)
+{
+    assert_param(IS_CRG_ADCCLK_SRC(src));
+
+    if      ( src == CRG_CLK_DIS )   CRG->ADCCLK_SSR = CRG_ADCCLK_SSR_DIS;
+    else if ( src == CRG_MCLK )      CRG->ADCCLK_SSR = CRG_ADCCLK_SSR_MCLK;
+    else if ( src == CRG_RCLK )      CRG->ADCCLK_SSR = CRG_ADCCLK_SSR_RCLK;
+    else                             CRG->ADCCLK_SSR = CRG_ADCCLK_SSR_OCLK;
+}
+
+void CRG_ADCCLK_SetPrescale(CRG_PREDIV prediv)
+{
+    assert_param(IS_CRG_ADCCLK_PREDIV(prediv));
+
+    if      ( prediv == CRG_PREDIV1 )   CRG->ADCCLK_PVSR = CRG_ADCCLK_PVSR_DIV1; 
+    else if ( prediv == CRG_PREDIV2 )   CRG->ADCCLK_PVSR = CRG_ADCCLK_PVSR_DIV2; 
+    else if ( prediv == CRG_PREDIV4 )   CRG->ADCCLK_PVSR = CRG_ADCCLK_PVSR_DIV4; 
+    else                                CRG->ADCCLK_PVSR = CRG_ADCCLK_PVSR_DIV8; 
+}
+
+void CRG_TIMERCLK_SourceSelect(CRG_TIMER num, CRG_CLK_SOURCE src)
+{
+    assert_param(IS_CRG_TIMERCLK_NUM(num));
+    assert_param(IS_CRG_TIMERCLK_SRC(src));
+
+    if      ( src == CRG_CLK_DIS )   CRG_SET_TIMERCLK_SSR(num,CRG_TIMERCLK_SSR_DIS);
+    else if ( src == CRG_MCLK )      CRG_SET_TIMERCLK_SSR(num,CRG_TIMERCLK_SSR_MCLK);
+    else if ( src == CRG_RCLK )      CRG_SET_TIMERCLK_SSR(num,CRG_TIMERCLK_SSR_RCLK); 
+    else                             CRG_SET_TIMERCLK_SSR(num,CRG_TIMERCLK_SSR_OCLK);
+}
+
+void CRG_TIMERCLK_SetPrescale(CRG_TIMER num, CRG_PREDIV prediv)
+{
+    assert_param(IS_CRG_TIMERCLK_NUM(num));
+    assert_param(IS_CRG_TIMERCLK_PREDIV(prediv));
+
+    if      ( prediv == CRG_PREDIV1 )   CRG_SET_TIMERCLK_PREDIV(num,CRG_TIMERCLK_PVSR_DIV1); 
+    else if ( prediv == CRG_PREDIV2 )   CRG_SET_TIMERCLK_PREDIV(num,CRG_TIMERCLK_PVSR_DIV2); 
+    else if ( prediv == CRG_PREDIV4 )   CRG_SET_TIMERCLK_PREDIV(num,CRG_TIMERCLK_PVSR_DIV4);
+    else if ( prediv == CRG_PREDIV8 )   CRG_SET_TIMERCLK_PREDIV(num,CRG_TIMERCLK_PVSR_DIV8);
+    else if ( prediv == CRG_PREDIV16 )  CRG_SET_TIMERCLK_PREDIV(num,CRG_TIMERCLK_PVSR_DIV16);
+    else if ( prediv == CRG_PREDIV32 )  CRG_SET_TIMERCLK_PREDIV(num,CRG_TIMERCLK_PVSR_DIV32);
+    else if ( prediv == CRG_PREDIV64 )  CRG_SET_TIMERCLK_PREDIV(num,CRG_TIMERCLK_PVSR_DIV64);
+    else                                CRG_SET_TIMERCLK_PREDIV(num,CRG_TIMERCLK_PVSR_DIV128);
+}
+
+void CRG_PWMCLK_SourceSelect(CRG_PWM num, CRG_CLK_SOURCE src)
+{
+    assert_param(IS_CRG_PWMCLK_NUM(num));
+    assert_param(IS_CRG_PWMCLK_SRC(src));
+
+    if      ( src == CRG_CLK_DIS )   CRG_SET_PWMCLK_SSR(num,CRG_PWMCLK_SSR_DIS);
+    else if ( src == CRG_MCLK )      CRG_SET_PWMCLK_SSR(num,CRG_PWMCLK_SSR_MCLK);
+    else if ( src == CRG_RCLK )      CRG_SET_PWMCLK_SSR(num,CRG_PWMCLK_SSR_RCLK); 
+    else                             CRG_SET_PWMCLK_SSR(num,CRG_PWMCLK_SSR_OCLK);
+}
+
+void CRG_PWMCLK_SetPrescale(CRG_PWM num, CRG_PREDIV prediv)
+{
+    assert_param(IS_CRG_PWMCLK_NUM(num));
+    assert_param(IS_CRG_PWMCLK_PREDIV(prediv));
+
+    if      ( prediv == CRG_PREDIV1 )   CRG_SET_PWMCLK_PREDIV(num,CRG_PWMCLK_PVSR_DIV1); 
+    else if ( prediv == CRG_PREDIV2 )   CRG_SET_PWMCLK_PREDIV(num,CRG_PWMCLK_PVSR_DIV2); 
+    else if ( prediv == CRG_PREDIV4 )   CRG_SET_PWMCLK_PREDIV(num,CRG_PWMCLK_PVSR_DIV4);
+    else if ( prediv == CRG_PREDIV8 )   CRG_SET_PWMCLK_PREDIV(num,CRG_PWMCLK_PVSR_DIV8);
+    else if ( prediv == CRG_PREDIV16 )  CRG_SET_PWMCLK_PREDIV(num,CRG_PWMCLK_PVSR_DIV16);
+    else if ( prediv == CRG_PREDIV32 )  CRG_SET_PWMCLK_PREDIV(num,CRG_PWMCLK_PVSR_DIV32);
+    else if ( prediv == CRG_PREDIV64 )  CRG_SET_PWMCLK_PREDIV(num,CRG_PWMCLK_PVSR_DIV64);
+    else                                CRG_SET_PWMCLK_PREDIV(num,CRG_PWMCLK_PVSR_DIV128);
+}
+
+void CRG_RTC_HS_SourceSelect(CRG_CLK_SOURCE src)
+{
+    assert_param(IS_CRG_RTC_HS_SRC(src));
+
+    if      ( src == CRG_CLK_DIS )   CRG->RTC_HS_SSR = CRG_RTC_HS_SSR_DIS;
+    else if ( src == CRG_MCLK )      CRG->RTC_HS_SSR = CRG_RTC_HS_SSR_MCLK;
+    else if ( src == CRG_RCLK )      CRG->RTC_HS_SSR = CRG_RTC_HS_SSR_RCLK;
+    else                             CRG->RTC_HS_SSR = CRG_RTC_HS_SSR_OCLK;
+
+    if ( src != CRG_CLK_DIS )        CRG_RTC_SourceSelect(CRG_CLK_HIGH);
+}
+
+void CRG_RTC_HS_SetPrescale(CRG_PREDIV prediv)
+{
+    assert_param(IS_CRG_RTC_HS_PREDIV(prediv));
+
+    if      ( prediv == CRG_PREDIV1 )   CRG->RTC_HS_PVSR = CRG_RTC_HS_PVSR_DIV1; 
+    else if ( prediv == CRG_PREDIV2 )   CRG->RTC_HS_PVSR = CRG_RTC_HS_PVSR_DIV2; 
+    else if ( prediv == CRG_PREDIV4 )   CRG->RTC_HS_PVSR = CRG_RTC_HS_PVSR_DIV4;
+    else if ( prediv == CRG_PREDIV8 )   CRG->RTC_HS_PVSR = CRG_RTC_HS_PVSR_DIV8;
+    else if ( prediv == CRG_PREDIV16 )  CRG->RTC_HS_PVSR = CRG_RTC_HS_PVSR_DIV16;
+    else if ( prediv == CRG_PREDIV32 )  CRG->RTC_HS_PVSR = CRG_RTC_HS_PVSR_DIV32;
+    else if ( prediv == CRG_PREDIV64 )  CRG->RTC_HS_PVSR = CRG_RTC_HS_PVSR_DIV64;
+    else                                CRG->RTC_HS_PVSR = CRG_RTC_HS_PVSR_DIV128;
+}
+
+void CRG_RTC_SourceSelect(CRG_CLK_LOW_SOURCE src)
+{
+    assert_param(IS_CRG_RTC_LOW_SRC(src));
+
+    if (src == CRG_CLK_LOW)
+    {
+        CRG_RTC_HS_SourceSelect(CRG_CLK_DIS);
+        CRG->RTC_SSR = CRG_RTC_SSR_LW; 
+    }
+    else
+    {
+        CRG->RTC_SSR = CRG_RTC_SSR_HS;
+    }
+}
+
+void CRG_WDOGCLK_HS_SourceSelect(CRG_CLK_SOURCE src)
+{
+    assert_param(IS_CRG_WDOGCLK_HS_SRC(src));
+
+    if      ( src == CRG_CLK_DIS )   CRG->WDOGCLK_HS_SSR = CRG_WDOGCLK_HS_SSR_DIS;
+    else if ( src == CRG_MCLK )      CRG->WDOGCLK_HS_SSR = CRG_WDOGCLK_HS_SSR_MCLK;
+    else if ( src == CRG_RCLK )      CRG->WDOGCLK_HS_SSR = CRG_WDOGCLK_HS_SSR_RCLK;
+    else                             CRG->WDOGCLK_HS_SSR = CRG_WDOGCLK_HS_SSR_OCLK;
+
+    if ( src != CRG_CLK_DIS )        CRG_WDOGCLK_SourceSelect(CRG_CLK_HIGH);
+}
+
+void CRG_WDOGCLK_HS_SetPrescale(CRG_PREDIV prediv)
+{
+    assert_param(IS_CRG_WDOGCLK_HS_PREDIV(prediv));
+
+    if      ( prediv == CRG_PREDIV1 )   CRG->WDOGCLK_HS_PVSR = CRG_WDOGCLK_HS_PVSR_DIV1; 
+    else if ( prediv == CRG_PREDIV2 )   CRG->WDOGCLK_HS_PVSR = CRG_WDOGCLK_HS_PVSR_DIV2; 
+    else if ( prediv == CRG_PREDIV4 )   CRG->WDOGCLK_HS_PVSR = CRG_WDOGCLK_HS_PVSR_DIV4;
+    else if ( prediv == CRG_PREDIV8 )   CRG->WDOGCLK_HS_PVSR = CRG_WDOGCLK_HS_PVSR_DIV8;
+    else if ( prediv == CRG_PREDIV16 )  CRG->WDOGCLK_HS_PVSR = CRG_WDOGCLK_HS_PVSR_DIV16;
+    else if ( prediv == CRG_PREDIV32 )  CRG->WDOGCLK_HS_PVSR = CRG_WDOGCLK_HS_PVSR_DIV32;
+    else if ( prediv == CRG_PREDIV64 )  CRG->WDOGCLK_HS_PVSR = CRG_WDOGCLK_HS_PVSR_DIV64;
+    else                                CRG->WDOGCLK_HS_PVSR = CRG_WDOGCLK_HS_PVSR_DIV128;
+}
+
+void CRG_WDOGCLK_SourceSelect(CRG_CLK_LOW_SOURCE src)
+{
+    assert_param(IS_CRG_WDOGCLK_LOW_SRC(src));
+
+    if (src == CRG_CLK_LOW)
+    {
+        CRG_WDOGCLK_HS_SourceSelect(CRG_CLK_DIS);
+        CRG->WDOGCLK_SSR = CRG_WDOGCLK_SSR_LW; 
+    }
+    else
+    {
+        CRG->WDOGCLK_SSR = CRG_WDOGCLK_SSR_HS;
+    }
+}
+
+void CRG_UARTCLK_SourceSelect(CRG_CLK_SOURCE src)
+{
+    assert_param(IS_CRG_UARTCLK_SRC(src));
+
+    if      ( src == CRG_CLK_DIS )   CRG->UARTCLK_SSR = CRG_UARTCLK_SSR_DIS;
+    else if ( src == CRG_MCLK )      CRG->UARTCLK_SSR = CRG_UARTCLK_SSR_MCLK;
+    else if ( src == CRG_RCLK )      CRG->UARTCLK_SSR = CRG_UARTCLK_SSR_RCLK;
+    else                             CRG->UARTCLK_SSR = CRG_UARTCLK_SSR_OCLK;
+}
+
+void CRG_UARTCLK_SetPrescale(CRG_PREDIV prediv)
+{
+    assert_param(IS_CRG_UARTCLK_PREDIV(prediv));
+
+    if      ( prediv == CRG_PREDIV1 )   CRG->UARTCLK_PVSR = CRG_UARTCLK_PVSR_DIV1; 
+    else if ( prediv == CRG_PREDIV2 )   CRG->UARTCLK_PVSR = CRG_UARTCLK_PVSR_DIV2; 
+    else if ( prediv == CRG_PREDIV4 )   CRG->UARTCLK_PVSR = CRG_UARTCLK_PVSR_DIV4; 
+    else                                CRG->UARTCLK_PVSR = CRG_UARTCLK_PVSR_DIV8; 
+}
+
+void CRG_MII_Enable(FunctionalState rx_clk, FunctionalState tx_clk)
+{
+    assert_param(IS_FUNCTIONAL_STATE(rx_clk));
+    assert_param(IS_FUNCTIONAL_STATE(tx_clk));
+
+    if  ( rx_clk != DISABLE )   CRG->MIICLK_ECR |= CRG_MIICLK_ECR_EN_RXCLK;
+    else                        CRG->MIICLK_ECR &= ~(CRG_MIICLK_ECR_EN_RXCLK);    
+
+    if  ( tx_clk != DISABLE )   CRG->MIICLK_ECR |= CRG_MIICLK_ECR_EN_TXCLK;
+    else                        CRG->MIICLK_ECR &= ~(CRG_MIICLK_ECR_EN_TXCLK);
+}
+
+void CRG_SetMonitoringClock(uint32_t value)
+{
+    assert_param(IS_CRG_MONCLK_SSR(value));
+
+    CRG->MONCLK_SSR = value;
+}
+
+uint32_t CRG_GetMonitoringClock(void)
+{
+    return (uint8_t)CRG->MONCLK_SSR;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_crg.h	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,145 @@
+/**
+  ******************************************************************************
+  * @file    
+  * @author  
+  * @version 
+  * @date    
+  * @brief   This file contains all the functions prototypes for the Clock Reset Generator 
+  *          firmware library.
+  ******************************************************************************
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __W7500X_CRG_H
+#define __W7500X_CRG_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "W7500x.h"
+
+// It will be in W7500x_crg.h
+typedef enum { CRG_CLK_DIS = 0, CRG_MCLK, CRG_RCLK, CRG_OCLK } CRG_CLK_SOURCE;
+typedef enum { CRG_CLK_HIGH = 0, CRG_CLK_LOW }  CRG_CLK_LOW_SOURCE;
+typedef enum { CRG_PREDIV1 = 0, CRG_PREDIV2, CRG_PREDIV4, CRG_PREDIV8, CRG_PREDIV16, \
+               CRG_PREDIV32, CRG_PREDIV64, CRG_PREDIV128 } CRG_PREDIV;
+typedef enum { CRG_TIMER0 = 0, CRG_TIMER1 } CRG_TIMER;
+typedef enum { CRG_PWM0 = 0, CRG_PWM1, CRG_PWM2, CRG_PWM3, CRG_PWM4, CRG_PWM5, CRG_PWM6, CRG_PWM7 } CRG_PWM;
+
+
+
+#define IS_CRG_PLL_SRC(SRC)          (((SRC) == CRG_RCLK) || ((SRC) == CRG_OCLK))
+#define IS_CRG_FCLK_SRC(SRC)         (((SRC) == CRG_MCLK) || ((SRC) == CRG_RCLK) || ((SRC) == CRG_OCLK))
+
+#define CRG_CLK_SRC_DEFAULT(SRC)     (((SRC) == CRG_CLK_DIS) || ((SRC) == CRG_MCLK) || \
+                                      ((SRC) == CRG_RCLK) || ((SRC) == CRG_OCLK))
+#define CRG_CLK_SRC_LOW(SRC)         (((SRC) == CRG_CLK_HIGH) || ((SRC) == CRG_CLK_LOW))
+
+#define CRG_CLK_PREDIV_DEFAULT(DIV)  (((DIV) == CRG_PREDIV1) || ((DIV) == CRG_PREDIV2) || \
+                                      ((DIV) == CRG_PREDIV4) || ((DIV) == CRG_PREDIV8))
+#define CRG_CLK_PREDIV_ADVANCE(DIV)  (((DIV) == CRG_PREDIV1)  || ((DIV) == CRG_PREDIV2)  || \
+                                      ((DIV) == CRG_PREDIV4)  || ((DIV) == CRG_PREDIV8)  || \
+                                      ((DIV) == CRG_PREDIV16) || ((DIV) == CRG_PREDIV32) || \
+                                      ((DIV) == CRG_PREDIV64)  || ((DIV) == CRG_PREDIV128))
+
+
+#define IS_CRG_FCLK_PREDIV(DIV)     CRG_CLK_PREDIV_DEFAULT(DIV) 
+
+#define IS_CRG_SSPCLK_SRC(SRC)      CRG_CLK_SRC_DEFAULT(SRC)
+#define IS_CRG_SSPCLK_PREDIV(DIV)   CRG_CLK_PREDIV_DEFAULT(DIV)
+
+#define IS_CRG_ADCCLK_PREDIV(DIV)   CRG_CLK_PREDIV_DEFAULT(DIV)
+#define IS_CRG_ADCCLK_SRC(SRC)      CRG_CLK_SRC_DEFAULT(SRC)
+
+
+
+
+
+#define IS_CRG_TIMERCLK_NUM(NUM)            (((NUM) == CRG_TIMER0) || ((NUM) == CRG_TIMER1))
+#define IS_CRG_TIMERCLK_SRC(SRC)            CRG_CLK_SRC_DEFAULT(SRC)
+#define IS_CRG_TIMERCLK_PREDIV(DIV)         CRG_CLK_PREDIV_ADVANCE(DIV)
+
+#define CRG_SET_TIMERCLK_SSR(NUM,VALUE) \
+            (*((volatile uint32_t *)(CRG->TIMER0CLK_SSR) + (0x10ul * NUM)) = VALUE)
+#define CRG_SET_TIMERCLK_PREDIV(NUM,VALUE) \
+            (*((volatile uint32_t *)(CRG->TIMER0CLK_PVSR) + (0x10ul * NUM)) = VALUE)
+//#define CRG_SET_TIMERCLK_SSR(num,value)     CRG->TIMER##num##CLK_SSR = value
+//#define CRG_SET_TIMERCLK_PREDIV(num,value)  CRG->TIMER##num##CLK_PVSR = value
+
+
+#define IS_CRG_PWMCLK_NUM(NUM)              (((NUM) == CRG_PWM0) || ((NUM) == CRG_PWM1) || \
+                                             ((NUM) == CRG_PWM2) || ((NUM) == CRG_PWM3) || \
+                                             ((NUM) == CRG_PWM4) || ((NUM) == CRG_PWM5) || \
+                                             ((NUM) == CRG_PWM6) || ((NUM) == CRG_PWM7) )
+#define IS_CRG_PWMCLK_SRC(SRC)              CRG_CLK_SRC_DEFAULT(SRC)
+#define IS_CRG_PWMCLK_PREDIV(DIV)           CRG_CLK_PREDIV_ADVANCE(DIV)
+
+#define CRG_SET_PWMCLK_SSR(NUM,VALUE)       \
+            (*((volatile uint32_t *)(CRG->PWM0CLK_SSR) + (0x10ul * NUM)) = VALUE)
+#define CRG_SET_PWMCLK_PREDIV(NUM,VALUE)    \
+            (*((volatile uint32_t *)(CRG->PWM0CLK_PVSR) + (0x10ul * NUM)) = VALUE)
+//#define CRG_SET_PWMCLK_SSR(num,value)       CRG->PWM##num##CLK_SSR = value
+//#define CRG_SET_PWMCLK_PREDIV(num,value)    CRG->PWM##num##CLK_PVSR = value
+
+#define IS_CRG_RTC_HS_SRC(SRC)              CRG_CLK_SRC_DEFAULT(SRC)
+#define IS_CRG_RTC_HS_PREDIV(DIV)           CRG_CLK_PREDIV_ADVANCE(DIV)
+#define IS_CRG_RTC_LOW_SRC(SRC)             CRG_CLK_SRC_LOW(SRC) 
+
+#define IS_CRG_WDOGCLK_HS_SRC(SRC)          CRG_CLK_SRC_DEFAULT(SRC)
+#define IS_CRG_WDOGCLK_HS_PREDIV(DIV)       CRG_CLK_PREDIV_ADVANCE(DIV)
+#define IS_CRG_WDOGCLK_LOW_SRC(SRC)         CRG_CLK_SRC_LOW(SRC)
+
+#define IS_CRG_UARTCLK_SRC(SRC)             CRG_CLK_SRC_DEFAULT(SRC)
+#define IS_CRG_UARTCLK_PREDIV(DIV)          CRG_CLK_PREDIV_DEFAULT(DIV)
+
+#define IS_CRG_MONCLK_SSR(value)            (((value) >= 0x00ul) || ((value) <= 0x13ul))
+
+void CRG_DeInit(void);
+void CRG_OSC_PowerDownEnable        (FunctionalState NewState);
+void CRG_PLL_PowerDownEnable        (FunctionalState NewState);
+void CRG_PLL_OutputEnable           (FunctionalState NewState);
+void CRG_PLL_BypassEnable           (FunctionalState NewState);
+void CRG_PLL_InputFrequencySelect   (CRG_CLK_SOURCE src);
+
+void CRG_FCLK_SourceSelect          (CRG_CLK_SOURCE src);
+void CRG_FCLK_SetPrescale           (CRG_PREDIV prediv);
+
+void CRG_SSPCLK_SourceSelect    (CRG_CLK_SOURCE src);
+void CRG_SSPCLK_SetPrescale     (CRG_PREDIV prediv);
+
+void CRG_ADCCLK_SourceSelect    (CRG_CLK_SOURCE src);
+void CRG_ADCCLK_SetPrescale     (CRG_PREDIV prediv);
+
+void CRG_TIMERCLK_SourceSelect  (CRG_TIMER num, CRG_CLK_SOURCE src);
+void CRG_TIMERCLK_SetPrescale   (CRG_TIMER num, CRG_PREDIV prediv);
+
+void CRG_PWMCLK_SourceSelect    (CRG_PWM num, CRG_CLK_SOURCE src);
+void CRG_PWMCLK_SetPrescale     (CRG_PWM num, CRG_PREDIV prediv);
+
+void CRG_RTC_HS_SourceSelect    (CRG_CLK_SOURCE src);
+void CRG_RTC_HS_SetPrescale     (CRG_PREDIV prediv);
+void CRG_RTC_SourceSelect       (CRG_CLK_LOW_SOURCE src);
+
+void CRG_WDOGCLK_HS_SourceSelect    (CRG_CLK_SOURCE src);
+void CRG_WDOGCLK_HS_SetPrescale     (CRG_PREDIV prediv);
+void CRG_WDOGCLK_SourceSelect       (CRG_CLK_LOW_SOURCE src);
+
+void CRG_UARTCLK_SourceSelect   (CRG_CLK_SOURCE src);
+void CRG_UARTCLK_SetPrescale    (CRG_PREDIV prediv);
+
+void CRG_MII_Enable (FunctionalState rx_clk, FunctionalState tx_clk);
+
+void    CRG_SetMonitoringClock  (uint32_t value);
+uint32_t CRG_GetMonitoringClock  (void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_dualtimer.c	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,206 @@
+/**
+  ******************************************************************************
+  * @file    W7500x_stdPeriph_Driver/src/W7500x_dualtimer.c    
+  * @author  IOP Team
+  * @version v1.0.0
+  * @date    01-May-2015
+  * @brief   This file contains all the functions prototypes for the dualtimer 
+  *          firmware library.
+  ******************************************************************************
+  *
+  ******************************************************************************
+  */
+
+/* Includes -------------------------------------------*/
+#include "W7500x.h"
+#include "W7500x_dualtimer.h"
+
+void DUALTIMER_ClockEnable(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    if(DUALTIMERn == DUALTIMER0_0)
+        TIMCLKEN0_0 = DUALTIMER_Clock_Enable;
+    else if(DUALTIMERn == DUALTIMER0_1)
+        TIMCLKEN0_1 = DUALTIMER_Clock_Enable;
+    else if(DUALTIMERn == DUALTIMER1_0)
+        TIMCLKEN1_0 = DUALTIMER_Clock_Enable;
+    else if(DUALTIMERn == DUALTIMER1_1)
+        TIMCLKEN1_1 = DUALTIMER_Clock_Enable;
+}
+
+void DUALTIMER_ClockDisable(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    if(DUALTIMERn == DUALTIMER0_0)
+        TIMCLKEN0_0 = DUALTIMER_Clock_Disable;
+    else if(DUALTIMERn == DUALTIMER0_1)
+        TIMCLKEN0_1 = DUALTIMER_Clock_Disable;
+    else if(DUALTIMERn == DUALTIMER1_0)
+        TIMCLKEN1_0 = DUALTIMER_Clock_Disable;
+    else if(DUALTIMERn == DUALTIMER1_1)
+        TIMCLKEN1_1 = DUALTIMER_Clock_Disable;
+}
+
+void DUALTIMER_DeInit(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    DUALTIMER_Stop(DUALTIMERn);
+
+    DUALTIMERn->TimerLoad = 0x0;
+    DUALTIMERn->TimerControl = 0x20;
+    DUALTIMERn->TimerBGLoad = 0x0;
+}
+
+void DUALTIMER_Init(DUALTIMER_TypeDef* DUALTIMERn, DUALTIMER_InitTypDef* DUALTIMER_InitStruct)
+{
+    uint32_t tmp = 0;
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+    assert_param(IS_DUALTIMER_TimerMode(DUALTIMER_InitStruct->TimerControl_Mode));
+    assert_param(IS_DUALTIMER_TimerPre(DUALTIMER_InitStruct->TimerControl_Pre));
+    assert_param(IS_DUALTIMER_TimerSize(DUALTIMER_InitStruct->TimerControl_Size));
+    assert_param(IS_DUALTIMER_OneShot(DUALTIMER_InitStruct->TimerControl_OneShot));
+    
+    DUALTIMER_Stop(DUALTIMERn);
+
+    DUALTIMERn->TimerLoad = DUALTIMER_InitStruct->TimerLoad;
+
+    tmp = DUALTIMERn->TimerControl;
+    tmp |= (DUALTIMER_InitStruct->TimerControl_Mode << DUALTIMER_TimerControl_TimerMode_Pos);
+    tmp |= (DUALTIMER_InitStruct->TimerControl_Pre << DUALTIMER_TimerControl_Pre_Pos); 
+    tmp |= (DUALTIMER_InitStruct->TimerControl_Size << DUALTIMER_TimerControl_Size_Pos);
+    tmp |= (DUALTIMER_InitStruct->TimerControl_OneShot << DUALTIMER_TimerControl_OneShot_Pos);
+    //Reset values not used
+    tmp &= 0xEF;
+
+    DUALTIMERn->TimerControl = tmp;
+}
+
+void DUALTIMER_IntConfig(DUALTIMER_TypeDef* DUALTIMERn, FunctionalState state)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    if(state == ENABLE)
+        DUALTIMERn->TimerControl |= (DUALTIMER_TimerControl_IntEnable << DUALTIMER_TimerControl_IntEnable_Pos);
+    else 
+        DUALTIMERn->TimerControl &= ~(DUALTIMER_TimerControl_IntEnable << DUALTIMER_TimerControl_IntEnable_Pos);
+}
+
+void DUALTIMER_IntClear(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    DUALTIMERn->TimerIntClr = DUALTIMER_Int_Clear;
+}
+
+ITStatus DUALTIMER_GetIntStatus(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    return (ITStatus)DUALTIMERn->TimerMIS;
+}
+
+FlagStatus DUALTIMER_GetIntEnableStatus(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    return (FlagStatus)((DUALTIMERn->TimerControl >> DUALTIMER_TimerControl_IntEnable_Pos) & 0x1);
+}
+
+void DUALTIMER_Start(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    DUALTIMERn->TimerControl |= (DUALTIMER_TimerControl_TimerEnable << DUALTIMER_TimerControl_TimerEnable_Pos);
+}
+
+void DUALTIMER_Stop(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    DUALTIMERn->TimerControl &= ~(DUALTIMER_TimerControl_TimerEnable << DUALTIMER_TimerControl_TimerEnable_Pos);
+}
+
+uint32_t DUALTIMER_GetTimerLoad(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    return DUALTIMERn->TimerLoad;
+}
+
+void DUALTIMER_SetTimerLoad(DUALTIMER_TypeDef* DUALTIMERn, uint32_t TimerLoad)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    DUALTIMERn->TimerLoad = TimerLoad;
+}
+
+uint32_t DUALTIMER_GetTimerValue(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    return DUALTIMERn->TimerValue;
+}
+
+uint32_t DUALTIMER_GetTimerControl(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    return DUALTIMERn->TimerControl;
+}
+
+void DUALTIMER_SetTimerControl(DUALTIMER_TypeDef* DUALTIMERn, uint32_t TimerControl)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    DUALTIMERn->TimerControl = TimerControl;
+}
+
+uint32_t DUALTIMER_GetTimerRIS(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    return DUALTIMERn->TimerRIS;
+}
+
+uint32_t DUALTIMER_GetTimerMIS(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    return DUALTIMERn->TimerMIS;
+}
+
+uint32_t DUALTIMER_GetTimerBGLoad(DUALTIMER_TypeDef* DUALTIMERn)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    return DUALTIMERn->TimerBGLoad;
+}
+
+void DUALTIMER_SetTimerBGLoad(DUALTIMER_TypeDef* DUALTIMERn, uint32_t TimerBGLoad)
+{
+    /* Check the parameters */
+    assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn));
+
+    DUALTIMERn->TimerBGLoad = TimerBGLoad;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_dualtimer.h	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,96 @@
+/**
+  ******************************************************************************
+  * @file    W7500x_stdPeriph_Driver/inc/W7500x_dualtimer.h
+  * @author  IOP Team
+  * @version V1.0.0
+  * @date    01-May-2015
+  * @brief   This file contains all the functions prototypes for the dualtimer 
+  *          firmware library.
+  ******************************************************************************
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __W7500X_DUALTIMER_H
+#define __W7500X_DUALTIMER_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "W7500x.h"
+
+/**********************************************************************************************/
+/**********************************************************************************************/
+//                This structure and define must be in W7500x.h
+/**********************************************************************************************/
+/**********************************************************************************************/
+
+typedef struct
+{
+    uint32_t TimerLoad;
+    uint32_t TimerControl_Mode;
+    uint32_t TimerControl_Pre;
+    uint32_t TimerControl_Size;
+    uint32_t TimerControl_OneShot;    
+}DUALTIMER_InitTypDef;
+
+
+#define IS_DUALTIMER_TimerMode(MODE)        (MODE <= 1) 
+#define IS_DUALTIMER_TimerPre(PREE)         (PRE <= 2) 
+#define IS_DUALTIMER_TimerSize(SIZE)        (SIZE <= 1) 
+#define IS_DUALTIMER_OneShot(ONESHOT)       (ONESHOT <= 1)
+
+
+
+
+
+
+#define DUALTIMER_Int_Clear                 0x1ul
+
+#define DUALTIMER_Clock_Enable              0x1ul
+#define DUALTIMER_Clock_Disable             ~DUALTIMER_Clock_Enable
+
+
+#define IS_DUALTIMER_ALL_CH(CH)            ((CH == DUALTIMER0_0) || \
+                                            (CH == DUALTIMER0_1) || \
+                                            (CH == DUALTIMER1_0) || \
+                                            (CH == DUALTIMER1_1)) 
+
+
+
+void DUALTIMER_ClockEnable(DUALTIMER_TypeDef* DUALTIMERn);
+void DUALTIMER_ClockDisable(DUALTIMER_TypeDef* DUALTIMERn);
+void DUALTIMER_DeInit(DUALTIMER_TypeDef* DUALTIMERn);
+void DUALTIMER_Init(DUALTIMER_TypeDef* DUALTIMERn, DUALTIMER_InitTypDef* DUALTIMER_InitStruct);
+void DUALTIMER_IntConfig(DUALTIMER_TypeDef* DUALTIMERn, FunctionalState state);
+void DUALTIMER_IntClear(DUALTIMER_TypeDef* DUALTIMERn);
+ITStatus DUALTIMER_GetIntStatus(DUALTIMER_TypeDef* DUALTIMERn);
+FlagStatus DUALTIMER_GetIntEnableStatus(DUALTIMER_TypeDef* DUALTIMERn);
+void DUALTIMER_Start(DUALTIMER_TypeDef* DUALTIMERn);
+void DUALTIMER_Stop(DUALTIMER_TypeDef* DUALTIMERn);
+uint32_t DUALTIMER_GetTimerLoad(DUALTIMER_TypeDef* DUALTIMERn);
+void DUALTIMER_SetTimerLoad(DUALTIMER_TypeDef* DUALTIMERn, uint32_t TimerLoad);
+uint32_t DUALTIMER_GetTimerValue(DUALTIMER_TypeDef* DUALTIMERn);
+uint32_t DUALTIMER_GetTimerControl(DUALTIMER_TypeDef* DUALTIMERn);
+void DUALTIMER_SetTimerControl(DUALTIMER_TypeDef* DUALTIMERn, uint32_t TimerControl);
+uint32_t DUALTIMER_GetTimerRIS(DUALTIMER_TypeDef* DUALTIMERn);
+uint32_t DUALTIMER_GetTimerMIS(DUALTIMER_TypeDef* DUALTIMERn);
+uint32_t DUALTIMER_GetTimerBGLoad(DUALTIMER_TypeDef* DUALTIMERn);
+void DUALTIMER_SetTimerBGLoad(DUALTIMER_TypeDef* DUALTIMERn, uint32_t TimerBGLoad);
+
+
+
+//======================= Interrupt handler ==============================
+//void DUALTIMER0_Handler();
+//void DUALTIMER1_Handler();
+
+
+#ifdef __cplusplus
+ }
+#endif
+
+
+#endif //__W7500X_DUALTIMER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_exti.c	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,158 @@
+#include "W7500x.h"
+#include "W7500x_exti.h"
+#include "W7500x_gpio.h"
+
+
+/**
+  * @brief  Deinitializes the EXTI peripheral registers to their default reset values.
+  * @param  None
+  * @retval None
+  */
+void EXTI_DeInit(void)
+{
+    uint32_t i, loop =16;
+    for(i=0; i<loop; i++)
+    {
+        EXTI_PA->Port[i] = 0x00;
+        EXTI_PB->Port[i] = 0x00;
+        EXTI_PC->Port[i] = 0x00;
+    }
+    for(i=0; i<5; i++)
+    {
+        EXTI_PD->Port[i] = 0x00;
+    }
+}
+
+/**
+  * @brief  Initializes the EXTI peripheral according to the specified
+  *         parameters in the EXTI_InitStruct.
+  * @param  EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure
+  *         that contains the configuration information for the EXTI peripheral.
+  * @retval None
+  */
+void EXTI_Init(PAD_Type Px, EXTI_InitTypeDef* EXTI_InitStruct)
+{
+    uint32_t pinpos = 0x00, pos = 0x00, currentpin = 0x00, loop = 16;
+    P_Port_Def *px_exti;
+
+    assert_param(IS_PAD_TYPE(Px));
+
+    if      (Px == PAD_PA)        px_exti  = EXTI_PA;
+    else if (Px == PAD_PB)        px_exti  = EXTI_PB;
+    else if (Px == PAD_PC)        px_exti  = EXTI_PC;
+    else
+    {        
+        px_exti  = (P_Port_Def*)EXTI_PD;
+        loop = 5;
+    }
+
+    for(pinpos = 0x00; pinpos < loop; pinpos++)
+    {
+        pos = ((uint32_t)0x01) << pinpos;
+
+        currentpin = (EXTI_InitStruct->EXTI_Line) & pos;
+        if(currentpin == pos)
+        {   
+            px_exti->Port[pinpos] |= EXTI_Px_INTEN_ENABLE;
+
+            if(EXTI_InitStruct->EXTI_Trigger == EXTI_Trigger_Rising)
+                px_exti->Port[pinpos] |=  EXTI_Px_INTPOR_RISING_EDGE;
+            else
+                px_exti->Port[pinpos] |= EXTI_Px_INTPOR_FALLING_EDGE;
+        }
+    }
+
+}
+
+void EXTI_Polarity_Set(PAD_Type Px, uint16_t GPIO_Pin, uint16_t Polarity )
+{
+    uint32_t pinpos = 0x00, pos = 0x00, currentpin = 0x00, loop = 16;
+    P_Port_Def *px_exti;
+
+    assert_param(IS_PAD_TYPE(Px));
+
+    if      (Px == PAD_PA)        px_exti  = EXTI_PA;
+    else if (Px == PAD_PB)        px_exti  = EXTI_PB;
+    else if (Px == PAD_PC)        px_exti  = EXTI_PC;
+    else
+    {        
+        px_exti  = (P_Port_Def*)EXTI_PD;
+        loop = 5;
+    }
+
+    for(pinpos = 0x00; pinpos < loop; pinpos++)
+    {
+        pos = ((uint32_t)0x01) << pinpos;
+
+        currentpin = GPIO_Pin & pos;
+        if(currentpin == pos)
+        {   
+            if(Polarity == EXTI_Trigger_Rising)
+                px_exti->Port[pinpos] |= EXTI_Px_INTPOR_RISING_EDGE;
+            else
+                px_exti->Port[pinpos] |= EXTI_Px_INTPOR_FALLING_EDGE;
+        }
+    }
+
+}
+
+/**
+  * @brief  Fills each EXTI_InitStruct member with its reset value.
+  * @param  EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure which will
+  *         be initialized.
+  * @retval None
+  */
+void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct)
+{
+  EXTI_InitStruct->EXTI_Line = 0xFF;
+  EXTI_InitStruct->EXTI_Mode = EXTI_Mode_Interrupt;
+  EXTI_InitStruct->EXTI_Trigger = EXTI_Trigger_Falling;
+}
+
+uint16_t EXTI_Px_GetEXTEN(PAD_Type Px)
+{
+    uint32_t i, loop = 16;
+	  uint16_t ret=0;
+    P_Port_Def *px_exti;
+
+    assert_param(IS_PAD_TYPE(Px));
+
+    if      (Px == PAD_PA)        px_exti  = EXTI_PA;
+    else if (Px == PAD_PB)        px_exti  = EXTI_PB;
+    else if (Px == PAD_PC)        px_exti  = EXTI_PC;
+    else
+    {        
+        px_exti  = (P_Port_Def*)EXTI_PD;
+        loop = 5;
+    }
+
+    for(i = 0x00; i < loop; i++)
+    {
+             ret |= (((px_exti->Port[i]&0x2)>>1)<<i);
+		}
+		return ret;
+}
+
+uint16_t EXTI_Px_GetEXTINTPOL(PAD_Type Px)
+{
+    uint32_t i, loop = 16;
+	uint16_t ret=0;
+    P_Port_Def *px_exti;
+
+    assert_param(IS_PAD_TYPE(Px));
+
+    if      (Px == PAD_PA)        px_exti  = EXTI_PA;
+    else if (Px == PAD_PB)        px_exti  = EXTI_PB;
+    else if (Px == PAD_PC)        px_exti  = EXTI_PC;
+    else
+    {        
+        px_exti  = (P_Port_Def*)EXTI_PD;
+        loop = 5;
+    }
+
+    for(i = 0x00; i < loop; i++)
+    {
+             ret |= ((px_exti->Port[i]&0x1)<<i);
+		}
+		return ret;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_exti.h	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,86 @@
+/**
+  ******************************************************************************
+  * @file    
+  * @author  
+  * @version 
+  * @date    
+  * @brief   This file contains all the functions prototypes for the GPIO
+  *          firmware library.
+  ******************************************************************************
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __W7500X_EXTI_H
+#define __W7500X_EXTI_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+ /* Includes ------------------------------------------------------------------*/
+#include "W7500x.h"
+
+
+ /**
+  * @brief  EXTI mode enumeration  
+  */
+
+typedef enum
+{
+  EXTI_Mode_Disable = 0x00,
+  EXTI_Mode_Interrupt = 0x02
+}EXTIMode_TypeDef;
+
+#define IS_EXTI_MODE(MODE) (((MODE) == EXTI_Mode_Rising) || \
+                            ((MODE) == EXTI_Mode_Interrupt)) 
+
+/** 
+  * @brief  EXTI Trigger enumeration  
+  */
+
+typedef enum
+{
+  EXTI_Trigger_Rising = 0x00,
+  EXTI_Trigger_Falling = 0x01  
+}EXTITrigger_TypeDef;
+
+#define IS_EXTI_TRIGGER(TRIGGER) (((TRIGGER) == EXTI_Trigger_Rising) || \
+                                  ((TRIGGER) == EXTI_Trigger_Falling))
+
+/** 
+  * @brief  EXTI Init Structure definition  
+  */
+
+typedef struct
+{
+  uint32_t EXTI_Line;               /*!< Specifies the EXTI lines to be enabled or disabled.
+                                         This parameter can be any combination of @ref EXTI_Lines */
+   
+  EXTIMode_TypeDef EXTI_Mode;       /*!< Specifies the mode for the EXTI lines.This parameter can be a value of @ref EXTIMode_TypeDef */
+
+  EXTITrigger_TypeDef EXTI_Trigger; /*!< Specifies the trigger signal active edge for the EXTI lines.
+                                         This parameter can be a value of @ref EXTIMode_TypeDef */
+
+}EXTI_InitTypeDef;
+
+/**
+  * @}
+  */
+
+void EXTI_DeInit(void);
+void EXTI_Init(PAD_Type Px, EXTI_InitTypeDef* EXTI_InitStruct);
+void EXTI_Polarity_Set(PAD_Type Px, uint16_t GPIO_Pin, uint16_t Polarity );
+void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct);
+uint32_t EXTI_GetEXTIConfig(PAD_Type Px, uint16_t GPIO_Pin);
+uint16_t EXTI_Px_GetEXTEN(PAD_Type Px);
+uint16_t EXTI_Px_GetEXTINTPOL(PAD_Type Px);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif //__W7500X_EXTI_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_gpio.c	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,297 @@
+#include "W7500x.h"
+#include "W7500x_gpio.h"
+
+void HAL_GPIO_DeInit(GPIO_TypeDef* GPIOx)
+{
+    uint32_t i, loop =16;
+    P_Port_Def *px_pcr;
+    P_Port_Def *px_afsr;
+
+    /* Check the parameters */
+    assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
+
+    /* DeInit GPIOx Registers */
+    GPIOx->DATA = 0x0000;        
+    GPIOx->DATAOUT = 0x0000;     
+    //GPIOx->OUTENSET = 0x0000;    
+    GPIOx->OUTENCLR = 0xFFFF;    
+    //GPIOx->INTENSET = 0x0000;    
+    GPIOx->INTENCLR = 0xFFFF;    
+    //GPIOx->INTTYPESET = 0x0000;  
+    GPIOx->INTTYPECLR = 0xFFFF;  
+    //GPIOx->INTPOLSET = 0x0000;
+    GPIOx->INTPOLCLR = 0xFFFF;   
+
+
+    /* DeInit GPIOx 
+     *      Pad Control Register
+     *      Pad Extern interrupt Enable Register
+     *      Pad Alternate Function Select Register
+     */     
+    if (GPIOx == GPIOA)
+    {
+        px_pcr = PA_PCR;
+        px_afsr = PA_AFSR;
+    }
+    else if (GPIOx == GPIOB)
+    {
+        px_pcr = PB_PCR;
+        px_afsr = PB_AFSR;
+    }
+    else if (GPIOx == GPIOC)
+    {
+        px_pcr = PC_PCR;
+        px_afsr = PC_AFSR;
+    }  
+    else // if (GPIOx == GPIOD)
+    {
+        px_pcr = (P_Port_Def*)PD_PCR;
+        px_afsr = (P_Port_Def*)PD_AFSR;
+        loop = 5;
+    }
+
+    for(i=0; i<loop; i++)
+    {
+        px_pcr->Port[i] = 0x60;
+        px_afsr->Port[i] = PAD_AF0;
+
+    }
+}
+
+void HAL_GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
+{
+    uint32_t pinpos = 0x00, pos = 0x00, currentpin = 0x00, loop = 16;
+    P_Port_Def *px_pcr;
+
+    assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
+    assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));
+//    assert_param(IS_GPIO_PUPD(GPIO_InitStruct->GPIO_PuPd));
+
+    if      (GPIOx == GPIOA)        px_pcr  = PA_PCR;
+    else if (GPIOx == GPIOB)        px_pcr  = PB_PCR;
+    else if (GPIOx == GPIOC)        px_pcr  = PC_PCR;
+    else
+    {
+        px_pcr  = (P_Port_Def*)PD_PCR;
+        loop = 5;
+    }
+
+    for(pinpos = 0x00; pinpos < loop; pinpos++)
+    {
+        pos = ((uint32_t)0x01) << pinpos;
+
+        currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
+
+        if(currentpin == pos)
+        {
+            if(GPIO_InitStruct->GPIO_Mode == GPIO_Mode_OUT)
+            {
+                GPIOx->OUTENSET |= pos;
+            }
+            else        // GPIO_Mode_In
+            {
+                GPIOx->OUTENCLR = pos;
+            }
+
+            // Configure pull-up pull-down bits 
+            if(GPIO_InitStruct->GPIO_Pad & Px_PCR_PUPD_UP)
+            {
+                px_pcr->Port[pinpos] &= ~(Px_PCR_PUPD_UP | Px_PCR_PUPD_DOWN);
+                px_pcr->Port[pinpos] |= Px_PCR_PUPD_UP;
+            }
+            else
+            {
+                px_pcr->Port[pinpos] &= ~(Px_PCR_PUPD_UP | Px_PCR_PUPD_DOWN);
+                px_pcr->Port[pinpos] |= Px_PCR_PUPD_DOWN;
+            }
+
+            // Configure Driving stregnth selections bit 
+            if(GPIO_InitStruct->GPIO_Pad & Px_PCR_DS_HIGH)
+            {
+                px_pcr->Port[pinpos] |= Px_PCR_DS_HIGH;
+            }
+            else
+            {
+                px_pcr->Port[pinpos] &= ~(Px_PCR_DS_HIGH);
+            }
+
+            // Configure Open Drain selections bit
+            if(GPIO_InitStruct->GPIO_Pad & Px_PCR_OD)
+            {
+                px_pcr->Port[pinpos] |= Px_PCR_OD;
+            }
+           else
+            {
+                px_pcr->Port[pinpos] &= ~(Px_PCR_OD);
+            }
+
+            // Configure Input buffer enable selection bit 
+            if(GPIO_InitStruct->GPIO_Pad & Px_PCR_IE)
+            {
+                px_pcr->Port[pinpos] |= Px_PCR_IE;
+            }
+            else
+            {
+                px_pcr->Port[pinpos] &= ~(Px_PCR_IE);
+            }
+
+            // Configure input type (CMOS input or Summit trigger input) select bit 
+            if(GPIO_InitStruct->GPIO_Pad & Px_PCR_CS_SUMMIT)
+            {
+                px_pcr->Port[pinpos] |= Px_PCR_CS_SUMMIT;
+            }
+            else
+            {
+                px_pcr->Port[pinpos] &= ~(Px_PCR_CS_SUMMIT);
+            }
+        }
+    }
+}
+
+void HAL_GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)
+{
+    GPIO_InitStruct->GPIO_Pin  = GPIO_Pin_All;
+    GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN;
+    GPIO_InitStruct->GPIO_Pad = (GPIOPad_TypeDef)(GPIO_PuPd_UP);
+}
+
+
+uint8_t HAL_GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
+{
+    uint8_t bitstatus = 0x00;
+
+    assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
+    assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
+
+    if((GPIOx->DATA & GPIO_Pin) != (uint32_t)Bit_RESET)
+    {
+        bitstatus = (uint8_t)Bit_SET;
+    }
+    else
+    {
+        bitstatus = (uint8_t)Bit_RESET;
+    }
+
+    return bitstatus;
+}
+
+uint16_t HAL_GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
+{
+    assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
+    return ((uint16_t)GPIOx->DATA);
+}
+
+uint8_t HAL_GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
+{
+    uint8_t bitstatus = 0x00;
+
+
+
+    assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
+    assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
+
+    if((GPIOx->DATAOUT & GPIO_Pin) != (uint32_t)Bit_RESET)
+    {
+        bitstatus = (uint8_t)Bit_SET;
+    }
+    else
+    {
+        bitstatus = (uint8_t)Bit_RESET;
+    }
+
+    return bitstatus;
+}
+uint16_t HAL_GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
+{
+    /* Check the parameters */
+    assert_param(IS_GPIO_ALLPERIPH(GPIOx));
+    return ((uint16_t)GPIOx->DATAOUT);
+}
+
+void HAL_GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
+{
+    /* Check the parameters */
+    assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
+    assert_param(IS_GPIO_PIN(GPIO_Pin)); 
+
+    (GPIOx->LB_MASKED[(uint8_t)(GPIO_Pin)]) = GPIO_Pin;
+    (GPIOx->UB_MASKED[(uint8_t)((GPIO_Pin)>>8)]) = GPIO_Pin;
+}
+
+void HAL_GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
+{
+    /* Check the parameters */
+    assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
+    assert_param(IS_GPIO_PIN(GPIO_Pin));
+
+    (GPIOx->LB_MASKED[(uint8_t)(GPIO_Pin)]) = ~(GPIO_Pin);
+    (GPIOx->UB_MASKED[(uint8_t)(GPIO_Pin>>8)]) = ~(GPIO_Pin);
+}
+
+void HAL_GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
+{
+    /* Check the parameters */
+    assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
+    assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
+    assert_param(IS_GPIO_BIT_ACTION(BitVal)); 
+
+    (GPIOx->LB_MASKED[(uint8_t)(GPIO_Pin)]) = BitVal;
+    (GPIOx->UB_MASKED[(uint8_t)((GPIO_Pin)>>8)]) = BitVal;
+}
+
+void HAL_GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
+{
+    /* Check the parameters */
+    assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
+
+    GPIOx->DATAOUT = PortVal;
+}
+
+void HAL_PAD_AFConfig(PAD_Type Px, uint16_t GPIO_Pin, PAD_AF_TypeDef P_AF)
+{
+    int i;
+    uint16_t idx =0x1;
+    assert_param(IS_PAD_Type(Px));
+
+    for(i=0;i<16;i++)
+    {
+        if(GPIO_Pin & (idx<<i))
+        {
+            if(Px == PAD_PA)
+            {
+                assert_param(IS_PA_NUM(i));
+                PA_AFSR->Port[i] &= ~(0x03ul);
+                PA_AFSR->Port[i] |= P_AF;
+            }
+            else if(Px == PAD_PB)
+            {
+                assert_param(IS_PB_NUM(i));
+                PB_AFSR->Port[i] &= ~(0x03ul);
+                PB_AFSR->Port[i] |= P_AF;
+            }
+            else if(Px == PAD_PC)
+            {
+                assert_param(IS_PC_NUM(i));
+                PC_AFSR->Port[i] &= ~(0x03ul);
+                PC_AFSR->Port[i] |= P_AF;
+            }
+            else
+            {
+                assert_param(IS_PD_NUM(i));
+                PD_AFSR->Port[i] &= ~(0x03ul);
+                PD_AFSR->Port[i] |= P_AF;
+            }				
+        }
+    }
+}
+
+void GPIO_OutEnClr(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
+{
+    GPIOx->OUTENCLR = GPIO_Pin;
+}
+
+void GPIO_OutEnSet(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
+{
+    GPIOx->OUTENSET = GPIO_Pin;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_gpio.h	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,122 @@
+/**
+  ******************************************************************************
+  * @file    
+  * @author  
+  * @version 
+  * @date    
+  * @brief   This file contains all the functions prototypes for the GPIO
+  *          firmware library.
+  ******************************************************************************
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __W7500X_HAL_GPIO_H
+#define __W7500X_HAL_GPIO_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "W7500x.h"
+
+#define GPIO_Pin_0      (uint16_t)(0x01 <<  0)     // Pin  0 Selected
+#define GPIO_Pin_1      (uint16_t)(0x01 <<  1)     // Pin  1 Selected
+#define GPIO_Pin_2      (uint16_t)(0x01 <<  2)     // Pin  2 Selected
+#define GPIO_Pin_3      (uint16_t)(0x01 <<  3)     // Pin  3 Selected
+#define GPIO_Pin_4      (uint16_t)(0x01 <<  4)     // Pin  4 Selected
+#define GPIO_Pin_5      (uint16_t)(0x01 <<  5)     // Pin  5 Selected
+#define GPIO_Pin_6      (uint16_t)(0x01 <<  6)     // Pin  6 Selected
+#define GPIO_Pin_7      (uint16_t)(0x01 <<  7)     // Pin  7 Selected
+#define GPIO_Pin_8      (uint16_t)(0x01 <<  8)     // Pin  8 Selected
+#define GPIO_Pin_9      (uint16_t)(0x01 <<  9)     // Pin  9 Selected
+#define GPIO_Pin_10     (uint16_t)(0x01 << 10)     // Pin 10 Selected
+#define GPIO_Pin_11     (uint16_t)(0x01 << 11)     // Pin 11 Selected
+#define GPIO_Pin_12     (uint16_t)(0x01 << 12)     // Pin 12 Selected
+#define GPIO_Pin_13     (uint16_t)(0x01 << 13)     // Pin 13 Selected
+#define GPIO_Pin_14     (uint16_t)(0x01 << 14)     // Pin 14 Selected
+#define GPIO_Pin_15     (uint16_t)(0x01 << 15)     // Pin 15 Selected
+#define GPIO_Pin_All    (uint16_t)(0xFFFF)         // All pins Selected
+
+
+#define IS_GPIO_PIN(PIN)        ((PIN) != (uint16_t)0x00)
+#define IS_GET_GPIO_PIN(PIN)    (((PIN) == GPIO_Pin_0)  || ((PIN) == GPIO_Pin_1)  || \
+                                (((PIN) == GPIO_Pin_2)  || ((PIN) == GPIO_Pin_3)  || \
+                                (((PIN) == GPIO_Pin_4)  || ((PIN) == GPIO_Pin_5)  || \
+                                (((PIN) == GPIO_Pin_6)  || ((PIN) == GPIO_Pin_7)  || \
+                                (((PIN) == GPIO_Pin_8)  || ((PIN) == GPIO_Pin_9)  || \
+                                (((PIN) == GPIO_Pin_10) || ((PIN) == GPIO_Pin_11) || \
+                                (((PIN) == GPIO_Pin_12) || ((PIN) == GPIO_Pin_13) || \
+                                (((PIN) == GPIO_Pin_14) || ((PIN) == GPIO_Pin_15) )
+
+
+#define IS_GPIO_ALL_PERIPH(PERIPH)  (((PERIPH) == GPIOA) || ((PERIPH) == GPIOB) || \
+                                     ((PERIPH) == GPIOC) || ((PERIPH) == GPIOD) )
+
+typedef enum
+{
+    GPIO_Mode_IN    = 0x00, /*!< GPIO Input Mode                 */
+    GPIO_Mode_OUT   = 0x01, /*!< GPIO Output Mode                */
+    GPIO_Mode_AF    = 0x02 /*!< GPIO Alternate function Mode    */
+}GPIOMode_TypeDef;
+
+typedef enum
+{
+    GPIO_NO_PUPD = 0x0ul,
+    GPIO_PuPd_UP = Px_PCR_PUPD_UP,
+    GPIO_PuPd_DOWN = Px_PCR_PUPD_DOWN,
+    GPIO_PuPd_Default = 0x0ul,
+}GPIOPad_TypeDef;
+
+typedef struct
+{
+    uint32_t GPIO_Pin;
+    GPIOMode_TypeDef GPIO_Mode;
+    GPIOPad_TypeDef GPIO_Pad;
+}GPIO_InitTypeDef;
+
+typedef enum
+{
+    Bit_RESET = 0,
+    Bit_SET
+}BitAction;
+
+
+#define IS_PAD_TYPE(Px)  (((Px) == PAD_PA) || ((Px) == PAD_PB) \
+                          ((Px) == PAD_PC) || ((Px) == PAD_PD))
+
+#define IS_PA_NUM(NUM) (((NUM)>=0) && ((NUM)<16))
+#define IS_PB_NUM(NUM) (((NUM)>=0) && ((NUM)<16))
+#define IS_PC_NUM(NUM) (((NUM)>=0) && ((NUM)<16))
+#define IS_PD_NUM(NUM) (((NUM)>=0) && ((NUM)< 5))
+
+#define IS_PAD_AF(AF)       (((AF) == PAD_AF0) || ((AF) == PAD_AF1) || \
+                             ((AF) == PAD_AF2) || ((AF) == PAD_AF3))
+
+
+#define IS_GPIO_BIT_ACTION(ACTION)  (((ACTION_ == Bit_RESET) || (ACTION) ==Bit_SET))
+
+void HAL_GPIO_DeInit(GPIO_TypeDef* GPIOx);
+void HAL_GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
+void HAL_GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
+uint8_t HAL_GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
+uint16_t HAL_GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
+uint8_t HAL_GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
+uint16_t HAL_GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
+void HAL_GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
+void HAL_GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
+void HAL_GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
+void HAL_GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
+void HAL_PAD_AFConfig(PAD_Type Px, uint16_t Pnum, PAD_AF_TypeDef P_AF);
+
+void GPIO_OutEnClr(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
+void GPIO_OutEnSet(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __W7500X_HAL_GPIO_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_i2c.c	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,288 @@
+/* mbed Microcontroller Library 
+ *******************************************************************************
+ * Copyright (c) 2015 WIZnet Co.,Ltd. All rights reserved.
+ * 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 ARM Limited 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.
+ *******************************************************************************
+ */
+/*include -------------------------------------*/
+#include "W7500x.h"
+#include "W7500x_i2c.h"
+#include "W7500x_gpio.h"
+
+GPIO_InitTypeDef GPIO_InitDef;
+
+uint32_t I2C_Init(I2C_ConfigStruct* conf)
+{
+    uint32_t scl_port_num;
+    uint32_t scl_pin_index;
+    uint32_t sda_port_num;
+    uint32_t sda_pin_index;
+    
+    scl_port_num = I2C_PORT(conf->scl);
+    scl_pin_index = I2C_PIN_INDEX(conf->scl);
+    
+    sda_port_num = I2C_PORT(conf->sda);
+    sda_pin_index = I2C_PIN_INDEX(conf->sda);
+    
+    //SCL setting
+    GPIO_InitDef.GPIO_Pin = scl_pin_index;
+    GPIO_InitDef.GPIO_Mode = GPIO_Mode_OUT;
+
+    HAL_GPIO_Init((GPIO_TypeDef*)(GPIOA_BASE + (scl_port_num << 24)), &GPIO_InitDef);
+    HAL_GPIO_SetBits((GPIO_TypeDef*)(GPIOA_BASE + (scl_port_num << 24)), scl_pin_index);
+    
+    //SDA setting
+    GPIO_InitDef.GPIO_Pin = sda_pin_index;
+    GPIO_InitDef.GPIO_Mode = GPIO_Mode_IN;
+    
+    HAL_GPIO_Init((GPIO_TypeDef*)(GPIOA_BASE + (sda_port_num << 24)), &GPIO_InitDef);
+    HAL_GPIO_ResetBits((GPIO_TypeDef*)(GPIOA_BASE + (sda_port_num << 24)), sda_pin_index);
+    
+    //Pin muxing
+    HAL_PAD_AFConfig((PAD_Type)scl_port_num, (uint16_t)scl_pin_index, PAD_AF1);
+    HAL_PAD_AFConfig((PAD_Type)sda_port_num, (uint16_t)sda_pin_index, PAD_AF1);
+
+    return 0;
+}
+
+void I2C_WriteBitSCL(I2C_ConfigStruct* conf, uint8_t data)
+{
+    uint32_t scl_port_num = I2C_PORT(conf->scl);
+    uint32_t scl_pin_index = I2C_PIN_INDEX(conf->scl);
+
+    if(data == 1)
+        HAL_GPIO_SetBits((GPIO_TypeDef*)(GPIOA_BASE + (scl_port_num << 24)), scl_pin_index);
+    else
+        HAL_GPIO_ResetBits((GPIO_TypeDef*)(GPIOA_BASE + (scl_port_num << 24)), scl_pin_index);
+    
+}
+
+void I2C_WriteBitSDA(I2C_ConfigStruct* conf, uint8_t data)
+{
+    uint32_t sda_port_num = I2C_PORT(conf->sda);
+    uint32_t sda_pin_index = I2C_PIN_INDEX(conf->sda);
+
+    if(data == 1)
+        GPIO_OutEnClr((GPIO_TypeDef*)(GPIOA_BASE + (sda_port_num << 24)), sda_pin_index);
+    else
+        GPIO_OutEnSet((GPIO_TypeDef*)(GPIOA_BASE + (sda_port_num << 24)), sda_pin_index);
+    
+}
+
+uint8_t I2C_ReadBitSDA(I2C_ConfigStruct* conf)
+{
+    uint32_t sda_port_num = I2C_PORT(conf->sda);
+    uint32_t sda_pin_index = I2C_PIN_INDEX(conf->sda);
+    
+    if(HAL_GPIO_ReadInputDataBit((GPIO_TypeDef*)(GPIOA_BASE + (sda_port_num << 24)), sda_pin_index))
+        return 1;
+    
+    return 0;
+}
+
+void I2C_Start(I2C_ConfigStruct* conf)
+{
+    I2C_WriteBitSCL(conf, 1);
+    I2C_WriteBitSDA(conf, 1);
+    
+    I2C_WriteBitSDA(conf, 0);
+    I2C_WriteBitSCL(conf, 0);
+}
+
+void I2C_Stop(I2C_ConfigStruct* conf)
+{
+    I2C_WriteBitSCL(conf, 0);
+    I2C_WriteBitSDA(conf, 0);
+    
+    I2C_WriteBitSCL(conf, 1);
+    I2C_WriteBitSDA(conf, 1);
+}
+
+uint8_t I2C_WriteByte(I2C_ConfigStruct* conf, uint8_t data)
+{
+    int i;
+    uint8_t ret;
+    
+    //Write byte
+    for(i=0; i<8; i++)
+    {
+        if((data << i) & 0x80)
+            I2C_WriteBitSDA(conf, 1);
+        else
+            I2C_WriteBitSDA(conf, 0);
+        
+        I2C_WriteBitSCL(conf, 1);
+        I2C_WriteBitSCL(conf, 0);
+    }
+    //Make clk for receiving ack
+    I2C_WriteBitSDA(conf, 1);
+    I2C_WriteBitSCL(conf, 1);
+    //Read Ack/Nack
+    ret = I2C_ReadBitSDA(conf);
+    
+    I2C_WriteBitSCL(conf, 0);
+    
+    return ret;
+}
+
+void I2C_SendACK(I2C_ConfigStruct* conf)
+{
+    I2C_WriteBitSDA(conf, 0);
+    I2C_WriteBitSCL(conf, 1);
+    
+    I2C_WriteBitSCL(conf, 0);
+}
+    
+void I2C_SendNACK(I2C_ConfigStruct* conf)
+{
+    I2C_WriteBitSDA(conf, 1);
+    I2C_WriteBitSCL(conf, 1);
+    
+    I2C_WriteBitSCL(conf, 0);
+}
+
+uint8_t I2C_ReadByte(I2C_ConfigStruct* conf)
+{
+    int i;
+    uint8_t ret = 0;
+    
+    I2C_WriteBitSDA(conf, 1); //out enable clear(GPIO is input)
+    
+    //Read byte
+    for(i=0; i<8; i++)
+    {
+        I2C_WriteBitSCL(conf, 1);
+        ret = (ret << 1) | (I2C_ReadBitSDA(conf));
+        I2C_WriteBitSCL(conf, 0);
+    }
+        
+    return ret;
+}
+
+int I2C_Write(I2C_ConfigStruct* conf, uint8_t addr, uint8_t* data, uint32_t len)
+{
+    int i;
+    
+    I2C_Start(conf);
+    
+    //Write addr
+    if(I2C_WriteByte(conf, addr) != 0)
+    {
+        //printf("Received NACK at address phase!!\r\n");
+        return -1;
+    }
+
+    //Write data
+    for(i=0; i<len; i++)
+    {
+        if(I2C_WriteByte(conf, data[i]))
+            return -1;
+    }
+    
+    I2C_Stop(conf);
+    
+    return 0;//success
+}
+
+int I2C_WriteRepeated(I2C_ConfigStruct* conf, uint8_t addr, uint8_t* data, uint32_t len)
+{
+    int i;
+    
+    I2C_Start(conf);
+    
+    //Write addr
+    if(I2C_WriteByte(conf, addr) != 0)
+    {
+        //printf("Received NACK at address phase!!\r\n");
+        return -1;
+    }
+
+    //Write data
+    for(i=0; i<len; i++)
+    {
+        if(I2C_WriteByte(conf, data[i]))
+            return -1;
+    }
+    
+    return 0;//success
+}
+
+int I2C_Read(I2C_ConfigStruct* conf, uint8_t addr, uint8_t* data, uint32_t len)
+{
+    int i;
+    
+    I2C_Start(conf);
+    
+    //Write addr | read command
+    if(I2C_WriteByte(conf, (addr | 1)) != 0)
+    {
+        //printf("Received NACK at address phase!!\r\n");
+        return -1;
+    }
+    
+    //Read data
+    for(i=0; i<len; i++)
+    {
+        data[i] = I2C_ReadByte(conf);
+        
+        if( i == (len - 1) )
+            I2C_SendNACK(conf);
+        else
+            I2C_SendACK(conf);
+    }
+    
+    I2C_Stop(conf);
+    
+    return 0;//success
+}
+
+int I2C_ReadRepeated(I2C_ConfigStruct* conf, uint8_t addr, uint8_t* data, uint32_t len)
+{
+    int i;
+    
+    I2C_Start(conf);
+    
+    //Write addr | read command
+    if(I2C_WriteByte(conf, (addr | 1)) != 0)
+    {
+        //printf("Received NACK at address phase!!\r\n");
+        return -1;
+    }
+    
+    //Read data
+    for(i=0; i<len; i++)
+    {
+        data[i] = I2C_ReadByte(conf);
+        
+        if( i == (len - 1) )
+            I2C_SendNACK(conf);
+        else
+            I2C_SendACK(conf);
+    }
+    
+    return 0;//success
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_i2c.h	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,81 @@
+/* mbed Microcontroller Library 
+ *******************************************************************************
+ * Copyright (c) 2015 WIZnet Co.,Ltd. All rights reserved.
+ * 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 ARM Limited 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.
+ *******************************************************************************
+ */
+/*include -------------------------------------*/
+#ifndef __W7500X_I2C_H
+#define __W7500X_I2C_H
+
+#include "W7500x.h"
+
+
+typedef enum {
+    I2C_PA_5    = 0x05,
+    I2C_PA_6    = 0x06,
+    I2C_PA_9    = 0x09,
+    I2C_PA_10   = 0x0A,
+    I2C_PC_4    = 0x24,
+    I2C_PC_5    = 0x25,
+    I2C_PC_8    = 0x28,
+    // Not connected
+    I2C_NC = (int)0xFFFFFFFF
+} I2C_PinName;
+
+typedef struct
+{
+    I2C_PinName scl;
+    I2C_PinName sda;
+}I2C_ConfigStruct;
+
+
+#define I2C_PORT(X) (((uint32_t)(X) >> 4) & 0xF)    // port number (0=A, 1=B, 2=C, 3=D)
+#define I2C_PIN_INDEX(X)  (1 << ((uint32_t)(X) & 0xF))    // pin index : flag bit 
+ 
+uint32_t I2C_Init(I2C_ConfigStruct* conf);
+
+void I2C_WriteBitSDA(I2C_ConfigStruct* conf, uint8_t data);
+void I2C_WriteBitSCL(I2C_ConfigStruct* conf, uint8_t data);
+uint8_t I2C_ReadBitSDA(I2C_ConfigStruct* conf);
+
+void I2C_SendACK(I2C_ConfigStruct* conf);
+void I2C_SendNACK(I2C_ConfigStruct* conf);
+
+uint8_t I2C_WriteByte(I2C_ConfigStruct* conf, uint8_t data);
+uint8_t I2C_ReadByte(I2C_ConfigStruct* conf);
+
+void I2C_Start(I2C_ConfigStruct* conf);
+void I2C_Stop(I2C_ConfigStruct* conf);
+
+int I2C_Write(I2C_ConfigStruct* conf, uint8_t addr, uint8_t* data, uint32_t len);
+int I2C_WriteRepeated(I2C_ConfigStruct* conf, uint8_t addr, uint8_t* data, uint32_t len);
+int I2C_Read(I2C_ConfigStruct* conf, uint8_t addr, uint8_t* data, uint32_t len);
+int I2C_ReadRepeated(I2C_ConfigStruct* conf, uint8_t addr, uint8_t* data, uint32_t len);
+
+
+ #endif //__W7500X_I2C_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_pwm.c	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,906 @@
+/**
+  ******************************************************************************
+  * @file    
+  * @author  
+  * @version 
+  * @date    
+  * @brief   This file contains all the functions prototypes for the UART 
+  *          firmware library.
+  ******************************************************************************
+  *
+  ******************************************************************************
+  */
+  
+/* Includes -------------------------------------------*/
+#include "W7500x.h"
+#include "W7500x_pwm.h"
+
+void PWM_DeInit(PWM_CHn_TypeDef* PWM_CHn)
+{
+    if( PWM_CHn == PWM_CH0 )
+    {
+        PWM->IER        &= PWM_IER_IE0_Disable;  ///< Interrupt enable register 
+        PWM->SSR        &= PWM_SSR_SS0_Stop;     ///< Start Stop register 
+        PWM->PSR        &= PWM_PSR_PS0_Restart;  ///< Pause register 
+        PWM_CH0->IER    = 0;                    ///< Interrupt enable register 
+        PWM_CH0->ICR    =  PWM_CHn_ICR_MatchInterruptClear      | 
+                           PWM_CHn_ICR_OverflowInterruptClear   | 
+                           PWM_CHn_ICR_CaptureInterruptClear;   ///< Interrupt clear register
+        PWM_CH0->PR     = 0;                    ///< Prescale register 
+        PWM_CH0->MR     = 0;                    ///< Match register 
+        PWM_CH0->LR     = 0xFFFFFFFF;           ///< Limit register 
+        PWM_CH0->UDMR   = 0;                    ///< Up Dowm mode register
+        PWM_CH0->TCMR   = 0;                    ///< Timer Counter mode register
+        PWM_CH0->PEEER  = 0;                    ///< PWM output Enable and External input Enable register
+        PWM_CH0->CMR    = 0;                    ///< Capture mode register
+        PWM_CH0->PDMR   = 0;                    ///< Periodic Mode register
+        PWM_CH0->DZER   = 0;                    ///< Dead Zone Enable register
+        PWM_CH0->DZCR   = 0;                    ///< Dead Zone Counter register
+    }
+    else if( PWM_CHn == PWM_CH1 )
+    {
+        PWM->IER        &= PWM_IER_IE1_Disable;  ///< Reset Interrupt enable register 
+        PWM->SSR        &= PWM_SSR_SS1_Stop;     ///< Reset Start Stop register 
+        PWM->PSR        &= PWM_PSR_PS1_Restart;  ///< Reset Pause register 
+        PWM_CH1->IER    = 0;                    ///< Interrupt enable register 
+        PWM_CH1->ICR    =  PWM_CHn_ICR_MatchInterruptClear      | 
+                           PWM_CHn_ICR_OverflowInterruptClear   | 
+                           PWM_CHn_ICR_CaptureInterruptClear;   ///< Interrupt clear register
+        PWM_CH1->PR     = 0;                    ///< Prescale register 
+        PWM_CH1->MR     = 0;                    ///< Match register 
+        PWM_CH1->LR     = 0xFFFFFFFF;           ///< Limit register 
+        PWM_CH1->UDMR   = 0;                    ///< Up Dowm mode register
+        PWM_CH1->TCMR   = 0;                    ///< Timer Counter mode register
+        PWM_CH1->PEEER  = 0;                    ///< PWM output Enable and External input Enable register
+        PWM_CH1->CMR    = 0;                    ///< Capture mode register
+        PWM_CH1->PDMR   = 0;                    ///< Periodic Mode register
+        PWM_CH1->DZER   = 0;                    ///< Dead Zone Enable register
+        PWM_CH1->DZCR   = 0;                    ///< Dead Zone Counter register
+    }
+    else if( PWM_CHn == PWM_CH2)
+    {
+        PWM->IER        &= PWM_IER_IE2_Disable;  ///< Interrupt enable register 
+        PWM->SSR        &= PWM_SSR_SS2_Stop;     ///< Start Stop register 
+        PWM->PSR        &= PWM_PSR_PS2_Restart;  ///< Pause register 
+        PWM_CH2->IER    = 0;                    ///< Interrupt enable register 
+        PWM_CH2->ICR    =  PWM_CHn_ICR_MatchInterruptClear      | 
+                           PWM_CHn_ICR_OverflowInterruptClear   | 
+                           PWM_CHn_ICR_CaptureInterruptClear;   ///< Interrupt clear register
+        PWM_CH2->PR     = 0;                    ///< Prescale register 
+        PWM_CH2->MR     = 0;                    ///< Match register 
+        PWM_CH2->LR     = 0xFFFFFFFF;           ///< Limit register 
+        PWM_CH2->UDMR   = 0;                    ///< Up Dowm mode register
+        PWM_CH2->TCMR   = 0;                    ///< Timer Counter mode register
+        PWM_CH2->PEEER  = 0;                    ///< PWM output Enable and External input Enable register
+        PWM_CH2->CMR    = 0;                    ///< Capture mode register
+        PWM_CH2->PDMR   = 0;                    ///< Periodic Mode register
+        PWM_CH2->DZER   = 0;                    ///< Dead Zone Enable register
+        PWM_CH2->DZCR   = 0;                    ///< Dead Zone Counter register
+    }
+    else if( PWM_CHn == PWM_CH3 )
+    {
+        PWM->IER        &= PWM_IER_IE3_Disable;  ///< Interrupt enable register 
+        PWM->SSR        &= PWM_SSR_SS3_Stop;     ///< Start Stop register 
+        PWM->PSR        &= PWM_PSR_PS3_Restart;  ///< Pause register 
+        PWM_CH3->IER    = 0;                    ///< Interrupt enable register 
+        PWM_CH3->ICR    =  PWM_CHn_ICR_MatchInterruptClear      | 
+                           PWM_CHn_ICR_OverflowInterruptClear   | 
+                           PWM_CHn_ICR_CaptureInterruptClear;   ///< Interrupt clear register
+        PWM_CH3->MR     = 0;                    ///< Match register 
+        PWM_CH3->LR     = 0xFFFFFFFF;           ///< Limit register 
+        PWM_CH3->UDMR   = 0;                    ///< Up Dowm mode register
+        PWM_CH3->TCMR   = 0;                    ///< Timer Counter mode register
+        PWM_CH3->PEEER  = 0;                    ///< PWM output Enable and External input Enable register
+        PWM_CH3->CMR    = 0;                    ///< Capture mode register
+        PWM_CH3->PDMR   = 0;                    ///< Periodic Mode register
+        PWM_CH3->DZER   = 0;                    ///< Dead Zone Enable register
+        PWM_CH3->DZCR   = 0;                    ///< Dead Zone Counter register
+    }
+    else if( PWM_CHn == PWM_CH4 )
+    {
+        PWM->SSR        &= PWM_IER_IE4_Disable;  ///< Start Stop register 
+        PWM->PSR        &= PWM_SSR_SS4_Stop;     ///< Pause register 
+        PWM->IER        &= PWM_PSR_PS4_Restart;  ///< Interrupt enable register 
+        PWM_CH4->IER    = 0;                    ///< Interrupt enable register 
+        PWM_CH4->ICR    =  PWM_CHn_ICR_MatchInterruptClear      | 
+                           PWM_CHn_ICR_OverflowInterruptClear   | 
+                           PWM_CHn_ICR_CaptureInterruptClear;   ///< Interrupt clear register
+        PWM_CH4->PR     = 0;                    ///< Prescale register 
+        PWM_CH4->MR     = 0;                    ///< Match register 
+        PWM_CH4->LR     = 0xFFFF;               ///< Limit register 
+        PWM_CH4->UDMR   = 0;                    ///< Up Dowm mode register
+        PWM_CH4->TCMR   = 0;                    ///< Timer Counter mode register
+        PWM_CH4->PEEER  = 0;                    ///< PWM output Enable and External input Enable register
+        PWM_CH4->CMR    = 0;                    ///< Capture mode register
+        PWM_CH4->PDMR   = 0;                    ///< Periodic Mode register
+        PWM_CH4->DZER   = 0;                    ///< Dead Zone Enable register
+        PWM_CH4->DZCR   = 0;                    ///< Dead Zone Counter register
+    }
+    else if( PWM_CHn == PWM_CH5 )
+    {
+        PWM->SSR        &= PWM_IER_IE5_Disable;  ///< Start Stop register 
+        PWM->PSR        &= PWM_SSR_SS5_Stop;     ///< Pause register 
+        PWM->IER        &= PWM_PSR_PS5_Restart;  ///< Interrupt enable register 
+        PWM_CH5->IER    = 0;                    ///< Interrupt enable register 
+        PWM_CH5->ICR    =  PWM_CHn_ICR_MatchInterruptClear      |
+                           PWM_CHn_ICR_OverflowInterruptClear   | 
+                           PWM_CHn_ICR_CaptureInterruptClear;   ///< Interrupt clear register
+        PWM_CH5->PR     = 0;                    ///< Prescale register 
+        PWM_CH5->MR     = 0;                    ///< Match register 
+        PWM_CH5->LR     = 0xFFFFFFFF;           ///< Limit register 
+        PWM_CH5->UDMR   = 0;                    ///< Up Dowm mode register
+        PWM_CH5->TCMR   = 0;                    ///< Timer Counter mode register
+        PWM_CH5->PEEER  = 0;                    ///< PWM output Enable and External input Enable register
+        PWM_CH5->CMR    = 0;                    ///< Capture mode register
+        PWM_CH5->PDMR   = 0;                    ///< Periodic Mode register
+        PWM_CH5->DZER   = 0;                    ///< Dead Zone Enable register
+        PWM_CH5->DZCR   = 0;                    ///< Dead Zone Counter register
+    }
+    else if( PWM_CHn == PWM_CH6 )
+    {
+        PWM->SSR        &= PWM_IER_IE6_Disable;  ///< Start Stop register 
+        PWM->PSR        &= PWM_SSR_SS6_Stop;     ///< Pause register 
+        PWM->IER        &= PWM_PSR_PS6_Restart;  ///< Interrupt enable register 
+        PWM_CH6->IER    = 0;                    ///< Interrupt enable register 
+        PWM_CH6->ICR    =  PWM_CHn_ICR_MatchInterruptClear      | 
+                           PWM_CHn_ICR_OverflowInterruptClear   | 
+                           PWM_CHn_ICR_CaptureInterruptClear;   ///< Interrupt clear register
+        PWM_CH6->PR     = 0;                    ///< Prescale register 
+        PWM_CH6->MR     = 0;                    ///< Match register 
+        PWM_CH6->LR     = 0xFFFFFFFF;           ///< Limit register 
+        PWM_CH6->UDMR   = 0;                    ///< Up Dowm mode register
+        PWM_CH6->TCMR   = 0;                    ///< Timer Counter mode register
+        PWM_CH6->PEEER  = 0;                    ///< PWM output Enable and External input Enable register
+        PWM_CH6->CMR    = 0;                    ///< Capture mode register
+        PWM_CH6->PDMR   = 0;                    ///< Periodic Mode register
+        PWM_CH6->DZER   = 0;                    ///< Dead Zone Enable register
+        PWM_CH6->DZCR   = 0;                    ///< Dead Zone Counter register
+    }
+    else if( PWM_CHn == PWM_CH7 )
+    {
+        PWM->SSR        &= PWM_IER_IE7_Disable;  ///< Start Stop register 
+        PWM->PSR        &= PWM_SSR_SS7_Stop;     ///< Pause register 
+        PWM->IER        &= PWM_PSR_PS7_Restart;  ///< Interrupt enable register 
+        PWM_CH7->IER    = 0;                    ///< Interrupt enable register 
+        PWM_CH7->ICR    = PWM_CHn_ICR_MatchInterruptClear      | 
+                          PWM_CHn_ICR_OverflowInterruptClear   | 
+                          PWM_CHn_ICR_CaptureInterruptClear;   ///< Interrupt clear register
+        PWM_CH7->PR     = 0;                    ///< Prescale register 
+        PWM_CH7->MR     = 0;                    ///< Match register 
+        PWM_CH7->LR     = 0xFFFFFFFF;           ///< Limit register 
+        PWM_CH7->UDMR   = 0;                    ///< Up Dowm mode register
+        PWM_CH7->TCMR   = 0;                    ///< Timer Counter mode register
+        PWM_CH7->PEEER  = 0;                    ///< PWM output Enable and External input Enable register
+        PWM_CH7->CMR    = 0;                    ///< Capture mode register
+        PWM_CH7->PDMR   = 0;                    ///< Periodic Mode register
+        PWM_CH7->DZER   = 0;                    ///< Dead Zone Enable register
+        PWM_CH7->DZCR   = 0;                    ///< Dead Zone Counter register
+    }
+}
+
+
+void PWM_TimerModeInit(PWM_CHn_TypeDef* PWM_CHn, PWM_TimerModeInitTypeDef* PWM_TimerModeInitStruct) //complet
+{
+    /* Stop PWM_CHn */
+    PWM_CHn_Stop(PWM_CHn);
+    /* Select Timer/Counter mode as Timer mode */ 
+    PWM_CHn->TCMR = PWM_CHn_TCMR_TimerMode;
+    /* Set Prescale register value */
+    PWM_CHn->PR = PWM_TimerModeInitStruct->PWM_CHn_PR;
+    /* Set Match register value */
+    PWM_CHn->MR = PWM_TimerModeInitStruct->PWM_CHn_MR;
+    /* Set Limit register value */
+    PWM_CHn->LR = PWM_TimerModeInitStruct->PWM_CHn_LR;
+    /* Select Up-down mode */
+    PWM_CHn->UDMR = PWM_TimerModeInitStruct->PWM_CHn_UDMR;
+    /* Select Periodic mode */ 
+    PWM_CHn->PDMR = PWM_TimerModeInitStruct->PWM_CHn_PDMR;
+}
+
+void PWM_CaptureModeInit(PWM_CHn_TypeDef* PWM_CHn, PWM_CaptureModeInitTypeDef* PWM_CaptureModeInitStruct) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+    assert_param(IS_PWM_PR_FILTER(PWM_CaptureModeInitStruct->PWM_CHn_PR));
+    assert_param(IS_PWM_MR_FILTER(PWM_CHn, PWM_CaptureModeInitStruct->PWM_CHn_MR));
+    assert_param(IS_PWM_LR_FILTER(PWM_CHn, PWM_CaptureModeInitStruct->PWM_CHn_LR));
+    assert_param(IS_PWM_CHn_UDMR(PWM_CaptureModeInitStruct->PWM_CHn_UDMR));
+    assert_param(IS_PWM_CHn_PDMR(PWM_CaptureModeInitStruct->PWM_CHn_PDMR));
+    assert_param(IS_PWM_CHn_CMR(PWM_CaptureModeInitStruct->PWM_CHn_CMR));
+
+    /* Stop PWM_CHn */
+    PWM_CHn_Stop(PWM_CHn);
+    /* Select Timer/Counter mode as Timer mode */ 
+    PWM_CHn->TCMR = PWM_CHn_TCMR_TimerMode;
+    /* Set Prescale register value */
+    PWM_CHn->PR = PWM_CaptureModeInitStruct->PWM_CHn_PR;
+    /* Set Match register value */
+    PWM_CHn->MR = PWM_CaptureModeInitStruct->PWM_CHn_MR;
+    /* Set Limit register value */
+    PWM_CHn->LR = PWM_CaptureModeInitStruct->PWM_CHn_LR;
+    /* Select Up-down mode */
+    PWM_CHn->UDMR = PWM_CaptureModeInitStruct->PWM_CHn_UDMR;
+    /* Select Periodic mode */ 
+    PWM_CHn->PDMR = PWM_CaptureModeInitStruct->PWM_CHn_PDMR;
+    /* Select Capture mode */
+    PWM_CHn->CMR = PWM_CaptureModeInitStruct->PWM_CHn_CMR;
+    /* External input enable */
+    PWM_CHn->PEEER = PWM_CHn_PEEER_ExtEnable;
+}
+
+void PWM_CounterModeInit(PWM_CHn_TypeDef* PWM_CHn, PWM_CounterModeInitTypeDef* PWM_CounterModeInitStruct) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+    /* Stop PWM_CHn */
+    PWM_CHn_Stop(PWM_CHn);
+    /* Select Timer/Counter mode as Timer mode */ 
+    PWM_CHn->TCMR = PWM_CHn_TCMR_TimerMode;    
+    /* Set Match register value */
+    PWM_CHn->MR = PWM_CounterModeInitStruct->PWM_CHn_MR;
+    /* Set Limit register value */
+    PWM_CHn->LR = PWM_CounterModeInitStruct->PWM_CHn_LR;
+    /* Select Up-down mode */
+    PWM_CHn->UDMR = PWM_CounterModeInitStruct->PWM_CHn_UDMR;
+    /* Select Periodic mode */ 
+    PWM_CHn->PDMR = PWM_CounterModeInitStruct->PWM_CHn_PDMR;
+    /* Select Counter mode */ 
+    PWM_CHn->TCMR = PWM_CounterModeInitStruct->PWM_CHn_TCMR;
+    /* Enable external input */
+    PWM_CHn->PEEER = PWM_CHn_PEEER_ExtEnable; 
+}
+
+void PWM_DeadzoneModeInit(PWM_CHn_TypeDef* PWM_CHn, PWM_DeadzoneModeInitTypDef* PWM_DeadzoneModeInitStruct) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+    assert_param(IS_PWM_PR_FILTER(PWM_DeadzoneModeInitStruct->PWM_CHn_PR));
+    assert_param(IS_PWM_MR_FILTER(PWM_CHn, PWM_DeadzoneModeInitStruct->PWM_CHn_MR));
+    assert_param(IS_PWM_LR_FILTER(PWM_CHn, PWM_DeadzoneModeInitStruct->PWM_CHn_LR));
+    assert_param(IS_PWM_CHn_UDMR(PWM_DeadzoneModeInitStruct->PWM_CHn_UDMR));
+    assert_param(IS_PWM_CHn_PDMR(PWM_DeadzoneModeInitStruct->PWM_CHn_PDMR));
+    assert_param(IS_PWM_Deadznoe(PWM_CHn));
+
+    /* Stop PWM_CHn */
+    PWM_CHn_Stop(PWM_CHn);
+    /* Select Timer/Counter mode as Timer mode */ 
+    PWM_CHn->TCMR = PWM_CHn_TCMR_TimerMode;
+    /* Set Prescale register value */
+    PWM_CHn->PR = PWM_DeadzoneModeInitStruct->PWM_CHn_PR;
+    /* Set Match register value */
+    PWM_CHn->MR = PWM_DeadzoneModeInitStruct->PWM_CHn_MR;
+    /* Set Limit register value */
+    PWM_CHn->LR = PWM_DeadzoneModeInitStruct->PWM_CHn_LR;
+    /* Select Up-down mode */
+    PWM_CHn->UDMR = PWM_DeadzoneModeInitStruct->PWM_CHn_UDMR;
+    /* Select Periodic mode */ 
+    PWM_CHn->PDMR = PWM_DeadzoneModeInitStruct->PWM_CHn_PDMR;
+    /* Enable Dead Zone generation */
+    PWM_CHn->DZER = PWM_CHn_DZER_Enable; 
+    /* Set Dead Zone Counter */
+    PWM_CHn->DZCR = PWM_DeadzoneModeInitStruct->PWM_CHn_DZCR;
+}
+
+void PWM_CtrlPWMOutput(PWM_CHn_TypeDef* PWM_CHn, uint32_t outputEnDisable ) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+    assert_param(IS_PWM_Output(outputEnDisable)); 
+    if( PWM_CHn->DZER )
+        assert_param(IS_PWM_Deadznoe(PWM_CHn));
+
+    /* Stop PWM_CHn */
+    PWM_CHn_Stop(PWM_CHn);
+    /*Config PWM output and External input */
+    PWM_CHn->PEEER = outputEnDisable; 
+}
+
+void PWM_CtrlPWMOutputEnable(PWM_CHn_TypeDef* PWM_CHn) 
+{
+    PWM_CtrlPWMOutput(PWM_CHn, PWM_CHn_PEEER_PWMEnable);
+}
+
+void PWM_CtrlPWMOutputDisable(PWM_CHn_TypeDef* PWM_CHn) 
+{
+    PWM_CtrlPWMOutput(PWM_CHn, PWM_CHn_PEEER_Disable);
+}
+
+void PWM_IntConfig(PWM_CHn_TypeDef* PWM_CHn, FunctionalState state) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+    
+    /* Stop PWM_CHn */
+    PWM_CHn_Stop(PWM_CHn);
+
+    if(state == ENABLE)
+    {
+        if(PWM_CHn == PWM_CH0) { 
+            PWM->IER |= PWM_IER_IE0_Enable;
+        }
+        else if(PWM_CHn == PWM_CH1) {
+            PWM->IER |= PWM_IER_IE1_Enable;
+        }
+        else if(PWM_CHn == PWM_CH2) {
+            PWM->IER |= PWM_IER_IE2_Enable;
+        }
+        else if(PWM_CHn == PWM_CH3) {
+            PWM->IER |= PWM_IER_IE3_Enable;
+        }
+        else if(PWM_CHn == PWM_CH4) {
+            PWM->IER |= PWM_IER_IE4_Enable;
+        }
+        else if(PWM_CHn == PWM_CH5) {
+            PWM->IER |= PWM_IER_IE5_Enable;
+        }
+        else if(PWM_CHn == PWM_CH6) {
+            PWM->IER |= PWM_IER_IE6_Enable;
+        }
+        else if(PWM_CHn == PWM_CH7) {
+            PWM->IER |= PWM_IER_IE7_Enable;
+        }
+    }
+    else
+    {
+        if(PWM_CHn == PWM_CH0) { 
+            PWM->IER &= PWM_IER_IE0_Disable;
+        }
+        else if(PWM_CHn == PWM_CH1) {
+            PWM->IER &= PWM_IER_IE1_Disable;
+        }
+        else if(PWM_CHn == PWM_CH2) {
+            PWM->IER &= PWM_IER_IE2_Disable;
+        }
+        else if(PWM_CHn == PWM_CH3) {
+            PWM->IER &= PWM_IER_IE3_Disable;
+        }
+        else if(PWM_CHn == PWM_CH4) {
+            PWM->IER &= PWM_IER_IE4_Disable;
+        }
+        else if(PWM_CHn == PWM_CH5) {
+            PWM->IER &= PWM_IER_IE5_Disable;
+        }
+        else if(PWM_CHn == PWM_CH6) {
+            PWM->IER &= PWM_IER_IE6_Disable;
+        }
+        else if(PWM_CHn == PWM_CH7) {
+            PWM->IER &= PWM_IER_IE7_Disable;
+        }
+    }
+}
+ 
+FlagStatus PWM_GetIntEnableStatus(PWM_CHn_TypeDef* PWM_CHn)
+{
+    FlagStatus ret_val = RESET;
+
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+    if(PWM_CHn == PWM_CH0) { 
+        ret_val = (FlagStatus)((PWM->IER & 0x01) >> 0);
+    }
+    else if(PWM_CHn == PWM_CH1) {
+        ret_val = (FlagStatus)((PWM->IER & 0x02) >> 1);
+    }
+    else if(PWM_CHn == PWM_CH2) {
+        ret_val = (FlagStatus)((PWM->IER & 0x04) >> 2);
+    }
+    else if(PWM_CHn == PWM_CH3) {
+        ret_val = (FlagStatus)((PWM->IER & 0x08) >> 3);
+    }
+    else if(PWM_CHn == PWM_CH4) {
+        ret_val = (FlagStatus)((PWM->IER & 0x10) >> 4);
+    }
+    else if(PWM_CHn == PWM_CH5) {
+        ret_val = (FlagStatus)((PWM->IER & 0x20) >> 5);
+    }
+    else if(PWM_CHn == PWM_CH6) {
+        ret_val = (FlagStatus)((PWM->IER & 0x40) >> 6);
+    }
+    else if(PWM_CHn == PWM_CH7) {
+        ret_val =  (FlagStatus)((PWM->IER & 0x80) >> 7);
+    }
+
+    return ret_val;
+}
+
+void PWM_CHn_IntConfig(PWM_CHn_TypeDef* PWM_CHn, uint32_t PWM_CHn_IER, FunctionalState state) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+    
+	
+	 assert_param(IS_PWM_CHn_IER(PWM_CHn_IER));
+    
+    /* Stop PWM_CHn */
+    PWM_CHn_Stop(PWM_CHn);
+
+    if(state == ENABLE)
+        PWM_CHn->IER |= PWM_CHn_IER;
+    else 
+        PWM_CHn->IER &= ~PWM_CHn_IER;
+}
+
+uint32_t PWM_CHn_GetIntEnableStatus(PWM_CHn_TypeDef* PWM_CHn) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+    return PWM_CHn->IER;
+}
+
+uint32_t PWM_CHn_GetIntFlagStatus(PWM_CHn_TypeDef* PWM_CHn) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+    return PWM_CHn->IR;
+}
+
+void PWM_CHn_ClearInt(PWM_CHn_TypeDef* PWM_CHn, uint32_t PWM_CHn_ICR)
+{
+    /* Check the parameters */
+
+    PWM_CHn->ICR = PWM_CHn_ICR;
+}
+
+void PWM_CHn_Start(PWM_CHn_TypeDef* PWM_CHn) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+    /* Set Start Stop register */
+    if(PWM_CHn == PWM_CH0) { 
+        PWM->SSR |= PWM_SSR_SS0_Start;
+    }
+    else if(PWM_CHn == PWM_CH1) {
+        PWM->SSR |= PWM_SSR_SS1_Start;
+    }
+    else if(PWM_CHn == PWM_CH2) {
+        PWM->SSR |= PWM_SSR_SS2_Start;
+    }
+    else if(PWM_CHn == PWM_CH3) {
+        PWM->SSR |= PWM_SSR_SS3_Start;
+    }
+    else if(PWM_CHn == PWM_CH4) {
+        PWM->SSR |= PWM_SSR_SS4_Start;
+    }
+    else if(PWM_CHn == PWM_CH5) {
+        PWM->SSR |= PWM_SSR_SS5_Start;
+    }
+    else if(PWM_CHn == PWM_CH6) {
+        PWM->SSR |= PWM_SSR_SS6_Start;
+    }
+    else if(PWM_CHn == PWM_CH7) {
+        PWM->SSR |= PWM_SSR_SS7_Start;
+    }
+}
+
+void PWM_Multi_Start(uint32_t ssr_bit_flag) //complete
+{
+    /* Set Start Stop register */
+    PWM->SSR |= ssr_bit_flag;
+}
+
+void PWM_CHn_Stop(PWM_CHn_TypeDef* PWM_CHn) //complete
+{
+    /* Reset Start Stop register */
+    if(PWM_CHn == PWM_CH0) { 
+        PWM->SSR &= PWM_SSR_SS0_Stop;
+    }
+    else if(PWM_CHn == PWM_CH1) {
+        PWM->SSR &= PWM_SSR_SS1_Stop;
+    }
+    else if(PWM_CHn == PWM_CH2) {
+        PWM->SSR &= PWM_SSR_SS2_Stop;
+    }
+    else if(PWM_CHn == PWM_CH3) {
+        PWM->SSR &= PWM_SSR_SS3_Stop;
+    }
+    else if(PWM_CHn == PWM_CH4) {
+        PWM->SSR &= PWM_SSR_SS4_Stop;
+    }
+    else if(PWM_CHn == PWM_CH5) {
+        PWM->SSR &= PWM_SSR_SS5_Stop;
+    }
+    else if(PWM_CHn == PWM_CH6) {
+        PWM->SSR &= PWM_SSR_SS6_Stop;
+    }
+    else if(PWM_CHn == PWM_CH7) {
+        PWM->SSR &= PWM_SSR_SS7_Stop;
+    }
+}
+
+void PWM_Multi_Stop(uint32_t ssr_bit_flag) //complete
+{
+    /* Reset Start Stop register */
+    PWM->SSR &= ~ssr_bit_flag;
+}
+
+void PWM_CHn_Pause(PWM_CHn_TypeDef* PWM_CHn)
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+    /* Set Pause register */
+    if(PWM_CHn == PWM_CH0) { 
+        PWM->PSR |= PWM_PSR_PS0_Pause;
+    }
+    else if(PWM_CHn == PWM_CH1) {
+        PWM->PSR |= PWM_PSR_PS1_Pause;
+    }
+    else if(PWM_CHn == PWM_CH2) {
+        PWM->PSR |= PWM_PSR_PS2_Pause;
+    }
+    else if(PWM_CHn == PWM_CH3) {
+        PWM->PSR |= PWM_PSR_PS3_Pause;
+    }
+    else if(PWM_CHn == PWM_CH4) {
+        PWM->PSR |= PWM_PSR_PS4_Pause;
+    }
+    else if(PWM_CHn == PWM_CH5) {
+        PWM->PSR |= PWM_PSR_PS5_Pause;
+    }
+    else if(PWM_CHn == PWM_CH6) {
+        PWM->PSR |= PWM_PSR_PS6_Pause;
+    }
+    else if(PWM_CHn == PWM_CH7) {
+        PWM->PSR |= PWM_PSR_PS7_Pause;
+    }
+}
+
+void PWM_Multi_Pause(uint32_t psr_bit_flag)
+{
+    PWM->PSR |= psr_bit_flag;
+}
+
+void PWM_CHn_Restart(PWM_CHn_TypeDef* PWM_CHn)
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+    /* Reset Pause register */
+    if(PWM_CHn == PWM_CH0) { 
+        PWM->PSR &= PWM_PSR_PS0_Restart;
+    }
+    else if(PWM_CHn == PWM_CH1) {
+        PWM->PSR &= PWM_PSR_PS1_Restart;
+    }
+    else if(PWM_CHn == PWM_CH2) {
+        PWM->PSR &= PWM_PSR_PS2_Restart;
+    }
+    else if(PWM_CHn == PWM_CH3) {
+        PWM->PSR &= PWM_PSR_PS3_Restart;
+    }
+    else if(PWM_CHn == PWM_CH4) {
+        PWM->PSR &= PWM_PSR_PS4_Restart;
+    }
+    else if(PWM_CHn == PWM_CH5) {
+        PWM->PSR &= PWM_PSR_PS5_Restart;
+    }
+    else if(PWM_CHn == PWM_CH6) {
+        PWM->PSR &= PWM_PSR_PS6_Restart;
+    }
+    else if(PWM_CHn == PWM_CH7) {
+        PWM->PSR &= PWM_PSR_PS7_Restart;
+    }
+}
+
+void PWM_Multi_Restart(uint32_t psr_bit_flag)
+{
+    PWM->PSR &= ~psr_bit_flag;
+}
+
+
+uint32_t PWM_CHn_GetTCR(PWM_CHn_TypeDef* PWM_CHn) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+    return PWM_CHn->TCR;
+}
+
+uint32_t PWM_CHn_GetPCR(PWM_CHn_TypeDef* PWM_CHn) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+    return PWM_CHn->PCR;
+}
+
+uint32_t PWM_CHn_GetPR(PWM_CHn_TypeDef* PWM_CHn) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+    return PWM_CHn->PR;
+}
+
+void PWM_CHn_SetPR(PWM_CHn_TypeDef* PWM_CHn, uint32_t PR) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+    assert_param(IS_PWM_PR_FILTER(PR));
+
+    PWM_CHn->PR = PR;
+}
+
+uint32_t PWM_CHn_GetMR(PWM_CHn_TypeDef* PWM_CHn) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+    return PWM_CHn->MR;
+}
+
+void PWM_CHn_SetMR(PWM_CHn_TypeDef* PWM_CHn, uint32_t MR) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+    PWM_CHn->MR = MR;
+}
+
+uint32_t PWM_CHn_GetLR(PWM_CHn_TypeDef* PWM_CHn) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+    return PWM_CHn->LR;
+}
+
+void PWM_CHn_SetLR(PWM_CHn_TypeDef* PWM_CHn, uint32_t LR) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+    PWM_CHn->LR = LR;
+}
+
+uint32_t PWM_CHn_GetUDMR(PWM_CHn_TypeDef* PWM_CHn) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+    return PWM_CHn->UDMR;
+}
+
+void PWM_CHn_SetUDMR(PWM_CHn_TypeDef* PWM_CHn, uint32_t UDMR) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+    assert_param(IS_PWM_CHn_UDMR(UDMR));
+
+    PWM_CHn->UDMR = UDMR;
+}
+
+uint32_t PWM_CHn_GetTCMR(PWM_CHn_TypeDef* PWM_CHn) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+    return PWM_CHn->TCMR;
+}
+
+void PWM_CHn_SetTCMR(PWM_CHn_TypeDef* PWM_CHn, uint32_t TCMR) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+    assert_param(IS_PWM_CHn_TCMR(TCMR));
+
+    PWM_CHn->TCMR = TCMR;
+}
+
+uint32_t PWM_CHn_GetPEEER(PWM_CHn_TypeDef* PWM_CHn) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+    return PWM_CHn->PEEER;
+}
+
+void PWM_CHn_SetPEEER(PWM_CHn_TypeDef* PWM_CHn, uint32_t PEEER) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+    assert_param(IS_PWM_CHn_PEEER(PEEER));
+
+    PWM_CHn->PEEER = PEEER;
+}
+
+uint32_t PWM_CHn_GetCMR(PWM_CHn_TypeDef* PWM_CHn) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+    return PWM_CHn->CMR;
+}
+
+void PWM_CHn_SetCMR(PWM_CHn_TypeDef* PWM_CHn, uint32_t CMR) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+    assert_param(IS_PWM_CHn_CMR(CMR));
+
+    PWM_CHn->CMR = CMR;
+}
+
+uint32_t PWM_CHn_GetCR(PWM_CHn_TypeDef* PWM_CHn)
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+    return PWM_CHn->CR;
+}
+
+uint32_t PWM_CHn_GetPDMR(PWM_CHn_TypeDef* PWM_CHn) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+    return PWM_CHn->PDMR;
+}
+
+void PWM_CHn_SetPDMR(PWM_CHn_TypeDef* PWM_CHn, uint32_t PDMR) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+    assert_param(IS_PWM_CHn_PDMR(PDMR));
+
+    PWM_CHn->PDMR = PDMR; 
+}
+
+uint32_t PWM_CHn_GetDZER(PWM_CHn_TypeDef* PWM_CHn) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+   return PWM_CHn->DZER;
+}
+
+void PWM_CHn_SetDZER(PWM_CHn_TypeDef* PWM_CHn, uint32_t DZER) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+    assert_param(IS_PWM_CHn_DZER(DZER));
+
+    PWM_CHn->DZER = DZER;
+}
+
+uint32_t PWM_CHn_GetDZCR(PWM_CHn_TypeDef* PWM_CHn) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+
+   return PWM_CHn->DZCR;
+}
+
+void PWM_CHn_SetDZCR(PWM_CHn_TypeDef* PWM_CHn, uint32_t DZCR) //complete
+{
+    /* Check the parameters */
+    assert_param(IS_PWM_ALL_CH(PWM_CHn));
+    assert_param(IS_PWM_CHn_DZCR_FILTER(DZCR));
+
+    PWM_CHn->DZCR = DZCR; 
+}
+
+void PWM_CH0_ClearMatchInt(void)
+{
+    PWM_CHn_ClearInt(PWM_CH0, PWM_CHn_ICR_MatchInterruptClear);
+}
+
+void PWM_CH0_ClearOverflowInt(void)
+{
+   PWM_CHn_ClearInt(PWM_CH0, PWM_CHn_ICR_OverflowInterruptClear);
+}
+
+void PWM_CH0_ClearCaptureInt(void)
+{
+   PWM_CHn_ClearInt(PWM_CH0, PWM_CHn_ICR_CaptureInterruptClear);
+}
+
+void PWM_CH1_ClearMatchInt(void)
+{
+    PWM_CHn_ClearInt(PWM_CH1, PWM_CHn_ICR_MatchInterruptClear);
+}
+
+void PWM_CH1_ClearOverflowInt(void)
+{
+   PWM_CHn_ClearInt(PWM_CH1, PWM_CHn_ICR_OverflowInterruptClear);
+}
+
+void PWM_CH1_ClearCaptureInt(void)
+{
+   PWM_CHn_ClearInt(PWM_CH1, PWM_CHn_ICR_CaptureInterruptClear);
+}
+
+void PWM_CH2_ClearMatchInt(void)
+{
+    PWM_CHn_ClearInt(PWM_CH2, PWM_CHn_ICR_MatchInterruptClear);
+}
+
+void PWM_CH2_ClearOverflowInt(void)
+{
+   PWM_CHn_ClearInt(PWM_CH2, PWM_CHn_ICR_OverflowInterruptClear);
+}
+
+void PWM_CH2_ClearCaptureInt(void)
+{
+   PWM_CHn_ClearInt(PWM_CH2, PWM_CHn_ICR_CaptureInterruptClear);
+}
+
+void PWM_CH3_ClearMatchInt(void)
+{
+    PWM_CHn_ClearInt(PWM_CH3, PWM_CHn_ICR_MatchInterruptClear);
+}
+
+void PWM_CH3_ClearOverflowInt(void)
+{
+   PWM_CHn_ClearInt(PWM_CH3, PWM_CHn_ICR_OverflowInterruptClear);
+}
+
+void PWM_CH3_ClearCaptureInt(void)
+{
+   PWM_CHn_ClearInt(PWM_CH3, PWM_CHn_ICR_CaptureInterruptClear);
+}
+
+void PWM_CH4_ClearMatchInt(void)
+{
+    PWM_CHn_ClearInt(PWM_CH4, PWM_CHn_ICR_MatchInterruptClear);
+}
+
+void PWM_CH4_ClearOverflowInt(void)
+{
+   PWM_CHn_ClearInt(PWM_CH4, PWM_CHn_ICR_OverflowInterruptClear);
+}
+
+void PWM_CH4_ClearCaptureInt(void)
+{
+   PWM_CHn_ClearInt(PWM_CH4, PWM_CHn_ICR_CaptureInterruptClear);
+}
+
+void PWM_CH5_ClearMatchInt(void)
+{
+    PWM_CHn_ClearInt(PWM_CH5, PWM_CHn_ICR_MatchInterruptClear);
+}
+
+void PWM_CH5_ClearOverflowInt(void)
+{
+   PWM_CHn_ClearInt(PWM_CH5, PWM_CHn_ICR_OverflowInterruptClear);
+}
+
+void PWM_CH5_ClearCaptureInt(void)
+{
+   PWM_CHn_ClearInt(PWM_CH5, PWM_CHn_ICR_CaptureInterruptClear);
+}
+
+void PWM_CH6_ClearMatchInt(void)
+{
+    PWM_CHn_ClearInt(PWM_CH6, PWM_CHn_ICR_MatchInterruptClear);
+}
+
+void PWM_CH6_ClearOverflowInt(void)
+{
+   PWM_CHn_ClearInt(PWM_CH6, PWM_CHn_ICR_OverflowInterruptClear);
+}
+
+void PWM_CH6_ClearCaptureInt(void)
+{
+   PWM_CHn_ClearInt(PWM_CH6, PWM_CHn_ICR_CaptureInterruptClear);
+}
+
+void PWM_CH7_ClearMatchInt(void)
+{
+    PWM_CHn_ClearInt(PWM_CH7, PWM_CHn_ICR_MatchInterruptClear);
+}
+
+void PWM_CH7_ClearOverflowInt(void)
+{
+   PWM_CHn_ClearInt(PWM_CH7, PWM_CHn_ICR_OverflowInterruptClear);
+}
+
+void PWM_CH7_ClearCaptureInt(void)
+{
+   PWM_CHn_ClearInt(PWM_CH7, PWM_CHn_ICR_CaptureInterruptClear);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_pwm.h	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,289 @@
+/**
+  ******************************************************************************
+  * @file    
+  * @author  
+  * @version 
+  * @date    
+  * @brief   This file contains all the functions prototypes for the UART 
+  *          firmware library.
+  ******************************************************************************
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __W7500X_PWM_H
+#define __W7500X_PWM_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "W7500x.h"
+
+/**********************************************************************************************/
+/**********************************************************************************************/
+//                This structure and define must be in W7500x.h
+/**********************************************************************************************/
+/**********************************************************************************************/
+
+typedef struct
+{
+    uint32_t    PWM_CHn_PEEER;
+}PWM_CtrlPWMOutputTypeDef;
+
+typedef struct
+{
+    uint32_t    PWM_CHn_PR;
+    uint32_t    PWM_CHn_MR;
+    uint32_t    PWM_CHn_LR;
+    uint32_t    PWM_CHn_UDMR;
+    uint32_t    PWM_CHn_PDMR;
+    uint32_t    PWM_CHn_DZCR;
+}PWM_DeadzoneModeInitTypDef;
+
+#define IS_PWM_ALL_CH(CHn)             ((CHn == PWM_CH0) || \
+                                        (CHn == PWM_CH1) || \
+                                        (CHn == PWM_CH2) || \
+                                        (CHn == PWM_CH3) || \
+                                        (CHn == PWM_CH4) || \
+                                        (CHn == PWM_CH5) || \
+                                        (CHn == PWM_CH6) || \
+                                        (CHn == PWM_CH7))
+
+#define PWM_IER_IE0_Enable              (0x1ul << 0) 
+#define PWM_IER_IE1_Enable              (0x1ul << 1)
+#define PWM_IER_IE2_Enable              (0x1ul << 2)
+#define PWM_IER_IE3_Enable              (0x1ul << 3)
+#define PWM_IER_IE4_Enable              (0x1ul << 4)
+#define PWM_IER_IE5_Enable              (0x1ul << 5)
+#define PWM_IER_IE6_Enable              (0x1ul << 6)
+#define PWM_IER_IE7_Enable              (0x1ul << 7)
+
+#define PWM_IER_IE0_Disable             ~PWM_IER_IE0_Enable
+#define PWM_IER_IE1_Disable             ~PWM_IER_IE1_Enable
+#define PWM_IER_IE2_Disable             ~PWM_IER_IE2_Enable
+#define PWM_IER_IE3_Disable             ~PWM_IER_IE3_Enable
+#define PWM_IER_IE4_Disable             ~PWM_IER_IE4_Enable
+#define PWM_IER_IE5_Disable             ~PWM_IER_IE5_Enable
+#define PWM_IER_IE6_Disable             ~PWM_IER_IE6_Enable
+#define PWM_IER_IE7_Disable             ~PWM_IER_IE7_Enable
+
+#define PWM_SSR_SS0_Start               (0x1ul << 0)
+#define PWM_SSR_SS1_Start               (0x1ul << 1)
+#define PWM_SSR_SS2_Start               (0x1ul << 2)
+#define PWM_SSR_SS3_Start               (0x1ul << 3)
+#define PWM_SSR_SS4_Start               (0x1ul << 4)
+#define PWM_SSR_SS5_Start               (0x1ul << 5)
+#define PWM_SSR_SS6_Start               (0x1ul << 6)
+#define PWM_SSR_SS7_Start               (0x1ul << 7)
+
+#define PWM_SSR_SS0_Stop                ~PWM_SSR_SS0_Start
+#define PWM_SSR_SS1_Stop                ~PWM_SSR_SS1_Start
+#define PWM_SSR_SS2_Stop                ~PWM_SSR_SS2_Start
+#define PWM_SSR_SS3_Stop                ~PWM_SSR_SS3_Start
+#define PWM_SSR_SS4_Stop                ~PWM_SSR_SS4_Start
+#define PWM_SSR_SS5_Stop                ~PWM_SSR_SS5_Start
+#define PWM_SSR_SS6_Stop                ~PWM_SSR_SS6_Start
+#define PWM_SSR_SS7_Stop                ~PWM_SSR_SS7_Start
+
+#define IS_SSR_BIT_FLAG(FLAG)           (FLAG <= 0xFF)
+
+#define PWM_PSR_PS0_Pause               (0x1ul << 0)
+#define PWM_PSR_PS1_Pause               (0x1ul << 1)
+#define PWM_PSR_PS2_Pause               (0x1ul << 2)
+#define PWM_PSR_PS3_Pause               (0x1ul << 3)
+#define PWM_PSR_PS4_Pause               (0x1ul << 4)
+#define PWM_PSR_PS5_Pause               (0x1ul << 5)
+#define PWM_PSR_PS6_Pause               (0x1ul << 6)
+#define PWM_PSR_PS7_Pause               (0x1ul << 7)
+
+#define PWM_PSR_PS0_Restart             ~PWM_PSR_PS0_Pause
+#define PWM_PSR_PS1_Restart             ~PWM_PSR_PS1_Pause
+#define PWM_PSR_PS2_Restart             ~PWM_PSR_PS2_Pause
+#define PWM_PSR_PS3_Restart             ~PWM_PSR_PS3_Pause
+#define PWM_PSR_PS4_Restart             ~PWM_PSR_PS4_Pause
+#define PWM_PSR_PS5_Restart             ~PWM_PSR_PS5_Pause
+#define PWM_PSR_PS6_Restart             ~PWM_PSR_PS6_Pause
+#define PWM_PSR_PS7_Restart             ~PWM_PSR_PS7_Pause
+
+#define IS_PWM_PSR_BIT_FLAG(FLAG)       (FLAG <= 0xFF)
+
+#define PWM_CHn_IER_MIE                 (0x1ul << 0) ///< Match Interrupt Enable
+#define PWM_CHn_IER_OIE                 (0x1ul << 1) ///< Overflow Interrupt Enable
+#define PWM_CHn_IER_CIE                 (0x1ul << 2) ///< Capture Interrupt Enable
+#define IS_PWM_CHn_IER(FLAG)            (FLAG <= 0x7)
+
+#define PWM_CHn_IER_MI_Msk              (0x1ul << 0) ///< Match Interrupt Enable Mask
+#define PWM_CHn_IER_OI_Msk              (0x1ul << 1) ///< Overflow Interrupt Enable Mask
+#define PWM_CHn_IER_CI_Msk              (0x1ul << 2) ///< Capture Interrupt Enable Mask
+
+#define PWM_CHn_ICR_MatchInterruptClear     (0x1ul << 0)
+#define PWM_CHn_ICR_OverflowInterruptClear  (0x1ul << 1)
+#define PWM_CHn_ICR_CaptureInterruptClear   (0x1ul << 2)
+#define IS_PWM_CHn_IntClearFlag(FLAG)       FLAG <= 0x7
+
+/*
+#define IS_PWM_STOP(CHn)               (((CHn == PWM_CH0) && (PWM->SSR & PWM_SSR_SS0)) || \
+                                        ((CHn == PWM_CH1) && (PWM->SSR & PWM_SSR_SS1)) || \
+                                        ((CHn == PWM_CH2) && (PWM->SSR & PWM_SSR_SS2)) || \
+                                        ((CHn == PWM_CH3) && (PWM->SSR & PWM_SSR_SS3)) || \
+                                        ((CHn == PWM_CH4) && (PWM->SSR & PWM_SSR_SS4)) || \
+                                        ((CHn == PWM_CH5) && (PWM->SSR & PWM_SSR_SS5)) || \
+                                        ((CHn == PWM_CH6) && (PWM->SSR & PWM_SSR_SS6)) || \
+                                        ((CHn == PWM_CH7) && (PWM->SSR & PWM_SSR_SS7)))
+*/ 
+
+
+#define IS_PWM_PR_FILTER(MAXVAL)        (MAXVAL <= 0x1F)
+                                     
+
+#define PWM_CHn_UDMR_UpCount            (0x0ul)
+#define PWM_CHn_UDMR_DownCount          (0x1ul)
+#define IS_PWM_CHn_UDMR(MODE)          ((MODE == PWM_CHn_UDMR_UpCount) || \
+                                        (MODE == PWM_CHn_UDMR_DownCount))
+
+#define PWM_CHn_TCMR_TimerMode          (0x0ul)
+#define PWM_CHn_TCMR_RisingCounterMode  (0x1ul)
+#define PWM_CHn_TCMR_FallingCounterMode (0x2ul)
+#define PWM_CHn_TCMR_BothCounterMode    (0x3ul)
+#define IS_PWM_CHn_TCMR(MODE)          ((MODE == PWM_CHn_TCMR_RisingCounterMode)  || \
+                                        (MODE == PWM_CHn_TCMR_FallingCounterMode) || \
+                                        (MODE == PWM_CHn_TCMR_BothCounterMode))
+
+#define PWM_CHn_PEEER_Disable           (0x0ul)
+#define PWM_CHn_PEEER_ExtEnable         (0x1ul)
+#define PWM_CHn_PEEER_PWMEnable         (0x2ul)
+#define IS_PWM_CHn_PEEER(ENABLE)       ((ENABLE == PWM_CHn_PEEER_Disable)   || \
+                                        (ENABLE == PWM_CHn_PEEER_ExtEnable) || \
+                                        (ENABLE == PWM_CHn_PEEER_PWMEnable))  
+
+#define IS_PWM_Output(ENABLE)          ((ENABLE == PWM_CHn_PEEER_Disable)   || \
+                                        (ENABLE == PWM_CHn_PEEER_PWMEnable))  
+
+#define PWM_CHn_CMR_RisingEdge          0x0ul
+#define PWM_CHn_CMR_FallingEdge         0x1ul
+#define IS_PWM_CHn_CMR(MODE)           ((MODE == PWM_CHn_CMR_RisingEdge) || \
+                                        (MODE == PWM_CHn_CMR_FallingEdge)) 
+
+#define PWM_CHn_PDMR_Oneshot            (0x0ul)
+#define PWM_CHn_PDMR_Periodic           (0x1ul)
+#define IS_PWM_CHn_PDMR(MODE)          ((MODE == PWM_CHn_PDMR_Periodic) || \
+                                        (MODE == PWM_CHn_PDMR_Oneshot))
+
+#define PWM_CHn_DZER_Enable             (0x1ul)             
+#define PWM_CHn_DZER_Disable            (0x0ul)             
+#define PWM_CHn_DZER(ENABLE)           ((ENABLE == PWM_CHn_DZER_Enable) || \
+                                        (ENABLE == PWM_CHn_DZER_Disable)) 
+
+#define IS_PWM_Deadznoe(CHn)           (((CHn == PWM_CH0) && (PWM_CH1->DZER == PWM_CHn_DZER_Disable)) || \
+                                        ((CHn == PWM_CH1) && (PWM_CH0->DZER == PWM_CHn_DZER_Disable)) || \
+                                        ((CHn == PWM_CH2) && (PWM_CH3->DZER == PWM_CHn_DZER_Disable)) || \
+                                        ((CHn == PWM_CH3) && (PWM_CH2->DZER == PWM_CHn_DZER_Disable)) || \
+                                        ((CHn == PWM_CH4) && (PWM_CH5->DZER == PWM_CHn_DZER_Disable)) || \
+                                        ((CHn == PWM_CH5) && (PWM_CH4->DZER == PWM_CHn_DZER_Disable)) || \
+                                        ((CHn == PWM_CH6) && (PWM_CH7->DZER == PWM_CHn_DZER_Disable)) || \
+                                        ((CHn == PWM_CH7) && (PWM_CH6->DZER == PWM_CHn_DZER_Disable)))
+
+#define IS_PWM_CHn_DZCR_FILTER(MAXVAL)  (MAXVAL <= 0x3FF)
+
+
+
+
+
+
+void PWM_DeInit(PWM_CHn_TypeDef* PWM_CHn);
+void PWM_TimerModeInit(PWM_CHn_TypeDef* PWM_CHn, PWM_TimerModeInitTypeDef* PWM_TimerModeInitStruct);
+void PWM_CaptureModeInit(PWM_CHn_TypeDef* PWM_CHn, PWM_CaptureModeInitTypeDef* PWM_CaptureModeInitStruct);
+void PWM_CounterModeInit(PWM_CHn_TypeDef* PWM_CHn, PWM_CounterModeInitTypeDef* PWM_CounterModeInitStruct);
+void PWM_DeadzoneModeInit(PWM_CHn_TypeDef* PWM_CHn, PWM_DeadzoneModeInitTypDef* PWM_DeadzoneModeInitStruct);
+void PWM_CtrlPWMOutput(PWM_CHn_TypeDef* PWM_CHn, uint32_t outputEnDisable );
+void PWM_CtrlPWMOutputEnable(PWM_CHn_TypeDef* PWM_CHn) ;
+void PWM_CtrlPWMOutputDisable(PWM_CHn_TypeDef* PWM_CHn) ;
+void PWM_IntConfig(PWM_CHn_TypeDef* PWM_CHn, FunctionalState state);
+FlagStatus PWM_GetIntEnableStatus(PWM_CHn_TypeDef* PWM_CHn);
+void PWM_CHn_IntConfig(PWM_CHn_TypeDef* PWM_CHn, uint32_t PWM_CHn_IER, FunctionalState state);
+void PWM_CHn_Start(PWM_CHn_TypeDef* PWM_CHn);
+void PWM_Multi_Start(uint32_t ssr_bit_flag);
+void PWM_CHn_Stop(PWM_CHn_TypeDef* PWM_CHn);
+void PWM_Multi_Stop(uint32_t ssr_bit_flag);
+void PWM_CHn_Pause(PWM_CHn_TypeDef* PWM_CHn);
+void PWM_Multi_Pause(uint32_t psr_bit_flag);
+void PWM_CHn_Restart(PWM_CHn_TypeDef* PWM_CHn);
+void PWM_Multi_Restart(uint32_t psr_bit_flag);
+uint32_t PWM_CHn_GetIntEnableStatus(PWM_CHn_TypeDef* PWM_CHn);
+uint32_t PWM_CHn_GetIntFlagStatus(PWM_CHn_TypeDef* PWM_CHn);
+void PWM_CHn_ClearInt(PWM_CHn_TypeDef* PWM_CHn, uint32_t PWM_CHn_ICR);
+uint32_t PWM_CHn_GetTCR(PWM_CHn_TypeDef* PWM_CHn);
+uint32_t PWM_CHn_GetPCR(PWM_CHn_TypeDef* PWM_CHn);
+uint32_t PWM_CHn_GetPR(PWM_CHn_TypeDef* PWM_CHn);
+void PWM_CHn_SetPR(PWM_CHn_TypeDef* PWM_CHn, uint32_t PR);
+uint32_t PWM_CHn_GetMR(PWM_CHn_TypeDef* PWM_CHn);
+void PWM_CHn_SetMR(PWM_CHn_TypeDef* PWM_CHn, uint32_t MR);
+uint32_t PWM_CHn_GetLR(PWM_CHn_TypeDef* PWM_CHn);
+void PWM_CHn_SetLR(PWM_CHn_TypeDef* PWM_CHn, uint32_t LR);
+uint32_t PWM_CHn_GetUDMR(PWM_CHn_TypeDef* PWM_CHn);
+void PWM_CHn_SetUDMR(PWM_CHn_TypeDef* PWM_CHn, uint32_t UDMR);
+uint32_t PWM_CHn_GetTCMR(PWM_CHn_TypeDef* PWM_CHn);
+void PWM_CHn_SetTCMR(PWM_CHn_TypeDef* PWM_CHn, uint32_t TCMR);
+uint32_t PWM_CHn_GetPEEER(PWM_CHn_TypeDef* PWM_CHn);
+void PWM_CHn_SetPEEER(PWM_CHn_TypeDef* PWM_CHn, uint32_t PEEER);
+uint32_t PWM_CHn_GetCMR(PWM_CHn_TypeDef* PWM_CHn);
+void PWM_CHn_SetCMR(PWM_CHn_TypeDef* PWM_CHn, uint32_t CMR);
+uint32_t PWM_CHn_GetCR(PWM_CHn_TypeDef* PWM_CHn);
+uint32_t PWM_CHn_GetPDMR(PWM_CHn_TypeDef* PWM_CHn);
+void PWM_CHn_SetPDMR(PWM_CHn_TypeDef* PWM_CHn, uint32_t PDMR);
+void PWM_CHn_SetDZER(PWM_CHn_TypeDef* PWM_CHn, uint32_t DZER);
+uint32_t PWM_CHn_GetDZCR(PWM_CHn_TypeDef* PWM_CHn);
+void PWM_CHn_SetDZCR(PWM_CHn_TypeDef* PWM_CHn, uint32_t DZCR);
+void PWM_CH0_ClearMatchInt(void);
+void PWM_CH0_ClearOverflowInt(void);
+void PWM_CH0_ClearCaptureInt(void);
+void PWM_CH1_ClearMatchInt(void);
+void PWM_CH1_ClearOverflowInt(void);
+void PWM_CH1_ClearCaptureInt(void);
+void PWM_CH2_ClearMatchInt(void);
+void PWM_CH2_ClearOverflowInt(void);
+void PWM_CH2_ClearCaptureInt(void);
+void PWM_CH3_ClearMatchInt(void);
+void PWM_CH3_ClearOverflowInt(void);
+void PWM_CH3_ClearCaptureInt(void);
+void PWM_CH4_ClearMatchInt(void);
+void PWM_CH4_ClearOverflowInt(void);
+void PWM_CH4_ClearCaptureInt(void);
+void PWM_CH5_ClearMatchInt(void);
+void PWM_CH5_ClearOverflowInt(void);
+void PWM_CH5_ClearCaptureInt(void);
+void PWM_CH6_ClearMatchInt(void);
+void PWM_CH6_ClearOverflowInt(void);
+void PWM_CH6_ClearCaptureInt(void);
+void PWM_CH7_ClearMatchInt(void);
+void PWM_CH7_ClearOverflowInt(void);
+void PWM_CH7_ClearCaptureInt(void);
+
+
+void PWM0_Handler(void);
+void PWM1_Handler(void);
+void PWM2_Handler(void);
+void PWM3_Handler(void);
+void PWM4_Handler(void);
+void PWM5_Handler(void);
+void PWM6_Handler(void);
+void PWM7_Handler(void);
+
+
+
+
+//Temporary macro=======
+#define PWM_CH(N)                       ((PWM_CHn_TypeDef *)     (W7500x_PWM_BASE + (N * 0x100UL)))
+//====================== 
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif //__W7500X_PWM_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_uart.c	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,371 @@
+/**
+  ******************************************************************************
+  * @file    W7500x_uart.c
+  * @author  
+  * @version 
+  * @date    
+  * @brief   
+  ******************************************************************************
+  * @attention
+  *
+ *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "W7500x.h"
+#include "W7500x_uart.h"
+
+void UART_StructInit(UART_InitTypeDef* UART_InitStruct)
+{
+  /* UART_InitStruct members default value */
+  UART_InitStruct->UART_BaudRate = 115200;
+  UART_InitStruct->UART_WordLength = UART_WordLength_8b ;
+  UART_InitStruct->UART_StopBits = UART_StopBits_1;
+  UART_InitStruct->UART_Parity = UART_Parity_No ;
+  UART_InitStruct->UART_Mode = UART_Mode_Rx | UART_Mode_Tx;
+  UART_InitStruct->UART_HardwareFlowControl = UART_HardwareFlowControl_None ;  
+}
+
+void UART_DeInit(UART_TypeDef *UARTx)
+{
+    
+}
+
+uint32_t UART_Init(UART_TypeDef *UARTx, UART_InitTypeDef* UART_InitStruct)
+{
+	float baud_divisor;
+    uint32_t tmpreg=0x00, uartclock=0x00;
+    uint32_t integer_baud = 0x00, fractional_baud = 0x00;
+
+	assert_param(IS_UART_01_PERIPH(UARTx));
+	assert_param(IS_UART_WORD_LENGTH(UART_InitStruct->UART_WordLength));
+	assert_param(IS_UART_PARITY(UART_InitStruct->UART_Parity));
+	assert_param(IS_UART_STOPBITS(UART_InitStruct->UART_StopBits));
+	assert_param(IS_UART_HARDWARE_FLOW_CONTROL(UART_InitStruct->UART_HardwareFlowControl));
+	assert_param(IS_UART_MODE(UART_InitStruct->UART_Mode));
+
+
+    UARTx->CR &= ~(UART_CR_UARTEN); 
+
+    // Set baudrate
+    CRG->UARTCLK_SSR = CRG_UARTCLK_SSR_RCLK;  // Set UART Clock using internal Oscilator ( 8MHz )
+    uartclock =  (8000000UL) /  (1 << CRG->UARTCLK_PVSR);
+
+    baud_divisor = ((float)uartclock / (16 * UART_InitStruct->UART_BaudRate));
+    integer_baud = (uint32_t)baud_divisor;
+    fractional_baud = (uint32_t)((baud_divisor - integer_baud) * 64 + 0.5);
+
+    UARTx->IBRD = integer_baud;
+    UARTx->FBRD = fractional_baud;
+
+
+    tmpreg = UARTx->LCR_H;
+    tmpreg &= ~(0x00EE);
+    tmpreg |= (UART_InitStruct->UART_WordLength | UART_InitStruct->UART_StopBits | UART_InitStruct->UART_Parity);
+    UARTx->LCR_H |= tmpreg;
+
+    tmpreg = UARTx->CR;
+    tmpreg &= ~(UART_CR_CTSEn | UART_CR_RTSEn | UART_CR_RXE | UART_CR_TXE | UART_CR_UARTEN);
+    tmpreg |= (UART_InitStruct->UART_Mode | UART_InitStruct->UART_HardwareFlowControl);
+    UARTx->CR |= tmpreg;
+
+    UARTx->CR |= UART_CR_UARTEN;
+
+    return 0;
+}
+
+
+void UART_SendData(UART_TypeDef* UARTx, uint16_t Data)
+{
+    assert_param(IS_UART_01_PERIPH(UARTx));
+
+    UARTx->DR = Data;
+}
+
+
+uint16_t UART_ReceiveData(UART_TypeDef* UARTx)
+{
+    assert_param(IS_UART_01_PERIPH(UARTx));
+
+    return (uint16_t)(UARTx->DR);
+}
+
+
+void UART_SendBreak(UART_TypeDef* UARTx)
+{
+    assert_param(IS_UART_01_PERIPH(UARTx));
+
+    UARTx->LCR_H |= UART_LCR_H_BRK; 
+}
+
+
+FlagStatus UART_GetRecvStatus(UART_TypeDef* UARTx, uint16_t UART_RECV_STATUS)
+{
+    FlagStatus bitstatus = RESET;
+
+    assert_param(IS_UART_01_PERIPH(UARTx));
+    assert_param(IS_UART_RECV_STATUS(UART_RECV_STATUS));
+
+    if( (UARTx->STATUS.RSR & UART_RECV_STATUS) != (uint16_t)RESET)
+    {
+        bitstatus = SET;
+    }
+    else
+    {
+        bitstatus = RESET;
+    }
+
+    return bitstatus;
+}
+
+
+void UART_ClearRecvStatus(UART_TypeDef* UARTx, uint16_t UART_RECV_STATUS)
+{
+    assert_param(IS_UART_01_PERIPH(UARTx));
+    assert_param(IS_UART_RECV_STATUS(UART_RECV_STATUS));
+
+    UARTx->STATUS.ECR = (uint16_t)UART_RECV_STATUS;
+}
+
+
+FlagStatus UART_GetFlagStatus(UART_TypeDef* UARTx, uint16_t UART_FLAG)
+{
+    FlagStatus bitstatus = RESET;
+
+    assert_param(IS_UART_01_PERIPH(UARTx));
+    assert_param(IS_UART_FLAG(UART_FLAG));
+
+    if ((UARTx->FR & UART_FLAG) != (uint16_t)RESET)
+    {
+        bitstatus = SET;    
+    }
+    else
+    {
+        bitstatus = RESET;
+    }
+ 
+    return bitstatus;
+    
+}
+
+/*
+void UART_ClearFlag(UART_TypeDef* UARTx, uint16_t UART_FLAG)
+{
+
+}
+*/
+
+void UART_ITConfig(UART_TypeDef* UARTx, uint16_t UART_IT, FunctionalState NewState)
+{
+    assert_param(IS_UART_01_PERIPH(UARTx));
+    assert_param(IS_UART_IT_FLAG(UART_IT));
+
+    if ( NewState != DISABLE )
+    {
+        UARTx->IMSC |= UART_IT;
+    }
+    else
+    {
+        UARTx->ICR |= UART_IT;
+    }
+}
+
+
+ITStatus UART_GetITStatus(UART_TypeDef* UARTx, uint16_t UART_IT)
+{
+    ITStatus bitstatus = RESET;
+
+    assert_param(IS_UART_01_PERIPH(UARTx));
+    assert_param(IS_UART_IT_FLAG(UART_IT));
+
+    if ((UARTx->MIS & UART_IT) != (uint16_t)RESET)
+    {
+        bitstatus = SET;
+    }
+    else
+    {
+        bitstatus = RESET;
+    }
+
+    return bitstatus;
+}
+
+void UART_ClearITPendingBit(UART_TypeDef* UARTx, uint16_t UART_IT)
+{
+    assert_param(IS_UART_01_PERIPH(UARTx));
+    assert_param(IS_UART_IT_FLAG(UART_IT));
+
+    UARTx->ICR |= UART_IT;
+}
+
+
+void S_UART_DeInit()
+{
+
+}
+
+uint32_t S_UART_Init(uint32_t baud)
+{
+    uint32_t tmpreg=0x00;
+    uint32_t uartclock = 0x00, integer_baud = 0x00;
+
+    assert_param(IS_UART_MODE(S_UART_InitStruct->UART_Mode));
+
+    if(CRG->FCLK_SSR == CRG_FCLK_SSR_RCLK)
+    {
+        uartclock = INTERN_XTAL;  
+    }
+    else if(CRG->FCLK_SSR == CRG_FCLK_SSR_OCLK)
+    {
+        uartclock = EXTERN_XTAL;
+    }
+    else
+    {
+        uartclock = GetSystemClock();
+    }
+
+    integer_baud = (uint32_t)(uartclock / baud);
+    UART2->BAUDDIV = integer_baud;
+
+    tmpreg = UART2->CTRL;
+    tmpreg &= ~(S_UART_CTRL_RX_EN | S_UART_CTRL_TX_EN);
+    tmpreg |= (S_UART_CTRL_RX_EN | S_UART_CTRL_TX_EN);
+    UART2->CTRL = tmpreg;
+
+    return 0;
+}
+
+void S_UART_SendData(uint16_t Data)
+{
+    while(UART2->STATE & S_UART_STATE_TX_BUF_FULL); 
+    UART2->DATA = Data;
+}
+
+uint16_t S_UART_ReceiveData()
+{
+    return (uint16_t)(UART2->DATA);
+}
+
+
+FlagStatus S_UART_GetFlagStatus(uint16_t S_UART_FLAG)
+{
+    FlagStatus bitstatus = RESET;
+
+    assert_param(IS_S_UART_FLAG(S_UART_FLAG));
+
+    if ((UART2->STATE & S_UART_FLAG) != (uint16_t)RESET)
+    {
+        bitstatus = SET;
+    }
+    else
+    {
+        bitstatus = RESET;
+    }
+
+    return bitstatus;
+}
+
+
+void S_UART_ITConfig(uint16_t S_UART_IT, FunctionalState NewState)
+{
+    assert_param(IS_S_UART_IT_FLAG(S_UART_IT));
+
+    if ( NewState != DISABLE )
+    {
+        UART2->CTRL |= S_UART_IT;
+    }
+    else
+    {
+        UART2->CTRL &= ~(S_UART_IT);
+    }
+}
+
+ITStatus S_UART_GetITStatus(uint16_t S_UART_IT)
+{
+    ITStatus bitstatus = RESET;
+
+    assert_param(IS_S_UART_IT_FLAG(S_UART_IT));
+
+    if ((UART2->INT.STATUS & (S_UART_IT >> 2)) != (uint16_t) RESET)
+    {
+        bitstatus = SET;
+    }
+    else
+    {
+        bitstatus = RESET;
+    }
+
+    return bitstatus;
+}
+
+void S_UART_ClearITPendingBit(uint16_t S_UART_IT)
+{
+    assert_param(IS_S_UART_IT_FLAG(S_UART_IT));
+
+    UART2->INT.CLEAR |= (S_UART_IT >> 2);
+}
+
+
+/**************************************************/
+// It will be moved to application board's driver */
+/**************************************************/
+uint8_t UartPutc(UART_TypeDef* UARTx, uint8_t ch)
+{
+    UART_SendData(UARTx,ch);
+
+    while(UARTx->FR & UART_FR_BUSY);
+
+    return (ch);
+}
+
+void UartPuts(UART_TypeDef* UARTx, uint8_t *str)
+{
+    uint8_t ch;
+
+    do{
+        ch = *str;
+        if(ch != (uint8_t)0x0)
+        {
+            UartPutc(UARTx, ch);
+        }
+        *str++;
+    }while(ch != 0);
+}
+
+uint8_t UartGetc(UART_TypeDef* UARTx)
+{
+    while(UARTx->FR & UART_FR_RXFE);
+
+    return (UARTx->DR & 0xFF);
+}
+
+
+uint8_t S_UartPutc(uint8_t ch)
+{
+    S_UART_SendData(ch);
+
+    return (ch);
+}
+
+void S_UartPuts(uint8_t *str)
+{
+    uint8_t ch;
+
+    do{
+        ch = *str;
+        if(ch != (uint8_t)0x0)
+        {
+            S_UART_SendData(ch);
+        }
+        *str++;
+    }while(ch != 0);
+}
+
+uint8_t S_UartGetc()
+{
+    while( (UART2->STATE & S_UART_STATE_RX_BUF_FULL) == 0 ); 
+    return (uint8_t)S_UART_ReceiveData();
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_uart.h	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,289 @@
+/**
+  ******************************************************************************
+  * @file    
+  * @author  
+  * @version 
+  * @date    
+  * @brief   This file contains all the functions prototypes for the UART 
+  *          firmware library.
+  ******************************************************************************
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __W7500X_UART_H
+#define __W7500X_UART_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "W7500x.h"
+
+
+/** 
+  * @brief  UART Init Structure definition  
+  */ 
+  
+typedef struct
+{
+    uint32_t UART_BaudRate;
+    uint16_t UART_WordLength;
+    uint16_t UART_StopBits;
+    uint16_t UART_Parity;
+    uint16_t UART_Mode;
+    uint16_t UART_HardwareFlowControl;
+} UART_InitTypeDef;
+
+/**
+  * @}
+  */
+
+
+/** @defgroup UART_Exported_Constants 
+  * @{
+  */
+
+#define IS_UART_01_PERIPH(PERIPH)   (((PERIPH) == UART0) || ((PERIPH) == UART1))
+#define IS_UART_2_PERIPH(PERIPH)    ((PERIPH) == UART2)                                    
+
+/**
+  * @}
+  */
+
+
+
+/** @addtogroup UART_Word_Length
+  * @{
+  */
+
+#define UART_WordLength_8b          ((uint16_t)UART_LCR_H_WLEN(3))
+#define UART_WordLength_7b          ((uint16_t)UART_LCR_H_WLEN(2))
+#define UART_WordLength_6b          ((uint16_t)UART_LCR_H_WLEN(1))
+#define UART_WordLength_5b          ((uint16_t)UART_LCR_H_WLEN(0))
+#define IS_UART_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WordLength_8b) || \
+                                     ((LENGTH) == UART_WordLength_7b) || \
+                                     ((LENGTH) == UART_WordLength_6b) || \
+                                     ((LENGTH) == UART_WordLength_5b) )
+/**
+  * @}
+  */
+
+
+/** @addtogroup UART_Parity
+  * @{
+  */
+
+#define UART_Parity_No              ((uint16_t)0x0000)
+#define UART_Parity_Even            ((uint16_t)(UART_LCR_H_PEN | UART_LCR_H_EPS))
+#define UART_Parity_Odd             ((uint16_t)(UART_LCR_H_PEN))
+#define IS_UART_PARITY(PARITY)      (((PARITY) == UART_Parity_No)   || \
+                                     ((PARITY) == UART_Parity_Even) || \
+                                     ((PARITY) == UART_Parity_Odd))
+
+/**
+  * @}
+  */
+
+
+/** @addtogroup UART_Stop_Bits
+  * @{
+  */
+
+#define UART_StopBits_1             ((uint16_t)0x0000)
+#define UART_StopBits_2             ((uint16_t)(UART_LCR_H_STP2))
+#define IS_UART_STOPBITS(STOPBITS)  (((STOPBITS) == UART_StopBits_1) || \
+                                     ((STOPBITS) == UART_StopBits_2))
+/**
+  * @}
+  */
+
+
+/** @addtogroup UART_Mode
+  * @{
+  */
+
+#define UART_Mode_Rx                ((uint16_t)(UART_CR_RXE))
+#define UART_Mode_Tx                ((uint16_t)(UART_CR_TXE))
+#define IS_UART_MODE(MODE)          (((MODE) == UART_Mode_Rx) || \
+                                     ((MODE) == UART_Mode_Tx))
+
+/**
+  * @}
+  */
+
+
+/** @addtogroup UART_Hardware_Flow_Control
+  * @{
+  */
+
+#define UART_HardwareFlowControl_None       ((uint16_t)0x0000)
+#define UART_HardwareFlowControl_RTS        ((uint16_t)UART_CR_RTSEn)
+#define UART_HardwareFlowControl_CTS        ((uint16_t)UART_CR_CTSEn)
+#define UART_HardwareFlowControl_RTS_CTS    ((uint16_t)(UART_CR_RTSEn | UART_CR_CTSEn))
+#define IS_UART_HARDWARE_FLOW_CONTROL(CONTROL) \
+                                    (((CONTROL) == UART_HardwareFlowControl_None) || \
+                                     ((CONTROL) == UART_HardwareFlowControl_RTS)  || \
+                                     ((CONTROL) == UART_HardwareFlowControl_CTS)  || \
+                                     ((CONTROL) == UART_HardwareFlowControl_RTS_CTS))
+/**
+  * @}
+  */
+
+
+/** @addtogroup UART_Receive Status
+  * @{
+  */
+
+#define UART_RECV_STATUS_OE    ((uint16_t)0x01UL << 3) /*!< Overrun error  */
+#define UART_RECV_STATUS_BE    ((uint16_t)0x01UL << 2) /*!< Break error    */
+#define UART_RECV_STATUS_PE    ((uint16_t)0x01UL << 1) /*!< Parity error   */
+#define UART_RECV_STATUS_FE    ((uint16_t)0x01UL << 0) /*!< Framing error  */
+#define IS_UART_RECV_STATUS(FLAG)  (((FLAG) == UART_RECV_STATUS_OE) || ((FLAG) == UART_RECV_STATUS_BE) || \
+                                    ((FLAG) == UART_RECV_STATUS_PE) || ((FLAG) == UART_RECV_STATUS_FE)) 
+/**
+  * @}
+  */
+
+
+
+/** @addtogroup UART_Flags
+  * @{
+  */
+
+#define UART_FLAG_RI    ((uint16_t)0x01UL << 8) /*!< Ring indicator        */
+#define UART_FLAG_TXFE  ((uint16_t)0x01UL << 7) /*!< Transmit FIFO empty   */
+#define UART_FLAG_RXFF  ((uint16_t)0x01UL << 6) /*!< Receive FIFO full     */
+#define UART_FLAG_TXFF  ((uint16_t)0x01UL << 5) /*!< Transmit FIFO full    */
+#define UART_FLAG_RXFE  ((uint16_t)0x01UL << 4) /*!< Receive FIFO empty    */
+#define UART_FLAG_BUSY  ((uint16_t)0x01UL << 3) /*!< UART busy             */
+#define UART_FLAG_DCD   ((uint16_t)0x01UL << 2) /*!< Data carrier detect   */
+#define UART_FLAG_DSR   ((uint16_t)0x01UL << 1) /*!< Data set ready        */
+#define UART_FLAG_CTS   ((uint16_t)0x01UL << 0) /*!< Clear to send         */
+#define IS_UART_FLAG(FLAG)  (((FLAG) == UART_FLAG_RI)   || ((FLAG) == UART_FLAG_TXFE) || \
+                             ((FLAG) == UART_FLAG_RXFF) || ((FLAG) == UART_FLAG_TXFF) || \
+                             ((FLAG) == UART_FLAG_RXFE) || ((FLAG) == UART_FLAG_BUSY) || \
+                             ((FLAG) == UART_FLAG_DCD)  || ((FLAG) == UART_FLAG_DSR)  || \
+                             ((FLAG) == UART_FLAG_CTS))
+
+/**
+  * @}
+  */
+
+
+/** @addtogroup UART_IT_Flags
+  * @{
+  */
+
+#define UART_IT_FLAG_OEI        ((uint16_t)0x01UL << 10) /*!< Overrun error interrupt   */
+#define UART_IT_FLAG_BEI        ((uint16_t)0x01UL <<  9) /*!< Break error interrupt     */
+#define UART_IT_FLAG_PEI        ((uint16_t)0x01UL <<  8) /*!< Parity error interrupt    */
+#define UART_IT_FLAG_FEI        ((uint16_t)0x01UL <<  7) /*!< Framing error interrupt   */
+#define UART_IT_FLAG_RTI        ((uint16_t)0x01UL <<  6) /*!< Receive timeout interrupt */
+#define UART_IT_FLAG_TXI        ((uint16_t)0x01UL <<  5) /*!< Transmit interrupt        */
+#define UART_IT_FLAG_RXI        ((uint16_t)0x01UL <<  4) /*!< Receive interrupt        */
+#define UART_IT_FLAG_DSRMI      ((uint16_t)0x01UL <<  3) /*!< UARTDSR modem interrupt   */
+#define UART_IT_FLAG_DCDMI      ((uint16_t)0x01UL <<  2) /*!< UARTDCD modem interrupt   */
+#define UART_IT_FLAG_CTSMI      ((uint16_t)0x01UL <<  1) /*!< UARTCTS modem interrupt   */
+#define UART_IT_FLAG_RIMI       ((uint16_t)0x01UL <<  0) /*!< UARTRI modem  interrupt   */
+#define IS_UART_IT_FLAG(FLAG)   (((FLAG) == UART_IT_FLAG_OEI)  || ((FLAG) == UART_IT_FLAG_BEI)    || \
+                                 ((FLAG) == UART_IT_FLAG_PEI)  || ((FLAG) == UART_IT_FLAG_FEI)    || \
+                                 ((FLAG) == UART_IT_FLAG_RTI)  || ((FLAG) == UART_IT_FLAG_TXI)    || \
+                                 ((FLAG) == UART_IT_FLAG_RXI)  || ((FLAG) == UART_IT_FLAG_DSRMI)  || \
+                                 ((FLAG) == UART_IT_FLAG_DCDMI)|| ((FLAG) == UART_IT_FLAG_CTSMI)  || \
+                                 ((FLAG) == UART_IT_FLAG_RIMI))
+/**
+  * @}
+  */
+/** @addtogroup UART_FIFO_Level Select 
+  * @{
+  */
+
+#define UART_IFLS_RXIFLSEL7_8                ((uint16_t)(UART_IFLS_RXIFLSEL(4)))
+#define UART_IFLS_RXIFLSEL3_4                ((uint16_t)(UART_IFLS_RXIFLSEL(3)))
+#define UART_IFLS_RXIFLSEL1_2                ((uint16_t)(UART_IFLS_RXIFLSEL(2)))
+#define UART_IFLS_RXIFLSEL1_4                ((uint16_t)(UART_IFLS_RXIFLSEL(1)))
+#define UART_IFLS_RXIFLSEL1_8                ((uint16_t)(UART_IFLS_RXIFLSEL(0)))
+#define UART_IFLS_TXIFLSEL7_8                ((uint16_t)(UART_IFLS_TXIFLSEL(4)))
+#define UART_IFLS_TXIFLSEL3_4                ((uint16_t)(UART_IFLS_TXIFLSEL(3)))
+#define UART_IFLS_TXIFLSEL1_2                ((uint16_t)(UART_IFLS_TXIFLSEL(2)))
+#define UART_IFLS_TXIFLSEL1_4                ((uint16_t)(UART_IFLS_TXIFLSEL(1)))
+#define UART_IFLS_TXIFLSEL1_8                ((uint16_t)(UART_IFLS_TXIFLSEL(0)))
+
+#define IS_UART_FIFO_Level(FLAG)          (((FLAG) == UART_IFLS_RXIFLSEL7_8) || ((FLAG) == UART_IFLS_RXIFLSEL3_4)|| \
+                                     ((FLAG) == UART_IFLS_RXIFLSEL1_2)|| ((FLAG) == UART_IFLS_RXIFLSEL1_4)|| ((FLAG) == UART_IFLS_RXIFLSEL1_8)||\
+                                     ((FLAG) == UART_IFLS_TXIFLSEL7_8)|| ((FLAG) == UART_IFLS_TXIFLSEL3_4)|| \
+                                     ((FLAG) == UART_IFLS_TXIFLSEL1_2)|| ((FLAG) == UART_IFLS_TXIFLSEL1_4)||((FLAG) == UART_IFLS_TXIFLSEL1_8))
+
+/**
+  * @}
+  */
+
+/** @addtogroup S_UART_Flags
+  * @{
+  */
+#define S_UART_FLAG_RXO        ((uint16_t)0x01UL << 3) /*!< RX buffer Overrun   */
+#define S_UART_FLAG_TXO        ((uint16_t)0x01UL << 2) /*!< TX buffer Overrun   */
+#define S_UART_FLAG_RXF        ((uint16_t)0x01UL << 1) /*!< RX buffer Full      */
+#define S_UART_FLAG_TXF        ((uint16_t)0x01UL << 0) /*!< TX buffer Full      */
+#define IS_S_UART_FLAG(FLAG)   (((FLAG) == S_UART_FLAG_RXO) || ((FLAG) == S_UART_FLAG_TXO) || \
+                                ((FLAG) == S_UART_FLAG_RXF) || ((FLAG) == S_UART_FLAG_TXF))
+/**
+  * @}
+  */
+
+
+/** @addtogroup S_UART_IT_Flags
+  * @{
+  */
+
+#define S_UART_IT_FLAG_RXOI        ((uint16_t)0x01UL << 5) /*!< RX overrun interrupt   */
+#define S_UART_IT_FLAG_TXOI        ((uint16_t)0x01UL << 4) /*!< TX overrun interrupt   */
+#define S_UART_IT_FLAG_RXI         ((uint16_t)0x01UL << 3) /*!< RX interrupt           */
+#define S_UART_IT_FLAG_TXI         ((uint16_t)0x01UL << 2) /*!< TX interrupt           */
+#define IS_S_UART_IT_FLAG(FLAG)   (((FLAG) == S_UART_IT_FLAG_RXOI)  || ((FLAG) == S_UART_IT_FLAG_TXOI) || \
+                                   ((FLAG) == S_UART_IT_FLAG_RXI)   || ((FLAG) == S_UART_IT_FLAG_TXI))
+
+/**
+  * @}
+  */
+
+
+void        UART_StructInit         (UART_InitTypeDef* UART_InitStruct);
+
+uint32_t    UART_Init               (UART_TypeDef *UARTx, UART_InitTypeDef* UART_InitStruct);
+void        UART_SendData           (UART_TypeDef* UARTx, uint16_t Data);
+uint16_t    UART_ReceiveData        (UART_TypeDef* UARTx);
+void        UART_SendBreak          (UART_TypeDef* UARTx);
+void        UART_ClearRecvStatus    (UART_TypeDef* UARTx, uint16_t UART_RECV_STATUS);
+FlagStatus  UART_GetFlagStatus      (UART_TypeDef* UARTx, uint16_t UART_FLAG);
+void        UART_ITConfig           (UART_TypeDef* UARTx, uint16_t UART_IT, FunctionalState NewState);
+ITStatus    UART_GetITStatus        (UART_TypeDef* UARTx, uint16_t UART_IT);
+void        UART_ClearITPendingBit  (UART_TypeDef* UARTx, uint16_t UART_IT);
+
+
+void S_UART_DeInit(void);
+uint32_t S_UART_Init(uint32_t baud);
+void S_UART_SendData(uint16_t Data);
+uint16_t S_UART_ReceiveData(void);
+
+
+
+uint8_t     UartPutc                (UART_TypeDef* UARTx, uint8_t ch);
+void        UartPuts                (UART_TypeDef* UARTx, uint8_t *str);
+uint8_t     UartGetc                (UART_TypeDef* UARTx);
+
+uint8_t S_UartPutc(uint8_t ch);
+void S_UartPuts(uint8_t *str);
+uint8_t S_UartGetc(void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif // __W7500X_UART_H
+
--- a/targets/hal/TARGET_WIZNET/TARGET_W7500x/analogin_api.c	Fri Sep 04 08:45:09 2015 +0100
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/analogin_api.c	Fri Sep 04 09:30:10 2015 +0100
@@ -36,6 +36,7 @@
 #include "wait_api.h"
 #include "cmsis.h"
 #include "pinmap.h"
+#include "W7500x_adc.h"
 #include "PeripheralPins.h"
 
 
--- a/targets/hal/TARGET_WIZNET/TARGET_W7500x/gpio_irq_api.c	Fri Sep 04 08:45:09 2015 +0100
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/gpio_irq_api.c	Fri Sep 04 09:30:10 2015 +0100
@@ -46,7 +46,7 @@
 #ifdef __cplusplus
 extern "C"{
 #endif
-
+void port_generic_handler(GPIO_TypeDef* GPIOx, uint32_t port_num);
  
 void PORT0_Handler(void)
 {
--- a/targets/hal/TARGET_WIZNET/TARGET_W7500x/gpio_object.h	Fri Sep 04 08:45:09 2015 +0100
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/gpio_object.h	Fri Sep 04 09:30:10 2015 +0100
@@ -32,6 +32,7 @@
 #define MBED_GPIO_OBJECT_H
 
 #include "mbed_assert.h"
+#include "W7500x_gpio.h"
 
 #ifdef __cplusplus
 extern "C" {
--- a/targets/hal/TARGET_WIZNET/TARGET_W7500x/i2c_api.c	Fri Sep 04 08:45:09 2015 +0100
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/i2c_api.c	Fri Sep 04 09:30:10 2015 +0100
@@ -40,6 +40,7 @@
 
 #include "wait_api.h"
 #include "us_ticker_api.h"
+#include "W7500x_i2c.h"
 
 /* Timeout values for flags and events waiting loops. These timeouts are
    not based on accurate values, they just guarantee that the application will
@@ -106,12 +107,12 @@
     
     if(stop)
     {  
-        if(I2C_Read(&conf, address,  data, length) != 0)
+        if(I2C_Read(&conf, address,  (uint8_t*)data, length) != 0)
             return -1;
     }
     else
     {
-        if(I2C_ReadRepeated(&conf, address,  data, length) != 0)
+        if(I2C_ReadRepeated(&conf, address,  (uint8_t*)data, length) != 0)
             return -1;
     }
     
@@ -129,12 +130,12 @@
     
     if(stop)
     {  
-        if(I2C_Write(&conf, address,  data, length) != 0)
+        if(I2C_Write(&conf, address,  (uint8_t*)data, length) != 0)
            return -1;
     }
     else
     {
-        if(I2C_WriteRepeated(&conf, address,  data, length) != 0)
+        if(I2C_WriteRepeated(&conf, address,  (uint8_t*)data, length) != 0)
            return -1;
     }
     
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/objects.h	Fri Sep 04 09:30:10 2015 +0100
@@ -0,0 +1,105 @@
+/* mbed Microcontroller Library 
+ *******************************************************************************
+ * Copyright (c) 2015 WIZnet Co.,Ltd. All rights reserved.
+ * 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 ARM Limited 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 MBED_OBJECTS_H
+#define MBED_OBJECTS_H
+
+#include "cmsis.h"
+#include "PortNames.h"
+#include "PeripheralNames.h"
+#include "PinNames.h"
+#include "PortNames.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct gpio_irq_s {
+    IRQn_Type irq_n;
+    uint32_t event;
+    PinName pin;
+    uint32_t pin_index;
+    uint32_t pin_num;
+    uint32_t port_num;
+    uint32_t rise_null;
+    uint32_t fall_null;
+};
+
+struct port_s {
+    PortName port;
+    uint32_t mask;
+    PinDirection direction;
+    __IO uint32_t *reg_in;
+    __IO uint32_t *reg_out;
+};
+
+struct analogin_s {
+    ADCName adc;
+    PinName pin;
+};
+
+struct serial_s {
+    UARTName uart;
+    int index; // Used by irq
+    uint32_t baudrate;
+    uint32_t databits;
+    uint32_t stopbits;
+    uint32_t parity;
+    PinName pin_tx;
+    PinName pin_rx;
+};
+
+struct spi_s {
+	SSP_TypeDef *spi;
+};
+
+struct i2c_s {
+    I2CName I2Cx;
+    PinName sda;
+    PinName scl; 
+    uint16_t ADDRESS;
+    uint16_t is_setAddress;
+};
+
+struct pwmout_s {
+    PWM_CHn_TypeDef * PWM_CHx;
+    PinName pin;
+    uint32_t period;
+    uint32_t pulse;
+    uint32_t PrescalerValue;
+};
+
+#include "gpio_object.h"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- a/targets/hal/TARGET_WIZNET/TARGET_W7500x/pinmap.c	Fri Sep 04 08:45:09 2015 +0100
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/pinmap.c	Fri Sep 04 09:30:10 2015 +0100
@@ -32,6 +32,8 @@
 #include "pinmap.h"
 #include "PortNames.h"
 #include "mbed_error.h"
+#include "W7500x.h"
+#include "W7500x_gpio.h"
 
 
 uint32_t Get_GPIO_BaseAddress(uint32_t port_idx)
--- a/targets/hal/TARGET_WIZNET/TARGET_W7500x/pwmout_api.c	Fri Sep 04 08:45:09 2015 +0100
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/pwmout_api.c	Fri Sep 04 09:30:10 2015 +0100
@@ -35,6 +35,7 @@
 #include "pinmap.h"
 #include "mbed_error.h"
 #include "PeripheralPins.h"
+#include "W7500x_pwm.h"
 
 static PWM_TimerModeInitTypeDef TimerModeStructure;
 
--- a/targets/hal/TARGET_WIZNET/TARGET_W7500x/rtc_api.c	Fri Sep 04 08:45:09 2015 +0100
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/rtc_api.c	Fri Sep 04 09:30:10 2015 +0100
@@ -14,6 +14,8 @@
  * limitations under the License.
  */
 #include "rtc_api.h"
+#include "cmsis.h"
+#include "W7500x_pwm.h"
 
 time_t wiz_rtc_time;
 char rtc_enabled = 0;
--- a/targets/hal/TARGET_WIZNET/TARGET_W7500x/serial_api.c	Fri Sep 04 08:45:09 2015 +0100
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/serial_api.c	Fri Sep 04 09:30:10 2015 +0100
@@ -37,6 +37,7 @@
 #include "pinmap.h"
 #include <string.h>
 #include "PeripheralPins.h"
+#include "W7500x_uart.h"
 
 #define UART_NUM (2)
 
--- a/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c	Fri Sep 04 08:45:09 2015 +0100
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c	Fri Sep 04 09:30:10 2015 +0100
@@ -32,6 +32,8 @@
 #include "us_ticker_api.h"
 #include "PeripheralNames.h"
 #include "system_W7500x.h"
+#include "W7500x_dualtimer.h"
+#include "W7500x_pwm.h"
 
 #define TIMER_0         DUALTIMER0_0
 #define TIMER_1         PWM_CH1