RX63n DTCを用いてSCIの送信をしたときの送信割り込みについて

はじめまして。

私はRX63nを用いた通信プログラム設計をしている者です。

今、DTCを用いたSCIの送信において解決できない問題がありますので、アドバイスを頂けたらと思います。

問題となっているのはDTCを使用してSCIのデータ(10バイト)送信を行い、10バイトデータ送信時の送信割り込みを発生させたいのですが

送信割り込みが2回発生しています。(本来は送信割り込みは1回だけ発生のはず)

なぜ送信割り込みが2回発生するのかがわからず困っています。同じような問題を経験されたかた、対処方法がわかるかたいましたら。

アドバイスをお願いいたします。

 

通信をするにあたっての簡単な仕様です。

①送信処理⇒受信処理⇒アイドル状態⇒送信処理・・・・というシーケンスで状態を動かす。

②送信処理TDRへの送信データセットはDTC(データトランスファコントローラ)を用いて行う。

③送信処理から受信処理へのシーケンスの切り替えはDTCのTDRへ指定サイズ(10バイト)転送後の送信割り込みにて切り替える

④シーケンスが送信処理状態でないにも関わらず送信割り込みが発生した場合はシーケンス異常とする。

という仕様です。

 

Parents Reply Children
  • NoMaYさん、ありがとうございます。
    結果からすると、解決できました!
    教えていただいたスレッドが役に立ちました。

    私の場合の考えをまとめさせていただくと
    「1回目の割り込みはTDRに送信データの転送が全て終わった(TDRに最後の送信データをセットした)ときの送信割り込みである。」
    そして「2回目の割り込みはTDRにセットされているデータがTSRに移動するときの送信データエンプティのときの送信割り込みである。」
    ということになりました。

    ハードウェアマニュアルを参照すると、最後のデータをTDRにセットしたときはTIEを0クリアするようにと記載してありました。これにより最後のデータがTDRからTSRに移動したときの不用な送信割り込みを防ぐということだと解釈しました。
    ※また、TIEを0クリアするタイミングでTEIEを1にセットすることでデータ送信終了時に送信終了割り込みを発生させることができるらしいです。

    実際に1回目の割り込みでTIEを0クリアしたところ2回目の送信割り込みは発生はおさまりました。また、1回目の割り込み発生時にTEIEを1にセットすることで送信終了の判断もすることができました。

    ありがとうございました。