スマート・コンフィグレータ SCIの割り込み

ルネサス 鈴木様 ならびに回答いただける方々 お願いいたします。

 

初めて投稿いたします。

ルネサススターターキットfor Rx231 を使用して機能を試しています。

CS+でコード生成(設計ツール)を使用して来たのですが、この度 スマート・コンフィグレータをインストールして使用しはじめました。

SCIの割り込みの部分ですが、一例として 受信 割り込みの自動生成コードをコピペすると

/***********************************************************************************************************************
* Function Name: r_Config_SCI0_receive_interrupt
* Description  : This function is RXI0 interrupt service routine
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/

#if FAST_INTERRUPT_VECTOR == VECT_SCI0_RXI0
#pragma interrupt r_Config_SCI0_receive_interrupt(vect=VECT(SCI0,RXI0),fint)
#else
#pragma interrupt r_Config_SCI0_receive_interrupt(vect=VECT(SCI0,RXI0))
#endif
static void r_Config_SCI0_receive_interrupt(void)
{
    if (g_sci0_rx_length > g_sci0_rx_count)
    {
        *gp_sci0_rx_address = SCI0.RDR;
        gp_sci0_rx_address++;
        g_sci0_rx_count++;
    }

    if (g_sci0_rx_length <= g_sci0_rx_count)
    {
        /* All data received */
        SCI0.SCR.BIT.RIE = 0U;
        SCI0.SCR.BIT.RE = 0U;
        r_Config_SCI0_callback_receiveend();
    }
}

のようになっています。

①この生成コード(送信の部分も)の中は、ユーザーが追記できる部分がありませんが、

つまり、

/* Start user code for adding. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */  

のパートが含まれていませんが、割込みがおこった際にフラグを立てたりといった追加、独自の処理をしたい場合、どのようにコードを書くのが良いのでしょうか?

ユーザーがどのようにすることを想定しているのでしょうか?

 

②スマート・コンフィグレータの方には、それまで作成されなかった、

void R_Config_SCI0_Create_UserInit(void);

という関数が新たに加わっていますが、これはどういう点から追加されたのでしょうか?

こちらの関数は、中が空で、

void R_Config_SCI0_Create_UserInit(void)
{
    /* Start user code for user init. Do not edit comment generated here */
    /* End user code. Do not edit comment generated here */
}

のようになっているのが判りますが、①の部分を解決するためでしょうか?

追加された目的を知りたいので、回答お願いいたします。

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

    ① r_Config_SCI0_callback_receiveend()やr_Config_SCI0_callback_transmitend()の中にユーザ記述部がありますので、連続受信時や連続送信時の1バイト割り込み毎にユーザ記述動作をさせたい場合は対処出来ませんが、連続受信完了時や連続送信完了時にやれれば良いというものであれば、そこで対処出来ます。

    自分の書いたコード例として近いものでは、送信になってしまうのですが、以下のスレッドに投稿したものがあります。

    RX65NのSCIgのTENDフラグの挙動を調べてみた(RX631のSCIcのTENDフラグの挙動も調べてみた)
    issue_20190212.zip

    RX651 で RSPI + DTC による全二重クロック同期式通信
    issue_20190725.zip

    ② 私は、以下の2つの用途として使えば良いかな、と考えています。

    (1) スマートコンフィグレータの初期化ルーチンでは対処出来ない初期化を行いたい場合。
    例: ボーレートを動的に決められるようにしたい

    (2) スマートコンフィグレータの初期化ルーチンに不具合があって回避したい場合。
    例: 漏れていたレジスタ設定があったら此処に記述する

  • NoMay様

    ①2つのスレッド参照しました。
    遅延の事、グループ割り込みの事、転送データのビット幅を合わせる事など参考になりました。
    今後、通信関連で問題が発生した時には、これらの処理を確認するようにしたいと思います。
    ありがとうございます。

    ②も具体的に事例を書いていただきましてありがとうございます。

    (この通信関係以外の部分で、main.cのファイルで、質問があり、新たに投稿します。
    そちらもアドバイスをいただけますとうれしいです。)
Reply
  • NoMay様

    ①2つのスレッド参照しました。
    遅延の事、グループ割り込みの事、転送データのビット幅を合わせる事など参考になりました。
    今後、通信関連で問題が発生した時には、これらの処理を確認するようにしたいと思います。
    ありがとうございます。

    ②も具体的に事例を書いていただきましてありがとうございます。

    (この通信関係以外の部分で、main.cのファイルで、質問があり、新たに投稿します。
    そちらもアドバイスをいただけますとうれしいです。)
Children
No Data