初めまして 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 出力の不具合があったのでこちらに質問する事を決心しました。。
長くなりましたが、おかしなところがあればご指摘ください。よろしくお願いいたします。