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

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

initial

File size: 9.3 KB
RevLine 
[26]1/*
2 * TOPPERS/JSP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * 2003 by Advanced Data Controls, Corp
9 *
10 * 上記著作権者
11は,以下の (1)〜(4) の条件か,Free Software Foundation
12 * によってå…
13¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
14 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
15 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
16å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
17 * 利用と呼ぶ)することを無償で許諾する.
18 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
19 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
20 * スコード中に含まれていること.
21 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
22 * 用できる形で再é…
23å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
24å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
25 * 者
26マニュアルなど)に,上記の著作権表示,この利用条件および下記
27 * の無保証規定を掲載すること.
28 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
29 * 用できない形で再é…
30å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
31 * と.
32 * (a) 再é…
33å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
34マニュアルなど)に,上記の著
35 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
36 * (b) 再é…
37å¸ƒã®å½¢æ…
38‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
39 * 報告すること.
40 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
41 * 害からも,上記著作権者
42およびTOPPERSプロジェクトをå…
43è²¬ã™ã‚‹ã“と.
44 *
45 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
46お
47 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
48 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
49 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
50 *
51 * @(#) $Id: cpu_config.h,v 1.5 2004/09/04 16:38:40 honda Exp $
52 */
53
54
55/*
56 * プロセッサ依存モジュール(SH3/4用)
57 */
58
59#ifndef _CPU_CONFIG_H_
60#define _CPU_CONFIG_H_
61
62
63/*
64 * カーネル内
65部識別名のリネーム
66 */
67#include <cpu_rename.h>
68
69
70#ifdef SH4
71#include "sh4.h"
72#else /* SH3 */
73#include "sh3.h"
74#endif /* SH4 */
75
76
77/*
78 * 設定可能な最高優å…
79ˆåº¦
80 */
81#ifdef GHS_STUB
82#define MAX_IPM 0xe
83#else
84#define MAX_IPM 0xf
85#endif
86
87
88/*
89 * プロセッサの特殊命令のインライン関数定義
90 */
91#ifndef _MACRO_ONLY
92#include <cpu_insn.h>
93#endif /* _MACRO_ONLY */
94
95/*
96 * chg_ipm/get_ipm をサポートするかどうかの定義
97 */
98#define SUPPORT_CHG_IPM
99
100
101
102/*
103 * TCB 関連の定義
104 *
105 * cpu_context.h にå…
106¥ã‚Œã‚‹æ–¹ãŒã‚¨ãƒ¬ã‚¬ãƒ³ãƒˆã ãŒï¼Œå‚ç…
107§ã®ä¾å­˜æ€§ã®é–¢ä¿‚で,
108 * cpu_context.h にはå…
109¥ã‚Œã‚‰ã‚Œãªã„.
110 */
111
112/*
113 * TCB 中のフィールドのビット幅
114の定義
115 */
116#define TBIT_TCB_PRIORITY 8 /* priority フィールドのビット幅
117 */
118#define TBIT_TCB_TSTAT 8 /* tstat フィールドのビット幅
119 */
120#define TBIT_TCB_TWAIT 8 /* twait フィールドのビット幅
121 */
122
123#ifndef _MACRO_ONLY
124/*
125 * タスクコンテキストブロックの定義
126 */
127typedef struct task_context_block {
128 VP sp; /* スタックポインタ */
129 FP pc; /* プログラムカウンタ */
130} CTXB;
131
132/*
133 * 割込みマスク操作ライブラリ
134 *
135 * 割込みマスク(intmask)は,IPM(Interrupt Priority Mask)を4ビット
136 * 左にシフトしたものである.
137 */
138
139
140/*
141 * 現在の割込みマスクの読出し
142 */
143Inline UW
144current_intmask()
145{
146 return(current_sr() & 0x000000f0);
147}
148
149
150/*
151 * 割込みマスクの設定
152 */
153Inline void
154set_intmask(UW intmask)
155{
156 set_sr((current_sr() & ~0x000000f0) | intmask);
157}
158
159
160/*
161 * システム状æ…
162‹å‚ç…
163§
164 */
165
166asm unsigned int _context()
167{
168%
169 stc r7_bank,r0
170}
171
172#define sense_context() (_context() > 0)
173
174
175Inline BOOL
176sense_lock()
177{
178 return(current_intmask() == MAX_IPM << 4);
179}
180
181
182#define t_sense_lock sense_lock
183#define i_sense_lock sense_lock
184
185
186/*
187 * CPUロックとその解除(タスクコンテキスト用)
188 *
189 * task_intmask は,chg_ipm をサポートするための変数.chg_ipm をサポー
190 * トしない場合には,t_unlock_cpu 中の task_intmask は 0 に置き換えて
191 * よい.
192 */
193
194#ifdef SUPPORT_CHG_IPM
195extern UW task_intmask; /* タスクコンテキストでの割込みマスク */
196#endif /* SUPPORT_CHG_IPM */
197
198
199Inline void
200t_lock_cpu()
201{
202 disint();
203}
204
205
206Inline void
207t_unlock_cpu()
208{
209#ifdef SUPPORT_CHG_IPM
210 /*
211 * t_unlock_cpu が呼び出されるのは CPUロック状æ…
212‹ã®ã¿ã§ã‚るた
213 * め,処理の途中で task_intmask が書き換わることはない.
214 */
215 set_intmask(task_intmask);
216#else /* SUPPORT_CHG_IPM */
217 enaint();
218#endif /* SUPPORT_CHG_IPM */
219}
220
221
222/*
223 * CPUロックとその解除(非タスクコンテキスト用)
224 */
225
226extern UW int_intmask; /* 非タスクコンテキストでの割込みマスク */
227
228Inline void
229i_lock_cpu()
230{
231 UW intmask;
232
233 /*
234 * 一時変数 intmask を使っているのは,current_intmask()を呼ん
235 * だ直後に割込みが発生し,起動された割込みハンドラ内
236で
237 * int_intmask が変更される可能性があるためである.
238 */
239 intmask = current_intmask();
240 disint();
241 int_intmask = intmask;
242}
243
244
245Inline void
246i_unlock_cpu()
247{
248 set_intmask(int_intmask);
249}
250
251
252/*
253 * タスクディスパッチャ
254 */
255
256/*
257 * 最高優å…
258ˆé †ä½ã‚¿ã‚¹ã‚¯ã¸ã®ãƒ‡ã‚£ã‚¹ãƒ‘ッチ(cpu_support.S)
259 *
260 * dispatch は,タスクコンテキストから呼び出されたサービスコール処理
261 * 内
262で,CPUロック状æ…
263‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない.
264 */
265extern void dispatch(void);
266
267
268/*
269 * 現在のコンテキストを捨ててディスパッチ(cpu_support.S)
270 *
271 * exit_and_dispatch は,CPUロック状æ…
272‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない.
273 */
274extern void exit_and_dispatch(void);
275
276
277/*
278 * 割込みハンドラ/CPU例外ハンドラの設定
279 */
280
281/*
282 * ベクタベースの定義
283 */
284extern void BASE_VBR(void);
285
286
287/*
288 * 例外ベクタテーブルの構造の定義
289 */
290typedef struct exc_vector_entry {
291 FP exchdr; /* 例外ハンドラの起動番地 */
292} EXCVE;
293
294
295
296/*
297 * 割り込みハンドラの疑似テーブル
298 * SH3以降はベクタテーブルを持たないため割り込み処理で例外要因を
299 * オフセットにこれら疑似テーブルよりハンドラの実行番地及び
300 * 割り込みマスクの値を取得する
301 */
302extern FP int_table[0x50];
303extern VW int_plevel_table[0x50];
304
305
306/*
307 * CPU例外ハンドラの疑似テーブル
308 */
309extern FP exc_table[(0x1E0 >> 5) + 1];
310
311
312/*
313 *
314 * 割込みハンドラの設定
315 *
316 * ベクトル番号 inhno の割込みハンドラの起動番地を inthdr に設定する.
317 * 疑似テーブルに登録する
318 * stubを使う場合はstub呼び出しによりstubに登録する
319 *
320 */
321
322extern FP general_exception();
323extern FP interrupt();
324
325
326Inline void
327define_inh(INHNO inhno, FP inthdr)
328{
329 int_table[inhno >> 5] = inthdr;
330
331}
332
333
334/*
335 * CPU例外ハンドラの設定
336 * 擬似ベクターテーブルに登録
337 */
338Inline void
339define_exc(EXCNO excno, FP exchdr)
340{
341 exc_table[excno >> 5] = exchdr;
342
343}
344
345
346/*
347 * 割り込みレベルの設定
348 */
349Inline void
350define_int_plevel(UINT dintno, UW plevel)
351{
352 int_plevel_table[dintno >> 5] = (plevel << 4) | 0x40000000;
353}
354
355
356/*
357 * 割込みハンドラ/CPU例外ハンドラの出å…
358¥å£å‡¦ç†
359 *
360 */
361
362/*
363 * 割込みハンドラの出å…
364¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
365 */
366
367#define INTHDR_ENTRY(inthdr) extern void inthdr(void)
368
369#define INT_ENTRY(inthdr) inthdr
370
371/*
372 * CPU例外ハンドラの出å…
373¥å£å‡¦ç†ã®ç”Ÿæˆãƒžã‚¯ãƒ­
374 *
375 */
376#define EXCHDR_ENTRY(exchdr) extern void exchdr(VP sp)
377
378#define EXC_ENTRY(exchdr) exchdr
379
380
381/*
382 * CPU例外の発生した時のシステム状æ…
383‹ã®å‚ç…
384§
385 */
386
387/*
388 * CPU例外の発生した時のコンテキスト判定
389 */
390
391Inline BOOL
392exc_sense_context(VP p_excinf)
393{
394 return(_context() > 1);
395}
396
397/*
398 * CPU例外の発生した時のCPUロック状æ…
399‹ã®å‚ç…
400§
401 */
402Inline BOOL
403exc_sense_lock(VP p_excinf)
404{
405 return((*((UW *)p_excinf + 11) & 0x00000f0) == MAX_IPM << 4);
406}
407
408
409/*
410 * プロセッサ依存の初期化
411 */
412extern void cpu_initialize(void);
413
414
415/*
416 * プロセッサ依存の終了時処理
417 */
418extern void cpu_terminate(void);
419
420
421/*
422 * 未登録の割込み/例外発生時のログ出力
423 */
424extern void cpu_expevt(VW,VW,VW,VW);
425extern void cpu_interrupt(VW,VW,VW,VW);
426extern void no_reg_interrupt(void);
427
428
429/*
430 * シリアルコントローラのボーレート設定時の待
431ち時間の設定
432 * バスステートコントローラのリフレッシュカウンタを使う
433 */
434#define WAIT_RFCR_FOR_SCI 200
435
436
437#endif /* _MACRO_ONLY_ */
438#endif /* _CPU_CONFIG_H_ */
Note: See TracBrowser for help on using the repository browser.