PDG2で生成されるソースコードを用いたシリアル通信について

お世話になっております。

マイコン初心者にアドバイスをお願いいたします。

PDG2(V.2.09)を用いてe2 studio(V.6.0.0)でソースコードを生成し、

マイコン(RX63T)とTeraTerm(V.4.96)でシリアル通信を行っています。

E1デバッガを用いてPDG2のライブラリファイルの動作を確認しているのですが、

TeraTermのマクロで4byteのデータ”ABCD”を送信しても、

ソースコード内のR_PG_SCI_StartReceiving_C1(data, 4);のdata内に1byteしか書き込まれていません。

ソースコード

void main(void)
{
while(1)
{
//R_PG_SCI_ReceiveAllData_C1(data,4);
//R_PG_SCI_SendAllData_C1(data,4);
R_PG_SCI_StartReceiving_C1(data, 4);  ☆ここに1byteのデータしか入っていません。
R_PG_SCI_StartSending_C1(data, 4);    ☆ここに1byteのデータしか入っていません。
}
}

//全データを受信すると呼び出される受信終了通知関数
void Sci1ReFunc(void)
{
//SCI1通信終了
R_PG_SCI_StopCommunication_C1();
}
//全データが送信されると呼び出される送信終了通知関数
void Sci1TrFunc(void)
{
//SCI1通信終了
R_PG_SCI_StopCommunication_C1();
}

想定としては、data内に4byteのデータが格納されるはずなのですが、うまくできません。

分かる方ご教授お願いいたします。

8666.RX63T_3.zip

Parents
  • わわいです
    PDG2ってのはよーわかりませんが、R_PG_SCI_StartReceiving_C1って関数は果たして4文字受信するまで待ってくれる関数なんでしょうか。そこら辺ドキュメントを読んで確認してください。

    普通に考えると、呼び出した時点での受信文字を返す関数だと思われます。
    そうであれば、送信直後に呼び出したら最初の1文字だけが返ってくるという動作になりますねー
    その場合は、4文字受信するまで待つコードを書かないといけませんねー
Reply
  • わわいです
    PDG2ってのはよーわかりませんが、R_PG_SCI_StartReceiving_C1って関数は果たして4文字受信するまで待ってくれる関数なんでしょうか。そこら辺ドキュメントを読んで確認してください。

    普通に考えると、呼び出した時点での受信文字を返す関数だと思われます。
    そうであれば、送信直後に呼び出したら最初の1文字だけが返ってくるという動作になりますねー
    その場合は、4文字受信するまで待つコードを書かないといけませんねー
Children
  • わわいさん
    マニュアルを読んだのですが、指定した数のデータ受信完了時に指定した名前の関数が呼び出されます。
    と書いてあり、今回のコードの場合は4byteのデータを指定しているつもりなのですが…
  • わわいです
    ちとぐぐってドキュメントを見てみました

    ---
    本関数はすぐにリターンし、指定した数のデータ受信完了時に指定した名前の関数が
    呼ばれます。通知関数は次の定義で作成してください。
    void  <通知関数名> (void)
    ---

    ということですので、この関数は受信を開始するだけの関数のようです。
    受信文字列を取得する関数はべつに定義する必要があるようですねー

    #しかし、ルネサスのトップページでPDG2で検索したらカフェルネしか出てこないのはどーにかならんもんか。。
  • わわいです
    受信文字列を取得する関数、ではなくて、その文字分の受信が終了したことを通知する関数、ですねー
    その関数でなんかフラグをセットして、メインループでそのフラグが立つまでループしておく、という処理になろうかと思われます。

    そこで注意すべきは、そのフラグには volatile のキーワードをつけておかないとヤバイってことですね。
  • わわいさん
    回答ありがとうございます。
    そうなんですね、すこし考えてみます。