/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright (c) Nuvoton Technology Corp. All rights reserved.                                             */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

#ifndef __NUC1xx_H__
#define __NUC1xx_H__

              
/*
 * ==========================================================================
 * ---------- Interrupt Number Definition -----------------------------------
 * ==========================================================================
*/
 
typedef enum IRQn
{
/******  Cortex-M0 Processor Exceptions Numbers ***************************************************/
  NonMaskableInt_IRQn         = -14,    /*!< 2 Non Maskable Interrupt                             */
  HardFault_IRQn              = -13,    /*!< 3 Cortex-M0 Hard Fault Interrupt                     */
  SVCall_IRQn                 = -5,     /*!< 11 Cortex-M0 SV Call Interrupt                       */
  PendSV_IRQn                 = -2,     /*!< 14 Cortex-M0 Pend SV Interrupt                       */
  SysTick_IRQn                = -1,     /*!< 15 Cortex-M0 System Tick Interrupt                   */

/************************ NUC1xx Interrupt Numbers ************************************************/
  BOD_IRQn                  = 0,
  WDT_IRQn                  = 1,
  EINT0_IRQn                = 2,
  EINT1_IRQn                = 3,
  GPAB_IRQn                 = 4,
  GPCDE_IRQn                = 5,
  PWMA_IRQn                 = 6,
  PWMB_IRQn                 = 7,
  TMR0_IRQn                 = 8,
  TMR1_IRQn                 = 9,
  TMR2_IRQn                 = 10,
  TMR3_IRQn                 = 11,
  UART0_IRQn                = 12,
  UART1_IRQn                = 13,
  SPI0_IRQn                 = 14,
  SPI1_IRQn                 = 15,
  SPI2_IRQn                 = 16,
  SPI3_IRQn                 = 17,
  I2C0_IRQn                 = 18,
  I2C1_IRQn                 = 19,
  CAN0_IRQn                 = 20,
  CAN1_IRQn                 = 21,
  SD_IRQn                   = 22,
  USBD_IRQn                 = 23,
  PS2_IRQn                  = 24,
  ACMP_IRQn                 = 25,
  PDMA_IRQn                 = 26,
  I2S_IRQn                  = 27,
  PWRWU_IRQn                = 28,
  ADC_IRQn                  = 29,
  DAC_IRQn                  = 30,
  RTC_IRQn                  = 31
} IRQn_Type;


/*
 * ==========================================================================
 * ----------- Processor and Core Peripheral Section ------------------------
 * ==========================================================================
 */

/* Configuration of the Cortex-M0 Processor and Core Peripherals */
#define __MPU_PRESENT           0       /*!< armikcmu does not provide a MPU present or not       */
#define __NVIC_PRIO_BITS        2       /*!< armikcmu Supports 2 Bits for the Priority Levels     */
#define __Vendor_SysTickConfig  0       /*!< Set to 1 if different SysTick Config is used         */


#include "core_cm0.h"                   /* Cortex-M0 processor and core peripherals               */
#include "system_NUC1xx.h"              /* NUC1xx System                                          */
#include "System\SysInfra.h"    

#if defined ( __CC_ARM   )
#pragma anon_unions
#endif

/******************************************************************************/
/*                Device Specific Peripheral registers structures             */
/******************************************************************************/

/*--------------------- General Purpose Input and Ouptut ---------------------*/
typedef struct
{
    __IO uint32_t PMD0:2;
    __IO uint32_t PMD1:2;
    __IO uint32_t PMD2:2;
    __IO uint32_t PMD3:2;
    __IO uint32_t PMD4:2;
    __IO uint32_t PMD5:2;
    __IO uint32_t PMD6:2;
    __IO uint32_t PMD7:2;
    __IO uint32_t PMD8:2;
    __IO uint32_t PMD9:2;
    __IO uint32_t PMD10:2;
    __IO uint32_t PMD11:2;
    __IO uint32_t PMD12:2;
    __IO uint32_t PMD13:2;
    __IO uint32_t PMD14:2;
    __IO uint32_t PMD15:2;
} GPIO_PMD_T;

typedef __IO uint32_t GPIO_OFFD_T;

typedef __IO uint32_t GPIO_DOUT_T;

typedef __IO uint32_t GPIO_DMASK_T;

typedef __IO uint32_t GPIO_PIN_T;

typedef __IO uint32_t GPIO_DBEN_T;

typedef __IO uint32_t GPIO_IMD_T;

typedef __IO uint32_t GPIO_IEN_T;

typedef __IO uint32_t GPIO_ISRC_T;

typedef struct
{
    union {
        __IO uint32_t u32PMD;
        struct {
            __IO uint32_t PMD0:2;
            __IO uint32_t PMD1:2;
            __IO uint32_t PMD2:2;
            __IO uint32_t PMD3:2;
            __IO uint32_t PMD4:2;
            __IO uint32_t PMD5:2;
            __IO uint32_t PMD6:2;
            __IO uint32_t PMD7:2;
            __IO uint32_t PMD8:2;
            __IO uint32_t PMD9:2;
            __IO uint32_t PMD10:2;
            __IO uint32_t PMD11:2;
            __IO uint32_t PMD12:2;
            __IO uint32_t PMD13:2;
            __IO uint32_t PMD14:2;
            __IO uint32_t PMD15:2;
        } PMD;
    };

    union {
        __IO uint32_t u32OFFD;
        __IO uint32_t OFFD;
    };

    union {
        __IO uint32_t u32DOUT;
        __IO uint32_t DOUT;
    };

    union {
        __IO uint32_t u32DMASK;
        __IO uint32_t DMASK;
    };

    union {
        __IO uint32_t u32PIN;
        __IO uint32_t PIN;
    };

    union {
        __IO uint32_t u32DBEN;
        __IO uint32_t DBEN;
    };

    union {
        __IO uint32_t u32IMD;
        __IO uint32_t IMD;
    };

    union {
        __IO uint32_t u32IEN;
        __IO uint32_t IEN;
    };

    union {
        __IO uint32_t u32ISRC;
        __IO uint32_t ISRC;
    };
} GPIO_T;

typedef struct
{
    union {
        __IO uint32_t u32DBNCECON;
        struct {
            __IO uint32_t   DBCLKSEL:4;
            __IO uint32_t   DBCLKSRC:1;
            __IO uint32_t   ICLK_ON:1;
            __I  uint32_t   RESERVE:26;    
        } DBNCECON;
    };
} GPIO_DBNCECON_T;

/* GPIO PMD Bit Field Definitions */
#define GPIO_PMD_PMD15_Pos          30
#define GPIO_PMD_PMD15_Msk          (0x3ul << GPIO_PMD_PMD15_Pos)

#define GPIO_PMD_PMD14_Pos          28
#define GPIO_PMD_PMD14_Msk          (0x3ul << GPIO_PMD_PMD14_Pos)

#define GPIO_PMD_PMD13_Pos          26
#define GPIO_PMD_PMD13_Msk          (0x3ul << GPIO_PMD_PMD13_Pos)

#define GPIO_PMD_PMD12_Pos          24
#define GPIO_PMD_PMD12_Msk          (0x3ul << GPIO_PMD_PMD12_Pos)

#define GPIO_PMD_PMD11_Pos          22
#define GPIO_PMD_PMD11_Msk          (0x3ul << GPIO_PMD_PMD11_Pos)

#define GPIO_PMD_PMD10_Pos          20
#define GPIO_PMD_PMD10_Msk          (0x3ul << GPIO_PMD_PMD10_Pos)

#define GPIO_PMD_PMD9_Pos           18
#define GPIO_PMD_PMD9_Msk           (0x3ul << GPIO_PMD_PMD9_Pos)

#define GPIO_PMD_PMD8_Pos           16
#define GPIO_PMD_PMD8_Msk           (0x3ul << GPIO_PMD_PMD8_Pos)

#define GPIO_PMD_PMD7_Pos           14
#define GPIO_PMD_PMD7_Msk           (0x3ul << GPIO_PMD_PMD7_Pos)

#define GPIO_PMD_PMD6_Pos           12
#define GPIO_PMD_PMD6_Msk           (0x3ul << GPIO_PMD_PMD6_Pos)

#define GPIO_PMD_PMD5_Pos           10
#define GPIO_PMD_PMD5_Msk           (0x3ul << GPIO_PMD_PMD5_Pos)

#define GPIO_PMD_PMD4_Pos           8
#define GPIO_PMD_PMD4_Msk           (0x3ul << GPIO_PMD_PMD4_Pos)

#define GPIO_PMD_PMD3_Pos           6
#define GPIO_PMD_PMD3_Msk           (0x3ul << GPIO_PMD_PMD3_Pos)

#define GPIO_PMD_PMD2_Pos           4
#define GPIO_PMD_PMD2_Msk           (0x3ul << GPIO_PMD_PMD2_Pos)

#define GPIO_PMD_PMD1_Pos           2
#define GPIO_PMD_PMD1_Msk           (0x3ul << GPIO_PMD_PMD1_Pos)

#define GPIO_PMD_PMD0_Pos           0
#define GPIO_PMD_PMD0_Msk           (0x3ul << GPIO_PMD_PMD0_Pos)

/* GPIO OFFD Bit Field Definitions */
#define GPIO_OFFD_Pos               16
#define GPIO_OFFD_Msk               (0xFFFFul << GPIO_OFFD_Pos)

/* GPIO DOUT Bit Field Definitions */
#define GPIO_DOUT_Pos               0
#define GPIO_DOUT_Msk               (0xFFFFul << GPIO_DOUT_Pos)

/* GPIO DMASK Bit Field Definitions */
#define GPIO_DMASK_Pos              0
#define GPIO_DMASK_Msk              (0xFFFFul << GPIO_DMASK_Pos)

/* GPIO PIN Bit Field Definitions */
#define GPIO_PIN_Pos                0
#define GPIO_PIN_Msk                (0xFFFFul << GPIO_PIN_Pos)

/* GPIO DBEN Bit Field Definitions */
#define GPIO_DBEN_Pos               0
#define GPIO_DBEN_Msk               (0xFFFFul << GPIO_DBEN_Pos)

/* GPIO IMD Bit Field Definitions */
#define GPIO_IMD_Pos                0
#define GPIO_IMD_Msk                (0xFFFFul << GPIO_IMD_Pos)

/* GPIO IEN Bit Field Definitions */
#define GPIO_IEN_IR_EN_Pos          16
#define GPIO_IEN_IR_EN_Msk          (0xFFFFul << GPIO_IEN_IR_EN_Pos)

#define GPIO_IEN_IF_EN_Pos          0
#define GPIO_IEN_IF_EN_Msk          (0xFFFFul << GPIO_IEN_IF_EN_Pos)

/* GPIO ISRC Bit Field Definitions */
#define GPIO_ISRC_Pos               0
#define GPIO_ISRC_Msk               (0xFFFFul << GPIO_ISRC_Pos)

/* GPIO DBNCECON Bit Field Definitions */
#define GPIO_DBNCECON_ICLK_ON_Pos   5
#define GPIO_DBNCECON_ICLK_ON_Msk   (1ul << GPIO_DBNCECON_ICLK_ON_Pos)

#define GPIO_DBNCECON_DBCLKSRC_Pos  4
#define GPIO_DBNCECON_DBCLKSRC_Msk  (1ul << GPIO_DBNCECON_DBCLKSRC_Pos)

#define GPIO_DBNCECON_DBCLKSEL_Pos  0
#define GPIO_DBNCECON_DBCLKSEL_Msk  (0xFul << GPIO_DBNCECON_DBCLKSEL_Pos)

/* GPIO Port[x] Pin I/O Bit Output/Input Control Bit Field Definitions */
#define GPIO_GPIOx_DOUT_Pos         0
#define GPIO_GPIOx_DOUT_Msk         (1ul << GPIO_GPIOx_DOUT_Pos)

/*------------------------- UART Interface Controller ------------------------*/

typedef __IO uint32_t UART_DATA_T;


typedef struct
{
    __IO uint32_t  RDA_IEN:1;
    __IO uint32_t  THRE_IEN:1;
    __IO uint32_t  RLS_IEN:1;
    __IO uint32_t  MODEM_IEN:1;
    __IO uint32_t  RTO_IEN:1;     
    __IO uint32_t  BUF_ERR_IEN:1;
    __IO uint32_t  WAKE_EN:1;
    __I  uint32_t  RESERVE0:1;
    __IO uint32_t  LIN_RX_BRK_IEN:1;
    __I  uint32_t  RESERVE1:2;
    __IO uint32_t  TIME_OUT_EN:1;      /* Time-out counter enable */
    __IO uint32_t  AUTO_RTS_EN:1;
    __IO uint32_t  AUTO_CTS_EN:1;
    __IO uint32_t  DMA_TX_EN:1;
    __IO uint32_t  DMA_RX_EN:1;
    __I  uint32_t  RESERVE2:16;    
    
} UART_IER_T;

typedef struct
{
    __I  uint32_t  RESERVE0:1;
    __IO uint32_t  RFR:1;
    __IO uint32_t  TFR:1;
    __I  uint32_t  RESERVE1:1;
    __IO uint32_t  RFITL:4;             /* Rx FIFO Interrupt Trigger Level */
    __IO uint32_t  RX_DIS:1;
    __I  uint32_t  RESERVE2:7;
    __IO uint32_t  RTS_TRI_LEV:4;
    __I  uint32_t  RESERVE3:12;
} UART_FCR_T;

typedef struct
{
    __IO uint32_t  WLS:2;               /* Word length select */
    __IO uint32_t  NSB:1;               /* Number of STOP bit */
    __IO uint32_t  PBE:1;               /* Parity bit enable  */
    __IO uint32_t  EPE:1;               /* Even parity enable */
    __IO uint32_t  SPE:1;               /* Stick parity enable*/
    __IO uint32_t  BCB:1;               /* Break control bit  */
    __I  uint32_t  RESERVE:25;
} UART_LCR_T;

typedef struct
{
    __I  uint32_t  RESERVE0:1;
    __IO uint32_t  RTS:1;
    __I  uint32_t  RESERVE1:2;
    __IO uint32_t  LBME:1;
    __I  uint32_t  RESERVE2:4;
    __IO uint32_t  LEV_RTS:1;
    __I  uint32_t  RESERVE3:3;
    __I  uint32_t  RTS_ST:1;               /* RTS status */
    __I  uint32_t  RESERVE4:18;
} UART_MCR_T;

typedef struct
{
    __IO uint32_t  DCTSF:1;
    __I  uint32_t  RESERVE0:3;
    __I  uint32_t  CTS_ST:1;               /* CTS status */
    __I  uint32_t  RESERVE1:3;
    __IO uint32_t  LEV_CTS:1;
    __I  uint32_t  RESERVE2:23;
} UART_MSR_T;

typedef struct
{
    __IO uint32_t  RX_OVER_IF:1;
    __I  uint32_t  RESERVE0:2;
    __IO uint32_t  RS485_ADD_DETF:1;
    __IO uint32_t  PEF:1;
    __IO uint32_t  FEF:1;
    __IO uint32_t  BIF:1;
    __I  uint32_t  RESERVE1:1;
    __I  uint32_t  RX_POINTER:6;
    __I  uint32_t  RX_EMPTY:1;
    __I  uint32_t  RX_FULL:1;
    __I  uint32_t  TX_POINTER:6;
    __I  uint32_t  TX_EMPTY:1;
    __I  uint32_t  TX_FULL:1;
    __IO uint32_t  TX_OVER_IF:1;
    __I  uint32_t  RESERVE2:3;
    __I  uint32_t  TE_FLAG:1;                /* Transmitter empty flag */
    __I  uint32_t  RESERVE3:3;
} UART_FSR_T;

typedef struct
{
    __IO uint32_t  RDA_IF:1;
    __IO uint32_t  THRE_IF:1;
    __IO uint32_t  RLS_IF:1;
    __IO uint32_t  MODEM_IF:1;
    __IO uint32_t  TOUT_IF:1;
    __IO uint32_t  BUF_ERR_IF:1;
    __I  uint32_t  RESERVE0:1;
    __IO uint32_t  LIN_RX_BREAK_IF:1;

    __IO uint32_t  RDA_INT:1;
    __IO uint32_t  THRE_INT:1;
    __IO uint32_t  RLS_INT:1;
    __IO uint32_t  MODEM_INT:1;
    __IO uint32_t  TOUT_INT:1;
    __IO uint32_t  BUF_ERR_INT:1;
    __I  uint32_t  RESERVE1:1;
    __IO uint32_t  LIN_RX_BREAK_INT:1;

    __I  uint32_t  RESERVE2:2;
    __IO uint32_t  HW_RLS_IF:1;
    __IO uint32_t  HW_MODEM_IF:1;
    __IO uint32_t  HW_TOUT_IF:1;
    __IO uint32_t  HW_BUF_ERR_IF:1;
    __IO uint32_t  RESERVE3:1;
    __IO uint32_t  HW_LIN_RX_BREAK_IF:1;

    __I  uint32_t  RESERVE4:2;
    __IO uint32_t  HW_RLS_INT:1;
    __IO uint32_t  HW_MODEM_INT:1;
    __IO uint32_t  HW_TOUT_INT:1;
    __IO uint32_t  HW_BUF_ERR_INT:1;
    __IO uint32_t  RESERVE5:1;
    __IO uint32_t  HW_LIN_RX_BREAK_INT:1;
} UART_ISR_T;

typedef struct
{
    __IO uint32_t  TOIC:7;
    __I  uint32_t  RESERVE0:1;
    __IO uint32_t  DLY:8;
    __I  uint32_t  RESERVE1:16;

} UART_TOR_T;

typedef struct
{
    __IO uint32_t  BRD:16;
    __I  uint32_t  RESERVE0:8;
    __IO uint32_t  DIVIDER_X:4;
    __IO uint32_t  DIV_X_ONE:1;            
    __IO uint32_t  DIV_X_EN:1;            
    __I  uint32_t  RESERVE1:2;
} UART_BAUD_T;

typedef struct
{
    __I  uint32_t  RESERVE0:1;
    __IO uint32_t  TX_SELECT:1;
    __I  uint32_t  RESERVE1:3;
    __IO uint32_t  INV_TX:1;            
    __IO uint32_t  INV_RX:1;
    __I  uint32_t  RESERVE2:25;
} UART_IRCR_T;

typedef struct
{
    __IO uint32_t  LIN_BKFL:4;
    __I  uint32_t  RESERVE0:2;
    __IO uint32_t  LIN_RX_EN:1;
    __IO uint32_t  LIN_TX_EN:1;            
    __IO uint32_t  RS485_NMM:1;
    __IO uint32_t  RS485_AAD:1;
    __IO uint32_t  RS485_AUD:1;
    __I  uint32_t  RESERVE1:4;
    __IO uint32_t  RS485_ADD_EN:1;
    __I  uint32_t  RESERVE2:8;
    __IO uint32_t  ADDR_MATCH:8;
} UART_ALTCON_T;



typedef struct
{
    __IO uint32_t  FUN_SEL:2;
    __I  uint32_t  RESERVE0:30;

} UART_FUNSEL_T;


typedef struct
{
    
    union {
        __IO uint32_t u32DATA;
        __IO uint32_t DATA;
    };
    union {
        __IO uint32_t u32IER;
        struct {
            __IO uint32_t  RDA_IEN:1;
            __IO uint32_t  THRE_IEN:1;
            __IO uint32_t  RLS_IEN:1;
            __IO uint32_t  MODEM_IEN:1;
            __IO uint32_t  RTO_IEN:1;          
            __IO uint32_t  BUF_ERR_IEN:1;        
            __IO uint32_t  WAKE_EN:1;
            __I  uint32_t  RESERVE0:1; 
            __IO uint32_t  LIN_RX_BRK_IEN:1;
            __I  uint32_t  RESERVE1:2;
            __IO uint32_t  TIME_OUT_EN:1;
            __IO uint32_t  AUTO_RTS_EN:1;
            __IO uint32_t  AUTO_CTS_EN:1;
            __IO uint32_t  DMA_TX_EN:1;
            __IO uint32_t  DMA_RX_EN:1;
            __I  uint32_t  RESERVE2:16;
        } IER;
    };

    union {
        __IO uint32_t u32FCR;
        struct {
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  RFR:1;
            __IO uint32_t  TFR:1;
            __IO uint32_t  RESERVE1:1;
            __IO uint32_t  RFITL:4;          
            __IO uint32_t  RX_DIS:1; 
            __I  uint32_t  RESERVE2 :7;
            __IO uint32_t  RTS_TRI_LEV:4;
            __I  uint32_t  RESERVE3 :4;
        } FCR;
    };

    union {
        __IO uint32_t u32LCR;
        struct {
            __IO uint32_t  WLS:2;
            __IO uint32_t  NSB:1;
            __IO uint32_t  PBE:1;
            __IO uint32_t  EPE:1;
            __IO uint32_t  SPE:1;          
            __IO uint32_t  BCB:1; 
            __I  uint32_t  RESERVE :25;
        } LCR;
    };

    union {
        __IO uint32_t u32MCR;
        struct {
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  RTS:1;
            __I  uint32_t  RESERVE1:7;
            __IO uint32_t  LEV_RTS:1;
            __I  uint32_t  RESERVE2:3;          
            __IO uint32_t  RTS_ST:1; 
            __I  uint32_t  RESERVE3:18;
        } MCR;
    };


    union {
        __IO uint32_t u32MSR;
        struct {
            __IO uint32_t  DCTSF:1;
            __I  uint32_t  RESERVE0:3;
            __IO uint32_t  CTS_ST:1;
            __I  uint32_t  RESERVE1:3;
            __IO uint32_t  LEV_CTS:1;          
            __I  uint32_t  RESERVE2:23;
        } MSR;
    };


    union {
        __IO uint32_t u32FSR;
        struct {
            __IO uint32_t  RX_OVER_IF:1;
            __I  uint32_t  RESERVE0:2;
            __IO uint32_t  RS485_ADD_DETF:1;
            __IO uint32_t  PEF:1;
            __IO uint32_t  FEF:1;
            __IO uint32_t  BIF:1;
            __I  uint32_t  RESERVE1:1;
            __IO uint32_t  RX_POINTER:6;
            __IO uint32_t  RX_EMPTY:1;
            __IO uint32_t  RX_FULL:1;
            __IO uint32_t  TX_POINTER:6;
            __IO uint32_t  TX_EMPTY:1;
            __IO uint32_t  TX_FULL:1;
            __IO uint32_t  TX_OVER_IF:1;
            __I  uint32_t  RESERVE2:3;
            __IO uint32_t  TE_FLAG:1;
            __I  uint32_t  RESERVE3:3;
        } FSR;
    };

    union {
        __IO uint32_t u32ISR;
        struct {
            __IO uint32_t  RDA_IF:1;
            __IO uint32_t  THRE_IF:1;
            __IO uint32_t  RLS_IF:1;
            __IO uint32_t  MODEM_IF:1;
            __IO uint32_t  TOUT_IF:1;
            __IO uint32_t  BUF_ERR_IF:1;
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  LIN_RX_BREAK_IF:1;
            __IO uint32_t  RDA_INT:1;
            __IO uint32_t  THRE_INT:1;
            __IO uint32_t  RLS_INT:1;
            __IO uint32_t  MODEM_INT:1;
            __IO uint32_t  TOUT_INT:1;
            __IO uint32_t  BUF_ERR_INT:1;
            __I  uint32_t  RESERVE1:1;
            __IO uint32_t  LIN_RX_BREAK_INT:1;
            __I  uint32_t  RESERVE2:2;
            __IO uint32_t  HW_RLS_IF:1;
            __IO uint32_t  HW_MODEM_IF:1;
            __IO uint32_t  HW_TOUT_IF:1;
            __IO uint32_t  HW_BUF_ERR_IF:1;
            __I  uint32_t  RESERVE3:1;
            __IO uint32_t  HW_LIN_RX_BREAK_IF:1;
            __I  uint32_t  RESERVE4:2;
            __IO uint32_t  HW_RLS_INT:1;
            __IO uint32_t  HW_MODEM_INT:1;
            __IO uint32_t  HW_TOUT_INT:1;
            __IO uint32_t  HW_BUF_ERR_INT:1;
            __I  uint32_t  RESERVE5:1;
            __IO uint32_t  HW_LIN_RX_BREAK_INT:1;

        } ISR;
    };

    union {
        __IO uint32_t u32TOR;
        struct {
            __IO uint32_t  TOIC:8;
            __IO uint32_t  DLY:8;
            __I  uint32_t  RESERVE1:16;
        } TOR;
    };

    union {
        __IO uint32_t u32BAUD;
        struct {
            __IO uint32_t  BRD:16;
            __I  uint32_t  RESERVE0:8;
            __IO uint32_t  DIVIDER_X:4;
            __IO uint32_t  DIV_X_ONE:1;
            __IO uint32_t  DIV_X_EN:1;
            __I  uint32_t  RESERVE1:2;
        } BAUD;
    };

    union {
        __IO uint32_t u32IRCR;
        struct {
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  TX_SELECT:1;
            __I  uint32_t  RESERVE1:3;
            __IO uint32_t  INV_TX:1;
            __IO uint32_t  INV_RX:1;
            __I  uint32_t  RESERVE2:25;
        } IRCR;
    };

    union {
        __IO uint32_t u32ALTCON;
        struct {
            __IO uint32_t  LIN_BKFL:4;
            __I  uint32_t  RESERVE0:2;
            __IO uint32_t  LIN_RX_EN:1;
            __IO uint32_t  LIN_TX_EN:1;
            __IO uint32_t  RS485_NMM:1;
            __IO uint32_t  RS485_AAD:1;
            __IO uint32_t  RS485_AUD:1;
            __I  uint32_t  RESERVE1:4;
            __IO uint32_t  RS485_ADD_EN :1;
            __I  uint32_t  RESERVE2 :8;
            __IO uint32_t  ADDR_MATCH :8;
        } ALTCON;
    };


    union {
        __IO uint32_t u32FUNSEL;
        struct {
            __IO uint32_t  FUN_SEL:2;
            __I  uint32_t  RESERVE0:30;
        } FUNSEL;
    };
} UART_T;




/* UART THR Bit Field Definitions */
#define UART_THR_THR_Pos         0
#define UART_THR_THR_Msk        (0xFul << UART_THR_THR_Pos)

/* UART RBR Bit Field Definitions */
#define UART_RBR_RBR_Pos         0
#define UART_RBR_RBR_Msk        (0xFul << UART_RBR_RBR_Pos)

/* UART IER Bit Field Definitions */
#define UART_IER_DMA_RX_EN_Pos      15
#define UART_IER_DMA_RX_EN_Msk      (1ul << UART_IER_DMA_RX_EN_Pos)

#define UART_IER_DMA_TX_EN_Pos      14
#define UART_IER_DMA_TX_EN_Msk      (1ul << UART_IER_DMA_TX_EN_Pos)

#define UART_IER_AUTO_CTS_EN_Pos    13
#define UART_IER_AUTO_CTS_EN_Msk    (1ul << UART_IER_AUTO_CTS_EN_Pos)

#define UART_IER_AUTO_RTS_EN_Pos    12
#define UART_IER_AUTO_RTS_EN_Msk    (1ul << UART_IER_AUTO_RTS_EN_Pos)

#define UART_IER_TIME_OUT_EN_Pos    11
#define UART_IER_TIME_OUT_EN_Msk    (1ul << UART_IER_TIME_OUT_EN_Pos)

#define UART_IER_LIN_RX_BRK_IEN_Pos 8
#define UART_IER_LIN_RX_BRK_IEN_Msk (1ul << UART_IER_LIN_RX_BRK_IEN_Pos)

#define UART_IER_WAKE_EN_Pos        6
#define UART_IER_WAKE_EN_Msk        (1ul << UART_IER_WAKE_EN_Pos)

#define UART_IER_BUF_ERR_IEN_Pos    5
#define UART_IER_BUF_ERR_IEN_Msk    (1ul << UART_IER_BUF_ERR_IEN_Pos)

#define UART_IER_RTO_IEN_Pos        4
#define UART_IER_RTO_IEN_Msk        (1ul << UART_IER_RTO_IEN_Pos)

#define UART_IER_MODEM_IEN_Pos      3
#define UART_IER_MODEM_IEN_Msk      (1ul << UART_IER_MODEM_IEN_Pos)

#define UART_IER_RLS_IEN_Pos        2
#define UART_IER_RLS_IEN_Msk        (1ul << UART_IER_RLS_IENN_Pos)

#define UART_IER_THRE_IEN_Pos       1
#define UART_IER_THRE_IEN_Msk       (1ul << UART_IER_THRE_IEN_Pos)

#define UART_IER_RDA_IEN_Pos        0
#define UART_IER_RDA_IEN_Msk        (1ul << UART_IER_RDA_IEN_Pos)

/* UART FCR Bit Field Definitions */
#define UART_FCR_RTS_TRI_LEV_Pos    16
#define UART_FCR_RTS_TRI_LEV_Msk    (0xFul << UART_FCR_RTS_TRI_LEV_Pos)

#define UART_FCR_RX_DIS_Pos         8
#define UART_FCR_RX_DIS_Msk         (1ul << UART_FCR_RX_DIS_Pos)

#define UART_FCR_RFITL_Pos          4
#define UART_FCR_RFITL_Msk          (0xFul << UART_FCR_RFITL_Pos)

#define UART_FCR_TFR_Pos            2
#define UART_FCR_TFR_Msk            (1ul << UART_FCR_TFR_Pos)

#define UART_FCR_RFR_Pos            1
#define UART_FCR_RFR_Msk            (1ul << UART_FCR_RFR_Pos)

/* UART LCR Bit Field Definitions */
#define UART_LCR_BCB_Pos            6
#define UART_LCR_BCB_Msk            (1ul << UART_LCR_BCB_Pos)

#define UART_LCR_SPE_Pos            5
#define UART_LCR_SPE_Msk            (1ul << UART_LCR_SPE_Pos)

#define UART_LCR_EPE_Pos            4
#define UART_LCR_EPE_Msk            (1ul << UART_LCR_EPE_Pos)

#define UART_LCR_PBE_Pos            3
#define UART_LCR_PBE_Msk            (1ul << UART_LCR_PBE_Pos)

#define UART_LCR_NSB_Pos            2
#define UART_LCR_NSB_Msk            (1ul << UART_LCR_NSB_Pos)

#define UART_LCR_WLS_Pos            0
#define UART_LCR_WLS_Msk            (0x3ul << UART_LCR_WLS_Pos)

/* UART MCR Bit Field Definitions */
#define UART_MCR_RTS_ST_Pos         13
#define UART_MCR_RTS_ST_Msk         (1ul << UART_MCR_RTS_ST_Pos)

#define UART_MCR_LEV_RTS_Pos        9
#define UART_MCR_LEV_RTS_Msk        (1ul << UART_MCR_LEV_RTS_Pos)

#define UART_MCR_RTS_Pos            1
#define UART_MCR_RTS_Msk            (1ul << UART_MCR_RTS_Pos)


/* UART MSR Bit Field Definitions */
#define UART_MSR_LEV_CTS_Pos        8
#define UART_MSR_LEV_CTS_Msk        (1ul << UART_MSR_LEV_CTS_Pos)

#define UART_MSR_CTS_ST_Pos         4
#define UART_MSR_CTS_ST_Msk         (1ul << UART_MSR_CTS_ST_Pos)

#define UART_MSR_DCTSF_Pos          0
#define UART_MSR_DCTSF_Msk          (1ul << UART_MSR_DCTSF_Pos)


/* UART FSR Bit Field Definitions */
#define UART_FSR_TE_FLAG_Pos        28
#define UART_FSR_TE_FLAG_Msk        (1ul << UART_FSR_TE_FLAG_Pos)

#define UART_FSR_TX_OVER_IF_Pos     24
#define UART_FSR_TX_OVER_IF_Msk     (1ul << UART_FSR_TX_OVER_IF_Pos)

#define UART_FSR_TX_FULL_Pos        23
#define UART_FSR_TX_FULL_Msk        (1ul << UART_FSR_TX_FULL_Pos)

#define UART_FSR_TX_EMPTY_Pos       22
#define UART_FSR_TX_EMPTY_Msk       (1ul << UART_FSR_TX_EMPTY_Pos)

#define UART_FSR_TX_POINTER_Pos     16
#define UART_FSR_TX_POINTER_Msk     (0x3Ful << UART_FSR_TX_POINTER_Pos)

#define UART_FSR_RX_FULL_Pos        15
#define UART_FSR_RX_FULL_Msk        (1ul << UART_FSR_RX_FULL_Pos)

#define UART_FSR_RX_EMPTY_Pos       14
#define UART_FSR_RX_EMPTY_Msk       (1ul << UART_FSR_RX_EMPTY_Pos)

#define UART_FSR_RX_POINTER_Pos     8
#define UART_FSR_RX_POINTER_Msk     (0x3Ful << UART_FSR_RX_POINTER_Pos)

#define UART_FSR_BIF_Pos            6
#define UART_FSR_BIF_Msk            (1ul << UART_FSR_BIF_Pos)

#define UART_FSR_FEF_Pos            5
#define UART_FSR_FEF_Msk            (1ul << UART_FSR_FEF_Pos)

#define UART_FSR_PEF_Pos            4
#define UART_FSR_PEF_Msk            (1ul << UART_FSR_PEF_Pos)

#define UART_FSR_RS485_ADD_DETF_Pos 3
#define UART_FSR_RS485_ADD_DETF_Msk (1ul << UART_FSR_RS485_ADD_DETF_Pos)

#define UART_FSR_RX_OVER_IF_Pos     0
#define UART_FSR_RX_OVER_IF_Msk     (1ul << UART_FSR_RX_OVER_IF_Pos)

/* UART ISR Bit Field Definitions */
#define UART_ISR_HW_LIN_RX_BREAK_INT_Pos   31
#define UART_ISR_HW_LIN_RX_BREAK_INT_Msk   (1ul << UART_ISR_HW_LIN_RX_BREAK_INT_Pos)

#define UART_ISR_HW_BUF_ERR_INT_Pos        29
#define UART_ISR_HW_BUF_ERR_INT_Msk        (1ul << UART_ISR_HW_BUF_ERR_INT_Pos)

#define UART_ISR_HW_TOUT_INT_Pos           28
#define UART_ISR_HW_TOUT_INT_Msk           (1ul << UART_ISR_HW_TOUT_INT_Pos)

#define UART_ISR_HW_MODEM_INT_Pos          27
#define UART_ISR_HW_MODEM_INT_Msk          (1ul << UART_ISR_HW_MODEM_INT_Pos)

#define UART_ISR_HW_RLS_INT_Pos            26
#define UART_ISR_HW_RLS_INT_Msk            (1ul << UART_ISR_HW_RLS_INT_Pos)

#define UART_ISR_HW_LIN_RX_BREAK_IF_Pos    23
#define UART_ISR_HW_LIN_RX_BREAK_IF_Msk    (1ul << UART_ISR_HW_LIN_RX_BREAK_IF_Pos)

#define UART_ISR_HW_BUF_ERR_IF_Pos         21
#define UART_ISR_HW_BUF_ERR_IF_Msk         (1ul << UART_ISR_HW_BUF_ERR_IF_Pos)

#define UART_ISR_HW_TOUT_IF_Pos            20
#define UART_ISR_HW_TOUT_IF_Msk            (1ul << UART_ISR_HW_TOUT_IFF_Pos)

#define UART_ISR_HW_MODEM_IF_Pos           19
#define UART_ISR_HW_MODEM_IF_Msk           (1ul << UART_ISR_HW_MODEM_IF_Pos)

#define UART_ISR_HW_RLS_IF_Pos             18
#define UART_ISR_HW_RLS_IF_Msk             (1ul << UART_ISR_HW_RLS_IF_Pos)

