![見出し画像](https://assets.st-note.com/production/uploads/images/142043215/rectangle_large_type_2_a566cd4b17f92ab3f9cb459cd42f29dc.png?width=1200)
レジスタでプログラム 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にしている。
![](https://assets.st-note.com/img/1716811028386-kiwGPmPLV8.png?width=1200)
R_PFS->PORT[3].PIN[1].PmnPFS_b.PSEL = 0b00000; //no func
この記事が気に入ったらサポートをしてみませんか?