本講座は、ルネサスエレクトロニクス社(以降、ルネサス)のArm® Cortex®-Mプロセッサ内蔵マイコン RAファミリを使った初心者向けのマイコン入門講座であり、超基本的なマイコンに関する知識を既に習得されている方を対象としています。
超基本的なマイコンに関する知識を学ぶ場合は、APSのWebinar「 マイコンとは何?|マイコン超入門【第1部】」から始めて、「 テキスト応用実習|マイコン超入門【第5部】」までを学習してください。
本講座のゴール
- マイコンの基本的な使い方を理解する。
- マイコンの基本的な仕組みを、周辺機能ごとに理解する。
- マイコンの基本的な動作を、周辺機能ごとに理解する。
本講座の構成
第1回:開発ツール
第2回:CPU(Cortex-M)
第3回:汎用I/O
第4回:割り込み
第5回:汎用タイマ
第4回:割り込みの内容
- 割り込みとは何か?を理解する。
- 割り込みに関する様々な知識を習得する。
- 割り込みの実際の使い方を習得する。
使用機材のご案内
本ハンズオンワークショップを実機にて体験いただくためには、EK-RA6M5 評価キットとPCが必要となります。
サンプルプログラムをe2 studioに取り込む方法も説明します。(今回の実習は、FSPで準備されている割り込みのサンプルプログラムを使います。サンプルプログラムを使わないで、自分でプログラムを作る場合の方法は「第5回:汎用タイマ」で解説します。)
割り込みとは
割り込みとは、何かしらのイベントをきっかけに、現在実行しているプログラムを一時的に中断して、そのイベントに関連する処理を行うことです。そのイベントは割り込み要求と呼ばれます。
割り込み処理を行うルーティーンのことを、メインルーティーンに対して、割り込みサービスルーティーンと呼ぶ場合があります。(メーカーや個人で言い方が異なります。)割り込みサービスルーティーンを実行するハードウェアとソフトウェアを合わせて割り込みハンドラと呼びます。
下図は、時計用のタイマが時間をカウントしていて、1秒ごとに割り込み要求を発生させる例です。割り込み要求が発生すると、マイコンは現在行っている処理を中断して、「時計表示を1秒更新するプログラム」を実行します。更新が終わると、中断していたプログラムを再開します。ここでは「時計表示を1秒更新するプログラム」がサービスルーティーンになります。
割り込み要求を発生させるのはハードウェアです。例えば、タイマ、通信ペリフェラル、A-Dコンバータ、外部端子などです。これらの割り込み要求には各々の処理プログラムが準備されていて、それぞれの割り込み要求が発生したときにCPUがそれらに対応したプログラムを実行します。しかし、タイマ、通信ペリフェラル、A-Dコンバータなどの動作は、それぞれ独立して行われ、CPUのプログラム実行とタイミングを合わせながら動作するわけではありません。通常、マイコンにはCPUは1つしかありませんので、いろいろな処理のプログラムを同時に実行することはできません。そのため、割り込みという概念が必要になります。

図2:そもそも割り込みとは?(時計機能の例)
さらに複雑な割り込みの例を説明します。
A-Dコンバータと通信ペリフェラル(受信)の場合の割り込み処理です。A-Dコンバータ用と通信ペリフェラル(受信)用に2つの割り込みハンドラが必要になります。
まず、A-Dコンバータの変換が終了すると、A-Dコンバータから割り込み要求が生成されます。すると、CPUは実行している処理を中断して、A-Dコンバータの変換データを取り込みます。この時、中断されたプログラムの状態(例えば汎用レジスタの値など)を、一旦メモリ(記憶機能)に保管します。これをPUSH(プッシュ)と呼びます。
A-Dコンバータの変換データを取り込み処理が終わると、先ほど中断した処理に戻って、続きを実行します。この時、先ほどメモリに保管した汎用レジスタの内容などを、元に戻します。これをPOP(ポップ)と呼びます。PUSHとPOPについては、後ほど詳しく説明します。
また、A-Dコンバータと並行して通信ペリフェラルの受信が行われている場合、受信動作が完了すると通信ペリフェラルから割り込み要求が生成されます。そのため、CPUは実行している処理を中断して、通信ペリフェラルの受信データを取り込みます。受信データの取り込みが終わると、先ほど中断した処理に戻って、続きを実行します。
割り込みに似た処理で、「例外処理」と呼ばれるものがあります。ソフトウェアやハードウェアの異常事態のフォールト(Fault)や割り込みが発生した時に、CPUがメインプログラム以外のプログラムを実行する処理を、全部ひっくるめて例外処理と呼んでいます。
したがって、割り込み処理は例外処理の一種だと言えます。例外処理にどの種類の処理を含むかは、各マイコンで定義が違っていて、例えばリセット処理は例外処理に含まれたり、含まれなかったりします。

