source: atk2-sc3-1.4.0-ntisr/arch/v850_gcc/prc_common.tf@ 172

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

ATK2-SC3 1.4.0 RH850依存部 非信頼C2ISR対応を追加

  • Property svn:executable set to *
File size: 26.0 KB
Line 
1$
2$ TOPPERS ATK2
3$ Toyohashi Open Platform for Embedded Real-Time Systems
4$ Automotive Kernel Version 2
5$
6$ Copyright (C) 2013-2016 by Center for Embedded Computing Systems
7$ Graduate School of Information Science, Nagoya Univ., JAPAN
8$ Copyright (C) 2013-2014 by FUJI SOFT INCORPORATED, JAPAN
9$ Copyright (C) 2013-2014 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
10$ Copyright (C) 2013-2014 by Renesas Electronics Corporation, JAPAN
11$ Copyright (C) 2013-2014 by Sunny Giken Inc., JAPAN
12$ Copyright (C) 2013-2014 by TOSHIBA CORPORATION, JAPAN
13$ Copyright (C) 2013-2014 by Witz Corporation, JAPAN
14$
15$ 上記著作権者
16は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
17$ ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
18$ 変・再é…
19å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
20$ (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
21$ 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
22$ スコード中に含まれていること.
23$ (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
24$ 用できる形で再é…
25å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
26å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
27$ 者
28マニュアルなど)に,上記の著作権表示,この利用条件および下記
29$ の無保証規定を掲載すること.
30$ (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
31$ 用できない形で再é…
32å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
33$ と.
34$ (a) 再é…
35å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
36マニュアルなど)に,上記の著
37$ 作権表示,この利用条件および下記の無保証規定を掲載すること.
38$ (b) 再é…
39å¸ƒã®å½¢æ…
40‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
41$ 報告すること.
42$ (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
43$ 害からも,上記著作権者
44およびTOPPERSプロジェクトをå…
45è²¬ã™ã‚‹ã“と.
46$ また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
47$ 由に基づく請求からも,上記著作権者
48およびTOPPERSプロジェクトを
49$ å…
50è²¬ã™ã‚‹ã“と.
51$
52$ 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
53$ 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
54$ はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
55$ 用する者
56に対して,AUTOSARパートナーになることを求めている.
57$
58$ 本ソフトウェアは,無保証で提供されているものである.上記著作権者
59お
60$ よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
61$ に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
62$ アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
63$ の責任を負わない.
64$
65$ $Id: prc_common.tf 187 2015-06-25 03:39:04Z t_ishikawa $
66$
67
68$
69$ 有効な割込み番号
70$
71$
72$ V850ではリセット,NMI,WDTは割込みに分類されるが,リセットは
73$ カーネルが用いるため除外する
74
75$INTNO_VALID = {}$
76$FOREACH intno RANGE(0, TNUM_INT - 1)$
77 $INTNO_VALID = APPEND(INTNO_VALID, intno)$
78$END$
79
80$EXCNO_VALID = {1,2,3,4,5,7}$
81
82$TNUM_EXC = {1,2,3,4,5,6,7}$
83
84$
85$ CRE_ISR2で使用できる割込み番号
86$
87$INTNO_CREISR2_VALID = INTNO_VALID$
88
89$
90$ 標準のセクションのメモリオブジェクト属性の定義
91$
92$MEMATR_TEXT = (TA_NOWRITE|TA_EXEC)$
93$MEMATR_RODATA = (TA_NOWRITE|TA_EXEC)$
94$MEMATR_DATA = TA_MEMINI$
95$MEMATR_BSS = TA_NULL$
96$MEMATR_PRSV = TA_MEMPRSV$
97$MEMATR_ROSDATA = (TA_SDATA|TA_MEMINI|TA_NOWRITE)$
98$MEMATR_SDATA = (TA_SDATA|TA_MEMINI)$
99$MEMATR_SBSS = TA_SDATA$
100
101$TARGET_MEMATR_USTACK = TA_NULL$
102
103$
104$ 標準のセクションに関する定義
105$ DESC.SECTION:セクション名
106$ DESC.MEMREG:セクションをé…
107ç½®ã™ã‚‹ãƒ¡ãƒ¢ãƒªãƒªãƒ¼ã‚¸ãƒ§ãƒ³
108$ DESC.MEMATR:セクションのメモリオブジェクト属性
109$ ※DSEC.ORDER_LIST:IDのリストが定義されていないターゲットでは,
110$  下記の定義は無効である(kernel.tfで無視される)
111$
112
113$DSEC.SECTION[0] = ".text"$
114$DSEC.MEMREG[0] = 1$
115$DSEC.MEMATR[0] = MEMATR_TEXT$
116
117$DSEC.SECTION[1] = ".rodata"$
118$DSEC.MEMREG[1] = 1$
119$DSEC.MEMATR[1] = MEMATR_RODATA$
120
121$DSEC.SECTION[2] = ".data"$
122$DSEC.MEMREG[2] = 0$
123$DSEC.MEMATR[2] = MEMATR_DATA$
124
125$DSEC.SECTION[3] = ".bss"$
126$DSEC.MEMREG[3] = 0$
127$DSEC.MEMATR[3] = MEMATR_BSS$
128
129$DSEC.SECTION[4] = ".prsv"$
130$DSEC.MEMREG[4] = 0$
131$DSEC.MEMATR[4] = MEMATR_PRSV$
132
133$DSEC.SECTION[5] = ".rosdata"$
134$DSEC.MEMREG[5] = 0$
135$DSEC.MEMATR[5] = MEMATR_ROSDATA$
136
137$DSEC.SECTION[6] = ".sdata"$
138$DSEC.MEMREG[6] = 0$
139$DSEC.MEMATR[6] = MEMATR_SDATA$
140
141$DSEC.SECTION[7] = ".sbss"$
142$DSEC.MEMREG[7] = 0$
143$DSEC.MEMATR[7] = MEMATR_SBSS$
144
145
146$TNUM_MPU_OSAP_DEFAULT = 0$
147$IF USE_MPU_SRPW_DATA$
148$ // å…
149±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライトデータ
150 $TNUM_MPU_OSAP_DEFAULT = TNUM_MPU_OSAP_DEFAULT + 1$
151$END$
152$IF USE_MPU_SRPW_SDATA$
153$ // å…
154±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライトショートデータ
155 $TNUM_MPU_OSAP_DEFAULT = TNUM_MPU_OSAP_DEFAULT + 1$
156$END$
157$IF USE_MPU_PR_TEXT$
158$ // 専有リードROM
159 $TNUM_MPU_OSAP_DEFAULT = TNUM_MPU_OSAP_DEFAULT + 1$
160$END$
161$IF USE_MPU_PR_SDATA$
162$ // 専有リードRAM
163 $TNUM_MPU_OSAP_DEFAULT = TNUM_MPU_OSAP_DEFAULT + 1$
164$END$
165$IF USE_MPU_PRW_DATA$
166$ // 専有リードライトデータ
167 $TNUM_MPU_OSAP_DEFAULT = TNUM_MPU_OSAP_DEFAULT + 1$
168$END$
169$IF USE_MPU_PRW_SDATA$
170$ // å…
171±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライトショートデータ
172 $TNUM_MPU_OSAP_DEFAULT = TNUM_MPU_OSAP_DEFAULT + 1$
173$END$
174
175$TNUM_MPU_SHARED_DEFAULT = 0$
176$IF USE_MPU_SRW_DATA_SDATA$
177$ // å…
178±æœ‰ãƒªãƒ¼ãƒ‰ãƒ©ã‚¤ãƒˆ
179 $TNUM_MPU_SHARED_DEFAULT = TNUM_MPU_SHARED_DEFAULT + 1$
180$END$
181$IF USE_MPU_SR_TEXT$
182$ // å…
183±æœ‰ãƒªãƒ¼ãƒ‰ROM
184 $TNUM_MPU_SHARED_DEFAULT = TNUM_MPU_SHARED_DEFAULT + 1$
185$END$
186$IF USE_MPU_SR_DATA_SDATA$
187$ // å…
188±æœ‰ãƒªãƒ¼ãƒ‰RAM
189 $TNUM_MPU_SHARED_DEFAULT = TNUM_MPU_SHARED_DEFAULT + 1$
190$END$
191
192$
193$ MPUに設定する領域のアラインメントをチェックするための定数
194$ TARGET_PAGE_SIZE_STR: target依存部で定義するMPU領域ページ単位(byte)
195$
196$MPU_PAGE_MASK = 0xffffffff - (TARGET_PAGE_SIZE_STR - 1)$
197
198$
199$ OSがデフォルトで使用するMPU数が最大値を超
200えていたらエラー
201$ ターゲット依存部のtarget_config.hの USE_MPU_XXX の定義誤り
202$
203$IF TNUM_MPU_REG < (TNUM_MPU_OSAP_DEFAULT + TNUM_MPU_SHARED_DEFAULT)$
204 $ERROR$
205 the number of MPU region used by ATK2 exceeds $TNUM_MPU_REG$
206 $END$
207$END$
208
209$
210$ OsMemoryArea 管理用データの初期化
211$ ユーザスタック領域でMPU1つは必
212ず専有される
213$
214$TNUM_MPU_ATTMEM_REMAIN = TNUM_MPU_REG - (TNUM_MPU_OSAP_DEFAULT + TNUM_MPU_SHARED_DEFAULT) - 1$
215$TNUM_MPU_SHARED_ATTMEM = 0$
216$TNUM_MPU_OSAP_ATTMEM = 0$
217
218$TNUM_MPU_OSAP = TNUM_MPU_OSAP_DEFAULT + TNUM_MPU_OSAP_ATTMEM$
219$TNUM_MPU_SHARED = TNUM_MPU_SHARED_DEFAULT + TNUM_MPU_SHARED_ATTMEM$
220
221$
222$ OsMemoryArea のエラーチェック
223$
224$FUNCTION HOOK_ERRORCHECK_MEM$
225 $IF TNUM_MPU_ATTMEM_REMAIN <= 0$
226 $ERROR$
227 the number of OsMemoryArea exceeds $TNUM_MPU_REG - (TNUM_MPU_OSAP_DEFAULT + TNUM_MPU_SHARED_DEFAULT)$
228 $END$
229 $ELIF EQ(MEM.OSAPID[ARGV[1]], "")$
230$ // å…
231±æœ‰ ATTMEM
232 $TNUM_MPU_SHARED_ATTMEM = TNUM_MPU_SHARED_ATTMEM + 1$
233 $TNUM_MPU_ATTMEM_REMAIN = TNUM_MPU_ATTMEM_REMAIN - 1$
234 $ELIF DEFAULT_ACPTN[MEM.OSAPID[ARGV[1]]] != TACP_KERNEL$
235$ // 非信頼OSAP ATTMEM
236 $IF LENGTH(ENUM_MPU_OSAP_ATTMEM[MEM.OSAPID[ARGV[1]]])$
237 $ENUM_MPU_OSAP_ATTMEM[MEM.OSAPID[ARGV[1]]] = ENUM_MPU_OSAP_ATTMEM[MEM.OSAPID[ARGV[1]]] + 1$
238 $ELSE$
239 $ENUM_MPU_OSAP_ATTMEM[MEM.OSAPID[ARGV[1]]] = 1$
240 $END$
241 $IF TNUM_MPU_OSAP_ATTMEM < ENUM_MPU_OSAP_ATTMEM[MEM.OSAPID[ARGV[1]]]$
242 $TNUM_MPU_OSAP_ATTMEM = TNUM_MPU_OSAP_ATTMEM + 1$
243 $TNUM_MPU_ATTMEM_REMAIN = TNUM_MPU_ATTMEM_REMAIN - 1$
244 $END$
245 $END$
246
247 $TNUM_MPU_OSAP = TNUM_MPU_OSAP_DEFAULT + TNUM_MPU_OSAP_ATTMEM$
248 $TNUM_MPU_SHARED = TNUM_MPU_SHARED_DEFAULT + TNUM_MPU_SHARED_ATTMEM$
249$END$
250
251$FUNCTION GENERATE_TARGET_MPUINFOB$
252$
253$ 保護ドメイン初期化ブロックの変更部を生成
254$
255 $FILE "kernel_mem2.c"$
256 extern const uint32 tnum_shared_mem;$NL$
257 extern uint8 * const shared_meminib_table[];$NL$
258 $NL$
259
260 $PREPARE_OSAPINICTXB()$
261
262 $FOREACH osap OSAP.ID_LIST$
263 $IF LENGTH(ENUM_MPU_OSAP_ATTMEM[osap]) &&
264 (ENUM_MPU_OSAP_ATTMEM[osap] > 0)$
265 static MPUINFOB mpu_area_info_$osap$[$ENUM_MPU_OSAP_ATTMEM[osap]$] = {$NL$
266 $FOREACH mpuinfo RANGE(1, ENUM_MPU_OSAP_ATTMEM[osap])$
267 $TAB$$TAB${$NL$
268 $TAB$$TAB$$TAB$0, 0, 0, /* MPU$cur_osap_mpu_id$ */$NL$
269 $TAB$$TAB$},$NL$
270 $END$
271 };$NL$
272 $NL$
273 $END$
274 $END$
275$END$
276
277$FUNCTION GENERATE_OSAPINIB_MPUINFOB$
278 $cur_osap_mpu_id = 1$
279
280 $TAB$$TAB${$NL$
281 $IF USE_MPU_SRPW_DATA$
282$ // å…
283±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライトデータ
284 $TAB$$TAB$$TAB$0, 0, /* MPU$cur_osap_mpu_id$ */$NL$
285 $cur_osap_mpu_id = cur_osap_mpu_id + 1$
286 $END$
287 $IF USE_MPU_SRPW_SDATA$
288$ // å…
289±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライトショートデータ
290 $TAB$$TAB$$TAB$0, 0, /* MPU$cur_osap_mpu_id$ */$NL$
291 $cur_osap_mpu_id = cur_osap_mpu_id + 1$
292 $END$
293 $IF USE_MPU_PR_TEXT$
294$ // 専有リードROM
295 $TAB$$TAB$$TAB$0, 0, /* MPU$cur_osap_mpu_id$ */$NL$
296 $cur_osap_mpu_id = cur_osap_mpu_id + 1$
297 $END$
298 $IF USE_MPU_PR_SDATA$
299$ // 専有リードRAM
300 $TAB$$TAB$$TAB$0, 0, /* MPU$cur_osap_mpu_id$ */$NL$
301 $cur_osap_mpu_id = cur_osap_mpu_id + 1$
302 $END$
303 $IF USE_MPU_PRW_DATA$
304$ // 専有リードライトデータ
305 $TAB$$TAB$$TAB$0, 0, /* MPU$cur_osap_mpu_id$ */$NL$
306 $cur_osap_mpu_id = cur_osap_mpu_id + 1$
307 $END$
308 $IF USE_MPU_PRW_SDATA$
309$ // å…
310±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライトショートデータ
311 $TAB$$TAB$$TAB$0, 0, /* MPU$cur_osap_mpu_id$ */$NL$
312 $cur_osap_mpu_id = cur_osap_mpu_id + 1$
313 $END$
314 $IF LENGTH(ENUM_MPU_OSAP_ATTMEM[ARGV[1]]) &&
315 (ENUM_MPU_OSAP_ATTMEM[ARGV[1]] > 0)$
316 $TAB$$TAB$$TAB$mpu_area_info_$ARGV[1]$,$NL$
317 $TAB$$TAB$$TAB$$ENUM_MPU_OSAP_ATTMEM[ARGV[1]]$U,$NL$
318 $ELSE$
319 $TAB$$TAB$$TAB$NULL,$NL$
320 $TAB$$TAB$$TAB$0U,$NL$
321 $END$
322 $TAB$$TAB$$TAB$( (uint32)0 ),/* MPRC */$NL$
323 $TAB$$TAB$}$NL$
324 $NL$
325$END$
326
327$FUNCTION GENERATE_TSKINICTXB$
328 $TAB$$TAB${$NL$
329 $TAB$$TAB$$TAB$$TSK.TINIB_SSTKSZ[ARGV[1]]$,$NL$
330 $TAB$$TAB$$TAB$((void *)((uint8 *)($TSK.TINIB_SSTK[ARGV[1]]$)
331 $SPC$+ ($TSK.TINIB_SSTKSZ[ARGV[1]]$))),$NL$
332 $IF OSAP.TRUSTED[TSK.OSAPID[ARGV[1]]]$
333 $TAB$$TAB$$TAB$0,$NL$
334 $TAB$$TAB$$TAB$0,$NL$
335 $ELSE$
336 $TAB$$TAB$$TAB$$TSK.TINIB_USTKSZ[ARGV[1]]$,$NL$
337 $TAB$$TAB$$TAB$((void *)((uint8 *)($TSK.TINIB_USTK[ARGV[1]]$)
338 $SPC$+ ($TSK.TINIB_USTKSZ[ARGV[1]]$))),$NL$
339 $END$
340 $TAB$$TAB$},$NL$
341$END$
342
343$FUNCTION GENERATE_STKMPUINFOB$
344 $TAB$$TAB${$NL$
345 $IF OSAP.TRUSTED[TSK.OSAPID[ARGV[1]]] || (tmin_os_restarttask <= ARGV[1])$
346 $TAB$$TAB$$TAB$0,$NL$
347 $TAB$$TAB$$TAB$0,$NL$
348 $ELSE$
349 $IF EQ(TSK.STK[ARGV[1]],"NULL")$
350$ // stkがNULLの場合の処理
351 $IF LENGTH(TSK.SHARED_USTK_ID[ARGV[1]])$
352$ // å…
353±æœ‰ã‚¹ã‚¿ãƒƒã‚¯
354 $TAB$$TAB$$TAB$/*dummy at pass2*/$NL$
355 $TAB$$TAB$$TAB$0,$NL$
356 $TAB$$TAB$$TAB$0,$NL$
357 $ELSE$
358$ // 固有スタック
359 $TAB$$TAB$$TAB$/*dummy at pass2*/$NL$
360 $TAB$$TAB$$TAB$0,$NL$
361 $TAB$$TAB$$TAB$0,$NL$
362 $END$
363 $ELSE$
364$ // stkがNULLでない場合の処理
365 $TAB$$TAB$$TAB$$FORMAT("(uint8 *)%s", TSK.TINIB_USTK[ARGV[1]])$,$NL$
366 $TAB$$TAB$$TAB$$FORMAT("(uint8 *)((uint32)%s + %d)", TSK.TINIB_USTK[ARGV[1]], TSK.TINIB_USTKSZ[ARGV[1]])$,$NL$
367 $END$
368 $END$
369 $TAB$$TAB$},$NL$
370$END$
371
372
373$
374$ 標準テンプレートファイルのインクルード
375$
376$INCLUDE "kernel/kernel.tf"$
377
378$FOREACH intno INTNO_VALID$
379 $FOREACH isrid ISR.ID_LIST$
380 $IF intno == ISR.INTNO[isrid]$
381 $INT.ISRID[intno] = isrid$
382 $END$
383 $END$
384$END$
385
386
387$FILE "Os_Lcfg.c"$
388
389$
390$ C2ISRの優å…
391ˆåº¦ä¸‹é™
392$
393$n = 0$
394$pmr_isr2_mask = 0xffff$
395$WHILE (n < (MIN_PRI_ISR2 + TNUM_INTPRI))$
396$pmr_isr2_mask = pmr_isr2_mask & ~(0x01 << n)$
397$n = n + 1$
398$END$
399$pmr_isr1_mask = ~pmr_isr2_mask & 0xffff $
400
401const uint16 pmr_isr2_mask = $FORMAT("0x%x",pmr_isr2_mask)$;$NL$
402const uint16 pmr_isr1_mask = $FORMAT("0x%x",pmr_isr1_mask)$;$NL$
403
404$
405$ 割込みハンドラテーブル(EIレベル マスカブル割込み用)
406$
407const FunctionRefType isr_tbl[TNUM_INT] = {$NL$
408$JOINEACH intno INTNO_VALID "\n"$
409 $isrid = INT.ISRID[intno]$
410 $IF LENGTH(isrid)$
411 $TAB$$ISR.INT_ENTRY[isrid]$
412 $ELSE$
413 $TAB$default_int_handler
414 $END$
415$ //カンマの出力(最後の要素の後ろに出力しない)
416 $IF intno != AT(INTNO_VALID,LENGTH(INTNO_VALID) - 1)$
417 ,
418 $END$
419 $TAB$$FORMAT("/* %d */", intno)$
420$END$
421$NL$};$NL$
422$NL$
423
424$
425$ ISRCBの取得テーブル(EIレベル マスカブル割込み用)
426$
427ISRCB *const isr_p_isrcb_tbl[TNUM_INT] = {$NL$
428$JOINEACH intno INTNO_VALID "\n"$
429 $isrid = INT.ISRID[intno]$
430 $IF LENGTH(isrid) && EQ(ISR.CATEGORY[isrid], "CATEGORY_2")$
431 $TAB$&(isrcb_table[$ISR.ID[isrid]$])
432 $ELSE$
433 $TAB$NULL
434 $END$
435$ //カンマの出力(最後の要素の後ろに出力しない)
436 $IF intno != AT(INTNO_VALID,LENGTH(INTNO_VALID) - 1)$
437 ,
438 $END$
439 $TAB$$FORMAT("/* %d */", intno)$
440$END$
441$NL$};$NL$
442$NL$
443
444
445$
446$ 割込みベクタと各割込みå…
447¥å£å‡¦ç†ã®å‡ºåŠ›é–¢æ•°
448$
449
450$FUNCTION VECTOR_ASMOUT$
451
452$EXCEPTION_VECTOR_SECTION()$
453
454$ASM_GLOBAL("__reset")$
455$NL$
456$ASM_LABEL("__reset")$
457$NL$
458$TAB$$ASM_COMMENT()$
459$FORMAT(" Exception 0x%x ", 0)$$NL$
460$TAB$jr __start$NL$
461$TAB$nop$NL$
462$TAB$nop$NL$
463$TAB$nop$NL$
464$TAB$nop$NL$
465$TAB$nop$NL$
466$TAB$nop$NL$
467
468$
469$ ベクタテーブル(例外 No1-7)
470$
471$ 例外 No1
472$TAB$$ASM_COMMENT()$$FORMAT(" Exception 0x%x ", 1)$$NL$
473$TAB$ldsr r2, eiwr$NL$
474$TAB$movea $E_OS_PROTECTION_EXCEPTION$, r0, r2$NL$
475$TAB$jr _fe_exception_entry$NL$
476$TAB$nop$NL$
477$TAB$nop$NL$
478$ 例外 No2
479$TAB$$ASM_COMMENT()$$FORMAT(" Exception 0x%x ", 2)$$NL$
480$TAB$ldsr r2, eiwr$NL$
481$TAB$movea $E_OS_PROTECTION_EXCEPTION$, r0, r2$NL$
482$TAB$jr _fe_exception_entry$NL$
483$TAB$nop$NL$
484$TAB$nop$NL$
485$ 例外 No3
486$TAB$$ASM_COMMENT()$$FORMAT(" Exception 0x%x ", 3)$$NL$
487$TAB$ldsr r2, eiwr$NL$
488$TAB$movea $E_OS_PROTECTION_MEMORY$, r0, r2$NL$
489$TAB$jr _fe_exception_entry$NL$
490$TAB$nop$NL$
491$TAB$nop$NL$
492$ 例外 No4
493$TAB$$ASM_COMMENT()$$FORMAT(" Exception 0x%x ", 4)$$NL$
494$TAB$ldsr r2, eiwr$NL$
495$TAB$movea $E_OS_PROTECTION_EXCEPTION$, r0, r2$NL$
496$TAB$jr _ei_exception_entry$NL$
497$TAB$nop$NL$
498$TAB$nop$NL$
499$ 例外 No5
500$TAB$$ASM_COMMENT()$$FORMAT(" Exception 0x%x ", 5)$$NL$
501$TAB$ldsr r2, eiwr$NL$
502$TAB$movea $E_OS_PROTECTION_EXCEPTION$, r0, r2$NL$
503$TAB$jr _fe_exception_entry$NL$
504$TAB$nop$NL$
505$TAB$nop$NL$
506$ 例外 No6
507$TAB$$ASM_COMMENT()$$FORMAT(" Exception 0x%x ", 6)$$NL$
508$TAB$nop$NL$
509$TAB$nop$NL$
510$TAB$nop$NL$
511$TAB$nop$NL$
512$TAB$nop$NL$
513$TAB$nop$NL$
514$TAB$nop$NL$
515$TAB$nop$NL$
516$ 例外 No7
517$TAB$$ASM_COMMENT()$$FORMAT(" Exception 0x%x ", 7)$$NL$
518$TAB$ldsr r2, eiwr$NL$
519$TAB$movea $E_OS_PROTECTION_EXCEPTION$, r0, r2$NL$
520$TAB$jr _fe_exception_entry$NL$
521$TAB$nop$NL$
522$TAB$nop$NL$
523
524$
525$ ベクタテーブル(EIレベル マスカブル割込み用(8-255)
526$
527$NL$$FOREACH intno INTNO_VALID$
528$TAB$$ASM_COMMENT()$$FORMAT("0x%x",intno*16 + 0x80)$ $NL$
529 $isrid = INT.ISRID[intno]$
530 $IF LENGTH(isrid)$
531 $IF EQ(ISR.CATEGORY[isrid], "CATEGORY_2")$
532 $TAB$ldsr r2, eiwr$NL$
533 $TAB$movea $intno$, r0, r2$NL$
534 $TAB$jr _interrupt$NL$
535 $TAB$nop$NL$
536 $TAB$nop$NL$
537 $ELSE$
538 $TAB$jr _$ISR.INT_ENTRY[isrid]$$NL$
539 $TAB$nop$NL$
540 $TAB$nop$NL$
541 $TAB$nop$NL$
542 $TAB$nop$NL$
543 $TAB$nop$NL$
544 $TAB$nop$NL$
545 $END$
546 $ELSE$
547$ // 割込みハンドラの登録がない場合
548 $TAB$jr _default_int_handler$NL$
549 $TAB$nop$NL$
550 $TAB$nop$NL$
551 $TAB$nop$NL$
552 $TAB$nop$NL$
553 $TAB$nop$NL$
554 $TAB$nop$NL$
555 $END$
556$END$
557
558$END$
559
560$
561$ MPU使用枚数の定義出力
562$
563$FILE "target_Os_Cfg.h"$
564#ifndef TARGET_OS_CFG_H
565#define TARGET_OS_CFG_H
566
567#define TNUM_MPU_OSAP_DEFAULT ($TNUM_MPU_OSAP_DEFAULT$)$NL$
568#define TNUM_MPU_OSAP_ATTMEM ($TNUM_MPU_OSAP_ATTMEM$)$NL$
569#define TNUM_MPU_OSAP ($TNUM_MPU_OSAP_DEFAULT + TNUM_MPU_OSAP_ATTMEM$)$NL$
570#define TNUM_MPU_SHARED_DEFAULT ($TNUM_MPU_SHARED_DEFAULT$)$NL$
571#define TNUM_MPU_SHARED_ATTMEM ($TNUM_MPU_SHARED_ATTMEM$)$NL$
572#define TNUM_MPU_SHARED ($TNUM_MPU_SHARED_DEFAULT + TNUM_MPU_SHARED_ATTMEM$)$NL$
573
574#endif /* TARGET_OS_CFG_H */
575
576$
577$ MPU設定処理の生成
578$
579$IF __v850e3v5__$
580$FILE "Os_Cfg_asm.inc"$
581$ASM_MACRO("DISPATCHER_MPU_SETTING", "reg1, reg2, reg3, reg4, reg5, reg6")$$NL$
582$IF TNUM_MPU_OSAP > 0$
583$
584$ // ディスパッチャにおけるMPU設定処理の生成
585$
586 $cur_osap_mpu_id = 1$
587 $sysreg = 6*32 + 4$
588 $IF USE_MPU_SRPW_DATA$
589$ // å…
590±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライトデータ
591$ $TAB$*$NL$
592$ $TAB$* å…
593±æœ‰ãƒªãƒ¼ãƒ‰/専用ライト領域の専用領域$NL$
594$ $TAB$*$NL$
595 $TAB$ld.w OSAPINIB_start_srpw[reg1], reg2$NL$
596 $TAB$ld.w OSAPINIB_limit_srpw[reg1], reg3$NL$
597 $TAB$ldsr reg2, $sysreg % 32$, $sysreg / 32$$NL$
598 $sysreg = sysreg + 1$
599 $TAB$ldsr reg3, $sysreg % 32$, $sysreg / 32$$NL$
600 $sysreg = sysreg + 3$
601 $cur_osap_mpu_id = cur_osap_mpu_id + 1$
602 $END$
603 $IF USE_MPU_SRPW_SDATA$
604$ // å…
605±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライトショートデータ
606$ $TAB$;$NL$
607$ $TAB$; å…
608±æœ‰ãƒªãƒ¼ãƒ‰/専用ライト領域の専用領域(sdata)$NL$
609$ $TAB$;$NL$
610 $TAB$ld.w OSAPINIB_start_ssrpw[reg1], reg2$NL$
611 $TAB$ld.w OSAPINIB_limit_ssrpw[reg1], reg3$NL$
612 $TAB$ldsr reg2, $sysreg % 32$, $sysreg / 32$$NL$
613 $sysreg = sysreg + 1$
614 $TAB$ldsr reg3, $sysreg % 32$, $sysreg / 32$$NL$
615 $sysreg = sysreg + 3$
616 $cur_osap_mpu_id = cur_osap_mpu_id + 1$
617 $END$
618 $IF USE_MPU_PR_TEXT$
619$ // 専有リードROM
620$ $TAB$;$NL$
621$ $TAB$; 自保護ドメイン専用のrom領域$NL$
622$ $TAB$;$NL$
623 $TAB$ld.w OSAPINIB_start_text[reg1], reg2$NL$
624 $TAB$ld.w OSAPINIB_limit_text[reg1], reg3$NL$
625 $TAB$ldsr reg2, $sysreg % 32$, $sysreg / 32$$NL$
626 $sysreg = sysreg + 1$
627 $TAB$ldsr reg3, $sysreg % 32$, $sysreg / 32$$NL$
628 $sysreg = sysreg + 3$
629 $cur_osap_mpu_id = cur_osap_mpu_id + 1$
630 $END$
631 $IF USE_MPU_PR_SDATA$
632$ // 専有リードRAM
633$ $TAB$;$NL$
634$ $TAB$; 自保護ドメイン専用のrosdata領域$NL$
635$ $TAB$;$NL$
636 $TAB$ld.w OSAPINIB_start_rosdata[reg1], reg2$NL$
637 $TAB$ld.w OSAPINIB_limit_rosdata[reg1], reg3$NL$
638 $TAB$ldsr reg2, $sysreg % 32$, $sysreg / 32$$NL$
639 $sysreg = sysreg + 1$
640 $TAB$ldsr reg3, $sysreg % 32$, $sysreg / 32$$NL$
641 $sysreg = sysreg + 3$
642 $cur_osap_mpu_id = cur_osap_mpu_id + 1$
643 $END$
644 $IF USE_MPU_PRW_DATA$
645$ // 専有リードライトデータ
646$ $TAB$;$NL$
647$ $TAB$; 自保護ドメイン専用のRWX領域$NL$
648$ $TAB$;$NL$
649 $TAB$ld.w OSAPINIB_start_ram[reg1], reg2$NL$
650 $TAB$ld.w OSAPINIB_limit_ram[reg1], reg3$NL$
651 $TAB$ldsr reg2, $sysreg % 32$, $sysreg / 32$$NL$
652 $sysreg = sysreg + 1$
653 $TAB$ldsr reg3, $sysreg % 32$, $sysreg / 32$$NL$
654 $sysreg = sysreg + 3$
655 $cur_osap_mpu_id = cur_osap_mpu_id + 1$
656 $END$
657 $IF USE_MPU_PRW_SDATA$
658$ // å…
659±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライトショートデータ
660$ $TAB$;$NL$
661$ $TAB$; 自保護ドメイン専用のRWX領域(sdata)$NL$
662$ $TAB$;$NL$
663 $TAB$ld.w OSAPINIB_start_sram[reg1], reg2$NL$
664 $TAB$ld.w OSAPINIB_limit_sram[reg1], reg3$NL$
665 $TAB$ldsr reg2, $sysreg % 32$, $sysreg / 32$$NL$
666 $sysreg = sysreg + 1$
667 $TAB$ldsr reg3, $sysreg % 32$, $sysreg / 32$$NL$
668 $sysreg = sysreg + 3$
669 $cur_osap_mpu_id = cur_osap_mpu_id + 1$
670 $END$
671 $TAB$ld.w OSAPINIB_mprc[reg1], reg2$NL$
672 $TAB$ldsr reg2, 1, 5$NL$
673 $IF TNUM_MPU_OSAP_ATTMEM$
674 $TAB$mov r0, reg6$NL$
675 $TAB$ld.b OSAPINIB_tnum_mpu_area[reg1], reg5$NL$
676 $TAB$cmp reg5, reg6$NL$
677 $TAB$be exit_mpu_setting$NL$
678 $TAB$ld.w OSAPINIB_mpu_area_info[reg1], reg1$NL$
679 $FOREACH mpuid RANGE(cur_osap_mpu_id, TNUM_MPU_OSAP - 1)$
680$ $TAB$/*$NL$
681$ $TAB$* 自保護ドメイン専用のATT_MEM領域(sdata)$NL$
682$ $TAB$*/$NL$
683 $TAB$ld.w 0[reg1], reg2$NL$
684 $TAB$ld.w 4[reg1], reg3$NL$
685 $TAB$ld.w 8[reg1], reg4$NL$
686 $TAB$ldsr reg2, $sysreg % 32$, $sysreg / 32$$NL$
687 $sysreg = sysreg + 1$
688 $TAB$ldsr reg3, $sysreg % 32$, $sysreg / 32$$NL$
689 $sysreg = sysreg + 1$
690 $TAB$ldsr reg4, $sysreg % 32$, $sysreg / 32$$NL$
691 $sysreg = sysreg + 2$
692 $cur_osap_mpu_id = cur_osap_mpu_id + 1$
693 $TAB$addi 1, reg6, reg6$NL$
694 $TAB$cmp reg5, reg6$NL$
695 $TAB$be exit_mpu_setting$NL$
696 $TAB$addi 12, reg1, reg1$NL$
697 $END$
698 $TAB$ld.w 0[reg1], reg2$NL$
699 $TAB$ld.w 4[reg1], reg3$NL$
700 $TAB$ld.w 8[reg1], reg4$NL$
701 $TAB$ldsr reg2, $sysreg % 32$, $sysreg / 32$$NL$
702 $sysreg = sysreg + 1$
703 $TAB$ldsr reg3, $sysreg % 32$, $sysreg / 32$$NL$
704 $sysreg = sysreg + 1$
705 $TAB$ldsr reg4, $sysreg % 32$, $sysreg / 32$$NL$
706
707 $NL$
708 exit_mpu_setting:$NL$
709 $END$
710$ELSE$
711 $NL$
712$END$
713.endm$NL$
714
715$
716$ // カーネル初期化におけるMPU設定処理の生成
717$
718$FILE "Os_Lcfg.c"$
719$IF TNUM_MPU_SHARED > 0$
720extern uint8* shared_meminib_table[];$NL$
721$NL$
722$END$
723
724/*LOCAL_INLINE */void$NL$
725mpu_shared_area_initialize(void)$NL$
726{$NL$
727$IF TNUM_MPU_SHARED > 0$
728$
729$ // å…
730±æœ‰é ˜åŸŸã®MPU設定処理の生成
731$
732 $sysreg = 6*32 + (TNUM_MPU_REG - 1)*4$
733 $TAB$uint32 mpur;$NL$
734 $NL$
735 $FOREACH memid RANGE(0, TNUM_MPU_SHARED - 1)$
736 $TAB$/*$NL$
737 $TAB$ * MPU$TNUM_MPU_REG - 1 - memid$$NL$
738 $TAB$ */$NL$
739 $TAB$mpur = (uint32)shared_meminib_table[$memid*3$];$NL$
740 $TAB$LDSR_REG($sysreg % 32$, $sysreg / 32$, (uint32)mpur);$NL$
741 $TAB$mpur = (uint32)shared_meminib_table[$memid*3 + 1$];$NL$
742 $TAB$LDSR_REG($(sysreg + 1) % 32$, $(sysreg + 1) / 32$, (uint32)mpur);$NL$
743 $TAB$mpur = (uint32)shared_meminib_table[$memid*3 + 2$];$NL$
744 $TAB$LDSR_REG($(sysreg + 2) % 32$, $(sysreg + 2) / 32$, (uint32)mpur);$NL$
745 $sysreg = sysreg - 4$
746 $END$
747$END$
748$IF TNUM_MPU_OSAP > 0$
749$
750$ // 非信頼OSAP専有MPU領域のMPAT設定処理の生成
751$
752 $cur_osap_mpu_id = 1$
753 $sysreg = 6*32 + 4$
754 $IF USE_MPU_SRPW_DATA$
755$ // å…
756±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライトデータ
757 $TAB$/*$NL$
758 $TAB$ * å…
759±æœ‰ãƒªãƒ¼ãƒ‰/専用ライト領域の専用領域$NL$
760 $TAB$ * MPU$cur_osap_mpu_id$$NL$
761 $TAB$ */$NL$
762 $sysreg = sysreg + 2$
763 $TAB$LDSR_REG($sysreg % 32$, $sysreg / 32$, (uint32)(MPAT_E | MPAT_G | MPAT_UX | MPAT_UW | MPAT_UR))$NL$
764 $sysreg = sysreg + 2$
765 $cur_osap_mpu_id = cur_osap_mpu_id + 1$
766 $END$
767 $IF USE_MPU_SRPW_SDATA$
768$ // å…
769±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライトショートデータ
770 $TAB$/*$NL$
771 $TAB$ * å…
772±æœ‰ãƒªãƒ¼ãƒ‰/専用ライト領域の専用領域(sdata)$NL$
773 $TAB$ * MPU$cur_osap_mpu_id$$NL$
774 $TAB$ */$NL$
775 $sysreg = sysreg + 2$
776 $TAB$LDSR_REG($sysreg % 32$, $sysreg / 32$, (uint32)(MPAT_E | MPAT_G | MPAT_UX | MPAT_UW | MPAT_UR))$NL$
777 $sysreg = sysreg + 2$
778 $cur_osap_mpu_id = cur_osap_mpu_id + 1$
779 $END$
780 $IF USE_MPU_PR_TEXT$
781$ // 専有リードROM
782 $TAB$/*$NL$
783 $TAB$ * 自保護ドメイン専用のrom領域$NL$
784 $TAB$ * MPU$cur_osap_mpu_id$$NL$
785 $TAB$ */$NL$
786 $sysreg = sysreg + 2$
787 $TAB$LDSR_REG($sysreg % 32$, $sysreg / 32$, (uint32)(MPAT_E | MPAT_G | MPAT_UX | MPAT_UR))$NL$
788 $sysreg = sysreg + 2$
789 $cur_osap_mpu_id = cur_osap_mpu_id + 1$
790 $END$
791 $IF USE_MPU_PR_SDATA$
792$ // 専有リードRAM
793 $TAB$/*$NL$
794 $TAB$ * 自保護ドメイン専用のrosdata領域$NL$
795 $TAB$ * MPU$cur_osap_mpu_id$$NL$
796 $TAB$ */$NL$
797 $sysreg = sysreg + 2$
798 $TAB$LDSR_REG($sysreg % 32$, $sysreg / 32$, (uint32)(MPAT_E | MPAT_G | MPAT_UX | MPAT_UR))$NL$
799 $sysreg = sysreg + 2$
800 $cur_osap_mpu_id = cur_osap_mpu_id + 1$
801 $END$
802 $IF USE_MPU_PRW_DATA$
803$ // 専有リードライトデータ
804 $TAB$/*$NL$
805 $TAB$ * 自保護ドメイン専用のRWX領域$NL$
806 $TAB$ * MPU$cur_osap_mpu_id$$NL$
807 $TAB$ */$NL$
808 $sysreg = sysreg + 2$
809 $TAB$LDSR_REG($sysreg % 32$, $sysreg / 32$, (uint32)(MPAT_E | MPAT_G | MPAT_UX | MPAT_UW | MPAT_UR))$NL$
810 $sysreg = sysreg + 2$
811 $cur_osap_mpu_id = cur_osap_mpu_id + 1$
812 $END$
813 $IF USE_MPU_PRW_SDATA$
814$ // 専有リードライトショートデータ
815 $TAB$/*$NL$
816 $TAB$ * 自保護ドメイン専用のRWX領域(sdata)$NL$
817 $TAB$ * MPU$cur_osap_mpu_id$$NL$
818 $TAB$ */$NL$
819 $sysreg = sysreg + 2$
820 $TAB$LDSR_REG($sysreg % 32$, $sysreg / 32$, (uint32)(MPAT_E | MPAT_G | MPAT_UX | MPAT_UW | MPAT_UR))$NL$
821 $sysreg = sysreg + 2$
822 $cur_osap_mpu_id = cur_osap_mpu_id + 1$
823 $END$
824$END$
825}$NL$
826
827$END$
828
829$FILE "cfg2_out.tf"$
830
831$FOREACH osap OSAP.ID_LIST$
832 $IF LENGTH(ENUM_MPU_OSAP_ATTMEM[osap]) &&
833 (ENUM_MPU_OSAP_ATTMEM[osap] > 0)$
834 $$ENUM_MPU_OSAP_ATTMEM[$+osap$] = $ENUM_MPU_OSAP_ATTMEM[osap]$$$$NL$
835 $END$
836$END$
837
838$$TNUM_MPU_OSAP_DEFAULT = $TNUM_MPU_OSAP_DEFAULT$$$$NL$
839$$TNUM_MPU_OSAP = $TNUM_MPU_OSAP$$$$NL$
840$$TNUM_MPU_SHARED = $TNUM_MPU_SHARED$$$$NL$
841$$MPU_PAGE_MASK = $MPU_PAGE_MASK$$$$NL$
842$NL$
843
844$FILE "Os_Lcfg.c"$
845
Note: See TracBrowser for help on using the repository browser.