RX63N RSPIの転送ができない(PDG2.09.000)

こんにちは。

PDG2.09.000を使用し、
RSPI0(マスタ)とRSPI1(スレーブ)のSPI(4線式)通信をしようとしています。
「RX63N/RX631グループ Peripheral Driver Generator リファレンスマニュアル」を
参照しながらプログラムを作成したのですが、転送完了の通知関数へ飛んできません。
(エラー通知関数にも飛んできていません)
何が原因か悩んでいます。
御教授いただきたく、宜しくお願い致します。


シンプルにRSPI0の転送のみを実行しようとしましたが、同様の結果でした。

以下、PDGの設定とプログラムになります。

【PDGの設定】
・RSPI0をSPI動作マスタモードで設定
・転送方法に"転送完了、エラー検出を関数呼び出しで通知する"を設定
・通知関数名にSpi0IntFuncを指定
・コマンド数:1、フレーム数:4
・コマンド0のビット長:8
・PA5をRSPCKA端子
・PA6をMOSIA端子
・PA7をMISOA端子
・PC4をSSLA0端子

 

#define BUFF_SIZE       (4)

const uint32_t send_buf[BUFF_SIZE] =
{
    0x11, 0x22, 0x33, 0x44
};  /* send data from RSPI0 to RSPI1 */

uint32_t dummy_rcv[BUFF_SIZE];

 

void main(void)
{
    R_PG_Clock_Set();                   /* Setting Clock */
    R_PG_RSPI_Set_C0();                 /* Setting RSPI0 */
    R_PG_RSPI_SetCommand_C0();          /* Setting command */

    R_PG_RSPI_StartTransfer_C0((uint32_t *)send_buf, dummy_rcv, 1);

    while(1);
}


void Spi0IntFunc(void)
{
  処理
}

 


(参考)

試しに転送方法に"転送完了まで待つ"を指定した場合、
エミュレータで確認すると、R_PG_RSPI_TransferAllData_C0関数内で
IR40(SPTI0)のフラグ確認でずっとループしているように見えました。
"転送完了まで待つ"の場合、以下を実行し、コマンドシーケンス完了までウェイトするようですが、
初めの送信割り込み要求が発生していないのでしょうか?

R_PG_RSPI_TransferAllData_C0((uint32_t *)send_buf, dummy_rcv, 1);

Parents
  • まずは、StartTransferの場合ですが、mainを終了しないようにしてみてはいかが。
    無限ループで、GetStatusを呼ぶのはどうでしょう。
    あとはSPIクロックが出ているかモニタしてみるとか。
  • Higetakaさん

    コメントありがとうございます。
    すいません。
    投稿に while(1);を書き忘れていました。
    動作確認しているプログラムには書いています。
    (投稿も修正しておきます)

    試してみましたところ、
    ずっとidle状態であり、SPIクロックも出ていませんでした。
    引き続き調査します。
    また何か気付いた点等ございましたら、
    コメントいただければ幸いです。
  • triangleさん、こんにちは。NoMaYと申します。

    本件、もう解決されましたでしょうか? 気になったものですから、残念ながらRX63Nでは無いのですが、その弟分であるRX631(がじぇるねのGR-CITRUS)で、少し試してみました。今回、triangleさんが投稿されていたソースを少し改造してマイコンのループバック機能で動かしてみたところ、特に問題無く期待したように実行されてしまいました。PDG2は2.09.000です。以下にプロジェクトのファイル一式のzipファイルや画面コピーを添付しておきます。

    なお、GR-CITRUSはE1エミュレータと繋ぐには難がありますので、RXシリアルデバッガというものでデバッグしました。(というか動いてしまったのでデバッグするまでには至らなかったのですが。) その為、RXシリアルデバッグの為に追加されているソース、RXシリアルデバッグの為に配置を変更/追加したセクション、RXシリアルデバッグの為にPLLクロックへの切り替えを小細工している箇所、 などあります。ただ、そのことにより動いてしまった、ということは無いと思っています。[2017/05/20 14:48修正(以下同様)]

    プロジェクトのファイル一式を固めたzipファイル
    RX631_RSPI_PG_20170520.zip    ← 誤) 発振子周波数 16MHz
    RX631_RSPI_PG_20170520_2.zip ← 正) 発振子周波数 12MHz
    RX631_RSPI_PG_20170524.zip   ⇒ 2017/05/24 私の次の投稿で書いた“外部ソース(ビルド対象外)”というカテゴリを(カテゴリだけを)プロジェクトに追加

    [画面コピー色々]

    ソース(zipファイルに含まれています)


    main()の先頭でブレークした状態(rcv_buf_d[]とrcv_buf_r[]は0になっている)


    main()の最後のwhile(1)でブレークした状態(rcv_buf_d[]とrcv_buf_r[]にループバック値が入っている)


    PDG2の設定(とりあえずzipファイルにpd2ファイルも含めてあります)





    [追記]

    余談になってしまいますが、PDG2のインストーラはpd2ファイルとPDG2.exeとのファイルの関連付けをしてくれないようです。でも、手動で関連付けておくと幾らかは便利になるような気がします。