#define UART_ISR_LIN_RX_BREAK_INT_Pos      15
#define UART_ISR_LIN_RX_BREAK_INT_Msk      (1ul << UART_ISR_LIN_RX_BREAK_INT_Pos)

#define UART_ISR_BUF_ERR_INT_Pos           13
#define UART_ISR_BUF_ERR_INT_Msk           (1ul << UART_ISR_BUF_ERR_INT_Pos)

#define UART_ISR_TOUT_INT_Pos              12
#define UART_ISR_TOUT_INT_Msk              (1ul << UART_ISR_TOUT_INT_Pos)

#define UART_ISR_MODEM_INT_Pos             11    
#define UART_ISR_MODEM_INT_Msk             (1ul << UART_ISR_MODEM_INT_Pos)

#define UART_ISR_RLS_INT_Pos               10    
#define UART_ISR_RLS_INT_Msk               (1ul << UART_ISR_RLS_INT_Pos)

#define UART_ISR_THRE_INT_Pos              9    
#define UART_ISR_THRE_INT_Msk              (1ul << UART_ISR_THRE_INT_Pos)

#define UART_ISR_RDA_INT_Pos               8    
#define UART_ISR_RDA_INT_Msk               (1ul << UART_ISR_RDA_INT_Pos)

#define UART_ISR_LIN_RX_BREAK_IF_Pos       7    
#define UART_ISR_LIN_RX_BREAK_IF_Msk       (1ul << UART_ISR_LIN_RX_BREAK_IF_Pos)

#define UART_ISR_BUF_ERR_IF_Pos            5    
#define UART_ISR_BUF_ERR_IF_Msk            (1ul << UART_ISR_BUF_ERR_IF_Pos)

#define UART_ISR_TOUT_IF_Pos               4    
#define UART_ISR_TOUT_IF_Msk               (1ul << UART_ISR_TOUT_IF_Pos)

#define UART_ISR_MODEM_IF_Pos              3    
#define UART_ISR_MODEM_IF_Msk              (1ul << UART_ISR_MODEM_IF_Pos)

#define UART_ISR_RLS_IF_Pos                2    
#define UART_ISR_RLS_IF_Msk                (1ul << UART_ISR_RLS_IF_Pos)

#define UART_ISR_THRE_IF_Pos               1    
#define UART_ISR_THRE_IF_Msk               (1ul << UART_ISR_THRE_IF_Pos)

#define UART_ISR_RDA_IF_Pos                0    
#define UART_ISR_RDA_IF_Msk                (1ul << UART_ISR_RDA_IF_Pos)


/* UART TOR Bit Field Definitions */
#define UART_TOR_DLY_Pos          8
#define UART_TOR_DLY_Msk          (0xFFul << UART_TOR_DLY_Pos)

#define UART_TOR_TOIC_Pos         0
#define UART_TOR_TOIC_Msk         (0xFFul << UART_TOR_TOIC_Pos)

/* UART BAUD Bit Field Definitions */
#define UART_BAUD_DIV_X_EN_Pos    29
#define UART_BAUD_DIV_X_EN_Msk    (1ul << UART_BAUD_DIV_X_EN_Pos)

#define UART_BAUD_DIV_X_ONE_Pos   28
#define UART_BAUD_DIV_X_ONE_Msk   (1ul << UART_BAUD_DIV_X_ONE_Pos)

#define UART_BAUD_DIVIDER_X_Pos   24
#define UART_BAUD_DIVIDER_X_Msk   (0xFul << UART_BAUD_DIVIDER_X_Pos)

#define UART_BAUD_BRD_Pos         0
#define UART_BAUD_BRD_Msk         (0xFFul << UART_BAUD_BRD_Pos)

/* UART IRCR Bit Field Definitions */
#define UART_IRCR_INV_RX_Pos      6
#define UART_IRCR_INV_RX_Msk     (1ul << UART_IRCR_INV_RX_Pos)

#define UART_IRCR_INV_TX_Pos      5
#define UART_IRCR_INV_TX_Msk     (1ul << UART_IRCR_INV_TX_Pos)

#define UART_IRCR_TX_SELECT_Pos   1
#define UART_IRCR_TX_SELECT_Msk   (1ul << UART_IRCR_TX_SELECT_Pos)

/* UART ALT_CSR Bit Field Definitions */
#define UART_ALT_CSR_ADDR_MATCH_Pos      24
#define UART_ALT_CSR_ADDR_MATCH_Msk     (0xFFul << UART_ALT_CSR_ADDR_MATCH_Pos)

#define UART_ALT_CSR_RS485_ADD_EN_Pos   15
#define UART_ALT_CSR_RS485_ADD_EN_Msk   (1ul << UART_ALT_CSR_RS485_ADD_EN_Pos)

#define UART_ALT_CSR_RS485_AUD_Pos      10
#define UART_ALT_CSR_RS485_AUD_Msk      (1ul << UART_ALT_CSR_RS485_AUD_Pos)

#define UART_ALT_CSR_RS485_AAD_Pos      9
#define UART_ALT_CSR_RS485_AAD_Msk      (1ul << UART_ALT_CSR_RS485_AAD_Pos)

#define UART_ALT_CSR_RS485_NMM_Pos      8
#define UART_ALT_CSR_RS485_NMM_Msk      (1ul << UART_ALT_CSR_RS485_NMM_Pos)

#define UART_ALT_CSR_LIN_TX_EN_Pos      7
#define UART_ALT_CSR_LIN_TX_EN_Msk      (1ul << UART_ALT_CSR_LIN_TX_EN_Pos)

#define UART_ALT_CSR_LIN_RX_EN_Pos      6
#define UART_ALT_CSR_LIN_RX_EN_Msk      (1ul << UART_ALT_CSR_LIN_RX_EN_Pos)

#define UART_ALT_CSR_LIN_BKFL_Pos       0
#define UART_ALT_CSR_LIN_BKFL_Msk       (0xFul << UART_ALT_CSR_LIN_BKFL_Pos)

/* UART FUN_SEL Bit Field Definitions */
#define UART_FUN_SEL_FUN_SEL_Pos        0
#define UART_FUN_SEL_FUN_SEL_Msk       (0x3ul << UART_FUN_SEL_FUN_SEL_Pos)


/*----------------------------- Timer Controller -----------------------------*/
typedef struct
{
    __IO uint32_t  PRESCALE:8;
    __I  uint32_t  RESERVE0:8;
    __IO uint32_t  TDR_EN:1;
    __I  uint32_t  RESERVE1:7;
    __IO uint32_t  CTB:1;          
    __IO uint32_t  CACT:1;        
    __IO uint32_t  CRST:1;
    __IO uint32_t  MODE:2;
    __IO uint32_t  IE:1;
    __IO uint32_t  CEN:1;
    __IO uint32_t  DBGACK_TMR:1;
} TIMER_TCSR_T;

typedef __IO uint32_t TIMER_TCMPR_T;

typedef struct
{
    __IO uint32_t  TIF:1;
    __I  uint32_t  RESERVE:31;
} TIMER_TISR_T;

typedef __IO uint32_t TIMER_TDR_T;

typedef __IO uint32_t TIMER_TCAP_T;

typedef struct
{
    __IO uint32_t  TX_PHASE:1;
    __IO uint32_t  TEX_EDGE:2;
    __IO uint32_t  TEXEN:1;
    __IO uint32_t  RSTCAPSEL:1;
    __IO uint32_t  TEXIEN:1;
    __IO uint32_t  TEXDB:1;
    __IO uint32_t  TCDB:1;
    __I  uint32_t  RESERVE:24;
} TIMER_TEXCON_T;

typedef struct
{
    __IO uint32_t  TEXIF:1;
    __I  uint32_t  RESERVE:31;
} TIMER_TEXISR;

typedef struct
{
    union {
        __IO uint32_t u32TCSR;
        struct {
            __IO uint32_t  PRESCALE:8;
            __I  uint32_t  RESERVE0:8;
            __IO uint32_t  TDR_EN:1;
            __I  uint32_t  RESERVE1:7;
            __IO uint32_t  CTB:1;          
            __IO uint32_t  CACT:1;        
            __IO uint32_t  CRST:1;
            __IO uint32_t  MODE:2;
            __IO uint32_t  IE:1;
            __IO uint32_t  CEN:1;
            __IO uint32_t  DBGACK_TMR:1;
        } TCSR;
    };

    union {
        __IO uint32_t u32TCMPR;
        __IO uint32_t TCMPR;
    };

    union {
        __IO uint32_t u32TISR;
        struct {
            __IO uint32_t  TIF:1;
            __I  uint32_t  RESERVE:31;
        } TISR;
    };

    union {
        __IO uint32_t u32TDR;
        __IO uint32_t TDR;
    };

    union {
        __IO uint32_t u32TCAP;
        __IO uint32_t TCAP;
    };

    union {
        __IO uint32_t u32TEXCON;
        struct {
            __IO uint32_t  TX_PHASE:1;
            __IO uint32_t  TEX_EDGE:2;
            __IO uint32_t  TEXEN:1;
            __IO uint32_t  RSTCAPSEL:1;
            __IO uint32_t  TEXIEN:1;
            __IO uint32_t  TEXDB:1;
            __IO uint32_t  TCDB:1;
            __I  uint32_t  RESERVE:24;
        } TEXCON;
    };

    union {
        __IO uint32_t u32TEXISR;
        struct {
            __IO uint32_t  TEXIF:1;
            __I  uint32_t  RESERVE:31;
        } TEXISR;
    };
} TIMER_T;

/* Timer TCSR Bit Field Definitions */
#define TIMER_TCSR_DBGACK_TMR_Pos   31
#define TIMER_TCSR_DBGACK_TMR_Msk   (1ul << TIMER_TCSR_DBGACK_TMR_Pos)

#define TIMER_TCSR_CEN_Pos          30
#define TIMER_TCSR_CEN_Msk          (1ul << TIMER_TCSR_CEN_Pos)

#define TIMER_TCSR_IE_Pos           29
#define TIMER_TCSR_IE_Msk           (1ul << TIMER_TCSR_IE_Pos)

#define TIMER_TCSR_MODE_Pos         27
#define TIMER_TCSR_MODE_Msk         (0x3ul << TIMER_TCSR_MODE_Pos)

#define TIMER_TCSR_CRST_Pos         26
#define TIMER_TCSR_CRST_Msk         (1ul << TIMER_TCSR_CRST_Pos)

#define TIMER_TCSR_CACT_Pos         25
#define TIMER_TCSR_CACT_Msk         (1ul << TIMER_TCSR_CACT_Pos)

#define TIMER_TCSR_CTB_Pos          24
#define TIMER_TCSR_CTB_Msk          (1ul << TIMER_TCSR_CTB_Pos)

#define TIMER_TCSR_TDR_EN_Pos       16
#define TIMER_TCSR_TDR_EN_Msk       (1ul << TIMER_TCSR_TDR_EN_Pos)

#define TIMER_TCSR_PRESCALE_Pos     0
#define TIMER_TCSR_PRESCALE_Msk     (0xFFul << TIMER_TCSR_PRESCALE_Pos)

/* Timer TCMPR Bit Field Definitions */
#define TIMER_TCMP_Pos              0
#define TIMER_TCMP_Msk              (0xFFFFFFul << TIMER_TCMP_Pos)

/* Timer TISR Bit Field Definitions */
#define TIMER_TISR_TIF_Pos          0
#define TIMER_TISR_TIF_Msk          (1ul << TIMER_TISR_TIF_Pos)

/* Timer TDR Bit Field Definitions */
#define TIMER_TDR_Pos               0
#define TIMER_TDR_Msk               (0xFFFFFFul << TIMER_TDR_Pos)

/* Timer TCAP Bit Field Definitions */
#define TIMER_TCAP_Pos              0
#define TIMER_TCAP_Msk              (0xFFFFFFul << TIMER_TCAP_Pos)

/* Timer TEXCON Bit Field Definitions */
#define TIMER_TEXCON_TCDB_Pos       7
#define TIMER_TEXCON_TCDB_Msk       (1ul << TIMER_TEXCON_TCDB_Pos)

#define TIMER_TEXCON_TEXDB_Pos      6
#define TIMER_TEXCON_TEXDB_Msk      (1ul << TIMER_TEXCON_TEXDB_Pos)

#define TIMER_TEXCON_TEXIEN_Pos     5
#define TIMER_TEXCON_TEXIEN_Msk     (1ul << TIMER_TEXCON_TEXIEN_Pos)

#define TIMER_TEXCON_RSTCAPSEL_Pos  4
#define TIMER_TEXCON_RSTCAPSEL_Msk  (1ul << TIMER_TEXCON_RSTCAPSEL_Pos)

#define TIMER_TEXCON_TEXEN_Pos      3
#define TIMER_TEXCON_TEXEN_Msk      (1ul << TIMER_TEXCON_TEXEN_Pos)

#define TIMER_TEXCON_TEX_EDGE_Pos   1
#define TIMER_TEXCON_TEX_EDGE_Msk   (0x3ul << TIMER_TEXCON_TEX_EDGE_Pos)

#define TIMER_TEXCON_TX_PHASE_Pos   0
#define TIMER_TEXCON_TX_PHASE_Msk   (1ul << TIMER_TEXCON_TX_PHASE_Pos)

/* Timer TEXISR Bit Field Definitions */
#define TIMER_TEXISR_TEXIF_Pos      0
#define TIMER_TEXISR_TEXIF_Msk      (1ul << TIMER_TEXISR_TEXIF_Pos)


/*----------------------------- WDT Controller -----------------------------*/
typedef struct
{
    __IO uint32_t  WTR:1;
    __IO uint32_t  WTRE:1;
    __IO uint32_t  WTRF:1;
    __IO uint32_t  WTIF:1;
    __IO uint32_t  WTWKE:1;
    __IO uint32_t  WTWKF:1;
    __IO uint32_t  WTIE:1;
    __IO uint32_t  WTE:1;
    __IO uint32_t  WTIS:3;
    __I  uint32_t  RESERVE1:20;
    __IO uint32_t  DBGACK_WDT:1;
} WDT_WTCR_T;

typedef struct
{
    union {
        __IO uint32_t u32WTCR;
        struct {
            __IO uint32_t  WTR:1;
            __IO uint32_t  WTRE:1;
            __IO uint32_t  WTRF:1;
            __IO uint32_t  WTIF:1;
            __IO uint32_t  WTWKE:1;
            __IO uint32_t  WTWKF:1;
            __IO uint32_t  WTIE:1;
            __IO uint32_t  WTE:1;
            __IO uint32_t  WTIS:3;
            __I  uint32_t  RESERVE1:20;
            __IO uint32_t  DBGACK_WDT:1;
        } WTCR;
    };
} WDT_T;

/* WDT WTCR Bit Field Definitions */
#define WDT_WTCR_DBGACK_WDT_Pos 31
#define WDT_WTCR_DBGACK_WDT_Msk (1ul << WDT_WTCR_DBGACK_WDT_Pos)

#define WDT_WTCR_WTIS_Pos       8  
#define WDT_WTCR_WTIS_Msk       (0x3ul << WDT_WTCR_WTIS_Pos)

#define WDT_WTCR_WTE_Pos        7  
#define WDT_WTCR_WTE_Msk        (1ul << WDT_WTCR_WTE_Pos)

#define WDT_WTCR_WTIE_Pos       6  
#define WDT_WTCR_WTIE_Msk       (1ul << WDT_WTCR_WTIE_Pos)

#define WDT_WTCR_WTWKF_Pos      5  
#define WDT_WTCR_WTWKF_Msk      (1ul << WDT_WTCR_WTWKF_Pos)

#define WDT_WTCR_WTWKE_Pos      4  
#define WDT_WTCR_WTWKE_Msk      (1ul << WDT_WTCR_WTWKE_Pos)

#define WDT_WTCR_WTIF_Pos       3  
#define WDT_WTCR_WTIF_Msk       (1ul << WDT_WTCR_WTIF_Pos)

#define WDT_WTCR_WTRF_Pos       2  
#define WDT_WTCR_WTRF_Msk       (1ul << WDT_WTCR_WTRF_Pos)

#define WDT_WTCR_WTRE_Pos       1  
#define WDT_WTCR_WTRE_Msk       (1ul << WDT_WTCR_WTRE_Pos)

#define WDT_WTCR_WTR_Pos        0  
#define WDT_WTCR_WTR_Msk        (1ul << WDT_WTCR_WTR_Pos)


/*------------------------- SPI Interface Controller -------------------------*/
typedef struct
{
    __IO uint32_t  GO_BUSY:1;
    __IO uint32_t  RX_NEG:1;
    __IO uint32_t  TX_NEG:1;
    __IO uint32_t  TX_BIT_LEN:5;
    __IO uint32_t  TX_NUM:2;
    __IO uint32_t  LSB:1;
    __IO uint32_t  CLKP:1;
    __IO uint32_t  SP_CYCLE:4;
    __IO uint32_t  IF:1;
    __IO uint32_t  IE:1;
    __IO uint32_t  SLAVE:1;
    __IO uint32_t  REORDER:2;
    __I  uint32_t  RESERVE0:1;
    __IO uint32_t  TWOB:1;
    __IO uint32_t  VARCLK_EN:1;
    __I  uint32_t  RESERVE1:8;
} SPI_CNTRL_T;

typedef struct
{
    __IO uint32_t  DIVIDER:16;
    __IO uint32_t  DIVIDER2:16;
} SPI_DIVIDER_T;

typedef struct
{
    __IO uint32_t  SSR:2;
    __IO uint32_t  SS_LVL:1;
    __IO uint32_t  AUTOSS:1;
    __IO uint32_t  SS_LTRIG:1;
    __I  uint32_t  LTRIG_FLAG:1;
    __I  uint32_t  RESERVE:26;
} SPI_SSR_T;


typedef __I  uint32_t   SPI_RX_T;
typedef __O  uint32_t   SPI_TX_T;
typedef __IO uint32_t   SPI_VARCLK_T;

typedef struct
{
    __IO uint32_t  TX_DMA_GO:1;
    __IO uint32_t  RX_DMA_GO:1;
    __I  uint32_t  RESERVE:30;
} SPI_DMA_T;

typedef struct
{
    __IO uint32_t  DIV_ONE:1;
    __I  uint32_t  RESERVE0:7;
    __IO uint32_t  NOSLVSEL:1;
    __IO uint32_t  SLV_ABORT:1;
    __IO uint32_t  SSTA_INTEN:1;
    __IO uint32_t  SLV_START_INTSTS:1;
    __I  uint32_t  RESERVE1:20;
} SPI_CNTRL2_T;

typedef struct
{
    union {
        __IO uint32_t u32CNTRL;
        struct {
            __IO uint32_t  GO_BUSY:1;
            __IO uint32_t  RX_NEG:1;
            __IO uint32_t  TX_NEG:1;
            __IO uint32_t  TX_BIT_LEN:5;
            __IO uint32_t  TX_NUM:2;
            __IO uint32_t  LSB:1;
            __IO uint32_t  CLKP:1;
            __IO uint32_t  SP_CYCLE:4;
            __IO uint32_t  IF:1;
            __IO uint32_t  IE:1;
            __IO uint32_t  SLAVE:1;
            __IO uint32_t  REORDER:2;
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  TWOB:1;
            __IO uint32_t  VARCLK_EN:1;
            __I  uint32_t  RESERVE1:8;
        } CNTRL;
    };

    union {
        __IO uint32_t u32DIVIDER;
        struct {
            __IO uint32_t  DIVIDER:16;
            __IO uint32_t  DIVIDER2:16;
        } DIVIDER;
    };

    union {
        __IO uint32_t u32SSR;
        struct {
            __IO uint32_t  SSR:2;
            __IO uint32_t  SS_LVL:1;
            __IO uint32_t  AUTOSS:1;
            __IO uint32_t  SS_LTRIG:1;
            __I  uint32_t  LTRIG_FLAG:1;
            __I  uint32_t  RESERVE:26;
        } SSR;
    };

    __I uint32_t RESERVE0;

    union {
        __I uint32_t u32RX[2];
        __I uint32_t RX[2];
    };

    __I uint32_t RESERVE1;
    __I uint32_t RESERVE2;

    union {
        __O uint32_t u32TX[2];
        __O uint32_t TX[2];
    };

    __I uint32_t RESERVE3;
    __I uint32_t RESERVE4;
    __I uint32_t RESERVE5;

    union {
        __IO uint32_t u32VARCLK;
        __IO uint32_t VARCLK;
    };

    union {
        __IO uint32_t u32DMA;
        struct {
            __IO uint32_t  TX_DMA_GO:1;
            __IO uint32_t  RX_DMA_GO:1;
            __I  uint32_t  RESERVE:30;
        } DMA;
    };

    union {
        __IO uint32_t u32CNTRL2;
        struct {
            __IO uint32_t  DIV_ONE:1;
            __I  uint32_t  RESERVE0:7;
            __IO uint32_t  NOSLVSEL:1;
            __IO uint32_t  SLV_ABORT:1;
            __IO uint32_t  SSTA_INTEN:1;
            __IO uint32_t  SLV_START_INTSTS:1;
            __I  uint32_t  RESERVE1:20;
        } CNTRL2;
    };

} SPI_T;


/* SPI_CNTRL Bit Field Definitions */
#define SPI_CNTRL_VARCLK_EN_Pos    23
#define SPI_CNTRL_VARCLK_EN_Msk    (1ul << SPI_CNTRL_VARCLK_EN_Pos)

#define SPI_CNTRL_TWOB_Pos         22
#define SPI_CNTRL_TWOB_Msk         (1ul << SPI_CNTRL_TWOB_Pos)

#define SPI_CNTRL_REORDER_Pos      19
#define SPI_CNTRL_REORDER_Msk      (3ul << SPI_CNTRL_REORDER_Pos)

#define SPI_CNTRL_SLAVE_Pos        18
#define SPI_CNTRL_SLAVE_Msk        (1ul << SPI_CNTRL_SLAVE_Pos)

#define SPI_CNTRL_IE_Pos           17
#define SPI_CNTRL_IE_Msk           (1ul << SPI_CNTRL_IE_Pos)

#define SPI_CNTRL_IF_Pos           16
#define SPI_CNTRL_IF_Msk           (1ul << SPI_CNTRL_IF_Pos)

#define SPI_CNTRL_SP_CYCLE_Pos     12
#define SPI_CNTRL_SP_CYCLE_Msk     (0xFul << SPI_CNTRL_SP_CYCLE_Pos)

#define SPI_CNTRL_CLKP_Pos         11
#define SPI_CNTRL_CLKP_Msk         (1ul << SPI_CNTRL_CLKP_Pos)

#define SPI_CNTRL_LSB_Pos          10
#define SPI_CNTRL_LSB_Msk          (1ul << SPI_CNTRL_LSB_Pos)

#define SPI_CNTRL_TX_NUM_Pos       8
#define SPI_CNTRL_TX_NUM_Msk       (3ul << SPI_CNTRL_TX_NUM_Pos)

#define SPI_CNTRL_TX_BIT_LEN_Pos   3
#define SPI_CNTRL_TX_BIT_LEN_Msk   (0x1Ful << SPI_CNTRL_TX_BIT_LEN_Pos)

#define SPI_CNTRL_TX_NEG_Pos       2
#define SPI_CNTRL_TX_NEG_Msk       (1ul << SPI_CNTRL_TX_NEG_Pos)

#define SPI_CNTRL_RX_NEG_Pos       1
#define SPI_CNTRL_RX_NEG_Msk       (1ul << SPI_CNTRL_RX_NEG_Pos)

#define SPI_CNTRL_GO_BUSY_Pos      0
#define SPI_CNTRL_GO_BUSY_Msk      (1ul << SPI_CNTRL_GO_BUSY_Pos)


/* SPI_DIVIDER Bit Field Definitions */
#define SPI_DIVIDER_DIVIDER2_Pos   16
#define SPI_DIVIDER_DIVIDER2_Msk   (0xFFFFul << SPI_DIVIDER_DIVIDER2_Pos)

#define SPI_DIVIDER_DIVIDER_Pos    0
#define SPI_DIVIDER_DIVIDER_Msk    (0xFFFFul << SPI_DIVIDER_DIVIDER_Pos)

/* SPI_SSR Bit Field Definitions */
#define SPI_SSR_LTRIG_FLAG_Pos     5
#define SPI_SSR_LTRIG_FLAG_Msk     (1ul << SPI_SSR_LTRIG_FLAG_Pos)

#define SPI_SSR_SS_LTRIG_Pos       4
#define SPI_SSR_SS_LTRIG_Msk       (1ul << SPI_SSR_SS_LTRIG_Pos)

#define SPI_SSR_AUTOSS_Pos         3
#define SPI_SSR_AUTOSS_Msk         (1ul << SPI_SSR_AUTOSS_Pos)

#define SPI_SSR_SS_LVL_Pos         2
#define SPI_SSR_SS_LVL_Msk         (1ul << SPI_SSR_SS_LVL_Pos)

#define SPI_SSR_SSR_Pos            0
#define SPI_SSR_SSR_Msk            (3ul << SPI_SSR_SSR_Pos)

/* SPI_DMA Bit Field Definitions */
#define SPI_DMA_RX_DMA_GO_Pos   1
#define SPI_DMA_RX_DMA_GO_Msk   (1ul << SPI_DMA_RX_DMA_GO_Pos)

#define SPI_DMA_TX_DMA_GO_Pos   0
#define SPI_DMA_TX_DMA_GO_Msk   (1ul << SPI_DMA_TX_DMA_GO_Pos)

/* SPI_CNTRL2 Bit Field Definitions */
#define SPI_CNTRL2_SLV_START_INTSTS_Pos   11
#define SPI_CNTRL2_SLV_START_INTSTS_Msk   (1ul << SPI_CNTRL2_SLV_START_INTSTS_Pos)

#define SPI_CNTRL2_SSTA_INTEN_Pos   10
#define SPI_CNTRL2_SSTA_INTEN_Msk   (1ul << SPI_CNTRL2_SSTA_INTEN_Pos)

#define SPI_CNTRL2_SLV_ABORT_Pos    9
#define SPI_CNTRL2_SLV_ABORT_Msk    (1ul << SPI_CNTRL2_SLV_ABORT_Pos)

#define SPI_CNTRL2_NOSLVSEL_Pos     8
#define SPI_CNTRL2_NOSLVSEL_Msk     (1ul << SPI_CNTRL2_NOSLVSEL_Pos)

#define SPI_CNTRL2_DIV_ONE_Pos      0
#define SPI_CNTRL2_DIV_ONE_Msk      (1ul << SPI_CNTRL2_DIV_ONE_Pos)


/*------------------------------ I2C Controller ------------------------------*/
typedef struct
{
    __I  uint32_t  RESERVE0:2;
    __IO uint32_t  AA:1;
    __IO uint32_t  SI:1;
    __IO uint32_t  STO:1;
    __IO uint32_t  STA:1;
    __IO uint32_t  ENS1:1;
    __IO uint32_t  EI:1;
    __I  uint32_t  RESERVE1:24;
} I2C_I2CON_T;

typedef struct
{
    __IO uint32_t  GC:1;
    __IO uint32_t  I2CADDR:7;
    __I  uint32_t  RESERVE:24;
} I2C_I2CADDR_T;

typedef __IO uint32_t I2C_I2CDAT_T;

typedef __I  uint32_t I2C_I2CSTATUS_T;

typedef __IO uint32_t I2C_I2CLK_T;

typedef struct
{
    __IO uint32_t  TIF:1;
    __IO uint32_t  DIV4:1;
    __IO uint32_t  ENTI:1;
    __I  uint32_t  RESERVE:29;
} I2C_I2CTOC_T;

typedef struct
{
    __I  uint32_t  RESERVE0:1;
    __IO uint32_t  I2CADM:7;
    __I  uint32_t  RESERVE1:24;
} I2C_I2CADM_T;

typedef struct
{
    union 
    {
        __IO uint32_t u32I2CON;
        
        struct 
        {
            __I  uint32_t  RESERVE0:2;
            __IO uint32_t  AA:1;
            __IO uint32_t  SI:1;
            __IO uint32_t  STO:1;
            __IO uint32_t  STA:1;
            __IO uint32_t  ENS1:1;
            __IO uint32_t  EI:1;
            __I  uint32_t  RESERVE1:24;
        } I2CON;
    };

    union 
    {
        __IO uint32_t u32I2CADDR0;
        
        struct 
        {
            __IO uint32_t  GC:1;
            __IO uint32_t  I2CADDR:7;
            __I  uint32_t  RESERVE:24;
        } I2CADDR0;
    };

    union 
    {
        __IO uint32_t u32I2CDAT;
        __IO uint32_t I2CDAT;
    };

    union 
    {
        __I uint32_t u32I2CSTATUS;
        __I uint32_t I2CSTATUS;
    };
    
    union 
    {
        __IO uint32_t u32I2CLK;
        __IO uint32_t I2CLK;
    };

    union 
    {
        __IO uint32_t u32I2CTOC;
        
        struct 
        {
            __IO uint32_t  TIF:1;
            __IO uint32_t  DIV4:1;
            __IO uint32_t  ENTI:1;
            __I  uint32_t  RESERVE:29;
        } I2CTOC;
    };

    union 
    {
        __IO uint32_t u32I2CADDR1;
        
        struct 
        {
            __IO uint32_t  GC:1;
            __IO uint32_t  I2CADDR:7;
            __I  uint32_t  RESERVE:24;
        } I2CADDR1;
    };
    
    union 
    {
        __IO uint32_t u32I2CADDR2;
        
        struct 
        {
            __IO uint32_t  GC:1;
            __IO uint32_t  I2CADDR:7;
            __I  uint32_t  RESERVE:24;
        } I2CADDR2;
    };    
    
    union 
    {
        __IO uint32_t u32I2CADDR3;
        
        struct 
        {
            __IO uint32_t  GC:1;
            __IO uint32_t  I2CADDR:7;
            __I  uint32_t  RESERVE:24;
        } I2CADDR3;
    }; 
    
    union 
    {
        __IO uint32_t u32I2CADM0;
        
        struct 
        {
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  I2CADM:7;
            __I  uint32_t  RESERVE1:24;
        } I2CADM0;
    };     
    
    union 
    {
        __IO uint32_t u32I2CADM1;
        
        struct 
        {
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  I2CADM:7;
            __I  uint32_t  RESERVE1:24;
        } I2CADM1;
    };

    union 
    {
        __IO uint32_t u32I2CADM2;
        
        struct 
        {
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  I2CADM:7;
            __I  uint32_t  RESERVE1:24;
        } I2CADM2;
    };
       
    union 
    {
        __IO uint32_t u32I2CADM3;
        
        struct 
        {
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  I2CADM:7;
            __I  uint32_t  RESERVE1:24;
        } I2CADM3;
    };       
} I2C_T;

/* I2C I2CON Bit Field Definitions */
#define I2C_I2CON_EI_Pos                        7
#define I2C_I2CON_EI_Msk                        (1ul << I2C_I2CON_EI_Pos)

#define I2C_I2CON_ENS1_Pos                      6
#define I2C_I2CON_ENS1_Msk                      (1ul << I2C_I2CON_ENS1_Pos)

#define I2C_I2CON_STA_Pos                       5
#define I2C_I2CON_STA_Msk                       (1ul << I2C_I2CON_STA_Pos)

#define I2C_I2CON_STO_Pos                       4
#define I2C_I2CON_STO_Msk                       (1ul << I2C_I2CON_STO_Pos)

#define I2C_I2CON_SI_Pos                        3
#define I2C_I2CON_SI_Msk                        (1ul << I2C_I2CON_SI_Pos)

#define I2C_I2CON_AA_Pos                        2
#define I2C_I2CON_AA_Msk                        (1ul << I2C_I2CON_AA_Pos)

/* I2C I2CADDR Bit Field Definitions */
#define I2C_I2CADDR_I2CADDR_Pos                 1
#define I2C_I2CADDR_I2CADDR_Msk                 (0x7Ful << I2C_I2CADDR_I2CADDR_Pos)

#define I2C_I2CADDR_GC_Pos                      0
#define I2C_I2CADDR_GC_Msk                      (1ul << I2C_I2CADDR_GC_Pos)

/* I2C I2CDAT Bit Field Definitions */
#define I2C_I2CDAT_I2CDAT_Pos                   0
#define I2C_I2CDAT_I2CDAT_Msk                   (0xFFul << I2C_I2CDAT_I2CDAT_Pos)

/* I2C I2CSTATUS Bit Field Definitions */
#define I2C_I2CSTATUS_I2CSTATUS_Pos             0
#define I2C_I2CSTATUS_I2CSTATUS_Msk             (0xFFul << I2C_I2CSTATUS_I2CSTATUS_Pos)

/* I2C I2CLK Bit Field Definitions */
#define I2C_I2CLK_I2CLK_Pos                     0
#define I2C_I2CLK_I2CLK_Msk                     (0xFFul << I2C_I2CLK_I2CLK_Pos)

/* I2C I2CTOC Bit Field Definitions */
#define I2C_I2CTOC_ENTI_Pos                     2
#define I2C_I2CTOC_ENTI_Msk                     (1ul << I2C_I2CTOC_ENTI_Pos)

#define I2C_I2CTOC_DIV4_Pos                     1
#define I2C_I2CTOC_DIV4_Msk                     (1ul << I2C_I2CTOC_DIV4_Pos)

#define I2C_I2CTOC_TIF_Pos                      0
#define I2C_I2CTOC_TIF_Msk                      (1ul << I2C_I2CTOC_TIF_Pos)

/* I2C I2CADM Bit Field Definitions */
#define I2C_I2CADM_I2CADM_Pos                   1
#define I2C_I2CADM_I2CADM_Msk                   (0x7Ful << I2C_I2CADM_I2CADM_Pos)


/*----------------------------- RTC Controller -------------------------------*/
typedef __IO uint32_t RTC_INIR_T;

typedef struct
{
    __IO uint32_t  AER:16;
    __I  uint32_t  ENF:1;
    __I  uint32_t  RESERVE1:15;
} RTC_AER_T;

typedef struct
{
    __IO uint32_t  FRACTION:6;
    __I  uint32_t  RESERVE0:2;
    __IO uint32_t  INTEGER:4;
    __I  uint32_t  RESERVE1:20;
} RTC_FCR_T;

typedef struct
{
    __IO uint32_t  SEC1:4;
    __IO uint32_t  SEC10:3;
    __I  uint32_t  RESERVE0:1;
    __IO uint32_t  MIN1:4;
    __IO uint32_t  MIN10:3;
    __I  uint32_t  RESERVE1:1;
    __IO uint32_t  HR1:4;
    __IO uint32_t  HR10:2;
    __I  uint32_t  RESERVE2:10;
} RTC_TLR_T;

typedef struct
{
    __IO uint32_t  DAY1:4;
    __IO uint32_t  DAY10:2;
    __I  uint32_t  RESERVE0:2;
    __IO uint32_t  MON1:4;
    __IO uint32_t  MON10:1;
    __I  uint32_t  RESERVE1:3;
    __IO uint32_t  YEAR1:4;
    __IO uint32_t  YEAR10:4;
    __I  uint32_t  RESERVE2:8;
} RTC_CLR_T;

typedef struct
{
    __IO uint32_t  HR24_HR12:1;
    __I  uint32_t  RESERVE:31;
} RTC_TSSR_T;

typedef struct
{
    __IO uint32_t  DWR:3;
    __I  uint32_t  RESERVE:29;
} RTC_DWR_T;

typedef RTC_TLR_T   RTC_TAR_T;

typedef RTC_CLR_T   RTC_CAR_T;

typedef struct
{
    __IO uint32_t  LIR:1;
    __I  uint32_t  RESERVE:31;
} RTC_LIR_T;

typedef struct
{
    __IO uint32_t  AIER:1;
    __IO uint32_t  TIER:1;
    __I  uint32_t  RESERVE:30;
} RTC_RIER_T;

