source: anotherchoice/tags/jsp-1.4.4-full-UTF8/doc/h8.txt@ 26

Last change on this file since 26 was 26, checked in by ykominami, 12 years ago

initial

File size: 79.2 KB
Line 
1 = TOPPERS/JSPカーネル ユーザズマニュアル =
2 (H8 ターゲット依存部)
3
4 (Release 1.4.3対応,最終更新: 15-Dec-2010)
5
6 -------------------------------------------------------------------
7 TOPPERS/JSP Kernel
8
9 Toyohashi Open Platform for Embedded Real-Time Systems/
10 Just Standard Profile Kernel
11
12 Copyright (C) 2000-2004 by Embedded and Real-Time Systems Laboratory
13 Toyohashi Univ. of Technology, JAPAN
14 Copyright (C) 2001-2010 by Industrial Technology Institute,
15 Miyagi Prefectural Government, JAPAN
16 Copyright (C) 2001-2004 by Dep. of Computer Science and Engineering
17 Tomakomai National College of Technology, JAPAN
18 Copyright (C) 2001-2004 by Kunihiko Ohnaka
19 Copyright (C) 2004 by Katsuhiro Amano
20
21 上記著作権者
22は,以下の (1)〜(4) の条件か,Free Software Foundation
23
24 によってå…
25¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
26 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
27 を改変したものを含む.以下同じ)を使用・複製・改変・再é…
28å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
29 利用と呼ぶ)することを無償で許諾する.
30 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
31 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
32 スコード中に含まれていること.
33 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
34 用できる形で再é…
35å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
36å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
37 者
38マニュアルなど)に,上記の著作権表示,この利用条件および下記
39 の無保証規定を掲載すること.
40 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
41 用できない形で再é…
42å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
43 と.
44 (a) 再é…
45å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
46マニュアルなど)に,上記の著
47 作権表示,この利用条件および下記の無保証規定を掲載すること.
48 (b) 再é…
49å¸ƒã®å½¢æ…
50‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
51 報告すること.
52 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
53 害からも,上記著作権者
54およびTOPPERSプロジェクトをå…
55è²¬ã™ã‚‹ã“と.
56
57 本ソフトウェアは,無保証で提供されているものである.上記著作権者
58お
59 よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
60 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
61 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
62
63 @(#) $Id: h8.txt,v 1.21 2007/03/23 07:19:27 honda Exp $
64
65 ---------------------------------------------------------------------
66
671. H8 ターゲット依存部の概要
68
69注意点:Release1.4.1までのバージョンをお使いの方へ
70 ・処理系について
71   秋月電子通商製ボード付属のGNU開発環境はバージョンが古いため、
72   サポートしていない。(「4. 1 開発環境の構築」を参ç…
73§ï¼‰
74 ・割込みの扱いについて
75   Release1.4.2から割込みの扱いが大幅
76に変更されているため、旧バー
77   ジョンをご使用の方は「2. 2. 2 割込みハンドラの登録」を参ç…
78§ã•ã‚Œ
79   たい。
80
811. 1 ターゲットシステムと開発環境
82
83 H8 プロセッサのターゲットシステムは、H8/3052F、 H8/3069Fを搭載した
84以下のボードである。
85
86 ・(株) 秋月電子通商製の AKI-H8/3052F (AKI-H8-USB ボートに装
87着)
88 ・(株) 秋月電子通商製の AKI-H8/3069F
89
90以下のボードは参考実装
91であり、動作確認は行っていない。
92 ・(株) 秋月電子通商製の AKI-H8/3048F
93 ・(有) 品川通信計装
94サービス製の NKEV-010H8(H8/3069F使用)
95
96なお、何もしないタスク 1 個の最小構成でも、H8/3069F以外では必
97要なRAM容
98量がプロセッサの内
99蔵RAM 容量のを超
100える。このため外部 RAM の増設が必
101要
102で、外部アドレス空間を有効にする必
103要がある。現在の構成では、H8/3048F
104がモード 5 の内
105蔵 ROM有効拡張 1M バイトモード、 H8/3052F がモード 6 の
106内
107蔵 ROM 有効拡張 16Mバイトモード、 H8/3069F がモード 5 の内
108蔵ROM有効
109拡張 16M バイトモードを想定している。
110 開発環境は、 Windows XP上の cygwin の開発環境を用いた。また、デ
111バッグモードとリリースモードでモジュールの実行方法が異なっている。デ
112バッグモードでは (株)秋月電気通商製モニタデバッカ (以下、秋月モニタ)、
113または苫小牧高専情
114報学科製簡易モニタ (以下、 簡易モニタ)、を H8 の内
115蔵
116フラッシュ ROM に書き込み、デバッグするモジュールを外部 RAM にロードし
117てデバッグを行う。リリースモードでは、デバッグの終了したモジュールを内
118
119蔵フラッシュ ROM に書き込むことを想定している。 デバッグモードとリリー
120スモードの切り替えは、 ディレクトリ jsp/config/h8/$(SYS) にある
121Makefile.config のDBGENV の定義による。
122($(SYS)にはボード名を示す。)
123 また、参考実装
124としてeCos/RedBoot プロジェクト製デバッカ(以下、RedBoot)
125に対応しているが、実機テストは行っていない。詳しくは末尾の付録を参ç…
126§ã€‚
127
128 NKEV-010H8はGDB STUBによるリモートデバッグも想定してある。注意事項
129等
130詳しくは末尾の付録を参ç…
131§ã€‚
132
133備考
134 AKI-H8/3052Fは、AKI-H8-USBボートのUSBコネクタから電源を供給すること
135ができる。通常のDC電源コネクタから電源を供給する場合は、電源コネクタの
136周囲に抵抗を追加する必
137要がある。
138 AKI-H8/3069Fは、初期ロットとそれ以降では外部RAMの型番が異なっている。
139また、初期ロットでは外部RAMを自分で半田付けするようになっているので、
140どちらに該当するのかはボードの付属マニュアルを参ç…
141§ã®ã“と。
142
143  参考情
144å ±
145    「(toppers-users 1375) akih8_3069f 依存部の修正について」
146    
1471. 2 サポートする機能の概要
148
149 性能評価用システム時刻参ç…
150§æ©Ÿèƒ½ (vxget_tim) と割込みマスクの変更・参
151ç…
152§ (chg_ixx、 get_ixx)はサポートしているが、割り込みの禁止と許可
153(dis_int、ena_int) はサポートしていない。
154
1551. 3 他のターゲットへのポーティング
156
157 H8/300H シリーズであれば、ポーティングは容易に出来ると思われる。
158
1591. 4 シリアルポート (SCI)
160
161 H8/3048F と H8/3052F には SCI0 と SCI1 の 2 本、H8/3069F には SCI0
162から SCI2 の 3 本のシリアルポートがあり、sys_config.h に定義している
163TNUM_PORT により何本使用するか指定できる。
164現在の実装
165では 3本まで使用できる。 JSP カーネルのログ出力用には SCI1
166を使用している。 シリアルポートの設定を以下に示す。
167
168 ・ボーレイト:38400[bps]
169 ・データ長:8 ビット
170 ・ストップビット:1 ビット
171 ・パリティなし
172 ・フロー制御:Xon/Xoff
173
1741. 4. 1 ポート番号の割り当てについて
175
176ポートID番号(マクロ名)  デバイス番号    用途
177 1(SYSTEM_PORTID)      SCI1    システムログ出力用
178 2(USER_PORTID)       SCI0    ユーザーアプリケーション
179 3(USER2_PORTID)       SCI2    ユーザーアプリケーション
180
181 ポートIDのカスタマイズについては、「カスタマイズ方法」の節を参ç…
182§
183
1842. H8 プロセッサ依存部の機能
185
186 カーネルとシステムサービス機能の中で、 H8 依存の部分について解説する。
187
1882. 1 データ型
189
190 int 型と unsigned int 型のサイズは 32 ビットである。また、64ビット整
191数であるD型とUD型が使用できるか否かは処理系で定義しているマクロ
192__LONG_LONG_MAX__の値で判別している。
193gcc-2.95.3ではコンパイラの制約で、64ビット整数は扱えない。
194
1952. 2 割込み管理機能と割込みハンドラ
196
197カーネル管理外の割込みはNMIのみである.よって,CPUロック状æ…
198‹ã‚„初期化
199ルーチン内
200では,NMI以外の割込みはすべて禁止されている.å…
201·ä½“的には、CPU
202ロック状æ…
203‹ã§ã¯CCRレジスタのIビットとUIビットをセットし、さらにカーネル
204内
205のフラグ変数をセットしている。
206
207  CPUロック状æ…
208‹ã‚’表すフラグ変数:BOOL iscpulocked
209    TRUE :CPUロック状æ…
210‹
211    FALSE:CPUロック解除状æ…
212‹
213
214 本実装
215ではSYSCRレジスタのUEビットをクリアし、CCRレジスタのIビットと
216UIビットを割込みマスク(IPM:Interrupt Priority Mask)として使用してい
217る。(レベル0とレベル1の割込みが使用できる。)
218
219DEF_INHで指定する割込みハンドラ番号(inhno)は,H8での例外ベクタ番号を
220表し,そのデータ型(INHNO)はunsigned int型に定義されている.
221DEF_INHで,例外ベクタ番号として有効でない値や,外部割込みに対応しない
222番号を指定した場合の動作は保証されない.
223H8 の割込みベクタは ROM 領域にあり、 動的に内
224容を変更するためには特別
225の方法が必
226要であるため、動的なハンドラの登録機能はない。
227従って、 割込みハンドラの設定関数 define_inh( )は何もしない関数である。
228
2292. 2. 1 割込み発生時のスタック使用量について
230
231 割込みネストレベルが0(つまり、タスクコンテキスト実行中)で割込みが
232発生すると、 タスクコンテキスト用スタックにレジスタを一部保存した後、
233割込み用スタックに切り替えるため、各スタックの使用量は
234 ・タスクコンテキスト用スタック: PC+CCR、ER0〜4  計24バイト
235 ・非タスクコンテキスト用スタック:ER5〜6、SP    計12バイト
236となる。
237多重割込みが発生した場合はすべて非タスクコンテキスト用スタックに退避す
238るため、スタック使用量は
239 ・非タスクコンテキスト用スタック:PC+CCR、ER0〜6  計32バイト
240である。
241割込みネスト数は最大2であるので、å…
242¨ä½“のスタック使用量は以下のようにな
243る。(割込みハンドラ自身によるスタック消費分を除く。)
244
245 タスクコンテスト用スタック: 24バイト
246 非タスクコンテスト用スタック:
247  12バイト(初段)+32バイト(2段目)=44バイト
248
249また、割込みの出口処理でタスクスイッチする場合は、残りのレジスタER5〜6
250もタスクコンテスト用スタックに退避するため、å…
251¥å£å‡¦ç†ã¨åˆã‚ã›ã¦ã‚¿ã‚¹ã‚¯
252コンテスト用スタックは32バイト使用される。
253
254
2552. 2. 2 割込みハンドラの登録
256
257 gcc用H8依存部では、割込みハンドラを登録する際、コンフィギュレーショ
258ン・ファイルに静的API DEF_INH( )を記述しただけでは不十分である。登録の
259手順を以下に述べる。文中の****は登録する割込みハンドラのC言語ルーチン
260名を示す。
261
262割込みハンドラの登録方法が変更されている。
263旧版(Release1.4.1)からの変更点は以下の通り。
264 1.割込みベクタテーブルの自動生成
265   ・DEF_INH()の引数から割込みベクタテーブルを自動生成するように
266    した。これにより、ユーザーが手作業で編集する必
267要がなくなった。
268
269 2.割込み優å…
270ˆåº¦åˆ¶å¾¡ã‚’サポート
271   ・割込みプライオリティ・レベル0
272   ・割込みプライオリティ・レベル1
273 
274 3.割込みプライオリティレベルの設定は2ヶ所で行う。
275   (1) 割込み要求時用プライオリティ・レベル
276      デバイスが割込みコントローラに要求する割込みレベル
277      IPRA、IPRBレジスタの設定処理をsys_support.Sから各デバイス
278      ドライバの初期化処理に移動
279   (2) 割込み許可時用プライオリティ・レベル
280      割込みハンドラ呼び出し時に割込みマスクに設定する値
281 
282 4.sys_support.Sで行っていた以下の記述は不要になった。
283  (割込みレベル制御を行ったため)
284   ・ハードウェア割込み許可 _****_enable_int
285   ・ハードウェア割込み禁止 _****_disable_int
286
287     旧版では、割込み要求をクリアする処理が必
288要な場合は、その処理
289     を_****_disable_intに記述していたが、新版では割込みハンドラ
290     のC言語ルーチンまたはそこから呼ばれる関数内
291に記述する方法を
292     標準とする。
293
294
295割込みハンドラを登録する作業手順
296 タイマ割込みを例に説明する。
297 (ボード依存部のパス名は適宜読み替えること)
298
299 (1) 割込みハンドラの記述
300
301   旧版では、割込み要求をクリアする処理が必
302要な場合は
303   _xxxxx_disable_intに記述していたが、新版では割込みハンドラのC言
304   語ルーチン、またはそこから呼ばれる関数内
305に記述する方法を標準と
306   する。
307
308   タイマ割込みでの記述例:
309    jsp/systask/timer.c
310      timer_handler( )から呼び出されるhw_timer_int_clear( )
311      (jsp/config/h8/hw_timer.h)
312
313
314 (2) コンフィギュレーション・ファイルの記述
315
316   コンフィギュレーション・ファイルの記述方法は他のプロセッサと同様
317   である。
318   ベクタ番号はjsp/config/h8/h8_3069f.h等でマクロ定義している。
319   DEF_INH( )の第1引数の割込みハンドラ番号はプリプロセス後に整数定数
320   になっていなければならない。(自動割り付け非対応整数値パラメータ)
321   ベクタテーブル自動生成時もそれを仮定している。
322
323   タイマ割込みでの記述例:
324    jsp/systask/timer.cfg
325     DEF_INH(INHNO_TIMER, { TA_HLNG, timer_handler });
326
327
328 (3) 割込みプライオリティレベルの設定
329
330   IPRA,IPRBに設定する割込み要求時のプライオリティレベルと、割込み
331   ハンドラ呼び出し時に割込みマスクに設定するプライオリティレベル
332   の2つを割込み要因毎に設定する。
333
334 (3)-1 割込み要求時用プライオリティレベルの設定
335
336   初期化処理のcpu_initialize( )ですべての割込みをレベル0に初期化し
337   ている。
338   デバイスドライバの初期化処理で割込み要因毎のプライオリティ・レベ
339   ルを設定するための関数が用意されている。
340    
341   【C言語API】
342     void define_int_plevel(const IRC *irc);
343
344      IRC:Interrupt Request Controller
345         割込みコントローラ
346
347   【パラメータ】
348     const IRC *irc 設定データを格納した領域のå…
349ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹
350      UB *ipr:設定するIPRレジスタの番地
351           IPRAまたはIPRBレジスタ
352      UB bit :IPRレジスタの該当するビット番号
353      IPM ipm:設定する割込みレベル
354           IPM_LEVEL0,IPM_LEVEL1のいずれか
355
356   【リターンパラメータ】
357     なし
358
359   【機能】
360     ircが指し示す領域のデータを用いて、デバイスからの割込みの
361     プライオリティ・レベルを設定する。
362     この関数を呼び出す前にh8_sil.hをインクルードする必
363要がある。
364
365   【タイマ割込みでの記述例】
366
367     jsp/config/h8/cpu_config.c
368      const IRC TIMER_IRC = {(UB*)SYSTEM_TIMER_IPR,
369       SYSTEM_TIMER_IP_BIT,
370       SYSTEM_TIMER_IPM
371       };
372
373     jsp/config/h8/hw_timer.h
374      hw_timer_initialize( )
375      define_int_plevel(&TIMER_IRC);
376
377   設定に用いる値はマクロ定義されている。
378   
379   ・IPRA、IPRBレジスタのアドレス
380   jsp/config/h8/h8_3069f.h
381   #define H8IPRA 0xfee018
382   #define H8IPRB 0xfee019
383
384
385   ・IPRA、IPRBレジスタのビット番号
386   jsp/config/h8/h8_3069f.h
387   ・IPRA
388   #define H8IPR_IRQ0_BIT 7 /* IRQ0 */
389   #define H8IPR_IRQ1_BIT 6 /* IRQ1 */
390   #define H8IPR_IRQ2_BIT 5 /* IRQ2 */
391   #define H8IPR_IRQ3_BIT 5 /* IRQ3 */
392   #define H8IPR_IRQ4_BIT 4 /* IRQ4 */
393   #define H8IPR_IRQ5_BIT 4 /* IRQ5 */
394   #define H8IPR_WDT_BIT 3 /* WDT */
395   #define H8IPR_AD_BIT 3 /* A/D */
396   #define H8IPR_CMI_BIT 3 /* CMI */
397   #define H8IPR_ITU0_BIT 2 /* 16 bit timer 0 */
398   #define H8IPR_ITU1_BIT 1 /* 16 bit timer 1 */
399   #define H8IPR_ITU2_BIT 0 /* 16 bit timer 2 */
400
401   ・IPRB
402   #define H8IPR_TU80_BIT 7 /* 8 bit timer 0 */
403   #define H8IPR_TU81_BIT 6 /* 8 bit timer 1 */
404   #define H8IPR_DMAC_BIT 5 /* DMAC (CH0,1) */
405   #define H8IPR_SCI0_BIT 3 /* SCI0 */
406   #define H8IPR_SCI1_BIT 2 /* SCI1 */
407   #define H8IPR_SCI2_BIT 1 /* SCI2 */
408
409
410(3)-2 割込み許可時用プライオリティレベルの設定
411
412  ・****_intmaskマクロの定義
413   H8依存部では、静的API DEF_INH( )で割込みハンドラを定義すると、
414   カーネルコンフィギュレーションにより、割込みのå…
415¥å£å‡¦ç†ãŒè‡ªå‹•ç”Ÿ
416   成される。
417   このå…
418¥å£å‡¦ç†ã§ã¯ã€C言語ルーチン****を呼び出す直前の割込み許可時
419   に割込みマスクに設定する値として、マクロ****_intmaskが定義されて
420   いると仮定しているので、割込み要因毎にIPM_LEVEL1、IPM_LEVEL2のい
421   ずれかに定義すること。
422   自分と同じレベルの割込みをマスクするため、IPMには1つ上のレベル
423   を設定する必
424要があるので、注意すること。
425   cpu_config.h、sys_config.hまたはこれらからインクルードされるファ
426   イルで定義するのを標準とする。
427
428   【タイマ割込みでの記述例】
429    jsp/config/h8/akih8_3069f/sys_config.h
430   
431    #if SYSTEM_TIMER_IPM == IPM_LEVEL0
432    #define timer_handler_intmask IPM_LEVEL1
433    #elif SYSTEM_TIMER_IPM == IPM_LEVEL1
434    #define timer_handler_intmask IPM_LEVEL2
435    #endif /* SYSTEM_TIMER_IPM == IPM_LEVEL0 */
436
437
4382. 2. 3 割込みマスクの変更・参ç…
439§
440
441H8依存の機能として,CCRレジスタ中のIPMの値を変更するためのサービスコー
442ルchg_ipmと,参ç…
443§ã™ã‚‹ãŸã‚ã®ã‚µãƒ¼ãƒ“スコールget_ipmをサポートしている.
444なお,IPMの値を表すデータ型IPMは,unsigned char型に定義されている.
445
446これらのサービスコールは,タスクコンテキストでCPUロック解除状æ…
447‹ã®å ´åˆ
448にのみ呼び出すことができる.chg_ipmによりIPMをレベル0以外(すなわち,
449何らかの割込みが禁止されている状æ…
450‹ï¼‰ã«ã—た場合でも,ディスパッチは禁止
451されず,chg_ipmにより変更したIPMの値は,ディスパッチ後のタスクに引き継
452がれる.
453例えば,あるタスクでIPMをレベル1に変更した後,何らかの割込みにより別の
454タスクに切り替わると,切り替わった後のタスクでもIPMはレベル1になる.
455
456chg_ipmをサポートするために,割込みハンドラの出å…
457¥å£å‡¦ç†ãªã©ã«ã‚ªãƒ¼ãƒ
458ヘッドを生じている.そこで,SUPPORT_CHG_IPMというマクロにより,これら
459のサービスコールをサポートするかどうかを切り替えられるようにしている.
460SUPPORT_CHG_IPMは,sys_config.hでマクロ定義されている.
461
462H8依存の割込みマスクの変更・参ç…
463§ã®ãŸã‚ã®ã‚µãƒ¼ãƒ“スコールの仕様は次の通り.
464
465(1) chg_ipm 割込みマスクの変更
466
467【C言語API】
468 ER ercd = chg_ipm(IPM ipm);
469
470【パラメータ】
471 IPM ipm 設定すべき IPM の値
472
473【リターンパラメータ】
474 ER ercd エラーコード
475
476【エラーコード】
477 E_CTX コンテキストエラー
478 E_PAR パラメータエラー(ipm が不正)
479
480【機能】
481
482IPM(Interrupt Priority Mask)を ipm で指定された値に設定する.
483IPMで用いる値として、以下のマクロが用意されている。
484 IPM_LEVEL0:レベル0 すべての割込みを受け付ける
485 IPM_LEVEL1:レベル1 NMIおよびプライオリティレベル1の割込みのみを
486            受け付ける
487 IPM_LEVEL2:レベル2 NMI以外の割込みを受け付けない
488
489
490IPMに指定した値が上記のマクロ以外の場合,E_PARエラーとなる.IPM を
491IPM_LEVEL0以外に設定した場合でも,ディスパッチは禁止されない.また,設
492定したIPMの値は,ディスパッチ後も引き継がれる.ディスパッチを禁止し
493たい場合には,dis_dspと併用すればよい.
494
495このサービスコールは,タスクコンテキストで CPUロック解除状æ…
496‹ã®æ™‚のみ呼
497び出すことができる.非タスクコンテキストや CPUロック状æ…
498‹ã§å‘¼ã³å‡ºã—た場
499合には,E_CTXエラーとなる.
500
501(2) get_ipm 割込みマスクの参ç…
502§
503
504【C言語API】
505 ER ercd = get_ipm(IPM *p_ipm);
506
507【パラメータ】
508 なし
509
510【リターンパラメータ】
511 ER ercd エラーコード
512 IPM ipm 現在の IPM の値
513
514【エラーコード】
515 E_CTX コンテキストエラー
516
517【機能】
518
519現在の IPM(Interrupt Priority Mask)の値を読み出し,ipm に返す.
520
521このサービスコールは,タスクコンテキストで CPUロック解除状æ…
522‹ã®æ™‚のみ呼
523び出すことができる.非タスクコンテキストや CPUロック状æ…
524‹ã§å‘¼ã³å‡ºã—た場
525合には,E_CTXエラーとなる.
526
5272. 4 CPU例外管理機能とCPU例外ハンドラ
528
529 H8では(プロセッサ自体が)CPU例外を扱っていないが、他機種との互換性
530のため、CPU例外ハンドラ番号のデータ型(EXCNO)とCPU例外ハンドラの設定関
531数define_exc( )を定義している。
532
533
5342. 5 スタートアップモジュール
535
536 H8 依存のスタートアップモジュール (start.S) は次に示す初期化を実行し
537た後、カーネル (kernel_start) を起動する。ただし、 kernel_start から戻っ
538てくることは想定していない。
539
540 (1) スタックポインタの設定
541
542 (2) hardware_init_hook の呼出し
543 hardware_init_hook が 0 でなければ、hardware_init_hook を呼
544 出す。hardware_init_hook はカーネルを起動する前に、ターゲット
545 依存のハードウェア的な初期化を行うために用意されている。 本実
546 装
547では、SYSCR レジスタの UE ビットのクリア、 割込み優å…
548ˆãƒ¬ã‚¸ã‚¹
549 タ (IPRA と IPRB) の個別割り込みの優å…
550ˆåº¦ã®è¨­å®šã€ 外部メモリ空
551 間の有効化を行っている。hardware_init_hook が未定義の場合、リ
552 ンカスクリプトの記述によりこのシンボルが 0 に定義される。
553
554 (3) bss セクションの初期化
555 bss セクションのå…
556¨é ˜åŸŸã‚’ 0 クリアする。
557
558 (4) data セクションの初期化
559 data セクションを外部 RAM に転送する。
560
561 (5) software_init_hook の呼出し
562 software_init_hook が 0 でなければ、software_init_hook を呼
563 出す。software_init_hook はカーネルを起動する前に、ソフトウェ
564 ア環境 (ライブラリ等) 依存の初期化を行うために用意されている。
565 例えば、ライブラリの初期設定などである。software_init_hook が
566 未定義の場合、リンカスクリプトの記述によりこのシンボルが 0 に
567 定義される。
568
569
5703. システム依存部の機能
571
5723. 1 システムクロックドライバ
573
574 システムクロックドライバが isig_tim を呼出す周期は、 sys_defs.h 内
575の
576TIC_NUME と TIC_DENO で定義されており、ディフォルトは 1[ms] 周期である。
577この定義を変更することで、isig_tim を呼出す周期を変更できる。 ただし、
578H8/3048F のクロックが 16[MHz] で、 タイマの精度が 0.5[us]、H8/3052F の
579クロックが 25[MHz] で、タイマの精度が 0.32[us]、H8/3069F のクロックが
58020[MHz] で、 タイマの精度が 0.4[us] のため、これら単位で端数になる値を
581設定すると、 isig_tim の呼出し周期に誤差が発生する。
582 ディフォルトのクロックディバイスは H8/3048F と H8/3052F が ITU0、
583H8/3069F が 16 ビットタイマユニット 0 を使用している。
584
5853. 2 性能評価用システム時刻参ç…
586§æ©Ÿèƒ½
587
588 H8 では、性能評価用システム時刻参ç…
589§æ©Ÿèƒ½ (vxget_tim) をサポートしてい
590る。精度は 0.5[us] で、SYSUTIM 型は__LONG_LONG_MAX__マクロの値により、
591処理系が扱える整数の範囲を判定し、定義方法を選択している。64ビット整数
592が使用できる場合は、64ビット符号なし整数に、そうでない場合は32ビット符
593号なし整数として定義している。
594
5953. 3 シリアルインタフェースドライバ
596
597 H8/3048F と H8/3052F には SCI0 と SCI1 の 2 本、H8/3069F には SCI0
598から SCI2 の 3 本のシリアルポートがあり、sys_config.h に定義している
599TNUM_PORT により何本使用するか指定できる。
600現在の実装
601では 2 本まで使用できる。 JSP カーネルのログ出力用には SCI1
602を使用している。
603
6043. 4 メモリマップ
605
6063. 4. 1 H8/3048F のメモリマップ
607
608 外部アドレス空間を有効にする必
609要があるため、モード 5 の内
610蔵 ROM 有効
611拡張 1M バイトモードを想定している。
612
613 (1) デバッグ時
614
615 0x00000 - 0x1ffff 内
616蔵ROM、秋月モニタ
617 0x20000 - 0x3ffff 外部RAM、.text、.rodata、.data、.bss
618 0xfef10 - 0xfefff 内
619蔵RAM、秋月モニタ
620 0xff000 - 0xff0ff 内
621蔵RAM、仮想割込みベクタ領域 (.vectors)
622 0xff100 - 0xfff0f 内
623蔵RAM、非タスクコンテキスト用スタック
624 0xfff1c - 0xfffff 内
625部I/Oレジスタ
626
627 (2) リリース時
628
629 0x00000 - 0x1ffff 内
630蔵ROM、.vectors、.text、.rodata
631 0x20000 - 0xfef0f 外部RAM、.data、.bss
632 0xfef10 - 0xfff0f 内
633蔵RAM、非タスクコンテキスト用スタック
634 0xfff1c - 0xfffff 内
635部I/Oレジスタ
636
6373. 4. 2 H8/3052F のメモリマップ
638
639 内
640蔵メモリだけでは不足するため、 AKI-H8-USB ボードに装
641着し、
642AKI-H8-USB ボードにある 128K バイトの RAM を利用している。このため、外
643部アドレス空間を有効にする必
644要があり、モード 6 の内
645蔵 ROM 有効拡張 16M
646バイトモードを想定している。
647
648 (1) デバッグ時
649
650 0x000000 - 0x07ffff 内
651蔵ROM、簡易モニタ
652 0x220000 - 0x23ffff 外部RAM、.text、.rodata、.data、.bss
653 0xffdf10 - 0xffdfff 内
654蔵RAM、簡易モニタ
655 0xffe000 - 0xffe0ff 内
656蔵RAM、仮想割込みベクタ領域 (.vectors)
657 0xffe100 - 0xffff0f 内
658蔵RAM、非タスクコンテキスト用スタック
659 0xffff1c - 0xffffff 内
660部I/Oレジスタ
661
662 (2) リリース時
663
664 0x000000 - 0x07ffff 内
665蔵ROM、.vectors、.text、.rodata
666 0x220000 - 0x23ffff 外部RAM、.data、.bss
667 0xffef10 - 0xffff0f 内
668蔵RAM、非タスクコンテキスト用スタック
669 0xffff1c - 0xffffff 内
670部I/Oレジスタ
671
672
6733. 4. 3 H8/3069F のメモリマップ
674
675 外部アドレス空間を有効にする必
676要があるため、モード 5 の内
677蔵 ROM 有効
678拡張 16M バイトモードを想定している。
679
680 (1) デバッグ時 (簡易モニタ使用時)
681
682 0x000000 - 0x07ffff 内
683蔵ROM、簡易モニタ
684 0x400000 - 0x4fffff 外部RAM、.text、.rodata
685 0x500000 - 0x5fffff 外部RAM、.data、.bss
686 0xfee000 - 0xfee0ff 内
687部I/Oレジスタ(1)
688 0xffbf20 - 0xffbfff 外部RAM、簡易モニタ
689 0xffc000 - 0xffc0ff 内
690蔵RAM、仮想割込みベクタ領域 (.vectors)
691 0xffc100 - 0xffff1f 内
692蔵RAM、非タスクコンテキスト用スタック
693 0xffff20 - 0xffffe9 内
694部I/Oレジスタ(2)
695
696 (2) リリース時(外部RAM使用)
697
698 0x000000 - 0x07ffff 内
699蔵ROM、.vectors、.text、.rodata
700 0x400000 - 0x5fffff 外部RAM、.data、.bss
701 0xfee000 - 0xfee0ff 内
702部I/Oレジスタ(1)
703 0xffbf20 - 0xffff1f 内
704蔵RAM、非タスクコンテキスト用スタック
705 0xffff20 - 0xffffe9 内
706部I/Oレジスタ(2)
707
708 (3) リリース時(外部RAM未使用)
709
710 0x000000 - 0x07ffff 内
711蔵ROM、.vectors、.text、.rodata
712 0xfee000 - 0xfee0ff 内
713部I/Oレジスタ(1)
714 0xffbf20 - 0xfffb1f 内
715蔵RAM(1)、.data、.bss
716 0xfffb20 - 0xffff1f 内
717蔵RAM(2)、
718 非タスクコンテキスト用スタック
719 0xffff20 - 0xffffe9 内
720部I/Oレジスタ(2)
721
722
7233. 4. 4 H8/3069F(NKEV-010H8) のメモリマップ
724
725 外部アドレス空間を有効にする必
726要があるため、モード 5 の内
727蔵 ROM 有効
728拡張 16M バイトモードを想定している。
729
730 (1) デバッグ時 (簡易モニタ使用時)
731
732 0x000000 - 0x07ffff 内
733蔵ROM、簡易モニタ
734 0x400000 - 0x43ffff 外部RAM、.text、.rodata
735 0x440000 - 0x47ffff 外部RAM、.data、.bss
736 0xfee000 - 0xfee0ff 内
737部I/Oレジスタ(1)
738 0xffbf20 - 0xffbfff 内
739蔵RAM、簡易モニタ
740 0xffc000 - 0xffc0ff 内
741蔵RAM、仮想割込みベクタ領域 (.vectors)
742 0xffc100 - 0xffff1f 内
743蔵RAM、非タスクコンテキスト用スタック
744 0xffff20 - 0xffffe9 内
745部I/Oレジスタ(2)
746
747 (2) デバッグ時 (GDB STUB使用時)
748
749 0x000000 - 0x07ffff 内
750蔵ROM、GDB STUB
751 0x400000 - 0x4000ff 内
752蔵RAM、仮想割込みベクタ領域 (.vectors)
753 0x400100 - 0x43ffff 外部RAM、.text、.rodata
754 0x440000 - 0x47bfff 外部RAM、.data、.bss
755 0x47c100 - 0x47ff1f 外部RAM、非タスクコンテキスト用スタック
756 0xfee000 - 0xfee0ff 内
757蔵I/O レジスタ(1)
758 0xffbf20 - 0xffbfff 内
759蔵RAM、GDB STUB
760 0xffff20 - 0xffffe9 内
761部I/Oレジスタ(2)
762
763 (3) リリース時(外部RAM使用)
764
765 0x000000 - 0x07ffff 内
766蔵ROM、.vectors、.text、.rodata
767 0x400000 - 0x47ffff 外部RAM、.data、.bss
768 0xfee000 - 0xfee0ff 内
769部I/Oレジスタ(1)
770 0xffbf20 - 0xffff1f 内
771蔵RAM、非タスクコンテキスト用スタック
772 0xffff20 - 0xffffe9 内
773部I/Oレジスタ(2)
774
775 (4) リリース時(外部RAM未使用)
776
777 0x000000 - 0x07ffff 内
778蔵ROM、.vectors、.text、.rodata
779 0xfee000 - 0xfee0ff 内
780部I/Oレジスタ(1)
781 0xffbf20 - 0xffff1f 内
782蔵RAM、.data、.bss、
783                 非タスクコンテキスト用スタック
784 0xffff20 - 0xffffe9 内
785部I/Oレジスタ(2)
786
787
7884. 開発
789
7904. 1 開発環境の構築
791
792 開発環境は、 Windows XP上の cygwin の開発環境を用いた。本実装
793に用い
794たバージョンを以下に示す。
795
796 binutils-2.11.2
797 gcc-2.95.3
798 newlib-1.9.0
799
800補助的な意味でNKEV-010H8については以下のバージョンでも確認を行った。
801
802  binutiles-2.16.1
803  gcc-3.4.3
804  newlib-1.13.0
805
806注意事項
8071
808 秋月電子通商製ボード付属のGNU開発環境はバージョンが古いため、サポー
809 トしていない。
810
811注意事項
8122
813 gcc-3.2.3はビルトイン関数__muldi3()の実装
814に不å…
815·åˆãŒã‚るため、この
816 バージョンの使用は推奨されない。
817
818configure のオプションは --target=h8300-hms である。 また、binutils の
819configure のオプションには --disable-nls も指定すること。
820デバッグのため、秋月モニタ、簡易モニタを使用することができる。
821NKEV-010H8では、GDB stubを用いることができる。詳しくは「9. 3 NKEV-010H8
822での GDB STUB を使った実行」を参ç…
823§ã€‚
824(RedBootに関しては、末尾の付録を参ç…
825§ã€‚)
826
827
8284. 2 sample1.h の設定
829
830 sample1.h で「ターゲット依存の定義(CPU 例外ハンドラの起動方法など)」
831の H8 依存部で、TASK_PORTID を 2、つまり SCI1 を設定してる。もし、他の
832ポートを使用する場合は、 この値を変更すること。
833
8344. 3 ターゲットへのダウンロードと実行
835
836 ターゲットへのダウンロードと実行には、秋月モニタ、または簡易モニタを
837使用する方法と直接 H8 のフラッシュ ROM に書き込んで実行する方法がある。
838
839 (1) H8/3052F、H8/3069Fで簡易モニタを使用する方法 (デバッグモード)
840 苫小牧高専情
841報学科製簡易モニタ mon3052.mot (H8/3052F 用)、
842 mon3068.mot(H8/3068F、H8/3069F 用) を、 H8 の内
843蔵フラッシュ
844 ROM に書き込む。以下に、使用方法を示す。
845
846 簡易モニタのé…
847å¸ƒå…
848ƒURL:
849   http://www.mit.pref.miyagi.jp/embedded/consortium/
850
851
852 [1] ディレクトリ $(CPU)/$(SYS) にある
853
854 MakefileのDBGENV := TNCT_MONITOR
855
856 を有効にして make する。
857 [2] 端末ソフトからモニタコマンド ld をå…
858¥åŠ›ã™ã‚‹ã€‚
859 [3] 端末ソフトから jsp.srec を送信する。
860 [4] 端末ソフトからモニタコマンド go をå…
861¥åŠ›ã™ã‚‹ã¨å®Ÿè¡ŒãŒé–‹å§‹
862 される。
863
864 (2) H8/3048F で秋月モニタを使用する方法 (デバッグモード)
865 ディレクトリ $(CPU)/$(SYS) にある
866
867 MakefileのDBGENV := TNCT_MONITOR
868
869 を有効にして make する。 次に、H8/3048F の外部 RAM へのアクセ
870 スを有効にしなければならない。RAM の構成により異なるが、 アド
871 レスバス A0 から A19 とデータバス D8 から D15 を有効にするに
872 は、以下に示すポートに 0xff を書き込む。
873
874 Port Address
875 P1DDR 0xfffc0
876 P2DDR 0xfffc1
877 P3DDR 0xfffc4
878 P5DDR 0xfffc8
879
880 最後に端末ソフトを使用して jsp.srec を H8/3048F に転送し、 実
881 行する。
882
883 (3) 内
884蔵フラッシュ ROM に書き込んで実行する方法
885    (リリースモード:外部RAM使用)
886 ディレクトリ $(CPU)/$(SYS) にある Makefile.config のディレ
887 クトリ $(CPU)/$(SYS) にある Makefile の
888
889 DBGENV := ROM
890
891 を有効にして make する。次に、h8write等のフラッシュ ROM 書き
892 込みプログラムで、 フラッシュ ROM に書き込む。
893
894 (4) H8/3069Fで内
895蔵フラッシュROMに書き込み、内
896蔵RAMだけで実行する
897    方法 (リリースモード:外部RAM未使用)
898 ディレクトリ $(CPU)/$(SYS) にある Makefile.config のディレ
899 クトリ $(CPU)/$(SYS) にある Makefile の
900
901 DBGENV := INMEM_ONLY
902
903 を有効にして make する。次に、h8write等のフラッシュ ROM 書き
904 込みプログラムで、 フラッシュ ROM に書き込む。
905
9064. 4 H8/3048F の外部 RAM の有効化
907
908 リリースモードでは、 sys_support.S の _hardware_init_hook で、アドレ
909スバス A0 から A19 とデータバス D8 から D15 を有効にした後、カーネルを
910実行する。 これ以外にアドレスバスとデータバスを有効にする場合は、
911sys_config.h の以下の部分を適当に編集する。
912
913 /*
914 * 外部アドレス空間制御
915 */
916 /*#define ENABLE_LOWER_DATA*/
917 #define ENABLE_P8_CS (H8P8DDR_CS0|H8P8DDR_CS1|\
918 H8P8DDR_CS2|H8P8DDR_CS3)
919 /*#define ENABLE_PA_CS (H8PADDR_CS4|H8PADDR_CS5|H8PADDR_CS6)*/
920 /*#define ENABLE_PB_CS H8PBDDR_CS7*/
921 #define ENABLE_PA_A21_A23 (H8BRCR_A23E|H8BRCR_A22E|H8BRCR_A21E)
922
9234. 5 H8/3052F の外部 RAM の有効化
924
925 リリースモードでは、 sys_support.S の _hardware_init_hook で、アドレ
926スバス A0 から A23、 データバス D8 から D15、 チップセレクト CS0 から
927CS3 を有効にした後、カーネルを実行する。これ以外にアドレスバスとデータ
928バスを有効にする場合は、sys_config.h の以下の部分を適当に編集する。
929
930 /*
931 * 外部アドレス空間制御
932 */
933 /*#define ENABLE_LOWER_DATA*/
934 #define ENABLE_P8_CS (H8P8DDR_CS0|H8P8DDR_CS1|\
935 H8P8DDR_CS2|H8P8DDR_CS3)
936 /*#define ENABLE_PA_CS (H8PADDR_CS4|H8PADDR_CS5|H8PADDR_CS6)*/
937 /*#define ENABLE_PB_CS H8PBDDR_CS7*/
938 #define ENABLE_PA_A21_A23 (H8BRCR_A23E|H8BRCR_A22E|H8BRCR_A21E)
939
9404. 6 H8/3069F の外部 RAM の有効化
941
942 リリースモードでは、 sys_support.S の _hardware_init_hook で、アドレ
943スバス A0 から A23、 データバス D8 から D15、 チップセレクト CS0 から
944CS3 を有効にした後、カーネルを実行する。これ以外にアドレスバスとデータ
945バスを有効にする場合は、sys_config.h の以下の部分を適当に編集する。
946
947 /*
948 * 外部アドレス空間制御
949 */
950 #define ENABLE_P8_CS (H8P8DDR_CS0|H8P8DDR_CS1|\
951 H8P8DDR_CS2|H8P8DDR_CS3)
952 #if 0
953 #define ENABLE_LOWER_DATA
954 #define ENABLE_PB_CS (H8PADDR_CS4|H8PADDR_CS5|\
955 H8PADDR_CS6|H8PBDDR_CS7)
956 #endif /* of #if 0 */
957
9585. ファイル構成
959
9605. 1 ディレクトリ・ファイル構成
961
962 (1) config/h8/
963
964 Makefile.config Makefile の H8 依存定義
965 cpu_config.c H8 プロセッサ依存部の C 関数
966 cpu_config.h H8 プロセッサ依存部の構成定義
967 cpu_context.h H8 プロセッサ依存部のコンテキスト操作
968 cpu_defs.h H8 プロセッサ依存部のアプリケーション用定義
969 cpu_insn.h H8 プロセッサのアセンブリ inline 関数
970 cpu_support.S H8 プロセッサのアセンブリ関数
971 cpu_rename.def カーネルの内
972部識別名のリネームとその解除の
973          定義リスト
974 cpu_rename.h カーネルの内
975部識別名のリネームの定義
976 cpu_unrename.h カーネルの内
977部識別名のリネーム解除の定義
978 h8.h H8/300H プロセッサのå…
979±é€šå®šç¾©
980 h8_3048f.h H8/3048F プロセッサの定義
981 h8_3052f.h H8/3052F プロセッサの定義
982 h8_3069f.h H8/3048F プロセッサの定義
983 h8_sil.c SILのH8プロセッサ向け拡張 C関数
984 h8_sil.h SILのH8プロセッサ向け拡張 構成定義
985          (主にI/OポートのDDRアクセスルーチン)
986 hw_serial.c SCI の変数と関数
987 hw_serial.cfg SCI のコンフィギュレーションファイル
988 hw_serial.h SCI の定義
989 hw_timer.h ITU の定義
990 start.S スタートアップモジュール
991 tool_config.h H8 プロセッサの開発環境依存モジュール定義
992 tool_defs.h H8 プロセッサの開発環境依存定義
993 vector_header.S 割込みベクタテーブルのå…
994ˆé ­éƒ¨åˆ†
995 makeoffset.c offset.h 生成サポート関数
996
997 (2) config/h8/akih8_3048f/
998 (株) 秋月電子通商製の AKI-H8/3048F ボードの依存部分
999
1000 Makefile.config Makefile の AKI-H8/3048F ボード依存定義
1001 debug.ld デバッグ用リンカスクリプト
1002 release.ld リリース用リンカスクリプト
1003 sys_config.c AKI-H8/3048F ボード依存部の C 関数
1004 sys_config.h AKI-H8/3048F ボード依存部の構成定義
1005 sys_defs.h AKI-H8/3048F ボード依存部のアプリケーショ
1006          ン用定義
1007 sys_support.S AKI-H8/3048F ボード依存部のアセンブリ関数
1008 sys_rename.def カーネルの内
1009部識別名のリネームとその解除
1010          の定義リスト
1011 sys_rename.h カーネルの内
1012部識別名のリネームの定義
1013 sys_unrename.h カーネルの内
1014部識別名のリネーム解除の定義
1015
1016 (3) config/h8/akih8_3052f/
1017 (株) 秋月電子通商製の AKI-H8/3052F ボードの依存部分
1018
1019 Makefile.config Makefile の AKI-H8/3052F ボード依存定義
1020 debug.ld デバッグ用リンカスクリプト
1021 release.ld リリース用リンカスクリプト
1022 sys_config.c AKI-H8/3052F ボード依存部の C 関数
1023 sys_config.h AKI-H8/3052F ボード依存部の構成定義
1024 sys_defs.h AKI-H8/3052F ボード依存部のアプリケーショ
1025          ン用定義
1026 sys_support.S AKI-H8/3052F ボード依存部のアセンブリ関数
1027 sys_rename.def カーネルの内
1028部識別名のリネームとその解除
1029          の定義リスト
1030 sys_rename.h カーネルの内
1031部識別名のリネームの定義
1032 sys_unrename.h カーネルの内
1033部識別名のリネーム解除の定義
1034
1035 (4) config/h8/akih8_3069f/
1036 (株) 秋月電子通商製の AKI-H8/3069F ボードの依存部分
1037
1038 Makefile.config Makefile の AKI-H8/3069F ボード依存定義
1039 debug.ld デバッグ (簡易モニタ対応) 用リンカスクリプト
1040 debug_redboot.ld デバッグ (RedBoot対応) 用リンカスクリプト
1041 release.ld リリース用リンカスクリプト(外部RAM使用)
1042 release_inmem.ld リリース用リンカスクリプト(外部RAM未使用)
1043 sys_config.c AKI-H8/3069F ボード依存部の C 関数
1044 sys_config.h AKI-H8/3069F ボード依存部の構成定義
1045 sys_defs.h AKI-H8/3069F ボード依存部のアプリケーショ
1046          ン用定義
1047 sys_support.S AKI-H8/3069F ボード依存部のアセンブリ関数
1048 sys_rename.def カーネルの内
1049部識別名のリネームとその解除
1050          の定義リスト
1051 sys_rename.h カーネルの内
1052部識別名のリネームの定義
1053 sys_unrename.h カーネルの内
1054部識別名のリネーム解除の定義
1055
1056 (5) config/h8/nkev_010h8/
1057 (有) 品川通信計装
1058サービス製の NKEV-010H8 ボードの依存部分
1059
1060 Makefile.config Makefile NKEV-010H8 ボード依存定義
1061 debug.ld デバッグ (簡易モニタ対応) 用リンカスクリプト
1062 debug_gdbstub.ld デバッグ (GDB STUB対応) 用リンカスクリプト
1063 debug_redboot.ld デバッグ (RedBoot対応) 用リンカスクリプト
1064 release.ld リリース用リンカスクリプト(外部RAM使用)
1065 release_inmem.ld リリース用リンカスクリプト(外部RAM未使用)
1066 sys_config.c NKEV-010H8 ボード依存部の C 関数
1067 sys_config.h NKEV-010H8 ボード依存部の構成定義
1068 sys_defs.h NKEV-010H8 ボード依存部のアプリケーショ
1069          ン用定義
1070 sys_support.S NKEV-010H8 ボード依存部のアセンブリ関数
1071 sys_rename.def カーネルの内
1072部識別名のリネームとその解除
1073          の定義リスト
1074 sys_rename.h カーネルの内
1075部識別名のリネームの定義
1076 sys_unrename.h カーネルの内
1077部識別名のリネーム解除の定義
1078
1079 (6) jsp/utils/h8/
1080 H8依存部ビルド用スクリプト
1081
1082 cat.pl      UNIXのcatコマンド相当
1083 grep_def_inh.pl Perlスクリプト生成用フィルタ
1084 genvector.pl   ベクタテーブル生成用スクリプト
1085
1086 (7) ビルド・ディレクトリ
1087 vector.S     ベクタテーブル(make depend時に自動生成)
1088
10896. アプリケーション開発者
1090向けの情
1091å ±
1092
1093アプリケーション開発者
1094に有益と思われる情
1095報について述べる。
1096
10976.1 カーネルの設定変更方法
1098
1099(1) SUPPORT_CHG_IPM
1100  このマクロを定義すると割込みマスクの変更・参ç…
1101§æ©Ÿèƒ½ãŒæœ‰åŠ¹ã«ãªã‚‹ã€‚
1102  詳細は「2. 2. 3 割込みマスクの変更・参ç…
1103§ã€ã‚’参ç…
1104§
1105  設定ファイル:sys_config.h
1106
1107(2) SUPPORT_VXGET_TIM
1108  このマクロを定義すると性能評価用システム時刻参ç…
1109§æ©Ÿèƒ½vxget_tim( )が
1110  有効になる。詳細は「3. 2 性能評価用システム時刻参ç…
1111§æ©Ÿèƒ½ã€ã‚’参ç…
1112§
1113  設定ファイル:sys_config.h
1114
1115(3) STACKTOP
1116  非タスクコンテキスト用スタックポインタの初期値
1117  スタートアップルーチンではSTACKTOPが指すRAM領域をスタックにして
1118  _hardware_init_hookを呼び出す。そのため、この領域は
1119  _hardware_init_hookを呼び出す前にアクセス可能になっている必
1120要があ
1121  る。
1122   ・初期状æ…
1123‹ã®ã¾ã¾ã‚¢ã‚¯ã‚»ã‚¹ã§ãã‚‹å†…
1124蔵RAM または
1125   ・モニタによりアクセスできる状æ…
1126‹ã«ã‚る外部RAM
1127
1128  設定ファイル:sys_config.h
1129
1130(4) HEW_SIMULATOR (akih8_3069f固有の拡張)
1131  この変数をtrueに設定するとマクロHEW_SIMULATORが定義され、
1132  シリアルドライバがHEWのI/Oシミュレーションに対応したコードに置き
1133  換わる。(シリアル送信はすべてポーリングになる。)
1134  シリアル送信はHEWのI/Oシミュレーション・ウィンドウに表示され(すべ
1135  てポーリングになる)、シリアル受信はHEWのI/Oシミュレーションの擬似
1136  割込み機能により再現する。
1137  受信するキャラクタは、HEWのI/Oシミュレーション・ウィンドウにカーソ
1138  ルを一番下の行に移動してからå…
1139¥åŠ›ã™ã‚‹ã“とにより指定する。(詳細は
1140  HEWのシミュレータ/デバッガのユーザーズ・マニュアルを参ç…
1141§ã®ã“と)
1142  HEWのI/Oシミュレーション機能を利用するには、start.Sのラベル
1143  _hew_io_simをHEWに登録する必
1144要がある。
1145  (ターゲットakih8_3069fにおける動作確認時には0x0160番地を登録し
1146   た。)
1147
1148 設定箇所
1149  基本設定メニュー
1150    シミュレータ
1151     システム
1152      「システム」タブ
1153        I/Oシミュレーション・アドレス
1154        (「有効」チェックボックスで有効を指定する)
1155
1156  
1157  設定ファイル:h8/akih8_3069f/Makefile.config
1158
1159 ・備考1
1160   HEWのH8/300用シミュレータでは、タイマがサポートされていないため、
1161   この拡張は参考実装
1162扱いである。
1163   (HEWのシミュレータにおいて、ブレークポイントのブレーク種別を
1164    ブレークサイクルとし、ブレーク動作を割込みにすれば、擬似的に
1165    タイマ割込みを発生することができる。ただし、この方法では割込
1166    みマスクは考æ…
1167®ã•ã‚Œãªã„。)
1168   
1169   HEWでは、擬似ベクタテーブルを用意していないため、ROM化した状æ…
1170‹
1171   のメモリマップでないと割込みベクタテーブルの読み取りが正常に動
1172   作しない。
1173   従って、HEW_SIMULATOR=trueとする際には、DBGENV=ROM または
1174   DBGENV=INMEM_ONLYとすること
1175   (DBGENV=TNCT_MONITORの場合でも、苫小牧高専製 簡易モニタを
1176    いっしょにダウンロードすれば、動作可能と思われるが未確認で
1177    ある。)
1178
1179 ・備考2
1180   HEWのシミュレータは、sleep命令の実行でブレークする仕様になってい
1181   る。(割込み待
1182ちにならない。)これでは、時間経過によるタイマ割
1183   込みがシミュレートできないので、マクロHEW_SIMULATORが定義される
1184   場合は、マクロNO_SLEEPも定義し、cpu_support.Sのラベル
1185   dispatcher_2_enable_interrupt付近のsleep命令を実行しないように
1186   している。
1187
11886.1.1 シリアルドライバのカスタマイズ方法
1189
1190 基本的にjsp/config/h8/akih8_3069f/sys_config.hにあるマクロ定義を修正
1191することで、カスタマイズすることができる。以下に各マクロの意味を示す。
1192 
1193 ・ポート数
1194   jsp/config/h8/akih8_3069f/sys_config.h 145行目
1195   マクロTNUM_PORTでポート数を定義する。
1196   現在の実装
1197では最大3まで使用できる。
1198
1199 ・システムログを出力するシリアルポート番号
1200   jsp/config/h8/akih8_3069f/sys_config.h 149行目
1201   マクロLOGTASK_PORTIDでポート数を定義する。
1202
1203各チャネル毎にjsp/config/h8/akih8_3069f/sys_config.hで定義しているマク
1204ロの意味について、以下に述べる。???の部分にはポートの識別子である
1205SYSTEM、USER、USER2のいずれかがå…
1206¥ã‚‹ã€‚
1207
1208 ・???_SCI
1209   シリアルデバイスの制御レジスタ群のå…
1210ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹
1211
1212 ・???_SCI_IPR
1213   割込み制御で用いるIPRAまたはIPRBレジスタのアドレス
1214
1215 ・???_SCI_IP_BIT
1216   上記IPRレジスタ中でシリアルデバイスが該当するビット
1217
1218 ・???_SCI_SMR
1219   SMRレジスタの初期値
1220   デフォルトで以下の設定を行っている。
1221    ・送受信フォーマット:調歩同期式
1222 ・キャラクタレングス:8ビット
1223 ・パリティなし
1224 ・ストップビットレングス:1
1225 ・クロックセレクト(分周比):1
1226
1227 ・???_BAUD_RATE
1228   ボーレート[bps]
1229
1230 ・???_PORTID
1231   ポートIDをマクロSYSTEM_PORTID、USER_PORTID、USER2_PORTIDで定義
1232   する。ポートIDとデバイス番号(sci0〜2)の対応関係を変更する場合、
1233   このマクロを変更するだけでなく、
1234    jsp/config/h8/hw_serial.c
1235   で定義されているシリアルポート初期化ブロックsiopinib_table[]
1236   内
1237の初期化データの順番もå…
1238¥ã‚Œæ›¿ãˆã‚‹ã€‚
1239
1240 ・???_SCI_IPM
1241   割込みプライオリティレベル(送受信å…
1242¼ç”¨ï¼‰
1243   IPM_LEVEL0またはIPM_LEVEL1を設定する。
1244
1245 ・INHNO_SERIAL_IN、INHNO_SERIAL2_IN、INHNO_SERIAL3_IN
1246   各ポートIDのシリアル受信割込みのベクタ番号
1247
1248 ・INHNO_SERIAL_OUT、INHNO_SERIAL2_OUT、INHNO_SERIAL3_OUT
1249   各ポートIDのシリアル送信割込みのベクタ番号
1250
1251 ・INHNO_SERIAL_ERR、INHNO_SERIAL2_ERR、INHNO_SERIAL3_ERR
1252   各ポートIDのシリアルエラー割込みのベクタ番号
1253
1254 ・sio_in_handler_intmask、sio_in2_handler_intmask、
1255  sio_in3_handler_intmask
1256   各ポートIDのシリアル受信割込みハンドラ実行中に、
1257   割込みマスクとして設定する値
1258   IPM_LEVEL1またはIPM_LEVEL2を設定する。
1259
1260 ・sio_out_handler_intmask、sio_out2_handler_intmask、
1261  sio_out3_handler_intmask
1262   各ポートIDのシリアル送信割込みハンドラ実行中に、
1263   割込みマスクとして設定する値
1264   IPM_LEVEL1またはIPM_LEVEL2を設定する。
1265
1266 ・sio_err_handler_intmask、sio_err2_handler_intmask、
1267  sio_err3_handler_intmask
1268   各ポートIDのシリアルエラー割込みハンドラ実行中に、
1269   割込みマスクとして設定する値
1270   IPM_LEVEL1またはIPM_LEVEL2を設定する。
1271
1272
12736.2 アプリケーション向けに提供される機能
1274
1275H8依存部ではアプリケーションを開発しやすくするため、以下の機能を提供し
1276ている。
1277
12786.2.1 I/OポートのDDRレジスタへのアクセス補助機能
1279
1280H8のI/Oポートのデータ・ディレクション・レジスタDDRは書き込み専用であり、
1281そのままでは所望のビットだけを変更することができない。
1282(bset,bclr命令でも回避不可)
1283また、カーネルのスタートアップルーチンでもいくつかのDDRレジスタに対し
1284て設定を行っているため、そのままではカーネルとアプリケーションの間で整
1285合性を保つことができない。
1286そのため、本実装
1287では、メモリ上にテンポラリを用意して、DDRの現在値を保
1288持する方法を採っている。
1289本機能を利用する場合はh8_sil.hをインクルードする必
1290要がある。
1291ポート番号はIO_PORT1, IO_PORT2, IO_PORT3, IO_PORT4, IO_PORT5, IO_PORT6,
1292 IO_PORT8, IO_PORT9, IO_PORTA, IO_PORTBのいずれかを指定する。(ポート7
1293はå…
1294¥åŠ›å°‚用のため、DDRレジスタがない。)ポート番号として、これら以外の
1295値を指定した場合はassert文でエラーとなる。
1296
1297
1298(1) sil_reb_ddr  DDRレジスタの読み出し
1299
1300【C言語API】
1301  UB sil_reb_ddr(UINT port);
1302
1303【パラメータ】
1304 UINT port    ポート番号
1305
1306【リターンパラメータ】
1307 DDRレジスタの値
1308
1309【エラーコード】
1310 なし
1311
1312【機能】
1313
1314portで指定されるポート番号のDDRレジスタの値を読み出す。
1315
1316(2) sil_wrb_ddr  DDRレジスタへの書き込み
1317
1318【C言語API】
1319  void sil_wrb_ddr(UINT port, UB data);
1320
1321【パラメータ】
1322 UINT port   ポート番号
1323 UB data    書き込む値
1324
1325【リターンパラメータ】
1326 なし
1327
1328【エラーコード】
1329 なし
1330
1331【機能】
1332
1333portで指定されるポート番号のDDRレジスタに値dataを書き込む。
1334
1335(3) sil_anb_ddr  DDRレジスタのAND演算
1336
1337【C言語API】
1338  void sil_anb_ddr(UINT port, UB data);
1339
1340【パラメータ】
1341 UINT port   ポート番号
1342 UB data    AND演算を行う値
1343
1344【リターンパラメータ】
1345 なし
1346
1347【エラーコード】
1348 なし
1349
1350【機能】
1351
1352portで指定されるポート番号のDDRレジスタに対して、値dataとのAND演算を
1353行う。
1354
1355(4) sil_orb_ddr  DDRレジスタのOR演算
1356
1357【C言語API】
1358  void sil_orb_ddr(UINT port, UB data);
1359
1360【パラメータ】
1361 UINT port   ポート番号
1362 UB data    OR演算を行う値
1363
1364【リターンパラメータ】
1365 なし
1366
1367【エラーコード】
1368 なし
1369
1370【機能】
1371
1372portで指定されるポート番号のDDRレジスタに対して、値dataとのOR演算を
1373行う。
1374
1375
13767. カーネル移植者
1377向けの情
1378å ±
1379
1380 H8依存部を他のターゲット・ボードへを移植する際に必
1381要な情
1382報を以下に
1383述べる。
1384
13857.1 マクロ定義
1386
1387(1) DDRアクセスルーチンのための定数定義
1388
1389(a) DDRレジスタのアドレス
1390DDRレジスタのアドレスを以下のマクロ名で定義する。
1391 H8P1DDR, H8P2DDR, H8P3DDR, H8P4DDR, H8P5DDR,
1392 H8P6DDR, H8P8DDR, H8P9DDR, H8PADDR, H8PBDDR
1393定義ファイル:sys_config.hからインクルードされるファイル
1394       h8_30xxf.hで定義するのを標準とする。
1395
1396(b) DDRレジスタの初期値
1397スタートアップルーチン実行直後のDDRレジスタの値を以下のマクロ名で定義
1398する。
1399  H8P1DDR0、H8P2DDR0、H8P3DDR0、H8P4DDR0、H8P5DDR0、
1400  H8P6DDR0、H8P8DDR0、H8P9DDR0、H8PADDR0、H8PBDDR0
1401定義ファイル:sys_config.h
1402
1403(2) ベクタテーブル生成のための情
1404å ±
1405ベクタテーブルのサイズを変数VECTOR_SIZEとして定義する。
1406定義ファイル:$(CPU)/$(SYS)/Makefile.config
1407
14087.2 ベクタテーブル生成のためのPerlスクリプトgenvector.plの仕様
1409
1410 -s n ベクターテーブルのサイズ
1411 nは整数定数を仮定しており、それ以外の引数が与えられた
1412 場合の動作は未定義である。
1413
1414 -z JSPカーネルでは登録されていない割込み番号に対して
1415 デフォルトで_no_reg_exceptionを設定するのをæ…
1416£ä¾‹ã¨
1417 しているが、モニタなどの実行環境によっては値0を
1418 設定する必
1419要がある。
1420 このオプションでは登録されていない割込みベクタに0を
1421 書き込む。
1422 -zオプションを指定しない場合は、_no_reg_exceptionを
1423 書き込む(デフォルト)
1424 -zオプションの有無はjsp/config/h8/Makefile.configで
1425 定義している。
1426  DBGENVマクロの値が
1427   ・TNCT_MONITORまたはREDBOOTの場合:-zオプションあり
1428   ・それ以外の場合:-zオプションなし
1429
1430
14318. 制限事項
1432
1433
1434・ベクタテーブル
1435  make realcleanを実行しても、vector.Sが消去されない。
1436  (Makefileを機種依存にしないための制限事項
1437とする。)
1438  ただし、make dependおよびmakeコマンドでベクタテーブルvector.Sを
1439  強制的に上書きしている。上書きしたくない場合は
1440  jsp/config/h8/Makefile.config 85行目の
1441   .PHONY: vector.S
1442  をコメントアウトすると、上書きされなくなる。
1443
1444・実行すべきタスクがないときの割込み待
1445ちについて
1446  sleepしている間にバス権要求が競合しないようにバス権の外部への解放
1447  を禁止する処理を省略している。
1448    該当個所:cpu_support.Sのdispatcher_2_enable_interrupt
1449  
1450  HEW版のjsp/config/h8-renesas/cpu_support.srcには実装
1451済みである。
1452  詳しくはハードウェア・マニュアル「6.4.4 ソフトウェア・スタンバイ・
1453  モードへの遷移」参ç…
1454§
1455
1456・ベクタテーブルの自動生成
1457  デフォルトで用意しているno_reg_exceptionのように、複数の割込み要因
1458  に対して同じ割込みハンドラを登録するような使い方には対応していない。
1459
1460・#ifdef SUPPORT_ETHER
1461  なるべくカーネルとTINETの独立性を高める方針で修正を行ったが、バス
1462  の設定はカーネル側(スタートアップルーチン)で行うため、一部、
1463  SUPPORT_ETHERマクロによる条件コンパイルが残っている。
1464  (AKI-H8/3069F依存部のみ)
1465
1466・シンボル名
1467  C言語ルーチンの関数名****に対して、内
1468部的にå…
1469¥å£å‡¦ç†ã®ãƒ©ãƒ™ãƒ«ã«
1470  __kernel_****_entryを使用しているため、これと同じシンボル名を
1471  アプリケーション内
1472で使用できない。
1473  (å…
1474ƒã€…
1475__kernel_で始まるシンボル名はカーネル用に予約されている。)
1476
1477・秋月電子製ボード付属のCD-ROMにå…
1478¥ã£ã¦ã„ã‚‹gccはバージョンが古いため、
1479 サポートしていない。
1480
1481・gccのバージョンによっては64ビット整数はサポートしない。
1482 (処理系の制限事項
1483)
1484
1485・ホストマシンのOS
1486 Windows9x系はサポートしない。
1487
1488
14899. 付録
1490
14919. 1 RedBoot対応について
1492
1493参考実装
1494としてAKI-H8/3069F用のRedBootに対応しているが、実機テストは
1495行っていない。以下に使用方法を記す。
1496
14979. 1. 1 H8/3069F のメモリマップ
1498 デバッグ時 (RedBoot使用時)
1499
1500 0x000000 - 0x07ffff 内
1501蔵 ROM、RedBootモニター
1502 0x400000 - 0x44ffff 外部 RAM、.text、.rodata
1503 0x450000 - 0x4ffeff 外部 RAM、.data、.bss
1504 0x4fff00 - 0x4fffff 外部 RAM、割り込みベクタ領域 (.vectors)
1505 0x500000 - 0x510000 外部 RAM、非タスクコンテキスト用スタック
1506 0xee0000 - 0xee0081 内
1507蔵 I/O レジスタ
1508 0xffbf20 - 0xfffd1f 内
1509蔵 RAM、RedBootモニター
1510 0xfffd20 - 0xfffe1f 内
1511蔵 RAM、仮想割込みベクタ領域
1512 (cpu_config.cで.vectorsからコピー)
1513 0xffff20 - 0xffffe9 内
1514蔵 I/O レジスタ
1515
1516
15179. 1. 2 ターゲットへのダウンロードと実行
1518
1519 ディレクトリ $(CPU)/$(SYS) にある
1520
1521 MakefileのDBGENV := REDBOOT
1522
1523 を有効にして make する。
1524
1525 RedBoot
1526 http://sourceforge.jp/projects/ecos-h8/
1527 リリース版を"h8write -3069 -f20 redboot.mot" で焼く。
1528
1529 実行方法は
1530  (1) Redbootをローダとして利用する方法
1531  (2) GDBと接続する方法
1532 がある。
1533
1534
1535  (1) Redbootをローダとして利用する方法
1536
1537 以下は、 天野氏提供による設定方法である。
1538
1539 下記ツールをダウンロードしてインストール(Winユーザー)
1540 TFTPサーバーforWin32
1541 http://www.vector.co.jp/soft/win95/net/se174412.html
1542 Tera Term Pro
1543 http://www.sakurachan.org/soft/teraterm-j/
1544
1545 TFTPサーバーのフォルダ指定をjsp.Sが生成される場所に指定
1546 Tera Term Proをインストールした場所にマクロファイル(下記)を
1547 作成
1548 ttpmacro.exe へのショートカットを作成して
1549 右クリのプロパティ-リンクå…
1550ˆã§akiboot.ttlを追加
1551 "C:\Program Files\TTERMPRO tpmacro.exe" akiboot.ttl
1552
1553 下記はakiboot.ttlのサンプル
1554 ; Sample macro for Tera Term
1555 ;環境設定ファイルをロードする場合
1556 ;connect '/F=redboot.ini'
1557 ;デフォルト設定でロードする場合
1558 connect ''
1559 ;改行コードを送ってプロンプトがでるのを待
1560つ
1561 sendln
1562 UsernamePrompt = 'RedBoot>'
1563 ;IPアドレスは環境によって変更してください。
1564 ;-l akiボードのIP -h TFTPサーバーのIP
1565 ipset = 'ip_address -l 192.168.0.12 -h 192.168.0.10'
1566 load = 'load -b 0x400000 jsp.S'
1567 go = 'go 0x400000'
1568 ; ip設定
1569 wait UsernamePrompt
1570 sendln ipset
1571 ; load
1572 wait UsernamePrompt
1573 sendln load
1574 ; go
1575 wait UsernamePrompt
1576 sendln go
1577 ; OK, boot complete.
1578
1579
1580  (2) GDBと接続する方法
1581  
1582  ここではEthernet経由でGDBを接続する方法を述べる。
1583  
1584  ホストマシンとターゲットボードをシリアルケーブルとEthernetケーブル
1585  で接続する。
1586  (Ethernetケーブル:直結する場合はクロスケーブルを用いる。)
1587
1588  ターミナルソフト(シリアル)を起動し、ターゲットの電源をå…
1589¥ã‚Œã‚‹ã€‚
1590  しばらく待
1591つと以下のように出力される。
1592  
1593  ... waiting for BOOTP information
1594  Ethernet eth0: MAC address xx:xx:xx:xx:xx:xx
1595  Can't get BOOTP info for device!
1596  
1597  RedBoot(tm) bootstrap and debug environment [ROM]
1598  Non-certified release, version UNKNOWN - built 21:28:57, Apr 11 2004
1599  
1600  Platform: Akizuki H8/3068 Network micom (H8/300H)
1601  Copyright (C) 2000, 2001, 2002, Red Hat, Inc.
1602  
1603  RAM: 0x00400000-0x005f4000, [0x00400000-0x005e1000] available
1604  FLASH: 0x00000000 - 0x00080000, 8 blocks of 0x00010000 bytes each.
1605  RedBoot>
1606  
1607  "RedBoot>"のプロンプトでå…
1608¥åŠ›å¾…
1609ちになったら、
1610    ip_address -l xxx.xxx.xxx.xxx
1611  とå…
1612¥åŠ›ã—、IPアドレスを設定する。
1613  (xxx.xxx.xxx.xxxのå…
1614·ä½“的な値は環境に合わせる。)
1615  以下のような応答があれば、成功である。
1616
1617  IP: xxx.xxx.xxx.xxx/255.255.255.0, Gateway: 0.0.0.0
1618  Default server: 0.0.0.0
1619  RedBoot>
1620  
1621  (ターミナルソフトではなく、シェルの)コマンドプロンプトにて、
1622  gdbを起動する。
1623  
1624  h8300-hms-gdb jsp (Cygwinの場合はjsp.exe)
1625  
1626  gdbのプロンプトにて以下のコマンドを実行する。
1627  target remote xxx.xxx.xxx.xxx:9000
1628    xxx.xxx.xxx.xxxは上記で設定したIPアドレス
1629     9000はポート番号
1630  load
1631  b xxxx_xxxx
1632  c
1633  
1634  gdbのコマンドについてはgdbのマニュアルを参ç…
1635§
1636
1637
16389. 1. 3 移植のための参考情
1639å ±
1640
1641 デバッガとカーネルが資源の競合を起こさないよう、特に割込みまわりの資
1642源にはé…
1643æ…
1644®ã™ã‚‹å¿…
1645要がある。Redboot対応にあたり、以下のデータ構造や関数
1646を新設している。他のボードやデバッガ用に移植する際にはこれらを修正する
1647必
1648要がある。
1649
1650(1) マクロ H8IPRA_INI,H8IPRB_INI
1651 IPRA、IPRBレジスタの初期値
1652 定義を省略した場合はデフォルト値0が使用される。
1653 cpu_config.cのcpu_initialize関数にて、すべての割込みプライオリティを
1654レベル0にする処理を行っている。デバッガが割込みを使用する場合は、この
1655マクロで初期値を定義し、該当する割込みチャネルの割込みプライオリティが
1656勝手にレベル0にクリアされないようにする。
1657 定義場所:sys_config.h
1658
1659(2) マクロ VECTOR_TABLE_ADDR
1660 Redbootが管理する擬似ベクタテーブルのå…
1661ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹
1662 定義場所:sys_config.h
1663
1664(3) データ型 TMP_VECTOR
1665 cpu_config.cのvector_table_copy関数にて、カーネルが持つベクタテーブ
1666ルをRedbootが管理するコピーしている。この際、上書きしてはまずい個所を
1667退避/復å…
1668ƒã™ã‚‹å¿…
1669要がある。この退避å…
1670ˆã®ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã‚’TMP_VECTOR型として定
1671義する。
1672 定義場所:sys_config.h
1673
1674(4) 関数 load_vector 割込みベクタの退避
1675
1676【C言語API】
1677  void load_vector(TMP_VECTOR *p);
1678
1679【パラメータ】
1680  TMP_VECTOR *p 退避å…
1681ˆã®å…
1682ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹
1683
1684【リターンパラメータ】
1685  なし
1686
1687【エラーコード】
1688  なし
1689
1690【機能】
1691  pで指定されるメモリ領域にRedbootが管理するベクタテーブルの一部を
1692  退避する。
1693
1694【定義場所】
1695  sys_config.c
1696
1697(5) 関数 save_vector 割込みベクタの復å…
1698ƒ
1699
1700【C言語API】
1701  void save_vector(TMP_VECTOR *p);
1702
1703【パラメータ】
1704  TMP_VECTOR *p コピーå…
1705ƒã®å…
1706ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹
1707
1708【リターンパラメータ】
1709  なし
1710
1711【エラーコード】
1712  なし
1713
1714【機能】
1715  pで指定されるメモリ領域にあるデータをRedbootが管理するベクタ
1716  テーブルの一部として復å…
1717ƒã™ã‚‹ã€‚
1718
1719【定義場所】
1720  sys_config.c
1721
17229. 2 gccの呼び出し規約について
1723
1724 下記の参考資料によると、スクラッチレジスタはer0〜er3であると読めるが、
1725実際には最適化オプション使用時にer4も破壊されるようなので、割込みの出
1726å…
1727¥å£å‡¦ç†ã§er0〜er4を退避/復å…
1728ƒã—ている。
1729
1730 参考資料
1731  http://gcc.gnu.org/projects/h8300-abi.html
1732
1733
17349. 3 シリアル3ch化に伴なう修正内
1735容について
1736 jsp/config/h8/hw_serial.cで定義されているシリアルポート初期化ブロッ
1737クsiopinib_table[]のサイズを2から3に拡張し、それに伴い、
1738  ・jsp/config/h8/hw_serial.cfg
1739    割込みハンドラの登録
1740  ・jsp/config/h8/akih8_3069f/sys_config.h
1741    必
1742要なマクロ定義
1743をそれぞれを追加している。
1744 また、修正以前はTNUM_PORTマクロの値により、システムログ出力に使用す
1745るポート番号が変化するようになっていたが、今回の修正後は、TNUM_PORTマ
1746クロの値に依らずシステムログ出力のポート番号が固定されるよう仕様変更し
1747た。
1748
1749
17509. 4 NKEV-010H8 での GDB STUB を使った実行
1751
17529. 4. 1 NKEV-010H8 対応STUB
1753
1754NKEV-010H8 対応 GDB STUB は製品添付の CD-ROM に納められてé…
1755å¸ƒã•ã‚Œã‚‹ã€‚
1756この GDB STUB は SCI1 を使用する為、syslog出力等はSCI0に行うように
1757ターゲット依存部で定義される。
1758
17599. 4. 2 NKEV-010H8をターゲットとしてGDBによるリモートデバッグ
1760
1761 1. config/h8/nkev-010h8/Makefile.config で DBGENV := をå…
1762¨ã¦
1763 コメントアウトする。
1764 2. アプリケーションの Makefile に DBGENV := GDB_STUBを追加する。
1765 3. アプリケーションの Makefile COPTS = -g -O0 を追加する。
1766 4. 出力å…
1767ˆã®ã‚·ãƒªã‚¢ãƒ«ãƒãƒ¼ãƒˆ IDを 2 にしている場合は 1 に変更する。
1768 (jspのsampleの場合、TASK_PORTID を 1 にする)
1769 5. make depend、make を行う
1770 6. h8300-hms-gdb jsp.exe を実行し、gdbを起動する。
1771 7. gdbプロンプトが出たら以下をå…
1772¥åŠ›ã™ã‚‹ã€‚
1773
1774 (gdb) set machine h8300h
1775 (gdb) set endian big
1776 (gdb) set remotebaud 38400
1777 (gdb) set remoteaddress 32
1778 (gdb) target remote /dev/com1←PCのCOMポート番号
1779 0x00001350 in ?? ()
1780 (gdb) load
1781 Loading section .vectors, size 0x100 lma 0x400000
1782 Loading section .text, size 0x59ca lma 0x400100
1783 Loading section .rodata, size 0x118a lma 0x405aca
1784 Loading section .data, size 0x12 lma 0x406c54
1785 Start address 0x400100, load size 27750
1786 Transfer rate: 20181 bits/sec, 50 bytes/write.
1787 (gdb)
1788
1789 8. contとå…
1790¥åŠ›ã™ã‚‹äº‹ã§ãƒ—ログラムが実行する。
1791
1792 gdbの操作についてはGNUプロジェクトにマニュアルがあるので、そちらを
1793 参ç…
1794§ã®äº‹ã€‚
1795
17969. 4. 3 既知の問題点
1797
1798 TNUM_PORT = 2 とすると、stub と USER PORTがバッティングして動作しない。
1799
1800
1801変更履歴
1802
1803'01/11/15 Release1.2
1804 H8サポート開始
1805  ターゲット:AKI-H8/3048F
1806
1807'02/04/15 Release1.3
1808 ターゲットの変更
1809  AKI-H8/3067Fのサポートを追加
1810
1811'03/12/28 Release1.4
1812 ターゲットシステムの変更
1813  ・AKI-H8/3052Fのサポートを追加
1814  ・AKI-H8/3068Fのサポートを追加
1815  ・AKI-H8/3069Fのサポートを追加
1816
1817'05/12/28 Release1.4.2
1818 ターゲットシステムの変更
1819  ・NKEV-010H8のサポートを追加
1820  ・AKI-H8/3068Fのサポートを中止
1821  ・AKI-H8/3069Fのサポートを中止
1822
1823 新規
1824  ・ベクタテーブルの自動生成
1825    DEF_INH()の引数から割込みベクタテーブルを自動生成するようにし
1826    た。これにより、ユーザーが手作業で編集する必
1827要がなくなった。
1828  ・割込み優å…
1829ˆåº¦ã®ã‚µãƒãƒ¼ãƒˆ
1830    ・レベル0とレベル1の割込みをサポート
1831    ・割込みハンドラの登録方法を変更
1832      割込み要因毎に2種類の割込みレベルの値を定義する。
1833        ・割込み要求時:IPRA、IPRBレジスタの設定
1834        ・割込み許可時:ccrの割込みマスクの設定
1835    ・割込み要因別に用意していたxxx_enable_intとxxx_disable_intを
1836     廃止
1837    ・iscpulockedフラグを新設
1838  ・IPMの参ç…
1839§ã¨å¤‰æ›´æ©Ÿèƒ½ã‚’サポート 
1840  ・I/OポートのDDRアクセスルーチンを追加
1841  ・AKI-H8/3069Fのリリースモードで内
1842蔵RAMだけで動作するモードを追加
1843    ・Makefile.configにDBGENV := INMEM_ONLYを新設
1844    ・リンクスクリプトrelease_inmem.ldを追加
1845
1846 修正
1847  ・実行環境の定義
1848    Makefile.config内
1849の変数DBGENVの定義の見直し
1850     DBGENV := ROM ROM化の場合(新規)
1851     DBGENV := TNCT_MONITOR 簡易モニタ使用時(変更)
1852       TNCT:Tomakomai National College of Technology
1853  ・微小時間待
1854ち関数sil_dly_nse( )を実装
1855
1856  ・_int64_の定義を厳密化
1857    これに伴い、SYSUTIM型の定義を変更
1858  ・シリアルドライバのSCI_getchar()で読み出した1バイトデータが符号
1859   拡張されてしまう問題を修正
1860  ・処理系
1861    秋月電子通商製ボード付属のGNU開発環境はバージョンが古いため、
1862    サポートしていない。(「4. 1 開発環境の構築」を参ç…
1863§ï¼‰
1864  ・cpu_experr( )でレジスタの内
1865容をダンプする際、pcとccrを分離して
1866   いなかった不å…
1867·åˆã‚’修正
1868  ・TINET関連のファイルを分離
1869    ・削除したファイル
1870      jsp/config/h8/tinet_cpu_defs.h
1871      jsp/config/h8/tinet_cpu_config.h
1872      jsp/config/h8/akih8_3048f/tinet_sys_config.h
1873      jsp/config/h8/akih8_3068f/tinet_sys_config.h
1874      jsp/config/h8/akih8_3069f/tinet_sys_config.h
1875  ・Redboot関連
1876   ・debug_redboot.ldをパッケージに含めた
1877   ・スタックポインタの初期値を修正
1878   ・割込みベクタテーブルへの登録処理を修正
1879  ・タイマハンドラ、シリアルハンドラの整理
1880    ・BITSET,BITCLRマクロをインライン・アセンブラ関数に変更
1881  ・割込みコントローラの初期化
1882   ・_hardware_init_hookの処理内
1883容を一部、cpu_initialize()に移動
1884  ・アセンブラルーチン
1885   ・条件分岐命令前の不要なor命令を削除
1886   ・gccの呼び出し規約に合わせて、レジスタの退避と復å…
1887ƒã‚’å¿…
1888要最小限
1889    にした。
1890    (gcc 3.x対策のため、割込みの出å…
1891¥å£ã§er4も退避/復å…
1892ƒã—ている。)
1893  ・h8_3048f.h、h8_3052f.h、h8_3069f.hをボード間でå…
1894±æœ‰ã§ãã‚‹ã‚ˆã†
1895   $(CPU)ディレクトリに移動
1896  ・AKI-H8/3052F, AKI-H8/3069Fシステム依存部
1897    ・デフォルトのシリアルch数を1に変更
1898      コネクタを増設しないと使用できないため
1899    ・それに伴ない、サンプルプログラムのTASK_PORTIDの定義を
1900     sys_defs.hに移動
1901  ・Makefile.configにデバッグオプション-gを追加
1902  ・関数宣言で、引数のないものは明示的にvoidを記述した。
1903  ・vxget_tim()のプロトタイプ宣言にthrow()を追加
1904  ・intnestをUW型からUB型に変更
1905  ・トレースログの設定を一部追加
1906    #define LOG_VSNS_INI_ENTER()
1907    #define LOG_VSNS_INI_LEAVE(state)
1908  ・tool_config.hからNEWLIBマクロの定義を削除
1909  ・cpu_context.hからACTIVATED_STACK_SIZEマクロの定義を削除
1910  ・シンボル・リネーム対象の見直し
1911   ・シンボルcpu_experrのリネーム漏れを修正
1912  ・AKI-H8/3069F
1913    ・HEAP_TOPマクロの定義を削除
1914  ・マニュアル
1915   ・ボード付属のCD-ROMのgccはサポート外であることを明記
1916   ・Redboot対応が参考実装
1917であることを明記し、付録に移動
1918   ・割込み発生時のスタック消費量を訂正
1919   ・割込みハンドラの登録方法を明記
1920   ・シリアルポートのフロー制御の設定を追記
1921   ・開発環境のバージョンを変更
1922
1923'07/06/01 Release1.4.3
1924 ターゲットシステムの変更
1925  ・NKEV-010H8のサポートを中止
1926  ・AKI-H8/3048Fのサポートを中止
1927
1928 修正
1929 ・シリアルドライバを3ch化
1930   AKI-H8/3069Fのみ対応
1931 ・ベクタテーブル自動生成
1932  ・make dependおよびmakeコマンドでベクタテーブルvector.Sを強制的に
1933   上書きするよう仕様変更
1934  ・処理系毎の改行コードの違いに対応
1935  ・DEF_INH文の途中で改行があるとパースに失敗する問題を修正
1936  ・割込み番号のマクロが未定義の場合、0番と解釈して、リセットベクタを
1937   上書きしてしまう不å…
1938·åˆã‚’修正
1939  ・割込み番号にuが付いている場合に正しく処理できない問題を修正
1940  ・filter1.plとfilter2.plを1つにまとめ、grep_def_inh.plに改名
1941   (gcc版とHEW版で個別にfilter2.plを用意する必
1942要がなくなった)
1943 ・割り込みレベルの設定
1944   ・h8_sil.hのdefine_int_plevel()
1945     cpu_insh.hをインクルードしないで、bitset(),bitclr()を呼び
1946     出していた不å…
1947·åˆã‚’修正
1948 ・software_term_hookの呼び出し
1949   ・tool_config.hのcall_atexit()
1950     software_term_hookへのポインタと0との比較が、コンパイラの
1951     最適化によって削除されてしまわないよう、volatile修飾子を追加
1952 ・Redboot対応
1953   ・Redbootが使用する割込みベクタを上書きしてしまう問題を修正
1954   ・マニュアルh8.txtの9.1節を追記
1955
1956'10/02/15
1957 修正
1958 ・コンパイラの最適化により、クリティカルセクションの前後で命令の
1959  順番がå…
1960¥ã‚Œæ›¿ã‚ã£ã¦ã—まう問題を修正
1961
1962
1963'10/02/16
1964 修正
1965 ・h8_3069f.h
1966  ・Timer Interrupt Status Register B (TISRB)
1967    スペルミスを修正(A→B)
1968  ・レジスタ定義を追加
1969 ・hw_timer.h
1970  ・hw_timer_initialize( )
1971    割込み許可時に他のchのビットを上書きしていた不å…
1972·åˆã‚’修正
1973 ・内
1974蔵RAMのアドレスマッピングの誤りを修正
1975
1976'10/06/15
1977 修正
1978  ・シリアルドライバをHEWのI/Oシミュレーションに対応
1979   (akih8_3069f固有の拡張)
1980  ・ドキュメント内
1981にある内
1982部I/Oレジスタのアドレスマッピングの
1983   記載ミスを修正
1984
1985'10/12/01
1986 修正
1987  ・関数sil_dly_nseをh8_sil.cからcpu_support.Sに移動
1988    インラインアセンブラから通常のアセンブラ言語記述に変更
1989  ・akih8_3069f
1990    ・バスのウェイトとアクセスステートが設定されていなかった問題を修正
1991      「(toppers-users 3087) [H8]バス初期化について」への対応
1992    ・関数sil_dly_nseのパラメータSIL_DLY_TIM1,2の値を調整
1993
1994'10/12/15
1995 修正
1996  ・シリアル受信割込みハンドラ内
1997のエラーチェック処理をコメントアウト
1998   (レアケースなため)
Note: See TracBrowser for help on using the repository browser.