C言語

ポート機能で使用するレジスタの説明

今回は、RL78/G14マイコンのポート機能の設定について学びます。
マイコンの基本知識」でIOポートは、周辺装置とつながっていることを学びました。
今回使用するマイコン基板に繋がっているSWやLED、センサが特定のピンに繋がっていますが、マイコンはそのことを知りません。
このため、回路図に合わせてポート機能の設定を行う必要がります。

ポート割り付け

基板は、「基板付きキット 絵解き マイコンCプログラミング教科書」、「マイコン基板」を使用することを前提にしたポート割付表を次に示します。

ピン番号端子/機能内容I/O初期値備考
1ANI19BD1020HFV温度センサIN-
2P43未使用OUTLO
3P42未使用OUTLO
4P41未使用OUTLO
5TOOL0EZエミュレータ※1IN/OUT-
6RESETRESET信号、RESETボタンIN-
7P124未使用OUTLO
8P123未使用(入力専用ポート)IN-
9P137未使用(入力専用ポート)IN-
10P122未使用(入力専用ポート)IN-
11P121未使用(入力専用ポート)IN-
12REGCコンデンサ(0.47uF)--
13VSSGND--
14EVSS0GND--
15VDD5V--
16EVDD05V--
17SCLA0I2Cのクロック(加速度センサ)IN-
18SDAA0I2Cのデータ(加速度センサ)IN-
19P62未使用OUTLO
20P63未使用OUTLO
21P31未接続(シールド拡張コネクタD4)OUTLO
22P77未使用OUTLO
23P76未使用OUTLO
24P75SW1IN-
25P74未使用OUTLO
26P73SW2IN-
27P72未接続(シールド拡張コネクタD11)OUTLO
28P71未接続(シールド拡張コネクタD12)OUTLO
29P70未接続(シールド拡張コネクタD13)OUTLO
30P06GC1(照度センサのモード設定)OUTLO
31P05GC2(照度センサのモード設定)OUTLO
32P30未使用OUTLO
33P50未接続※2OUTLO
34P51未接続※2OUTLO
35P52未使用OUTLO
36P53未使用OUTLO
37P54未使用OUTLO
38P55LED1OUTHI
39P17LED0OUTHI
40P16未接続(シールド拡張コネクタD3)OUTLO
41P15未接続(シールド拡張コネクタD5)OUTLO
42P14未接続(シールド拡張コネクタD0)OUTLO
43P13未接続(シールド拡張コネクタD1)OUTLO
44P12未接続(シールド拡張コネクタD10)OUTLO
45P11未接続(シールド拡張コネクタD9)OUTLO
46P10未接続(シールド拡張コネクタD6)OUTLO
47P146未使用OUTLO
48P147不明(回路図を見ても接続先が見つからない)OUTLO
49P27未使用OUTLO
50ANI6照度センサIN-
51ANI5未接続(シールド拡張コネクタA5)IN-
52ANI4未接続(シールド拡張コネクタA4)IN-
53ANI3未接続(シールド拡張コネクタA3)IN-
54ANI2未接続(シールド拡張コネクタA2)IN-
55ANI1未接続(シールド拡張コネクタA1)IN-
56ANI0未接続(シールド拡張コネクタA0)IN-
57P130未使用(出力専用ポート)OUTLO
58P04未接続(シールド拡張コネクタD2)OUTLO
59P03未接続(シールド拡張コネクタD8)OUTLO
60P02未接続(シールド拡張コネクタD7)OUTLO
61P01LED2OUTHI
62P00未使用OUTLO
63P141未使用OUTLO
64P140未使用OUTLO

※1 OCD/VCOM切り替えスイッチ(SW3)をOCD側にして、EZエミュレータと接続します。
※2 OCD/VCOM切り替えスイッチ(SW3)をOCD側にして、未接続にします。

未使用・未接続のポートについては、出力ポートに設定し、初期値はLO(0)にすることにしました。
理由は、入力ポートにしておくと、入力信号が入ってくる可能性があり、未使用のポートをあやまって参照すると誤動作を起こす可能性があるということ、また、貫通電流が流れる可能性を考慮しました。また、出力ポートに設定し、LOを出力しておけば、このときの入力側はOFF状態になるので、電流は流れないかなという考えでこのようにしました。

51ピンから56ピンは未接続ポートですが、アナログ入力ポートに設定しています。これは、照度センサでANI6を使用する場合、ANI0~ANI5もアナログ入力にする必要があるからです。

周辺I/Oリダイレクション・レジスタの設定(PIORx)

周辺I/Oリダイレクション・レジスタは、兼用機能を割り当てるポートを切り替える機能です。
これは、1つの機能が複数のピンに割り当てられている場合、その機能をどちらのピンで使用するかを選択するレジスタです。
わかりにくいですが、例として、今回のポート割り付けの表では、SCLA0機能は、17ピンに、SDAA0機能は、18ピンに割当たっています。このSCLA0は、42ピンに、SDAA0は、41ピンにも割り当てることができるようになっています。
PIOR02というレジスタに 0 を設定すれば、 SCLA0機能は、17ピンに、SDAA0機能は、18ピンに 割り当てられます。
1 を設定すれば、SCLA0機能は、42ピンに、SDAA0機能は、42ピンに 割り当てられます。
この周辺I/Oリダイレクション・レジスタの初期値は 0 です。
そして、今回のSCLA0とSDAA0は、17ピンと18ピンを使用しますので、初期値のままで大丈夫です。

今回は、設定を 1 にするような機能はないため、特に設定する必要はありません。

ポート・モード・レジスタの設定(PMxx)

