初学者です
RL78/G14でポート・モード・レジスタ(PMm)やポート・レジスタ(Pm)と同じように設定を行いたいのですが、マニュアルを読んでも分かりません。
教えて頂きたいと思います。下記のようなものをFPB-RA4E2でe2studioで作成したいと思っています
hal_entry.cの/* TODO: add your own code here */の下に書けばよいのかと思っていますが、
ハードウエアマニュアルの18. I/O ポートを見たのですが、PDRn ビットやPODRn ビットを使うのかと
やってみましたが、シンボルが解決できませんとなり、よくわかりません
よろしくお願いします
例)
RL78/G14
void init(void);
void main(void)
{
init();
while(1)
P1_bit.no2=0;
}
void init(void)
PM1=0x00; //Port1:OUTPUTに設定
P1=0xFF; //出力をHigh
e2studioからプロジェクトを作るとFSPが介在するのでFSPでIOポート設定をすることは忘れないでください。また、main関数ではなく、hal_entry関数からユーザプログラムを追記します。GPIOの出力操作はR_IOPORT_PinWriteが用意されています。あとAPIには入出力の切り替えなどもするAPIが用意されています。どうしてもレジスタを直接叩きたいというこだわりが強い人もいるのはわかりますが、おそらくそれで幸せになれるのは初学者ではないと思います。やり方は用意されていますが、それはここで書くよりr_ioport.cの中身を見た方が早いと思います。
早速、ありがとうございます
以下の通り、Pin Configで出力に変更を行い、initisl出力をHigh(Low)と設定を行い、Generate Project Contentを押下したところ、pin_data.cが変更されておりました
P111の接続先が負論理のLEDのため、initisl出力をHighでは常時点灯、initisl出力をLowは常時消灯となりました
1歩前進することが出来ました
ありがとうございます
{ .pin = BSP_IO_PORT_01_PIN_11, .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) },
⇒{ .pin = BSP_IO_PORT_01_PIN_11, .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH
| (uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_HIGH) },
その先で躓いています
hal_entry関数に単純ですが、以下のプログラムを追記して、LEDを光らせたいと考えたのですが、エラーとなってしまいます
(プログラムにより)ポートの値を設定するにはどのようにしたらよいのでしょうか?
ご教示頂けますか?
よろしくお願いいたします
while (1)
//BSP_IO_PORT_01_PIN_11=1;
I/Oポートの出力をL/Hする方法ですが、
(1)FSPの関数を使う
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_07, BSP_IO_LEVEL_LOW); //P007をL出力
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_07, BSP_IO_LEVEL_HIGH); //P007をH出力
(ポートを出力モードに設定するのは、ハードコピーされている、GUIの端子の設定で出力モードに設定する)
(2)ポートレジスタを叩く
#include "hal_data.h"
R_PORT0->PDR_b.PDR7 = 1; //P007を出力モードに設定(GUIで設定しても可)
R_PORT0->PODR_b.PODR7 = 0; //P007をL出力
R_PORT0->PODR_b.PODR7 = 1; //P007をH出力
どちらかお好きな方で良いかと思います。
ちなみに、RA独自のレジスタで PCNTR3 っていうレジスタがあります。
P003=L
P007=H
の様に、複数のポートを同時に変更したい場合、
(a)ワーク変数を使う方法
tmp = R_PORT0->PODR;tmp &= ~0x0008; //bit3を0にするtmp |= 0x0080; //bit7を1にするR_PORT0->PODR = tmp;
の様な処理を書く事(リード、モディファイ、ライト)がありますが、このような処理がPCNTR3を使うと
(b)PCNTR3を使う方法
R_PORT0->PCNTR3 = 0x00080080;
(前半の0x0008が0にしたいビットを設定、後半の0080が1にしたいビットを設定)
1行で完結します。RAでポートを設定する場合は、便利なレジスタです。
昨日は(1)と(2)を参考にしてプログラムを書いてビルドしたところ、エラーは出ませんでした
本日、デバックしてみようと思います
その上で、書き方について調べて理解しようと思っています
まだまだ、知らないこと・分からないことだらけなので、引き続き、よろしくお願いします