Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page

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

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

  • チョコです。
    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でなければ,そのまま割り込み処理を終了することになるかと思います。
  • わわいです
    出力パルスの周波数(と言うかパルス間隔)はどんだけでしょうか?
    それが十分遅いなら、パルスごとの割り込みやらコンペアマッチの割り込みでカウンタ止める、という処理が有効ですが、割り込み応答時間よりパルス間隔が短くなるとこういう処理では無理となります
  • In reply to チョコ:

    チョコさんありがとうございます
    下記のようにいたしましたところ、パルスが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 */
    }
  • In reply to わわい:

    わわいさん
    20uSですから。
  • In reply to IKUZO:

    __interrupt static void r_tau0_channel0_interrupt(void)
    {
    /* Start user code. Do not edit comment generated here */
    if(r_tau0_channel0_interrupt_count < 17){
    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 */
    }
    16を17にするとパルスの反転することがなくなりました。
  • In reply to IKUZO:

    チョコさん
    アナログ機能のコード生成はまだないですよね?
  • In reply to わわい:

    チョコです。
    時間が気になるなら,DMAで時間を稼ぐことが考えられますよ。
    TM00でDMA転送可能な領域にあるのは,TDR00レジスタ位なので,15回分は通常の時間のデータにして,16回目(最後のパルスの後)を思い切り長くしておいて,その間でDMA完了の割り込みでTM00を停止させることも考えられます。
    (本当はTM00を停止するトリガレジスタにDMAできればいいのですが,それは不可能なので,TDR00で最後のパルスの後の時間を引き延ばしています。)
  • In reply to IKUZO:

    チョコです。
    >16を17にするとパルスの反転することがなくなりました。
    形波出力では,エッジで割り込みがでるので,どの状態からスタートするかでカウント値を調整することになります。目的のパルス数と出力の状態が得られたらOKと言うことで。
  • In reply to IKUZO:

    IKUZOさん
    スマートアナログ専用のコンフィグツールを使わないとですね。(ツールがCS+に組み込まれて色々できます)
    www.renesas.com/.../sa-designer.html

    Webの波形シミュレータは最近?閉鎖されてしまったようです。
    www.renesas.com/.../smart-analog-renesas-va.html

    シリアル使って例えば、SO出力の初期値を1にしておいて、SO端子から0x55を2回送信するのとかってダメです?
    送信バッファがあるので、1バイト(0x55)送信中にもう1バイト(0x55)を送信すれば、割り込みとかDMA使わずに、ぴったり8パルス作れますし。

  • In reply to IKUZO:

    チョコです。
    聞いたことは無いですね。
    アナログ関係はWebシミュレータ等の別のサポート手段があったはずですが,そこらは使ったことがないので分かりません。
  • In reply to チョコ:

    チョコさん、アドバイスありがとうございます
    DMAでできるのですか、考えてもみませんでした、必要になったらDMA利用を考えてみます
    アナログ関係はWebシミュレータですか、調べてみます。
  • In reply to Kirin:

    Kirinさん、アドバイスありがとうございます
    「シリアル使って例えば、SO出力の初期値を1にしておいて、
    SO端子から0x55を2回送信するのとかってダメです?
    送信バッファがあるので、1バイト(0x55)送信中にもう1バイト(0x55)を送信すれば、
    割り込みとかDMA使わずに、ぴったり8パルス作れますし。」
    そういう方法もありましたね、なるほどと思いました、
    ビットパターンでできますからね、
    とりあえずできましたので。

  • In reply to IKUZO:

    Webシミュレータはないんですね、なんとかレジスターいじってみます、
    スマートアナログ専用のコンフィグツールはインストールしてるんですが、あれはシリアルの設定ツールだと思うのですが、レジスターなので互換性があるのかな、調べてみます。
  • In reply to Kirin:

    チョコです。
    なるほど,CSIですか。
    CSIを使うなら,SOじゃなくて,SCKがいいんじゃないですか。8ビット分でちょうど8クロック分出ます。
  • In reply to チョコ:

    チョコさん
    7ビット必要になる場合もありますね、その場合は?、8ビット以上の場合は?
    それはそうと、アナログ部はシリアルのレジスターでしたね、サンプルソフトがあるので、とりあえずそれを参考にしてみたいと思います。

Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page