typedef struct
{
    __IO uint32_t  AIF:1;
    __IO uint32_t  TIF:1;
    __I  uint32_t  RESERVE:30;
} RTC_RIIR_T;

typedef struct
{
    __IO uint32_t  TTR:3;
    __IO uint32_t  TWKE:1;
    __I  uint32_t  RESERVE:28;
} RTC_TTR_T;

typedef struct
{
    union {
        __IO uint32_t u32INIR;
        __IO uint32_t INIR;
    };

    union {
        __IO uint32_t u32AER;
        struct {
            __IO uint32_t  AER:16;
            __I  uint32_t  ENF:1;
            __I  uint32_t  RESERVE1:15;
        } AER;
    };

    union {
        __IO uint32_t u32FCR;
        struct {
            __IO uint32_t  FRACTION:6;
            __I  uint32_t  RESERVE0:2;
            __IO uint32_t  INTEGER:4;
            __I  uint32_t  RESERVE1:20;
        } FCR;
    };

    union {
        __IO uint32_t u32TLR;
        struct {
            __IO uint32_t  SEC1:4;
            __IO uint32_t  SEC10:3;
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  MIN1:4;
            __IO uint32_t  MIN10:3;
            __I  uint32_t  RESERVE1:1;
            __IO uint32_t  HR1:4;
            __IO uint32_t  HR10:2;
            __I  uint32_t  RESERVE2:10;
        } TLR;
    };

    union {
        __IO uint32_t u32CLR;
        struct {
            __IO uint32_t  DAY1:4;
            __IO uint32_t  DAY10:2;
            __I  uint32_t  RESERVE0:2;
            __IO uint32_t  MON1:4;
            __IO uint32_t  MON10:1;
            __I  uint32_t  RESERVE1:3;
            __IO uint32_t  YEAR1:4;
            __IO uint32_t  YEAR10:4;
            __I  uint32_t  RESERVE2:8;
        } CLR;
    };

    union {
        __IO uint32_t u32TSSR;
        struct {
            __IO uint32_t  HR24_HR12:1;
            __I  uint32_t  RESERVE:31;
        } TSSR;
    };

    union {
        __IO uint32_t u32DWR;
        struct {
            __IO uint32_t  DWR:3;
            __I  uint32_t  RESERVE:29;
        } DWR;
    };

    union {
        __IO uint32_t u32TAR;
        struct {
            __IO uint32_t  SEC1:4;
            __IO uint32_t  SEC10:3;
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  MIN1:4;
            __IO uint32_t  MIN10:3;
            __I  uint32_t  RESERVE1:1;
            __IO uint32_t  HR1:4;
            __IO uint32_t  HR10:2;
            __I  uint32_t  RESERVE2:10;
        } TAR;
    };

    union {
        __IO uint32_t u32CAR;
        struct {
            __IO uint32_t  DAY1:4;
            __IO uint32_t  DAY10:2;
            __I  uint32_t  RESERVE0:2;
            __IO uint32_t  MON1:4;
            __IO uint32_t  MON10:1;
            __I  uint32_t  RESERVE1:3;
            __IO uint32_t  YEAR1:4;
            __IO uint32_t  YEAR10:4;
            __I  uint32_t  RESERVE2:8;
        } CAR;
    };

    union {
        __IO uint32_t u32LIR;
        struct {
            __IO uint32_t  LIR:1;
            __I  uint32_t  RESERVE:31;
        } LIR;
    };

    union {
        __IO uint32_t u32RIER;
        struct {
            __IO uint32_t  AIER:1;
            __IO uint32_t  TIER:1;
            __I  uint32_t  RESERVE:30;
        } RIER;
    };

    union {
        __IO uint32_t u32RIIR;
        struct {
            __IO uint32_t  AIF:1;
            __IO uint32_t  TIF:1;
            __I  uint32_t  RESERVE:30;
        } RIIR;
    };

    union {
        __IO uint32_t u32TTR;
        struct {
            __IO uint32_t  TTR:3;
            __IO uint32_t  TWKE:1;
            __I  uint32_t  RESERVE:28;
        } TTR;
    };
} RTC_T;

/* RTC INIR Bit Field Definitions */
#define RTC_INIR_INIR_Pos       0  
#define RTC_INIR_INIR_Msk       (0xFFFFFFFFul << RTC_INIR_INIR_Pos)

#define RTC_INIR_ACTIVE_Pos     0  
#define RTC_INIR_ACTIVE_Msk     (1ul << RTC_INIR_ACTIVE_Pos)

/* RTC AER Bit Field Definitions */
#define RTC_AER_ENF_Pos         16  
#define RTC_AER_ENF_Msk         (1ul << RTC_AER_ENF_Pos)

#define RTC_AER_AER_Pos         0  
#define RTC_AER_AER_Msk         (0xFFFFul << RTC_AER_AER_Pos)

/* RTC FCR Bit Field Definitions */
#define RTC_FCR_INTEGER_Pos     8  
#define RTC_FCR_INTEGER_Msk     (0xFul << RTC_FCR_INTEGER_Pos)

#define RTC_FCR_FRACTION_Pos    0  
#define RTC_FCR_FRACTION_Msk    (0x3Ful << RTC_FCR_FRACTION_Pos)

/* RTC TLR Bit Field Definitions */
#define RTC_TLR_10HR_Pos        20  
#define RTC_TLR_10HR_Msk        (0x3ul << RTC_TLR_10HR_Pos)

#define RTC_TLR_1HR_Pos         16  
#define RTC_TLR_1HR_Msk         (0xFul << RTC_TLR_1HR_Pos)

#define RTC_TLR_10MIN_Pos       12  
#define RTC_TLR_10MIN_Msk       (0x7ul << RTC_TLR_10MIN_Pos)

#define RTC_TLR_1MIN_Pos        8  
#define RTC_TLR_1MIN_Msk        (0xFul << RTC_TLR_1MIN_Pos)

#define RTC_TLR_10SEC_Pos       4  
#define RTC_TLR_10SEC_Msk       (0x7ul << RTC_TLR_10SEC_Pos)

#define RTC_TLR_1SEC_Pos        0  
#define RTC_TLR_1SEC_Msk        (0xFul << RTC_TLR_1SEC_Pos)

/* RTC CLR Bit Field Definitions */
#define RTC_CLR_10YEAR_Pos      20  
#define RTC_CLR_10YEAR_Msk      (0xFul << RTC_CLR_10YEAR_Pos)

#define RTC_CLR_1YEAR_Pos       16  
#define RTC_CLR_1YEAR_Msk       (0xFul << RTC_CLR_1YEAR_Pos)

#define RTC_CLR_10MON_Pos       12  
#define RTC_CLR_10MON_Msk       (1ul << RTC_CLR_10MON_Pos)

#define RTC_CLR_1MON_Pos        8  
#define RTC_CLR_1MON_Msk        (0xFul << RTC_CLR_1MON_Pos)

#define RTC_CLR_10DAY_Pos       4  
#define RTC_CLR_10DAY_Msk       (0x3ul << RTC_CLR_10DAY_Pos)

#define RTC_CLR_1DAY_Pos        0  
#define RTC_CLR_1DAY_Msk        (0xFul << RTC_CLR_1DAY_Pos)

/* RTC TSSR Bit Field Definitions */
#define RTC_TSSR_24H_12H_Pos    0  
#define RTC_TSSR_24H_12H_Msk    (1ul << RTC_TSSR_24H_12H_Pos)

/* RTC DWR Bit Field Definitions */
#define RTC_DWR_DWR_Pos         0  
#define RTC_DWR_DWR_Msk         (0x7ul << RTC_DWR_DWR_Pos)

/* RTC TAR Bit Field Definitions */
#define RTC_TAR_10HR_Pos        20  
#define RTC_TAR_10HR_Msk        (0x3ul << RTC_TAR_10HR_Pos)

#define RTC_TAR_1HR_Pos         16  
#define RTC_TAR_1HR_Msk         (0xFul << RTC_TAR_1HR_Pos)

#define RTC_TAR_10MIN_Pos       12  
#define RTC_TAR_10MIN_Msk       (0x7ul << RTC_TAR_10MIN_Pos)

#define RTC_TAR_1MIN_Pos        8  
#define RTC_TAR_1MIN_Msk        (0xFul << RTC_TAR_1MIN_Pos)

#define RTC_TAR_10SEC_Pos       4  
#define RTC_TAR_10SEC_Msk       (0x7ul << RTC_TAR_10SEC_Pos)

#define RTC_TAR_1SEC_Pos        0  
#define RTC_TAR_1SEC_Msk        (0xFul << RTC_TAR_1SEC_Pos)

/* RTC CAR Bit Field Definitions */
#define RTC_CAR_10YEAR_Pos      20  
#define RTC_CAR_10YEAR_Msk      (0xFul << RTC_CAR_10YEAR_Pos)

#define RTC_CAR_1YEAR_Pos       16  
#define RTC_CAR_1YEAR_Msk       (0xFul << RTC_CAR_1YEAR_Pos)

#define RTC_CAR_10MON_Pos       12  
#define RTC_CAR_10MON_Msk       (1ul << RTC_CAR_10MON_Pos)

#define RTC_CAR_1MON_Pos        8  
#define RTC_CAR_1MON_Msk        (0xFul << RTC_CAR_1MON_Pos)

#define RTC_CAR_10DAY_Pos       4  
#define RTC_CAR_10DAY_Msk       (0x3ul << RTC_CAR_10DAY_Pos)

#define RTC_CAR_1DAY_Pos        0  
#define RTC_CAR_1DAY_Msk        (0xFul << RTC_CAR_1DAY_Pos)

/* RTC LIR Bit Field Definitions */
#define RTC_LIR_LIR_Pos         0  
#define RTC_LIR_LIR_Msk         (1ul << RTC_LIR_LIR_Pos)

/* RTC RIER Bit Field Definitions */
#define RTC_RIER_TIER_Pos       1  
#define RTC_RIER_TIER_Msk       (1ul << RTC_RIER_TIER_Pos)

#define RTC_RIER_AIER_Pos       0  
#define RTC_RIER_AIER_Msk       (1ul << RTC_RIER_AIER_Pos)

/* RTC RIIR Bit Field Definitions */
#define RTC_RIIR_TIF_Pos        1  
#define RTC_RIIR_TIF_Msk        (1ul << RTC_RIIR_TIF_Pos)

#define RTC_RIIR_AIF_Pos        0  
#define RTC_RIIR_AIF_Msk        (1ul << RTC_RIIR_AIF_Pos)

/* RTC TTR Bit Field Definitions */
#define RTC_TTR_TWKE_Pos        3  
#define RTC_TTR_TWKE_Msk        (1ul << RTC_TTR_TWKE_Pos)

#define RTC_TTR_TTR_Pos         0  
#define RTC_TTR_TTR_Msk         (0x7ul << RTC_TTR_TTR_Pos)


/*----------------------------- ADC Controller -------------------------------*/
typedef struct
{
    __I  uint32_t  RSLT:16;
    __I  uint32_t  OVERRUN:1;
    __I  uint32_t  VALID:1;
    __I  uint32_t  RESERVE1:14;
} ADC_ADDR_T;

typedef struct
{
    __IO uint32_t  ADEN:1;
    __IO uint32_t  ADIE:1;
    __IO uint32_t  ADMD:2;
    __IO uint32_t  TRGS:2;
    __IO uint32_t  TRGCOND:2;
    __IO uint32_t  TRGEN:1;
    __IO uint32_t  PTEN:1;
    __IO uint32_t  DIFFEN:1;
    __IO uint32_t  ADST:1;
    __I  uint32_t  RESERVE0:19;
    __IO uint32_t  DMOF:1;
} ADC_ADCR_T;

typedef struct
{
    __IO uint32_t  CHEN:8;
    __IO uint32_t  PRESEL:2;
    __I  uint32_t  RESERVE:22;
} ADC_ADCHER_T;

typedef struct
{
    __IO uint32_t  CMPEN:1;
    __IO uint32_t  CMPIE:1;
    __IO uint32_t  CMPCOND:1;
    __IO uint32_t  CMPCH:3;
    __I  uint32_t  RESERVE0:2;
    __IO uint32_t  CMPMATCNT:4;
    __I  uint32_t  RESERVE1:4;
    __IO uint32_t  CMPD:12;
    __I  uint32_t  RESERVE2:4;
} ADC_ADCMPR_T;

typedef struct
{
    __IO uint32_t  ADF:1;
    __IO uint32_t  CMPF0:1;
    __IO uint32_t  CMPF1:1;
    __I  uint32_t  BUSY:1;
    __I  uint32_t  CHANNEL:3;
    __I  uint32_t  RESERVE0:1;
    __I  uint32_t  VALID:8;
    __I  uint32_t  OVERRUN:8;
    __I  uint32_t  RESERVE1:8;
} ADC_ADSR_T;

typedef struct
{
    __IO uint32_t  CALEN:1;
    __I  uint32_t  CALDONE:1;
    __I  uint32_t  RESERVE:30;
} ADC_ADCALR_T;

typedef struct
{
    __IO uint32_t  AD_PDMA:12;
    __I  uint32_t  RESERVE:20;
} ADC_ADPDMA_T;

typedef struct
{
    union {
        __I uint32_t u32ADDR[8];
        struct {
            __I  uint32_t  RSLT:16;
            __I  uint32_t  OVERRUN:1;
            __I  uint32_t  VALID:1;
            __I  uint32_t  RESERVE1:14;
        } ADDR[8];
    };
    
    union {
        __IO uint32_t u32ADCR;
        struct {
            __IO uint32_t  ADEN:1;
            __IO uint32_t  ADIE:1;
            __IO uint32_t  ADMD:2;
            __IO uint32_t  TRGS:2;
            __IO uint32_t  TRGCOND:2;
            __IO uint32_t  TRGEN:1;
            __IO uint32_t  PTEN:1;
            __IO uint32_t  DIFFEN:1;
            __IO uint32_t  ADST:1;
            __I  uint32_t  RESERVE0:19;
            __IO uint32_t  DMOF:1;
        } ADCR;
    };
    
    union {
        __IO uint32_t u32ADCHER;
        struct {
            __IO uint32_t  CHEN:8;
            __IO uint32_t  PRESEL:2;
            __I  uint32_t  RESERVE:22;
        } ADCHER;
    };
    
    union {
        __IO uint32_t u32ADCMPR[2];
        struct {
            __IO uint32_t  CMPEN:1;
            __IO uint32_t  CMPIE:1;
            __IO uint32_t  CMPCOND:1;
            __IO uint32_t  CMPCH:3;
            __I  uint32_t  RESERVE0:2;
            __IO uint32_t  CMPMATCNT:4;
            __I  uint32_t  RESERVE1:4;
            __IO uint32_t  CMPD:12;
            __I  uint32_t  RESERVE2:4;
        } ADCMPR[2];
    };
    
    union {
        __IO uint32_t u32ADSR;
        struct {
            __IO uint32_t  ADF:1;
            __IO uint32_t  CMPF0:1;
            __IO uint32_t  CMPF1:1;
            __I  uint32_t  BUSY:1;
            __I  uint32_t  CHANNEL:3;
            __I  uint32_t  RESERVE0:1;
            __I  uint32_t  VALID:8;
            __I  uint32_t  OVERRUN:8;
            __I  uint32_t  RESERVE1:8;
        } ADSR;
    };
    
    union {
        __IO uint32_t u32ADCALR;
        struct {
            __IO uint32_t  CALEN:1;
            __I  uint32_t  CALDONE:1;
            __I  uint32_t  RESERVE:30;
        } ADCALR;
    };
    
    __I uint32_t RESERVE0;
    __I uint32_t RESERVE1;
    
    union {
        __IO uint32_t u32ADPDMA;
        struct {
            __IO uint32_t  AD_PDMA:12;
            __I  uint32_t  RESERVE:20;
        } ADPDMA;
    };
} ADC_T;

/* ADDR Bit Field Definitions */
#define ADC_ADDR_VALID_Pos      17
#define ADC_ADDR_VALID_Msk      (1ul << ADC_ADDR_VALID_Pos)

#define ADC_ADDR_OVERRUN_Pos    16
#define ADC_ADDR_OVERRUN_Msk    (1ul << ADC_ADDR_OVERRUN_Pos)

#define ADC_ADDR_RSLT_Pos       0
#define ADC_ADDR_RSLT_Msk       (0xFFFFul << ADC_ADDR_RSLT_Pos)

/* ADCR Bit Field Definitions */
#define ADC_ADCR_DMOF_Pos       31
#define ADC_ADCR_DMOF_Msk       (1ul << ADC_ADCR_DMOF_Pos)

#define ADC_ADCR_ADST_Pos       11
#define ADC_ADCR_ADST_Msk       (1ul << ADC_ADCR_ADST_Pos)

#define ADC_ADCR_DIFFEN_Pos     10
#define ADC_ADCR_DIFFEN_Msk     (1ul << ADC_ADCR_DIFFEN_Pos)

#define ADC_ADCR_PTEN_Pos       9
#define ADC_ADCR_PTEN_Msk       (1ul << ADC_ADCR_PTEN_Pos)

#define ADC_ADCR_TRGEN_Pos      8
#define ADC_ADCR_TRGEN_Msk      (1ul << ADC_ADCR_TRGEN_Pos)

#define ADC_ADCR_TRGCOND_Pos    6
#define ADC_ADCR_TRGCOND_Msk    (3ul << ADC_ADCR_TRGCOND_Pos)

#define ADC_ADCR_TRGS_Pos       4
#define ADC_ADCR_TRGS_Msk       (3ul << ADC_ADCR_TRGS_Pos)

#define ADC_ADCR_ADMD_Pos       2
#define ADC_ADCR_ADMD_Msk       (3ul << ADC_ADCR_ADMD_Pos)

#define ADC_ADCR_ADIE_Pos       1
#define ADC_ADCR_ADIE_Msk       (1ul << ADC_ADCR_ADIE_Pos)

#define ADC_ADCR_ADEN_Pos       0
#define ADC_ADCR_ADEN_Msk       (1ul << ADC_ADCR_ADEN_Pos)

/* ADCHER Bit Field Definitions */
#define ADC_ADCHER_PRESEL_Pos   8
#define ADC_ADCHER_PRESEL_Msk   (3ul << ADC_ADCHER_PRESEL_Pos)

#define ADC_ADCHER_CHEN_Pos     0
#define ADC_ADCHER_CHEN_Msk     (0xFFul << ADC_ADCHER_CHEN_Pos)

/* ADCMPR Bit Field Definitions */
#define ADC_ADCMPR_CMPD_Pos        16
#define ADC_ADCMPR_CMPD_Msk        (0xFFFul << ADC_ADCMPR_CMPD_Pos)

#define ADC_ADCMPR_CMPMATCNT_Pos   8
#define ADC_ADCMPR_CMPMATCNT_Msk   (0xFul << ADC_ADCMPR_CMPMATCNT_Pos)

#define ADC_ADCMPR_CMPCH_Pos       3
#define ADC_ADCMPR_CMPCH_Msk       (7ul << ADC_ADCMPR_CMPCH_Pos)

#define ADC_ADCMPR_CMPCOND_Pos     2
#define ADC_ADCMPR_CMPCOND_Msk     (1ul << ADC_ADCMPR_CMPCOND_Pos)

#define ADC_ADCMPR_CMPIE_Pos       1
#define ADC_ADCMPR_CMPIE_Msk       (1ul << ADC_ADCMPR_CMPIE_Pos)

#define ADC_ADCMPR_CMPEN_Pos       0
#define ADC_ADCMPR_CMPEN_Msk       (1ul << ADC_ADCMPR_CMPEN_Pos)

/* ADSR Bit Field Definitions */
#define ADC_ADSR_OVERRUN_Pos       16
#define ADC_ADSR_OVERRUN_Msk       (0xFFul << ADC_ADSR_OVERRUN_Pos)

#define ADC_ADSR_VALID_Pos         8
#define ADC_ADSR_VALID_Msk         (0xFFul << ADC_ADSR_VALID_Pos)

#define ADC_ADSR_CHANNEL_Pos       4
#define ADC_ADSR_CHANNEL_Msk       (7ul << ADC_ADSR_CHANNEL_Pos)

#define ADC_ADSR_BUSY_Pos          3
#define ADC_ADSR_BUSY_Msk          (1ul << ADC_ADSR_BUSY_Pos)

#define ADC_ADSR_CMPF1_Pos         2
#define ADC_ADSR_CMPF1_Msk         (1ul << ADC_ADSR_CMPF1_Pos)

#define ADC_ADSR_CMPF0_Pos         1
#define ADC_ADSR_CMPF0_Msk         (1ul << ADC_ADSR_CMPF0_Pos)

#define ADC_ADSR_ADF_Pos           0
#define ADC_ADSR_ADF_Msk           (1ul << ADC_ADSR_ADF_Pos)

/* ADCALR Bit Field Definitions */
#define ADC_ADCALR_CALDONE_Pos     1
#define ADC_ADCALR_CALDONE_Msk     (1ul << ADC_ADCALR_CALDONE_Pos)

#define ADC_ADCALR_CALEN_Pos       0
#define ADC_ADCALR_CALEN_Msk       (1ul << ADC_ADCALR_CALEN_Pos)

/* ADPDMA Bit Field Definitions */
#define ADC_ADPDMA_AD_PDMA_Pos     0
#define ADC_ADPDMA_AD_PDMA_Msk     (1ul << ADC_ADPDMA_AD_PDMA_Pos)


/*---------------------- Analog Comparator Controller -------------------------*/
typedef struct
{
    __IO uint32_t  CMPEN:1;
    __IO uint32_t  CMPIE:1;
    __IO uint32_t  CMP_HYSEN:1;
    __I  uint32_t  RESERVE0:1;
    __IO uint32_t  CMPCN:1;
    __I  uint32_t  RESERVE1:27;
} ACMP_CMPCR_T;

typedef struct
{
    __IO uint32_t  CMPF0:1;
    __IO uint32_t  CMPF1:1;
    __I  uint32_t  CO0:1;
    __I  uint32_t  CO1:1;
    __I  uint32_t  RESERVE:28;
} ACMP_CMPSR_T;

typedef struct
{
    union {
        __IO uint32_t u32CMPCR[2];
        struct {
            __IO uint32_t  CMPEN:1;
            __IO uint32_t  CMPIE:1;
            __IO uint32_t  CMP_HYSEN:1;
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  CMPCN:1;
            __I  uint32_t  RESERVE1:27;
        } CMPCR[2];
    };
    
    union {
        __IO uint32_t u32CMPSR;
        struct {
            __IO uint32_t  CMPF0:1;
            __IO uint32_t  CMPF1:1;
            __I  uint32_t  CO0:1;
            __I  uint32_t  CO1:1;
            __I  uint32_t  RESERVE:28;
        } CMPSR;
    };
} ACMP_T;


/* CMPCR Bit Field Definitions */
#define ACMP_CMPCR_CMPCN_Pos       4
#define ACMP_CMPCR_CMPCN_Msk       (1ul << ACMP_CMPCR_CMPCN_Pos)

#define ACMP_CMPCR_CMP_HYSEN_Pos   2
#define ACMP_CMPCR_CMP_HYSEN_Msk   (1ul << ACMP_CMPCR_CMP_HYSEN_Pos)

#define ACMP_CMPCR_CMPIE_Pos       1
#define ACMP_CMPCR_CMPIE_Msk       (1ul << ACMP_CMPCR_CMPIE_Pos)

#define ACMP_CMPCR_CMPEN_Pos       0
#define ACMP_CMPCR_CMPEN_Msk       (1ul << ACMP_CMPCR_CMPEN_Pos)

/* CMPSR Bit Field Definitions */
#define ACMP_CMPSR_CO1_Pos     3
#define ACMP_CMPSR_CO1_Msk     (1ul << ACMP_CMPSR_CO1_Pos)

#define ACMP_CMPSR_CO0_Pos     2
#define ACMP_CMPSR_CO0_Msk     (1ul << ACMP_CMPSR_CO0_Pos)

#define ACMP_CMPSR_CMPF1_Pos   1
#define ACMP_CMPSR_CMPF1_Msk   (1ul << ACMP_CMPSR_CMPF1_Pos)

#define ACMP_CMPSR_CMPF0_Pos   0
#define ACMP_CMPSR_CMPF0_Msk   (1ul << ACMP_CMPSR_CMPF0_Pos)


/*---------------------------- Clock Controller ------------------------------*/
typedef struct
{
    __IO uint32_t  XTL12M_EN:1;
    __IO uint32_t  XTL32K_EN:1;
    __IO uint32_t  OSC22M_EN:1;
    __IO uint32_t  OSC10K_EN:1;
    __IO uint32_t  PD_WU_DLY:1;
    __IO uint32_t  PD_WU_INT_EN:1;
    __IO uint32_t  PD_WU_STS:1;
    __IO uint32_t  PWR_DOWN_EN:1;
    __IO uint32_t  PD_WAIT_CPU:1;
    __I  uint32_t  RESERVE:23;
} SYSCLK_PWRCON_T;

typedef struct
{
    __I  uint32_t  RESERVE0:1;
    __IO uint32_t  PDMA_EN:1;
    __IO uint32_t  ISP_EN:1;
    __IO uint32_t  EBI_EN:1;
    __I  uint32_t  RESERVE1:28;
} SYSCLK_AHBCLK_T;

typedef struct
{
    __IO uint32_t  WDT_EN:1;
    __IO uint32_t  RTC_EN:1;
    __IO uint32_t  TMR0_EN:1;
    __IO uint32_t  TMR1_EN:1;
    __IO uint32_t  TMR2_EN:1;
    __IO uint32_t  TMR3_EN:1;
    __IO uint32_t  FDIV_EN:1;
    __I  uint32_t  RESERVE0:1;
    __IO uint32_t  I2C0_EN:1;
    __IO uint32_t  I2C1_EN:1;
    __I  uint32_t  RESERVE1:2;
    __IO uint32_t  SPI0_EN:1;
    __IO uint32_t  SPI1_EN:1;
    __IO uint32_t  SPI2_EN:1;
    __IO uint32_t  SPI3_EN:1;
    __IO uint32_t  UART0_EN:1;
    __IO uint32_t  UART1_EN:1;
    __IO uint32_t  UART2_EN:1;
    __I  uint32_t  RESERVE2:1;
    __IO uint32_t  PWM01_EN:1;
    __IO uint32_t  PWM23_EN:1;
    __IO uint32_t  PWM45_EN:1;
    __IO uint32_t  PWM67_EN:1;
    __IO uint32_t  CAN0_EN:1;
    __I  uint32_t  RESERVE3:2;
    __IO uint32_t  USBD_EN:1;
    __IO uint32_t  ADC_EN:1;
    __IO uint32_t  I2S_EN:1;
    __IO uint32_t  ACMP_EN:1;
    __IO uint32_t  PS2_EN:1;
} SYSCLK_APBCLK_T;

typedef struct
{
    __I  uint32_t  XTL12M_STB:1;
    __I  uint32_t  XTL32K_STB:1;
    __I  uint32_t  PLL_STB:1;
    __I  uint32_t  OSC10K_STB:1;
    __I  uint32_t  OSC22M_STB:1;
    __I  uint32_t  RESERVE0:2;
    __IO uint32_t  CLK_SW_FAIL:1;
    __I  uint32_t  RESERVE1:24;
} SYSCLK_CLKSTATUS_T;

typedef struct
{
    __IO uint32_t  HCLK_S:3;
    __IO uint32_t  STCLK_S:3;
    __I  uint32_t  RESERVE:26;
} SYSCLK_CLKSEL0_T;


typedef struct
{
    __IO uint32_t  WDT_S:2;
    __IO uint32_t  ADC_S:2;
    __I  uint32_t  RESERVE1:4;
    __IO uint32_t  TMR0_S:3;
    __I  uint32_t  RESERVE2:1;
    __IO uint32_t  TMR1_S:3;
    __I  uint32_t  RESERVE3:1;
    __IO uint32_t  TMR2_S:3;
    __I  uint32_t  RESERVE4:1;
    __IO uint32_t  TMR3_S:3;
    __I  uint32_t  RESERVE5:1;
    __IO uint32_t  UART_S:2;
    __I  uint32_t  RESERVE6:2;
    __IO uint32_t  PWM01_S:2;
    __IO uint32_t  PWM23_S:2;
} SYSCLK_CLKSEL1_T;

typedef struct
{
    __IO uint32_t  I2S_S:2;
    __IO uint32_t  FRQDIV_S:2;
    __IO uint32_t  PWM45_S:2;
    __IO uint32_t  PWM67_S:2;
    __I  uint32_t  RESERVE:24;
} SYSCLK_CLKSEL2_T;

typedef struct
{
    __IO uint32_t  HCLK_N:4;
    __IO uint32_t  USB_N:4;
    __IO uint32_t  UART_N:4;
    __I  uint32_t  RESERVE0:4;
    __IO uint32_t  ADC_N:8;
    __I  uint32_t  RESERVE1:8;
} SYSCLK_CLKDIV_T;

typedef struct
{
    __IO uint32_t  FB_DV:9;
    __IO uint32_t  IN_DV:5;
    __IO uint32_t  OUT_DV:2;
    __IO uint32_t  PD:1;
    __IO uint32_t  BP:1;
    __IO uint32_t  OE:1;
    __IO uint32_t  PLL_SRC:1;
    __I  uint32_t  RESERVE:12;
} SYSCLK_PLLCON_T;


typedef struct
{    
    __IO uint32_t  FSEL:4;
    __IO uint32_t  FDIV_EN:1;
    __I  uint32_t  RESERVE:27;
} SYSCLK_FRQDIV_T;

typedef struct
{
    union 
    {
        __IO uint32_t u32PWRCON;
        
        struct 
        {
            __IO uint32_t  XTL12M_EN:1;
            __IO uint32_t  XTL32K_EN:1;
            __IO uint32_t  OSC22M_EN:1;
            __IO uint32_t  OSC10K_EN:1;
            __IO uint32_t  PD_WU_DLY:1;
            __IO uint32_t  PD_WU_INT_EN:1;
            __IO uint32_t  PD_WU_STS:1;
            __IO uint32_t  PWR_DOWN_EN:1;
            __IO uint32_t  PD_WAIT_CPU:1;
            __I  uint32_t  RESERVE:23;
        } PWRCON;
    };    
    
    union 
    {
        __IO uint32_t u32AHBCLK;
        
        struct 
        {
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  PDMA_EN:1;
            __IO uint32_t  ISP_EN:1;
            __IO uint32_t  EBI_EN:1;
            __I  uint32_t  RESERVE1:28;
        } AHBCLK;
    };    

    union 
    {
        __IO uint32_t u32APBCLK;
        
        struct 
        {
            __IO uint32_t  WDT_EN:1;
            __IO uint32_t  RTC_EN:1;
            __IO uint32_t  TMR0_EN:1;
            __IO uint32_t  TMR1_EN:1;
            __IO uint32_t  TMR2_EN:1;
            __IO uint32_t  TMR3_EN:1;
            __IO uint32_t  FDIV_EN:1;
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  I2C0_EN:1;
            __IO uint32_t  I2C1_EN:1;
            __I  uint32_t  RESERVE1:2;
            __IO uint32_t  SPI0_EN:1;
            __IO uint32_t  SPI1_EN:1;
            __IO uint32_t  SPI2_EN:1;
            __IO uint32_t  SPI3_EN:1;
            __IO uint32_t  UART0_EN:1;
            __IO uint32_t  UART1_EN:1;
            __IO uint32_t  UART2_EN:1;
            __I  uint32_t  RESERVE2:1;
            __IO uint32_t  PWM01_EN:1;
            __IO uint32_t  PWM23_EN:1;
            __IO uint32_t  PWM45_EN:1;
            __IO uint32_t  PWM67_EN:1;
            __IO uint32_t  CAN0_EN:1;
            __I  uint32_t  RESERVE3:2;
            __IO uint32_t  USBD_EN:1;
            __IO uint32_t  ADC_EN:1;
            __IO uint32_t  I2S_EN:1;
            __IO uint32_t  ACMP_EN:1;
            __IO uint32_t  PS2_EN:1;
        } APBCLK;
    };          

    union 
    {
        __IO uint32_t u32CLKSTATUS;
        
        struct 
        {
            __I  uint32_t  XTL12M_STB:1;
            __I  uint32_t  XTL32K_STB:1;
            __I  uint32_t  PLL_STB:1;
            __I  uint32_t  OSC10K_STB:1;
            __I  uint32_t  OSC22M_STB:1;
            __I  uint32_t  RESERVE0:2;
            __IO uint32_t  CLK_SW_FAIL:1;
            __I  uint32_t  RESERVE1:24;
        } CLKSTATUS;
    };  

    union 
    {
        __IO uint32_t u32CLKSEL0;
        
        struct 
        {
            __IO uint32_t  HCLK_S:3;
            __IO uint32_t  STCLK_S:3;
            __I  uint32_t  RESERVE:26;
        } CLKSEL0;
    };  

    union 
    {
        __IO uint32_t u32CLKSEL1;
        
        struct 
        {
            __IO uint32_t  WDT_S:2;
            __IO uint32_t  ADC_S:2;
            __I  uint32_t  RESERVE1:4;
            __IO uint32_t  TMR0_S:3;
            __I  uint32_t  RESERVE2:1;
            __IO uint32_t  TMR1_S:3;
            __I  uint32_t  RESERVE3:1;
            __IO uint32_t  TMR2_S:3;
            __I  uint32_t  RESERVE4:1;
            __IO uint32_t  TMR3_S:3;
            __I  uint32_t  RESERVE5:1;
            __IO uint32_t  UART_S:2;
            __I  uint32_t  RESERVE6:2;
            __IO uint32_t  PWM01_S:2;
            __IO uint32_t  PWM23_S:2;
        } CLKSEL1;
    };  

    union 
    {
        __IO uint32_t u32CLKDIV;
        
        struct 
        {
            __IO uint32_t  HCLK_N:4;
            __IO uint32_t  USB_N:4;
            __IO uint32_t  UART_N:4;
            __I  uint32_t  RESERVE0:4;
            __IO uint32_t  ADC_N:8;
            __I  uint32_t  RESERVE1:8;
        } CLKDIV;
    };  

    union 
    {
        __IO uint32_t u32CLKSEL2;
        
        struct 
        {
            __IO uint32_t  I2S_S:2;
            __IO uint32_t  FRQDIV_S:2;
            __IO uint32_t  PWM45_S:2;
            __IO uint32_t  PWM67_S:2;
            __I  uint32_t  RESERVE:24;
        } CLKSEL2;
    };  
    
    union 
    {
        __IO uint32_t u32PLLCON;
        
        struct 
        {
            __IO uint32_t  FB_DV:9;
            __IO uint32_t  IN_DV:5;
            __IO uint32_t  OUT_DV:2;
            __IO uint32_t  PD:1;
            __IO uint32_t  BP:1;
            __IO uint32_t  OE:1;
            __IO uint32_t  PLL_SRC:1;
            __I  uint32_t  RESERVE:12;
        } PLLCON;
    };  
    
    union 
    {
        __IO uint32_t u32FRQDIV;
        
        struct 
        {
            __IO uint32_t  FSEL:4;
            __IO uint32_t  FDIV_EN:1;
            __I  uint32_t  RESERVE:27;
        } FRQDIV;
    };      
} SYSCLK_T;

/* SYSCLK PWRCON Bit Field Definitions */
#define SYSCLK_PWRCON_PD_WAIT_CPU_Pos           8
#define SYSCLK_PWRCON_PD_WAIT_CPU_Msk           (1ul << SYSCLK_PWRCON_PD_WAIT_CPU_Pos)

