可変ベクタテーブルの割り込み

皆様こんにちは、きっくるです

掲題の件、前回に引き続きプログラムをブート領域、フラッシュ領域に分けるように実践中なのですが、

割り込み処理がうまくいかずに詰まっています。

前回のスレッド

japan.renesasrulz.com/.../38961

RXマイコンRX231を使用しております。

フラッシュ領域 プロジェクトのftable.src内一部

.GLB _PowerON_Reset_PC_A
.GLB _r_Config_CMT0_cmi0_interrupt
.GLB _r_Config_CMT1_cmi1_interrupt
.GLB _r_Config_SCI5_NFC_transmitend_interrupt
.GLB _r_Config_SCI5_NFC_receiveerror_interrupt
.GLB _r_Config_SCI5_NFC_receive_interrupt

.SECTION JP,CODE
.ORG FLASH_TABLE
BRA.A _PowerON_Reset_PC_A ; RESET 0xFFFA0100
BRA.A _r_Config_CMT0_cmi0_interrupt ; vect=28 0xFFFA0104
BRA.A _r_Config_CMT1_cmi1_interrupt ; vect=29 0xFFFA0108
BRA.A _r_Config_SCI5_NFC_receiveerror_interrupt ; vect=222 0xFFFA010C
BRA.A _r_Config_SCI5_NFC_receive_interrupt ; vect=223 0xFFFA0110
BRA.A _r_Config_SCI5_NFC_transmitend_interrupt ; vect=225 0xFFFA0114

ブート領域 プロジェクトの可変ベクタテーブルに指定するベクタ番号とアドレスに上記に対応する番号を指定しています

例 28=FFFA0104

プログラムを実行させると、CMT1やCMT0の割り込みは機能するのですが、SCI5 UARTの割り込みがかかりません。

順番を入れ替えたりしてやってみましたが結果は同じでした。

ベースをFITモジュールを使用しているため、アプリケーションノート(R20UT4547JJ0100)と異なるのが原因なのか・・と頭を抱えています。

ちなみに2つに分割する前のプロジェクトではUARTも正常に動いていました。

分割後の動作も、TXD送信で信号出力の確認(オシロ)、相手側の受信も確認済で、各レジスタも特に問題ないように思います。

何かお気づきの点がございましたらお教えいただきたいと思います。

  • きっくる さん、こんにちは。NoMaYです。

    まず、確認したいのですけれど、可変ベクタテーブルに登録した割り込みベクタが指す割り込みエントリアドレスにも来ないですか?デバッガでブレークポイントを設定してもブレークしませんですか?

    ブレークしないのであれば、それはもう、プログラムを分割した時に何かしらミスして、CPUレジスタやら内蔵周辺レジスタやら設定がおかしくなっている、ということではないでしょうか??その観点から確認するとしたら、以下の点はどうなっているでしょうか?

    (1) SCI5の割り込み要求フラグは立っていますか?
    (2) SCI5の割り込み許可フラグは許可になっていますか?
    (3) SCI5の割り込み優先順位は正しく設定されていますか?
    (4) CPUのPSWのIPL値は適切ですか?

    このあたりをデバッガでチェックするとどうなっていますでしょうか?

  • きっくる さん、こんにちは。NoMaYです。

    > (1) SCI5の割り込み要求フラグは立っていますか?

    すみません、少し補足しますと、割り込み要求フラグは割り込みが受け付けられた場合には降りてしまいますので、SCI5側の割り込み発生設定に問題無いかどうか確認する場合には、CPU側で割り込み禁止にした状態で確認しないと自分が何を確認しようとしたか分からなくなるかも知れないので注意が必要ですね。

    何というか、RXマイコンは割り込みを受け付けたら割り込みベクタが指す割り込みエントリアドレスへと飛ぶのですが、その動作は、プログラムを分割しようがしまいが、変わらないですよ。(RXマイコン側からすれば、プログラムが分割されているのかいないのかというのは、全くもって区別出来ないですよね。)

  • NoMaYさん

    こんにちは

    デバッグしてみましたが、現在の状態だとchar[]={~~}で宣言したデータ等RAMエリアがすべて初期化されておらず、

    誤ったデータが送信されていました。

    色々いじっているうちにこのような現象になってしまい、以前の状態に戻らない状態です。。

    デバッグすると、下記のRAM領域セクションの初期化用ルーチンが呼び出しても動作していないようです。

    _INITSCT();

  • きっくる さん、こんにちは。NoMaYです。

    実は、今現在きっくるさんが参照されているアプリケーションノートとは異なるやり方をしているもっと古いアプリケーションノートがあって、自由度はずっと低いですが、もっとずっと簡単なやり方になっている、ブートローダというカテゴリに関するアプリケーションノートがあります。(以下で検索出来ます。) ただ、残念ながら、構成に関しては、「分割」という構成ではなく、ブートローダとアプリケーションでそれぞれが独立しているような構成ですけれども、こちらには目を通されたことはありますでしょうか?

    Google検索: Renesas RX ブートローダ
    www.google.com/search?q=Renesas+RX+ブートローダ