デュアルバンク機能時の割り込み処理について

RX65N(2MB)で、FIT(r_flash_rx)を使用してコードフラッシュの書き換え機能を実装しています。

デュアルバンク機能を用いて、非動作バンクへ書き込む処理をしていますが、

フラッシュのアクセス時に、割り込みが発生するとプログラムが停止してしまいます。

当該箇所を割り込み禁止にすることで期待する処理は実装できるのですが、デュアルバンク機能では

割り込み処理をRAMに置く必要がないという認識でしたので、納得がいっておりません。

この認識は間違っているのでしょうか?

また、デュアルバンクなら動作バンクのフェッチが可能だと思うのですが、r_flash_rx の一部の関数を

RAMに配置する必要があるのは何故なのでしょうか?

Parents
  • YYさん、こんにちは。NoMaYと申します。

    過去、何度かデュアルバンク機能の質問に返答したことがありますが、YYさんの本来こうである筈という認識、と異なるという議論に発展することは無かったです。その認識で合っていて、過去の皆さんもそう出来ていた、ということです。

    自分はデュアルバンク機能をFITデモプログラムでしか使ったことが無いですけれども、デュアルバンク機能搭載品なら自動的にデュアルバンク機能向け設定になる、のでは無かった記憶があります。r_flash_rxのコンフィグレーションを適切な設定にしたり、デバッガでのデバイス選択を適切に選択したり、といったことは必要だったと記憶しています。

    例えば、以下のスレッドでは、r_flash_rxのFITデモプログラムを試して、質問者さんの勘違いが解決した後に、今回の質問のようなことは無かったです。

    r_flash_rx のサンプルについて
    community-ja.renesas.com/cafe_rene/forums-groups/mcu-mpu/rx/f/forum5/7726/r_flash_rx
     

  • NoMaYさん、回答ありがとうございます。

    教えていただいたスレッドにあったサンプルを、e2studio、GCCプロジェクト、RX65N用に改造し、
    CMTのFIT(r_cmt_rx)を追加して、プログラムフラッシュアクセス時の動作を確認しました。

    確かに、割り込み禁止にしなくても、R_FLASH_Erase関数とR_FLASH_Write関数でプログラムが停止することはありませんでした。
    しかし、イレーズ対象のブロックを限定する為に、R_FLASH_Control(FLASH_CMD_ACCESSWINDOW_SET)関数をコールすると、プログラムが停止しました。

    デバッガで処理を追うと、flash_write_faw_reg関数の処理中に割り込みが発生すると、プログラムが停止してしまう様です。
    flash_write_faw_reg関数はデュアルバンク時にRAMに置かれるのですが、RAMに置かれた関数の処理時は割り込み禁止する必要があるという事でしょうか。

  • YYさん、こんにちは。NoMaYです。

    > flash_write_faw_reg関数はデュアルバンク時にRAMに置かれるのですが、RAMに置かれた関数の処理時は割り込み禁止する必要があるという事でしょうか。

    ドキュメントやソースを追ってみないと、とっさには分からないです。週末にでも調べてみます。あるいは、シェルティさんからのリプライが先にあるかも知れません。

Reply
  • YYさん、こんにちは。NoMaYです。

    > flash_write_faw_reg関数はデュアルバンク時にRAMに置かれるのですが、RAMに置かれた関数の処理時は割り込み禁止する必要があるという事でしょうか。

    ドキュメントやソースを追ってみないと、とっさには分からないです。週末にでも調べてみます。あるいは、シェルティさんからのリプライが先にあるかも知れません。

Children
No Data