SUPPORT-PAC(PC)306

PC-HELPER
MS-DOS版
アナログ入力ボード Eシリーズ用ドライバ Ver. 2.1
SUPPORT-PAC(PC)306
解説書
はじめに
はじめに
このたびは、SUPPORT-PAC(PC)306をご購入いただきまして、ありがとうございます。
SUPPORT-PAC(PC)306は、以下の当社製アナログ入力ボードを、DOS環境下で高級言語を用いて有効に使用してい
ただくためのソフトウェアです。
・PCIバスボード
AD12-16(PCI)E、AD12-16U(PCI)E、AD16-16(PCI)E、AD12-16U(PCI)EH、AD16-16U(PCI)EH、ADI12-16(PCI)
・ISAバスボード
AD12-16(PC)EH、AD12-16U(PC)EH、AD16-16(PC)EH、AD16-16U(PC)EH、
AD12-16(PC)E、AD12-16U(PC)E、AD16-16(PC)E、AD16-16U(PC)E、
本書は、SUPPORT-PAC(PC)306が提供しているソフトウェアの内容を解説しています。アナログ入力ボードについ
ては、各ボード添付の解説書を参照してください。
i
はじめに
解説書の使い方
本書では、以下の内容を解説しています。
・SUPPOURT-PAC(PC)の概要
・SUPPOURT-PAC(PC)の仕様
・プログラム作成のポイント
・ファンクションリファレンス
本文中では、各ファンクションの機能を次のマークで区別して説明しています。
AI アナログ入力機能
AO アナログ出力機能
DI デジタル入力機能
PC PCユーティリティ機能
DO デジタル出力機能
CN
T カウンタ機能
IN
T 割り込み機能
各ファンクションには必要な設定、制限事項があります。注意事項をよく読んでご使用ください。
本文中では、次の12商品を総称して「サポートボード」と記述します。
AD12-16(PC)EH
AD12-16U(PC)EH
AD16-16(PC)EH
AD16-16U(PC)EH
AD12-16(PC)E
AD12-16U(PC)E
AD16-16(PC)E
AD16-16U(PC)E
AD12-16(PCI)E
AD12-16U(PCI)E
AD16-16(PCI)E
ADI12-16(PCI)
AD12-16U(PCI)EH
AD16-16U(PCI)EH
特長
○SUPPORT-PAC(PC)306で提供している機能は、ファンクション(関数)単位で供給されています。
○各高級言語とリンクが可能なライブラリの他に、ソフトウェア割り込みによって機能を呼び出すことのできるデ
バイスドライバも提供しています。
○提供しているライブラリおよびデバイスドライバはアセンブリ言語で記述してあるため、処理を高速に行うこと
が可能です。
○サポート言語は次のとおりです。
・Microsoft C/C++
・Microsoft Visual C++
・Microsoft QuickC
・Borland C
・Borland Turbo C
・Borland Turbo C++
・Borland Turbo PASCAL
・Microsoft QuickBASIC
・Microsoft Macro Assembler
ii
はじめに
サポート機能
SUPPORT-PAC(PC)306がサポートしている機能には次のものがあります。
○アナログ入力機能
AI
○アナログ出力機能
AO
○デジタル入力機能
DI
○デジタル出力機能
DO
○カウンタ機能
○割り込み機能
CN
T
IN
T
○PCユーティリティ機能 PC
また、プログラム開発時に役立つユーティリティもサポートしています。
○プログラム開発を支援するサンプルプログラムジェネレートユーティリティ
○機能別に用意されたサンプルプログラム
○画面表示やファイル入出力のユーティリティサンプルプログラム
○SUPPORT-PAC(PC)306セットアッププログラム
SUPPORT-PAC(PC)306のバージョンによる相違点
SUPPORT-PAC(PC)306 Ver. 1.00 と Ver. 2.00, Ver. 2.01, Ver. 2.02, Ver. 2.10 の相違点を以下に示します。
Ver. 2.00
① PCユーティリティ機能の追加
・ハードウェア割り込み機能を使用する場合に必要となる、コンピュータの割り込みコントローラ(8259)の
設定を実行する処理をSUPPORT-PACのファンクションとしてサポートしました。
・アナログ入力機能でDMA転送を使用する場合に必要となる、コンピュータのDMAコントローラ(8237)の
設定を実行する処理をSUPPORT-PACのファンクションとしてサポートしました。
・DMA転送先のメモリとしてXMSメモリをサポートしました。
② サンプルプログラムのジェネレートユーティリティの追加
SUPPORT-PACを使用するプログラムの開発支援ツールとして利用できます。
③ 対応言語の追加
SUPPORT-PACの対応言語として、Borland Turbo PASCALをサポートしました。
④ SetAISmpFrq の削除
サポートボードの仕様変更により、サンプリングクロックの周波数設定ファンクション SetAISmpFrq が削除
されました。
iii
はじめに
Ver. 2.01
① リピート機能の使用条件の制限の追加
サポートボードの仕様変更により、SetAIFunction でサンプリング開始条件が変換データ比較に設定されてい
る場合は、リピート機能を使用することはできません。
リピート機能は、SetAIFunction でサンプリング開始条件が外部トリガ信号の立ち上がり/立ち下がりに設定
されているときのみ使用できます。
Ver. 2.02
① ソースコードの改良
ソースコードを改良しました。機能自体はVer. 2.01と変わりません。
Ver. 2.10
① サポートボードの変更
AD12-16(PC)EH、AD12-16U(PC)EH、AD16-16(PC)EH、AD16-16U(PC)EH、AD12-16(PCI)E、
AD12-16U(PCI)E、AD16-16(PCI)E、ADI12-16(PCI)を追加サポートしました。
Ver. 2.10 (2002年4月18日)
① サポートボードの変更
AD12-16U(PCI)EH、AD16-16U(PCI)EHを追加サポートしました。(解説書のみの変更)
iv
目次
目次
第1章
セットアップ
第2章
仕様
.................................................................................................................... 1-1
..................................................................................................................................... 2-1
2-1 SUPPORT-PAC(PC)の概要 ......................................................................................................... 2-1
2-2 仕様 ........................................................................................................................................ 2-2
第3章
ライブラリの使用方法
................................................................................................... 3-1
3-1 C言語 ...................................................................................................................................... 3-2
3-2 QuickBASIC .............................................................................................................................. 3-4
3-3
第4章
Turbo PASCAL .......................................................................................................................... 3-6
デバイスドライバの使用方法
....................................................................................... 4-1
4-1 ソフトウェア割り込み番号の選定 .............................................................................................. 4-1
4-2 デバイスドライバの登録 ........................................................................................................... 4-1
4-3 ファンクションの呼び出し ....................................................................................................... 4-2
第5章
プログラム作成のポイント
........................................................................................... 5-1
5-1 アナログ入力機能 ..................................................................................................................... 5-1
5-2 アナログ出力機能 ..................................................................................................................... 5-5
5-3 デジタル入力機能 ..................................................................................................................... 5-5
5-4 デジタル出力機能 ..................................................................................................................... 5-5
5-5 カウンタ機能 ........................................................................................................................... 5-6
5-6 割り込み機能 ........................................................................................................................... 5-7
5-7 PCユーティリティ機能 ........................................................................................................... 5-9
第6章
ファンクションリファレンス
....................................................................................... 6-1
6-1 ファンクションの一覧 .............................................................................................................. 6-1
6-2 ファンクションリファレンス .................................................................................................... 6-3
v
目次
第7章
付録
..................................................................................................................................... 7-1
7-1 サンプルプログラム................................................................................................................... 7-1
7-2 ユーティリティサンプルプログラム .......................................................................................... 7-10
7-3 PCIボードのリソース取得について ............................................................................................ 7-11
vi
第1章 セットアップ
第1章
セットアップ
SUPPORT-PAC(PC)306を使用するときは、オリジナルフロッピーディスクの内容をコピーして使用してください。
コピーの方法には次の2つがあります。
lSUPPORT-PAC(PC)306のセットアッププログラム(SETUP.EXE)を利用する。
lDOSのCOPYコマンドや市販のユーティリティソフトを利用する。
SETUP.EXE を使用する場合の手順を示します。
①パソコンの電源を入れ、DOSを起動してください。
②SUPPORT-PAC(PC)306を使用可能なフロッピーディスクドライブにセットしてください。
③SUPPORT-PAC(PC)306のあるドライブに移動し、次のようにタイプしてください。
> SETUP
(セットアッププログラムの起動)
④セットアップ画面が表示されたら、画面に表示されているメッセージに従ってコピーする内容を
指定してください。必要に応じてディレクトリを作成し、ファイルをコピーします。
注意
①SETUP.EXE によるファイルのコピーには、ファイルの転送先の指定に制限があります。
転送先のドライブ名とパス名は、文字数の合計が半角23字までしか指定できません。
文字数が半角で24字以上のときは、DOSのCOPYコマンドや市販のユーティリティソフトを利用
してください。
②ディレクトリ名を¥SUP306以外でセットアップする場合は、添付のデバイスドライバが
デバイス名として使用しているCONTECという名前以外のディレクトリ名を指定してください。
③セットアップが終了したら、SUPPORT-PAC(PC)306のオリジナルフロッピーディスクは大切に
保管しておいてください。
1-1
第1章 セットアップ
1-2
第2章 仕様
第2章
仕様
2-1 SUPPORT-PAC(PC)の概要
PC-HELPERの各ボードをサポートするソフトウェアを総称して、SUPPORT-PAC(PC)と呼んでいます。
また、SUPPORT-PAC(PC)が提供している各機能をファンクションと呼んでいます。
各高級言語
SUPPORT-PAC(PC)のファンクションを使用する手段として、各高級言語用
のライブラリとデバイスドライバが用意されています。
C
Turbo
Quick
BASIC PASCAL MASM
インターフェイス部
レジスタ
情報
ライブラリは、各高級言語との橋渡しを行うインターフェイス部と、ボー
ドを直接アクセスするBIOS部の2つで構成され、各高級言語とリンクでき
る形で提供されています。
デバイスドライバは、ボードを直接アクセスするBIOS部が常駐する形で提
BIOS 部
供されています。
BIOS部およびインターフェイス部のソースコードは非公開です。
ボード
SUPPORT-PAC(PC)は、2HC、または2HD DOSフォーマットのフロッピーディスクに格納されています。
フロッピーディスク内の README.DOC というファイルに、SUPPORT-PAC(PC)に含まれているファイル名とその
概要が、ディレクトリとともに記述されています。
README.DOC の内容を読むためには、DOSのTYPEコマンドや市販のエディタを使用してください。
2-1
第2章 仕様
2-2 仕様
仕様
適応OS
適応言語
MS-DOS, PC-DOS
Ver.2.11以上
MS-DOS/V, PC-DOS/V
Ver5.0/V以上
Microsoft C/C++(S, M, Lモデル)
Ver.5.1∼7.0
Microsoft Visual C++(S, M, Lモデル)
Ver.1.0
Microsoft QuickC(S, M, Lモデル)
Ver.1.1
Borland C(S, M, Lモデル)
Ver.2.0
Borland Turbo C++(S, M, Lモデル)
Ver.1.0
Borland Turbo C(S, M, Lモデル)
Ver.2.0
Microsoft QuickBASIC
Ver.4.5
Borland Turbo PASCAL
Ver.7.0
Microsoft Macro Assembler
Ver.6.0
割り込み
ハードウェア割り込みの使用
適応機種
IBM PC/AT またはその互換機
対象ボード
AD12-16(PC)E、AD12-16U(PC)E、AD16-16(PC)E、AD16-16U(PC)E、
(IRQ5, IRQ7, IRQ9, IRQ10, IRQ11, IRQ12, IRQ15 のいずれかひとつ)
AD12-16(PC)EH、AD12-16U(PC)EH、AD16-16(PC)EH、AD16-16U(PC)EH、
AD12-16(PCI)E、AD12-16U(PCI)E、AD16-16(PCI)E、ADI12-16(PCI)
AD12-16U(PCI)EH、AD16-16U(PCI)EH
注意
①EMMドライバを使用している場合には、DMA転送が行えない場合があります。
②XMSメモリへのDMA転送は、CONFIG.SYSにXMSメモリ制御用のソフトウェア‘HIMEM.SYS’
(DOS標準添付のXMSメモリ制御用ソフトウェア)が、登録されている必要があります。
また、DMA転送先となるXMSメモリ領域は256Kbyte以上必要です。
③Windows 95、Windows 98のDOS窓などでの動作保証はしておりませんが、一般に、割り込み、
DMAなどを使用していなければ使用は可能です。(WindowsNT系では使えません)
④適応言語に記載されているバージョンよりも新しいものの動作確認はしておりません。
⑤Microsoft Visual C++は16ビットコンパイラのみ動作可能です。
Visual C++ Ver2.0以降の32ビットコンパイラでは使用できません。
2-2
第3章 ライブラリの使用方法
第3章
ライブラリの使用方法
この章では、ライブラリを使用したプログラムを作成する上で、必要とされる処理内容および注意点を、各高級言
語別に解説します。
SUPPORT-PAC(PC)306のライブラリは、対応言語別に3種類(C言語、QuickBASIC言語、Turbo PASCAL言語)提供さ
れています。
SUPPORT-PAC(PC)306の各ファンクションを使用するためには、次の処理が必要です。
①SUPPORT-PAC(PC)306のファンクションの宣言が必要です。添付のサンプルプログラムでインクルードされて
いる以下のファイルは、SUPPORT-PAC(PC)306のファンクションの宣言を行っています。使用する言語に対応
するファイルをソースプログラムを作成するディレクトリにコピーし、インクルードファイルとして指定して
ください。
C言語
H306.H
QuickBASIC言語
H306.BI
Turbo PASCAL言語
H306.TPU
②各言語で作成したソースプログラムをコンパイルしてできたOBJファイルと、SUPPORT-PAC(PC)306のライブ
ラリを一緒にリンクしてください。このとき、SUPPORT-PAC(PC)306のライブラリはリンクするOBJファイルと
同一のディレクトリにあらかじめコピーしておいてください。SUPPORT-PAC(PC)306のライブライリが存在す
るディレクトリをOBJファイルと別にする場合や、複数ファイルを同時にリンクする方法は、言語により多少異
なります。詳細は各言語の解説書のリンクに関する章を参照してください。
それでは以下に、各高級言語別のライブラリの使用方法を示します。
3-1
第3章 ライブラリの使用方法
3-1 C言語
C言語用のライブラリは以下のC言語に対応しています。
・Microsoft系
Microsoft C/C++, Microsoft Visual C++, Microsoft QuickC
・Borland系
Borland C, Turbo C, Turbo C++
(1) 引き数
引き数の型の宣言は、第6章ファンクションリファレンスのC言語の書式の項目で記載されているとおりです。
SUPPORT-PAC(PC)306の各ファンクションのプロトタイプ宣言は、添付のサンプルプログラムでインクルードさ
れている H306.H を参照してください。
SUPORT-PAC(PC)306の各ファンクションを使用するプログラムでは、必ず H306.H をインクルードしてくださ
い。
プログラムで宣言する引き数の型は、 H306.H のプロトタイプ宣言で指定している型以外は設定しないでくださ
い。また、 H306.H のプロトタイプ宣言の変更は行わないでください。
(2) ライブラリとのリンク
C言語用のライブラリ
①スモールモデル:
H306MCS.LIB
②ミディアムモデル: H306MCM.LIB
③ラージモデル:
H306MCL.LIB
C言語用のライブラリは、作成するソースファイルと同じディレクトリにコピーして使用してください。
以下に、C言語用ライブラリとのリンク方法を、コンパイラ別に示します。
次のようにタイプし、コンパイルを行ってください。
ただし、ソースファイルのファイル名は sample.c とします。
3-2
第3章 ライブラリの使用方法
n Microsoft C/C++, Microsoft Visual C++を使用する場合
①スモールモデル:
> cl /AS sample.c /link h306mcs
②ミディアムモデル:
> cl /AM sample.c /link h306mcm
③ラージモデル:
> cl /AL sample.c /link h306mcl
n Microsoft QuickCを使用する場合
①スモールモデル:
> qcl /AS sample.c /link h306mcs
②ミディアムモデル:
> qcl /AM sample.c /link h306mcm
③ラージモデル:
> qcl /AL sample.c /link h306mcl
n Borland Cを使用する場合
①スモールモデル:
> bcc -ms -esample sample.c h306mcs.lib
②ミディアムモデル:
> bcc -mm -esample sample.c h306mcm.lib
③ラージモデル:
> bcc -ml -esample sample.c h306mcl.lib
n Borland Turbo C++, Borland Turbo Cを使用する場合
①スモールモデル:
> tcc -ms -esample sample.c h306mcs.lib
②ミディアムモデル:
> tcc -mm -esample sample.c h306mcm.lib
③ラージモデル:
> tcc -ml -esample sample.c h306mcl.lib
3-3
第3章 ライブラリの使用方法
3-2 QuickBASIC
QuickBASIC言語用のライブラリは以下のQuickBASIC言語に対応しています。
・Microsoft Quick BASIC
(1) 引き数
引き数の型の宣言は、第6章ファンクションリファレンスのQuickBASICの書式の項目で記載されているとおりで
す。
各ファンクションのプロシージャ宣言の一覧は、添付のサンプルプログラムでインクルードされている H306.BI
を参照してください。
SUPPORT-PAC(PC)306のファンクションは戻り値を持ちませんが、QuickBASICの制限からファンクションは、す
べて <FUNCTIONプロシージャ> として定義されています。このため、ファンクションを実行するときには必ず
戻り値を受ける形で使用してください。
データを入力するファンクション(例:GetStatus)の引き数は、その変数の領域にファンクション内部で入力データ
を直接格納するため、ソースプログラムでは必ず <VARPTR> と <VARSEG> を使ったアドレス指定の方法を用
いてください。
ライブラリの各ファンクションを使用するプログラムは、必ず H306.BI をインクルードしてください。
プログラムで宣言する引き数の型は、 H306.BI のプロシージャ宣言で指定している型以外は設定しないでくださ
い。また、 H306.BI のプロシージャ宣言の変更は行わないでください。
(2) ライブラリとのリンク
QuickBASIC用のライブラリ(LIBファイル):
H306QB.LIB ..... コンパイラ使用の場合に必要
QuickBASIC用のQLBファイル:
H306QB.QLB ... インタプリタ使用の場合に必要
QuickBASIC用のOBJファイル:
H306QB.OBJ .... 新規LIBファイル作成のときに必要
QuickBASIC用ライブラリとのリンク方法を、インタプリタ/コンパイラ別に示します。
nインタプリタでの実行
<実行環境>
作成するプログラムと同じディレクトリに、以下のファイルをコピーしてください。
・H306QB.QLB
・H306QB.LIB
・H306.BI
3-4
第3章 ライブラリの使用方法
<実行手順>
下記の手順で実行してください。
ただし、ソースプログラムのファイル名は SAMPLE.BAS とします。
①エディタの起動:> QB /L H306QB.QLB SAMPLE.BAS
②エディタの操作:[Alt]キーと[R]キーを押し、RUNメニューを選択します。
③エディタの操作:[S]キーを押し、プログラムをスタートさせます。
nコンパイラでの実行
<実行環境>
実行環境は、インタプリタでの実行の場合と同じになります。
<実行手順>
下記の手順で実行してください。
ただし、ソースプログラムのファイル名は SAMPLE.BAS とします。
nエディタを使用する例
①エディタの起動:> QB /L H306QB.QLB SAMPLE.BAS
②エディタの操作:[Alt]キーと[R]キーを押し、RUNメニューを選択します。
③エディタの操作:[X]キーを押し、EXEファイル作成画面を表示させます。
④エディタの操作:リターンキーを押しEXEファイル作成を開始します。
⑤エディタの操作:[Alt]キーと[F]キーを押し、FILEメニューを選択します。
⑥エディタの操作:[X]キーを押し、エディタを終了させます。
⑦プログラム実行:> SAMPLE
nコンパイラのみ使用する例
①コンパイル:
> BC SAMPLE.BAS / D / O / T / C : 512;
②リンク:
> LINK SAMPLE + H306QB.LIB, SAMPLE.EXE
③プログラム実行: > SAMPLE
(3) 新しいライブラリの作成方法
既存の H306QB.QLB、H306QB.LIB に、違うOBJファイルの内容を加え、ひとつのファイルにする方法を以下に
示します。
新しく加えるオブジェクトファイル名を NEW.OBJ とします。
nH306QB.QLBの作成
> LINK /Q H306QB.OBJ + NEW.OBJ, H306QB.QLB, , BQLB45.LIB(Quick BASIC Ver.4.5の場合)
nH306QB.LIBの作成
> LIB H306QB NEW.OBJ + H306QB.OBJ;
3-5
第3章 ライブラリの使用方法
3-3 Turbo PASCAL
Turbo PASCAL言語用のライブラリは以下のTurbo PASCAL言語に対応しています。
・Borland Turbo PASCAL
(1) 引き数
引き数の型の宣言は、第6章ファンクションリファレンスのTurbo PASCALの書式の項目で記載されているとおり
です。
SUPPORT-PAC(PC)306のファンクションは戻り値を持ちませんが、Turbo PASCALの制限からファンクションは、
すべて戻り値を持つファンクションとして定義されています。このため、ファンクションを実行するときには必
ず戻り値を受ける形で使用してください。
データを入力するファンクション(例:GetStatus)の引き数は、ライブラリユニットファイル(H306.TPU)で VAR を
使ったアドレス指定方法を用いているので、その変数の領域にファンクション内部で入力データが直接格納され
ます。
SUPPORT-PAC(PC)306のファンクションを使用するプログラムでは、ライブラリユニットファイル(H306.TPU)を
必ず USE 命令で指定してください。
プログラムで宣言する引き数の型は、第6章ファンクションリファレンスのTurbo PASCALの書式の項目で記載さ
れている型以外は設定しないでください。また、引き数の型の変更を行うことはできません。
(2) ライブラリとのリンク
Turbo PASCAL用のライブラリ(TPUファイル):
H306.TPU ... EXEファイルを作成するときに必要
Turbo PASCAL用のOBJファイル:
H306.OBJ
Turbo PASCAL用のPASファイル:
H306. PAS ... 新規TPUファイルを作成するときに必要
... 新規TPUファイルを作成するときに必要
Turbo PASCAL用のライブラリは、作成するソースファイルと同じディレクトリにコピーして使用してください。
以下に、Turbo PASCAL用ライブラリとのリンク方法を示します。
次のようにタイプし、コンパイルを行ってください。
ただし、ソースファイルのファイル名は sample.pas とします。
<実行手順>
以下の手順で実行してください。
①コンパイル:
> TPC sample.pas
②プログラム実行:
3-6
> sample
第3章 ライブラリの使用方法
(3) 新しいライブラリの作成方法
Turbo PASCAL Ver. 7.0 以外のバージョンでソースファイルを作成する場合は、以下の手順で各バージョンに適し
たライブラリ(TPUファイル)を作り直してください。
<実行手順>
以下の手順で実行してください。
①既存のH306.OBJ と H306.PAS をライブラリ(TPUファイル)を作成するディレクト
リにコピーします。
②作成:> TPC H306.PAS
3-7
第3章 ライブラリの使用方法
3-8
第4章 デバイスドライバの使用方法
第4章
デバイスドライバの使用方法
アセンブラのように提供しているライブラリが使えない場合、ソフトウェア割り込みを利用してライブラリのファ
ンクションを利用することが可能です。
ソフトウェア割り込みを使用したプログラムを実行させるためには、ソフトウェア割り込み番号を選定し、DOSの
システムにSUPPORT-PAC(PC)306のデバイスドライバ(H306.DRV)を登録する必要があります。
また、SUPPORT-PAC(PC)306の各ファンクションを呼び出すためには、データの渡し方も決められています。
注意
C 言語や QuickBASIC 言語などでプログラミングする場合は、通常ライブラリを使用します。デバイスドライバ
は登録しないでください。(第 3 章を参照してください)
以下に、デバイスドライバの登録方法とファンクションの呼び出し方法を解説します。
4-1 ソフトウェア割り込み番号の選定
ソフトウェア割り込み番号は、INT 00H∼INT FFHの範囲で設定可能です。
ただし、コンピュータや他のデバイスドライバが使用していない番号を設定する必要があります。
SUPPORT-PAC(PC)306のデバイスドライバのサンプルプログラムでは、INT 65Hを使用した例を紹介しています。
以降は、設定するソフトウェア割り込み番号を、INT 65Hとして解説します。
4-2 デバイスドライバの登録
デバイスドライバを登録するためには、以下に解説する2つの方法があります。
使用する環境に適した方法で登録してください。
(1) DOS起動時に、CONFIG.SYSによってDOSシステムに登録
エディタなどを使用して、デバイスドライバを登録するようにCONFIG.SYSファイルを書き換えます。
DOSが起動するときに、デバイスドライバがDOSシステムに登録されます。
以下の1行をCONFIG.SYSに追加します。(H306.DRVがCドライブのルートディレクトリにある場合の例)
DEVICE = C: ¥ H306.DRV /65
4-1
第4章 デバイスドライバの使用方法
(2) DOS起動後に、ADDDRVコマンドによってDOSシステムに登録
DOS 5.0/V以降のバージョンがインストールされている動作環境では、デバイスドライバをCONFIG.SYSに登録し
ておかなくても、DOSシステム起動後に、ADDDRVコマンドを使用してデバイスドライバを登録することができ
ます。
ADDDRVコマンドで常駐したデバイスドライバは、DELDRVコマンドにより切り離すこともできます。
一連の処理は、SUPPORT-PAC(PC)306に添付されている以下のファイルを利用することで実行可能です。
参考にしてください。
・SETDRV.BAT
・DRV.ADD
なお、SETDRV.BATを実行すると、ADDDRVコマンドを使用してDOSシステムに登録されている他のデバイスド
ライバは、すべて切り離されてしまうので注意してください。
4-3 ファンクションの呼び出し
デバイスドライバをDOSシステムに登録した後、SUPPORT-PAC(PC)306の各ファンクションを呼び出すには、引き
数の先頭アドレスを DS: [BX] に設定し、ソフトウェア割り込みを実行します。
SUPPORT-PAC(PC)306のデバイスドライバのサンプルプログラムでは、アセンブリ言語のソースプログラム
(*.ASM)でファンクションの呼び出し方法を紹介しています。また、インクルードされているH306DRV.H で引き
数を DS: [BX] に設定する例を紹介しています。
サンプルプログラムでは、H306DRV.H をインクルードすることで、各ファンクションの呼び出しが可能になりま
すが、一般にH306DRV.H を使用する場合は以下の制限があります。
①引き数に対応する変数は、すべてソースプログラムのデータ領域で確保する
②引き数に対応する変数に数値を代入してから、ファンクションの呼び出しを行う
③H306DRV.H で使用するワークエリア <drvwork> をソースプログラムのデータ領域で150Hバイト確保する
④ファンクションで多数の引き数を指定する場合は、引き数と引き数との間はスペースで区切る
⑤ファンクションでソフトウェア割り込み番号 <int_tbl> を引き数の一番先頭に設定する
なお、画面表示処理を行う場合は、306DRV.H と一緒に DRSMP.H もインクルードすると便利です。
DRSMP.H で提供しているマクロの使用方法は、添付のサンプルプログラムを参照してください。
4-2
第5章 プログラム作成のポイント
第5章
プログラム作成のポイント
SUPPORT-PAC(PC)306で提供している機能(アナログ入力、アナログ出力、デジタル入力、デジタル出力、
カウンタ、PCユーティリティ)は、それぞれ独立しています。これらの機能の中には、一連の手順が必要なものが
あります。
この章では、プログラムを作成する上でのポイントを機能ごとに解説します。
PCIバス対応ボードを使用する場合は、第7章を必ず読んでください。
5-1 アナログ入力機能
AI
アナログ信号を分解能に応じたデジタルデータに変換します。
アナログ入力機能は、次の3つの手順で実行します。
START
①条件設定
① サンプリングクロックなどのアナログ入力機能の条件設定
②動作開始
② ボードの動作開始
③変換データ入力
③ バッファメモリからの変換データ入力
END
これらの3つの手順の詳細を以下に示します。
(1) アナログ入力機能の条件設定
基本的なAIファンクションの実行手順とポイントを以下に示します。
アナログ入力機能の条件設定は、①∼⑮の順番でプログラミングしてください。
① No.000 : InitBoard
:サポートボードを初期化します。
② No.101 : SetAIFunction :アナログ入力機能を設定します。必ず設定してください。
③ No.111 : SetAIGain
:入力ゲインをチャネル単位で設定します。
④ No.121 : SetAIChannel
:入力チャネルの順序をチャネル単位で設定します。
⑤ No.131 : SetAIScanClk
:スキャンクロックを設定します。必ず設定してください。
⑥ No.133 : SetAISmpClk
:サンプリングクロックを時間単位で設定します。
②の入力チャネルモードの選択がマルチの場合に設定が必要です。
②のサンプリングクロックの選択が内部クロックで周期設定の場合に
設定が必要です。
⑦ No.141 : SetAIStartLev :サンプリング開始条件を設定します。
②のサンプリング開始条件の選択が変換データ比較の場合に設定が必要です。
5-1
第5章 プログラム作成のポイント
⑧ No.151 : SetAIStopLev
:サンプリング停止条件を設定します。
②のサンプリング停止条件の選択が変換データ比較の場合に設定が
必要です。
⑨ No.161 : SetAISmpNum
:トリガディレイ回数/サンプリング回数/遅延サンプリング回数を設定しま
す。必ず設定してください。
②⑦⑧の設定条件により各回数の設定値を判断する必要があります。
⑩ No.163 : SetAIRptNum
:リピート回数を設定します。
⑪ No.191 : SetAIDmaFunc
:DMA転送条件を設定します。
⑫ No.200 : SetPC8237
:コンピュータのDMAコントローラ(8237)の設定を行います。
⑬ No.202 : GetPCXmsMem
:XMSメモリブロックを確保し、変換データをXMSメモリへDMA転送する場合
⑭ No.170 : RstAIObm
:バッファメモリを初期化します。
②のリピートモードの選択が回数設定の場合に設定が必要です。
②のDMA転送機能の選択が使用の場合に設定が必要です。
②のDMA転送機能の選択が使用の場合に設定が必要です。
に設定が必要です。
⑮ No.171 : SetAIObmWtAdr :バッファメモリのライトアドレスを設定します。
[No.170]は、バッファメモリ形式がFIFO形式/リング形式いずれの場合でも有効です。
[No.171]は、バッファメモリ形式がリング形式の場合のみ有効です。
[No.202]は、CONFIG.SYSファイルにXMSメモリ制御用のソフトウェア ‘HIMEM.SYS’ (DOS標準添付のXMSメ
モリ制御用ソフトウェア)が、登録されている必要があります。
(2) ボードの動作開始
(1)で設定した条件で動作を開始させます。
No.001 : StartAI
:サンプリングを開始します。
[No.001 : StartAI]を実行後、すべてのサンプリングを終了すると動作を停止します。
No.002 : StopAI
:サンプリングを停止します。
No.172 : GetAIObmWtAdr :バッファメモリのライトアドレスを入力します。
[No.002 : StopAI]は、サンプリング動作中に実行すると、強制的にサンプリングを停止させることができます。
[No.172 : GetAIObmWtAdr]は、サンプリング動作が停止しているときに実行してください。
以下に、[No.001 : StartAI]実行後、サンプリング動作中でも使用可能なアナログ入力機能のAIファンクションを
示します。これらのAIファンクションの実行順序には制限はありません。
サンプリング動作の前後で、任意の順序で実行できます。
No.009 : GetStatus
:ステータスを入力します。
No.010 : RstAIStatus
:オーバーレンジエラーとスタートトリガエラーステータスを初期化します。
No.173 : SetAIObmRdAdr
:バッファメモリのリードアドレスを設定します。
No.174 : GetAIObmRdAdr
:バッファメモリのリードアドレスを入力します。
No.175 : GetAIObmTrgAdr :バッファメモリのトリガドライトアドレスを入力します。
[No.173∼No.175]は、バッファメモリ形式がリング形式の場合のみ有効です。
バッファメモリに関するステータス情報は、[No.009 : GetStatus]で確認できます。
(3) バッファメモリからの変換データ入力
5-2
第5章 プログラム作成のポイント
バッファメモリから変換データを入力するには、I/Oアクセスによる方法と、DMA転送による方法があります。
n I/Oアクセスによる方法
バッファメモリ内に変換データが格納されている状態であれば、変換データを入力することができます。
No.004 : GetAIData
:ひとつの変換データを入力し、指定された変数に格納します。
No.006 : GetAIArray
:複数の変換データを入力し、指定された配列変数に格納します。
これらのAIファンクションは、サンプリング動作中でも実行することができます。
n DMA転送による方法
DMA 転送は、CPU の I/O 命令を介さずに、バッファメモリ内の変換データをコンピュータの内部メモリへ転送
します。CPU を経由する必要が無いため、DMA 転送中に CPU は別の処理を実行することができます。
また、DMA 転送の速度はコンピュータのハードウェアに依存しますが、CPU の I/O 命令を介していないためプ
ログラム言語による処理速度の制限を受けません。以上のように、DMA 転送には処理の高速化がはかれるとい
う特長があります。
サポートボードで DMA 転送機能を利用するには、ボードに対する DMA 転送条件の設定と、コンピュータの D
MA コントローラ(8237)の設定が必要です。
[No.101 : SetAIFunction] は、DMA 転送機能を[使用]、バッファメモリ形式を[FIFO]に設定してください。
また、SUPPORT-PAC(PC)306 では DMA 転送先のメモリとして、メインメモリの他に XMS メモリも使用する
ことができます。大容量の変換データを転送する場合には、XMS メモリを使用してください。DMA 転送先の
メモリによって設定手順が異なりますので、(1)アナログ入力機能の条件設定 を参照して設定を行ってくださ
い。
DMA 転送の設定条件には、コンピュータの仕様や使用している周辺機器によって制限を受けるものがあります。
以下の説明を参考に設定を行ってください。
PCI バス対応ボードでは、DMA 転送機能は使用できません。
◇ メインメモリへの転送
DMA チャネル
[No.191 : SetAIDmaFunc] で、ボードに対して DMA チャネルを設定してください。
また、[No.200 : SetPC8237] で、コンピュータに対して DMA チャネルを設定してください。
使用できる DMA チャネルは、コンピュータの機種や使用するディスクユニットなどの周辺機器の環境など
によって制限されます。
DMA 転送方向
[No.200 : SetPC8237] で、データを転送する方向を設定してください。
サポートボードでの DMA 転送は、I/O → memory の方向で使用してください。
DMA 転送先アドレス
[No.200 : SetPC8237] で、転送先となるコンピュータのメインメモリのアドレスを設定してください。
DMA 転送データ数
[No.200 : SetPC8237] で、転送するデータの数を設定してください。
128K バイト以内のデータを転送する場合には、その数を設定します。
128K バイトを超えるデータを転送する場合には、DMA 転送データ数の最大値である 65,535 を設定します。
この場合の転送データ数の総数は、128K バイトの倍数になります。
オートイニシャライズモード
[No.200 : SetPC8237] で、オートイニシャライズ機能の使用/未使用を設定してください。128K バイトを超
えるデータを転送する場合は、必ずこのモードを[使用]に設定してください。
5-3
第5章 プログラム作成のポイント
オートインクリメントモード
[No.200 : SetPC8237] で、バンクアドレスオートインクリメント機能の使用/未使用を設定してください。1
28K バイトを超えるメモリ領域にデータを転送する場合には、必ずこのモードを[使用]に設定してくださ
い。
ターミナルカウンタ機能
[No.191 : SetAIDmaFunc] で、DMA 転送データ数で設定した数の転送が終了したときに、コンピュータから
ボードに通知される TC 信号のカウント機能の使用/未使用を設定してください。オートイニシャライズ機
能を使用して、128K バイト以内のメモリ領域にデータを繰り返し無制限に転送する場合のみ、この機能を
[未使用]に設定してください。
[No.191 : SetAIDmaFunc] で、TC 信号のカウント回数を設定してください。
ターミナルカウンタ機能を[未使用]に設定したときは、この設定は無効です。128K バイト以内のデータを
転送する場合は 0 を設定してください。128K バイトを超えるデータを転送する場合には、128K 単位でメモ
リ領域を確保し、ターミナルカウントデータの設定値を次の値に設定してください。
ターミナルカウントデータの設定値 = 確保したメモリ容量 / 128K - 1
◇ XMS メモリへの転送
XMS メモリへの転送を行う場合は、DMA 転送先アドレスとターミナルカウントデータの設定がメインメモ
リへの転送の場合と異なります。
DMA 転送先アドレス
[No.202 : GetPCXmsMem] で XMS メモリブロックの確保とその先頭アドレスをあらかじめ求めておきます。
[No.202 : GetPCXmsMem] で確保する XMS メモリブロックは 128K 単位で確保されます。
その後、[No.200 : SetPC8237] で、転送先となるコンピュータの内部メモリのアドレスを設定してください。
ターミナルカウントデータ
[No.191 : SetAIDmaFunc]で、TC 信号のカウント回数を設定してください。
ターミナルカウンタ機能を[未使用]に設定したときは、この設定は無効です。128K バイト以内のデータを
転送する場合は 0 を設定してください。128K バイトを超えるデータを転送する場合には、ターミナルカウン
トデータの設定値を次の値に設定してください。
ターミナルカウントデータの設定値 = XMS メモリブロックの容量 / 128K - 1
この値は、[No.202 : GetPCXmsMem]で設定する XMS メモリブロックサイズの設定値に相当します。
DMA チャネルの選定および DMA コントローラ(8237)の設定については、コンピュータのユーザーズマニ
ュアルやテクニカルデータブックなどの DMA に関する項目を参照してください。
また、以下の環境では正常な DMA 転送が実行できない場合がありますのでご注意ください。
①EMM ドライバを使用している場合には、DMA 転送が行えない場合があります。
②SUPPORT-PAC(PC)306 のユーティリティ機能を利用し、XMS メモリへ DMA 転送を行う場合は、
CONFIG.SYS に XMS メモリ制御用のソフトウェア 'HIMEM.SYS' (DOS 標準添付の XMS メモリ制御用ソ
フトウェア)が登録されている必要があります。また、DMA 転送先となる XMS メモリ領域は 256Kbyte
以上必要です。
参照
5-7:PCユーティリティ機能
サンプルプログラム
5-4
第5章 プログラム作成のポイント
5-2 アナログ出力機能
AO
設定データを分解能に応じたアナログ信号に変換します。
No.021 : SetAOData
:アナログ出力を行います。アナログ出力は1チャネルです。
設定データは、オフセットバイナリ(ストレートバイナリ)で設定します。
参照
サンプルプログラム
5-3 デジタル入力機能
DI
TTLレベルの外部信号を正論理で入力します。
No.031 : GetDIData
:デジタル入力を行います。
入力点数は4点です。
[No.009 : GetStatus]でもデジタル入力が可能です。
参照
サンプルプログラム
5-4 デジタル出力機能
DO
TTLレベルの信号を外部へ正論理で出力します。
No.041 : SetDOData
:デジタル出力を行います。
出力点数は4点です。
参照
サンプルプログラム
5-5
第5章 プログラム作成のポイント
5-5 カウンタ機能
CN
T
サポートボードに搭載されている、独立したi8254相当品のカウンタを利用するためのファンクションです。
カウンタ機能は、他の機能と独立して制御することができます。
カウンタ機能のファンクションには、カウンタを制御するファンクションと、カウンタのカウントアップ状態をモ
ニタするファンクションがあります。
(1) カウンタを制御するファンクション
No.051 : StartCNT
:カウンタの動作を開始します。
No.052 : StopCNT
:カウンタの動作を停止します。
No.053 : SetCNTData
:カウンタのデータを設定します。
No.054 : GetCNTData
:カウンタのデータを入力します。
(2) カウントアップをモニタするファンクション
No.059 : GetCNTStatus
:カウンタのステータスを入力します。
No.050 : RstCNTStatus
:カウンタのステータスを初期化します。
[No.009 : GetStatus]でも入力が可能です。
i8254相当品のカウンタは、いくつかの動作モードがあります。
詳細は、i8254相当品のデータシートを参照してください。
参照
5-6
サンプルプログラム
第5章 プログラム作成のポイント
5-6 割り込み機能
IN
T
コンピュータの割り込み機能と、サポートボードからの割り込み要求信号によって、ハードウェア割り込み処理を
実現します。
コンピュータは拡張スロットを介して、何本かの割り込み要求信号を接続することができます。
これらの割り込み要求信号は割り込みレベルとして区別され、それぞれの周辺装置に割り当てが決められています。
その中で他のボードや周辺機器が使用していない割り込みレベルを使用することができます。他の装置がすでに使
用している割り込みレベルと同一の割り込みレベルは使用することはできません。
コンピュータの割り込み機能を使用するためには、コンピュータに対する割り込み環境の設定処理、割り込み環境
の復旧処理、および割り込みハンドラ内の応答処理と、サポートボードに対する割り込みレベルの設定、割り込み
要求の要因の設定が必要です。
SUPPORT-PAC(PC)306 では、コンピュータの割り込みコントローラ(8259)の設定および割り込みハンドラ内の応
答処理は、[No.210 : SetPC8259] 、[No.211 : RstPC8259] 、[No.212 : EoiPC8259]で実行できます。
SUPPORT-PAC(PC)306 で提供しているすべてのファンクションは、割り込みハンドラ内で使用することができます。
ただし、多重割り込みでの使用はできません。
割り込み機能のファンクションには、サポートボードに対して、割り込みレベル、割り込み要求に関する設定と、
外部からの割り込みトリガ信号の入力を制御するファンクションがあります。
PCI バス対応ボードを使用する場合は、割り込み機能の各ファンクションの使用方法に制限があります。
第 7 章を必ず読んでください。
(1) サポートボードに割り込みレベルと割り込み要求に関する設定を行うファンクション
No.181 : SetINTLevel
:割り込みレベルを設定します。
No.183 : SetINTMask
:割り込み要因を設定します。複数の要因を設定することができます。
No.189 : GetINTReqReg
:割り込み要求レジスタの状態を入力します。
No.180 : RstINTReqReg
:割り込み要求レジスタの状態をリセットします。
これらのファンクションは、任意の順番で実行できます。
また、[No.189, No.180] は割り込みを使用しないときでも動作のモニタ用として使用することができます。
(2) 割り込みトリガ入力を制御する
No.061 : StartINTTrigger
:割り込みトリガ入力のゲートを開きます。
No.062 : StopINTTrigger
:割り込みトリガ入力のゲートを閉じます。
No.069 : GetINTTrgStatus
:割り込みトリガ入力ステータスを入力します。
[No.009:GetStatus]でも入力が可能です。
No.060 : RstINTTrgStatus
:割り込みトリガ入力ステータスを初期化します。
割り込みトリガ入力を制御するファンクションは、割り込みを使用しないときでも有効です。
外部信号のモニタ用として使用することができます。
5-7
第5章 プログラム作成のポイント
(3) 割り込み処理とプログラミング言語
割り込み処理を行うプログラムの開発では、プログラミング言語の仕様と制限事項を十分考慮する必要がありま
す。
コンピュータに対する割り込み関連の処理は、プログラミング言語によっては、処理できないものがあります。
そのため、高級言語とアセンブリ言語を組み合わせたプログラミングが必要な場合があります。このようなプロ
グラミングでは、SUPPORT-PAC(PC)306 の使い方が制限されることがあります。
各言語別の制限事項を以下に示します。
n C言語
SUPPORT-PAC(PC)306を使用する上での制限事項はありません。
n QuickBASIC
QuickBASICは、コンピュータに対する割り込み環境設定処理、割り込み環境復旧処理、割り込み応答処理お
よび割り込みハンドラを、すべてQuickBASICで記述することができません。
割り込み環境設定処理、割り込み環境復旧処理、割り込み応答処理は、PCユーティリティ機能のファンクシ
ョンとして提供されている[No.210 : SetPC8259]、[No211 : RstPC8259]、[No212 : EoiPC8259]を利用するこ
とにより、QuickBASICのプログラムで記述することが可能です。ただし、割り込みハンドラは、アセンブリ
言語などを組み合わせたプログラムが必要です。
添付のサンプルプログラムでは、割り込みハンドラをアセンブリ言語(Microsoft Macro Assembler)で記述
しています。割り込みハンドラからSUPPORT-PAC(PC)306のファンクションを利用する場合には、
QuickBASIC用のライブラリに対して直接アクセスするようにしています。
アセンブリ言語で記述した割り込みハンドラから、オブジェクトファイルを作成し、そのオブジェクトファ
イルを H306QB.LIB または H306QB.QLB に加えて、新しいライブラリを作成します。
新しくできたライブラリを使用することで、QuickBASICでの割り込み処理が可能になります。
n Turbo PASCAL
SUPPORT-PAC(PC)306を使用する上での制限事項はありません。
n MASM
SUPPORT-PAC(PC)306を使用する上での制限事項はありません。
参照
5-7 : PCユーティリティ機能
サンプルプログラム
5-8
第5章 プログラム作成のポイント
5-7 PCユーティリティ機能
PC
SUPPORT-PAC(PC)306では、DMA転送やハードウェア割り込みを利用するプログラムを作成するときに必要となる
コンピュータの各コントローラの設定を、PCユーティリティ機能として提供しています。
DMA転送においては、XMSメモリが使用可能な環境の場合は、簡単にXMSメモリへのDMA転送が実現できるファ
ンクションもサポートしています。
(1) DMA転送をサポートする機能
No.200 : SetPC8237
No.202 : GetPCXmsMem
:コンピュータのDMAコントローラ(8237)の設定を行います。
:XMSメモリから指定サイズのメモリブロックを確保し、先頭アドレスを求めま
す。
No.203 : FreePCXmsMem
No.204 : GetPCXmsData
:GetPCXmsMemで確保したXMSメモリブロックを開放します。
:XMSメモリ内のデータを、メインメモリ内に確保した配列変数に指定サイズだ
け格納します。
(2) ハードウェア割り込みをサポートする機能
No.210 : SetPC8259
:コンピュータの割り込みコントローラ(8259)の設定を行います。
No.211 : RstPC8259
:コンピュータの割り込みコントローラ(8259)の状態を元に戻します。
No.212 : EoiPC8259
:コンピュータの割り込みコントローラに対する応答処理を行います。
5-9
第5章 プログラム作成のポイント
5-10
第6章 ファンクションリファレンス
第6章
ファンクションリファレンス
6-1 ファンクションの一覧
(1) 共通機能
AI AO DI DO
I
CN
T NT
機能番号 ファンクション
説明
000
InitBoard
サポートボードを初期状態にします
009
GetStatus
ステータスを入力します
AI
(2) アナログ入力機能
機能番号 ファンクション
説明
101
SetAIFunction
アナログ入力機能を設定します
111
SetAIGain
入力ゲインを設定します
121
SetAIChannel
スキャンを行うチャネルの順序を設定します
131
SetAIScanClk
スキャンクロックの周期を設定します
133
SetAISmpClk
サンプリングクロックの周期を設定します
141
SetAIStartLev
サンプリング開始条件を設定します
151
SetAIStopLev
サンプリング停止条件を設定します
161
SetAISmpNum
トリガディレイ回数、サンプリング回数、遅延サンプリング回数を設定します
163
SetAIRptNum
リピート回数を設定します
170
RstAIObm
バッファメモリを初期化します
171
SetAIObmWtAdr
バッファメモリのライトアドレスを設定します
172
GetAIObmWtAdr
バッファメモリのライトアドレスを入力します
173
SetAIObmRdAdr
バッファメモリのリードアドレスを設定します
174
GetAIObmRdAdr
バッファメモリのリードアドレスを入力します
175
GetAIObmTrgAdr
サンプリング停止トリガが入力したバッファメモリのライトアドレスを入力します
001
StartAI
サンプリングを開始します
002
StopAI
サンプリングを停止します
004
GetAIData
バッファメモリから、ひとつの変換データを入力します
006
GetAIArray
バッファメモリから、複数の変換データを入力します
010
RstAIStatus
オーバーレンジエラー、スタートトリガエラーステータスをリセットします
191
SetAIDmaFunc
DMA転送条件を設定します
(3) アナログ出力機能
AO
機能番号 ファンクション
説明
021
アナログ出力を行います
SetAOData
(4) デジタル入力機能
DI
機能番号 ファンクション
説明
031
デジタル入力を行います
GetDIData
6-1
第6章 ファンクションリファレンス
(5) デジタル出力機能
DO
機能番号 ファンクション
説明
041
デジタル出力を行います
SetDOData
(6) カウンタ機能
CN
T
機能番号 ファンクション
説明
050
RstCNTStatus
カウンタのステータスをリセットします
051
StartCNT
カウンタの動作を開始します
052
StopCNT
カウンタの動作を停止します
053
SetCNTData
カウンタのデータを設定します
054
GetCNTData
カウンタのデータを入力します
059
GetCNTStatus
カウンタのステータスを入力します
(7) 割り込み機能
IN
T
機能番号 ファンクション
説明
181
SetINTLevel
割り込みレベルを設定します
183
SetINTMask
割り込みを発生させる要因を設定します
189
GetINTReqReg
割り込み要求レジスタの状態を入力します
180
RstINTReqReg
割り込み要求レジスタをビット単位でリセットします
060
RstINTTrgStatus
割り込みトリガ入力のステータスをリセットします
061
StartINTTrigger
割り込みトリガ入力のゲートを開きます
062
StopINTTrigger
割り込みトリガ入力のゲートを閉じます
069
GetINTTrgStatus
割り込みトリガ入力のステータスを入力します
(8) PCユーティリティ機能 PC
機能番号 ファンクション
説明
200
SetPC8237
コンピュータのDMAコントローラの設定を行います
202
GetPCXmsMem
XMSメモリを確保します
203
FreePCXmsMem
XMSメモリを開放します
204
GetPCXmsData
XMSメモリ内のデータをメインメモリ内の配列変数に格納します
210
SetPC8259
コンピュータの割り込みコントローラの設定を行います
211
RstPC8259
コンピュータの割り込みコントローラの状態を元に戻します
212
EoiPC8259
コンピュータの割り込みコントローラに対する応答処理を行います
6-2
第6章 ファンクションリファレンス
6-2 ファンクションリファレンス
各ファンクションの説明は、次の構成で行われています。
機能101: SetAIFunction
AI
①
■機能 ........................................................
②
■書式 ........................................................
③
■引数 ........................................................
■ライブラリのエントリ .............................
メモリアドレス
④
⑤
内容
DS: [BX+0]
■解説 ........................................................
⑥
■注意 ........................................................
⑦
■参照 ........................................................
⑧
■補足 ........................................................
⑨
①機能101.................................... 機能番号を示します。
SetAIFunction........................... ファンクション名を示します。
AI
............................................. 機能の分類を示します。
②機能.......................................... ファンクションの機能を簡単に示します。
③書式.......................................... ファンクションの書式を、サポートしている言語別に示します。
各言語は、次の略称で記述してあります。
C............................Microsoft系 C、Borland系 C
QB .........................Microsoft QuickBASIC
TP..........................Borland Turbo PASCAL
ASM.......................Microsoft Macro Assembler
ASMでは、int_tbl という変数名でソフトウェア割り込み番号が定義されて
いるものとします。
④引数.......................................... ファンクションで使用する引数とその設定値を説明します。
サポートボードが初期値(電源投入時、またはInitBoard実行時の値)を
もつ引数には、初期値を示してあります。
⑤ライブラリのエントリ......... BIOS部へアクセスするときのエントリ状態(レジスタ情報)を示します。
BIOS部の先頭は、pac_main というラベル名で定義されています。
⑥解説.......................................... ファンクションが行う具体的な機能について解説します。
⑦注意.......................................... ファンクションを使用するときの注意事項を説明します。
⑧参照.......................................... 関連する他のファンクションを示します。
⑨補足.......................................... 使用言語により特殊な制限があるものについて補足説明します。
SUPPORT-PAC(PC)306のファンクションの引き数は、8ビット∼48ビットまでのデータを扱います。
これらの引き数にあたる変数は、プログラムを作成する高級言語により、変数の型や指定方法に違いが生じます。変数の型や指
定方法の違いは、各高級言語の記述方法や制限によるもので、実際の動作では言語間の差異はありません。
6-3
第6章 ファンクションリファレンス
機能000: InitBoard
■機能
■書式
■引数
AO
DI
DO
CN
T
IN
T
ボードを初期状態にします。
C
void InitBoard ( int address );
QB
InitBoard% ( ADDRESS% )
TP
InitBoard ( address: WORD ): WORD;
ASM
InitBoard int_tbl address
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
■ライブラリのエントリ
メモリアドレス
■解説
AI
call pac_main
内容
DS: [BX+0]
機能番号(000固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
InitBoardは、ボードを初期状態(初期値の状態、電源投入時の状態)にします。
サンプリング動作、DMA転送動作を停止させます。
各ステータス、および各設定値は初期化されます。
カウンタの動作は停止し、割り込みトリガ入力のゲートは、クローズ状態になります。
■参照
6-4
GetStatus、GetCNTStatus、GetINTTrgStatus、RstAIStatus、RstCNTStatus、RstINTTrgStatus
第6章 ファンクションリファレンス
機能009:
GetStatus
AI
AO
DI
CN
T
DO
IN
T
■機能
ステータスの入力を行います。
■書式
C
void GetStatus ( int address, unsigned int *status );
QB
GetStatus% ( ADDRESS%, VARPTR (STATUS%), VARSEG (STATUS%) )
TP
GetStatus ( address: WORD, VAR status ): WORD;
ASM
GetStatus int_tbl address status
■引数
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. *status
ステータス格納ポインタ
D15 D14 D13 D12 D11 D10 D9
⑬ ⑫ ⑪ ⑩
⑨
D8
D7
D6
D5
D4
D3
D2
D1
D0
⑧ ⑦ ⑥ ⑤ ④ ③ ② ①
ビット
内容
D0
①ボード動作中ステータス
ボードの動作状態を示します。初期値は [0] です。
セット:
StartAI実行
クリア:
リピート回数を含む全ての動作が終了したとき
StopAI実行
InitBoard実行
D1
②バッファデータレディステータス
バッファメモリ内の変換データの格納状態を示します。初期値は [0] です。
SetAIFunctionでメモリ形式をFIFO形式に指定したとき
セット:
バッファメモリ内に変換データがあるとき
クリア:
バッファメモリ内に変換データがなくなったとき
RstAIObm実行
InitBoard実行
SetAIFunctionでメモリ形式をリング形式に指定したとき
セット:
バッファメモリに変換データが書き込まれたとき
クリア:
SetAIObmWtAdr実行
RstAIObm実行
InitBoard実行
D2
③バッファハーフフルステータス
バッファメモリ内の変換データの格納状態を示します。初期値は [0] です。
SetAIFunctionでメモリ形式をFIFO形式に指定したとき
セット:
バッファメモリ内の変換データが、最大容量の半分以上になったとき
クリア:
バッファメモリ内の変換データが、最大容量の半分未満になったとき
RstAIObm実行
InitBoard実行
SetAIFunctionでメモリ形式をリング形式に指定したとき
セット:
バッファメモリライトアドレスが最大容量の半分以上になったとき
クリア:
RstAIObm実行
InitBoard実行
6-5
第6章 ファンクションリファレンス
ビット
内容
D3
④バッファオーバーフローステータス
バッファメモリ内の変換データの格納状態を示します。初期値は [0] です。
SetAIFunctionでメモリ形式をFIFO形式に指定したとき
バッファメモリの格納上限を越えたことを通知します。ステータスがセットされたと
き、サンプリングはストップし、以降の変換データの格納は行われません。
セット: バッファメモリ内の変換データが最大容量で、次の書き込み信号がきたとき
クリア: RstAIObm実行
InitBoard実行
SetAIFunctionでメモリ形式をリング形式に指定したとき
バッファメモリの格納アドレスの上限を越えたことを通知します。ステータスがセッ
トされても、サンプリングはストップせず、変換データを上書きしていきます。
セット: バッファメモリライトアドレスが最大容量を越え、最初のアドレスに次の
データを格納したとき
クリア: RstAIObm実行
InitBoard実行
D4
⑤サンプリング終了ステータス
サンプリングの終了を通知します。初期値は [0] です。
サンプリングエラーが発生し、停止条件が満たされる前にサンプリングが終了したと
き、または、SetAIFunctionでメモリ形式をFIFO形式に指定しているときにオーバーフ
ローで終了したときは、ステータスはセットされません。
セット: 設定した条件のサンプリングが終了したとき
StopAI実行
クリア: StartAI実行
サンプリング開始条件が成立したとき
InitBoard実行
D5
⑥オーバーレンジエラーステータス
変換データが設定レンジ範囲をオーバーしたことを通知します。初期値は [0] です。
オーバーレンジを検出するチャネルを指定することはできません。バッファメモリに
格納する全ての変換データについて判定します。SetAIFunctionで変換データ形式をオフ
セット(ストレート)バイナリ、コンプリメントバイナリのどちらに指定してもオー
バーレンジを検出することができます。
セット: 変換データの値が上限値か下限値になったとき
クリア: RstAIStatus実行
InitBoard実行
D6
⑦スタートトリガエラーステータス
外部スタートトリガ信号のエラーを通知します。初期値は [0] です。
このステータスのセットでサンプリングはストップしません。SetAIFunctionで
サンプリング開始条件を外部信号以外の設定にした場合は、このステータスは[0]の
まま変化しません。トリガディレイ中にスタートトリガ信号が入力されたときは
ステータスはセットされません。
セット: 遅延を含むサンプリング中に次の外部スタートトリガ信号が入力されたとき
クリア: RstAIStatus実行
InitBoard実行
6-6
第6章 ファンクションリファレンス
ビット
内容
D7
⑧サンプリングクロックエラーステータス
サンプリングクロック、またはスキャンクロックのエラーを通知します。
初期値は [0] です。
SetAIFunctionで入力チャネルモードがシングルチャネルのとき
変換中のデータの格納が終了すると、サンプリングを強制的に停止します。
セット:
A/Dコンバータの変換中に次のサンプリングクロックがきたとき
クリア:
InitBoard実行
SetAIFunctionで入力チャネルモードがマルチチャネルのとき
A/Dコンバータの変換中に次のスキャンクロックがきたときは、変換中のデータの格納
が終了すると、サンプリングを強制的に停止します。チャネルスキャン中に次のサン
プリングクロックがきたときは、スキャンの途中で停止し、変換中のデータの格納が
終了すると、サンプリングを強制的に停止します。
セット:
スキャン中に次のサンプリングクロックがきたとき、またはA/Dコンバータ
の変換中に次のスキャンクロックがきたとき
クリア:
D8∼D11
InitBoard実行
⑨デジタル入力レジスタ
外部デジタル入力信号を正論理で入力します。
D12
⑩8254カウントアップステータス
8254のカウントアップを通知します。初期値は [0] です。
セット:
8254のカウントアップ信号がきたとき
クリア:
RstCNTStatus実行
InitBoard実行
D13
⑪8254オーバーランステータス
8254のカウントアップ信号のオーバーランを通知します。初期値は [0] です。
セット:
8254カウントアップステータスがすでにセットされているときに、次のカウ
ントアップ信号がきたとき
クリア:
RstCNTStatus実行
InitBoard実行
D14
⑫割り込みトリガ入力ステータス
割り込みトリガ信号の入力を通知します。初期値は [0] です。
セット:
割り込みトリガ信号(立ち下がりエッジ)がきたとき
クリア:
RstINTTrgStatus実行
InitBoard実行
D15
⑬割り込みトリガオーバーランステータス
割り込みトリガ信号の入力のオーバーランを通知します。初期値は [0] です。
セット:
割り込みトリガ入力ステータスがすでにセットされているときに、次の割り
込みトリガ信号(立ち下がりエッジ)がきたとき
クリア:
RstINTTrgStatus実行
InitBoard実行
6-7
第6章 ファンクションリファレンス
■ライブラリのエントリ
メモリアドレス
■解説
call pac_main
内容
DS: [BX+0]
機能番号(009固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
ステータス(下位)入力値
DS: [BX+4]
ステータス(上位)入力値
GetStatusは、サンプリングステータス、デジタル入力、8254および割り込みトリガ信号のステータス
情報
を入力します。
■注意
デジタル入力、8254、割り込みトリガ信号については、それぞれ専用のファンクションも用意されて
いま
す。
■参照
デジタル入力:
GetDIData
8254ステータス情報:
GetCNTStatus
割り込みトリガ信号ステータス情報:
GetINTTrgStatus
SetAIFunction、StartAI、StopAI、RstAIStatus、InitBoard、GetCNTStatus、RstCNTStatus、GetINTTrgStatus、
NTTrgStatus、GetDIData、SetDOData
6-8
RstI
第6章 ファンクションリファレンス
機能101: SetAIFunction
■機能
■書式
■引数
AI
アナログ入力機能を設定します。
C
void SetAIFunction ( int address, unsigned int fncdata );
QB
SetAIFunction% ( ADDRESS%, FNCDATA% )
TP
SetAIFunction ( address, fncdata: WORD ): WORD;
ASM
SetAIFunction int_tbl address fncdata
1. address:
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. fncdata:
アナログ入力機能設定データ(初期値: 0000H )
D15 D14 D13 D12 D11 D10 D9
0
0
⑨ ⑧ ⑦
0
D8
D7
⑥ ⑤ ④
D6
D5
0
D4
D3
③
ビット
内容
D1, D0
①サンプリング開始条件
D2
②
D1
D0
①
00: ソフトウェア
01: 変換データ比較
10: 外部信号立ち上がり
11: 外部信号立ち下がり
D3, D2
②サンプリング停止条件
00: 格納終了
01: 変換データ比較
10: 外部信号立ち上がり
11: 外部信号立ち下がり
D5, D4
③サンプリングクロック
00: 内部クロック
01: 設定禁止
10: 外部クロック
11: 設定禁止
D7
④入力チャネルモード
D8
⑤バッファメモリ形式
0: シングルチャネル
1: マルチチャネル
0: FIFO
1: リング
D9
⑥リピートモード
0: 回数設定
D11
⑦DMA転送機能
0: 未使用
1: 無制限
1: 使用
D12
⑧同時サンプリング機能
D13
⑨変換データ形式
0: 未使用
1: 使用
0: オフセット(ストレート)バイナリ
1: 2'sコンプリンメントバイナリ
6-9
第6章 ファンクションリファレンス
■ライブラリのエントリ
call pac_main
メモリアドレス
■解説
内容
DS: [BX+0]
機能番号(101固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
アナログ入力機能設定データ(下位)設定値
DS: [BX+4]
アナログ入力機能設定データ(下位)設定値
SetAIFunctionは、アナログ入力の機能を設定します。サンプリング開始条件、サンプリング停止条件、
サン
プリングクロックなど、アナログ入力の基本的な動作の方法を設定します。
SetAIFunctionで設定する機能には、より詳細な条件の設定が必要なものがあります。その場合は、別の
でその条件を設定します。詳細な条件の設定が必要な機能の一覧を以下に示します。
○入力チャネル/入力ゲイン
シングルチャネル
入力ゲイン
マルチチャネル
入力ゲイン
入力チャネルオーダー
○スキャンクロック/サンプリングクロック
スキャンクロック
内部クロック
スキャンクロック
外部クロック信号
サンプリング周期
○サンプリング開始条件
ソフトウェア
変換データ比較
比較条件
トリガディレイ回数
外部信号立ち上がり
トリガディレイ回数
外部信号立ち下がり
トリガディレイ回数
○サンプリング停止条件
格納終了
サンプリング回数
遅延サンプリング回数
サンプリング回数
遅延サンプリング回数
外部信号立ち上がり
サンプリング回数
遅延サンプリング回数
外部信号立ち下がり
サンプリング回数
遅延サンプリング回数
変換データ比較
比較条件
○サンプリングリピートモード
リピート回数
回数設定
無制限
○DMA転送機能
未使用
使用
DMA転送チャネル
ターミナルカウント制御
使用
ターミナルカウントデータ
未使用(無制限)
6-10
関数
第6章 ファンクションリファレンス
■注意
SetAIFunctionは、アナログ入力を行う場合、必ず実行してください。
サンプリング開始・停止条件を外部信号に設定した場合や、サンプリングクロックを外部クロックに設
定し
た場合は、ボードに所定の信号を接続してください。
サンプリング開始条件をソフトウェアに設定した場合は、サンプリングリピートモードの設定はデフォ
ルト
値のまま使用してください。
サンプリングリピートモードを無制限に設定した場合は、StopAIでサンプリングを停止させてください。
また、サンプリング開始条件が変換データ比較に設定されている場合は、リピートモード無制限は使用
でき
ません。
DMA転送を行うときは、バッファメモリ形式をFIFOに設定してください。
また、EMMドライバを使用している場合には、DMA転送が行えない場合があります。
PCIバス対応ボードは、DMA転送機能をサポートしていません。「D11ビット⑦DMA転送機能」の設定
は「未使用[0]」に設定してください。
■参照 SetAIGain、SetAIChannel、SetAIScanClk、SetAISmpClk、SetAIStartLev、SetAIStopLev、
SetA
ISmpNum、SetAIRptNum、SetAIDmaFunc、StartAI、StopAI
6-11
第6章 ファンクションリファレンス
機能111: SetAIGain
■機能
■書式
■引数
AI
入力ゲインを設定します。
C
void SetAIGain ( int address, unsigned char channel, unsigned char gain );
QB
SetAIGain% ( ADDRESS%, CHANNEL%, GAIN% )
TP
SetAIGain ( address: WORD; channel, gain: BYTE ): WORD;
ASM
SetAIGain int_tbl address channel gain
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. channel
チャネル
0∼31
3. gain
ゲイン
0∼3 ( x1: 0, x2: 1, x4: 2, x8: 3 ) (初期値: すべてのチャネル x1 )
■ライブラリのエントリ
メモリアドレス
■解説
call pac_main
内容
DS: [BX+0]
機能番号(111固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
チャネル 設定値
DS: [BX+4]
ゲイン 設定値
SetAIGainは、各チャネルの入力ゲインを 1,2,4,8 に設定します。
指定したチャネルの入力ゲインを、各チャネルそれぞれ個別に設定できます。
■注意
SetAIGainは、次の9商品では使用できません。
・AD12-16U(PC)EH ・AD16-16(PC)EH
・AD16-16U(PC)EH
・AD12-16U(PC)E
・AD16-16(PC)E
・AD16-16U(PC)E
・AD12-16U(PCI)E ・AD16-16(PCI)E
・ADI12-16(PCI)
・AD12-16U(PCI)EH ・AD16-16U(PCI)EH
別売のチャネル増設サブボードATCH-16(PC)またはATCH-16(PCI)を使用した場合、16∼31の入力チャネ
設定が有効です。
■参照
6-12
SetAIFunction、SetAIChannel
ルの
第6章 ファンクションリファレンス
機能121: SetAIChannel
■機能
■書式
■引数
スキャンを行うチャネルの順序を設定します。
C
void SetAIChannel ( int address, unsigned char chladr, unsigned char channel );
QB
SetAIChannel% ( ADDRESS%, CHLADR%, CHANNEL% )
TP
SetAIChannel ( address: WORD; chladr, channel: BYTE ): WORD;
ASM
SetAIChannel int_tbl address chladr channel
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. chladr
チャネルアドレス
0∼31
3. channel
入力チャネル
0∼31(初期値: すべてのチャネルアドレス 0 )
■ライブラリのエントリ
■解説
AI
call pac_main
メモリアドレス
内容
DS: [BX+0]
機能番号(121固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
アドレス 設定値
DS: [BX+4]
チャネル 設定値
SetAIChannelは、スキャンするチャネルの順序を、専用レジスタに設定します。
専用レジスタのアドレス(チャネルアドレス)を指定し、そのチャネルアドレスの入力チャネルを設定
しま
す。
SetAIFunctionで、入力チャネルモードをマルチチャネルに指定したときに、SetAIChannelでの設定が
有効になります。
マルチチャネルモードでは、最初のチャネルアドレス[ 0 ]からStartAIで指定したチャネルアドレス
までに格納されている入力チャネルの順番でスキャンします。
入力チャネルは任意の順序で同じ入力チャネルを重複設定することができます。
■注意
SetAIFunctionで、入力チャネルモードをシングルチャネルに指定したときは、SetAIChannelの設定は
無効です。
別売のチャネル増設サブボードATCH-16(PC)、ATUH-16(PC)、ATCH-16(PCI)、またはATUH-16(PCI)を
使用
した場合、16∼31の入力チャネルの指定が有効です。
■参照
SetAIFunction、StartAI
6-13
第6章 ファンクションリファレンス
機能131: SetAIScanClk
■機能
■書式
■引数
スキャンクロックの周期を設定します。
C
void SetAIScanClk ( int address, unsigned long scanclk );
QB
SetAIScanClk% ( ADDRESS%, SCANCLK& )
TP
SetAIScanClk ( address: WORD; scanclk: LONGINT ): WORD;
ASM
SetAIScanClk int_tbl address scanclk
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. scanclk
スキャンクロック
■ライブラリのエントリ
メモリアドレス
■解説
AI
25∼1,638,400 [ nsec ](初期値: 25nsec )
call pac_main
内容
DS: [BX+0]
機能番号(131固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
スキャンクロック(下位)設定値
DS: [BX+4]
スキャンクロック(中位)設定値
DS: [BX+5]
スキャンクロック(上位)設定値
SetAIScanClkは、スキャンクロックの周期を25nsec単位で設定します。
SetAIFunctionで設定した入力チャネルモードが、シングルチャネルのときとマルチチャネルのときとで
は、
スキャンクロックの持つ意味が異なります。
シングルチャネルモードのとき
StartAIが出力されてからA/D変換が開始されるまでの時間(セトリングタイム)として動作します。
最小値
5μsec
ボード名
AD12-16(PC)EH、AD16-16(PC)EH、AD12-16(PC)E、AD16-16(PC)E、
AD12-16(PCI)E、AD16-16(PCI)E, ADI12-16(PCI)、
AD12-16U(PCI)EH、AD16-16U(PCI)EH
900nsec
AD12-16U(PC)EH、AD16-16U(PC)EH、AD12-16U(PC)E、AD16-16U(PC)E、
AD12-16U(PCI)E
マルチチャネルモードのとき
スキャンを行うチャネル間の時間差として動作します。スキャンクロックの設定値がA/D変換に必要な時間より
短い場合は、サンプリングクロックエラーになります。
最小値
10μsec
ボード名
AD12-16(PC)EH、AD16-16(PC)EH、AD12-16(PC)E、AD16-16(PC)E、
AD12-16(PCI)E、AD16-16(PCI)E
1μsec
AD12-16U(PC)EH、AD16-16U(PC)EH、AD12-16U(PC)E、AD16-16U(PC)E、
AD12-16U(PCI)E、AD12-16U(PCI)EH、AD16-16U(PCI)EH
20μsec
6-14
ADI12-16(PCI)
第6章 ファンクションリファレンス
■注意
SetAIScanClkは、アナログ入力を行う場合、必ず実行してください。
設定範囲以外の値は、設定しないでください。
設定値は25nsec単位で設定されるため、25の倍数以外の値を設定した場合、設定値よりも小さく最も設
定値
に近い25の倍数に設定されます。
■参照
SetAIFunction、SetAISmpClk、StartAI
6-15
第6章 ファンクションリファレンス
機能133: SetAISmpClk
■機能
■書式
■引数
サンプリングクロックを設定します。
C
void SetAISmpClk ( int address, double smpclk );
QB
SetAISmpClk% ( ADDRESS%, SMPCLK# )
TP
SetAISmpClk ( address: WORD; smpclk: DOUBLE ): WORD;
ASM
SetAISmpClk int_tbl address smpclk
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. smpclk
サンプリングクロック 25∼6,710,886,400 [ nsec ](初期値: 25nsec )
■ライブラリのエントリ
メモリアドレス
■解説
AI
call pac_main
内容
DS: [BX+0]
機能番号(133固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
サンプリングクロック(最下位)設定値
DS: [BX+4]
サンプリングクロック(下位)設定値
DS: [BX+5]
サンプリングクロック(中位)設定値
DS: [BX+6]
サンプリングクロック(上位)設定値
DS: [BX+7]
サンプリングクロック(最上位)設定値
SetAISmpClkは、サンプリングクロックの周期を25nsec単位で設定します。
SetAIFunctionでサンプリングクロックを外部クロックに指定したときは、設定は無効です。
SetAIFunctionで設定した入力チャネルモードがシングルチャネルのときとマルチチャネルのときとでは
サン
プリングクロックの持つ意味が異なります。
シングルチャネルモードのとき
サンプリングクロックの設定値がA/D変換に必要な時間より短い場合は、サンプリングクロックエラーにな
ります。
最小値
10μsec
ボード名
AD12-16(PC)EH、AD16-16(PC)EH、AD12-16(PC)E、AD16-16(PC)E、
AD12-16(PCI)E、AD16-16(PCI)E
1μsec
AD12-16U(PC)EH、AD16-16U(PC)EH、AD12-16U(PC)E、AD16-16U(PC)E、
AD12-16U(PCI)E、AD12-16U(PCI)EH、AD16-16U(PCI)EH
20μsec
ADI12-16(PCI)
マルチチャネルモードのとき
サンプリングクロックの設定値がチャネルのスキャンに必要な時間より短い場合は、サンプリングクロックエラ
ーになります。
最小値
スキャンするチャネル
AD12-16(PC)EH、AD16-16(PC)EH、AD12-16(PC)E、AD16-16(PC)E、
数 × 10μsec
AD12-16(PCI)E、AD16-16(PCI)E
スキャンするチャネル
AD12-16U(PC)EH、AD16-16U(PC)EH、AD12-16U(PC)E、AD16-16U(PC)E、
数 × 1μsec
AD12-16U(PCI)E、AD12-16U(PCI)EH、AD16-16U(PCI)EH
スキャンするチャネル
ADI12-16(PCI)
数 × 20μsec
6-16
ボード名
第6章 ファンクションリファレンス
■注意
SetAISmpClkは、SetAIFunctionでサンプリングクロックを内部クロックに指定した場合、必ず実行してく
ださ
い。
設定範囲以外の値は、設定しないでください。
設定値は25nsec単位で設定されるため、25の倍数以外の値を設定した場合、設定値よりも小さく最も設
定値
に近い25の倍数に設定されます。
■参照
SetAIFunction、SetAIScanClk
6-17
第6章 ファンクションリファレンス
機能141:
SetAIStartLev
AI
■機能
サンプリング開始条件を設定します。
■書式
C
void SetAIStartLev ( int address, unsigned char trgmode, unsigned char cmpchl,
QB
SetAIStartLev% ( ADDRESS%, TRGMODE%, CMPCHL%, LEVEL1&, LEVEL2& )
TP
SetAIStartLev ( address: WORD; trgmode, cmpchl: BYTE; level1,
ASM
SetAIStartLev int_tbl address trgmode cmpchl level1 level2
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
long level1, long level2 );
level2: LONGINT ): WORD;
■引数
2. trgmode トリガモード
0 DC AC (初期値: 0 )
3. cmpchl
比較チャネル
0∼31 (初期値: 0 )
4. level1
開始レベル1
12ビット分解能:0∼4,095 または -2,048∼2,047 (初期値: 0 )
5. level2
開始レベル2
12ビット分解能:0∼4,095 または -2,048∼2,047 (初期値: 0 )
16ビット分解能:0∼65,535 または -32,768∼32,767 (初期値: 0 )
16ビット分解能:0∼65,535 または -32,768∼32,767 (初期値: 0 )
■ライブラリのエントリ
メモリアドレス
■解説
call pac_main
内容
DS: [BX+0]
機能番号(141固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
トリガモード 設定値
DS: [BX+4]
比較チャネル 設定値
DS: [BX+5]
開始レベル1(下位)設定値
DS: [BX+6]
開始レベル1(上位)設定値
DS: [BX+7]
開始レベル2(下位)設定値
DS: [BX+8]
開始レベル2(上位)設定値
SetAIStartLevは、SetAIFunctionでサンプリング開始条件を変換データ比較に指定したときの比較条件
(トリガモード、比較チャネル、開始レベル1、開始レベル2)を設定します。
StartAIを出力直後に現在のサンプリング条件でサンプリングを開始し、SetAIStartLevで設定した比較
チャネルの変換データを開始レベル1、2と比較します。比較する変換データが、開始レベル1を通
過した後、開始レベル2を超えたときバッファメモリへの格納を開始します。
SetAIFunctionでサンプリング開始条件を変換データ比較以外に指定したときは、設定は無効です。
6-18
第6章 ファンクションリファレンス
トリガモード
トリガモードは、開始レベルと比較する変換データのカップリング条件を決定します。
DCトリガでは、変換データの値と開始レベルの値をそのまま比較します。
ACトリガでは、変換データを順次演算処理し、DC成分を除いた値と開始レベルの値を比較します。
DC成分を除いた値 ACDATA と、変換データ DATA の関係は基本的に以下の式で表されます。
ACDATA
n
= DATA n
ただし n = 1,2,3..
−
OFFSET
n
OFFSET
n
=
DATA n − OFFSET
256
n −1
+ OFFSET
n − 1
(OFFSET0 = DATA1)
比較チャネル
比較チャネルは、開始レベルと比較を行う変換データの入力チャネルを決定します。
開始レベルとの比較は、指定したチャネルの変換データだけで行います。
シングルチャネルモードのときは、入力するチャネルと同一にしてください。
マルチチャネルモードのときは、スキャンするチャネルに含まれるチャネルを設定してください。
開始レベル
変換データと比較するレベル(レベル1、レベル2)を設定します。
開始レベルの値は変換データのとり得る範囲内で自由に設定できます。
レベル1とレベル2を別の値に設定することで、ヒステリシスを持ったプラススロープ、マイナススロー
プが
実現できます。また、レベル1とレベル2を同じ値に設定したときは、デュアルスロープになります。
開始レベルの設定は、トリガモードをDCトリガに設定し、SetAIFunctionで変換データ形式をオフセット
( ス
トレート)バイナリに指定したときは、オフセット(ストレート)バイナリ形式でレベルを設定し
てください。コンプリメントバイナリに指定したときは、コンプリメントバイナリ形式でレベルを設定
して
ください。
トリガモードをACトリガに設定した場合は、SetAIFunctionでの変換データ形式によらず、コンプリメン
トバ
イナリ形式でレベルを設定してください。
Level 1 < Level 2
■注意
Level 1 > Level 2
Level 2
Level 1
Level 1
Level 2
Level 1 = Level 2
Level
SetAIFunctionでサンプリング開始条件を変換データ比較以外に指定したときは、設定は無効です。
開始レベルの値は、変換データのとり得る値の範囲を超えないようにしてください。
■参照
SetAIFunction、SetAIStopLev、StartAI
6-19
第6章 ファンクションリファレンス
機能151:
SetAIStopLev
AI
■機能
サンプリング停止条件を設定します。
■書式
C
void SetAIStopLev ( int address, unsigned char trgmode, unsigned char cmpchl,
QB
SetAIStopLev% ( ADDRESS%, TRGMODE%, CMPCHL%, LEVEL1&, LEVEL2& )
TP
SetAIStopLev ( address: WORD; trgmode, cmpchl: BYTE; level1,
ASM
SetAIStopLev int_tbl address trgmode cmpchl level1 level2
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
long level1, long level2 );
level2: LONGINT ): WORD;
■引数
2. trgmode トリガモード
3. cmpchl
比較チャネル
4. level1
停止レベル1
0 : DC
1 : AC (初期値: 0 )
0∼31 (初期値: 0 )
12ビット分解能:0∼4,095 または -2,048∼2,047 (初期値: 0 )
16ビット分解能:0∼65,535 または -32,768∼32,767 (初期値: 0 )
5. level2
停止レベル2
12ビット分解能:0∼4,095 または -2,048∼2,047 (初期値: 0 )
16ビット分解能:0∼65,535 または -32,768∼32,767 (初期値: 0 )
■ライブラリのエントリ
メモリアドレス
■解説
call pac_main
内容
DS: [BX+0]
機能番号(151固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
トリガモード 設定値
DS: [BX+4]
比較チャネル 設定値
DS: [BX+5]
停止レベル1(下位)設定値
DS: [BX+6]
停止レベル1(上位)設定値
DS: [BX+7]
停止レベル2(下位)設定値
DS: [BX+8]
停止レベル2(上位)設定値
SetAIStopLevは、SetAIFunctionでサンプリング停止条件を変換データ比較に指定したときの比較条件
(トリガモード、比較チャネル、停止レベル1、停止レベル2)を設定します。
SetAISmpNumで設定したサンプリング回数を終了後、SetAIStopLevで設定した比較チャネルの変換デー
タを停止レベル1、2と比較します。比較する変換データが、停止レベル1を通過した後、停止レベ
ル2を超えたときサンプリングの停止条件を満足します。
SetAIFunctionでサンプリング停止条件を変換データ比較以外に指定したときは、設定は無効です。
6-20
第6章 ファンクションリファレンス
トリガモード
トリガモードは、停止レベルと比較する変換データのカップリング条件を決定します。
DCトリガでは、変換データの値と停止レベルの値をそのまま比較します。
ACトリガでは、変換データを順次演算処理し、DC成分を除いた値と停止レベルの値を比較します。
DC成分を除いた値 ACDATA と、変換データ DATA の関係は基本的に以下の式で表されます。
ACDATA
n
= DATA n
ただし n = 1,2,3..
−
OFFSET
n
OFFSET
n
=
DATA n − OFFSET
256
n −1
+ OFFSET
n − 1
(OFFSET0 = DATA1)
比較チャネル
比較チャネルは、停止レベルと比較を行う変換データの入力チャネルを決定します。
停止レベルとの比較は、指定したチャネルの変換データだけで行われます。
シングルチャネルモードのときは、入力するチャネルと同一にしてください。
マルチチャネルモードのときは、スキャンするチャネルに含まれるチャネルを設定してください。
停止レベル
変換データと比較するレベル(レベル1、レベル2)を設定します。
停止レベルの値は変換データのとり得る範囲内で自由に設定できます。
レベル1とレベル2を別の値に設定することで、ヒステリシスを持ったプラススロープ、マイナスス
ロープが実現できます。また、レベル1とレベル2を同じ値に設定したときは、デュアルスロープに
なります。
停止レベルの設定は、トリガモードをDCトリガに設定し、SetAIFunctionで変換データ形式をオフセット
( ス
トレート)バイナリに指定したときは、オフセット(ストレート)バイナリ形式でレベルを設定し
てください。コンプリメントバイナリに指定したときは、コンプリメントバイナリ形式でレベルを設定
して
ください。
トリガモードをACトリガに設定した場合は、SetAIFunctionでの変換データ形式によらず、コンプリメン
トバ
イナリ形式でレベルを設定してください。
Level 1 < Level 2
■注意
Level 1 > Level 2
Level 2
Level 1
Level 1
Level 2
Level 1 = Level 2
Level
SetAIFunctionでサンプリング停止条件を変換データ比較以外に指定したときは、設定は無効です。
停止レベルの値は、変換データのとり得る値の範囲を超えないようにしてください。
■参照
SetAIFunction、SetAISmpNum、SetAIStartLev
6-21
第6章 ファンクションリファレンス
機能161: SetAISmpNum
AI
■機能
トリガディレイ回数、サンプリング回数、遅延サンプリング回数を設定します。
■書式
C
void SetAISmpNum ( int address, unsigned long trgnum, unsigned long smpnum,
QB
SetAISmpNum% ( ADDRESS%, TRGNUM&, SMPNUM&, DLYNUM& )
TP
SetAISmpNum ( address: WORD; trgnum, smpnum, dlynum: LONGINT ): WORD;
ASM
SetAISmpNum int_tbl address trgnum smpnum dlynum
unsigned long dlynum );
■引数
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. trgnum
トリガディレイ回数
0∼262,143(初期値: 0 )
3. smpnum
サンプリング回数
1∼262,144(初期値: 1 )
4. dlynum
遅延サンプリング回数
1∼1,677,7216(AD12-16U(PCI)EH、AD16-16U(PCI)EHの場合)
■ライブラリのエントリ
メモリアドレス
■解説
0∼262,143(初期値: 0 )
call pac_main
内容
DS: [BX+0]
機能番号(161固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
トリガディレイ回数(下位)設定値
DS: [BX+4]
トリガディレイ回数(中位)設定値
DS: [BX+5]
トリガディレイ回数(上位)設定値
DS: [BX+6]
サンプリング回数(下位)設定値
DS: [BX+7]
サンプリング回数(中位)設定値
DS: [BX+8]
サンプリング回数(上位)設定値
DS: [BX+9]
サンプリング遅延回数(下位)設定値
DS: [BX+a]
サンプリング遅延回数(中位)設定値
DS: [BX+b]
サンプリング遅延回数(上位)設定値
SetAISmpNumは、トリガディレイ回数、サンプリング回数、遅延サンプリング回数を設定します。
トリガディレイ回数
サンプリング開始条件が成立したときからバッファメモリへの変換データの格納を開始するまでのサン
プリ
ング回数を制御します。
SetAIFunctionでサンプリング開始条件をソフトウェアに指定したときは設定値を 0 にしてください。
サンプリングの開始条件が成立してから、トリガディレイ回数分の変換データは、バッファメモリに格
れません。トリガディレイ回数のサンプリングを経過した後、バッファメモリへの格納を開始しま
納さ
す。
サンプリング回数
バッファメモリ内に格納する変換データ数を決定します。
サンプリング停止条件が、格納終了の場合はそのままサンプリング回数を意味します。
サンプリング停止条件が、変換データ比較、または外部制御信号の場合は、最低限変換データを格納す
数を意味します。設定したサンプリング回数のサンプリングを終了する前に成立したサンプリング
されます。(StopAIは除く。)
6-22
る回
停止条件は無視
第6章 ファンクションリファレンス
遅延サンプリング回数
サンプリング停止条件が成立した後にサンプリングを行う回数を決定します。
ソフトウェアによる強制停止(StopAI)以外のサンプリング停止条件が成立したときから、遅延サンプ
リング回数分のサンプリングを行い、変換データをメモリに格納します。
遅延サンプリング回数を0回に設定した場合は、サンプリング停止条件が成立した時点でサンプリング
を停止します。
開始条件成立
格納開始
停止条件成立
格納終了
アナログ信号
ボード上のメモリに格納される範囲
トリガディレイ回数
サンプリング回数
■注意
SetAISmpNumは、アナログ入力を行う場合、必ず実行してください。
■参照
SetAIFunction、SetAIStartLev、SetAIStopLev、StartAI、StopAI
遅延サンプリング回数
6-23
第6章 ファンクションリファレンス
機能163: SetAIRptNum
■機能
■書式
■引数
リピート回数を設定します。
C
void SetAIRptNum ( int address, unsigned long rptnum );
QB
SetAIRptNum% ( ADDRESS%, RPTNUM& )
TP
SetAIRptNum ( address: WORD; rptnum: LONGINT ): WORD;
ASM
SetAIRptNum int_tbl address rptnum
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. rptnum
リピート回数
■ライブラリのエントリ
■解説
AI
0∼16,777,215 (初期値: 0 )
call pac_main
メモリアドレス
内容
DS: [BX+0]
機能番号(163固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
リピート回数(下位)設定値
DS: [BX+4]
リピート回数(中位)設定値
DS: [BX+5]
リピート回数(上位)設定値
SetAIRptNumは、サンプリング開始から遅延サンプリングを含むすべてのサンプリングの終了までを繰
り返す回数を決定します。
リピート回数は、rptnum = 0 で1回だけサンプリングを行います。
リピート回数は、SetAIFunctionでリピートモードを無制限に指定したときは、この設定は無効です。
無制限に指定したときの動作停止には、StopAIを使用してください。
動作
開始
動作
終了
停止条件
アナログ信号
格納データ
① ②
③
格納データ
① ②
③
格納データ
① ②
③
ボード動作中
サンプリング終了
ステータス
外部制御信号
① トリガディレイ回数
6-24
② サンプリング回数
③ 遅延サンプリング回数
第6章 ファンクションリファレンス
■注意
SetAIFunctionでサンプリング開始条件を外部信号立ち上がり/立ち下がりに設定した場合にのみ使用で
す。サンプリング開始条件をソフトウェアスタート、または変換データ比較に設定した場合は、こ
きま
のファンクショ
ンは使用できません。設定値を 0 にしてください。
■参照
SetAIFunction、SetAISmpNum、StartAI、StopAI
6-25
第6章 ファンクションリファレンス
機能170: RstAIObm
■機能
■書式
■引数
バッファメモリを初期化します。
C
void RstAIObm ( int address );
QB
RstAIObm% ( ADDRESS% )
TP
RstAIObm ( address: WORD ): WORD;
ASM
RstAIObm int_tbl address
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
■ライブラリのエントリ
メモリアドレス
■解説
AI
call pac_main
内容
DS: [BX+0]
機能番号(170固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
RstAIObmは、バッファメモリを初期化します。
SetAIFunctionでバッファメモリ形式をFIFOに指定したときとリングに指定したときでは、意味が異なり
FIFO形式
FIFOメモリを初期化し、関連するステータスをクリアします。
①バッファデータレディステータスを[ 0 ]にクリアします。
②バッファハーフフルステータスを[ 0 ]にクリアします。
③バッファオーバーフローステータスを[ 0 ]にクリアします。
リング形式
リングバッファメモリのアドレスを初期値にし、関連するレジスタ、ステータスをクリアします。
①バッファメモリのライトアドレスとリードアドレスレジスタを初期値(0)にします。
②バッファメモリのトリガドライトアドレスレジスタを初期値(0)にします。
③バッファデータレディステータスを[ 0 ]にクリアします。
④バッファハーフフルステータスを[ 0 ]にクリアします。
⑤バッファオーバーフローステータスを[ 0 ]にクリアします。
■注意
バッファメモリ形式がリングのとき、格納されている変換データは初期化されません。
■参照
SetAIFunction、GetStatus、SetAIObmWtAdr、GetAIObmWtAdr、SetAIObmRdAdr、GetAIObmRdAdr、
GetAIObmTrgAdr
6-26
ます。
第6章 ファンクションリファレンス
機能171: SetAIObmWtAdr
■機能
■書式
■引数
AI
バッファメモリのライトアドレスを設定します。
C
void SetAIObmWtAdr ( int address, unsigned long wtadr );
QB
SetAIObmWtAdr% ( ADDRESS%, WTADR& )
TP
SetAIObmWtAdr ( address: WORD; wtadr: LONGINT ): WORD;
ASM
SetAIObmWtAdr int_tbl address wtadr
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. wtadr
バッファメモリライトアドレス 0∼262,143 (初期値: 0 )
※0∼1,677,7215(AD12-16U(PCI)EH、AD16-16U(PCI)EHの場合)
■ライブラリのエントリ
■解説
call pac_main
メモリアドレス
内容
DS: [BX+0]
機能番号(171固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
ライトアドレス(下位)設定値
DS: [BX+4]
ライトアドレス(中位)設定値
DS: [BX+5]
ライトアドレス(上位)設定値
SetAIObmWtAdrは、バッファメモリのライトアドレスを設定します。
SetAIObmWtAdrは、SetAIFunctionでバッファメモリ形式をリングに指定したときだけ有効です。
SetAIObmWtAdrを実行したときバッファデータレディステータスが[ 0 ]にクリアされます。
■注意
SetAIFunctionでバッファメモリ形式をFIFOに指定したときは、SetAIObmWtAdrを実行しないでください。
■参照
SetAIFunction、GetStatus、GetAIObmWtAdr、SetAIObmRdAdr、GetAIObmRdAdr、GetAIObmTrgAdr、
RstAIObm
6-27
第6章 ファンクションリファレンス
機能172: GetAIObmWtAdr
■機能
■書式
■引数
バッファメモリのライトアドレスを入力します。
C
void GetAIObmWtAdr ( int address, unsigned long *wtadr );
QB
GetAIObmWtAdr% ( ADDRESS%, VARPTR (WTADR&), VARSEG (WTADR&) )
TP
GetAIObmWtAdr ( address: WORD; VAR wtadr ): WORD;
ASM
GetAIObmWtAdr int_tbl address wtadr
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. *wtadr
バッファメモリライトアドレス格納ポインタ
■ライブラリのエントリ
メモリアドレス
■解説
AI
call pac_main
内容
DS: [BX+0]
機能番号(172固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
ライトアドレス(下位)入力値
DS: [BX+4]
ライトアドレス(中位)入力値
DS: [BX+5]
ライトアドレス(上位)入力値
GetAIObmWtAdrは、バッファメモリのライトアドレスを入力します。
GetAIObmWtAdrは、SetAIFunctionでバッファメモリ形式をリングに指定したときだけ有効です。
GetAIObmWtAdrは、サンプリング動作が停止しているときに実行してください。
サンプリングが終了している場合は、最終格納アドレス + 1 が入力されます。
■注意
SetAIFunctionでバッファメモリ形式をFIFOに指定したときは、GetAIObmWtAdrを実行しないでください。
■参照
SetAIFunction、GetStatus、SetAIObmWtAdr、SetAIObmRdAdr、GetAIObmRdAdr、GetAIObmTrgAdr、
RstAIObm
6-28
第6章 ファンクションリファレンス
機能173: SetAIObmRdAdr
■機能
■書式
■引数
AI
バッファメモリのリードアドレスを設定します。
C
void SetAIObmRdAdr ( int address, unsigned long rdadr );
QB
SetAIObmRdAdr% ( ADDRESS%, RDADR& )
TP
SetAIObmRdAdr ( address: WORD; rdadr: LONGINT ): WORD;
ASM
SetAIObmRdAdr int_tbl address rdadr
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. rdadr
バッファメモリのリードアドレス 0∼262,143 (初期値: 0 )
※0∼1,677,7215(AD12-16U(PCI)EH、AD16-16U(PCI)EHの場合)
■ライブラリのエントリ
■解説
call pac_main
メモリアドレス
内容
DS: [BX+0]
機能番号(173固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
リードアドレス(下位)設定値
DS: [BX+4]
リードアドレス(中位)設定値
DS: [BX+5]
リードアドレス(上位)設定値
SetAIObmRdAdrは、バッファメモリのリードアドレスを設定します。
SetAIObmRdAdrは、SetAIFunctionでバッファメモリ形式をリングに指定したときだけ有効です。
サンプリング中にSetAIObmRdAdrを実行しても、サンプリングに影響を与えることはありません。
■注意
SetAIFunctionでバッファメモリ形式をFIFOに指定したときは、SetAIObmRdAdrを実行しないでください。
■参照
SetAIFunction、GetStatus、SetAIObmWtAdr、GetAIObmWtAdr、GetAIObmRdAdr、GetAIObmTrgAdr、
RstAIObm
6-29
第6章 ファンクションリファレンス
機能174: GetAIObmRdAdr
■機能
■書式
■引数
バッファメモリのリードアドレスを入力します。
C
void GetAIObmRdAdr ( int address, unsigned long *rdadr );
QB
GetAIObmRdAdr% ( ADDRESS%, VARPTR (RDADR&), VARSEG (RDADR&) )
TP
GetAIObmRdAdr ( address: WORD; VAR rdadr ): WORD;
ASM
GetAIObmRdAdr int_tbl address rdadr
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. *rdadr
バッファメモリのリードアドレス格納ポインタ
■ライブラリのエントリ
メモリアドレス
■解説
AI
call pac_main
内容
DS: [BX+0]
機能番号(174固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
リードアドレス(下位)入力値
DS: [BX+4]
リードアドレス(中位)入力値
DS: [BX+5]
リードアドレス(上位)入力値
GetAIObmRdAdrは、バッファメモリのリードアドレスを入力します。
GetAIObmRdAdrは、SetAIFunctionでバッファメモリ形式をリングに指定したときだけ有効です。
最後に入力した変換データの格納アドレス+1が入力されます。
サンプリング中にGetAIObmRdAdrを実行しても、サンプリングに影響を与えません。
■注意
SetAIFunctionでバッファメモリ形式をFIFOに指定したときは、GetAIObmRdAdrを実行しないでください。
■参照
SetAIFunction、GetStatus、SetAIObmWtAdr、GetAIObmWtAdr、SetAIObmRdAdr、GetAIObmTrgAdr、
RstAIObm
6-30
第6章 ファンクションリファレンス
機能175: GetAIObmTrgAdr
■機能
■書式
■引数
サンプリング停止トリガが入力したときのバッファメモリのライトアドレスを入力します。
C
void GetAIObmTrgAdr ( int address, unsigned long *trgadr );
QB
GetAIObmTrgAdr% ( ADDRESS%, VARPTR (TRGADR&), VARSEG (TRGADR&) )
TP
GetAIObmTrgAdr ( address: WORD; VAR trgadr ): WORD;
ASM
GetAIObmTrgAdr int_tbl address trgadr
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. *trgadr
バッファメモリトリガドライトアドレス格納ポインタ
■ライブラリのエントリ
■解説
AI
call pac_main
メモリアドレス
内容
DS: [BX+0]
機能番号(175固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
トリガドライトアドレス(下位)入力値
DS: [BX+4]
トリガドライトアドレス(中位)入力値
DS: [BX+5]
トリガドライトアドレス(上位)入力値
GetAIObmTrgAdrは、サンプリング停止トリガが入力したときのバッファメモリのライトアドレスを入
力します。
GetAIObmTrgAdrは、SetAIFunctionでバッファメモリ形式をリングに指定したときだけ有効です。
サンプリング中にGetAIObmTrgAdrを実行しても、サンプリングに影響を与えません。
RstAIObmかInitBoardで初期値にリセットされます。
SetAIFunctionのサンプリング停止条件の指定により、格納されるアドレスは以下の様になります。
①サンプリング停止条件が正常に成立したとき
シングルチャネルモードの変換、またはマルチチャネルモードのチャネルスキャンの終了アドレス
+1
②サンプリング中にStopAIを実行したとき
StopAIを実行したときのシングルチャネルモードの変換、またはマルチチャネルモードのチャネルス
キャンの終了アドレス+1
③サンプリング中にサンプリングクロックエラーが発生したとき
サンプリングクロックエラーの発生したアドレス、またはエラーの発生したアドレス+1
上記の条件以外では、格納されるアドレスは変化しません 。
■参照
SetAIFunction、GetStatus、StopAI、SetAIObmWtAdr、GetAIObmWtAdr、SetAIObmRdAdr、
GetAIObmRdAdr、RstAIObm
6-31
第6章 ファンクションリファレンス
機能001:
StartAI
AI
■機能
アナログ入力の動作を開始します。
■書式
C
void StartAI ( int address, unsigned char channel )
QB
StartAI% ( ADDRESS%, CHANNEL% )
TP
StartAI ( address: WORD; channel: BYTE ): WORD;
ASM
StartAI int_tbl address channel
■引数
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. channel
チャネル(チャネルアドレス)
■ライブラリのエントリ
メモリアドレス
■解説
シングルチャネルモード
: 0∼31
マルチチャネルモード
: 1∼31
call pac_main
内容
DS: [BX+0]
機能番号(001固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
チャネル 設定値
StartAIは、アナログ入力の動作を開始させます。
channelに設定する値は、SetAIFunctionで入力チャネルモードをシングルチャネルに指定したときとマル
チチ
ャネルに指定したときでは意味が異なります。
シングルチャネルモード
channelに入力するチャネルの番号を設定します。
マルチチャネルモード
channelにチャネルアドレスを指定します。
SetAIChannelで設定したスキャンするチャネルの順番が格納されているレジスタのチャネルアドレスを
設定します。
チャネルアドレス(0)から、StartAIで設定したチャネルアドレスまでに格納されているチャネルを順
にスキャンし、その順序で変換データをバッファメモリに格納します。
■注意
SetAIFunctionで入力チャネルモードをマルチチャネルに設定したときは、channelに 0 を設定しないでく
い。
■参照
6-32
SetAIFunction、SetAIChannel、StopAI、GetStatus
ださ
第6章 ファンクションリファレンス
機能002:
StopAI
AI
■機能
アナログ入力の動作を停止します。
■書式
C
void StopAI ( int address );
QB
StopAI% ( ADDRESS% )
TP
StopAI ( address: WORD ): WORD;
ASM
StopAI int_tbl address
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
■引数
■ライブラリのエントリ
■解説
call pac_main
メモリアドレス
内容
DS: [BX+0]
機能番号(002固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
StopAIは、アナログ入力の動作を停止させます。
SetAIFunctionのサンプリング停止条件で指定されている条件よりも優先度が高く、ソフトウェアでの強
止トリガになります。ただし、サンプリング開始条件を変換データ比較に設定した場合で、開始条
制停
件が満足する(変
換データをバッファメモリに格納する)前の状態では、このファンクションは無効で
す。このとき停止させるためには、InitBoardを実行してください。
StopAIの実行で各設定条件の変更されません。
サンプリングの再スタートは、StartAIで可能です。
■参照
SetAIFunction、SetAIChannel、StartAI
6-33
第6章 ファンクションリファレンス
機能004:
■機能
■書式
■引数
GetAIData
バッファメモリから、ひとつの変換データを入力します。
C
void GetAIData ( int address, int *aidata );
QB
GetAIData% ( ADDRESS%, VARPTR (AIDATA%), VARSEG (AIDATA%) )
TP
GetAIData ( address: WORD; VAR aidata ): WORD;
ASM
GetAIData int_tbl address aidata
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. *aidata
変換データ格納変数のポインタ
■ライブラリのエントリ
メモリアドレス
■解説
AI
call pac_main
内容
DS: [BX+0]
機能番号(004固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
サンプリングデータ(下位)入力値
DS: [BX+4]
サンプリングデータ(上位)入力値
GetAIDataは、バッファメモリ内の変換データをひとつだけ入力します。
バッファメモリ形式が、FIFOに設定されているときは、バッファメモリ内にある一番古いデータから入
力で
バッファメモリ形式が、リングに設定されているときは、SetAIObmRdAdrで設定したアドレスから入力
を開
きます。
始します。
GetAIDataを実行した後に、バッファメモリのリードアドレスがインクリメントされ、次のGetAIDataで
次のアドレスの変換データが入力できます。
■注意
複数の変換データを一括入力するときは、GetAIArrayを利用してください。
バッファメモリ内に変換データがないときは、実行しないでください。
■参照
6-34
GetAIArray、GetStatus
第6章 ファンクションリファレンス
機能006: GetAIArray
■機能
■書式
AI
バッファメモリから、複数の変換データを入力します。
C
void GetAIArray ( int address, int *aidata, unsigned int datanum );
QB
GetAIArray% ( ADDRESS%, VARPTR (AIDATA% (0, 0) ),
TP
GetAIArray ( address: WORD; VAR aidata; datanum: WORD ): WORD;
ASM
GetAIArray int_tbl address aioff aiseg datanum
VARSEG (AIDATA% (0, 0) ), DATANUM% )
■引数
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. *aidata
変換データ格納配列変数のポインタ
3. datanum
データ数 1∼32,768
4. aioff( ASM )
変換データ格納配列変数(aidata)のオフセットアドレス
5. aiseg( ASM )
変換データ格納配列変数(aidata)のセグメントアドレス
■ライブラリのエントリ
■解説
call pac_main
メモリアドレス
内容
DS: [BX+0]
機能番号(006固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
サンプリングデータバッファオフセットアドレス(下位)設定値
DS: [BX+4]
サンプリングデータバッファオフセットアドレス(上位)設定値
DS: [BX+5]
サンプリングデータバッファセグメントアドレス(下位)設定値
DS: [BX+6]
サンプリングデータバッファセグメントアドレス(上位)設定値
DS: [BX+7]
データ数(下位)入力値
DS: [BX+8]
データ数(上位)入力値
GetAIArrayは、バッファメモリ内の複数の変換データを一括入力し、指定された配列変数に格納します。
バッファメモリ形式がFIFOに設定されているときは、バッファメモリ内にある一番古いデータから入力
でき
バッファメモリ形式がリングに設定されているときは、SetAIObmRdAdrで設定したリードアドレスから
入力
ます。
を開始します。
GetAIArrayを実行した後に、バッファメモリのリードアドレスが入力した数だけインクリメントされ、
次のGetAIArrayでその後のアドレスから変換データが入力できます。
変換データを二次元配列に格納する場合、各言語の要素は次のようになります。
■注意
C
aidata [ サンプリング回数 ] [ チャネル数 ]
QB
AIDATA% ( サンプリング回数-1 ) ( チャネル数-1 )
TP
aidata ( サンプリング回数 ) ( チャネル数 )
ASM
aidata サプリング回数 × チャネル数
ひとつの変換データを入力するときは、GetAIDataを利用してください。
バッファメモリ内に変換データがないときは、実行しないでください。
C言語での配列変数は、static、またはグローバル変数として確保してください。
配列変数の要素数の合計は、32,768以内にしてください。
■参照
GetAIData、GetStatus
6-35
第6章 ファンクションリファレンス
機能010:
■機能
■書式
■引数
RstAIStatus
オーバーレンジエラーステータス、スタートトリガエラーステータスをリセットします。
C
void RstAIStatus ( int address );
QB
RstAIStatus% ( ADDRESS% )
TP
RstAIStatus ( address: WORD ): WORD;
ASM
RstAIStatus int_tbl address
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
■ライブラリのエントリ
メモリアドレス
■解説
AI
call pac_main
内容
DS: [BX+0]
機能番号(010固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
RstAIStatusは、オーバーレンジステータスとスタートトリガエラーステータスをリセットします。
他のステータスに影響は与えません。
■注意
サンプリングクロックエラーステータスはリセットされません。
■参照
GetStatus、InitBoard
6-36
第6章 ファンクションリファレンス
機能191: SetAIDmaFunc
AI
■機能
DMA転送条件を設定します。
■書式
C
void SetAIDmaFunc ( int address, unsigned char dmachl, unsigned char tcfnc,
QB
SetAIDmaFunc% ( ADDRESS%, DMACHL%, TCFNC%, TCDATA% )
TP
SetAIDmaFunc ( address: WORD; dmachl, tcfnc, tcdata: BYTE ): WORD;
ASM
SetAIDmaFunc int_tbl address dmachl tcfnc tcdata
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. dmachl
DMAチャネル
5∼7(初期値: 不定 )
3. tcfnc
ターミナルカウンタ機能
0 : 使用
4. tcdata
ターミナルカウントデータ
0∼255(初期値: 0 )
unsigned char tcdata );
■引数
1 : 未使用(無制限) (初期値: 0 )
設定値
DMAチャネル
設定値
DMAチャネル
5
CH5ワード転送
7
CH7ワード転送
6
CH6ワード転送
その他
設定禁止
■ライブラリのエントリ
■解説
call pac_main
メモリアドレス
内容
DS: [BX+0]
機能番号(191固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
DMAチャネル設定値
DS: [BX+4]
ターミナルカウンタ機能設定値
DS: [BX+5]
ターミナルカウントデータ設定値
SetAIDmaFuncは、DMAチャネル、ターミナルカウンタの機能、ターミナルカウントデータを設定しま
す。
ターミナルカウンタ機能を使用しないときは、ターミナルカウントデータの設定値は無視され、コン
ピュータからのTC信号に関係なく無制限に転送を行います。ターミナルカウントデータを設定するこ
とで、設定値 + 1 回分のTC信号がくるまで転送を行います。
■注意
DMA転送を行うときは、SetAIFunctionでDMA転送機能を[使用]に指定する必要があります。
また、バッファメモリ形式はFIFOで使用してください。
各設定値は指定範囲外の値に設定しないでください。
コンピュータのDMAコントローラの設定は、SetPC8237で行うことができます。
また、EMMドライバを使用している場合には、DMA転送が行えない場合があります。
PCIバス対応ボードでは、SetAIDmaFuncは使用できません。
■参照
SetAIFunction、GetStatus、SetPC8237、GetPCXmsMem、FreePCXmsMem、GetPCXmsData
6-37
第6章 ファンクションリファレンス
機能021:
■機能
■書式
■引数
SetAOData
AO
アナログ出力を行います。
C
void SetAOData ( int address, unsigned int aodata );
QB
SetAOData% ( ADDRESS%, AODATA% )
TP
SetAOData ( address, aodata: WORD ): WORD;
ASM
SetAOData int_tbl address aodata
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. aodata
出力データ
12ビット分解能:0000H∼0FFFH
16ビット分解能:0000H∼FFFFH
■ライブラリのエントリ
メモリアドレス
■解説
■注意
call pac_main
内容
DS: [BX+0]
機能番号(021固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
アナログ出力値(下位)設定値
DS: [BX+4]
アナログ出力値(上位)設定値
SetAODataは、出力データを分解能と出力レンジに応じたアナログ信号に変換します。
出力データはオフセット(ストレート)バイナリで設定してください。
出力レンジはサポートボードの解説書を参照してください。
ADI12-16(PCI)ボードでは使用できません。
6-38
第6章 ファンクションリファレンス
機能031:
GetDIData
DI
■機能
デジタル入力を行います。
■書式
C
void GetDIData ( int address, unsigned char *didata );
QB
GetDIData% ( ADDRESS%, VARPTR (DIDATA%), VARSEG (DIDATA%) )
TP
GetDIData ( address: WORD; VAR didata ): WORD;
ASM
GetDIData int_tbl address didata
■引数
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. *didata
デジタル入力値格納ポインタ
■ライブラリのエントリ
■解説
call pac_main
メモリアドレス
内容
DS: [BX+0]
機能番号(031固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
デジタル入力値
GetDIDataは、4点のTTLレベルのデジタル信号を正論理で入力します。
入力値は下位4bitに格納され、上位4bitは[ 0 ]に固定されています。
■注意
デジタル入力信号は、TTLレベルの信号を使用してください。
■参照
SetDOData、GetStatus、InitBoard
6-39
第6章 ファンクションリファレンス
機能041:
■機能
■書式
■引数
SetDOData
デジタル出力を行います。
C
void SetDOData ( int address, unsigned char dodata );
QB
SetDOData% ( ADDRESS%, DODATA% )
TP
SetDOData ( address: WORD; dodata: BYTE ): WORD;
ASM
SetDOData int_tbl address dodata
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. dodata
デジタル出力値 00H∼0FH(初期値: 0 )
■ライブラリのエントリ
メモリアドレス
■解説
■注意
DO
call pac_main
内容
DS: [BX+0]
機能番号(041固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
デジタル出力設定値
SetDODataは、4点のTTLレベルのデジタル信号を正論理で出力します。
コネクタCN2に接続されるデジタル出力信号のうち1点(DO3)は、ジャンパの設定でカウンタ出力
信号に切り替えることができます。詳細は、サポートボードの解説書を参照してください。
■参照
6-40
GetDIData、GetStatus、InitBoard
第6章 ファンクションリファレンス
機能050:
RstCNTStatus
CN
T
■機能
カウンタのステータスをリセットします。
■書式
C
void RstCNTStatus ( int address );
QB
RstCNTStatus% ( ADDRESS% )
TP
RstCNTStatus ( address: WORD ): WORD;
ASM
RstCNTStatus int_tbl address
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
■引数
■ライブラリのエントリ
call pac_main
メモリアドレス
内容
DS: [BX+0]
機能番号(050固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
■解説
RstCNTStatusは、8254カウントアップステータスと8254オーバーランステータスをリセットします。
■注意
ADI12-16(PCI)ボードでは使用できません。
■参照
StartCNT、StopCNT、SetCNTData、GetCNTData、GetCNTStatus、InitBoard
6-41
第6章 ファンクションリファレンス
機能051:
StartCNT
CN
T
■機能
カウンタの動作を開始します。
■書式
C
void StartCNT ( int address );
QB
StartCNT% ( ADDRESS% )
TP
StartCNT ( address: WORD ): WORD;
ASM
StartCNT int_tbl address
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
■引数
■ライブラリのエントリ
メモリアドレス
■解説
call pac_main
内容
DS: [BX+0]
機能番号(051固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
StartCNTは、ボード上の8254のゲートをオープンし、動作を開始させます。
ボード上の8254のゲートの状態はStopCNTが実行されるまで保持されます。
■注意
ボード上の8254のゲートの制御が、外部信号になっているときStartCNTは無効です。
ゲートの制御については、サポートボードの解説書を参照してください。
ADI12-16(PCI)ボードでは使用できません。
■参照
6-42
StopCNT、GetCNTStatus、RstCNTStatus、SetCNTData、GetCNTData
第6章 ファンクションリファレンス
機能052:
StopCNT
CN
T
■機能
カウンタの動作を停止します。
■書式
C
void StopCNT ( int address );
QB
StopCNT% ( ADDRESS% )
TP
StopCNT ( address: WORD ): WORD;
ASM
StopCNT int_tbl address
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
■引数
■ライブラリのエントリ
call pac_main
メモリアドレス
内容
DS: [BX+0]
機能番号(052固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
■解説
StopCNTは、ボード上の8254のゲートをクローズし、動作を停止させます。
■注意
ボード上の8254のゲートの制御が、外部信号になっているときStopCNTは無効です。
ゲートの制御については、サポートボードの解説書を参照してください。
ADI12-16(PCI)ボードでは使用できません。
■参照
StartCNT、GetCNTStatus、RstCNTStatus、SetCNTData、GetCNTData
6-43
第6章 ファンクションリファレンス
機能053:
■機能
■書式
■引数
SetCNTData
カウンタのデータを設定します。
C
void SetCNTData ( int address, unsigned char cntnum, unsigned char cntdata );
QB
SetCNTData% ( ADDRESS%, CNTNUM%, CNTDATA% )
TP
SetCNTData ( address: WORD; cntnum, cntdata: BYTE ): WORD;
ASM
GetCNTData int_tbl address cntnum cntdata
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. cntnum
カウンタ番号
0∼3
3. cntdata
8254データ
00H∼FFH
設定値
カウンタ番号
設定値
カウンタ番号
0
カウンタ0
2
カウンタ2
1
カウンタ1
3
コントロールワードレジスタ
■ライブラリのエントリ
■解説
CN
T
call pac_main
メモリアドレス
内容
DS: [BX+0]
機能番号(053固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
カウンタ番号 設定値
DS: [BX+4]
8254データ 設定値
SetCNTDataは、ボード上の8254のカウンタ0∼カウンタ2、コントロールワードレジスタにデータを設定
す。
コントロールワードレジスタの設定状態により、カウンタに設定するデータの意味は異なります。
コントロールワードレジスタの詳細は、8254相当品のデータシートを参照してください。
■注意
ADI12-16(PCI)ボードでは使用できません。
■参照
StartCNT、StopCNT、GetCNTStatus、RstCNTStatus、GetCNTData
6-44
しま
第6章 ファンクションリファレンス
機能054:
■機能
■書式
GetCNTData
CN
T
カウンタのデータを入力します。
C
void GetCNTData ( int address, unsigned char cntnum, unsigned char *cntdata );
QB
GetCNTData% ( ADDRESS%, CNTNUM%, VARPTR (CNTDATA%),
TP
GetCNTData ( address: WORD; cntnum: BYTE;
ASM
GetCNTData int_tbl address cntnum cntdata
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. cntnum
カウンタ番号 0∼2
VARSEG (CNTDATA%) )
■引数
VAR cntdata ): WORD;
3. *cntdata 8254データ入力値格納ポインタ
■ライブラリのエントリ
■解説
call pac_main
メモリアドレス
内容
DS: [BX+0]
機能番号(054固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
カウンタ番号 設定値
DS: [BX+4]
8254データ 入力値
GetCNTDataは、ボード上の8254のカウンタ0∼カウンタ2のデータを入力します。
SetCNTDataで設定したコントロールワードレジスタの状態により、入力するデータの意味は異なります。
コン
トロールワードレジスタの詳細は、8254相当品のデータシートを参照してください。
■注意
ADI12-16(PCI)ボードでは使用できません。
■参照
StartCNT、StopCNT、GetCNTStatus、RstCNTStatus、SetCNTData
6-45
第6章 ファンクションリファレンス
機能059:
GetCNTStatus
CN
T
■機能
カウンタのステータスを入力します。
■書式
C
void GetCNTStatus ( int address, unsigned char *status );
QB
GetCNTStatus% ( ADDRESS%, VARPTR (STATUS%), VARSEG (STATUS%) )
TP
GetCNTStatus ( address: WORD; VAR status ): WORD;
ASM
GetCNTStatus int_tbl address status
■引数
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. *status
8254ステータスデータ格納ポインタ
D7
D6
D5
D4
D3
D2
③
D1
D0
② ①
ビット
内容
D0
①8254カウントアップステータス
8254のカウントアップを通知します。初期値は [0] です。
セット:
8254のカウントアップ信号がきたとき
クリア:
RstCNTStatus実行
InitBoard実行
D1
②8254オーバーランステータス
8254のカウントアップ信号のオーバーランを通知します。初期値は [0] です。
セット:
8254カウントアップステータスがすでにセットされているときに、次のカウ
ントアップ信号がきたとき
クリア:
RstCNTStatus実行
InitBoard実行
D7∼D2
③0固定
■ライブラリのエントリ
メモリアドレス
■解説
call pac_main
内容
DS: [BX+0]
機能番号(059固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
8254ステータスデータ 入力値
GetCNTStatusは、8254カウントアップステータスと8254オーバーランステータスを入力します。
各ステータスの状態は、RstCNTStatus、InitBoardでリセットできます。
■注意
ADI12-16(PCI)ボードでは使用できません。
■参照
StartCNT、StopCNT、RstCNTStatus、SetCNTData、GetCNTData、GetStatus、InitBoard
6-46
第6章 ファンクションリファレンス
機能181: SetINTLevel
■機能
■書式
■引数
T
割り込みレベルを設定します。
C
void SetINTLevel ( int address, unsigned char level );
QB
SetINTLevel% ( ADDRESS%, LEVEL% )
TP
SetINTLevel ( address: WORD; level: BYTE ): WORD;
ASM
SetINTLevel int_tbl address level
1. address
先頭I/Oアドレス (設定値はサポートボードの解説書参照)
2. level
割り込みレベル (初期値: 未使用)
設定値
割り込みレベル
設定値
割り込みレベル
5
IRQ5
11
IRQ11
7
IRQ7
12
IRQ12
9
IRQ9
15
IRQ15
10
IRQ10
255
未使用
■ライブラリのエントリ
■解説
IN
call pac_main
メモリアドレス
内容
DS: [BX+0]
機能番号(181固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
割り込みレベル 設定値
SetINTLevelは、ボードが使用する割り込みレベルを設定します。
未使用の場合は、255を設定してください。
■注意
PCIバス対応ボードでは、コンピュータから割り当てられた割り込みレベルの値に関係なく、
IRQ5, 7, 9, 10, 11, 12, 15のいずれかを設定してください。
■参照
SetINTMask、GetINTReqReg、RstINTReqReg
6-47
第6章 ファンクションリファレンス
機能183:
■機能
■書式
■引数
IN
SetINTMask
T
割り込みを発生させる要因を設定します。
C
void SetINTMask ( int address, unsigned int maskdata );
QB
SetINTMask% ( ADDRESS%, MASKDATA% )
TP
SetINTMask ( address: WORD; maskdata: WORD ): WORD;
ASM
SetINTMask int_tbl address maskdata
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. maskdata
割り込み要因データ (初期値: 要因なし)
D15 D14 D13 D12 D11 D10 D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
⑯ ⑮ ⑭ ⑬ ⑫ ⑪ ⑩ ⑨ ⑧ ⑦ ⑥ ⑤ ④ ③ ② ①
ビット 内容
①ボード動作終了
D8
⑨サンプリング開始信号
D1
②バッファデータレディ
D9
⑩サンプリング停止信号
D2
③バッファメモリハーフフル
D10
⑪チャネルスキャン終了
D3
④バッファメモリオーバーフロー
D11
⑫DMA転送ターミナルカウント
D4
⑤サンプリング終了
D12
⑬8254カウントアップ
D5
⑥オーバーレンジエラー
D13
⑭8254カウントオーバーラン
D6
⑦スタートトリガエラー
D14
⑮割り込みトリガ入力
D7
⑧サンプリングクロックエラー
D15
⑯割り込みトリガ入力オーバーラン
■ライブラリのエントリ
メモリアドレス
■解説
ビット 内容
D0
call pac_main
内容
DS: [BX+0]
機能番号(183固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
割り込み要求データ(下位)設定値
DS: [BX+4]
割り込み要求データ(上位)設定値
SetINTMaskは、割り込みを発生させる要因を指定します。
要因に対応するビットに[ 1 ]を設定すると、その要因はマスクされ割り込み要求信号を発生させません。
[ 0 ]を設定するとマスクは解除され、その要因での割り込み要求が可能になります。
マスクが解除されている要因に対応する割り込み要求レジスタのビットが[ 1 ]になったとき、割り込み
信号が発生します。複数の要因のマスクを解除している場合は、対応するどれかひとつの割り込み
要求
要求レジスタの
ビットが[ 1 ]になったとき、最初の割り込み要求信号が発生します。
また、複数のマスクが解除され、対応する複数の割り込み要求レジスタが[ 1 ]になっているときは、
RstINTReqRegで割り込み要求レジスタの対応するビットをリセットした直後に、残っている割り込み要
ジスタのビットからの要求として、割り込み要求信号が出力されます。
6-48
求レ
第6章 ファンクションリファレンス
■注意
割り込み要因
具体要因
ボード動作終了
リピートを含むすべての動作の終了
バッファデータレディ
バッファデータレディステータスのセット
バッファメモリハーフフル
バッファメモリハーフフルステータスのセット
バッファメモリオーバーフロー
バッファメモリオーバーフローステータスのセット
サンプリング終了
サンプリング終了ステータスのセット
オーバーレンジエラー
オーバーレンジエラーステータスのセット
スタートトリガエラー
スタートトリガエラーステータスのセット
サンプリングクロックエラー
サンプリングクロックエラーステータスのセット
サンプリング開始信号
外部開始信号の入力、または比較条件成立時
サンプリング停止信号
外部停止信号の入力、または比較条件成立時
チャネルスキャン終了
チャネルスキャン終了(マルチチャネルのときのみ)
DMA転送ターミナルカウント
DMA転送のターミナルカウント信号
8254カウントアップ
8254カウントアップステータスのセット
8254カウントオーバーラン
8254カウントオーバーランステータスのセット
割り込みトリガ入力
割り込みトリガ入力ステータスのセット
割り込みトリガ入力オーバラン
割り込みトリガオーバランステータスのセット
SetAIFunctionでサンプリング開始条件を変換データ比較に、入力チャネルモードをマルチチャネルに設
チャネルスキャン終了による割り込みを利用する場合は、SetINTMaskでチャネルスキャン終了と
定し、
バッファデータ
レディの両方を指定してください。
チャネルスキャン終了による割り込みは、バッファデータレディによる割り込みが発生した後のものだ
けを
有効にしてください。割り込みハンドラルーチン内での判断方法の例を以下に示します。
チャネルスキャン終了
による割り込みの
有効/無効判断
① GetINTReqReg( )
①割り込み要因を取得
② バッファデータレディ
②バッファデータレディによる割り込みの確認
NO
YES
③チャネルスキャン終了
③チャネルスキャン終了による割り込みの確認
NO
YES
有効
無効
PCIバス対応ボードは、DMA転送機能をサポートしていません。「D11ビット⑫DMA転送ターミナル
カウント」はマスク( [1]を設定 )してください。
ADI12-16(PCI)ボードでは、8254機能をサポートしていません。「D12、D13ビット」はマスク( [1]を設定)してく
ださい。
■参照
SetAIFunction、GetStatus、GetINTReqReg、RstINTReqReg、SetINTLevel
6-49
第6章 ファンクションリファレンス
機能189:
■機能
■書式
■引数
IN
GetINTReqReg
T
割り込み要求レジスタの状態を入力します。
C
void GetINTReqReg ( int address, unsigned int *reqdata );
QB
GetINTReqReg% ( ADDRESS%, VARPTR (REQDATA%), VARSEG (REQDATA%) )
TP
GetINTReqReg ( address: WORD; VAR reqdata ): WORD;
ASM
GetINTReqReg int_tbl address reqdata
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. *reqdata
割り込み要求データ格納ポインタ
D15 D14 D13 D12 D11 D10 D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
⑯ ⑮ ⑭ ⑬ ⑫ ⑪ ⑩ ⑨ ⑧ ⑦ ⑥ ⑤ ④ ③ ② ①
ビット 内容
①ボード動作終了
D8
⑨サンプリング開始信号
D1
②バッファデータレディ
D9
⑩サンプリング停止信号
D2
③バッファメモリハーフフル
D10
⑪チャネルスキャン終了
D3
④バッファメモリオーバーフロー
D11
⑫DMA転送ターミナルカウント
D4
⑤サンプリング終了
D12
⑬8254カウントアップ
D5
⑥オーバーレンジエラー
D13
⑭8254カウントオーバーラン
D6
⑦スタートトリガエラー
D14
⑮割り込みトリガ入力
D7
⑧サンプリングクロックエラー
D15
⑯割り込みトリガ入力オーバーラン
■ライブラリのエントリ
メモリアドレス
■解説
ビット 内容
D0
call pac_main
内容
DS: [BX+0]
機能番号(189固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
割り込み要求データ(下位)入力値
DS: [BX+4]
割り込み要求データ(上位)入力値
GetINTReqRegは、割り込み要求の状態を格納しているレジスタを入力します。
割り込み要求のあった要因に対応するビットが[ 1 ]になります。
入力値の内容は、RstINTReqRegでビットごとにリセットすることができます。
■注意
割り込み要求レジスタの内容は、SetINTLevel、SetINTMaskの設定状態に関わらずセットされます。
PCIバス対応ボードでは、割り込み機能を使用する場合、割り込みハンドラ内でSetINTMaskでマスクを
解除した割り込み要因に対応するビットが[ 1 ]になっているか、GetINTReqRegで必ず確認してください。
■参照
6-50
SetINTLevel、SetINTMask、RstINTReqReg
第6章 ファンクションリファレンス
機能180:
■機能
■書式
■引数
IN
RstINTReqReg
T
割り込み要求レジスタをビット単位でリセットします。
C
void RstINTReqReg ( int address, unsigned int reqdata );
QB
RstINTReqReg% ( ADDRESS%, REQDATA% )
TP
RstINTReqReg ( address, reqdata: WORD ): WORD;
ASM
RstINTReqReg int_tbl address reqdata
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. reqdata
リセットデータ
D15 D14 D13 D12 D11 D10 D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
⑯ ⑮ ⑭ ⑬ ⑫ ⑪ ⑩ ⑨ ⑧ ⑦ ⑥ ⑤ ④ ③ ② ①
ビット 内容
①ボード動作終了
D8
⑨サンプリング開始信号
D1
②バッファデータレディ
D9
⑩サンプリング停止信号
D2
③バッファメモリハーフフル
D10
⑪チャネルスキャン終了
D3
④バッファメモリオーバーフロー
D11
⑫DMA転送ターミナルカウント
D4
⑤サンプリング終了
D12
⑬8254カウントアップ
D5
⑥オーバーレンジエラー
D13
⑭8254カウントオーバーラン
D6
⑦スタートトリガエラー
D14
⑮割り込みトリガ入力
D7
⑧サンプリングクロックエラー
D15
⑯割り込みトリガ入力オーバーラン
■ライブラリのエントリ
■解説
ビット 内容
D0
call pac_main
メモリアドレス
内容
DS: [BX+0]
機能番号(180固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
リセットデータ(下位)設定値
DS: [BX+4]
リセットデータ(上位)設定値
RstINTReqRegは、割り込み要因に対応するビットに[ 1 ]を設定することにより、対応する割り込み要求
レジ
スタのビットをリセットし、再度割り込み要因の受け付けを可能にします。
RstINTReqRegで割り込み要求レジスタをリセットしたときに、マスクされていない他の要因が[ 1 ]に
なっていれば、RstINTReqReg実行直後に割り込み要求信号が出力されます。
■注意
PCIバス対応ボードでは、割り込み機能を使用する場合、割り込みハンドラ内でSetINTMaskでマスクを
解除した割り込み要因に対応するビットが[ 1 ]になっているかどうかをGetINTReqRegで確認し、[ 1 ]に
なっ
ているときは、RstINTReqRegで必ず対応するビットをリセットしてください。
■参照
SetINTLevel、SetINTMask、GetINTReqReg
6-51
第6章 ファンクションリファレンス
機能060:
■機能
■書式
■引数
RstINTTrgStatus
T
割り込みトリガ入力のステータスをリセットします。
C
void RstINTTrgStatus ( int address );
QB
RstINTTrgStatus% ( ADDRESS% )
TP
RstINTTrgStatus ( address: WORD ): WORD;
ASM
RstINTTrgStatus int_tbl address
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
■ライブラリのエントリ
メモリアドレス
■解説
IN
call pac_main
内容
DS: [BX+0]
機能番号(060固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
RstINTTrgStatusは、割り込みトリガ入力ステータスと割り込みトリガ入力オーバーランステータスをリ
セットします。
■注意
割り込みトリガ入力信号は、デジタル入力信号(DI3)と共通の信号です。
割り込みトリガ入力のステータスは、入力信号の立ち下がりエッジでセットされます。
■参照
6-52
StartINTTrigger、StopINTTrigger、GetINTTrgStatus、InitBoard
第6章 ファンクションリファレンス
機能061:
■機能
■書式
■引数
StartINTTrigger
T
割り込みトリガ入力のゲートを開きます。
C
void StartINTTrigger ( int address );
QB
StartINTTrigger% ( ADDRESS% )
TP
StartINTTrigger( address: WORD ): WORD;
ASM
StartINTTrigger int_tbl address
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
■ライブラリのエントリ
■解説
IN
call pac_main
メモリアドレス
内容
DS: [BX+0]
機能番号(061固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
StartINTTriggerは、割り込みトリガ入力のゲートをオープンし、入力可能な状態にします。
割り込みトリガ入力のゲートの状態は、StopINTTriggerが実行されるまで保持されます。
■注意
割り込みトリガ入力信号は、デジタル入力信号(DI3)と共通の信号です。
割り込みトリガ入力のステータスは、入力信号の立ち下がりエッジでセットされます。
■参照
StopINTTrigger、GetINTTrgStatus、RstINTTrgStatus
6-53
第6章 ファンクションリファレンス
機能062:
■機能
■書式
■引数
StopINTTrigger
IN
T
割り込みトリガ入力のゲートを閉じます。
C
void StopINTTrigger ( int address );
QB
StopINTTrigger% ( ADDRESS% )
TP
StopINTTrigger ( address: WORD ): WORD;
ASM
StopINTTrigger int_tbl address
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
■ライブラリのエントリ
メモリアドレス
call pac_main
内容
DS: [BX+0]
機能番号(062固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
■解説
StopINTTriggerは、割り込みトリガ入力のゲートをクローズします。
■注意
割り込みトリガ入力信号は、デジタル入力信号(DI3)と共通の信号です。
割り込みトリガ入力のステータスは、入力信号の立ち下がりエッジでセットされます。
■参照
6-54
StartINTTrigger、GetINTTrgStatus、RstINTTrgStatus
第6章 ファンクションリファレンス
機能069:
■機能
■書式
■引数
GetINTTrgStatus
IN
T
割り込みトリガのステータスを入力します。
C
void GetINTTrgStatus ( int address, unsigned char *status );
QB
GetINTTrgStatus% ( ADDRESS%, VARPTR (STATUS%), VAREG (STATUS%) )
TP
GetINTTrgStatus ( address: WORD; VAR status ): WORD;
ASM
GetINTTrgStatus int_tbl address status
1. address
先頭I/Oアドレス(設定値はサポートボードの解説書参照)
2. *status
割り込みトリガステータスデータ格納ポインタ
D7
D6
D5
D4
D3
D2
③
D1
D0
② ①
ビット
内容
D0
①割り込みトリガ入力ステータス
割り込みトリガ信号の入力を通知します。初期値は [0] です。
セット:
割り込みトリガ信号(立ち下がりエッジ)がきたとき
クリア:
RstINTTrgStatus実行
InitBoard実行
D1
②割り込みトリガオーバーランステータス
割り込みトリガ信号の入力のオーバーランを通知します。初期値は [0] です。
セット:
割り込みトリガ入力ステータスがすでにセットされているときに、次の割り
込みトリガ信号(立ち下がりエッジ)がきたとき
クリア:
RstINTTrgStatus実行
InitBoard実行
D7∼D2
③0固定
■ライブラリのエントリ
■解説
call pac_main
メモリアドレス
内容
DS: [BX+0]
機能番号(069固定)設定値
DS: [BX+1]
先頭I/Oアドレス(下位)設定値
DS: [BX+2]
先頭I/Oアドレス(上位)設定値
DS: [BX+3]
外部トリガステータスデータ 入力値
GetINTTrgStatusは、割り込みトリガ入力ステータスと割り込みトリガ入力オーバーランステータスを入
力し
ます。
各ステータスの状態は、RstINTTrgStatus、InitBoardでリセットできます。
■注意
割り込みトリガ入力信号は、デジタル入力信号(DI3)と共通の信号です。
割り込みトリガ入力のステータスは、入力信号の立ち下がりエッジでセットされます。
■参照
StartINTTrigger、StopINTTrigger、RstINTTrgStatus、GetStatus
6-55
第6章 ファンクションリファレンス
機能200:
■機能
SetPC8237
PC
コンピュータのDMAコントローラの設定を行います。
■書式 C
void SetPC8237 ( unsigned char dmachl, unsigned char dmadir,
unsigned char autoini, unsigned char autoinc, unsigned int dmaoff,
unsigned int dmaseg, unsigned int datanum );
QB
SetPC8237% ( DMCHL%, DMADIR%, AUTOINI%, AUTOINC%, DMAOFF%,
TP
SetPC8237 ( dmachl, dmadir, autoini, autoinc: BYTE; dmaoff, dmaseg,
ASM
SetPC8237 int_tbl dmachl dmadir autoini autoinc dmaoff dmaseg datanum
DMASEG%, DATANUM% )
datanum: WORD ): WORD;
■引数
1. dmachl
DMAチャネル
5∼7
2. dmadir
DMA転送方向
0 : I/O → memory
1 : memory → I/O
3. autoini
オートイニシャライズモード
0 : 未使用
1 : 使用
4. autoinc
オートインクリメントモード
0 : 未使用
1 : 使用
5. dmaoff
DMAデータ転送先オフセットアドレス
0∼65,535
6. dmaseg
DMAデータ転送先セグメントアドレス
0∼65,535
7. datanum
DMA転送データ数
0∼65,535
設定値
DMAチャネル
設定値
DMAチャネル
5
CH5ワード転送
7
CH7ワード転送
6
CH6ワード転送
その他
設定禁止
■ライブラリのエントリ
メモリアドレス
call pac_main
内容
DS: [BX+0]
機能番号(200固定)設定値
DS: [BX+1]
DMAチャネル設定値
DS: [BX+2]
DMA転送方向設定値
DS: [BX+3]
オートイニシャライズモード設定値
DS: [BX+4]
オートインクリメントモード設定値
DS: [BX+5]
DMA転送先オフセットアドレス(下位)設定値
DS: [BX+6]
DMA転送先オフセットアドレス(上位)設定値
DS: [BX+7]
DMA転送先セグメントアドレス(下位)設定値
DS: [BX+8]
DMA転送先セグメントアドレス(上位)設定値
DS: [BX+9]
DMA転送データ数(下位)設定値
DS: [BX+a]
DMA転送データ数(上位)設定値
■解説
SetPC8237は、コンピュータのDMAコントローラ 8237 の各レジスタに必要な条件を設定します。
■注意
DMA転送方向は、I/O → memory(dmadir = 0)で使用してください。
■参照
SetAIDmaFunc、GetPCXmsMem、FreePCXmsMem、GetPCXmsData
6-56
第6章 ファンクションリファレンス
機能202: GetPCXmsMem
■機能
PC
XMSメモリから指定サイズのメモリブロックを確保し、オフセットアドレスとセグメントアドレスを
求めます。
■書式
C
int GetPCXmsMem ( unsigned char xmssize, unsigned int *xmsoff,
QB
GetPCXmsMem% ( XMSSIZE%, VARPTR (XMSOFF%), VARSEG (XMSOFF%),
TP
GetPCXmsMem ( xmssize: BYTE ; VAR xmsoff; VAR xmsseg ): WORD;
ASM
GetPCXmsMem int_tbl xmssize xmsoff xmsseg xmsrlt
unsigned int *xmsseg );
VARPTR (XMSSEG%), VARSEG (XMSSEG%) )
■引数
1. xmssize
XMSメモリ確保サイズ(128Kbyte単位)
2. xmsoff
格納領域オフセットアドレスポインタ
3. xmsseg
格納領域セグメントアドレスポインタ
4. xmsrlt( ASM )
XMSメモリ確保処理の実行結果(参照 ■戻り値)
■ライブラリのエントリ
■戻り値
0∼127 : 131,072∼16,777,216 byte
call pac_main
メモリアドレス
内容
DS: [BX+0]
機能番号(202固定)設定値
DS: [BX+1]
XMSメモリ確保サイズ設定値
DS: [BX+2]
オフセットアドレス(下位)設定値
DS: [BX+3]
オフセットアドレス(上位)設定値
DS: [BX+4]
セグメントアドレス(下位)設定値
DS: [BX+5]
セグメントアドレス(上位)設定値
DS: [BX+6]
戻り値(下位)設定値
DS: [BX+7]
戻り値(上位)設定値
C、QB、TP の関数は、実行結果を関数の戻り値として返します。
ASM では、実行結果を引数xmsrltに格納します。
0 : 正常終了
1 : XMSドライバ未登録エラー
2 : XMSメモリ確保エラー
3 : XMSメモリ転送エラー
4 : XMSメモリ開放エラー
■解説
GetPCXmsMemは、XMSメモリ確保サイズで指定されたサイズのXMSメモリを確保し、その領域のオフ
セットアドレスとセグメントアドレスを、それぞれの引数に設定します。
メモリの確保が正常に終了しなかった場合は、エラーコードを返します。(参照 ■戻り値)
確保できるXMSメモリの容量は、動作環境により異なります。戻り値は必ず確認してください。
6-57
第6章 ファンクションリファレンス
■注意
XMSメモリを使用する場合は以下の注意事項にしたがってください。
1)XMSメモリが使用可能なコンピュータであること
2)XMSメモリを制御するソフトウェア“HIMEM.SYS”(DOS標準添付のXMSメモリ制御用ソフトウェア)が、CO
NFIG.SYSに登録されていること
3)XMSメモリは、GetPCXmsMemで確保すること
4)使用終了後は、必ずFreePCXmsMemを実行し、確保したXMSメモリを開放すること
5)XMSメモリに、XMSメモリを利用するドライバやプログラムなどがすでに常駐している環境では、正常なDM
A転送が実行できない場合があります。
■参照
6-58
SetAIDmaFunc、GetPCXmsData、FreePCXmsMem、SetPC8237
第6章 ファンクションリファレンス
機能203: FreePCXmsMem
PC
■機能
GetPCXmsMemで確保されたXMSメモリブロックを開放します。
■書式
C
int FreePCXmsMem ( );
QB
FreePCXmsMem%
TP
FreePCXmsMem: WORD;
ASM
FreePCXmsMem int_tbl xmsrlt
1. xmsrlt( ASM )
XMSメモリ開放処理の実行結果(参照 ■戻り値)
■引数
■ライブラリのエントリ
■戻り値
call pac_main
メモリアドレス
内容
DS: [BX+0]
機能番号(203固定)設定値
DS: [BX+1]
戻り値(下位)設定値
DS: [BX+2]
戻り値(上位)設定値
C、QB、TP の関数は、実行結果を関数の戻り値として返します。
ASM では、実行結果を引数xmsrltに格納します。
0 : 正常終了
1 : XMSドライバ未登録エラー
2 : XMSメモリ確保エラー
3 : XMSメモリ転送エラー
4 : XMSメモリ開放エラー
■解説
FreePCXmsMemは、GetPCXmsMemで確保したXMSメモリをすべて開放します。
メモリの開放が正常に終了しなかった場合はエラーコードを返します。(参照 ■戻り値)
■注意
XMSメモリを使用する場合は以下の注意事項にしたがってください。
1)XMSメモリが使用可能なコンピュータであること
2)XMSメモリを制御するソフトウェア“HIMEM.SYS”(DOS標準添付のXMSメモリ制御用ソフトウェア)が、CO
NFIG.SYSに登録されていること
3)XMSメモリは、GetPCXmsMemで確保すること
4)使用終了後は、必ずFreePCXmsMemを実行し、確保したXMSメモリを開放すること
5)XMSメモリに、XMSメモリを利用するドライバやプログラムなどがすでに常駐している環境では、正常なDM
A転送が実行できない場合があります。
■参照
SetAIDmaFunc、GetPCXmsMem、GetPCXmsData、SetPC8237
6-59
第6章 ファンクションリファレンス
機能204: GetPCXmsData
PC
■機能
XMSメモリ内のデータを、メインメモリ内に確保した配列変数に指定サイズだけ格納します。
■書式
C
int GetPCXmsData
( unsigned long xmsadr, int *xmsdata, unsigned int datanum );
QB
GetPCXmsData% ( XMSADR&, VARPTR (XMSDATA% (0, 0) ),
TP
GetPCXmsData( xmsadr: LONGINT; VAR xmsdata; datanum: WORD ): WORD;
ASM
GetPCXmsData int_tbl xmsadr xmsdata datanum xmsrlt
VARSEG (XMSDATA% (0, 0) ), DATANUM% )
■引数
1. xmsadr
XMSメモリオフセットアドレス
2. *xmsdata
格納配列変数のポインタ
3. datanum
格納データ数
0∼16,777,215
1∼65,535
4. xmsrlt( ASM )XMSメモリデータ転送処理の実行結果(参照 ■戻り値)
■ライブラリのエントリ
メモリアドレス
call pac_main
内容
DS: [BX+0]
機能番号(204固定)設定値
DS: [BX+1]
XMSメモリオフセットアドレス(下位)設定値
DS: [BX+2]
XMSメモリオフセットアドレス(中位)設定値
DS: [BX+3]
XMSメモリオフセットアドレス(上位)設定値
DS: [BX+4]
格納データバッファオフセットアドレス(下位)設定値
DS: [BX+5]
格納データバッファオフセットアドレス(上位)設定値
DS: [BX+6]
格納データバッファセグメントアドレス(下位)設定値
DS: [BX+7]
格納データバッファセグメントアドレス(上位)設定値
DS: [BX+8]
格納データ数(下位)設定値
DS: [BX+9]
格納データ数(上位)設定値
DS: [BX+a]
戻り値(下位)設定値
DS: [BX+b]
戻り値(上位)設定値
■戻り値 C、QB、TP の関数は、実行結果を関数の戻り値として返します。
ASM では、実行結果を引数xmsrltに格納します。
0 : 正常終了
1 : XMSドライバ未登録エラー
2 : XMSメモリ確保エラー
3 : XMSメモリ転送エラー
4 : XMSメモリ開放エラー
6-60
第6章 ファンクションリファレンス
■解説
GetPCXmsDataは、GetPCXmsMemで確保したXMSメモリ内のデータを、メインメモリ内に配列変数とし
て確保した領域に格納します。
格納データは、XMSメモリオフセットアドレスが示す位置から、指定したデータ数だけ格納されます。
■注意
XMSメモリを使用する場合は以下の注意事項にしたがってください。
1)XMSメモリが使用可能なコンピュータであること
2)XMSメモリを制御するソフトウェア“HIMEM.SYS”(DOS標準添付のXMSメモリ制御用ソフトウェア)が、CO
NFIG.SYSに登録されていること
3)XMSメモリは、GetPCXmsMemで確保すること
4)使用終了後は、必ずFreePCXmsMemを実行し、確保したXMSメモリを開放すること
5)XMSメモリに、XMSメモリを利用するドライバやプログラムなどがすでに常駐している環境では、正常なDM
A転送が実行できない場合があります。
■参照
SetAIDmaFunc、GetPCXmsMem、FreePCXmsMem、SetPC8237
6-61
第6章 ファンクションリファレンス
機能210:
SetPC8259
PC
■機能
コンピュータの割り込みコントローラの設定を行います。
■書式
C
void SetPC8259
( unsigned char level, unsigned int intoff, unsigned int intseg );
■引数
QB
SetPC8259% ( LEVEL%, INTOFF%, INTSEG% )
TP
SetPC8259 ( level: BYTE; intoff, intseg: WORD ): WORD;
ASM
SetPC8259 int_tbl level intoff intseg
1. level
割り込みレベル(初期値 : 未使用)
2. intoff
割り込みハンドラオフセットアドレス
3. intseg
割り込みハンドラセグメントアドレス
設定値
割り込みレベル
設定値
割り込みレベル
5
IRQ5
11
IRQ11
7
IRQ7
12
IRQ12
9
IRQ9
15
IRQ15
10
IRQ10
255
未使用
■ライブラリのエントリ
メモリアドレス
call pac_main
内容
DS: [BX+0]
機能番号(210固定)設定値
DS: [BX+1]
割り込みレベル設定値
DS: [BX+2]
割り込みハンドラオフセットアドレス(下位)設定値
DS: [BX+3]
割り込みハンドラオフセットアドレス(上位)設定値
DS: [BX+4]
割り込みハンドラセグメントアドレス(下位)設定値
DS: [BX+5]
割り込みハンドラセグメントアドレス(上位)設定値
■解説
SetPC8259は、コンピュータの割り込みコントローラ 8259 に必要な条件を設定します。
■注意
割り込み使用終了後は、RstPC8259で割り込みコントローラの状態を元に戻してください。
PCIバス対応ボードでは、コンピュータから割り当てられた割り込みレベルがIRQ5, 7, 9, 10, 11, 12,
15以外の場合、またはコンピュータから割り当てられた割り込みレベルと他の機器が使用する割り込みレベルが
共有されている場合は、SetPC8259は使用できません。SetPC8259の代わりに、DOSファンクションコールに相当
する処理で、割り当てられた割り込みレベルに対応するベクタアドレスにベクタを設定してください。
■参照
SetINTLevel、RstPC8259、EoiPC8259
■補足
QB では、割り込みハンドラのアドレスを取得するファンクション(GetHandlAdr%)を特別に用意して
います。SetPC8259%を実行する場合は、事前にGetHandlAdr%で、割り込みハンドラのオフセットアド
レスおよびセグメントアドレスを求める必要があります。
QB
GetHandlAdr% ( LEVEL%, VARPTR (INTOFF%), VARSEG (INTOFF%),
VARPTR (INTSEG%), VARSEG (INTSEG%) )
QB の割り込みハンドラは、言語の仕様上アセンブリ言語で作成してください。
6-62
第6章 ファンクションリファレンス
機能211:
RstPC8259
PC
■機能
コンピュータの割り込みコントローラの状態を元に戻します。
■書式
C
void RstPC8259 ( );
QB
RstPC8259%
TP
RstPC8259 : WORD;
ASM
RstPC8259 int_tbl
■引数
なし
■ライブラリのエントリ
■解説
■注意
call pac_main
メモリアドレス
内容
DS: [BX+0]
機能番号(211固定)設定値
RstPC8259は、SetPC8259で設定した割り込みコントローラの状態を元に戻します。
PCIバス対応ボードでは、コンピュータから割り当てられた割り込みレベルがIRQ5, 7, 9, 10, 11, 12,
15以外の場合、またはコンピュータから割り当てられた割り込みレベルと他の機器が使用する割り込みレベルが
共有されている場合は、RstPC8259は使用できません。RstPC8259の代わりに、DOSファンクションコールに相当
する処理でベクタを復旧してください。
■参照
SetINTLevel、SetPC8259、EoiPC8259
6-63
第6章 ファンクションリファレンス
機能212: EoiPC8259
■機能
■書式
■引数
コンピュータの割り込みコントローラに対する応答処理を行います。
C
void EoiPC8259 ( unsigned char level );
QB
EoiPC8259%( LEVEL% )
TP
EoiPC8259 ( level: BYTE ): WORD;
ASM
EoiPC8259 int_tbl level
1. level
割り込みレベル
設定値
割り込みレベル
設定値
割り込みレベル
5
IRQ5
11
IRQ11
7
IRQ7
12
IRQ12
9
IRQ9
15
IRQ15
10
IRQ10
255
未使用
■ライブラリのエントリ
メモリアドレス
■解説
PC
call pac_main
内容
DS: [BX+0]
機能番号(212固定)設定値
DS: [BX+1]
割り込みレベル設定値
EoiPC8259は、割り込み終了をコンピュータに通知する、割り込みハンドラ内の応答処理を行います。
引数として指定する割り込みレベルは、SetINTLevelで設定した割り込みレベルが対象になります。
■注意
PCIバス対応ボードでは、コンピュータから割り当てられた割り込みレベルがIRQ5, 7, 9, 10, 11, 12, 15
の場合は、EoiPC8259は使用できません。EoiPC8259の代わりに、直接8259をアクセスして割り当て
レベルに対応するEOI処理を行ってください。
■参照
6-64
SetINTLevel、SetPC8259、RstPC8259
以外
られた割り込み
第7章 付録
第7章
付録
7-1 サンプルプログラム
(1)
サンプルプログラムジェネレータ
サンプルプログラムジェネレータは、SUPPORT-PAC(PC)306で提供している機能 (アナログ入力、アナログ出力、
デジタル入力、デジタル出力、カウンタ)を利用したサンプルプログラムを、簡単に作成するための支援ツールで
す。
仕様
適応OS
適応言語
適応機種
対象ボード
MS-DOS, PC-DOS
Ver.2.11以上
MS-DOS/V, PC-DOS/V
Ver.5.00/V以上
Microsoft C/C++(S, M, Lモデル)
Ver.5.1∼7.0
Microsoft Visual C/C++(S, M, Lモデル)
Ver.1.0
IBM PC/AT またはその互換機
AD12-16(PC)E、AD12-16U(PC)E、AD16-16(PC)E、AD16-16U(PC)E、
AD12-16(PC)EH、AD12-16U(PC)EH、AD16-16(PC)EH、AD16-16U(PC)EH、
AD12-16(PCI)E、AD12-16U(PCI)E、AD16-16(PCI)E、ADI12-16(PCI)
AD12-16U(PCI)EH、AD16-16U(PCI)EH
n 準備
①コンピュータを立ち上げ、DOSを起動してください。
②SUPPORT-PAC(PC)306をインストールしたドライブのサンプルプログラムジェネレータのあるディレクトリ
¥SPG へ移動してください。
③このディレクトリに以下のファイルがあることを確認してください。
SPG.EXE
n 起動
起動方法
オプション
> SPG
SPG -F < filename >
-F : 条件設定ファイル
条件ファイルを指定しないときの起動方法
実行後は、表示に従って設定値を入力してください。
n PCIバス対応ボード使用時の注意
1.board typeの選択画面では、たとえばAD12-16(PCI)Eのときには"AD12-16(PC)E/EH"のように、相当する機能の
ボードを選択してください。また、チャネル増設サブボードを使用している場合は、それに相当するボード
の組み合わせを選択してください。ADI12-16(PCI)は選択画面に表示されません。AD12-16(PC)E/EHなどを選
択し、後でソースコードを修正してください。
2.I/O addressの選択画面では、初期値のままにしておき、あとで作成したファイルのI/O addressの値をコンピュ
ータから割り当てられた値に変更してください。
3.DMA transferの選択画面では、"off"を選択してください。
4.interrupt functionの選択画面で"on"を選択した場合、次のinterrupt levelの選択画面で、コンピュータから割り当
てられた割り込みレベルがないとき、またはコンピュータから割り当てられた割り込みレベルと他の機器が
使用する割り込みレベルが共有されているときは、正常に動作するプログラムファイルを作成することがで
きません。エスケープキーを押してSPG.EXEを終了してください。
5.interrupt factorの選択画面で"dtc (DMA terminal count)"は選択しないでください。
7-1
第7章 付録
(2)
サンプルプログラム
SUPPORT-PAC(PC)306では、機能別にサンプルプログラムを用意しています。
ライブラリを使用する例としてC言語、QuickBASIC、Turbo PASCALを用意しています。
デバイスドライバを使用するタイプではアセンブリ言語のサンプルプログラムを用意しています。
以下に、各サンプルプログラムの仕様を示します。
ファイル名
ディレクトリ名
内容
AI.C
¥ MSC ¥ SAMPLE1 ¥
内部クロックを利用し、160μsec周期のサンプリングを行います。
AI.BAS
¥ QB ¥ SAMPLE1 ¥
入力チャネルはch0∼ch15で、それぞれ10回サンプリングします。
AI.PAS
¥ TP ¥ SAMPLE1 ¥
変換データは配列変数に格納します。
AI.ASM
¥ DRV ¥ SAMPLE1 ¥
DMAM.C
¥ MSC ¥ SAMPLE1 ¥
内部クロックを利用し、160μsec周期のサンプリングを行います。
DMAM.BAS
¥ QB ¥ SAMPLE1 ¥
入力チャネルはch0∼ch15で、それぞれ10回サンプリングします。
DMAM.PAS
¥ TP ¥ SAMPLE1 ¥
DMA転送機能を利用して変換データを配列変数に直接格納します。
DMAM.ASM
¥ DRV ¥ SAMPLE1 ¥
DMAX.C
¥ MSC ¥ SAMPLE1 ¥
内部クロックを利用し、160μsec周期のサンプリングを行います。
DMAX.BAS
¥ QB ¥ SAMPLE1 ¥
入力チャネルはch0∼ch15で、それぞれ10回サンプリングします。
DMAX.PAS
¥ TP ¥ SAMPLE1 ¥
DMA転送機能を利用して変換データをXMSメモリ領域へ転送し、その
DMAX.ASM
¥ DRV ¥ SAMPLE1 ¥
後で変換データを配列変数に格納します。
AO.C
¥ MSC ¥ SAMPLE1 ¥
指定したデジタルデータをアナログ信号に変換します。
AO.BAS
¥ QB ¥ SAMPLE1 ¥
変換データを画面に表示します。
AO.PAS
¥ TP ¥ SAMPLE1 ¥
AO.ASM
¥ DRV ¥ SAMPLE1 ¥
DI.C
¥ MSC ¥ SAMPLE1 ¥
4点のデジタル入力を行ないます。
DI.BAS
¥ QB ¥ SAMPLE1 ¥
入力データを画面に表示します。
DII.PAS
¥ TP ¥ SAMPLE1 ¥
DI.ASM
¥ DRV ¥ SAMPLE1 ¥
DO.C
¥ MSC ¥ SAMPLE1 ¥
4点のデジタル出力を行ないます。
DO.BAS
¥ QB ¥ SAMPLE1 ¥
出力データを画面に表示します。
DIO.PAS
¥ TP ¥ SAMPLE1 ¥
DO.ASM
¥ DRV ¥ SAMPLE1 ¥
CNT.C
¥ MSC ¥ SAMPLE1 ¥
200msec周期でカウンタを動作させます。
CNT.BAS
¥ QB ¥ SAMPLE1 ¥
カウンタの動作状態を確認し、画面に表示します。
CNT.PAS
¥ TP ¥ SAMPLE1 ¥
カウントアップの確認は、5回行います。
CNT.ASM
¥ DRV ¥ SAMPLE1 ¥
INT.C
¥ MSC ¥ SAMPLE1 ¥
内部クロックを利用し、100msec周期のサンプリングを行ないます。
INT.BAS
¥ QB ¥ SAMPLE1 ¥
入力チャネルはch0∼ch15で、それぞれ10回サンプリングします。
INT.PAS
¥ TP ¥ SAMPLE1 ¥
チャネルスキャン終了時の割り込み要求により、変換データを配列変数
INT.ASM
¥ DRV ¥ SAMPLE1 ¥
に格納します。
DO、CNTのサンプルプログラムは、出荷時の設定で実行してください。
上記のサンプルプログラムは、以下の動作環境で作成されています。
C言語
Microsoft C/C++
QuickBASIC
Microsoft QuickBASIC
Ver. 7.0
Turbo PASCAL
Borland Turbo PASCAL
アセンブリ言語
Microsoft Macro Assembler
Ver. 4.5
Ver. 7.0
Ver. 6.0
各サンプルプログラムは、それぞれの言語の特長をいかすように作成されています。そのため、上記以外のコンパ
イラ(例:Borland系のC言語など)で、新しく実行ファイルを作成する場合は、サンプルプログラムの書式などを、
そのコンパイラに適した書式に変更してから使用してください。
n PCIバス対応ボード使用時の注意
7-2
第7章 付録
1.サンプルプログラムを動作させるときは、I/Oアドレスをコンピュータから割り当てられた値に変更してくだ
さい。コンピュータから割り当てられたI/Oアドレスを取得する方法は、「7-3 PCIボードのリソース取得につ
いて」を参照してください。
2.DMA転送機能を使用するプログラム( DMAM.*、DMAX.* )は動作できません。
3.DO、CNTのサンプルプログラムは、ジャンパの設定を出荷時の設定にして実行してください。
4.INTのサンプルプログラムは、割り込みレベルの値がコンピュータから割り当てられた割り込みレベルと異な
るとき、またはコンピュータから割り当てられた割り込みレベルと他の機器が使用する割り込みレベルが共
有されているときは、正常に動作できません。
コンピュータから割り当てられた割り込みレベルを取得するプログラムと組み合わせて動作させる場合(どの
割り込みレベルに割り当てられるか特定できなくて、共有の有無の確認ができない場合などを含む)は別紙の
参考プログラムを使用してください。
割り込みレベルとその共有の有無が確認できる場合は、以下の修正で動作させることもできます。
①コンピュータから割り当てられた割り込みレベルと他の機器が使用する割り込みレベルが共有されていなく
て、割り込みレベルがIRQ5, 7, 9, 10, 11, 12, 15のいずれかの場合
・SetPC8259の割り込みレベルの値を、コンピュータから割り当てられた割り込みレベルに変更してくださ
い。
・SetINTLevelの割り込みレベルの値を、コンピュータから割り当てられた割り込みレベルの値に関係なく、
IRQ5, 7, 9, 10, 11, 12, 15のいずれかを設定してください。
・EoiPC8259の割り込みレベルの値を、コンピュータから割り当てられた割り込みレベルに変更してくださ
い。
②コンピュータから割り当てられた割り込みレベルと他の機器が使用する割り込みレベルが共有されていなく
て、割り込みレベルがIRQ5, 7, 9, 10, 11, 12, 15以外の場合
・SetPC8259の代わりに、DOSファンクションコールに相当する処理で、割り当てられた割り込みレベルに
対応するベクタアドレスにベクタを設定してください。
・SetINTLevelの割り込みレベルの値を、コンピュータから割り当てられた割り込みレベルの値に関係なく、
IRQ5, 7, 9, 10, 11, 12, 15のいずれかを設定してください。
・RstPC8259の代わりに、DOSファンクションコールに相当する処理でベクタを復旧してください。
・EoiPC8259の代わりに、直接8259をアクセスして割り当てられた割り込みレベルに対応するEOI処理を行
ってください。
③コンピュータから割り当てられた割り込みレベルと他の機器が使用する割り込みレベルが共有されていて、
割り込みレベルがIRQ5, 7, 9, 10, 11, 12, 15のいずれかの場合
・SetPC8259の代わりに、DOSファンクションコールに相当する処理で、割り当てられた割り込みレベルに
対応するベクタアドレスにベクタを設定してください。
・SetINTLevelの割り込みレベルの値を、コンピュータから割り当てられた割り込みレベルの値に関係なく、
IRQ5, 7, 9, 10, 11, 12, 15のいずれかを設定してください。
・RstPC8259の代わりに、DOSファンクションコールに相当する処理でベクタを復旧してください。
・GetINTReqRegで確認した割り込み要因が、SetINTMaskで設定した要因に該当しない場合は、EOI処理を
行わず、変更前のベクタにジャンプするようにしてください。(変更前の割り込みをフックして、割り込
みレベルを共有するための処理。)
・EoiPC8259の割り込みレベルの値を、コンピュータから割り当てられた割り込みレベルに変更してくださ
い。
④コンピュータから割り当てられた割り込みレベルと他の機器が使用する割り込みレベルが共有されていて、
割り込みレベルがIRQ5, 7, 9, 10, 11, 12, 15以外の場合
・SetPC8259の代わりに、DOSファンクションコールに相当する処理で、割り当てられた割り込みレベルに
対応するベクタアドレスにベクタを設定してください。
・SetINTLevelの割り込みレベルの値を、コンピュータから割り当てられた割り込みレベルの値に関係なく、
IRQ5, 7, 9, 10, 11, 12, 15のいずれかを設定してください。
・RstPC8259の代わりに、DOSファンクションコールに相当する処理でベクタを復旧してください。
・GetINTReqRegで確認した割り込み要因が、SetINTMaskで設定した要因に該当しない場合は、EOI処理を
行わず、変更前のベクタにジャンプするようにしてください。(変更前の割り込みをフックして、割り込
みレベルを共有するための処理。)
・EoiPC8259の代わりに、直接8259をアクセスして割り当てられた割り込みレベルに対応するEOI処理を行
ってください。
7-3
第7章 付録
n 参考プログラム1
このプログラムは、AD12-16U(PCI)E用のプログラムで、Microsoft Cで記述してあります。
コンピュータから割り当てられたI/Oアドレスを取得するプログラムとAOのサンプルプログラムを組み合わせ
た例です。(GetPciInfomationサブルーチンの代わりに「PCIリソース取得ライブラリ for MS-DOS」をホー
ムページからダウンロードすることができます)
/*-----------------------------------------------------------------------------* Hardware sample program of analog output for PCI series
* ( for SUPPORT-PAC(PC)306, Microsoft C )
*----------------------------------------------------------------------------*/
#include < stdio.h>
#include < conio.h>
#include < dos.h>
#include "h306.h"
#define
#define
#define
#define
#define
Ad1216DeviceID_
Ad1216uDeviceID_
Ad1616DeviceID_
Adi1216DeviceID_
BoardIdSetting_
0x8113
0x8103
0x8123
0x8133
0
/*--- function prototypes ---*/
int
GetPciInfomation( int );
void
main( void );
/*--- global variables ---*/
int
IoAddress;
/*----------------------------------------------------------------------------get PCI bus information
arguments: Board ID
return: information getting flag
-----------------------------------------------------------------------------*/
int
GetPciInfomation( int BoardId )
{
union REGS
IRegs;
union REGS
ORegs;
struct SREGS SRegs;
int
i;
int
FoundTargetFlag = 0;
int
NumberOfFoundTargets = 0;
char
PciBusNumber[16];
char
PciDeviceFunctionNumber[16];
/*--- get PCI BIOS present status ---*/
IRegs.h.ah = 0xb1;
IRegs.h.al = 0x01;
int86x( 0x1a, & IRegs, & ORegs, & SRegs );
if ( !ORegs.h.ah && ( ORegs.x.dx == 0x4350 ) ) {
/*--- search PCI device ---*/
for ( i = 0; i < 16; i++ ) {
IRegs.h.ah = 0xb1;
IRegs.h.al = 0x02;
IRegs.x.cx = Ad1216uDeviceID_;
IRegs.x.dx = 0x1221;
IRegs.x.si = i;
int86x( 0x1a, & IRegs, & ORegs, & SRegs );
if ( ORegs.h.ah )
break;
PciBusNumber[i] = ORegs.h.bh;
PciDeviceFunctionNumber[i] = ORegs.h.bl;
NumberOfFoundTargets++;
}
if ( NumberOfFoundTargets ) {
for ( i = 0; i < NumberOfFoundTargets; i++ ) {
7-4
第7章 付録
/*--- get Board ID ---*/
IRegs.h.ah = 0xb1;
IRegs.h.al = 0x09;
IRegs.h.bh = PciBusNumber[i];
IRegs.h.bl = PciDeviceFunctionNumber[i];
IRegs.x.di = 0x08;
int86x( 0x1a, & IRegs, & ORegs, & SRegs );
if ( BoardId == ORegs.h.cl & 0xf ) {
/*--- get I/O address ---*/
IRegs.h.ah = 0xb1;
IRegs.h.al = 0x09;
IRegs.h.bh = PciBusNumber[i];
IRegs.h.bl = PciDeviceFunctionNumber[i];
IRegs.x.di = 0x10;
int86x( 0x1a, & IRegs, & ORegs, & SRegs );
IoAddress = ORegs.x.cx & 0xfffe;
FoundTargetFlag = 1;
break;
}
}
}
}
return FoundTargetFlag;
}
/*----------------------------------------------------------------------------main routine
-----------------------------------------------------------------------------*/
void
main( void )
{
int
AoData = 0x0000;
/*--- display title ---*/
printf( "<< analog output sample program >>¥n¥n" );
if ( !GetPciInfomation( BoardIdSetting_ ) )
printf( "Cannot find the specified board in this PC.¥n" );
else {
/*--- initialize ---*/
InitBoard( IoAddress );
/*--- set AO data ---*/
SetAOData( IoAddress, AoData );
/*--- display data ---*/
printf( "output data: %04xh¥n", AoData );
}
}
7-5
第7章 付録
n 参考プログラム2
このプログラムは、AD12-16U(PCI)E用のプログラムで、Microsoft Cで記述してあります。
コンピュータから割り当てられたI/Oアドレスと割り込みレベルを取得するプログラムとINTのサンプルプログ
ラムを組み合わせた例です。(GetPciInfomationサブルーチンの代わりに「PCIリソース取得ライブラリ for
MS-DOS」をホームページからダウンロードすることができます)
/*-----------------------------------------------------------------------------* Hardware sample program of analog input with interrupt for PCI series
* ( for SUPPORT-PAC(PC)306, Microsoft C )
*
* INT - periodic sampling with internal sampling clock
*
and storing converted data to main memory by interrupt handler.
*
*
Board ID
= 0
*
input gain
= x1
*
input channel
= multi channel( 0 to 15 )
*
scan clock
= 10usec
*
sampling clock
= 100msec
*
number of samplings = 10
*
interrupt factor
= end of channel scanning, sampling clock error
*---------------------------------------------------------------------------*/
#include
#include
#include
#include
#define
#define
#define
#define
#define
< stdio.h>
< conio.h>
< dos.h>
"h306.h"
Ad1216DeviceID_
Ad1216uDeviceID_
Ad1616DeviceID_
Adi1216DeviceID_
BoardIdSetting_
0x8113
0x8103
0x8123
0x8133
0
/*--- function prototypes ---*/
int
GetPciInfomation( int );
void
main( void );
void
_interrupt _far IntHandler( void );
void
( _interrupt _far * OriginalVector )();
/*--- global variables ---*/
int
AiData[10][16];
int
IoAddress;
unsigned int
ReqData;
unsigned int
IntCount = 0;
unsigned char
IntVector[16] = { 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0
x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77 };
unsigned char
PicMask[16] = { 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xf
e,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f };
unsigned char
ErrorFlag = 0;
unsigned char
IrqLevel;
/*----------------------------------------------------------------------------get PCI bus information
arguments: Board ID
return: information getting flag
-----------------------------------------------------------------------------*/
int
GetPciInfomation( int BoardId )
{
union REGS
IRegs;
union REGS
ORegs;
struct SREGS SRegs;
int
i;
int
FoundTargetFlag = 0;
int
NumberOfFoundTargets = 0;
char
7-6
PciBusNumber[16];
第7章 付録
char
PciDeviceFunctionNumber[16];
/*--- get PCI BIOS present status ---*/
IRegs.h.ah = 0xb1;
IRegs.h.al = 0x01;
int86x( 0x1a, & IRegs, & ORegs, & SRegs );
if ( !ORegs.h.ah && ( ORegs.x.dx == 0x4350 ) ) {
/*--- search PCI device ---*/
for ( i = 0; i < 16; i++ ) {
IRegs.h.ah = 0xb1;
IRegs.h.al = 0x02;
IRegs.x.cx = Ad1216uDeviceID_;
IRegs.x.dx = 0x1221;
IRegs.x.si = i;
int86x( 0x1a, & IRegs, & ORegs, & SRegs );
if ( ORegs.h.ah )
break;
PciBusNumber[i] = ORegs.h.bh;
PciDeviceFunctionNumber[i] = ORegs.h.bl;
NumberOfFoundTargets++;
}
if ( NumberOfFoundTargets ) {
for ( i = 0; i < NumberOfFoundTargets; i++ ) {
/*--- get Board ID ---*/
IRegs.h.ah = 0xb1;
IRegs.h.al = 0x09;
IRegs.h.bh = PciBusNumber[i];
IRegs.h.bl = PciDeviceFunctionNumber[i];
IRegs.x.di = 0x08;
int86x( 0x1a, & IRegs, & ORegs, & SRegs );
if ( BoardId == ORegs.h.cl & 0xf ) {
/*--- get I/O address ---*/
IRegs.h.ah = 0xb1;
IRegs.h.al = 0x09;
IRegs.h.bh = PciBusNumber[i];
IRegs.h.bl = PciDeviceFunctionNumber[i];
IRegs.x.di = 0x10;
int86x( 0x1a, & IRegs, & ORegs, & SRegs );
IoAddress = ORegs.x.cx & 0xfffe;
/*--- get Interrupt request level ---*/
IRegs.h.ah = 0xb1;
IRegs.h.al = 0x09;
IRegs.h.bh = PciBusNumber[i];
IRegs.h.bl = PciDeviceFunctionNumber[i];
IRegs.x.di = 0x3c;
int86x( 0x1a, & IRegs, & ORegs, & SRegs );
if ( ORegs.h.ch ) {
IrqLevel = ORegs.h.cl;
FoundTargetFlag = 1;
break;
}
}
}
}
}
return FoundTargetFlag;
}
7-7
第7章 付録
/*----------------------------------------------------------------------------main routine
-----------------------------------------------------------------------------*/
void
main( void )
{
int
OriginalMsterIMRData;
int
OriginalSlaveIMRData;
unsigned int
Status;
unsigned char Gain[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
unsigned char Channel[] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };
unsigned char i, j;
/*--- display title ---*/
printf( "<< analog input sample program >>¥n¥n" );
/*--- get PCI information ---*/
if ( !GetPciInfomation( BoardIdSetting_ ) )
printf( "Cannot find the specified board in this PC.¥n" );
else {
/*--- initialize ---*/
InitBoard( IoAddress );
/*--- set analog input condition ---*/
SetAIFunction( IoAddress, 0x0080 );
for ( i = 0; i < 16; i++ ) {
SetAIGain( IoAddress, i, Gain[i] );
SetAIChannel( IoAddress, i, Channel[i] );
}
SetAIScanClk( IoAddress, 10000UL );
SetAISmpClk( IoAddress, 100000000e0 );
SetAISmpNum( IoAddress, 0UL, 10UL, 0UL );
/*--- set interrupt conditions ---*/
OriginalVector = _ dos_getvect( IntVector[IrqLevel] );
_disable();
_dos_setvect( IntVector[IrqLevel], IntHandler );
if ( IrqLevel > 7 ) {
outp( 0x0021, ( OriginalMsterIMRData = inp( 0x0021 ) ) & 0xfb );
outp( 0x00a1, ( OriginalSlaveIMRData = inp( 0x00a1 ) ) & PicMask[IrqLeve
l] );
} else
outp( 0x0021, ( OriginalMsterIMRData = inp( 0x0021 ) ) & PicMask[IrqLeve
l] );
_enable();
SetINTLevel( IoAddress, 5 );
SetINTMask( IoAddress, 0xfb7f );
/*--- start analog input ---*/
StartAI( IoAddress, 15 );
do {
GetStatus( IoAddress, &Status );
} while ( Status & 3 );
/*--- restore interrupt conditions ---*/
SetINTMask( IoAddress, 0xffff );
SetINTLevel( IoAddress, 0xff );
_disable();
if ( IrqLevel > 7 ) {
outp( 0x0021, OriginalMsterIMRData );
outp( 0x00a1, OriginalSlaveIMRData );
} else
outp( 0x0021, OriginalMsterIMRData );
_dos_setvect( IntVector[IrqLevel], OriginalVector );
_enable();
/*--- display data ---*/
if ( ErrorFlag ) {
printf( "sampling error !!¥n" );
} else {
7-8
第7章 付録
for ( i = 0; i < 16; i++ ) {
printf( "%2dch :", i );
for ( j = 0; j < 10; j++ )
printf( " %04xh ", AiData[j][i] );
printf( "¥n" );
}
}
}
}
/*----------------------------------------------------------------------------interrupt handler
-----------------------------------------------------------------------------*/
void
_interrupt _far IntHandler( void )
{
_enable();
/*--- check interrupt factor ---*/
GetINTReqReg( IoAddress, & ReqData );
if ( ReqData & 0x0480 ) {
if ( ReqData & 0x0080 ) {
/*--- case of sampling clock error ---*/
ErrorFlag = 1;
RstINTReqReg( IoAddress, 0x0080 );
} else {
/*--- case of end of channel scanning ---*/
GetAIArray( IoAddress, AiData[IntCount], 16 );
IntCount++;
RstINTReqReg( IoAddress, 0x0400 );
}
/*--- EOI process ---*/
_disable();
if ( IrqLevel > 7 ) {
outp( 0x00a0, 0x20 );
outp( 0x00a0, 0x0b );
if ( !inp( 0x00a0 ) )
outp( 0x0020, 0x20 );
} else
outp( 0x0020, 0x20 );
} else
/*--- chain to original vector ---*/
_chain_intr( OriginalVector );
}
7-9
第7章 付録
7-2 ユーティリティサンプルプログラム
SUPPORT-PAC(PC)306では、各機能を利用するサンプルプログラムの他に、プログラム開発時に便利なユーティリ
ティサンプルプログラムを添付しています。
ユーティリティサンプルプログラムでサポートしている処理は、表示処理(数値、波形)/ファイル入出力処理/数
値変換処理です。
作成言語は、C言語(Microsoft C/C++, Microsoft Visual C++)、QuickBASIC(Microsoft QuickBASIC)、
Turbo PASCAL(Borland Turbo PASCAL)の3タイプです。
各プログラムの仕様は、以下のとおりです。
ファイル名
ディレクトリ名
D2V.C
¥ MSC ¥ SAMPLE2 ¥ 数値を、レンジに応じた電圧値に変換します。
内容
D2V.BAS
¥ QB ¥ SAMPLE2 ¥
D2V.PAS
¥ TP ¥ SAMPLE2 ¥
V2D.C
¥ MSC ¥ SAMPLE2 ¥ 電圧値を、レンジに応じた数値に変換します。
V2D.BAS
¥ QB ¥ SAMPLE2 ¥
V2D.PAS
¥ TP ¥ SAMPLE2 ¥
X2Y.C
¥ MSC ¥ SAMPLE2 ¥ 3次関数を計算します。
X2Y.BAS
¥ QB ¥ SAMPLE2 ¥
X2Y.PAS
¥ TP ¥ SAMPLE2 ¥
MMA.C
¥ MSC ¥ SAMPLE2 ¥ 数列の最大/最小/平均値を計算します。
MMA.BAS
¥ QB ¥ SAMPLE2 ¥
MMA.PAS
¥ TP ¥ SAMPLE2 ¥
WAVE.C
¥ MSC ¥ SAMPLE2 ¥ 画面にサイン波形を表示します。
WAVE.BAS
¥ QB ¥ SAMPLE2 ¥
WAVE.PAS
¥ TP ¥ SAMPLE2 ¥
D2F.C
¥ MSC ¥ SAMPLE2 ¥ データをファイルに書き込みます。
D2F.BAS
¥ QB ¥ SAMPLE2 ¥
D2F.PAS
¥ TP ¥ SAMPLE2 ¥
F2D.C
¥ MSC ¥ SAMPLE2 ¥ ファイルからデータを読み出します。
F2D.BAS
¥ QB ¥ SAMPLE2 ¥
F2D.PAS
¥ TP ¥ SAMPLE2 ¥
注意
・WAVEを実行するためには、VGA相当のシステムを使用してください。
・WAVE.Cをコンパイル/リンクするときは、Microsoft C/C++またはMicrosoft Visual C++に標準添付されているグ
ラフィックス制御用のライブラリ ‘GRAPHICS.LIB’ をリンクしてください。
・WAVE.BASは、QuickBASIC for AX Series を使用する場合、SCREENステートメントのモードの変更が必要です。
7-10
第7章 付録
7-3 PCIボードのリソース取得について
PCIボードのリソースを取得するには「PCIリソース取得ライブラリ for MS-DOS」を使用します。「PCIリソース取得
ライブラリ for MS-DOS」はコンテックのホームページからダウンロードすることができます。
ライブラリの使い方に関しては、「PCIリソース取得ライブラリ for MS-DOS」にある説明ファイルを参照してくださ
い。
リソースの取得にはGetPCIResource関数を使用します。以下はGetPCIResource関数のDeviceID引数に指定するパラメ
ータの一覧です。
ボード名
DeviceID (16進数)
AD12-16(PCI)E
0x8113
AD12-16U(PCI)E
0x8103
AD16-16(PCI)E
0x8123
ADI12-16(PCI)
0x8133
AD12-16U(PCI)EH
0x81D3
AD16-16U(PCI)EH
0x81C3
この関数で取得したI/Oアドレスを、SUPPORT-PACの各関数の引数「address」へ指定してください。
7-11
第7章 付録
7-12
SUPPORT-PAC(PC)306
説明書
1994年08月09日
2002年04月18日
発行所
制定
改訂
株式会社コンテック
本製品および本書は著作権法によって保護されていますので無断で複写、複製、転載、改変す
ることは禁じられています。
分類番号
A-41-347
コード番号 LZU9121
ホームページ
最新情報、各種技術情報が満載です。どうぞご利用ください。
http://www.contec.co.jp/
FAX情報サービス
いつでもすぐに製品概要をお届けいたします。
FAXBOX
03-5628-9570
《営業的なお問い合わせ》
〒136-0071 東京都江東区亀戸2-25-14 立花アネックスビル
TEL
03-5628-0211
●製品の技術的なお問い合わせは、下記インフォメーションへどうぞ●
総合インフォメーション
TEL : 03-5628-9286
FAX : 03-5628-9344
E-mail : [email protected]
A-46-388
Ver. 2001. 10. 17