/* 7セグメントLEDドライバ デバイス名: "led" データ番号 -100: 7セグメントLEDに値(1バイト:0〜99)を表示 (ライトのみ) */ #include <tk/tkernel.h> #include <device/sdrvif.h> /* 単純デバイスドライバインタフェース */ /* リード関数: 読込処理 */ INT read_fn( ID devid, INT start, INT size, VP buf, SDI sdi ) { return E_PAR; /* リードは不可(パラメータエラー) */ } /* ライト関数: 書込処理 */ INT write_fn( ID devid, INT start, INT size, VP buf, SDI sdi ) { if (start == -100 && size == 1) { /* 7セグメントLEDに値(0〜99)を表示 */ int p[] = {0x24, 0x3f, 0x62, 0x2a, 0x39, 0xa8, 0xa0, 0x3e, 0x20, 0x28 }; int x = *(B*)buf; if (x < 0 || x > 99) return E_PAR; /* 範囲外の値はパラメータエラー */ out_h( 0x16100002, p[x / 10] ); /* 10の位の表示 */ out_h( 0x16100000, p[x % 10] ); /* 1の位の表示 */ return 1; } else return E_PAR; /* それ以外のデータ番号はパラメータエラー */ } /* メイン関数: ドライバ登録処理 */ ER main( INT ac, UB *av[] ) { static SDI sdi; static SDefDev ddev = { NULL, "led", 0, 0, 0, 1, NULL, NULL, read_fn, write_fn, NULL }; if ( ac >= 0 ) { /* ロード時 */ return SDefDevice( &ddev, NULL, &sdi ); /* デバイス登録 */ } else { /* アンロード時 */ return E_NOSPT; /* サポートしない */ } }
リスト1 7セグメントLEDドライバ(T-Kernelベース)led.c |
Copyright © ITmedia, Inc. All Rights Reserved.