target_config.h

説明を見る。
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.

ホームページ制作