|
前回作成したデジタル入出力の処理をFSPに置き換えます。
前回のソースコードは以下の通りです。
今回は以下のようにソースコードを変更しました。
灰色が削除した部分、薄いピンク色が変更・追加した部分です。
@ 入力の設定
プロジェクトエクスプローラーに表示されているconfiguration.xmlをダブルクリックして、FSP Configurationを開きます。
マイコンのP402端子を入力として使用するために、Pinsの設定を以下のようにします。
A 出力の設定
出力は、P106(LED0)、P404(LED1)を使用します。
Pinsの設定をそれぞれ以下のようにします。
設定完了後は、必ず [Generate Project Content] をクリックして、ソースコードを生成・反映させます。
B 入力の読み込み
FSPの
R_IOPORT_PinRead 関数
を使用します。
第1引数の ioport_ctrl_t *const p_ctrl は、上のほうで勝手に定義されているのでそのまま使います。
第2引数の bsp_io_port_pin_t pin は、対象のピン番号を指定します。bsp_io_port_pin_t型の定義を確認すると、
BSP_IO_PORT_##_PIN_$$
##・・・ポート番号
$$・・・ピン番号
という命名則で、各ピンが#defineされてその定数を指定するようになっています。
P402端子の場合は、BSP_IO_PORT_04_PIN_02 となります。
第3引数の bsp_io_level_t *p_pin_value は、読み込んだ値を格納する変数をポインタで渡します。
ですので、予めbsp_io_level_t型にて変数を宣言しておく必要があります。
bsp_io_level_t型の定義を確認すると、BSP_IO_LEVEL_LOW、BSP_IO_LEVEL_HIGH の値が返ってくることが分かります。それぞれ0と1です。
ソースコードでは以下のように記載します。
R_IOPORT_PinRead(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_02 , &level) // 入力 P402 SW1
C 出力のON/OFF
FSPの
R_IOPORT_PinWrite 関数
を使用します。
第1引数の ioport_ctrl_t *const p_ctrl は、上のほうで勝手に定義されているのでそのまま使います。
第2引数の bsp_io_port_pin_t pin は、対象のピン番号を指定します。入力と同じです。
第3引数の bsp_io_level_t level は、書き込む値を指定します。値の定義は入力と同じです。
BSP_IO_LEVEL_LOW、BSP_IO_LEVEL_HIGH のどちらかの値を指定します。数字で0もしくは1を指定しても問題ありません。
ソースコードでは以下のように記載します。
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_06 , BSP_IO_LEVEL_HIGH);
もしくは
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_06 , 1); // 出力:ON LED0
FSPでデジタル入出力を行う場合、最初にR_IOPORT_Open関数を呼び出す必要があります。しかしマイコン起動時に呼び出されるhal_entry.c 内の R_BSP_WarmStart関数の中にすでに記述があるので、デジタル入出力のみOpen関数を記述する必要がありません。
今回は、マイコンのハードウェアマニュアルを確認せずにコーディングできました。
しかしFSPの使い方や関数ライブラリを読んで理解する工数が発生しました。
FSPは基本的にブラックボックスであり、モジュールとして自動コード生成やライブラリを使ってマイコンを制御します。
レジスタを直接操作する方法とFSPを使う方法では、信頼性や難易度で一長一短があります。
|