#define SYSCLK_PWRCON_PWR_DOWN_EN_Pos           7
#define SYSCLK_PWRCON_PWR_DOWN_EN_Msk           (1ul << SYSCLK_PWRCON_PWR_DOWN_EN_Pos)

#define SYSCLK_PWRCON_PD_WU_STS_Pos             6
#define SYSCLK_PWRCON_PD_WU_STS_Msk             (1ul << SYSCLK_PWRCON_PD_WU_STS_Pos)

#define SYSCLK_PWRCON_PD_WU_INT_EN_Pos          5
#define SYSCLK_PWRCON_PD_WU_INT_EN_Msk          (1ul << SYSCLK_PWRCON_PD_WU_INT_EN_Pos)

#define SYSCLK_PWRCON_PD_WU_DLY_Pos             4
#define SYSCLK_PWRCON_PD_WU_DLY_Msk             (1ul << SYSCLK_PWRCON_PD_WU_DLY_Pos)

#define SYSCLK_PWRCON_OSC10K_EN_Pos             3
#define SYSCLK_PWRCON_OSC10K_EN_Msk             (1ul << SYSCLK_PWRCON_OSC10K_EN_Pos)

#define SYSCLK_PWRCON_OSC22M_EN_Pos             2
#define SYSCLK_PWRCON_OSC22M_EN_Msk             (1ul << SYSCLK_PWRCON_OSC22M_EN_Pos)

#define SYSCLK_PWRCON_XTL32K_EN_Pos             1
#define SYSCLK_PWRCON_XTL32K_EN_Msk             (1ul << SYSCLK_PWRCON_XTL32K_EN_Pos)

#define SYSCLK_PWRCON_XTL12M_EN_Pos             0
#define SYSCLK_PWRCON_XTL12M_EN_Msk             (1ul << SYSCLK_PWRCON_XTL12M_EN_Pos)

/* SYSCLK AHBCLK Bit Field Definitions */
#define SYSCLK_AHBCLK_EBI_EN_Pos                3
#define SYSCLK_AHBCLK_EBI_EN_Msk                (1ul << SYSCLK_AHBCLK_EBI_EN_Pos)

#define SYSCLK_AHBCLK_ISP_EN_Pos                2
#define SYSCLK_AHBCLK_ISP_EN_Msk                (1ul << SYSCLK_AHBCLK_ISP_EN_Pos)

#define SYSCLK_AHBCLK_PDMA_EN_Pos               1
#define SYSCLK_AHBCLK_PDMA_EN_Msk               (1ul << SYSCLK_AHBCLK_PDMA_EN_Pos)


/* SYSCLK APBCLK Bit Field Definitions */
#define SYSCLK_APBCLK_PS2_EN_Pos                31
#define SYSCLK_APBCLK_PS2_EN_Msk                (1ul << SYSCLK_APBCLK_PS2_EN_Pos)

#define SYSCLK_APBCLK_ACMP_EN_Pos               30
#define SYSCLK_APBCLK_ACMP_EN_Msk               (1ul << SYSCLK_APBCLK_ACMP_EN_Pos)

#define SYSCLK_APBCLK_I2S_EN_Pos                29
#define SYSCLK_APBCLK_I2S_EN_Msk                (1ul << SYSCLK_APBCLK_I2S_EN_Pos)

#define SYSCLK_APBCLK_ADC_EN_Pos                28
#define SYSCLK_APBCLK_ADC_EN_Msk                (1ul << SYSCLK_APBCLK_ADC_EN_Pos)

#define SYSCLK_APBCLK_USBD_EN_Pos               27
#define SYSCLK_APBCLK_USBD_EN_Msk               (1ul << SYSCLK_APBCLK_USBD_EN_Pos)

#define SYSCLK_APBCLK_CAN0_EN_Pos               24
#define SYSCLK_APBCLK_CAN0_EN_Msk               (1ul << SYSCLK_APBCLK_CAN0_EN_Pos)

#define SYSCLK_APBCLK_PWM67_EN_Pos              23
#define SYSCLK_APBCLK_PWM67_EN_Msk              (1ul << SYSCLK_APBCLK_PWM67_EN_Pos)

#define SYSCLK_APBCLK_PWM45_EN_Pos              22
#define SYSCLK_APBCLK_PWM45_EN_Msk              (1ul << SYSCLK_APBCLK_PWM45_EN_Pos)

#define SYSCLK_APBCLK_PWM23_EN_Pos              21
#define SYSCLK_APBCLK_PWM23_EN_Msk              (1ul << SYSCLK_APBCLK_PWM23_EN_Pos)

#define SYSCLK_APBCLK_PWM01_EN_Pos              20
#define SYSCLK_APBCLK_PWM01_EN_Msk              (1ul << SYSCLK_APBCLK_PWM01_EN_Pos)

#define SYSCLK_APBCLK_UART2_EN_Pos              18
#define SYSCLK_APBCLK_UART2_EN_Msk              (1ul << SYSCLK_APBCLK_UART2_EN_Pos)

#define SYSCLK_APBCLK_UART1_EN_Pos              17
#define SYSCLK_APBCLK_UART1_EN_Msk              (1ul << SYSCLK_APBCLK_UART1_EN_Pos)

#define SYSCLK_APBCLK_UART0_EN_Pos              16
#define SYSCLK_APBCLK_UART0_EN_Msk              (1ul << SYSCLK_APBCLK_UART0_EN_Pos)

#define SYSCLK_APBCLK_SPI3_EN_Pos               15
#define SYSCLK_APBCLK_SPI3_EN_Msk               (1ul << SYSCLK_APBCLK_SPI3_EN_Pos)

#define SYSCLK_APBCLK_SPI2_EN_Pos               14
#define SYSCLK_APBCLK_SPI2_EN_Msk               (1ul << SYSCLK_APBCLK_SPI2_EN_Pos)

#define SYSCLK_APBCLK_SPI1_EN_Pos               13
#define SYSCLK_APBCLK_SPI1_EN_Msk               (1ul << SYSCLK_APBCLK_SPI1_EN_Pos)

#define SYSCLK_APBCLK_SPI0_EN_Pos               12
#define SYSCLK_APBCLK_SPI0_EN_Msk               (1ul << SYSCLK_APBCLK_SPI0_EN_Pos)

#define SYSCLK_APBCLK_I2C1_EN_Pos               9
#define SYSCLK_APBCLK_I2C1_EN_Msk               (1ul << SYSCLK_APBCLK_I2C1_EN_Pos)

#define SYSCLK_APBCLK_I2C0_EN_Pos               8
#define SYSCLK_APBCLK_I2C0_EN_Msk               (1ul << SYSCLK_APBCLK_I2C0_EN_Pos)

#define SYSCLK_APBCLK_FDIV_EN_Pos               6
#define SYSCLK_APBCLK_FDIV_EN_Msk               (1ul << SYSCLK_APBCLK_FDIV_EN_Pos)

#define SYSCLK_APBCLK_TMR3_EN_Pos               5
#define SYSCLK_APBCLK_TMR3_EN_Msk               (1ul << SYSCLK_APBCLK_TMR3_EN_Pos)

#define SYSCLK_APBCLK_TMR2_EN_Pos               4
#define SYSCLK_APBCLK_TMR2_EN_Msk               (1ul << SYSCLK_APBCLK_TMR2_EN_Pos)

#define SYSCLK_APBCLK_TMR1_EN_Pos               3
#define SYSCLK_APBCLK_TMR1_EN_Msk               (1ul << SYSCLK_APBCLK_TMR1_EN_Pos)
                                                
#define SYSCLK_APBCLK_TMR0_EN_Pos               2
#define SYSCLK_APBCLK_TMR0_EN_Msk               (1ul << SYSCLK_APBCLK_TMR0_EN_Pos)

#define SYSCLK_APBCLK_RTC_EN_Pos                1
#define SYSCLK_APBCLK_RTC_EN_Msk                (1ul << SYSCLK_APBCLK_RTC_EN_Pos)

#define SYSCLK_APBCLK_WDT_EN_Pos                0
#define SYSCLK_APBCLK_WDT_EN_Msk                (1ul << SYSCLK_APBCLK_WDT_EN_Pos)

/* SYSCLK CLKSTATUS Bit Field Definitions */
#define SYSCLK_CLKSTATUS_CLK_SW_FAIL_Pos        7
#define SYSCLK_CLKSTATUS_CLK_SW_FAIL_Msk        (1ul << SYSCLK_CLKSTATUS_CLK_SW_FAIL_Pos)

#define SYSCLK_CLKSTATUS_OSC22M_STB_Pos         4
#define SYSCLK_CLKSTATUS_OSC22M_STB_Msk         (1ul << SYSCLK_CLKSTATUS_OSC22M_STB_Pos)

#define SYSCLK_CLKSTATUS_OSC10K_STB_Pos         3
#define SYSCLK_CLKSTATUS_OSC10K_STB_Msk         (1ul << SYSCLK_CLKSTATUS_OSC10K_STB_Pos)

#define SYSCLK_CLKSTATUS_PLL_STB_Pos            2
#define SYSCLK_CLKSTATUS_PLL_STB_Msk            (1ul << SYSCLK_CLKSTATUS_PLL_STB_Pos)

#define SYSCLK_CLKSTATUS_XTL32K_STB_Pos         1
#define SYSCLK_CLKSTATUS_XTL32K_STB_Msk         (1ul << SYSCLK_CLKSTATUS_XTL32K_STB_Pos)

#define SYSCLK_CLKSTATUS_XTL12M_STB_Pos         0
#define SYSCLK_CLKSTATUS_XTL12M_STB_Msk         (1ul << SYSCLK_CLKSTATUS_XTL12M_STB_Pos)

/* SYSCLK CLKSEL0 Bit Field Definitions */
#define SYSCLK_CLKSEL0_STCLK_S_Pos              3
#define SYSCLK_CLKSEL0_STCLK_S_Msk              (7ul << SYSCLK_CLKSEL0_STCLK_S_Pos)

#define SYSCLK_CLKSEL0_HCLK_S_Pos               0
#define SYSCLK_CLKSEL0_HCLK_S_Msk               (7ul << SYSCLK_CLKSEL0_HCLK_S_Pos)

/* SYSCLK CLKSEL1 Bit Field Definitions */
#define SYSCLK_CLKSEL1_PWM23_S_Pos              30
#define SYSCLK_CLKSEL1_PWM23_S_Msk              (3ul << SYSCLK_CLKSEL1_PWM23_S_Pos)

#define SYSCLK_CLKSEL1_PWM01_S_Pos              28
#define SYSCLK_CLKSEL1_PWM01_S_Msk              (3ul << SYSCLK_CLKSEL1_PWM01_S_Pos)

#define SYSCLK_CLKSEL1_UART_S_Pos               24
#define SYSCLK_CLKSEL1_UART_S_Msk               (3ul << SYSCLK_CLKSEL1_UART_S_Pos)

#define SYSCLK_CLKSEL1_TMR3_S_Pos               20
#define SYSCLK_CLKSEL1_TMR3_S_Msk               (7ul << SYSCLK_CLKSEL1_TMR3_S_Pos)

#define SYSCLK_CLKSEL1_TMR2_S_Pos               16
#define SYSCLK_CLKSEL1_TMR2_S_Msk               (7ul << SYSCLK_CLKSEL1_TMR2_S_Pos)

#define SYSCLK_CLKSEL1_TMR1_S_Pos               12
#define SYSCLK_CLKSEL1_TMR1_S_Msk               (7ul << SYSCLK_CLKSEL1_TMR1_S_Pos)

#define SYSCLK_CLKSEL1_TMR0_S_Pos               8
#define SYSCLK_CLKSEL1_TMR0_S_Msk               (7ul << SYSCLK_CLKSEL1_TMR0_S_Pos)

#define SYSCLK_CLKSEL1_ADC_S_Pos                2
#define SYSCLK_CLKSEL1_ADC_S_Msk                (3ul << SYSCLK_CLKSEL1_ADC_S_Pos)

#define SYSCLK_CLKSEL1_WDT_S_Pos                0
#define SYSCLK_CLKSEL1_WDT_S_Msk                (3ul << SYSCLK_CLKSEL1_WDT_S_Pos)

/* SYSCLK CLKSEL2 Bit Field Definitions */
#define SYSCLK_CLKSEL2_PWM67_S_Pos              6
#define SYSCLK_CLKSEL2_PWM67_S_Msk              (3ul << SYSCLK_CLKSEL2_PWM67_S_Pos)

#define SYSCLK_CLKSEL2_PWM45_S_Pos              4
#define SYSCLK_CLKSEL2_PWM45_S_Msk              (3ul << SYSCLK_CLKSEL2_PWM45_S_Pos)

#define SYSCLK_CLKSEL2_FRQDIV_S_Pos             2
#define SYSCLK_CLKSEL2_FRQDIV_S_Msk             (3ul << SYSCLK_CLKSEL2_FRQDIV_S_Pos)

#define SYSCLK_CLKSEL2_I2S_S_Pos                0
#define SYSCLK_CLKSEL2_I2S_S_Msk                (3ul << SYSCLK_CLKSEL2_I2S_S_Pos)

/* SYSCLK CLKDIV Bit Field Definitions */
#define SYSCLK_CLKDIV_ADC_N_Pos                 16
#define SYSCLK_CLKDIV_ADC_N_Msk                 (0xFFul << SYSCLK_CLKDIV_ADC_N_Pos)

#define SYSCLK_CLKDIV_UART_N_Pos                8
#define SYSCLK_CLKDIV_UART_N_Msk                (0xFul << SYSCLK_CLKDIV_UART_N_Pos)

#define SYSCLK_CLKDIV_USB_N_Pos                 4
#define SYSCLK_CLKDIV_USB_N_Msk                 (0xFul << SYSCLK_CLKDIV_USB_N_Pos)

#define SYSCLK_CLKDIV_HCLK_N_Pos                0
#define SYSCLK_CLKDIV_HCLK_N_Msk                (0xFul << SYSCLK_CLKDIV_HCLK_N_Pos)

/* SYSCLK PLLCON Bit Field Definitions */
#define SYSCLK_PLLCON_PLL_SRC_Pos               19
#define SYSCLK_PLLCON_PLL_SRC_Msk               (1ul << SYSCLK_PLLCON_PLL_SRC_Pos)

#define SYSCLK_PLLCON_OE_Pos                    18
#define SYSCLK_PLLCON_OE_Msk                    (1ul << SYSCLK_PLLCON_OE_Pos)

#define SYSCLK_PLLCON_BP_Pos                    17
#define SYSCLK_PLLCON_BP_Msk                    (1ul << SYSCLK_PLLCON_BP_Pos)

#define SYSCLK_PLLCON_PD_Pos                    16
#define SYSCLK_PLLCON_PD_Msk                    (1ul << SYSCLK_PLLCON_PD_Pos)

#define SYSCLK_PLLCON_OUT_DV_Pos                14
#define SYSCLK_PLLCON_OUT_DV_Msk                (3ul << SYSCLK_PLLCON_OUT_DV_Pos)

#define SYSCLK_PLLCON_IN_DV_Pos                 9
#define SYSCLK_PLLCON_IN_DV_Msk                 (0x1Ful << SYSCLK_PLLCON_IN_DV_Pos)

#define SYSCLK_PLLCON_FB_DV_Pos                 0
#define SYSCLK_PLLCON_FB_DV_Msk                 (0x1FFul << SYSCLK_PLLCON_FB_DV_Pos)

/* SYSCLK FRQDIV Bit Field Definitions */
#define SYSCLK_FRQDIV_FDIV_EN_Pos               4
#define SYSCLK_FRQDIV_FDIV_EN_Msk               (1ul << SYSCLK_FRQDIV_FDIV_EN_Pos)

#define SYSCLK_FRQDIV_FSEL_Pos                  0
#define SYSCLK_FRQDIV_FSEL_Msk                  (0xFul << SYSCLK_FRQDIV_FSEL_Pos)

/*---------------------------- Global Controller -----------------------------*/
typedef __I uint32_t GCR_PDID_T;  

typedef struct
{
    __IO uint32_t  RSTS_POR:1;
    __IO uint32_t  RSTS_RESET:1;
    __IO uint32_t  RSTS_WDT:1;
    __IO uint32_t  RSTS_LVR:1;
    __IO uint32_t  RSTS_BOD:1;
    __IO uint32_t  RSTS_SYS:1;
    __I  uint32_t  RESERVE0:1;
    __IO uint32_t  RSTS_CPU:1;    
    __I  uint32_t  RESERVE1:24;
} GCR_RSTSRC_T;


typedef struct
{
    __IO uint32_t  CHIP_RST:1;
    __IO uint32_t  CPU_RST:1;
    __IO uint32_t  PDMA_RST:1;
    __IO uint32_t  EBI_RST:1;
    __I  uint32_t  RESERVE:28;
} GCR_IPRSTC1_T;

typedef struct
{
    __I  uint32_t  RESERVE0:1;
    __IO uint32_t  GPIO_RST:1;
    __IO uint32_t  TMR0_RST:1;
    __IO uint32_t  TMR1_RST:1;
    __IO uint32_t  TMR2_RST:1;
    __IO uint32_t  TMR3_RST:1;
    __I  uint32_t  RESERVE1:2;
    __IO uint32_t  I2C0_RST:1;
    __IO uint32_t  I2C1_RST:1;
    __I  uint32_t  RESERVE2:2;
    __IO uint32_t  SPI0_RST:1;
    __IO uint32_t  SPI1_RST:1;
    __IO uint32_t  SPI2_RST:1;
    __IO uint32_t  SPI3_RST:1;
    __IO uint32_t  UART0_RST:1;
    __IO uint32_t  UART1_RST:1;
    __IO uint32_t  UART2_RST:1;
    __I  uint32_t  RESERVE3:1;
    __IO uint32_t  PWM03_RST:1;
    __IO uint32_t  PWM47_RST:1;
    __IO uint32_t  ACMP_RST:1;
    __IO uint32_t  PS2_RST:1;
    __IO uint32_t  CAN0_RST:1;
    __I  uint32_t  RESERVE4:2;
    __IO uint32_t  USBD_RST:1;
    __IO uint32_t  ADC_RST:1;
    __IO uint32_t  I2S_RST:1;
    __I  uint32_t  RESERVE5:2;
} GCR_IPRSTC2_T;

typedef struct
{
    __IO uint32_t  HPE:1;
    __I  uint32_t  RESERVE:31;
} GCR_CPR_T;


typedef struct
{
    __IO uint32_t  BOD_EN:1;
    __IO uint32_t  BOD_VL:2;
    __IO uint32_t  BOD_RSTEN:1;
    __IO uint32_t  BOD_INTF:1;
    __IO uint32_t  BOD_LPM:1;
    __IO uint32_t  BOD_OUT:1;
    __IO uint32_t  LVR_EN:1;
    __I  uint32_t  RESERVE1:24;
} GCR_BODCR_T;

typedef struct
{
    __IO uint32_t  VTEMP_EN:1;
    __I  uint32_t  RESERVE:31;
} GCR_TEMPCR_T;

typedef __IO uint32_t GCR_PORCR_T;  

typedef struct
{
    __IO uint32_t ADC0:1;
    __IO uint32_t ADC1_AD12:1;
    __IO uint32_t ADC2_AD11:1;
    __IO uint32_t ADC3_AD10:1;
    __IO uint32_t ADC4_AD9:1;
    __IO uint32_t ADC5_AD8:1;
    __IO uint32_t ADC6_AD7:1;
    __IO uint32_t ADC7_SS21_AD6:1;
    __IO uint32_t I2C0_SDA:1;
    __IO uint32_t I2C0_SCL:1;
    __IO uint32_t I2C1_SDA_nWR:1;
    __IO uint32_t I2C1_SCL_nRD:1;
    __IO uint32_t PWM0_AD13:1;
    __IO uint32_t PWM1_AD14:1;
    __IO uint32_t PWM2_AD15:1;
    __IO uint32_t PWM3_I2SMCLK:1;
    __IO uint32_t SCHMITT:16;    
} GCR_GPAMFP_T;

typedef struct
{
    __IO uint32_t UART0_RX:1;
    __IO uint32_t UART0_TX:1;
    __IO uint32_t UART0_nRTS_nWRL:1;
    __IO uint32_t UART0_nCTS_nWRH:1;
    __IO uint32_t UART1_RX:1;
    __IO uint32_t UART1_TX:1;
    __IO uint32_t UART1_nRTS_ALE:1;
    __IO uint32_t UART1_nCTS_nCS:1;
    __IO uint32_t TM0:1;
    __IO uint32_t TM1_SS11:1;                              
    __IO uint32_t TM2_SS01:1;
    __IO uint32_t TM3_PWM4:1;                     
    __IO uint32_t CPO0_CLKO_AD0:1;
    __IO uint32_t CPO1_AD1:1;
    __IO uint32_t INT0_SS31:1;
    __IO uint32_t INT1:1;
    __IO uint32_t SCHMITT:16;    
} GCR_GPBMFP_T;

typedef struct
{
    __IO uint32_t SPI0_SS0_I2SLRCLK:1;
    __IO uint32_t SPI0_CLK_I2SBCLK:1;
    __IO uint32_t SPI0_MISO0_I2SDI:1;
    __IO uint32_t SPI0_MOSI0_I2SDO:1;
    __IO uint32_t SPI0_MISO1:1;
    __IO uint32_t SPI0_MOSI1:1;
    __IO uint32_t CPP0_AD4:1;
    __IO uint32_t CPN0_AD5:1;
    __IO uint32_t SPI1_SS0_MCLK:1;
    __IO uint32_t SPI1_CLK:1;
    __IO uint32_t SPI1_MISO0:1;
    __IO uint32_t SPI1_MOSI0:1;
    __IO uint32_t SPI1_MISO1:1;
    __IO uint32_t SPI1_MOSI1:1;
    __IO uint32_t CPP1_AD2:1;
    __IO uint32_t CPN1_AD3:1;
    __IO uint32_t SCHMITT:16;    
} GCR_GPCMFP_T;

typedef struct
{
    __IO uint32_t SPI2_SS0:1;
    __IO uint32_t SPI2_CLK_SPI0_SS1:1;
    __IO uint32_t SPI2_MISO0_SPI0_MISO1:1;
    __IO uint32_t SPI2_MOSI0_SPI0_MOSI1:1;
    __IO uint32_t SPI2_MISO1:1;
    __IO uint32_t SPI2_MOSI1:1;
    __IO uint32_t CAN0_RX:1;
    __IO uint32_t CAN0_TX:1;
    __IO uint32_t SPI3_SS0:1;
    __IO uint32_t SPI3_CLK:1;
    __IO uint32_t SPI3_MISO0:1;
    __IO uint32_t SPI3_MOSI0:1;
    __IO uint32_t SPI3_MISO1:1;
    __IO uint32_t SPI3_MOSI1:1;
    __IO uint32_t UART2_RX:1;
    __IO uint32_t UART2_TX:1;
    __IO uint32_t SCHMITT:16;    
} GCR_GPDMFP_T;


typedef struct
{
    __IO uint32_t  PWM6:1;
    __IO uint32_t  PWM7:1;
    __I  uint32_t  RESERVE1:3;
    __IO uint32_t  PWM5:1;
    __I  uint32_t  RESERVE2:10;
    __IO uint32_t  SCHMITT:16;
} GCR_GPEMFP_T;

typedef struct
{
    __IO uint32_t  PB10_S01:1;      /* GPB10 */
    __IO uint32_t  PB9_S11:1;       /* GPB9  */
    __IO uint32_t  PA7_S21:1;       /* GPA7  */
    __IO uint32_t  PB14_S31:1;      /* GPB14 */
    __IO uint32_t  PB11_PWM4:1;     /* GPB11 */
    __IO uint32_t  PC0_I2SLRCLK:1;  /* GPC0  */
    __IO uint32_t  PC1_I2SBCLK:1;   /* GPC1  */
    __IO uint32_t  PC2_I2SDI:1;     /* GPC2  */
    __IO uint32_t  PC3_I2SDO:1;     /* GPC3  */
    __IO uint32_t  PA15_I2SMCLK:1;  /* GPA15 */
    __IO uint32_t  PB12_CLKO:1;     /* GPB12 */
    __IO uint32_t  EBI_EN:1;            
    __IO uint32_t  EBI_MCLK_EN:1;   /* GPC8  */
    __IO uint32_t  EBI_WRL_EN:1;    /* GPB2  */
    __IO uint32_t  EBI_WRH_EN:1;    /* GPB3  */
    __I  uint32_t  RESERVE0:1;  
    __IO uint32_t  EBI_HB_EN:8;     
    __IO uint32_t  PB15_T0EX:1;
    __IO uint32_t  PE5_T1EX:1;
    __IO uint32_t  PB2_T2EX:1;
    __IO uint32_t  PB3_T3EX:1;
    __I  uint32_t  RESERVE1:4;
} GCR_ALTMFP_T;

typedef __IO uint32_t GCR_REGWRPROT_T;

typedef struct
{
    union 
    {
        __I uint32_t u32PDID;
        __I uint32_t PDID;
    };

    union 
    {
        __IO uint32_t u32RSTSRC;
        
        struct 
        {
            __IO uint32_t  RSTS_POR:1;
            __IO uint32_t  RSTS_RESET:1;
            __IO uint32_t  RSTS_WDT:1;
            __IO uint32_t  RSTS_LVR:1;
            __IO uint32_t  RSTS_BOD:1;
            __IO uint32_t  RSTS_SYS:1;
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  RSTS_CPU:1;    
            __I  uint32_t  RESERVE1:24;
        } RSTSRC;
    };

    union 
    {
        __IO uint32_t u32IPRSTC1;
        
        struct 
        {
            __IO uint32_t  CHIP_RST:1;
            __IO uint32_t  CPU_RST:1;
            __IO uint32_t  PDMA_RST:1;
            __IO uint32_t  EBI_RST:1;
            __I  uint32_t  RESERVE:28;
        } IPRSTC1;
    };    
    
    union 
    {
        __IO uint32_t u32IPRSTC2;
        
        struct 
        {
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  GPIO_RST:1;
            __IO uint32_t  TMR0_RST:1;
            __IO uint32_t  TMR1_RST:1;
            __IO uint32_t  TMR2_RST:1;
            __IO uint32_t  TMR3_RST:1;
            __I  uint32_t  RESERVE1:2;
            __IO uint32_t  I2C0_RST:1;
            __IO uint32_t  I2C1_RST:1;
            __I  uint32_t  RESERVE2:2;
            __IO uint32_t  SPI0_RST:1;
            __IO uint32_t  SPI1_RST:1;
            __IO uint32_t  SPI2_RST:1;
            __IO uint32_t  SPI3_RST:1;
            __IO uint32_t  UART0_RST:1;
            __IO uint32_t  UART1_RST:1;
            __IO uint32_t  UART2_RST:1;
            __I  uint32_t  RESERVE3:1;
            __IO uint32_t  PWM03_RST:1;
            __IO uint32_t  PWM47_RST:1;
            __IO uint32_t  ACMP_RST:1;
            __IO uint32_t  PS2_RST:1;
            __IO uint32_t  CAN0_RST:1;
            __I  uint32_t  RESERVE4:2;
            __IO uint32_t  USBD_RST:1;
            __IO uint32_t  ADC_RST:1;
            __IO uint32_t  I2S_RST:1;
            __I  uint32_t  RESERVE5:2;
        } IPRSTC2;
    };    

    union 
    {
        __IO uint32_t u32CPR;
        
        struct 
        {
            __IO uint32_t  HPE:1;
            __I  uint32_t  RESERVE:31;
        } CPR;
    };    

    uint32_t RESERVE0;
    
    union 
    {
        __IO uint32_t u32BODCR;
        
        struct 
        {
            __IO uint32_t  BOD_EN:1;
            __IO uint32_t  BOD_VL:2;
            __IO uint32_t  BOD_RSTEN:1;
            __IO uint32_t  BOD_INTF:1;
            __IO uint32_t  BOD_LPM:1;
            __IO uint32_t  BOD_OUT:1;
            __IO uint32_t  LVR_EN:1;
            __I  uint32_t  RESERVE1:24;
        } BODCR;
    };

    union 
    {
        __IO uint32_t u32TEMPCR;
        
        struct 
        {
            __IO uint32_t  VTEMP_EN:1;
            __I  uint32_t  RESERVE:31;
        } TEMPCR;
    };   
    
    uint32_t RESERVE1;
    
    union 
    {
        __IO uint32_t u32PORCR;
        __IO uint32_t PORCR;
    };   

    uint32_t RESERVE2[2];

    union 
    {
        __IO uint32_t u32GPAMFP;
        
        struct 
        {
            __IO uint32_t ADC0:1;
            __IO uint32_t ADC1_AD12:1;
            __IO uint32_t ADC2_AD11:1;
            __IO uint32_t ADC3_AD10:1;
            __IO uint32_t ADC4_AD9:1;
            __IO uint32_t ADC5_AD8:1;
            __IO uint32_t ADC6_AD7:1;
            __IO uint32_t ADC7_SS21_AD6:1;
            __IO uint32_t I2C0_SDA:1;
            __IO uint32_t I2C0_SCL:1;
            __IO uint32_t I2C1_SDA_nWR:1;
            __IO uint32_t I2C1_SCL_nRD:1;
            __IO uint32_t PWM0_AD13:1;
            __IO uint32_t PWM1_AD14:1;
            __IO uint32_t PWM2_AD15:1;
            __IO uint32_t PWM3_I2SMCLK:1;
            __IO uint32_t SCHMITT:16;   
        } GPAMFP;
    };   
    
    union 
    {
        __IO uint32_t u32GPBMFP;
        
        struct 
        {
            __IO uint32_t UART0_RX:1;
            __IO uint32_t UART0_TX:1;
            __IO uint32_t UART0_nRTS_nWRL:1;
            __IO uint32_t UART0_nCTS_nWRH:1;
            __IO uint32_t UART1_RX:1;
            __IO uint32_t UART1_TX:1;
            __IO uint32_t UART1_nRTS_ALE:1;
            __IO uint32_t UART1_nCTS_nCS:1;
            __IO uint32_t TM0:1;
            __IO uint32_t TM1_SS11:1;                              
            __IO uint32_t TM2_SS01:1;
            __IO uint32_t TM3_PWM4:1;                     
            __IO uint32_t CPO0_CLKO_AD0:1;
            __IO uint32_t CPO1_AD1:1;
            __IO uint32_t INT0_SS31:1;
            __IO uint32_t INT1:1;
            __IO uint32_t SCHMITT:16;    
        } GPBMFP;
    };   
    
    union 
    {
        __IO uint32_t u32GPCMFP;
        
        struct 
        {
            __IO uint32_t SPI0_SS0_I2SLRCLK:1;
            __IO uint32_t SPI0_CLK_I2SBCLK:1;
            __IO uint32_t SPI0_MISO0_I2SDI:1;
            __IO uint32_t SPI0_MOSI0_I2SDO:1;
            __IO uint32_t SPI0_MISO1:1;
            __IO uint32_t SPI0_MOSI1:1;
            __IO uint32_t CPP0_AD4:1;
            __IO uint32_t CPN0_AD5:1;
            __IO uint32_t SPI1_SS0_MCLK:1;
            __IO uint32_t SPI1_CLK:1;
            __IO uint32_t SPI1_MISO0:1;
            __IO uint32_t SPI1_MOSI0:1;
            __IO uint32_t SPI1_MISO1:1;
            __IO uint32_t SPI1_MOSI1:1;
            __IO uint32_t CPP1_AD2:1;
            __IO uint32_t CPN1_AD3:1;
            __IO uint32_t SCHMITT:16; 
        } GPCMFP;
    };   
    
    union 
    {
        __IO uint32_t u32GPDMFP;
        
        struct 
        {
            __IO uint32_t SPI2_SS0:1;
            __IO uint32_t SPI2_CLK_SPI0_SS1:1;
            __IO uint32_t SPI2_MISO0_SPI0_MISO1:1;
            __IO uint32_t SPI2_MOSI0_SPI0_MOSI1:1;
            __IO uint32_t SPI2_MISO1:1;
            __IO uint32_t SPI2_MOSI1:1;
            __IO uint32_t CAN0_RX:1;
            __IO uint32_t CAN0_TX:1;
            __IO uint32_t SPI3_SS0:1;
            __IO uint32_t SPI3_CLK:1;
            __IO uint32_t SPI3_MISO0:1;
            __IO uint32_t SPI3_MOSI0:1;
            __IO uint32_t SPI3_MISO1:1;
            __IO uint32_t SPI3_MOSI1:1;
            __IO uint32_t UART2_RX:1;
            __IO uint32_t UART2_TX:1;
            __IO uint32_t SCHMITT:16;
        } GPDMFP;
    };   
    
    union 
    {
        __IO uint32_t u32GPEMFP;
        
        struct 
        {
            __IO uint32_t  PWM6:1;
            __IO uint32_t  PWM7:1;
            __I  uint32_t  RESERVE1:3;
            __IO uint32_t  PWM5:1;
            __I  uint32_t  RESERVE2:10;
            __IO uint32_t  SCHMITT:16;
        } GPEMFP;
    };                   
    
    uint32_t RESERVE3[3];
     
    union 
    {
        __IO uint32_t u32ALTMFP;
        
        struct 
        {
            __IO uint32_t  PB10_S01:1;      /* GPB10 */
            __IO uint32_t  PB9_S11:1;       /* GPB9  */
            __IO uint32_t  PA7_S21:1;       /* GPA7  */
            __IO uint32_t  PB14_S31:1;      /* GPB14 */
            __IO uint32_t  PB11_PWM4:1;     /* GPB11 */
            __IO uint32_t  PC0_I2SLRCLK:1;  /* GPC0  */
            __IO uint32_t  PC1_I2SBCLK:1;   /* GPC1  */
            __IO uint32_t  PC2_I2SDI:1;     /* GPC2  */
            __IO uint32_t  PC3_I2SDO:1;     /* GPC3  */
            __IO uint32_t  PA15_I2SMCLK:1;  /* GPA15 */
            __IO uint32_t  PB12_CLKO:1;     /* GPB12 */
            __IO uint32_t  EBI_EN:1;            
            __IO uint32_t  EBI_MCLK_EN:1;   /* GPC8  */
            __IO uint32_t  EBI_WRL_EN:1;    /* GPB2  */
            __IO uint32_t  EBI_WRH_EN:1;    /* GPB3  */
            __I  uint32_t  RESERVE0:1;  
            __IO uint32_t  EBI_HB_EN:8;     
            __IO uint32_t  PB15_T0EX:1;
            __IO uint32_t  PE5_T1EX:1;
            __IO uint32_t  PB2_T2EX:1;
            __IO uint32_t  PB3_T3EX:1;
            __I  uint32_t  RESERVE1:4;  
        } ALTMFP;
    };   
    
    uint32_t RESERVE4[43];
    
    union 
    {
        __IO uint32_t u32REGWRPROT;
        __IO uint32_t REGWRPROT;
    };  
} GCR_T;

/* GCR RSTSRC Bit Field Definitions */
#define GCR_RSTSRC_RSTS_CPU_Pos                 7
#define GCR_RSTSRC_RSTS_CPU_Msk                 (1ul << GCR_RSTSRC_RSTS_CPU_Pos)

#define GCR_RSTSRC_RSTS_SYS_Pos                 5
#define GCR_RSTSRC_RSTS_SYS_Msk                 (1ul << GCR_RSTSRC_RSTS_SYS_Pos)

#define GCR_RSTSRC_RSTS_BOD_Pos                 4
#define GCR_RSTSRC_RSTS_BOD_Msk                 (1ul << GCR_RSTSRC_RSTS_BOD_Pos)

#define GCR_RSTSRC_RSTS_LVR_Pos                 3
#define GCR_RSTSRC_RSTS_LVR_Msk                 (1ul << GCR_RSTSRC_RSTS_LVR_Pos)

