/* 温度センサドライバ デバイス名: "thermo" データ番号 -100: 温度を測定して1バイトで返す(単位:℃) (リードのみ) */ #include <tk/tkernel.h> #include <device/sdrvif.h> /* 単純デバイスドライバインタフェース */ /* リード関数: 読込処理 */ INT read_fn( ID devid, INT start, INT size, VP buf, SDI sdi ) { if (start == -100 && size == 1) { /* 温度を測定して返す (単位:℃) */ *(B*)buf = in_w( 0x00215000 ) * 300 / 5120 - 300; return 1; } else return E_PAR; /* それ以外のデータ番号はパラメータエラー */ } /* ライト関数: 書込処理 */ INT write_fn( ID devid, INT start, INT size, VP buf, SDI sdi ) { return E_PAR; /* ライトは不可(パラメータエラー) */ } /* メイン関数: ドライバ登録処理 */ ER main( INT ac, UB *av[] ) { static SDI sdi; static SDefDev ddev = { NULL, "thermo", 0, 0, 0, 1, NULL, NULL, read_fn, write_fn, NULL }; if ( ac >= 0 ) { /* ロード時 */ out_w( 0x00215010, 0x0200f003 ); /* A/D変換の初期設定 */ out_w( 0x00215014, 0 ); out_w( 0x0021502c, 0x1f ); return SDefDevice( &ddev, NULL, &sdi ); /* デバイス登録 */ } else { /* アンロード時 */ return E_NOSPT; /* サポートしない */ } }
リスト2 温度センサドライバ(T-Kernelベース)thermo.c |
Copyright © ITmedia, Inc. All Rights Reserved.