source: asp_nios2/trunk/arch/nios2_gcc/prc_config.c@ 1

Last change on this file since 1 was 1, checked in by ertl-ichiba, 14 years ago

ASP 1.4.0対応のNios2依存部を追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 5.2 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2008 by Embedded and Real-Time Systems Laboratory
7 * Graduate School of Information Science, Nagoya Univ., JAPAN
8 *
9 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
10 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
11 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
12 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
13 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
14 * スコード中に含まれていること.
15 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
16 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
17 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
18 * の無保証規定を掲載すること.
19 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
20 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
21 * と.
22 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
23 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
24 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
25 * 報告すること.
26 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
27 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
28 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
29 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
30 * 免責すること.
31 *
32 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
33 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
34 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
35 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
36 * の責任を負わない.
37 *
38 * @(#) $Id: prc_config.c 1 2010-06-14 02:33:52Z ertl-ichiba $
39 */
40
41/*
42 * プロセッサ依存モジュール(Nios2用)
43 */
44#include "kernel_impl.h"
45#include "check.h"
46#include "task.h"
47#include "nios2.h"
48
49/*
50 * 例外(割込み/CPU例外)のネスト回数のカウント
51 * コンテキスト参照のために使用
52 */
53uint32_t except_nest_count;
54
55/*
56 * 各割込みの割込み要求禁止フラグの状態
57 */
58uint32_t idf;
59
60/*
61 * 現在の割込み優先度マスクの値
62 */
63uint8_t iipm;
64
65/*
66 * 割込み属性が設定されているかを判別するための変数
67 */
68uint32_t bitpat_cfgint;
69
70#ifndef NIOS2_USE_INT_VEC_INST
71/*
72 * 割込み要因の判定のためのビットマップサーチ命令
73 */
74const uint8_t int_bitmap_search_table[] = { 0, 1, 0, 2, 0, 1, 0,
75 3, 0, 1, 0, 2, 0, 1, 0 };
76#endif
77
78/*
79 * プロセッサ依存の初期化
80 */
81void
82prc_initialize()
83{
84 /*
85 * カーネル起動時は非タスクコンテキストとして動作させるため1に
86 */
87 except_nest_count = 1;
88
89 /*
90 * 各割込みの割込み要求禁止フラグ全禁止
91 */
92 idf = ~0U;
93
94 /*
95 * 割込み優先度マスクの初期値
96 */
97 iipm = 0U;
98
99 /*
100 * 全ての割込みをマスク
101 */
102 set_ienable(~0U);
103
104 /*
105 * 割込み属性が設定されているかを判別するための変数を初期化する.
106 */
107 bitpat_cfgint = 0U;
108}
109
110/*
111 * プロセッサ依存の終了処理
112 */
113void
114prc_terminate(void)
115{
116 /*
117 * すべての割込みをマスクする.
118 */
119 set_ienable(~0U);
120
121 extern void software_term_hook(void);
122 void (*volatile fp)(void) = software_term_hook;
123
124 /*
125 * software_term_hookへのポインタを,一旦volatile指定のあるfpに代
126 * 入してから使うのは,0との比較が最適化で削除されないようにするた
127 * めである.
128 */
129 if (fp != 0) {
130 (*fp)();
131 }
132}
133
134/*
135 * 割込み要求ラインの属性の設定
136 *
137 * ASPカーネルでの利用を想定して,パラメータエラーはアサーションでチェッ
138 * クしている.FI4カーネルに利用する場合には,エラーを返すようにすべき
139 * であろう.
140 */
141void
142x_config_int(INTNO intno, ATR intatr, PRI intpri)
143{
144 assert(VALID_INTNO(intno));
145 assert(TMIN_INTPRI <= intpri && intpri <= TMAX_INTPRI);
146
147 /*
148 * 割込み属性が設定されているかを判別するための変数の設定
149 */
150 bitpat_cfgint |= INTNO_BITPAT(intno);
151
152 /*
153 * いったん割込みを禁止する
154 */
155 x_disable_int(intno);
156
157 if ((intatr & TA_ENAINT) != 0U){
158 (void)x_enable_int(intno);
159 }
160}
161
162/*
163 * CPU例外の発生状況のログ出力
164 *
165 * CPU例外ハンドラの中から,CPU例外情報ポインタ(p_excinf)を引数とし
166 * て呼び出すことで,CPU例外の発生状況をシステムログに出力する.
167 */
168#ifdef SUPPORT_XLOG_SYS
169
170void
171xlog_sys(void *p_excinf)
172{
173}
174
175#endif /* SUPPORT_XLOG_SYS */
176
177#ifndef OMIT_DEFAULT_EXC_HANDLER
178
179/*
180 * 未定義の例外が入った場合の処理
181 */
182void
183default_exc_handler(void *p_excinf){
184
185 syslog(LOG_EMERG, "Unregistered Exception occurs.");
186 syslog(LOG_EMERG, " Excno = %d.",
187 *(((uint32_t*)p_excinf) + CPUEXC_FLM_EXCNO));
188 syslog(LOG_EMERG, " ESTATUS = 0x%x.",
189 *(((uint32_t*)p_excinf) + CPUEXC_FLM_ESTATUS));
190 syslog(LOG_EMERG, " Addr = 0x%x.",
191 *(((uint32_t*)p_excinf) + CPUEXC_FLM_PC));
192 syslog(LOG_EMERG, " IPM = 0x%x.",
193 *(((uint32_t*)p_excinf) + CPUEXC_FLM_IPM));
194 syslog(LOG_EMERG, " Interrupt/Exception Nest Count = %d",
195 *(((uint32_t*)p_excinf) + CPUEXC_FLM_NEST));
196 target_exit();
197}
198
199#endif /* OMIT_DEFAULT_EXC_HANDLER */
200
201#ifndef OMIT_DEFAULT_INT_HANDLER
202
203/*
204 * 未定義の割込みが入った場合の処理
205 */
206void
207default_int_handler(void *p_excinf){
208 syslog(LOG_EMERG, "Unregistered Interrupt occurs.");
209 syslog(LOG_EMERG, " Intno = %d.", *((int*)p_excinf));
210 target_exit();
211}
212
213#endif /* OMIT_DEFAULT_INT_HANDLER */
Note: See TracBrowser for help on using the repository browser.