PDG2で提供していない周辺機能を使ったとき割込み設定処理は?

RX63N cs+ PDG2を使用しています。

PDG2で提供していない周辺機能を使ったとき割込み設定処理はどのように組み込んだらよろしいでしょうか。

例えばcanを使いたい時など?

ちなみに割込みを使わなければ、勝手に追加すればよいことはわかりました。

しかし、割込み設定はPDG2にしっかり組み込まれているため、悩んでいます。

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

    > 割込み設定はPDG2にしっかり組み込まれている

    これはどういうことを指していますか? PDG2(というかRPDL)のソースの割り込み設定は、以下のように#pragma interruptで行われていて、通常の割り込みベクタテーブル(通常の割り込みベクタ配列)はソース上に存在していません(通常の割り込みでは無く、例外なら、例外ベクタテーブルが存在しますが)ので、上の話と噛み合わないような気がするのです。他方で、グループ割り込みに関しては、以下のようになっていて、ここら辺に何か追加しなければならない場合は、確かに少し面倒ですけれども。

    通常の割り込みの例1

    Interrupt_SCI.c

    #if FAST_INTC_VECTOR == VECT_SCI0_RXI0
    #pragma interrupt Interrupt_SCI0_RXI0(vect=VECT_SCI0_RXI0, fint)
    #else
    #pragma interrupt Interrupt_SCI0_RXI0(vect=VECT_SCI0_RXI0)
    #endif
    void Interrupt_SCI0_RXI0(void)
    {
    以下省略

    通常の割り込みの例2

    Interrupt_SPI.c

    #if FAST_INTC_VECTOR == VECT_RSPI0_SPRI0
    #pragma interrupt Interrupt_RSPI0_SPRI0(vect=VECT_RSPI0_SPRI0, fint)
    #else
    #pragma interrupt Interrupt_RSPI0_SPRI0(vect=VECT_RSPI0_SPRI0)
    #endif
    void Interrupt_RSPI0_SPRI0(void)
    {
    以下省略

    グループ割り込みの例

    Interrupt_INTC.c


    #if FAST_INTC_VECTOR == VECT_ICU_GROUP12
    #pragma interrupt Interrupt_Group_12(vect=VECT_ICU_GROUP12, fint)
    #else
    #pragma interrupt Interrupt_Group_12(vect=VECT_ICU_GROUP12)
    #endif
    void Interrupt_Group_12(void)
    {
        do
        {
            /* RSPI0 error interrupt */
            if (ICU.GRP[GRP_RSPI0_SPEI0].BIT.IS_RSPI0_SPEI0 == 1)
            {       
                /* Call the user function */
                if (rpdl_SPI_error_callback_func[0] != PDL_NO_FUNC)
                {
                    rpdl_SPI_error_callback_func[0]();
                }
            }

    途中省略

            /* SCI12 error interrupt */
            else if (ICU.GRP[GRP_SCI12_ERI12].BIT.IS_SCI12_ERI12 == 1)
            {
                if (sci_global[12].RX_Error_callback_func != PDL_NO_FUNC)
                {
                    /* Call the error handler */
                    sci_global[12].RX_Error_callback_func();
                }
                else
                {
                    /* Clear the SSR error flags;
                    Preserve MPBT(b0) and write 1 to reserved bits (b6 and b7)*/
                    SCI12.SSR.BYTE = (uint8_t)((BIT_7 | BIT_6) | (SCI12.SSR.BYTE & (uint8_t)BIT_0));
                }
            }

            /* Call the user function */
            if (rpdl_INTC_group_callback_func[7] != PDL_NO_FUNC)
            {
                rpdl_INTC_group_callback_func[7]();
            }
        }while(ICU.IR[IR_ICU_GROUP12].BYTE != 0x00u);
    }
  • わわいさん NoMaYさん ご回答ありがとうございます。sakuraisanです。最初のご挨拶忘れてました。すみません。

    ご回答をいただいたのですが、まだよく理解していません。

    PDG2を使ったプロジェクトですと、AddFormPDG内にio/cmt/sci/等のフォルダーが作成
    されます。
    さらにi_srcの中にInterrupt_CMT.c等があります。
    ここにInterrupt_CAN.cを作成できればよいのですが、
    Interrupt_CAN.cのソースプログラムの作成方法がわかりません。

    PDG2を使用しないときはintprg.cに追加すればよかったようですが。
    PDG2を使用するとintprg.cが入っていません。

    すみませんが、再度、具体的な方法をお教え願えませんでしょうか。
    よろしくお願いいたします。
  • sakuraisanさん、こんにちは。NoMaYです。

    >PDG2を使用しないときはintprg.cに追加すればよかったようですが。

    この文面をしばらく見ていて、ふと感じたのですが、PDG2を使わずに割り込みを使った経験というもの自体がそもそも無かったりしますか?

  • NoMayさん 返信ありがとうございます。
    たしかにCS+ではPDG2を使いますので使っていませんが、HEWでは使っています。
    この程度の経験では大変なことでしょうか。
    よろしくお願いします。
Reply
  • NoMayさん 返信ありがとうございます。
    たしかにCS+ではPDG2を使いますので使っていませんが、HEWでは使っています。
    この程度の経験では大変なことでしょうか。
    よろしくお願いします。
Children
No Data