
APSハンズオン・ワークショップをご愛顧いただき誠にありがとうございます。これから、「Arm® Cortex® -M搭載 ルネサスRAファミリを使ったマイコン入門」を始めます。
本ワークショップで、題材にするのはルネサスエレクトロニクス社(以降、ルネサス)のRAマイコンです。
今回は、「汎用I/O」です

本ワークショップは次のシリーズ構成になっています。次の5つの項目を順次公開していきます。
「開発ツール」
「CPU(Cortex-M)」
「汎用I/O」
「割り込み」
「汎用タイマ」です。
今回は。「汎用I/O」です。汎用I/Oの構成と使い方を解説します。

本ハンズオンワークショップを実機にて体験いただくためには次の機材が必要となります。ルネサス製 EK-RA6M5 評価キットとPCです。

本ハンズオンワークショップのゴールを説明します。
最初に、汎用I/Oの構成を理解していただきます。
次に、汎用I/Oの電気的特性を理解していただきます。
最後に、座学と実習を通して汎用I/Oの使い方を習得していただきます。

本ワークショップは「座学」と「実習」で構成されます。
座学では、汎用I/Oの基礎知識を解説し、実習では実際に汎用I/Oを使ってみます。

汎用I/Oとは、General Purpose Input/Output(汎用入出力端子)の事で、GPIO、汎用ポートなどと呼ばれることもあります。
マイコンメーカによって、呼び名や表記が異なります。
マイコンの外部に接続されたデバイスから信号を受け取ったり、信号を出力したりするのが主な仕事です。
内部は、入力部、出力部、制御部および周辺機能用の回路で構成されています。
ソフトウェアにより任意に入出力方向や電圧レベルを設定できます。

汎用I/Oの用途について解説します。
最初は、電圧出力です。マイコンの電源電圧または汎用I/O専用電源電圧に準じた電圧を出力することができます。逆に、グランドレベル、すなわち0Vを出力することもできます。この機能を使うと汎用I/Oに接続されたLEDを点灯させたり、消灯させたりすることができます。
次に、入力電圧レベルの検知機能が挙げられます。真ん中の図では、スイッチが入っていると汎用I/Oの電位は電源電圧と同じになり、入っていないと0Vになります。このように汎用I/Oに印加されている電圧を検知し、スイッチの状態を知ることができます。
入力電圧レベルの検知機能と電圧出力機能を使うと、汎用I/Oの入力信号に応じて、出力信号を変化させることができるので、例えば、スイッチを押すとLEDが点灯するというような制御が可能です
すこし高級な機能では、周辺デバイスとのインタフェースを取ることに使います。
例えば、通信機能やモーター制御やLCD表示などを汎用I/Oを使って行うことができます。

上部は入力回路で下部は出力回路です。
端子の直近に保護回路があり、プルアップ/プルダウン抵抗は入出力で共通です。
入力信号は入ってすぐにデジタル信号とアナログ信号に分かれます。
アナログ信号は入力電圧値が変わらないように直接A-Dコンバーターやオペアンプ(Operational amplifier)などのアナログ周辺回路へ入ります。
デジタル信号は、さらにCPUへ行く信号と周辺機能へ行く信号に分かれます。多くの場合は、いったんレジスタなどの回路でラッチされて、処理されます。ラッチとはデータを一時的に保存することです。
出力信号も、デジタル信号とアナログ信号で経路が異なります。
デジタル信号はCPUから来る信号と周辺機能から来る信号で経路が異なりますが、出力制御回路を経て、出力バッファから出力されます。アナログの出力信号はデジタル回路を経由せずに直接端子へつながりますので、出力電圧が変わらずそのまま出力されます。
それぞれの回路は、電源を含め独立していて、相互に干渉しないように作られているため、多くの機能を1つの端子に担わせても問題は発生しません。
端子を入ってすぐのところには、保護回路用のダイオードが付いています。
これは、EOS(Electrical Over Stress)やESD(ElectroStatic Discharge)からマイコンを守るためのものです。一般的には、正電位の高電圧ノイズが入った場合は電源電圧側へ、負電位の場合は、GND側へノイズを逃がす方向にダイオードが付けられています。
しかし、最近のマイコンの汎用I/Oには、5V耐圧の端子があって、電源電圧を3V近辺で使用しても、端子には5Vを印加できます。この場合、図に記載している保護ダイオードでは、端子の5V電源から、マイコンの3V電源に電流が流れてしまいます。そこで、5V耐圧端子の保護ダイオードは一般的な保護回路とは異なる方式を採用しています。
具体的な方式は、各マイコンメーカーで異なる上に、企業秘密なので詳しく説明できませんが、電源側の保護ダイオードを、端子に5V以上が印加されるまではオフのままにしておき、5V以上のノイズ電圧が印加された場合にオンすることで、電源またはGNDに逃がして端子を保護します。
この図では、内蔵のプルアップ/プルダウン抵抗を、スイッチと抵抗の等価回路で記述しましたが、実際はプルアップ抵抗にはPMOS、プルダウン抵抗にはNMOSを使いますどちらのMOSもオン抵抗が数百から数十オームになるような特性に設計しておけば、オンオフのできる抵抗がMOS単体で実現できます。