図3:複数の割り込みの説明(A-Dコンバータ&通信ペリフェラルの例)
割り込み要求が発生して、割り込みハンドラが実行される前に、現在のPC(プログラムカウンタ)やレジスタの状態(これらは、コンテキストと呼ばれる)を、メモリ内のスタック領域に保存します。この動作をPUSHと呼びます。そして、割り込みハンドラが終了して、メインプログラムに戻るときに、保存されたコンテキストをスタックから戻します。この動作をPOPと呼びます。
最近のマイコンでは、割り込みコントローラー(ハードウェア)が、PUSHとPOPを自動的に行いますが、古いマイコンでは、ユーザーがソフトウェアでPUSH命令、POP命令を実行するものもあります。
スタックされるコンテキストの内容はマイコンによって異なります。一般的にはPC(プログラムカウンタ)や汎用レジスタですが、詳細はマイコンの説明書に記載されています。Cortex-Mプロセッサの場合は、R0~R3、R12,R14,R15とxPSRです。
通常、スタックは内蔵RAMに作られます。そして、スタックのアドレスはスタックポインタ(Cortex-Mの場合はR13)で定義されます。もし、割り込みハンドラのプログラムが間違ってスタック領域を書き換えてしまうと、POPされる内容がPUSHされた内容と異なってしまい正常にメインルーティーンに戻れなくなるので、注意が必要ですが、通常は開発ツールが管理してくれますので、ユーザーはあまり気にする必要はありません。

