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

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

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

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

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

Parents
  • THMさん

    送信完了(TI/TXEPT)割込み使用の想定でコメントします。

    ・TIを確認の後、送信バッファに書込む
    ・5バイト目を書く前に演算追加
    ・7バイト目書込み後、NOP等調整を経て信号出力

    とあります。

    TIビット基準であることから、以前は

    TI確認 ┬ バッファ更新
        ◇ 7バイト目-調整-信号出力

    であったのが、今回は

    TI確認 ◇ 5バイト目-演算
        ├ バッファ更新
        ◇ 7バイト目-調整-信号出力

    のようなイメージでよろしいでしょうか?システムクロックと外部クロックの関係は分かりませんが、5バイト目という判定が入ったことによって従来の処理に対して7バイト目のタイミングがずれることは有りうるのでは?と思いました。

    信号出力は最終ビット送信後とあるので、割込み内でU0C1.U0IRS=1(TXEPTI=1):送信完了時のタイミングで行うというのはいかがでしょうか。

    認識が間違っていたら申しわけありません。

    by すと@kon

    XKKhJHy7UlxwAY2R-0_A0405.jpg

Reply
  • THMさん

    送信完了(TI/TXEPT)割込み使用の想定でコメントします。

    ・TIを確認の後、送信バッファに書込む
    ・5バイト目を書く前に演算追加
    ・7バイト目書込み後、NOP等調整を経て信号出力

    とあります。

    TIビット基準であることから、以前は

    TI確認 ┬ バッファ更新
        ◇ 7バイト目-調整-信号出力

    であったのが、今回は

    TI確認 ◇ 5バイト目-演算
        ├ バッファ更新
        ◇ 7バイト目-調整-信号出力

    のようなイメージでよろしいでしょうか?システムクロックと外部クロックの関係は分かりませんが、5バイト目という判定が入ったことによって従来の処理に対して7バイト目のタイミングがずれることは有りうるのでは?と思いました。

    信号出力は最終ビット送信後とあるので、割込み内でU0C1.U0IRS=1(TXEPTI=1):送信完了時のタイミングで行うというのはいかがでしょうか。

    認識が間違っていたら申しわけありません。

    by すと@kon

    XKKhJHy7UlxwAY2R-0_A0405.jpg

Children
No Data