source: ssp_armv6_m_gcc/tags/1.3.0/arch/armv6_m_gcc/prc_user.txt@ 86

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

add separate package of SSP kernel for ARMv6-M

File size: 6.5 KB
Line 
1=====================================================================
2 ARMV6-M プロセッサ依存部
3 Last Modified: '15/05/21
4=====================================================================
5
6
7(1) 対応しているターゲットシステムの種類・構成
8
9ARMV6-M依存部は,ARMV6-Mアーキテクチャをターゲットとしている.ARMV6-Mは,
10ARMとは異なり,ARM命令を実行できないため,ARM依存部と分けている.
11また,ARMV7-Mアーキテクチャに対してもレジスタ構成や利用可能な命令セットが異なるため,
12ARM-M依存部から分けて管理している.
13
14(注)
15ARMV6-M依存部は,TOPPERS/SSP に含まれるARM-M依存部を ARMV6-M アーキテクチャをもつ
16プロセッサ向けに対応させたものである.
17ARMV6-Mプロセッサには一部不要と思われる定義(例外番号など)も含まれるが,
18コンフィギュレーターで事前にチェック可能と思われる部分もあるためビルドや動作に支障が生じる
19部分を除き,現状オリジナルのままとしている.
20
21(2) 使用する開発環境と動作検証した条件(バージョン,オプション等)
22
23カーネルはGCCを用いてコンパイルする.動作確認したバージョンは各ターゲ
24ット依存部のドキュメントに記載する.
25
26
27(3) ターゲット定義事項の規定
28
29(3-1) データ型に関する規定
30
31データ型は arch/gcc/tool_stddef.h で定義されている内容で,float型と
32double型は,それぞれIEEE754準拠の単精度浮動小数点数と倍精度浮動小数点
33数である.
34
35(3-2) 割込み処理に関する規定
36
37○割込みハンドラ番号と割込み番号の割当て,両者の対応
38
39割込みハンドラ番号と割込み番号は,例外発生時にIPSRにセットされる例外番
40号を用いる.SYSTICKは15番で,外部割込みは16番からの番号が割り付けられ
41ている.
42
43○割込み優先度の段階数(TMIN_INTPRIの値),その設定方法
44
45割込み優先度の段階数は,SoC毎にハードウェア的にサポートする割込み優先
46度ビット幅が異なるので,ターゲット依存部毎に異なる.ターゲット依存部で
47は,割込み優先度のビット幅(TBITW_IPRI)とその割込み優先度中のサブ優先
48度のビット幅(TBITW_SUBPRI)を定義する.各ビット幅の値と設定可能な優先
49度の範囲は次の通りである.
50
51 -(2^(TBIW_IPRI)) + (2^TBITW_SUBIPRI)) 〜 -1
52
53例えば優先度のビット幅(TBITW_IPRI)が8bit,サブ優先度のビット幅
54(TBITW_SUBIPRI) が1bitの場合は,-254 〜 -1 の範囲である.
55
56この範囲で,カーネル管理内の割込みの最高優先度(TMIN_INTPRI)をターゲ
57ット依存部で設定する.
58
59各割込みの割込み優先度は,CFG_INTでTMIN_INTPRI以上の値を指定する.
60
61○dis_intとena_intのサポートの有無,その制限事項
62
63dis_intとena_intをサポートする.制限事項は特にない.
64
65○CFG_INTの制限事項と拡張(ターゲット定義で使用できる割込み属性)
66
67CFG_INTの制限事項はなく,ターゲット定義で使用可能な割込み属性は特にな
68い.
69
70○カーネル管理外の割込み
71
72ARMv6では割込みマスクレベルをソフトウェアで制御できないため,
73カーネル管理外の割込みはサポートしない.
74
75
76(3-3) CPU例外処理に関する規定
77
78○CPU例外ハンドラ番号
79
80CPU例外ハンドラ番号としては,例外発生時にIPSRにセットされる例外番号
81を用いる.各例外の例外番号は以下の通りである.
82
83 例外 例外番号
84 Reset 1
85 Non-makable Interrupt 2
86 Hard Fault 3
87 SVCall 11
88 PendSV 14
89 SysTick(オプション) 15
90 外部割込み0(IRQ0) 16
91 外部割込み1(IRQ1) 17
92 ..
93
94なお,Resetと,SVCallについては,カーネルが使用するため,ユーザーは使
95用することができない.
96
97
98(3-4) CPUロック・割込みロック
99
100CPUロックおよび割込みロックは,PRIMASKを'1'に設定することで実現している.
101(注) ARMv6-MではBASEPRIおよびFAULTMASKを利用することができない.
102
103(3-5) 性能評価用システム時刻の参照に関する規定
104
105ARMv6-M版ではget_utmをサポートしない.
106
107(3-6) スタートアップルーチンでの初期化内容
108
109スタートアップルーチンは,Threadモードで呼び出されることを前提としてい
110る.実行後,割込みロック状態(PRIMASKをセット)とする.割込みロック
111状態は,カーネルの初期化終了時に許可する.スタートアップルーチンで,
112MSPをアクティブなスタックとし,MSPの内容を初期化するためには,INIT_MSP
113をターゲット依存部で定義する.
114
115(3-7) ベクタテーブルオフセットの初期化
116
117プロセッサ依存の初期化処理で,Vector Table Offset Register をターゲッ
118ト依存部の初期化ルーチンで設定する.なお,ベクターテーブルは,.vector
119のセクション属性が付加されているため,リンカスクリプトでこのセクション
120を指定して配置する.
121
122
123(4) タイマドライバ関連の情報
124
125カーネルのタイムティックとして,SYSTICを使用する場合は,prc_config.c
126をコンパイル対象とし,コンフィギュレーションファイルに prc_config.cfg
127を指定すること.
128
129周期の基本は1msecとする.周期をCALIBRATIONレジスタの設定内容を元に計算
130する場合は,SYSTIC_USE_CALIBRATION を定義する.CALIBRATIONレジスタを用
131いない場合は,1msec周期分のカウント値を TIMER_CLOCK に設定する.クロッ
132クソースとして,外部クロックを用いる場合は,SYSTIC_USE_STCLK を用いる.
133
134
135(5) ターゲット依存部での設定項目
136
137ターゲット依存部では以下のマクロを定義する必要がある.
138
139 ・TMAX_INTNO : 割込み番号の最大値(通常の割込み番号 + 15)
140 ・TBITW_IPRI : 割込み優先度のビット幅
141 ・TBITW_SUBIPRI : 割込み優先度のビット幅中のサブ優先度のビット幅
142 ・TMIN_INTPRI : 割込み優先度の最小値(最高値)
143 ・TIC_NUME : タイムティックの周期の分子
144 ・TIC_DENO : タイムティックの周期の分母
145 ・TIMER_CLOCK : タイマ値の内部表現とミリ秒単位との変換
146 ・INTPRI_TIMER : タイマ割込み割込み優先度
147 ・INTATR_TIMER : タイマ割込みの割込み属性
148 ・INIT_MSP : スタートアップルーチンでMSPを初期化する場合は定義
149 ・DEFAULT_ISTKSZ : スタックサイズ(8byte単位で指定)
150 ・SIL_DLY_TIM1 : 微少時間待ちのための定義
151 ・SIL_DLY_TIM2 : 微少時間待ちのための定義
152
153
154(6) ディレクトリ構成・ファイル構成
155 ./arch/armv6_m_gcc/
156 ./Makefile.prc
157 ./arm_m.h
158 ./prc.tf
159 ./prc_cfg1_out.h
160 ./prc_check.tf
161 ./prc_config.c
162 ./prc_config.h
163 ./prc_def.csv
164 ./prc_insn.h
165 ./prc_kernel.h
166 ./prc_rename.def
167 ./prc_rename.h
168 ./prc_sil.h
169 ./prc_stddef.h
170 ./prc_support.S
171 ./prc_test.h
172 ./prc_timer.c
173 ./prc_timer.cfg
174 ./prc_timer.h
175 ./prc_unrename.h
176 ./prc_user.txt
177 ./start.S
178
179(12) バージョン履歴
180
1812015/05/21
182・SSP-1.3.0 に対応
183
1842014/03/10
185 ・オリジナルのARM-M依存部と分けて併存できるようにするため,
186 アーキテクチャ名を ARM-M から ARMV6-M とした
187
1882013/06/20
189 ・ARMv6アーキテクチャ向けに変更
190・コンテキスト判別をネストカウンタを用いる方法に変更
191
1922008/08/22
193 ・prc_user.txt/prc_design.txt
194 ・2008/8/21の技術検討会での議論結果を反映.
195 ・prc_support.S/prc_config.c/prc_config.h/arm_m.h
196 ・コンテキスト判定をexc_ncntからアクティブなスタックに変更
197 ・prc_config.c
198 ・set_exc_int_priority() でサポート可能なIRQの上限を239に拡張.
199 ・start.S
200 ・起動時はThreadモードを前提としていることを明記.
201 ・ブートローダー等から起動される場合を想定し,MSPを有効にするように
202 変更.
203 ・prc_timer.c
204 ・コメントを修正
205 ・デバッグ用コードを削除
206
2072008/07/11
208 ・最初のリリース
209
2102013/04/07
211 ・例外処理発生時に割込み/CPU例外発生回数のインクリメントが行われていなかった
212 問題の修正
Note: See TracBrowser for help on using the repository browser.