こんにちは HEW2は使用したことがなく、トラ技も持ち合わせていない ので的をはずしているかも知れませんが以下確認してください。 1.RAMに転送するプログラムは、RAM上のアドレスで リンクしたものになっていますか? 2.暴走と聞くとスタック領域を破壊してそうですが、大丈夫 でしょうか?内蔵RAMの狭い領域でプログラムとデータ、 スタックの共存が必要です。 消去関数に飛ぶ前にスタックポインタを再設定するのが 確実です。 3.割り込みはすべて禁止にしていますよね。 4.私も、はまったのですがフラッシュ関連のレジスタのアクセス 前に「フラッシュ制御レジスタのアクセス許可」のビットを 立ててやらないといけません。(BSET.B #7,@FENR) 5.ESUビットセットのところで暴走とありますが、多分その直前 でウオッチドッグをスタートさせていると思います。ウオッチ ドッグの設定に誤りがありリセットがかかっているように思われ ます。 Yoshikazu Abe ----- Original Message ----- From: "Satoshi Shimada" <sasimada@xxxxxxxxxx> To: <h8@xxxxxxx> Sent: Friday, April 18, 2003 8:16 PM Subject: [H8-ML(3000)] H8/3664FユーザモードでのROM消去/書込み > はじめまして。 > 島田と申します。 > > 標記の件で質問です。 > H8を組み込む機械における > 設定値を記憶させるために行おうとしています。 > 以下の様に行ってみましたが上手くいきません。 > ご教授の程よろしくお願いいたします。 > > ・ コンパイラはHEW2(無償版) > ・ 書込み/消去したいデータは128バイト以下 > →H'0400〜H'07FFをデータ用とする。 > ・ まず、消去関数のみ作成(トランジスタ技術2002.3サンプルコード参考) > ・ セクションの設定(開始アドレス) > PResetPRG、PIntPRG→H'0050 > P、C、...→H'0800 > ・ 消去関数のみのセクションを追加し、 > 起動と同時にRAMに転送。 > (H8S、H8/300 C/C++コンパイラ アプリケーションノート8.12参考) > ・ 消去関数はハードウェアマニュアル参考 > ・ メイン関数の最初に消去関数に飛ぶように設定 > > →消去関数でSMEビットを1、EBR1をEB1のみ1に設定する所までは > OKなのですが、ESUビットを1とするとプログラムが暴走?して > その後のプログラムが正常に機能しません。 > > 以上です。アドバイスや、消去/書込み関数のサンプルコード等 > ありましたら宜しくお願いいたします。 > >