スマート・コンフィグレータ 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
  • 菅原と申します。

    SCIの自動生成等について送信はいいとして受信は固定長受信なので使い物になりません。
    私は最初に出来上がったソースを参考にして、コードを書き直しています。

    受信毎にコールバックするか、リングバッファに入れてくれたらそのまま使えるのですが・・
Reply
  • 菅原と申します。

    SCIの自動生成等について送信はいいとして受信は固定長受信なので使い物になりません。
    私は最初に出来上がったソースを参考にして、コードを書き直しています。

    受信毎にコールバックするか、リングバッファに入れてくれたらそのまま使えるのですが・・
Children
  • Dazs様、ビーコン菅原様  スマートコンフィグレータサポート担当の鈴木です。
    受信は固定長のみサポートしています。割り込みハンドラの書き換えについてはコード生成を実行してしまうと消えてしまうので、再度書き換えが必要です。下記のような方法もご検討ください。
    ja-support.renesas.com/.../17797653

    xxx_Create_Userinitですが、コード生成ではオプションで出力していたのですが、デフォルトで出力するようにしています。使い方としては、周辺機能の初期化時にユーザーが設定したいコードを書いてください。初期化時のコード追加ですので、割り込みハンドラの書き換えには対応できません。

    以上、よろしくお願いします。
  • ビーコン菅原様 、ルネサス 鈴木様

    早々の回答いただけまして、誠にありがとうございます。
    固定長のみのサポートである事や、ナレッジベースでのコード生成時の書き換え対応の方法、良く判りました。参考にさせていただきます。
  • 皆様
    こんにちは、ひろと申します。

    やはり固定長受信用のモジュールだったんですね。

    現在詳細設計中でテストはしていませんが、
    初めに、受信開始(R_Config_SCI?_Serial_Receive)を受信バイト数を1で呼び、
    受信コールバック関数(r_Config_SCI?_callback_receiveend)内で
    再度受信開始(R_Config_SCI?_Serial_Receive)を呼ぶことで
    実現しようと考えていました。

    生成される関数は、「スマート・コンフィグレータ ユーザーズマニュアル RX APIリファレンス編」(r20ut4360jj0100-scapirx.pdf)を見れば分かるのですが
    その関数をどう使うかが書かれていないのでソースファイルを見ながら想像しています。
    使い方が書かれた資料は無いのでしょうか?
  • ひろさん、こんにちは。NoMaYと申します。

    実装したことがある訳では無くて、漠然と思ったことなのですが、受信バイト長を例えば64バイト固定とし、64バイト受信完了で再度受信開始を呼ぶようにし、64バイトのリングバッファを管理するような感じのコードにしてみるのはどうでしょうか?

    受信済みデータ位置を指すポインタ変数は生成されたコードにありますので、そこに読み出し済みデータ位置を指すポインタ変数等を追加し、さらに以下のような関数を実装してみる、というのはどうでしょうか?

    ・ 受信済み(未読み出し)データ数を取得する関数
    ・ Nバイト分を読み出す関数