初めまして、キキです。
先日からRL78のマイコンで開発を行っているのですが、シリアル通信がどのように動いているのか理解できずに困っています。
とても初歩的な質問かもしれませんがどうぞよろしくお願いいたします。
シリアル通信を自動生成しましたが、自動生成したソースの利用方法がわかりません。
こちらサンプルソースなどはどこかにないのでしょうか。
例・送受信をしたいのですが、受信のみ、送信のみは可能なのでしょうか。・R_CSI01_Stopはどのときにする必要があるのでしょうか。
チョコです。
>・送受信をしたいのですが、受信のみ、送信のみは可能なのでしょうか。
可能です。CSI通信(3線式同期通信)では、SCKに同期してデータの送受信を行います。通信の方向を指定するような機能はないので、常に送受信の動作にし、受信時にはダミーデータを送信し、送信時には受信したデータを空読みすることで対応します。(ハードとしてのCSIにはSCRレジスタの設定で送信と受信を個別に許可/禁止は可能ですが、外部の信号での区別はできません。)
>・R_CSI01_Stopはどのときにする必要があるのでしょうか。
スタンバイするときにCSIの動作を停止して、より低消費電力にするために使用します。普通に使っているときには、R_CSI01_StopのようなAPIを使うことはありません。
追加でコメントします。
下の図は、RL78/G12のCSIスレーブのアプリケーションノート(R01AN1370JJ0110)の図を画面キャプチャしたものです。
最初の1バイトはマスタからスレーブにコマンドを送ったものです。この間、スレーブの出力はハイになっています。
次の2バイト目と3バイト目はスレーブからのデータがスレーブのSO出力から出力されていて、その間マスタからの出力はハイ・レベルに固定されています。これが、代表的な送信や受信のタイミング図になります。
残念ながら、このアプリケーションノート及のサンプル・コードはアセンブラ記述なので、そのままは利用できないかもしれません。
コード生成を利用しているなら、「コード生成ツール ユーザーズマニュアル RL78 API リファレンス編」(R20UT4323JJ)を参照してみてください。スマート・コンフィグレータを利用しているなら「スマート・コンフィグレータ ユーザーズマニュアル RL78 API リファレンス編」(R20UT4852JJ)を参照してください。
通信は相手があることなので、具体的な通信相手でプログラムが変わってきます。探してみましたが、安念ながら適当なサンプルコードは見つかりませんでした。
通信で初心者が一番引っかかるところが、送信や受信を行う関数から戻ってきても、その時点では通信は完了いていないことです。
具体的なRL78と通信あいてのデバイス、やりたいことが分かれば、何か参考になるコードは提供できるかもしれません。
以上
チョコさんご返信いただきまして、ありがとうございます。
たくさんの情報いただきまして、ありがとうございます。少しずつ調べながらやっていきたいと思います。
なにもかもわからない状態から、理解ができ、イメージが付きました。また不明点ありましたら追加で質問させてください。
何卒よろしくお願いいたします。