組み込みシステム設計者のためのLIN2.0マイコン実装術(後編) ――スレーブ・ノード用ドライバ・ソフトウェア開発のポイント
● 実際にマイコンをスリープさせるのはアプリで
マスタからスリープ要求を受信した場合,あるいは4秒間バスが動作しなかった場合,スリープ状態に遷移します.このとき,LINドライバ・ソフトウェアは単に状態を遷移するだけです.実際にマイコンをハードウェア的にスリープ状態にするのは,アプリケーション・ソフトウェアで行います.
リスト6はスリープ遷移の処理例です.マイコンのスリープ状態は割り込みで解除されてしまうので,不要な割り込み要因となるハードウェアは停止しておきます.ただし,LINバス上のウェイクアップ信号で目覚める必要があるため,関連するリソース(ここでは外部エッジ割り込み)は許可しておきます(6行目~8行目).
アプリケーション・ソフトウェアは,LINがスリープ状態になったことをl_ifc_read_statusというAPIで知ることができます.10行目はそのための情報を設定する手続きです.API経由でスリープ検出を行うためには,アプリケーション・ソフトウェアは定期的にこのl_ifc_read_statusを呼び続ける(ポーリングする)必要があります.それは少し不便なので,今回作成したドライバ・ソフトウェアでは,スリープ移行時にアプリケーション・ソフトウェア内の処理モジュールを呼び出す(コールアウト)処理を追加しています(13行目).つまり,ここで呼び出しているConfLin_vogCallSleepIfcの実体は,アプリケーション・ソフトウェア側にあります.
リスト6 スリープ遷移
参考・引用*文献
(1) * LIN Consortium;LIN Specification Package Revision 2.0,Sep.23,2003.
(2) NECエレクトロニクス; 78K0/KC1+ユーザーズマニュアル第2版(U16961JJ2V0UD00).
たち・のぶゆき
NECマイクロシステム(株)
<筆者プロフィール>
舘 伸幸.組み込み系ソフトウェア・エンジニア.1983年入社以来,デバイス会社でソフトウェアひとすじ.