見出し画像

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

 前回の続きで、レジスタを書いてI/Oポートを動かす。
 今回はオシロが無くても動かせる。 出力をオープンドレインにし、入力にプルアップ抵抗をつける。

新しく

R_PFS->PORT[0].PIN[12].PmnPFS_b.NCODR = 1; //open drain
R_PFS->PORT[3].PIN[1].PmnPFS_b.PSEL = 0b00000; //no func
R_PFS->PORT[3].PIN[1].PmnPFS_b.PCR = 1; //input pullup

のレジスタを使う。

内容

void setup() {

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

  //LED_L
  R_PFS->PORT[1].PIN[11].PmnPFS_b.PMR = 0; //GPIO
  R_PFS->PORT[1].PIN[11].PmnPFS_b.PDR = 1; //output
  //R_PFS->PORT[1].PIN[11].PmnPFS_b.NCODR = 1; //open drain

  //LED_TX
  R_PFS->PORT[0].PIN[12].PmnPFS_b.PMR = 0; //GPIO
  R_PFS->PORT[0].PIN[12].PmnPFS_b.PDR = 1; //output
  R_PFS->PORT[0].PIN[12].PmnPFS_b.NCODR = 1; //open drain

  //D0
  R_PFS->PORT[3].PIN[1].PmnPFS_b.PMR = 0; //GPIO
  R_PFS->PORT[3].PIN[1].PmnPFS_b.PDR = 0; //input
  R_PFS->PORT[3].PIN[1].PmnPFS_b.PSEL = 0b00000; //no func
  R_PFS->PORT[3].PIN[1].PmnPFS_b.PCR = 1; //input pullup

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

void loop() {

  R_PORT1->PODR_b.PODR11 = 1;
  R_PORT0->PODR_b.PODR12 = 1;
  delay(400);

  R_PORT1->PODR_b.PODR11 = 0;
  R_PORT0->PODR_b.PODR12 = 0;
  delay(400);

  while(R_PORT3->PIDR_b.PIDR1);
}

 Arduinoボード上にあるLED(L,TX)を光らせる。
 電源を入れるとLED_TXが点灯。 続いてD0端子をGNDに落とすと、LED_TXとLED_Lが交互に点滅する。

 参考にするのは前回と同じくR4 MINIMAの回路図Renesas RA4M1グループ ユーザーズマニュアル ハードウェア編
 回路図にSCK LED(LED_L)とTX LEDがあり、それぞれLEDのアノード側とカソード側にマイコンの端子が繋がるので、論理が反転して交互に光る。
 マニュアルで見るところは今回もP425,P429-431。 プルアップ制御では念のためPSELビットで周辺機能を確実にOFFにしている。

「Renesas RA4M1グループ ユーザーズマニュアル ハードウェア編」P430
R_PFS->PORT[3].PIN[1].PmnPFS_b.PSEL = 0b00000; //no func


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