#define GCR_RSTSRC_RSTS_WDT_Pos                 2
#define GCR_RSTSRC_RSTS_WDT_Msk                 (1ul << GCR_RSTSRC_RSTS_WDT_Pos)

#define GCR_RSTSRC_RSTS_RESET_Pos               1
#define GCR_RSTSRC_RSTS_RESET_Msk               (1ul << GCR_RSTSRC_RSTS_RESET_Pos)

#define GCR_RSTSRC_RSTS_POR_Pos                 0
#define GCR_RSTSRC_RSTS_POR_Msk                 (1ul << GCR_RSTSRC_RSTS_POR_Pos)

/* GCR IPRSTC1 Bit Field Definitions */
#define GCR_IPRSTC1_EBI_RST_Pos                 3
#define GCR_IPRSTC1_EBI_RST_Msk                 (1ul << GCR_IPRSTC1_EBI_RST_Pos)

#define GCR_IPRSTC1_PDMA_RST_Pos                2
#define GCR_IPRSTC1_PDMA_RST_Msk                (1ul << GCR_IPRSTC1_PDMA_RST_Pos)

#define GCR_IPRSTC1_CPU_RST_Pos                 1
#define GCR_IPRSTC1_CPU_RST_Msk                 (1ul << GCR_IPRSTC1_CPU_RST_Pos)

#define GCR_IPRSTC1_CHIP_RST_Pos                0
#define GCR_IPRSTC1_CHIP_RST_Msk                (1ul << GCR_IPRSTC1_CHIP_RST_Pos)

/* GCR IPRSTC2 Bit Field Definitions */
#define GCR_IPRSTC2_I2S_RST_Pos                 29
#define GCR_IPRSTC2_I2S_RST_Msk                 (1ul << GCR_IPRSTC2_I2S_RST_Pos)

#define GCR_IPRSTC2_ADC_RST_Pos                 28
#define GCR_IPRSTC2_ADC_RST_Msk                 (1ul << GCR_IPRSTC2_ADC_RST_Pos)

#define GCR_IPRSTC2_USBD_RST_Pos                27
#define GCR_IPRSTC2_USBD_RST_Msk                (1ul << GCR_IPRSTC2_USBD_RST_Pos)

#define GCR_IPRSTC2_CAN0_RST_Pos                24
#define GCR_IPRSTC2_CAN0_RST_Msk                (1ul << GCR_IPRSTC2_CAN0_RST_Pos)

#define GCR_IPRSTC2_PS2_RST_Pos                 23
#define GCR_IPRSTC2_PS2_RST_Msk                 (1ul << GCR_IPRSTC2_PS2_RST_Pos)

#define GCR_IPRSTC2_ACMP_RST_Pos                22
#define GCR_IPRSTC2_ACMP_RST_Msk                (1ul << GCR_IPRSTC2_ACMP_RST_Pos)

#define GCR_IPRSTC2_PWM47_RST_Pos               21
#define GCR_IPRSTC2_PWM47_RST_Msk               (1ul << GCR_IPRSTC2_PWM47_RST_Pos)

#define GCR_IPRSTC2_PWM03_RST_Pos               20
#define GCR_IPRSTC2_PWM03_RST_Msk               (1ul << GCR_IPRSTC2_PWM03_RST_Pos)

#define GCR_IPRSTC2_UART2_RST_Pos               18
#define GCR_IPRSTC2_UART2_RST_Msk               (1ul << GCR_IPRSTC2_UART2_RST_Pos)

#define GCR_IPRSTC2_UART1_RST_Pos               17
#define GCR_IPRSTC2_UART1_RST_Msk               (1ul << GCR_IPRSTC2_UART1_RST_Pos)

#define GCR_IPRSTC2_UART0_RST_Pos               16
#define GCR_IPRSTC2_UART0_RST_Msk               (1ul << GCR_IPRSTC2_UART0_RST_Pos)

#define GCR_IPRSTC2_SPI3_RST_Pos                15
#define GCR_IPRSTC2_SPI3_RST_Msk                (1ul << GCR_IPRSTC2_SPI3_RST_Pos)

#define GCR_IPRSTC2_SPI2_RST_Pos                14
#define GCR_IPRSTC2_SPI2_RST_Msk                (1ul << GCR_IPRSTC2_SPI2_RST_Pos)

#define GCR_IPRSTC2_SPI1_RST_Pos                13
#define GCR_IPRSTC2_SPI1_RST_Msk                (1ul << GCR_IPRSTC2_SPI1_RST_Pos)

#define GCR_IPRSTC2_SPI0_RST_Pos                12
#define GCR_IPRSTC2_SPI0_RST_Msk                (1ul << GCR_IPRSTC2_SPI0_RST_Pos)

#define GCR_IPRSTC2_I2C1_RST_Pos                9
#define GCR_IPRSTC2_I2C1_RST_Msk                (1ul << GCR_IPRSTC2_I2C1_RST_Pos)

#define GCR_IPRSTC2_I2C0_RST_Pos                8
#define GCR_IPRSTC2_I2C0_RST_Msk                (1ul << GCR_IPRSTC2_I2C0_RST_Pos)

#define GCR_IPRSTC2_TMR3_RST_Pos                5
#define GCR_IPRSTC2_TMR3_RST_Msk                (1ul << GCR_IPRSTC2_TMR3_RST_Pos)

#define GCR_IPRSTC2_TMR2_RST_Pos                4
#define GCR_IPRSTC2_TMR2_RST_Msk                (1ul << GCR_IPRSTC2_TMR2_RST_Pos)

#define GCR_IPRSTC2_TMR1_RST_Pos                3
#define GCR_IPRSTC2_TMR1_RST_Msk                (1ul << GCR_IPRSTC2_TMR1_RST_Pos)

#define GCR_IPRSTC2_TMR0_RST_Pos                2
#define GCR_IPRSTC2_TMR0_RST_Msk                (1ul << GCR_IPRSTC2_TMR0_RST_Pos)

#define GCR_IPRSTC2_GPIO_RST_Pos                1
#define GCR_IPRSTC2_GPIO_RST_Msk                (1ul << GCR_IPRSTC2_GPIO_RST_Pos)

/* GCR CPR Bit Field Definitions */
#define GCR_CPR_HPE_Pos                         0
#define GCR_CPR_HPE_Msk                         (1ul << GCR_CPR_HPE_Pos)

/* GCR BODCR Bit Field Definitions */
#define GCR_BODCR_LVR_EN_Pos                    7
#define GCR_BODCR_LVR_EN_Msk                    (1ul << GCR_BODCR_LVR_EN_Pos)

#define GCR_BODCR_BOD_OUT_Pos                   6
#define GCR_BODCR_BOD_OUT_Msk                   (1ul << GCR_BODCR_BOD_OUT_Pos)

#define GCR_BODCR_BOD_LPM_Pos                   5
#define GCR_BODCR_BOD_LPM_Msk                   (1ul << GCR_BODCR_BOD_LPM_Pos)

#define GCR_BODCR_BOD_INTF_Pos                  4
#define GCR_BODCR_BOD_INTF_Msk                  (1ul << GCR_BODCR_BOD_INTF_Pos)

#define GCR_BODCR_BOD_RSTEN_Pos                 3
#define GCR_BODCR_BOD_RSTEN_Msk                 (1ul << GCR_BODCR_BOD_RSTEN_Pos)

#define GCR_BODCR_BOD_VL_Pos                    1
#define GCR_BODCR_BOD_VL_Msk                    (3ul << GCR_BODCR_BOD_VL_Pos)

#define GCR_BODCR_BOD_EN_Pos                    0
#define GCR_BODCR_BOD_EN_Msk                    (1ul << GCR_BODCR_BOD_EN_Pos)

/* GCR TEMPCR Bit Field Definitions */
#define GCR_TEMPCR_VTEMP_EN_Pos                 0
#define GCR_TEMPCR_VTEMP_EN_Msk                 (1ul << GCR_TEMPCR_VTEMP_EN_Pos)

/* GCR PORCR Bit Field Definitions */
#define GCR_PORCR_POR_DIS_CODE_Pos              0
#define GCR_PORCR_POR_DIS_CODE_Msk              (0xFFFFul << GCR_PORCR_POR_DIS_CODE_Pos)

/* GCR GPAMFP Bit Field Definitions */
#define GCR_GPAMFP_GPA_TYPE_Pos                 16
#define GCR_GPAMFP_GPA_TYPE_Msk                 (0xFFFFul << GCR_GPAMFP_GPA_TYPE_Pos)

#define GCR_GPAMFP_GPA_MFP_Pos                  0
#define GCR_GPAMFP_GPA_MFP_Msk                  (0xFFFFul << GCR_GPAMFP_GPA_MFP_Pos)


/* GCR GPBMFP Bit Field Definitions */
#define GCR_GPBMFP_GPB_TYPE_Pos                 16
#define GCR_GPBMFP_GPB_TYPE_Msk                 (0xFFFFul << GCR_GPBMFP_GPB_TYPE_Pos)

#define GCR_GPBMFP_GPB_MFP_Pos                  0
#define GCR_GPBMFP_GPB_MFP_Msk                  (0xFFFFul << GCR_GPBMFP_GPB_MFP_Pos)

/* GCR GPCMFP Bit Field Definitions */
#define GCR_GPCMFP_GPC_TYPE_Pos                 16
#define GCR_GPCMFP_GPC_TYPE_Msk                 (0xFFFFul << GCR_GPCMFP_GPC_TYPE_Pos)

#define GCR_GPCMFP_GPC_MFP_Pos                  0
#define GCR_GPCMFP_GPC_MFP_Msk                  (0xFFFFul << GCR_GPCMFP_GPC_MFP_Pos)

/* GCR GPDMFP Bit Field Definitions */
#define GCR_GPDMFP_GPD_TYPE_Pos                 16
#define GCR_GPDMFP_GPD_TYPE_Msk                 (0xFFFFul << GCR_GPDMFP_GPD_TYPE_Pos)

#define GCR_GPDMFP_GPD_MFP_Pos                  0
#define GCR_GPDMFP_GPD_MFP_Msk                  (0xFFFFul << GCR_GPDMFP_GPD_MFP_Pos)

/* GCR GPEMFP Bit Field Definitions */
#define GCR_GPEMFP_GPE_TYPE_Pos                 16
#define GCR_GPEMFP_GPE_TYPE_Msk                 (0xFFFFul << GCR_GPEMFP_GPE_TYPE_Pos)

#define GCR_GPEMFP_GPE_MFP5_Pos                 5
#define GCR_GPEMFP_GPE_MFP5_Msk                 (1ul << GCR_GPEMFP_GPE_MFP5_Pos)

#define GCR_GPEMFP_GPE_MFP1_Pos                 1
#define GCR_GPEMFP_GPE_MFP1_Msk                 (1ul << GCR_GPEMFP_GPE_MFP1_Pos)

#define GCR_GPEMFP_GPE_MFP0_Pos                 0
#define GCR_GPEMFP_GPE_MFP0_Msk                 (1ul << GCR_GPEMFP_GPE_MFP0_Pos)

/* GCR ALTMFP Bit Field Definitions */
#define GCR_ALTMFP_PB3_T3EX_Pos                 27
#define GCR_ALTMFP_PB3_T3EX_Msk                 (1ul << GCR_ALTMFP_PB3_T3EX_Pos)

#define GCR_ALTMFP_PB2_T2EX_Pos                 26
#define GCR_ALTMFP_PB2_T2EX_Msk                 (1ul << GCR_ALTMFP_PB2_T2EX_Pos)

#define GCR_ALTMFP_PE5_T1EX_Pos                 25
#define GCR_ALTMFP_PE5_T1EX_Msk                 (1ul << GCR_ALTMFP_PE5_T1EX_Pos)

#define GCR_ALTMFP_PB15_T0EX_Pos                24
#define GCR_ALTMFP_PB15_T0EX_Msk                (1ul << GCR_ALTMFP_PB15_T0EX_Pos)

#define GCR_ALTMFP_EBI_HB_EN_Pos                16
#define GCR_ALTMFP_EBI_HB_EN_Msk                (0xFFul << GCR_ALTMFP_EBI_HB_EN_Pos)

#define GCR_ALTMFP_EBI_nWRH_EN_Pos              14
#define GCR_ALTMFP_EBI_nWRH_EN_Msk              (1ul << GCR_ALTMFP_EBI_nWRH_EN_Pos)

#define GCR_ALTMFP_EBI_nWRL_EN_Pos              13
#define GCR_ALTMFP_EBI_nWRL_EN_Msk              (1ul << GCR_ALTMFPEBI_nWRL_EN_Pos)

#define GCR_ALTMFP_EBI_MCLK_EN_Pos              12
#define GCR_ALTMFP_EBI_MCLK_EN_Msk              (1ul << GCR_ALTMFP_EBI_MCLK_EN_Pos)

#define GCR_ALTMFP_EBI_EN_Pos                   11
#define GCR_ALTMFP_EBI_EN_Msk                   (1ul << GCR_ALTMFP_EBI_EN_Pos)

#define GCR_ALTMFP_PB12_CLKO_Pos                10
#define GCR_ALTMFP_PB12_CLKO_Msk                (1ul << GCR_ALTMFP_PB12_CLKO_Pos)

#define GCR_ALTMFP_PA15_I2SMCLK_Pos             9
#define GCR_ALTMFP_PA15_I2SMCLK_Msk             (1ul << GCR_ALTMFP_PA15_I2SMCLK_Pos)

#define GCR_ALTMFP_PC3_I2SDO_Pos                8
#define GCR_ALTMFP_PC3_I2SDO_Msk                (1ul << GCR_ALTMFP_PC3_I2SDO_Pos)

#define GCR_ALTMFP_PC2_I2SDI_Pos                7
#define GCR_ALTMFP_PC2_I2SDI_Msk                (1ul << GCR_ALTMFP_PC2_I2SDI_Pos)

#define GCR_ALTMFP_PC1_I2SBCLK_Pos              6
#define GCR_ALTMFP_PC1_I2SBCLK_Msk              (1ul << GCR_ALTMFP_PC1_I2SBCLK_Pos)

#define GCR_ALTMFP_PC0_I2SLRCLK_Pos             5
#define GCR_ALTMFP_PC0_I2SLRCLK_Msk             (1ul << GCR_ALTMFP_PC0_I2SLRCLK_Pos)

#define GCR_ALTMFP_PB11_PWM4_Pos                4
#define GCR_ALTMFP_PB11_PWM4_Msk                (1ul << GCR_ALTMFP_PB11_PWM4_Pos)

#define GCR_ALTMFP_PB14_S31_Pos                 3
#define GCR_ALTMFP_PB14_S31_Msk                 (1ul << GCR_ALTMFP_PB14_S31_Pos)

#define GCR_ALTMFP_PA7_S21_Pos                  2
#define GCR_ALTMFP_PA7_S21_Msk                  (1ul << GCR_ALTMFP_PA7_S21_Pos)

#define GCR_ALTMFP_PB9_S11_Pos                  1
#define GCR_ALTMFP_PB9_S11_Msk                  (1ul << GCR_ALTMFP_PB9_S11_Pos)

#define GCR_ALTMFP_PB10_S01_Pos                 0
#define GCR_ALTMFP_PB10_S01_Msk                 (1ul << GCR_ALTMFP_PB10_S01_Pos)

/* GCR REGWRPROT Bit Field Definitions */
#define GCR_REGWRPROT_REGWRPROT_Pos             0
#define GCR_REGWRPROT_REGWRPROT_Msk             (0xFFul << GCR_REGWRPROT_REGWRPROT_Pos)


typedef struct
{
    __IO uint32_t  INTSRC:4;
    __I  uint32_t  RESERVE:28;
} GCR_IRQSRC_T;

typedef struct
{
    __IO uint32_t  NMISEL:5;
    __I  uint32_t  RESERVE0:3;
    __IO uint32_t  NMI_EN:1;
    __I  uint32_t  RESERVE1:23;
} GCR_NMISEL_T;


typedef __IO uint32_t GCR_MCUIRQ_T;

typedef struct
{
    union 
    {
        __I uint32_t u32IRQSRC[32];
        __I uint32_t IRQSRC[32];
    };

    union 
    {
        __IO uint32_t u32NMISEL;
        
        struct 
        {
            __IO uint32_t  NMISEL:5;
            __I  uint32_t  RESERVE0:3;
            __IO uint32_t  NMI_EN:1;
            __I  uint32_t  RESERVE1:23;
        } NMISEL;
    };

    union 
    {
        __IO uint32_t u32MCUIRQ;
        __IO uint32_t MCUIRQ;
    };
} GCR_INT_T;

/* GCR IRQSRC Bit Field Definitions */
#define GCR_IRQSRC_INT_SRC_Pos                  0
#define GCR_IRQSRC_INT_SRC_Msk                  (0xFul << GCR_IRQSRC_INT_SRC_Pos)

/* GCR NMISEL Bit Field Definitions */
#define GCR_NMISEL_NMI_EN_Pos                   8
#define GCR_NMISEL_NMI_EN_Msk                   (1ul << GCR_NMISEL_NMI_EN_Pos)

#define GCR_NMISEL_NMISEL_Pos                   0
#define GCR_NMISEL_NMISEL_Msk                   (0x1Ful << GCR_NMISEL_NMISEL_Pos)

/*-------------------------- FLASH Memory Controller -------------------------*/
typedef struct
{
    __IO uint32_t  ISPEN:1;
    __IO uint32_t  BS:1;
    __I  uint32_t  RESERVE0:1;
    __IO uint32_t  APUEN:1;
    __IO uint32_t  CFGUEN:1;
    __IO uint32_t  LDUEN:1;
    __IO uint32_t  ISPFF:1;
    __I  uint32_t  RESERVE1:1;
    __IO uint32_t  PT:3;
    __I  uint32_t  RESERVE2:1;
    __IO uint32_t  ET:3;
    __I  uint32_t  RESERVE3:17;

} FMC_ISPCON_T;

typedef __IO uint32_t FMC_ISPADR_T;
typedef __IO uint32_t FMC_ISPDAT_T;

typedef struct
{
    __IO uint32_t  FCTRL:4;
    __IO uint32_t  FCEN:1;
    __IO uint32_t  FOEN:1;
    __I  uint32_t  RESERVE:26;
} FMC_ISPCMD_T;

typedef struct
{
    __IO uint32_t  ISPGO:1;
    __I  uint32_t  RESERVE:31;
} FMC_ISPTRG_T;

typedef __I uint32_t FMC_DFBADR_T;

typedef struct
{
    __IO uint32_t  FPSEN:1;
    __IO uint32_t  FATS:3;
    __IO uint32_t  LFOM:1;
    __I  uint32_t  RESERVE:27;
} FMC_FATCON_T;

typedef struct
{
    union 
    {
        __IO uint32_t u32ISPCON;
        
        struct 
        {
            __IO uint32_t  ISPEN:1;
            __IO uint32_t  BS:1;
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  APUEN:1;
            __IO uint32_t  CFGUEN:1;
            __IO uint32_t  LDUEN:1;
            __IO uint32_t  ISPFF:1;
            __I  uint32_t  RESERVE1:1;
            __IO uint32_t  PT:3;
            __I  uint32_t  RESERVE2:1;
            __IO uint32_t  ET:3;
            __I  uint32_t  RESERVE3:17;
        } ISPCON;
    };

    union 
    {
        __IO uint32_t u32ISPADR;
        __IO uint32_t ISPADR;
    };

    union 
    {
        __IO uint32_t u32ISPDAT;
        __IO uint32_t ISPDAT;
    };
    
    union 
    {
        __IO uint32_t u32ISPCMD;
        
        struct 
        {
            __IO uint32_t  FCTRL:4;
            __IO uint32_t  FCEN:1;
            __IO uint32_t  FOEN:1;
            __I  uint32_t  RESERVE:26;
        } ISPCMD;
    };

    union 
    {
        __IO uint32_t u32ISPTRG;
        
        struct 
        {
            __IO uint32_t  ISPGO:1;
            __I  uint32_t  RESERVE:31;
        } ISPTRG;
    };
    
    union 
    {
        __I uint32_t u32DFBADR;
        __I uint32_t DFBADR;
    };

    union 
    {
        __IO uint32_t u32FATCON;
        
        struct 
        {
            __IO uint32_t  FPSEN:1;
            __IO uint32_t  FATS:3;
            __IO uint32_t  LFOM:1;
            __I  uint32_t  RESERVE:27;
        } FATCON;
    };
} FMC_T;

/* FMC ISPCON Bit Field Definitions */
#define FMC_ISPCON_ET_Pos                       12
#define FMC_ISPCON_ET_Msk                       (7ul << FMC_ISPCON_ET_Pos)

#define FMC_ISPCON_PT_Pos                       8
#define FMC_ISPCON_PT_Msk                       (7ul << FMC_ISPCON_PT_Pos)

#define FMC_ISPCON_ISPFF_Pos                    6
#define FMC_ISPCON_ISPFF_Msk                    (1ul << FMC_ISPCON_ISPFF_Pos)

#define FMC_ISPCON_LDUEN_Pos                    5
#define FMC_ISPCON_LDUEN_Msk                    (1ul << FMC_ISPCON_LDUEN_Pos)

#define FMC_ISPCON_CFGUEN_Pos                   4
#define FMC_ISPCON_CFGUEN_Msk                   (1ul << FMC_ISPCON_CFGUEN_Pos)

#define FMC_ISPCON_APUEN_Pos                    3
#define FMC_ISPCON_APUEN_Msk                    (1ul << FMC_ISPCON_APUEN_Pos)

#define FMC_ISPCON_BS_Pos                       1
#define FMC_ISPCON_BS_Msk                       (1ul << FMC_ISPCON_BS_Pos)

#define FMC_ISPCON_ISPEN_Pos                    0
#define FMC_ISPCON_ISPEN_Msk                    (1ul << FMC_ISPCON_ISPEN_Pos)

/* FMC ISPADR Bit Field Definitions */
#define FMC_ISPADR_ISPADR_Pos                   0
#define FMC_ISPADR_ISPADR_Msk                   (0xFFFFFFFFul << FMC_ISPADR_ISPADR_Pos)

/* FMC ISPADR Bit Field Definitions */
#define FMC_ISPDAT_ISPDAT_Pos                   0
#define FMC_ISPDAT_ISPDAT_Msk                   (0xFFFFFFFFul << FMC_ISPDAT_ISPDAT_Pos)

/* FMC ISPCMD Bit Field Definitions */
#define FMC_ISPCMD_FOEN_Pos                     5
#define FMC_ISPCMD_FOEN_Msk                     (1ul << FMC_ISPCMD_FOEN_Pos)

#define FMC_ISPCMD_FCEN_Pos                     4
#define FMC_ISPCMD_FCEN_Msk                     (1ul << FMC_ISPCMD_FCEN_Pos)

#define FMC_ISPCMD_FCTRL_Pos                    0
#define FMC_ISPCMD_FCTRL_Msk                    (0xFul << FMC_ISPCMD_FCTRL_Pos)

/* FMC ISPTRG Bit Field Definitions */
#define FMC_ISPTRG_ISPGO_Pos                    0
#define FMC_ISPTRG_ISPGO_Msk                    (1ul << FMC_ISPTRG_ISPGO_Pos)

/* FMC DFBADR Bit Field Definitions */
#define FMC_DFBADR_DFBA_Pos                     0
#define FMC_DFBADR_DFBA_Msk                     (0xFFFFFFFFul << FMC_DFBADR_DFBA_Pos)

/* FMC FATCON Bit Field Definitions */
#define FMC_FATCON_LFOM_Pos                     4
#define FMC_FATCON_LFOM_Msk                     (1ul << FMC_FATCON_LFOM_Pos)

#define FMC_FATCON_FATS_Pos                     1
#define FMC_FATCON_FATS_Msk                     (7ul << FMC_FATCON_FATS_Pos)

#define FMC_FATCON_FPSEN_Pos                    0
#define FMC_FATCON_FPSEN_Msk                    (1ul << FMC_FATCON_FPSEN_Pos)

/*------------------------ PS2 Device Interface Controller -------------------*/
typedef struct
{
    __IO uint32_t  PS2EN:1;
    __IO uint32_t  TXINTEN:1;
    __IO uint32_t  RXINTEN:1;
    __IO uint32_t  TXFIFO_DEPTH:4;
    __IO uint32_t  ACK:1;
    __IO uint32_t  CLRFIFO:1;
    __IO uint32_t  OVERRIDE:1;
    __IO uint32_t  FPS2CLK:1;
    __IO uint32_t  FPS2DAT:1;
    __I  uint32_t  RESERVE:20;
} PS2_CON_T;

typedef __IO uint32_t PS2_DATA_T;

typedef struct
{
    __IO uint32_t  PS2CLK:1;
    __IO uint32_t  PS2DATA:1;
    __IO uint32_t  FRAMERR:1;
    __IO uint32_t  RXPARTY:1;
    __IO uint32_t  RXBUSY:1;
    __IO uint32_t  TXBUSY:1;
    __IO uint32_t  RXOVF:1;
    __IO uint32_t  TXEMPTY:1;
    __IO uint32_t  BYTEIDX:4;
    __I  uint32_t  RESERVE:20;
} PS2_STATUS_T;

typedef struct
{
    __IO uint32_t  RXINT:1;
    __IO uint32_t  TXINT:1;
    __I  uint32_t  RESERVE:30;
} PS2_INTID_T;

typedef struct
{
    union
    {
        __IO uint32_t u32PS2CON;

        struct
        {
            __IO uint32_t  PS2EN:1;
            __IO uint32_t  TXINTEN:1;
            __IO uint32_t  RXINTEN:1;
            __IO uint32_t  TXFIFO_DEPTH:4;
            __IO uint32_t  ACK:1;
            __IO uint32_t  CLRFIFO:1;
            __IO uint32_t  OVERRIDE:1;
            __IO uint32_t  FPS2CLK:1;
            __IO uint32_t  FPS2DAT:1;
            __I  uint32_t  RESERVE:20;      
        } PS2CON;
    };

    union
    {
        __IO uint32_t u32TXDATA[4];
        __IO uint32_t TXDATA[4];        
    };

    union
    {
        __I uint32_t u32RXDATA;
        __I uint32_t RXDATA;
    };

    union
    {
        __IO uint32_t u32STATUS;

        struct
        {
            __IO uint32_t  PS2CLK:1;
            __IO uint32_t  PS2DATA:1;
            __IO uint32_t  FRAMERR:1;
            __IO uint32_t  RXPARTY:1;
            __IO uint32_t  RXBUSY:1;
            __IO uint32_t  TXBUSY:1;
            __IO uint32_t  RXOVF:1;
            __IO uint32_t  TXEMPTY:1;
            __IO uint32_t  BYTEIDX:4;
            __I  uint32_t  RESERVE:20;            
        } STATUS;
    };

    union
    {
        __IO uint32_t u32INTID;

        struct
        {
            __IO uint32_t  RXINT:1;
            __IO uint32_t  TXINT:1;
            __I  uint32_t  RESERVE:30;
        } INTID;          
    };
} PS2_T;

/* PS/2 PS2CON Bit Field Definitions */
#define PS2_PS2CON_PS2EN_Pos                       0
#define PS2_PS2CON_PS2EN_Msk                       (1ul << PS2_PS2CON_PS2EN_Pos)  

#define PS2_PS2CON_TXINTEN_Pos                     1
#define PS2_PS2CON_TXINTEN_Msk                     (1ul << PS2_PS2CON_TXINTEN_Pos) 

#define PS2_PS2CON_RXINTEN_Pos                     2
#define PS2_PS2CON_RXINTEN_Msk                     (1ul << PS2_PS2CON_RXINTEN_Pos)  

#define PS2_PS2CON_TXFIFO_DEPTH_Pos                3
#define PS2_PS2CON_TXFIFO_DEPTH_Msk                (0xFul << PS2_PS2CON_TXFIFO_DEPTH_Pos)

#define PS2_PS2CON_ACK_Pos                         7
#define PS2_PS2CON_ACK_Msk                         (1ul << PS2_PS2CON_ACK_Pos) 

#define PS2_PS2CON_CLRFIFO_Pos                     8
#define PS2_PS2CON_CLRFIFO_Msk                     (1ul << PS2_PS2CON_CLRFIFO_Pos)  

#define PS2_PS2CON_OVERRIDE_Pos                    9
#define PS2_PS2CON_OVERRIDE_Msk                    (1ul << PS2_PS2CON_OVERRIDE_Pos)  

#define PS2_PS2CON_FPS2CLK_Pos                     10
#define PS2_PS2CON_FPS2CLK_Msk                     (1ul << PS2_PS2CON_FPS2CLK_Pos) 

#define PS2_PS2CON_FPS2DAT_Pos                     11
#define PS2_PS2CON_FPS2DAT_Msk                     (1ul << PS2_PS2CON_FPS2DAT_Pos) 

/* PS/2 PS2RXDATA Bit Field Definitions */
#define PS2_PS2RXDATA_RXDATA_Pos                   0
#define PS2_PS2RXDATA_RXDATA_Msk                   (0xFFul << PS2_PS2RXDATA_RXDATA_Pos)

/* PS/2 PS2STATUS Bit Field Definitions */
#define PS2_PS2STATUS_PS2CLK_Pos                   0
#define PS2_PS2STATUS_PS2CLK_Msk                   (1ul << PS2_PS2STATUS_PS2CLK_Pos) 

#define PS2_PS2STATUS_PS2DATA_Pos                  1
#define PS2_PS2STATUS_PS2DATA_Msk                  (1ul << PS2_PS2STATUS_PS2DATA_Pos) 

#define PS2_PS2STATUS_FRAMERR_Pos                  2
#define PS2_PS2STATUS_FRAMERR_Msk                  (1ul << PS2_PS2STATUS_FRAMERR_Pos) 

#define PS2_PS2STATUS_RXPARITY_Pos                 3
#define PS2_PS2STATUS_RXPARITY_Msk                 (1ul << PS2_PS2STATUS_RXPARITY_Pos) 

#define PS2_PS2STATUS_RXPARITY_Pos                 3
#define PS2_PS2STATUS_RXPARITY_Msk                 (1ul << PS2_PS2STATUS_RXPARITY_Pos)

#define PS2_PS2STATUS_RXBUSY_Pos                   4
#define PS2_PS2STATUS_RXBUSY_Msk                   (1ul << PS2_PS2STATUS_RXBUSY_Pos)

#define PS2_PS2STATUS_TXBUSY_Pos                   5
#define PS2_PS2STATUS_TXBUSY_Msk                   (1ul << PS2_PS2STATUS_TXBUSY_Pos)

#define PS2_PS2STATUS_RXOVF_Pos                    6
#define PS2_PS2STATUS_RXOVF_Msk                    (1ul << PS2_PS2STATUS_RXOVF_Pos)

#define PS2_PS2STATUS_TXEMPTY_Pos                  7
#define PS2_PS2STATUS_TXEMPTY_Msk                  (1ul << PS2_PS2STATUS_TXEMPTY_Pos)

#define PS2_PS2STATUS_BYTEIDX_Pos                  8
#define PS2_PS2STATUS_BYTEIDX_Msk                  (0xFul << PS2_PS2STATUS_BYTEIDX_Pos)

/* PS/2 PS2INTID Bit Field Definitions */
#define PS2_PS2INTID_RXINT_Pos                     0
#define PS2_PS2INTID_RXINT_Msk                     (1ul << PS2_PS2INTID_RXINT_Pos) 
                     
#define PS2_PS2INTID_TXINT_Pos                     1
#define PS2_PS2INTID_TXINT_Msk                     (1ul << PS2_PS2INTID_TXINT_Pos) 

/*---------------------------- CAN Bus Controller ----------------------------*/

/*--------------- Controller Area Network Interface Register -----------------*/

/* CAN_MsgObj_T :Message interface structure */
typedef struct
{
    union 
    {
        __IO uint32_t u32CREQ;

        struct {
            __IO uint32_t  MSG_NUM:6;
            __I  uint32_t  RESERVE0:9;
            __IO uint32_t  BUSY:1;	  
            __I  uint32_t  RESERVE1:16;
        } CREQ;
    };
 
 
    union {
        __IO uint32_t  	u32CMASK;
        		
        struct {
            __IO uint32_t  DAT_B:1;
            __IO uint32_t  DAT_A:1;
            __IO uint32_t  TXRQST_NEWDAT:1;
            __IO uint32_t  CLRINTPND:1;
            __IO uint32_t  CONTROL:1;
            __IO uint32_t  ARB:1;
            __IO uint32_t  MASK:1;
            __IO uint32_t  WRRD:1;
            __I  uint32_t  RESERVE0:24;
        } CMASK;
    };
 
    
    union {
        __IO uint32_t  	u32MASK1;
        		
        struct {
            __IO uint32_t  MASK15_0:16;
            __I  uint32_t  RESERVE0:16;
        } MASK1;
    };


    union {
        __IO uint32_t  	u32MASK2;
        		
        struct {
            __IO uint32_t  MASK28_16:13;
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  MDIR:1;
            __IO uint32_t  MXTD:1;
            __I  uint32_t  RESERVE1:16;
        } MASK2;
    };
    
    union {
        __IO uint32_t  	u32ARB1;

        struct {
            __IO uint32_t  ID15_0:16;
            __I  uint32_t  RESERVE0:16;
        } ARB1;
    };    
 

    union {
        __IO uint32_t  	u32ARB2;	

        struct {
            __IO uint32_t  ID28_16:13;
            __IO uint32_t  DIR:1;
            __IO uint32_t  XTD:1;
            __IO uint32_t  MSGVAL:1;
            __I  uint32_t  RESERVE0:16;
        } ARB2;
    };    

    
    union {
        __IO uint32_t  	u32MCON;			

        struct {
            __IO uint32_t  DLC:4;
            __I  uint32_t  RESERVE0:3;
            __IO uint32_t  EOB:1;
            __IO uint32_t  TXRQST:1;
            __IO uint32_t  RMTEN:1;
            __IO uint32_t  RXIE:1;
            __IO uint32_t  TXIE:1;
            __IO uint32_t  UMASK:1;
            __IO uint32_t  INTPND:1;
            __IO uint32_t  MSGLST:1;
            __IO uint32_t  NEWDAT:1;
            __I  uint32_t  RESERVE1:16;
         } MCON;
    };    

    union {
        __IO uint32_t	u32DAT_A1;			

        struct {
            __IO uint32_t  DATA0:8;
            __IO uint32_t  DATA1:8;
            __I  uint32_t  RESERVE0:16;
        } DAT_A1;
    };     
    
    union {
        __IO uint32_t 	u32DAT_A2;		

        struct {
            __IO uint32_t  DATA2:8;
            __IO uint32_t  DATA3:8;
            __I  uint32_t  RESERVE0:16;
        } DAT_A2;
    };     
    
    union {
        __IO uint32_t 	u32DAT_B1;

        struct {
            __IO uint32_t  DATA4:8;
            __IO uint32_t  DATA5:8;
            __I  uint32_t  RESERVE0:16;
        } DAT_B1;
    };     

    union {
        __IO uint32_t	u32DAT_B2;		

        struct {
            __IO uint32_t  DATA6:8;
            __IO uint32_t  DATA7:8;
            __I  uint32_t  RESERVE0:16;
        } DAT_B2;
    };     


  __I uint32_t RESERVE0[13];        
                                    
} CAN_MsgObj_T;


