フェーズ0

GPIOレジスタ(LEDのポート)の値を確認する方法:LEDのON/OFFをPODR/PIDR/PDRで見る(EK-RA8M2)

シリーズ:実験シリーズ(フェーズ0)
この記事の役割:LEDが点かない・動かないときに、I/Oレジスタで「ソフトが出力しているか」「ピンが実際に変化しているか」を切り分けられるようにする。

1. この実験のゴール(合格条件)

次を 自分の手で確認できたら合格です。

  • I/O Registersビューを表示できる(※初回は「その他…」から)
  • PORT6 のレジスタで P600=bit0 を確認できる
  • LED ON/OFF(またはPinWrite)に合わせて、次が切り替わるのを確認できる
    • PODR bit0
    • (できれば)PIDR bit0 / PDR bit0 も確認

ここでの「LEDが光ったか」は必須ではありません。
まずは「レジスタが切り替わる」ことを成功判定にします(光らない理由は切り分けで潰す)。

2. 事前準備(前提)

3. 実験で使うピン(今回の例)

EK-RA8M2のUser LED接続(マニュアル記載):

  • User LED1:P600
  • P600 = Port6 Pin0
    → レジスタでは PORT6 の bit0 を見る

4. 手順

手順1:Pins設定の確認(P600がGPIO出力になっているか)

FSP Configurator(configuration.xml)→ PinsP600 を確認します。

  • Mode:Output mode (Initial Low)
    これでP600が「GPIO出力」として使える状態になり、起動直後の出力はLowになります。
Pin Configuration P600

設定を変更したら、Generate Project Content を実行します。
※すでに設定済みでも、設定が反映されていない疑いがある場合は Generate を実行してOK です。

Generate(生成)後、生成ファイル(例:pin_data.c など)に g_bsp_pin_cfg が出力されている。

手順2:確認用の最小コード(ON/OFF切り替え)

hal_entry() に、P600を切り替えるコードを書きます。

ポイント:ON/OFFの直後で止めて、I/Oレジスタが見れるプログラムにします。

#include "hal_data.h"

void hal_entry(void)  
{  
  while (1)  
  {  
    /* ON側(仮) */  
    R_BSP_PinWrite(BSP_IO_PORT_06_PIN_00, BSP_IO_LEVEL_HIGH);  
    __asm volatile ("nop"); // ←ここで止める(ON側)  

    /* OFF側(仮) */  
    R_BSP_PinWrite(BSP_IO_PORT_06_PIN_00, BSP_IO_LEVEL_LOW);  
    __asm volatile ("nop"); // ←ここで止める(OFF側)  
  }  
}

※P600 → BSP_IO_PORT_06_PIN_00(Port6 Pin0)

手順3:I/O Registersビューを出す(初回は「その他…」)

e² studioを起動した際に、「IO Registers」ウィンドウがどこにも表示されていない場合は、次の手順で表示します。
「ウィンドウ」→「ビューの表示」→「その他」を選択

IO Registersウィンドウ1

一覧から「IO Registers」を選択し、「開く」をクリック

IO Registersウィンドウ2

手順4:PORT6のレジスタを見る(P600=bit0)

  1. PORT6のレジスタの値を確認するために、ターゲットに接続
  2. 最初のsm volatile ("nop");にブレークポイントを設定
  3. デバッグを開始
  4. ブレークポイントで停止したら、「IO Registers」ビューで、次を探す
  • PORT → PORT6
    • その中で次を探す
      • PODR(出力)
      • PDR(方向)
      • PIDR(入力)

※I/O Registers の表示階層は環境により異なります。PODR/PDR/PIDR が直接見える場合も、PCNTR1/PCNTR2 の中にまとまっている場合もあります。

IO Registersウィンドウ PORT6 bit0値

※画像では、「IO Registers」ビューの「選択されたレジスター」タブで必要なレジスタのみを表示しています。

このようにして、レジスタの値を確認していきます。
次の__asm volatile ("nop");にブレークポイントを設定して、デバッグを再開し、同じように「IO Registers」ビューで、PORT6のbit0の値を確認します。

5. 何を見るべきか(最低限)

まずは PODR bit0 だけでOKです。

  • ON側の停止:PODR bit0 が 1
  • OFF側の停止:PODR bit0 が 0

6. 追加で見ると切り分けが強くなる(推奨)

  • PDR bit0:出力になっているか(出力なら1になっています)
  • PIDR bit0(またはPCNTR2 bit0):ピンの今の状態(1/0)

7. 結果(記録)

  • 使用ボード:EK-RA8M2
  • 対象ピン:P600(PORT6 bit0)
  • 確認できたこと:
    • I/O Registersビュー表示
    • PODR bit0 の切り替え
    • PDR bit0 の状態(出力)
    • PIDR/PCNTR2 bit0 の切り替え

8. よくあるつまずき(実験シリーズ向け)

8-1. I/O Registersビューが見つからない

  • ウィンドウ → ビューの表示 → その他… に入っている

8-2. PODRが変わらない

  • 見ているピンが違う(P600以外を切り替えている)
  • Pins設定が反映されていない → Generateを実行

8-3. PODRは変わるのにLEDが光らない

  • ジャンパ短絡が未設定でLEDがピンに接続されていない

9. 次にやること

  • (次)LED点灯の“現象”とレジスタの関係を確認する(Active-Lowの確認)
  • (次)GPIOが変わっているのに外に出ないときの切り分け(ピン機能/PFS)

-フェーズ0