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

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

initial

File size: 7.8 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-2002 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 *
9 * Copyright (C) 2005 by Freelines CO.,Ltd
10 *
11 * 上記著作権者
12は,以下の (1)〜(4) の条件か,Free Software Foundation
13 * によってå…
14¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
15 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
16 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
17å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
18 * 利用と呼ぶ)することを無償で許諾する.
19 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
20 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
21 * スコード中に含まれていること.
22 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
23 * 用できる形で再é…
24å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
25å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
26 * 者
27マニュアルなど)に,上記の著作権表示,この利用条件および下記
28 * の無保証規定を掲載すること.
29 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
30 * 用できない形で再é…
31å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
32 * と.
33 * (a) 再é…
34å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
35マニュアルなど)に,上記の著
36 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
37 * (b) 再é…
38å¸ƒã®å½¢æ…
39‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
40 * 報告すること.
41 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
42 * 害からも,上記著作権者
43およびTOPPERSプロジェクトをå…
44è²¬ã™ã‚‹ã“と.
45 *
46 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
47お
48 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
49 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
50 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
51 *
52 * @(#) $Id: cpu_config.h,v 1.14 2007/01/05 02:10:17 honda Exp $
53 */
54
55#include "sys_config.h"
56
57/*
58 * プロセッサ依存モジュール(V850用)
59 */
60
61#ifndef _CPU_CONFIG_H_
62#define _CPU_CONFIG_H_
63
64/*
65 * カーネルの内
66部識別名のリネーム
67 */
68
69#include <cpu_rename.h>
70
71/*
72 * chg_ipm/get_ipm をサポートするかどうかの定義
73 */
74/*#define SUPPORT_CHG_IPM*/
75
76/*
77 * TCB 関連の定義
78 *
79 * cpu_context.h にå…
80¥ã‚Œã‚‹æ–¹ãŒã‚¨ãƒ¬ã‚¬ãƒ³ãƒˆã ãŒï¼Œå‚ç…
81§ã®ä¾å­˜æ€§ã®é–¢ä¿‚で,
82 * cpu_context.h にはå…
83¥ã‚Œã‚‰ã‚Œãªã„.
84 */
85
86/*
87 * TCB 中のフィールドのビット幅
88の定義
89 */
90#define TBIT_TCB_PRIORITY 8 /* priority フィールドのビット幅
91 */
92#define TBIT_TCB_TSTAT 8 /* tstat フィールドのビット幅
93 */
94
95#ifndef _MACRO_ONLY
96/*
97 * タスクコンテキストブロックの定義
98 */
99typedef struct task_context_block {
100 unsigned long sp; /* スタックポインタ */
101 unsigned long psw; /* プログラムステータスワード */
102 FP pc; /* プログラムカウンタ */
103} CTXB;
104
105/*
106 * 割込みマスク操作ライブラリ
107 *
108 * 割込みマスク(intmask)は,IPM(Interrupt Priority Mask)を8ビット
109 * 左にシフトしたものである.
110 */
111
112BOOL sense_lock(void);
113
114#define t_sense_lock sense_lock
115#define i_sense_lock sense_lock
116
117/*
118 * 現在の割込みマスクの読出し
119 */
120
121Inline UB
122current_intmask(void)
123{
124 return (UB)sense_lock();
125}
126
127/*
128 * 割込みマスクの設定
129 */
130
131Inline void
132set_intmask(UB intmask)
133{
134 if (intmask) {
135 asm("di");
136 } else {
137 asm("ei");
138 }
139}
140
141/*
142 * CPUロックとその解除(タスクコンテキスト用)
143 */
144
145#define t_lock_cpu lock_cpu
146#define i_lock_cpu lock_cpu
147#define t_unlock_cpu unlock_cpu
148#define i_unlock_cpu unlock_cpu
149
150Inline void
151lock_cpu(void)
152{ asm("di"); }
153
154Inline void
155unlock_cpu(void)
156{ asm("ei"); }
157
158
159/*
160 * 割込みネストカウンタ
161 */
162
163extern UW intnest;
164
165Inline BOOL
166sense_context(void)
167{
168 return (intnest > 0);
169}
170
171/*
172 * タスクディスパッチャ
173 */
174
175/*
176 * 最高優å…
177ˆé †ä½ã‚¿ã‚¹ã‚¯ã¸ã®ãƒ‡ã‚£ã‚¹ãƒ‘ッチ(cpu_support.S)
178 *
179 * dispatch は,タスクコンテキストから呼び出されたサービスコール処理
180 * 内
181で,CPUロック状æ…
182‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない.
183 */
184extern void dispatch(void);
185
186/*
187 * 現在のコンテキストを捨ててディスパッチ(cpu_support.S)
188 *
189 * exit_and_dispatch は,CPUロック状æ…
190‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない.
191 */
192extern void exit_and_dispatch(void);
193
194/*
195 * 割込みハンドラ/CPU例外ハンドラの設定
196 */
197
198typedef struct int_vector_entry {
199 FP inthdr;
200} INTVE;
201
202extern INTVE InterruptHandlerEntry[NUM_INTERRUPT];
203
204/*
205 * 例外ベクタテーブルの構造の定義
206 */
207typedef struct exc_vector_entry {
208 FP exchdr; /* 例外ハンドラの起動番地 */
209} EXCVE;
210
211/*
212 * 割込みハンドラの設定
213 *
214 * ベクトル番号 inhno の割込みハンドラの起動番地を inthdr に設定する.
215 */
216Inline void
217define_inh(INHNO inhno, FP inthdr)
218{
219 InterruptHandlerEntry[inhno-1].inthdr = inthdr;
220}
221
222/*
223 * CPU例外ハンドラの設定
224 *
225 * ベクトル番号 excno のCPU例外ハンドラの起動番地を exchdr に設定する.
226 */
227Inline void
228define_exc(EXCNO excno, FP exchdr)
229{
230 define_inh(excno, exchdr);
231}
232
233/*
234 * 割込みハンドラ/CPU例外ハンドラの出å…
235¥å£å‡¦ç†
236 */
237
238
239/*
240 * 割込みハンドラの出å…
241¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
242 *
243 * reqflg をチェックする前に割込みを禁止しないと,reqflg をチェック後
244 * に起動された割込みハンドラ内
245でディスパッチが要求された場合に,ディ
246 * スパッチされない.
247 */
248
249
250#define INT_ENTRY(hdr) hdr
251#define INTHDR_ENTRY(entry) extern void entry();
252
253/*
254 * CPU例外ハンドラの出å…
255¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
256 *
257 * CPU例外ハンドラは,非タスクコンテキストで実行する.そのため,CPU例
258 * 外ハンドラを呼び出す前に割込みモードに移行し,リターンしてきた後に
259 * å…
260ƒã®ãƒ¢ãƒ¼ãƒ‰ã«æˆ»ã™ï¼Žå…
261ƒã®ãƒ¢ãƒ¼ãƒ‰ã«æˆ»ã™ãŸã‚ã«ï¼Œå‰²è¾¼ã¿ãƒ¢ãƒ¼ãƒ‰ã«ç§»è¡Œã™ã‚‹å‰
262 * の SR を割込みスタック上に保存する.CPU例外がタスクコンテキストで
263 * 発生し,reqflg が TRUE になった時に,ret_exc へ分岐する.
264 * reqflg をチェックする前に割込みを禁止しないと,reqflg をチェック後
265 * に起動された割込みハンドラ内
266でディスパッチが要求された場合に,ディ
267 * スパッチされない.
268 */
269
270#define EXC_ENTRY(hdr) hdr
271#define EXCHDR_ENTRY(entry) extern void entry();
272
273/*
274 * CPU例外の発生した時のシステム状æ…
275‹ã®å‚ç…
276§
277 */
278
279/*
280 * CPU例外の発生した時のディスパッチ
281 */
282Inline BOOL
283exc_sense_context(VP p_excinf)
284{
285 /* 1と比較するのは、現在実行中のCPU例外の分 */
286 /* 割込みネストカウンタがインクリメントされているため */
287 return(intnest > 0);
288}
289
290/*
291 * CPU例外の発生した時のCPUロック状æ…
292‹ã®å‚ç…
293§
294 */
295Inline BOOL
296exc_sense_lock(VP p_excinf)
297{
298 return((*((UH *) p_excinf) & 0x0700) == 0x0700);
299}
300
301/*
302 * プロセッサ依存の初期化
303 */
304extern void cpu_initialize(void);
305
306/*
307 * プロセッサ依存の終了時処理
308 */
309extern void cpu_terminate(void);
310
311#endif /* _MACRO_ONLY */
312#endif /* _CPU_CONFIG_H_ */
Note: See TracBrowser for help on using the repository browser.