
#define MK_PTR_RW(x) (*(volatile int*)(x))

#define _RW   0x0000
#define _XOR  0x1000
#define _SET  0x2000
#define _CLR  0x3000

#define STK_CSR MK_PTR_RW(0xE000E010)
#define STK_RVR MK_PTR_RW(0xE000E014)
#define STK_CVR MK_PTR_RW(0xE000E018)


#define RESETS_BASE                 0x4000C000
#define RESETS_RESET_CLR       MK_PTR_RW(RESETS_BASE+0x0+_CLR)
#define RESETS_RESET_DONE_RW   MK_PTR_RW(RESETS_BASE+0x8+_RW)

#define CLOCKS_BASE                 0x40008000
#define CLK_SYS_RESUS_CTRL_RW       MK_PTR_RW(CLOCKS_BASE+0x78+_RW)
#define CLK_REF_CTRL_RW             MK_PTR_RW(CLOCKS_BASE+0x30+_RW)
#define CLK_SYS_CTRL_RW             MK_PTR_RW(CLOCKS_BASE+0x3C+_RW)
#define CLK_PERI_CTRL_RW            MK_PTR_RW(CLOCKS_BASE+0x48+_RW)

#define UART0_BASE                  0x40034000
#define UART0_BASE_UARTDR_RW        MK_PTR_RW(UART0_BASE+0x000+_RW)
#define UART0_BASE_UARTFR_RW        MK_PTR_RW(UART0_BASE+0x018+_RW)
#define UART0_BASE_UARTIBRD_RW      MK_PTR_RW(UART0_BASE+0x024+_RW)
#define UART0_BASE_UARTFBRD_RW      MK_PTR_RW(UART0_BASE+0x028+_RW)
#define UART0_BASE_UARTLCR_H_RW     MK_PTR_RW(UART0_BASE+0x02C+_RW)
#define UART0_BASE_UARTCR_RW        MK_PTR_RW(UART0_BASE+0x030+_RW)

#define SIO_BASE                    0xD0000000
#define SIO_GPIO_OE_CLR             MK_PTR_RW(SIO_BASE+0x28)
#define SIO_GPIO_OUT_CLR            MK_PTR_RW(SIO_BASE+0x18)
#define SIO_GPIO_OUT_XOR            MK_PTR_RW(SIO_BASE+0x1C)
#define SIO_GPIO_OE_SET             MK_PTR_RW(SIO_BASE+0x24)


#define PADS_BANK0_BASE             0x4001C000

#define PADS_BANK0_GPIO0_RW         MK_PTR_RW(PADS_BANK0_BASE+0x04+_RW)
#define PADS_BANK0_GPIO0_XOR        MK_PTR_RW(PADS_BANK0_BASE+0x04+_XOR)
#define PADS_BANK0_GPIO1_RW         MK_PTR_RW(PADS_BANK0_BASE+0x08+_RW)
#define PADS_BANK0_GPIO1_XOR        MK_PTR_RW(PADS_BANK0_BASE+0x08+_XOR)

#define PADS_BANK0_GPIO25_RW        MK_PTR_RW(PADS_BANK0_BASE+0x68+_RW)
#define PADS_BANK0_GPIO25_XOR       MK_PTR_RW(PADS_BANK0_BASE+0x68+_XOR)


#define XOSC_BASE                   0x40024000
#define XOSC_CTRL_RW                MK_PTR_RW(XOSC_BASE+0x00+_RW)
#define XOSC_STARTUP_RW             MK_PTR_RW(XOSC_BASE+0x0C+_RW)
#define XOSC_CTRL_SET               MK_PTR_RW(XOSC_BASE+0x00+_SET)
#define XOSC_STATUS_RW              MK_PTR_RW(XOSC_BASE+0x04+_RW)

#define IO_BANK0_BASE               0x40014000

#define IO_BANK0_GPIO0_CTRL_RW      MK_PTR_RW(IO_BANK0_BASE+0x004+_RW)
#define IO_BANK0_GPIO1_CTRL_RW      MK_PTR_RW(IO_BANK0_BASE+0x00C+_RW)

#define IO_BANK0_GPIO25_CTRL_RW     MK_PTR_RW(IO_BANK0_BASE+0x0CC+_RW)


