H8マイコンにデバックモニタを入れる。HTERMでデバックをする。 [HEW & HTERM]
H8をHTERMでデバックする手順に付いて質問を受けたので、あらためてここで紹介します。
まず手順の説明を開始する前に、HTERMでのデバックの概要について簡単に書いておきます。
H8/300Hマイコンの内、後発のH8/Tinyシリーズについては設計段階からオンチップデバック機能を搭載しており、E8エミュレーターを使ってデバックが出来る事は前に紹介しました。
しかしその前からあるH8/300Hマイコン、一般的なのはH8/3048F、H8/3052F、H8/3069Fにはチップ内部にオンチップデバック機構を持ちません。
つまりこれらマイコンにはハードウエア的なデバック機能が無いので、ルネサスのセミナー講師であるKさんがソフトウエアによるデバック機能を実現しました。
インタフェースにはSCIを使用します。(複数SCIがある時はブートモードで使用するSCIがデフォルトで選ばれている。)
確か1995年位ではなかったでしょうか、当時の日立、現在のルネサスの半導体セミナー(無償セミナーの方)でデバックモニタの実現方法に付いて講習を行っていました。当時インターネットはまだ十分に普及しておらず、サポート用にniftyのメールアドレスをもらっています。
当初はデバックモニタのみのリリースでしたが、後にこのデバックモニタの機能を使いこなすべく、GUIで操作できるHTERMを当を本人が開発され、現在ではデバックモニタ、HTERM共に上記写真のページ(ルネサスの半導体セミナーのページからサンプルプログラムに進む)で提供されています。
なお、デバックモニタにしろ、HTERMにしろ、GCCで作成したモジュールを扱う事もできますが、特にHTERMの機能を十分に使いこなせないので、開発はルネサス純正のツールチェインを使った方が良いでしょう。
以上、概要は終了
では上記写真のページに辿り着いたら
「HEW3,HEW4(C/C++ Compiler Ver. 6.0)対応版 H8/300H用 モニタプログラム」または「HEW3,HEW4(C/C++ Compiler Ver. 6.0)対応版 H8/300H Tiny用 モニタプログラム」と、
「モニタプログラム専用通信ソフト Hterm」をダウンロードしてください。
※300hhew3.exe、300thew3.exeは実行形式のファイルなので、場合によってはセキュリティソフトに文句を言われるかもしれませんね。
ダウンロード後、適当なフォルダで自動解凍を行います。
すると、Opera上に自動的に「組み込みモニタのカスタマイズ方法」と言うページが開きました。なーんだ、解説要らないジャン。
※下手な解説読むより、作った本人の解説があれば、そっちを読んだ方が良いのは言うまでもないですよね。それでも判らない事が有ればコメント欄へどうぞ。
と言う訳でまずは展開されたreadme.htmを読んでください。同じ事を解説しても無駄ですから。
あとmonitor.htmの方も読んでおくと良いでしょう。
※できれば「printf関数、scanf関数のサポート」を読んで、これら機能を一緒に組み込んで置くとお得です。
ダブった事は書いてもしょうがないので、マイコンに依存する所のみ紹介して置きます。
※特にROM容量をケチる必要も無いので、「組み込み型モニタの機能選択」は行わず、フル機能で構築しています。
※ボーレートの設定値ですが、使用するマイコンのデータシートのSCIのBRRの項目に、親切にも計算済みの値が書いてありますので、それを使ってください。但し記述は16進です。
例1.H8/3069Fマイコンの場合。秋月の3069FLANボードを想定。CPUクロック20MHz、DRAM16Mbit、ボーレート38400bps、printf、scanfの実現有り。
monitor.src
monitor.sub
例2.H8/3048Fマイコンの場合。CPUクロック16MHz、外部メモリ無し、ボーレート38400bps、printf、scanfの実現有り。
※INITIALIZEには特に書く事が無いので、subファイルのみ紹介。
※3048Fに付いては、いま動かせる基板が無いので動作未確認。
例3.H8/3694F Tinyマイコンの場合。CPUクロック20MHz、ボーレート38400bps、printf、scanfの実現有り。
※INITIALIZEには特に書く事が無いので、subファイルのみ紹介。
※以下のSUBファイルの記述は修正が入っています。
START VECTOR/0,ROM,C/100,RAM/F780,USER/F880,SCI/FFA8
USER/F840→USER/F880
MOTファイルが出来上がったらFDTでターゲットに書き込みます。
※HTERM自体にも書き込み機能が有るのですが、H8/3069F以外は自前で書き込みモジュールを用意する必要があります。書き込みモジュールの作り方も何処かにドキュメントが有った筈なんだけれど。
書き込みが完了したらFDTとターゲットとの接続を解除し、HTERMを立ち上げて(COMポート番号とボーレートには注意して)コンソールを開きます。
ターゲットの動作モードをブートモードから通常の動作モードに切り替えて、電源の再投入かリセットを実行します。
以下の画面が表示されればデバックモニタの構築は完了です。
まず手順の説明を開始する前に、HTERMでのデバックの概要について簡単に書いておきます。
H8/300Hマイコンの内、後発のH8/Tinyシリーズについては設計段階からオンチップデバック機能を搭載しており、E8エミュレーターを使ってデバックが出来る事は前に紹介しました。
しかしその前からあるH8/300Hマイコン、一般的なのはH8/3048F、H8/3052F、H8/3069Fにはチップ内部にオンチップデバック機構を持ちません。
つまりこれらマイコンにはハードウエア的なデバック機能が無いので、ルネサスのセミナー講師であるKさんがソフトウエアによるデバック機能を実現しました。
インタフェースにはSCIを使用します。(複数SCIがある時はブートモードで使用するSCIがデフォルトで選ばれている。)
確か1995年位ではなかったでしょうか、当時の日立、現在のルネサスの半導体セミナー(無償セミナーの方)でデバックモニタの実現方法に付いて講習を行っていました。当時インターネットはまだ十分に普及しておらず、サポート用にniftyのメールアドレスをもらっています。
当初はデバックモニタのみのリリースでしたが、後にこのデバックモニタの機能を使いこなすべく、GUIで操作できるHTERMを当を本人が開発され、現在ではデバックモニタ、HTERM共に上記写真のページ(ルネサスの半導体セミナーのページからサンプルプログラムに進む)で提供されています。
なお、デバックモニタにしろ、HTERMにしろ、GCCで作成したモジュールを扱う事もできますが、特にHTERMの機能を十分に使いこなせないので、開発はルネサス純正のツールチェインを使った方が良いでしょう。
以上、概要は終了
では上記写真のページに辿り着いたら
「HEW3,HEW4(C/C++ Compiler Ver. 6.0)対応版 H8/300H用 モニタプログラム」または「HEW3,HEW4(C/C++ Compiler Ver. 6.0)対応版 H8/300H Tiny用 モニタプログラム」と、
「モニタプログラム専用通信ソフト Hterm」をダウンロードしてください。
※300hhew3.exe、300thew3.exeは実行形式のファイルなので、場合によってはセキュリティソフトに文句を言われるかもしれませんね。
ダウンロード後、適当なフォルダで自動解凍を行います。
すると、Opera上に自動的に「組み込みモニタのカスタマイズ方法」と言うページが開きました。なーんだ、解説要らないジャン。
※下手な解説読むより、作った本人の解説があれば、そっちを読んだ方が良いのは言うまでもないですよね。それでも判らない事が有ればコメント欄へどうぞ。
と言う訳でまずは展開されたreadme.htmを読んでください。同じ事を解説しても無駄ですから。
あとmonitor.htmの方も読んでおくと良いでしょう。
※できれば「printf関数、scanf関数のサポート」を読んで、これら機能を一緒に組み込んで置くとお得です。
ダブった事は書いてもしょうがないので、マイコンに依存する所のみ紹介して置きます。
※特にROM容量をケチる必要も無いので、「組み込み型モニタの機能選択」は行わず、フル機能で構築しています。
※ボーレートの設定値ですが、使用するマイコンのデータシートのSCIのBRRの項目に、親切にも計算済みの値が書いてありますので、それを使ってください。但し記述は16進です。
例1.H8/3069Fマイコンの場合。秋月の3069FLANボードを想定。CPUクロック20MHz、DRAM16Mbit、ボーレート38400bps、printf、scanfの実現有り。
monitor.src
;************************************************************************ ;* H8/300H Monitor Program (Advanced Mode) Ver. 3.0A * ;* Copyright (C) 2003 Renesas Technology Corp. * ;************************************************************************ .PROGRAM INITIALIZE ; Program Name .CPU 300HA ; CPU is H8/300H Advanced .SECTION ROM,CODE,ALIGN=2 ; ROM Area Section ;************************************************************************ ;* Export Define * ;************************************************************************ .EXPORT _INITIALIZE ; User Initialize Module ;************************************************************************ ;* User Initialize Module * ;* Input ER5 <-- Return Address * ;* Output Nothing * ;* Used Stack Area --> 0(0) Byte * ;************************************************************************ _INITIALIZE: ;DRAM空間はCS2に取られている。16Mbit、8bitバス、60nsのDRAMが実装済み ;PORT1、2、5を初期化しアドレスを出力モードにする P1DDR .equ h'fee000 P2DDR .equ h'fee001 P5DDR .equ h'fee004 P8DDR .equ h'fee007 ASTCR .equ h'fee021 ;アクセスステートコントロールレジスタ WCRH .equ h'fee022 ;WAITコントロールレジスタ WCRL .equ h'fee023 ;WAITコントロールレジスタ DRCRA .equ h'fee026 ;DRAMコントロールレジスタA DRCRB .equ h'fee027 ;DRAMコントロールレジスタB RTMCSR .equ h'fee028 ;リフレッシュコントロール/ステータスレジスタ RTCNT .equ h'fee029 ;リフレッシュタイマカウンター RTCOR .equ h'fee02A ;リフレッシュタイムコンスタンとレジスタ ;コメントを付けると内蔵メモリだけの利用となる mov.b #h'ff,r0l mov.b r0l,@P1DDR ;PORT1 アドレス出力 mov.b #h'07,r0l ;A10まで有効とする mov.b r0l,@P2DDR ;PORT2 アドレス出力 mov.b #h'e8,r0l ;松川様の連絡により判明 mov.b r0l,@P8DDR ;PORT2 アドレス出力 mov.b #155,r0l ;155で約64KHzのリフレッシュ ; mov.b #99,r0l ;99で約100KHzのリフレッシュ mov.b r0l,@RTCOR ; mov.b #h'0F,r0l ;b'0000 1111 mov.b r0l,@RTMCSR ;Φ2 mov.b #h'98,r0l ;b'1001 1000 mov.b r0l,@DRCRB ;カラムアドレス10bit ; mov.b #h'3c,r0l ;b'0011 1100 fast page のバーストモード用 ; mov.b #h'34,r0l ;b'0011 0100 フルアクセス用 mov.b #h'38,r0l ;b'0011 1000 峰松さんお勧め、FAST PAGE、EDOドンと来い設定。バースト有りのRASアップモード用 mov.b r0l,@DRCRA ;エリア2をDRAM空間に設定、FPモード、RASダウンモード ;8リフレッシュサイクル分のwaitを入れる(リフレッシュサイクル100KHz時) wait80u .equ 80*100/64 mov.l #wait80u,er0 ;ループ数の設定 refresh_loop: ;1ループ1μs(20MHz時) nop ;nopは2ステート消費 nop ;nopは2ステート消費 nop ;nopは2ステート消費 nop ;nopは2ステート消費 nop ;nopは2ステート消費 nop ;nopは2ステート消費 dec.l #1,er0 ;dec.lは2ステート消費 bne refresh_loop ;bneは6ステート消費 ; JMP @ER5 ; Goto Monitor Program .END ;
monitor.sub
INPUT ADVANCED,MONITOR,LOWER LIST MON3068R20.MAP SHOW SYMBOL OUTPUT MON3068R20.MOT FORM STYPE NOOPTIMIZE LIBRARY ADVANCED,3068 LIBRARY MONITOR DEFINE $BRR=0F DEFINE $STACK=0FFFF20 START VECTOR/0,ROM,C/100,RAM/0FFBF20,USER/0FFBFF4,SCI/0FFFFB8
例2.H8/3048Fマイコンの場合。CPUクロック16MHz、外部メモリ無し、ボーレート38400bps、printf、scanfの実現有り。
※INITIALIZEには特に書く事が無いので、subファイルのみ紹介。
※3048Fに付いては、いま動かせる基板が無いので動作未確認。
INPUT ADVANCED,MONITOR,LOWER LIST MON3048N16.MAP SHOW SYMBOL OUTPUT MON3048N16.MOT FORM STYPE NOOPTIMIZE LIBRARY ADVANCED,3048 LIBRARY MONITOR DEFINE $BRR=0C DEFINE $STACK=FFFF10 START VECTOR/0,ROM,C/100,RAM/0FFEF10,USER/0FFF030,SCI/0FFFFB8
例3.H8/3694F Tinyマイコンの場合。CPUクロック20MHz、ボーレート38400bps、printf、scanfの実現有り。
※INITIALIZEには特に書く事が無いので、subファイルのみ紹介。
INPUT NORMAL,MONITOR,LOWER LIST MON3694N20.MAP SHOW SYMBOL OUTPUT MON3694N20.MOT FORM STYPE NOOPTIMIZE LIBRARY NORMAL,3694 LIBRARY MONITOR DEFINE $BRR=0F DEFINE $STACK=FF00 START VECTOR/0,ROM,C/100,RAM/F780,USER/F880,SCI/FFA8
※以下のSUBファイルの記述は修正が入っています。
START VECTOR/0,ROM,C/100,RAM/F780,USER/F880,SCI/FFA8
USER/F840→USER/F880
MOTファイルが出来上がったらFDTでターゲットに書き込みます。
※HTERM自体にも書き込み機能が有るのですが、H8/3069F以外は自前で書き込みモジュールを用意する必要があります。書き込みモジュールの作り方も何処かにドキュメントが有った筈なんだけれど。
書き込みが完了したらFDTとターゲットとの接続を解除し、HTERMを立ち上げて(COMポート番号とボーレートには注意して)コンソールを開きます。
ターゲットの動作モードをブートモードから通常の動作モードに切り替えて、電源の再投入かリセットを実行します。
以下の画面が表示されればデバックモニタの構築は完了です。
2009-06-07 11:42
nice!(0)
コメント(0)
トラックバック(0)
コメント 0