dio_ioctl
関数のswitch
文にコマンドを追加記述する。
switch(cmd){ . . . case IOCTL_DIO_SET_EVENT: ret = dio_subioctl_setevent(pdio_res, arg); break; case IOCTL_DIO_SET_TIMER: ret = dio_subioctl_settimer(pdio_res, arg); break; . . } |
switch文で選択されるコマンドの実質的な処理は次頁のようにサブ関数(subioct)
で行なう。
IOCTL_DIO_SET_EVENT
コマンドの処理は、次の
dio_subioctl_setevent
関数で処理する。
「I/O資料」P.12の「1.8.ADR+0Dh:割り込みマスク」と
P.13の1.9.ADR+0Eh:割り込み要因設定を参照すること。
dio_subioctl_setevent
関数の引数argから設定用の構造体情報
の取出しを行なう。取出した構造体内の設定データが不正な場合には、設定を行
わずにエラーを返す。
割り込みの設定にはI/Oポートの指定の領域に対して、設定情報をそのまま書き
込む。
IOCTL_DIO_SET_TIMER
コマンドの処理は、次の
dio_subioctl_settimer
関数で処理する。
「I/O資料」P.10の「1.5.ADR+0Ah:インターバルタイマ」を参照すること。
dio_subioctl_settimer
関数ではインターバルタイマの設定値を取出し、
設定情報のチェックを行っている。
インターバルタイマの設定も、割り込みの設定と同じくinb関数を使用し
てI/Oポートの指定領域に取得したデータを書き込むことで実行される。
以上が、ドライバ側の割り込み処理の基本的な実装方針である。