source: rubycfg_ssp/trunk/prc_kernel.trb@ 423

Last change on this file since 423 was 423, checked in by nmir-saito, 4 years ago

Make sure to generate interrupt handler correctly

  • Property svn:mime-type set to text/plain; charset=utf-8
File size: 6.1 KB
Line 
1# -*- coding: utf-8 -*-
2#
3# TOPPERS/SSP Kernel
4# Toyohashi Open Platform for Embedded Real-Time Systems/
5# Advanced Standard Profile Kernel
6#
7# Copyright (C) 2015 by FUJI SOFT INCORPORATED, JAPAN
8# Copyright (C) 2015,2016 by Embedded and Real-Time Systems Laboratory
9# Graduate School of Information Science, Nagoya Univ., JAPAN
10# Copyright (C) 2017 by Naoki Saito
11# Nagoya Municipal Industrial Research Institute, JAPAN
12#
13#
14# 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
15# ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
16# 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
17# (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
18# 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
19# スコード中に含まれていること.
20# (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
21# 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
22# 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
23# の無保証規定を掲載すること.
24# (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
25# 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
26# と.
27# (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
28# 作権表示,この利用条件および下記の無保証規定を掲載すること.
29# (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
30# 報告すること.
31# (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
32# 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
33# また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
34# 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
35# 免責すること.
36#
37# 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
38# よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
39# に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
40# アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
41# の責任を負わない.
42#
43# $Id: core_kernel.trb 662 2016-02-27 02:33:51Z ertl-hiro $
44#
45
46#
47# パス2の生成スクリプトのコア依存部(ARM用)
48#
49
50#
51# 有効な割込み番号,割込みハンドラ番号
52#
53$INTNO_VALID = Array(15..$TMAX_INTNO)
54$INHNO_VALID = $INTNO_VALID
55
56#
57# 有効なCPU例外ハンドラ番号
58#
59$EXCNO_VALID = [ 2, 3, 4, 5, 6, 11, 12, 14 ]
60
61#
62# ATT_ISRで使用できる割込み番号とそれに対応する割込みハンドラ番号
63#
64$INTNO_ATTISR_VALID = $INTNO_VALID
65$INHNO_ATTISR_VALID = $INHNO_VALID
66
67#
68# DEF_INT/DEF_EXCで使用できる割込みハンドラ番号/CPU例外ハンドラ番号
69#
70$INHNO_DEFINH_VALID = $INHNO_VALID
71$EXCNO_DEFEXC_VALID = $EXCNO_VALID
72
73#
74# チェック方法の指定
75#
76$CHECK_STKSZ_ALIGN = 8
77
78#
79# CFG_INTで使用できる割込み番号と割込み優先度
80#
81$INTNO_CFGINT_VALID = $INTNO_VALID
82$INTPRI_CFGINT_VALID = Array(-(1 << $TBITW_IPRI)..-1)
83
84#
85# 割込み属性中のターゲット依存に用いるビット
86#
87#$TARGET_INTATR =
88
89#
90# ターゲット非依存部のインクルード
91#
92IncludeTrb("kernel/kernel.trb")
93
94$kernelCfgC.comment_header("Target-dependent Definitions (ARM-M)")
95
96#
97# 割込みベクタテーブル
98#
99$kernelCfgC.comment_header("Interrupt Vector Table")
100
101$kernelCfgC.add("extern void kernel_svc_handler(void);")
102$kernelCfgC.add
103$kernelCfgC.add("__attribute__ ((section(\".vector\")))")
104$kernelCfgC.add("const FP _kernel_vector_table[] = {")
105$kernelCfgC.add("\t(FP)(TOPPERS_ISTKPT(TOPPERS_STK, TOPPERS_STKSZ)), // 0 The initial stack pointer")
106$kernelCfgC.add("\t(FP)_start, // 1 The reset handler")
107
108(2..14).each do |excno|
109 if excno == 11
110 $kernelCfgC.append("\t(FP)(kernel_svc_handler), // 11 SVCall handler")
111 else
112 $kernelCfgC.append("\t(FP)(_kernel_exc_entry),")
113 end
114 $kernelCfgC.add(" /* #{excno} */")
115end
116
117$INTNO_VALID.each do |inhno|
118 if ($cfgData[:DEF_INH].has_key?(inhno)) && ($cfgData[:CFG_INT][inhno][:intpri] < $TIPM_LOCK)
119 $kernelCfgC.append("\t(FP)(#{$cfgData[:DEF_INH][inhno][:inthdr]})")
120 else
121 $kernelCfgC.append("\t(FP)(_kernel_int_entry)")
122 end
123 $kernelCfgC.add(", /* #{inhno} */")
124end
125
126$kernelCfgC.add
127$kernelCfgC.add2("};")
128
129#
130# CPU例外/割込みハンドラテーブル
131#
132$kernelCfgC.comment_header("CPU Exception Handler Table")
133
134$kernelCfgC.add("const FP _kernel_exc_tbl[] = {")
135(0..14).each do |excno|
136 if $cfgData[:DEF_EXC].has_key?(excno)
137 $kernelCfgC.append("\t(FP)(#{$cfgData[:DEF_EXC][excno][:exchdr]})")
138 else
139 $kernelCfgC.append("\t(FP)(_kernel_default_exc_handler)")
140 end
141 $kernelCfgC.add(", /* #{excno} */")
142end
143
144$INTNO_VALID.each do |inhno|
145 if $cfgData[:DEF_INH].has_key?(inhno)
146 $kernelCfgC.append("\t(FP)(#{$cfgData[:DEF_INH][inhno][:inthdr]})")
147 else
148 $kernelCfgC.append("\t(FP)(_kernel_default_int_handler)")
149 end
150 $kernelCfgC.add(", /* #{inhno} */")
151end
152
153$kernelCfgC.add
154$kernelCfgC.add2("};")
155
156#
157# _kernel_bitpat_cfgintの生成
158#
159
160if ($TMAX_INTNO & 0x0f) == 0
161 bitpat_cfgint_num = ($TMAX_INTNO >> 4)
162else
163 bitpat_cfgint_num = ($TMAX_INTNO >> 4) + 1
164end
165
166$kernelCfgC.add("const uint32_t _kernel_bitpat_cfgint[#{bitpat_cfgint_num}] = {")
167
168(0..(bitpat_cfgint_num-1)).each do |num|
169 bitpat_cfgint = 0
170 ((num*32)..(num*32+31)).each do |inhno|
171 if $cfgData[:DEF_INH].has_key?(inhno)
172 bitpat_cfgint = bitpat_cfgint | (1 << (inhno & 0x01f))
173 end
174 end
175 $kernelCfgC.add("\tUINT32_C(0x#{sprintf("%08x", bitpat_cfgint)}),")
176end
177
178$kernelCfgC.add2("};")
179
Note: See TracBrowser for help on using the repository browser.