#define PIO0_BASE                   0x50200000
#define PIO0_CTRL_RW                MK_PTR_RW(PIO0_BASE+0x000+_RW)
#define PIO0_FSTAT_RW               MK_PTR_RW(PIO0_BASE+0x004+_RW)
#define PIO0_TXF0_RW                MK_PTR_RW(PIO0_BASE+0x010+_RW)
#define PIO0_TXF1_RW                MK_PTR_RW(PIO0_BASE+0x014+_RW)
#define PIO0_RXF0_RW                MK_PTR_RW(PIO0_BASE+0x020+_RW)
#define PIO0_RXF1_RW                MK_PTR_RW(PIO0_BASE+0x024+_RW)
#define PIO0_INSTR_MEM0_RW          MK_PTR_RW(PIO0_BASE+0x048+_RW)
#define PIO0_INSTR_MEM1_RW          MK_PTR_RW(PIO0_BASE+0x04C+_RW)
#define PIO0_INSTR_MEM2_RW          MK_PTR_RW(PIO0_BASE+0x050+_RW)
#define PIO0_INSTR_MEM3_RW          MK_PTR_RW(PIO0_BASE+0x054+_RW)
#define PIO0_INSTR_MEM4_RW          MK_PTR_RW(PIO0_BASE+0x058+_RW)
#define PIO0_INSTR_MEM5_RW          MK_PTR_RW(PIO0_BASE+0x05C+_RW)
#define PIO0_INSTR_MEM6_RW          MK_PTR_RW(PIO0_BASE+0x060+_RW)
#define PIO0_INSTR_MEM7_RW          MK_PTR_RW(PIO0_BASE+0x064+_RW)
#define PIO0_INSTR_MEM8_RW          MK_PTR_RW(PIO0_BASE+0x068+_RW)
#define PIO0_INSTR_MEM9_RW          MK_PTR_RW(PIO0_BASE+0x06C+_RW)
#define PIO0_INSTR_MEM10_RW         MK_PTR_RW(PIO0_BASE+0x070+_RW)
#define PIO0_INSTR_MEM11_RW         MK_PTR_RW(PIO0_BASE+0x074+_RW)
#define PIO0_INSTR_MEM12_RW         MK_PTR_RW(PIO0_BASE+0x078+_RW)
#define PIO0_INSTR_MEM13_RW         MK_PTR_RW(PIO0_BASE+0x07C+_RW)
#define PIO0_INSTR_MEM14_RW         MK_PTR_RW(PIO0_BASE+0x080+_RW)
#define PIO0_INSTR_MEM15_RW         MK_PTR_RW(PIO0_BASE+0x084+_RW)
#define PIO0_INSTR_MEM16_RW         MK_PTR_RW(PIO0_BASE+0x088+_RW)
#define PIO0_INSTR_MEM17_RW         MK_PTR_RW(PIO0_BASE+0x08C+_RW)
#define PIO0_INSTR_MEM18_RW         MK_PTR_RW(PIO0_BASE+0x090+_RW)
#define PIO0_INSTR_MEM19_RW         MK_PTR_RW(PIO0_BASE+0x094+_RW)
#define PIO0_INSTR_MEM20_RW         MK_PTR_RW(PIO0_BASE+0x098+_RW)
#define PIO0_INSTR_MEM21_RW         MK_PTR_RW(PIO0_BASE+0x09C+_RW)
#define PIO0_SM0_CLKDIV_RW          MK_PTR_RW(PIO0_BASE+0x0C8+_RW)
#define PIO0_SM0_EXECCTRL_RW        MK_PTR_RW(PIO0_BASE+0x0CC+_RW)
#define PIO0_SM0_PINCTRL_RW         MK_PTR_RW(PIO0_BASE+0x0DC+_RW)
#define PIO0_SM1_CLKDIV_RW          MK_PTR_RW(PIO0_BASE+0x0E0+_RW)
#define PIO0_SM1_EXECCTRL_RW        MK_PTR_RW(PIO0_BASE+0x0E4+_RW)
#define PIO0_SM1_PINCTRL_RW         MK_PTR_RW(PIO0_BASE+0x0F4+_RW)
#define PIO0_SM1_SHIFTCTRL_RW       MK_PTR_RW(PIO0_BASE+0x0E8+_RW)

#define PIO0_SM0_INSTR_RW           MK_PTR_RW(PIO0_BASE+0x0D8+_RW)
#define PIO0_SM1_INSTR_RW           MK_PTR_RW(PIO0_BASE+0x0F0+_RW)

