RL78/G1EのTO00でパルス出力8個の件

お世話になります初心者IKUZOと申します
RL78/G1EのTO00でパルス出力8個のみ出力したいと思います
R_TAU0_Channel0_Start();からたぶん
INTTM00割込みハンドラーにてカウンター確認しまして
R_TAU0_Channel0_Stop();を呼ぶような処理ではないかと思いますが
1.INTTM00割込みハンドラーはどのファイルになりますでしょうか?
2.その中でカウンターが8になっているかどうかは、どのように確認するのでしょうか?

Parents
  • チョコです。
    INTTM00割り込みハンドラーは'r_cg_tau_user.c'と言うファイルに,'r_tau0_channel0_interrupt'と言う関数名で生成されています。
    コード生成しただけでは,関数の入れ物が作られているだけなので,そこのユーザ・コード部に必要な処理を記述してください。
    方形波出力では,1パルスごとに2回割り込みが発生するので,8パルスだと,16回の割り込みをカウントする必要があります。
    そこで,このファイルの頭の方のグローバル変数を定義するところがあるので,そこで’volatile uint8_t g_TM00_count;'のような感じで8ビットの変数を定義しておき,R_TAU0_Channel0_Start();でTM00をスタートする前にこの変数(g_TM00_count)に16を設定しておき,TM00がスタートして,'r_tau0_channel0_interrupt'関数の処理として,この変数(g_TM00_count)をカウントダウンし,0になったら,R_TAU0_Channel0_Stop();を呼んで,TM00を停止,0でなければ,そのまま割り込み処理を終了することになるかと思います。
Reply
  • チョコです。
    INTTM00割り込みハンドラーは'r_cg_tau_user.c'と言うファイルに,'r_tau0_channel0_interrupt'と言う関数名で生成されています。
    コード生成しただけでは,関数の入れ物が作られているだけなので,そこのユーザ・コード部に必要な処理を記述してください。
    方形波出力では,1パルスごとに2回割り込みが発生するので,8パルスだと,16回の割り込みをカウントする必要があります。
    そこで,このファイルの頭の方のグローバル変数を定義するところがあるので,そこで’volatile uint8_t g_TM00_count;'のような感じで8ビットの変数を定義しておき,R_TAU0_Channel0_Start();でTM00をスタートする前にこの変数(g_TM00_count)に16を設定しておき,TM00がスタートして,'r_tau0_channel0_interrupt'関数の処理として,この変数(g_TM00_count)をカウントダウンし,0になったら,R_TAU0_Channel0_Stop();を呼んで,TM00を停止,0でなければ,そのまま割り込み処理を終了することになるかと思います。
Children
  • チョコさんありがとうございます
    下記のようにいたしましたところ、パルスが8個発生しております
    /* Start user code for global. Do not edit comment generated here */
    char r_tau0_channel0_interrupt_count=0;
    /* End user code. Do not edit comment generated here */
    /***********************************************************************************************************************
    * Function Name: r_tau0_channel0_interrupt
    * Description : This function INTTM00 interrupt service routine.
    * Arguments : None
    * Return Value : None
    ***********************************************************************************************************************/
    __interrupt static void r_tau0_channel0_interrupt(void)
    {
    /* Start user code. Do not edit comment generated here */
    if(r_tau0_channel0_interrupt_count < 16){
    r_tau0_channel0_interrupt_count++;
    }else{
    r_tau0_channel0_interrupt_count=0;
    R_TAU0_Channel0_Stop();
    }
    /* End user code. Do not edit comment generated here */
    }