見出し画像

レジスタでプログラム I/Oポート[Arduino UNO R4 MINIMA]

 このソースコードで

void setup() {

  R_PMISC->PWPR_b.B0WI  = 0;
  R_PMISC->PWPR_b.PFSWE = 1;

  R_PFS->PORT[3].PIN[1].PmnPFS_b.PMR = 0; //GPIO
  R_PFS->PORT[3].PIN[1].PmnPFS_b.PDR = 1; //output

  R_PMISC->PWPR_b.PFSWE = 0;
  R_PMISC->PWPR_b.B0WI  = 1;
}

void loop() {

  R_PORT3->PODR_b.PODR1 = 1;
  R_PORT3->PODR_b.PODR1 = 0;
  R_PORT3->PODR_b.PODR1 = 1;
  R_PORT3->PODR_b.PODR1 = 0;
  R_PORT3->PODR_b.PODR1 = 1;
  R_PORT3->PODR_b.PODR1 = 0;
  R_PORT3->PODR_b.PODR1 = 1;
  R_PORT3->PODR_b.PODR1 = 0;

  delayMicroseconds(2);
}

 D0端子からバースト波が出てくる。

トリガホールドオフを調節して見ます
拡大波形(2.4 MHz, duty50%)

説明

 上記ソースコードの内容は、setup()でD0端子(PORT301)をGPIOの出力に設定し、loop()でD0から何回かHi,Lowを出してしばらく待つ、を繰り返す。

 参考にするのはR4 MINIMAの回路図Renesas RA4M1グループ ユーザーズマニュアル ハードウェア編
 回路図ではD0端子の隣にP301_SCI2_RXDと示されており、PORT3の1pinだとわかる。他にもSCI2,RXDの機能があるのかも。
 マニュアルにはこんなことが書かれている↓

「Renesas RA4M1グループ ユーザーズマニュアル ハードウェア編」P436

 この通りにプログラムは書いた。 P425,P429-431に今回使ったレジスタのことが書かれている。

レジスタの書き方

 最初に「R_」を書く。次に来るのはレジスタのページを見て、それを「->」や「.」でつなぐ。 レジスタが選べた。
 そしてレジスタ内のビットを選ぶために「_b.」を足しビット名を書く。
 「R_PORT3->PODR_b.PODR1」が出来る。
「R_PORT3->PODR_b.PODR1 = 1」=「R_PORT3->PODR |= 0x00020000」なので好きな方を。

「Renesas RA4M1グループ ユーザーズマニュアル ハードウェア編」P425

「R_PFS->PORT[3].PIN[1].PmnPFS」これはこう書くものらしい。

この記事が気に入ったらサポートをしてみませんか?