/******************************************************************************

     Copyright (C) 2005 Oki Electric Industry Co.,LTD.

     System Name  :  ML69Q6203 CPU Board
     Module Name  :  definition for registers
     File   Name  :  ML69Q6203.h
     Revision     :  01.00
     Date         :  2005/03/03      First version

******************************************************************************/
#ifndef ML69Q6203_H
#define ML69Q6203_H

#ifdef __cplusplus
extern "C" {
#endif

/*****************************************************/
/*    system control register                        */
/*****************************************************/
#define SCR_BASE        (0xB8000000)    /* base address */
#define IDR             (SCR_BASE+0x00) /* type and revision (RO,32,0x00000100) */
#define CLKSTP          (SCR_BASE+0x04) /* clock stop register (W,32,0x00000000) */
#define CGBCNT0         (SCR_BASE+0x08) /* clock(CGB) control register 0 (RW,32,0x00000000) */
#define CKWT            (SCR_BASE+0x0C) /* clock wait register (RW,32,0x000000FF) */
#define RMPCON          (SCR_BASE+0x10) /* remap control register (RW,32,0x00000000) */
#define CGBCNT1         (SCR_BASE+0x18) /* clock(CGB) control register 1 (RW,32,0x00000000) */
#define CGBCNT2         (SCR_BASE+0x1C) /* clock(CGB) control register 2 (RW,32,0x00000000) */

/* for IDR, CLKSTP, CGBCNT0, CKWT, RMPCON, CGBCNT1, CGBCNT2 registers */
#define SCR_UNLOCK      0x0000003c

/* bit field of CLKSTP register */
#define CLKSTP_SIO      (0x00000001)    /* SIO HALT */
#define CLKSTP_TIC      (0x00000002)    /* TIC HALT */
#define CLKSTP_HALT     (0x00000004)    /* CPU group HALT */
#define CLKSTP_STOP     (0x00000080)    /* STOPMODE */

/* bit field of CGBCNT0 register */
#define CGBCNT0_FCLKGEAR1   (0x00000000) /* CPUCLK  1 dividing : 120    MHz */
#define CGBCNT0_FCLKGEAR2   (0x00000001) /* CPUCLK  2 dividing :  60    MHz */
#define CGBCNT0_FCLKGEAR4   (0x00000002) /* CPUCLK  4 dividing :  30    MHz */
#define CGBCNT0_FCLKGEAR8   (0x00000003) /* CPUCLK  8 dividing :  15    MHz */
#define CGBCNT0_FCLKGEAR16  (0x00000004) /* CPUCLK 16 dividing :   7.5  MHz */
#define CGBCNT0_FCLKGEAR32  (0x00000005) /* CPUCLK 32 dividing :   3.75 MHz */
#define CGBCNT0_FCLKGEAR32K (0x00000007) /* CPUCLK                32    kHz */

/* bit field of CGBCNT0 register */
#define CGBCNT0_HCLKGEAR1   (0x00000000) /* CPUCLK/1 dividing : 120 MHz */
#define CGBCNT0_HCLKGEAR2   (0x00000008) /* CPUCLK/1 dividing : 120 MHz */
#define CGBCNT0_HCLKGEAR4   (0x00000080) /* CPUCLK/2 dividing :  60 MHz */
#define CGBCNT0_HCLKGEAR8   (0x00000088) /* CPUCLK/4 dividing :  30 MHz */

/* bit field of CGBCNT0 register */
#define CGBCNT0_CCLKGEAR1   (0x00000000) /* CPUCLK/1 dividing : 120    MHz */
#define CGBCNT0_CCLKGEAR32K (0x00000070) /* CPUCLK               32    kHz */

/* bit field of RMPCON register */
#define RMPCON_ENABLE   (0x00000008)    /* remap enabled */
#define RMPCON_DISABLE  (0x00000000)    /* remap disabled */
#define RMPCON_EXT      (0x00000000)    /* device space is external SRAM */
#define RMPCON_DRAM     (0x00000001)    /* device space is external SDRAM */
#define RMPCON_AHB      (0x00000002)    /* device space is AHBRAM*/

/*****************************************************************************
    CONFIG
*****************************************************************************/
#define CNFIG_BAS   0x80000000
#define PDMASK      (CNFIG_BAS+(0x00))  /* power down mask register (RW,32,0x00000000) */
#define MCKST       (CNFIG_BAS+(0x04))  /* dodule clock stop register (RW,32,0x00000000) */
#define PIOCTL      (CNFIG_BAS+(0x08))  /* chabge PIO function register (RW,32,0x00000000) */
#define I2SCNTL     (CNFIG_BAS+(0x0C))  /* I2S control register (RW,32,0x00000000) */
#define OCONFIG     (CNFIG_BAS+(0x10))  /* other configuration register (RW,32,0x00000000) */
#define TST         (CNFIG_BAS+(0x14))  /* ATD test register (RW,32,0x00000000) */

/* for MCKST, PIOCTL, I2SCNTL, OCONFIG, TST registers */
#define CNFIG_UNLOCK    0x0000003c

/* bit field of PDMASK */
#define PDMASK_PDMASK_EN  (0x0000)      /* power cut without RTC disable */
#define PDMASK_PDMASK_DIS (0x0001)      /* power cut without RTC disable */
    /* these are aliases */
#define PDMASK_RTC_DIS    (0x0000)      /* RTC disabled, can powerdown */
#define PDMASK_RTC_EN     (0x0001)      /* RTC enabled, can NOT powerdown */

/* bit field of MCKST */
#define MCKST_DMAC_EN     (0x0000)      /* supply DMAC clock to enable */
#define MCKST_DMAC_DIS    (0x0001)      /* supply DMAC clock to disable */
#define MCKST_DRAMC_EN    (0x0000)      /* supply DRAMC clock to enable */
#define MCKST_DRAMC_DIS   (0x0002)      /* supply DRAMC clock to disable */
#define MCKST_I2SSEND_EN  (0x0000)      /* supply I2S send clock enable */
#define MCKST_I2SSEND_DIS (0x0004)      /* supply I2S send clock disable */
#define MCKST_I2SSRCV_EN  (0x0000)      /* supply I2S receive clock enable */
#define MCKST_I2SSRCV_DIS (0x0008)      /* supply I2S receive clock disable */
#define MCKST_NFC_EN      (0x0000)      /* supply clock to NAND FLASH controller enable */
#define MCKST_NFC_DIS     (0x0010)      /* supply clock to NAND FLASH controller disable */
#define MCKST_NFB_EN      (0x0000)      /* supply clock to NAND FLASH Buffer memory enable */
#define MCKST_NFB_DIS     (0x0020)      /* supply clock to NAND FLASH Buffer memory disable */
#define MCKST_XSYSCLK_DIS (0x0000)      /* supply clock to XSYSCLK disable */
#define MCKST_XSYSCLK_EN  (0x0040)      /* supply clock to XSYSCLK enable */

/*****************************************************/
/*    interrupt control register                     */
/*****************************************************/
#define ICR_BASE    (0x78000000)        /* base address of interrupt control register */
#define IRQ         (ICR_BASE+0x00)     /* IRQ register (R,32,0x00000000) */
#define IRQS        (ICR_BASE+0x04)     /* IRQ soft register (RW,32,0x00000000) */
#define FIQ         (ICR_BASE+0x08)     /* FIQ register (R,32,0x00000000) */
#define FIQRAW      (ICR_BASE+0x0C)     /* FIQRAW status register (R,32,--)*/
#define FIQEN       (ICR_BASE+0x10)     /* FIQ enable register (RW,32,0x00000000)*/
#define IRN         (ICR_BASE+0x14)     /* IRQ number register (R,32,0x00000000)*/
#define CIL         (ICR_BASE+0x18)     /* current IRQ level register (RW,32,0x00000000)*/
#define ILC0        (ICR_BASE+0x20)     /* IRQ level control register 0 (RW,32,0x00000000) */
#define ILC1        (ICR_BASE+0x24)     /* IRQ level control register 1 (RW,32,0x00000000) */
#define CILCL       (ICR_BASE+0x28)     /* current IRQ level clear register (W,32,--) */
#define CILE        (ICR_BASE+0x2C)     /* current IRQ level encode register (R,32,0x00000000) */

#define EIC_BASE    (0x7BF00000)        /* base address */
#define IRCL        (EIC_BASE+0x04)     /* Extended interrupt Clear register (W,32,--) */
#define IRQA        (EIC_BASE+0x10)     /* Extended interrupt IRQ register (RW,32,0x00000000) */
#define IDM         (EIC_BASE+0x14)     /* Extended interrupt Mode control register (RW,32,0x00000000) */
#define ILC         (EIC_BASE+0x18)     /* Extended interrupt IRQ Level control register (RW,32,0x00000000) */

/* bit field of IRQ register */
#define IRQ_nIR0        (0x00000001)    /* nIR[0] */
#define IRQ_nIR1        (0x00000002)    /* nIR[1] */
#define IRQ_nIR2        (0x00000004)    /* nIR[2] */
#define IRQ_nIR3        (0x00000008)    /* nIR[3] */
#define IRQ_nIR4        (0x00000010)    /* nIR[4] */
#define IRQ_nIR5        (0x00000020)    /* nIR[5] */
#define IRQ_nIR6        (0x00000040)    /* nIR[6] */
#define IRQ_nIR7        (0x00000080)    /* nIR[7] */
#define IRQ_nIR8        (0x00000100)    /* nIR[8] */
#define IRQ_nIR9        (0x00000200)    /* nIR[9] */
#define IRQ_nIR10       (0x00000400)    /* nIR[10] */
#define IRQ_nIR11       (0x00000800)    /* nIR[11] */
#define IRQ_nIR12       (0x00001000)    /* nIR[12] */
#define IRQ_nIR13       (0x00002000)    /* nIR[13] */
#define IRQ_nIR14       (0x00004000)    /* nIR[14] */
#define IRQ_nIR15       (0x00008000)    /* nIR[15] */

/* bit field of IRQS register */
#define IRQS_IRQS       (0x00000002)    /* IRQS bit */

/* bit field of FIQ register */
#define FIQ_FIQ         (0x00000001)    /* FIQ bit */

/* bit field of FIQRAW register */
#define FIQRAW_FIQRAW   (0x00000001)    /* FIQRAW bit */

/* bit field of FIQEN register */
#define FIQEN_FIQEN     (0x00000001)    /* FIQEN bit */

/* bit field of IRN register */
#define IRN_IRN         (0x0000007F)    /* IRN[6:0] */

/* bit field of CIL register */
#define CIL_INT_LV1     (0x00000002)    /* interrupt level 1 */
#define CIL_INT_LV2     (0x00000004)    /* interrupt level 2 */
#define CIL_INT_LV3     (0x00000008)    /* interrupt level 3 */
#define CIL_INT_LV4     (0x00000010)    /* interrupt level 4 */
#define CIL_INT_LV5     (0x00000020)    /* interrupt level 5 */
#define CIL_INT_LV6     (0x00000040)    /* interrupt level 6 */
#define CIL_INT_LV7     (0x00000080)    /* interrupt level 7 */

/* bit field of ILC0 register */
#define ILC0_ILR0       (0x00000007)    /* nIR[0] */
#define ILC0_ILR1       (0x00000070)    /* nIR[1],nIR[2],nIR[3] */
#define ILC0_ILR4       (0x00070000)    /* nIR[4],nIR[5] */
#define ILC0_ILR6       (0x07000000)    /* nIR[6],nIR[7] */
#define ILC0_INT_LV1    (0x11111111)    /* interrupt level 1 */
#define ILC0_INT_LV2    (0x22222222)    /* interrupt level 2 */
#define ILC0_INT_LV3    (0x33333333)    /* interrupt level 3 */
#define ILC0_INT_LV4    (0x44444444)    /* interrupt level 4 */
#define ILC0_INT_LV5    (0x55555555)    /* interrupt level 5 */
#define ILC0_INT_LV6    (0x66666666)    /* interrupt level 6 */
#define ILC0_INT_LV7    (0x77777777)    /* interrupt level 7 */

/* bit field of ILC1 register */
#define ILC1_ILR8       (0x00000007)    /* nIR[8] */
#define ILC1_ILR9       (0x00000070)    /* nIR[9] */
#define ILC1_ILR10      (0x00000700)    /* nIR[10] */
#define ILC1_ILR11      (0x00007000)    /* nIR[11] */
#define ILC1_ILR12      (0x00070000)    /* nIR[12] */
#define ILC1_ILR13      (0x00700000)    /* nIR[13] */
#define ILC1_ILR14      (0x07000000)    /* nIR[14] */
#define ILC1_ILR15      (0x70000000)    /* nIR[15] */
#define ILC1_INT_LV1    (0x11111111)    /* interrupt level 1 */
#define ILC1_INT_LV2    (0x22222222)    /* interrupt level 2 */
#define ILC1_INT_LV3    (0x33333333)    /* interrupt level 3 */
#define ILC1_INT_LV4    (0x44444444)    /* interrupt level 4 */
#define ILC1_INT_LV5    (0x55555555)    /* interrupt level 5 */
#define ILC1_INT_LV6    (0x66666666)    /* interrupt level 6 */
#define ILC1_INT_LV7    (0x77777777)    /* interrupt level 7 */

/* bit field of CILCL register */
#define CILCL_CLEAR (0x00000001)    /* most significant '1' bit of CIL is cleared */

/* bit field of CILE register */
#define CILE_CILE   (0x00000007)    /* CILE[2:0] */

/* bit field of IRCL register */
#define IRCL_IRCL   (0x0000007F)        /* IRCL[6:0] */

/* bit field of IRQA register */
#define IRQA_IRQ16  (0x00000001)        /* IRQ16 */
#define IRQA_IRQ17  (0x00000002)        /* IRQ17 */
#define IRQA_IRQ18  (0x00000004)        /* IRQ18 */
#define IRQA_IRQ19  (0x00000008)        /* IRQ19 */
#define IRQA_IRQ20  (0x00000010)        /* IRQ20 */
#define IRQA_IRQ21  (0x00000020)        /* IRQ21 */
#define IRQA_IRQ22  (0x00000040)        /* IRQ22 */
#define IRQA_IRQ23  (0x00000080)        /* IRQ23 */
#define IRQA_IRQ24  (0x00000100)        /* IRQ24 */
#define IRQA_IRQ25  (0x00000200)        /* IRQ25 */
#define IRQA_IRQ26  (0x00000400)        /* IRQ26 */
#define IRQA_IRQ27  (0x00000800)        /* IRQ27 */
#define IRQA_IRQ28  (0x00001000)        /* IRQ28 */
#define IRQA_IRQ29  (0x00002000)        /* IRQ29 */
#define IRQA_IRQ30  (0x00004000)        /* IRQ30 */
#define IRQA_IRQ31  (0x00008000)        /* IRQ31 */

/* bit field of IDM register */
#define IDM_IDM22   (0x00000040)        /* IRQ22 */
#define IDM_IDM26   (0x00000400)        /* IRQ26 */
#define IDM_IDM28   (0x00001000)        /* IRQ28 */
#define IDM_IDM30   (0x00004000)        /* IRQ31 */
#define IDM_IDMP22  (0x00000080)        /* IRQ22 */
#define IDM_IDMP26  (0x00000800)        /* IRQ26 */
#define IDM_IDMP28  (0x00002000)        /* IRQ28 */
#define IDM_IDMP30  (0x00008000)        /* IRQ31 */
#define IDM_INT_L_L (0x00000000)        /* level sensing, interrupt occurs when 'L' */
#define IDM_INT_L_H (0x0000AAAA)        /* level sensing, interrupt occurs when 'H' */
#define IDM_INT_E_F (0x00005555)        /* edge sensing, interrupt occurs when falling edge */
#define IDM_INT_E_R (0x0000FFFF)        /* edge sensing, interrupt occurs when rising edge */
#define IDM_IRQ22   (0x000000C0)        /* IRQ22 */
#define IDM_IRQ26   (0x00000C00)        /* IRQ26 */
#define IDM_IRQ28   (0x00003000)        /* IRQ28 */
#define IDM_IRQ31   (0x0000C000)        /* IRQ31 */


/* bit field of ILC register */
#define ILC_ILC16   (0x00000007)        /* IRQ16, IRQ17 */
#define ILC_ILC18   (0x00000070)        /* IRQ18, IRQ19 */
#define ILC_ILC20   (0x00000700)        /* IRQ20, IRQ21 */
#define ILC_ILC22   (0x00007000)        /* IRQ22, IRQ23 */
#define ILC_ILC24   (0x00070000)        /* IRQ24, IRQ25 */
#define ILC_ILC26   (0x00700000)        /* IRQ26, IRQ27 */
#define ILC_ILC28   (0x07000000)        /* IRQ28, IRQ29 */
#define ILC_ILC30   (0x70000000)        /* IRQ30, IRQ31 */
#define ILC_INT_LV1 (0x11111111)        /* interrupt level 1 */
#define ILC_INT_LV2 (0x22222222)        /* interrupt level 2 */
#define ILC_INT_LV3 (0x33333333)        /* interrupt level 3 */
#define ILC_INT_LV4 (0x44444444)        /* interrupt level 4 */
#define ILC_INT_LV5 (0x55555555)        /* interrupt level 5 */
#define ILC_INT_LV6 (0x66666666)        /* interrupt level 6 */
#define ILC_INT_LV7 (0x77777777)        /* interrupt level 7 */

/*****************************************************/
/*    external memory control register               */
/*****************************************************/
#define EMCR_BASE   (0x78100000)        /* base address */
#define BWC         (EMCR_BASE+0x00)    /* bus width control register (RW,32,0x00000008) */
#define ROMAC       (EMCR_BASE+0x04)    /* external ROM access control register (RW,32,0x00000007) */
#define RAMAC       (EMCR_BASE+0x08)    /* external SRAM access control register (RW,32,0x00000007) */
#define IO0AC       (EMCR_BASE+0x0C)    /* external IO0 access control register (RW,32,0x00000007) */
#define IO1AC       (EMCR_BASE+0x10)    /* external IO1 access control register (RW,32,0x00000007) */

/* bit field of BWC register */
#define BWC_ROMBW0  (0x00000000)        /* ROM disable */
#define BWC_ROMBW16 (0x00000008)        /* ROM 16bit */
#define BWC_RAMBW0  (0x00000000)        /* RAM disable */
#define BWC_RAMBW16 (0x00000020)        /* RAM 16bit */
#define BWC_IO0BW0  (0x00000000)        /* IO0 disable */
#define BWC_IO0BW8  (0x00000040)        /* IO0 8bit */
#define BWC_IO0BW16 (0x00000080)        /* IO0 16 bit */
#define BWC_IO1BW0  (0x00000000)        /* IO1 disable */
#define BWC_IO1BW8  (0x00000100)        /* IO1 8bit */
#define BWC_IO1BW16 (0x00000200)        /* IO1 16bit */

/* bit field of ROMAC register */
#define ROMAC_ROMTYPE   (0x00000007)    /* ROMTYPE[2:0] */

/* bit field of RAMAC register */
#define RAMAC_RAMTYPE   (0x00000007)    /* RAMTYPE[2:0] */

/* bit field of IO0AC register */
#define IO0AC_IO0TYPE   (0x00000007)    /* IO0TYPE[2:0] */

/* bit field of IO1AC register */
#define IO1AC_IO1TYPE   (0x00000007)    /* IO1TYPE[2:0] */


/*****************************************************/
/*    DRAM control register                          */
/*****************************************************/
#define DCR_BASE    (0x78180000)        /* base address */
#define DBWC        (DCR_BASE+0x00)     /* DRAM Bus Width control register (RW,32,0x00000000) */
#define DRMC        (DCR_BASE+0x04)     /* DRAM control register (RW,32,0x00000000) */
#define DRPC        (DCR_BASE+0x08)     /* DRAM Attribute parameter Setup register (RW,32,0x00000000)*/
#define SDMD        (DCR_BASE+0x0C)     /* SDRAM Mode Setup register (RW,32,0x00000001) */
#define DCMD        (DCR_BASE+0x10)     /* DRAM Command register (RW,32,0x00000000) */
#define RFSH0       (DCR_BASE+0x14)     /* DRAM Refresh Cycle register 0 (RW,32,0x00000000) */
#define PDWC        (DCR_BASE+0x18)     /* Power Down Mode control register (RW,32,0x00000003) */
#define RFSH1       (DCR_BASE+0x1C)     /* DRAM Refresh Cycle register 1 (RW,32,0x00000000) */

/* bit field of DBWC register */
#define DBWC_DBDRAM0    (0x00000000)    /* DRAM disable */
#define DBWC_DBDRAM8    (0x00000001)    /* 8bit width */
#define DBWC_DBDRAM16   (0x00000002)    /* 16bit width */

/* bit field of DRMC register */
#define DRMC_8bit       (0x00000000)    /* DRAM column length : 8bit */
#define DRMC_9bit       (0x00000001)    /* DRAM column length : 9bit */
#define DRMC_10bit      (0x00000002)    /* DRAM column length : 10bit */
#define DRMC_SDRAM      (0x00000000)    /* DRAM architecture : SDRAM */
#define DRMC_EDO        (0x00000004)    /* DRAM architecture : EDO-DRAM */
#define DRMC_2CLK       (0x00000000)    /* SDRAM pre-charge latency : 2clock */
#define DRMC_CAS        (0x00000010)    /* SDRAM pre-charge latency : same as CAS latency */
#define DRMC_PD_DIS     (0x00000000)    /* automatic shift to SDRAM power down mode : disable */
#define DRMC_PD_EN      (0x00000040)    /* automatic shift to SDRAM power down mode : enable */
#define DRMC_CBR_STOP   (0x00000000)    /* CBR refresh : stop */
#define DRMC_CBR_EXE    (0x00000080)    /* CBR refresh : execution */

/* bit field of DRPC register */
#define DRPC_DRAMSPEC   (0x0000000F)    /* DRAMSPEC[3:0] */

/* bit field of SDMD register */
#define SDMD_CL2    (0x00000000)        /* SDRAM CAS latency : 2 */
#define SDMD_CL3    (0x00000001)        /* SDRAM CAS latency : 3 */
#define SDMD_MODEWR (0x00000080)        /* setting operation : valid */

/* bit field of DCMD register */
#define DCMD_S_NOP      (0x00000000)    /* No operation */
#define DCMD_S_PALL     (0x00000004)    /* SDRAM all bank pre-charge command */
#define DCMD_S_REF      (0x00000005)    /* SDRAM CBR refresh command */
#define DCMD_S_SELF     (0x00000006)    /* SDRAM self refresh start command */
#define DCMD_S_SREX     (0x00000007)    /* SDRAM self refresh stop command */
#define DCMD_EDO_NOP    (0x00000000)    /* No operation */
#define DCMD_EDO_PC     (0x00000004)    /* EDO-DRAM pre-charge cycle */
#define DCMD_EDO_REF    (0x00000005)    /* EDO-DRAM CBR refresh cycle */
#define DCMD_EDO_SELF   (0x00000006)    /* EDO-DRAM self refresh start cycle */
#define DCMD_EDO_SREX   (0x00000007)    /* EDO-DRAM self refresh stop cycle */

/* bit field of RFSH0 register */
#define RFSH0_RCCON  (0x00000001)       /* RCCON bit, refresh frequency = refclk(RFSH1)*2(RCCON=0) */
#define RFSH0_SINGLE (0x00000000)       /* RCCON bit, refresh frequency = refclk(RFSH1)  (RCCON=1) */
/* bit field of RFSH1 register */
#define RFSH1_RFSEL1    (0x000007FF)    /* RFSEL1[10:0], refckl(RFSH1) = CCLK/RFSEL1[10:0] */

/* bit field of PDWC register */
#define PDWC_1  (0x00000000)            /* when  1 or more cycles of idol state continue,
                                           it shifts to power down mode. */
#define PDWC_2  (0x00000001)            /*                   :                   */
#define PDWC_3  (0x00000002)            /*                   :                   */
#define PDWC_4  (0x00000003)            /*                   :                   */
#define PDWC_5  (0x00000004)            /*                   :                   */
#define PDWC_6  (0x00000005)            /*                   :                   */
#define PDWC_7  (0x00000006)            /*                   :                   */
#define PDWC_8  (0x00000007)            /*                   :                   */
#define PDWC_9  (0x00000008)            /*                   :                   */
#define PDWC_10 (0x00000009)            /*                   :                   */
#define PDWC_11 (0x0000000A)            /*                   :                   */
#define PDWC_12 (0x0000000B)            /*                   :                   */
#define PDWC_13 (0x0000000C)            /*                   :                   */
#define PDWC_14 (0x0000000D)            /*                   :                   */
#define PDWC_15 (0x0000000E)            /*                   :                   */
#define PDWC_16 (0x0000000F)            /* when 16 or more cycles of idol state continue,
                                           it shifts to power down mode. */

/*****************************************************/
/*    DMA control register                           */
/*****************************************************/
#define DMA_BASE    (0x7BE00000)        /* base address */
#define DMAMOD      (DMA_BASE+0x0000)   /* DMA Mode register (RW,32,0x00000000) */
#define DMASTA      (DMA_BASE+0x0004)   /* DMA Status register (R,32,0x00000000) */
#define DMAINT      (DMA_BASE+0x0008)   /* DMA interrupt Status register (R,32,0x00000000) */
#define DMACMSK0    (DMA_BASE+0x0100)   /* Channel 0 Mask register (RW,32,0x00000001) */
#define DMACTMOD0   (DMA_BASE+0x0104)   /* Channel 0 Transfer Mode register (RW,32,0x00000040) */
#define DMACSAD0    (DMA_BASE+0x0108)   /* Channel 0 Source Address register (RW,32,0x00000000) */
#define DMACDAD0    (DMA_BASE+0x010C)   /* Channel 0 Destination Address register (RW,32,0x00000000) */
#define DMACSIZ0    (DMA_BASE+0x0110)   /* Channel 0 Transfer Size register (RW,32,0x00000000) */
#define DMACCINT0   (DMA_BASE+0x0114)   /* Channel 0 interrupt Clear register (W,32,--) */
#define DMACMSK1    (DMA_BASE+0x0200)   /* Channel 1 Mask register (RW,32,0x00000001) */
#define DMACTMOD1   (DMA_BASE+0x0204)   /* Channel 1 Transfer Mode register (RW,32,0x00000040) */
#define DMACSAD1    (DMA_BASE+0x0208)   /* Channel 1 Source Address register (RW,32,0x00000000) */
#define DMACDAD1    (DMA_BASE+0x020C)   /* Channel 1 Destination Address register (RW,32,0x00000000) */
#define DMACSIZ1    (DMA_BASE+0x0210)   /* Channel 1 Transfer Size register (RW,32,0x00000000) */
#define DMACCINT1   (DMA_BASE+0x0214)   /* Channel 1 interrupt Clear register (W,32,--) */
#define DMACMSK2    (DMA_BASE+0x0300)   /* Channel 2 Mask register (RW,32,0x00000001) */
#define DMACTMOD2   (DMA_BASE+0x0304)   /* Channel 2 Transfer Mode register (RW,32,0x00000040) */
#define DMACSAD2    (DMA_BASE+0x0308)   /* Channel 2 Source Address register (RW,32,0x00000000) */
#define DMACDAD2    (DMA_BASE+0x030C)   /* Channel 2 Destination Address register (RW,32,0x00000000) */
#define DMACSIZ2    (DMA_BASE+0x0310)   /* Channel 2 Transfer Size register (RW,32,0x00000000) */
#define DMACCINT2   (DMA_BASE+0x0314)   /* Channel 2 interrupt Clear register (W,32,--) */
#define DMACMSK3    (DMA_BASE+0x0400)   /* Channel 3 Mask register (RW,32,0x00000001) */
#define DMACTMOD3   (DMA_BASE+0x0404)   /* Channel 3 Transfer Mode register (RW,32,0x00000040) */
#define DMACSAD3    (DMA_BASE+0x0408)   /* Channel 3 Source Address register (RW,32,0x00000000) */
#define DMACDAD3    (DMA_BASE+0x040C)   /* Channel 3 Destination Address register (RW,32,0x00000000) */
#define DMACSIZ3    (DMA_BASE+0x0410)   /* Channel 3 Transfer Size register (RW,32,0x00000000) */
#define DMACCINT3   (DMA_BASE+0x0414)   /* Channel 3 interrupt Clear register (W,32,--) */

/* bit field of DMAMOD register */
#define DMAMOD_PRI  (0x00000001)        /* PRI bit */
#define DMAMOD_FIX  (0x00000000)        /* Priority of DMA channel : CH0 > CH1 */
#define DMAMOD_RR   (0x00000001)        /* Priority of DMA channel : Round robin */

/* bit field of DMASTA register */
#define DMASTA_STA0 (0x00000001)        /* Non-transmitted data is in CH0 */
#define DMASTA_STA1 (0x00000002)        /* Non-transmitted data is in CH1 */

/* bit field of DMAINT register */
#define DMAINT_IREQ0    (0x00000001)    /* CH0 interrupt */
#define DMAINT_IREQ1    (0x00000002)    /* CH1 interrupt */
#define DMAINT_ISTA0    (0x00000100)    /* CH0 abnormal end */
#define DMAINT_ISTA1    (0x00000200)    /* CH1 abnormal end */
#define DMAINT_ISTP0    (0x00010000)    /* CH0 abnormal end situation */
#define DMAINT_ISTP1    (0x00020000)    /* CH1 abnormal end situation */

/* bit field of DMAMSK0,1 register */
#define DMACMSK_MSK (0x00000001)        /* Mask */

/* bit field of DMATMOD0,1 register */
#define DMACTMOD_ARQ    (0x00000001)    /* Auto request */
#define DMACTMOD_ERQ    (0x00000000)    /* External request */
#define DMACTMOD_BYTE   (0x00000000)    /* Byte transmission */
#define DMACTMOD_HWORD  (0x00000002)    /* Half word transmission */
#define DMACTMOD_WORD   (0x00000004)    /* Word transmission */
#define DMACTMOD_SFA    (0x00000000)    /* Source data type(fixed address device) */
#define DMACTMOD_SIA    (0x00000008)    /* Source data type(incremental address device) */
#define DMACTMOD_DFA    (0x00000000)    /* Destination data type(fixed address device) */
#define DMACTMOD_DIA    (0x00000010)    /* Destination data type(incremental address device) */
#define DMACTMOD_BM     (0x00000000)    /* Bus request mode(burst mode) */
#define DMACTMOD_CSM    (0x00000020)    /* Bus request mode(cycle steal mode) */
#define DMACTMOD_IMK    (0x00000040)    /* interrupt mask */

/*****************************************************/
/*    port control register                           */
/*****************************************************/
#define PCR_BASE    (0xB7A00000)        /* base address */
#define GPPOA       (PCR_BASE+0x00)     /* port A output register (RW,16,--) */
#define GPPIA       (PCR_BASE+0x04)     /* port A input register (R,16,--)*/
#define GPPMA       (PCR_BASE+0x08)     /* port A Mode register (RW,16,0x0000) */

#define GPPOB       (PCR_BASE+0x20)     /* port B Output register (RW,16,--) */
#define GPPIB       (PCR_BASE+0x24)     /* port B Input register (R,16,--) */
#define GPPMB       (PCR_BASE+0x28)     /* port B Mode register (RW,16,0x0000) */

#define GPPOC       (PCR_BASE+0x40)     /* port C Output register (RW,16,--) */
#define GPPIC       (PCR_BASE+0x44)     /* port C Input register (R,16,--) */
#define GPPMC       (PCR_BASE+0x48)     /* port C Mode register (RW,16,0x0000) */

#define GPPOD       (PCR_BASE+0x60)     /* port D Output register (RW,16,--) */
#define GPPID       (PCR_BASE+0x64)     /* port D Input register (R,16,--) */
#define GPPMD       (PCR_BASE+0x68)     /* port D Mode register (RW,16,0x0000) */

#define GPPOE       (PCR_BASE+0x80)     /* port E Output register (RW,16,--) */
#define GPPIE       (PCR_BASE+0x84)     /* port E Input register (R,16,--) */
#define GPPME       (PCR_BASE+0x88)     /* port E Mode register (RW,16,0x0000) */
#define GPIEE       (PCR_BASE+0x8C)     /* port E interrupt enable (RW,16,0x0000) */
#define GPIPE       (PCR_BASE+0x90)     /* port E interrupt Polarity (RW,16,0x0000) */
#define GPISE       (PCR_BASE+0x94)     /* port E interrupt Status (RW,16,0x0000) */
#define GPIME       (PCR_BASE+0x98)     /* port E interrupt Mode register (RW,16,0x0000) */

#define GPPOF       (PCR_BASE+0xA0)     /* port D Output register (RW,7,--) */
#define GPPIF       (PCR_BASE+0xA4)     /* port D Input register (R,7,--) */
#define GPPMF       (PCR_BASE+0xA8)     /* port D Mode register (RW,7,0x0000) */

/* bit field of GPPOA/GPPOB/GPPOC/GPPOD/GPPOE register */
#define GPPOA_GPPOA (0xFFFF)            /* GPPOA[15:0] */
#define GPPOB_GPPOB (0xFFFF)            /* GPPOB[15:0] */
#define GPPOC_GPPOC (0xFFFF)            /* GPPOC[15:0] */
#define GPPOD_GPPOD (0xFFFF)            /* GPPOD[15:0] */
#define GPPOE_GPPOE (0xFFFF)            /* GPPOE[15:0] */
#define GPPOF_GPPOF (0x007F)            /* GPPOF[ 6:0] */

/* bit field of GPPIA/GPPIB/GPPIC/GPPID/GPPIE register */
#define GPPIA_GPPIA (0xFFFF)            /* GPPIA[15:0] */
#define GPPIB_GPPIB (0xFFFF)            /* GPPIB[15:0] */
#define GPPIC_GPPIC (0xFFFF)            /* GPPIC[15:0] */
#define GPPID_GPPID (0xFFFF)            /* GPPID[15:0] */
#define GPPIE_GPPIE (0xFFFF)            /* GPPIE[15:0] */
#define GPPIF_GPPIF (0x007F)            /* GPPIF[ 6:0] */

/* bit field of GPPMA/GPPMB/GPPMC/GPPMD/GPPME/GPPMF register */
#define GPPMA_GPPMA (0xFFFF)            /* GPPMA[15:0] 0:input, 1:output */
#define GPPMB_GPPMB (0xFFFF)            /* GPPMB[15:0] 0:input, 1:output */
#define GPPMC_GPPMC (0xFFFF)            /* GPPMC[15:0] 0:input, 1:output */
#define GPPMD_GPPMD (0xFFFF)            /* GPPMD[15:0] 0:input, 1:output */
#define GPPME_GPPME (0xFFFF)            /* GPPME[15:0] 0:input, 1:output */
#define GPPMF_GPPMF (0x00FF)            /* GPPME[ 7:0] 0:input, 1:output */

/* bit field of GPIEE register */
#define GPIEE_GPIEE (0x0F00)            /* GPIEE[15:12] 0:interrupt disable, 1:interrupt enable */

/* bit field of GPIPE register */
#define GPIPE_GPIPE (0x0F00)            /* GPIPE[15:12] 0:"L"level, 1: "H"level */

/* bit field of GPISE register */
#define GPISE_GPISE (0x0F00)            /* GPISE[15:12] 0:interrupt not occurred, 1:interrupt occurred */

/* bit field of GPIME register */
#define GPIME_GPIME (0x0F00)            /* GPISE[15:12] 0:edge detect mode, 1:level detect mode */

/*****************************************************/
/*    Watch Dog Timer control register               */
/*****************************************************/
#define WDT_BASE    (0xB7E00000)        /* base address */
#define WDTCON      (WDT_BASE+0x00)     /* Watch Dog Timer control register (W,8,--) */
#define WDTBCON     (WDT_BASE+0x04)     /* time base counter control register (RW,8,0x00) */
#define WDSTAT      (WDT_BASE+0x14)     /* Watch Dog Timer status register (RW,8,0x00) */

/* bit field of WDTCON */
#define WDTCON_0xC3 (0xC3)              /* 0xC3 */
#define WDTCON_0x3C (0x3C)              /* 0x3C */

/* bit field of WDTBCON */
#define WDTBCON_UNLOCK  (0x5A)          /* enable writing to this register */

#define WDTBCON_CLK75   (0x00)          /* CCLK/(=7.5MHz) */
#define WDTBCON_CLK4    (0x01)          /* CCLK/4         */
#define WDTBCON_CLK32   (0x02)          /* CCLK/32        */
#define WDTBCON_CLK64   (0x03)          /* CCLK/64        */

#define WDTBCON_WDTM    (0x00)          /* WDT mode */
#define WDTBCON_ITM     (0x08)          /* interval timer mode */

#define WDTBCON_ITDIS   (0x00)          /* disable interval timer */
#define WDTBCON_ITEN    (0x10)          /* enable interval timer */

#define WDTBCON_INT     (0x00)          /* generate interrupt */
#define WDTBCON_RESET   (0x40)          /* system reset */

#define WDTBCON_COUNT   (0x00)          /* timer count */
#define WDTBCON_WDHLT   (0x80)          /* timer stop  */

/* bit field of WDTSTAT */
#define WDSTAT_RSTWDT   (0x01)          /* reset by WDT */
#define WDSTAT_RSTPWON  (0x00)          /* reset by power on */

#define WDSTAT_WDTIST   (0x10)          /* WDT interrupt */
#define WDSTAT_IVTIST   (0x20)          /* IVT interrupt */

/*****************************************************/
/*    system timer control register                  */
/*****************************************************/
#define STCR_BASE   (0xB8001000)        /* base address */
#define TMEN        (STCR_BASE+0x04)    /* timer enable register (RW,16,0x0000) */
#define TMRLR       (STCR_BASE+0x08)    /* timer reload register (RW,16,0x0000) */
#define TMOVF       (STCR_BASE+0x10)    /* overflow register (RW,16,0x0000) */

/* bit field of TMEN register */
#define TMEN_TCEN   (0x0001)            /* timer enabled */
#define TMEN_TCDSBL (0x0000)            /* timer disabled */
    /* these are aliases */
#define TMEN_RUN    (0x0001)            /* timer enabled */
#define TMEN_STOP   (0x0000)            /* timer disabled */

/* bit field of TMOVF register */
#define TMOVF_OVF   (0x0001)            /* overflow generated */
#define TMOVF_NOOVF (0x0000)            /* no overflow generated */


/*****************************************************/
/*    timer control register                         */
/*****************************************************/
#define TCR_BASE    (0xB7F00000)        /* base address */
#define TIMECNTL0   (TCR_BASE+0x00)     /* timer0 control register (RW,16,0x0000) */
#define TIMEBASE0   (TCR_BASE+0x04)     /* timer0 base register (RW,16,0x0000) */
#define TIMECNT0    (TCR_BASE+0x08)     /* timer0 counter register (R,16,0x0000) */
#define TIMECMP0    (TCR_BASE+0x0C)     /* timer0 compare register (RW,16,0xFFFF) */
#define TIMESTAT0   (TCR_BASE+0x10)     /* timer0 status register (RW,16,0x0000) */
#define TIMECNTL1   (TCR_BASE+0x20)     /* timer1 control register (RW,16,0x0000) */
#define TIMEBASE1   (TCR_BASE+0x24)     /* timer1 base register (RW,16,0x0000) */
#define TIMECNT1    (TCR_BASE+0x28)     /* timer1 counter register (R,16,0x0000) */
#define TIMECMP1    (TCR_BASE+0x2C)     /* timer1 compare register (RW,16,0xFFFF) */
#define TIMESTAT1   (TCR_BASE+0x30)     /* timer1 status register (RW,16,0x0000) */
#define TIMECNTL2   (TCR_BASE+0x40)     /* timer2 control register (RW,16,0x0000) */
#define TIMEBASE2   (TCR_BASE+0x44)     /* timer2 base register (RW,16,0x0000) */
#define TIMECNT2    (TCR_BASE+0x48)     /* timer2 counter register (R,16,0x0000) */
#define TIMECMP2    (TCR_BASE+0x4C)     /* timer2 compare register (RW,16,0xFFFF) */
#define TIMESTAT2   (TCR_BASE+0x50)     /* timer2 status register (RW,16,0x0000) */


/* bit field of TIMECNTL0-2 register */
#define TIMECNTL_OS     (0x0001)        /* one shot timer */
#define TIMECNTL_INT    (0x0000)        /* interval timer */
#define TIMECNTL_START  (0x0008)        /* timer start */
#define TIMECNTL_STOP   (0x0000)        /* timer stop  */
#define TIMECNTL_IE     (0x0010)        /* enable interrupt */
#define TIMECNTL_ID     (0x0000)        /* denable interrupt */

#define TIMECNTL_CLK    (0x0000)        /* CCLK(=7.5MHz or 2.048kHz) */
#define TIMECNTL_CLK2   (0x0020)        /* CPUCLK/2 */
#define TIMECNTL_CLK4   (0x0040)        /* CPUCLK/4 */
#define TIMECNTL_CLK8   (0x0060)        /* CPUCLK/8 */
#define TIMECNTL_CLK16  (0x0080)        /* CPUCLK/16 */
#define TIMECNTL_CLK64  (0x00A0)        /* CPUCLK/64 */
#define TIMECNTL_CLK128 (0x00C0)        /* CPUCLK/128 */
#define TIMECNTL_CLK256 (0x00E0)        /* CPUCLK/256 */


/* bit field of TIMESTAT0-5 register */
#define TIMESTAT_STATUS (0x0001)        /* status bit */

/*****************************************************/
/*    PWM control register                           */
/*****************************************************/
#define PWM_BASE        (0xB7D00000)    /* base address */
#define PWR             (PWM_BASE+0x00) /* PWM register (RW,16,0x0000) */
#define PWCY            (PWM_BASE+0x04) /* PWM cycle register (RW,16,0x0000) */
#define PWC             (PWM_BASE+0x08) /* PWM counter (RW,16,0x0000) */
#define PWCON           (PWM_BASE+0x0C) /* PWM contrlo register (RW,16,0x0000) */
#define PWINTSTS        (PWM_BASE+0x3C) /* PWM interrupt status register (RW,16,0x0000) */

/* bit field of PWCON register */
#define PWCON_PWR       (0x0001)        /* enable PWC */
    /* this is alias */
#define PWCON_RUN       (0x0001)        /* enable PWC */

#define PWCON_CLK1      (0x0000)        /* 1/1 CPUCLK */
#define PWCON_CLK4      (0x0002)        /* 1/4 CPUCLK */
#define PWCON_CLK16     (0x0004)        /* 1/16 CPUCLK */
#define PWCON_CLK32     (0x0006)        /* 1/32 CPUCLK */
#define PWCON_INTIE     (0x0040)        /* enable interrupt */
#define PWCON_PWCOV     (0x0080)        /* interruput when PWC overflow */

/* bit field of PWINTSTS register */
#define PWINTSTS_INTS    (0x0100)       /* interrupt generated */
#define PWINTSTS_INTCLR  (0x0001)       /* interrupt clear */


/*****************************************************/
/*    ASIO control register                          */
/*****************************************************/
#define SC_BASE (0xB8002000)            /* base address */
#define SIOBUF  (SC_BASE+0x00)          /* transmiting/receiving buffer register (RW,16,0x0000) */
#define SIOSTA  (SC_BASE+0x04)          /* SIO status register (RW,16,0x0000) */
#define SIOCON  (SC_BASE+0x08)          /* SIO control register (RW,16,0x0000) */
#define SIOBCN  (SC_BASE+0x0C)          /* baud rate control register (RW,16,0x0000) */
#define SIOBT   (SC_BASE+0x14)          /* baud rate timer register (RW,16,0x0000) */
#define SIOTCN  (SC_BASE+0x18)          /* SIO test control register (RW,16,0x0000) */

/* bit field of SIOBUF register */
#define SIOBUF_SIOBUF   (0x00FF)        /* SIOBUF[7:0] */

/* bit field of SIOSTA register */
#define SIOSTA_FERR     (0x0001)        /* framing error */
#define SIOSTA_OERR     (0x0002)        /* overrun error */
#define SIOSTA_PERR     (0x0004)        /* parity error */
#define SIOSTA_RVIRQ    (0x0010)        /* receive ready */
#define SIOSTA_TRIRQ    (0x0020)        /* transmit ready */

/* bit field of SIOCON register */
#define SIOCON_LN7      (0x0001)        /* data length : 7bit */
#define SIOCON_LN8      (0x0000)        /* data length : 8bit */
#define SIOCON_PEN      (0x0002)        /* parity enabled */
#define SIOCON_PDIS     (0x0000)        /* parity disabled */
#define SIOCON_EVN      (0x0004)        /* even parity */
#define SIOCON_ODD      (0x0000)        /* odd parity */
#define SIOCON_TSTB1    (0x0008)        /* stop bit : 1 */
#define SIOCON_TSTB2    (0x0000)        /* stop bit : 2 */

/* bit field of SIOBCN register */
#define SIOBCN_BGRUN    (0x0010)        /* count start */
#define SIOBCN_BGSTOP   (0x0000)        /* count stop  */

/* bit field of SIOBT register */
#define SIOBT_SIOBT (0x00FF)            /* SIOBT[7:0] */

/* bit field of SIOTCN register */
#define SIOTCN_MFERR    (0x0001)        /* generate framin error */
#define SIOTCN_MPERR    (0x0002)        /* generate parity error */
#define SIOTCN_LBTST    (0x0080)        /* loop back test */


/*****************************************************/
/*    ADC control register                           */
/*****************************************************/
#define ADC_BASE    (0xB6000000)        /* base address */
#define ADCON1      (ADC_BASE+0x04)     /* ADC control 1 register (RW,16,0x0000) */
#define ADCON2      (ADC_BASE+0x08)     /* ADC control 2 register (RW,16,0x0003) */
#define ADINT       (ADC_BASE+0x0C)     /* AD interrupt control register (RW,16,0x0000) */
#define ADR0        (ADC_BASE+0x14)     /* AD Result 0 register (RW,16,0x0000) */
#define ADR1        (ADC_BASE+0x18)     /* AD Result 1 register (RW,16,0x0000) */
#define ADR2        (ADC_BASE+0x1C)     /* AD Result 2 register (RW,16,0x0000) */
#define ADR3        (ADC_BASE+0x20)     /* AD Result 3 register (RW,16,0x0000) */

/* bit field of ADCON1 register */
#define ADCON1_ADSTM    (0x0003)        /* ADSTM[1:0] */
#define ADCON1_CH0      (0x0000)        /* CH0 */
#define ADCON1_CH1      (0x0001)        /* CH1 */
#define ADCON1_CH2      (0x0002)        /* CH2 */
#define ADCON1_CH3      (0x0003)        /* CH3 */
#define ADCON1_STS      (0x0010)        /* AD conversion start */

/* bit field of ADCON2 register */
#define ADCON2_ACKSEL   (0x0003)        /* ACKSEL[1:0] */
#define ADCON2_CLK2     (0x0001)        /* CPUCLK/2 */
#define ADCON2_CLK4     (0x0002)        /* CPUCLK/4 */
#define ADCON2_CLK8     (0x0003)        /* CPUCLK/8 */

/* bit field of ADINT register */
//#define ADINT_INTSN     (0x0001)        /* AD conversion of ch7 finished (scan mode) */
#define ADINT_INTST     (0x0002)        /* AD conversion finished (select mode) */
//#define ADINT_ADSNIE    (0x0004)        /* enable interrupt (scan mode) */
#define ADINT_ADSTIE    (0x0008)        /* enable interrupt (select mode) */

/* bit field of ADR0,ADR1,ADR2,ADR3 register */
#define ADR0_DT0    (0x03FF)            /* DT0[9:0] AD result */
#define ADR1_DT1    (0x03FF)            /* DT1[9:0] AD result */
#define ADR2_DT2    (0x03FF)            /* DT2[9:0] AD result */
#define ADR3_DT3    (0x03FF)            /* DT3[9:0] AD result */



/*****************************************************/
/*    SSIO control register                          */
/*****************************************************/
#define SSIO_BASE   (0xB7B10000)        /* base address */
#define SSIOBUF0    (SSIO_BASE+0x00)    /* transmiting/receiving buffer register (RW,8,0x00) */
#define SSIOSTA0    (SSIO_BASE+0x04)    /* SSIO status register (RW,8,0x00) */
#define SSIOCON0    (SSIO_BASE+0x08)    /* SSIO control register (RW,8,0x00) */
#define SSIOINT0    (SSIO_BASE+0x0C)    /* SSIO interrupt demand register (RW,8,0x00) */
#define SSIOINTEN0  (SSIO_BASE+0x10)    /* SSIO interrupt enable register (RW,8,0x00) */
#define SSIODMAC0   (SSIO_BASE+0x14)    /* SSIO DMA transmit register (RW,8,0x00) */
#define SSIOTSCON0  (SSIO_BASE+0x18)    /* SSIO test control register (RW,8,0x00) */
#define SSIOBUF1    (SSIO_BASE+0x20)    /* transmiting/receiving buffer register (RW,8,0x00) */
#define SSIOSTA1    (SSIO_BASE+0x24)    /* SSIO status register (RW,8,0x00) */
#define SSIOCON1    (SSIO_BASE+0x28)    /* SSIO control register (RW,8,0x00) */
#define SSIOINT1    (SSIO_BASE+0x2C)    /* SSIO interrupt demand register (RW,8,0x00) */
#define SSIOINTEN1  (SSIO_BASE+0x30)    /* SSIO interrupt enable register (RW,8,0x00) */
#define SSIODMAC1   (SSIO_BASE+0x34)    /* SSIO DMA transmit register (RW,8,0x00) */
#define SSIOTSCON1  (SSIO_BASE+0x38)    /* SSIO test control register (RW,8,0x00) */

/* bit field of SSIOBUF0,SSIOBUF1 register */
#define SSIOSTA_DUMMY   (0xFF)

/* bit field of SSIOSTA0,SSIOSTA1 register */
#define SSIOSTA_BUSY    (0x01)          /* transmiting/receiving buffer busy */
#define SSIOSTA_SFCT0   (0x00)          /* transmit end or not transmitted */
#define SSIOSTA_SFCT1   (0x20)          /* 1bit transmit end */
#define SSIOSTA_SFCT2   (0x40)          /* 2bit transmit end */
#define SSIOSTA_SFCT3   (0x60)          /* 3bit transmit end */
#define SSIOSTA_SFCT4   (0x80)          /* 4bit transmit end */
#define SSIOSTA_SFCT5   (0xA0)          /* 5bit transmit end */
#define SSIOSTA_SFCT6   (0xC0)          /* 6bit transmit end */
#define SSIOSTA_SFCT7   (0xE0)          /* 7bit transmit end */

/* bit field of SSIOCON0,SSIOCON1 register */
#define SSIOCON_TCK0    (0x00)          /* selected  15    MHz for sync clock */
#define SSIOCON_TCK1    (0x01)          /* selected   7.5  MHz for sync clock */
#define SSIOCON_TCK2    (0x02)          /* selected   3.75 MHz for sync clock */
#define SSIOCON_TCK3    (0x03)          /* selected 937.5  kHz for sync clock */
#define SSIOCON_TCK4    (0x04)          /* selected 468.75 kHz for sync clock */
#define SSIOCON_TCK5    (0x05)          /* selected 117.18 kHz for sync clock */
#define SSIOCON_TCK7    (0x07)          /* selected TMOUTx for sync clock */
#define SSIOCON_MASTER  (0x00)          /* Master */
#define SSIOCON_SLAVE   (0x10)          /* Slave */
#define SSIOCON_LSBFST  (0x00)          /* LSB first */
#define SSIOCON_MSBFST  (0x20)          /* MSB first */
#define SSIOCON_SCKNML  (0x00)          /* normal clock */
#define SSIOCON_SCKINV  (0x40)          /* clock inverted */
#define SSIOCON_RSTOFF  (0x00)          /* serial reset off */
#define SSIOCON_RSTON   (0x80)          /* serial reset on  */


/* bit field of SSIOINT0,SSIOINT1 register */
#define SSIOINT_TXRXCMP (0x01)          /* transmit/receive complete */
#define SSIOINT_TREMP   (0x02)          /* transmit empty */

/* bit field of SSIOINTEN0,SSIOINTEN1 register */
#define SSIOINTEN_TXRXCMPEN (0x01)      /* transmit/receive complete enable */
#define SSIOINTEN_TREMPEN   (0x02)      /* transmit empty enable */

/* bit field of SSIODMAC0, SSIODMAC1 register */
#define SSIODMAC_DMAEN   (0x00)         /* DMA transfer mode desable */
#define SSIODMAC_DMADES  (0x01)         /* DMA transfer mode enable */
#define SSIODMAC_TRNSACT (0x00)         /* DMA transmit action */
#define SSIODMAC_RCVACT  (0x10)         /* DMA receive action */

/* bit field of SSIOTSCON0,SSIOTSCON01 register */
#define SSIOTSCON_LBTST (0x80)          /* loop back test mode on*/
#define SSIOTSCON_NOTST (0x00)          /* test mode off */

/*****************************************************/
/*    I2C control register                          */
/*****************************************************/
#define I2C_BASE    (0xB7B00000)        /* base address */
#define I2CCON      (I2C_BASE+0x00)     /* I2C control register (RW,8,0x00) */
#define I2CSAD      (I2C_BASE+0x04)     /* I2C slave address mode setting register (RW,8,0x00) */
#define I2CCLR      (I2C_BASE+0x08)     /* I2C transmit speed setting register (RW,8,0x00) */
#define I2CSR       (I2C_BASE+0x0C)     /* I2C status register (R,8,0x00) */
#define I2CIR       (I2C_BASE+0x10)     /* I2C interrupt demand register (RW,8,0x00) */
#define I2CIMR      (I2C_BASE+0x14)     /* I2C interrupt mask register  (RW,8,0x00) */
#define I2CDR       (I2C_BASE+0x18)     /* I2C transmiting/receiving buffer register (RW,8,0x00) */

/* bit field of I2CCON register */
#define I2CCON_EN       (0x01)          /* restart sequence start */
#define I2CCON_OC       (0x02)          /* I2C-bus hold */
#define I2CCON_STCM     (0x04)          /* communication start */
#define I2CCON_RESTR    (0x08)          /* carry out restart */
#define I2CCON_START    (0x10)          /* exist START byte */

/* bit field of I2CSAD register */
#define I2CSAD_RW_SND   (0x00)          /* data transmiting mode */
#define I2CSAD_RW_REC   (0x01)          /* data receiving mode */
#define I2CSAD_SLVAD0   (0x02)          /* slave address 0 */
#define I2CSAD_SLVAD1   (0x04)          /* slave address 1 */
#define I2CSAD_SLVAD2   (0x08)          /* slave address 2 */
#define I2CSAD_SLVAD3   (0x10)          /* slave address 3 */
#define I2CSAD_SLVAD4   (0x20)          /* slave address 4 */
#define I2CSAD_SLVAD5   (0x40)          /* slave address 5 */
#define I2CSAD_SLVAD6   (0x80)          /* slave address 6 */

/* bit field of I2CCLR register */
#define I2CCLR_CMD1 (0x00)              /* Standard-mode */
#define I2CCLR_CMD4 (0x01)              /* Fast-mode */

/* bit field of I2CSR register */
#define I2CSR_DAK   (0x01)              /* data ACKnowledge no receive */
#define I2CSR_AAK   (0x02)              /* slave address ACKnowledge no receive */

/* bit field of I2CIR register */
#define I2CIR_IR    (0x01)              /* interrupt demand */

/* bit field of I2CIMR register */
#define I2CIMR_MF   (0x01)              /* interrupt mask set */


/*****************************************************/
/*    RTC Control register                           */
/*****************************************************/
#define RTC_BASE    (0xB7C00000)        /* base address */
#define RTCREG      (RTC_BASE+0x00)     /* RTC second count register  */
#define RTCCON      (RTC_BASE+0x04)     /* RTC control register  */
#define RTCCMP      (RTC_BASE+0x08)     /* RTC compare register  */
#define RTCSCRP     (RTC_BASE+0x0C)     /* RTC scratchpad register  */
#define RTCST       (RTC_BASE+0x10)     /* RTC status register  */

/* for RTCREG, RTCCON, RTCCMP, RTCST registers */
#define RTC_UNLOCK1     0x0000003c
#define RTC_UNLOCK2     0x0000005a

/*****************************************************/
/*    I2S send control register                      */
/*****************************************************/
#define I2SSND_BASE (0x82000000)     /* base address */
#define I2SFIFOO    (I2SSND_BASE+0x00)  /* I2S transceiver FIFO register (RW,32,---) */
#define I2SCONO0    (I2SSND_BASE+0x04)  /* I2S transceiver contorl register0 (RW,32,0x0000) */
#define I2SCONO1    (I2SSND_BASE+0x08)  /* I2S transceiver control register1 (RW,32,0x0000) */
#define I2SAFRO     (I2SSND_BASE+0x0C)  /* I2S transceiver Almost Full threshold register (RW,32,0x0000) */
#define I2SAERO     (I2SSND_BASE+0x10)  /* I2S transceiver Almost Empty threshold register (RW,32,0x0000) */
#define I2SIMRO     (I2SSND_BASE+0x14)  /* I2S transceiver interrupt mask register (RW,32,0x000F) */
#define I2SISTO     (I2SSND_BASE+0x18)  /* I2S transceiver interrupt status register (RW,32,0x0000) */
#define I2SWADRO    (I2SSND_BASE+0x1C)  /* I2S transceiver FIFO write address register (RW,32,0x0000) */
#define I2SRADRO    (I2SSND_BASE+0x20)  /* I2S transceiver FIFO read address register (RW,32,0x0000) */
#define I2SDNOO     (I2SSND_BASE+0x24)  /* I2S transceiver FIFO occupation data size register (R,32,0x0000) */

/*****************************************************/
/*    I2S receive control register                   */
/*****************************************************/
#define I2SRCV_BASE (0x84000000)        /* base address */
#define I2SFIFOI    (I2SRCV_BASE+0x00)  /* I2S receiver FIFO register (RW,32,0x0000) */
#define I2SCONI0    (I2SRCV_BASE+0x04)  /* I2S receiver contorl register0 (RW,32,0x0000) */
#define I2SCONI1    (I2SRCV_BASE+0x08)  /* I2S receiver control register1 (RW,32,0x0000) */
#define I2SAFRI     (I2SRCV_BASE+0x0C)  /* I2S receiver Almost Full threshold register (RW,32,0x0000) */
#define I2SAERI     (I2SRCV_BASE+0x10)  /* I2S receiver Almost Empty threshold register (RW,32,0x0000) */
#define I2SIMRI     (I2SRCV_BASE+0x14)  /* I2S receiver interrupt mask register (RW,32,0x000F) */
#define I2SISTI     (I2SRCV_BASE+0x18)  /* I2S receiver interrupt status register (RW,32,0x0000) */
#define I2SWADRI    (I2SRCV_BASE+0x1C)  /* I2S receiver FIFO write address register (RW,32,0x0000) */
#define I2SRADRI    (I2SRCV_BASE+0x20)  /* I2S receiver FIFO read address register (RW,32,0x0000) */
#define I2SDNOI     (I2SRCV_BASE+0x24)  /* I2S receiver FIFO occupation data size register (R,32,0x0000) */


/*****************************************************/
/*    NAND FLASH Controller register                 */
/*****************************************************/
#define NFC_BASE    (0x86000000)        /* base address */
#define MBANK       (NFC_BASE+0x00)     /* media bank register (RW,32,0x0000) */
#define MSCTRL      (NFC_BASE+0x04)     /* media sequencer controller register (RW,32,0x0000) */
#define MSWAIT      (NFC_BASE+0x08)     /* media sequencer wait register (RW,32,0x0000) */
#define MSSTS       (NFC_BASE+0x0C)     /* media sequencer status register (R,32,0x001E) */
#define MINTENBL    (NFC_BASE+0x10)     /* media sequencer interrupt enable register (RW,32,0x0000) */
#define MSERR       (NFC_BASE+0x14)     /* media sequencer error status register (R,32,0x0000) */
#define MMCMD       (NFC_BASE+0x18)     /* media command register (W,32,---) */
#define MMADR       (NFC_BASE+0x1C)     /* media address register (W,32,---) */
#define MMSEL       (NFC_BASE+0x20)     /* media select register (RW,32,0x0000) */
#define MMRDCTL     (NFC_BASE+0x24)     /* media data read control register (RW,32,0x0000) */
#define MOPTION     (NFC_BASE+0x28)     /* media option register (RW,32,0x0000) */
#define MMRDDATA    (NFC_BASE+0x2C)     /* media read data store register (R,32,0x0000 */
#define ECCLP1      (NFC_BASE+0x30)     /* ECC line parity register1 (R,32,0xFFFFFFFF) */
#define ECCCP1      (NFC_BASE+0x34)     /* ECC column parity register1 (R,32,0x003F003F)) */
#define ECCERR1     (NFC_BASE+0x38)     /* ECC error pointer register1 (R,32,0x0000) */
#define HREV1       (NFC_BASE+0x40)     /* redundancy reserve data register1 (RW,32,0x0000) */
#define HSTAD1      (NFC_BASE+0x44)     /* redundancy data /block-status.address register1 (RW,32,0x0000) */
#define HECC2       (NFC_BASE+0x48)     /* redundancy ECC2-High, ECC2-Low block address register (RW,32,0x0000) */
#define HECC1       (NFC_BASE+0x4C)     /* redundancy ECC1-High, ECC1-Low block address register (RW,32,0x0000) */
#define ECCLP3      (NFC_BASE+0x50)     /* ECC line parity register3 (R,32,0xFFFFFFFF) */
#define ECCCP3      (NFC_BASE+0x54)     /* ECC column parity register3 (R,32,0x003F003F)) */
#define ECCERR3     (NFC_BASE+0x58)     /* ECC error pointer register3 (R,32,0x0000) */
#define HREV3       (NFC_BASE+0x60)     /* redundancy reserve data register3 (RW,32,0x0000) */
#define HSTAD3      (NFC_BASE+0x64)     /* redundancy data/block status block address register (RW,32,0x0000) */

/*****************************************************/
/*    interrupt number                               */
/*****************************************************/
#define INT_SYSTEM_TIMER    0
#define INT_SSIO_0          1
#define INT_SSIO_1          2
#define INT_SSIO_2          3
#define INT_WDT             4
#define INT_RTC             5
#define INT_PIOE12          6
    /* reserved             7   */
#define INT_IRQS            8
#define INT_PWM             9
#define INT_SIO             10
#define INT_I2C             11
#define INT_ADC             12
#define INT_NANDFLASH       13
#define INT_IDEC            14
    /* reserved             15  */
#define INT_TIMER0          16
#define INT_TIMER1          17
#define INT_TIMER2          18
    /* reserved             19  */
#define INT_I2STRANS        20
#define INT_I2SRECEIVE      21
#define INT_DMA0            22
#define INT_DMA1            23
#define INT_DMA2            24
#define INT_DMA3            25
#define INT_PIOE15          26
#define INT_USBVBUS         26  /* same as PIOE15, we sense VBUS by PIOE15 */
#define INT_USB             27
    /* reserved             28  */
#define INT_PIOE14          29
    /* reserved             30  */
#define INT_PIOE13          31

/*****************************************************/
/*    other                                          */
/*****************************************************/
//#define UNLOCK      (0x3C)              /* unlock protect for mis-write */

#ifdef __cplusplus
};      /* End of 'extern "C"' */
#endif
#endif  /* End of ML69Q6203_H */