Copyright (C)SUWA TSUSHIN NETWORK.
All Rights Reserved. TOPへ戻る
スポンサードリンク

No.0206 2026.1.5




ルネサス RA6T2 (7) タイマーでデジタル入力機能を使ってみる





回路図(PDF): 20251228_RA6T2.pdf (1,128 KB)(前回と同じ)

ピンアサイン表(Excel): RA6T2 ピンアサイン 20251228.xlsx (129 KB)(前回と同じ)

ソースファイル: なし


□ 1.入力信号のハイ、ロウレベル幅測定

タイマを使った入力方法を試してみます。
ボタンを押された時間を測定して、一定時間以上の場合は処理を行うようにします。

まずは前回設定した割り込み入力の設定を削除します。
FSPの「Pins」タブを開いて、「Input:ICU」->「ICU3」の「Operation Mode」を「Disabled」にします。





今回はタイマー0を使います。
「Timers:GPT」->「GPT0」の「Operation Mode」を「GTIOCA or GTIOCB」に設定します。
「Input/Output」の「GTIOC0B」を「PB13」に設定します。
以上でピン設定は完了です。次はスタックの追加設定を行います。





「Stacks」タブを開きます。
最初に、前回追加したIRQ割り込み入力のスタックを削除します。





確認メッセージが出ますので、OKをクリックします。





タイマーのスタックを追加します。
「New Stack」をクリックして、「Timers」->「Timer, General PWM (r_gpt)」を選択します。




追加したタイマーのプロパティを開きます。
「Channel」は「0」になっていることを確認します。
「Name」は「g_timer0」のまま使用します。
「Period」は「4000」、「Period Unit」は「Milliseconds」を選択します。
今回は、4000msごとにコンペアマッチさせるようにしました。




割り込みの設定を行います。
「Interrupts」を開いて「Callback」を「gpt_0_interrupt」と入力します。割り込み発生時に呼び出される関数です。
タイマーがコンペアマッチしたときに呼び出される「Overflow/Crest Interrupt Priority」を「Priority 7」に設定します。
ボタンを離したときに発生させる「Capture/Compare match A Interrupt Priority」も「Priority 7」に設定します。
前々回作成したPWM出力でLEDを点灯させるタイマーより上の優先度(小さい値)に設定します。






タイマーをスタートさせる条件を設定します。
「Input」->「Start Source」を開き、以下の項目にチェックを入れます。

「GTIOCB Falling Edge While GTIOCA Low」
「GTIOCB Falling Edge While GTIOCA High」

ボタンを押して、電圧が立ち下がった瞬間にスタートさせます。
GTIOCAは今回使用せず、値は不定なので両方チェックします。





タイマーをストップさせる条件を設定します。
「Stop Source」を開き、以下の項目にチェックを入れます。

「GTIOCB Rising Edge While GTIOCA Low」
「GTIOCB Rising Edge While GTIOCA High」

ボタンを離して、電圧が立ち上がった瞬間にストップさせます。





タイマのカウント値をクリアする条件を設定します。
「Clear Source」を開き、以下の項目にチェックを入れます。

「GTIOCB Falling Edge While GTIOCA Low」
「GTIOCB Falling Edge While GTIOCA High」

タイマースタート時にカウント値をクリアします。





キャプチャーAイベント割り込みを発生させる条件を設定します。
「Capture A Source」を開き、以下の項目にチェックを入れます。

「GTIOCB Rising Edge While GTIOCA Low」
「GTIOCB Rising Edge While GTIOCA High」

ボタンを離して、電圧が立ち上がった瞬間にイベント割り込みを発生させます。

以上で設定完了です。コード生成をして完了です。
次にhal_entry.cのコードを追記修正します。





hal_entry関数です。
前回追加した、R_ICU_ExternalIrqOpen関数と、R_ICU_ExternalIrqEnable関数を削除します。
今回追加したタイマのOpen関数とEnable関数を追加します。
タイマーのスタートはボタンを押したときの立ち下がりで発生させるため、 Start関数ではなくタイマーを使用可能な状態にするEnable関数を実行します。



hal_entry関数





今回はルネサスのサンプルコードを参考にしたため、サンプルと同じように タイマーのコンペアマッチ(オーバーフロー)カウンタとパルス幅のカウント値をグローバル変数として追加しました。

<参考文献>
RA Flexible Software Package Documentation Release v6.3.0
GPT Input Capture Example
https://renesas.github.io/fsp/group___g_p_t.html#um_timer_capture_pulse_width






今回追加したタイマーの割り込み入力です。
RL78マイコンのようにスタック機能として準備しておいてくれれば良いのですが、 処理は自分で書く必要があります。

今回の割り込みでは、コンペアAのイベント(TIMER_EVENT_CAPTURE_A)と、タイマーのコンペアマッチ(TIMER_EVENT_CYCLE_END)の2種類が発生するため、if文で判定しています。

TIMER_EVENT_CAPTURE_A 発生時が、ボタンが離されたときになるので、 その時にボタンが押された時間を算出します。

R_GPT_InfoGet()関数でボタンが押されていたカウント値と、カウントクロックを取得します。

関数から取得したカウント値と、g_capture_overflows値からタイマーがコンペアマッチしたカウント回数の合計値を求めます。 関数から取得したクロック周波数の単位は「Hz」ですので、合計のカウント値をクロック周波数で割ってカウント時間を求めます。

ボタンが押された時間が1.6sec以上のとき、LチカをON/OFFする処理を実行します。
と少々複雑な処理になってしまいました。
メンドクサイので、簡単に設定して使えるスタックをルネサスさんに作って欲しいですね。
以上でコードの追記修正は完了です。

プロジェクトをビルドして、デバッグでマイコンを動作をさせます。前回と同じようにボタンを押したときにLチカがONになり、もう一度ボタンを押すとLチカがOFFになります。



gpt_0_interrupt関数





次は、CAN通信を動かしてみましょう。



次のレポート
>> ルネサス RA6T2 (8) CAN通信回路を作成する



前のレポート
<< ルネサス RA6T2 (6) デジタル割り込み入力の方法


スポンサードリンク

TOPへ戻る


ご利用条件
 Copyright (C)SUWA TSUSHIN NETWORK. All Rights Reserved.