RL78/F14 SPI API関数のコード生成について

RL78/F14をCS+ CC-RLにて開発しています。

SPIを使用したいので、コード生成ツールにて、SAU0のチャネル1をCSI1して、生成しました。

生成されたAPIでも対応出来るとは思いますが、

RenesasのAPI関数の関数リファレンスには、SPI用のAPIが記載されていますが、

これらが生成されません。

tool-support.renesas.com/.../spi.htm

出来れば、専用のAPIで行った方が色々楽かなと思っているので、使用したいのですが、

コード生成の段階で、何か設定などが必要でしょうか?

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

    たぶん、それらのAPIは、特定の品種のみで、かつ、特定の目的のみに、使われるものではないかなと思います。実は、スマートアナログIC(SAIC)という製品をルネサスさんは出しているのですが、そのICのシリコンをRL78のパッケージ内に封入したRL78製品があります。(すみません、厳密な表現では無いのかも知れません。) そのRL78製品で、たぶんSPI専用の通信回路が入っていて、パッケージ内のSAICシリコンとの通信と、通信回路の残り分でマイコン外部との通信に、それぞれ使うAPIではないかなと思うのです。つまり、RL78/F14では使えない(回路が入っていないから)と思うのです。

  • チョコです。

    このSPIは、RL78/G1Eでアナログ機能のセットアップ用等のもののようです。RL78/G1Eのマニュアルの「第4章 アナログ部」にSPIが記載されており、以下の図がありました。

    RL78/G1Eのコード生成で「SPIインタフェース」は以下のように使用するかしないかの選択とボーレートの選択しかできないようです。

    試しにコード生成してみると、2つの関数しかありません。一つ目は、R_SAIC_Create関数で、出力ポートP130をRESET出力として使用しているので、P13にLパルスを出して、「SAIC_RESETWAITTIME」で示されたループでRESET時間を確保して、R_SAIC_Write(gp_smartanalog_data)でアナログ機能を初期化しています。

    R_SAIC_Write(gp_smartanalog_data)では、最初にSPIの初期化をして、その後にSPI通信で、アナログ部の設定を行っているようです。

    123行目でCS信号をLにして、126~129行でCSのセットアップ時間を確保し、131~132行目でアナログ部のアドレスを設定、134行目でCSIの送信完了を待ち、137~138行目で設定データを設定し、140行目で送信完了を待ち、145~148行目でCS信号のホールド時間を確保して、150行目でCS信号を立ち上げて一つのアドレスへの通信を完了しています。これをwhileで必要なアドレス分繰り返しています。

    ここで注意すべきは、割り込みを使わず、CSIIF21のポーリングで制御しているようです。

    これを見るとあまり汎用的なプログラムではないようです。

    以上

  • NoMaYさん、チョコさん

    haruです。ご返信ありがとうございます。お二人のご回答で納得できました。

    RL78/G1Eに搭載された回路が無いと、こちらのAPIは使えないし、

    RL78/G1Eを選択していないと、コード生成出来ないのですね。

    関数リファレンスにあるのに、生成選択すら出ないので、何かを見落としていないか?など、

    自分への疑心暗鬼になっていました。

    (ハードウェアマニュアルでは、SPI使えますとなっていたのに何故と思いまして)

    API内容にについても説明いただきありがとうございます。

    あまり汎用的でないプログラムとの事で。。

    SPI通信の使用経験がほぼ無かったので、コード生成を丸々使う方が、精度も良く・汎用的かなと思って、

    あまり調べず、手を抜こうとしてしまいました。(反省いたします。)

    CSIを使用して行いたいことは、実現できましたので、問題はなさそうです。

    ありがとうございます。

  • チョコです。

    >RL78/G1Eに搭載された回路が無いと、こちらのAPIは使えないし、

    と言うか、ハードはCSI21とP73を使っているだけで、それ以外はSPIに関係ありません。

    >RL78/G1Eを選択していないと、コード生成出来ないのですね。

    はい、そのようです。

    >SPI通信の使用経験がほぼ無かったので、コード生成を丸々使う方が、精度も良く・汎用的かなと思って、

    SPIについては、RL78/G13のサンプルコードがあるので、そちらを参考にしたらどうでしょうか。RL78/G13のページからはたどり着けないようなのですが、トップページで「RL78/G13 SPI」で検索をかけると以下のページが出てくるので、赤で囲んだリンクを開くと、サンプルコードがダウンロードできます。

    このサンプルコードは、下に示す構成のSPIにBUSY信号が追加された構成になっているようです。

    これは、クロック同期シリアル通信(CSI)では、I2Cと違ってスレーブの状態がわからず、マスタ側が勝手に通信を開始してしまうことがあります。それを避けるためにBUSY信号を追加してスレーブの準備ができてからマスタが通信を開始できるようにするためです。スレーブの準備ができる前にマスタが通信を開始すると、同期が崩れてしまうことになります。

    センサ等ハードウェアだけの場合にはBUSY信号は必要ないのですが、このサンプルコードの構成のようにスレーブがMCUの場合にはBUSY信号をつけた方がいいでしょう。

    このサンプルコードでの実際の以下のような信号の割り付けになっているようです。

     

    このサンプルコードは1バイト単位で転送しているようですが、

    これを参考にしてコード生成したAPIを使えば何とかできるかもしれません。

  • チョコさん

    再度の情報ありがとうございます。

    サンプルプログラムにたどり着けないでいたので、大変助かります。

    今回は、MCU相手でないので、動機などをあまり考慮しなくて良さそうですが、

    今後の為に、頂いた情報内容をしっかり確認しておきたいと思います。

    ⇒ 先の為に汎用性ある形で作成しておきたいと思いました。

    大変ありがとうございます。

  • チョコです。

    紹介したサンプルプログラムはあまり良くなかったようです(1バイトごとにBUSYチェックするためにそのような構造になっているようですが、上位の処理が単純すぎて面白くありません)。

    もっと、きちんとしたのは、「RL78/G12 CSI」で検索できたのですが、プログラムはアセンブラでした。ただし、アプリケーションノートとしては、こちらの方がきちんとしてます。ページ数が80ページ以上ありますが、最初の7ページだけで十分かもしれません。

    今のところ、これ以上は探せていません。

  • チョコさん

    再度の情報ありがとうございます。

    >紹介したサンプルプログラムはあまり良くなかったようです(1バイトごとにBUSYチェックするためにそのような構造になっているようですが、上位の処理が単純すぎて面白くありません)。

    RL78/G13のサンプルコードは、面白くない件、承知しました。

    ⇒ G12の方を検索して確認して見ます。

      ちょっと確認しましたが、アセンブラでも内容は分かりそうなので、大変助かります。