/************************************************************************
 ************************************************************************
 ****                                                                ****
 ****    h8_3694.h : H8/3694F 定義ファイル                           ****
 ****                                                                ****
 ************************************************************************
 ************************************************************************/
/**** レジスタ操作マクロ ****/
#define	stopirq()	asm("	orc	#128, ccr")
#define startirq()	asm("	andc	#127, ccr")

/************************************************************************
 *    メモリマップ                                                      *
 ************************************************************************/
#define	VECTOR_ADD	(0x0000)
#define	VECTOR_SIZE	(0x0034)
#define	FLASH_ADD	(0x0034)
#define FLASH_END	(0x7fff)
#define FLASH_SIZE	(0x8000 - 0x0034)

#define RAM_ADD		(0xf780)
#define	RAM_END		(0xff80)
#define RAM_SIZE	(0x0800)

/************************************************************************
 *    内臓モジュールレジスタ定義                                        *
 ************************************************************************/
/**** 割り込みコントローラ ****/
#define	IEGR1	*((unsigned char *)0xFFF2)	/* IRQ エッジ選択 1 */
#define	IEGR2	*((unsigned char *)0xFFF3)	/* IRQ エッジ選択 2 */
#define	IENR1	*((unsigned char *)0xFFF4)	/* IRQ イネーブル */
#define	IRR1	*((unsigned char *)0xFFF6)	/* IRQ フラグ */
#define	IWPR	*((unsigned char *)0xFFF8)	/* WakeUp 割り込みフラグ */

/**** アドレスブレークコントローラ ****/
#define	ABRKCR	*((unsigned char *)0xFFC8)	/* Address Break Control */
#define	ABRKSR	*((unsigned char *)0xFFC9)	/* Address Break Status */
#define	BARH	*((unsigned char *)0xFFCA)	/* Break Address H */
#define	BARL	*((unsigned char *)0xFFCB)	/* Break Address L */
#define	BDRH	*((unsigned char *)0xFFCC)	/* Break Data H */
#define	BDRL	*((unsigned char *)0xFFCD)	/* Break Data L */

/**** 低消費電力・スタンバイコントローラ ****/
#define	MSTCR1	*((unsigned char *)0xFFF9)	/* Module Stanby Control */
#define	SYSCR1	*((unsigned char *)0xFFF0)	/* System Control 1 */
#define	SYSCR2	*((unsigned char *)0xFFF1)	/* System Control 2 */

/**** フラッシュメモリ ****/
#define	FLMCR1	*((unsigned char *)0xFF90)	/* Flash Memory control 1 */
#define	FLMCR2	*((unsigned char *)0xFF91)	/* Flash Memory control 2 */
#define	FLPWCR	*((unsigned char *)0xFF92)	/* Flash Power control */
#define	EBR1	*((unsigned char *)0xFF93)	/* ブロック指定レジスタ 1 */
#define	FENR	*((unsigned char *)0xFF9B)	/* Flash Enable */

/**** I/Oポート ****/
#define	PUCR1	*((unsigned char *)0xFFD0)	/* ポートプルアップ 1 */
#define	PUCR5	*((unsigned char *)0xFFD1)	/* ポートプルアップ 5 */
#define	PDR1	*((unsigned char *)0xFFD4)	/* ポートデータ 1 */
#define	PDR2	*((unsigned char *)0xFFD5)	/* ポートデータ 2 */
#define	PDR5	*((unsigned char *)0xFFD8)	/* ポートデータ 5 */
#define PDR5_AD (0xFFD8)			/* ポートデータ 5 アドレス */
#define	PDR7	*((unsigned char *)0xFFDA)	/* ポートデータ 7 */
#define	PDR8	*((unsigned char *)0xFFDB)	/* ポートデータ 8 */
#define	PDRB	*((unsigned char *)0xFFDD)	/* ポートデータ B */

#define	PMR1	*((unsigned char *)0xFFE0)	/* ポートモードレジスタ 5 */
#define	PMR5	*((unsigned char *)0xFFE1)	/* ポートモードレジスタ 1 */
#define	PCR1	*((unsigned char *)0xFFE4)	/* ポートコントロール 1 */
#define PCUR1	*((unsigned char *)0xFFD0)	/* ポートプルアップ 1 */
#define	PCR2	*((unsigned char *)0xFFE5)	/* ポートコントロール 2 */
#define	PCR5	*((unsigned char *)0xFFE8)	/* ポートコントロール 5 */
#define PCUR5	*((unsigned char *)0xFFD1)	/* ポートプルアップ 5 */
#define	PCR7	*((unsigned char *)0xFFEA)	/* ポートコントロール 7 */
#define	PCR8	*((unsigned char *)0xFFEB)	/* ポートコントロール 8 */

