RX71M の汎用 I/O 設定がうまく出来ません

初めまして gNuco(ぬこ:古いスラングで”猫”の事)と申します。GNUプロジェクトとは全く関係有りません。

RX71M の 汎用I/O設定がうまくいかず困っています。

以下の不具合の解決策が分かる方がおられたら、お助け下さい。なにとぞよろしくお願いいたします。

*********** 代表的な不具合例  *********************

●代表的な不具合の概要 :初期化に関するアプリケーションノート添付のサンプルコードで初期化を行った後、汎用I/Oポート設定を行うと"0", "1" のいずれを力しても "1" しか出力しない。

●実コード :メイン関数
  void main(void) {
          clrsw_i( ); // マスカブル割り込みの停止
          R_INIT_StopModule( ); // 初期化関数1:周辺モジュールの停止
          RINIT_Port_Initialize( ); // 初期化関数2:存在しないポートの処理
          R_INIT_Clock( ); // 初期化関数3:クロック設定

          PORTG.PDR.BIT.B2 = 1; // PG2 出力ポート    【2020/6/22 間違いを修正しました】
          PORTG.PODR.BIT.B2 = 0; // 又は = 1;    【2020/6/22 間違いを修正しました】

          while(1) { }
}

 【2020/6/22 追記】  I/O ポートの設定コードが間違っていたので修正しました。
  hirakuni45 様、fujita nozomu 様 ご両名からご指摘を頂きました。
   修正前のモノは実使用コードを直接コピーしたモノでなく、ペースト後に編集をしており、
  その時に間違いました。
   プログラムに関する質問をするのに、肝心なコード記述が間違っていてはこれを読んでいただいた皆さまに
  ご迷惑をかける事になり全く申しわけありません。今後はこの様な事の無いように勤めます。       【追記 ここまで】
 

 ※ I/O ポートに関する他の設定は、
   デフォルト値のままでも、明示的にデフォルト値を設定しても、結果は同じでした。

●使用環境
  ・マイコン: RX71M _ 176pin R5F571MLDDFC
  ・αプロジェクト社ボード
     ピンは全てプルアップ、又はプルダウン
  ・ツールチェーン: Renesas CCRX v3.01.00
  ・e2studio: V7.7.0 を windows10 で使用
  ・E1 を持っていますが、まだ使えません。アセンブラも分かりません。
  ・出力の確認: オンボードLED、5V NAND を介した LED の点燈・消燈、 及び テスター
●私が思い込んでいる事=間違いの原因かもしれない事
  ・汎用 I/O ポート設定は モジュール停止、クロック設定の影響を受けないはず。
  ・汎用 I/O ポートを 出力設定 するのは 
    ポート方向 PDR, ポートモード PMR, オープンドレイン制御 ODR0/1 、駆動能力制御 DSCR 
    及び PODR だけで、 PDR, PODR 以外はデフォルト値で CMOS 出力ができるはず。  (いくつかは明示的に設定したけれどだめでした)
 
*********** 以上が代表的な不具合例です  ***************

*********** 以下は更に話がややこしくなる不具合例です  ****
●他の不具合例
  コンパイラ、PDR の設定位置等の組み合わせによって、
  不具合症状が 『 "0" しか出力しない』だったり、或いは『"1" しか出力しない』 だったり、
  正常動作したりします。

  ・コンパイラを変えた場合
    上記 CCRX 以外に、GCC、或いは G++11 を使用する。   
    GCC for Renesas RX 8.3.0.201904LF
    ※マスカブル割り込みの停止 clrsw_i( ) は省略しています。
      割り込み関数は、 extern "C" で Cファイルのまま使う他に
       C++ ファイルに修正して使う事も行いました。

  ・3つの初期化関数を、
    上記の様に個々にコールするか、   
    或いは『3つの関数をコールする』関数を作成し、メイン関数でコールするか。
    【2020/6/22 追記】初期化関数を実行せず、I/O ポートの設定だけを行った場合は、
              正常に動作します。 
      

  ・ポート方向レジスタ PDR の設定を、
     3つの初期化関数のコールより前に実行するか、後に実行するか。
     或いは上記の『3つの関数をコールする』関数の前に実行するか、後に実行するか。

  正常動作をする組み合わせでコンペアマッチタイマを使った Lチカ がうまくいかず、割り込みハンドラにポート出力を仕込んで割り込みの可否を確かめようとしました。でも割り込みに問題があるのか、このコードではポート出力に不具合があるのか見分けがつきません。

************** 以上、更に話がややこしくなる不具合例でした ****

