RAマイコンでの割り込み処理

RAマイコン初心者です。

EK-RA2A1 にて S1ユーザスイッチ(P206/IRQ6_A)を使用して

割り込み入力をさせたいと考えています。

プロジェクトは、Bare Metal - Minimal を選択しています。

FSPにてinterruptsのNew User Event を実行し、ICU IRQ6を選択して、

Enter the name of the ISR for the new user event には irq6_callback と名付けました。

vector_data.h に irq6_callback の宣言と#define に IRQ6 の記述が追加され、

vector_data.c にてこの irq6_callback が呼び出されるようになったので、

どこかにvoid irq6_callback(void){  } の本文を追加すればボタンを押したときに

その関数が呼び出されるという認識ですが、正しいでしょうか?

その場合、関数はどこに記載すればよろしいでしょうか?

vector_data.c 自体の改変は do not edit とあるので禁止だと思います。

hal_entry.c の最後のほうに記載しても関数内でブレイクは掛かりませんでした。

hal_entry()関数内で、P206PFS_HA.ISEL = 1 を記載しています。

よろしくお願いいたします。

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

    すみません、実際に使ったことは一度もありませんが、情報としては、GitHubのルネサスさんのリポジトリにたくさんサンプルプログラムが置かれていましたので、一度、参照されてはどうでしょうか。

    github.com/renesas/ra-fsp-examples

    [関連スレッド]

    FreeRTOSの話題ですが、、、

    e2studio FSPの機能を使用したISRの使用方法
    japan.renesasrulz.com/cafe_rene/f/forum21/6831/e2studio-fsp-isr/36683#36683
     
    [追記]

    以下にそれらしきサンプルプロがラムがあったのですが、vector_data.{c, h}というファイルが無いですね、、、大量のサンプルプログラムがあっても、どれも皆、コード生成ツールで作ったものでは無いのかな、、、、

    github.com/renesas/ra-fsp-examples/tree/master/example_projects/ek_ra2a1/icu/icu_ek_ra2a1_ep/e2studio/src
     

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

    あと、EK-RA4W1でのことになってしまいますが(しかも端子割り込みでもないですけど)、もう何度か、かふぇルネで引用している以下の記事は参考になりませんでしょうか。(ちなみに、記事の中に、かふぇルネでの話が追記されていました。)

    Renesas RA:環境構築~シリアル出力時計開発
    qiita.com/omuraisu49/items/b1ea9deb621abf7d030d

    GitHub
    github.com/omuraisu49/serial_clock_ek_ra4w1
     
    [追記]

    この記事のzipファイルを解凍しても、vector_data.{c, h}というファイルは無いですね。(何だろう、、、) あと、hal_entry.cにコードを全て記述されていますね。

  • NoMaYさん、ありがとうございます。
    情報不足ですみません。
    vector_dataファイルですが、言語はC、RTOSは No RTOS を選択しているので、FSPの振る舞いが異なるのかもしれません。FSPのinterruptsで入力したISR名をファイル検索したところ、ra_genディレクトリの直下にありました。

    初めてのe2studio、初めてのgcc、初めてのRA(ARM)のため、自動生成されるプロジェクト構成も分からず手探りの状態です。割り込みの仕組みがRX系等と大きく異なることが分かり、困っている状態です。
    #pragma interrupt irq6_callback ((vect=**)) のように1行で記述できれば良いのですが。

    教えて頂いた「環境構築~シリアル出力時計開発」の動画を拝見しましたが、
    hal_entry.c の中に、空の user_uart_callback 関数が自動生成されている感じですね。残念ながら、当方が作成したプロジェクトでは、FSPにてIRQ追加後もそのような関数は hal_entry.c の中に追加されませんでした。
    よろしくお願いいたします。

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

    > FSPのinterruptsで入力したISR名をファイル検索したところ、ra_genディレクトリの直下にありました。

    あぁっ、ひょっとして、生成されるフォルダとして ra, ra_gen, src の3つがあるのではありませんか?そして、vector_data.{c, h}というファイルも ra_gen ディレクトリの直下に生成されているのではありませんか?もしそうなら、3つのフォルダのうちの ra, ra_gen にはユーザが手を加えることがないから、GitHubにもzipファイルにも含めない流儀なのかも知れません、、、

    > 空の user_uart_callback 関数が自動生成されている感じですね。残念ながら、当方が作成したプロジェクトでは、FSPにてIRQ追加後もそのような関数は hal_entry.c の中に追加されませんでした。

    思うに、この場合のセオリー(のような考え方)として、まず真似してみる、のが良いのではないかなぁ、と思いました。実行させる必要は無い訳ですので、練習と割り切って、EK-RA4W1を持っていなくても一度Qiitaの記事と同じ操作をされてみてはどうでしょうか?

  • NoMaYさん、ありがとうございます。Qiitaの記事をもう一度読み直してみましたが、Developer assistance という機能があるんですね、勉強になりました。IRQの該当機能について探してみましたがポートの基本機能のためか、見当たりませんでした。私が見落としてる感じでしょうか。

    >3つのフォルダのうちの ra, ra_gen にはユーザが手を加えることがないから

    ISRにてirq6_callback と名付けた場合、
    vector_data.c に

    #if VECTOR_DATA_IRQ_COUNT > 0
            BSP_DONT_REMOVE const fsp_vector_t g_vector_table[BSP_ICU_VECTOR_MAX_ENTRIES] BSP_PLACE_IN_SECTION(BSP_SECTION_APPLICATION_VECTORS) =
            {
                            [0] = irq6_callback, /* ICU IRQ6 (External pin interrupt 6) */
            };

    vector_data.h に

    /* ISR prototypes */
    void irq6_callback(void);

    とあるので、vector_data.h をincludeしてvoid irq6_callback(void)の本文を記載すれば呼び出されるのかなと思ったのですが、呼び出されない状況です。vector_data.c の記述が有効になっていない感じでしょうか?よろしくお願いいたします。

