RX651 で RSPI + DTC による全二重クロック同期式通信

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

 

マイコン:RX651

環境:CS+

 

FIT モジュールを用いて、 RSPI + DTC で、次のような通信を実装しようとしています。

・ 全二重、クロック同期式、スレーブ動作

・ 16bit ずつ

 

以下は上手くできました。

・ SCI + DTC (ただし SCI なので 8bit ずつ)

・ RSPI (16bit ずつソフトウェア転送)

しかし、 RSPI と DTC (or DMAC) を組み合わせた場合、 DTC が起動せず、直ちにオーバランエラーが発生します。

(コードは、 FIT の RSPI, DTC アプリケーションノートを参考にしました。)

RSPI のアプリケーションノートに依れば可能らしいのですが、 DTC (or DMAC) と RSPI を組み合わせたサンプルコードは見付けられませんでした。

 

お知恵を拝借できれば幸いです。

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

    その後、どうでしょうか?オーバーランエラーは解消出来るようになったでしょうか?それとも、解消出来なくて、SPDRレジスタのアクセス幅は原因ではなかった、という状況でしょうか?

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

    その後、どうでしょうか?オーバーランエラーは解消出来るようになったでしょうか?それとも、解消出来なくて、SPDRレジスタのアクセス幅は原因ではなかった、という状況でしょうか?

Children
  • NoMaY さん、お世話になっております。

    返信を頂いて、あーあれか、と気になっていたのですが、体調不良で確認出来ず、申し訳ありませんでした。

    先ほど、確認致しました。
    具体的には、 DTC の FIT の設定で、
      data_size = DTC_DATA_SIZE_WORD; // 16bit ずつ転送
    を、
      data_size = DTC_DATA_SIZE_LWORD; // 32bit ずつ転送
    にしたところ、確かに DTC が起動し、転送されることを確認しました。

    転送元の配列に細工しないと 16bit ずつ歯抜けで転送されてしまいますが、これで RSPI + DTC を FIT で実現することができそうです。

    ありがとうございました。
  • 申し訳ありません、もう少し確認したところ、まだ以下の問題があり、送受信が実現できておりませんでした。

    先ず、 NoMaY さんご指摘の通り、アクセス幅を合わせないといけないというのは正しいです。アクセス幅を合わせる事で、送信側 DTC が起動し、 16 bit (1 word) ずつの送信がオシロで確認出来ました。

    しかし、受信側の DTC が起動しておりません。
    さらに、最初の 1 word 送受信をした段階で、 RSPI 受信完了の割り込み(RSPI FIT の rspi_spri0_isr)が呼ばれてしまいます。
    送信側の同様の関数(rspi_spri0_isr)は、当該(rspi_spri0_isr)を空関数にし、受信側の DTC を無効にし、エラー検知を無効にして確認したところ、指定回数の DTC 転送後に初めて呼ばれます。(送信データもオシロで確認し、正しいです。)なお、エラーはオーバランエラーです。

    (RSPI FIT モジュールで DTC 転送に指定した場合、)
    DTC FIT モジュール側の設定で、
      response_interrupt = DTC_INTERRUPT_AFTER_ALL_COMPLETE;
    としているので、指定回数の転送後に isr 到達が正しい動作だと思います。

    このような用途(RSPI, 16bit の送受信)では、 DTC を送受信同時に用いることができないのでしょうか?