00001 /* 00002 * TOPPERS/ASP Kernel 00003 * Toyohashi Open Platform for Embedded Real-Time Systems/ 00004 * Advanced Standard Profile Kernel 00005 * 00006 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 00007 * Toyohashi Univ. of Technology, JAPAN 00008 * Copyright (C) 2005-2008 by Embedded and Real-Time Systems Laboratory 00009 * Graduate School of Information Science, Nagoya Univ., JAPAN 00010 * 00011 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 00012 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 00013 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 00014 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 00015 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 00016 * スコード中に含まれていること. 00017 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 00018 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 00019 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 00020 * の無保証規定を掲載すること. 00021 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 00022 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 00023 * と. 00024 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 00025 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 00026 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 00027 * 報告すること. 00028 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 00029 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 00030 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 00031 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 00032 * 免責すること. 00033 * 00034 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 00035 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 00036 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 00037 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 00038 * の責任を負わない. 00039 * 00040 * @(#) $Id: target_config.h 887 2008-04-11 11:16:07Z hiro $ 00041 */ 00042 00043 /* 00044 * ターゲット依存モジュール(DVE-68K/40用) 00045 * 00046 * カーネルのターゲット依存部のインクルードファイル.kernel_impl.hのター 00047 * ゲット依存部の位置付けとなる. 00048 */ 00049 00050 #ifndef TOPPERS_TARGET_CONFIG_H 00051 #define TOPPERS_TARGET_CONFIG_H 00052 00053 /* 00054 * ターゲットシステムのハードウェア資源の定義 00055 */ 00056 #include "dve68k.h" 00057 00058 /* 00059 * トレースログに関する設定 00060 */ 00061 #ifdef TOPPERS_ENABLE_TRACE 00062 #include "logtrace/trace_config.h" 00063 #endif /* TOPPERS_ENABLE_TRACE */ 00064 00065 /* 00066 * ASPカーネル動作時のメモリマップと関連する定義 00067 * 00068 * 00000000 - 0000ffff ROMモニタ/スタブワークエリア(64KB) 00069 * 00010000 - 000fffff コード領域(約1MB) 00070 * 00100000 - データ領域(約3MB) 00071 * - 003fffff デフォルトの非タスクコンテキスト用のスタック領域 00072 */ 00073 00074 /* 00075 * デフォルトの非タスクコンテキスト用のスタック領域の定義 00076 */ 00077 #define DEFAULT_ISTKSZ 0x2000U 00078 #define DEFAULT_ISTK (void *)(0x00400000U - DEFAULT_ISTKSZ) 00079 00080 #ifndef TOPPERS_MACRO_ONLY 00081 00082 /* 00083 * プロセッサ識別のための変数(マルチプロセッサ対応) 00084 */ 00085 extern uint_t board_id; /* ボードID */ 00086 extern void *board_addr; /* ローカルメモリの先頭アドレス */ 00087 00088 /* 00089 * 割込み番号の範囲の判定 00090 * 00091 * ビットパターンを求めるのを容易にするために,8は欠番になっている. 00092 */ 00093 #define VALID_INTNO(intno) (1U <= (intno) && (intno) <= 31U && (intno) != 8U) 00094 #define VALID_INTNO_DISINT(intno) VALID_INTNO(intno) 00095 #define VALID_INTNO_CFGINT(intno) VALID_INTNO(intno) 00096 00097 /* 00098 * 割込み要求を操作するためのビットパターンを求めるマクロ 00099 * 00100 * シフト演算の遅いプロセッサで,メモリに余裕がある場合には,表を引く 00101 * 形で実装した方がよいだろう.表を引くなら,割込み番号8を欠番にする 00102 * 必要はない. 00103 */ 00104 #define DGA_INT_BITPAT(intno) (1U << (32U - (intno))) 00105 00106 /* 00107 * レベルトリガ/エッジトリガが設定できるかの判定用定数 00108 */ 00109 #define DGA_INT_TRG_CONF (0xe0000000U) /* いずれにも設定できる */ 00110 #define DGA_INT_TRG_LEVEL (0x108f00feU) /* レベルトリガに固定 */ 00111 #define DGA_INT_TRG_EDGE (0x0e70ff00U) /* エッジトリガに固定 */ 00112 00113 /* 00114 * 割込み属性が設定されているかを判別するための変数(kernel_cfg.c) 00115 */ 00116 extern const uint32_t bitpat_cfgint; 00117 00118 /* 00119 * 割込み要求禁止フラグのセット 00120 * 00121 * 割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止 00122 * フラグをセットしようとした場合には,falseを返す. 00123 */ 00124 Inline bool_t 00125 x_disable_int(INTNO intno) 00126 { 00127 uint32_t bitpat = DGA_INT_BITPAT(intno); 00128 00129 if ((bitpat_cfgint & bitpat) == 0U) { 00130 return(false); 00131 } 00132 dga_bit_and((void *) TADR_DGA_CSR21, ~bitpat); 00133 return(true); 00134 } 00135 00136 #define t_disable_int(intno) x_disable_int(intno) 00137 #define i_disable_int(intno) x_disable_int(intno) 00138 00139 /* 00140 * 割込み要求禁止フラグのクリア 00141 * 00142 * 割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止 00143 * フラグをクリアしようとした場合には,falseを返す. 00144 */ 00145 Inline bool_t 00146 x_enable_int(INTNO intno) 00147 { 00148 uint32_t bitpat = DGA_INT_BITPAT(intno); 00149 00150 if ((bitpat_cfgint & bitpat) == 0U) { 00151 return(false); 00152 } 00153 dga_bit_or((void *) TADR_DGA_CSR21, bitpat); 00154 return(true); 00155 } 00156 00157 #define t_enable_int(intno) x_enable_int(intno) 00158 #define i_enable_int(intno) x_enable_int(intno) 00159 00160 /* 00161 * 割込み要求のクリア 00162 */ 00163 Inline void 00164 x_clear_int(INTNO intno) 00165 { 00166 dga_write((void *) TADR_DGA_CSR23, DGA_INT_BITPAT(intno)); 00167 } 00168 00169 #define t_clear_int(intno) x_clear_int(intno) 00170 #define i_clear_int(intno) x_clear_int(intno) 00171 00172 /* 00173 * 割込み要求のチェック 00174 */ 00175 Inline bool_t 00176 x_probe_int(INTNO intno) 00177 { 00178 return((dga_read((void *) TADR_DGA_CSR20) & DGA_INT_BITPAT(intno)) != 0U); 00179 } 00180 00181 #define t_probe_int(intno) x_probe_int(intno) 00182 #define i_probe_int(intno) x_probe_int(intno) 00183 00184 /* 00185 * 割込み要求ラインの属性の設定 00186 * 00187 * DVE-68K/40のIRCでは,割込み要求ラインの割込み優先度にNMIを指定する 00188 * ことができため,-7を与えるとNMIに設定されることとする(ターゲット定 00189 * 義の拡張). 00190 */ 00191 extern void x_config_int(INTNO intno, ATR intatr, PRI intpri); 00192 00193 /* 00194 * 割込みハンドラの入口で必要なIRC操作 00195 * 00196 * エッジトリガの場合には,割込み要求をクリアする.エッジトリガかレベ 00197 * ルトリガかが設定できる場合も,現在の設定値を見ずにクリアしている. 00198 * レベルトリガの場合もクリア処理をして差し支えないが,最適化で消える 00199 * ことを期待して,クリアしないこととしている. 00200 */ 00201 Inline void 00202 i_begin_int(INTNO intno) 00203 { 00204 if ((DGA_INT_BITPAT(intno) & (DGA_INT_TRG_CONF | DGA_INT_TRG_EDGE)) 00205 != 0U) { 00206 i_clear_int(intno); 00207 } 00208 } 00209 00210 /* 00211 * 割込みハンドラの出口で必要なIRC操作 00212 * 00213 * DVE-68K/40では必要なIRC操作はない. 00214 */ 00215 Inline void 00216 i_end_int(INTNO intno) 00217 { 00218 } 00219 00220 #endif /* TOPPERS_MACRO_ONLY */ 00221 00222 #ifndef TOPPERS_MACRO_ONLY 00223 00224 /* 00225 * ターゲットシステム依存の初期化 00226 */ 00227 extern void target_initialize(void); 00228 00229 /* 00230 * ターゲットシステムの終了 00231 * 00232 * システムを終了する時に使う. 00233 */ 00234 extern void target_exit(void) NoReturn; 00235 00236 #endif /* TOPPERS_MACRO_ONLY */ 00237 00238 /* 00239 * 微少時間待ちのための定義(本来はSILのターゲット依存部) 00240 */ 00241 #define SIL_DLY_TIM1 420 00242 #define SIL_DLY_TIM2 90 00243 00244 /* 00245 * プロセッサ依存モジュール(M68040用) 00246 */ 00247 #include "m68k_gcc/prc_config.h" 00248 00249 #endif /* TOPPERS_TARGET_CONFIG_H */
Copyright © 2008 by Kijineko Inc.