はじめまして。
RL87/G14にてシリアル通信の処理を作成していますが、送信処理がうまくいかないため、ご教授ください。
処理は、R_UART1_Start();の後、メインループで下記SendSWResultをコールしています。
この送信電文をアナライザで確認したところ、"57"ではなく"00"となっております。
ボーレート、パリティ、データサイズはアナライザ設定と一致しています。
コード生成済みであれば、これで送信ができると思っていたのですが、何か見落としているのでしょうか?
const uint8_t message_SET[2] = {"57"};
void SendSWResult(void){ DI(); /* 割込み禁止 */ R_UART1_Send((unsigned char *)message_SET,2U); while( SSR00 & 0x0020 ) /* バッファ空き待ち */ { NOP(); } EI(); /* 割込み許可 */}
Kotiさん、こんにちは。NoMaYと申します。横からすみませけれども、なぜ、そもそもこのような、いったん割り込み禁止にして、その間に自前でレジスタをチェックして、というコードを書かれているのですか?実は、私見ながら「コード生成機能、初学者さん、あるある」として以下の2つが目に付いているのですけれども、そういうことだったりしますでしょうか?コード生成機能、初学者さん、あるある:(1) UART送受信APIの使い方が分からなくてHALT命令で送受信完了の割り込み発生を待とうとしてしまう(2) UART送受信APIの使い方が分からなくて送受信完了レジスタをチェックして送受信完了を待とうとしてしまう(もっとも、困り者は、10年間、チョコさんの指摘を無視し続けているルネサスさん、だと私は思ってますけれども、、、)
チョコです。
NoMayさん、「送受信完了レジスタをチェックして送受信完了を待とうとしてしまう」は、Kotiさんのように割り込み禁止状態でやるのが正しいやり方です。ベクタ割り込みが受付け可能な状態だと、割り込み処理(通信完了)が受け付けられると、レジスタの状態が書き換わってしまう可能性があります。
以上
こんにちは。NoMaYです。先ほどのウェブページに、いかにも、といった感じの(大昔の)ドキュメントはあるものの、、、(続く)コード生成プラグイン学習ガイド2014/10/01 Rev. 1.00 R20UT3230JJ0100 ルネサスシステムデザイン株式会社 ツールビジネス事業部ツール技術部www.renesas.com/jp/ja/document/man/929596
こんにちは。NoMaYです。> 先ほどのウェブページに、いかにも、といった感じの(大昔の)ドキュメントはあるものの、、、(続く)肝心な部分を確認するにはソースコードが必要となるドキュメントなのだけれどもソースコードが無さそう、、、(続く)
こんにちは。NoMaYです。先ほどのウェブページを辿っていて気付いたのですけれども、今、こういうウェブページがあるのですね、、、(続く)コード生成プラグイン ユーザ向け情報www.renesas.com/jp/ja/software-tool/code-generator-plug-in-support「RL78コード生成を使用したアプリケーションノート(参考リンク)対応マイコンアプリケーションノートソースコード内容RL78/G10RL78/G10 ハンドソープ・オートディスペンサー アプリケーションノート Rev.1.00 (PDF | English, 日本語) C source (e² studio、CS+)RL78/G10 Automatic Hand Soap Dispenser Application Notes Rev.1.00 - Sample Code (ZIP) RL78/G10を使用してハンドソープ・オートディスペンサーを実現する方法を説明します。RL78/G10Wi-Fi モジュール制御(ESP-WROOM-02 TCP 送受信) Rev.1.10 (PDF | English, 日本語) C source (e² studio、CS+)RL78/G10 Wi-Fi module (ESP-WROOM-02) control sample software for TCP/IP Slave Transmission/Reception Rev.1.10 (ZIP) RL78/G10を使用しWi-FiモジュールESP-WROOM-02を制御するためのソフトウェアとその応用サンプルプログラムの使用方法を説明します。。。。以下省略。。。」
こんにちは。NoMaYです。そこに、こういうアプリケーションノートが記載されていたけれども、、、(続く)RL78/G13 シリアル・アレイ・ユニット(UART 通信) CC-RLR01AN2517JJ0200 Rev. 2.00 Pages 45 2015.07.01PDFwww.renesas.com/jp/ja/document/apn/rl78g13-serial-array-unit-uart-communication-cc-rl-rev200ZIPwww.renesas.com/jp/ja/document/scd/rl78g13-serial-array-unit-uart-communication-cc-rl-rev200-sample-code
こんにちは。NoMaYです。そのアプリケーションノートのサンプルコードをダウンロードしてr_cg_serial_user.cとr_main.cを見るとAPIの具体的な使い方が分かりますね。[追記]ちょっと分からないのが、サンプルコードで受信割り込みをマスクしている区間がある理由が、とっさに思い浮かばないです。
このアプリケーションノートのRev.1.00はコード生成は使ってなかったような気がします。
Rev.2.00になってコード生成ベースにしたために、変なやり方になっているのではないかと思われます。
mainでの処理なんて、NoMayさんが初心者あるあるであげた「HALTで受信完了を待つ」をもろに使ってますね。これは、他の割り込みは使っていないのと、受信データが1キャラクタだからできているだけなんですけど。これはサンプルソフトにはならないでしょうね。
>サンプルコードで受信割り込みをマスクしている区間がある理由が、とっさに思い浮かばないです。
これは、送信中に、新たな受信データを扱いたくないという意味でしょうね。1キャラクタ受信に対して4キャラクタ送信しないといけないので、安易に対策したのでしょうね。
NoMaYさん、チョコさん、こんにちは。
参考資料ありがとうございます。
>ところで、RL78/G14の電源電圧は何Vで動作させているのでしょうか。また、アナライザの信号レベルはCMOSかTTLレベルになっていますか?3.3Vで動作しています。アナライザはLE-2500(旧型)を使用しているため、CMOS,TTLへの切替えがありません。RS232Cで見ています。
>アナライザはLE-2500(旧型)を使用しているため、CMOS,TTLへの切替えがありません。RS232Cで見ています。
これが原因でしょう。
RS232Cは±12Vのロジックで、+5V以上で0、-5V以下で1と判断する信号です。MCUのUARTとは電圧範囲が異なるので、そのままは接続はできません。RL78のTxD信号はRS232Cのドライバを介してアナライザに接続する必要があります。
アナライザではなく、オシロスコープで測定されることをお勧めします。
チョコさん、こんにちは。
>アナライザではなく、オシロスコープで測定されることをお勧めします。ありがとうございます。オシロスコープで見てみます。
この後は、いよいよ、NoMaYさんが、コメントしていたコード生成のAPIの使い方になりますね。