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

No.0204 2026.1.5




ルネサス RA6T2 (5) タイマーでLチカの方法





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

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

ソースファイル: なし


□ 1.タイマーを使う方法

Lチカは、FSPのGPTタイマー機能を使用します。
configuration.xml をダブルクリックして FSP Configurationを開きます。
「Stacks」タブを開きます。右上にある「New Stack」を開いて、「Timers」->「Timer, General PWM (r_gpt)」を選択します。





「g_timer0 Timer, General PWM(r_gpt0」を選択した状態で、プロパティを開きます。
プロパティウィンドウが表示されていない場合、 「ウィンドウ(W)」->「ビューの表示(V)」-> 「プロパティ」を選択すると表示できます。




「General」->「Compare Match」を開きます。
今回は500ms間隔でLEDをON/OFFさせます。
「Period」に「500」と数字を入力します。「Period Unit」は数字の単位を示しますので、「Milliseconds」を選択します。

ちなみにChannelは、使用するタイマーの番号を示します。今回は初期値の0としました。後で9に変更するので、9でもかまいません。Nameは、自動生成される関数等に使われます。通常はChannelと同じ番号を記述します。




「Interrupts」を開き、割り込みに関する設定をします。
「Callback」 は、割り込み発生時に呼び出す関数名を指定します。今回は「gpt_0_interrupt」としました。
次に割り込みのレベルを設定します。 「Overflow/Crest Interrupt Priority」を「Priority8」に設定します。今回は、Disabled でなければ何でも良いです。

以上で設定完了です。最後にコード生成を実行します。




プロジェクトエクスプローラーを確認すると、タイマー関連の関数が色々と生成されています。




関数はマウスカーソルでドラッグ&ドロップして配置します。 最初にタイマー機能を有効にするR_GPT_Open()関数を、 hal_entry()関数の最初のほうに配置します。




配置した状態です。 status 変数が宣言されていないとエラーが出ています。




関数名の部分にマウスカーソルを充てると、その関数のコードが表示されます。
この表示から、戻り値の型が fsp_err_t であることがわかります。




fsp_err_t型で status 変数を宣言しました。これでエラーが消えました。
関数の戻り値は使用しないので、戻り値を代入する部分を削除しても問題ありません。




fsp_err_t を選択して、右クリックでメニューを開いて、「宣言を開く(O)」を選択すると、 この型は何なのかのコードを確認することができます。




構造体が表示されました。これらの値が戻り値として渡されます。




タイマーの状態遷移を示す変数として、timer_swをグローバル変数として宣言します。




hal_entry()関数の記述です。 ボタンが押されたとき、timer_swの値に応じてLEDをON/OFFさせるタイマーをON、もしくはタイマーを止める要求にします。 R_GPT_Start()関数は、タイマーをONにする関数です。引数には何も値を入れずにそのまま呼び出せばOKです。



hal_entry()関数




次にタイマー割込み発生時の処理を記述します。 タイマー割込みの関数は、一番下にある「Callback function definition」をドラッグ&ドロップで貼り付けます。




hal_entry()関数の外に貼り付けます。 今回は一番下に貼り付けました。空の関数の本文が貼り付けられます。




関数は、タイマーに関するすべての割り込みに対して共通で呼び出されます。 何の割り込みで呼び出されたのかは、引数の p_args->event に入っています。 TIMER_EVENT_CYCLE_END はタイマーがコンペアマッチの時に発生したときの値ですので、この値でコンペアマッチかどうか判定できます。

関数の中には、timer_swの値に応じて状態を遷移、もしくはタイマーを止める処理を記述します。
R_GPT_Stop()関数を呼び出せば、タイマーが止まります。 タイマーを止めたら、LEDの点灯をOFFにします。
プロジェクトをビルドして、デバッグでマイコンを動作をさせます。ボタンを押したときにLチカがONになり、もう一度ボタンを押すとLチカがOFFになります。



gpt_0_interrupt()関数 ※タイマーの割り込み関数






□ 2.もう1つのタイマー動作、PWM出力

タイマーの動作に応じてポートをON/OFFさせる処理にしましたが、 タイマーで直接ON/OFFさせる方法があります。具体的にはPWM出力の機能があります。
では、さっそく使ってみましょう。先ほどのタイマーの設定を変更します。

FSP Configurationを開き、「g_timer0 Timer, General PWM(r_gpt0」を選択した状態で、プロパティを開きます。
「Common」の「Pin Output Support」を「Enabled」に変更します。




「General」の「Compare Match」を開き、「Channel」を「9」に変更します。
「Name」も「g_timer9」に変更します。




「Output」の「Custom Waveform」を開き、「GTIOCA Output Enabled」を「True」に変更します。
「Duty Cycle Percent (only applic able in PWM mode)」の値を変更するとON/OFFの時間の割合が変更できます。 今回は初期値の「50」(%)のままにします。




「Interrupts」の「Callback」を「gpt_9_interrupt」に修正します。





「Pins」を開いて、「GTIOC9A」、「GTIOC9B」となっていることを確認します。
他の数字になっている場合、先ほどの「Channel」の値が間違っています。




次にピンの設定を行います。
「Pins」タブを開いて、PB15の「Mode」を「Disabled」にして無効します。




「Timers:GPT」の「GPT9」を開き、「Operation Mode」を「GTIOCA or GTIOCB」を選択します。
「Input/Output」の「GTIOC9A」を「PB15」に変更します。

以上で、設定完了です。コード生成を実行します。




hal_entry.c の中に記述した、PB15(LED_1)の記述を削除もしくはコメントアウトします。




hal_entry()関数の中も、PB15(LED_1)の記述を削除します。
タイマーのチャネル番号を変更したため、 R_GPT_Open関数とR_GPT_Start関数の引数 「&g_timer0_ctrl」 を 「&g_timer9_ctrl」に、「&g_timer0_cfg」 を 「&g_timer9_cfg」 に変更します。
一度関数を削除して、再び関数をドラッグ&ドロップしたほうが確実です。




タイマー割込み関数 gpt_0_interrupt の名前を gpt_9_interrupt と数字部分を手動で変更します。
関数の中も、PB15(LED_1)の記述を削除します。
タイマーのチャネル番号を変更したため、 R_GPT_Stop関数の引数 「&g_timer0_ctrl」 を 「&g_timer9_ctrl」 に変更します。
以上でコードの修正は完了です。

プロジェクトをビルドして、デバッグでマイコンを動作をさせます。最初と同じようにボタンを押したときにLチカがONになり、もう一度ボタンを押すとLチカがOFFになります。今度は500msの50%がON、50%がOFFとなりますので、先ほどの2倍の速さになります。




次もマイコン入門の定番、デジタル割り込み入力を動かしてみましょう。




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



前のレポート
<< ルネサス RA6T2 (4) デジタル入出力の方法


スポンサードリンク

TOPへ戻る


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