●問題の背景 
 当初 GR-SAKURA の RX63N を G++ で使っていました。この時は初期化に、サンプルコードを G++ 用に修正したモノで正しく動作しました。
 しかし周辺機能ピンのやりくりが出来なくなり、データ処理量が多い使い方をする為に速いマイコンとして RX71M に乗り換えました。
 RX63N との違いは、ピン数、クロック速度、メモリウェイト設定 だけという考えで G++11 によるボードの立ち上げを始めたところ、I/O ポート動作でつまづきました。
 CC-RX を使った事はありませんが、GCC, G++ に問題があるかとも考え、今回初めて CC-RX を使って無修正のサンプルコードにポート設定だけを追加しましたが、やはり I/O 出力の不具合があったのでこちらに質問する事を決心しました。。   

 長くなりましたが、おかしなところがあればご指摘ください。よろしくお願いいたします。

Parents
  • gNucoさん、こんにちは。NoMaYと申します。

    > 以下の不具合の解決策が分かる方がおられたら、お助け下さい。

    ちょっと悲しいところですが、そもそもRX63NとRX71Mではソフトウェア開発方法にギャップがあると思うのです。まだRX63Nの頃はゴリゴリとコードを書くという感じでしたが(PDG2というペリフェラルドライバソフトウェア生成ツールがあることはあったのですが使わなかった人も少なくなかったのではないかなぁという印象があります)、RX71Mを含む昨今のRXマイコンでは初期化処理等もろもろをRXスマートコンフィグレータに任せてしまうのがポピュラーなのではないかなぁ、と思うのです。

    今回の一件だけでなくて、今後のことも考えますと、以下のウェブページ等を参考にして、RXスマートコンフィグレータを使うようにして作業をやり直してみるのが良いのではないか、と思うのです。試しに使ってみてはどうでしょうか?

    スマート・コンフィグレータ
    www.renesas.com/jp/ja/products/software-tools/tools/solution-toolkit/smart-configurator.html
     

  • NoMaY様 
      gNuco です。 ご助言、ありがとうございます。

     実はこの1カ月間、思いつく限り色々な実験を繰り返している内に薄々感じていたのが、もしかして『FIT 対応マイコンでは FIT を使え』という事になっているのではないか?、と(Smart Configurator と FIT という言葉の使い分け方がまだ良く分かっていませんが)。また、たまたま GPIO の FIT が提供されているのを見つけた時に『たかだか汎用I/O の設定をヒトに任せるのか?』と思いながらも、開発環境が何やら今までと違う状況になりつつあるという不安が強くなっていました。
     もしこのフォーラムで回答が得られなければとりあえず FIT, Smart Configuratorを試すつもりでいたのですが、NoMaY様のご助言のおかげで安心して Smart Configuratorに移行する確信が得られました。早速試してみます。うまくいけばご報告したいのですが、Smart Configurator はまだ何もわかっていないので今少し時間がかかりそうです。
     ともあれ開発環境の現状が分かり、Smart Configurator という手段がある事が分かったので本当に助かりました。ありがとうございます。
  • gNucoさん、こんにちは。NoMaYです。

    > Smart Configurator と FIT という言葉の使い分け方がまだ良く分かっていませんが

    他に、CGという言葉も出てきますよ。単純に書くと、こんな感じですかね。

    Smart Configurator = CG(コード生成) + FIT(Firmware Integration Technology) + α

    FITを先に見つけた人にとって分かり難いだろうと思うのは以下の点ではないかと思います。

    ・ マイコンのベーシックな機能の操作に関してCGとFITで役割が重複するコンポーネントがある
    ・ (高度な機能を操作するようなミドルウェアと呼ばれるものに関してはFITのみで提供される)
    ・ Smart Configuratorでは役割が重複する一部のFITに関してはデフォルト設定で非表示にしている(GPIOもそうです)

    CGとFITには(私の印象では)以下のような差異がありますので、一部のFITを非表示にするまでも無いと思ったりすることもありますが、現状、デフォルト設定がそうなっていますので、必要に応じてその設定を解除すれば良いと思います。

    CGのメリット

    ・GUIによるドライバ設定を直感的だと好む人には有難い
    ・マイコン内蔵周辺レジスタ操作コードが剥き出しのマイコン感溢れるソースコードを好む人には有難い
    ・機能が少ないマイコンではコードサイズが小さい(と思う)

    CGのデメリット

    ・マイコンを変更する時に面倒(設定の大半はGUI上なのでGUI上で入力し直すのが面倒)

    FITのメリット

    ・GUIによるドライバ設定を面倒臭いと嫌う人には有難い
    ・マイコン内蔵周辺レジスタ操作コードを隠蔽してくれるライブラリAPIを使うことを好む人には有難い
    ・マイコンを変更するときにやや楽(設定の大半はソース上なのでGUI上で入力し直すのは僅か)

    FITのデメリット

    ・機能が少ないマイコンではコードサイズはCGより大きくなる(と思う)

    FITのメリット(番外編)

    ・最近のFITは対応マイコンを絞り込んだのでCGとの差は無いですが少し前のFITは殆どのRXマイコンに対応していた。
    (たぶん、それらは今もダウンロード出来ると思う。ただし、RXスマートコンフィグレータ未対応ですが。)

    [追記]

    ちなみに、TB RX130/RX231/RX65Nですけど、少し昔のCGでのサンプルプログラムがあります。(なお、当時のトラブル回避コードは、今では邪魔かも知れません。)

    RenesasさんからRXマイコンの低価格Target Boardが出たのでサンプルプログラムをCSplus projectへ変換してみようと思います
    japan.renesasrulz.com/cafe_rene/f/forum5/4904/renesas-rx-target-board-csplus-project/32027#32027
    tb_rx65n_scfg_ccrx_c_csplus_20190506.zip
    tb_rx65n_scfg_ccrx_cpp_csplus_20190506.zip
    tb_rx65n_scfg_gnurx_c_e2v740_20190507.zip
    tb_rx65n_scfg_gnurx_cpp_e2v740_20190507.zip

