/*
 *  TOPPERS/ASP Kernel
 *      Toyohashi Open Platform for Embedded Real-Time Systems/
 *      Advanced Standard Profile Kernel
 * 
 *  Copyright (C) 2008-2011 by Embedded and Real-Time Systems Laboratory
 *              Graduate School of Information Science, Nagoya Univ., JAPAN
 * 
 *  上記著作権者は，以下の(1)〜(4)の条件を満たす場合に限り，本ソフトウェ
 *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
 *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
 *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
 *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
 *      スコード中に含まれていること．
 *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
 *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
 *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
 *      の無保証規定を掲載すること．
 *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
 *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
 *      と．
 *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
 *        作権表示，この利用条件および下記の無保証規定を掲載すること．
 *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
 *        報告すること．
 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
 *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
 *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
 *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
 *      免責すること．
 * 
 *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
 *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
 *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
 *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
 *  の責任を負わない．
 * 
 */

#ifndef TOPPERS_FM4_MB9BXXX_H
#define TOPPERS_FM4_MB9BXXX_H

#include <sil.h>

/*
 *  システムクロックの定義（発振子周波数4MHz）
 */
#define SystemFrequency	160000000
#define SysFreHCLK		160000000	/* HCLK = MasterClock / 1 */
#define SysFrePCLK0		80000000	/* PCLK0 = HCLK / 2 */
#define SysFrePCLK1		80000000	/* PCLK1 = HCLK / 2 */
#define SysFrePCLK2		80000000	/* PCLK2 = HCLK / 2 */
#define SysFreTPIU		0			/* TPIUCLK : Disable */

#define SYS_CLOCK		(SystemFrequency)

/*
 *  割込み番号の最大値
 */
#define TMAX_INTNO   (16 + 127)

/*
 *  割込み優先度ビット幅中のサブ優先度のビット幅
 */
#define TBITW_SUBIPRI  0

/*
 *  割込みベクタ番号定義
 */
#define IRQ_VECTOR_CSV			(16 + 0)
#define IRQ_VECTOR_SWDT			(16 + 1)
#define IRQ_VECTOR_LVD			(16 + 2)
#define IRQ_VECTOR_EXINT0_7(ch)	(16 + 11+ch)
#define IRQ_VECTOR_EXINT8_15(ch)(16 + 51+ch-8)
#define IRQ_VECTOR_MFSRX(ch)	(16 + 60+ch*2)
#define IRQ_VECTOR_MFSTX(ch)	(16 + 61+ch*2)
#define IRQ_VECTOR_BTIM0_7(ch)	(16 + 39+ch)
#define IRQ_VECTOR_DMAC(ch)		(16 + 83+ch)
#define IRQ_VECTOR_BTIM8_11(ch)	(16 + 98+ch-8)
#define IRQ_VECTOR_BTIM12_15	(16 + 118)

#define FM4_PERIPH_BASE			(0x40000000UL)
#define FM4_FLASH_IF_BASE		(FM4_PERIPH_BASE + 0x00000UL)
#define FM4_CRG_BASE			(FM4_PERIPH_BASE + 0x10000UL)
#define FM4_HWWDT_BASE			(FM4_PERIPH_BASE + 0x11000UL)
#define FM4_CRTRIM_BASE			(FM4_PERIPH_BASE + 0x2E000UL)
#define FM4_GPIO_BASE			(FM4_PERIPH_BASE + 0x6F000UL)
#define FM4_MFS0_UART_BASE		(FM4_PERIPH_BASE + 0x38000UL)
#define FM4_MFS1_UART_BASE		(FM4_PERIPH_BASE + 0x38100UL)
#define FM4_MFS2_UART_BASE		(FM4_PERIPH_BASE + 0x38200UL)
#define FM4_MFS3_UART_BASE		(FM4_PERIPH_BASE + 0x38300UL)
#define FM4_MFS4_UART_BASE		(FM4_PERIPH_BASE + 0x38400UL)
#define FM4_MFS5_UART_BASE		(FM4_PERIPH_BASE + 0x38500UL)
#define FM4_MFS6_UART_BASE		(FM4_PERIPH_BASE + 0x38600UL)
#define FM4_MFS7_UART_BASE		(FM4_PERIPH_BASE + 0x38700UL)

#define BITBAND(a, b)			((volatile uint32_t*)(0x42000000UL + (a - FM4_PERIPH_BASE) * 32 + b * 4))

#define FM4_FLASH_IF_CRTRMM		(FM4_FLASH_IF_BASE + 0x100)

