H8-SX基板 HEWからLEDチカチカをデバック [RX&SH&H8]
※今、キャラクタLCD(SC1602)のデバックやっているんですけれど、物凄く快適なんですが(笑)。
デバッカーのマニュアル通りにやれば問題無いかと思いますが、幾つかポイントがあるのも事実なので、その辺をちょっとだけ書いてみます。
判り難いのは制約上のROM、RAMの使い方です。
デバックモニタを使用せず、FLASH ROMに書き込んで動かす場合は、HEWのウイザードが作成したデフォルトのセクション設定であまり問題無いのですが、このデバックモニタで動かすユーザープログラムはRAM上に展開して動かす必要がありますので、ちょっとだけセクションの設定を変更する必要があります。
具体的には全てのセクションをRAMに配置するのですが、これはH8/SX 1655のマップに合わせた内容がマニュアルに掲載されていますので、その通りに配置してください。
LEDチカチカくらいの小さなプログラムなら、スタックセクション以外のセクションを全て0xFF2000から配置したって全然問題ありません。
以下はその0xFF2000に全部置いた場合の設定ファイルの内容なので、コピペして適当なファイル名で保存します。例えばram.hsiとか。
使い方は、ビルド→H8S,H8300H Standard Toolchain→最適化リンカTAB→カテゴリ:セクション→インポートでダイアログを開いて先のram.hsiを読み込みます。
同様にエクスポートもできますので、デバック用、ROM実行用と設定ファイルを作り分けると便利です。
従来のデバックモニタでは、割り込みやリセットベクターは仮想ベクター方式を取っていたので、ベクターテーブル自体もセクションの設定し直しが必要でしたが、このH8/SXでは一部のRAM領域をハードウエア的に0番地にマッピングするRAMエミュレーションを使用していますので、
__entry(vect=0) void PowerON_Reset(void)
とか、
__interrupt(vect=64) void INT_IRQ0(void)
のvect=??を解除する必要はありません。
あとはプログラムをロード後、適当にブレークを貼ったり、リセット後実行(Shift+F5)してみたり、ステップ(F10)してみたり、メモリダンプしたり、レジスタを参照したり、変数を確認したりと至って普通のソースレベルデバックが可能です。
デバッカーのマニュアル通りにやれば問題無いかと思いますが、幾つかポイントがあるのも事実なので、その辺をちょっとだけ書いてみます。
判り難いのは制約上のROM、RAMの使い方です。
デバックモニタを使用せず、FLASH ROMに書き込んで動かす場合は、HEWのウイザードが作成したデフォルトのセクション設定であまり問題無いのですが、このデバックモニタで動かすユーザープログラムはRAM上に展開して動かす必要がありますので、ちょっとだけセクションの設定を変更する必要があります。
具体的には全てのセクションをRAMに配置するのですが、これはH8/SX 1655のマップに合わせた内容がマニュアルに掲載されていますので、その通りに配置してください。
LEDチカチカくらいの小さなプログラムなら、スタックセクション以外のセクションを全て0xFF2000から配置したって全然問題ありません。
以下はその0xFF2000に全部置いた場合の設定ファイルの内容なので、コピペして適当なファイル名で保存します。例えばram.hsiとか。
[Hew Section Information] Version=2.0 Section overlay=No Entry=2 Address1=0x00FF2000 Section1=PResetPRG,PIntPRG,P,C,C$DSEC,C$BSEC,D,B,R Address2=0x00FFBE00 Section2=S
使い方は、ビルド→H8S,H8300H Standard Toolchain→最適化リンカTAB→カテゴリ:セクション→インポートでダイアログを開いて先のram.hsiを読み込みます。
同様にエクスポートもできますので、デバック用、ROM実行用と設定ファイルを作り分けると便利です。
従来のデバックモニタでは、割り込みやリセットベクターは仮想ベクター方式を取っていたので、ベクターテーブル自体もセクションの設定し直しが必要でしたが、このH8/SXでは一部のRAM領域をハードウエア的に0番地にマッピングするRAMエミュレーションを使用していますので、
__entry(vect=0) void PowerON_Reset(void)
とか、
__interrupt(vect=64) void INT_IRQ0(void)
のvect=??を解除する必要はありません。
あとはプログラムをロード後、適当にブレークを貼ったり、リセット後実行(Shift+F5)してみたり、ステップ(F10)してみたり、メモリダンプしたり、レジスタを参照したり、変数を確認したりと至って普通のソースレベルデバックが可能です。
void main(void) { volatile long i; PM.DDR = 0x08; while(1) { for( i = 0; i < 400000L; i++ ) ; PM.DR.BIT.B3 ^= 1; } }
2010-03-02 01:54
nice!(0)
コメント(17)
トラックバック(0)
早速壊しました。(笑)
実は、読まずにジャンパーピンをたてたものだから、CN6を短絡させてしまい、D1を焼き切りました。現在、代替のショットキーをつけて動作確認しています。秋月品なのでワンサイズ大きいです。
LEDちかちか確認し、モニタープログラム書き込んで、先のLEDちかちかのabs書き込んで、あれ~?動かないや、そうか、メモリーマップ無視しているわ。が昨夜の状態。
早速のメモリーマップのご神託ありがとうございます。
by DAI (2010-03-02 21:57)
> 早速壊しました。(笑)
なんと言う最速っぷり。
お役に立てて良かったです。
実はデバックモニタを作成したK氏とメールでやり取りしているのですが、結構苦労して作ったので、皆さんに使ってもらって喜んで欲しいと。
USBバージョンのデバックモニタは実は開発自体は随分前から行っていますが、こうやって広く人目に出るのは多分初めてではないかな?。
これと同様の物が今度はSH-2Aにも付属する筈です。
こちらも楽しみです。あっちはRAMが1Mbyteもありますし。
by hamayan (2010-03-02 22:36)
D1飛ばしてしまったら、ちょっと面倒でも付け直すならポリスイッチの方が良くないですか?。
by hamayan (2010-03-02 23:44)
と思ったけれどああそうか、これバスパワーの時、VBUSへの接続を切れないのか。
by hamayan (2010-03-02 23:47)
うーん、これ、ダイオードをヒューズの代わりと言うのはかなり苦しくないですかね。
このダイオード、IFが1Aもあり、IFSMは10Aもありますが。
by hamayan (2010-03-02 23:59)
はい、ポリスイッチも考えました。でも、逆流防止のためならダイオードしかないと考えました。
何人かは壊しているでしょうね。同等品あるのかな。
TOREXのホームページにはDigi-Keyでとありますが、取り扱っていても、これだけのためはどうもねえ。
それにしても、PC側の500mAはどうしてたんだろ。PCが壊れなかったのは幸いでしたが、500mAはあくまで公称なのかな。
いっそのこと、実験用ポリスイッチ組み込みUSBケーブル作りましょうか。
by DAI (2010-03-03 00:16)
安全面から言えば、CN6が直接5Vに接続されるのではなく、USBか外部電源かをスイッチとかジャンパーで切り替えられる様にした方が良いのに。
あとこれに使っているレギュレータは注意して扱わないと駄目みたいですね。
入力より出力が0.3V以上高くなると絶対最大定格を超えてしまいます。
VCC33に外部3.3V電源を直接繋ぐ場合はVCC33とVIN5の間にショットキーバリアダイオードを挿入しないと。
by hamayan (2010-03-03 00:43)
DAIさん、注意されていますよ(笑)。
http://toragi.cqpub.co.jp/tabid/310/Default.aspx
by hamayan (2010-03-14 22:59)
おお!ホントだ。
やはりお仲間がいたようですね。
しかし、あの写真のCN6は赤丸じゃなく、×にしてほしいなあ。
で、しっかりサンプルで・・・ヒソヒソ
ところで、LDOですが、データシートのブロック図をみると、ショットキーは入っているようですね。
それで、強引に0.3V以上にすると壊れるよ、ということなのでしょうか。
念のために、このLDOのほぼ真裏にVCC33とVIN5のパターンがあったので、ここに秋月で買ったSS2040FLつけました。
by DAI (2010-03-20 14:41)
こんにちわ、
シリアルモニタが動かないのです。
ROMに書くと動きますがRAM環境で以下のメッセージがでています。
付属のLEDのプログラムです。
もしよろしければ隠されたノウハウ公開してほしいです。
Connected
Power on reset is detected.
Error reading PC value
by 悩む人 (2010-05-21 18:56)
「隠されたノウハウ」は無いです。
特に情報の出し惜しみはしていません。
接続後にリセットが入ったと言うメッセージだとは思いますが、なぜなんですかね。
ちょっと聞いてみます。
by hamayan (2010-05-23 22:16)
ありがとうございます。
Interfaceの付属SH-2基板の方では動作がおそいですがちゃんと動きます。
H8SXのシリアルモニタは何度試しても先のメッセージがでます。
リセット等の割り込みベクタテーブルがどうもおかしい様な気もします。
モニタをROMに何度も書き直してみても駄目です。
公開していただいていますRAM.hsiでも何度もやりました。
付属のLEDサンプルそのままでhsiの変更だけで動きますよね?
by 悩む人 (2010-05-23 23:02)
聞いてみました。返事を下に記載しておきます。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ちょっと原因が掴めません。
ちなみに表示されているメッセージですが、
Power on reset is detected. → モニタプログラムが出力
Error reading PC value → HEWが出力
しています。
つまり、「リセット後実行」のリセット後にHEWとCPUボードの通信が切断され、タイムアウトか何かにより、HEWがエラーを表示しています。
ユーザプログラムの方でモニタの使用領域を破壊しているとか、VBRを変更している等の原因が一番疑われるのですが、LEDのサンプルとなるとその要因も除かれてしまい、ちょっと不明です。もう少し、詳しい情報が必要です。
例えば、
1.リセット後実行ではなく、CPUリセットとGoを使ってみる。
2.CPUリセット後、シングルステップして、動作不良の場所を特定する。
等を実施頂けると助かります。
以上、よろしくお願い致します。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
これはソフトウエアの問題ではなく、ハードウエアの問題も考える必要があるのではないでしょうか。
例えば電源が不安定となっているとか。一応電源電圧の3.3Vがどうなっているか調べてみては如何でしょうか。
ボード事態の不良も考えられますし。あまりおかしいならCQの方で対応してくれると思います。
by hamayan (2010-05-25 09:02)
基本的な所ですが、教えていただけないでしょうか?
CQさんに聞いてもレスポンスないので、
今すぐ使える!H8マイコン基板のシリアルモニタの1655.motをFDTで書き込む場合に
User/Dtata Area と User Boot Area がありますがどちらに書くのでしょうか。
by 1悩む人 (2010-06-03 20:25)
何故か何度やってもFDTのBASICではない方ではAREAを聞いて来ないのですが、User Data Areaで良いと思います。
Bootモードで起動するとBoot Areaから立ち上がり、実行されていない方のROM領域をいじくるって感じでしょうか。
by hamayan (2010-06-06 16:25)
突然済みません。とっとっ....
今更なのですが、H8SX1655用のUSB-Debug-Monitorのドライバー
プログラムは、Windows7-x64では、インストールできないのでしょうか?
CQサイトを探しても詳細が判らないのでググっている内にたどり着いた先
がここでした。
Win7-x64マシンとUSBケーブルをつないで、モニターブログラムは、基板
にFDTを使って書けるのですが、J1をはずしてHEWと接続させても、ポート
を聞いてくるだけで接続出来なかったので、よくよく調べるとWinマシン側が、どうやら、タコっていて、何かドライバーが変です。
再度、「ドライバーの追加」からファイルを指定しても無視されました。
64ビットでは、インストールされないのでしょうか教えて下さい。
会社のE10Aが貸出禁止で家で使えなくなってしまって、デバッグモニター
を考え出した~というセコセコな発想です。(笑)
by jyoushu_tomato (2014-08-27 03:07)
H8から離れすぎていて解らんです。
かふぇるねで聞いた方が確実です。
http://japan.renesasrulz.com/cafe_rene/default.aspx
by hamayan (2014-09-01 12:25)