Reply
  • gNucoさん、こんにちは。NoMaYです。

    > Smart Configurator と FIT という言葉の使い分け方がまだ良く分かっていませんが

    他に、CGという言葉も出てきますよ。単純に書くと、こんな感じですかね。

    Smart Configurator = CG(コード生成) + FIT(Firmware Integration Technology) + α

    FITを先に見つけた人にとって分かり難いだろうと思うのは以下の点ではないかと思います。

    ・ マイコンのベーシックな機能の操作に関してCGとFITで役割が重複するコンポーネントがある
    ・ (高度な機能を操作するようなミドルウェアと呼ばれるものに関してはFITのみで提供される)
    ・ Smart Configuratorでは役割が重複する一部のFITに関してはデフォルト設定で非表示にしている(GPIOもそうです)

    CGとFITには(私の印象では)以下のような差異がありますので、一部のFITを非表示にするまでも無いと思ったりすることもありますが、現状、デフォルト設定がそうなっていますので、必要に応じてその設定を解除すれば良いと思います。

    CGのメリット

    ・GUIによるドライバ設定を直感的だと好む人には有難い
    ・マイコン内蔵周辺レジスタ操作コードが剥き出しのマイコン感溢れるソースコードを好む人には有難い
    ・機能が少ないマイコンではコードサイズが小さい(と思う)

    CGのデメリット

    ・マイコンを変更する時に面倒(設定の大半はGUI上なのでGUI上で入力し直すのが面倒)

    FITのメリット

    ・GUIによるドライバ設定を面倒臭いと嫌う人には有難い
    ・マイコン内蔵周辺レジスタ操作コードを隠蔽してくれるライブラリAPIを使うことを好む人には有難い
    ・マイコンを変更するときにやや楽(設定の大半はソース上なのでGUI上で入力し直すのは僅か)

    FITのデメリット

    ・機能が少ないマイコンではコードサイズはCGより大きくなる(と思う)

    FITのメリット(番外編)

    ・最近のFITは対応マイコンを絞り込んだのでCGとの差は無いですが少し前のFITは殆どのRXマイコンに対応していた。
    (たぶん、それらは今もダウンロード出来ると思う。ただし、RXスマートコンフィグレータ未対応ですが。)

    [追記]

    ちなみに、TB RX130/RX231/RX65Nですけど、少し昔のCGでのサンプルプログラムがあります。(なお、当時のトラブル回避コードは、今では邪魔かも知れません。)

    RenesasさんからRXマイコンの低価格Target Boardが出たのでサンプルプログラムをCSplus projectへ変換してみようと思います
    japan.renesasrulz.com/cafe_rene/f/forum5/4904/renesas-rx-target-board-csplus-project/32027#32027
    tb_rx65n_scfg_ccrx_c_csplus_20190506.zip
    tb_rx65n_scfg_ccrx_cpp_csplus_20190506.zip
    tb_rx65n_scfg_gnurx_c_e2v740_20190507.zip
    tb_rx65n_scfg_gnurx_cpp_e2v740_20190507.zip

Children
  • NoMaYさん、こんばんは gNuco です。

     新情報をありがとうございます。”CG" の存在を全く知らなかったので大変参考になりした。
    最近 e2studio から RX Driver Package のアップデート情報通知があり、ダウンロードして開いてみると FIT モジュールの集まりだったので、Smart Conigurator は FIT (だけ)を扱うツールだと思い込んでいました。
     ご助言が無ければかなり遠回りをするところでした。本当にありがとうございます。
    また、1日に2度もお知らせを下さり、こちらにも大変感謝しております。
     まだ、Smart Configurator をダウンロードしてマニュアルを読み始めたところですが、早くモノにしたいと思います。
     重ねてありがとうございました。