/*
 *  TOPPERS/SSP Kernel
 *      Smallest Set Profile Kernel
 *
 *  Copyright (C) 2008 by Witz Corporation, JAPAN
 *  Copyright (C) 2010,2011 by Naoki Saito
 *             Nagoya Municipal Industrial Research Institute, JAPAN
 * 
 *  上記著作権者は，以下の (1)〜(4) の条件を満たす場合に限り，本ソフトウェ
 *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改変・
 *  再配布（以下，利用と呼ぶ）することを無償で許諾する．
 *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作権
 *      表示，この利用条件および下記の無保証規定が，そのままの形でソース
 *      コード中に含まれていること．
 *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使用
 *      できる形で再配布する場合には，再配布に伴うドキュメント（利用者マ
 *      ニュアルなど）に，上記の著作権表示，この利用条件および下記の無保
 *      証規定を掲載すること．
 *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使用
 *      できない形で再配布する場合には，次のいずれかの条件を満たすこと．
 *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著作
 *        権表示，この利用条件および下記の無保証規定を掲載すること．
 *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに報
 *        告すること．
 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害
 *      からも，上記著作権者およびTOPPERSプロジェクトを免責すること．また，
 *      本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ
 *      く請求からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
 * 
 *  本ソフトウェアは，無保証で提供されているものである．上記著作権者およ
 *  びTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的に対す
 *  る適合性も含めて，いかなる保証も行わない．また，本ソフトウェアの利用
 *  により直接的または間接的に生じたいかなる損害に関しても，その責任を負
 *  わない．
 * 
 */

/*
 *  R8C/23に依存する定義
 */


#ifndef TOPPERS_R8C23_H
#define TOPPERS_R8C23_H

/*
 *  CPU例外ハンドラ番号の定義
 */
#define EXCNO_UNDEF_INSTRUNCTION	0	/* 未定義命令 */
#define EXCNO_OVERFLOW          	1	/* オーバーフロー */
#define EXCNO_BRK_INSTRUCTION   	2	/* BRK命令 */
#define EXCNO_ADDRESS_MATCH     	3	/* アドレス一致 */
#define EXCNO_WDT               	5	/* ウォッチドッグタイマ */
#define EXCNO_XIN_STOP          	5	/* 発振停止検出 */
#define EXCNO_LOW_VOLT_DETECT   	5	/* 電圧低下検出 */
#define EXCNO_RESET             	8	/* リセット */

/*
 *  割込み番号の定義
 */
#define	INTNO_BRK   	0 	/* BRK */

#define INTNO_C01WK 	3 	/* CAN0ウェイクアップ */
#define INTNO_C0REC 	4 	/* CAN0受信完了 */
#define INTNO_C0TRM 	5 	/* CAN0送信完了 */
#define INTNO_C01ERR	6 	/* CAN0エラー */

#define INTNO_TRD0  	8 	/* タイマRD(チャネル0) */
#define INTNO_TRD1  	9 	/* タイマRD(チャネル1) */
#define INTNO_TRE   	10	/* タイマRE */

#define INTNO_KUP   	13	/* キー入力 */
#define INTNO_AD    	14	/* ADコンバータ */
#define INTNO_IIC   	15	/* チップセレクト付クロック同期型シリアルIO
                    	  	   /I2Cバスインタフェース */

#define INTNO_S0T   	17	/* UART0送信,NACK */
#define INTNO_S0R   	18	/* UART0受信,ACK */
#define INTNO_S1T   	19	/* UART1送信,NACK */
#define INTNO_S1R   	20	/* UART1受信,ACK */
#define INTNO_INT2  	21	/* INT2 */
#define INTNO_TRA   	22	/* タイマRA */

#define INTNO_TRB   	24	/* タイマRB */
#define INTNO_INT1  	25	/* INT1 */
#define INTNO_INT3  	26	/* INT3 */

#define INTNO_INT0  	29	/* INT0 */

/*
 *  割込みハンドラ番号の定義
 */
#define	INHNO_BRK   	INTNO_BRK   	/* BRK */

#define INHNO_C01WK 	INTNO_C01WK 	/* CAN0ウェイクアップ */
#define INHNO_C0REC 	INTNO_C0REC 	/* CAN0受信完了 */
#define INHNO_C0TRM 	INTNO_C0TRM 	/* CAN0送信完了 */
#define INHNO_C01ERR	INTNO_C01ERR	/* CAN0エラー */

#define INHNO_TRD0  	INTNO_TRD0  	/* タイマRD(チャネル0) */
#define INHNO_TRD1  	INTNO_TRD1  	/* タイマRD(チャネル1) */
#define INHNO_TRE   	INTNO_TRE   	/* タイマRE */

