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

はじめまして。

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さんのように割り込み禁止状態でやるのが正しいやり方です。ベクタ割り込みが受付け可能な状態だと、割り込み処理(通信完了)が受け付けられると、レジスタの状態が書き換わってしまう可能性があります。

    以上

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

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

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

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

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

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

Children
No Data