Reply
  • NoMaYさん、ありがとうございます。Qiitaの記事をもう一度読み直してみましたが、Developer assistance という機能があるんですね、勉強になりました。IRQの該当機能について探してみましたがポートの基本機能のためか、見当たりませんでした。私が見落としてる感じでしょうか。

    >3つのフォルダのうちの ra, ra_gen にはユーザが手を加えることがないから

    ISRにてirq6_callback と名付けた場合、
    vector_data.c に

    #if VECTOR_DATA_IRQ_COUNT > 0
            BSP_DONT_REMOVE const fsp_vector_t g_vector_table[BSP_ICU_VECTOR_MAX_ENTRIES] BSP_PLACE_IN_SECTION(BSP_SECTION_APPLICATION_VECTORS) =
            {
                            [0] = irq6_callback, /* ICU IRQ6 (External pin interrupt 6) */
            };

    vector_data.h に

    /* ISR prototypes */
    void irq6_callback(void);

    とあるので、vector_data.h をincludeしてvoid irq6_callback(void)の本文を記載すれば呼び出されるのかなと思ったのですが、呼び出されない状況です。vector_data.c の記述が有効になっていない感じでしょうか?よろしくお願いいたします。

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

    srcフォルダにはhal_entry.cしか生成されない、とか、vector_data.{c, h}というファイルはra_genフォルダに生成される、とか、私にも分かってきて、以下のGitHubのルネサスさんのリポジトリのサンプルプログラムもそういうものだと分かってきたので、次はそのサンプルプログラムのソースを真似されるのが良いのではないかと思うのです。

    github.com/renesas/ra-fsp-examples/tree/master/example_projects/ek_ra2a1/icu/icu_ek_ra2a1_ep/e2studio/src
     
    [追記]

    話が見えてきた今となっては、GitHubの使い方を多少なりとも知っている身としては、GitHubからzipファイルをダウンロードして解凍するか、GitHubDesktopというツールでcloneするか、した後、上記のサンプルプログラムをe2 studioでimportしてコード再生成をしてビルドすれば良かっただけの話、だったのかも知れない、と思い始めました、、、