Reply
  • triangleさん、こんにちは。NoMaYと申します。

    本件、もう解決されましたでしょうか? 気になったものですから、残念ながらRX63Nでは無いのですが、その弟分であるRX631(がじぇるねのGR-CITRUS)で、少し試してみました。今回、triangleさんが投稿されていたソースを少し改造してマイコンのループバック機能で動かしてみたところ、特に問題無く期待したように実行されてしまいました。PDG2は2.09.000です。以下にプロジェクトのファイル一式のzipファイルや画面コピーを添付しておきます。

    なお、GR-CITRUSはE1エミュレータと繋ぐには難がありますので、RXシリアルデバッガというものでデバッグしました。(というか動いてしまったのでデバッグするまでには至らなかったのですが。) その為、RXシリアルデバッグの為に追加されているソース、RXシリアルデバッグの為に配置を変更/追加したセクション、RXシリアルデバッグの為にPLLクロックへの切り替えを小細工している箇所、 などあります。ただ、そのことにより動いてしまった、ということは無いと思っています。[2017/05/20 14:48修正(以下同様)]

    プロジェクトのファイル一式を固めたzipファイル
    RX631_RSPI_PG_20170520.zip    ← 誤) 発振子周波数 16MHz
    RX631_RSPI_PG_20170520_2.zip ← 正) 発振子周波数 12MHz
    RX631_RSPI_PG_20170524.zip   ⇒ 2017/05/24 私の次の投稿で書いた“外部ソース(ビルド対象外)”というカテゴリを(カテゴリだけを)プロジェクトに追加

    [画面コピー色々]

    ソース(zipファイルに含まれています)


    main()の先頭でブレークした状態(rcv_buf_d[]とrcv_buf_r[]は0になっている)


    main()の最後のwhile(1)でブレークした状態(rcv_buf_d[]とrcv_buf_r[]にループバック値が入っている)


    PDG2の設定(とりあえずzipファイルにpd2ファイルも含めてあります)





    [追記]

    余談になってしまいますが、PDG2のインストーラはpd2ファイルとPDG2.exeとのファイルの関連付けをしてくれないようです。でも、手動で関連付けておくと幾らかは便利になるような気がします。

Children
  • NoMaYさん

    コメントありがとうございます。
    すみません。
    こちら投稿したつもりだったのですが、
    UPできていなかったようです。

    E1エミュレータをHSBRX63NP(R5F563NFDDFP)ボードに接続したものの、
    デバッグ・ツールが"RXシミュレータ"のままであった、
    という大変お粗末な結果でした。
    お騒がせしまして申し訳ございません。

    デバッグ・ツールを"RX E1(Serial)"に設定しましたところ、
    意図した動作を確認できました。