typedef struct
{
    union {
        __IO uint32_t   u32CON;		 	
        
        struct {
            __IO uint32_t  INIT:1;
            __IO uint32_t  IE:1;
            __IO uint32_t  SIE:1;
            __IO uint32_t  EIE:1;
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  DAR:1;	  
            __IO uint32_t  CCE:1;
            __IO uint32_t  TEST:1;
            __I  uint32_t  RESERVE1:24;
        } CON;
    };

    union {
        __IO uint32_t   u32STATUS;	

        struct {
            __IO uint32_t  LEC:3;
            __IO uint32_t  TXOK:1;
            __IO uint32_t  RXOK:1;
            __IO uint32_t  EPASS:1;
            __IO uint32_t  EWARN:1;	  
            __IO uint32_t  BOFF:1;
            __I  uint32_t  RESERVE0:24;
        } STATUS;
    };

    union {
        __IO uint32_t   u32ERR;     		
        
        struct {
            __IO uint32_t  TEC:8;
            __IO uint32_t  REC:7;
            __IO uint32_t  RP:1;
            __I  uint32_t  RESERVE0:16;
        } ERR;
    };  	

    union {
	    __IO uint32_t   u32BTIME;
        
        struct {
            __IO uint32_t  BRP:6;
            __IO uint32_t  SJW:2;
            __IO uint32_t  TSEG1:4;
            __IO uint32_t  TSEG2:3;
            __I  uint32_t  RESERVE0:17;
        } BTIME;
    };
	
    union {
        __IO uint32_t   u32IIDR;
        
        struct {
            __IO uint32_t  INTID:16;
            __I  uint32_t  RESERVE0:16;
        } IIDR;
    };

   union {
        __IO uint32_t   u32TEST;
                 
        struct {
            __I  uint32_t  RESERVE0:2;
            __IO uint32_t  BASIC:1;
            __IO uint32_t  SILENT:1;
            __IO uint32_t  LBACK:1;
            __IO uint32_t  TX:2;
            __IO uint32_t  RX:1;	  
            __I  uint32_t  RESERVE1:24;
        } TEST;
   };
    
   union {
        __IO uint32_t   u32BRPE;
        
        struct {
            __IO uint32_t  BPRE:4;
            __I  uint32_t  RESERVE0:28;
        } BRPE;
   };
    __I uint32_t   	RESERVE0[1];     
	
    CAN_MsgObj_T    sMsgObj[2];             
                              
	__I uint32_t   	RESERVE1[8];

   union {
        __IO uint32_t   u32TXREQ1;
        
        struct {
            __IO uint32_t  TXRQST16_1:16;
            __I  uint32_t  RESERVE0:16;
        } TXREQ1;
   };


   union {
        __IO uint32_t   u32TXREQ2;
        
        struct {
            __IO uint32_t  TXRQST32_17:16;
            __I  uint32_t  RESERVE0:16;
        } TXREQ2;
   };

    __I uint32_t   	RESERVE2[6];        

   union {
        __IO uint32_t   u32NDAT1;

        struct {
            __IO uint32_t  NEWDAT16_1:16;
            __I  uint32_t  RESERVE0:16;
        } NDAT1;
   };

   union {
        __IO uint32_t   u32NDAT2;

        struct {
            __IO uint32_t  NEWDAT32_17:16;
            __I  uint32_t  RESERVE0:16;
        } NDAT2;
   };

    __I uint32_t   	RESERVE3[6];

   union {
        __IO uint32_t   u32IPND1;

        struct {
            __IO uint32_t  IPND16_1:16;
            __I  uint32_t  RESERVE0:16;
        } IPND1;
   };

   union {
        __IO uint32_t   u32IPND2;

        struct {
            __IO uint32_t  IPND32_17:16;
            __I  uint32_t  RESERVE0:16;
        } IPND2;
   };

    __I uint32_t   	RESERVE4[6];

   union {
        __IO uint32_t   u32MVLD1;

        struct {
            __IO uint32_t  MSGVAL16_1:16;
            __I  uint32_t  RESERVE0:16;
        } MVLD1;
   };

   union {
        __IO uint32_t   u32MVLD2;

        struct {
            __IO uint32_t  MSGVAL32_17:16;
            __I  uint32_t  RESERVE0:16;
        } MVLD2;
   };
    
    union {
        __IO uint32_t   u32WU_EN;            
        struct {
            __IO uint32_t  WAKUP_EN:1;
            __I  uint32_t  RESERVE0:31;
        } WU_EN;
    }; 

    union {
        __IO uint32_t   u32WU_STATUS;
        struct {
            __IO uint32_t  WAKUP_STS:1;
            __I  uint32_t  RESERVE0:31;
        } WU_STATUS;
    }; 

    
} CAN_T;


/* CAN CON Bit Field Definitions */
#define CAN_CON_TEST_Pos           7
#define CAN_CON_TEST_Msk           (1ul << CAN_CON_TEST_Pos)

#define CAN_CON_CCE_Pos            6
#define CAN_CON_CCE_Msk            (1ul << CAN_CON_CCE_Pos)

#define CAN_CON_DAR_Pos            5
#define CAN_CON_DAR_Msk            (1ul << CAN_CON_DAR_Pos)

#define CAN_CON_EIE_Pos            3
#define CAN_CON_EIE_Msk            (1ul << CAN_CON_EIE_Pos)

#define CAN_CON_SIE_Pos            2
#define CAN_CON_SIE_Msk            (1ul << CAN_CON_SIE_Pos)

#define CAN_CON_IE_Pos             1
#define CAN_CON_IE_Msk             (1ul << CAN_CON_IE_Pos)

#define CAN_CON_INIT_Pos           0
#define CAN_CON_INIT_Msk           (1ul << CAN_CON_INIT_Pos)

/* CAN STATUS Bit Field Definitions */
#define CAN_STATUS_BOFF_Pos        7
#define CAN_STATUS_BOFF_Msk        (1ul << CAN_STATUS_BOFF_Pos)

#define CAN_STATUS_EWARN_Pos       6
#define CAN_STATUS_EWARN_Msk       (1ul << CAN_STATUS_EWARN_Pos)

#define CAN_STATUS_EPASS_Pos       5
#define CAN_STATUS_EPASS_Msk       (1ul << CAN_STATUS_EPASS_Pos)

#define CAN_STATUS_RXOK_Pos        4
#define CAN_STATUS_RXOK_Msk        (1ul << CAN_STATUS_RXOK_Pos)

#define CAN_STATUS_TXOK_Pos        3
#define CAN_STATUS_TXOK_Msk        (1ul << CAN_STATUS_RXOK_Pos)

#define CAN_STATUS_LEC_Pos         0
#define CAN_STATUS_LEC_Msk         (0x3ul << CAN_STATUS_LEC_Pos)

/* CAN ERR Bit Field Definitions */
#define CAN_ERR_RP_Pos             15
#define CAN_ERR_RP_Msk             (1ul << CAN_ERR_RP_Pos)

#define CAN_ERR_REC_Pos            8
#define CAN_ERR_REC_Msk            (0x7Ful << CAN_ERR_REC_Pos)

#define CAN_ERR_TEC_Pos            0
#define CAN_ERR_TEC_Msk            (0xFFul << CAN_ERR_TEC_Pos)

/* CAN BTIME Bit Field Definitions */
#define CAN_BTIME_TSEG2_Pos        12
#define CAN_BTIME_TSEG2_Msk        (0x7ul << CAN_BTIME_TSEG2_Pos)

#define CAN_BTIME_TSEG1_Pos        8
#define CAN_BTIME_TSEG1_Msk        (0xFul << CAN_BTIME_TSEG1_Pos)

#define CAN_BTIME_SJW_Pos          6
#define CAN_BTIME_SJW_Msk          (0x3ul << CAN_BTIME_SJW_Pos)

#define CAN_BTIME_BRP_Pos          0
#define CAN_BTIME_BRP_Msk          (0x3Ful << CAN_BTIME_BRP_Pos)

/* CAN IIDR Bit Field Definitions */
#define CAN_IIDR_INTID_Pos         0
#define CAN_IIDR_INTID_Msk         (0xFFFFul << CAN_IIDR_INTID_Pos)

/* CAN TEST Bit Field Definitions */
#define CAN_TEST_RX_Pos            7
#define CAN_TEST_RX_Msk            (1ul << CAN_TEST_RX_Pos)

#define CAN_TEST_TX_Pos            5
#define CAN_TEST_TX_Msk            (0x3ul << CAN_TEST_TX_Pos)

#define CAN_TEST_LBACK_Pos         4
#define CAN_TEST_LBACK_Msk         (1ul << CAN_TEST_LBACK_Pos)
             
#define CAN_TEST_SILENT_Pos        3
#define CAN_TEST_SILENT_Msk        (1ul << CAN_TEST_SILENT_Pos)

#define CAN_TEST_BASIC_Pos         2
#define CAN_TEST_BASIC_Msk         (1ul << CAN_TEST_BASIC_Pos)

#define CAN_TEST_BASIC_Pos         2
#define CAN_TEST_BASIC_Msk         (1ul << CAN_TEST_BASIC_Pos)

/* CAN BPRE Bit Field Definitions */
#define CAN_BPRE_BPRE_Pos          0
#define CAN_BPRE_BPRE_Msk          (0xFul << CAN_BPRE_BPRE_Pos)

/* CAN IFn_CREQ Bit Field Definitions */
#define CAN_IFnCREQ_BUSY_Pos       15
#define CAN_IFnCREQ_BUSY_Msk       (1ul << CAN_IFnCREQ_BUSY_Pos)

#define CAN_IFnCREQ_MSGNUM_Pos     0
#define CAN_IFnCREQ_MSGNUM_Msk     (0x3Ful << CAN_IFnCREQ_MSGNUM_Pos)

/* CAN IFn_CMASK Bit Field Definitions */
#define CAN_IFnCMASK_WRRD_Pos      7
#define CAN_IFnCMASK_WRRD_Msk      (1ul << CAN_IFnCMASK_WRRD_Pos)

#define CAN_IFnCMASK_MASK_Pos      6
#define CAN_IFnCMASK_MASK_Msk      (1ul << CAN_IFnCMASK_MASK_Pos)

#define CAN_IFnCMASK_ARB_Pos       5
#define CAN_IFnCMASK_ARB_Msk       (1ul << CAN_IFnCMASK_ARB_Pos)

#define CAN_IFnCMASK_CONTROL_Pos   4
#define CAN_IFnCMASK_CONTROL_Msk   (1ul << CAN_IFnCMASK_CONTROL_Pos)

#define CAN_IFnCMASK_CLRINTPND_Pos 3
#define CAN_IFnCMASK_CLRINTPND_Msk (1ul << CAN_IFnCMASK_CLRINTPND_Pos)
  
#define CAN_IFnCMASK_TXRQSTNEWDAT_Pos 2
#define CAN_IFnCMASK_TXRQSTNEWDAT_Msk (1ul << CAN_IFnCMASK_TXRQSTNEWDAT_Pos)

#define CAN_IFnCMASK_DATAA_Pos     1
#define CAN_IFnCMASK_DATAA_Msk     (1ul << CAN_IFnCMASK_DATAA_Pos)

#define CAN_IFnCMASK_DATAB_Pos     0
#define CAN_IFnCMASK_DATAB_Msk     (1ul << CAN_IFnCMASK_DATAB_Pos)

/* CAN IFn_MASK1 Bit Field Definitions */
#define CAN_IFnMASK1_MSK_Pos       0
#define CAN_IFnMASK1_MSK_Msk       (0xFFul << CAN_IFnMASK1_MSK_Pos)

/* CAN IFn_MASK2 Bit Field Definitions */
#define CAN_IFnMASK2_MXTD_Pos      15
#define CAN_IFnMASK2_MXTD_Msk      (1ul << CAN_IFnMASK2_MXTD_Pos)

#define CAN_IFnMASK2_MDIR_Pos      14
#define CAN_IFnMASK2_MDIR_Msk      (1ul << CAN_IFnMASK2_MDIR_Pos)

#define CAN_IFnMASK2_MSK_Pos       0
#define CAN_IFnMASK2_MSK_Msk       (0x1FFul << CAN_IFnMASK2_MSK_Pos)

/* CAN IFn_ARB1 Bit Field Definitions */
#define CAN_IFnARB1_ID_Pos         0
#define CAN_IFnARB1_ID_Msk         (0xFFFFul << CAN_IFnARB1_ID_Pos)

/* CAN IFn_ARB2 Bit Field Definitions */
#define CAN_IFnARB2_MSGVAL_Pos     15
#define CAN_IFnARB2_MSGVAL_Msk     (1ul << CAN_IFnARB2_MSGVAL_Pos)

#define CAN_IFnARB2_XTD_Pos        14
#define CAN_IFnARB2_XTD_Msk        (1ul << CAN_IFnARB2_XTD_Pos)

#define CAN_IFnARB2_DIR_Pos        13
#define CAN_IFnARB2_DIR_Msk        (1ul << CAN_IFnARB2_DIR_Pos)

#define CAN_IFnARB2_ID_Pos         0
#define CAN_IFnARB2_ID_Msk         (0x1FFFul << CAN_IFnARB2_ID_Pos)

/* CAN IFn_MCON Bit Field Definitions */
#define CAN_IFnMCON_NEWDAT_Pos     15
#define CAN_IFnMCON_NEWDAT_Msk     (1ul << CAN_IFnMCON_NEWDAT_Pos)

#define CAN_IFnMCON_MSGLST_Pos     14
#define CAN_IFnMCON_MSGLST_Msk     (1ul << CAN_IFnMCON_MSGLST_Pos)

#define CAN_IFnMCON_INTPND_Pos     13
#define CAN_IFnMCON_INTPND_Msk     (1ul << CAN_IFnMCON_INTPND_Pos)

#define CAN_IFnMCON_UMASK_Pos      12
#define CAN_IFnMCON_UMASK_Msk      (1ul << CAN_IFnMCON_UMASK_Pos)

#define CAN_IFnMCON_TXIE_Pos       11
#define CAN_IFnMCON_TXIE_Msk       (1ul << CAN_IFnMCON_TXIE_Pos)

#define CAN_IFnMCON_RXIE_Pos       10
#define CAN_IFnMCON_RXIE_Msk       (1ul << CAN_IFnMCON_RXIE_Pos)

#define CAN_IFnMCON_RMTEN_Pos      9
#define CAN_IFnMCON_RMTEN_Msk      (1ul << CAN_IFnMCON_RMTEN_Pos)

#define CAN_IFnMCON_TXRQST_Pos     8
#define CAN_IFnMCON_TXRQST_Msk     (1ul << CAN_IFnMCON_TXRQST_Pos)

#define CAN_IFnMCON_EOB_Pos        7
#define CAN_IFnMCON_EOB_Msk        (1ul << CAN_IFnMCON_EOB_Pos)

#define CAN_IFnMCON_DLC_Pos        0
#define CAN_IFnMCON_DLC_Msk        (0xFul << CAN_IFnMCON_DLC_Pos)

/* CAN IFn_DATA_A1 Bit Field Definitions */
#define CAN_IFnDATAA1_DATA1_Pos    8
#define CAN_IFnDATAA1_DATA1_Msk    (0xFul << CAN_IFnDATAA1_DATA1_Pos)

#define CAN_IFnDATAA1_DATA0_Pos    0
#define CAN_IFnDATAA1_DATA0_Msk    (0xFul << CAN_IFnDATAA1_DATA0_Pos)

/* CAN IFn_DATA_A2 Bit Field Definitions */
#define CAN_IFnDATAA2_DATA3_Pos    8
#define CAN_IFnDATAA2_DATA3_Msk    (0xFul << CAN_IFnDATAA2_DATA3_Pos)

#define CAN_IFnDATAA2_DATA2_Pos    0
#define CAN_IFnDATAA2_DATA2_Msk    (0xFul << CAN_IFnDATAA2_DATA2_Pos)

/* CAN IFn_DATA_B1 Bit Field Definitions */
#define CAN_IFnDATAB1_DATA5_Pos    8
#define CAN_IFnDATAB1_DATA5_Msk    (0xFul << CAN_IFnDATAB1_DATA5_Pos)

#define CAN_IFnDATAB1_DATA4_Pos    0
#define CAN_IFnDATAB1_DATA4_Msk    (0xFul << CAN_IFnDATAB1_DATA4_Pos)

/* CAN IFn_DATA_B2 Bit Field Definitions */
#define CAN_IFnDATAB2_DATA7_Pos    8
#define CAN_IFnDATAB2_DATA7_Msk    (0xFul << CAN_IFnDATAB2_DATA7_Pos)

#define CAN_IFnDATAB2_DATA6_Pos    8
#define CAN_IFnDATAB2_DATA6_Msk    (0xFul << CAN_IFnDATAB2_DATA6_Pos)

/* CAN IFn_TXRQST1 Bit Field Definitions */
#define CAN_IFnTXRQST1_TXRQST_Pos  0
#define CAN_IFnTXRQST1_TXRQST_Msk  (0xFFFFul << CAN_IFnTXRQST1_TXRQST_Pos)

/* CAN IFn_TXRQST2 Bit Field Definitions */
#define CAN_IFnTXRQST2_TXRQST_Pos  0
#define CAN_IFnTXRQST2_TXRQST_Msk  (0xFFFFul << CAN_IFnTXRQST2_TXRQST_Pos)

/* CAN IFn_NDAT1 Bit Field Definitions */
#define CAN_IFnNDAT1_NEWDATA_Pos   0
#define CAN_IFnNDAT1_NEWDATA_Msk   (0xFFFFul << CAN_IFnNDAT1_NEWDATA_Pos)

/* CAN IFn_NDAT2 Bit Field Definitions */
#define CAN_IFnNDAT2_NEWDATA_Pos   0
#define CAN_IFnNDAT2_NEWDATA_Msk   (0xFFFFul << CAN_IFnNDAT2_NEWDATA_Pos)

/* CAN IFn_IPND1 Bit Field Definitions */
#define CAN_IFnIPND1_INTPND_Pos   0
#define CAN_IFnIPND1_INTPND_Msk   (0xFFFFul << CAN_IFnIPND1_INTPND_Pos)

/* CAN IFn_IPND2 Bit Field Definitions */
#define CAN_IFnIPND2_INTPND_Pos   0
#define CAN_IFnIPND2_INTPND_Msk   (0xFFFFul << CAN_IFnIPND2_INTPND_Pos)

/* CAN IFn_MVLD1 Bit Field Definitions */
#define CAN_IFnMVLD1_MSGVAL_Pos   0
#define CAN_IFnMVLD1_MSGVAL_Msk   (0xFFFFul << CAN_IFnMVLD1_MSGVAL_Pos)

/* CAN IFn_MVLD2 Bit Field Definitions */
#define CAN_IFnMVLD2_MSGVAL_Pos   0
#define CAN_IFnMVLD2_MSGVAL_Msk   (0xFFFFul << CAN_IFnMVLD2_MSGVAL_Pos)

/* CAN WUEN Bit Field Definitions */
#define CAN_WUEN_WAKUP_EN_Pos     0
#define CAN_WUEN_WAKUP_EN_Msk    (1ul << CAN_WUEN_WAKUP_EN_Pos)

/* CAN WUSTATUS Bit Field Definitions */
#define CAN_WUSTATUS_WAKUP_STS_Pos     0
#define CAN_WUSTATUS_WAKUP_STS_Msk    (1ul << CAN_WUSTATUS_WAKUP_STS_Pos)
                                  
/*--------------------------- USB Device Controller --------------------------*/
typedef struct
{
    __IO uint32_t  BUS_IE:1;
    __IO uint32_t  USB_IE:1;
    __IO uint32_t  FLDET_IE:1;
    __IO uint32_t  WAKEUP_IE:1;
    __I  uint32_t  RESERVE0:4;
    __IO uint32_t  WAKEUP_EN:1;
    __I  uint32_t  RESERVE1:6;
    __IO uint32_t  INNAK_EN:1;
    __I  uint32_t  RESERVE2:16;
} USBD_INTEN_T;

typedef struct
{
    __IO uint32_t  BUS_STS:1;
    __IO uint32_t  USB_STS:1;
    __IO uint32_t  FLDET_STS:1;
    __IO uint32_t  WAKEUP_STS:1;
    __I  uint32_t  RESERVE0:12;
    __IO uint32_t  EPEVT:6;
    __I  uint32_t  RESERVE1:9;
    __IO uint32_t  SETUP:1;
} USBD_INTSTS_T;

typedef struct
{
    __IO uint32_t  FADDR:7;
    __I  uint32_t  RESERVE:25;
} USBD_FADDR_T;

typedef struct
{
    __I  uint32_t  RESERVE0:7;
    __I  uint32_t  OVERRUN:1;
    __I  uint32_t  EPSTS0:3;
    __I  uint32_t  EPSTS1:3;
    __I  uint32_t  EPSTS2:3;
    __I  uint32_t  EPSTS3:3;
    __I  uint32_t  EPSTS4:3;
    __I  uint32_t  EPSTS5:3;
    __I  uint32_t  RESERVE1:6;
} USBD_EPSTS_T;



typedef struct
{
    __I  uint32_t  USBRST:1;
    __I  uint32_t  SUSPEND:1;
    __I  uint32_t  RESUME:1;
    __I  uint32_t  TIMEOUT:1;
    __IO uint32_t  PHY_EN:1;
    __IO uint32_t  RWAKEUP:1;
    __I  uint32_t  RESERVE0:1;
    __IO uint32_t  USB_EN:1;
    __IO uint32_t  DPPU_EN:1;
    __IO uint32_t  PWRDN:1;
    __I  uint32_t  RESERVE1:22;
} USBD_ATTR_T;



typedef struct
{
    __IO uint32_t  FLDET:1;
    __I  uint32_t  RESERVE:31;
} USBD_FLDET_T;

typedef struct
{
    __I  uint32_t  RESERVE0:3;
    __IO uint32_t  STBUFSEG:6;
    __I  uint32_t  RESERVE:23;
} USBD_STBUFSEG_T;

typedef struct
{
    __IO uint32_t  MXPLD:9;
    __I  uint32_t  RESERVE:23;
} USBD_MXPLD_T;

typedef struct
{
    __IO uint32_t  EP_NUM:4;
    __IO uint32_t  ISOCH:1;
    __IO uint32_t  STATE:2;
    __IO uint32_t  DSQ_SYNC:1;
    __I  uint32_t  RESERVE0:1;
    __IO uint32_t  CSTALL:1;
    __I  uint32_t  RESERVE1:22;
} USBD_CFG_T;

typedef struct
{
    __IO uint32_t  CLRRDY:1;
    __IO uint32_t  SSTALL:1;
    __I  uint32_t  RESERVE:30;
} USBD_CFGP_T;

typedef struct
{
    __IO uint32_t  DRVSE0:1;
    __I  uint32_t  RESERVE:31;
} USBD_DRVSE0_T;

typedef struct
{
    union {
        __IO uint32_t u32BUFSEG;
        struct {
            __I  uint32_t  RESERVE0:3;
            __IO uint32_t  BUFSEG:6;
            __I  uint32_t  RESERVE:23;
        } BUFSEG;
    };
    
    union {
        __IO uint32_t u32MXPLD;
        struct {
            __IO uint32_t  MXPLD:9;
            __I  uint32_t  RESERVE:23;
        } MXPLD;
    };
    
    union {
        __IO uint32_t u32CFG;
        struct {
            __IO uint32_t  EP_NUM:4;
            __IO uint32_t  ISOCH:1;
            __IO uint32_t  STATE:2;
            __IO uint32_t  DSQ_SYNC:1;
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  CSTALL:1;
            __I  uint32_t  RESERVE1:22;
        } CFG;
    };
    
    union {
        __IO uint32_t u32CFGP;
        struct {
            __IO uint32_t  CLRRDY:1;
            __IO uint32_t  SSTALL:1;
            __I  uint32_t  RESERVE:30;
        } CFGP;
    };
    
} USBD_EP_T;


typedef struct
{
    union {
        __IO uint32_t u32INTEN;
        struct {
            __IO uint32_t  BUS_IE:1;
            __IO uint32_t  USB_IE:1;
            __IO uint32_t  FLDET_IE:1;
            __IO uint32_t  WAKEUP_IE:1;
            __I  uint32_t  RESERVE0:4;
            __IO uint32_t  WAKEUP_EN:1;
            __I  uint32_t  RESERVE1:6;
            __IO uint32_t  INNAK_EN:1;
            __I  uint32_t  RESERVE2:16;
        } INTEN;
    };
    
    union {
        __IO uint32_t u32INTSTS;
        struct {
            __IO uint32_t  BUS_STS:1;
            __IO uint32_t  USB_STS:1;
            __IO uint32_t  FLDET_STS:1;
            __IO uint32_t  WAKEUP_STS:1;
            __I  uint32_t  RESERVE0:12;
            __IO uint32_t  EPEVT:6;
            __I  uint32_t  RESERVE1:9;
            __IO uint32_t  SETUP:1;
        } INTSTS;
    };
    
    union {
        __IO uint32_t u32FADDR;
        struct {
            __IO uint32_t  FADDR:7;
            __I  uint32_t  RESERVE:25;
        } FADDR;
    };
    
    union {
        __IO uint32_t u32EPSTS;
        struct {
            __I  uint32_t  RESERVE0:7;
            __I  uint32_t  OVERRUN:1;
            __I  uint32_t  EPSTS0:3;
            __I  uint32_t  EPSTS1:3;
            __I  uint32_t  EPSTS2:3;
            __I  uint32_t  EPSTS3:3;
            __I  uint32_t  EPSTS4:3;
            __I  uint32_t  EPSTS5:3;
            __I  uint32_t  RESERVE1:6;
        } EPSTS;
    };
    
    union {
        __IO uint32_t u32ATTR;
        struct {
            __I  uint32_t  USBRST:1;
            __I  uint32_t  SUSPEND:1;
            __I  uint32_t  RESUME:1;
            __I  uint32_t  TIMEOUT:1;
            __IO uint32_t  PHY_EN:1;
            __IO uint32_t  RWAKEUP:1;
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  USB_EN:1;
            __IO uint32_t  DPPU_EN:1;
            __IO uint32_t  PWRDN:1;
            __I  uint32_t  RESERVE1:22;
        } ATTR;
    };
    
    union {
        __IO uint32_t u32FLDET;
        struct {
            __I  uint32_t  FLDET:1;
            __I  uint32_t  RESERVE:31;
        } FLDET;
    };
    
    union {
        __IO uint32_t u32STBUFSEG;
        struct {
            __I  uint32_t  RESERVE0:3;
            __IO uint32_t  STBUFSEG:6;
            __I  uint32_t  RESERVE:23;
        } STBUFSEG;
    };
    
    __I uint32_t RESERVE0;
    
    USBD_EP_T EP[6];
    
    __I uint32_t RESERVE1[4];
    
    union {
        __IO uint32_t u32DRVSE0;
        struct {
            __IO uint32_t  DRVSE0:1;
            __I  uint32_t  RESERVE:31;
        } DRVSE0;
    };
    
     __I uint32_t RESERVE2[4];
    
} USBD_T;

/* USBD INTEN Bit Field Definitions */
#define USBD_INTEN_INNAK_EN_Pos    15
#define USBD_INTEN_INNAK_EN_Msk    (1ul << USBD_INTEN_INNAK_EN_Pos)

#define USBD_INTEN_WAKEUP_EN_Pos   8
#define USBD_INTEN_WAKEUP_EN_Msk   (1ul << USBD_INTEN_WAKEUP_EN_Pos)

#define USBD_INTEN_WAKEUP_IE_Pos   3
#define USBD_INTEN_WAKEUP_IE_Msk   (1ul << USBD_INTEN_WAKEUP_IE_Pos)

#define USBD_INTEN_FLDET_IE_Pos    2
#define USBD_INTEN_FLDET_IE_Msk    (1ul << USBD_INTEN_FLDET_IE_Pos)

#define USBD_INTEN_USB_IE_Pos      1
#define USBD_INTEN_USB_IE_Msk      (1ul << USBD_INTEN_USB_IE_Pos)

#define USBD_INTEN_BUS_IE_Pos      0
#define USBD_INTEN_BUS_IE_Msk      (1ul << USBD_INTEN_BUS_IE_Pos)

/* USBD INTSTS Bit Field Definitions */
#define USBD_INTSTS_SETUP_Pos        31
#define USBD_INTSTS_SETUP_Msk        (1ul << USBD_INTSTS_SETUP_Pos)

#define USBD_INTSTS_EPEVT_Pos        16
#define USBD_INTSTS_EPEVT_Msk        (0x3Ful << USBD_INTSTS_EPEVT_Pos)

#define USBD_INTSTS_WAKEUP_STS_Pos   3
#define USBD_INTSTS_WAKEUP_STS_Msk   (1ul << USBD_INTSTS_WAKEUP_STS_Pos)

#define USBD_INTSTS_FLDET_STS_Pos    2
#define USBD_INTSTS_FLDET_STS_Msk    (1ul << USBD_INTSTS_FLDET_STS_Pos)

#define USBD_INTSTS_USB_STS_Pos      1
#define USBD_INTSTS_USB_STS_Msk      (1ul << USBD_INTSTS_USB_STS_Pos)

#define USBD_INTSTS_BUS_STS_Pos      0
#define USBD_INTSTS_BUS_STS_Msk      (1ul << USBD_INTSTS_BUS_STS_Pos)

/* USBD FADDR Bit Field Definitions */
#define USBD_FADDR_FADDR_Pos     0
#define USBD_FADDR_FADDR_Msk     (0x7Ful << USBD_FADDR_FADDR_Pos)

/* USBD EPSTS Bit Field Definitions */
#define USBD_EPSTS_EPSTS5_Pos    23
#define USBD_EPSTS_EPSTS5_Msk    (7ul << USBD_EPSTS_EPSTS5_Pos)

#define USBD_EPSTS_EPSTS4_Pos    20
#define USBD_EPSTS_EPSTS4_Msk    (7ul << USBD_EPSTS_EPSTS4_Pos)

#define USBD_EPSTS_EPSTS3_Pos    17
#define USBD_EPSTS_EPSTS3_Msk    (7ul << USBD_EPSTS_EPSTS3_Pos)

#define USBD_EPSTS_EPSTS2_Pos    14
#define USBD_EPSTS_EPSTS2_Msk    (7ul << USBD_EPSTS_EPSTS2_Pos)

#define USBD_EPSTS_EPSTS1_Pos    11
#define USBD_EPSTS_EPSTS1_Msk    (7ul << USBD_EPSTS_EPSTS1_Pos)

#define USBD_EPSTS_EPSTS0_Pos    8
#define USBD_EPSTS_EPSTS0_Msk    (7ul << USBD_EPSTS_EPSTS0_Pos)

#define USBD_EPSTS_OVERRUN_Pos   7
#define USBD_EPSTS_OVERRUN_Msk   (1ul << USBD_EPSTS_OVERRUN_Pos)

/* USBD ATTR Bit Field Definitions */
#define USBD_ATTR_PWRDN_Pos      9
#define USBD_ATTR_PWRDN_Msk      (1ul << USBD_ATTR_PWRDN_Pos)

#define USBD_ATTR_DPPU_EN_Pos    8
#define USBD_ATTR_DPPU_EN_Msk    (1ul << USBD_ATTR_DPPU_EN_Pos)

#define USBD_ATTR_USB_EN_Pos     7
#define USBD_ATTR_USB_EN_Msk     (1ul << USBD_ATTR_USB_EN_Pos)

#define USBD_ATTR_RWAKEUP_Pos    5
#define USBD_ATTR_RWAKEUP_Msk    (1ul << USBD_ATTR_RWAKEUP_Pos)

#define USBD_ATTR_PHY_EN_Pos     4
#define USBD_ATTR_PHY_EN_Msk     (1ul << USBD_ATTR_PHY_EN_Pos)

#define USBD_ATTR_TIMEOUT_Pos    3
#define USBD_ATTR_TIMEOUT_Msk    (1ul << USBD_ATTR_TIMEOUT_Pos)

#define USBD_ATTR_RESUME_Pos     2
#define USBD_ATTR_RESUME_Msk     (1ul << USBD_ATTR_RESUME_Pos)

#define USBD_ATTR_SUSPEND_Pos    1
#define USBD_ATTR_SUSPEND_Msk    (1ul << USBD_ATTR_SUSPEND_Pos)

#define USBD_ATTR_USBRST_Pos     0
#define USBD_ATTR_USBRST_Msk     (1ul << USBD_ATTR_USBRST_Pos)

/* USBD FLDET Bit Field Definitions */
#define USBD_FLDET_FLDET_Pos     0
#define USBD_FLDET_FLDET_Msk     (1ul << USBD_FLDET_FLDET_Pos)

/* USBD STBUFSEG Bit Field Definitions */
#define USBD_STBUFSEG_STBUFSEG_Pos   3
#define USBD_STBUFSEG_STBUFSEG_Msk   (0x3Ful << USBD_STBUFSEG_STBUFSEG_Pos)

/* USBD BUFSEG Bit Field Definitions */
#define USBD_BUFSEG_BUFSEG_Pos   3
#define USBD_BUFSEG_BUFSEG_Msk   (0x3Ful << USBD_BUFSEG_BUFSEG_Pos)

/* USBD MXPLD Bit Field Definitions */
#define USBD_MXPLD_MXPLD_Pos    0
#define USBD_MXPLD_MXPLD_Msk    (0x1FFul << USBD_MXPLD_MXPLD_Pos)

/* USBD CFG Bit Field Definitions */
#define USBD_CFG_CSTALL_Pos     9
#define USBD_CFG_CSTALL_Msk     (1ul << USBD_CFG_CSTALL_Pos)

#define USBD_CFG_DSQ_SYNC_Pos   7
#define USBD_CFG_DSQ_SYNC_Msk   (1ul << USBD_CFG_DSQ_SYNC_Pos)

#define USBD_CFG_STATE_Pos      5
#define USBD_CFG_STATE_Msk      (3ul << USBD_CFG_STATE_Pos)

#define USBD_CFG_ISOCH_Pos      4
#define USBD_CFG_ISOCH_Msk      (1ul << USBD_CFG_ISOCH_Pos)

#define USBD_CFG_EP_NUM_Pos     0
#define USBD_CFG_EP_NUM_Msk     (0xFul << USBD_CFG_EP_NUM_Pos)

/* USBD CFGP Bit Field Definitions */
#define USBD_CFGP_SSTALL_Pos    1
#define USBD_CFGP_SSTALL_Msk    (1ul << USBD_CFGP_SSTALL_Pos)

#define USBD_CFGP_CLRRDY_Pos    0
#define USBD_CFGP_CLRRDY_Msk    (1ul << USBD_CFGP_CLRRDY_Pos)

/* USBD DRVSE0 Bit Field Definitions */
#define USBD_DRVSE0_DRVSE0_Pos   0
#define USBD_DRVSE0_DRVSE0_Msk   (1ul << USBD_DRVSE0_DRVSE0_Pos)


/*------------------------------ PDMA Controller -----------------------------*/
typedef struct
{
    __IO uint32_t  PDMACEN:1;
    __IO uint32_t  SW_RST:1;
    __IO uint32_t  MODE_SEL:2;
    __IO uint32_t  SAD_SEL:2;
    __IO uint32_t  DAD_SEL:2;
    __I  uint32_t  RESERVE0:4;
    __IO uint32_t  WAR_BCR_SEL:4;
    __I  uint32_t  RESERVE1:3;
    __IO uint32_t  APB_TWS:2;
    __I  uint32_t  RESERVE2:2;
    __IO uint32_t  TRIG_EN:1;
    __I  uint32_t  RESERVE3:8;
} PDMA_CSR_T;

typedef __IO uint32_t PDMA_SAR_T;
typedef __IO uint32_t PDMA_DAR_T;

typedef __IO uint32_t PDMA_BCR_T;

typedef __I uint32_t PDMA_CSAR_T;
typedef __I uint32_t PDMA_CDAR_T;

typedef struct
{
    __I uint32_t  CBCR:16;
    __I  uint32_t  RESERVE:16;
} PDMA_CBCR_T;

typedef struct
{
    __IO uint32_t  TABORT_IE:1;
    __IO uint32_t  BLKD_IE:1;
    __I  uint32_t  RESERVE:30;
} PDMA_IER_T;

