シリアル通信(送信)について

はじめまして。

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(); /* 割込み許可 */

}

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

    横からすみませけれども、なぜ、そもそもこのような、いったん割り込み禁止にして、その間に自前でレジスタをチェックして、というコードを書かれているのですか?

    実は、私見ながら「コード生成機能、初学者さん、あるある」として以下の2つが目に付いているのですけれども、そういうことだったりしますでしょうか?

    コード生成機能、初学者さん、あるある:

    (1) UART送受信APIの使い方が分からなくてHALT命令で送受信完了の割り込み発生を待とうとしてしまう
    (2) UART送受信APIの使い方が分からなくて送受信完了レジスタをチェックして送受信完了を待とうとしてしまう

    (もっとも、困り者は、10年間、チョコさんの指摘を無視し続けているルネサスさん、だと私は思ってますけれども、、、)

  • チョコです。

    NoMayさん、「送受信完了レジスタをチェックして送受信完了を待とうとしてしまう」は、Kotiさんのように割り込み禁止状態でやるのが正しいやり方です。ベクタ割り込みが受付け可能な状態だと、割り込み処理(通信完了)が受け付けられると、レジスタの状態が書き換わってしまう可能性があります。

    以上

Reply
  • チョコです。

    NoMayさん、「送受信完了レジスタをチェックして送受信完了を待とうとしてしまう」は、Kotiさんのように割り込み禁止状態でやるのが正しいやり方です。ベクタ割り込みが受付け可能な状態だと、割り込み処理(通信完了)が受け付けられると、レジスタの状態が書き換わってしまう可能性があります。

    以上

Children
  • チョコさん、こんにちは。NoMaYです。

    すみません、そういう意図ではなくて、なぜ割り込み完了ルーチン(全バイト送信完了コールバック関数)でフラグ変数をセットするようにして、それをチェックするようにしていないのか?、ということが気掛かりだったのです。

    それに、コード生成機能を使うと、どのみち、1バイト送信完了毎に割り込みの窓を開けてやらないと、複数バイト送信が出来ないですし、、、(コード生成機能では、割り込み駆動で次のバイトを送信する仕組みなのですし、、、)

  • NoMaYさん、チョコさん、こんにちは。

    >UART1の送信であれば、SSR00レジスタをチェックするのは間違いです。UART1の送信であれば、SSR02レジスタをチェックすべきです。
    SSR00→SSR02に変更して動かしてみましたが、出力は"00"から変わりませんでした。

    >なぜ、そもそもこのような、いったん割り込み禁止にして、その間に自前でレジスタをチェックして、というコードを書かれているのですか?
    ご指摘のとおり、コード生成機能は初めてです。UART送信方法をググって参考にしたコードを使っています。
    バッファ空き待ちの部分は、デバッグ時に動きを見るために残しています。いずれ消すつもりです。

    レジスタに関して意識できていなかったので、ハードウェアマニュアルを読んで勉強します。

  • Kotiさん、こんにちは。NoMaYです。

    > ご指摘のとおり、コード生成機能は初めてです。UART送信方法をググって参考にしたコードを使っています。

    まさに私が気掛かりに思ったことだったのですね。実は、かふぇルネで、もう随分と何度も何度も話題になったことなのですけれども、かふぇルネに限らず、(もともとGoogle検索で見付かるウェブ上の情報が少ないのがルネサスマイコンでのファームウェア開発でしたけれども)なんとなく以前よりもさらにGoogle検索でルネサスマイコンの情報が見付からなくなってきているような、そんな気がしなくもない今日この頃です、、、

    ちょっと探してみます。(初学者さん向けのUART送受信APIの使い方は分かっていますので、それを書き下ろせば良い、という方向の話の流れの方が良いのかも知れませんけれども、、、)

    ちなみに、その段階では、ハードウェアマニュアルを読まなくても出来ることです。

  • こんにちは。NoMaYです。

    かふぇルネで以前に他のひと(ほやさんだったような)から教えて頂いたやり方だと思うのですけれども、Google検索する時には、以下のように site:renesas.com を付けると調子が良さそうな気がしなくもないです、、、(続く)

    Google検索: RL78 コード生成機能 site:renesas.com
    www.google.com/search?q=RL78+コード生成機能+site:renesas.com
     

  • こんにちは。NoMaYです。

    まずは先ほどの検索条件で見付かった以下のウェブページですかね、、、(続く)

    コード生成プラグイン Code Generator 製品ページ
    www.renesas.com/jp/ja/software-tool/code-generator-plug
     

  • チョコです。

    ところで、RL78/G14の電源電圧は何Vで動作させているのでしょうか。また、アナライザの信号レベルはCMOSかTTLレベルになっていますか?

    通信がうまくいかないときには、通信条件以外には電圧レベルが合っていないのがよくあります。

    基本は、波形を確認することになるかと思います。

    以上

  • こんにちは。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/G10
    RL78/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/G10
    Wi-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-RL
    R01AN2517JJ0200 Rev. 2.00 Pages 45 2015.07.01
    PDF
    www.renesas.com/jp/ja/document/apn/rl78g13-serial-array-unit-uart-communication-cc-rl-rev200
    ZIP
    www.renesas.com/jp/ja/document/scd/rl78g13-serial-array-unit-uart-communication-cc-rl-rev200-sample-code