#define INHNO_KUP   	INTNO_KUP   	/* キー入力 */
#define INHNO_AD    	INTNO_AD    	/* ADコンバータ */
#define INHNO_IIC   	INTNO_IIC   	/* チップセレクト付クロック同期型シリアルIO
                    	            	   /I2Cバスインタフェース */

#define INHNO_S0T   	INTNO_S0T   	/* UART0送信,NACK */
#define INHNO_S0R   	INTNO_S0R   	/* UART0受信,ACK */
#define INHNO_S1T   	INTNO_S1T   	/* UART1送信,NACK */
#define INHNO_S1R   	INTNO_S1R   	/* UART1受信,ACK */
#define INHNO_INT2  	INTNO_INT2  	/* INT2 */
#define INHNO_TRA   	INTNO_TRA   	/* タイマRA */

#define INHNO_TRB   	INTNO_TRB   	/* タイマRB */
#define INHNO_INT1  	INTNO_INT1  	/* INT1 */
#define INHNO_INT3  	INTNO_INT3  	/* INT3 */

#define INHNO_INT0  	INTNO_INT0  	/* INT0 */


/*
 *  割込み制御レジスタ定義
 */
#define TADR_C01WKIC 	0x0043
#define TADR_C0RECIC 	0x0044
#define TADR_C0TRMIC 	0x0045
#define TADR_C01ERRIC	0x0046
#define TADR_TRD0IC  	0x0048
#define TADR_TRD1IC  	0x0049
#define TADR_TREIC   	0x004A
#define TADR_KUPIC   	0x004D
#define TADR_ADIC    	0x004E
#define TADR_IICIC   	0x004F
#define TADR_S0TIC   	0x0051
#define TADR_S0RIC   	0x0052
#define TADR_S1TIC   	0x0053
#define TADR_S1RIC   	0x0054
#define TADR_INT2IC  	0x0055
#define TADR_TRAIC   	0x0056
#define TADR_TRBIC   	0x0058
#define TADR_INT1IC  	0x0059
#define TADR_INT3IC  	0x005A
#define TADR_INT0IC  	0x005D


/*
 *  TRA関連レジスタ(システムティック用)
 */
#define TADR_TRACR  	0x0100	/* タイマRA 制御レジスタ */
#define TADR_TRAIOC 	0x0101	/* タイマRA I/Oレジスタ */
#define TADR_TRAMR  	0x0102	/* タイマRA モードレジスタ */
#define TADR_TRAPRE 	0x0103	/* タイマRA プリスケーラレジスタ */
#define TADR_TRA    	0x0104	/* タイマRA レジスタ */

#define TBIT_TRACR_TSTART	0x01	/* タイマRA カウント開始ビット */

/*
 *  汎用ポートレジスタ
 */
#define TBIT_BIT0	0x01
#define TBIT_BIT1	0x02
#define TBIT_BIT2	0x04
#define TBIT_BIT3	0x08
#define TBIT_BIT4	0x10
#define TBIT_BIT5	0x20
#define TBIT_BIT6	0x40
#define TBIT_BIT7	0x80

#define TBIT_PMR_U1PINSEL	TBIT_BIT4


#define TADR_P0   	0x0e0	/* ポートP0レジスタ */
#define TADR_P1   	0x0e1	/* ポートP1レジスタ */
#define TADR_PD0  	0x0e2	/* ポートP0方向レジスタ */
#define TADR_PD1  	0x0e3	/* ポートP1方向レジスタ */
#define TADR_P2   	0x0e4	/* ポートP2レジスタ */
#define TADR_P3   	0x0e5	/* ポートP3レジスタ */
#define	TADR_PD2  	0x0e6	/* ポートP2方向レジスタ */
#define	TADR_PD3  	0x0e7	/* ポートP3方向レジスタ */
#define TADR_P4   	0x0e8	/* ポートP4レジスタ */

#define	TADR_PD4  	0x0ea	/* ポートP4方向レジスタ */
#define TADR_P6   	0x0ec	/* ポートP6レジスタ */
#define	TADR_PD6  	0x0ee	/* ポートP6方向レジスタ */

#define	TADR_PMR  	0x0f8	/* ポートモードレジスタ */
#define	TADR_INTEN	0x0f9	/* 外部入力許可レジスタ */
#define	TADR_INTF 	0x0fa	/* INT入力フィルタ選択レジスタ */
#define	TADR_KIEN 	0x0fb	/* キー入力許可レジスタ */

#define	TADR_PUR0 	0x0fc	/* プルアップ制御レジスタ０ */
#define	TADR_PUR1 	0x0fd	/* プルアップ制御レジスタ１ */


#endif	/* TOPPERS_R8C23_H */
