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
  • こんにちは、当方、RX62T, RX63T でRSPIの使用経験あり、DTCの使用経験あり、FITの使用経験無しです。

    まず、④の前で、送信バッファエンプティのIRn.IR がセットされていないでしょうか。
    RX71Mハードマニュアル 1.10のp.472、表15.9の注2に、
    「IRn.IRフラグが“1”のとき、再度発生した割り込み要求(DTC/DMA転送要求)は無視されます。」
    とあります。フラグがセットされていて、④の後にDTC起動でなくCPU割込となっていないでしょうか。

    フラグクリアでもNGなら、騙されたと思って、2回クリアしてみて試してもらえると嬉しいです。
    RX71Mのマニュアルに同様の記載は見当たりませんでしたが、RX63Tのマニュアルのp.320の注1に、
    「ただし、SCI、RSPI、RIIC の各送信割り込み/ 受信割り込みの場合、IRn.IR フラグが“1” の状態で発生した
    割り込み要求は保持され、IRn.IR フラグが“0” になった後、保持された要求によって再度IRn.IR フラグが“1”
    になります。」
    と書かれています。RX62TからRX63Tへ移行するときに、ハマりました。RX71Mでは外れかもしれません。なお、RSPIだけでなく、UARTでも問題になりました。
  • 後半の、RX63Tのマニュアルの記載内容については、なぜそのような仕様になっているのか(なぜRX62Tから変更したのか)、目的がよく分かりませんので、理解できる方、教えて頂けると助かります。2回クリアしないと、履歴を完全に消すことはできないと捉えています。
Reply
  • 後半の、RX63Tのマニュアルの記載内容については、なぜそのような仕様になっているのか(なぜRX62Tから変更したのか)、目的がよく分かりませんので、理解できる方、教えて頂けると助かります。2回クリアしないと、履歴を完全に消すことはできないと捉えています。
Children
No Data