DTCを用いたRSPI通信時の割り込みについて

皆様

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

 

RX71Mマイコンを使用して、DTCによりRSPIから32bitのデータを連続送受信することを試みています。

現時点でDTCが正常に起動して、実際に通信も起きていることが確認できたのですが、

CPUへの割り込みが2回発生してしまう問題があります。

DTCはFITモジュールを使用しており、CPU割り込みはDTCの全転送終了後に1度発生する設定にしてあります。

 

DTCの転送回数を2回や4回などに変更しても、同じようにCPU割り込みは2回発生しています。

 

通信の流れは以下のようにしています。

 

①RSPI0の割り込みを無効化

②DTC起動要因の設定(FITモジュールのR_DTC_Create, R_DTC_Control関数)

③RSPI0の割り込みを有効化

④RSPI.SPDR.LONGレジスタに最初の32bitデータを書き込み

 

④に関しては、現時点では送信バッファエンプティ割り込みを発生させるために、最初のデータはプログラムから手動で書き込んでいます。

 

割り込みのタイミングに関しては、

最初の一回は④で書き込んだデータの転送終了時、2回目はDTCの全転送終了時に発生しているようです。

 

自分の希望としては、最初の一回目の割り込みは発生しないようにして、2回目の割り込みだけを発生させるようにしたいのですが、

そのような方法はあるのでしょうか?

 

よろしくお願いいたします。

 

開発環境:CS+ for CC V7.00.00

使用デバイス: RX71M_RSK

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

    RXマイコンでは、送信割り込みを使った連続送信処理をシンプルに記述する手法として、ダミーの送信バッファエンプティ割り込みを強制的に発生させる手法がありますが、その手法と今回の謎の1回目の割り込みとは話が整合しているような予感がしなくもないような気がしてきました。もし、この手法がDTCでも使えるのであれば、そもそも最初の1バイト目の送信を特別扱いすることなく、最初の1バイト目からを全てDTC転送することが出来るようになるのですが、そのことを見越して、そのような挙動になっている可能性もあります。ですが、まだ、ハードウェアマニュアルに記載を見付けることは出来ていません。(なお、ハードウェアマニュアルの他に、RXスマートコンフィグレータでRSPI+DTCで送信するコードを生成させ、そのコードを参考に見てみようかとも思い始めました。)

    なお、以下のRX71Mのハードウェアマニュアルの画面コピーは、DTC(やDMA)が絡んで来ない状況でRSPI単独またはSCI単独(参考)でダミーの送信バッファエンプティ割り込みを強制的に発生させるやり方について書かれた箇所ですが、参考までに抜き出してみました。

    RSPIの場合


    SCIの場合

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

    RXマイコンでは、送信割り込みを使った連続送信処理をシンプルに記述する手法として、ダミーの送信バッファエンプティ割り込みを強制的に発生させる手法がありますが、その手法と今回の謎の1回目の割り込みとは話が整合しているような予感がしなくもないような気がしてきました。もし、この手法がDTCでも使えるのであれば、そもそも最初の1バイト目の送信を特別扱いすることなく、最初の1バイト目からを全てDTC転送することが出来るようになるのですが、そのことを見越して、そのような挙動になっている可能性もあります。ですが、まだ、ハードウェアマニュアルに記載を見付けることは出来ていません。(なお、ハードウェアマニュアルの他に、RXスマートコンフィグレータでRSPI+DTCで送信するコードを生成させ、そのコードを参考に見てみようかとも思い始めました。)

    なお、以下のRX71Mのハードウェアマニュアルの画面コピーは、DTC(やDMA)が絡んで来ない状況でRSPI単独またはSCI単独(参考)でダミーの送信バッファエンプティ割り込みを強制的に発生させるやり方について書かれた箇所ですが、参考までに抜き出してみました。

    RSPIの場合


    SCIの場合

Children
No Data