typedef struct
{
    __IO uint32_t  TABORT_IF:1;
    __IO uint32_t  BLKD_IF:1;
    __I  uint32_t  RESERVE:30;
} PDMA_ISR_T;

typedef __I uint32_t PDMA_SBUF_T;

typedef struct
{
    __I  uint32_t  RESERVE0:8;
    __IO uint32_t  CLK0_EN:1;
    __IO uint32_t  CLK1_EN:1;
    __IO uint32_t  CLK2_EN:1;
    __IO uint32_t  CLK3_EN:1;
    __IO uint32_t  CLK4_EN:1;
    __IO uint32_t  CLK5_EN:1;
    __IO uint32_t  CLK6_EN:1;
    __IO uint32_t  CLK7_EN:1;
    __IO uint32_t  CLK8_EN:1;
    __I  uint32_t  RESERVE1:15;
} PDMA_GCRCSR_T;


typedef struct
{
    __IO uint32_t  SPI0_RXSEL:4;
    __IO uint32_t  SPI0_TXSEL:4;
    __IO uint32_t  SPI1_RXSEL:4;
    __IO uint32_t  SPI1_TXSEL:4;
    __IO uint32_t  SPI2_RXSEL:4;
    __IO uint32_t  SPI2_TXSEL:4;
    __IO uint32_t  SPI3_RXSEL:4;
    __IO uint32_t  SPI3_TXSEL:4;
} PDMA_PDSSR0_T;


typedef struct
{
    __IO uint32_t  UART0_RXSEL:4;
    __IO uint32_t  UART0_TXSEL:4;
    __IO uint32_t  UART1_RXSEL:4;
    __IO uint32_t  UART1_TXSEL:4;
    __IO uint32_t  RESERVE0:8;
    __IO uint32_t  ADC_RXSEL:4;
    __IO uint32_t  RESERVE1:4;
} PDMA_PDSSR1_T;
                                                        

typedef struct
{
    __I uint32_t  INTR0:1;
    __I uint32_t  INTR1:1;
    __I uint32_t  INTR2:1;
    __I uint32_t  INTR3:1;
    __I uint32_t  INTR4:1;
    __I uint32_t  INTR5:1;
    __I uint32_t  INTR6:1;
    __I uint32_t  INTR7:1;
    __I uint32_t  INTR8:1;
    __I uint32_t  RESERVE:22;
    __I uint32_t  INTR:1;
} PDMA_GCRISR_T;


typedef struct
{
    __IO uint32_t  I2S_RXSEL:4;
    __IO uint32_t  I2S_TXSEL:4;
    __I  uint32_t  RESERVE:24;
} PDMA_PDSSR2_T;

typedef struct
{
    union 
    {
        __IO uint32_t u32CSR;
        
        struct 
        {
            __IO uint32_t  PDMACEN:1;
            __IO uint32_t  SW_RST:1;
            __IO uint32_t  MODE_SEL:2;
            __IO uint32_t  SAD_SEL:2;
            __IO uint32_t  DAD_SEL:2;
            __I  uint32_t  RESERVE0:11;
            __IO uint32_t  APB_TWS:2;
            __I  uint32_t  RESERVE1:2;
            __IO uint32_t  TRIG_EN:1;
            __I  uint32_t  RESERVE2:8;
        } CSR;
    };

    union 
    {
        __IO uint32_t u32SAR;
        __IO uint32_t SAR;
    };

    union 
    {
        __IO uint32_t u32DAR;
        __IO uint32_t DAR;
    };

    union 
    {
        __IO uint32_t u32BCR;
        
        struct 
        {
            __IO uint32_t  BCR:16;
            __I  uint32_t  RESERVE0:16;
        } BCR;
    };

    union 
    {
        __I uint32_t u32POINT;
        
        struct 
        {
            __I  uint32_t  POINT:4;
            __I  uint32_t  RESERVE0:28;
        } POINT;
    };

    union 
    {
        __I uint32_t u32CSAR;
        __I uint32_t CSAR;
    };

    union 
    {
        __I uint32_t u32CDAR;
        __I uint32_t CDAR;
    };

    union 
    {
        __I uint32_t u32CBCR;
        
        struct 
        {
            __I uint32_t  CBCR:16;
            __I  uint32_t  RESERVE0:16;
        } CBCR;
    };

    union 
    {
        __IO uint32_t u32IER;
        
        struct 
        {
            __IO uint32_t  TABORT_IE:1;
            __IO uint32_t  BLKD_IE:1;
            __I  uint32_t  RESERVE:30;
        } IER;
    };

    union 
    {
        __IO uint32_t u32ISR;
        
        struct 
        {
            __IO uint32_t  TABORT_IF:1;
            __IO uint32_t  BLKD_IF:1;
            __I  uint32_t  RESERVE:30;
        } ISR;
    };

    __I uint32_t RESERVE[22];

    union 
    {
        __I uint32_t u32SBUF;
        __I uint32_t SBUF;
    };
} PDMA_T;

typedef struct
{
    union 
    {
        __IO uint32_t u32GCRCSR;
        
        struct 
        {
            __I  uint32_t  RESERVE0:8;
            __IO uint32_t  CLK0_EN:1;
            __IO uint32_t  CLK1_EN:1;
            __IO uint32_t  CLK2_EN:1;
            __IO uint32_t  CLK3_EN:1;
            __IO uint32_t  CLK4_EN:1;
            __IO uint32_t  CLK5_EN:1;
            __IO uint32_t  CLK6_EN:1;
            __IO uint32_t  CLK7_EN:1;
            __IO uint32_t  CLK8_EN:1;
            __I  uint32_t  RESERVE1:15;
        } GCRCSR;
    };

    union 
    {
        __IO uint32_t u32PDSSR0;
        
        struct 
        {
            __IO uint32_t  SPI0_RXSEL:4;
            __IO uint32_t  SPI0_TXSEL:4;
            __IO uint32_t  SPI1_RXSEL:4;
            __IO uint32_t  SPI1_TXSEL:4;
            __IO uint32_t  SPI2_RXSEL:4;
            __IO uint32_t  SPI2_TXSEL:4;
            __IO uint32_t  SPI3_RXSEL:4;
            __IO uint32_t  SPI3_TXSEL:4;
        } PDSSR0;
    };

    union 
    {
        __IO uint32_t u32PDSSR1;
        
        struct 
        {
            __IO uint32_t  UART0_RXSEL:4;
            __IO uint32_t  UART0_TXSEL:4;
            __IO uint32_t  UART1_RXSEL:4;
            __IO uint32_t  UART1_TXSEL:4;
            __IO uint32_t  RESERVE0:8;
            __IO uint32_t  ADC_RXSEL:4;
            __IO uint32_t  RESERVE1:4;
        } PDSSR1;
    };

    union 
    {
        __IO uint32_t u32GCRISR;
        
        struct 
        {
            __I uint32_t  INTR0:1;
            __I uint32_t  INTR1:1;
            __I uint32_t  INTR2:1;
            __I uint32_t  INTR3:1;
            __I uint32_t  INTR4:1;
            __I uint32_t  INTR5:1;
            __I uint32_t  INTR6:1;
            __I uint32_t  INTR7:1;
            __I uint32_t  INTR8:1;
            __I uint32_t  RESERVE:22;
            __I uint32_t  INTR:1;
        } GCRISR;
    };

    union 
    {
        __IO uint32_t u32PDSSR2;
        
        struct 
        {
            __IO uint32_t  I2S_RXSEL:4;
            __IO uint32_t  I2S_TXSEL:4;
            __I  uint32_t  RESERVE:24;
        } PDSSR2;
    };
} PDMA_GCR_T;

/* PDMA CSR Bit Field Definitions */
#define PDMA_CSR_PDMACEN_Pos                        0
#define PDMA_CSR_PDMACEN_Msk                        (1ul << PDMA_CSR_PDMACEN_Pos)

#define PDMA_CSR_SW_RST_Pos                         1
#define PDMA_CSR_SW_RST_Msk                         (1ul << PDMA_CSR_SW_RST_Pos)

#define PDMA_CSR_MODE_SEL_Pos                       2
#define PDMA_CSR_MODE_SEL_Msk                       (3ul << PDMA_CSR_MODE_SEL_Pos)

#define PDMA_CSR_SAD_SEL_Pos                        4
#define PDMA_CSR_SAD_SEL_Msk                        (3ul << PDMA_CSR_SAD_SEL_Pos)

#define PDMA_CSR_DAD_SEL_Pos                        6
#define PDMA_CSR_DAD_SEL_Msk                        (3ul << PDMA_CSR_DAD_SEL_Pos)

#define PDMA_CSR_APB_TWS_Pos                        19
#define PDMA_CSR_APB_TWS_Msk                        (3ul << PDMA_CSR_APB_TWS_Pos)

#define PDMA_CSR_TRIG_EN_Pos                        23
#define PDMA_CSR_TRIG_EN_Msk                        (1ul << PDMA_CSR_TRIG_EN_Pos)

/* PDMA BCR Bit Field Definitions */
#define PDMA_BCR_BCR_Pos                            0
#define PDMA_BCR_BCR_Msk                            (0xFFFFul << PDMA_BCR_BCR_Pos)

/* PDMA POINT Bit Field Definitions */
#define PDMA_POINT_POINT_Pos                        0
#define PDMA_POINT_POINT_Msk                        (0xFul << PDMA_POINT_POINT_Pos)

/* PDMA CBCR Bit Field Definitions */
#define PDMA_CBCR_CBCR_Pos                          0
#define PDMA_CBCR_CBCR_Msk                          (0xFFFFul << PDMA_CBCR_CBCR_Pos)


/* PDMA IER Bit Field Definitions */
#define PDMA_IER_TABORT_IE_Pos                      0
#define PDMA_IER_TABORT_IE_Msk                      (1ul << PDMA_IER_TABORT_IE_Pos)

#define PDMA_IER_BLKD_IE_Pos                        1
#define PDMA_IER_BLKD_IE_Msk                        (1ul << PDMA_IER_BLKD_IE_Pos)

/* PDMA ISR Bit Field Definitions */
#define PDMA_ISR_TABORT_IF_Pos                      0
#define PDMA_ISR_TABORT_IF_Msk                      (1ul << PDMA_ISR_TABORT_IF_Pos)

#define PDMA_ISR_BLKD_IF_Pos                        1
#define PDMA_ISR_BLKD_IF_Msk                        (1ul << PDMA_ISR_BLKD_IF_Pos)

/* PDMA GCRCSR Bit Field Definitions */
#define PDMA_GCRCSR_CLK0_EN_Pos                     8
#define PDMA_GCRCSR_CLK0_EN_Msk                     (1ul << PDMA_GCRCSR_CLK0_EN_Pos)

#define PDMA_GCRCSR_CLK1_EN_Pos                     9
#define PDMA_GCRCSR_CLK1_EN_Msk                     (1ul << PDMA_GCRCSR_CLK1_EN_Pos)

#define PDMA_GCRCSR_CLK2_EN_Pos                     10
#define PDMA_GCRCSR_CLK2_EN_Msk                     (1ul << PDMA_GCRCSR_CLK2_EN_Pos)

#define PDMA_GCRCSR_CLK3_EN_Pos                     11
#define PDMA_GCRCSR_CLK3_EN_Msk                     (1ul << PDMA_GCRCSR_CLK3_EN_Pos)

#define PDMA_GCRCSR_CLK4_EN_Pos                     12
#define PDMA_GCRCSR_CLK4_EN_Msk                     (1ul << PDMA_GCRCSR_CLK4_EN_Pos)

#define PDMA_GCRCSR_CLK5_EN_Pos                     13
#define PDMA_GCRCSR_CLK5_EN_Msk                     (1ul << PDMA_GCRCSR_CLK5_EN_Pos)

#define PDMA_GCRCSR_CLK6_EN_Pos                     14
#define PDMA_GCRCSR_CLK6_EN_Msk                     (1ul << PDMA_GCRCSR_CLK6_EN_Pos)

#define PDMA_GCRCSR_CLK7_EN_Pos                     15
#define PDMA_GCRCSR_CLK7_EN_Msk                     (1ul << PDMA_GCRCSR_CLK7_EN_Pos)

#define PDMA_GCRCSR_CLK8_EN_Pos                     16
#define PDMA_GCRCSR_CLK8_EN_Msk                     (1ul << PDMA_GCRCSR_CLK8_EN_Pos)

/* PDMA PDSSR0 Bit Field Definitions */
#define PDMA_PDSSR0_SPI0_RXSEL_Pos                  0
#define PDMA_PDSSR0_SPI0_RXSEL_Msk                  (0xFul << PDMA_PDSSR0_SPI0_RXSEL_Pos)

#define PDMA_PDSSR0_SPI0_TXSEL_Pos                  4
#define PDMA_PDSSR0_SPI0_TXSEL_Msk                  (0xFul << PDMA_PDSSR0_SPI0_TXSEL_Pos)

#define PDMA_PDSSR0_SPI1_RXSEL_Pos                  8
#define PDMA_PDSSR0_SPI1_RXSEL_Msk                  (0xFul << PDMA_PDSSR0_SPI1_RXSEL_Pos)

#define PDMA_PDSSR0_SPI1_TXSEL_Pos                  12
#define PDMA_PDSSR0_SPI1_TXSEL_Msk                  (0xFul << PDMA_PDSSR0_SPI1_TXSEL_Pos)

#define PDMA_PDSSR0_SPI2_RXSEL_Pos                  16
#define PDMA_PDSSR0_SPI2_RXSEL_Msk                  (0xFul << PDMA_PDSSR0_SPI2_RXSEL_Pos)

#define PDMA_PDSSR0_SPI2_TXSEL_Pos                  20
#define PDMA_PDSSR0_SPI2_TXSEL_Msk                  (0xFul << PDMA_PDSSR0_SPI2_TXSEL_Pos)

#define PDMA_PDSSR0_SPI3_RXSEL_Pos                  24
#define PDMA_PDSSR0_SPI3_RXSEL_Msk                  (0xFul << PDMA_PDSSR0_SPI3_RXSEL_Pos)

#define PDMA_PDSSR0_SPI3_TXSEL_Pos                  28
#define PDMA_PDSSR0_SPI3_TXSEL_Msk                  (0xFul << PDMA_PDSSR0_SPI3_TXSEL_Pos)

/* PDMA PDSSR1 Bit Field Definitions */
#define PDMA_PDSSR1_UART0_RXSEL_Pos                 0
#define PDMA_PDSSR1_UART0_RXSEL_Msk                 (0xFul << PDMA_PDSSR1_UART0_RXSEL_Pos)

#define PDMA_PDSSR1_UART0_TXSEL_Pos                 4
#define PDMA_PDSSR1_UART0_TXSEL_Msk                 (0xFul << PDMA_PDSSR1_UART0_TXSEL_Pos)

#define PDMA_PDSSR1_UART1_RXSEL_Pos                 8
#define PDMA_PDSSR1_UART1_RXSEL_Msk                 (0xFul << PDMA_PDSSR1_UART1_RXSEL_Pos)

#define PDMA_PDSSR1_UART1_TXSEL_Pos                 12
#define PDMA_PDSSR1_UART1_TXSEL_Msk                 (0xFul << PDMA_PDSSR1_UART1_TXSEL_Pos)

#define PDMA_PDSSR1_ADC_RXSEL_Pos                   24
#define PDMA_PDSSR1_ADC_RXSEL_Msk                   (0xFul << PDMA_PDSSR1_ADC_RXSEL_Pos)

/* PDMA GCRISR Bit Field Definitions */
#define PDMA_GCRISR_INTR0_Pos                       0
#define PDMA_GCRISR_INTR0_Msk                       (1ul << PDMA_GCRISR_INTR0_Pos)

#define PDMA_GCRISR_INTR1_Pos                       1
#define PDMA_GCRISR_INTR1_Msk                       (1ul << PDMA_GCRISR_INTR1_Pos)

#define PDMA_GCRISR_INTR2_Pos                       2
#define PDMA_GCRISR_INTR2_Msk                       (1ul << PDMA_GCRISR_INTR2_Pos)

#define PDMA_GCRISR_INTR3_Pos                       3
#define PDMA_GCRISR_INTR3_Msk                       (1ul << PDMA_GCRISR_INTR3_Pos)

#define PDMA_GCRISR_INTR4_Pos                       4
#define PDMA_GCRISR_INTR4_Msk                       (1ul << PDMA_GCRISR_INTR4_Pos)

#define PDMA_GCRISR_INTR5_Pos                       5
#define PDMA_GCRISR_INTR5_Msk                       (1ul << PDMA_GCRISR_INTR5_Pos)

#define PDMA_GCRISR_INTR6_Pos                       6
#define PDMA_GCRISR_INTR6_Msk                       (1ul << PDMA_GCRISR_INTR6_Pos)

#define PDMA_GCRISR_INTR7_Pos                       7
#define PDMA_GCRISR_INTR7_Msk                       (1ul << PDMA_GCRISR_INTR7_Pos)

#define PDMA_GCRISR_INTR8_Pos                       8
#define PDMA_GCRISR_INTR8_Msk                       (1ul << PDMA_GCRISR_INTR8_Pos)

#define PDMA_GCRISR_INTR_Pos                        31
#define PDMA_GCRISR_INTR_Msk                        (1ul << PDMA_GCRISR_INTR_Pos)

/* PDMA PDSSR2 Bit Field Definitions */
#define PDMA_PDSSR2_I2S_RXSEL_Pos                   0
#define PDMA_PDSSR2_I2S_RXSEL_Msk                   (0xFul << PDMA_PDSSR2_I2S_RXSEL_Pos)

#define PDMA_PDSSR2_I2S_TXSEL_Pos                   4
#define PDMA_PDSSR2_I2S_TXSEL_Msk                   (0xFul << PDMA_PDSSR2_I2S_TXSEL_Pos)

/*----------------------------- PWM Controller -------------------------------*/
typedef struct
{
    __IO uint32_t  CP01:8;
    __IO uint32_t  CP23:8;
    __IO uint32_t  DZI01:8;
    __IO uint32_t  DZI23:8;
} PWM_PPR_T;

typedef struct
{
    __IO uint32_t  CSR0:3;
    __I  uint32_t  RESERVE0:1;
    __IO uint32_t  CSR1:3;
    __I  uint32_t  RESERVE1:1;
    __IO uint32_t  CSR2:3;
    __I  uint32_t  RESERVE2:1;
    __IO uint32_t  CSR3:3;
    __I  uint32_t  RESERVE3:17;
} PWM_CSR_T;

typedef struct
{
    __IO uint32_t  CH0EN:1;
    __I  uint32_t  RESERVE0:1;
    __IO uint32_t  CH0INV:1;
    __IO uint32_t  CH0MOD:1;
    __IO uint32_t  DZEN01:1;
    __IO uint32_t  DZEN23:1;
    __I  uint32_t  RESERVE1:2;
    __IO uint32_t  CH1EN:1;
    __I  uint32_t  RESERVE2:1;
    __IO uint32_t  CH1INV:1;
    __IO uint32_t  CH1MOD:1;
    __I  uint32_t  RESERVE3:4;
    __IO uint32_t  CH2EN:1;
    __I  uint32_t  RESERVE4:1;
    __IO uint32_t  CH2INV:1;
    __IO uint32_t  CH2MOD:1;
    __I  uint32_t  RESERVE5:4;
    __IO uint32_t  CH3EN:1;
    __I  uint32_t  RESERVE6:1;
    __IO uint32_t  CH3INV:1;
    __IO uint32_t  CH3MOD:1;
    __I  uint32_t  RESERVE7:4;   
} PWM_PCR_T;

typedef __IO uint32_t PWM_CNR_T;

typedef __IO uint32_t PWM_CMR_T;

typedef __I  uint32_t PWM_PDR_T;

typedef struct
{
    __IO uint32_t  BCn:1;
    __I  uint32_t  RESERVE:31;
} PWM_PBCR_T;

typedef struct
{
    __IO uint32_t  PWMIE0:1;
    __IO uint32_t  PWMIE1:1;
    __IO uint32_t  PWMIE2:1;
    __IO uint32_t  PWMIE3:1;
    __I  uint32_t  RESERVE:28;
} PWM_PIER_T;

typedef struct
{
    __IO uint32_t  PWMIF0:1;
    __IO uint32_t  PWMIF1:1;
    __IO uint32_t  PWMIF2:1;
    __IO uint32_t  PWMIF3:1;
    __I  uint32_t  RESERVE:28;
} PWM_PIIR_T;

typedef struct
{
    __IO uint32_t  INV0:1;
    __IO uint32_t  CRL_IE0:1;
    __IO uint32_t  CFL_IE0:1;
    __IO uint32_t  CAPCH0EN:1;
    __IO uint32_t  CAPIF0:1;
    __I  uint32_t  RESERVE0:1;
    __IO uint32_t  CRLRI0:1;
    __IO uint32_t  CFLRI0:1;
    __I  uint32_t  RESERVE1:8;
    __IO uint32_t  INV1:1;
    __IO uint32_t  CRL_IE1:1;
    __IO uint32_t  CFL_IE1:1;
    __IO uint32_t  CAPCH1EN:1;
    __IO uint32_t  CAPIF1:1;
    __I  uint32_t  RESERVE2:1;
    __IO uint32_t  CRLRI1:1;
    __IO uint32_t  CFLRI1:1;
    __I  uint32_t  RESERVE3:8;
} PWM_CCR0_T;

typedef struct
{
    __IO uint32_t  INV2:1;
    __IO uint32_t  CRL_IE2:1;
    __IO uint32_t  CFL_IE2:1;
    __IO uint32_t  CAPCH2EN:1;
    __IO uint32_t  CAPIF2:1;
    __I  uint32_t  RESERVE0:1;
    __IO uint32_t  CRLRI2:1;
    __IO uint32_t  CFLRI2:1;
    __I  uint32_t  RESERVE1:8;
    __IO uint32_t  INV3:1;
    __IO uint32_t  CRL_IE3:1;
    __IO uint32_t  CFL_IE3:1;
    __IO uint32_t  CAPCH3EN:1;
    __IO uint32_t  CAPIF3:1;
    __I  uint32_t  RESERVE2:1;
    __IO uint32_t  CRLRI3:1;
    __IO uint32_t  CFLRI3:1;
    __I  uint32_t  RESERVE3:8;
} PWM_CCR2_T;

typedef __IO uint32_t PWM_CRLR_T;

typedef __IO uint32_t PWM_CFLR_T;

typedef __IO uint32_t PWM_CAPENR_T;

typedef struct
{
    __IO uint32_t  PWM0:1;
    __IO uint32_t  PWM1:1;
    __IO uint32_t  PWM2:1;
    __IO uint32_t  PWM3:1;
    __I  uint32_t  RESERVE:28;
} PWM_POE_T;

typedef struct
{
    union 
    {
        __IO uint32_t u32PPR;
        
        struct 
        {
            __IO uint32_t  CP01:8;
            __IO uint32_t  CP23:8;
            __IO uint32_t  DZI01:8;
            __IO uint32_t  DZI23:8;
        } PPR;
    };
    
    union 
    {
        __IO uint32_t u32CSR;
        
        struct 
        {
            __IO uint32_t  CSR0:3;
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  CSR1:3;
            __I  uint32_t  RESERVE1:1;
            __IO uint32_t  CSR2:3;
            __I  uint32_t  RESERVE2:1;
            __IO uint32_t  CSR3:3;
            __I  uint32_t  RESERVE3:17;
        } CSR;
    };

    union 
    {
        __IO uint32_t u32PCR;
        
        struct 
        {
            __IO uint32_t  CH0EN:1;
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  CH0INV:1;
            __IO uint32_t  CH0MOD:1;
            __IO uint32_t  DZEN01:1;
            __IO uint32_t  DZEN23:1;
            __I  uint32_t  RESERVE1:2;
            __IO uint32_t  CH1EN:1;
            __I  uint32_t  RESERVE2:1;
            __IO uint32_t  CH1INV:1;
            __IO uint32_t  CH1MOD:1;
            __I  uint32_t  RESERVE3:4;
            __IO uint32_t  CH2EN:1;
            __I  uint32_t  RESERVE4:1;
            __IO uint32_t  CH2INV:1;
            __IO uint32_t  CH2MOD:1;
            __I  uint32_t  RESERVE5:4;
            __IO uint32_t  CH3EN:1;
            __I  uint32_t  RESERVE6:1;
            __IO uint32_t  CH3INV:1;
            __IO uint32_t  CH3MOD:1;
            __I  uint32_t  RESERVE7:4;   
        } PCR;
    };

    union 
    {
        __IO uint32_t u32CNR0;
        __IO uint32_t CNR0;
    };

    union 
    {
        __IO uint32_t u32CMR0;
        __IO uint32_t CMR0;
    };

    union 
    {
        __I  uint32_t u32PDR0;
        __I  uint32_t PDR0;
    };
    
    union 
    {
        __IO uint32_t u32CNR1;
        __IO uint32_t CNR1;
    };

    union 
    {
        __IO uint32_t u32CMR1;
        __IO uint32_t CMR1;
    };

    union 
    {
        __I  uint32_t u32PDR1;
        __I  uint32_t PDR1;
    };

    union 
    {
        __IO uint32_t u32CNR2;
        __IO uint32_t CNR2;
    };

    union 
    {
        __IO uint32_t u32CMR2;
        __IO uint32_t CMR2;
    };

    union 
    {
        __I  uint32_t u32PDR2;
        __I  uint32_t PDR2;
    };

    union 
    {
        __IO uint32_t u32CNR3;
        __IO uint32_t CNR3;
    };

    union 
    {
        __IO uint32_t u32CMR3;
        __IO uint32_t CMR3;
    };

    union 
    {
        __I  uint32_t u32PDR3;
        __I  uint32_t PDR3;
    };

    union 
    {
        __IO uint32_t u32PBCR;
        
        struct 
        {
            __IO uint32_t  BCn:1;
            __I  uint32_t  RESERVE:31;
        } PBCR;
    };

    union 
    {
        __IO uint32_t u32PIER;
        
        struct 
        {
            __IO uint32_t  PWMIE0:1;
            __IO uint32_t  PWMIE1:1;
            __IO uint32_t  PWMIE2:1;
            __IO uint32_t  PWMIE3:1;
            __I  uint32_t  RESERVE:28;
        } PIER;
    };
    
    union 
    {
        __IO uint32_t u32PIIR;
        
        struct 
        {
            __IO uint32_t  PWMIF0:1;
            __IO uint32_t  PWMIF1:1;
            __IO uint32_t  PWMIF2:1;
            __IO uint32_t  PWMIF3:1;
            __I  uint32_t  RESERVE:28;
        } PIIR;
    };    
    
    uint32_t    RESERVE1[2];

    union 
    {
        __IO uint32_t u32CCR0;
        
        struct 
        {
            __IO uint32_t  INV0:1;
            __IO uint32_t  CRL_IE0:1;
            __IO uint32_t  CFL_IE0:1;
            __IO uint32_t  CAPCH0EN:1;
            __IO uint32_t  CAPIF0:1;
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  CRLRI0:1;
            __IO uint32_t  CFLRI0:1;
            __I  uint32_t  RESERVE1:8;
            __IO uint32_t  INV1:1;
            __IO uint32_t  CRL_IE1:1;
            __IO uint32_t  CFL_IE1:1;
            __IO uint32_t  CAPCH1EN:1;
            __IO uint32_t  CAPIF1:1;
            __I  uint32_t  RESERVE2:1;
            __IO uint32_t  CRLRI1:1;
            __IO uint32_t  CFLRI1:1;
            __I  uint32_t  RESERVE3:8;
        } CCR0;
    };
    
    union 
    {
        __IO uint32_t u32CCR2;
        
        struct 
        {
            __IO uint32_t  INV2:1;
            __IO uint32_t  CRL_IE2:1;
            __IO uint32_t  CFL_IE2:1;
            __IO uint32_t  CAPCH2EN:1;
            __IO uint32_t  CAPIF2:1;
            __I  uint32_t  RESERVE0:1;
            __IO uint32_t  CRLRI2:1;
            __IO uint32_t  CFLRI2:1;
            __I  uint32_t  RESERVE1:8;
            __IO uint32_t  INV3:1;
            __IO uint32_t  CRL_IE3:1;
            __IO uint32_t  CFL_IE3:1;
            __IO uint32_t  CAPCH3EN:1;
            __IO uint32_t  CAPIF3:1;
            __I  uint32_t  RESERVE2:1;
            __IO uint32_t  CRLRI3:1;
            __IO uint32_t  CFLRI3:1;
            __I  uint32_t  RESERVE3:8;
        } CCR2;
    };    

    union 
    {
        __IO uint32_t u32CRLR0;
        __IO uint32_t CRLR0;
    };

    union 
    {
        __IO uint32_t u32CFLR0;
        __IO uint32_t CFLR0;
    };

    union 
    {
        __IO uint32_t u32CRLR1;
        __IO uint32_t CRLR1;
    };

    union 
    {
        __IO uint32_t u32CFLR1;
        __IO uint32_t CFLR1;
    };

    union 
    {
        __IO uint32_t u32CRLR2;
        __IO uint32_t CRLR2;
    };

    union 
    {
        __IO uint32_t u32CFLR2;
        __IO uint32_t CFLR2;
    };
    
    union 
    {
        __IO uint32_t u32CRLR3;
        __IO uint32_t CRLR3;
    };

    union 
    {
        __IO uint32_t u32CFLR3;
        __IO uint32_t CFLR3;
    };    

    union 
    {
        __IO uint32_t u32CAPENR;
        __IO uint32_t CAPENR;
    };

    union 
    {
        __IO uint32_t u32POE;
        
        struct 
        {
            __IO uint32_t  PWM0:1;
            __IO uint32_t  PWM1:1;
            __IO uint32_t  PWM2:1;
            __IO uint32_t  PWM3:1;
            __I  uint32_t  RESERVE:28;
        } POE;
    }; 
} PWM_T;

/* PWM PPR Bit Field Definitions */
#define PWM_PPR_DZI23_Pos                       24
#define PWM_PPR_DZI23_Msk                       (0xFFul << PWM_PPR_DZI23_Pos)

#define PWM_PPR_DZI01_Pos                       16
#define PWM_PPR_DZI01_Msk                       (0xFFul << PWM_PPR_DZI01_Pos)

#define PWM_PPR_CP23_Pos                        8
#define PWM_PPR_CP23_Msk                        (0xFFul << PWM_PPR_CP23_Pos)

#define PWM_PPR_CP01_Pos                        0
#define PWM_PPR_CP01_Msk                        (0xFFul << PWM_PPR_CP01_Pos)

/* PWM CSR Bit Field Definitions */
#define PWM_CSR_CSR3_Pos                        12
#define PWM_CSR_CSR3_Msk                        (7ul << PWM_CSR_CSR3_Pos)

#define PWM_CSR_CSR2_Pos                        8
#define PWM_CSR_CSR2_Msk                        (7ul << PWM_CSR_CSR2_Pos)

#define PWM_CSR_CSR1_Pos                        4
#define PWM_CSR_CSR1_Msk                        (7ul << PWM_CSR_CSR1_Pos)

#define PWM_CSR_CSR0_Pos                        0
#define PWM_CSR_CSR0_Msk                        (7ul << PWM_CSR_CSR0_Pos)

/* PWM PCR Bit Field Definitions */
#define PWM_PCR_CH3MOD_Pos                      27
#define PWM_PCR_CH3MOD_Msk                      (1ul << PWM_PCR_CH3MOD_Pos)

#define PWM_PCR_CH3INV_Pos                      26
#define PWM_PCR_CH3INV_Msk                      (1ul << PWM_PCR_CH3INV_Pos)

#define PWM_PCR_CH3EN_Pos                       24
#define PWM_PCR_CH3EN_Msk                       (1ul << PWM_PCR_CH3EN_Pos)

#define PWM_PCR_CH2MOD_Pos                      19
#define PWM_PCR_CH2MOD_Msk                      (1ul << PWM_PCR_CH2MOD_Pos)

#define PWM_PCR_CH2INV_Pos                      18
#define PWM_PCR_CH2INV_Msk                      (1ul << PWM_PCR_CH2INV_Pos)

#define PWM_PCR_CH2EN_Pos                       16
#define PWM_PCR_CH2EN_Msk                       (1ul << PWM_PCR_CH2EN_Pos)

#define PWM_PCR_CH1MOD_Pos                      11
#define PWM_PCR_CH1MOD_Msk                      (1ul << PWM_PCR_CH1MOD_Pos)

#define PWM_PCR_CH1INV_Pos                      10
#define PWM_PCR_CH1INV_Msk                      (1ul << PWM_PCR_CH1INV_Pos)

#define PWM_PCR_CH1EN_Pos                       8
#define PWM_PCR_CH1EN_Msk                       (1ul << PWM_PCR_CH1EN_Pos)

#define PWM_PCR_DZEN23_Pos                      5
#define PWM_PCR_DZEN23_Msk                      (1ul << PWM_PCR_DZEN23_Pos)

#define PWM_PCR_DZEN01_Pos                      4
#define PWM_PCR_DZEN01_Msk                      (1ul << PWM_PCR_DZEN01_Pos)

#define PWM_PCR_CH0MOD_Pos                      3
#define PWM_PCR_CH0MOD_Msk                      (1ul << PWM_PCR_CH0MOD_Pos)

#define PWM_PCR_CH0INV_Pos                      2
#define PWM_PCR_CH0INV_Msk                      (1ul << PWM_PCR_CH0INV_Pos)

#define PWM_PCR_CH0EN_Pos                       0
#define PWM_PCR_CH0EN_Msk                       (1ul << PWM_PCR_CH0EN_Pos)

/* PWM CNR Bit Field Definitions */
#define PWM_CNR_CNR_Pos                         0
#define PWM_CNR_CNR_Msk                         (0xFFFFul << PWM_CNR_CNR_Pos)

/* PWM CMR Bit Field Definitions */
#define PWM_CMR_CMR_Pos                         0
#define PWM_CMR_CMR_Msk                         (0xFFFFul << PWM_CMR_CMR_Pos)

/* PWM PDR Bit Field Definitions */
#define PWM_PDR_PDR_Pos                         0
#define PWM_PDR_PDR_Msk                         (0xFFFFul << PWM_PDR_PDR_Pos)

/* PWM PBCR Bit Field Definitions */
#define PWM_PBCR_BCn_Pos                        0
#define PWM_PBCR_BCn_Msk                        (1ul << PWM_PBCR_BCn_Pos)

/* PWM PIER Bit Field Definitions */
#define PWM_PIER_PWMIE3_Pos                     3
#define PWM_PIER_PWMIE3_Msk                     (1ul << PWM_PIER_PWMIE3_Pos)

#define PWM_PIER_PWMIE2_Pos                     2
#define PWM_PIER_PWMIE2_Msk                     (1ul << PWM_PIER_PWMIE2_Pos)

#define PWM_PIER_PWMIE1_Pos                     1
#define PWM_PIER_PWMIE1_Msk                     (1ul << PWM_PIER_PWMIE1_Pos)

#define PWM_PIER_PWMIE0_Pos                     0
#define PWM_PIER_PWMIE0_Msk                     (1ul << PWM_PIER_PWMIE0_Pos)

/* PWM PIIR Bit Field Definitions */
#define PWM_PIIR_PWMIF3_Pos                     3
#define PWM_PIIR_PWMIF3_Msk                     (1ul << PWM_PIIR_PWMIF3_Pos)

#define PWM_PIIR_PWMIF2_Pos                     2
#define PWM_PIIR_PWMIF2_Msk                     (1ul << PWM_PIIR_PWMIF2_Pos)

#define PWM_PIIR_PWMIF1_Pos                     1
#define PWM_PIIR_PWMIF1_Msk                     (1ul << PWM_PIIR_PWMIF1_Pos)

