|
|
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) デジタル入出力の方法
|