• 検索結果がありません。

割り込み処理

ドキュメント内 MDH-J0005 (ページ 108-112)

第 5 章  インタフェースモジュール制御 80

5.4  割り込み設定・制御

5.4.3  割り込み処理

DOS System開発らくらくパッケージの総合ライブラリを使用することで、割り込み 処理を簡単に行うことができます。

■概要

総合ライブラリを使用することで、アプリケーションから、割り込みを使用するための割り込み 処理関数の登録, 削除を簡単に行うことができます。

総合ライブラリのAPI関数をプログラム上から使用する場合は「include」ディレクトリ内の

「IFCM.H」を使用し、「lib」ディレクトリ内からご使用のコンパイラ, メモリモデルに合った総

合ライブラリをリンクして使用してください。

総合ライブラリでは、まずPciSetInterrupt関数で割り込み処理の登録ができます。その際、割り込 みベクタの設定や、割り込みコントローラへの設定は不要です。この関数では、最高で16個の割 り込み処理を登録できます。次にPciKillInterrupt関数で、登録した割り込みの解除ができます。こ の時も割り込みベクタや割り込みコントローラへの設定は不要です。

また、実際に割り込みが発生した場合に、EOIを発行したり、自インタフェースモジュールへの割

■割り込みライブラリ関数一覧

No. 関数名 機  能

1 PciSetInterrupt 割り込み処理関数を登録します。

2 PciKillInterrupt 割り込み処理関数を削除します。

3 ユーザ割り込み 処理関数

PciSetInterrupt関数にて登録するお客様が定義する割り込み処理関数で

す。本ユーザ割り込み処理関数は、インタフェースモジュールから該 当IRQの割り込みが発生した時にライブラリ側から呼び出されます。

■割り込みライブラリ関数個別説明

1. PciSetInterrupt

【機能】

割り込み処理関数を登録します。

【書式】

#include "IFCM.h"

int IFCDECL far PciSetInterrupt ( unsigned char Irq,

int far (far *Func)(int, short, long),

short user1,

long user2

);

【パラメータ】

Irq IRQ番号を設定してください。

(far *Func) (int, short, long)

呼び出されるユーザ割り込み処理関数へのfarポインタを指定します。

ユーザ割り込み処理関数へは、ハンドル, ユーザ変数(short型とlong型)が 渡されます。ユーザ割り込み処理関数を参照してください。 

user1 ユーザ割り込み処理関数に渡される、ユーザで自由に設定できるshort型

の変数です。

user2 ユーザ割り込み処理関数に渡される、ユーザで自由に設定できるlong型の

変数です。

【戻り値】

処理が正常に終了すると、ハンドルを返します。

このハンドルは、ユーザ割り込み処理関数を一意に認識するための0〜15の範囲の値です。

正常に処理が行えなかった場合、-1を返します。

Intel(R) Atom(TM) プロセッサ搭載 ( DOS System MODEL)で実行していない場合、

-9を返します。

2. PciKillInterrupt

【機能】

割り込み処理関数を削除します。

【書式】

#include "IFCM.h"

int IFCDECL far PciKillInterrupt (

short handle

);

【パラメータ】

handle PciSetInterrupt関数で取得したハンドルを指定してください。

【戻り値】

処理が正常に終了すると、0の値を返します。

正常に処理が行えなかった場合、-1の値を返します。

Intel(R) Atom(TM) プロセッサ搭載 ( DOS System MODEL)で実行していない場合、

-9を返します。

3. ユーザ割り込み処理関数

【機能】

PciSetInterrupt関数にて登録するお客様が定義する割り込み処理関数です。

本ユーザ割り込み処理関数は、インタフェースモジュールから該当IRQの割り込みが発生し た時にライブラリ側から呼び出されます。

【書式】

#include "IFCM.h"

int IFCDECL far user_func (

int handle,

short user1,

long user2

);

【パラメータ】

handle ユーザ割り込み処理関数を一意に識別するハンドルです。PciSetInterrupt 関数にて返されるハンドルと同一値です。このハンドルの値をチェックす ることにより、1つのユーザ割り込み処理関数を複数のIRQにて共有する時 にどのIRQから発生した割り込みであるかを判定することができます。

user1 PciSetInterrupt関数のUser1パラメータに指定された値です。

user2 PciSetInterrupt関数のUser2パラメータに指定された値です。

【戻り値】

ユーザ割り込み処理関数にて、割り込み処理を実行した場合には1を返すようにしてください。

該当インタフェースモジュール以外の他デバイスからの割り込みであった場合には0を返す ようにしてください。

【記述例】

int far user_func(int handle, short user1, long user2){

unsigned char stat;

unsigned short port;

port = user1;

stat = inp(port + 0x02); /*割り込みステータスの確認      */

if (stat & 0x10) { /*該当インタフェースモジュールからの割り込み確認*/

timer++;

return 1; /*割り込み処理の正常終了1をリターン      */

}

return 0; /*他のデバイスのため、0をリターン      */

}

【備考】

・Microsoft系コンパイラの場合には、/Gs(スタックチェック禁止)オプションを付加してコンパ イルしてください。

・ユーザ割り込み処理関数内では、必ずインタフェースモジュールの割り込みステータスの確

ドキュメント内 MDH-J0005 (ページ 108-112)