#define PWM_PIIR_PWMIF0_Pos                     0
#define PWM_PIIR_PWMIF0_Msk                     (1ul << PWM_PIIR_PWMIF0_Pos)

/* PWM CCR0 Bit Field Definitions */
#define PWM_CCR0_CFLRI1_Pos                     23
#define PWM_CCR0_CFLRI1_Msk                     (1ul << PWM_CCR0_CFLRI1_Pos)

#define PWM_CCR0_CRLRI1_Pos                     22
#define PWM_CCR0_CRLRI1_Msk                     (1ul << PWM_CCR0_CRLRI1_Pos)

#define PWM_CCR0_CAPIF1_Pos                     20
#define PWM_CCR0_CAPIF1_Msk                     (1ul << PWM_CCR0_CAPIF1_Pos)

#define PWM_CCR0_CAPCH1EN_Pos                   19
#define PWM_CCR0_CAPCH1EN_Msk                   (1ul << PWM_CCR0_CAPCH1EN_Pos)

#define PWM_CCR0_CFL_IE1_Pos                    18
#define PWM_CCR0_CFL_IE1_Msk                    (1ul << PWM_CCR0_CFL_IE1_Pos)

#define PWM_CCR0_CRL_IE1_Pos                    17
#define PWM_CCR0_CRL_IE1_Msk                    (1ul << PWM_CCR0_CRL_IE1_Pos)

#define PWM_CCR0_INV1_Pos                       16
#define PWM_CCR0_INV1_Msk                       (1ul << PWM_CCR0_INV1_Pos)

#define PWM_CCR0_CFLRI0_Pos                     7
#define PWM_CCR0_CFLRI0_Msk                     (1ul << PWM_CCR0_CFLRI0_Pos)

#define PWM_CCR0_CRLRI0_Pos                     6
#define PWM_CCR0_CRLRI0_Msk                     (1ul << PWM_CCR0_CRLRI0_Pos)

#define PWM_CCR0_CAPIF0_Pos                     4
#define PWM_CCR0_CAPIF0_Msk                     (1ul << PWM_CCR0_CAPIF0_Pos)

#define PWM_CCR0_CAPCH0EN_Pos                   3
#define PWM_CCR0_CAPCH0EN_Msk                   (1ul << PWM_CCR0_CAPCH0EN_Pos)

#define PWM_CCR0_CFL_IE0_Pos                    2
#define PWM_CCR0_CFL_IE0_Msk                    (1ul << PWM_CCR0_CFL_IE0_Pos)

#define PWM_CCR0_CRL_IE0_Pos                    1
#define PWM_CCR0_CRL_IE0_Msk                    (1ul << PWM_CCR0_CRL_IE0_Pos)

#define PWM_CCR0_INV0_Pos                       0
#define PWM_CCR0_INV0_Msk                       (1ul << PWM_CCR0_INV0_Pos)

/* PWM CCR2 Bit Field Definitions */
#define PWM_CCR2_CFLRI3_Pos                     23
#define PWM_CCR2_CFLRI3_Msk                     (1ul << PWM_CCR2_CFLRI3_Pos)

#define PWM_CCR2_CRLRI3_Pos                     22
#define PWM_CCR2_CRLRI3_Msk                     (1ul << PWM_CCR2_CRLRI3_Pos)

#define PWM_CCR2_CAPIF3_Pos                     20
#define PWM_CCR2_CAPIF3_Msk                     (1ul << PWM_CCR2_CAPIF3_Pos)

#define PWM_CCR2_CAPCH3EN_Pos                   19
#define PWM_CCR2_CAPCH3EN_Msk                   (1ul << PWM_CCR2_CAPCH3EN_Pos)

#define PWM_CCR2_CFL_IE3_Pos                    18
#define PWM_CCR2_CFL_IE3_Msk                    (1ul << PWM_CCR2_CFL_IE3_Pos)

#define PWM_CCR2_CRL_IE3_Pos                    17
#define PWM_CCR2_CRL_IE3_Msk                    (1ul << PWM_CCR2_CRL_IE3_Pos)

#define PWM_CCR2_INV3_Pos                       16
#define PWM_CCR2_INV3_Msk                       (1ul << PWM_CCR2_INV3_Pos)

#define PWM_CCR2_CFLRI2_Pos                     7
#define PWM_CCR2_CFLRI2_Msk                     (1ul << PWM_CCR2_CFLRI2_Pos)

#define PWM_CCR2_CRLRI2_Pos                     6
#define PWM_CCR2_CRLRI2_Msk                     (1ul << PWM_CCR2_CRLRI2_Pos)

#define PWM_CCR2_CAPIF2_Pos                     4
#define PWM_CCR2_CAPIF2_Msk                     (1ul << PWM_CCR2_CAPIF2_Pos)

#define PWM_CCR2_CAPCH2EN_Pos                   3
#define PWM_CCR2_CAPCH2EN_Msk                   (1ul << PWM_CCR2_CAPCH2EN_Pos)

#define PWM_CCR2_CFL_IE2_Pos                    2
#define PWM_CCR2_CFL_IE2_Msk                    (1ul << PWM_CCR2_CFL_IE2_Pos)

#define PWM_CCR2_CRL_IE2_Pos                    1
#define PWM_CCR2_CRL_IE2_Msk                    (1ul << PWM_CCR2_CRL_IE2_Pos)

#define PWM_CCR2_INV2_Pos                       0
#define PWM_CCR2_INV2_Msk                       (1ul << PWM_CCR2_INV2_Pos)

/* PWM CRLR Bit Field Definitions */
#define PWM_CRLR_CRLR_Pos                       0
#define PWM_CRLR_CRLR_Msk                       (0xFFFFul << PWM_CRLR_CRLR_Pos)

/* PWM CFLR Bit Field Definitions */
#define PWM_CFLR_CFLR_Pos                       0
#define PWM_CFLR_CFLR_Msk                       (0xFFFFul << PWM_CFLR_CFLR_Pos)

/* PWM CAPENR Bit Field Definitions */
#define PWM_CAPENR_CAPENR_Pos                   0
#define PWM_CAPENR_CAPENR_Msk                   (0xFul << PWM_CAPENR_CAPENR_Pos)

/* PWM POE Bit Field Definitions */
#define PWM_POE_PWM3_Pos                        3
#define PWM_POE_PWM3_Msk                        (1ul << PWM_POE_PWM3_Pos)

#define PWM_POE_PWM2_Pos                        2
#define PWM_POE_PWM2_Msk                        (1ul << PWM_POE_PWM2_Pos)

#define PWM_POE_PWM1_Pos                        1
#define PWM_POE_PWM1_Msk                        (1ul << PWM_POE_PWM1_Pos)

#define PWM_POE_PWM0_Pos                        0
#define PWM_POE_PWM0_Msk                        (1ul << PWM_POE_PWM0_Pos)

/*----------------------------- I2S Controller -------------------------------*/

typedef struct
{
    __IO uint32_t  I2SEN:1;
    __IO uint32_t  TXEN:1;
    __IO uint32_t  RXEN:1;
    __IO uint32_t  MUTE:1;
    __IO uint32_t  WORDWIDTH:2;
    __IO uint32_t  MONO:1;
    __IO uint32_t  FORMAT:1;
    __IO uint32_t  SLAVE:1;
    __IO uint32_t  TXTH:3;
    __IO uint32_t  RXTH:3;
    __IO uint32_t  MCLKEN:1;
    __IO uint32_t  RCHZCEN:1;
    __IO uint32_t  LCHZCEN:1;
    __IO uint32_t  CLR_TXFIFO:1;
    __IO uint32_t  CLR_RXFIFO:1;
    __IO uint32_t  TXDMA:1;
    __IO uint32_t  RXDMA:1; 
    __I  uint32_t  RESERVE:10;
} I2S_I2SCON_T;

typedef struct
{
    __IO uint32_t  MCLK_DIV:3;
    __I  uint32_t  RESERVE0:5;
    __IO uint32_t  BCLK_DIV:8;
    __I  uint32_t  RESERVE1:16;
} I2S_I2SCLKDIV_T;

typedef struct
{
    __IO uint32_t  RXUDFIE:1;
    __IO uint32_t  RXOVFIE:1;
    __IO uint32_t  RXTHIE:1;
    __I  uint32_t  RESERVE0:5;
    __IO uint32_t  TXUDFIE:1;
    __IO uint32_t  TXOVFIE:1;
    __IO uint32_t  TXTHIE:1;
    __IO uint32_t  RZCIE:1;
    __IO uint32_t  LZCIE:1;
    __I  uint32_t  RESERVE1:19;
} I2S_I2SIE_T;

typedef struct
{
    __I  uint32_t  I2SINT:1;
    __I  uint32_t  I2SRXINT:1;
    __I  uint32_t  I2STXINT:1;
    __I  uint32_t  RIGHT:1;
    __I  uint32_t  RESERVE0:4;
    __IO uint32_t  RXUDF:1;
    __IO uint32_t  RXOVF:1;
    __I  uint32_t  RXTHF:1;
    __I  uint32_t  RXFULL:1;
    __I  uint32_t  RXEMPTY:1;
    __I  uint32_t  RESERVE1:3;
    __IO uint32_t  TXUDF:1;
    __IO uint32_t  TXOVF:1;
    __I  uint32_t  TXTHF:1;
    __I  uint32_t  TXFULL:1;
    __I  uint32_t  TXEMPTY:1;
    __I  uint32_t  TXBUSY:1;
    __I  uint32_t  RZCF:1;
    __I  uint32_t  LZCF:1;  
    __I  uint32_t  RX_LEVEL:4;
    __I  uint32_t  TX_LEVEL:4;
} I2S_I2SSTATUS_T;

typedef __O uint32_t I2S_I2STXFIFO_T;

typedef __I uint32_t I2S_I2SRXFIFO_T;

typedef struct
{
    union 
    {
        __IO uint32_t u32I2SCON;
        
        struct 
        {
            __IO uint32_t  I2SEN:1;
            __IO uint32_t  TXEN:1;
            __IO uint32_t  RXEN:1;
            __IO uint32_t  MUTE:1;
            __IO uint32_t  WORDWIDTH:2;
            __IO uint32_t  MONO:1;
            __IO uint32_t  FORMAT:1;
            __IO uint32_t  SLAVE:1;
            __IO uint32_t  TXTH:3;
            __IO uint32_t  RXTH:3;
            __IO uint32_t  MCLKEN:1;
            __IO uint32_t  RCHZCEN:1;
            __IO uint32_t  LCHZCEN:1;
            __IO uint32_t  CLR_TXFIFO:1;
            __IO uint32_t  CLR_RXFIFO:1;
            __IO uint32_t  TXDMA:1;
            __IO uint32_t  RXDMA:1; 
            __I  uint32_t  RESERVE:10;
        } I2SCON;
    };

    union 
    {
        __IO uint32_t u32I2SCLKDIV;
        
        struct 
        {
            __IO uint32_t  MCLK_DIV:3;
            __I  uint32_t  RESERVE0:5;
            __IO uint32_t  BCLK_DIV:8;
            __I  uint32_t  RESERVE1:16;
        } I2SCLKDIV;
    };

    union 
    {
        __IO uint32_t u32I2SIE;
        
        struct 
        {
            __IO uint32_t  RXUDFIE:1;
            __IO uint32_t  RXOVFIE:1;
            __IO uint32_t  RXTHIE:1;
            __I  uint32_t  RESERVE0:5;
            __IO uint32_t  TXUDFIE:1;
            __IO uint32_t  TXOVFIE:1;
            __IO uint32_t  TXTHIE:1;
            __IO uint32_t  RZCIE:1;
            __IO uint32_t  LZCIE:1;
            __I  uint32_t  RESERVE1:19;
        } I2SIE;
    };

    union 
    {
        __I uint32_t u32I2SSTATUS;
        struct 
        {
            __I  uint32_t  I2SINT:1;
            __I  uint32_t  I2SRXINT:1;
            __I  uint32_t  I2STXINT:1;
            __I  uint32_t  RIGHT:1;
            __I  uint32_t  RESERVE0:4;
            __IO uint32_t  RXUDF:1;
            __IO uint32_t  RXOVF:1;
            __I  uint32_t  RXTHF:1;
            __I  uint32_t  RXFULL:1;
            __I  uint32_t  RXEMPTY:1;
            __I  uint32_t  RESERVE1:3;
            __IO uint32_t  TXUDF:1;
            __IO uint32_t  TXOVF:1;
            __I  uint32_t  TXTHF:1;
            __I  uint32_t  TXFULL:1;
            __I  uint32_t  TXEMPTY:1;
            __I  uint32_t  TXBUSY:1;
            __I  uint32_t  RZCF:1;
            __I  uint32_t  LZCF:1;  
            __I  uint32_t  RX_LEVEL:4;
            __I  uint32_t  TX_LEVEL:4;
        } I2SSTATUS;
    };
    
    union 
    {
        __O uint32_t u32I2STXFIFO;
        __O uint32_t I2STXFIFO;
    };

    union 
    {
        __I uint32_t u32I2SRXFIFO;
        __I uint32_t I2SRXFIFO;
    };
} I2S_T;


/* I2S I2SCON Bit Field Definitions */
#define I2S_I2SCON_RXDMA_Pos                    21
#define I2S_I2SCON_RXDMA_Msk                    (1ul << I2S_I2SCON_RXDMA_Pos)

#define I2S_I2SCON_TXDMA_Pos                    20
#define I2S_I2SCON_TXDMA_Msk                    (1ul << I2S_I2SCON_TXDMA_Pos)

#define I2S_I2SCON_CLR_RXFIFO_Pos               19
#define I2S_I2SCON_CLR_RXFIFO_Msk               (1ul << I2S_I2SCON_CLR_RXFIFO_Pos)

#define I2S_I2SCON_CLR_TXFIFO_Pos               18
#define I2S_I2SCON_CLR_TXFIFO_Msk               (1ul << I2S_I2SCON_CLR_TXFIFO_Pos)

#define I2S_I2SCON_LCHZCEN_Pos                  17
#define I2S_I2SCON_LCHZCEN_Msk                  (1ul << I2S_I2SCON_LCHZCEN_Pos)

#define I2S_I2SCON_RCHZCEN_Pos                  16
#define I2S_I2SCON_RCHZCEN_Msk                  (1ul << I2S_I2SCON_RCHZCEN_Pos)

#define I2S_I2SCON_MCLKEN_Pos                   15
#define I2S_I2SCON_MCLKEN_Msk                   (1ul << I2S_I2SCON_MCLKEN_Pos)

#define I2S_I2SCON_RXTH_Pos                     12
#define I2S_I2SCON_RXTH_Msk                     (7ul << I2S_I2SCON_RXTH_Pos)

#define I2S_I2SCON_TXTH_Pos                     9
#define I2S_I2SCON_TXTH_Msk                     (7ul << I2S_I2SCON_TXTH_Pos)

#define I2S_I2SCON_SLAVE_Pos                    8
#define I2S_I2SCON_SLAVE_Msk                    (1ul << I2S_I2SCON_SLAVE_Pos)

#define I2S_I2SCON_FORMAT_Pos                   7
#define I2S_I2SCON_FORMAT_Msk                   (1ul << I2S_I2SCON_FORMAT_Pos)

#define I2S_I2SCON_MONO_Pos                     6
#define I2S_I2SCON_MONO_Msk                     (1ul << I2S_I2SCON_MONO_Pos)

#define I2S_I2SCON_WORDWIDTH_Pos                4
#define I2S_I2SCON_WORDWIDTH_Msk                (3ul << I2S_I2SCON_WORDWIDTH_Pos)

#define I2S_I2SCON_MUTE_Pos                     3
#define I2S_I2SCON_MUTE_Msk                     (1ul << I2S_I2SCON_MUTE_Pos)

#define I2S_I2SCON_RXEN_Pos                     2
#define I2S_I2SCON_RXEN_Msk                     (1ul << I2S_I2SCON_RXEN_Pos)

#define I2S_I2SCON_TXEN_Pos                     1
#define I2S_I2SCON_TXEN_Msk                     (1ul << I2S_I2SCON_TXEN_Pos)

#define I2S_I2SCON_I2SEN_Pos                    0
#define I2S_I2SCON_I2SEN_Msk                    (1ul << I2S_I2SCON_I2SEN_Pos)

/* I2S I2SCLKDIV Bit Field Definitions */
#define I2S_I2SCLKDIV_BCLK_DIV_Pos              8
#define I2S_I2SCLKDIV_BCLK_DIV_Msk              (0xFFul << I2S_I2SCLKDIV_BCLK_DIV_Pos)

#define I2S_I2SCLKDIV_MCLK_DIV_Pos              0
#define I2S_I2SCLKDIV_MCLK_DIV_Msk              (7ul << I2S_I2SCLKDIV_MCLK_DIV_Pos)

/* I2S I2SIE Bit Field Definitions */
#define I2S_I2SIE_LZCIE_Pos                     12
#define I2S_I2SIE_LZCIE_Msk                     (1ul << I2S_I2SIE_LZCIE_Pos)

#define I2S_I2SIE_RZCIE_Pos                     11
#define I2S_I2SIE_RZCIE_Msk                     (1ul << I2S_I2SIE_RZCIE_Pos)

#define I2S_I2SIE_TXTHIE_Pos                    10
#define I2S_I2SIE_TXTHIE_Msk                    (1ul << I2S_I2SIE_TXTHIE_Pos)
                                        
#define I2S_I2SIE_TXOVFIE_Pos                   9
#define I2S_I2SIE_TXOVFIE_Msk                   (1ul << I2S_I2SIE_TXOVFIE_Pos)

#define I2S_I2SIE_TXUDFIE_Pos                   8
#define I2S_I2SIE_TXUDFIE_Msk                   (1ul << I2S_I2SIE_TXUDFIE_Pos)

#define I2S_I2SIE_RXTHIE_Pos                    2
#define I2S_I2SIE_RXTHIE_Msk                    (1ul << I2S_I2SIE_RXTHIE_Pos)
                                        
#define I2S_I2SIE_RXOVFIE_Pos                   1
#define I2S_I2SIE_RXOVFIE_Msk                   (1ul << I2S_I2SIE_RXOVFIE_Pos)

#define I2S_I2SIE_RXUDFIE_Pos                   0
#define I2S_I2SIE_RXUDFIE_Msk                   (1ul << I2S_I2SIE_RXUDFIE_Pos)


/* I2S I2SSTATUS Bit Field Definitions */
#define I2S_I2SSTATUS_TX_LEVEL_Pos              28
#define I2S_I2SSTATUS_TX_LEVEL_Msk              (0xFul << I2S_I2SSTATUS_TX_LEVEL_Pos)

#define I2S_I2SSTATUS_RX_LEVEL_Pos              24
#define I2S_I2SSTATUS_RX_LEVEL_Msk              (0xFul << I2S_I2SSTATUS_RX_LEVEL_Pos)

#define I2S_I2SSTATUS_LZCF_Pos                  23
#define I2S_I2SSTATUS_LZCF_Msk                  (1ul << I2S_I2SSTATUS_LZCF_Pos)

#define I2S_I2SSTATUS_RZCF_Pos                  22
#define I2S_I2SSTATUS_RZCF_Msk                  (1ul << I2S_I2SSTATUS_RZCF_Pos)

#define I2S_I2SSTATUS_TXBUSY_Pos                21
#define I2S_I2SSTATUS_TXBUSY_Msk                (1ul << I2S_I2SSTATUS_TXBUSY_Pos)

#define I2S_I2SSTATUS_TXEMPTY_Pos               20
#define I2S_I2SSTATUS_TXEMPTY_Msk               (1ul << I2S_I2SSTATUS_TXEMPTY_Pos)

#define I2S_I2SSTATUS_TXFULL_Pos                19
#define I2S_I2SSTATUS_TXFULL_Msk                (1ul << I2S_I2SSTATUS_TXFULL_Pos)

#define I2S_I2SSTATUS_TXTHF_Pos                 18
#define I2S_I2SSTATUS_TXTHF_Msk                 (1ul << I2S_I2SSTATUS_TXTHF_Pos)

#define I2S_I2SSTATUS_TXOVF_Pos                 17
#define I2S_I2SSTATUS_TXOVF_Msk                 (1ul << I2S_I2SSTATUS_TXOVF_Pos)

#define I2S_I2SSTATUS_TXUDF_Pos                 16
#define I2S_I2SSTATUS_TXUDF_Msk                 (1ul << I2S_I2SSTATUS_TXUDF_Pos)

#define I2S_I2SSTATUS_RXEMPTY_Pos               12
#define I2S_I2SSTATUS_RXEMPTY_Msk               (1ul << I2S_I2SSTATUS_RXEMPTY_Pos)

#define I2S_I2SSTATUS_RXFULL_Pos                11
#define I2S_I2SSTATUS_RXFULL_Msk                (1ul << I2S_I2SSTATUS_RXFULL_Pos)

#define I2S_I2SSTATUS_RXTHF_Pos                 10
#define I2S_I2SSTATUS_RXTHF_Msk                 (1ul << I2S_I2SSTATUS_RXTHF_Pos)

#define I2S_I2SSTATUS_RXOVF_Pos                 9
#define I2S_I2SSTATUS_RXOVF_Msk                 (1ul << I2S_I2SSTATUS_RXOVF_Pos)

#define I2S_I2SSTATUS_RXUDF_Pos                 8
#define I2S_I2SSTATUS_RXUDF_Msk                 (1ul << I2S_I2SSTATUS_RXUDF_Pos)

#define I2S_I2SSTATUS_RIGHT_Pos                 3
#define I2S_I2SSTATUS_RIGHT_Msk                 (1ul << I2S_I2SSTATUS_RIGHT_Pos)

#define I2S_I2SSTATUS_I2STXINT_Pos              2
#define I2S_I2SSTATUS_I2STXINT_Msk              (1ul << I2S_I2SSTATUS_I2STXINT_Pos)

#define I2S_I2SSTATUS_I2SRXINT_Pos              1
#define I2S_I2SSTATUS_I2SRXINT_Msk              (1ul << I2S_I2SSTATUS_I2SRXINT_Pos)

#define I2S_I2SSTATUS_I2SINT_Pos                0
#define I2S_I2SSTATUS_I2SINT_Msk                (1ul << I2S_I2SSTATUS_I2SINT_Pos)


/*----------------------------- EBI Controller -------------------------------*/
typedef struct
{
    __IO uint32_t  ExtEN:1;
    __IO uint32_t  ExtBW16:1;
    __I  uint32_t  RESERVE0:6;
    __IO uint32_t  MCLKDIV:3;
    __I  uint32_t  RESERVE1:5;
    __IO uint32_t  ExttALE:3;
    __I  uint32_t  RESERVE2:13;
} EBI_EBICON_T;

typedef struct
{
    __I  uint32_t  RESERVE0:3;
    __IO uint32_t  ExttACC:5;
    __IO uint32_t  ExttAHD:3;
    __I  uint32_t  RESERVE1:1;
    __IO uint32_t  ExtIW2X:4;
    __I  uint32_t  RESERVE2:8;
    __IO uint32_t  ExtIR2R:4;
    __I  uint32_t  RESERVE3:4;
} EBI_EXTIME_T;

typedef struct
{
    union {
        __IO uint32_t u32EBICON;
        struct {
            __IO uint32_t  ExtEN:1;
            __IO uint32_t  ExtBW16:1;
            __I  uint32_t  RESERVE0:6;
            __IO uint32_t  MCLKDIV:3;
            __I  uint32_t  RESERVE1:5;
            __IO uint32_t  ExttALE:3;
            __I  uint32_t  RESERVE2:13;
        } EBICON;
    };

    union {
        __IO uint32_t u32EXTIME;
        struct {
            __I  uint32_t  RESERVE0:3;
            __IO uint32_t  ExttACC:5;
            __IO uint32_t  ExttAHD:3;
            __I  uint32_t  RESERVE1:1;
            __IO uint32_t  ExtIW2X:4;
            __I  uint32_t  RESERVE2:8;
            __IO uint32_t  ExtIR2R:4;
            __I  uint32_t  RESERVE3:4;
        } EXTIME;
    };
} EBI_T;

/* EBI EBICON Bit Field Definitions */
#define EBI_EBICON_ExttALE_Pos      16
#define EBI_EBICON_ExttALE_Msk      (0x7ul << EBI_EBICON_ExttALE_Pos)

#define EBI_EBICON_MCLKDIV_Pos      8
#define EBI_EBICON_MCLKDIV_Msk      (0x7ul << EBI_EBICON_MCLKDIV_Pos)

#define EBI_EBICON_ExtBW16_Pos      1
#define EBI_EBICON_ExtBW16_Msk      (1ul << EBI_EBICON_ExtBW16_Pos)

#define EBI_EBICON_ExtEN_Pos        0
#define EBI_EBICON_ExtEN_Msk        (1ul << EBI_EBICON_ExtEN_Pos)

/* EBI EXTIME Bit Field Definitions */
#define EBI_EXTIME_ExtIR2R_Pos      24
#define EBI_EXTIME_ExtIR2R_Msk      (0xFul << EBI_EXTIME_ExtIR2R_Pos)

#define EBI_EXTIME_ExtIW2X_Pos      12
#define EBI_EXTIME_ExtIW2X_Msk      (0xFul << EBI_EXTIME_ExtIW2X_Pos)

#define EBI_EXTIME_ExttAHD_Pos      8
#define EBI_EXTIME_ExttAHD_Msk      (0x7ul << EBI_EXTIME_ExttAHD_Pos)

#define EBI_EXTIME_ExttACC_Pos      3
#define EBI_EXTIME_ExttACC_Msk      (0x1Ful << EBI_EXTIME_ExttACC_Pos)


/******************************************************************************/
/*                         Peripheral memory map                              */
/******************************************************************************/
/* Peripheral and SRAM base address */
#define FLASH_BASE          ((     uint32_t)0x00000000)
#define SRAM_BASE           ((     uint32_t)0x20000000)
#define AHB_BASE            ((     uint32_t)0x50000000)
#define APB1_BASE           ((     uint32_t)0x40000000)
#define APB2_BASE           ((     uint32_t)0x40100000)

/* Peripheral memory map */
#define GPIO_BASE           (AHB_BASE        + 0x4000)

#define GPIOA_BASE          (GPIO_BASE               )
#define GPIOB_BASE          (GPIO_BASE       + 0x0040)
#define GPIOC_BASE          (GPIO_BASE       + 0x0080)
#define GPIOD_BASE          (GPIO_BASE       + 0x00C0)
#define GPIOE_BASE          (GPIO_BASE       + 0x0100)
#define GPIO_DBNCECON_BASE  (GPIO_BASE       + 0x0180)

#define UART0_BASE           (APB1_BASE      + 0x50000)
#define UART1_BASE           (APB2_BASE      + 0x50000)
#define UART2_BASE           (APB2_BASE      + 0x54000)


#define TIMER0_BASE          (APB1_BASE      + 0x10000)  
#define TIMER1_BASE          (APB1_BASE      + 0x10020)  
#define TIMER2_BASE          (APB2_BASE      + 0x10000)  
#define TIMER3_BASE          (APB2_BASE      + 0x10020)  

#define WDT_BASE             (APB1_BASE      + 0x4000)  

#define SPI0_BASE            (APB1_BASE      + 0x30000)
#define SPI1_BASE            (APB1_BASE      + 0x34000)
#define SPI2_BASE            (APB2_BASE      + 0x30000)
#define SPI3_BASE            (APB2_BASE      + 0x34000)

#define I2C0_BASE            (APB1_BASE      + 0x20000)
#define I2C1_BASE            (APB2_BASE      + 0x20000)

#define RTC_BASE             (APB1_BASE      + 0x08000)

#define ADC_BASE             (APB1_BASE      + 0xE0000)

#define ACMP_BASE            (APB1_BASE      + 0xD0000)   

#define SYSCLK_BASE          (AHB_BASE       + 0x00200)

#define GCR_BASE             (AHB_BASE       + 0x00000)

#define INT_BASE             (AHB_BASE       + 0x00300)

#define FMC_BASE             (AHB_BASE       + 0x0C000)

#define PS2_BASE             (APB2_BASE      + 0x00000)

#define CAN0_BASE            (APB2_BASE      + 0x80000)
#define CAN1_BASE            (APB2_BASE      + 0x84000)
#define C_CAN_BASE           (APB2_BASE      + 0x88000)

#define USBD_BASE            (APB1_BASE      + 0x60000)

#define PDMA0_BASE           (AHB_BASE       + 0x08000)
#define PDMA1_BASE           (AHB_BASE       + 0x08100)
#define PDMA2_BASE           (AHB_BASE       + 0x08200)
#define PDMA3_BASE           (AHB_BASE       + 0x08300)
#define PDMA4_BASE           (AHB_BASE       + 0x08400)
#define PDMA5_BASE           (AHB_BASE       + 0x08500)
#define PDMA6_BASE           (AHB_BASE       + 0x08600)
#define PDMA7_BASE           (AHB_BASE       + 0x08700)
#define PDMA8_BASE           (AHB_BASE       + 0x08800)
#define PDMA9_BASE           (AHB_BASE       + 0x08900)
#define PDMA10_BASE          (AHB_BASE       + 0x08A00)
#define PDMA11_BASE          (AHB_BASE       + 0x08B00)
#define PDMA_GCR_BASE        (AHB_BASE       + 0x08F00)

#define PWMA_BASE            (APB1_BASE      + 0x40000)
#define PWMB_BASE            (APB2_BASE      + 0x40000)

#define I2S_BASE             (APB2_BASE      + 0xA0000)

#define EBI_BASE             (AHB_BASE       + 0x10000)

/******************************************************************************/
/*                         Peripheral declaration                             */
/******************************************************************************/
#define GPIOA               ((GPIO_T *) GPIOA_BASE)
#define GPIOB               ((GPIO_T *) GPIOB_BASE)
#define GPIOC               ((GPIO_T *) GPIOC_BASE)
#define GPIOD               ((GPIO_T *) GPIOD_BASE)
#define GPIOE               ((GPIO_T *) GPIOE_BASE)
#define GPIO_DBNCECON       ((GPIO_DBNCECON_T *) GPIO_DBNCECON_BASE)
#define GPIO_BIT_ADDR_BASE  (GPIO_BASE + 0x200)

#define UART0               ((UART_T *) UART0_BASE)
#define UART1               ((UART_T *) UART1_BASE)
#define UART2               ((UART_T *) UART2_BASE)


#define TIMER0              ((TIMER_T *) TIMER0_BASE)
#define TIMER1              ((TIMER_T *) TIMER1_BASE)
#define TIMER2              ((TIMER_T *) TIMER2_BASE)
#define TIMER3              ((TIMER_T *) TIMER3_BASE)

#define WDT                 ((WDT_T *) WDT_BASE)

#define SPI0                ((SPI_T *) SPI0_BASE)
#define SPI1                ((SPI_T *) SPI1_BASE)
#define SPI2                ((SPI_T *) SPI2_BASE)
#define SPI3                ((SPI_T *) SPI3_BASE)

#define I2C0                ((I2C_T *) I2C0_BASE)
#define I2C1                ((I2C_T *) I2C1_BASE)

#define I2S                 ((I2S_T *) I2S_BASE)

#define RTC                 ((RTC_T *) RTC_BASE)

#define ADC                 ((ADC_T *) ADC_BASE)

#define ACMP                ((ACMP_T *) ACMP_BASE)

#define SYSCLK              ((SYSCLK_T *) SYSCLK_BASE)

#define SYS                 ((GCR_T *) GCR_BASE)

#define SYSINT              ((GCR_INT_T *) INT_BASE)

#define FMC                 ((FMC_T *) FMC_BASE)

#define PS2                 ((PS2_T *) PS2_BASE)

#define CAN                 ((CAN_T *) CAN0_BASE)
#define USBD                ((USBD_T *) USBD_BASE)

#define PDMA0               ((PDMA_T *) PDMA0_BASE)
#define PDMA1               ((PDMA_T *) PDMA1_BASE)
#define PDMA2               ((PDMA_T *) PDMA2_BASE)
#define PDMA3               ((PDMA_T *) PDMA3_BASE)
#define PDMA4               ((PDMA_T *) PDMA4_BASE)
#define PDMA5               ((PDMA_T *) PDMA5_BASE)
#define PDMA6               ((PDMA_T *) PDMA6_BASE)
#define PDMA7               ((PDMA_T *) PDMA7_BASE)
#define PDMA8               ((PDMA_T *) PDMA8_BASE)
#define PDMA9               ((PDMA_T *) PDMA9_BASE)
#define PDMA_GCR            ((PDMA_GCR_T *) PDMA_GCR_BASE)

#define PWMA                ((PWM_T *) PWMA_BASE)
#define PWMB                ((PWM_T *) PWMB_BASE)

#define EBI                 ((EBI_T *) EBI_BASE)

#define UNLOCKREG(x)        *((__IO uint32_t *)(GCR_BASE + 0x100)) = 0x59;*((__IO uint32_t *)(GCR_BASE + 0x100)) = 0x16;*((__IO uint32_t *)(GCR_BASE + 0x100)) = 0x88
#define LOCKREG(x)          *((__IO uint32_t *)(GCR_BASE + 0x100)) = 0x00;     

#define REGCOPY(dest, src)  *((uint32_t *)&(dest)) = *((uint32_t *)&(src))
#define CLEAR(dest)         *((uint32_t *)&(dest)) = 0

//=============================================================================
typedef volatile unsigned char  vu8;
typedef volatile unsigned long  vu32;
typedef volatile unsigned short vu16;
#define M8(adr)  (*((vu8  *) (adr)))
#define M16(adr) (*((vu16 *) (adr)))
#define M32(adr) (*((vu32 *) (adr)))

#define outpw(port,value)   *((volatile unsigned int *)(port))=value
#define inpw(port)          (*((volatile unsigned int *)(port)))
#define outpb(port,value)   *((volatile unsigned char *)(port))=value
#define inpb(port)          (*((volatile unsigned char *)(port)))
#define outps(port,value)   *((volatile unsigned short *)(port))=value
#define inps(port)          (*((volatile unsigned short *)(port)))

#define outp32(port,value)  *((volatile unsigned int *)(port))=value
#define inp32(port)         (*((volatile unsigned int *)(port)))
#define outp8(port,value)   *((volatile unsigned char *)(port))=value
#define inp8(port)          (*((volatile unsigned char *)(port)))
#define outp16(port,value)  *((volatile unsigned short *)(port))=value
#define inp16(port)         (*((volatile unsigned short *)(port)))


#define E_SUCCESS   0
#ifndef NULL
#define NULL        0
#endif

#define TRUE        1
#define FALSE       0

#define ENABLE     1
#define DISABLE    0

/* Define one bit mask */
#define BIT0    0x00000001
#define BIT1    0x00000002
#define BIT2    0x00000004
#define BIT3    0x00000008
#define BIT4    0x00000010
#define BIT5    0x00000020
#define BIT6    0x00000040
#define BIT7    0x00000080
#define BIT8    0x00000100
#define BIT9    0x00000200
#define BIT10   0x00000400
#define BIT11   0x00000800
#define BIT12   0x00001000
#define BIT13   0x00002000
#define BIT14   0x00004000
#define BIT15   0x00008000
#define BIT16   0x00010000
#define BIT17   0x00020000
#define BIT18   0x00040000
#define BIT19   0x00080000
#define BIT20   0x00100000
#define BIT21   0x00200000
#define BIT22   0x00400000
#define BIT23   0x00800000
#define BIT24   0x01000000
#define BIT25   0x02000000
#define BIT26   0x04000000
#define BIT27   0x08000000
#define BIT28   0x10000000
#define BIT29   0x20000000
#define BIT30   0x40000000
#define BIT31   0x80000000

#endif