source: asp3_wo_tecs/trunk/arch/arm_m_gcc/common/core_kernel.trb@ 304

Last change on this file since 304 was 304, checked in by ertl-honda, 7 years ago

コンフィギュレータをruby版に変更

File size: 7.6 KB
Line 
1# ======================================================================
2#
3# TOPPERS/ASP Kernel
4# Toyohashi Open Platform for Embedded Real-Time Systems/
5# Advanced Standard Profile Kernel
6#
7# Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
8# Toyohashi Univ. of Technology, JAPAN
9# Copyright (C) 2005-2015 by Embedded and Real-Time Systems Laboratory
10# Graduate School of Information Science, Nagoya Univ., JAPAN
11#
12# 上記著作権者
13は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
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およびTOPPERSプロジェクトを
46# å…
47è²¬ã™ã‚‹ã“と.
48#
49# 本ソフトウェアは,無保証で提供されているものである.上記著作権者
50お
51# よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
52# に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
53# アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
54# の責任を負わない.
55#
56# @(#) $Id: core.tf 322 2015-04-30 13:23:48Z ertl-ishikawa $
57#
58# =====================================================================
59
60#
61# パス2のアーキテクチャ依存テンプレート(ARM-M用)
62#
63
64#
65# 有効な割込み番号,割込みハンドラ番号
66#
67$INTNO_VALID = Array(15..$TMAX_INTNO.val)
68$INHNO_VALID = $INTNO_VALID
69
70#
71# 有効なCPU例外番号
72# 7,8はエミュレートされた例外
73#
74$EXCNO_VALID = [ 2,3,4,5,6,7,8,11,12,14 ]
75
76#
77# CRE_ISRで使用できる割込み番号とそれに対応する割込みハンドラ番号
78#
79$INTNO_CREISR_VALID = $INTNO_VALID
80$INHNO_CREISR_VALID = $INHNO_VALID
81
82#
83# DEF_INT/DEF_EXCで使用できる割込みハンドラ番号/CPU例外ハンドラ番号
84#
85$INHNO_DEFINH_VALID = $INHNO_VALID
86$EXCNO_DEFEXC_VALID = $EXCNO_VALID
87
88#
89# CFG_INTで使用できる割込み番号と割込み優å…
90ˆåº¦
91# 最大優å…
92ˆåº¦ã¯BASEPRIレジスタでマスクできない優å…
93ˆåº¦ï¼ˆå†…
94部優å…
95ˆåº¦'0')
96# そのため,カーネル管理外の割込みでのみ指定可能.
97$INTNO_CFGINT_VALID = $INTNO_VALID
98$INTPRI_CFGINT_VALID = Array(-(1 << $TBITW_IPRI.val)..-2)
99
100#
101# kernel/kernel.tf のターゲット依存部
102#
103
104#
105# TSKINICTXBの初期化情
106報を生成
107#
108def GenerateTskinictxb(key, params)
109 return("{" \
110 "\t#{params[:tinib_stksz]}, " \
111 "\t((void *)((char *)(#{params[:tinib_stk]}) + " \
112 "(#{params[:tinib_stksz]}))), " \
113 "},")
114end
115
116#
117# 標準テンプレートファイルのインクルード
118#
119IncludeTrb("kernel/kernel.trb")
120
121$kernelCfgC.append(<<EOS)
122/*
123 * Target-dependent Definitions (ARM-M)
124 */
125
126/*
127 * ベクターテーブル
128 */
129__attribute__ ((section(".vector")))
130const FP _kernel_vector_table[] = {
131 (FP)(TOPPERS_ISTKPT(_kernel_istack, ROUND_STK_T(DEFAULT_ISTKSZ))), /* 0 The initial stack pointer */
132 (FP)start, /* 1 The reset handler */
133EOS
134Array(2..14).each { |excno|
135 if excno == 11
136 $kernelCfgC.add(" (FP)(_exit_and_dispatch), /* 11 SVCall handler */")
137 elsif excno == 14
138 $kernelCfgC.add(" (FP)(_dispatch), /* 14 PendSV handler */")
139 else
140 $kernelCfgC.add(" (FP)(_kernel_core_exc_entry), /* #{excno} */")
141 end
142}
143$INTNO_VALID.each { |inhno|
144 #if $cfgData[:DEF_INH][inhno]) && ((INH.INHATR[inhno] & TA_NONKERNEL) != 0)$
145 inh = $cfgData[:DEF_INH].select { |k,v|
146 (v[:inhno] == inhno) && (v[:inhatr] & $TA_NONKERNEL)
147 }
148 if !inh.empty?
149 inh.each_value { |v|
150 $kernelCfgC.add(" (FP)(#{v[:inthdr]}), /* #{inhno} */")
151 }
152 else
153 $kernelCfgC.add(" (FP)(_kernel_core_int_entry), /* #{inhno} */")
154 end
155}
156$kernelCfgC.add2("};")
157
158$kernelCfgC.add("const FP _kernel_exc_tbl[] = {")
159Array(0..14).each { |excno|
160 exc = $cfgData[:DEF_EXC].select { |k,v|
161 (v[:excno] == excno)
162 }
163 if !exc.empty?
164 exc.each_value { |v|
165 $kernelCfgC.add(" (FP)(#{v[:exchdr]}), /* #{excno} */")
166 }
167 else
168 $kernelCfgC.add(" (FP)(_kernel_default_exc_handler), /* #{excno} */")
169 end
170}
171$INTNO_VALID.each { |inhno|
172 inh = $cfgData[:DEF_INH].select { |k,v|
173 (v[:inhno] == inhno)
174 }
175 if !inh.empty?
176 inh.each_value { |v|
177 $kernelCfgC.add(" (FP)(#{v[:inthdr]}), /* #{inhno} */")
178 }
179 else
180 $kernelCfgC.add(" (FP)(_kernel_default_int_handler), /* #{inhno} */")
181 end
182}
183$kernelCfgC.add2("};")
184
185#
186# _kernel_bitpat_cfgintの生成
187#
188
189bitpat_cfgint_num = 0
190bitpat_cfgint = 0
191if ($TMAX_INTNO & 0x0f) == 0x00
192 bitpat_cfgint_num = ($TMAX_INTNO >> 4)
193else
194 bitpat_cfgint_num = ($TMAX_INTNO >> 4) + 1
195end
196
197$kernelCfgC.add
198$kernelCfgC.add("const uint32_t _kernel_bitpat_cfgint[#{bitpat_cfgint_num}] = {")
199Array(0..(bitpat_cfgint_num-1)).each { |num|
200 Array((num*32)..((num*32)+31)).each { |inhno|
201 inh = $cfgData[:DEF_INH].select { |k,v|
202 (v[:inhno] == inhno)
203 }
204 if !inh.empty?
205 bitpat_cfgint = bitpat_cfgint | (1 << (inhno & 0x01f))
206 end
207 }
208 $kernelCfgC.add(sprintf(" UINT32_C(0x%08x),", bitpat_cfgint))
209}
210$kernelCfgC.add2("};")
211
212#
213# 割込み優å…
214ˆåº¦ãƒ†ãƒ¼ãƒ–ル(内
215部表現)
216#
217$kernelCfgC.add("const uint32_t _kernel_int_iipm_tbl[] = {")
218Array(0..14).each { |excno|
219 $kernelCfgC.add(sprintf(" UINT32_C(0x%08x), /* 0x%03x */", 0, excno))
220}
221$INTNO_VALID.each { |intno|
222 int = $cfgData[:CFG_INT].select { |k,v|
223 (v[:intno] == intno)
224 }
225 intpri = 0
226 if !int.empty?
227 # LSBを1にしているのは,割込み属性が設定されていないことを判
228 # 別するためである.
229 int.each_value { |v|
230 intpri = (((1 << $TBITW_IPRI) + v[:intpri]) << (8 - $TBITW_IPRI))
231 }
232 end
233 $kernelCfgC.add(sprintf(" UINT32_C(0x%08x), /* 0x%03x */", intpri, intno))
234}
235$kernelCfgC.add2("};")
236
Note: See TracBrowser for help on using the repository browser.