|
前回作成したウォッチドッグのプロジェクトに、デジタル入出力の処理を追加します。
・ボタンが押されている間は、LED1が点灯
・ボタンが押されている間は、LED2の点滅が止まる
という処理にします。
ソースコードは以下のようになります。
@ 入力の設定
マイコンのP402端子を入力として使用するために以下の設定をします。
ハードウェアマニュアル(R01UH0883JJ0100)の 「20. I/O ポート」が対象の仕様です。
「20.2.1 ポートコントロールレジスタ1(PCNTR1/PODR/PDR)」の PDR レジスタにてデジタル端子を「入力として使用するのか、出力として使用するのか」を指定します。マイコンの初期設定では「0:入力ポート」となっているため、この設定は省略可能です。
ソースコードでは以下のように記載します。
R_PORT4->PDR_b.PDR2 = 0; // 入力として使用 P402 SW1
R_PORT4 は、P4xxを指します。PDR2は、今回のポート番号(P402)に対応するレジスタを指します。PDR_bは、レジスタをビット指定で設定するときに使用します。
RAマイコンでは日常的に使う表現ですので、覚えておくと便利です。
以下のようにレジスタ単位で設定することもできます。
R_PORT4->PDR &= 0xFFFB; // 入力として使用 P402 SW1
A 出力の設定
出力は、P106(LED0)、P404(LED1)を使用します。
入力の設定と同じように「20.2.1 ポートコントロールレジスタ1(PCNTR1/PODR/PDR)の PDR レジスタを使用します。
該当するビットを1にすると出力、0にすると入力です。
ソースコードでは以下のように記載します。
R_PORT1->PDR_b.PDR6 = 1; // P106 出力として使用 P402 SW1
R_PORT4->PDR_b.PDR4 = 1; // P404 出力として使用 P402 SW1
以下のようにレジスタ単位で設定することもできます。
R_PORT1->PDR |= 0x0040; // P106 出力として使用 P402 SW1
R_PORT4->PDR |= 0x0010; // P404 出力として使用 P402 SW1
B 入力の読み込み
35行目、44行目で、入力状態の判定を行っています。
デジタル入力の Hi:1、Lo:0 を確認するために使うのが「20.2.2 ポートコントロールレジスタ2(PCNTR2/EIDR/PIDR)」の PIDR レジスタです。
ターゲットボードのSW1は、ボタンが押されたときにLo:0 、ボタンが離されているときにHi:1となるため、
Lo:0 でボタンが押されていると判断できます。
ソースコードでは以下のように記載します。設定と同じように、レジスタ単位で一度に読み込むことも可能です。
if (R_PORT4->PIDR_b.PIDR2 == 0){ // SW1:ON
C 出力のON/OFF
36行目、38行目、46行目で、ポート出力の ON/OFF を行っています。
「20.2.1 ポートコントロールレジスタ1(PCNTR1/PODR/PDR)の PODR レジスタを使用します。
このボードのLEDは、 ON:0、OFF:1 となります。
ソースコードでは以下のように記載します。設定と同じように、レジスタ単位で一度に書き込むことも可能です。
R_PORT1->PODR_b.PODR6 = 0; // LED0: ON
R_PORT4->PODR_b.PODR4 = 1; // LED1: OFF
|