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

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

initial

File size: 7.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 *
9 * 上記著作権者
10は,以下の (1)〜(4) の条件か,Free Software Foundation
11 * によってå…
12¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
13 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
14 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
15å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
16 * 利用と呼ぶ)することを無償で許諾する.
17 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
18 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
19 * スコード中に含まれていること.
20 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
21 * 用できる形で再é…
22å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
23å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
24 * 者
25マニュアルなど)に,上記の著作権表示,この利用条件および下記
26 * の無保証規定を掲載すること.
27 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
28 * 用できない形で再é…
29å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
30 * と.
31 * (a) 再é…
32å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
33マニュアルなど)に,上記の著
34 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
35 * (b) 再é…
36å¸ƒã®å½¢æ…
37‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
38 * 報告すること.
39 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
40 * 害からも,上記著作権者
41およびTOPPERSプロジェクトをå…
42è²¬ã™ã‚‹ã“と.
43 *
44 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
45お
46 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
47 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
48 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
49 *
50 * @(#) $Id: cpu_config.c,v 1.24 2006/04/10 09:58:15 honda Exp $
51 */
52
53/*
54 * プロセッサ依存モジュール(SH3/4用)
55 */
56#include <s_services.h>
57#include "jsp_kernel.h"
58#include "check.h"
59#include "task.h"
60
61/*
62 * タスクコンテキストでの割込みマスク
63 */
64#ifdef SUPPORT_CHG_IPM
65UW task_intmask;
66#endif /* SUPPORT_CHG_IPM */
67
68
69/*
70 * 非タスクコンテキストでの割込みマスク
71 */
72UW int_intmask;
73
74
75/*
76 * 割り込みハンドラ/優å…
77ˆåº¦ã®ç–‘似テーブル
78 */
79FP int_table[(MAX_INTIVT>>5) + 1];
80VW int_plevel_table[(MAX_INTIVT>>5) + 1];
81
82
83/*
84 * CPU例外ハンドラの疑似テーブル
85 */
86FP exc_table[(0x1E0 >> 5) + 1];
87
88
89/*
90 * プロセッサ依存の初期化
91 */
92void
93cpu_initialize()
94{
95 int i;
96
97 /*
98 * タスクコンテキストでの割込みマスクの初期化
99 */
100#ifdef SUPPORT_CHG_IPM
101 task_intmask = 0x0000;
102#endif /* SUPPORT_CHG_IPM */
103
104 /*
105 * int_table[],int_plevel_table[]の初期化
106 * 未登録の割込み発生時にcpu_interrup()が呼び出されるように
107 * no_reg_interrup()を登録する
108 * ディフォルトのint_plevel_table[]の割込み優å…
109ˆåº¦ã¯MAX_IPM - 1
110 * とする.
111 */
112 for(i = 0; i < ((MAX_INTIVT>>5) + 1); i++){
113 int_table[i] = no_reg_interrupt;
114 int_plevel_table[i] = 0x40000000 | (MAX_IPM - 1) << 4;
115 }
116
117#ifndef GDB_STUB
118 /*
119 * 割り込みコントローラの初期化
120 */
121#if defined(SH7750)
122 sil_wrh_mem((VP)ICR, 0x0000);
123 sil_wrh_mem((VP)IPRA, 0x0000);
124 sil_wrh_mem((VP)IPRB, 0x0000);
125 sil_wrh_mem((VP)IPRC, 0x0000);
126#else /* SH7708 || SH7709 || SH7709A || SH7729R || SH7727 */
127 sil_wrh_mem((VP)ICR0, 0x0000);
128 sil_wrh_mem((VP)IPRA, 0x0000);
129 sil_wrh_mem((VP)IPRB, 0x0000);
130#if defined(SH7709) || defined(SH7709A) || defined(SH7729R) || defined(SH7727)
131 sil_wrh_mem((VP)ICR1, 0x4000);
132 sil_wrh_mem((VP)ICR2, 0x0000);
133 sil_wrh_mem((VP)PINTER, 0x0000);
134 sil_wrh_mem((VP)IPRC, 0x0000);
135 sil_wrh_mem((VP)IPRD, 0x0000);
136 sil_wrh_mem((VP)IPRE, 0x0000);
137 sil_wrb_mem((VP)IRR0, 0x0000);
138 sil_wrb_mem((VP)IRR1, 0x0000);
139 sil_wrb_mem((VP)IRR2, 0x0000);
140#endif /* SH7709 || SH7709A */
141#endif /* SH7750 */
142
143 /*
144 * ベクタベースレジスターの初期化
145 */
146 set_vbr(BASE_VBR);
147
148#endif /* GDB_STUB */
149}
150
151
152/*
153 * プロセッサ依存の終了処理
154 */
155void
156cpu_terminate()
157{
158}
159
160
161/*
162 * Trapa以外の例外で登録されていない例外が発生すると呼び出される
163 */
164void
165cpu_expevt(VW expevt,VW spc,VW ssr,VW pr)
166{
167 syslog(LOG_EMERG, "Unregistered Expevt error occurs.");
168 syslog(LOG_EMERG, "Expevt = %08x SPC = %08x SR = %08x PR=%08X",
169 expevt,spc,ssr,pr);
170 while(1);
171}
172
173/*
174 * 未登録の割込みが発生した場合に呼び出される
175 */
176void
177cpu_interrupt(VW intevt, VW intevt2,VW spc,VW ssr)
178{
179 syslog(LOG_EMERG, "Unregistered Interrupt occurs.");
180#if defined(SH7709) || defined(SH7709A) || defined(SH7729R) || defined(SH7727)
181 syslog(LOG_EMERG, "INTEVT = %08x INTEVT2 = %08x SPC = %08x SR = %08x ",
182 intevt,intevt2,spc,ssr);
183#else /* SH7708 || SH7750 */
184 syslog(LOG_EMERG, "INTEVT = %08x SPC = %08x SR = %08x ",intevt,spc,ssr);
185#endif
186 while(1);
187}
188
189
190
191#ifdef SUPPORT_CHG_IPM
192
193/*
194 * 割込みマスクの変更
195 *
196 * chg_ipm を使って IPM を MAX_IPM (NMI スタブリモートブレーク 以外
197 * のすべての割込みを禁止)以上に変更することはできない.NMI スタブリ
198 * モートブレーク以外のすべての割込みを禁止したい場合には、loc_cpu に
199 * よりCPUロック状æ…
200‹ã«ã™ã‚Œã°ã‚ˆã„.IPM が 0 以外の時にも,タスクディス
201 * パッチは保留されない.IPM は,タスクディスパッチによって,新しく実
202 * 行状æ…
203‹ã«ãªã£ãŸã‚¿ã‚¹ã‚¯ã¸å¼•ãç¶™ãŒã‚Œã‚‹ï¼Žãã®ãŸã‚ï¼Œã‚¿ã‚¹ã‚¯ãŒå®Ÿè¡Œä¸­ã«ï¼Œåˆ¥
204 * のタスクによって IPM が変更される場合がある.JSPカーネルでは,IPM
205 * の変更はタスク例外処理ルーチンによっても起こるので,これによって扱
206 * いが難しくなる状況は少ないと思われる.IPM の値によってタスクディス
207 * パッチを禁止したい場合には,dis_dsp を併用すればよい.
208 */
209
210SYSCALL ER
211chg_ipm(IPM ipm)
212{
213 ER ercd;
214
215 LOG_CHG_IPM_ENTER(ipm);
216 CHECK_TSKCTX_UNL();
217 CHECK_PAR(0 <= ipm && ipm <= MAX_IPM - 1);
218
219 t_lock_cpu();
220 task_intmask = (ipm << 4);
221 ercd = E_OK;
222 t_unlock_cpu();
223
224 exit:
225 LOG_CHG_IPM_LEAVE(ercd);
226 return(ercd);
227}
228
229
230/*
231 * 割込みマスクの参ç…
232§
233 */
234SYSCALL ER
235get_ipm(IPM *p_ipm)
236{
237 ER ercd;
238
239 LOG_GET_IPM_ENTER(p_ipm);
240 CHECK_TSKCTX_UNL();
241
242 t_lock_cpu();
243 *p_ipm = (task_intmask >> 4);
244 ercd = E_OK;
245 t_unlock_cpu();
246
247 exit:
248 LOG_GET_IPM_LEAVE(ercd, *p_ipm);
249 return(ercd);
250}
251
252#endif /* SUPPORT_CHG_IPM */
Note: See TracBrowser for help on using the repository browser.