R8C/M12Aのシリアルとポート出力のタイミング

7バイトを外部クロック同期シリアルで出力し、最終ビットの送出終了時にポートから信号(ゲート)を制御したいのです。外部クロック1個以内の時間誤差は許容。

1バイトづつ7回、TIビットを見ながらU0TBに送信データを書き、7バイト目を書いた後に、NOPや空ループで調整して最終ビットのタイミングでポートから出力します。
一旦うまく行ったのですが、5バイト目を書く前に演算処理を入れたら、ポート出力のタイミングが狂ってしまいました。(演算時間は同期クロック2個分程度)

つまり、TIビットで示す、送信バッファ空になるタイミング(シリアル送信開始を基準)が、それ以前の演算などの内部処理の有無から影響を受けるのでしょうか?
シリアル回路は外部クロック動作だから、こんな事は無いと思うのですが。

ご意見や対策、よろしくお願いします。

Parents
  • スタッフのチョコです。

    THM様のスレッドにコメントさせていただきます。

    R8C/M12Aの動作クロックと,同期シリアル通信用の外部入力クロックとの関係(比率)やどのような処理を行っているかがわからないので,正確なことはコメントできません。

    演算とデータ書き込みの順序で状態が変わると言うことは,通信時間に比べて処理時間のマージンが少ないと考えられます。

    どちらにしましても,情報が乏しくて正確な判断ができません。詳しい情報を開示いただければ,より正確なコメントができる可能性がございます。

    なお,TXEPTは転送の完了(相手側がデータの最終ビットを受け取った)タイミングを示しています。つまり,このタイミングを確認して次の処理行えばいいことになります。単純に転送完了を確認するなら,このビットを確認してください。
Reply
  • スタッフのチョコです。

    THM様のスレッドにコメントさせていただきます。

    R8C/M12Aの動作クロックと,同期シリアル通信用の外部入力クロックとの関係(比率)やどのような処理を行っているかがわからないので,正確なことはコメントできません。

    演算とデータ書き込みの順序で状態が変わると言うことは,通信時間に比べて処理時間のマージンが少ないと考えられます。

    どちらにしましても,情報が乏しくて正確な判断ができません。詳しい情報を開示いただければ,より正確なコメントができる可能性がございます。

    なお,TXEPTは転送の完了(相手側がデータの最終ビットを受け取った)タイミングを示しています。つまり,このタイミングを確認して次の処理行えばいいことになります。単純に転送完了を確認するなら,このビットを確認してください。
Children
No Data