組み込みシステム設計者のためのLIN2.0マイコン実装術(後編) ――スレーブ・ノード用ドライバ・ソフトウェア開発のポイント
このため,ここはブレークに見えるロー・パルスについて真偽を確かめる処理を施しておくほうがよいでしょう.この処理としては,フレーム途中のブレーク検出後はボーレート補正を行わず,0x55を受信できるかどうかで直前のロー・パルスがブレークだったかどうかを調べる方法が挙げられます.この方法がもっとも負荷が小さく,かつ適切に処理できます.フレーム途中ということは,直前にボーレート補正を行っているはずなので,通信品質上は問題ありません.
再度,リスト3を見てください.このリストは,UARTの1バイト受信の割り込みハンドラです.9行目のswitch文で,状態(フレームの位置)に応じて処理を分岐しています.19行目が同期バイト処理のcase文であり,20行目で受信データが0x55,つまり同期バイトに相当する値かどうかを判断しています.同期バイトでなければ直前のロー・パルスはブレークではなかったと判断し,正規のブレーク待ち(状態遷移における休止状態)に遷移します.同期バイトと判断された場合,次のフィールドである保護IDの処理へと遷移します.