図4:スタック動作(コンテキストの保存)
割り込みの種類
マイコンには、さまざまなペリフェラルが搭載されています。ほとんどのペリフェラルが割り込み要因を持っています前述したタイマ、通信ペリフェラル、A-Dコンバータ、外部端子の他にも、LCD(Liquid Crystal Display:液晶ディスプレイ)コントローラー/ドライバ、DMA(Direct Memory Access)、暗号化回路などがあります。
また、通信ペリフェラルといってもUART (Universal Asynchronous Receiver Transmitter)、SPI(Serial Peripheral Interface)、I2C((Inter-Integrated Circuit)、USB(Universal Serial Bus)、CAN(Controller Area Network)などがあり、それぞれの機能によって割り込みの処理内容が異なります。
例えば、A-Dコンバータの場合、変換結果を取り込みます。通信ペリフェラルは、受信時には受信データを取り込みますが、送信時には送信データをセットします。その他エラーが発生したときのエラー処理も割り込みハンドラが行います。タイマはオーバーフロー、アンダーフローした際の時間に関係する処理や、コンペアマッチ、インプットキャプチャーのイベントが発生した際の処理も行います。
下図に代表的な割り込みハンドラの種類と処理の概要を示します。実際の処理内容はユーザーのアプリケーションで異なります。

図5:割り込みの種類
ひとつの割り込みの処理中に、別の割り込みを受け付けて新たな割り込み処理を行うことがあります。これを多重割り込みと言います。マイコンの仕様にもよりますが、何重にも割り込みを受けつけられるマイコンもあれば、決められた回数しか受け付けられないマイコンもあります。
Cortex-Mの場合は、何重でも受け付けられますが、コンテキストを保存するスタックが有限ですので、スタックの容量に依存してきます。割り込みを何重にも受け付けることをネスティングと呼びます。
この例では、A-Dコンバータの変換データを処理している時に通信ペリフェラルがデータを受け取って、さらなる割り込みを受け付けた場合です。A-Dコンバータの変換データの処理よりも、次々と受け取る通信データの処理の方が重要なので、A-Dコンバータの割り込み処理からさらに通信ペリフェラルの割り込み処理にネスティングしています。

図6:多重割り込みの説明(A-Dコンバータ&通信ペリフェラルの例)
割り込みハンドラ
割り込みハンドラとは、「割り込みを扱う(ハンドルする:handle)機能」という意味です。マイコンでは、ソフトウェアが割り込みを処理するので、一般的な割り込みハンドラとは、割り込みを処理・制御するためのプログラムのことを指します。ただし、ハードウェアを含んでハンドラと呼ぶ場合もあります。
割り込みハンドラのソフトウェアのことを、メインルーティーンに対比して、割り込みサービスルーティーンと呼ぶ場合もあります。そして、割り込みハンドラが動作するモードをハンドラモードと呼びます。
例えば、時計用のタイマが時間をカウントしていて、1秒ごとに割り込み要求を発生させます。するとマイコンは、現在行っている処理を中断して、「時計表示を1秒更新するプログラム」を実行します更新が終わると、中断していたプログラムを再開します。
ここでは「時計表示を1秒更新するプログラム」が割り込みハンドラになります。

図7:割り込みの説明(時計用タイマの例)
マイコンによっては、割り込みハンドラが動作している状態を「ハンドラモード」と呼ぶ場合があります。ArmのCortex-Mプロセッサは、スレッドモードとハンドラモードの2つの動作モードを定義しています。
通常、リセット後にメインプログラムを実行し始める時は、スレッドモードであり、例外処理などが発生したときにハンドラモードに入ります。ここでいうハンドラとは、割り込みハンドラと同じように、例外処理(割り込み、フォールトなど)によって起動される専用プログラムのことを指しています。
多重割り込みが発生するとハンドラモードからハンドラモードへ遷移します見かけ上、ハンドラモードを継続するように見えます。

図8:Cortex-Mのハンドラモード
割り込みが発生した際に、「割り込みハンドラ」を実行するための命令や、アドレスを保存するテーブルをベクタテーブルと呼びます。
Cortex-Mプロセッサのベクタテーブルは0番地から始まります。テーブル内には、「割り込みハンドラ」のアドレス(ベクタ)を記述します。Arm7などの古いタイプのArmプロセッサでは、命令を記述し、その命令を実行して飛び先アドレスにジャンプする方式ですが、Cortex-Mプロセッサでは命令を記述する必要は無く、飛び先アドレスを記述すればハンドラ(ハードウェア)が自動的に、そのアドレスに飛ばしてくれます。
テーブルサイズ(ワード)は、割り込みの入力数+16、最小サイズ(1割り込みの場合)は17ワード、最大サイズ(240割り込みの場合)は256ワードになります。
一般的なマイコンは、ベクタテーブルの最小アドレス部(0番地)にはリセットベクタが割り当てられていますが、Cortex-Mではメインスタック(SP_main)の初期値が割り当てられています。そのため、ソフトウェアの初期ルーティーンでSP_mainの初期化を行う必要はありません。
マイコンのリセット後にSP_mainの値が自動的にR13(SP)に格納されます。0x00から0x3CまではCortex-Mプロセッサ用のベクタになり、0x40以降は、マイコンの周辺機能または、外部からの割り込みに割り当てられています。

図9:ベクタテーブル
NMI
ここでは、ベクタテーブルの中にあったNMIについて解説します。

図10:NMIの位置付け
通常の割り込みは、ユーザーの意図でマスクして、受け付けなくすることができます。しかし、マスクできない割り込みがあります。それがNMIです。
NMI(ノンマスカブル割り込み:Non-maskable interrupt)は、その名の通りマスクできない割り込みです。通常の割り込みでは、割り込み要因が発生しても、その割り込みをマスクして受け付けない設定が可能です。これをマスカブル割り込み(Maskable interrupt)と言います。
しかし、NMIの場合はマスクができず、NMIの割り込み要因が発生した場合には必ず割り込みを受け付けます。そのため、NMIは特殊な割り込みとして扱われます。
NMIは、システムに致命的な障害などが発生した時に使われます。NMIの要因が発生すると、他の割り込みを一切受け付けず、緊急事態対応の割り込みハンドラが起動されて、緊急事態対応のソフトウェアが実行されます。Cortex-Mプロセッサでは、リセットの次に優先順位の高い例外処理として位置付けられています。
例えば、ルネサスエレクトロニクスのRA6M5で、NMIを発生させることができるのは、次の要因です。
- NMI 端子割り込み
- 発振停止検出割り込み
- WDT アンダーフロー/リフレッシュエラー割り込み
- IWDT アンダーフロー/リフレッシュエラー割り込み
- 電圧監視1 割り込み
- 電圧監視2 割り込み
- SRAM パリティエラー割り込み
- SRAM ECC エラー割り込み
- MPU バスマスタエラー割り込み
- TrustZone フィルタエラー割り込み
- キャッシュRAM パリティエラー割り込み
例えば、RA6M5では、メインクロック発振器が停止した場合の緊急対応システムNMIが割り当てられています。発振停止検出機能は、発振停止が検出されると、システムクロックはMOSCなどの他の発振回路に切り変わります。さらに、発振停止検出割り込み要求を発生させることができます。

図11:RA6M5の発振停止検出回路
NMIと言っても、一概に仕様と機能が決まっているわけではありません。これまでは、一般的なNMIの説明でしたが、実際にはマイコンによって扱いが異なります。さまざまなマイコンのNMIの仕様を調べてみると、次のような項目が挙げられます。
最初は、マイコンの仕様上で決められた割り込み要因に割り当てある場合です。NMIが決められた機能に割り当てられており、ユーザーが他の要因を選択できない場合です。
次は、外部端子にNMIを割り当て、ユーザーが割り込み要因をハードウェアで選択できる場合です。外部端子にNMIの機能を設け、ユーザーがハードウェアを使って自由に選択できます。これには次の2種類があります。
(a)NMI端子が専用端子の場合。
(b)NMI端子が汎用IOとの兼用端子の場合。
また、一部のマイコンではNMIの許可ビットを持っているものもあります。それでは、ノンマスカブルではないではないか?と思いますが、実際にそのようなマイコンは存在します。その場合、許可/不許可はソフトウェアで選択できます。
最後は、NMIがない、もしくは代替機能を持つ場合です。NMIの無いマイコンもあります。また、マスクできない割り込みを持っていてもNMIと呼ばず、名称が異なるマイコンもあります。
レベルセンスとエッジセンス
外部端子の割り込み機能を使う時に知っておかなければならない事に、レベルセンスとエッジセンスがあります。ここでは、レベルセンスとエッジセンスの違いについて解説します。
マイコンのようなデジタル回路で信号の変化を検出する方法には、信号の電圧レベルをチェックする方法と、立ち下がり/立ち上がりのような信号の変化点(エッジ)をチェックする方法があります。前者を「レベルセンス」(レベル検出)と呼び、後者を「エッジセンス」(エッジ検出)と呼びます。
割り込み信号などで、割り込みが発生したかどうかを検出する場合は、いずれかの方法が使われており、どちらが使われているかは、必ずマニュアルに記載されています。
レベルセンスの場合、ハイレベル検出またはロウレベル検出が示されており、それらのしきい値電圧がデータシートなどに記載されています。ハイレベル検出の信号の場合、ハイアクティブ信号またはアクティブハイと呼ばれ、ロウレベル検出の信号の場合、ロウアクティブ信号またはアクティブロウと呼ばれます。
割り込み信号の入力バッファは、ヒステリシス特性を持つシュミットトリガバッファが多いため、ロウ側/ハイ側のしきい値電圧は異なります。エッジセンスの場合は、立ち下がり検出または立ち上がり検出が示されており、変化点の電圧もデータシートなどで規定されています。
どちらの場合も、ノイズにより誤検知が発生する可能性があります。多くの場合、ノイズフィルタなどが搭載されているので、マニュアルでノイズ除去機能を確認してください。

図12:信号の検出方法
下図はRA6M5のディープスタンバイモードから割り込みを使って起き上がる時の条件です。マニュアルに「立ち下がりエッジ、または、立ち上がりエッジで解除要求を発生」と書かれていますので、エッジセンスであることがわかります。

図13:エッジセンス割り込みの例(RA6M5の場合)
マイコンの入力信号の電圧レベルには、論理しきい値と呼ばれる論理値の境目の電圧(論理しきい値電圧)があります。マイコンは、この境目の電圧よりも高い電圧をハイレベル、低い電圧をロウレベルと判断します。
割り込みイベントが発生した際に、割り込み信号をハイレベルの論理しきい値よりも高くする場合を、ハイアクティブ信号、またはアクティブハイと呼びます。また、割り込み信号をロウレベルの論理しきい値よりも低くする場合を、ロウアクティブ信号またはアクティブロウと呼びます。
論理しきい値は、単に「しきい値」と省略されることが多いです。ただ、「しきい値」にはMOS(MOSFET:金属酸化膜半導体電界効果トランジスタ、 Metal-Oxide-Semiconductor field-effect transistor)単体の特性の意味も含まれるため、本記事では誤解を生じないように、論理的なハイレベルとロウレベルの境目の電圧を「論理しきい値」と表します。
論理しきい値電圧の規定は、各マイコンのデータシートなど、電気的特性を規定しているドキュメントに記載されています。割り込み信号の入力バッファは、ヒステリシス特性を持つシュミットトリガバッファの場合が多いので、ロウ側/ハイ側の論理しきい値電圧は異なります。論理しきい値電圧の規定は、データシートに記載されています。
下図の場合、ロウ側の論理しきい値電圧は0.3VCCです。VCCは電源電圧なので、例えばVCC が3.0Vの場合、0.3×3.0V = 0.9Vとなります。従ってマイコンは、0.9V以下の割り込み信号をロウレベルの信号と判断します。一方、ハイ側の論理しきい値電圧は0.7VCCなので、0.7×3.0V = 2.1Vとなります。従ってマイコンは、2.1V以上の割り込み信号をハイレベルの信号と判断します。

図14:論理しきい値電圧(RA6M5の場合)
割り込み信号に、急峻なノイズが入ると、ノイズのエッジや電圧レベルを検出してしまい、誤動作を起こす可能性があります。そのため、ノイズをフィルタリングする仕組みがマイコンに内蔵されています。
RA6M5の場合、ノイズフィルタが内蔵されており、例えばNMIや割り込み信号では、データシートに「NMI/IRQ ノイズフィルタ」として規定されています。ここに規定されている値以下の短いパルスはノイズとして見なされて、除外されます。そのため、ユーザーは、明確な割り込み信号として規定値を超える幅の信号を使わなくてはなりません。

図15:ノイズフィルタ機能
実習
サンプルプログラムを使った実習
実習では、押しボタンを押すと外部割込みが発生してLEDが点灯または消灯するプログラムを作ります。
EK-RA6M5評価キット上のI/O端子につながれたユーザーボタンS1(P005)を押すと、I/O端子はロウレベルになります。I/O端子のロウレベルをI/Oポートが検知すると、割り込み制御回路経由で、CPUに割り込み要求信号が送られます。CPUは、割り込み要求信号を検知すると、LEDがつながっているI/O端子のレベルを変更して、ハイレベルならロウレベルに、ロウレベルならハイレベルにします。その信号に従って、LEDは点灯したり消灯したりします。
プログラムは、何もしない無限ループを実行し、 I/O端子からの割り込み要求を待ちます。割り込みが起きたら、 I/O端子の出力信号を変化させて、LEDを点灯させたり、消灯させたりします。

図16:実習内容
プログラムは、何もしない無限ループを実行し、 I/O端子からの割り込み要求を待ちます。割り込み要求信号を検知すると、LEDの接続されているP006の出力信号のレベルを反転させます。その後、再び無限ループを実行し、 I/O端子からの割り込み要求を待ちます。

図17:プログラムフロー
今回は、ルネサスエレクトロニクス社のEK-RA6M5評価キット用に準備されている割り込みのサンプルプログラムを使います。割り込みの動作と同時にサンプルプログラムの扱い方を勉強します。
使用するサンプルプログラムは、EK-RA6M5評価キット用に準備されたサンプルプログラムで、ルネサスエレクトロニクスの Webサイト(*2)からダウンロードします。その中のicuの中に有るicu_ek_ra6m5_ep(*3)を使います。
このサンプルプログラムは、ICU HALモジュールAPIの一般的な使用方法を示しています。プロジェクトは、まずICUモジュールを初期化します。そして、ユーザーがプッシュボタンを押して外部割込みをトリガーします。これによりユーザーLEDがトグルします。RA6M5のプッシュボタンは、スイッチS1 (押しボタン)です。
(*2) RA Flexible Software Package (FSP)ソフトウェアパッケージ
の中の設計・開発のサンプルコードのウィンドウの中を下へスクロールすると、EK-RA6M5 Example Project Bundleが出てきますので、これをクリックしてダウンロードしてください。(ユーザー登録が必要です)。ダウンロードしたファイルは展開するといくつものサンプルプログラムのフォルダができます。その中を掘り下げていくと、icuというフォルダが出てきて、その中にicu_ek_ra6m5_epがあります。あとでプロジェクトをインポートする時にicu_ek_ra6m5_epを指定します。
(*3)サンプルプログラムの説明は、 renesas/ra-fsp-examples(*3)にまとめられています。icu_ek_ra6m5_epの詳細は、このページ内でicu/icu_ek_ra6m5_epを探していただいて、クリックするとRead meやソースコードが見られるようになっています。ソースコードの詳細については、このページを読んで勉強してください。また、他にどのようなサンプルプログが準備されているのか探すのにも便利なページです。
では、実際の操作に移ります。e2 studioを開いて、ワークスペースのフォルダを指定します。今回はINTにします。そして、「Welcome to e2 studio」の画面を隠して、「e2 studioのスタート画面」を表示します。

図18:e2 studioの起動
左側のプロジェクト・エクスプローラーの中の「プロジェクトをインポート」を選択します。

図19:サンプルプログラムをインポートする
インポートウィンドウの一般を開けます。その中のRename & Import Existing C/C++ Project into Workspaceを選択します。プロジェクト名を入力します。ここではINTとします。
ルート・ディレクトリーの選択で、インポートするサンプルプログラム(icu_ek_ra6m5_ep)を選択します。選択すると、プロジェクト欄にパスが表示されますので、それを選択して終了します。

図20:サンプルプログラムの指定
左のプロジェクト・エクスプローラーで、INT→src→hal_entry.cと指定(ダブルクリック)して、hal_entryのソースコードを表示します。この時点では、多くのエラー表示がありますが、ビルドするとすべて消えますので、心配無用です。

図21:ソースコードを開ける
上部のツールバーにある小さな「ハンマー」記号をクリックするとプロジェクトがビルドされます。ビルドとはC言語をマシン語に変換することです。完了するとビルド結果がステータスとして表示されます。これでプロジェクトを実行する準備が整いました。

図22:プロジェクトのビルド
サンプルプログラムをダウンロードすると説明書のpdfファイル(例:r20an0619eu0150-ek-ra6m5-exampleprojects.pdf)も一緒にダウンロードされます。また、個々のプログラムに対しては、readme.txtファイルがプロジェクトと同じフォルダに入っていますので、これらを参照してください。英文ですが、そんなに難しい英語ではありませんので、翻訳アプリや翻訳Webなど使えば、簡単に読むことができます。

図23:サンプルプログラムの説明書
PCとEK-RA6M5評価ボードをUSBケーブルで接続すると、USBから給電されて、ボードが起動します。

図24:EK-RA6M5評価キットとPCの接続
デバッグ記号の横にある小さな矢印をクリックし ドロップダウンリストボックスから[デバッグの構成]を選択します。「構成の作成、管理、および実行」の画面で、左側のツリービューのRenesas GDB Hardware Debuggingの下の今回のプロジェクトの名前を選択します。
下部の[デバッグ]をクリックするとデバッガが起動します。

図25:デバッグの構成
[パースペクティブ切り替えの確認]ダイアログが表示されたら、[切り替え]を選択します。
しばらくするとデバッグ画面が開きます。再開ボタンをクリックすると、プログラムはmain()関数のhal_entry()の呼び出し行まで実行されます。再開ボタンをもう一度クリックするとプログラムは実行を継続します。

図26:プログラムの実行
ユーザーボタンS1を押す度に、LEDは点灯と消灯を繰り返します。

図27:LEDの点滅
プログラムを停止するには「停止ボタン」をクリックします。
デバッガとEK-RA6M5評価キットを切り離すには「切り離しボタン」をクリックします。
プログラムを停止し、デバイスをデバッガから切り離したい時は「切り離しボタン」だけをクリックします。
e2 studioを終了するには、メニューからファイルを選んで 終了を選択します。

図28:終了画面
「第4回:割り込み」は、以上です。そもそも割り込みとは何か?種類と使い方、さらに、サンプルプログラムをe2 studioに取り込む方法も詳しくお分かりいただけたと思います。
次回は「第5回:汎用タイマ」です。タイマの基本機能と、PWMなどのタイマの応用機能を説明し、実習を通して実際のタイマの使い方を説明します。