汎用I/Oだけでなく、マイコンに内蔵されている機能は、レジスタという記憶回路に決められた値を書き込む操作と、レジスタを読み出す操作で制御します。
汎用I/Oであれば、汎用I/Oを制御するレジスタと、出力値を設定するレジスタと、I/O端子から読み込んだ値を保存するレジスタがあり、それらに適切な値を書き込んだり、読み出したりして制御します。
SPIのような通信機能であれば、SPIを制御するレジスタがあり、そのレジスタを設定することにより。通信のモード、通信速度などを設定します。また、送信するデータを設定するレジスタや、読み込んだデータを保存するレジスタがあります。

「しきい値(Threshold)」とは、デジタル論理回路でハイレベルとロウレベルの2値の境をきめる値です。マイコンでは、一般的にMOSがオンする、またはオフする電圧を言います。
CMOSの場合は特に論理しきい値と呼びます、PMOS、NMOS単独の場合は規定された電流値が流れる時のゲート電圧を言います。マイコンを使う際には、主に汎用I/Oの特性として使われます。
データシートでは、電気的特性の中の、DC特性の汎用I/OのVIHとVILとして示されています。

VIHとVILは、データシートで規定されていますが、時々データシートの記述を誤解されているユーザーがいるので、ここではRA6M5の特性(下図)を使って、簡単に説明します。
まずVIH です。VIH Minの意味は、この電圧以上をハイレベルと認識する最低電圧という意味ですしたがって、ここではVCC×0.7(V)以上を入力しないと、汎用I/Oはハイレベルと認識しませんVCCが3Vの場合に、 VIH Minは3V×0.7=2.1Vになります
次にVILです。VIL Maxの意味は、この電圧以下をロウレベルと認識する最高電圧という意味ですしたがって、ここではVCC×0.3(V)以下を入力しないと、汎用I/Oはロウレベルと認識しませんVCCが3Vの場合に、 VIL Maxは3V×0.3=0.9Vになります。



I/O端子につながれたユーザーボタンS1(P005)を押すとI/O端子はロウレベルになります。CPUはI/O端子のロウレベルを検知すると、LEDがつながっているI/O端子をロウレベルにしてLEDを消灯させます。
また、ユーザーボタンS1(P005)を離すとI/O端子はハイレベルになります。
CPUはI/O端子のハイレベルを検知すると、LEDがつながっているI/O端子をハイレベルにしてLEDを点灯させます。
プログラムとしては、汎用I/Oの電圧を読み込み、その値を、そのまま出力すると、ユーザーボタンを使って、LED点灯させたり消灯させたりすることができます。
ここからは、細かい作業に入ります。具体的手順はAPS academy 汎用IO|第3回|マイコン入門(RA編)
( https://www.aps-web.jp/academy/mcu-ra/108945/ )を見てください。細かい手順で詳細に説明しています。
具体的内容については、何枚かのスライドを掲載しておきますので、参考にしてください。




