【初心者】RA4E2でのI/Oポートの設定

初学者です

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の中身を見た方が早いと思います。

  • > シンボルが解決できませんとなり、よくわかりません
    私も状況が良く分かりませんが、コンパイラのエラーが出ずにビルドできているのであればメッセージを無視しても良いのかと。
    エラーが出ているならヘッダが#includeされていないとか、ヘッダの検索パスが -I オプションで渡されていないとか、そういう問題でしょう。
    何ができて何ができていないのかを整理してみてください。

    Yamamotoさんがおっしゃる通り、FSPのAPIを経由しないでポートをバチバチ叩いたらロクな結果にならないのでそれはやめた方が良いと思いますが。
    FSPについてはRA Beginner's Guideから見るのが良いです。
    FAQ - RAファミリ: 初めてRAファミリのソフトウェア開発を行う時に有用な資料
    https://ja-support.renesas.com/knowledgeBase/21715569

  • 早速、ありがとうございます

    以下の通り、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;

    }

  • 早速、ありがとうございます

    1歩前進出来ましたが、すぐに壁にぶち当たっております

    Yamamotoさんへの返信に詳しい状況を書きましたが、FSPのAPIを経由することでPIN設定は出来たように思います

    但し、操作方法が悪いのか、Pin Configでinitisl出力の設定を変更してpin_data.cで変更を確認しても、デバックしてもエラーはないですがうまう動作したりしないとかがあります

    操作手順も教えて頂けると助かります(RAファミリビギナーズガイドでは見つけられませんでした)

    一部、以下、誤りです(負論理のArduinoのLEDを接続しています)

    誤)initisl出力をHighでは常時点灯、initisl出力をLowは常時消灯

    正)initisl出力をLowでは常時点灯、initisl出力をHighは常時消灯

    よろしくお願いいたします

  • 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)を参考にしてプログラムを書いてビルドしたところ、エラーは出ませんでした

    本日、デバックしてみようと思います

    その上で、書き方について調べて理解しようと思っています

    まだまだ、知らないこと・分からないことだらけなので、引き続き、よろしくお願いします