#define FM4_CRG_SCM_CTL			(FM4_CRG_BASE + 0x00)
#define FM4_CRG_SCM_STR			(FM4_CRG_BASE + 0x04)
#define FM4_CRG_STB_CTL			(FM4_CRG_BASE + 0x08)
#define FM4_CRG_RST_STR			(FM4_CRG_BASE + 0x0c)
#define FM4_CRG_BSC_PSR			(FM4_CRG_BASE + 0x10)
#define FM4_CRG_APBC0_PSR		(FM4_CRG_BASE + 0x14)
#define FM4_CRG_APBC1_PSR		(FM4_CRG_BASE + 0x18)
#define FM4_CRG_APBC2_PSR		(FM4_CRG_BASE + 0x1C)
#define FM4_CRG_SWC_PSR			(FM4_CRG_BASE + 0x20)
#define FM4_CRG_TTC_PSR			(FM4_CRG_BASE + 0x28)
#define FM4_CRG_CSW_TMR			(FM4_CRG_BASE + 0x30)
#define FM4_CRG_PSW_TMR			(FM4_CRG_BASE + 0x34)
#define FM4_CRG_PLL_CTL1		(FM4_CRG_BASE + 0x38)
#define FM4_CRG_PLL_CTL2		(FM4_CRG_BASE + 0x3c)
#define FM4_CRG_CSV_CTL			(FM4_CRG_BASE + 0x40)
#define FM4_CRG_CSV_STR			(FM4_CRG_BASE + 0x44)
#define FM4_CRG_FCSWH_CTL		(FM4_CRG_BASE + 0x48)
#define FM4_CRG_FCSWL_CTL		(FM4_CRG_BASE + 0x4C)
#define FM4_CRG_FCSWD_CTL		(FM4_CRG_BASE + 0x50)
#define FM4_CRG_DBWDT_CTL		(FM4_CRG_BASE + 0x54)
#define FM4_CRG_INT_ENR			(FM4_CRG_BASE + 0x60)
#define FM4_CRG_INT_STR			(FM4_CRG_BASE + 0x64)
#define FM4_CRG_INT_CLR			(FM4_CRG_BASE + 0x68)

#define SCM_CTL_MOSCE			0x02
#define SCM_CTL_SOSCE			0x08
#define SCM_CTL_PLLE			0x10
#define SCM_CTL_RCS_			0xe0
#define SCM_STR_MORDY			0x02
#define SCM_STR_SORDY			0x08
#define SCM_STR_PLRDY			0x10
#define SCM_STR_RCM				0xe0
#define APBC1_PSR_APBC1RST		0x10
#define APBC1_PSR_APBC1EN		0x80
#define APBC2_PSR_APBC2RST		0x10
#define APBC2_PSR_APBC2EN		0x80
#define SWC_PSR_TESTB			0x80
#define PSW_TMR_PINC			0x10

#define FM4_HWWDT_WDG_LDR		(FM4_HWWDT_BASE + 0x000)
#define FM4_HWWDT_WDG_VLR		(FM4_HWWDT_BASE + 0x004)
#define FM4_HWWDT_WDG_CTL		(FM4_HWWDT_BASE + 0x008)
#define FM4_HWWDT_WDG_ICL		(FM4_HWWDT_BASE + 0x00C)
#define FM4_HWWDT_WDG_RIS		(FM4_HWWDT_BASE + 0x010)
#define FM4_HWWDT_WDG_LCK		(FM4_HWWDT_BASE + 0xC00)

#define FM4_CRTRIM_MCR_PSR		(FM4_CRTRIM_BASE + 0x00)
#define FM4_CRTRIM_MCR_FTRM		(FM4_CRTRIM_BASE + 0x04)
#define FM4_CRTRIM_MCR_RLR		(FM4_CRTRIM_BASE + 0x0C)

#define FM4_GPIO_PFR(ch)		(FM4_GPIO_BASE + 0x000 + ch*4)
#define FM4_GPIO_PCR(ch)		(FM4_GPIO_BASE + 0x100 + ch*4)
#define FM4_GPIO_ADE			(FM4_GPIO_BASE + 0x500)
#define FM4_GPIO_EPFR(n)		(FM4_GPIO_BASE + 0x600 + n*4)

/*
 *  MFSx Register Bit Definition
 */
#define SMR_SOE					0x01U
#define SMR_BDS					0x04U
#define SMR_SBL					0x08U
#define SMR_WUCR				0x10U
#define SMR_MD_UART				0x00U
#define SMR_MD_UART_MP			0x20U
#define SMR_MD_SIO				0x40U
#define SMR_MD_LIN				0x60U
#define SMR_MD_I2C				0x80U

#define SCR_TXE					0x01U
#define SCR_RXE					0x02U
#define SCR_TBIE				0x04U
#define SCR_TIE					0x08U
#define SCR_RIE					0x10U
#define SCR_UPCL				0x80U

#define SSR_TBI					0x01U
#define SSR_TDRE				0x02U
#define SSR_RDRF				0x04U
#define SSR_ORE					0x08U
#define SSR_FRE					0x10U
#define SSR_PE					0x20U
#define SSR_REC					0x80U

#define ESCR_P					0x08U
#define ESCR_PEN				0x10U
#define ESCR_INV				0x20U
#define ESCR_ESBL				0x40U
#define ESCR_FLWEN				0x80U
#define ESCR_DATABITS_8			0x00U
#define ESCR_DATABITS_5			0x01U
#define ESCR_DATABITS_6			0x02U
#define ESCR_DATABITS_7			0x03U
#define ESCR_DATABITS_9			0x04U

#define BGR_EXT					0x8000U

#ifndef TOPPERS_MACRO_ONLY

#endif /* TOPPERS_MACRO_ONLY */

#endif /* TOPPERS_FM4_MB9BXXX_H */
