source: atk2-sc3_fl850f1l/arch/v850_gcc/prc_config.c@ 117

Last change on this file since 117 was 117, checked in by ertl-ishikawa, 9 years ago

ATK2-SC3 1.3.2 FL850F1L(RH850F1L)依存部(GCC/GHS/CCRH)を追加

File size: 7.5 KB
Line 
1/*
2 * TOPPERS ATK2
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 * Automotive Kernel Version 2
5 *
6 * Copyright (C) 2012-2014 by Center for Embedded Computing Systems
7 * Graduate School of Information Science, Nagoya Univ., JAPAN
8 * Copyright (C) 2012-2014 by FUJI SOFT INCORPORATED, JAPAN
9 * Copyright (C) 2012-2013 by Spansion LLC, USA
10 * Copyright (C) 2012-2013 by NEC Communication Systems, Ltd., JAPAN
11 * Copyright (C) 2012-2014 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
12 * Copyright (C) 2012-2014 by Renesas Electronics Corporation, JAPAN
13 * Copyright (C) 2012-2014 by Sunny Giken Inc., JAPAN
14 * Copyright (C) 2012-2014 by TOSHIBA CORPORATION, JAPAN
15 * Copyright (C) 2012-2014 by Witz Corporation, JAPAN
16 *
17 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
18 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
19 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
20 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
21 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
22 * スコード中に含まれていること.
23 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
24 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
25 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
26 * の無保証規定を掲載すること.
27 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
28 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
29 * と.
30 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
31 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
32 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
33 * 報告すること.
34 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
35 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
36 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
37 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
38 * 免責すること.
39 *
40 * 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
41 * 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
42 * はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
43 * 用する者に対して,AUTOSARパートナーになることを求めている.
44 *
45 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
46 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
47 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
48 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
49 * の責任を負わない.
50 *
51 * $Id: prc_config.c 187 2015-06-25 03:39:04Z t_ishikawa $
52 */
53
54/*
55 * プロセッサ依存モジュール(V850用)
56 */
57#include "kernel_impl.h"
58
59/*
60 * 例外(割込み/CPU例外)のネスト回数のカウント
61 * コンテキスト参照のために使用
62 */
63uint32 except_nest_cnt;
64
65#ifdef CFG_USE_PROTECTIONHOOK
66uint32 v850_cpu_exp_no;
67uint32 v850_cpu_exp_pc;
68uint32 v850_cpu_exp_sp;
69#endif /* CFG_USE_PROTECTIONHOOK */
70
71/*
72 * 現在の割込み優先度マスクの値(内部表現)
73 */
74uint8 current_iintpri;
75
76/* 割り込み要求マスクテーブル */
77const uint16 pmr_setting_tbl[] =
78{
79#if TNUM_INTPRI == 16
80 0xffff, /* ISR2 LEVEL -16 MASK */
81 0xfffe, /* ISR2 LEVEL -15 MASK */
82 0xfffc, /* ISR2 LEVEL -14 MASK */
83 0xfff8, /* ISR2 LEVEL -13 MASK */
84 0xfff0, /* ISR2 LEVEL -12 MASK */
85 0xffe0, /* ISR2 LEVEL -11 MASK */
86 0xffc0, /* ISR2 LEVEL -10 MASK */
87 0xff80, /* ISR2 LEVEL -9 MASK */
88 0xff00, /* ISR2 LEVEL -8 MASK */
89 0xfe00, /* ISR2 LEVEL -7 MASK */
90 0xfc00, /* ISR2 LEVEL -6 MASK */
91 0xf800, /* ISR2 LEVEL -5 MASK */
92 0xf000, /* ISR2 LEVEL -4 MASK */
93 0xe000, /* ISR2 LEVEL -3 MASK */
94 0xc000, /* ISR2 LEVEL -2 MASK */
95 0x8000, /* ISR2 LEVEL -1 MASK */
96 0x0000 /* Dummy */
97#elif TNUM_INTPRI == 8
98 0x00ff, /* ISR2 LEVEL -8 MASK */
99 0x00fe, /* ISR2 LEVEL -7 MASK */
100 0x00fc, /* ISR2 LEVEL -6 MASK */
101 0x00f8, /* ISR2 LEVEL -5 MASK */
102 0x00f0, /* ISR2 LEVEL -4 MASK */
103 0x00e0, /* ISR2 LEVEL -3 MASK */
104 0x00c0, /* ISR2 LEVEL -2 MASK */
105 0x0080, /* ISR2 LEVEL -1 MASK */
106 0x0000 /* Dummy */
107#else
108#error TNUM_INTPRI is illegal.
109#endif /* TNUM_INTPRI == 16 */
110};
111
112/*
113 * x_nested_lock_os_int()のネスト回数
114 */
115volatile uint8 nested_lock_os_int_cnt;
116
117/*
118 * OS割込み禁止状態の時に割込み優先度マスクを保存する変数
119 */
120volatile uint16 current_intpri;
121
122/* =begin added for SC3 */
123/*
124 * 非信頼フックルーチンを実行する前のシステムスタックのスタックポインタ
125 */
126uint32 hook_savedsp;
127
128uint32 shutdown_hook_savedsp;
129
130uint32 trusted_hook_savedsp;
131/* =end added for SC3 */
132
133/*
134 * 起動時のハードウェア初期化
135 */
136void
137prc_hardware_initialize(void)
138{
139}
140
141#ifdef __v850e3v5__
142extern const uint32 intbp_tbl[];
143#endif /* __v850e3v5__ */
144
145/*
146 * プロセッサ依存の初期化
147 */
148void
149prc_initialize(void)
150{
151 /*
152 * カーネル起動時は非タスクコンテキストとして動作させるため1に
153 */
154 except_nest_cnt = 1U;
155
156 /*
157 * 割込み優先度マスクの初期値は最低優先度
158 */
159 current_iintpri = INT_IPM(0);
160
161 /* =begin added for SC3 */
162 target_mpu_initialize();
163 /* =end added for SC3 */
164#ifdef __v850e3v5__
165 /* テーブル参照方式のINTBPアドレス設定 */
166 set_intbp((uint32)intbp_tbl);
167#endif /* __v850e3v5__ */
168}
169
170/*
171 * プロセッサ依存の終了処理
172 */
173void
174prc_terminate(void)
175{
176 /* 割り込み処理中で終了した場合を想定してISPRをクリアする */
177 clear_ispr();
178
179 /* 例外処理から終了した場合を想定してNP/EPビットをクリアする */
180 set_psw(current_psw() & ~(0x0080 | 0x0040));
181}
182
183/*
184 * 割込み要求ラインの属性の設定
185 */
186void
187x_config_int(InterruptNumberType intno, AttributeType intatr, PriorityType intpri)
188{
189 uint32 eic_address;
190
191 ASSERT(VALID_INTNO(intno));
192
193 eic_address = EIC_ADDRESS(intno);
194
195 /*
196 * 割込みのマスク
197 *
198 * 割込みを受け付けたまま,レベルトリガ/エッジトリガの設定や,割
199 * 込み優先度の設定を行うのは危険なため,割込み属性にかかわらず,
200 * 一旦マスクする.
201 */
202 (void) x_disable_int(intno);
203
204 /*
205 * 割込み優先度の設定
206 */
207 sil_wrh_mem((void *) eic_address,
208 ((sil_reh_mem((void *) eic_address) & ~0x0f) | INT_IPM(intpri)));
209
210#ifdef __v850e3v5__
211 /* テーブル参照方式 */
212 sil_wrh_mem((uint16 *) eic_address,
213 (sil_reh_mem((uint16 *) eic_address) | (1 << 6)));
214#endif /* __v850e3v5__ */
215
216 if ((intatr & ENABLE) != 0U) {
217 /*
218 * 初期状態が割込み許可であれば,割込みを許可
219 */
220 (void) x_enable_int(intno);
221 }
222}
223
224#ifndef OMIT_DEFAULT_INT_HANDLER
225
226/*
227 * 未定義の割込みが入った場合の処理
228 */
229void
230default_int_handler(void)
231{
232 target_fput_str("Unregistered Interrupt occurs.");
233 ASSERT(0);
234}
235
236#endif /* OMIT_DEFAULT_INT_HANDLER */
237
238/*
239 * 無限ループ処理
240 * (デバッグ時の無限ループ到達確認用 / 最適化防止のためここで定義する)
241 */
242void
243infinite_loop(void)
244{
245 while (1) {
246 }
247}
248
249/* =begin added for SC3 */
250/*
251 * startからendまでの領域が
252 * 非信頼フックルーチン実行時のスタックに含まれるかチェックする
253 */
254AccessType
255probe_nthkstk(const MemoryStartAddressType start, const MemoryStartAddressType end)
256{
257 AccessType result = AP_NoAccess;
258
259 if (hook_savedsp != 0U) {
260 if ((start >= (const MemoryStartAddressType) _nthkstk) &&
261 (end <= (const MemoryStartAddressType) ((const MemorySizeType) _nthkstk + _nthkstksz))) {
262 result = AP_Writable | AP_Readable | AP_StackSpace;
263 }
264 }
265 return(result);
266}
267
268/*
269 * 不正な機能コードを指定して,システムサービス発行時の処理
270 */
271
272StatusType
273no_support_service(void)
274{
275 StatusType ercd = E_OS_SERVICEID;
276
277#ifdef CFG_USE_ERRORHOOK
278 x_nested_lock_os_int();
279 call_errorhook(ercd, OSServiceId_INVALID);
280 x_nested_unlock_os_int();
281#endif /* CFG_USE_ERRORHOOK */
282
283 return(ercd);
284}
285
286/* =end added for SC3 */
287
Note: See TracBrowser for help on using the repository browser.