source: ssp_armv6_m_gcc/trunk/armv6_m_gcc/prc_kernel.trb@ 421

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

Merge branch 'rubycfg' to trunk

  • Property svn:mime-type set to text/plain; charset=utf-8
File size: 6.0 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-2020 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の生成スクリプトのコア依存部(ARMv6-M用)
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, 11, 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 (ARMv6-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 $kernelCfgC.append("\t(FP)(_kernel_exc_entry),")
110 $kernelCfgC.add(" /* #{excno} */")
111end
112
113$INTNO_VALID.each do |inhno|
114 if ($cfgData[:DEF_INH].has_key?(inhno)) && ($cfgData[:CFG_INT][inhno][:intpri] < $TIPM_LOCK)
115 $kernelCfgC.append("\t(FP)(#{$cfgData[:DEF_INH][inhno][:inthdr]})")
116 else
117 $kernelCfgC.append("\t(FP)(_kernel_int_entry)")
118 end
119 $kernelCfgC.add(", /* #{inhno} */")
120end
121
122$kernelCfgC.add
123$kernelCfgC.add2("};")
124
125#
126# CPU例外ハンドラテーブル
127#
128$kernelCfgC.comment_header("CPU Exception Handler Table")
129
130$kernelCfgC.add("const FP _kernel_exc_tbl[] = {")
131(0..14).each do |excno|
132 if $cfgData[:DEF_EXC].has_key?(excno)
133 $kernelCfgC.append("\t(FP)(#{$cfgData[:DEF_EXC][excno][:exchdr]})")
134 else
135 $kernelCfgC.append("\t(FP)(_kernel_default_exc_handler)")
136 end
137 $kernelCfgC.add(", /* #{excno} */")
138end
139
140$INTNO_VALID.each do |inhno|
141 if $cfgData[:DEF_INH].has_key?(inhno)
142 $kernelCfgC.append("\t(FP)(#{$cfgData[:DEF_INH][inhno][:inthdr]})")
143 else
144 $kernelCfgC.append("\t(FP)(_kernel_default_int_handler)")
145 end
146 $kernelCfgC.add(", /* #{inhno} */")
147end
148
149$kernelCfgC.add
150$kernelCfgC.add2("};")
151
152#
153# _kernel_bitpat_cfgintの生成
154#
155
156if ($TMAX_INTNO & 0x0f) == 0
157 bitpat_cfgint_num = ($TMAX_INTNO >> 4)
158else
159 bitpat_cfgint_num = ($TMAX_INTNO >> 4) + 1
160end
161
162$kernelCfgC.add("const uint32_t _kernel_bitpat_cfgint[#{bitpat_cfgint_num}] = {")
163
164(0..(bitpat_cfgint_num-1)).each do |num|
165 bitpat_cfgint = 0
166 ((num*32)..(num*32+31)).each do |inhno|
167 if $cfgData[:DEF_INH].has_key?(inhno)
168 bitpat_cfgint = bitpat_cfgint | (1 << (inhno & 0x01f))
169 end
170 end
171 $kernelCfgC.add("\tUINT32_C(0x#{sprintf("%08x", bitpat_cfgint)}),")
172end
173
174$kernelCfgC.add2("};")
175
Note: See TracBrowser for help on using the repository browser.