mbed library sources change for ST sensors and ST BLE

Fork of mbed-src by mbed official

Revision:
619:034e698bc035
--- /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****/