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

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

initial

File size: 10.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-2007 by Industrial Technology Institute,
9 * Miyagi Prefectural Government, JAPAN
10 * Copyright (C) 2001-2004 by Dep. of Computer Science and Engineering
11 * Tomakomai National College of Technology, 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 * @(#) $Id: cpu_config.h,v 1.8 2007/03/23 07:58:33 honda Exp $
55 */
56
57/*
58 * プロセッサ依存モジュール(H8用)
59 *     カーネル内
60部で使用する定義
61 *      データ型、マクロ、関数のプロトタイプ宣言
62 *
63 * このインクルードファイルは,t_config.h のみからインクルードされる.
64 * 他のファイルから直接インクルードしてはならない.
65 */
66
67#ifndef _CPU_CONFIG_H_
68#define _CPU_CONFIG_H_
69
70#include <h8.h>
71
72/*
73 * カーネルの内
74部識別名のリネーム
75 */
76
77#include <cpu_rename.h>
78
79/*
80 * プロセッサの特殊命令のインライン関数定義
81 */
82
83#ifndef _MACRO_ONLY
84#include <cpu_insn.h>
85#endif /* _MACRO_ONLY */
86
87/*
88 * TCB 中のフィールドのビット幅
89の定義
90 *
91 * cpu_context.h にå…
92¥ã‚Œã‚‹æ–¹ãŒã‚¨ãƒ¬ã‚¬ãƒ³ãƒˆã ãŒï¼Œå‚ç…
93§ã®ä¾å­˜æ€§ã®é–¢ä¿‚で,
94 * cpu_context.h にはå…
95¥ã‚Œã‚‰ã‚Œãªã„.
96 */
97#define TBIT_TCB_TSTAT 8 /* tstat フィールドのビット幅
98 */
99#define TBIT_TCB_PRIORITY 8 /* priority フィールドのビット幅
100 */
101
102
103#ifndef _MACRO_ONLY
104
105/*
106 * タスクコンテキストブロックの定義
107 */
108
109typedef struct task_context_block {
110 VP sp; /* スタックポインタ */
111 FP pc; /* プログラムカウンタ */
112} CTXB;
113
114/*
115 * 割込みマスク操作ライブラリ
116 */
117
118/*
119 * 現在の割込みマスクの読出し
120 */
121Inline UB
122current_intmask(void)
123{
124 UB ccr = current_ccr();
125
126 ccr &= (UB)CCR_DISINT_ALL;
127 return(ccr);
128}
129
130/*
131 * 割込みマスクの設定
132 */
133Inline void
134set_intmask(UB intmask)
135{
136 UB ccr = current_ccr();
137
138 /*
139 * and_ccr(),or_ccr()を用いずにローカル変数ccrに一度、代å…
140¥
141 * する理由
142 *
143 * ・unloc_cou()から呼ばれるので、intmaskの値が反映されるまで
144 *  割込み許可になってはいけない。
145 * ・コンパイラの警告を抑制するため、キャストしている。
146 */
147 ccr = (UB)((ccr & CCR_ENAINT_ALL) | intmask);
148 set_ccr(ccr);
149}
150
151/*
152 * 割込みネストカウンタ
153 */
154
155extern volatile UB intnest;
156
157/*
158 * コンテキスト参ç…
159§
160 *
161 * 割込みネストカウンタを読み出した直後に割込みが発生しても、戻ったと
162 * きにはコンテキストもå…
163ƒã«æˆ»ã£ã¦ã„ã‚‹
164 */
165Inline BOOL
166sense_context(void)
167{
168 BOOL ret;
169
170 ret = (intnest != 0) ? TRUE : FALSE;
171 return(ret);
172}
173
174/*
175 * CPUロック状æ…
176‹ã®å‚ç…
177§
178 */
179
180/*
181 * CPUロック状æ…
182‹ã‚’表すフラグ
183 */
184extern volatile BOOL iscpulocked;
185
186#define sense_lock() iscpulocked
187#define t_sense_lock sense_lock
188#define i_sense_lock sense_lock
189
190/*
191 * CPUロックとその解除(タスクコンテキスト用)
192 *
193 * task_intmask は、chg_ipm をサポートするための変数。chg_ipm をサポート
194 * しない場合には、t_unlock_cpu 中の task_intmask は 0 に置き換えてよい。
195 */
196
197#ifdef SUPPORT_CHG_IPM
198extern volatile UB task_intmask; /* タスクコンテキストでの割込みマスク */
199#endif /* SUPPORT_CHG_IPM */
200
201Inline void
202t_lock_cpu(void)
203{
204 disint();
205 iscpulocked = TRUE;
206}
207
208Inline void
209t_unlock_cpu(void)
210{
211 iscpulocked = FALSE;
212#ifdef SUPPORT_CHG_IPM
213 /*
214 * t_unlock_cpu が呼び出されるのは CPUロック状æ…
215‹ã®ã¿ã§ã‚るため。
216 * 処理の途中で task_intmask が書き換わることはない。
217 */
218 set_intmask(task_intmask);
219#else /* SUPPORT_CHG_IPM */
220 enaint(); /* cpu_insn.h */
221#endif /* SUPPORT_CHG_IPM */
222}
223
224/*
225 * CPUロックとその解除(非タスクコンテキスト用)
226 */
227
228extern volatile UB int_intmask; /* 非タスクコンテキストでの割込みマスク */
229
230Inline void
231i_lock_cpu(void)
232{
233 UB intmask = current_intmask();
234 /*
235 * 一時変数 intmask を使っているのは,current_intmask()を呼ん
236 * だ直後に割込みが発生し,起動された割込みハンドラ内
237で
238 * int_intmask が変更される可能性があるためである.
239 */
240
241 disint();
242 int_intmask = intmask;
243 iscpulocked = TRUE;
244}
245
246Inline void
247i_unlock_cpu(void)
248{
249 iscpulocked = FALSE;
250 set_intmask(int_intmask);
251}
252
253/*
254 * タスクディスパッチャ
255 */
256
257/*
258 * 最高優å…
259ˆé †ä½ã‚¿ã‚¹ã‚¯ã¸ã®ãƒ‡ã‚£ã‚¹ãƒ‘ッチ(cpu_support.S)
260 *
261 * dispatch は,タスクコンテキストから呼び出されたサービスコール処理
262 * 内
263で,CPUロック状æ…
264‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない.
265 */
266
267extern void dispatch(void);
268
269/*
270 * 現在のコンテキストを捨ててディスパッチ(cpu_support.S)
271 *
272 * exit_and_dispatch は,CPUロック状æ…
273‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない.
274 */
275
276extern void exit_and_dispatch(void);
277
278/*
279 *
280 * 割込みハンドラの設定
281 *
282 * ベクトル番号 inhno の割込みハンドラの起動番地を inthdr に設定する.
283 *
284 * H8版では何も処理をしない
285 * (ベクタテーブルをマニュアルで編集する)
286 */
287Inline void
288define_inh(INHNO inhno, FP inthdr)
289{
290}
291
292/*
293 * CPU例外ハンドラの設定
294 *  H8版では使用されない
295 */
296
297Inline void
298define_exc(EXCNO excno, FP exchdr)
299{
300}
301
302/*
303 * 割込みハンドラの出å…
304¥å£å‡¦ç†
305 *  H8C用H8依存部では割込みの出å…
306¥å£å‡¦ç†ã‚’アセンブラソース内
307に
308 *  生成するため、本来はC言語中で定義する必
309要がない。
310 *  ここではå…
311±é€šéƒ¨ã¨ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚’合わせるため、
312 *  必
313要なマクロ定義のみしている。
314 */
315
316/*
317 * C言語ルーチンの関数名からå…
318¥å£å‡¦ç†ã®ãƒ©ãƒ™ãƒ«ã‚’生成
319 *  H8C用H8依存部ではå…
320¥å£å‡¦ç†ãŒvector.src内
321のローカル・シンボルに
322 *  できるので、グローバルにå…
323¬é–‹ã™ã‚‹å¿…
324要がない。
325 *  ここではå…
326±é€šéƒ¨ã¨ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚’合わせるため、
327 *  ダミーのラベルを与えている。
328 */
329#define INT_ENTRY(inthdr) _kernel_common_interrupt_process
330#define EXC_ENTRY(exchdr) _kernel_common_interrupt_process
331
332/*
333 * 割込みハンドラの出å…
334¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
335 *   C言語上ではうまく生成できないため、アセンブラソース内
336で
337 *   別途用意する。
338 */
339#define INTHDR_ENTRY(inthdr) extern void INT_ENTRY(inthdr)(void) throw()
340
341/*
342 * CPU例外ハンドラの出å…
343¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
344 */
345#define EXCHDR_ENTRY(exchdr) extern void EXC_ENTRY(exchdr)(void) throw()
346
347/*
348 * CPU例外の発生した時のシステム状æ…
349‹ã®å‚ç…
350§
351 */
352
353/*
354 * CPU例外の発生した時のコンテキスト判定
355 */
356Inline BOOL
357exc_sense_context(VP p_excinf)
358{
359 /* H8版では呼ばれない。 */
360 return(TRUE);
361}
362
363/*
364 * CPU例外の発生した時のCPUロック状æ…
365‹ã®å‚ç…
366§
367 */
368Inline BOOL
369exc_sense_lock(VP p_excinf)
370{
371 /* H8版では呼ばれない。 */
372 return(TRUE);
373}
374
375/*
376 * プロセッサ依存の初期化
377 */
378
379extern void cpu_initialize(void);
380
381/*
382 * プロセッサ依存の終了時処理
383 */
384
385extern void cpu_terminate(void);
386
387/*
388 * 未定義割込み発生時のエラー出力時のスタック構造の定義
389 */
390
391typedef struct exc_stack {
392 UW er0;
393 UW er1;
394 UW er2;
395 UW er3;
396 UW er4;
397 UW er5;
398 UW er6;
399 UW pc; /* プログラム・カウンタ */
400} EXCSTACK;
401
402/*
403 * 未定義割込み発生時のエラー出力 (cpu_config.c, cpu_support.S)
404 */
405
406extern void cpu_experr(EXCSTACK *sp);
407
408/*
409 * ターゲットシステムの文字出力
410 *
411 * システムの低レベルの文字出力ルーチン.
412 */
413extern void cpu_putc(char c);
414
415#endif /* _MACRO_ONLY_ */
416
417#endif /* _CPU_CONFIG_H_ */
Note: See TracBrowser for help on using the repository browser.