E1 と QB-R5F100LE-TB だけを用いて,動作確認を行ってみました。 チャネル 02 とチャネル 03 で生成したワンショット・パルス出力(TO03)をチャネル 0 とチャネ ル 1 の入力に接続して立ち上がりエッジまでの時間と立ち下がりまでの時間を計測します。 プログラムは CubeSuite+のコード生成機能を使用して以下のような指定を行っています。 ・CPU クロック:16MHz ・TM00:パルス間隔測定,立ち上がりエッジ検出 ・TM01:パルス間隔測定,立ち下がりエッジ検出 ・TM02:ワンショット・パルス出力のマスタ(250ns) ・TM03:ワンショット・パルス出力のスレーブ(250ns) ・TM04:インターバルタイマ(100us) RL78/G13 (R5F100LE) P31/TO03 ワンショット・パルス出力 P00/TI00 パルス間隔測定(立ち上がり) P16/TI01 パルス間隔測定(立ち下がり) main 関数では, 以下のように, TM02 と TM03 を起動しておき,TM01 は割り込みを許可して TM04 のインターバルタイマを起動しました。 (TM01 と TM04 以外は割り込みをマスク) R_TAU0_Channel2_Start(); TMIF01 = 0U; TMMK01 = 0U; TMIF00 = 0U; /* clear INTTM01 interrupt flag */ /* enable INTTM01 interrupt */ /* clear INTTM00 interrupt flag */ R_TAU0_Channel4_Start(); while (1U){ NOP(); } 後は,TM04 の割り込みの中で TM00,TM01,TM02 を同時にトリガして,INTTM01(立ち下が りエッジ検出)で HALT が解除されるのを待ちます。 TS0 |= _0001_TAU_CH0_START_TRG_ON | _0002_TAU_CH1_START_TRG_ON | _0004_TAU_CH2_START_TRG_ON; HALT(); DELAY WIDTH TMIF00 TMIF01 = = = = TDR00; TDR01; 0; 0; INTTM01 で HALT が解除されたら,TDR00,TDR01 の値を読み出して変数に保存しています。 この処理を行った結果の画面イメージを下に示します。立ち上がり(遅延)のキャプチャ値が 5, 立ち下がり(遅延+パルス幅)のキャプチャ値が 9 となり,しっかり 250ns(16MHz で 4 クロック 分)の幅のパルスが出力されているのが分かります。参考として,関係するレジスタの設定値も示 しておきます。 コード生成の設定画面は以下のとおりです。 タイマ全体の用途 TM02(マスタチャネル)の設定 TM03(スレーブチャネル)の設定 動作クロックの設定
© Copyright 2024 Paperzz