/*******************************************************************************
 * (c) Copyright 2009 Actel Corporation.  All rights reserved.
 * 
 *  SmartFusion A2FxxxM3 Cortex Microcontroller Software Interface - Peripheral
 *  Access Layer.
 *
 *  This file describes the interrupt assignment and peripheral registers for
 *  the SmartFusion A2FxxxM3 familly of devices. 
 *
 * SVN $Revision: 4308 $
 * SVN $Date: 2012-04-26 16:12:20 +0100 (Thu, 26 Apr 2012) $
 */
#ifndef __A2FXXXM3_H__
#define __A2FXXXM3_H__

#ifdef __cplusplus
extern "C" {
#endif 

/*
 * ==========================================================================
 * ---------- Interrupt Number Definition -----------------------------------
 * ==========================================================================
 */

typedef enum IRQn
{
/******  Cortex-M3 Processor Exceptions Numbers *********************************************************/
  NonMaskableInt_IRQn             = -14,      /*!< 2 Non Maskable Interrupt                             */
  HardFault_IRQn                  = -13,      /*!< 2 Hard Fault Interrupt                               */
  MemoryManagement_IRQn           = -12,      /*!< 4 Cortex-M3 Memory Management Interrupt              */
  BusFault_IRQn                   = -11,      /*!< 5 Cortex-M3 Bus Fault Interrupt                      */
  UsageFault_IRQn                 = -10,      /*!< 6 Cortex-M3 Usage Fault Interrupt                    */
  SVCall_IRQn                     = -5,       /*!< 11 Cortex-M3 SV Call Interrupt                       */
  DebugMonitor_IRQn               = -4,       /*!< 12 Cortex-M3 Debug Monitor Interrupt                 */
  PendSV_IRQn                     = -2,       /*!< 14 Cortex-M3 Pend SV Interrupt                       */
  SysTick_IRQn                    = -1,       /*!< 15 Cortex-M3 System Tick Interrupt                   */

/******  SmartFusion specific Interrupt Numbers *********************************************************/
  WdogWakeup_IRQn                 = 0,        /*!< WatchDog wakeup interrupt                            */
  BrownOut_1_5V_IRQn              = 1,        /*!< 1.5V supply dropped below 1.3V                       */
  BrownOut_3_3V_IRQn              = 2,        /*!< 3.3V Supply dropped below 2.5V                       */
  RTC_Match_IRQn                  = 3,        /*!< RTC match interrupt                                  */
  RTCIF_Pub_IRQn                  = 4,        /*!< RTC interface push button interrupt                  */
  EthernetMAC_IRQn                = 5,        /*!< Ethernet MAC interrupt                               */
  IAP_IRQn                        = 6,        /*!< In Application Programming (IAP) interrupt           */
  ENVM0_IRQn                      = 7,        /*!< eNVM0 operation completion interrupt                 */
  ENVM1_IRQn                      = 8,        /*!< eNVM1 operation completion interrupt                 */
  DMA_IRQn                        = 9,        /*!< Peripheral DMA interrupt                             */
  UART0_IRQn                      = 10,       /*!< UART0 interrupt                                      */
  UART1_IRQn                      = 11,       /*!< UART1 interrupt                                      */
  SPI0_IRQn                       = 12,       /*!< SPI0 interrupt                                       */
  SPI1_IRQn                       = 13,       /*!< SP1 interrupt                                        */
  I2C0_IRQn                       = 14,       /*!< I2C0 interrupt                                       */
  I2C0_SMBAlert_IRQn              = 15,       /*!< I2C0 SMBus Alert interrupt                           */
  I2C0_SMBus_IRQn                 = 16,       /*!< I2C0 SMBus Suspend interrupt                         */
  I2C1_IRQn                       = 17,       /*!< I2C1 interrupt                                       */
  I2C1_SMBAlert_IRQn              = 18,       /*!< I2C1 SMBus Alert interrupt                           */
  I2C1_SMBus_IRQn                 = 19,       /*!< I2C1 SMBus Suspend interrupt                         */
  Timer1_IRQn                     = 20,       /*!< Timer1 interrupt                                     */
  Timer2_IRQn                     = 21,       /*!< Timer2 interrupt                                     */
  PLL_Lock_IRQn                   = 22,       /*!< PLL lock interrupt                                   */
  PLL_LockLost_IRQn               = 23,       /*!< PLL loss of lock interrupt                           */
  CommError_IRQn                  = 24,       /*!< Communications Matrix error interrupt                */
  Fabric_IRQn                     = 31,       /*!< FPGA fabric interrupt                                */
  GPIO0_IRQn                      = 32,       /*!< GPIO 0 interrupt                                     */
  GPIO1_IRQn                      = 33,       /*!< GPIO 1 interrupt                                     */
  GPIO2_IRQn                      = 34,       /*!< GPIO 2 interrupt                                     */
  GPIO3_IRQn                      = 35,       /*!< GPIO 3 interrupt                                     */
  GPIO4_IRQn                      = 36,       /*!< GPIO 4 interrupt                                     */
  GPIO5_IRQn                      = 37,       /*!< GPIO 5 interrupt                                     */
  GPIO6_IRQn                      = 38,       /*!< GPIO 6 interrupt                                     */
  GPIO7_IRQn                      = 39,       /*!< GPIO 7 interrupt                                     */
  GPIO8_IRQn                      = 40,       /*!< GPIO 8 interrupt                                     */
  GPIO9_IRQn                      = 41,       /*!< GPIO 9 interrupt                                     */
  GPIO10_IRQn                     = 42,       /*!< GPIO 10 interrupt                                    */
  GPIO11_IRQn                     = 43,       /*!< GPIO 11 interrupt                                    */
  GPIO12_IRQn                     = 44,       /*!< GPIO 12 interrupt                                    */
  GPIO13_IRQn                     = 45,       /*!< GPIO 13 interrupt                                    */
  GPIO14_IRQn                     = 46,       /*!< GPIO 14 interrupt                                    */
  GPIO15_IRQn                     = 47,       /*!< GPIO 15 interrupt                                    */
  GPIO16_IRQn                     = 48,       /*!< GPIO 16 interrupt                                    */
  GPIO17_IRQn                     = 49,       /*!< GPIO 17 interrupt                                    */
  GPIO18_IRQn                     = 50,       /*!< GPIO 18 interrupt                                    */
  GPIO19_IRQn                     = 51,       /*!< GPIO 19 interrupt                                    */
  GPIO20_IRQn                     = 52,       /*!< GPIO 20 interrupt                                    */
  GPIO21_IRQn                     = 53,       /*!< GPIO 21 interrupt                                    */
  GPIO22_IRQn                     = 54,       /*!< GPIO 22 interrupt                                    */
  GPIO23_IRQn                     = 55,       /*!< GPIO 23 interrupt                                    */
  GPIO24_IRQn                     = 56,       /*!< GPIO 24 interrupt                                    */
  GPIO25_IRQn                     = 57,       /*!< GPIO 25 interrupt                                    */
  GPIO26_IRQn                     = 58,       /*!< GPIO 26 interrupt                                    */
  GPIO27_IRQn                     = 59,       /*!< GPIO 27 interrupt                                    */
  GPIO28_IRQn                     = 60,       /*!< GPIO 28 interrupt                                    */
  GPIO29_IRQn                     = 61,       /*!< GPIO 29 interrupt                                    */
  GPIO30_IRQn                     = 62,       /*!< GPIO 30 interrupt                                    */
  GPIO31_IRQn                     = 63,       /*!< GPIO 31 interrupt                                    */
  ACE_PC0_Flag0_IRQn              = 64,       /*!< ACE SSE program counter 0 flag 0 interrupt           */
  ACE_PC0_Flag1_IRQn              = 65,       /*!< ACE SSE program counter 0 flag 1 interrupt           */
  ACE_PC0_Flag2_IRQn              = 66,       /*!< ACE SSE program counter 0 flag 2 interrupt           */
  ACE_PC0_Flag3_IRQn              = 67,       /*!< ACE SSE program counter 0 flag 3 interrupt           */
  ACE_PC1_Flag0_IRQn              = 68,       /*!< ACE SSE program counter 1 flag 0 interrupt           */
  ACE_PC1_Flag1_IRQn              = 69,       /*!< ACE SSE program counter 1 flag 1 interrupt           */
  ACE_PC1_Flag2_IRQn              = 70,       /*!< ACE SSE program counter 1 flag 2 interrupt           */
  ACE_PC1_Flag3_IRQn              = 71,       /*!< ACE SSE program counter 1 flag 3 interrupt           */
  ACE_PC2_Flag0_IRQn              = 72,       /*!< ACE SSE program counter 2 flag 0 interrupt           */
  ACE_PC2_Flag1_IRQn              = 73,       /*!< ACE SSE program counter 2 flag 1 interrupt           */
  ACE_PC2_Flag2_IRQn              = 74,       /*!< ACE SSE program counter 2 flag 2 interrupt           */
  ACE_PC2_Flag3_IRQn              = 75,       /*!< ACE SSE program counter 2 flag 3 interrupt           */
  ACE_ADC0_DataValid_IRQn         = 76,       /*!< ACE ADC0 data valid interrupt                        */
  ACE_ADC1_DataValid_IRQn         = 77,       /*!< ACE ADC1 data valid interrupt		     			*/
  ACE_ADC2_DataValid_IRQn         = 78,       /*!< ACE ADC2 data valid interrupt		     			*/
  ACE_ADC0_CalDone_IRQn           = 79,       /*!< ACE ADC0 calibration done interrupt                  */
  ACE_ADC1_CalDone_IRQn           = 80,       /*!< ACE ADC1 calibration done interrupt                  */
  ACE_ADC2_CalDone_IRQn           = 81,       /*!< ACE ADC2 calibration done interrupt                  */
  ACE_ADC0_CalStart_IRQn          = 82,       /*!< ACE ADC0 calibration start interrupt                 */
  ACE_ADC1_CalStart_IRQn          = 83,       /*!< ACE ADC1 calibration start interrupt                 */
  ACE_ADC2_CalStart_IRQn          = 84,       /*!< ACE ADC2 calibration start interrupt                 */
  ACE_Comp0_Fall_IRQn             = 85,       /*!< ACE comparator 0 falling under reference interrupt   */
  ACE_Comp1_Fall_IRQn             = 86,       /*!< ACE comparator 1 falling under reference interrupt   */
  ACE_Comp2_Fall_IRQn             = 87,       /*!< ACE comparator 2 falling under reference interrupt   */
  ACE_Comp3_Fall_IRQn             = 88,       /*!< ACE comparator 3 falling under reference interrupt   */
  ACE_Comp4_Fall_IRQn             = 89,       /*!< ACE comparator 4 falling under reference interrupt   */
  ACE_Comp5_Fall_IRQn             = 90,       /*!< ACE comparator 5 falling under reference interrupt   */
  ACE_Comp6_Fall_IRQn             = 91,       /*!< ACE comparator 6 falling under reference interrupt   */
  ACE_Comp7_Fall_IRQn             = 92,       /*!< ACE comparator 7 falling under reference interrupt   */
  ACE_Comp8_Fall_IRQn             = 93,       /*!< ACE comparator 8 falling under reference interrupt   */
  ACE_Comp9_Fall_IRQn             = 94,       /*!< ACE comparator 9 falling under reference interrupt   */
  ACE_Comp10_Fall_IRQn            = 95,       /*!< ACE comparator 10 falling under reference interrupt  */
  ACE_Comp11_Fall_IRQn            = 96,       /*!< ACE comparator 11 falling under reference interrupt  */
  ACE_Comp0_Rise_IRQn             = 97,       /*!< ACE comparator 0 rising over reference interrupt     */
  ACE_Comp1_Rise_IRQn             = 98,       /*!< ACE comparator 1 rising over reference interrupt     */
  ACE_Comp2_Rise_IRQn             = 99,       /*!< ACE comparator 2 rising over reference interrupt     */
  ACE_Comp3_Rise_IRQn             = 100,      /*!< ACE comparator 3 rising over reference interrupt     */
  ACE_Comp4_Rise_IRQn             = 101,      /*!< ACE comparator 4 rising over reference interrupt     */
  ACE_Comp5_Rise_IRQn             = 102,      /*!< ACE comparator 5 rising over reference interrupt     */
  ACE_Comp6_Rise_IRQn             = 103,      /*!< ACE comparator 6 rising over reference interrupt     */
  ACE_Comp7_Rise_IRQn             = 104,      /*!< ACE comparator 7 rising over reference interrupt     */
  ACE_Comp8_Rise_IRQn             = 105,      /*!< ACE comparator 8 rising over reference interrupt     */
  ACE_Comp9_Rise_IRQn             = 106,      /*!< ACE comparator 9 rising over reference interrupt     */
  ACE_Comp10_Rise_IRQn            = 107,      /*!< ACE comparator 10 rising over reference interrupt    */
  ACE_Comp11_Rise_IRQn            = 108,      /*!< ACE comparator 11 rising over reference interrupt    */
  ACE_ADC0_FifoFull_IRQn          = 109,      /*!< ACE ADC0 FIFO full interrupt                         */
  ACE_ADC0_FifoAFull_IRQn         = 110,      /*!< ACE ADC0 FIFO almost full interrupt                  */
  ACE_ADC0_FifoEmpty_IRQn         = 111,      /*!< ACE ADC0 FIFO empty interrupt                        */
  ACE_ADC1_FifoFull_IRQn          = 112,      /*!< ACE ADC1 FIFO full interrupt                         */
  ACE_ADC1_FifoAFull_IRQn         = 113,      /*!< ACE ADC1 FIFO almost full interrupt                  */
  ACE_ADC1_FifoEmpty_IRQn         = 114,      /*!< ACE ADC1 FIFO empty interrupt                        */
  ACE_ADC2_FifoFull_IRQn          = 115,      /*!< ACE ADC2 FIFO full interrupt                         */
  ACE_ADC2_FifoAFull_IRQn         = 116,      /*!< ACE ADC2 FIFO almost full interrupt                  */
  ACE_ADC2_FifoEmpty_IRQn         = 117,      /*!< ACE ADC2 FIFO empty interrupt                        */
  ACE_PPE_Flag0_IRQn              = 118,      /*!< ACE post processing engine flag 0 interrupt          */
  ACE_PPE_Flag1_IRQn              = 119,      /*!< ACE post processing engine flag 1 interrupt          */
  ACE_PPE_Flag2_IRQn              = 120,      /*!< ACE post processing engine flag 2 interrupt          */
  ACE_PPE_Flag3_IRQn              = 121,      /*!< ACE post processing engine flag 3 interrupt          */
  ACE_PPE_Flag4_IRQn              = 122,      /*!< ACE post processing engine flag 4 interrupt          */
  ACE_PPE_Flag5_IRQn              = 123,      /*!< ACE post processing engine flag 5 interrupt          */
  ACE_PPE_Flag6_IRQn              = 124,      /*!< ACE post processing engine flag 6 interrupt          */
  ACE_PPE_Flag7_IRQn              = 125,      /*!< ACE post processing engine flag 7 interrupt          */
  ACE_PPE_Flag8_IRQn              = 126,      /*!< ACE post processing engine flag 8 interrupt          */
  ACE_PPE_Flag9_IRQn              = 127,      /*!< ACE post processing engine flag 9 interrupt          */
  ACE_PPE_Flag10_IRQn             = 128,      /*!< ACE post processing engine flag 10 interrupt         */
  ACE_PPE_Flag11_IRQn             = 129,      /*!< ACE post processing engine flag 11 interrupt         */
  ACE_PPE_Flag12_IRQn             = 130,      /*!< ACE post processing engine flag 12 interrupt         */
  ACE_PPE_Flag13_IRQn             = 131,      /*!< ACE post processing engine flag 13 interrupt         */
  ACE_PPE_Flag14_IRQn             = 132,      /*!< ACE post processing engine flag 14 interrupt         */
  ACE_PPE_Flag15_IRQn             = 133,      /*!< ACE post processing engine flag 15 interrupt         */
  ACE_PPE_Flag16_IRQn             = 134,      /*!< ACE post processing engine flag 16 interrupt         */
  ACE_PPE_Flag17_IRQn             = 135,      /*!< ACE post processing engine flag 17 interrupt         */
  ACE_PPE_Flag18_IRQn             = 136,      /*!< ACE post processing engine flag 18 interrupt         */
  ACE_PPE_Flag19_IRQn             = 137,      /*!< ACE post processing engine flag 19 interrupt         */
  ACE_PPE_Flag20_IRQn             = 138,      /*!< ACE post processing engine flag 20 interrupt         */
  ACE_PPE_Flag21_IRQn             = 139,      /*!< ACE post processing engine flag 21 interrupt         */
  ACE_PPE_Flag22_IRQn             = 140,      /*!< ACE post processing engine flag 22 interrupt         */
  ACE_PPE_Flag23_IRQn             = 141,      /*!< ACE post processing engine flag 23 interrupt         */
  ACE_PPE_Flag24_IRQn             = 142,      /*!< ACE post processing engine flag 24 interrupt         */
  ACE_PPE_Flag25_IRQn             = 143,      /*!< ACE post processing engine flag 25 interrupt         */
  ACE_PPE_Flag26_IRQn             = 144,      /*!< ACE post processing engine flag 26 interrupt         */
  ACE_PPE_Flag27_IRQn             = 145,      /*!< ACE post processing engine flag 27 interrupt         */
  ACE_PPE_Flag28_IRQn             = 146,      /*!< ACE post processing engine flag 28 interrupt         */
  ACE_PPE_Flag29_IRQn             = 147,      /*!< ACE post processing engine flag 29 interrupt         */
  ACE_PPE_Flag30_IRQn             = 148,      /*!< ACE post processing engine flag 30 interrupt         */
  ACE_PPE_Flag31_IRQn             = 149       /*!< ACE post processing engine flag 31 interrupt         */
} IRQn_Type;


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

/* Configuration of the Cortex-M3 Processor and Core Peripherals */
#define __MPU_PRESENT             1           /*!< SmartFusion includes a MPU                       */
#define __NVIC_PRIO_BITS          5           /*!< SmartFusion uses 5 Bits for the Priority Levels  */
#define __Vendor_SysTickConfig    0           /*!< Set to 1 if different SysTick Config is used     */


#include "core_cm3.h"                         /* Cortex-M3 processor and core peripherals           */
#include "system_a2fxxxm3.h"                  /* SmartFusion System                                 */

/******************************************************************************/
/*                Device Specific Peripheral registers structures             */
/******************************************************************************/
#if defined   ( __CC_ARM   )
  /* Enable anonymous unions when building using Keil-MDK */
  #pragma anon_unions
#endif
/*----------------------------------------------------------------------------*/
/*----------------------------------- UART -----------------------------------*/
/*----------------------------------------------------------------------------*/
typedef struct
{
    union
    {
        __I  uint8_t    RBR;
        __O  uint8_t    THR;
        __IO uint8_t    DLR;
             uint32_t   RESERVED0;
    };

    union
    {
        __IO uint8_t  DMR;
        __IO uint8_t  IER;
             uint32_t RESERVED1;
    };

    union
    {
        __IO uint8_t  IIR;
        __IO uint8_t  FCR;
             uint32_t RESERVED2;
    };    

    __IO uint8_t  LCR;
         uint8_t  RESERVED3;
         uint16_t RESERVED4;
    __IO uint8_t  MCR;
         uint8_t  RESERVED5;
         uint16_t RESERVED6;
    __I  uint8_t  LSR;
         uint8_t  RESERVED7;
         uint16_t RESERVED8;
    __I  uint8_t  MSR;
         uint8_t  RESERVED9;
         uint16_t RESERVED10;
    __IO uint8_t  SR;
         uint8_t  RESERVED11;
         uint16_t RESERVED12;
} UART_TypeDef;

/*------------------------------------------------------------------------------
 *
 */
typedef struct
{
         uint32_t RESERVED0[32];
         
    __IO uint32_t IER_ERBFI;
    __IO uint32_t IER_ETBEI;
    __IO uint32_t IER_ELSI;
    __IO uint32_t IER_EDSSI;
    
         uint32_t RESERVED1[28];
    
    __IO uint32_t FCR_ENABLE;
    __IO uint32_t FCR_CLEAR_RX_FIFO;
    __IO uint32_t FCR_CLEAR_TX_FIFO;
    __IO uint32_t FCR_RXRDY_TXRDYN_EN;
    __IO uint32_t FCR_RESERVED0;
    __IO uint32_t FCR_RESERVED1;
    __IO uint32_t FCR_RX_TRIG0;
    __IO uint32_t FCR_RX_TRIG1;
      
         uint32_t RESERVED2[24];
    
    __IO uint32_t LCR_WLS0;
    __IO uint32_t LCR_WLS1;
    __IO uint32_t LCR_STB;
    __IO uint32_t LCR_PEN;
    __IO uint32_t LCR_EPS;
    __IO uint32_t LCR_SP;
    __IO uint32_t LCR_SB;
    __IO uint32_t LCR_DLAB;
      
         uint32_t RESERVED3[24];
    
    __IO uint32_t MCR_DTR;
    __IO uint32_t MCR_RTS;
    __IO uint32_t MCR_OUT1;
    __IO uint32_t MCR_OUT2;
    __IO uint32_t MCR_LOOP;
      
         uint32_t RESERVED4[27];
        
    __I  uint32_t LSR_DR;
    __I  uint32_t LSR_OE;
    __I  uint32_t LSR_PE;
    __I  uint32_t LSR_FE;
    __I  uint32_t LSR_BI;
    __I  uint32_t LSR_THRE;
    __I  uint32_t LSR_TEMT;
    __I  uint32_t LSR_FIER;
            
         uint32_t RESERVED5[24];
         
    __I  uint32_t MSR_DCTS;
    __I  uint32_t MSR_DDSR;
    __I  uint32_t MSR_TERI;
    __I  uint32_t MSR_DDCD;
    __I  uint32_t MSR_CTS;
    __I  uint32_t MSR_DSR;
    __I  uint32_t MSR_RI;
    __I  uint32_t MSR_DCD;
  
} UART_BitBand_TypeDef;

/*----------------------------------------------------------------------------*/
/*----------------------------------- I2C ------------------------------------*/
/*----------------------------------------------------------------------------*/
typedef struct
{
    __IO uint8_t  CTRL;
         uint8_t  RESERVED0;
         uint16_t RESERVED1;
         uint8_t  STATUS;
         uint8_t  RESERVED2;
         uint16_t RESERVED3;
    __IO uint8_t  DATA;
         uint8_t  RESERVED4;
         uint16_t RESERVED5;
    __IO uint8_t  ADDR;
         uint8_t  RESERVED6;
         uint16_t RESERVED7;
    __IO uint8_t  SMBUS;
         uint8_t  RESERVED8;
         uint16_t RESERVED9;
    __IO uint8_t  FREQ;
         uint8_t  RESERVED10;
         uint16_t RESERVED11;
    __IO uint8_t  GLITCHREG;
         uint8_t  RESERVED12;
         uint16_t RESERVED13;
} I2C_TypeDef;

/*------------------------------------------------------------------------------
 *
 */
typedef struct
{
    uint32_t CTRL_CR0;
    uint32_t CTRL_CR1;
    uint32_t CTRL_AA;
    uint32_t CTRL_SI;
    uint32_t CTRL_STO;
    uint32_t CTRL_STA;
    uint32_t CTRL_ENS1;
    uint32_t CTRL_CR2;
    uint32_t RESERVED0[56];
    uint32_t DATA_DIR;
    uint32_t RESERVED1[31];
    uint32_t ADDR_GC;
} I2C_BitBand_TypeDef;

/*----------------------------------------------------------------------------*/
/*----------------------------------- SPI ------------------------------------*/
/*----------------------------------------------------------------------------*/
typedef struct
{
    __IO uint32_t CONTROL;
    __IO uint32_t TXRXDF_SIZE;
    __I  uint32_t STATUS;
    __O  uint32_t INT_CLEAR;
    __I  uint32_t RX_DATA;
    __O  uint32_t TX_DATA;
    __IO uint32_t CLK_GEN;
    __IO uint32_t SLAVE_SELECT;
    __I  uint32_t MIS;
    __I  uint32_t RIS;
} SPI_TypeDef;

typedef struct
{
    __IO uint32_t CTRL_ENABLE;
    __IO uint32_t CTRL_MASTER;
    __IO uint32_t CTRL_MODE[2];
    __IO uint32_t CTRL_RX_INT_EN;
    __IO uint32_t CTRL_TX_INT_EN;
    __IO uint32_t CTRL_RX_OVERFLOW_INT_EN;
    __IO uint32_t CTRL_TX_UNDERRUN_INT_EN;
    __IO uint32_t CTRL_TXRXDFCOUNT[16];
    __IO uint32_t CTRL_SPO;
    __IO uint32_t CTRL_SPH;
    __IO uint32_t CTRL_RESERVED[6];
    
    __IO uint32_t TXRXDF_SIZE[32];
    
    __I  uint32_t STATUS_TX_DONE;
    __I  uint32_t STATUS_RX_RDY;
    __I  uint32_t STATUS_RX_CH_OV;
    __I  uint32_t STATUS_TX_CH_UV;
    __I  uint32_t STATUS_RX_FIFO_FULL;
    __I  uint32_t STATUS_RX_FIFO_FULL_NEXT;
    __I  uint32_t STATUS_RX_FIFO_EMPTY;
    __I  uint32_t STATUS_RX_FIFO_EMPTY_NEXT;
    __I  uint32_t STATUS_TX_FIFO_FULL;
    __I  uint32_t STATUS_TX_FIFO_FULL_NEXT;
    __I  uint32_t STATUS_TX_FIFO_EMPTY;
    __I  uint32_t STATUS_TX_FIFO_EMPTY_NEXT;
    __I  uint32_t STATUS_RESERVED[20];
    
    __O  uint32_t INT_CLEAR_TX_DONE;
    __O  uint32_t INT_CLEAR_RX_RDY;
    __O  uint32_t INT_CLEAR_RX_OVER;
    __O  uint32_t INT_CLEAR_TX_UNDER;
    __O  uint32_t INT_CLEAR[28];
    
    __I  uint32_t RX_DATA[32];
    __O  uint32_t TX_DATA[32];
    __IO uint32_t CLK_GEN[32];
    __IO uint32_t SLAVE_SELECT[32];
    __I  uint32_t MIS_TX_DONE;
    __I  uint32_t MIS_RX_RDY;
    __I  uint32_t MIS_RX_OVER;
    __I  uint32_t MIS_TX_UNDER;
    __I  uint32_t MIS[28];
    __I  uint32_t RIS[32];
} SPI_BitBand_TypeDef;

/*----------------------------------------------------------------------------*/
/*----------------------------------- GPIO -----------------------------------*/
/*----------------------------------------------------------------------------*/
typedef struct
{
    __IO uint32_t GPIO_0_CFG;
    __IO uint32_t GPIO_1_CFG;
    __IO uint32_t GPIO_2_CFG;
    __IO uint32_t GPIO_3_CFG;
    __IO uint32_t GPIO_4_CFG;
    __IO uint32_t GPIO_5_CFG;
    __IO uint32_t GPIO_6_CFG;
    __IO uint32_t GPIO_7_CFG;
    __IO uint32_t GPIO_8_CFG;
    __IO uint32_t GPIO_9_CFG;
    __IO uint32_t GPIO_10_CFG;
    __IO uint32_t GPIO_11_CFG;
    __IO uint32_t GPIO_12_CFG;
    __IO uint32_t GPIO_13_CFG;
    __IO uint32_t GPIO_14_CFG;
    __IO uint32_t GPIO_15_CFG;
    __IO uint32_t GPIO_16_CFG;
    __IO uint32_t GPIO_17_CFG;
    __IO uint32_t GPIO_18_CFG;
    __IO uint32_t GPIO_19_CFG;
    __IO uint32_t GPIO_20_CFG;
    __IO uint32_t GPIO_21_CFG;
    __IO uint32_t GPIO_22_CFG;
    __IO uint32_t GPIO_23_CFG;
    __IO uint32_t GPIO_24_CFG;
    __IO uint32_t GPIO_25_CFG;
    __IO uint32_t GPIO_26_CFG;
    __IO uint32_t GPIO_27_CFG;
    __IO uint32_t GPIO_28_CFG;
    __IO uint32_t GPIO_29_CFG;
    __IO uint32_t GPIO_30_CFG;
    __IO uint32_t GPIO_31_CFG;
    __IO uint32_t GPIO_IRQ;
    __I  uint32_t GPIO_IN;
    __IO uint32_t GPIO_OUT;
} GPIO_TypeDef;

typedef struct
{
    __IO uint32_t GPIO_0_CFG[32];
    __IO uint32_t GPIO_1_CFG[32];
    __IO uint32_t GPIO_2_CFG[32];
    __IO uint32_t GPIO_3_CFG[32];
    __IO uint32_t GPIO_4_CFG[32];
    __IO uint32_t GPIO_5_CFG[32];
    __IO uint32_t GPIO_6_CFG[32];
    __IO uint32_t GPIO_7_CFG[32];
    __IO uint32_t GPIO_8_CFG[32];
    __IO uint32_t GPIO_9_CFG[32];
    __IO uint32_t GPIO_10_CFG[32];
    __IO uint32_t GPIO_11_CFG[32];
    __IO uint32_t GPIO_12_CFG[32];
    __IO uint32_t GPIO_13_CFG[32];
    __IO uint32_t GPIO_14_CFG[32];
    __IO uint32_t GPIO_15_CFG[32];
    __IO uint32_t GPIO_16_CFG[32];
    __IO uint32_t GPIO_17_CFG[32];
    __IO uint32_t GPIO_18_CFG[32];
    __IO uint32_t GPIO_19_CFG[32];
    __IO uint32_t GPIO_20_CFG[32];
    __IO uint32_t GPIO_21_CFG[32];
    __IO uint32_t GPIO_22_CFG[32];
    __IO uint32_t GPIO_23_CFG[32];
    __IO uint32_t GPIO_24_CFG[32];
    __IO uint32_t GPIO_25_CFG[32];
    __IO uint32_t GPIO_26_CFG[32];
    __IO uint32_t GPIO_27_CFG[32];
    __IO uint32_t GPIO_28_CFG[32];
    __IO uint32_t GPIO_29_CFG[32];
    __IO uint32_t GPIO_30_CFG[32];
    __IO uint32_t GPIO_31_CFG[32];
    __IO uint32_t GPIO_IRQ[32];
    __I  uint32_t GPIO_IN[32];
    __IO uint32_t GPIO_OUT[32];
} GPIO_BitBand_TypeDef;


/*----------------------------------------------------------------------------*/
/*----------------------------------- RTC ------------------------------------*/
/*----------------------------------------------------------------------------*/
typedef struct
{
    __IO uint32_t COUNTER0_REG;
    __IO uint32_t COUNTER1_REG;
    __IO uint32_t COUNTER2_REG;
    __IO uint32_t COUNTER3_REG;
    __IO uint32_t COUNTER4_REG;

    __IO uint32_t RESERVED0[3];
    
    __IO uint32_t MATCHREG0_REG;
    __IO uint32_t MATCHREG1_REG;
    __IO uint32_t MATCHREG2_REG;
    __IO uint32_t MATCHREG3_REG;
    __IO uint32_t MATCHREG4_REG;

    __IO uint32_t RESERVED1[3];
    
    __IO uint32_t MATCHBITS0_REG;
    __IO uint32_t MATCHBITS1_REG;
    __IO uint32_t MATCHBITS2_REG;
    __IO uint32_t MATCHBITS3_REG;
    __IO uint32_t MATCHBITS4_REG;

    __IO uint32_t RESERVED2[3];
    
    __IO uint32_t CTRL_STAT_REG;
} RTC_TypeDef;

/*----------------------------------------------------------------------------*/
/*---------------------------------- Timer -----------------------------------*/
/*----------------------------------------------------------------------------*/
typedef struct
{
    __I  uint32_t TIM1_VAL;
    __IO uint32_t TIM1_LOADVAL;
    __IO uint32_t TIM1_BGLOADVAL;
    __IO uint32_t TIM1_CTRL;
    __IO uint32_t TIM1_RIS;
    __I  uint32_t TIM1_MIS;
	
    __I  uint32_t TIM2_VAL;
    __IO uint32_t TIM2_LOADVAL;
    __IO uint32_t TIM2_BGLOADVAL;
    __IO uint32_t TIM2_CTRL;
    __IO uint32_t TIM2_RIS;
    __I  uint32_t TIM2_MIS;
	
    __I  uint32_t TIM64_VAL_U;
    __I  uint32_t TIM64_VAL_L;
    __IO uint32_t TIM64_LOADVAL_U;
    __IO uint32_t TIM64_LOADVAL_L;
    __IO uint32_t TIM64_BGLOADVAL_U;
    __IO uint32_t TIM64_BGLOADVAL_L;
    __IO uint32_t TIM64_CTRL;
    __IO uint32_t TIM64_RIS;
    __I  uint32_t TIM64_MIS;
    __IO uint32_t TIM64_MODE;
} TIMER_TypeDef;

/*------------------------------------------------------------------------------
 * Timer bit band
 */
typedef struct
{
    __I  uint32_t TIM1_VALUE_BIT[32];
    __IO uint32_t TIM1_LOADVAL[32];
    __IO uint32_t TIM1_BGLOADVAL[32];
    
    __IO uint32_t TIM1ENABLE;
    __IO uint32_t TIM1MODE;
    __IO uint32_t TIM1INTEN;
    __IO uint32_t TIM1_CTRL_RESERVED[29];
    __IO uint32_t TIM1_RIS[32];
    __I  uint32_t TIM1_MIS[32];
	
    __I  uint32_t TIM2_VALUE[32];
    __IO uint32_t TIM2_LOADVAL[32];
    __IO uint32_t TIM2_BGLOADVAL[32];
    
    __IO uint32_t TIM2ENABLE;
    __IO uint32_t TIM2MODE;
    __IO uint32_t TIM2INTEN;
    __IO uint32_t TIM2_CTRL[29];
    __IO uint32_t TIM2_RIS[32];
    __I  uint32_t TIM2_MIS[32];
	
    __I  uint32_t TIM64VALUEU[32];
    __I  uint32_t TIM64VALUEL[32];
    __IO uint32_t TIM64LOADVALUEU[32];
    __IO uint32_t TIM64LOADVALUEL[32];
    __IO uint32_t TIM64BGLOADVALUEU[32];
    __IO uint32_t TIM64BGLOADVALUEL[32];
    __IO uint32_t TIM64ENABLE;
    __IO uint32_t TIM64MODE;
    __IO uint32_t TIM64INTEN;
    __IO uint32_t TIM64_CTRL[29];
    __IO uint32_t TIM64_RIS[32];
    __I  uint32_t TIM64_MIS[32];
    __IO uint32_t TIM64_MODE[32];
} TIMER_BitBand_TypeDef;

/*----------------------------------------------------------------------------*/
/*--------------------------------- Watchdog ---------------------------------*/
/*----------------------------------------------------------------------------*/
typedef struct
{
    __I  uint32_t WDOGVALUE;
    __IO uint32_t WDOGLOAD;
    __IO uint32_t WDOGMVRP;
    __O  uint32_t WDOGREFRESH;
    __IO uint32_t WDOGENABLE;
    __IO uint32_t WDOGCONTROL;
    __I  uint32_t WDOGSTATUS;
    __IO uint32_t WDOGRIS;
    __I  uint32_t WDOGMIS;
} WATCHDOG_TypeDef;

/*----------------------------------------------------------------------------*/
/*----------------------------- Real Time Clock ------------------------------*/
/*----------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------*/
/*----------------------------- Peripherals DMA ------------------------------*/
/*----------------------------------------------------------------------------*/
typedef struct
{
    __IO uint32_t CRTL;
    __IO uint32_t STATUS;
    __IO uint32_t BUFFER_A_SRC_ADDR;
    __IO uint32_t BUFFER_A_DEST_ADDR;
    __IO uint32_t BUFFER_A_TRANSFER_COUNT;
    __IO uint32_t BUFFER_B_SRC_ADDR;
    __IO uint32_t BUFFER_B_DEST_ADDR;
    __IO uint32_t BUFFER_B_TRANSFER_COUNT;
} PDMA_Channel_TypeDef;

typedef struct
{
    __IO uint32_t RATIO_HIGH_LOW;
    __IO uint32_t BUFFER_STATUS;
	     uint32_t RESERVED[6];
    PDMA_Channel_TypeDef CHANNEL[8];
} PDMA_TypeDef;

/*----------------------------------------------------------------------------*/
/*------------------------------ Ethernet MAC --------------------------------*/
/*----------------------------------------------------------------------------*/
typedef struct
{
    __IO uint32_t CSR0;
         uint32_t RESERVED0;
    __IO uint32_t CSR1;
         uint32_t RESERVED1;
    __IO uint32_t CSR2;
         uint32_t RESERVED2;
    __IO uint32_t CSR3;
         uint32_t RESERVED3;
    __IO uint32_t CSR4;
         uint32_t RESERVED4;
    __IO uint32_t CSR5;
         uint32_t RESERVED5;
    __IO uint32_t CSR6;
         uint32_t RESERVED6;
    __IO uint32_t CSR7;
         uint32_t RESERVED7;
    __IO uint32_t CSR8;
         uint32_t RESERVED8;
    __IO uint32_t CSR9;
         uint32_t RESERVED9;
         uint32_t RESERVED10;
         uint32_t RESERVED11;
    __IO uint32_t CSR11;
} MAC_TypeDef;

/*----------------------------------------------------------------------------*/
/*---------------------- Analog Conversion Engine (ACE) ----------------------*/
/*----------------------------------------------------------------------------*/
/* Analog quad configuration */
typedef struct
{
    __IO uint8_t b0;
         uint8_t reserved0_0;
         uint16_t reserved0_1;
    __IO uint8_t b1;
         uint8_t reserved1_0;
         uint16_t reserved1_1;
    __IO uint8_t b2;
         uint8_t reserved2_0;
         uint16_t reserved2_1;
    __IO uint8_t b3;
         uint8_t reserved3_0;
         uint16_t reserved3_1;
    __IO uint8_t b4;
         uint8_t reserved4_0;
         uint16_t reserved4_1;
    __IO uint8_t b5;
         uint8_t reserved5_0;
         uint16_t reserved5_1;
    __IO uint8_t b6;
         uint8_t reserved6_0;
         uint16_t reserved6_1;
    __IO uint8_t b7;
         uint8_t reserved7_0;
         uint16_t reserved7_1;
    __IO uint8_t b8;
         uint8_t reserved8_0;
         uint16_t reserved8_1;
    __IO uint8_t b9;
         uint8_t reserved9_0;
         uint16_t reserved9_1;
    __IO uint8_t b10;
         uint8_t reserved10_0;
         uint16_t reserved10_1;
    __IO uint8_t b11;
         uint8_t reserved11_0;
         uint16_t reserved11_1;
} AQ_config_t;

/* ACE memory map layout */
typedef struct
{
    __O  uint32_t NOP;
    __IO uint32_t SSE_TS_CTRL;
    __IO uint32_t ADC_SYNC_CONV;
    __IO uint32_t ANA_COMM_CTRL;
    __IO uint32_t DAC_SYNC_CTRL;
    __IO uint32_t PDMA_REQUEST;
	     uint32_t RESERVED0[10];
    __O  uint32_t PC0_LO;
    __O  uint32_t PC0_HI;
    __IO uint32_t PC0_CTRL;
    __IO uint32_t PC0_DLY;
    __IO uint32_t ADC0_CONV_CTRL;
    __IO uint32_t ADC0_STC;
    __IO uint32_t ADC0_TVC;
    __IO uint32_t ADC0_MISC_CTRL;
    __IO uint32_t DAC0_CTRL;
    __IO uint32_t DAC0_BYTE0;
    __IO uint32_t DAC0_BYTE1;
    __IO uint32_t DAC0_BYTE2;
    __IO uint32_t LC0;
    __O  uint32_t LC0_JMP_LO;
    __O  uint32_t LC0_JMP_HI;
    __O  uint32_t PC0_FLAGS;
    __O  uint32_t PC1_LO;
    __O  uint32_t PC1_HI;
    __IO uint32_t PC1_CTRL;
    __IO uint32_t PC1_DLY;
    __IO uint32_t ADC1_CONV_CTRL;
    __IO uint32_t ADC1_STC;
    __IO uint32_t ADC1_TVC;
    __IO uint32_t ADC1_MISC_CTRL;
    __IO uint32_t DAC1_CTRL;
    __IO uint32_t DAC1_BYTE0;
    __IO uint32_t DAC1_BYTE1;
    __IO uint32_t DAC1_BYTE2;
    __IO uint32_t LC1;
    __O  uint32_t LC1_JMP_LO;
    __O  uint32_t LC1_JMP_HI;
    __O  uint32_t PC1_FLAGS;
    __O  uint32_t PC2_LO;
    __O  uint32_t PC2_HI;
    __IO uint32_t PC2_CTRL;
    __IO uint32_t PC2_DLY;
    __IO uint32_t ADC2_CONV_CTRL;
    __IO uint32_t ADC2_STC;
    __IO uint32_t ADC2_TVC;
    __IO uint32_t ADC2_MISC_CTRL;
    __IO uint32_t DAC2_CTRL;
    __IO uint32_t DAC2_BYTE0;
    __IO uint32_t DAC2_BYTE1;
    __IO uint32_t DAC2_BYTE2;
    __IO uint32_t LC2;
    __O  uint32_t LC2_JMP_LO;
    __O  uint32_t LC2_JMP_HI;
    __O  uint32_t PC2_FLAGS;
	     uint32_t RESERVED1;
		 uint32_t RESERVED2;
    __IO uint32_t SSE_RAM_LO_IDATA;
    __IO uint32_t SSE_RAM_HI_IDATA;
	     uint32_t RESERVED3[61];
         AQ_config_t ACB_DATA[6];        
	     uint32_t RESERVED4[59];
    __IO uint32_t SSE_PC0;
    __IO uint32_t SSE_PC1;
    __IO uint32_t SSE_PC2;
	     uint32_t RESERVED5[57];
    __IO uint32_t SSE_DAC0_BYTES01;
    __IO uint32_t SSE_DAC1_BYTES01;
    __IO uint32_t SSE_DAC2_BYTES01;
	     uint32_t RESERVED6[61];
    __O  uint32_t SSE_ADC0_RESULTS;
    __O  uint32_t SSE_ADC1_RESULTS;
    __O  uint32_t SSE_ADC2_RESULTS;
		 uint32_t RESERVED7[61];
    __O  uint32_t SSE_PDMA_DATAIN;
		 uint32_t RESERVED8[63];
    __IO uint32_t SSE_RAM_DATA[512];
    __I  uint32_t ADC0_STATUS;
    __I  uint32_t ADC1_STATUS;
    __I  uint32_t ADC2_STATUS;
    __I  uint32_t COMPARATOR_STATUS;
	     uint32_t RESERVED9[124];
    __IO uint32_t SSE_IRQ_EN;
    __I  uint32_t SSE_IRQ;
    __O  uint32_t SSE_IRQ_CLR;
    __IO uint32_t COMP_IRQ_EN;
    __I  uint32_t COMP_IRQ;
    __O  uint32_t COMP_IRQ_CLR;
    __IO uint32_t PPE_FIFO_IRQ_EN;
    __I  uint32_t PPE_FIFO_IRQ;
    __O  uint32_t PPE_FIFO_IRQ_CLR;
    __IO uint32_t PPE_FLAGS0_IRQ_EN;
    __I  uint32_t PPE_FLAGS0_IRQ;
    __O  uint32_t PPE_FLAGS0_IRQ_CLR;
    __IO uint32_t PPE_FLAGS1_IRQ_EN;
    __I  uint32_t PPE_FLAGS1_IRQ;
    __O  uint32_t PPE_FLAGS1_IRQ_CLR;
    __IO uint32_t PPE_FLAGS2_IRQ_EN;
    __I  uint32_t PPE_FLAGS2_IRQ;
    __O  uint32_t PPE_FLAGS2_IRQ_CLR;
    __IO uint32_t PPE_FLAGS3_IRQ_EN;
    __I  uint32_t PPE_FLAGS3_IRQ;
    __O  uint32_t PPE_FLAGS3_IRQ_CLR;
    __IO uint32_t PPE_SFFLAGS_IRQ_EN;
    __I  uint32_t PPE_SFFLAGS_IRQ;
    __O  uint32_t PPE_SFFLAGS_IRQ_CLR;
    __IO uint32_t FPGA_FLAGS_SEL;
	     uint32_t RESERVED10[39];
    __IO uint32_t PPE_PDMA_CTRL;
    __I  uint32_t PDMA_STATUS;
    __IO uint32_t PPE_PDMA_DATAOUT;
	     uint32_t RESERVED11[61];
    __I  uint32_t PPE_NOP;
    __IO uint32_t PPE_CTRL;
    __IO uint32_t PPE_PC_ETC;
    __IO uint32_t PPE_SF;
    __IO uint32_t PPE_SCRATCH;
         uint32_t RESERVED12;
    __IO uint32_t ALU_CTRL;
    __I  uint32_t ALU_STATUS;
    __IO uint32_t ALU_A;
         uint32_t RESERVED50;
    __IO uint32_t ALU_B;
         uint32_t RESERVED53;
    __IO uint32_t ALU_C;
         uint32_t RESERVED51;
    __IO uint32_t ALU_D;
         uint32_t RESERVED52;
    __IO uint32_t ALU_E;
         uint32_t RESERVED54;
    __IO uint32_t PPE_FPTR;
         uint32_t RESERVED55;
    __IO uint32_t PPE_FLAGS0;
    __IO uint32_t PPE_FLAGS1;
    __IO uint32_t PPE_FLAGS2;
    __IO uint32_t PPE_FLAGS3;
    __IO uint32_t PPE_SFFLAGS;
         uint32_t RESERVED13[11];
    __IO uint32_t ADC0_FIFO_CTRL;
    __I  uint32_t ADC0_FIFO_STATUS;
    __IO uint32_t ADC0_FIFO_DATA;
    __IO uint32_t ADC1_FIFO_CTRL;
    __I  uint32_t ADC1_FIFO_STATUS;
    __IO uint32_t ADC1_FIFO_DATA;
    __IO uint32_t ADC2_FIFO_CTRL;
    __I  uint32_t ADC2_FIFO_STATUS;
    __IO uint32_t ADC2_FIFO_DATA;
         uint32_t RESERVED14[19];
    __I  uint32_t ADC0_FIFO_DATA_PEEK;
    __I  uint32_t ADC0_FIFO_DATA0;
    __I  uint32_t ADC0_FIFO_DATA1;
    __I  uint32_t ADC0_FIFO_DATA2;
    __I  uint32_t ADC0_FIFO_DATA3;
    __I  uint32_t ADC1_FIFO_DATA_PEEK;
    __I  uint32_t ADC1_FIFO_DATA0;
    __I  uint32_t ADC1_FIFO_DATA1;
    __I  uint32_t ADC1_FIFO_DATA2;
    __I  uint32_t ADC1_FIFO_DATA3;
    __I  uint32_t ADC2_FIFO_DATA_PEEK;
    __I  uint32_t ADC2_FIFO_DATA0;
    __I  uint32_t ADC2_FIFO_DATA1;
    __I  uint32_t ADC2_FIFO_DATA2;
    __I  uint32_t ADC2_FIFO_DATA3;
		 uint32_t RESERVED15[177];  
    __IO uint32_t PPE_RAM_DATA[512];
} ACE_TypeDef;

/*----------------------------------------------------------------------------*/
/*------------------------ In Application Programming ------------------------*/
/*----------------------------------------------------------------------------*/
typedef struct
{
    __IO uint32_t IAP_IR;
    __IO uint32_t IAP_DR2;
    __IO uint32_t IAP_DR3;
    __IO uint32_t IAP_DR5;
    __IO uint32_t IAP_DR26;
    __IO uint32_t IAP_DR32;
    __IO uint32_t IAP_DR;
    __IO uint32_t IAP_DR_LENGTH;
    __IO uint32_t IAP_TAP_NEW_STATE;
    __IO uint32_t IAP_TAP_CONTROL;
    __I  uint32_t IAP_STATUS;
} IAP_TypeDef;

/*----------------------------------------------------------------------------*/
/*---------------------- eNVM Special Function Registers ---------------------*/
/*----------------------------------------------------------------------------*/
typedef struct
{
    __IO uint32_t STATUS;
    __IO uint32_t CONTROL;
    __IO uint32_t ENABLE;
         uint32_t RESERVED0;
    __IO uint32_t CONFIG_0;
    __IO uint32_t CONFIG_1;
    __IO uint32_t PAGE_STATUS_0;
    __IO uint32_t PAGE_STATUS_1;
    __IO uint32_t SEGMENT;
	__IO uint32_t ENVM_SELECT;
} NVM_TypeDef;

/*----------------------------------------------------------------------------*/
/*---------------------- eNVM Special Function Registers ---------------------*/
/*----------------------------------------------------------------------------*/
typedef struct
{
    __IO uint32_t MSSIRQ_EN0;
    __IO uint32_t MSSIRQ_EN1;
    __IO uint32_t MSSIRQ_EN2;
    __IO uint32_t MSSIRQ_EN3;
    __IO uint32_t MSSIRQ_EN4;
    __IO uint32_t MSSIRQ_EN5;
    __IO uint32_t MSSIRQ_EN6;
    __IO uint32_t MSSIRQ_EN7;
    __I  uint32_t MSSIRQ_SRC0;
    __I  uint32_t MSSIRQ_SRC1;
    __I  uint32_t MSSIRQ_SRC2;
    __I  uint32_t MSSIRQ_SRC3;
    __I  uint32_t MSSIRQ_SRC4;
    __I  uint32_t MSSIRQ_SRC5;
    __I  uint32_t MSSIRQ_SRC6;
    __I  uint32_t MSSIRQ_SRC7;
    __IO uint32_t FIIC_MR;
} MSS_IRQ_CTRL_TypeDef;

/*----------------------------------------------------------------------------*/
/*------------------------------ System Registers ----------------------------*/
/*----------------------------------------------------------------------------*/
typedef struct
{
    __IO uint32_t ESRAM_CR;
    __IO uint32_t ENVM_CR;
    __IO uint32_t ENVM_REMAP_SYS_CR;
    __IO uint32_t ENVM_REMAP_FAB_CR;
    __IO uint32_t FAB_PROT_SIZE_CR;
    __IO uint32_t FAB_PROT_BASE_CR;
    __IO uint32_t AHB_MATRIX_CR;
    __IO uint32_t MSS_SR;
    __IO uint32_t CLR_MSS_SR;
    __IO uint32_t EFROM_CR;
    __IO uint32_t IAP_CR;
    __IO uint32_t SOFT_IRQ_CR;
    __IO uint32_t SOFT_RST_CR;
    __IO uint32_t DEVICE_SR;
    __IO uint32_t SYSTICK_CR;
    __IO uint32_t EMC_MUX_CR;
    __IO uint32_t EMC_CS_0_CR;
    __IO uint32_t EMC_CS_1_CR;
    __IO uint32_t MSS_CLK_CR;
    __IO uint32_t MSS_CCC_DIV_CR;
    __IO uint32_t MSS_CCC_MUX_CR;
    __IO uint32_t MSS_CCC_PLL_CR;
    __IO uint32_t MSS_CCC_DLY_CR;
    __IO uint32_t MSS_CCC_SR;
    __IO uint32_t MSS_RCOSC_CR;
    __IO uint32_t VRPSM_CR;
    __IO uint32_t RESERVED;
    __IO uint32_t FAB_IF_CR;
    __IO uint32_t FAB_APB_HIWORD_DR;
    __IO uint32_t LOOPBACK_CR;
    __IO uint32_t MSS_IO_BANK_CR;
    __IO uint32_t GPIN_SOURCE_CR;
    __IO uint32_t TEST_SR;
    __IO uint32_t RED_REP_ADDR0;
    __I  uint32_t RED_REP_LOW_LOCS0;
    __I  uint32_t RED_REP_HIGH_LOCS0;
    __IO uint32_t RED_REP_ADDR1;
    __I  uint32_t RED_REP_LOW_LOCS1;
    __I  uint32_t RED_REP_HIGH_LOCS1;
    __IO uint32_t FABRIC_CR;
         uint32_t RESERVED1[24];
    __IO uint32_t IOMUX_CR[83];
} SYSREG_TypeDef;

#define SYSREG_ENVM_SOFTRESET_MASK      (uint32_t)0x00000001
#define SYSREG_ESRAM0_SOFTRESET_MASK    (uint32_t)0x00000002
#define SYSREG_ESRAM1_SOFTRESET_MASK    (uint32_t)0x00000004
#define SYSREG_EMC_SOFTRESET_MASK       (uint32_t)0x00000008
#define SYSREG_MAC_SOFTRESET_MASK       (uint32_t)0x00000010
#define SYSREG_PDMA_SOFTRESET_MASK      (uint32_t)0x00000020
#define SYSREG_TIMER_SOFTRESET_MASK     (uint32_t)0x00000040
#define SYSREG_UART0_SOFTRESET_MASK     (uint32_t)0x00000080
#define SYSREG_UART1_SOFTRESET_MASK     (uint32_t)0x00000100
#define SYSREG_SPI0_SOFTRESET_MASK      (uint32_t)0x00000200
#define SYSREG_SPI1_SOFTRESET_MASK      (uint32_t)0x00000400
#define SYSREG_I2C0_SOFTRESET_MASK      (uint32_t)0x00000800
#define SYSREG_I2C1_SOFTRESET_MASK      (uint32_t)0x00001000
#define SYSREG_ACE_SOFTRESET_MASK       (uint32_t)0x00002000
#define SYSREG_GPIO_SOFTRESET_MASK      (uint32_t)0x00004000
#define SYSREG_IAP_SOFTRESET_MASK       (uint32_t)0x00008000
#define SYSREG_EXT_SOFTRESET_MASK       (uint32_t)0x00010000
#define SYSREG_FPGA_SOFTRESET_MASK      (uint32_t)0x00020000
#define SYSREG_F2M_RESET_ENABLE_MASK    (uint32_t)0x00040000        
#define SYSREG_PADRESET_ENABLE_MASK     (uint32_t)0x00080000

/******************************************************************************/
/*                         Peripheral memory map                              */
/******************************************************************************/
#define UART0_BASE              0x40000000U
#define SPI0_BASE               0x40001000U
#define I2C0_BASE               0x40002000U
#define MAC_BASE                0x40003000U
#define PDMA_BASE               0x40004000U
#define TIMER_BASE              0x40005000U
#define WATCHDOG_BASE		    0x40006000U
#define H2F_IRQ_CTRL_BASE       0x40007000U
#define UART1_BASE              0x40010000U
#define SPI1_BASE               0x40011000U
#define I2C1_BASE               0x40012000U
#define GPIO_BASE               0x40013000U
#define RTC_BASE                0x40014100U
#define FROM_BASE               0x40015000U
#define IAP_BASE                0x40016000U
#define ACE_BASE                0x40020000U
#define FPGA_FABRIC_RAM_BASE    0x40040000U
#define FPGA_FABRIC_BASE        0x40050000U
#define ENVM_BASE               0x60000000U
#define ENVM_REGS_BASE          0x60100000U
#define SYSREG_BASE             0xE0042000U

/******************************************************************************/
/* bitband address calcualtion macro                             */
/******************************************************************************/
#define BITBAND_ADDRESS(X)  ((X & 0xF0000000U) + 0x02000000U + ((X & 0xFFFFFU) << 5))

/******************************************************************************/
/*                         Peripheral declaration                             */
/******************************************************************************/
#define UART0                ((UART_TypeDef *) UART0_BASE)
#define UART0_BITBAND        ((UART_BitBand_TypeDef *) BITBAND_ADDRESS(UART0_BASE))
#define SPI0                 ((SPI_TypeDef *) SPI0_BASE)
#define SPI0_BITBAND         ((SPI_BitBand_TypeDef *) BITBAND_ADDRESS(SPI0_BASE))
#define I2C0                 ((I2C_TypeDef *) I2C0_BASE)
#define I2C0_BITBAND         ((I2C_BitBand_TypeDef *) BITBAND_ADDRESS(I2C0_BASE))
#define MAC                  ((MAC_TypeDef *) MAC_BASE)
#define PDMA                 ((PDMA_TypeDef *) PDMA_BASE)
#define TIMER                ((TIMER_TypeDef *) TIMER_BASE)
#define TIMER_BITBAND        ((TIMER_BitBand_TypeDef *) BITBAND_ADDRESS(TIMER_BASE))
#define WATCHDOG             ((WATCHDOG_TypeDef *) WATCHDOG_BASE)
#define MSS_IRQ_CTRL         ((MSS_IRQ_CTRL_TypeDef *) H2F_IRQ_CTRL_BASE)
#define UART1                ((UART_TypeDef *) UART1_BASE)
#define UART1_BITBAND        ((UART_BitBand_TypeDef *) BITBAND_ADDRESS(UART1_BASE))
#define SPI1                 ((SPI_TypeDef *) SPI1_BASE)
#define SPI1_BITBAND         ((SPI_BitBand_TypeDef *) BITBAND_ADDRESS(SPI1_BASE))
#define I2C1                 ((I2C_TypeDef *) I2C1_BASE)
#define I2C1_BITBAND         ((I2C_BitBand_TypeDef *) BITBAND_ADDRESS(I2C1_BASE))
#define GPIO                 ((GPIO_TypeDef *) GPIO_BASE)
#define GPIO_BITBAND         ((GPIO_BitBand_TypeDef *) BITBAND_ADDRESS(GPIO_BASE))
#define RTC                  ((RTC_TypeDef *) RTC_BASE)
#define FROM                 ((void *) FROM_BASE)
#define IAP                  ((IAP_TypeDef *) IAP_BASE)
#define ACE                  ((ACE_TypeDef *) ACE_BASE)
#define FPGA_FABRIC_RAM      ((void *) FPGA_FABRIC_RAM_BASE)
#define FPGA_FABRIC          ((void *) FPGA_FABRIC_BASE)
#define ENVM                 ((void *) ENVM_BASE)
#define ENVM_REGS            ((NVM_TypeDef *) ENVM_REGS_BASE)
#define SYSREG               ((SYSREG_TypeDef *) SYSREG_BASE)

#ifdef __cplusplus
}
#endif

#endif	/* __A2FXXXM3_H__ */

