OSDN Git Service

マルチプロジェクト型にレポジトリを変更するために移動した
[toppersasp4lpc/asp.git] / asp / target / dve68k_gcc / target_config.h
1 /*
2  *  TOPPERS/ASP Kernel
3  *      Toyohashi Open Platform for Embedded Real-Time Systems/
4  *      Advanced Standard Profile Kernel
5  * 
6  *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7  *                              Toyohashi Univ. of Technology, JAPAN
8  *  Copyright (C) 2005-2008 by Embedded and Real-Time Systems Laboratory
9  *              Graduate School of Information Science, Nagoya Univ., JAPAN
10  * 
11  *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
12  *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
13  *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
14  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
16  *      スコード中に含まれていること.
17  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
19  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
20  *      の無保証規定を掲載すること.
21  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
23  *      と.
24  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
25  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
26  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
27  *        報告すること.
28  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
29  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
30  *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
31  *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
32  *      免責すること.
33  * 
34  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
35  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
36  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
37  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
38  *  の責任を負わない.
39  * 
40  *  @(#) $Id: target_config.h 887 2008-04-11 11:16:07Z hiro $
41  */
42
43 /*
44  *              ターゲット依存モジュール(DVE-68K/40用)
45  *
46  *  カーネルのターゲット依存部のインクルードファイル.kernel_impl.hのター
47  *  ゲット依存部の位置付けとなる.
48  */
49
50 #ifndef TOPPERS_TARGET_CONFIG_H
51 #define TOPPERS_TARGET_CONFIG_H
52
53 /*
54  *  ターゲットシステムのハードウェア資源の定義
55  */
56 #include "dve68k.h"
57
58 /*
59  *  トレースログに関する設定
60  */
61 #ifdef TOPPERS_ENABLE_TRACE
62 #include "logtrace/trace_config.h"
63 #endif /* TOPPERS_ENABLE_TRACE */
64
65 /*
66  *  ASPカーネル動作時のメモリマップと関連する定義
67  *
68  *      00000000 - 0000ffff             ROMモニタ/スタブワークエリア(64KB)
69  *      00010000 - 000fffff             コード領域(約1MB)
70  *      00100000 -                              データ領域(約3MB)
71  *                       - 003fffff             デフォルトの非タスクコンテキスト用のスタック領域
72  */
73
74 /*
75  *  デフォルトの非タスクコンテキスト用のスタック領域の定義
76  */
77 #define DEFAULT_ISTKSZ          0x2000U
78 #define DEFAULT_ISTK            (void *)(0x00400000U - DEFAULT_ISTKSZ)
79
80 #ifndef TOPPERS_MACRO_ONLY
81
82 /*
83  *  プロセッサ識別のための変数(マルチプロセッサ対応)
84  */
85 extern uint_t   board_id;               /* ボードID */
86 extern void             *board_addr;    /* ローカルメモリの先頭アドレス */
87
88 /*
89  *  割込み番号の範囲の判定
90  *
91  *  ビットパターンを求めるのを容易にするために,8は欠番になっている.
92  */
93 #define VALID_INTNO(intno)      (1U <= (intno) && (intno) <= 31U && (intno) != 8U)
94 #define VALID_INTNO_DISINT(intno)       VALID_INTNO(intno)
95 #define VALID_INTNO_CFGINT(intno)       VALID_INTNO(intno)
96
97 /*
98  *  割込み要求を操作するためのビットパターンを求めるマクロ
99  *
100  *  シフト演算の遅いプロセッサで,メモリに余裕がある場合には,表を引く
101  *  形で実装した方がよいだろう.表を引くなら,割込み番号8を欠番にする
102  *  必要はない.
103  */
104 #define DGA_INT_BITPAT(intno)   (1U << (32U - (intno)))
105
106 /*
107  *  レベルトリガ/エッジトリガが設定できるかの判定用定数
108  */
109 #define DGA_INT_TRG_CONF        (0xe0000000U)   /* いずれにも設定できる */
110 #define DGA_INT_TRG_LEVEL       (0x108f00feU)   /* レベルトリガに固定 */
111 #define DGA_INT_TRG_EDGE        (0x0e70ff00U)   /* エッジトリガに固定 */
112
113 /*
114  *  割込み属性が設定されているかを判別するための変数(kernel_cfg.c)
115  */
116 extern const uint32_t   bitpat_cfgint;
117
118 /*
119  *  割込み要求禁止フラグのセット
120  *
121  *  割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止
122  *  フラグをセットしようとした場合には,falseを返す.
123  */
124 Inline bool_t
125 x_disable_int(INTNO intno)
126 {
127         uint32_t        bitpat = DGA_INT_BITPAT(intno);
128
129         if ((bitpat_cfgint & bitpat) == 0U) {
130                 return(false);
131         }
132         dga_bit_and((void *) TADR_DGA_CSR21, ~bitpat);
133         return(true);
134 }
135
136 #define t_disable_int(intno)    x_disable_int(intno)
137 #define i_disable_int(intno)    x_disable_int(intno)
138
139 /*
140  *  割込み要求禁止フラグのクリア
141  *
142  *  割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止
143  *  フラグをクリアしようとした場合には,falseを返す.
144  */
145 Inline bool_t
146 x_enable_int(INTNO intno)
147 {
148         uint32_t        bitpat = DGA_INT_BITPAT(intno);
149
150         if ((bitpat_cfgint & bitpat) == 0U) {
151                 return(false);
152         }
153         dga_bit_or((void *) TADR_DGA_CSR21, bitpat);
154         return(true);
155 }
156
157 #define t_enable_int(intno)             x_enable_int(intno)
158 #define i_enable_int(intno)             x_enable_int(intno)
159
160 /*
161  *  割込み要求のクリア
162  */
163 Inline void
164 x_clear_int(INTNO intno)
165 {
166         dga_write((void *) TADR_DGA_CSR23, DGA_INT_BITPAT(intno));
167 }
168
169 #define t_clear_int(intno)              x_clear_int(intno)
170 #define i_clear_int(intno)              x_clear_int(intno)
171
172 /*
173  *  割込み要求のチェック
174  */
175 Inline bool_t
176 x_probe_int(INTNO intno)
177 {
178         return((dga_read((void *) TADR_DGA_CSR20) & DGA_INT_BITPAT(intno)) != 0U);
179 }
180
181 #define t_probe_int(intno)              x_probe_int(intno)
182 #define i_probe_int(intno)              x_probe_int(intno)
183
184 /*
185  *  割込み要求ラインの属性の設定
186  *
187  *  DVE-68K/40のIRCでは,割込み要求ラインの割込み優先度にNMIを指定する
188  *  ことができため,-7を与えるとNMIに設定されることとする(ターゲット定
189  *  義の拡張).
190  */
191 extern void     x_config_int(INTNO intno, ATR intatr, PRI intpri);
192
193 /*
194  *  割込みハンドラの入口で必要なIRC操作
195  *
196  *  エッジトリガの場合には,割込み要求をクリアする.エッジトリガかレベ
197  *  ルトリガかが設定できる場合も,現在の設定値を見ずにクリアしている.
198  *  レベルトリガの場合もクリア処理をして差し支えないが,最適化で消える
199  *  ことを期待して,クリアしないこととしている.
200  */
201 Inline void
202 i_begin_int(INTNO intno)
203 {
204         if ((DGA_INT_BITPAT(intno) & (DGA_INT_TRG_CONF | DGA_INT_TRG_EDGE))
205                                                                                                                                 != 0U) {
206                 i_clear_int(intno);
207         }
208 }
209
210 /*
211  *  割込みハンドラの出口で必要なIRC操作
212  *
213  *  DVE-68K/40では必要なIRC操作はない.
214  */
215 Inline void
216 i_end_int(INTNO intno)
217 {
218 }
219
220 #endif /* TOPPERS_MACRO_ONLY */
221
222 #ifndef TOPPERS_MACRO_ONLY
223
224 /*
225  *  ターゲットシステム依存の初期化
226  */
227 extern void     target_initialize(void);
228
229 /*
230  *  ターゲットシステムの終了
231  *
232  *  システムを終了する時に使う.
233  */
234 extern void     target_exit(void) NoReturn;
235
236 #endif /* TOPPERS_MACRO_ONLY */
237
238 /*
239  *  微少時間待ちのための定義(本来はSILのターゲット依存部)
240  */
241 #define SIL_DLY_TIM1    420
242 #define SIL_DLY_TIM2    90
243
244 /*
245  *  プロセッサ依存モジュール(M68040用)
246  */
247 #include "m68k_gcc/prc_config.h"
248
249 #endif /* TOPPERS_TARGET_CONFIG_H */