皆様
はじめまして、Kaminari です。
RL78G13 (R5FR5F100LE)とCS+ (V8.05.00)でI2Cデバイスの設定と、読み出しを行うセットを製作しようとしております。
内容は、次のようなものです。
チョコ様のIIC通信のマスタ側のプログラムや書籍も参考にさせていただいて作成していたのですが、C言語も初心者のため、おはずかしながら生成されたAPI関数を用いるためにはどう直せばいいのかわからず滞っております。
周囲も詳しい者がおらず、また上記構成を起点として機能を追加する予定のため生成されたIICA関数でIICアクセスを行いたいと思っております。恐れ入りますがIICA用API関数を用いたI2Cアクセスのサンプルプログラムがありましたら、(または場所をご存知でしたら)ご教示いただけませんでしょうか?
チョコです。
>「環境に合わせた修正」は、あの分厚いユーザーズマニュアルをちゃんと理解しないと
その必要はないはずです。アプリケーション・ノートにはそこで使用している関数の説明が書かれています。しかも、main関数はそれらの関数(API関数)の使用例になります。つまり、RL78のマニュアルは読まなくても、使えるはずです。少なくとも、コード生成APIの役に立たないマニュアルよりは、実際に使っている例なので簡単なはずです…
こんにちは。imudakです。
考えてみたのですが、コード生成ツールを使わない場合様々なレジスタの設定を手元のマイコン環境に合わせて自分で書かないといけないので、サンプルコードはどうやってもシンプルにはなりませんね…
結局、コード生成ツールで吐き出したコードを使ったサンプルが一番シンプルかと。
コード生成プラグインwww.renesas.com/.../code-generator-plug
コード生成ツール ユーザーズマニュアル RL78 APIリファレンス編www.renesas.com/.../code-generator-users-manual-rl78-api-reference
3.3.32 シリアル・インターフェースIICA使用例(マスタ送信) P488からサンプルコードが載っています。ご参考まで。
>様々なレジスタの設定を手元のマイコン環境に合わせて自分で書かないといけないので、>サンプルコードはどうやってもシンプルにはなりませんね…
コード生成には、初期設定部とAPI部に分けることができます。基本的に、初期設定は使い方が決まれば、設定はほぼ決まってしまうので、初期設定は使うべきです(ですから私は初期設定だけにして使用しています)。
コード生成の問題はAPI部です。imudakさんが参照されているマニュアルのP488で見ると、以下のように、「マスタ・エラー(コール バック機能設定)」は使用しないとなっていますが、これは問題です。データを送信することだけに注目しすぎて、それ以外のことが見えなくなっています(スレーブ・アドレスに対してACK応答がなかった時にどうするかが抜けている)。しかも、このように設定してしまうと受信機能は全く使えなくなります。
さらに問題なのは、次のページの内容です。印をつけた行で送信のためのAPIを呼び出していますが、その後どうすればいいのか全くケアされていません。「R_IICA0_Master_Send(SLAVE_ADDR, (uint8_t *)g_iica0_tx_buf, 4U, 128U);」で呼ばれているAPI関数は単純に送信処理を起動するだけのものです。決して送信が完了して戻ってくるわけではありません(コード生成のシリアル通信のAPIは共通して起動だけで戻ってきます)。ここらは、今まで何度もかふぇルネで問題になったところです。
初心者は、R_IICA0_Master_Send関数から戻ってきたら、送信は完了していると勘違いしてトラブっています。
しかも、その下にあるINTIICA0割り込み処理で送信が終わった時の処理部ですが、
やっていることは単にIICA0の動作を停止しているだけです。これはまりにひどすぎます。通信が完了したことは、ここでしかわかりません。なのに、他の処理部(R_IICA0_Master_Send関数を呼び出した処理部)になんの通知もしないで終わるなんて言うのは問題外です。
ここらに対応しようとすると、INTIICA0の割り込み処理に手を加える必要があります。具体的にはIICA0の通信状態を示すフラグを準備し、通信を起動するときにそのフラグをクリアし、通信完了のコール バック機能のところでフラグをセットするだけです。そのためのフラグをコード生成側で準備しておけば、初心者でも使いやすくなるのですが。
これができていないから、最新のRL78/G13のIICAのAPNのサンプルコードでコード生成は初期化だけになってしまっています。
長々と書いてきましたが、これが、コード生成のAPIの問題点で、数年前から問題点を指摘していますが、改善されないので、独自のライブラリを作って対応しています。
新しいG23用のSmart Configuratorでは改善されていることを期待します。
以上
チョコさんこんにちは。
> 長々と書いてきましたが、これが、コード生成のAPIの問題点で、数年前から問題点を指摘していますが、> 改善されないので、独自のライブラリを作って対応しています。
ご指摘の問題点について全く異論ありませんし、そのように改善すべきかと思います。
ただ、私が気になっているのは、この
> ご教示いただいたアプリケーションノートを手元の環境に合わせて修正中なのですが、動作に至っておりません…。
「手元の環境に合わせて修正中」の部分です。この壁はひたすら高くて、下手すると乗り越えられないのではないかと思っています。
個人的には、
「環境に合わせた修正」 >>>>> 「チョコさんご指摘の問題点」
くらいのイメージですね…
チョコさんの話は、抽象化したロジックの話で、組み込み知らない別プログラマでも理解できる余地がありますが、「環境に合わせた修正」は、あの分厚いユーザーズマニュアルをちゃんと理解しないとどうにもなりません…
だったら、GUIポチポチしたら環境に合わせたAPI作ってくれるコード生成ツール使って不十分でも動くものをまず作って、不足分はそこから考えたら良いのでは無いかと思います。
そして余裕ができたら、コード生成ツールの生成コードの中読んだり、自分で独自API作ったりすれば良いかと。
その必要はないはずです。アプリケーション・ノートにはそこで使用している関数の説明が書かれています。しかも、main関数はそれらの関数(API関数)の使用例になります。つまり、RL78のマニュアルは読まなくても、使えるはずです。少なくとも、コード生成APIの役に立たないマニュアルよりは、実際に使っている例なので簡単なはずです。
それでわかるかどうかは、また別問題だと思いますが。
業務関係で公開できないことがあるのかもしれませんが、提示されている情報が漠然としすぎているので、具体的なコメントができません。