RX72Nでスマートコンフィグを使用しています。
FITの生成で R_BSP_Pins_Create()関数が生成されるのですが、
この関数はユーザーが呼び出さないといけないものなのでしょうか?
ピンの設定なので、hwsetup.c 等で実行されるのかと思っていました。
他のコンポーネントの多くはR_Systeminit()で
R_Config_****_Create() で実行されているので、
R_BSP_Pins_Create()も同様かと。
R_Systeminit()内に呼び出しが生成されないのは何か設定が足りないのでしょうか?
ka.makiharaさん、こんにちは。NoMaYです。すみません、まず少し脱線しますけれども、R_BSP_Pins_Create()というのは始めて見たような気がします。実際、Google検索しても出てきません。どういう内容でしょうか?Google検索: R_BSP_Pins_Createwww.google.com/search?q=R_BSP_Pins_Createですが、FIT BSPモジュールの端子設定関数のようですので、FITモジュールの端子設定関数ということであれば、従来からユーザが明示的に呼ぶことになっていますね。
NoMayさん、こんにちは。
申し訳ありません、関数名が間違っていました。
正しくは、R_Pins_Create() でした。
>ですが、FIT BSPモジュールの端子設定関数のようですので、FITモジュールの端子設定関数ということであれば、従来からユーザが明示的に呼ぶことになっていますね。
そうなんですね。
R_Systeminit()内に R_Config_***_Create() が記述されていて、そこで同様に実行してくれている・・・と考えていました。
というのも、FITの割込み(R_Config_ICU_Create)は中で端子設定を行っていて、また
R_Pins_Create()内にも同様の割込みのピン設定があります。
FITで割込みのコンポーネントを追加して、R_Pins_Create()を見て、ピン設定がされている、
で、動作させると正しく動作する。結果、R_Pins_Create() は呼ばれている。と。
実は、R_Config_ICU_Create()がR_Systeminit()で呼び出されて、正しく動いていた。
今回は、QSPI のコンポーネントを追加してテストしていたのですが、
QSPIのピン設定は、R_Pins_Create()にのみ設定されているようで、
R_Pins_Create()を呼ばずに、QSPI送信を行ったところ、スレーブセレクト信号が出ない・・・
SPIのクロックや、データは出力されていたので、何故?となっていました。
ka.makiharaさん、こんにちは。NoMaYです。> FITの割込み(R_Config_ICU_Create)は中で端子設定を行っていて、これはFITモジュールではなくてCGコンポーネントです、、、あと、統計的な根拠があるわけではありませんが、直感的に思うこととしては、私は以下のように思ってますね。FreeRTOS未使用時・トラブルの95%は端子設定周りでは?・4%はコンフィグレーション構造体をauto変数としてしまったことかも?FreeRTOS使用時・トラブルの80%は端子設定周りでは?・トラブルの15%は割り込み優先順位周りでは?・4%はコンフィグレーション構造体をauto変数としてしまったことかも?繰り返しますが、統計的な根拠があるわけではありませんけれども、、、
NoMaYさん、こんにちは。
スマートコンフィグレータでは、FIT,CGの両方を使用しているんですね。
CGは初期化(***_Create)が自動で呼び出されるが、FITではユーザーが呼び出す必要がある。
という事なのかな、と。
R_Pins_Create() は CGなのか、FITなのか・・・
コンフィグレーターのコンポーネント一覧には出てこないですが、生成はされている。
結局、R_Pins_Create()は実行する必要がある。と分かっただけで、良しとします。
ありがとうございました。
トラブルで気をつけているのは、割込み関係ですね、
動かない・・・割込みが入りっぱなし、というのがよくありまして。
ka.makiharaさん、こんにちは。NoMaYです。すみません、_BSP_が勘違いであったというリプライのところで気付かなければならなかったのですけれども、単にR_Pins_Create()ということであれば、それはCGコンポーネント向け(正直まだ存在意義が私に分からない)APIです。内容は、通常は各R_Config_XXX_Create()内で行われている端子設定を1つの関数にまとめたもの、です。他方、FITモジュールの端子設定APIは、例えば(R_SCI_RXモジュールを使っていれば)、r_pincfgフォルダ内に生成されるr_sci_rx_pinset.cといったソースに記述されているAPI(例えばR_SCI_PinSet_SCI2()など)の方です。ややこしいのは、私の記憶では、FITモジュールの場合にもRXスマートコンフィグレータ上で端子設定すると最初に書いたCGコンポーネント向けR_Pins_Create()が生成されるのですけれども、実は、それはFITモジュールの本来の端子設定API(例えばR_XXXX_PinSet_YYYY()など)とは一部互換性が無かったりするのです。ですので、FITモジュールの端子設定に関しては、R_Pins_Create()を呼んではいけないです。R_XXXX_PinSet_YYYY()などのr_zzzz_pinset.cといったソースに記述されている端子設定APIを呼ばないといけないです。ただ、正直なところ、最新のRXスマートコンフィグレータでもそのような事情が残ったままかどうか、分からないです。
NoMaY さんこんにちは。
今回使用したのはQSPIなのですが、QSSL信号が出力されない、ということで調べていたのですが、
FITが生成する r_qspi_smstr_io_init() (R_QSPI_SMstr_Openから呼ばれている)ではQSSL信号の設定が行われていない事が原因と分かりました。
R_Pins_Create() では QSSL 信号の設定も行われていたので、R_Pins_Create()を呼ぶ必要があると考えました。
確かに、スマートコンフィグレータのQSPIのコンポーネント設定画面にはQSSL端子を使用する/しないのチェックはありませんし、「端子」画面ではQSSL 端子は「この端子を初期化するコンポーネントがありません」となっています。
FITではQSSL信号を使用しないQSPI通信なのでしょうか?
お教え頂いた事から、R_Pins_Create()は呼ばないようにし、QSSL端子の設定のみ独自に追加するようにします。
ありがとう、ございます。
ka.makiharaさん、こんにちは。NoMaYです。FITモジュールでのQSSL機能の取り扱いに関してはドキュメントに何か記載されていますね。以下をQSSLで検索してみて下さい。(ごめんなさい、私では正確な意味までは分からないです。)RX ファミリ QSPI クロック同期式シングルマスタ制御モジュール Firmware Integration TechnologyR01AN1940JJ0115 Rev.1.15 Pages 95 Sep.30.21www.renesas.com/us/ja/document/apn/rx-family-qspi-clock-synchronous-single-master-control-module-using-firmware-integration-technology4P「1.2 QSPI FIT モジュールの概要RX ファミリMCU 内蔵のQSPI を使用し、クロック同期方式制御を行います。ポート制御によるスレーブデバイスセレクト制御を付加することにより、QSPI モード・シングルマスタ制御が可能です。QSPI のQSSL 端子をポート制御によりスレーブデバイスセレクト端子に割り当てることが可能です。」12P、他「QSSL ネゲート待ちタイムアウトした場合は、処理を停止し、エラーを出力r_qspi_smstr_wait()QSSL ネゲートフラグポーリングによるQSSL ネゲート待ちポーリング回数は50,000 回に設定」69P、他「※1:QSSL 制御機能を使用しません。QSSL 端子は他機能に割り当てることが可能であるため、QSSL端子を汎用出力ポートに設定し、スレーブデバイスセレクト出力に割り当てることができます。」