RX610 1MからRX610 1.5Mへの置き替え

RX610 1M(R5F56106)上で動作しているプログラムを

RX610 1.5M(R5F56107)上で動作させたいと考えております。

 

環境はHEWを使用しており、セクションの更新は実施しました。(添付画面がセクション設定画面)

ビルドは異常なく完了したのでですが、R5F56107上で動作させると

未定義の可変ベクター割り込み(ベクター0の割り込み)が発生し、システムダウンが発生してしまいます。

ROM容量が異なるMCUへの置き替えにあたり、セクションの設定以外に実施すべき項目があれば教えて頂けませんか。

 

  • わわいです
    ベクタ番号0というのはリセットベクタですね。
    元のプログラムがなんかおかしいことをしているんじゃないかと思われますが。。
    デバッガがあるなら、ステップ実行でなにが行われてるかを見てみることですねー
  • まはらじゃです。

    >わわいさん
    アドバイスありがとうございます。

    RX610 1M(R5F56106)上で動作しているプログラムを、セクション設定も変えずそのまま
    RX610 1.5M(R5F56107)上で動作させてみると、同じ異常が発生しました。

    1,5M環境で、1Mとしてビルドしたソフトは動かないと思い込んで確認しておりませんでした。
    よくよく考えると1M→1.5Mの場合だと、使っていないところが増えるだけで動作できるはず。

    状況からハード側に問題があるのではないかと踏んでいます。
    意図していないCPUピンに意図しないタイミングで信号が入り、割り込み信号と勘違いしてしまっている。
    ハードの確認を行います。

    ありがとうございました
  • まはらじゃさん、こんにちは。NoMaYと申します。

    >可変ベクター割り込み(ベクター0の割り込み)
    これはBRK命令例外(RXマイコンが0x00を命令コードとして実行した時に起きる0番の無条件トラップ例外)のことですよね。デバッガでスタックの中を調べれば戻り番地(実行した命令コード0x00の次の番地)が分かりますので、そこから逆アセンブルウィンドウでコードを遡っていって原因を調べることになりそうですね。

  • まはらじゃさん、こんにちは。NoMaYです。

    すみません。もしやと思ってハードウェアマニュアルを確認したら、RX610では「予約」なのですね。まはらじゃさんの最初の投稿の「未定義」とは、そういう意味だったのですね。失礼しました。

  • わわいです
    画像を見ると、固定ベクタエリアがないようにみえるので、通常のスタートアップコードは使わず何か特殊なシーケンスで起動させてるように思われるので具体的なアドバイスは難しいですが、、

    こういう場合によくあるのが、どこかの割り込みが入りっぱなしになってしまい、割り込みハンドラが設定されていない/サポートされていないため、割り込みの無限ループになってスタックを食いつぶして暴走に至る、というのがあります
    まー、まずはハードの確認ってのはかわらないですねー
  • まはらじゃさん、こんにちは。NoMaYです。

    前言をひっくり返す連投をして、すみません。(私は、今、ちょっと狼狽しております。)

    ハードウェアマニュアルをBRKの文字列で検索したところ、以下の記載もありました。

    9.5.7 無条件トラップ
    1. プロセッサステータスワード(PSW)の内容をスタック(ISP)に退避します。
    2. PSW のプロセッサモード設定ビット(PM)、スタックポインタ指定ビット(U)、割り込み許可ビット(I)を“0” にします。
    3. 次の命令のプログラムカウンタ(PC)の内容をスタック(ISP)に退避します。
    4. INT 命令の場合は、可変ベクタテーブルからINT 命令番号に対応したベクタを取得します。BRK 命令の場合は、可変ベクタテーブルの先頭番地からベクタを取得します。
    5. 取得したベクタをPC にセットし、例外処理ルーチンへ分岐します。

    ということは、以下の記載と食い違ってしまっていますね。どちらが正しいのかな、、、

    10.3.1 割り込みのベクタテーブル
    表10.4 割り込みのベクタテーブル (1 / 6)
    名称  ベクタ番号  ベクタアドレスオフセット  …すみません、以後は省略します…
    予約  0  0000h  - × × × × × - -
    予約  1  0004h  - × × × × × - -
    予約  2  0008h  - × × × × × - -
    予約  3  000Ch  - × × × × × - -
    予約  4  0010h  - × × × × × - -
    予約  5  0014h  - × × × × × - -
    予約  6  0018h  - × × × × × - -
    予約  7  001Ch  - × × × × × - -
    予約  8  0020h  - × × × × × - -
    予約  9~15  0024h~003Ch  - × × × × × - -

  • ボードを作り直したんじゃ無いんですか?
    小さな変更だから他に影響無いと思った所にバグが有るんじゃないかな。
  • まはらじゃです。

    原因判明しました。
    外部割込みとして使用している複数のピンが、意図しないタイミングでON,OFFを繰り返しておりました。

    結果以下の流れでシステムダウンに落ちてしまっていた模様です。
    複数の外部割込み発生し、多重割り込み処理実施 
    →スタックオーバーフローになり、CPU暴走 
    →Excep_BRK(無条件トラップ)で、システムダウン

    ためしに、異常発生している割り込みだけ禁止にしてみたところ、Excep_BRK発生しないようになりました。

    リカルド様の御推察の通り、ボードを作り直しており、その際の実装に不備があったようです。
    あとはその部分を追っていけば解決できそうです。

    大変助かりました。BRK 命令等今まで意識したことがなく勉強になりました。
    ご協力誠にありがとうございました。