ルネサス 鈴木様 ならびに回答いただける方々 お願いいたします。
初めて投稿いたします。
ルネサススターターキット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))#endifstatic 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 */}
のようになっているのが判りますが、①の部分を解決するためでしょうか?
追加された目的を知りたいので、回答お願いいたします。
こんにちは。NoMaYです。裏技的な話ですが、RXスマートコンフィグレータのSCI設定で受信をDTCで行うという設定を選択すると、以下の通りのスッカラカンの受信割り込みルーチンが生成されます。この時、DTCコンポーネントを全く生成しない、もしくは、DTCコンポーネントでSCI受信割り込みを扱わない、ようにしておくと、このスッカラカンの受信割り込みルーチンが1バイト受信毎に呼ばれるようになる筈です。後は、ユーザ記述部で何だって書ける、のではないかなと先程気付きました。(裏技的な話ですが、、、)
/******************************************************************************* 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))#endifstatic void r_Config_SCI0_receive_interrupt(void){ r_Config_SCI0_callback_receiveend();}
/******************************************************************************* Function Name: r_Config_SCI0_callback_receiveend* Description : This function is a callback function when SCI0 finishes reception* Arguments : None* Return Value : None******************************************************************************/static void r_Config_SCI0_callback_receiveend(void){ /* Start user code for r_Config_SCI0_callback_receiveend. Do not edit comment generated here */ /* End user code. Do not edit comment generated here */}
[追記]RXスマートコンフィグレータの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))#endifstatic void r_Config_SCI0_receive_interrupt(void){ /* Start user code for r_Config_SCI0_receive_interrupt. Do not edit comment generated here */ /* End user code. Do not edit comment generated here */}