source: anotherchoice/tags/jsp-1.4.4-full-UTF8/config/h8s-renesas/cpu_config.h@ 26

Last change on this file since 26 was 26, checked in by ykominami, 10 years ago

initial

File size: 11.5 KB
Line 
1/*
2 * TOPPERS/JSP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2004 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2001-2004 by Dep. of Computer Science and Engineering
9 * Tomakomai National College of Technology, JAPAN
10 * Copyright (C) 2001-2007 by Industrial Technology Institute,
11 * Miyagi Prefectural Government, JAPAN
12 *
13 * 上記著作権者
14は,以下の (1)〜(4) の条件か,Free Software Foundation
15 * によってå…
16¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
17 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
18 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
19å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
20 * 利用と呼ぶ)することを無償で許諾する.
21 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
22 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
23 * スコード中に含まれていること.
24 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
25 * 用できる形で再é…
26å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
27å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
28 * 者
29マニュアルなど)に,上記の著作権表示,この利用条件および下記
30 * の無保証規定を掲載すること.
31 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
32 * 用できない形で再é…
33å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
34 * と.
35 * (a) 再é…
36å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
37マニュアルなど)に,上記の著
38 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
39 * (b) 再é…
40å¸ƒã®å½¢æ…
41‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
42 * 報告すること.
43 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
44 * 害からも,上記著作権者
45およびTOPPERSプロジェクトをå…
46è²¬ã™ã‚‹ã“と.
47 *
48 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
49お
50 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
51 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
52 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
53 */
54
55/*
56 * プロセッサ依存モジュール(H8S用)
57 *     カーネル内
58部で使用する定義
59 *      データ型、マクロ、関数のプロトタイプ宣言
60 *
61 * このインクルードファイルは,t_config.h のみからインクルードされる.
62 * 他のファイルから直接インクルードしてはならない.
63 */
64
65#ifndef _CPU_CONFIG_H_
66#define _CPU_CONFIG_H_
67
68/*
69 * カーネルの内
70部識別名のリネーム
71 */
72#include <cpu_rename.h>
73
74
75/*
76 * プロセッサ関連の定義
77 */
78#include <h8s.h>
79#include <h8s_sil.h>
80
81
82/*
83 * プロセッサの特殊命令のインライン関数定義
84 * 内
85部で、MAX_IPMを利用しているので、定義後に読み込む
86 */
87#include <cpu_insn.h>
88
89/*
90 * TCB 中のフィールドのビット幅
91の定義
92 *
93 * cpu_context.h にå…
94¥ã‚Œã‚‹æ–¹ãŒã‚¨ãƒ¬ã‚¬ãƒ³ãƒˆã ãŒï¼Œå‚ç…
95§ã®ä¾å­˜æ€§ã®é–¢ä¿‚で,
96 * cpu_context.h にはå…
97¥ã‚Œã‚‰ã‚Œãªã„.
98 */
99#define TBIT_TCB_TSTAT 8 /* tstat フィールドのビット幅
100 */
101#define TBIT_TCB_PRIORITY 8 /* priority フィールドのビット幅
102 */
103
104/*
105 * タスクコンテキストブロックの定義
106 */
107#ifndef _MACRO_ONLY
108
109typedef struct task_context_block {
110 VP sp; /* スタックポインタ */
111 FP pc; /* プログラムカウンタ */
112} CTXB;
113
114#endif /* _MACRO_ONLY */
115
116/*
117 * システム状æ…
118‹å‚ç…
119§
120 */
121#ifndef _MACRO_ONLY
122
123/*
124 * 割込みネストカウンタ
125 * ネストカウンタの値でコンテキストの判断を行うので、コンテキスト参ç…
126§æ™‚に
127 * 利用する。
128 */
129
130extern volatile UB intnest;
131
132/*
133 * コンテキスト参ç…
134§
135 * 割込みネストカウンタを読み出した直後に割込みが発生しても、戻ったときには
136 * コンテキストもå…
137ƒã«æˆ»ã£ã¦ã„ã‚‹
138 */
139
140Inline BOOL
141sense_context(void)
142{
143 BOOL ret;
144
145 ret = (intnest != 0) ? TRUE : FALSE;
146 return(ret);
147}
148
149/*
150 * CPUロック状æ…
151‹ã®å‚ç…
152§
153 */
154
155/*
156 * CPUロック状æ…
157‹ã‚’表すフラグ
158 *  ・割込み禁止(カーネル管理下の割込みのみ)
159 *    かつ
160 *  ・iscpulocked == TRUE
161 *    のときCPUロック状æ…
162‹ã¨ã™ã‚‹ã€‚
163 */
164extern volatile BOOL iscpulocked;
165
166#define sense_lock() iscpulocked
167
168#endif /* _MACRO_ONLY */
169
170#define t_sense_lock sense_lock
171#define i_sense_lock sense_lock
172
173#ifndef _MACRO_ONLY
174
175/*
176 * CPUロックとその解除(タスクコンテキスト用)
177 *
178 * task_intmask は、chg_ipm をサポートするための変数。chg_ipm をサポート
179 * しない場合には、t_unlock_cpu 中の task_intmask は 0 に置き換えてよい。
180 */
181
182#ifdef SUPPORT_CHG_IPM
183extern volatile IPM task_intmask; /* タスクコンテキストでの割込みマスク */
184#endif /* SUPPORT_CHG_IPM */
185
186Inline void
187t_lock_cpu(void)
188{
189 disint(); /* cpu_insn.h */
190 iscpulocked = TRUE;
191}
192
193Inline void
194t_unlock_cpu(void)
195{
196 iscpulocked = FALSE;
197#ifdef SUPPORT_CHG_IPM
198 /*
199 * t_unlock_cpu が呼び出されるのは CPUロック状æ…
200‹ã®ã¿ã§ã‚るため。
201 * 処理の途中で task_intmask が書き換わることはない。
202 */
203 set_intmask(task_intmask);
204#else /* SUPPORT_CHG_IPM */
205 enaint(); /* cpu_insn.h */
206#endif /* SUPPORT_CHG_IPM */
207}
208
209/*
210 * CPUロックとその解除(非タスクコンテキスト用)
211 */
212
213extern volatile IPM int_intmask; /* 非タスクコンテキストでの割込みマスク */
214
215Inline void
216i_lock_cpu(void)
217{
218 IPM intmask;
219
220 /*
221 * 一時変数 intmask を使っているのは、current_intmask()を呼んだ直後に
222 * 割込みが発生し、起動された割込みハンドラ内
223で int_intmask が変更
224 * される可能性があるためである。
225 */
226 intmask = current_intmask();
227 disint(); /* cpu_insn.h */
228 int_intmask = intmask;
229 iscpulocked = TRUE;
230}
231
232Inline void
233i_unlock_cpu(void)
234{
235 iscpulocked = FALSE;
236 set_intmask(int_intmask);
237}
238
239/*
240 * タスクディスパッチャ
241 */
242
243/*
244 * 最高優å…
245ˆé †ä½ã‚¿ã‚¹ã‚¯ã¸ã®ãƒ‡ã‚£ã‚¹ãƒ‘ッチ(cpu_support.src)
246 * dispatch は,タスクコンテキストから呼び出されたサービスコール処理内
247で、
248 * CPUロック状æ…
249‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない。
250 */
251extern void dispatch(void);
252
253/*
254 * 現在のコンテキストを捨ててディスパッチ(cpu_support.src)
255 * exit_and_dispatch は,CPUロック状æ…
256‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない。
257 */
258extern void exit_and_dispatch(void);
259
260/*
261 * 割込みハンドラの設定
262 * H8Sでは、割込みベクタテーブルをROM上に直接にé…
263ç½®ã™ã‚‹ãŸã‚ã€
264 *  何も処理しない。
265 * (ベクタテーブルをperlスクリプトで生成する)
266 */
267
268Inline void define_inh(INHNO inhno, FP inthdr) {
269}
270
271/*
272 * CPU例外ハンドラの設定
273 * H8Sでは、CPU例外の機構がないため、何も処理しない。
274 */
275
276Inline void define_exc(EXCNO excno, FP exchdr) {
277}
278
279#endif /* _MACRO_ONLY */
280
281/*
282 * 割込みハンドラの出å…
283¥å£å‡¦ç†
284 *  H8C用H8S依存部では割込みの出å…
285¥å£å‡¦ç†ã‚’アセンブラソース内
286に
287 *  生成するため、本来はC言語中で定義する必
288要がない。
289 *  ここではå…
290±é€šéƒ¨ã¨ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚’合わせるため、
291 *  必
292要なマクロ定義のみしている。
293 */
294
295/*
296 * C言語ルーチンの関数名からå…
297¥å£å‡¦ç†ã®ãƒ©ãƒ™ãƒ«ã‚’生成
298 *  H8C用H8依存部ではå…
299¥å£å‡¦ç†ãŒvector.src内
300のローカル・シンボルに
301 *  できるので、グローバルにå…
302¬é–‹ã™ã‚‹å¿…
303要がない。
304 *  ここではå…
305±é€šéƒ¨ã¨ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚’合わせるため、
306 *  ダミーのラベルを与えている。
307 */
308#define INT_ENTRY(inthdr) _kernel_common_interrupt_process
309#define EXC_ENTRY(exchdr) _kernel_common_interrupt_process
310
311/*
312 * 割込みハンドラの出å…
313¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
314 *   C言語上ではうまく生成できないため、アセンブラソース内
315で
316 *   別途用意する。
317 */
318#define INTHDR_ENTRY(inthdr) extern void INT_ENTRY(inthdr)(void)
319
320/*
321 * CPU例外ハンドラの出å…
322¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
323 */
324#define EXCHDR_ENTRY(exchdr) extern void EXC_ENTRY(exchdr)(void)
325
326/*
327 * CPU例外の発生した時のシステム状æ…
328‹ã®å‚ç…
329§
330 */
331#ifndef _MACRO_ONLY
332
333/*
334 * CPU例外の発生した時のコンテキスト判定
335 * H8S版では、呼ばれることは無いが、インターフェースをそろえるため、
336 *  実装
337している。
338 */
339Inline BOOL
340exc_sense_context(VP p_excinf)
341{
342 return(TRUE);
343}
344
345/*
346 * CPU例外の発生した時のCPUロック状æ…
347‹ã®å‚ç…
348§
349 * H8S版では、呼ばれることは無いが、インターフェースをそろえるため、
350 *  実装
351している。
352 */
353Inline BOOL
354exc_sense_lock(VP p_excinf)
355{
356 return(TRUE);
357}
358
359/*
360 * プロセッサ依存の初期化
361 */
362extern void cpu_initialize(void);
363
364/*
365 * プロセッサ依存の終了時処理
366 */
367extern void cpu_terminate(void);
368
369#endif /* _MACRO_ONLY_ */
370
371/*============================================================================*/
372/* å…
373±é€šãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«ã¯ãªã„、独自の部分 */
374
375/*
376 * 割込みレベル設定用マクロ(もしくは、インライン関数)
377 * ・ipr : インタラプトプライオリティレジスタ( IPRA - IPRK ) 下位16ビット
378 * ・mask : IPR設定用マスク(上位か下位の選択)( IPR_UPR, IPR_LOW )
379 * ・level : 割込みレベル( 0 - 7 )
380 */
381#ifndef _MACRO_ONLY
382
383Inline void icu_set_ilv( UH ipr, BOOL mask, INT level ) {
384 UB val;
385
386 if( mask == IPR_UPR ) {
387 val = (UB)(( h8s_reb_reg( ipr ) & ~IPR_UPR_MASK ) | TO_HI4((UB) level));
388 h8s_wrb_reg( ipr, val );
389 } else if( mask == IPR_LOW ) {
390 val = (UB)(( h8s_reb_reg( ipr ) & ~IPR_LOW_MASK ) | TO_LO4((UB) level));
391 h8s_wrb_reg( ipr, val );
392 }
393}
394
395/*
396 * 未定義割込み発生時のエラー出力 (cpu_config.c, cpu_support.src)
397 */
398
399/*
400 * スタックのå…
401ˆé ­ã‹ã‚‰å„レジスタのまでのオフセット
402 *
403 *  前提条件
404 *   ・アドバンスドモード
405 *   ・割込み制御モード2
406 *
407 *  スタック構造
408 *   +0:er0
409 *   +4:er1
410 *   +8:er2
411 *  +12:er3
412 *  +16:er4
413 *  +20:er5
414 *  +24:er6
415 *  +28:exr
416 *  +29:リザーブ
417 *  +30:crr
418 *  +31:pc
419 *  +34〜:割込み前に使用されていたスタック領域
420 */
421
422#ifndef __2000A__
423#error support Advanced mode only.(Normal mode isn't supported)
424#endif
425
426/*
427 * 割込み発生直前のスタックポインタまでのオフセット
428 *  (未定義割込み発生時)
429 */
430#define OFFSET_SP 34
431
432/*
433 * 未定義割込み発生時のエラー出力時のスタック構造の定義
434 */
435typedef struct exc_stack {
436 UW er0;
437 UW er1;
438 UW er2;
439 UW er3;
440 UW er4;
441 UW er5;
442 UW er6;
443 UB exr;
444 UB dummy;
445 UW pc; /* プログラム・カウンタ */
446} EXCSTACK;
447
448
449extern void cpu_experr(EXCSTACK *sp);
450
451#endif /* _MACRO_ONLY_ */
452
453#endif /* _CPU_CONFIG_H_ */
Note: See TracBrowser for help on using the repository browser.