rl78F14のUART受信の問題点について

こんにちは TTです。

 

現在、下記のような処理を行おうとしています。

A:自分(RL78F14)

B:通信相手(Aからもらったデータ内容に応じて返信してくる)

1. A→Bへデータを送信する

2.  自分(A)は自分で送信したデータを受信してしまうので、送信したデータと受信したデータが同じならデータを破棄する

3. Bからの返信を受信するまで待つ

4. Bからの返信を受信出来たら、データを取り出す。

 

しかし、上記処理中の3でBからのデータを受信することが出来ません。

通信ログを確認したところ、

・A→Bへ正しくデータを送信できている事、B→Aへデータが正しく送信されていることは確認できています。

・BはAからのデータをもらって15ms程度で返信を返してきています。

現在の不具合の仮説としては、「自分の送信データ受信→受信完了の間にBからの返信が来てしまっている?」と考えています。

そこで、EUARTの受信データの受信完了にはどれくらい時間がかかるものなのでしょうか?

また、ほかに考えられる原因等あればご教授ください。

Parents
  • > 現在の不具合の仮説としては、「自分の送信データ受信→受信完了の間にBからの返信が来てしまっている?」と考えています。

    受信割り込み処理の中で他に重いこともされていて受信オーバーランが発生してる辺りが可能性高い気がします。
  • ご返信ありがとうございます。

    ご指摘の通り、受信オーバーランが発生しているようです。
    (CS+自動生成コードにて r_uart1_callback_softwareoverrun(rx_data); が呼ばれる)

    データとデータの間が15ms程度しか空いていないので発生しているのかと思います。
    DMAを使用するなどほかの方法を考えます。

    ありがとうございます。
  • > データとデータの間が15ms程度しか空いていないので発生しているのかと思います。
    > DMAを使用するなどほかの方法を考えます。

    データとデータの間が 15ms 程度「も」あって受信オーバーランが発生するというのはそれだけ長い期間割り込みを受け付けない期間があるということでありプログラムの構造の問題でしょう。DMA の使用で解決すべきものでもないと思います。
Reply
  • > データとデータの間が15ms程度しか空いていないので発生しているのかと思います。
    > DMAを使用するなどほかの方法を考えます。

    データとデータの間が 15ms 程度「も」あって受信オーバーランが発生するというのはそれだけ長い期間割り込みを受け付けない期間があるということでありプログラムの構造の問題でしょう。DMA の使用で解決すべきものでもないと思います。
Children
  • fujita nozomu さん お返事ありがとうございます。
    他の方が回答してくださってる通り、DMAで解決できそうな問題ではなさそうです。
    >データとデータの間が 15ms 程度「も」あって受信オーバーランが発生するというのはそれだけ長い期間
    >割り込みを受け付けない期間があるということでありプログラムの構造の問題でしょう
    おっしゃる通り、受信したデータの振り分けに時間がかかっています。少しずつ効率的に書ける様精進します!
    ありがとうございました