先に説明した割り込み要因および割り込み論理の設定と割り込みマスクの解除
を行なうためのioctlコマンドを考える。
この「割り込み要因・論理とマスク設定を行なうコマンド」のほかに、割り込み
処理において必要になる「インターバルタイマの周期設定を行なうコマンド」も
作成することにする。このコマンドでインターバルタイマを設定後、割り込み
マスク設定で、インターバルタイマ割り込みを有効にすることができる。
これにより、設定した周期毎に割り込みを発生させることが可能になる。
この2つのコマンドの名前を次のよう決める。
IOCTL_DIO_SET_EVENT: 割り込み要因・論理とマスク設定
IOCTL_DIO_SET_TIMER: インターバルタイマの周期設定
このコマンドの定義を前の実験で作成したヘッダーファイルの
dio_ioctl.hに追加する。
typedef struct _DIO_EVENT {
unsigned char irq_mask;
unsigned char irq_config;
} DIO_EVENT, *PDIO_EVENT;
#define IOCTL_DIO_SET_EVENT _IOW(DIO_IOC_MAGIC, 4, DIO_EVENT)
#define IOCTL_DIO_SET_TIMER _IOW(DIO_IOC_MAGIC, 5, unsigned char)
|
DIO_EVENT構造体のメンバ変数の内容は、IOCTL_DIO_SET_EVENTコマン
ドを実行するときに指定する割り込み設定の値になる。
また、インターバルタイマの設定値は1バイトのレジスタを設定するため、 unsigned char型を指定した。