source: ssp_arm_gcc/trunk/target/at91skyeye_gcc/target_config.h@ 92

Last change on this file since 92 was 92, checked in by nmir-saito, 9 years ago

add separate package of SSP kernel for ARM + SkyEye(experimental)

File size: 9.0 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2006 by GJ Business Division RICOH COMPANY,LTD. JAPAN
7 * Copyright (C) 2007-2011 by Embedded and Real-Time Systems Laboratory
8 * Graduate School of Information Science, Nagoya Univ., JAPAN
9 *
10 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
12 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
15 * スコード中に含まれていること.
16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
17 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
18 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
19 * の無保証規定を掲載すること.
20 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
21 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
22 * と.
23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
24 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
26 * 報告すること.
27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
28 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
29 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
31 * 免責すること.
32 *
33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
37 * の責任を負わない.
38 *
39 * @(#) $Id: target_config.h 619 2014-03-18 06:10:27Z nmir-saito $
40 */
41
42/*
43 * チップ依存モジュール(AT91SKYEYE用)
44 *
45 * カーネルのチップ依存部のインクルードファイル.kernel_impl.hのター
46 * ゲット依存部の位置付けとなる.
47 */
48
49#ifndef TOPPERS_TARGET_CONFIG_H
50#define TOPPERS_TARGET_CONFIG_H
51
52/*
53 * チップシステムのハードウェア資源の定義
54 */
55#include "at91skyeye.h"
56
57/*
58 * トレースログに関する設定
59 */
60#ifdef TOPPERS_ENABLE_TRACE
61#include "logtrace/trace_config.h"
62#endif /* TOPPERS_ENABLE_TRACE */
63
64/*
65 * サポートしているSKYEYのバージョン
66 */
67#define SUPPORT_SKYEYE_VER 0x1024
68#define SUPPORT_DEVM_VER 0x2020
69
70/*
71 * ベクタールーチンをカーネルで持つかの定義
72 */
73#define VECTOR_KERNEL
74
75/*
76 * ベクタールーチンを持たない場合のベクターアドレスの先頭番地
77 */
78#define VECTOR_START 0x00
79
80/*
81 * データセクションの初期化をしない
82 */
83#define TOPPERS_OMIT_DATA_INIT
84
85/*
86 * 割込み待ち命令
87 */
88#define ASM_TARGET_WAIT_INTERRUPT nop
89
90/*
91 * デフォルトの非タスクコンテキスト用のスタック領域の定義
92 */
93#define DEFAULT_ISTKSZ 0x1000U /* 4KB */
94
95/*
96 * 微少時間待ちのための定義(本来はSILのターゲット依存部)
97 */
98#define SIL_DLY_TIM1 20
99#define SIL_DLY_TIM2 10
100
101/*
102 * 割込みハンドラ番号に関する定義
103 */
104#define TMIN_INHNO 0U
105#define TMAX_INHNO 31U
106#define TNUM_INH 32U
107
108/*
109 * 割込み番号に関する定義
110 */
111#define TMIN_INTNO 0U
112#define TMAX_INTNO 31U
113#define TNUM_INT 32U
114
115#ifndef TOPPERS_MACRO_ONLY
116
117/*
118 * 割込み番号の範囲の判定
119 *
120 * ビットパターンを求めるのを容易にするために,8は欠番になっている.
121 * intnoは符号無し変数なので,TMIN_INTNOが0の場合は下限チェックはしない.
122 */
123#if TMIN_INTNO == 0
124#define VALID_INTNO(intno) ((intno) <= TMAX_INTNO)
125#else /* !TMIN_INTNO == 0 */
126#define VALID_INTNO(intno) (TMIN_INTNO <= (intno) && (intno) <= TMAX_INTNO)
127#endif /* TMIN_INTNO == 0 */
128
129#define VALID_INTNO_DISINT(intno) VALID_INTNO(intno)
130#define VALID_INTNO_CFGINT(intno) VALID_INTNO(intno)
131#define VALID_INTNO_ATTISR(intno) VALID_INTNO(intno)
132
133/*
134 * 割込みハンドラの登録用テーブル
135 * 実態はコンフィギュレータで生成する
136 */
137extern const FP inh_tbl[TNUM_INH];
138
139/*
140 * 割込みハンドラの設定
141 */
142Inline void
143x_define_inh(INHNO inhno, FP int_entry)
144{
145}
146
147/*
148 * 割込みハンドラの出入口処理の生成マクロ
149 *
150 */
151#define INT_ENTRY(inhno, inthdr) inthdr
152#define INTHDR_ENTRY(inhno, inhno_num, inthdr) extern void inthdr(void);
153
154/*
155 * TOPPERS標準割込み処理モデルの実現
156 */
157
158/*
159 * 各割込みの割込み要求禁止フラグの状態
160 */
161extern uint32_t idf;
162
163/*
164 * 割込み優先度マスク操作ライブラリ
165 *
166 * AT91SAM7Sは割込み優先度マスクをIRC内でハードウェア的に持つが,
167 * ソフトウェア側から値を読み書きできないため,割込み要求禁止フラ
168 * グにより割込み優先度マスクを実現する
169 */
170
171/*
172 * 現在の割込み優先度マスクの値
173 */
174extern PRI ipm;
175
176/*
177 * 割込み優先度マスク毎にセットする,割込み要求禁止フラグの値
178 * のテーブル
179 */
180extern const uint32_t ipm_mask_tbl[8];
181
182#endif /* TOPPERS_MACRO_ONLY */
183
184/*
185 * IPMをimp_mask_tblのインデックスに変換するマクロ
186 */
187#define INDEX_IPM(ipm) (-(ipm))
188
189#ifndef TOPPERS_MACRO_ONLY
190
191/*
192 * (モデル上の)割込み優先度マスクの設定
193 *
194 * 指定された優先度に設定された割込み要求禁止フラグのテーブルの値と(モデ
195 * ル上の)各割込みの割込み要求禁止フラグの状態を保持した変数の値との
196 * ORをIRCの割込み要求禁止フラグにセットし,設定した優先度を内部変数
197 * ipmに保存する.
198 */
199Inline void
200x_set_ipm(PRI intpri)
201{
202 uint32_t ipm_mask = ipm_mask_tbl[INDEX_IPM(intpri)];
203
204 /*
205 * AT91SAM7Sの割込みコントローラはイネーブルレジスタと
206 * クリアーレジスタがあるため,一旦全ての割込みを禁止してから,
207 * 特定の割込みのみ許可する必要がある
208 */
209 /* 全割込み禁止 */
210 at91skyeye_disable_int(~0U);
211
212 /* マスク指定されていない割込みのみ許可 */
213 at91skyeye_enable_int(~(ipm_mask|idf));
214
215 ipm = intpri;
216}
217
218#define t_set_ipm(intpri) x_set_ipm(intpri)
219#define i_set_ipm(intpri) x_set_ipm(intpri)
220
221/*
222 * (モデル上の)割込み優先度マスクの参照
223 *
224 * ipmの値を返す
225 */
226Inline PRI
227x_get_ipm(void)
228{
229 return(ipm);
230}
231
232#define t_get_ipm() x_get_ipm()
233#define i_get_ipm() x_get_ipm()
234
235/*
236 * 割込み属性が設定されているかを判別するための変数
237 */
238extern uint32_t bitpat_cfgint;
239
240/*
241 * (モデル上の)割込み要求禁止フラグのセット
242 *
243 * 指定された,割込み番号の割込み要求禁止フラグのセットして,割込みを
244 * 禁止する.また,(モデル上の)割込み要求禁止フラグを管理するidfの対
245 * 応するビットををセットする.
246 * 割込み要求をマスクする機能をサポートしていない場合には,falseを返す
247 */
248
249
250Inline bool_t
251x_disable_int(INTNO intno)
252{
253 if ((bitpat_cfgint & INTNO_BITPAT(intno)) == 0U) {
254 return(false);
255 }
256 at91skyeye_disable_int(INTNO_BITPAT(intno));
257 idf |= INTNO_BITPAT(intno);
258 return(true);
259}
260
261#define t_disable_int(intno) x_disable_int(intno)
262#define i_disable_int(intno) t_disable_int(intno)
263
264/*
265 * (モデル上の)割り要求禁止フラグの解除
266 *
267 * 指定された,割込み番号の割込み要求禁止フラグのクリアして,割込みを
268 * 許可する.また,(モデル上の)割込み要求禁止フラグを管理するidfの対
269 * 応するビットををクリアする.
270 * 割込み要求をマスクする機能をサポートしていない場合には,falseを返す
271 */
272
273Inline bool_t
274x_enable_int(INTNO intno)
275{
276 uint32_t ipm_mask = ipm_mask_tbl[INDEX_IPM(ipm)];
277
278 if ((bitpat_cfgint & INTNO_BITPAT(intno)) == 0U) {
279 return(false);
280 }
281 idf &= ~INTNO_BITPAT(intno);
282
283 /* 全割込み禁止 */
284 at91skyeye_disable_int(~0U);
285 /* マスク指定されていない割込みのみ許可 */
286 at91skyeye_enable_int(~(ipm_mask|idf));
287
288 return(true);
289}
290
291#define t_enable_int(intno) x_enable_int(intno)
292#define i_enable_int(intno) x_enable_int(intno)
293
294/*
295 * 割込み要求のクリア
296 */
297Inline void
298x_clear_int(INTNO intno)
299{
300 at91skyeye_clear_int(INTNO_BITPAT(intno));
301}
302
303#define t_clear_int(intno) x_clear_int(intno)
304#define i_clear_int(intno) x_clear_int(intno)
305
306
307/*
308 * 割込み要求のチェック
309 */
310Inline bool_t
311x_probe_int(INTNO intno)
312{
313 return(at91skyeye_probe_int(INTNO_BITPAT(intno)));
314}
315
316#define t_probe_int(intno) x_probe_int(intno)
317#define i_probe_int(intno) x_probe_int(intno)
318
319/*
320 * 割込み要求ラインの属性の設定
321 *
322 */
323extern void x_config_int(INTNO intno, ATR intatr, PRI intpri);
324
325/*
326 * 割込みハンドラの入り口で必要なIRC操作
327 *
328 * AT91SAM7Sでは,必要な処理はない
329 */
330Inline void
331i_begin_int(INTNO intno)
332{
333
334}
335
336/*
337 * 割込みハンドラの出口で必要なIRC操作
338 *
339 * AT91SAM7Sでは,必要な処理はない
340 */
341Inline void
342i_end_int(INTNO intno)
343{
344
345}
346
347/*
348 * ターゲットシステム依存の初期化
349 */
350extern void target_initialize(void);
351
352/*
353 * ターゲットシステムの終了
354 *
355 * システムを終了する時に使う.
356 */
357extern void target_exit(void) NoReturn;
358
359/*
360 * 割込みハンドラ(chip_support.S)
361 */
362extern void interrupt_handler(void);
363
364/*
365 * 未定義の割込みが入った場合の処理
366 */
367extern void default_int_handler(void);
368
369#ifdef TOPPERS_ENABLE_GCOV_PART
370/*
371 * GCOV一部取得用ライブラリ
372 */
373/*
374 * GCOV初期化関数
375 */
376extern void gcov_init(void);
377
378/*
379 * GCOV中断関数
380 */
381extern void gcov_pause(void);
382
383/*
384 * GCOV再開関数
385 */
386extern void gcov_resume(void);
387
388/*
389 * GCOV出力関数
390 */
391extern void gcov_dump(void);
392#endif /* TOPPERS_ENABLE_GCOV_PART */
393
394#endif /* TOPPERS_MACRO_ONLY */
395
396/*
397 * コア依存モジュール(ARM用)
398 */
399#include "core_config.h"
400
401#endif /* TOPPERS_TARGET_CONFIG_H */
Note: See TracBrowser for help on using the repository browser.