/**************************************************************************//**
 * @file     S3FM02G.h
 * @brief    CMSIS Cortex-M3 Core Peripheral Access Layer Header File for the 
 *           Samsung 'S3FM02G' Device Series 
 * @version  V0.01
 * @date     01. Feb 2011
 *
 * @note
 * Copyright (C) 2011 ARM Limited. All rights reserved.
 *
 * @par
 * ARM Limited (ARM) is supplying this software for use with Cortex-M 
 * processor based microcontrollers.  This file can be freely distributed 
 * within development tools that are supporting such ARM based processors. 
 *
 * @par
 * THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED
 * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
 * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
 * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
 *
 ******************************************************************************/

#ifndef __S3FM02G_H
#define __S3FM02G_H

#ifdef __cplusplus
 extern "C" {
#endif 

/** @addtogroup S3FM02G_Definitions S3FM02G Definitions
  This file defines all structures and symbols for S3FM02G:
    - registers and bitfields
    - peripheral base address
    - peripheral ID
    - PIO definitions
  @{
*/


/******************************************************************************/
/*                Processor and Core Peripherals                              */
/******************************************************************************/
/** @addtogroup S3FM02G_CMSIS S3FM02G CMSIS Definitions
  Configuration of the Cortex-M3 Processor and Core Peripherals
  @{
*/

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

typedef enum IRQn
{
/******  Cortex-M3 Processor Exceptions Numbers ****************************************************/
  NonMaskableInt_IRQn           = -14,      /*!< 2 Non Maskable Interrupt                          */
  HardFault_IRQn                = -13,      /*!< 3 Cortex-M3 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                */
/******  S3FM02G Specific Interrupt Numbers ********************************************************/ 
  WDTINT_IRQn                   = 0,        /*!< Watch-dog Timer Interrupt */
  CMINT_IRQn                    = 1,        /*!< Clock Manager Interrupt */
  PFCINT_IRQn                   = 2,        /*!< Program Flash Controller Interrupt */
  DFCINT_IRQn                   = 3,        /*!< Data Flash Controller Interrupt */
  DMAINT_IRQn                   = 4,        /*!< DMA Controller Interrupt */
  FRTINT_IRQn                   = 5,        /*!< Free-running Timer Interrupt */
  WSI0INT_IRQn                  = 6,        /*!< Wakeup source 0 */
  WSI1INT_IRQn                  = 7,        /*!< Wakeup source 1 */
  IMC0INT_IRQn                  = 8,        /*!< Inverter Motor Controller 0 Interrupt */
  ENC0INT_IRQn                  = 9,        /*!< Encoder Counter 0 Interrupt */
  IMC1INT_IRQn                  = 10,       /*!< Inverter Motor Controller 1 Interrupt */
  ENC1INT_IRQn                  = 11,       /*!< Encoder Counter 1 Interrupt */
  CAN0INT_IRQn                  = 12,       /*!< CAN0 Interrupt */
  USART0INT_IRQn                = 13,       /*!< USART0 Interrupt */
  ADC0INT_IRQn                  = 14,       /*!< ADC0 Interrupt */
  ADC1INT_IRQn                  = 15,       /*!< ADC1 Interrupt */
  SSP0INT_IRQn                  = 16,       /*!< SSP0 Interrupt */
  I2C0INT_IRQn                  = 17,       /*!< I2C0 Interrupt */
  TC0INT_IRQn                   = 18,       /*!< Timer/Counter0 Interrupt */
  PWM0INT_IRQn                  = 19,       /*!< PWM0 Interrupt */
  WSI2INT_IRQn                  = 20,       /*!< Wakeup source 2 */
  WSI3INT_IRQn                  = 21,       /*!< Wakeup source 3 */
  TC1INT_IRQn                   = 22,       /*!< Timer/Counter1 Interrupt */
  PWM1INT_IRQn                  = 23,       /*!< PWM1 Interrupt */
  USART1INT_IRQn                = 24,       /*!< USART1 Interrupt */
  SSP1INT_IRQn                  = 25,       /*!< SSP1 Interrupt */
  I2C1INT_IRQn                  = 26,       /*!< I2C1 Interrupt */
  CAN1INT_IRQn                  = 27,       /*!< CAN1 Interrupt */
  STTINT_IRQn                   = 28,       /*!< STT Interrupt */
  USART2INT_IRQn                = 29,       /*!< USART2 Interrupt */
  TC2INT_IRQn                   = 30,       /*!< Timer/Counter2 Interrupt */
  TC3INT_IRQn                   = 31,       /*!< Timer/Counter3 Interrupt */
  PWM2INT_IRQn                  = 32,       /*!< PWM2 Interrupt */
  WSI4INT_IRQn                  = 33,       /*!< Wakeup source 4 */
  WSI5INT_IRQn                  = 34,       /*!< Wakeup source 5 */
  PWM3INT_IRQn                  = 35,       /*!< PWM3 Interrupt */
  USART3INT_IRQn                = 36,       /*!< USART4 Interrupt */
  GPIO0INT_IRQn                 = 37,       /*!< GPIO 0 Interrupt */
  GPIO1INT_IRQn                 = 38,       /*!< GPIO 1 Interrupt */
  TC4INT_IRQn                   = 39,       /*!< Timer/Counter4 Interrupt */
  WSI6INT_IRQn                  = 40,       /*!< Wakeup source 6 */
  WSI7INT_IRQn                  = 41,       /*!< Wakeup source 7 */
  PWM4INT_IRQn                  = 42,       /*!< PWM4 Interrupt */
  TC5INT_IRQn                   = 43,       /*!< Timer/Counter5 Interrupt */
  WSI8INT_IRQn                  = 44,       /*!< Wakeup source 8 */
  WSI9INT_IRQn                  = 45,       /*!< Wakeup source 9 */
  WSI10INT_IRQn                 = 46,       /*!< Wakeup source 10 */
  WSI11INT_IRQn                 = 47,       /*!< Wakeup source 11 */
  PWM5INT_IRQn                  = 48,       /*!< PWM5 Interrupt */
  TC6INT_IRQn                   = 49,       /*!< Timer/Counter6 Interrupt */
  WSI12INT_IRQn                 = 50,       /*!< Wakeup source 12 */
  WSI13INT_IRQn                 = 51,       /*!< Wakeup source 13 */
  WSI14INT_IRQn                 = 52,       /*!< Wakeup source 14 */
  WSI15INT_IRQn                 = 53,       /*!< Wakeup source 15 */
  PWM6INT_IRQn                  = 54,       /*!< PWM6 Interrupt */
  TC7INT_IRQn                   = 55,       /*!< Timer/Counter7 Interrupt */
  PWM7INT_IRQn                  = 56,       /*!< PWM8 Interrupt */
  GPIO2INT_IRQn                 = 57,       /*!< GPIO 2 Interrupt */
  GPIO3INT_IRQn                 = 58,       /*!< GPIO 3 Interrupt */
  OPAMPINT_IRQn                 = 59,       /*!< OP-AMP interrupt */
} IRQn_Type;

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

/* Configuration of the Cortex-M3 Processor and Core Peripherals */
#define __MPU_PRESENT             0         /*!< MPU present or not                           */
#define __NVIC_PRIO_BITS          3         /*!< Number of Bits used for Priority Levels      */
#define __Vendor_SysTickConfig    0         /*!< Set to 1 if different SysTick Config is used */

/*@}*/ /* end of group S3FM02G_CMSIS */

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

/******************************************************************************/
/*                Device Specific Peripheral registers structures             */
/******************************************************************************/
/** @addtogroup S3FM02G_Peripherals S3FM02G Peripherals
  S3FM02G Device Specific Peripheral registers structures
  @{
*/

#if defined ( __CC_ARM   )
#pragma anon_unions
#endif

/*------------- A/D Converter 0 (ADC0) ---------------------------*/
/** @addtogroup S3FM02G_ADC0 A/D Converter 0 (ADC0)
  @{
*/
typedef struct
{
  __I  uint32_t  IDR;                     /*!< Offset: 0x000 (R  )  ID Register                             */
  __IO uint32_t  CEDR;                    /*!< Offset: 0x004 (R/W)  Clock Enable/Disable Register           */
  __O  uint32_t  SRR;                     /*!< Offset: 0x008 (  W)  Software Reset Register                 */
  __O  uint32_t  CSR;                     /*!< Offset: 0x00C (  W)  Control Set Register                    */
  __O  uint32_t  CCR;                     /*!< Offset: 0x010 (  W)  Control Clear Register                  */
  __IO uint32_t  CDR;                     /*!< Offset: 0x014 (R/W)  Clock Divider Register                  */
  __IO uint32_t  MR;                      /*!< Offset: 0x018 (R/W)  Mode Register                           */
  __I  uint32_t  CCSR0;                   /*!< Offset: 0x01C (R  )  Conversion Channel Register             */
  __I  uint32_t  CCSR1;                   /*!< Offset: 0x020 (R  )  Conversion Channel Register             */
  __I  uint32_t  SR;                      /*!< Offset: 0x024 (R  )  Status Register                         */
  __IO uint32_t  IMSCR;                   /*!< Offset: 0x028 (R/W)  Interrupt Mask Set/Clear Register       */
  __I  uint32_t  RISR;                    /*!< Offset: 0x02C (R  )  Raw Interrupt Status Register           */
  __I  uint32_t  MISR;                    /*!< Offset: 0x030 (R  )  Masked Interrupt Status Register        */
  __O  uint32_t  ICR;                     /*!< Offset: 0x034 (  W)  Interrupt Clear Register                */
  __I  uint32_t  CRR0;                    /*!< Offset: 0x038 (R  )  Conversion Result Register              */
  __I  uint32_t  CRR1;                    /*!< Offset: 0x03C (R  )  Conversion Result Register              */
  __IO uint32_t  GCR0;                    /*!< Offset: 0x040 (R/W)  Gain Calibration Register               */
  __IO uint32_t  OCR0;                    /*!< Offset: 0x044 (R/W)  Offset Calibration Register             */
  __IO uint32_t  GCR1;                    /*!< Offset: 0x048 (R/W)  Gain Calibration Register               */
  __IO uint32_t  OCR1;                    /*!< Offset: 0x04C (R/W)  Offset Calibration Register             */
  __IO uint32_t  DMACR;                   /*!< Offset: 0x050 (R/W)  DMA Control Register                    */
 } S3FM_ADC0_TypeDef;
/*@}*/ /* end of group S3FM02G_ADC0 */

/*------------- A/D Converter 1 (ADC1) ---------------------------*/
/** @addtogroup S3FM02G_ADC1 A/D Converter 0 (ADC1)
  @{
*/
 typedef struct
 {
  __I  uint32_t  IDR;                     /*!< Offset: 0x000 (R  )  ID Register                            */
  __IO uint32_t  CEDR;                    /*!< Offset: 0x004 (R/W)  Clock Enable/Disable Register          */
  __O  uint32_t  SRR;                     /*!< Offset: 0x008 (  W)  Software Reset Register                */
  __O  uint32_t  CSR;                     /*!< Offset: 0x00C (  W)  Control Set Register                   */
  __O  uint32_t  CCR;                     /*!< Offset: 0x010 (  W)  Control Clear Register                 */
  __IO uint32_t  CDR;                     /*!< Offset: 0x014 (R/W)  Clock Divider Register                 */
  __IO uint32_t  MR;                      /*!< Offset: 0x018 (R/W)  Mode Register                          */
  __I  uint32_t  CCSR;                    /*!< Offset: 0x01C (R  )  Conversion Channel Sequence Register   */
  __I  uint32_t  SR;                      /*!< Offset: 0x020 (R  )  Status Register                        */
  __IO uint32_t  IMSCR;                   /*!< Offset: 0x024 (R/W)  Interrupt Mask Set/Clear Register      */
  __I  uint32_t  RISR;                    /*!< Offset: 0x028 (R  )  Raw Interrupt Status Register          */
  __I  uint32_t  MISR;                    /*!< Offset: 0x02C (R  )  Masked Interrupt Status Register       */
  __O  uint32_t  ICR;                     /*!< Offset: 0x030 (  W)  Interrupt Clear Register               */
  __I  uint32_t  CRR;                     /*!< Offset: 0x034 (R  )  Conversion Result Register             */
  __IO uint32_t  GCR;                     /*!< Offset: 0x038 (R/W)  Gain Calibration Register              */
  __IO uint32_t  OCR;                     /*!< Offset: 0x03C (R/W)  Calibration Register            */
  __IO uint32_t  DMACR;                   /*!< Offset: 0x040 (R/W)  DMA Control Register                   */
 } S3FM_ADC1_TypeDef;
/*@}*/ /* end of group S3FM02G_ADC1 */


/*------------- CAN Interface Structure ---------------------------*/
/** @addtogroup S3FM02G_CAN_IF Structure (CAN_IF)
  @{
*/
typedef struct
{
  __IO uint32_t  TMR;                     /*!< Offset 0x000 (R/W) Command Register                     */
  __IO uint32_t  DAR;                     /*!< Offset 0x004( R/W) Data Register A Interface X          */
  __IO uint32_t  DBR;                     /*!< Offset 0x008 (R/W) Data Register B Interface X          */
  __IO uint32_t  MSKR;                    /*!< Offset 0x00C (R/W) Mask Register Interface X            */
  __IO uint32_t  IR;                      /*!< Offset 0x010 (R/W) Identifier Register Interface X      */
  __IO uint32_t  MCR;                     /*!< Offset 0x014 (R/W) Message Control Register Interface X */
  __I  uint32_t  STPR;                    /*!< Offset 0x018 (R  ) Stamp Register Interface X           */
       uint32_t  ReservedA;
} S3FM_CAN_IF_TypeDef;
/*@}*/ /* end of group S3FM02G_CAN_IF */

/*------------- CAN Interface Structure ---------------------------*/
/** @addtogroup S3FM02G_CAN Structure (CAN)
  @{
*/
typedef struct
{
      uint32_t ReservedA[20];
  __O  uint32_t ECR;                      /*!< Offset 0x050 (  W) Enable Clock Register              */
  __IO uint32_t DCR;                      /*!< Offset 0x054 (  W) Disable Clock Register             */
  __IO uint32_t PMSR;                     /*!< Offset 0x058 (R  ) Power Management Status Register   */
  __IO uint32_t ReservedB;                  
  __IO uint32_t CR;                       /*!< Offset 0x060 (  W) Control Register                   */
  __IO uint32_t MR;                       /*!< Offset 0x064 (R/W) Mode Register                      */
  __IO uint32_t ReservedC;                  
  __IO uint32_t CSR;                      /*!< Offset 0x06C (  W) Clear Status Register              */
  __IO uint32_t SR;                       /*!< Offset 0x070 (R  ) Status Register                    */
  __IO uint32_t IER;                      /*!< Offset 0x074 (  W) Interrupt Enable Register          */
  __IO uint32_t IDR;                      /*!< Offset 0x078 (  W) Interrupt Disable Register         */
  __IO uint32_t IMR;                      /*!< Offset 0x07C (R  ) Interrupt Mask Register            */
  __IO uint32_t ReservedD;                  
  __IO uint32_t ISSR;                     /*!< Offset 0x084 (R  ) Interrupt Source Status Register   */
  __IO uint32_t SIER;                     /*!< Offset 0x088 (  W) Source Interrupt Enable Register   */
  __IO uint32_t SIDR;                     /*!< Offset 0x08C (  W) Source Interrupt Disable Register  */
  __IO uint32_t SIMR;                     /*!< Offset 0x090 (R  ) Source Interrupt Mask Register     */
  __IO uint32_t HPIR;                     /*!< Offset 0x094 (R  ) Highest Priority Interrupt Register*/
  __IO uint32_t ERCR;                     /*!< Offset 0x098 (R  ) Error Counter Register             */
  __IO uint32_t ReservedE[25];              
       S3FM_CAN_IF_TypeDef IF[2];         /*!< Offset 0x100 (R/W) CAN interface                      */
  __IO uint32_t TRR;                      /*!< Offset 0x140 (R  ) Transmission Request Register      */
  __IO uint32_t NDR;                      /*!< Offset 0x144 (R  ) New Data Register                  */
  __IO uint32_t MVR;                      /*!< Offset 0x148 (R  ) Message Valid Register             */
  __IO uint32_t TSTR;                     /*!< Offset 0x14C (R/W) Test Register                      */
} S3FM_CAN_TypeDef;
/*@}*/ /* end of group S3FM02G_CAN */


/*------------- Clock Manager (CM) ---------------------------*/
/** @addtogroup S3FM02G_CM  (CM)
  @{
*/
typedef struct
{
  __I  uint32_t IDR;                      /*!< Offset 0x000 (R  ) Id Register                      */
  __O  uint32_t SRR;                      /*!< Offset 0x004 (R  ) Software Reset Register          */
  __O  uint32_t CSR;                      /*!< Offset 0x008 (R  ) Control Set Register             */
  __O  uint32_t CCR;                      /*!< Offset 0x00C (R  ) Control Clear Register           */
  __O  uint32_t PCSR0;                    /*!< Offset 0x010 Peripheral Clock Set Register 0  */
  __O  uint32_t PCSR1;                    /*!< Offset 0x014 Peripheral Clock Set Register 1  */
  __O  uint32_t PCCR0;                    /*!< Offset 0x018 Peripheral Clock Clear Register 0 */
  __O  uint32_t PCCR1;                    /*!< Offset 0x01C Peripheral Clock Clear Register 1 */
  __I  uint32_t PCKSR0;                   /*!< Offset 0x020 Peripheral Clock Status Register 0 */
  __I  uint32_t PCKSR1;                   /*!< Offset 0x024 Peripheral Clock Status Register 1 */
  __IO uint32_t MR0;                      /*!< Offset 0x028 Mode Register 0                  */
  __IO uint32_t MR1;                      /*!< Offset 0x02C Mode Register 1                  */
  __O  uint32_t IMSCR;                    /*!< Offset 0x030 Interrupt Mask Set Clear Register*/
  __I  uint32_t RISR;                     /*!< Offset 0x034 Raw Interrupt Status Register    */
  __I  uint32_t MISR;                     /*!< Offset 0x038 Masked Interrupt Status Register */
  __O  uint32_t ICR;                      /*!< Offset 0x03C Interrupt Clear Register         */
  __IO uint32_t SR;                       /*!< Offset 0x040 Status Register                  */
  __IO uint32_t SCDR;                     /*!< Offset 0x044 System Clock Divider Register    */
  __IO uint32_t PCDR;                     /*!< Offset 0x048 Peripheral Clock Divider Register*/
  __IO uint32_t FCDR;                     /*!< Offset 0x04C FRT Clock Divider Register       */
  __IO uint32_t STCDR;                    /*!< Offset 0x050 STT Clock Divider Register       */
  __IO uint32_t LCDR;                     /*!< Offset 0x054 LCD Clock Divider Register       */
  __IO uint32_t PSTR;                     /*!< Offset 0x058 PLL Stabilization Time Register  */
  __IO uint32_t PDPR;                     /*!< Offset 0x05C PLL Divider Parameter Register   */
      uint32_t ReservedA[2];                       
  __IO uint32_t EMSTR;                    /*!< Offset 0x068 EMCLK Stabilization Time Register*/
  __IO uint32_t ESSTR;                    /*!< Offset 0x06C ESCLK Stabilization Time Register*/
  __IO uint32_t BTCDR;                    /*!< Offset 0x070 Basic Timer Register    */
  __IO uint32_t BTR;                      /*!< Offset 0x074 Basic Timer Register     */
  __IO uint32_t WCR0;                     /*!< Offset 0x078 Wakeup Control Register0         */
  __IO uint32_t WCR1;                     /*!< Offset 0x07C Wakeup Control Register1         */
  __IO uint32_t WCR2;                     /*!< Offset 0x080 Wakeup Control Register2         */
  __IO uint32_t WCR3;                     /*!< Offset 0x084 Wakeup Control Register3         */
  __IO uint32_t WIMSCR;                   /*!< Offset 0x088 Wakeup Interrupt Mask Set/Clear Register */
  __I  uint32_t WRISR;                    /*!< Offset 0x08C Wakeup Raw Interrupt Status Reg. */
  __I  uint32_t WMISR;                    /*!< Offset 0x090 Wakeup Masked Interrupt Status Register   */
  __O  uint32_t WICR;                     /*!< Offset 0x094 Wakeup Interrupt Clear Register  */
  __IO uint32_t NISR0;                    /*!< Offset 0x098 NVIC Interrupt Status Register 0  */
  __IO uint32_t NISR1;                    /*!< Offset 0x09C NVIC Interrupt Status Register 1  */
} S3FM_CM_TypeDef;
/*@}*/ /* end of group S3FM02G_CM */                                         


/** DFC Controller Structure *****/
/*------------- DFC Controller 1 (DFC) ---------------------------*/
/** @addtogroup S3FM02G_DFC DFC Controller (DFC)
  @{
*/
typedef struct
{
  __I  uint32_t IDR;                      /*!< Offset 0x000 ID Register               */
  __IO uint32_t CEDR;                     /*!< Offset 0x004 Clock Enable/Disable Register                  */
  __O  uint32_t SRR;                      /*!< Offset 0x008 Software Reset Register          */
  __IO uint32_t CR;                       /*!< Offset 0x00C Control Register                */
  __IO uint32_t MR;                       /*!< Offset 0x010 Mode Register      */
  __IO uint32_t IMSCR;                    /*!< Offset 0x014 Interrupt Mask Set/Clear Register */
  __I  uint32_t RISR;                     /*!< Offset 0x018 Raw Interrupt Status Register  */
  __I  uint32_t MISR;                     /*!< Offset 0x01C Masked Interrupt Status Register   */
  __O  uint32_t ICR;                      /*!< Offset 0x020 Interrupt Clear Register     */
  __IO uint32_t AR;                       /*!< Offset 0x024 Address Register        */
  __IO uint32_t DR;                       /*!< Offset 0x028 Data Register        */
  __O  uint32_t KR;                       /*!< Offset 0x02C Key Register        */
  __IO uint32_t PCR;                      /*!< Offset 0x030 Protection Control Register        */
} S3FM_DFC_TypeDef;
/*@}*/ /* end of group S3FM02G_DFC */

 
/** DMA Channel Structure *****/
/*------------- DMA channel (DMA_C) ---------------------------*/
/** @addtogroup S3FM02G_DMA_C (DMA_C)
  @{
*/
typedef struct
{
  __IO uint32_t ISR;                      /*!< Offset 0x000  Channel Control Register               */
  __IO uint32_t ISCR;                     /*!< Offset 0x004  Channel Mode Register                  */
  __IO uint32_t IDR;                      /*!< Offset 0x008  Channel Clear Status Register          */
  __IO uint32_t IDCR;                     /*!< Offset 0x00C  Channel Status Register                */
  __IO uint32_t CR;                       /*!< Offset 0x010  Channel Interrupt Enable Register      */
  __I  uint32_t SR;                       /*!< Offset 0x014  Status Register  */
  __I  uint32_t CSR;                      /*!< Offset 0x018  Current Source Register  */
  __I  uint32_t CDR;                      /*!< Offset 0x01C  Current Destination Register  	         */
  __IO uint32_t MTR;                      /*!< Offset 0x020  Channel Interrupt Disable Register     */
  __IO uint32_t RSR;                      /*!< Offset 0x024  Channel Interrupt Mode Register        */
      uint32_t ReservedB[22];
} S3FM_DMA_CHANNEL_TypeDef;
/*@}*/ /* end of group S3FM02G_DMA_C */



/** DMA Controller Structure *****/
/*------------- DMA Controller (DMAC) ---------------------------*/
/** @addtogroup S3FM02G_DMA (DMAC)
  @{
*/
typedef struct
{
  S3FM_DMA_CHANNEL_TypeDef    CHANNEL[6];
      uint32_t Reserved[128];
  __I uint32_t IDR;                       /*!< Offset 0x500 (R  ) ID Register            */
  __O uint32_t SRR;                       /*!< Offset 0x504 ( W) Software Reset Register        */
  __I uint32_t CESR;                      /*!< Offset 0x508 (R  ) Channel Enable Status Register */
  __I uint32_t ISR;                       /*!< Offset 0x50C (R  ) Interrupt Status Register      */
  __O uint32_t ICR;                       /*!< Offset 0x510  ( W) Interrupt Clear Register       */
}S3FM_DMAC_TypeDef;
/*@}*/ /* end of group S3FM02G_DMAC */




/** Encoder Interface Structure *****/
/*------------- Encoder Interface (ENC) ---------------------------*/
/** @addtogroup S3FM02G_ENC (ENC)
  @{
*/
typedef struct
{
  __I  uint32_t IDR;                       /*!< Offset 0x000 (R   ) Encoder Control Register 0 */
  __IO uint32_t CEDR;                      /*!< Offset 0x004 (R/W) Encoder Control Register 1 */
  __O  uint32_t SRR;                       /*!< Offset 0x008 (  W) Encoder Control Register 0 */
  __IO uint32_t CR0;                       /*!< Offset 0x00C  (R/W)  Encoder Control Register 0 */
  __IO uint32_t CR1;                       /*!< Offset 0x010  (R/W)  Encoder Control Register 1 */
  __IO uint32_t SR;                        /*!< Offset 0x014  (R/W)  Encoder Status Register */
  __IO uint32_t IMSCR;                     /*!< Offset 0x018  (R/W)  Interrupt Mask Set/Clear Register */
  __I  uint32_t RISR;                      /*!< Offset 0x01C  (R  )  Raw Interrupt Status Register     */
  __I  uint32_t MISR;                      /*!< Offset 0x020 (R  ) Masked Interrupt Status Register  */
  __O  uint32_t ICR;                       /*!< Offset 0x024 (  W) Interrupt Clear Register          */
  __IO uint32_t PCR;                       /*!< Offset 0x028 (R/W) 16bit Position Counter Register */
  __IO uint32_t PRR;                       /*!< Offset 0x02C  (R/W)  16bit Position Reference Register */
  __IO uint32_t SPCR;                      /*!< Offset 0x030 (R/W) 16bit Speed Counter Register */
  __IO uint32_t SPRR;                      /*!< Offset 0x034 (R/W) 16bit Speed Reference Register */
  __IO uint32_t PACCR;                     /*!< Offset 0x038 (R/W) 16bit Phase A Capture Counter Register */
  __IO uint32_t PACDR;                     /*!< Offset 0x03C  (R/W)  16bit Phase A Capture Data Register */
  __IO uint32_t PBCCR;                     /*!< Offset 0x040 (R/W) 16bit Phase B Capture Counter Register */
  __IO uint32_t PBCDR;                     /*!< Offset 0x044 (R/W) 16bit Phase B Capture Data Register */
} S3FM_ENC_TypeDef;
/*@}*/ /* end of group S3FM02G_ENC */

 
 
/** Free Running Timer Structure *****/
/*------------- Free Running Timer (FRT) ---------------------------*/
/** @addtogroup S3FM02G_FRT (FRT)
  @{
*/
 typedef struct
{
  __I  uint32_t IDR;                       /*!< Offset 0x000 (R  ) ID Register                */
  __IO uint32_t CEDR;                      /*!< Offset 0x004 (R/W) Clock Enable/Disable Register    */
  __O  uint32_t SRR;                       /*!< Offset 0x008 (  W) Software Reset Register          */
  __IO uint32_t CR;                        /*!< Offset 0x00C  (R/W)Control Register                 */
  __I  uint32_t SR;                        /*!< Offset 0x010  (R  )Status Register                  */
  __IO uint32_t IMSCR;                     /*!< Offset 0x014  (R/W)Interrupt Mask Set/Clear Register*/
  __I  uint32_t RISR;                      /*!< Offset 0x018  (R  )Raw Interrupt Status Register    */
  __I  uint32_t MISR;                      /*!< Offset 0x01C  (R  )Masked Interrupt Status Register */
  __O  uint32_t ICR;                       /*!< Offset 0x020 (  W) Interrupt Clear Register         */
  __IO uint32_t DR;                        /*!< Offset 0x024 (R/W) Data Register              */
  __I  uint32_t DBR;                       /*!< Offset 0x028 (R  ) Data Buffer Register           */
  __I  uint32_t CVR;                       /*!< Offset 0x02C  (R  )Counter Value Register           */
} S3FM_FRT_TypeDef;
/*@}*/ /* end of group S3FM02G_FRT */



/** General Purpose IO *****/
/*------------- General Purpose IO (GPIO) ---------------------------*/
/** @addtogroup S3FM02G_GPIO (GPIO)
  @{
*/
typedef struct
{
  __I  uint32_t IDR;                       /*! <Offset 0x000 (R  ) ID Register              */
  __IO uint32_t CEDR;                      /*! <Offset 0x004 (R/W) Clock Enable/Disable Register  */
  __O  uint32_t SRR;                       /*! <Offset 0x008 (  W) Software Reset Register        */
  __IO uint32_t IMSCR;                     /*! <Offset 0x00C (R/W) Interrupt Mask Set/Clear Register          */
  __I  uint32_t RISR;                      /*! <Offset 0x010  (R  )  Raw Interrupt Status Register         */
  __I  uint32_t MISR;                      /*! <Offset 0x014  (R  )  Masked Interrupt Status Register            */
  __O  uint32_t ICR;                       /*! <Offset 0x018  (  W)  Interrupt Clear Register                    */
  __O  uint32_t OER;                       /*! <Offset 0x01C  (  W)  Output Enable Register       */
  __O  uint32_t ODR;                       /*! <Offset 0x020 (  W) Output Disable Register      */
  __I  uint32_t OSR;                       /*! <Offset 0x024 (R  ) Output Status Register       */
  __O  uint32_t WODR;                      /*! <Offset 0x028 (  W) Output Enable Register       */
  __O  uint32_t SODR;                      /*! <Offset 0x02C (  W) Output Disable Register      */
  __O  uint32_t CODR;                      /*! <Offset 0x030 (  W) Output Status Register       */
  __I  uint32_t ODSR;                      /*! <Offset 0x034 (R  ) Output Enable Register       */
  __I  uint32_t PDSR;                      /*! <Offset 0x038 (R  ) Output Disable Register      */
} S3FM_GPIO_TypeDef;
/*@}*/ /* end of group S3FM02G_GPIO */



/** INTER-INTERGRATED CIRCUIT *****/
/*------------- INTER-INTERGRATED CIRCUIT (I2C) ---------------------------*/
/** @addtogroup S3FM02G_I2C (I2C)
  @{
*/
typedef struct
{
  __I  uint32_t IDR;                       /*!< Offset 0x000 (R  ) ID Register                             */
  __IO uint32_t CEDR;                      /*!< Offset 0x004 (R/W) Clock Enable/Disable Register    */
  __O  uint32_t SRR;                       /*!< Offset 0x008 (  W) Software Reset Register           */
  __IO uint32_t CR;                        /*!< Offset 0x00C (R/W) Control Register                       */
  __IO uint32_t MR;                        /*!< Offset 0x010 (R/W) Mode Register                          */
  __I  uint32_t SR;                        /*!< Offset 0x014 (R  ) Status Register                        */
  __IO uint32_t IMSCR;                     /*!< Offset 0x018 (R/W) Interrupt Mask Set/Clear Register   */
  __I  uint32_t RISR;                      /*!< Offset 0x01C (R  ) Raw Interrupt Status Register        */
  __I  uint32_t MISR;                      /*!< Offset 0x020 (R  ) Masked Interrupt Status Register    */
  __O  uint32_t ICR;                       /*!< Offset 0x024 (  W) Interrupt Clear Register             */
  __IO uint32_t SDR;                       /*!< Offset 0x028 (R/W) Serial Data Register                   */
  __IO uint32_t SSAR;                      /*!< Offset 0x02C (R/W) Serial Slave Address Register          */
  __IO uint32_t HSDR;                      /*!< Offset 0x030 (R/W) Hold/Setup Delay Register              */
  __IO uint32_t DMACR;                     /*!< Offset 0x034 (R/W) DMA Control Register                 	*/
} S3FM_I2C_TypeDef;
/*@}*/ /* end of group S3FM02G_I2C */




/** INVERTER MOTOR CONTROLLER *****/
/*------------- INVERTER MOTOR CONTROLLER (IMC) ---------------------------*/
/** @addtogroup S3FM02G_IMC (IMC)
  @{
*/
typedef struct
{
  __I  uint32_t IDR;                       /*!< Offset 0x000(R  ) ID Register                        */
  __IO uint32_t CEDR;                      /*!< Offset 0x004(R/W) Clock Enable/Disable Register         */
  __O  uint32_t SRR;                       /*!< Offset 0x008(  W) Software Reset Register               */
  __IO uint32_t CR0;                       /*!< Offset 0x00C(R/W) Inverter Motor Control Register 0     */
  __IO uint32_t CR1;                       /*!< Offset 0x010(R/W) Inverter Motor Control Register 1     */
  __I  uint32_t CNTR;                      /*!< Offset 0x014(R  ) Inverter motor Counter Register       */
  __IO uint32_t SR;                        /*!< Offset 0x018(R/W) Inverter Motor Status Register        */
  __IO uint32_t IMSCR;                     /*!< Offset 0x01C(R/W) Interrupt Mask Set/Clear Register     */
  __I  uint32_t RISR;                      /*!< Offset 0x020(R  ) Raw Interrupt Status Register         */
  __I  uint32_t MISR;                      /*!< Offset 0x024(R  ) Masked Interrupt Status Register      */
  __O  uint32_t ICR;                       /*!< Offset 0x028(  W) Interrupt Clear Register              */
  __IO uint32_t TCR;                       /*!< Offset 0x02C(R/W) Top Compare Register                  */
  __IO uint32_t DTCR;                      /*!< Offset 0x030(R/W) Deadtime compare Register             */
  __IO uint32_t PACRR;                     /*!< Offset 0x034(R/W) Phase A compare register for Rising   */
  __IO uint32_t PBCRR;                     /*!< Offset 0x038(R/W) Phase B compare register for Rising   */
  __IO uint32_t PCCRR;                     /*!< Offset 0x03C(R/W) Phase C compare register for Rising   */
  __IO uint32_t PACFR;                     /*!< Offset 0x040(R/W) Phase A compare register for Falling  */
  __IO uint32_t PBCFR;                     /*!< Offset 0x044(R/W) Phase B compare register for Falling  */
  __IO uint32_t PCCFR;                     /*!< Offset 0x048(R/W) Phase C compare register for Falling  */
  __IO uint32_t ASTSR;                     /*!< Offset 0x04C(R/W) ADC Start Signal Select Register      */
  __IO uint32_t ASCRR0;                    /*!< Offset 0x050(R/W) ADC Start Compare Register of Rising0 */
  __IO uint32_t ASCRR1;                    /*!< Offset 0x054(R/W) ADC Start Compare Register of Rising1 */
  __IO uint32_t ASCRR2;                    /*!< Offset 0x058(R/W) ADC Start Compare Register of Rising2 */
  __IO uint32_t ASCFR0;                    /*!< Offset 0x05C(R/W) ADC Start Compare Register of Falling0*/
  __IO uint32_t ASCFR1;                    /*!< Offset 0x060(R/W) ADC Start Compare Register of Falling1*/
  __IO uint32_t ASCFR2;                    /*!< Offset 0x064(R/W) ADC Start Compare Register of Falling2*/
} S3FM_IMC_TypeDef;
/*@}*/ /* end of group S3FM02G_IMC */



/** I/O CONFIGURATION *****/
/*------------- I/O CONFIGURATION (IOCONF) ---------------------------*/
/** @addtogroup S3FM02G_IOCONF (IOCONF)
  @{
*/
typedef struct
{
 __IO uint32_t MLR0;                       /*!< Offset 0x000( R/W)  Mode Low Register */ 
 __IO uint32_t MHR0;                       /*!< Offset 0x004(R/W)  Mode High Register */
 __IO uint32_t PUCR0;                      /*!< Offset 0x008((R/W) Pull-Up Control Register*/
 __IO uint32_t ODCR0;                      /*!< Offset 0x00C(R/W) Open-Drain Control Register*/
 __IO uint32_t MLR1;                       /*!< Offset 0x010(R/W) Mode Low Register*/
 __IO uint32_t MHR1;                       /*!< Offset 0x014(R/W) Mode High Register*/
 __IO uint32_t PUCR1;                      /*!< Offset 0x018(R/W) Pull-Up Control Register*/
 __IO uint32_t ODCR1;                      /*!< Offset 0x01C(R/W) Open-Drain Control Register*/
 __IO uint32_t MLR2;                       /*!< Offset 0x020((R/W) Mode Low Register */
 __IO uint32_t MHR2;                       /*!< Offset 0x024((R/W)  Mode High Register */
 __IO uint32_t PUCR2;                      /*!< Offset 0x028((R/W) Pull-Up Control Register */
 __IO uint32_t ODCR2;                      /*!< Offset 0x02C(R/W) Open-Drain Control Register */
 __IO uint32_t MLR3;                       /*!< Offset 0x030(R/W) Mode Low Register */
      uint32_t Reserved;                                     
 __IO uint32_t PUCR3;                      /*!< Offset 0x038(R/W) Pull-Up Control Register */
 __IO uint32_t ODCR3;                      /*!< Offset 0x03C(R/W) Open-Drain Control Register */
} S3FM_IOCONF_TypeDef;
/*@}*/ /* end of group S3FM02G_IOCONF */


/** LCD CONTROLLER *****/
/*------------- LCD CONTROLLER (LCDC) ---------------------------*/
/** @addtogroup S3FM02G_LCDC (LCDC)
  @{
*/
typedef struct
{ 
  __I  uint32_t IDR;                      /*!< Offset 0x000(R  ) ID Register                             */
  __IO uint32_t CEDR;                     /*!< Offset 0x004(R/W) Clock Enable/Disable Register    */
  __O  uint32_t SRR;                      /*!< Offset 0x008(  W) Software Reset Register           */
  __IO uint32_t CR;                       /*!< Offset 0x00C(R/W) Control Register                      */
  __IO uint32_t CDR;                      /*!< Offset 0x010(R/W) Clock Divider Register              */
      uint32_t Reserved[251];             
  __IO uint32_t DMR[40];                  /*!< Offset 0x400(R/W) LCD Display Memory Register    */
} S3FM_LCDC_TypeDef;
/*@}*/ /* end of group S3FM02G_LCDC */



/** OPERATIONAL AMPLIFIER *****/
/*------------- OPERATIONAL AMPLIFIER (OPAMP) ---------------------------*/
/** @addtogroup S3FM02G_OPAMP (OPAMP)
  @{
*/
typedef struct
{ 
  __I  uint32_t IDR;                      /*!< Offset 0x000(R  ) OP-AMP ID Register                   */
  __IO uint32_t CEDR;                     /*!< Offset 0x004(R/W) OP-AMP Clock Enable/Disable Register */
  __O  uint32_t SRR;                      /*!< Offset 0x008(  W) OP-AMP Software Reset Register       */
  __IO uint32_t CR0;                      /*!< Offset 0x00C(R/W) OP-AMP Control Register 0            */
  __IO uint32_t CR1;                      /*!< Offset 0x010(R/W) OP-AMP Control Register 1            */
  __IO uint32_t GCR0;                     /*!< Offset 0x014(R/W) OP-AMP Gain Control Register 0       */
  __IO uint32_t GCR1;                     /*!< Offset 0x018(R/W) OP-AMP Gain Control Register 1       */
  __IO uint32_t IMSCR;                    /*!< Offset 0x01C(R/W) Interrupt Mask Set/Clear Register    */
  __IO uint32_t RISR;                     /*!< Offset 0x020(R/W) Raw Interrupt Status Register        */
  __IO uint32_t MISR;                     /*!< Offset 0x024(R/W) Masked Interrupt Status Register     */
  __IO uint32_t ICR;                      /*!< Offset 0x028(R/W) Interrupt Clear Register             */
} S3FM_OPAMP_TypeDef;
/*@}*/ /* end of group S3FM02G_OPAMP */



/** PROGRAM FLASH CONTROLLER *****/
/*------------- PROGRAM FLASH CONTROLLER (PFC) ---------------------------*/
/** @addtogroup S3FM02G_PFC (PFC)
  @{
*/
typedef struct
{
  __I  uint32_t IDR;                      /*!< Offset 0x000(R  ) ID Register               */
  __IO uint32_t CEDR;                     /*!< Offset 0x004(R/W) Clock Enable/Disable Register                  */
  __O  uint32_t SRR;                      /*!< Offset 0x008(  W) Software Reset Register          */
  __IO uint32_t CR;                       /*!< Offset 0x00C(R/W) Control Register                */
  __IO uint32_t MR;                       /*!< Offset 0x010(R/W) Mode Register      */
  __IO uint32_t IMSCR;                    /*!< Offset 0x014(R/W) Interrupt Mask Set/Clear Register */
  __I  uint32_t RISR;                     /*!< Offset 0x018(R  ) Raw Interrupt Status Register */
  __I  uint32_t MISR;                     /*!< Offset 0x01C(R  ) Masked Interrupt Status Register   */
  __O  uint32_t ICR;                      /*!< Offset 0x020(  W) Interrupt Clear Register     */
  __I  uint32_t SR;                       /*!< Offset 0x024(R  ) Address Register        */
  __IO uint32_t AR;                       /*!< Offset 0x028(R/W) Address Register        */
  __IO uint32_t DR;                       /*!< Offset 0x02C(R/W) Data Register        */
  __O  uint32_t KR;                       /*!< Offset 0x030(  W) Key Register        */
  __I  uint32_t SO_PSR;                   /*!< Offset 0x034(R  ) Smart Option Protection Status Register        */
  __I  uint32_t SO_CSR;                   /*!< Offset 0x038(R  ) Smart Option Configuration Status Register */
  __IO uint32_t PF_IOTR;                  /*!< Offset 0x03C(R/W) Internal OSC Trimming Register        */
} S3FM_PFC_TypeDef;
/*@}*/ /* end of group S3FM02G_PFC */




/** PULSE WIDTH MODULATION (PWM) *****/
/*------------- PULSE WIDTH MODULATION (PWM) ---------------------------*/
/** @addtogroup S3FM02G_PWM (PWM)
  @{
*/
typedef struct
{
  __I  uint32_t IDR;                      /*!< Offset 0x000 (R  ) ID Register                                      */
  __IO uint32_t CEDR;                     /*!< Offset 0x004 (R/W) Clock Enable/Disable Register             */
  __O  uint32_t SRR;                      /*!< Offset 0x008 (  W) Software Reset Register                    */
  __O  uint32_t CSR;                      /*!< Offset 0x00C (  W) Control Set Register               */
  __O  uint32_t CCR;                      /*!< Offset 0x010 (  W) Control Clear Register             */
  __I  uint32_t SR;                       /*!< Offset 0x014 (R  ) Status Register                    */
  __IO uint32_t IMSCR;                    /*!< Offset 0x018 (R/W) Interrupt Mask Set/Clear Register  */
  __I  uint32_t RISR;                     /*!< Offset 0x01C (R  ) Raw Interrupt Status Register      */
  __I  uint32_t MISR;                     /*!< Offset 0x020 (R  ) Masked Interrupt Status Register   */
  __O  uint32_t ICR;                      /*!< Offset 0x024 (  W) Interrupt Clear Register           */
  __IO uint32_t CDR;                      /*!< Offset 0x028 (R/W) Clock Divider Register             */
  __IO uint32_t PRDR;                     /*!< Offset 0x02C (R/W) Period Register                    */
  __IO uint32_t PULR;                     /*!< Offset 0x030 (R/W) Pulse Register                       */
  __I  uint32_t CCDR;                     /*!< Offset 0x034 (R  ) Current Clock Divider Register     */
  __I  uint32_t CPRDR;                    /*!< Offset 0x038 (R  ) Current Period Register            */
  __I  uint32_t CPULR;                    /*!< Offset 0x03C (R  ) Current Pulse Register       */
} S3FM_PWM_TypeDef;
/*@}*/ /* end of group S3FM02G_PWM */



/** SERIAL PERIPHERAL INTERFACE (SPI) *****/
/*------------- SERIAL PERIPHERAL INTERFACE (SPI) ---------------------------*/
/** @addtogroup S3FM02G_SPI (SPI)
  @{
*/
typedef struct
{
  __IO uint32_t CR0;                      /*!< Offset 0x000(R/W) Control Register 0 */
  __IO uint32_t CR1;                      /*!< Offset 0x004(R/W) Control Register 1 */
  __IO uint32_t DR;                       /*!< Offset 0x008(R/W) Receive FIFO(read) and transmit FIFO data register(write) */
  __I  uint32_t SR;                       /*!< Offset 0x00C(R  ) Status register */
  __IO uint32_t CPSR;                     /*!< Offset 0x010(R/W) Clock prescale register */
  __IO uint32_t IMSCR;                    /*!< Offset 0x014(R/W) Interrupt mask set and clear register */
  __I  uint32_t RISR;                     /*!< Offset 0x018(R  ) Raw interrupt status register */
  __I  uint32_t MISR;                     /*!< Offset 0x01C(R  ) Masked interrupt status register */
  __O  uint32_t ICR;                      /*!< Offset 0x020(  W) Interrupt clear register */
  __IO uint32_t DMACR;                    /*!< Offset 0x024(R/W) DMA control register */
} S3FM_SSP_TypeDef;
/*@}*/ /* end of group S3FM02G_SPI */




/** STAMP TIMER (STT) *****/
/*------------- STAMP TIMER (STT) ---------------------------*/
/** @addtogroup S3FM02G_STT (STT)
  @{
*/
typedef struct
{
  __I  uint32_t  IDR;                     /*!< Offset 0x000 (R  ) ID Register             */
  __IO uint32_t  CEDR;                    /*!< Offset 0x004 (R/W) Clock Enable/Disable Register  */
  __O  uint32_t  SRR;                     /*!< Offset 0x008 (  W) Software Reset Register        */
  __O  uint32_t  CR;                      /*!< Offset 0x00C (  W) Control Register                   */
  __IO uint32_t  MR;                      /*!< Offset 0x010 (R/W) Mode Register                      */
  __IO uint32_t  IMSCR;                   /*!< Offset 0x014 (R/W) Interrupt Mask Set/Clear Register          */
  __I  uint32_t  RISR;                    /*!< Offset 0x018 (R  ) Raw Interrupt Status Register         */
  __I  uint32_t  MISR;                    /*!< Offset 0x01C (R  ) Masked Interrupt Status Register            */
  __O  uint32_t  ICR;                     /*!< Offset 0x020 (  W) Interrupt Clear Register                    */
  __I  uint32_t  SR;                      /*!< Offset 0x024 (R  ) Status Register                    */
  __IO uint32_t  CNTR;                    /*!< Offset 0x028 (R/W) Counter Register                   */
  __IO uint32_t  ALR;                     /*!< Offset 0x02C (R/W) Alarm Register                     */
} S3FM_STT_TypeDef;
/*@}*/ /* end of group S3FM02G_STT */




/** TIMER/COUNTER (TC16) *****/
/*------------- TIMER/COUNTER (TC16) ---------------------------*/
/** @addtogroup S3FM02G_TC16 (TC16)
  @{
*/
typedef struct
{
  __I  uint32_t IDR;                      /*!< Offset 0x000 (R  ) ID Register */
  __IO uint32_t CSSR;                     /*!< Offset 0x004 (R/W) Clock Source Selection Register */
  __IO uint32_t CEDR;                     /*!< Offset 0x008 (R/W) Clock Enable/Disable Register */
  __O  uint32_t SRR;                      /*!< Offset 0x00C (  W) Software Reset Register  */
  __O  uint32_t CSR;                      /*!< Offset 0x010 (  W) Control Set Register */
  __O  uint32_t CCR;                      /*!< Offset 0x014 (  W) Control Clear Register */
  __I  uint32_t SR;                       /*!< Offset 0x018 (R  ) Status Register  */
  __IO uint32_t IMSCR;                    /*!< Offset 0x01C (R/W) Interrupt Mask Set/Clear Register */
  __I  uint32_t RISR;                     /*!< Offset 0x020 (R  ) Raw Interrupt Status Register */
  __I  uint32_t MISR;                     /*!< Offset 0x024 (R  ) Masked Interrupt Status Register */
  __O  uint32_t ICR;                      /*!< Offset 0x028 (  W) Interrupt Clear Register */
  __IO uint32_t CDR;                      /*!< Offset 0x02C (R/W) Clock Divider Register */
  __IO uint32_t CSMR ;                    /*!< Offset 0x030 (R/W) Counter Size Mask Register */
  __IO uint32_t PRDR ;                    /*!< Offset 0x034 (R/W) Period Register  */
  __IO uint32_t PULR ;                    /*!< Offset 0x038 (R/W) Pulse Register  */
  __I  uint32_t CCDR ;                    /*!< Offset 0x03C (R  ) Current Clock Divider Register */
  __I  uint32_t CCSMR;                    /*!< Offset 0x040 (R  ) Current Counter Size Mask Register */
  __I  uint32_t CPRDR;                    /*!< Offset 0x044 (R  ) Current Period Register  */
  __I  uint32_t CPULR;                    /*!< Offset 0x048 (R  ) Current Pulse Register */
  __I  uint32_t CUCR ;                    /*!< Offset 0x04C (R  ) Capture Up Count Register */
  __I  uint32_t CDCR ;                    /*!< Offset 0x050 (R  ) Capture Down Count Register  */
  __I  uint32_t CVR;                      /*!< Offset 0x054 (R  ) Counter Value Register */
} S3FM_TC16_TypeDef;
/*@}*/ /* end of group S3FM02G_TC16 */



/** UNIVERAL SYNC/ASYNC RECEIVER/TRANSMITTER(USART) *****/
/*------------- UNIVERAL SYNC/ASYNC RECEIVER/TRANSMITTER(USART) ---------------------------*/
/** @addtogroup S3FM02G_USART (USART)
  @{
*/
 typedef struct
 {
  __I  uint32_t IDR;                      /*!< Offset 0x000 (R  )ID Register            */
  __IO uint32_t CEDR;                     /*!< Offset 0x004 (R/W)Clock Enable/Disable Register  */
  __O  uint32_t SRR;                      /*!< Offset 0x008 (  W)Software Reset Register        */
  __O  uint32_t CR;                       /*!< Offset 0x00C (  W)Control Register                */
  __IO uint32_t MR;                       /*!< Offset 0x010 (R/W)Mode Register                   */
  __IO uint32_t IMSCR;                    /*!< Offset 0x014 (R/W)Interrupt Set/Clear Register       */
  __I  uint32_t RISR;                     /*!< Offset 0x018 (R  )Raw Interrupt Status Register      */
  __I  uint32_t MISR;                     /*!< Offset 0x01C (R  )Masked Interrupt Status Register   */
  __O  uint32_t ICR;                      /*!< Offset 0x020 (  W)Clear Status Register              */
  __I  uint32_t SR;                       /*!< Offset 0x024 (R  )Status Register                 */
  __I  uint32_t RHR;                      /*!< Offset 0x028 (R  )Receiver Holding Register       */
  __O  uint32_t THR;                      /*!< Offset 0x02C (  W)Transmit Holding Register       */
  __IO uint32_t BRGR;                     /*!< Offset 0x030 (R/W)Baud Rate Generator Register    */
  __IO uint32_t RTOR;                     /*!< Offset 0x034 (R/W)Receiver Time-out Register      */
  __IO uint32_t TTGR;                     /*!< Offset 0x038 (R/W)Transmitter Time-guard Register */
  __IO uint32_t LIR;                      /*!< Offset 0x03C (R/W)LIN Identifier Register         */
  __IO uint32_t DFWR0;                    /*!< Offset 0x040 (R/W)Data Field Write 0 Register     */
  __IO uint32_t DFWR1;                    /*!< Offset 0x044 (R/W)Data Field Write 1 Register     */
  __I  uint32_t DFRR0;                    /*!< Offset 0x048 (R  )Data Field Read 0 Register      */
  __I  uint32_t DFRR1;                    /*!< Offset 0x04C (R  )Data Field Read 1 Register      */
  __IO uint32_t SBLR;                     /*!< Offset 0x050 (R/W)Sync Break Length Register      */
  __IO uint32_t LCP1;                     /*!< Offset 0x054 (R/W)Limit counter protocol 1        */
  __IO uint32_t LCP2;                     /*!< Offset 0x058 (R/W)Limit counter protocol 2        */
  __IO uint32_t DMACR;                    /*!< Offset 0x05C (R/W)DMA Control Register            */
 } S3FM_USART_TypeDef;
/*@}*/ /* end of group S3FM02G_USART */


/** WATCHDOG TIMER(WDT) *****/
/*------------- WATCHDOG TIMER(WDT) ---------------------------*/
/** @addtogroup S3FM02G_WDT (WDT)
  @{
*/
typedef struct
{
  __I  uint32_t IDR;                      /*!< Offset 0x000 (R  ) ID Register                        */
  __O  uint32_t CR;                       /*!< Offset 0x004 (  W) Control Register                   */
  __IO uint32_t MR;                       /*!< Offset 0x008 (R/W) Mode Register                      */
  __IO uint32_t OMR;                      /*!< Offset 0x00C (R/W) Overflow Mode Register             */
  __I  uint32_t SR;                       /*!< Offset 0x010 (R  ) Status Register                    */
  __IO uint32_t IMSCR;                    /*!< Offset 0x014 (R/W) Interrupt Set/Clear Register       */
  __I  uint32_t RISR;                     /*!< Offset 0x018 (R  ) Raw Interrupt Status Register      */
  __I  uint32_t MISR;                     /*!< Offset 0x01C (R  ) Masked Interrupt Status Register   */
  __O  uint32_t ICR;                      /*!< Offset 0x020 (  W) Clear Status Register              */
  __IO uint32_t PWR;                      /*!< Offset 0x024 (R/W) Pending Window Register            */
  __I  uint32_t CTR;                      /*!< Offset 0x028 (R  ) Counter Test Register              */
} S3FM_WDT_TypeDef;
/*@}*/ /* end of group S3FM02G_WDT */


/******************************************************************************/
/*                         Peripheral declaration                             */
/******************************************************************************/


/** Peripheral  base address                                                 */
#define PSEL0_BASE_ADDRESS           (0x40000000UL)

/** SFM base address                                                         */
#define SFM_BASE_ADDRESS             (PSEL0_BASE_ADDRESS + 0x00000)

/** Memory part                                                            */
#define MEM_BASE_ADDRESS             (PSEL0_BASE_ADDRESS + 0x10000)
#define IFC0_BASE_ADDRESS            (MEM_BASE_ADDRESS + 0x0000)

/** System part                                                            */
#define SYS_BASE_ADDRESS             (PSEL0_BASE_ADDRESS + 0x20000)
#define CM0_BASE_ADDRESS             (SYS_BASE_ADDRESS + 0x0000)

/** Watchdog Timer & Free Running Timer Part                                */
#define WDT_BASE_ADDRESS             (PSEL0_BASE_ADDRESS + 0x30000)
#define WDT0_BASE_ADDRESS            (WDT_BASE_ADDRESS + 0x0000)
#define FRT0_BASE_ADDRESS            (WDT_BASE_ADDRESS + 0x1000)

/** ADC & DAC & OP-AMP part                                                               */
#define ADC_BASE_ADDRESS             (PSEL0_BASE_ADDRESS + 0x40000)
#define ADC0_BASE_ADDRESS            (ADC_BASE_ADDRESS + 0x0000)
#define ADC1_BASE_ADDRESS            (ADC_BASE_ADDRESS + 0x1000)

/** OP-AMP part                                                               */
#define OPAMP_BASE_ADDRESS           (PSEL0_BASE_ADDRESS + 0x42000)
#define OPAMP0_BASE_ADDRESS          (OPAMP_BASE_ADDRESS + 0x0000)

/** GPIO part                                                              */
#define GPIO_BASE_ADDRESS            (PSEL0_BASE_ADDRESS + 0x50000)
#define GPIO0_BASE_ADDRESS           (GPIO_BASE_ADDRESS + 0x0000)
#define GPIO1_BASE_ADDRESS           (GPIO_BASE_ADDRESS + 0x1000)
#define GPIO2_BASE_ADDRESS           (GPIO_BASE_ADDRESS + 0x2000)
#define GPIO3_BASE_ADDRESS           (GPIO_BASE_ADDRESS + 0x3000)
#define IOCONF0_BASE_ADDRESS         (GPIO_BASE_ADDRESS + 0x8000)
/** Timer part                                                          */
#define TC_BASE_ADDRESS              (PSEL0_BASE_ADDRESS + 0x60000)
#define TC0_BASE_ADDRESS             (TC_BASE_ADDRESS + 0x0000)
#define TC1_BASE_ADDRESS             (TC_BASE_ADDRESS + 0x1000)
#define TC2_BASE_ADDRESS             (TC_BASE_ADDRESS + 0x2000)
#define TC3_BASE_ADDRESS             (TC_BASE_ADDRESS + 0x3000)
#define TC4_BASE_ADDRESS             (TC_BASE_ADDRESS + 0x4000)
#define TC5_BASE_ADDRESS             (TC_BASE_ADDRESS + 0x5000)
#define TC6_BASE_ADDRESS             (TC_BASE_ADDRESS + 0x6000)
#define TC7_BASE_ADDRESS             (TC_BASE_ADDRESS + 0x7000)
#define STT0_BASE_ADDRESS            (PSEL0_BASE_ADDRESS + 0x78000)

/**  PWM                                            */
#define PWM_BASE_ADDRESS             (PSEL0_BASE_ADDRESS + 0x70000)
#define PWM0_BASE_ADDRESS            (PWM_BASE_ADDRESS + 0x0000)
#define PWM1_BASE_ADDRESS            (PWM_BASE_ADDRESS + 0x1000)
#define PWM2_BASE_ADDRESS            (PWM_BASE_ADDRESS + 0x2000)
#define PWM3_BASE_ADDRESS            (PWM_BASE_ADDRESS + 0x3000)
#define PWM4_BASE_ADDRESS            (PWM_BASE_ADDRESS + 0x4000)
#define PWM5_BASE_ADDRESS            (PWM_BASE_ADDRESS + 0x5000)
#define PWM6_BASE_ADDRESS            (PWM_BASE_ADDRESS + 0x6000)
#define PWM7_BASE_ADDRESS            (PWM_BASE_ADDRESS + 0x7000)

/**  USART part                                                             */
#define USART_BASE_ADDRESS           (PSEL0_BASE_ADDRESS + 0x80000)
#define USART0_BASE_ADDRESS          (USART_BASE_ADDRESS + 0x0000)
#define USART1_BASE_ADDRESS          (USART_BASE_ADDRESS + 0x1000)
#define USART2_BASE_ADDRESS          (USART_BASE_ADDRESS + 0x2000)
#define USART3_BASE_ADDRESS          (USART_BASE_ADDRESS + 0x3000)

/**  SPI part                                                              */
#define SSP_BASE_ADDRESS             (PSEL0_BASE_ADDRESS + 0x90000)
#define SSP0_BASE_ADDRESS            (SSP_BASE_ADDRESS + 0x0000)
#define SSP1_BASE_ADDRESS            (SSP_BASE_ADDRESS + 0x1000)

/**  I2C part                                                              */
#define I2C_BASE_ADDRESS             (PSEL0_BASE_ADDRESS + 0xA0000)
#define I2C0_BASE_ADDRESS            (I2C_BASE_ADDRESS + 0x0000)
#define I2C1_BASE_ADDRESS            (I2C_BASE_ADDRESS + 0x1000)

/** IMC part                                                               */
#define IMC_BASE_ADDRESS             (PSEL0_BASE_ADDRESS + 0xB0000)
#define IMC0_BASE_ADDRESS            (IMC_BASE_ADDRESS + 0x0000)

#define IMC1_BASE_ADDRESS            (IMC_BASE_ADDRESS + 0x1000)
#define IMC1_OFFSET                  (IMC1_BASE_ADDRESS - IMC0_BASE_ADDRESS)

/** ENC part                                                               */
#define ENC_BASE_ADDRESS             (PSEL0_BASE_ADDRESS + 0xC0000)
#define ENC0_BASE_ADDRESS            (ENC_BASE_ADDRESS + 0x0000)
#define ENC1_BASE_ADDRESS            (ENC_BASE_ADDRESS + 0x1000)
/** LCDC part                                                               */
#define LCDC_BASE_ADDRESS            (PSEL0_BASE_ADDRESS + 0xD0000)
#define LCDC0_BASE_ADDRESS           (LCDC_BASE_ADDRESS + 0x0000)

/**  CAN part                                                              */
#define CAN_BASE_ADDRESS             (PSEL0_BASE_ADDRESS + 0xE0000)
#define CAN0_BASE_ADDRESS            (CAN_BASE_ADDRESS + 0x0000)
#define CAN1_BASE_ADDRESS            (CAN_BASE_ADDRESS + 0x1000)

/** DMA part                                                               */
#define DMA_BASE_ADDRESS             (PSEL0_BASE_ADDRESS + 0xF0000)
#define DMA0_BASE_ADDRESS            (DMA_BASE_ADDRESS + 0x0000)

/** DFC part                                                              */
#define DFC_BASE_ADDRESS             (PSEL0_BASE_ADDRESS + 0x11000)
#define DFC0_BASE_ADDRESS            (DFC_BASE_ADDRESS + 0x0000)
/** PFC part                                                              */
#define PFC_BASE_ADDRESS             (PSEL0_BASE_ADDRESS + 0x10000)
#define PFC0_BASE_ADDRESS            (PFC_BASE_ADDRESS + 0x0000)

#define S3FM_ADC0                    ((S3FM_ADC0_TypeDef   *) ADC0_BASE_ADDRESS   )
#define S3FM_ADC1                    ((S3FM_ADC1_TypeDef   *) ADC1_BASE_ADDRESS   )
#define S3FM_CAN0                    ((S3FM_CAN_TypeDef    *) CAN0_BASE_ADDRESS   )
#define S3FM_CAN1                    ((S3FM_CAN_TypeDef    *) CAN1_BASE_ADDRESS   )
#define S3FM_CM                      ((S3FM_CM_TypeDef     *) CM0_BASE_ADDRESS    )
#define S3FM_DMAC                    ((S3FM_DMAC_TypeDef   *) DMA0_BASE_ADDRESS   )
#define S3FM_DFC                     ((S3FM_DFC_TypeDef    *) DFC0_BASE_ADDRESS   )
#define S3FM_PFC                     ((S3FM_PFC_TypeDef    *) PFC0_BASE_ADDRESS   )
#define S3FM_ENC0                    ((S3FM_ENC_TypeDef    *) ENC0_BASE_ADDRESS   )
#define S3FM_ENC1                    ((S3FM_ENC_TypeDef    *) ENC1_BASE_ADDRESS   )
#define S3FM_FRT0                    ((S3FM_FRT_TypeDef    *) FRT0_BASE_ADDRESS   )
#define S3FM_GPIO0                   ((S3FM_GPIO_TypeDef   *) GPIO0_BASE_ADDRESS  )
#define S3FM_GPIO1                   ((S3FM_GPIO_TypeDef   *) GPIO1_BASE_ADDRESS  )
#define S3FM_GPIO2                   ((S3FM_GPIO_TypeDef   *) GPIO2_BASE_ADDRESS  )
#define S3FM_GPIO3                   ((S3FM_GPIO_TypeDef   *) GPIO3_BASE_ADDRESS  )
#define S3FM_I2C0                    ((S3FM_I2C_TypeDef    *) I2C0_BASE_ADDRESS   )
#define S3FM_I2C1                    ((S3FM_I2C_TypeDef    *) I2C1_BASE_ADDRESS   )
#define S3FM_IMC0                    ((S3FM_IMC_TypeDef    *) IMC0_BASE_ADDRESS   )
#define S3FM_IMC1                    ((S3FM_IMC_TypeDef    *) IMC1_BASE_ADDRESS   )
#define S3FM_IOCONF                  ((S3FM_IOCONF_TypeDef *) IOCONF0_BASE_ADDRESS)
#define S3FM_LCDC                    ((S3FM_LCDC_TypeDef   *) LCDC0_BASE_ADDRESS  )
#define S3FM_OPAMP                   ((S3FM_OPAMP_TypeDef  *) OPAMP0_BASE_ADDRESS )
#define S3FM_PWM0                    ((S3FM_PWM_TypeDef    *) PWM0_BASE_ADDRESS   )
#define S3FM_PWM1                    ((S3FM_PWM_TypeDef    *) PWM1_BASE_ADDRESS   )
#define S3FM_PWM2                    ((S3FM_PWM_TypeDef    *) PWM2_BASE_ADDRESS   )
#define S3FM_PWM3                    ((S3FM_PWM_TypeDef    *) PWM3_BASE_ADDRESS   )
#define S3FM_PWM4                    ((S3FM_PWM_TypeDef    *) PWM4_BASE_ADDRESS   )
#define S3FM_PWM5                    ((S3FM_PWM_TypeDef    *) PWM5_BASE_ADDRESS   )
#define S3FM_PWM6                    ((S3FM_PWM_TypeDef    *) PWM6_BASE_ADDRESS   )
#define S3FM_PWM7                    ((S3FM_PWM_TypeDef    *) PWM7_BASE_ADDRESS   )
#define S3FM_SSP0                    ((S3FM_SSP_TypeDef    *) SSP0_BASE_ADDRESS   )
#define S3FM_SSP1                    ((S3FM_SSP_TypeDef    *) SSP1_BASE_ADDRESS   )
#define S3FM_TC0                     ((S3FM_TC16_TypeDef   *) TC0_BASE_ADDRESS    )
#define S3FM_TC1                     ((S3FM_TC16_TypeDef   *) TC1_BASE_ADDRESS    )
#define S3FM_TC2                     ((S3FM_TC16_TypeDef   *) TC2_BASE_ADDRESS    )
#define S3FM_TC3                     ((S3FM_TC16_TypeDef   *) TC3_BASE_ADDRESS    )
#define S3FM_TC4                     ((S3FM_TC16_TypeDef   *) TC4_BASE_ADDRESS    )
#define S3FM_TC5                     ((S3FM_TC16_TypeDef   *) TC5_BASE_ADDRESS    )
#define S3FM_TC6                     ((S3FM_TC16_TypeDef   *) TC6_BASE_ADDRESS    )
#define S3FM_TC7                     ((S3FM_TC16_TypeDef   *) TC7_BASE_ADDRESS    )
#define S3FM_STT                     ((S3FM_STT_TypeDef    *) STT0_BASE_ADDRESS   )
#define S3FM_USART0                  ((S3FM_USART_TypeDef  *) USART0_BASE_ADDRESS )
#define S3FM_USART1                  ((S3FM_USART_TypeDef  *) USART1_BASE_ADDRESS  )
#define S3FM_USART2                  ((S3FM_USART_TypeDef  *) USART2_BASE_ADDRESS )
#define S3FM_USART3                  ((S3FM_USART_TypeDef  *) USART3_BASE_ADDRESS )
#define S3FM_WDT                     ((S3FM_WDT_TypeDef    *) WDT0_BASE_ADDRESS   )
                                     
#if defined ( __CC_ARM   )
#pragma no_anon_unions
#endif


#ifdef __cplusplus
}
#endif

#endif  /* __S3FM02G_H__ */