/**** タイマA ****/
#define	TMA	*((unsigned char *)0xFFA6)	/* タイマモード A */
#define	TCA	*((unsigned char *)0xFFA7)	/* タイマカウンタ A */

/**** タイマV ****/
#define	TCRV0	*((unsigned char *)0xFFA0)	/* タイマコントロール V0 */
#define	TCSRV	*((unsigned char *)0xFFA1)	/* コントロール/ステータス V */
#define	TCORA	*((unsigned char *)0xFFA2)	/* タイムコンスタント A */
#define	TCORB	*((unsigned char *)0xFFA3)	/* タイムコンスタント B */
#define	TCNTV	*((unsigned char *)0xFFA4)	/* タイマカウンタ V */
#define	TCRV1	*((unsigned char *)0xFFA5)	/* タイマコントロール V1 */

/**** タイマW ****/
#define	TMRW	*((unsigned char *)0xFF80)	/* タイマモード W */
#define	TCRW	*((unsigned char *)0xFF81)	/* タイマコントロール W */
#define	TIERW   *((unsigned char *)0xFF82)	/* タイマInterrupt Enable W */
#define	TSRW	*((unsigned char *)0xFF83)	/* タイマステータス W */
#define	TIOR0	*((unsigned char *)0xFF84)	/* タイマIOコントロール0 */
#define	TIOR1	*((unsigned char *)0xFF85)	/* タイマIOコントロール1 */
#define	TCNT	*((unsigned int  *)0xFF86)	/* タイマカウンタ */
#define	GRA	*((unsigned int  *)0xFF88)	/* ジェネラルレジスタ A */
#define	GRB	*((unsigned int  *)0xFF8A)	/* ジェネラルレジスタ B */
#define	GRC	*((unsigned int  *)0xFF8C)	/* ジェネラルレジスタ C */
#define	GRD	*((unsigned int  *)0xFF8E)	/* ジェネラルレジスタ D */

/**** ウォッチドッグタイマ ****/
#define	TCSRWD	*((unsigned char *)0xFFC0)	/* タイマコントロール WD */
#define	TCWD	*((unsigned char *)0xFFC1)	/* タイマカウンタ WD */
#define	TMWD	*((unsigned char *)0xFFC2)	/* タイマモード WD */

/**** シリアルコミュニケーションインターフェース ****/
#define	SMR	*((unsigned char *)0xFFA8)	/* シリアルモードレジスタ */
#define	BRR	*((unsigned char *)0xFFA9)	/* ビットレートレジスタ */
#define	SCR3	*((unsigned char *)0xFFAA)	/* シリアルコントロール 3 */
#define	TDR	*((unsigned char *)0xFFAB)	/* 送信データレジスタ */
#define	SSR	*((unsigned char *)0xFFAC)	/* シリアルステータス */
#define	RDR	*((unsigned char *)0xFFAD)	/* 受信データレジスタ */

/**** IICバスインターフェース ****/
#define	ICCR1	*((unsigned char *)0xF748)	/* IICバスコントロール1 */
#define	ICCR2	*((unsigned char *)0xF749)	/* IICバスコントロール2 */
#define	ICMR	*((unsigned char *)0xF74A)	/* IICバスモードレジスタ */
#define	ICIER	*((unsigned char *)0xF74B)	/* IICバスInterrupt Enable */
#define	ICSR	*((unsigned char *)0xF74C)	/* IICバスステータス */
#define	SAR	*((unsigned char *)0xF74D)	/* スレーブアドレス */
#define	ICDRT	*((unsigned char *)0xF74E)	/* IICバス送信データ */
#define	ICDRR	*((unsigned char *)0xF74F)	/* IICバス受信データ */

/**** AD変換器 ****/
#define	ADDRA	*((unsigned int  *)0xFFB0)	/* ADデータレジスタ A */
#define	ADDRB	*((unsigned int  *)0xFFB2)	/* ADデータレジスタ B */
#define	ADDRC	*((unsigned int  *)0xFFB4)	/* ADデータレジスタ C */
#define	ADDRD	*((unsigned int  *)0xFFB6)	/* ADデータレジスタ D */
#define	ADCSR	*((unsigned char *)0xFFB8)	/* ADコントロール/ステータス */
#define	ADCR	*((unsigned char *)0xFFB9)	/* ADコントロール */

/**** 低電圧検出回路（オプション） ****/
#define	LVDCR	*((unsigned char *)0xF730)	/* 低電圧検出コントロール */
#define	LVDSR	*((unsigned char *)0xF731)	/* 低電圧ステータス */

/**** EEPROM(H8/3694Nのみ) ****/
#define	EKR	*((unsigned char *)0xFF10)	/* EPROM Key Register */

/* end of file */