このレジスタは、ポートを入力モードで使用するのか、出力モードで使用するのかを決めるレジスタです。
0 : 出力モード
1 : 入力モード
となっています。
マイコンと繋がっている周辺装置により設定をすることになります。
今回は、ポート割り付けの表のI/O列の内容が設定値です。INが 1 、OUTが 0 で設定していきます。

ポート・レジスタ(Pxx)

ポートの出力する値を指定するレジスタです。
出力モードのポートの場合は、出力する値を設定することにより、外部に出力されます。
また、入力モードになっているポートは、外部からの入力値が読み取れます。

プルアップ抵抗オプション・レジスタ(PUxx)

入力モードのポートに対して、内蔵プルアップ抵抗を使用するか、しないかを設定するレジスタです。
0 : 内蔵プルアップ抵抗を接続しない
1 : 内蔵プルアップ抵抗を接続する

初期値は、0 ですが、1つだけ 1 となるものがあります。

ここで初めて登場するプルアップ抵抗について知る必要があるのですが、説明だけで1つの記事が書けてしまうくらいになってしまうので、今回は、簡単に説明したいと思います。

プルアップ抵抗とは、何も入力がないときにON状態にする。というものです。つまり、スイッチを押していない状態でもマイコンには抵抗を介して5Vが入力されるようになります。そして、スイッチを押したときは、GND(0V)に繋がるため、0Vが入力されます。
その逆で、プルダウン抵抗というものもあります。こちらは、入力があるときにON状態にするというものです。つまり、スイッチを押している状態で5Vが入力されてONとなり、押していない場合は、GNDに繋がるため、0Vが入力されます。
このプルアップ抵抗やプルダウン抵抗を行う理由ですが、スイッチを放した状態だと入力ポートがどこにも繋がっていない状態となり、外部のノイズなどの影響で意図しない入力が行われてしまう可能性があり不安定な状態となります。プルアップ抵抗やプルダウン抵抗を付けて、必ず5Vもしくは0Vに繋がる状態を作ることによりONやOFFの状態を安定して維持できるようにするためです。
ただし、必ずプルアップ抵抗やプルダウン抵抗が付いているかというとそうでもなく、回路をシンプルにするためや、部品を減らしコスト削減などの目的により付いていない場合もあります。
付いていない場合でも、マイコンの内部でプルアップ抵抗と同じ状態を保つようにできる機能があります。この内蔵のプルアップ抵抗を使用するか、しないかを設定するのがこのレジスタになります。

今回のマイコン基板には、プルアップ抵抗もプルダウン抵抗も付いていないため、スイッチに割当たっているポートに対して、1を設定する必要があります。

ポート入力モード・レジスタ(PIMxx)

入力バッファを設定するレジスタです。
0 : 通常入力バッファ
1 : TTL入力バッファ
初期値は、0 です。
TTL入力バッファは、一般的に、HI(1)となる入力電圧が2.0V以上で、LO(0)となる入力電圧が0.8V以下となります。
通常入力バッファは、一般的に、電源電圧の80%以上でHI(1)となり、電源電圧の20%以下でLO(0)になります。
※ポートや、シリーズによって論理レベルが異なります。
TTL入力バッファを選択すると、HIとLOを判断する入力電圧を低くできますので、電源電圧より低い電圧で動作している外部デバイスの入力信号を受け取れるようになります。

今のところ、TTL入力バッファにする必要もないため、初期値のままでよいです。

ポート出力モード・レジスタ(POMxx)

出力モードを設定するレジスタです。
0 : 通常出力モード
1 : N-chオープン・ドレイン出力モード
初期値は、0 です。
通常出力モードの場合は、HI(1)になると、出力信号は電源電圧となります。LO(0)になると、出力信号はGND(0V)になります。
N-chオープン・ドレイン出力モードの場合、LO(0)になると、出力信号はGND(0V)になるのはかわりませんが、HI(1)になった場合、どこにも繋がっていない(HIでもLOでもない)不定状態となります。これをHi-Z(ハイインピーダンス)といいます。このモードを選択すると、外部のプルアップ抵抗を介して電源電圧よりも低い電圧で動作している外部デバイスに信号を出力することができるようになります。

今回のマイコン基板ではすべて通常出力モードで問題ありません。

ポート・モード・コントロール・レジスタ(PMCxx)

P02(60ピン), P03(59ピン), P120(1ピン), P147(48ピン)のデジタル入出力/アナログ入力を設定するレジスタです。
0 : デジタル入出力
1 : アナログ入力
初期値は、 1 です。

今回のマイコン基板では該当するピンでは、1ピンがアナログ入力で、その他はデジタル入出力となっているため、そのように設定します。

A/Dポート・コンフィギュレーション・レジスタ(ADPC)

A/Dコンバータのアナログ機能/ポートのデジタル入出力に切り替えるレジスタです。
PMCxxのレジスタで設定した以外のピンに対して、アナログかデジタル入出力かを切り替えます。
初期値は、すべてデジタル入出力です。
デジタル入出力とアナログ入力の切り替えは、レジスタのビットの組み合わせによりますので、実際、設定するときに説明したいと思います。

グローバル・デジタル・インプット・ディスエーブル・レジスタ(GDIDIS)

EVDD の電源をオフする時に,EVDD を電源とする入力ポートの入力バッファの貫通電流を防止するレジスタです。
0 : 入力バッファの入力許可
1 : 入力バッファの入力禁止
初期値は、0 です。

ポートに関連するレジスタだったので紹介しましたが、特に禁止にする必要もないため、このレジスタは気にしなくてもよいです。

以上が、ポート機能で使用するレジスタの説明でした。


-C言語