IOポートの設定は、CPU層の「RL78G14_init.c」ファイルに記述していきます。
IOポートの設定は、「ロボットカーとRL78/G14マイコンボードの配線とポート割り付け」で作成したI/Oポート割り付け表をもとに作成していきます。
また、IOポートの設定を行っていきますが、今回のロボットカーで使用しないポートに対しても基本的にすべて設定します。これは、すべての設定値を明確にすることと、設定忘れを防ぐために行います。
ロボットカー用IOポート設定の実装
「RL78G14_init.c」ファイルに、IOポート初期化関数を用意します。
このファイルは、プロジェクト作成時に生成された「hdwinit.asm」の代わりとして使用します。「hdwinit.asm」ファイルの削除と、「RL78G14_init.c」ファイルの追加方法は、「スイッチのON/OFFによりLEDを点灯・消灯させる」に記載しています。
関数名は、戻り値なし、引数なしの「void RL78G14_init_IO_Port( void )」とします。
RL78G14_init.cのIOポート設定の実装内容は次のようにします。
#include "iodefine.h"
static void RL78G14_init_IO_Port( void );
#define RL78G14_INIT_PIOR0 (0x00U)
#define RL78G14_INIT_PIOR1 (0x00U)
#define RL78G14_INIT_P0 (0x02U)
#define RL78G14_INIT_P1 (0x80U)
#define RL78G14_INIT_P2 (0x00U)
#define RL78G14_INIT_P3 (0x00U)
#define RL78G14_INIT_P4 (0x00U)
#define RL78G14_INIT_P5 (0x20U)
#define RL78G14_INIT_P6 (0x00U)
#define RL78G14_INIT_P7 (0x00U)
#define RL78G14_INIT_P12 (0x00U)
#define RL78G14_INIT_P13 (0x00U)
#define RL78G14_INIT_P14 (0x00U)
#define RL78G14_INIT_PU0 (0x00U)
#define RL78G14_INIT_PU1 (0x00U)
#define RL78G14_INIT_PU3 (0x00U)
#define RL78G14_INIT_PU4 (0x01U)
#define RL78G14_INIT_PU5 (0x00U)
#define RL78G14_INIT_PU7 (0x00U)
#define RL78G14_INIT_PU12 (0x00U)
#define RL78G14_INIT_PU14 (0x00U)
#define RL78G14_INIT_PIM0 (0x00U)
#define RL78G14_INIT_PIM1 (0x00U)
#define RL78G14_INIT_PIM3 (0x00U)
#define RL78G14_INIT_PIM5 (0x00U)
#define RL78G14_INIT_POM0 (0x00U)
#define RL78G14_INIT_POM1 (0x00U)
#define RL78G14_INIT_POM3 (0x00U)
#define RL78G14_INIT_POM5 (0x00U)
#define RL78G14_INIT_POM7 (0x00U)
#define RL78G14_INIT_PM0 (0x80U)
#define RL78G14_INIT_PM1 (0x40U)
#define RL78G14_INIT_PM2 (0x00U)
#define RL78G14_INIT_PM3 (0xFCU)
#define RL78G14_INIT_PM4 (0xF1U)
#define RL78G14_INIT_PM5 (0xC0U)
#define RL78G14_INIT_PM6 (0xF0U)
#define RL78G14_INIT_PM7 (0x00U)
#define RL78G14_INIT_PM12 (0xFEU)
#define RL78G14_INIT_PM14 (0x3CU)
#define RL78G14_INIT_PMC0 (0xF3U)
#define RL78G14_INIT_PMC12 (0xFEU)
#define RL78G14_INIT_PMC14 (0x7FU)
#define RL78G14_INIT_ADPC (0x01U)
void hdwinit( void )
{
PIOR0 = RL78G14_INIT_PIOR0;
PIOR1 = RL78G14_INIT_PIOR1;
RL78G14_init_IO_Port();
}
static void RL78G14_init_IO_Port( void )
{
P0 = RL78G14_INIT_P0;
P1 = RL78G14_INIT_P1;
P2 = RL78G14_INIT_P2;
P3 = RL78G14_INIT_P3;
P4 = RL78G14_INIT_P4;
P5 = RL78G14_INIT_P5;
P6 = RL78G14_INIT_P6;
P7 = RL78G14_INIT_P7;
P12 = RL78G14_INIT_P12;
P13 = RL78G14_INIT_P13;
P14 = RL78G14_INIT_P14;
PU0 = RL78G14_INIT_PU0;
PU1 = RL78G14_INIT_PU1;
PU3 = RL78G14_INIT_PU3;
PU4 = RL78G14_INIT_PU4;
PU5 = RL78G14_INIT_PU5;
PU7 = RL78G14_INIT_PU7;
PU12 = RL78G14_INIT_PU12;
PU14 = RL78G14_INIT_PU14;
PIM0 = RL78G14_INIT_PIM0;
PIM1 = RL78G14_INIT_PIM1;
PIM3 = RL78G14_INIT_PIM3;
PIM5 = RL78G14_INIT_PIM5;
POM0 = RL78G14_INIT_POM0;
POM1 = RL78G14_INIT_POM1;
POM3 = RL78G14_INIT_POM3;
POM5 = RL78G14_INIT_POM5;
POM7 = RL78G14_INIT_POM7;
PM0 = RL78G14_INIT_PM0;
PM1 = RL78G14_INIT_PM1;
PM2 = RL78G14_INIT_PM2;
PM3 = RL78G14_INIT_PM3;
PM4 = RL78G14_INIT_PM4;
PM5 = RL78G14_INIT_PM5;
PM6 = RL78G14_INIT_PM6;
PM7 = RL78G14_INIT_PM7;
PM12 = RL78G14_INIT_PM12;
PM14 = RL78G14_INIT_PM14;
PMC0 = RL78G14_INIT_PMC0;
PMC12 = RL78G14_INIT_PMC12;
PMC14 = RL78G14_INIT_PMC14;
ADPC = RL78G14_INIT_ADPC;
}
ロボットカー用IOポート設定の実装の補足
ポート関連のレジスタは、使用しないレジスタ、設定の必要のないレジスタは、マイコンのハードウェアマニュアルで記載しているマイコンのリセット時の初期値のままとしています。
マイコンボードにあるLED0~LED2は今回使用しないため、ポート・レジスタは、HIとして、点灯しないようにしています。
基本的に、「ロボットカーとRL78/G14マイコンボードの配線とポート割り付け」で作成したI/Oポート割り付け表をもとに実装しています。
周辺I/Oリダイレクション・レジスタは、今回、特に機能を切り替えて使用することもないので、初期値のままです。
プルアップ抵抗オプション・レジスタは、入力ポートとなるのは、赤外線センサ受信のみで、特に内蔵プルアップ抵抗を有効にする必要もないので、初期値のままです。
ポート入力モード・レジスタは、入力ポートとなるのは、赤外線センサ受信のみで、電圧が5Vなので、通常入力バッファでよいため、初期値のままです。
ポート出力モード・レジスタは、出力ポートとなるのは、モータドライバのみで、特に、N-chオープン・ドレイン出力にすることもないため、初期値のままです。
ポート・モード・コントロール・レジスタは、アナログに関連するレジスタでもあるので、このIOポートレジスタの処理で設定するか迷ったのですが、今回はアナログを使用することもなく、A/D機能初期化処理を作る必要がなくなったので、ここで設定します。このレジスタは、アナログ入力かデジタル入出力かを設定するレジスタですが、アナログ入力機能を使用しないため、すべてデジタル入出力で設定します。(本マイコンは64ピンなので、PMC02、PMC03、PMC147のみ設定必要です。)
A/Dポート・コンフィギュレーション・レジスタもアナログに関連するレジスタでもあるのですが、こちらも同様にここで設定しますが、アナログ入力はないため、すべてデジタル入出力の設定を行っています。
IOポート設定の実装については、以上となります。