組み込みシステム設計者のためのLIN2.0マイコン実装術(後編) ――スレーブ・ノード用ドライバ・ソフトウェア開発のポイント
● 同期バイトにおけるボーレートの設定
ノードが水晶発振器など精度の高いクロックで動作していて,かつ使用するボーレートが固定でよい場合は,単にUARTの1バイト受信を行って0x55であるかどうかを確認すれば,同期バイトを検出できます.RC発振器などを用いているため周波数補正の必要がある場合は,パルス間隔を測定してボーレート補正を行います注3.図10に,その処理概要を示します.
まず,UARTを停止します.立ち下がりエッジ割り込みを有効にし,その割り込み回数によって処理を行います.立ち下がりエッジ割り込み1回目でタイマをスタートし,2回目はスキップ(無処理)します.3回目の割り込みが発生すると,タイマ値を読み取って,最初の割り込みから4ビット分の時間を得ることができます.これをもとにボーレートを計算し,設定します.4回目はスキップして,5回目でエッジ割り込みを禁止し,UARTを起動します.
注3;詳細は中編を参照のこと.
図10 ボーレート計測
処理時間に余裕を持たせるため,前半4ビット分を計測している.