Comments
Description
Transcript
C(98)/ISA製品からPCI/CompactPCI製品への移行
TUT-0006 www.interface.co.jp Ver.1.2 改訂履歴 改訂履歴 Ver 年 月 1.0 1.1 1.2 2003 年 2 月 2004 年 1 月 2005 年 3 月 改 訂 内 容 初版 CompactPCI の追加 技術資料一覧更新 本チュートリアルをご使用の際は、必ず各製品型式の最新のドキュメント(ユーザーズマニュア ル,オンラインヘルプ)をあわせて参照してください。また、最新のドライバソフトウェアをご使 用ください。ユーザーズマニュアル, ドライバソフトウェアは弊社 Web site からダウンロードで きます。(オンラインヘルプはドライバソフトウェアに含まれています) 商標/登録商標 Microsoft、MS-DOS、MS、Visual C++は、米国 Microsoft Corporation の登録商標です。 IBM PC DOS 2000 日本語版は、IBM 社、Borland C++ Suite は、ボーランド社の登録商標です。 その他、本書に掲載されている会社名、製品名は、それぞれ各社の商標または登録商標です。 保証の内容と制限 株式会社インタフェースは本書の情報の正確さに万全を期しています。万一、誤記または誤植などがあっ た場合、株式会社インタフェースは予告無く改訂する場合があります。本書または本書内の情報に起因す るいかなる損害に対しても株式会社インタフェースは責任を負いません。 本書の図や表は説明のためであり、ユーザ個別の応用事例により変化する場合があります。 著作権、知的所有権 株式会社インタフェースは本書に対する権利や知的所有権を保持しています。 本書はコンピュータ ソフトウェア(プログラム)、 図、 文章、 写真などを含んでいます。 複製の禁止 株式会社インタフェースの許可なく、本書の全て、または一部に関わらず、複製、改変などを行うことは できません。 責任の制限 株式会社インタフェースは、株式会社インタフェース または再販売者の予見の有無にかかわらず発生した いかなる特別損害、偶発的損害、間接的な損害、重大な損害について、責任を負いません。 © 2003, 2005 Interface Corporation. All rights reserved. 目次 「目次」 はじめに ....................................................................................................................................................................... 1 第1章 システム移行の戦略 ................................................................................................................................ 2 1.1 ハードウェア面から見た C(98)/ISA と PCI/CompactPCI の違い ........................................................ 2 1.2 ソフトウェア面から見た C(98)/ISA と PCI/CompactPCI の違い ........................................................ 3 1.3 システム移行のケース例 ........................................................................................................................ 4 第2章 2.1 2.2 2.3 2.4 2.5 ケース 1 既存のシステムは、弊社ライブラリを使って構築していた.............................................................. 4 ケース 2 既存のシステムは、拡張ボードを直接制御していた.......................................................................... 5 ケース 3 ユーザインタフェースをグラフィカルなものに取り替えたい.......................................................... 5 プログラミングの前に ............................................................................................................................ 6 PCI/CompactPCI 拡張ボードは、如何にしてリソースを設定するのか?......................................... 6 同一型式の拡張ボードの見分け方......................................................................................................... 9 使用する PCI/CompactPCI 拡張ボードの選択....................................................................................... 9 使用できる OS とソフトウェアの変化................................................................................................ 11 その他の Tips .......................................................................................................................................... 11 第3章 3.1 3.2 3.2.1 3.2.2 3.3 3.3.1 3.3.2 3.4 3.4.1 3.4.2 3.5 3.5.1 3.5.2 3.6 3.6.1 3.6.2 3.6.3 3.7 3.7.1 3.7.2 プラットフォームの違い ......................................................................................................................................... 11 弊社ライブラリを使用したシステムからの移行 ............................................................................... 13 移行の概要 .............................................................................................................................................. 13 デジタル入出力用ライブラリ(VND/VID/VED-2000)からの移行 ..................................................... 15 関数 比較一覧...................................................................................................................................................... 15 移行時の注意点.................................................................................................................................................... 15 DioSetup 関数 ............................................................................................................................................................. 16 DioEnableInterrupt 関数 ............................................................................................................................................. 17 DioDisableInterrupt 関数 ............................................................................................................................................ 18 アナログ入力用ライブラリ(GND/GID-31xx)からの移行 .................................................................. 18 コマンド 比較一覧.............................................................................................................................................. 19 移行時の注意点.................................................................................................................................................... 19 移行に使う GPD-3100 のライブラリの選択.......................................................................................................... 19 コマンドの差異.......................................................................................................................................................... 20 波形メモリ確保の仕組み ......................................................................................................................................... 20 組み込み方法の違い ................................................................................................................................................. 20 移植例.......................................................................................................................................................................... 21 アナログ出力用ライブラリ(GND/GID-33xx)からの移行 .................................................................. 22 コマンド 比較一覧.............................................................................................................................................. 22 移行時の注意点.................................................................................................................................................... 23 移行に使う GPD-3300 のライブラリの選択.......................................................................................................... 23 コマンドの差異.......................................................................................................................................................... 23 波形メモリ確保の仕組み ......................................................................................................................................... 23 組み込み方法の違い ................................................................................................................................................. 24 移植例.......................................................................................................................................................................... 24 アナログ入出力用ライブラリ(GND/GID-35xx)からの移行 .............................................................. 26 コマンド 比較一覧.............................................................................................................................................. 26 移行時の注意点.................................................................................................................................................... 27 移行に使う GPD-3500 のライブラリの選択.......................................................................................................... 27 コマンドの差異.......................................................................................................................................................... 27 波形メモリ確保の仕組み ......................................................................................................................................... 28 組み込み方法の違い ................................................................................................................................................. 28 移植例.......................................................................................................................................................................... 28 シリアル通信(調歩同期)用ライブラリからの移行 ............................................................................ 30 ハードウェアの選択............................................................................................................................................ 30 関数 比較一覧...................................................................................................................................................... 31 移行時の注意点.................................................................................................................................................... 33 オープン関数によるボード指定方法の違い(xxxOpenPort 関数)........................................................................ 33 オープン関数による指定方法の違い(VCD-4201/4205) ....................................................................................... 36 対応ポート数の増加による修正(xxxCheckData 関数) ......................................................................................... 37 タイマ機能を有効にした場合の挙動の変化(GPD-4101 のみ)............................................................................ 38 ボードの設定変更関数に渡す初期化情報文字列の修正(xxxConfigPort) .......................................................... 38 シリアル通信(LAP-B)用ライブラリからの移行................................................................................. 42 関数 比較一覧...................................................................................................................................................... 42 移行時の注意点.................................................................................................................................................... 43 ボード情報の定義関数(LapbnInit, LapbnvdInit)..................................................................................................... 43 © 2003, 2005 Interface Corporation. All rights reserved. 目次 受信クロックの設定(LapbnOpenPort, LapbnvdOpenPort) ..................................................................................... 44 第4章 拡張ボードを直接制御したシステムからの移行 ............................................................................... 45 4.1 移行の概要 .............................................................................................................................................. 45 4.2 PCI/CompactPCI 拡張ボードに割り当てられたリソースを取得する .............................................. 46 4.3 PCI/CompactPCI 拡張ボードに搭載されたメモリへのアクセスをする .......................................... 47 4.4 共有割り込み処理をする ...................................................................................................................... 49 技術資料紹介.............................................................................................................................................................. 55 参考文献 ..................................................................................................................................................................... 56 [図目次] 図 図 図 図 図 図 図 2-1 アドレッシング方法の違い........................................................................................................................................... 6 2-2 拡張ボードの見分け方 ................................................................................................................................................... 9 2-3 CompactPCI と PCI ......................................................................................................................................................... 12 4-1 BPD-0806 により、上位のメモリにアクセスできる ............................................................................................... 48 4-2 C(98)/ISA 拡張ボードは割り込みは 1 対 1................................................................................................................. 50 4-3 PCI/CompactPCI 拡張ボードは割り込みは 1 対 n...................................................................................................... 50 4-4 PCI/CompactPCI 拡張ボードは割り込みステータスでボードを特定 .................................................................... 51 [表目次] 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 1-1 C(98)/ISA 拡張ボード用のライブラリ.......................................................................................................................... 4 1-2 サービスソフトウェア一覧........................................................................................................................................... 5 2-1 ハードウェア仕様の互換性......................................................................................................................................... 10 3-1 移行に適切な PCI/CompactPCI 拡張ボード用ライブラリ ...................................................................................... 13 3-2 デジタル入出力用ライブラリの新旧比較................................................................................................................. 15 3-3 アナログ入力用ライブラリの新旧比較..................................................................................................................... 19 3-4 アナログ入力用ドライバのオプションパラメータ比較 ........................................................................................ 21 3-5 アナログ出力用ライブラリの新旧比較..................................................................................................................... 22 3-6 アナログ出力用ドライバのオプションパラメータ比較 ........................................................................................ 24 3-7 アナログ入出力用ライブラリの新旧比較................................................................................................................. 26 3-8 アナログ入出力用ドライバのオプションパラメータ比較 .................................................................................... 28 3-9 シリアル通信用ライブラリの関数名一覧................................................................................................................. 31 3-10 GPD-4101 と GPD-4141 の関数名比較 ...................................................................................................................... 33 3-11 LAP-B 用ライブラリの新旧比較 ............................................................................................................................... 42 4-1 サービスソフトウェアの一覧..................................................................................................................................... 45 [List 目次] List 3-1 サンプリング入力例 ................................................................................................................................................... 21 List 3-2 サンプリング出力例 ................................................................................................................................................... 24 List 3-3 サンプリング出力例 ................................................................................................................................................... 29 List 4-1 SMP6103.C .................................................................................................................................................................... 51 © 2003, 2005 Interface Corporation. All rights reserved. はじめに はじめに 平素は格別のご高配を賜り、厚くお礼申し上げます。 本冊子は、PC DOS あるいは MS-DOS(以降 DOS)上で、弊社 C(98)/ISA 拡張ボードをご利用いた だいている方を対象に、C(98)/ISA 拡張ボードから PCI/CompactPCI 拡張ボードへの移行方法(ハ ードウェア面での違い、ソフトウェア面で移行の際に気を付けなければならない事)を記載して おります。 どうやって移行すれば 良い? どんな違いがあるのか? C Interface PCI BUS BUS 移行したい Interface ISA CompactPCI BUS BUS 何を修正すれば 良い? 本冊子が、お客様のシステム移行の一助になれば幸いです。 © 2003, 2005 Interface Corporation. All rights reserved. 1 システム移行の戦略 第1章 システム移行の戦略 本冊子を手にされているお客様は、C(98)/ISA 拡張ボードを使ったシステムを構築された事が あ ると思います。そして、システムのリプレースないしはバージョンアップ、または新規システム を作る事になり、PCI/CompactPCI 拡張ボードを使用する事を検討・決定されたのだと思います。 システム移行の前に、 まず対象を良く知って頂くために、C(98)/ISA 拡張ボードと PCI/CompactPCI 拡張ボードとの違いについて、幾つか紹介します。 1.1 ハードウェア面から見た C(98)/ISA と PCI/CompactPCI の違い ハードウェア面から見た際の、C(98)/ISA 拡張ボードと PCI/CompactPCI 拡張ボードとの違いにつ いて、以下に列挙します。 違い PCI/CompactPCI バスは、 C(98)/ISA バスに比べ、デー タ転送の帯域幅が広い 説明 バスの性能指標の一つとして、バスが一度に送れるデータ量 転 送レートがあります。 C(98)/ISA バスの最大転送レートは、約 8∼10Mbyte/s ですが、 PCI/CompactPCI バスの最大転送レートは、約 132Mbyte/s です。 従って、C(98)/ISA バスに比べて PCI/CompactPCI バスでは、高速 なデータ転送を必要とするボードのデータ転送量の上限が高く、 多数の拡張ボードを使用した際、バスに対する負荷が軽いです。 PCI/CompactPCI 拡張ボード C(98)/ISA 拡張ボードでは、ボード 1 枚に対して 1 つの割り込み は、1 つの割り込みに複数の 番号(IRQ)しか割り当てられませんでした。 ボードを割り当てられる この為、特に複数のボードを使用する際、使用可能な割り込み番 号を探す為に、BIOS の設定やボードの設定を試行錯誤しながら 変更したり、アプリケーション側で対処しなければなりませんで した。 しかし、PCI/CompactPCI 拡張ボードは、1 つの割り込みに複数の ボードを割り当てる事ができます。この為、設計の自由度が高ま っています。 PCI/CompactPCI 拡張ボード C(98)/ISA 拡張ボードでは、I/O ポートアドレスやメモリアドレス、 は、リソース(資源)の割り当 割り込み番号を設定する為のロータリスイッチやジャンパスイ てを、自動で行う ッチなどがボード上にあり、コンピュータ上の空いているリソー スを調べて、一つ一つ設定する必要がありました。 この為、どこにボードのリソースを割り当てるか決定する為に、 デバッガ等のツールを使って空いているリソースを調べる必要 がありました。 しかし、 PCI/CompactPCI 拡張ボードは、これらの設定は Plug&Play ソフトウェア(BIOS もしくは OS)が自動的に調整するので、人手 で決める必要がありません。 ソフトウェアは、BIOS もしくは OS に対し、ボードに割り当てら れた I/O ポートアドレスを問い合わせ、そのポートにアクセスす れば良いのです。 © 2003, 2005 Interface Corporation. All rights reserved. 2 システム移行の戦略 1.2 ソフトウェア面から見た C(98)/ISA と PCI/CompactPCI の違い ソフトウェア面から見た時の違いは、一般に思われている程 大きくはありません。 実際にプログラムを組む際 考慮しなければならない点は、リソースの設定を Plug&Play ソフト ウェアが自動的に決定する事と、割り込みが共有される、の 2 点ぐらいです。 拡張ボードの制御は、C(98)/ISA 拡張ボードと同様に、I/O ポートないしメモリに割り当てられ たリソースに対して行います。 リソースの設定を Plug&Play ソフトウェアが自動設定する事による違いは、拡張ボードにアクセ スする前に、Plug&Play ソフトウェアが割り当てた設定値を 前もって読み出す必要があるとい う事です。 例えば、280h 番地に割り当てた、ISA 拡張ボードのオフセットアドレス 2 の I/O ポートに 12h を書き込みたい場合、以下のようなコードを記述します。 unsigned short uBaseAdrs = 0x280; outp(uBaseAdrs + 2, 0x12); PCI/CompactPCI 拡張ボードの場合は、Plug&Play ソフトウェアが番地を割り当てますので、その PCI/CompactPCI 拡張ボードに割り当てられた番地を取得し、所望のオフセットにデータを書き 込みます。 unsigned short uBaseAdrs; /* ↓コンピュータが割り当てた I/O ポートアドレスを取得する関数を呼び出す */ uBaseAdrs = GetBaseAdrs(); outp(uBaseAdrs + 2, 0x12); 割り込みが共有される事による違いは、割り込みの共有処理が必要になる事です。 IRQn の割り込み処理ルーチンが呼び出された時、C(98)/ISA 拡張ボードの場合は、割り込み番号 1 つに対して拡張ボードは 1 つなので、割り込みを発生させたのは この拡張ボードだと判断す る事ができます。 しかし、PCI/CompactPCI 拡張ボードの場合、割り込み番号 1 つに対して複数の拡張ボードを設 定できるので、このような判断方法は使えません。 実際には 拡張ボードの割り込みステータスをチェックし、その拡張ボードが割り込みを呼び出 した事を確認した上で、実処理を行います。 © 2003, 2005 Interface Corporation. All rights reserved. 3 システム移行の戦略 1.3 システム移行のケース例 既に C(98)/ISA 拡張ボードを使ったシステムがあり、これを PCI/CompactPCI 拡張ボードのもの に置き換える場合の、考えられる移行方法の例を幾つか示します。 ケース 1 既存のシステムは、弊社ライブラリを使って構築していた システム移行に際して 既存システムで作ったソフトウェア資産をできる限り多く流用したい場 合、既存システムと新システムの動作環境を合わせるのが 最も修正量が少なく済みます。 例えば、既存システムが DOS 上で動くよう構築されているならば、新システムも DOS 上で動く ようにした方が、修正の手間は少なく済みます。 既存システムが下表の弊社ライブラリを使って構築されていたとします。 表 1-1 C(98)/ISA 拡張ボード用のライブラリ 分類 VND シリーズ VID シリーズ VCD シリーズ VED シリーズ 説明 PC/FC-9801,9821 シリーズコンピュータを使って、C(98)拡張ボードを制御 するためのライブラリです。 PC/AT 互換機コンピュータを使って、ISA 拡張ボードを制御するためのラ イブラリです。 PC/FC-9801,9821 シリーズコンピュータを使って、C(98)拡張ボードを制御 するためのライブラリと、PC/AT 互換機コンピュータを使って、ISA 拡張 ボードを制御するためのライブラリを、同梱したパッケージです。 PC/AT 互換機コンピュータに当社 EBS-1311※1 を接続して、C(98)拡張ボー ドを制御するためのライブラリです。 ※1:ISA-C(98)バスインタフェースセット。PC/AT 互換機コンピュータか ら、C(98)拡張ボードを利用可能にする拡張バスブリッジセット。 弊社では、PCI/CompactPCI 拡張ボードの DOS 用ライブラリを用意しており、API 体系も上表の ライブラリの API と高い互換性を提供しております。 既存システムを弊社ライブラリを使って構築しているならば、移行の手間は かなり軽いものと なります。(一部除く) このケースに当てはまるお客様は、第 3 章をご覧ください。 © 2003, 2005 Interface Corporation. All rights reserved. 4 システム移行の戦略 ケース 2 既存のシステムは、拡張ボードを直接制御していた 弊社ライブラリを使用せず、直接 I/O ポートやメモリにアクセスするアプリケーションを記述し ていた場合、「1.2 ソフトウェア面から見た C(98)/ISA と PCI/CompactPCI の違い」で示した注意 点に気を付ける必要があります。 これらの作業を支援する為に、弊社では「BPD-0805 DOS 用リソース取得ライブラリ」と 「BPD-0806 DOS 用 4G メモリアクセスツール」,「BPD-0811 PCI DOS 用割り込み登録ライブ ラリ」を用意しております。 表 1-2 サービスソフトウェア一覧 型式 BPD-0805 BPD-0806 BPD-0811 概要 DOS から PCI/CompactPCI 拡張ボードにアクセスする為に、ベンダ ID,デバイ ス ID ないしは、ベンダ ID,デバイス ID,サブベンダ ID,サブシステム ID か ら、PCI/CompactPCI 拡張ボードに割り当てられた I/O ポートアドレス,メモリ アドレス,割り込み番号を取得します。 DOS の REAL モードでは、CPU のセグメントリミットが 64KB に制限される ため、32 ビットレジスタ(EBX, ESI, EDI)による 1MB を超えるメモリエリアへ のアクセスは、例外が発生します。 FBIMEM4G.COM の実行により、REAL モードのセグメントリミット (DS,ES,FS,GS)は 64KB から 4GB に拡張され、32 ビットレジスタ(EBX, ESI, EDI) による 1MB を超えるメモリエリアへのアクセスが有効となります。 PC/AT 互換機および PC/FC-9801, 9821 シリーズの MS-DOS, PC DOS 上のアプ リケーションから、弊社 PCI/CompactPCI 拡張ボードにて割込みを使用するた めの割込み処理関数の登録、削除を行うためのソフトウェアです。 これらのサービスソフトウェアを使用する事で、お客様は直接制御部分の移行に集中でき、移行 がしやすくなります。 このケースに当てはまるお客様は、第 4 章をご覧ください。 ケース 3 ユーザインタフェースをグラフィカルなものに取り替えたい DOS 上で動作するよう構築したシステムがあり、ユーザインタフェース部分を、Windows のような グラフィカルなものに切り替えたい場合、今まで作り上げたソフトウェアを破棄し、全面的に Windows に移行すべきか?と言うと、必ずしもそうではありません。 例えば、2 台のコンピュータを用意し、ユーザインタフェースを使わない実処理を一方のコンピュー タで行い、もう一方でユーザインタフェースの処理を行わせるように、処理を分離するのも一つの手 段です。弊社では、「TUT-0017 メモリンクを使用した負荷分散システム チュートリアル」にて、こ の場合の構築方法について、サンプルプログラムと一緒に用意しております。 このチュートリアルは、弊社 Web site より PDF ファイルをダウンロードできます。 © 2003, 2005 Interface Corporation. All rights reserved. 5 プログラミングの前に 第2章 プログラミングの前に 先の章では、C(98)/ISA 拡張ボードと PCI/CompactPCI 拡張ボードの違いについて触れました。こ こでは実際にプログラミングを行う際に、知っておきたい内容について列挙します。 2.1 PCI/CompactPCI 拡張ボードは、如何にしてリソースを設定す るのか? PCI/CompactPCI 拡張ボードは、ボードのリソース割り当てをコンピュータが行います。 この機能は、PCI コンフィギュレーションレジスタと呼ばれるリソース設定用の特殊なレジスタ によって実現しています。 通常、拡張ボードは I/O 空間ないしはメモリ空間に配置され、ソフトウェアは これらの領域に アクセスする事で、拡張ボードを制御します。 PCI コンフィギュレーションレジスタは、PCI コンフィギュレーションレジスタ空間と呼ばれる 空間に配置され、その領域にアクセスする事で、拡張ボードの I/O ポートアドレスやメモリアド レス,割り込み番号などを、設定します。 <C(98)/ISA 拡張ボード> 0280h <PCI/CompactPCI 拡張ボード> I/O 空間 1200h 拡張ボード I/O 空間 PCI 拡張ボード CompactPCI I/O 0280h メモリ D0000h E00000h D0000h メモリ空間 メモリ空間 PCI コンフィギュレーション レジスタ空間 I/O 1200h メモリ E00000h 図 2-1 アドレッシング方法の違い I/O 空間やメモリ空間は、280h 番地や D0000h 番地といった 1 つのパラメータでアクセスします が、PCI コンフィギュレーションレジスタ空間は、バス番号,デバイス番号,ファンクション番 号,レジスタ番号の 4 つのパラメータを使ってアクセスします。 (各パラメータの詳細については、規格書を参照してください。) 1 つの拡張ボードには、最低 1 ファンクション分の PCI コンフィギュレーションレジスタがあり ます。1 ファンクションは、256 バイトのレジスタがあり、その内、64 バイトまでが規格書で用 途が決められています。 © 2003, 2005 Interface Corporation. All rights reserved. 6 プログラミングの前に 規格書で定義された 64 バイトの PCI コンフィギュレーションレジスタの内、最も重要なのはベ ンダ ID とデバイス ID です。弊社では更にサブシステム ID を加えて、PCI/CompactPCI 拡張ボー ドの区別に用いています。 レジスタ名 ベンダ ID デバイス ID サブシステム ID 役割 デバイスの製造者を表している 16bit の ID です。 弊社のベンダ ID は、1147h です。 デバイスを識別するための 16bit の ID です。 弊社では、一部を除いて、ボードの型式に付けられている 4 ケタの 10 進 数がデバイス ID として用いています。 PCI デバイスが搭載されているアドインボードを識別する目的、 あるいは、 製品の一意性を確保する目的で付与される 16bit の ID です。 弊社では、製品の一意性を確保する目的で使用しています。 デバイス ID とサブシステム ID をセットにして、PCI/CompactPCI 拡張ボ ードを特定します。 下表に、弊社 PCI/CompactPCI 拡張ボードの割り当て例を示します。 弊社 PCI/CompactPCI 拡張ボードのデバイス ID とサブシステム ボード型式 PCI-2128 CTP-2128 PCI-2130C PCI-2131 PCI-2131A CTP-2131 PCI-2135 デバイス ID 2128(0850h) 2128(0850h) 2130(0852h) 2131(0853h) 2131(0853h) 2131(0853h) 2135(0857h) サブシステム ID 1(0001h) 257(0101h) 1(0001h) 1(0001h) 17(0011h) 257(0101h) 1(0001h) ()内の値は 16 進数 それぞれのボードのデバイス ID、サブシステム ID は、I/O ポート公開資料 に記載されていますので、それらの資料を参照してください。 これらのレジスタ値は、型式毎に ほぼ一意であり、システム内に実装された拡張ボードを区別 する為に使用されます。 例えば、PCI コンフィギュレーションレジスタを走査中、次の値が検出されたとします。 ベンダ ID デバイス ID サブシステム ID :1147h :2130(0852h) :1(0001h) 弊社では、この値を PCI-2130C に割り当てている為、アプリケーションはシステム内に、PCI2130C が実装されていると判断する事ができます。 © 2003, 2005 Interface Corporation. All rights reserved. 7 プログラミングの前に ★ベンダ ID,デバイス ID,サブシステム ID を使った、存在の判定方法 この機能は、システムが拡張ボードを認識できるかどうかの判定方法の一つに使えます。 C(98)/ISA 拡張ボードの時、システムに拡張ボードが挿さっているか判断するには、割り当てた I/O ポートアドレスなどの Read/Write 可能なレジスタに対してアクセスし、Write した値が Read できるか?などの手段により判定していました。 しかし、この手法では、同じ位置に別のボードが実装された時を考えると、確実な手法とは言え ません。 対して PCI/CompactPCI 拡張ボードでは、システム内に目的のベンダ ID,デバイス ID,サブシ ステム ID を持つ拡張ボードがあるかチェックする事で、確実に存在判定を行う事ができま す。 拡張ボードを特定した後、プログラマにとって重要なのは、拡張ボードに割り当てられた I/O ポ ートアドレス,メモリアドレス,割り込み番号を知る事です。 これらの値は、Plug&Play ソフトウェアが、拡張ボードが必要としているリソースの大きさを調 べ、システム内で空いているリソース状態から適当な位置に割り振り、各レジスタに書き込んで いきます。 各種設定は Plug&Play ソフトウェアが自動的に行う為、プログラマは自身で割り振る必要はあり ません。 ★リソースが割り当てられない拡張ボードの確認 拡張ボードの不良ないしは、割り当てる事の可能なリソースが不足していたなどの理由で、 Plug&Play ソフトウェアが拡張ボードのリソースをシステム上に配置できない事があります。 割り当てできなかった場合、ほとんどの Plug&Play ソフトウェアは、特定のレジスタの値を 0 に 設定します。 これを利用する事で、ソフトウェアから拡張ボードがシステムに正常にリソース配置されたか確 認する事が可能です。 ★何故、DOS 環境で PCI/CompactPCI 拡張ボードを制御できるのか? 何故、PCI/CompactPCI が出現する以前の DOS 環境で PCI/CompactPCI 拡張ボードが制御できる のか、不思議に思われるかも知れません。 答えは、BIOS にあります。 PCI/CompactPCI 拡張スロットを持つコンピュータの BIOS には、PCI/CompactPCI 拡張ボードの リソース割り振りを行う機能と、PCI/CompactPCI 拡張ボードにアクセスする為の INT ファンク ションが用意されています。 PCI/CompactPCI 拡張ボードの初期化は、コンピュータ電源 ON 時に BIOS が行い、PCI/CompactPCI で新設された PCI コンフィギュレーションレジスタへのアクセスは、PCI BIOS と呼ばれるアク セス用の INT ファンクションを経由して行います。 このように、PCI/CompactPCI のサポートを BIOS レベルで行っている為、PCI/CompactPCI に特 に対応していない OS(この場合 DOS)からでも、PCI/CompactPCI 拡張ボードを制御する事ができ るのです。 © 2003, 2005 Interface Corporation. All rights reserved. 8 プログラミングの前に 2.2 同一型式の拡張ボードの見分け方 先ほどの説明で、PCI-2130C や PCI-3133 がシステム内に存在するかどうかのチェック方法を説 明しました。 では、PCI-2130C がシステムに 2 枚以上実装されている場合、制御すべき拡張ボードを認識する には、どうすれば良いのでしょうか? PCI-2130C PCI-2130C PCI-3133 PCI-2130C これはどうやって 区別するのか? これは区別できる 図 2-2 拡張ボードの見分け方 拡張ボードの見つかったデバイス番号で区別するのも一つの手です。 しかし、この方法では、拡張ボードの挿すスロットを変更した時、プログラムに教える必要があ り、ベストな方法とは言えません。 この問題を解決する為に、弊社では同一型式の拡張ボードを区別する為に拡張ボードの基板上に、 ボード識別用ロータリスイッチ(ボード ID)を搭載しております。 お客様は、1 枚毎にボード識別用ロータリスイッチの値を変更する事で、ソフトウェアから目的 の拡張ボードを認識させる事ができるようになっています。 2.3 使用する PCI/CompactPCI 拡張ボードの選択 C(98)/ISA 拡張ボードを使った既存システムから、PCI/CompactPCI 拡張ボードを使った新システ ムに移行する際、まず問題となるのは、システムに組み込む PCI/CompactPCI 拡張ボードの選択 です。 C(98)/ISA から PCI/CompactPCI へ移行する際、拡張ボードのハードウェア仕様が同一である事が望 ましいならば、同一の型式番号を持つ PCI/CompactPCI 拡張ボードを選択される事をお奨めします。 弊社では 一部を除き、同一の型式番号の製品は ハードウェア仕様の互換性を保っています。 © 2003, 2005 Interface Corporation. All rights reserved. 9 プログラミングの前に 以下に例を挙げます。 表 2-1 ハードウェア仕様の互換性 分類 型式 入力チャンネル数 シングルエンド入力 差動入力 入力形式 入力レンジ ユニポーラ バイポーラ 分解能 変換時間 チャンネル固定 チャンネル切り替え 絶縁方式 外部制御入力 デジタル入出力 電源仕様 ケーブル側コネクタ C(98)製品 AZI-3133 ISA 製品 IBX-3133 ←同左 PCI 製品 PCI-3133 ←同左 CompactPCI 製品 CTP-3133 ←同左 ←同左 ←同左 ←同左 ←同左 ←同左 ←同左 ←同左 ←同左 ←同左 ←同左 ←同左 ←同左 ←同左 ←同左 ←同左 ←同左 ←同左 ←同左 ←同左 ←同左 ←同左 +5V 0.7A PCR-E50FS (本多通信工業) 相当品 ←同左 ←同左 DC+3.3V 0.2A (起動時 0.5A), DC+5V 0.7A ←同左 16ch 8ch マルチプレクサ方式 0∼+5V、0∼+10V ±2.5V、±5V、±10V 12 ビット 10μsec 60μsec 非絶縁 AD サンプリング 制御入力 外部割込み入力 入力 2 点、出力 2 点 +5V 0.4A +12V 30mA -12V 10mA 57-30500-D76 (第一電子工業)相当品 三者を見比べた時、仕様的に異なるのは電源仕様とケーブル側コネクタ程度です。 このように、弊社の同一型式番号の製品は、高い互換性を保っています。 ★選択に際しての注意 PCI/CompactPCI 拡張ボード製品では、より多くの製品を取り揃えており、お客様のニーズによ っては別型式の製品を選択された方が より良い場合があります。 また、同一型式番号の製品は高い互換性を有しておりますが、バスの制約ならびに機構上の理由 により、一部仕様が異なるものもあります。この為、ボード選定の決定に際しては、弊社お客様 相談センタに一度お問い合わせ頂く事をおすすめします。 © 2003, 2005 Interface Corporation. All rights reserved. 10 プログラミングの前に 2.4 使用できる OS とソフトウェアの変化 本書では、MS-DOS あるいは PC DOS を実行環境として説明しています。 しかし、同じ DOS 環境でも、C(98)/ISA 拡張ボード用のライブラリ提供時と比べ、現在購入可能 な DOS 環境が若干変化しております。 例として、VND-2000 提供時の、動作環境 OS を示します。 PC/FC-9801 シリーズ: MS-DOS Ver5.0 以降 IBM PC/AT 互換機: IBM-DOS J5.X/V IBM PC DOS J6.X/V 以降 MS-DOS Ver5.0/V 以降 Windows98/98SE の DOS モード 残念ながら、これらのバージョンの DOS は、現在入手が困難な状況にあります。2003 年 2 月時 点で入手可能な DOS 環境としては、以下が挙げられます。 IBM PC/AT 互換機、PC98-NX シリーズ、弊社 CPU ボード: MS-DOS Ver6.X 以降 IBM PC DOS 2000 ※Microsoft 版 MS-DOS は、現在単体での新規販売はされていません。 なお、MS-DOS ならびに PC DOS の API 仕様(DOS ファンクション)は、基本的に上位互換性を 保っております。従って、特殊なアプリケーションを使わない限り(OS 非公開のファンクション や、あるバージョンのメモリ構造に依存したソフトウェアなど)、現在利用可能なバージョンの DOS 環境にシステムを移行する事ができます。 2.5 その他の Tips ここでは、幾つかの Tips を紹介します。 プラットフォームの違い C(98)/ISA から PCI/CompactPCI への移行時、プラットフォームを変更する事があります。 例えば、PC/FC-9801,9821 シリーズのコンピュータを、IBM PC/AT 互換機のコンピュータに変更す る等です。 Windows などの新しい OS では、ハードウェアの違いは OS 自身が差異を吸収しますが、DOS で は OS が一部サポートしないハードウェアの違いを、ユーザ(ここではお客様)が対処しなければ なりません。 © 2003, 2005 Interface Corporation. All rights reserved. 11 プログラミングの前に 基本的には、お客様の使用されるプログラムが、DOS の提供するファンクションコールのみを 使って作られているならば、修正や変更の必要はありません。 しかし、グラフィックや BIOS の INT ファンクションを呼び出すようなプログラムを記述してい た場合、代替する処理に取り替える必要があります。 なお、PCI の情報にアクセスする為の PCI BIOS は、両方とも同じ INT ファンクションで呼び出 せる為、両プラットフォーム共 同じ処理で記述できます。 コラム ■CompactPCI とは? CompactPCI は、PCI バスを工業製品に応用する事を目的として策定されたバス規格です。 2 つの拡張ボードを下図に示します。 <CompactPCI 拡張ボード> <PCI 拡張ボード> 図 2-3 CompactPCI と PCI CompactPCI は PCI に比べて、機械的・物理的・電気的に特性の優れたものを目指しています。 例えば、垂直カード方式によりボードの抜き差しが行いやすい、バスコネクタがピン形状でカー ド保持機構を持っている為 衝撃や振動に強い、などの特長を持ちます。 また、ソフトウェア面から見て、CompactPCI と PCI は ほぼ同一の為(HotSwap への対応が追加 されたぐらい)、移行しやすくなっています。 PCI から CompactPCI への移行は、多くの場合 拡張ボードの取り替えで済みます。 © 2003, 2005 Interface Corporation. All rights reserved. 12 弊社ライブラリを使用したシステムからの移行 第3章 弊社ライブラリを使用したシステムからの移行 本章では、「1.3 システム移行のケース例」の「ケース 1 既存のシステムは、弊社ライブラリを 使って構築していた」で示した、C(98)/ISA 拡張ボード用ライブラリを使用して構築している既 存システムを、PCI/CompactPCI 拡張ボード用ライブラリに変更する際の注意点などについて説 明します。 3.1 移行の概要 システム移行時に問題となると思われる項目は、以下の 3 点です。 1. 使用する拡張ボードの選択 2. 使用するライブラリの選択 3. プログラムの修正 「1.使用する拡張ボードの選択」については、 「2.3 使用する PCI/CompactPCI 拡張ボードの選択」 を参照してください。 次に「2.使用するライブラリの選択」については、以下に示す C(98)/ISA 拡張ボード用のライブラ リと、それに対応する PCI/CompactPCI 拡張ボード用のライブラリの一覧表を参照してください。 表 3-1 移行に適切な PCI/CompactPCI 拡張ボード用ライブラリ C(98)/ISA 拡張ボード用 PCI/CompactPCI 拡張ボード 互換性 ライブラリソフトウェア 用ライブラリソフトウェア VND-2000 / VID-2000 / GPD-2000 デジタル入出力 ◎ VED-2000 GND-3100 / GID-3100 GPD-3100 ○ アナログ入出力 GND-3300 / GID-3300 GPD-3300 ○ GND-3500 / GID-3500 GPD-3500 ○ VCD-4101 GPD-4101 ◎ シリアル通信 VCD-4105 GPD-4101 / GPD-4141 △ VND-4131 / VED-4131 GPD-4101 / GPD-4141 △ VCD-4137 GPD-4101 / GPD-4141 △ VCD-4141 GPD-4141 ◎ VCD-4201 GPD-4101 / 4141 △ VCD-4205 GPD-4101 / 4141 △ GPD-4101 / GPD-4141 VND-4111 / VED-4111 △ シリアル通信 / PPI / GPD-2746C × カウンタ GPD-6202 × GPD-4141 VCD-4112 △ シリアル通信 / GPD-8208 プリンタ × GPD-4141 VCD-4113 △ シリアル通信 / GP-IB GPD-4301 / GPD-4304 × カテゴリ © 2003, 2005 Interface Corporation. All rights reserved. 13 参照 ページ 15 18 22 26 30 弊社ライブラリを使用したシステムからの移行 カテゴリ シリアル通信 / PPI LAP-B HDLC GP-IB モーション C(98)/ISA 拡張ボード用 ライブラリソフトウェア VCD-4140 VCD-4115 VCD-4215 VCD-4116 VCD-4216 VCD-4301 VCD-4304 VND-4322 VND-7202 / VED-7202 VCD-7207 VCD-7208 互換性について PCI/CompactPCI 拡張ボード 互換性 用ライブラリソフトウェア GPD-4101 / GPD-4141 △ GPD-2746C × GPD-4115 ◎ GPD-4115 △ GPD-4116 × GPD-4116 × GPD-4301 × GPD-4304 × GPD-4301 / GPD-4304 × × × × 参照 ページ 30 42 - - ◎:ほぼ完全互換 ○:互換性あり △:同等の機能を持つ関数がある ×:互換性なし ★PCI/CompactPCI 拡張ボード用ライブラリの入手について PCI/CompactPCI 拡張ボード用ライブラリは、弊社 Web site より無償でダウンロードできます。 弊社 Web site:www.interface.co.jp 弊社の PCI/CompactPCI 拡張ボード用ライブラリは、C(98)/ISA 拡張ボード用ライブラリと、同等 もしくは高い互換性を持ったものが多く、C(98)/ISA バスから PCI/CompactPCI バスへの移行が容 易に実現可能です。 次項より、同等の機能を持ったライブラリ・互換性があるライブラリとの相違点等、移行方法の 解説を行います。 互換性の無いライブラリを使用するプログラムに関しては、新しいライブラリの仕様に合わせて プログラムを作成する必要があります。 GPD シリーズの関数説明等をご参照の上、作成していただきますようお願いいたします。 © 2003, 2005 Interface Corporation. All rights reserved. 14 弊社ライブラリを使用したシステムからの移行 3.2 デジタル入出力用ライブラリ(VND/VID/VED-2000)からの移行 弊社デジタル入出力ボードに対応するライブラリソフトウェアには以下のものがあります。 C(98)/ISA バス用 PCI/CompactPCI バス用 VND-2000 / VID-2000 / VED-2000 GPD-2000 ここでは、デジタル入出力ボード用の C(98)/ISA 拡張ボード用ライブラリから PCI/CompactPCI 拡張ボード用ライブラリに移植する際の注意点を列挙します。 3.2.1 関数 比較一覧 双方のライブラリの、関数の比較一覧を示します。 表 3-2 デジタル入出力用ライブラリの新旧比較 機 能 ボード初期化 DI 入力(接点) DO 出力(接点) DI 入力(ポート) DO 出力(ポート) 割り込みユーザ関数設定 割り込みユーザ関数解除 ディレイ設定 出力パルス設定 チャタリング防止設定 トリガ条件設定 トリガ待ち DI 入力カウント 接点状態比較 シーケンス制御設定 シーケンス制御開始 DO 出力クリア DO 出力リードバック 接点情報取得 DI 一定周期入力 設定情報の読み出し 設定情報の保存 ライブラリ使用終了 3.2.2 VND-2000 VID-2000 VED-2000 DioSetup DioReadPoint DioWritePoint DioReadPort DioWritePort DioEnableInterrupt DioDisableInterrupt DioSetDelay DioSetPulse DioSetChattering DioDefineTrigger DioWaitTrigger DioCount DioCompareData DioDefineSequence DioStartSequence DioClear DioGetData DioGetLineStatus DioSampleData DioLoad DioSave DioFinish GPD-2000 DioSetup ○ DioReadPoint ◎ DioWritePoint ◎ DioReadPort ◎ DioWritePort ◎ DioEnableInterrupt ○ DioDisableInterrupt ○ DioSetDelay ◎ DioSetPulse ◎ DioSetChattering ◎ DioDefineTrigger ◎ DioWaitTrigger ◎ DioCount ◎ DioCompareData ◎ DioDefineSequence ◎ DioStartSequence ◎ DioClear ◎ DioGetData ◎ DioGetLineStatus ◎ DioSampleData ◎ DioLoad ◎ DioSave ◎ DioFinish ◎ ◎:完全互換 ○:ほぼ互換 移行時の注意点 双方の関数名は、一部を除いて ほぼ同一です。 一部の関数は、ボードを特定する為の引数が追加されています。 © 2003, 2005 Interface Corporation. All rights reserved. 15 互換性 弊社ライブラリを使用したシステムからの移行 DioSetup 関数 関数宣言の比較> <VND/VID/VED-2000> <GPD-2000> int DioSetup( int DioSetup( char *Device, /* ボードの種別 */ char *Device, /* ボードの種別 */ unsigned int Ioadr, /* I/O ポートベースアドレス */ unsigned int DeviceID, /* デバイス ID */ int Num, /* ボードの接点数 */ unsigned int SubsystemID, /* サブシステム ID */ int StartNum, /* 接点開始番号 */ unsigned int BoardID, /* ボード ID */ int StartPort, /* 論理ポート開始番号 */ unsigned int uOffset, /* 設定開始オフセット */ unsigned int Type, /* 制御信号有無 */ unsigned int Num, /* ボードの接点数 */ int Ttype, /* タイマ種別 */ int StartNum, /* 接点開始番号 */ int Tadr, /* タイマの I/O ポートアドレス */ int StartPort /* 論理ポート開始番号 */ int Tirq /* タイマの割り込み番号 */ ); ); VND/VID/VED-2000 では、第 2 引数に拡張ボードの I/O ポートアドレスを指定する必要がありま すが、GPD-2000 では代わりに拡張ボードを特定するデバイス ID、サブシステム ID、ボード ID(第 2∼4 引数)を指定します。 VND/VID/VED-2000 にあったタイマ関連の設定は、PCI/CompactPCI 拡張ボード自身にインター バルタイマが内蔵された為、GPD-2000 では削除されました。 移植例> IBX-2131 から PCI-2131 へ移行する例です。 接点番号 1∼32、論理ポート番号 1∼4 に設定しています。 nRet = DioSetup( "DI", 0x0280, 32, 1, 1, 0x0282, 0, 0, 0 ); 使わない指定。 nRet = DioSetup( "DI", 2131, 0x0001, 0, 0, 32, 1, 1 ); I/O ポートアドレスを指定する代わりに デバイス ID 等を指定。 移植のポイントは、以下の通りです。 ・ 拡張ボードの I/O ポートアドレスを直接指定からデバイス ID 等を指定に変更 ・ 制御信号の指定は無い(常に有効) ・ タイマ種別の指定は無い(拡張ボード内部のインターバルタイマが使用される) © 2003, 2005 Interface Corporation. All rights reserved. 16 弊社ライブラリを使用したシステムからの移行 DioEnableInterrupt 関数 関数宣言の比較> <VND/VID/VED-2000> <GPD-2000> int DioEnableInterrupt( int DioEnableInterrupt( int Irq, /* 割り込み番号 */ char *Device, /* ボードの種別 */ void (*func)(), /* ユーザー処理関数へのポインタ */ unsigned int DeviceID, /* デバイス ID */ int ExInt /* 拡張割り込み用の割り込み番号 */ unsigned int SubSystemID, /* サブシステム ID */ ); unsigned int BoardID, /* ボード ID */ unsigned int Config, /* 割り込み要因の割り当て */ unsigned int Mask, /* 割り込み要因のマスク */ void(*Func)() /* ユーザ処理関数へのポインタ */ ); VND/VID/VED-2000 では割り込み番号(第 1 引数)を直接指定していましたが、GPD-2000 では直 接指定せず、代わりにデバイス ID、サブシステム ID、ボード ID(第 2∼4 引数)を使って拡張ボ ードを指定します。 (ライブラリ内部で、指定された拡張ボードの割り込み番号を取得、設定します) GPD-2000 の割り込み要因のマスク(第 6 引数)は、PCI/CompactPCI 拡張ボードで割り込み要因が ソフトウェア設定できるようになった為、追加された機能です。 移植例> IBX-2131 から PCI-2131 へ移行する例です。 IN1 の入力信号が High→Low になった時、割り込み処理関数 int_sub を呼び出すようにしていま す。 nRet = DioEnableInterrupt( 6, int_sub, -1) nRet = DioEnableInterrupt( "DI", 2131, 0x0001, 0, 0, 1 , int_sub ); 割り込み番号を指定する代わりに デバイス ID 等を指定。 基板上の割り込み設定を ここで指定。 移植のポイントは、以下の通りです。 ・ 割り込み番号を直接指定するのでなく、デバイス ID 等で指定する ・ 拡張ボードの基板上で設定していた内容は、ソフトウェアで設定する ・ 特に、割り込み要因の設定がソフトウェア設定になっている事に留意 © 2003, 2005 Interface Corporation. All rights reserved. 17 弊社ライブラリを使用したシステムからの移行 DioDisableInterrupt 関数 関数宣言の比較> <VND/VID/VED-2000> <GPD-2000> int DioDisableInterrupt( int int Irq, /* 割り込み番号 */ int ExInt /* 拡張割り込み用の割り込み番号 */ ); DioDisableInterrupt( char *Device, /* ボードの種別 */ unsigned int DeviceID, /* デバイス ID */ unsigned int SubSystemID, /* サブシステム ID */ unsigned int BoardID, /* ボード ID */ ); VND/VID/VED-2000 では割り込み番号(第 1 引数)を直接指定していましたが、GPD-2000 では直 接指定せず、代わりにデバイス ID、サブシステム ID、ボード ID(第 2∼4 引数)を使って拡張ボ ードを指定します。 移植例> IBX-2131 から PCI-2131 へ移行する例です。 nRet = DioDisableInterrupt( 6, -1) nRet = DioDisableInterrupt( "DI", 2131, 0x0001, 0 ); 割り込み番号を指定する代わりに デバイス ID 等を指定。 移植のポイントは、以下の通りです。 ・ 割り込み番号を直接指定するのでなく、デバイス ID 等で指定する 3.3 アナログ入力用ライブラリ(GND/GID-31xx)からの移行 弊社アナログ入力ボードに対応するライブラリソフトウェアには以下のものがあります。 C(98)/ISA バス用 PCI/CompactPCI バス用 GND-31xx / GID-31xx (xx は、ボードの型式番号が入ります) GPD-3100 ここでは、アナログ入力ボード用の C(98)/ISA 拡張ボード用ライブラリから PCI/CompactPCI 拡 張ボード用ライブラリに移植する際の注意点を列挙します。 © 2003, 2005 Interface Corporation. All rights reserved. 18 弊社ライブラリを使用したシステムからの移行 3.3.1 コマンド 比較一覧 双方のライブラリのコマンドの比較一覧を示します。 表 3-3 アナログ入力用ライブラリの新旧比較 機 能 波形メモリの取得・開放 サンプリングチャンネルの設定 サンプリング周波数の設定 サンプリング件数の設定 平均処理の種類と件数の設定 データの種類・計算式・係数の設定 入力仕様の設定 入力レンジの設定 ゲインの設定 割り込み番号の設定 トリガ条件の設定 サンプリングの開始 サンプリングの強制停止 波形メモリからのデータの取り出し 現在の AD 変換値一点の取得 外部トリガによるサンプリング入力 外部トリガでのサンプリングデータ取得 外部トリガでのサンプリングの終了 汎用入力の状態取得 汎用出力からの出力 ユーザー処理の登録 3.3.2 GND-31xx / GID-31xx GPD-3100 互換性 MEM MEM × CH CH ◎ SC SC ◎ SN SN ◎ AVG AVG ◎ CLC CLC ◎ SD SD ◎ RNG RNG ◎ GIN × INT × TRG TRG ◎ RAI RAI ○ BRK BRK ◎ MRD MRD ○ ADRD ADRD ◎ EXST EXST ◎ EXIN EXIN ◎ EXED EXED ◎ DI DI ◎ DO DO ◎ USR × ◎:完全互換 ○:ほぼ互換 ×:GPD-3100 では削除 移行時の注意点 移行に使う GPD-3100 のライブラリの選択 GPD-3100 には、以下の 2 種類のライブラリがあります。 1. GPD-3100 Windows 用ソフトウェア(GPC-3100)と高い互換性を持つ API を持つライブラリです。 このライブラリは、LIB ファイルが提供されており、お客様のソースコードとリンクする事 で利用します。 2. GPD-3100 WaveDriver DOS 用ソフトウェア(GND/GID-31xx) と高い互換性を持つコマンド群を持つライブラリで す。このライブラリは、GND/GID-31xx と同様、常駐型のドライバが提供されており、お客 様はドライバを常駐させた後、ドライバに対するファイルアクセス(open,read,write,close) を行う事で利用します。 GND/GID-31xx を利用して作成したソフトウェアから移行するには、2 の「GPD-3100 Wave Driver」ライブラリの使用をお奨めします。 © 2003, 2005 Interface Corporation. All rights reserved. 19 弊社ライブラリを使用したシステムからの移行 コマンドの差異 先に示したコマンドの内、修正を要するコマンドを列挙します。 コマンド MEM GIN INT RAI MRD USR 対応方法 波形メモリの確保はドライバ内部で自動的に行われる為、このコマンドは削除されま した。RAI コマンドおよび、MRD コマンドにてメモリハンドルを指定すべき所では、 代わりに「M0000」を指定します。 入力ゲインは、入力レンジとして まとめて表現可能な為、このコマンドは削除され ました。 (例:入力レンジ:0∼5V、入力ゲイン:×1、×2 とすると、入力レンジ:0∼5V、 0∼10V として表す事が可能) 割り込み番号の管理は、ドライバ内部で自動的に行われます。 不要となった為、このコマンドは削除されました。 メモリハンドルの指定では、常に「M0000」を指定します。 メモリハンドルの指定では、常に「M0000」を指定します。 この機能は、GPD-3100 ではサポートされていません。 波形メモリ確保の仕組み GND/GID-31xx では、MEM コマンドにて波形メモリを確保してからサンプリングを行う必要が ありました。 GPD-3100 は、波形メモリの確保はライブラリ内部で自動的に行われます。 ライブラリが確保する波形メモリのサイズは、以下の式により求めています。 波形メモリサイズ = 1 データのサイズ(分解能) × サンプリングのチャンネル数 × サンプリング件数 波形メモリは XMS を使って確保しています。 なお、Windows95/98 の DOS モードは、初期状態で XMS が使える状態になっています。XMS ドライバを別途導入する必要はありません。 組み込み方法の違い GND/GID-3100 のドライバ組み込み方法としては、以下の 2 種類がありました。 ・ CONFIG.SYS にドライバ名を記述し登録・常駐する ・ コマンドラインからドライバを動的に常駐させる GPD-3100 は、コマンドラインからのドライバ常駐のみサポートします。 また、組み込み時、使用可能なオプションパラメータに違いがあります。 © 2003, 2005 Interface Corporation. All rights reserved. 20 弊社ライブラリを使用したシステムからの移行 表 3-4 アナログ入力用ドライバのオプションパラメータ比較 機 能 使用するボードの枚数 サンプリングバッファの件数 外部トリガに使用する割込みレベル I/O ポートアドレス デバイス名の設定 コマンドラインから組み込んだ場合の解除 GND/GID-31xx GPD-3100 互換性 B B ◎ S × E × I × N N ◎ R R ◎ ◎:完全互換 ○:ほぼ互換 ×:GPD-3100 では削除 いずれも、波形メモリをドライバが確保する為 不要となったり、割り込みや I/O をドライバが 自動判定する為に削除されたものです。 移植例 以下は、チャンネル 1 から 10 件のサンプリング入力を行う場合の移植例を示しています。 List 3-1 サンプリング入力例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 <GND/GID-31xx> <GPD-3100> char szCmd[256]; /* ドライバコマンド */ char szStat[256]; /* ドライバステータス */ char szWaveMem[6]; /* 波形メモリのハンドル */ char szCmd[256]; /* ドライバコマンド */ char szStat[256]; /* ドライバステータス */ int main(void) { int nRet; int hAd; int nBoardID; int main(void) { int nRet; int hAd; int nBoardID; /* ボード番号0に対して操作する */ nBoardID = 0; /* ボード番号0に対して操作する */ nBoardID = 0; /* ドライバのオープン */ hAd = open("GND3104", O_RDWR │ O_BINARY); /* ドライバのオープン */ hAd = open("AD_IO", O_RDWR │ O_BINARY); /* 波形メモリの確保(EMSに対して1024件確保) */ sprintf(szCmd, “MEM=EMS,1024¥xd”); write(hAd, szCmd, strlen(szCmd)); /* 確保した波形メモリのハンドルを取得 */ read(hAd, szStat, 8); memcpy(szWaveMem, szStat + 2, 5); szWaveMem[5] = 0; /* サンプリングチャンネルの設定(1チャンネル) */ sprintf(szCmd, "CH=%d:1¥xd", nBoardID); write(hAd, szCmd, strlen(szCmd)); /* サンプリングチャンネルの設定(1チャンネル) */ sprintf(szCmd, "CH=%d:1¥xd", nBoardID); write(hAd, szCmd, strlen(szCmd)); /* サンプリング件数の設定(10件) */ sprintf(szCmd, "SN=%d:10¥xd", nBoardID); write(hAd, szCmd, strlen(szCmd)); /* サンプリング件数の設定(10件) */ sprintf(szCmd, "SN=%d:10¥xd", nBoardID); write(hAd, szCmd, strlen(szCmd)); /* サンプリング入力の開始(I/Oサンプリング) */ sprintf(szCmd, "RAI=%d:1,%s¥xd", nBoardID, szWaveMem); write(hAd, szCmd, strlen(szCmd)); /* サンプリングの開始(I/Oサンプリング) */ sprintf(szCmd, "RAI=%d:1,M0000¥xd", nBoardID); write(hAd, szCmd, strlen(szCmd)); © 2003, 2005 Interface Corporation. All rights reserved. 21 弊社ライブラリを使用したシステムからの移行 38 39 40 41 42 43 44 /* (中略)*/ /* (中略)*/ /* ドライバのクローズ */ close(hAd); return 0; /* ドライバのクローズ */ close(hAd); return 0; } } 移植のポイントは、以下の通りです。 ・ 波形メモリの確保と、ハンドル値の取得部分を削除。(3 行目、17∼24 行目) ・ ハンドル値の指定を、全て「M0000」に変更。(35∼36 行目) ・ 登録したドライバ名でオープンする。(15 行目) 3.4 アナログ出力用ライブラリ(GND/GID-33xx)からの移行 弊社アナログ出力ボードに対応するライブラリソフトウェアには以下のものがあります。 C(98)/ISA バス用 PCI/CompactPCI バス用 GND-33xx / GID-33xx (xx は、ボードの型式番号が入ります) GPD-3300 ここでは、アナログ出力ボード用の C(98)/ISA 拡張ボード用ライブラリから PCI/CompactPCI 拡 張ボード用ライブラリに移植する際の注意点を列挙します。 3.4.1 コマンド 比較一覧 双方のライブラリのコマンドの比較一覧を示します。 表 3-5 アナログ出力用ライブラリの新旧比較 機 能 波形メモリの取得・開放 サンプリング出力チャンネルの設定 サンプリング出力周波数の設定 サンプリング出力件数の設定 データの種類・計算式・係数の設定 出力レンジの設定 割り込み番号の設定 サンプリング出力の開始 サンプリング出力の繰り返し サンプリングの強制停止 全チャンネルに 0V 出力を行う 波形メモリへデータの書き込み 一点の DA 出力データの出力 汎用入力の状態取得 汎用出力からの出力 ユーザー処理の登録 GND-3300 / GID-3300 GPD-3300 互換性 MEM MEM × CH CH ◎ SC SC ◎ SN SN ◎ CLC CLC ◎ RNG RNG ◎ INT × RAO RAO ○ RAOR RAOR ○ BRK BRK ◎ CLR CLR ◎ MWR MWR ○ DAWR DAWR ◎ DI DI ◎ DO DO ◎ USR × ◎:完全互換 ○:ほぼ互換 ×:GPD-3300 では削除 © 2003, 2005 Interface Corporation. All rights reserved. 22 弊社ライブラリを使用したシステムからの移行 3.4.2 移行時の注意点 移行に使う GPD-3300 のライブラリの選択 GPD-3300 には、GPD-3100 同様、2 種類のライブラリがあります。 1. GPD-3300 Windows 用ソフトウェア(GPC-3300)と高い互換性を持つ API を持つライブラリです。 このライブラリは、LIB ファイルが提供されており、お客様のソースコードとリンクする事 で利用します。 2. GPD-3300 WaveDriver DOS 用ソフトウェア(GND/GID-33xx) と高い互換性を持つコマンド群を持つライブラリで す。 このライブラリは、GND/GID-33xx と同様、常駐型のドライバが提供されており、お客様は ドライバを常駐させた後、ドライバに対するファイルアクセス(open,read,write,close)を 行う事で利用します。 GND/GID-33xx を利用して作成したソフトウェアから移行するには、2 の「GPD-3300 Wave Driver」ライブラリの使用をお奨めします。 コマンドの差異 先に示したコマンドの内、修正を要するコマンドを列挙します。 コマンド MEM INT RAO RAOR MWR USR 対応方法 波形メモリの確保はドライバ内部で自動的に行われる為、このコマンドは削除されま した。RAO,RAOR,MWR コマンドにてメモリハンドルを指定すべき所では、代わ りに「M0000」を指定します。 割り込み番号の管理は、ドライバ内部で自動的に行われます。 不要となった為、このコマンドは削除されました。 メモリハンドルの指定では、常に「M0000」を指定します。 メモリハンドルの指定では、常に「M0000」を指定します。 メモリハンドルの指定では、常に「M0000」を指定します。 この機能は、GPD-3300 ではサポートされていません。 波形メモリ確保の仕組み GND/GID-33xx では、MEM コマンドにて波形メモリを確保してからサンプリングを行う必要が ありました。 GPD-3300 は、波形メモリの確保はライブラリ内部で自動的に行われます。 ライブラリが確保する波形メモリのサイズは、以下の式により求めています。 波形メモリサイズ = 1 データのサイズ(分解能) × サンプリングのチャンネル数 × サンプリング件数 © 2003, 2005 Interface Corporation. All rights reserved. 23 弊社ライブラリを使用したシステムからの移行 波形メモリは XMS を使って確保しています。 なお、Windows95/98 の DOS モードは、初期状態で XMS が使える状態になっています。XMS ドライバを別途導入する必要はありません。 組み込み方法の違い GND/GID-3300 のドライバ組み込み方法としては、以下の 2 種類がありました。 ・ CONFIG.SYS にドライバ名を記述し登録・常駐する ・ コマンドラインからドライバを動的に常駐させる GPD-3300 は、コマンドラインからのドライバ常駐のみサポートします。 また、組み込み時、使用可能なオプションパラメータに違いがあります。 表 3-6 アナログ出力用ドライバのオプションパラメータ比較 機 能 使用するボードの枚数 サンプリングバッファの件数 I/O ポートアドレス デバイス名の設定 コマンドラインから組み込んだ場合の解除 GND/GID-33xx GPD-3300 互換性 B B ◎ S × I × N N ◎ R R ◎ ◎:完全互換 ○:ほぼ互換 ×:GPD-3300 では削除 いずれも、波形メモリをドライバが確保する為 不要となったり、割り込みや I/O をドライバが 自動判定する為に削除されたものです。 移植例 以下は、チャンネル 1 から 1000Hz で 100 点のサンプリング出力を行う場合の移植例を示してい ます。 List 3-2 サンプリング出力例 <GND/GID-33xx> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 char szCmd[256]; char szStat[256]; char szWaveMem[6]; float afData[100]; <GPD-3300> /* /* /* /* ドライバコマンド */ ドライバステータス */ 波形メモリのハンドル */ 出力データ */ char szCmd[256]; /* ドライバコマンド */ char szStat[256]; /* ドライバステータス */ float afData[100]; /* 出力データ */ int main(void) { int nRet; int hDa; int nBoardID; int main(void) { int nRet; int hDa; int nBoardID; /* ボード番号0に対して操作する */ nBoardID = 0; /* ボード番号0に対して操作する */ nBoardID = 0; © 2003, 2005 Interface Corporation. All rights reserved. 24 弊社ライブラリを使用したシステムからの移行 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 /* ドライバのオープン */ hDa = open("DA_IO", O_RDWR │ O_BINARY); /* ドライバのオープン */ hDd = open("GND3303", O_RDWR │ O_BINARY); /* 波形メモリの確保(EMSに対して1024件確保) */ sprintf(szCmd, “MEM=EMS,1024¥xd”); write(hDa, szCmd, strlen(szCmd)); /* 確保した波形メモリのハンドルを取得 */ read(hDa, szStat, 8); memcpy(szWaveMem, szStat + 2, 5); szWaveMem[5] = 0; /* サンプリングチャンネルの設定(1チャンネル)*/ sprintf(szCmd, "CH=%d:1¥xd", nBoardID); write(hDa, szCmd, strlen(szCmd)); /* サンプリングチャンネルの設定(1チャンネル)*/ sprintf(szCmd, "CH=%d:1¥xd", nBoardID); write(hDa, szCmd, strlen(szCmd)); /* サンプリング件数の設定(100件) */ sprintf(szCmd, "SN=%d:100¥xd", nBoardID); write(hDa, szCmd, strlen(szCmd)); /* サンプリング件数の設定(100件) */ sprintf(szCmd, "SN=%d:100¥xd", nBoardID); write(hDa, szCmd, strlen(szCmd)); /* 周波数の設定(1000Hz) */ sprintf(szCmd, "SC=%d:1000¥xd", nBoardID); write(hDa, szCmd, strlen(szCmd)); /* 周波数の設定(1000Hz) */ sprintf(szCmd, "SC=%d:1000¥xd", nBoardID); write(hDa, szCmd, strlen(szCmd)); /* (中略)*/ /* (中略)*/ /* 波形メモリにデータ書き込み(100件) */ sprintf(szCmd, "MWR=%s,1,100,%Fp¥xd", szWaveMem, afData); write(hDa, szCmd, strlen(szCmd)); /* 波形メモリにデータ書き込み(100件) */ sprintf(szCmd, "MWR=M0000,1,100,%Fp¥xd", afData); write(hDa, szCmd, strlen(szCmd)); /* サンプリング出力の開始(I/O) */ sprintf(szCmd, "RA0=%d:1,%s¥xd", nBoardID, szWaveMem); write(hDa, szCmd, strlen(szCmd)); /* サンプリング出力の開始(I/O) */ sprintf(szCmd, "RA0=%d:1,M0000¥xd", nBoardID); write(hDa, szCmd, strlen(szCmd)); /* (中略)*/ /* (中略)*/ /* ドライバのクローズ */ close(hDa); return 0; /* ドライバのクローズ */ close(hDa); return 0; } } 移植のポイントは、以下の通りです。 ・ 波形メモリの確保と、ハンドル値の取得部分を削除。(3 行目、18∼25 行目) ・ ハンドル値の指定を、全て「M0000」に変更。(42∼43、47∼48 行目) ・ 登録したドライバ名でオープンする。(16 行目) © 2003, 2005 Interface Corporation. All rights reserved. 25 弊社ライブラリを使用したシステムからの移行 3.5 アナログ入出力用ライブラリ(GND/GID-35xx)からの移行 弊社アナログ入出力ボードに対応するライブラリソフトウェアには以下のものがあります。 C(98)/ISA バス用 PCI/CompactPCI バス用 GND-35xx / GID-35xx (xx は、ボードの型式番号が入ります) GPD-3500 ここでは、アナログ入出力ボード用の C(98)/ISA 拡張ボード用ライブラリから PCI 拡張ボード用 ライブラリに移植する際の注意点を列挙します。 3.5.1 コマンド 比較一覧 双方のライブラリのコマンドの比較一覧を示します。 表 3-7 アナログ入出力用ライブラリの新旧比較 機 能 波形メモリの取得・開放 サンプリングチャンネルの設定 サンプリング周波数の設定 サンプリング件数の設定 平均処理の種類と件数の設定 データの種類・計算式・係数の設定 入力仕様の設定 入力レンジの設定 ゲインの設定 割り込み番号の設定 トリガ条件の設定 サンプリング入力の開始 サンプリング出力の開始 サンプリング出力の繰り返し サンプリング入出力の開始 サンプリング入出力のステータス取得 サンプリングの強制停止 DA 出力の全チャンネルを 0V にする 波形メモリからのデータの取り出し 波形メモリへデータの書き込み 現在の AD 変換値一点の取得 一点の DA 出力の出力 外部トリガによるサンプリング入力 外部トリガでのサンプリングデータ取得 外部トリガでのサンプリングの終了 汎用入力の状態取得 汎用出力からの出力 ユーザー処理の登録 GND / GID-35xx GPD-3500 互換性 MEM MEM × CH CH ◎ SC SC ◎ SN SN ◎ AVG AVG ◎ CLC CLC ◎ SD SD ◎ RNG RNG ◎ GIN × INT × TRG TRG ◎ RAI RAI ○ RAO RAO ○ RAOR RAOR ○ RAIO RAIO ◎ RAIOST RAIOST ◎ BRK BRK ◎ CLR CLR ◎ MRD MRD ○ MWR MWR ○ ADRD ADRD ◎ DAWR DAWR ◎ EXST EXST ◎ EXIN EXIN ◎ EXED EXED ◎ DI DI ◎ DO DO ◎ USR × ◎:完全互換 ○:ほぼ互換 ×:GPD-3500 では削除 © 2003, 2005 Interface Corporation. All rights reserved. 26 弊社ライブラリを使用したシステムからの移行 3.5.2 移行時の注意点 移行に使う GPD-3500 のライブラリの選択 GPD-3500 には、GPD-3100/3300 同様、2 種類のライブラリがあります。 3. GPD-3500 Windows 用ソフトウェア(GPC-3500)と高い互換性を持つ API を持つライブラリです。 このライブラリは、LIB ファイルが提供されており、お客様のソースコードとリンクする事 で利用します。 4. GPD-3500 WaveDriver DOS 用ソフトウェア(GND/GID-35xx) と高い互換性を持つコマンド群を持つライブラリで す。 このライブラリは、GND/GID-35xx と同様、常駐型のドライバが提供されており、お客様は ドライバを常駐させた後、ドライバに対するファイルアクセス(open,read,write,close)を 行う事で利用します。 GND/GID-35xx を利用して作成したソフトウェアから移行するには、2 の「GPD-3500 Wave Driver」ライブラリの使用をお奨めします。 コマンドの差異 先に示したコマンドの内、修正を要するコマンドを列挙します。 コマンド MEM GIN INT RAI MRD RAO RAOR MWR USR 対応方法 波形メモリの確保はドライバ内部で自動的に行われる為、このコマンドは削除されま した。RAI,MRD,RAO,RAOR,MWR コマンドにてメモリハンドルを指定すべき 所では、代わりに「M0000」を指定します。 入力ゲインは、入力レンジとして まとめて表現可能な為、このコマンドは削除され ました。 (例:入力レンジ:0∼5V、入力ゲイン:×1、×2 とすると、入力レンジ:0∼5V、 0∼10V として表す事が可能) 割り込み番号の管理は、ドライバ内部で自動的に行われます。 不要となった為、このコマンドは削除されました。 メモリハンドルの指定では、常に「M0000」を指定します。 メモリハンドルの指定では、常に「M0000」を指定します。 メモリハンドルの指定では、常に「M0000」を指定します。 メモリハンドルの指定では、常に「M0000」を指定します。 メモリハンドルの指定では、常に「M0000」を指定します。 この機能は、GPD-3500 ではサポートされていません。 © 2003, 2005 Interface Corporation. All rights reserved. 27 弊社ライブラリを使用したシステムからの移行 波形メモリ確保の仕組み GND/GID-35xx では、MEM コマンドにて波形メモリを確保してからサンプリングを行う必要が ありました。 GPD-3500 は、波形メモリの確保はライブラリ内部で自動的に行われます。 ライブラリが確保する波形メモリのサイズは、以下の式により求めています。 波形メモリサイズ = 1 データのサイズ(分解能) × サンプリングのチャンネル数 × サンプリング件数 波形メモリは XMS を使って確保しています。 なお、Windows95/98 の DOS モードは、初期状態で XMS が使える状態になっています。XMS ドライバを別途導入する必要はありません。 組み込み方法の違い GND/GID-3500 のドライバ組み込み方法としては、以下の 2 種類がありました。 ・ CONFIG.SYS にドライバ名を記述し登録・常駐する ・ コマンドラインからドライバを動的に常駐させる GPD-3500 は、コマンドラインからのドライバ常駐のみサポートします。 また、組み込み時、使用可能なオプションパラメータに違いがあります。 表 3-8 アナログ入出力用ドライバのオプションパラメータ比較 機 能 使用するボードの枚数 サンプリングバッファの件数 外部トリガに使用する割込みレベル I/O ポートアドレス デバイス名の設定 コマンドラインから組み込んだ場合の解除 GND/GID-35xx GPD-3500 互換性 B B ◎ S × E × I × N N ◎ R R ◎ ◎:完全互換 ○:ほぼ互換 ×:GPD-3500 では削除 いずれも、波形メモリをドライバが確保する為 不要となったり、割り込みや I/O をドライバが 自動判定する為に削除されたものです。 移植例 以下は、チャンネル 1 から 1000Hz で 100 点のサンプリング出力を行う場合の移植例を示してい ます。 © 2003, 2005 Interface Corporation. All rights reserved. 28 弊社ライブラリを使用したシステムからの移行 List 3-3 サンプリング出力例 <GND/GID-35xx> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 char szCmd[256]; char szStat[256]; char szWaveMem[6]; float afData[100]; <GPD-3500> /* /* /* /* ドライバコマンド */ ドライバステータス */ 波形メモリのハンドル */ 出力データ */ char szCmd[256]; /* ドライバコマンド */ char szStat[256]; /* ドライバステータス */ float afData[100]; /* 出力データ */ int main(void) { int nRet; int hDa; int nBoardID; int main(void) { int nRet; int hDa; int nBoardID; /* ボード番号0に対して操作する */ nBoardID = 0; /* ボード番号0に対して操作する */ nBoardID = 0; /* ドライバのオープン */ hDd = open("GND3502", O_RDWR │ O_BINARY); /* ドライバのオープン */ hDa = open("AD_DA", O_RDWR │ O_BINARY); /* 波形メモリの確保(EMSに対して1024件確保) */ sprintf(szCmd, “MEM=EMS,1024¥xd”); write(hDa, szCmd, strlen(szCmd)); /* 確保した波形メモリのハンドルを取得 */ read(hDa, szStat, 8); memcpy(szWaveMem, szStat + 2, 5); szWaveMem[5] = 0; /* サンプリングチャンネルの設定(1チャンネル)*/ sprintf(szCmd, "CH=%d:1¥xd", nBoardID); write(hDa, szCmd, strlen(szCmd)); /* サンプリングチャンネルの設定(1チャンネル)*/ sprintf(szCmd, "CH=%d:1¥xd", nBoardID); write(hDa, szCmd, strlen(szCmd)); /* サンプリング件数の設定(100件) */ sprintf(szCmd, "SN=%d:100¥xd", nBoardID); write(hDa, szCmd, strlen(szCmd)); /* サンプリング件数の設定(100件) */ sprintf(szCmd, "SN=%d:100¥xd", nBoardID); write(hDa, szCmd, strlen(szCmd)); /* 周波数の設定(1000Hz) */ sprintf(szCmd, "SC=%d:1000¥xd", nBoardID); write(hDa, szCmd, strlen(szCmd)); /* 周波数の設定(1000Hz) */ sprintf(szCmd, "SC=%d:1000¥xd", nBoardID); write(hDa, szCmd, strlen(szCmd)); /* (中略)*/ /* (中略)*/ /* 波形メモリにデータ書き込み(100件) */ sprintf(szCmd, "MWR=%s,1,100,%Fp¥xd", szWaveMem, afData); write(hDa, szCmd, strlen(szCmd)); /* 波形メモリにデータ書き込み(100件) */ sprintf(szCmd, "MWR=M0000,1,100,%Fp¥xd", afData); write(hDa, szCmd, strlen(szCmd)); /* サンプリング出力の開始(I/O) */ sprintf(szCmd, "RA0=%d:1,%s¥xd", nBoardID, szWaveMem); write(hDa, szCmd, strlen(szCmd)); /* サンプリング出力の開始(I/O) */ sprintf(szCmd, "RA0=%d:1,M0000¥xd", nBoardID); write(hDa, szCmd, strlen(szCmd)); /* (中略)*/ /* (中略)*/ /* ドライバのクローズ */ close(hDa); return 0; /* ドライバのクローズ */ close(hDa); return 0; } } 移植のポイントは、以下の通りです。 ・ 波形メモリの確保と、ハンドル値の取得部分を削除。(3 行目、18∼25 行目) ・ ハンドル値の指定を、全て「M0000」に変更。(42∼43、47∼48 行目) ・ 登録したドライバ名でオープンする。(16 行目) © 2003, 2005 Interface Corporation. All rights reserved. 29 弊社ライブラリを使用したシステムからの移行 3.6 シリアル通信(調歩同期)用ライブラリからの移行 調歩同期通信に対応した、弊社シリアル通信ボードに対応するライブラリソフトウェアには以下 のものがあります。 C(98)/ISA バス用 PCI/CompactPCI バス用 VCD-4101 / VCD-4105 / VND-4111 / VED-4111 VND-4131 / VCD-4137 / VCD-4140 / VCD-4141 VCD-4201 / VCD-4205 GPD-4101 / GPD-4141 ここでは、調歩同期通信に対応したシリアル通信ボード用の C(98)/ISA 拡張ボード用ライブラリ から PCI/CompactPCI 拡張ボード用ライブラリに移植する際の注意点を列挙します。 3.6.1 ハードウェアの選択 C(98)/ISA 拡張ボードと PCI/CompactPCI 拡張ボードでは、多くの点で機能が改善されています。 1. PCI/CompactPCI 拡張ボードでは、ほぼ全てに送受信バッファが搭載されています 例えば、AZI-4101 では送受信バッファが ありませんでしたが、PCI-4101 では 4kB/チャンネル のバッファが搭載されています。 2. 最大ボーレート(bps)が向上しています 製品によっては、最大ボーレートが向上しています。同一の型式番号は無いものの、例えば PCI-4161 は 1Mbps の送受信が可能です。 なお、PCI-4161 はプログラマブルボーレートジェネレータを搭載しており、任意のボーレート 設定が可能です。 この他、PCI/CompactPCI 拡張ボードで新たに追加された製品では、高速の外部クロック入力が 使用可能な製品や、多チャンネルの製品がラインナップされています。 また、C(98)/ISA 拡張ボードでは、AZI/IBX-4113 や AZI/IBX-4140 などのように、GP-IB や PPI 等の複合ボードがあります。 PCI/CompactPCI 拡張ボードでは、シリアル通信ボードと GP-IB ボード、シリアル通信ボードと PPI ボードという風に、複数のボードを組み合わせていただく事になります。 © 2003, 2005 Interface Corporation. All rights reserved. 30 弊社ライブラリを使用したシステムからの移行 3.6.2 関数 比較一覧 シリアル通信用ライブラリの関数体系は、C(98)/ISA および PCI/CompactPCI 共、非常に似ています。 まず、C(98)/ISA 拡張ボード用ライブラリの関数一覧を示します。 見ての通り、関数名の「Comhg」等のプレフィクスより後は、全て同じ名前で統一されています。 機能 ボードのオープン ボードのクローズ ボードの設定変更 受信データのフレーム長 取得 受信データのデータ長取 得 データの送信 受信データの取り出し 表 3-9 シリアル通信用ライブラリの関数名一覧 型式 関数名 型式 関数名 VCD-4101 VND-4111 VCD-4112 VND-4131 VCD-4137 VCD-4140 VCD-4201 VCD-4101 VND-4111 VCD-4112 VND-4131 VCD-4137 VCD-4140 VCD-4201 VCD-4101 VND-4111 VCD-4112 VND-4131 VCD-4137 VCD-4140 VCD-4201 VCD-4101 VND-4111 VCD-4112 VND-4131 VCD-4137 VCD-4140 VCD-4201 VCD-4101 VND-4111 VCD-4112 VND-4131 VCD-4137 VCD-4140 VCD-4201 VCD-4101 VND-4111 VCD-4112 VND-4131 VCD-4137 VCD-4140 VCD-4201 VCD-4101 VND-4111 VCD-4112 VND-4131 VCD-4137 VCD-4140 VCD-4201 ComhgOpenPort CompicsOpenPort PrtcomcOpenPort Com61kOpenPort ComOpenPort ComppiOpenPort ComfzdOpenPort ComhgClosePort CompicsClosePort PrtcomcClosePort Com61kClosePort ComClosePort ComppiClosePort ComfzdClosePort ComhgConfigPort CompicsConfigPort PrtcomcConfigPort Com61kConfigPort ComConfigPort ComppiConfigPort ComhgGetFrameLen CompicsGetFrameLen PrtcomcGetFrameLen Com61kGetFrameLen ComGetFrameLen ComppiGetFrameLen ComfzdGetFrameLen ComhgGetLen CompicsGetLen PrtcomcGetLen Com61kGetLen ComGetLen ComppiGetLen ComfzdGetLen ComhgSendData CompicsSendData PrtcomcSendData Com61kSendData ComSendData ComppiSendData ComfzdSendData ComhgReceiveData CompicsReceiveData PrtcomcReceiveData Com61kReceiveData ComReceiveData ComppiReceiveData ComfzdReceiveData © 2003, 2005 Interface Corporation. All rights reserved. 31 VCD-4105 VED-4111 VCD-4113 VED-4131 ComnOpenPort CompicsOpenPort ComgOpenPort Com61kOpenPort VCD-4141 VCD-4205 VCD-4105 VED-4111 VCD-4113 VED-4131 ComvOpenPort ComnvdOpenPort ComnClosePort CompicsClosePort ComgClosePort Com61kClosePort VCD-4141 VCD-4205 VCD-4105 VED-4111 VCD-4113 VED-4131 ComvClosePort ComnvdClosePort ComnConfigPort CompicsConfigPort ComgConfigPort Com61kConfigPort VCD-4141 VCD-4205 VCD-4105 VED-4111 VCD-4113 VED-4131 ComvConfigPort ComnGetFrameLen CompicsGetFrameLen ComgGetFrameLen Com61kGetFrameLen VCD-4141 VCD-4205 VCD-4105 VED-4111 VCD-4113 VED-4131 ComvGetFrameLen ComnvdGetFrameLen ComnGetLen CompicsGetLen ComgGetLen Com61kGetLen VCD-4141 VCD-4205 VCD-4105 VED-4111 VCD-4113 VED-4131 ComvGetLen ComnvdGetLen ComnSendData CompicsSendData ComgSendData Com61kSendData VCD-4141 VCD-4205 VCD-4105 VED-4111 VCD-4113 VED-4131 ComvSendData ComnvdSendData ComnReceiveData CompicsReceiveData ComgReceiveData Com61kReceiveData VCD-4141 VCD-4205 ComvReceiveData ComnvdReceiveData 弊社ライブラリを使用したシステムからの移行 機能 型式 関数名 型式 関数名 エラー発生状況など取得 VCD-4101 VND-4111 VCD-4112 VND-4131 VCD-4137 VCD-4140 VCD-4201 VCD-4101 VND-4111 VCD-4112 VND-4131 VCD-4137 VCD-4140 VCD-4201 VCD-4101 VND-4111 VCD-4112 VND-4131 VCD-4137 VCD-4140 VCD-4201 VCD-4101 VND-4111 VCD-4112 VND-4131 VCD-4137 VCD-4140 VCD-4201 VCD-4101 VND-4111 VCD-4112 VND-4131 VCD-4137 VCD-4140 VCD-4201 VCD-4101 VND-4111 VCD-4112 VND-4131 VCD-4137 VCD-4140 VCD-4201 VCD-4101 VND-4111 VCD-4112 VND-4131 VCD-4137 VCD-4140 VCD-4201 ComhgGetInfo CompicsGetInfo PrtcomcGetInfo Com61kGetInfo ComGetInfo ComppiGetInfo ComfzdGetInfo ComhgGetStat CompicsGetStat PrtcomcGetStat Com61kGetStat ComGetStat ComppiGetStat ComfzdGetStat ComhgCtrlPort CompicsCtrlPort PrtcomcCtrlPort Com61kCtrlPort ComCtrlPort ComppiCtrlPort ComfzdCtrlPort ComhgCheckData CompicsCheckData PrtcomcCheckData Com61kCheckData ComCheckData ComppiCheckData ComfzdCheckData ComhgScanData CompicsScanData PrtcomcScanData Com61kScanData ComScanData ComppiScanData ComfzdScanData ComhgSendBreak PrtcomcSendBreak Com61kSendBreak ComSendBreak ComppiSendBreak ComhgClearBuffer PrtcomcClearBuffer Com61kClearBuffer ComClearBuffer ComppiClearBuffer - VCD-4105 VED-4111 VCD-4113 VED-4131 ComnGetInfo CompicsGetInfo ComgGetInfo Com61kGetInfo VCD-4141 VCD-4205 VCD-4105 VED-4111 VCD-4113 VED-4131 ComvGetInfo ComnvdGetInfo ComnGetStat CompicsGetStat ComgGetStat Com61kGetStat VCD-4141 VCD-4205 VCD-4105 VED-4111 VCD-4113 VED-4131 ComvGetStat ComnvdGetStat ComnCtrlPort CompicsCtrlPort ComgCtrlPort Com61kCtrlPort VCD-4141 VCD-4205 VCD-4105 VED-4111 VCD-4113 VED-4131 ComvCtrlPort ComnvdCtrlPort ComnCheckData CompicsCheckData ComgCheckData Com61kCheckData VCD-4141 VCD-4205 VCD-4105 VED-4111 VCD-4113 VED-4131 ComvCheckData ComnvdCheckData ComnScanData CompicsScanData ComgScanData Com61kScanData VCD-4141 VCD-4205 VCD-4105 VED-4111 VCD-4113 VED-4131 ComvScanData ComnvdScanData ComnSendBreak ComgSendBreak Com61kSendBreak VCD-4141 VCD-4205 VCD-4105 VED-4111 VCD-4113 VED-4131 ComvSendBreak ComnClearBuffer ComgClearBuffer Com61kClearBuffer VCD-4141 VCD-4205 ComvClearBuffer - ポートの制御信号の状態 取得 ポートの制御信号の制御 全ポートのデータ有無検 査 全ポートのデータ有無を 検査し、最初にデータが 見つかったポート番号の 取得 ブレーク信号の送出 送受信バッファのクリア © 2003, 2005 Interface Corporation. All rights reserved. 32 弊社ライブラリを使用したシステムからの移行 次に、PCI/CompactPCI 拡張ボード用ライブラリの関数一覧を示します。 双方の違いは、関数名のプレフィクスが「Comhg」か「Comv」かの違いです。 また、C(98)/ISA 拡張ボード用ライブラリの関数名とも酷似しています。 表 3-10 GPD-4101 と GPD-4141 の関数名比較 GPD-4101 GPD-4141 機能 ボードのオープン ボードのクローズ ボードの設定変更 受信データのフレーム長取得 受信データのデータ長取得 データの送信 受信データの取り出し エラー発生状況など取得 ポートの制御信号の状態取得 ComhgOpenPort ComhgClosePort ComhgConfigPort ComhgGetFrameLen ComhgGetLen ComhgSendData ComhgReceiveData ComhgGetInfo ComhgGetStat ComvOpenPort ComvClosePort ComvConfigPort ComvGetFrameLen ComvGetLen ComvSendData ComvReceiveData ComvGetInfo ComvGetStat ポートの制御信号の制御 ComhgCtrlPort ComvCtrlPort 全ポートのデータ有無検査 全ポートのデータ有無を検査し、最初にデータが見つ かったポート番号の取得 ブレーク信号の送出 送受信バッファのクリア ComhgCheckData ComhgScanData ComvCheckData ComvScanData ComhgSendBreak ComhgClearBuffer ComvSendBreak ComvClearBuffer 3.6.3 移行時の注意点 関数体系は ほぼ同一の為、C(98)/ISA 拡張ボード用ライブラリから PCI/CompactPCI 拡張ボード 用ライブラリへの移植作業は、関数名の置き換えが中心となります。 以降では、移植作業の中で、注意を必要とする作業項目について説明します。 オープン関数によるボード指定方法の違い(xxxOpenPort 関数) オープン関数(ComhgOpenPort や ComvOpenPort 等)は、使用する拡張ボードを指定する必要があ りますが、C(98)/ISA から PCI/CompactPCI への移行に伴い、指定方法が変わります。 以下に例として、VCD-4101 と GPD-4101、GPD-4141 で、関数宣言の比較をします。 © 2003, 2005 Interface Corporation. All rights reserved. 33 弊社ライブラリを使用したシステムからの移行 関数宣言の比較> <GPD-4101> <VCD-4101> int ComhgOpenPort( int ComhgOpenPort( int Port, /* オープンするポート番号 */ int nPort, /* オープンするポート番号 */ struct d4101OpenForm *Set /* I/O ポートベースアドレス */ PCOMHGOPENFORM *pSet, /* セットアップ情報へのポインタ */ ); ); セットアップ情報 セットアップ情報 struct d4101OpenForm{ typedef struct ComhgOpenForm{ unsigned int ioadr; /* I/O ポートアドレス */ unsigned int uDeviceID; int irq; /* 割り込み番号*/ unsigned int uSubSysID; /* サブシステム ID */ char *sndbuf; /* 送信バッファポインタ */ unsigned int uBoardID; /* ボード ID(RSW1 設定値) */ char *rcvbuf; /* オープンする CH 番号 */ /* デバイス ID */ /* 受信バッファポインタ */ unsigned int uCh; unsigned int sndbufsize; /* 送信バッファサイズ */ unsigned int uTimer; /* タイマ選択 */ unsigned int rcvbufsize; /* 受信バッファサイズ */ void far *pSendBuffer; /* 送信バッファポインタ */ /* 受信バッファポインタ */ int board; /* ボードタイプ */ void far *pRecvBuffer; int ch; /* オープンするチャンネル番号 */ unsigned int uSendBufferSize; /* 送信バッファサイズ */ int timertype; unsigned int uRecvBufferSize; /* 受信バッファサイズ */ /* タイマ選択 */ unsigned int tadr; /* タイマ使用時、I/O アドレス */ int /* タイマ使用時、割り込み番号 */ tirq; } COMHGOPENFORM, *PCOMHGOPENFORM; }; <GPD-4141> int ComvOpenPort( int nPort, PCOMVOPENFORM /* オープンするポート番号 */ *pSet, /* セットアップ情報へのポインタ */ ); セットアップ情報 typedef struct ComvOpenForm{ unsigned int uDeviceID; unsigned int uSubSysID; /* デバイス ID */ /* サブシステム ID */ unsigned int uBoardID; /* ボード ID(RSW1 設定値) */ unsigned int uCh; /* オープンする CH 番号 */ void far *pSendBuffer; /* 送信バッファポインタ */ void far *pRecvBuffer; /* 受信バッファポインタ */ unsigned int uSendBufferSize; /* 送信バッファサイズ */ unsigned int uRecvBufferSize; /* 受信バッファサイズ */ } COMVOPENFORM, *PCOMVOPENFORM; VCD-4101 では第 1、2、7 引数で、使用する拡張ボードを特定する I/O ポートアドレス,割り込 み番号,ボードタイプを指定しますが、GPD-4101,GPD-4141 では代わりに拡張ボードを特定す るデバイス ID,サブシステム ID,ボード ID(第 1∼3 引数)を指定します。 VCD-4101 のタイマ関連の設定(第 9∼11 引数)と、GPD-4101 のタイマ選択の設定(第 5 引数)は、 若干意味合いが異なります。 VCD-4101 のタイマ関連の設定は、拡張ボードが使用するタイマを指定する為に存在しますが、 GPD-4101 のタイマ関連の設定は、半二重通信や受信タイムアウト時の振る舞いを変更するため に存在します。 (PCI/CompactPCI 拡張ボードには、インターバルタイマが標準的に搭載されています) なお、GPD-4141 には、この設定はありません。 © 2003, 2005 Interface Corporation. All rights reserved. 34 弊社ライブラリを使用したシステムからの移行 移植例> AZI-4101 から PCI-4101 へ移行する例です。 シリアル通信ボードのチャンネル 1 をポート 1 に割り当て、送受信バッファのサイズを 1024 バ イトに設定する例です。 int nRet; int nRet; char szSendBuff[1024], szRecvBuff[1024]; char szSendBuff[1024], szRecvBuff[1024]; struct d4101OpenForm sSet; COMHGOPENFORM I/O ポートアドレス等を /* セットアップ情報の設定 */ sSet.ioadr = 0x00d0; sSet.intr = 3; sSet.sndbuf sSet.rcvbuf 指定する代わりに、 sSet; /* セットアップ情報の設定 */ sSet.uDeviceID = 4101; sSet.uSubSysID = 0x0001; = szSendBuff; sSet.uBoardID = 0; = szRecvBuff; sSet.uCh = 1; デバイス ID 等を指定。 sSet.sndbufsize = 1024; sSet.uTimer = 1; sSet.rcvbufsize = 1024; sSet.pSendBuffer = szSendBuff; sSet.board = 0; sSet.pRecvBuffer = szRecvBuff; sSet.ch = 1; sSet.uSendBufferSize = 1024; sSet.timertype = 0; sSet.uRecvBufferSize = 1024; sSet.tadr = 0; sSet.tirq = 0; VCD-4101 に合わせるなら、 使わない指定。 タイマ使用が良い。 /* ボードのオープン(ポート番号 1) */ /* ボードのオープン(ポート番号 1) */ nRet = ComhgOpenPort(1 , &sSet); nRet = ComhgOpenPort(1, &sSet); 移植のポイントは、以下の通りです。 ・ 拡張ボードの I/O ポートアドレスを直接指定からデバイス ID 等で指定に変更 ・ 関数名を、使用するライブラリのものに置換する。 ・ 構造体も、使用するライブラリのものに置換する。 © 2003, 2005 Interface Corporation. All rights reserved. 35 弊社ライブラリを使用したシステムからの移行 オープン関数による指定方法の違い(VCD-4201/4205) VCD-4201 と VCD-4205 では他のシリアル通信用ボードの API と比べて、オープン関数 (xxxOpenPort 関数)とボードの設定変更関数(xxxConfigPort 関数)が組み合わさった関数体系とな っています。 関数宣言の比較> <VCD-4201> <GPD-4101 の ComhgOpenPort> int ComfzdOpenPort( int ComhgOpenPort( unsigned int dpadr, /* DPRAM アドレス */ int nPort, /* オープンするポート番号 */ unsigned int ioadr, /* I/O ポートアドレス */ PCOMHGOPENFORM *pSet, /* セットアップ情報へのポインタ */ int port, /* オープンするポート番号 */ char *info, /* 初期化文字列情報へのポインタ */ ); int timertype, /* タイマの選択 */ セットアップ情報 int tadr, /* タイマ使用時、I/O ポートアドレス */ typedef struct ComhgOpenForm{ int tirq /* タイマ使用時、割込み番号 */ unsigned int uDeviceID; ); /* デバイス ID */ unsigned int uSubSysID; /* サブシステム ID */ unsigned int uBoardID; /* ボード ID(RSW1 設定値) */ <VCD-4205> unsigned int uCh; /* オープンする CH 番号 */ int ComnvdOpenPort( unsigned int uTimer; /* タイマ選択 */ unsigned int dpadr, /* DPRAM アドレス */ void far *pSendBuffer; /* 送信バッファポインタ */ unsigned int ioadr, /* I/O ポートアドレス */ void far *pRecvBuffer; /* 受信バッファポインタ */ int port, /* オープンするポート番号 */ unsigned int uSendBufferSize; /* 送信バッファサイズ */ char *info, /* 初期化文字列情報へのポインタ */ int timertype, /* タイマの選択 */ int tadr, /* タイマ使用時、I/O ポートアドレス */ int tirq /* タイマ使用時、割込み番号 */ ); unsigned int uRecvBufferSize; /* 受信バッファサイズ */ } COMHGOPENFORM, *PCOMHGOPENFORM; <GPD-4101 の ComhgConfigPort> int ComhgConfigPort( int nPort, char *szInfo /* ポート番号 */ /* 初期化情報文字列 */ ); 前の VCD-4101 のオープン関数の宣言とも見比べてください。2 つの関数が 1 つになっているの が判ります。 移植の際は、ComfzdOpenPort/ComnvdOpenPort の第 4 引数(info パラメータ)を、 ComhgConfigPort/ComvConfigPort に移動し、「■ボードの設定変更関数に渡す初期化情報文字列 の修正(xxxConfigPort)」に示す項目を参考に修正すると良いでしょう。 © 2003, 2005 Interface Corporation. All rights reserved. 36 弊社ライブラリを使用したシステムからの移行 対応ポート数の増加による修正(xxxCheckData 関数) C(98)/ISA から PCI/CompactPCI への移行に伴って、シリアル通信ライブラリが対応するポート数 が増加しています。 以下に例を示します。 カテゴリ C(98)/ISA PCI/CompactPCI 型式 VCD-4101 VCD-4105 VND/VED-4111 VCD-4112 VCD-4113 VND/VED-4131 VCD-4137 VCD-4140 VCD-4141 VCD-4201 VCD-4205 GPD-4101 GPD-4141 対応ポート数 14 14 16 7 7 2 14 7 4/6/20/28 32 32 64 255 このポート数増加により影響を受けるのは、全ポートのデータ有無検査を行う関数 (ComhgCheckData や ComvCheckData 等)に渡す、配列の大きさです。 例を挙げます。 以下は、VCD-4101 で全ポートのデータ有無検査を行う関数を呼び出す例です。 int anPortCheckArray[14]; /* 結果を受け取る配列の宣言 */ ComhgCheckData(anPortCheckArray); /* 関数の呼び出し */ 結果を受け取る配列の要素数が 14 に宣言されている事に注意してください。 次に、GPD-4101 で記述した場合の例を挙げます。 int anPortCheckArray[64]; /* 結果を受け取る配列の宣言 */ ComhgCheckData(anPortCheckArray); /* 関数の呼び出し */ 配列の要素数が 64 に増えています。 対応ポート数が増加している為、このような書き換えが必要となります。 © 2003, 2005 Interface Corporation. All rights reserved. 37 弊社ライブラリを使用したシステムからの移行 タイマ機能を有効にした場合の挙動の変化(GPD-4101 のみ) 先の、「オープン関数によるボード指定方法の違い(xxxOpenPort 関数)」にて、GPD-4101 にはタ イマ選択の設定(第 5 引数:uTimer)がある事を述べました。 この設定を使用/未使用にした時、どんな変化が現れるのか以下に示します。 変化する項目 項目 2 線式半二重通信時、RS(C)信 タイマ使用時 号の挙動が変化する (ComhgConfigPort の初期化文 字列「/HALF」にて設定できま タイマ未使用時 す) 受信タイムアウトの機能が変 タイマ使用時 化する (ComhgConfigPort の初期化文 タイマ未使用時 字列「/Tn」にて設定できます) ComhgSendBreak 関数の引数の タイマ使用時 意味が変化する タイマ未使用時 説明 データ送信時、RS(C)信号の ON/OFF を自動 的に行う。 (C(98)/ISA 用ライブラリと同じ) データ送信時、RS(C)信号の ON/OFF を自動的 には行わない。 RS(C)信号とデータの同期が必要ならば、 ComhgCtrlPort 関数と組み合わせて使用する。 受信タイムアウトの設定が有効になる。 (C(98)/ISA 用ライブラリと同じ) 受信タイムアウトの設定は無効。 ブレーク信号出力時間を引数にて設定する。 (C(98)/ISA 用ライブラリと同じ) ブレーク信号の送信/停止を引数にて設定する。 変化する項目に当てはまる処理を行いたい場合、タイマ使用に設定される事をお奨めします。 ボードの設定変更関数に渡す初期化情報文字列の修正(xxxConfigPort) ボードの設定変更を行う関数(ComhgConfigPort や ComvConfigPort 等)では、ポートに対する各種 設定を、初期化情報文字列と呼ぶパラメータにて指定します。 C(98)/ISA 拡張ボード用ライブラリと、PCI/CompactPCI 拡張ボード用ライブラリでは、これらパ ラメータの値が、各ライブラリによって異なる事があります。 以下では、異なる点について列挙します。 VCD-4101 と GPD-4101 との比較> 項目 ボーレート設定 基準クロック設定 VCD-4101 /R75 ∼ /R76800 /C0 外部クロック /C1 4.9152MHz /C2 1.8432MHz /C3 4.096MHz GPD-4101 /R4 ∼ /R136530 /C0 外部クロック /C1 4.9152MHz /C2 1.8432MHz /C3 4.096MHz /C4 8.0MHz /C5 9.8304MHz /C6 14.7456MHz © 2003, 2005 Interface Corporation. All rights reserved. 38 - 弊社ライブラリを使用したシステムからの移行 VCD-4105 と GPD-4101/4141 との比較> 項目 ボーレート設定 基準クロック設定 VCD-4105 /R75 ∼ /R76800 /C1 9.8304MHz /C2 7.3728MHz /C3 8.192MHz 受信クロック設定 /RTIN 内部クロック /RTOUT 外部 RT 信号 /RTST 外部 ST 信号 /STIN 内部クロック /STOUT 外部 ST 信号 /STRT 外部 RT 信号 送信クロック設定 GPD-4101 /R4 ∼ /R136530 /C0 外部クロック /C1 4.9152MHz /C2 1.8432MHz /C3 4.096MHz /C4 8.0MHz /C5 9.8304MHz /C6 14.7456MHz /RCIN 内部クロック /RCRT 外部 RT 信号 /RCST 外部 ST2(ST)信号 /SCIN 内部クロック /SCST 外部 ST2(ST)信号 /SCRT 外部 RT 信号 GPD-4141 /R2 ∼ /R921600 /C1 14.7456MHz /C2 1.8432MHz /C3 4.096MHz /C4 7.3728MHz /C5 4.9152MHz /C6 8.0MHz /C7 12.288MHz - GPD-4101 /R4 ∼ /R136530 /C0 外部クロック /C1 4.9152MHz /C2 1.8432MHz /C3 4.096MHz /C4 8.0MHz /C5 9.8304MHz /C6 14.7456MHz GPD-4141 /R2 ∼ /R921600 /C1 14.7456MHz /C2 1.8432MHz /C3 4.096MHz /C4 7.3728MHz /C5 4.9152MHz /C6 8.0MHz /C7 12.288MHz - VND/VED-4111 と GPD-4101/4141 との比較> 項目 ボーレート設定 基準クロック設定 VND/VED-4111 /R75 ∼ /R76800 /CIN 内部クロック /COUT 外部クロック VCD-4112 と GPD-4141 との比較> 項目 ボーレート設定 基準クロック設定 VCD-4112 /R75 ∼ /R230400 /C1 14.7456MHz /C2 1.8432MHz /C3 4.096MHz 受信 FIFO 割り込み設定 /L0 割り込みを使用しない /L1 1 バイト蓄積で発生 /L4 4 バイト蓄積で発生 /L8 8 バイト蓄積で発生 /L14 14 バイト蓄積で発生 - - GPD-4141 /R2 ∼ /R921600 /C1 14.7456MHz /C2 1.8432MHz /C3 4.096MHz /C4 7.3728MHz /C5 4.9152MHz /C6 8.0MHz /C7 12.288MHz 指定は可能だが、 8 バイト固定 VCD-4113 と GPD-4141 との比較> 項目 ボーレート設定 基準クロック設定 VCD-4113 /R75 ∼ /R230400 /C1 14.7456MHz /C2 1.8432MHz /C3 4.096MHz 受信 FIFO 割り込み設定 /L0 割り込みを使用しない /L1 1 バイト蓄積で発生 /L4 4 バイト蓄積で発生 /L8 8 バイト蓄積で発生 /L14 14 バイト蓄積で発生 - - © 2003, 2005 Interface Corporation. All rights reserved. 39 GPD-4141 /R2 ∼ /R921600 /C1 14.7456MHz /C2 1.8432MHz /C3 4.096MHz /C4 7.3728MHz /C5 4.9152MHz /C6 8.0MHz /C7 12.288MHz 指定は可能だが、 8 バイト固定 弊社ライブラリを使用したシステムからの移行 VND/VED-4131 と GPD-4101/4141 との比較> 項目 ボーレート設定 基準クロック設定 VND/VED-4131 なし (ボード上の DSW にて設定) - GPD-4101 /R4 ∼ /R136530 /C0 /C1 /C2 /C3 /C4 /C5 /C6 外部クロック 4.9152MHz 1.8432MHz 4.096MHz 8.0MHz 9.8304MHz 14.7456MHz GPD-4141 /R2 ∼ /R921600 /C1 /C2 /C3 /C4 /C5 /C6 /C7 14.7456MHz 1.8432MHz 4.096MHz 7.3728MHz 4.9152MHz 8.0MHz 12.288MHz VCD-4137 と GPD-4101/4141 との比較> 項目 ボーレート設定 基準クロック設定 VCD-4137 /R75 ∼ /R76800 /C0 外部クロック /C1 4.9152MHz /C2 1.8432MHz /C3 4.096MHz GPD-4101 /R4 ∼ /R136530 /C0 外部クロック /C1 4.9152MHz /C2 1.8432MHz /C3 4.096MHz /C4 8.0MHz /C5 9.8304MHz /C6 14.7456MHz GPD-4141 /R2 ∼ /R921600 /C1 14.7456MHz /C2 1.8432MHz /C3 4.096MHz /C4 7.3728MHz /C5 4.9152MHz /C6 8.0MHz /C7 12.288MHz VCD-4140 と GPD-4101 との比較> 項目 ボーレート設定 基準クロック設定 VCD-4140 /R75 ∼ /R76800 - GPD-4101 /R4 ∼ /R136530 /C0 外部クロック /C1 4.9152MHz /C2 1.8432MHz /C3 4.096MHz /C4 8.0MHz /C5 9.8304MHz /C6 14.7456MHz - VCD-4141 と GPD-4141 との比較> 項目 ボーレート設定 基準クロック設定 VCD-4141 /R75 ∼ /R230400 /C1 14.7456MHz /C2 1.8432MHz /C3 4.096MHz 受信 FIFO 割り込み設定 /L0 割り込みを使用しない /L1 1 バイト蓄積で発生 /L4 4 バイト蓄積で発生 /L8 8 バイト蓄積で発生 /L14 14 バイト蓄積で発生 - - © 2003, 2005 Interface Corporation. All rights reserved. 40 GPD-4141 /R2 ∼ /R921600 /C1 14.7456MHz /C2 1.8432MHz /C3 4.096MHz /C4 7.3728MHz /C5 4.9152MHz /C6 8.0MHz /C7 12.288MHz 指定は可能だが、 8 バイト固定 弊社ライブラリを使用したシステムからの移行 VCD-4201 と GPD-4101/4141 との比較> 項目 ボーレート設定 基準クロック設定 VCD-4201 /R75 ∼ /R19200 /CIN 内部クロック /COUT 外部クロック デリミタ設定 /Dn n=デリミタ GPD-4101 /R4 ∼ /R136530 /C0 外部クロック /C1 4.9152MHz /C2 1.8432MHz /C3 4.096MHz /C4 8.0MHz /C5 9.8304MHz /C6 14.7456MHz /SDn n=デリミタ GPD-4141 /R2 ∼ /R921600 /C1 14.7456MHz /C2 1.8432MHz /C3 4.096MHz /C4 7.3728MHz /C5 4.9152MHz /C6 8.0MHz /C7 12.288MHz /SDn n=デリミタ ※VCD-4201 では、初期化情報文字列を ComfzdOpenPort で指定します。 VCD-4205 と GPD-4101/4141 との比較> 項目 ボーレート設定 基準クロック設定 VCD-4205 /R75 ∼ /R38400 /CIN 内部クロック /COUT 外部クロック デリミタ設定 /Dn n=デリミタ GPD-4101 /R4 ∼ /R136530 /C0 外部クロック /C1 4.9152MHz /C2 1.8432MHz /C3 4.096MHz /C4 8.0MHz /C5 9.8304MHz /C6 14.7456MHz /SDn n=デリミタ ※VCD-4205 では、初期化情報文字列を ComnvdOpenPort で指定します。 © 2003, 2005 Interface Corporation. All rights reserved. 41 GPD-4141 /R2 ∼ /R921600 /C1 14.7456MHz /C2 1.8432MHz /C3 4.096MHz /C4 7.3728MHz /C5 4.9152MHz /C6 8.0MHz /C7 12.288MHz /SDn n=デリミタ 弊社ライブラリを使用したシステムからの移行 3.7 シリアル通信(LAP-B)用ライブラリからの移行 LAP-B 通信に対応した、弊社シリアル通信ボードに対応するライブラリソフトウェアには以下 のものがあります。 C(98)/ISA バス用 PCI/CompactPCI バス用 VCD-4115 / VCD-4215 GPD-4115 ここでは、LAP-B 通信に対応したシリアル通信ボード用の C(98)/ISA 拡張ボード用ライブラリか ら PCI/CompactPCI 拡張ボード用ライブラリに移植する際の注意点を列挙します。 3.7.1 関数 比較一覧 双方のライブラリの、関数の比較一覧を示します。 表 3-11 LAP-B 用ライブラリの新旧比較 機 能 ボード情報の定義 ボードを開放 プロトコルの初期化 プロトコルの終了処理 ポートの初期化情報取得 フレームの送信 受信フレーム数の所得 フレーム長の取得 バッファからフレームの取得 ステータスの取得 制御信号の状態変更 通信ヒストリの取得 割込みイベントマスクの設定 割込みイベントマスクの取得 割込みイベントのコールバック 関数の登録 コールバック関数の削除 VCD-4115 LapbnInit LapbnEnd LapbnOpenPort LapbnClosePort LapbnGetPortData LapbnSendData LapbnGetFrameCnt LapbnGetFrameLen LapbnReceiveData LapbnGetStatus LapbnControlPort LapbnGetHistory LapbnSetEventMask LapbnGetEventMask GPD-4115 LapbnInit LapbnEnd LapbnOpenPort LapbnClosePort LapbnGetPortData LapbnSendData LapbnGetFrameCnt LapbnGetFrameLen LapbnReceiveData LapbnGetStatus LapbnControlPort LapbnGetHistory LapbnSetEventMask LapbnGetEventMask LapbnSetEvent LapbnSetEvent LapbnKillEvent LapbnKillEvent ◎ ◎:完全互換 ○:ほぼ互換 機 能 ボード情報の定義 ボードを開放 プロトコルの初期化 プロトコルの終了処理 ポートの初期化情報取得 フレームの送信 受信フレーム数の所得 フレーム長の取得 バッファからフレームの取得 ステータスの取得 制御信号の状態変更 通信ヒストリの取得 VCD-4215 LapbnvdInit LapbnvdEnd LapbnvdOpenPort LapbnvdClosePort LapbnvdGetPortData LapbnvdSendData LapbnvdGetFrameCnt LapbnvdGetFrameLen LapbnvdReceiveData LapbnvdGetStatus LapbnvdControlPort LapbnvdGetHistory GPD-4115 互換性 LapbnInit ○ LapbnEnd ◎ LapbnOpenPort ◎ LapbnClosePort ◎ LapbnGetPortData ◎ LapbnSendData ◎ LapbnGetFrameCnt ◎ LapbnGetFrameLen ◎ LapbnReceiveData ◎ LapbnGetStatus ◎ LapbnControlPort ◎ LapbnGetHistory ◎ ◎:完全互換 ○:ほぼ互換 © 2003, 2005 Interface Corporation. All rights reserved. 42 互換性 ○ ◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎ 弊社ライブラリを使用したシステムからの移行 3.7.2 移行時の注意点 双方の関数名は、一部を除いて ほぼ同一です。 一部の関数は、ボードを特定する為の引数が追加されています。 ボード情報の定義関数(LapbnInit, LapbnvdInit) 関数宣言の比較> <GPD-4115> <VCD-4115> int LapbnInit( int maxport, unsigned int dpadr, unsigned int *ioadr, unsigned int *irqno, int timertype, unsigned int tadr, int Tirq ); int LapbnInit( /* /* /* /* /* /* /* 使用する最大ポート数 */ DPRAM アドレスのセグメント値 */ I/O ポートベースアドレス */ 割り込み番号 */ タイマの選択 */ タイマの I/O ポートアドレス */ タイマの割り込み番号 */ int Port, /* 使用するポート数 */ unsigned int *DeviceID, /* デバイス ID */ unsigned int *SubsystemID, /* サブシステム ID */ unsigned int *BoardID, /* ボード ID */ unsigned int *ChannelNumber /* チャンネル番号 */ ); <VCD-4215> int LapbnvdInit( int maxport, unsigned int dpadr, unsigned int ioadr, int timertype, unsigned int tadr, intTirq ); /* /* /* /* /* /* 使用する最大ポート数 */ DPRAM アドレスのセグメント値 */ I/O ポートベースアドレス */ タイマの選択 */ タイマの I/O ポートアドレス */ タイマの割り込み番号 */ VCD-4115/4215 では使用する拡張ボードを特定させる為、第 2∼4 引数にて DPRAM のセグメン トアドレス、I/O ポートアドレス、割り込み番号を指定する必要がありますが、GPD-4115 では 代わりに拡張ボードを特定するデバイス ID、サブシステム ID、ボード ID(第 2∼4 引数)を指定 します。 VCD-4115/4215 にあったタイマ関連の設定は、PCI/CompactPCI 拡張ボード自身にインターバル タイマが内蔵された為、削除されました。 移植例> AZI-4115 から PCI-4115, 4156 へ移行する例です。 2 つのポートを設定しています。 int unsigned int uIoAdr[0] uIrqNo[0] uIoAdr[1] uIrqNo[1] = = = = int unsigned int unsigned int uDeviceId[0] uSubsystemId[0] uBoardId[0] uChannelNum[0] uDeviceId[1] uSubsystemId[1] uBoardId[1] uChannelNum[1] nRet; uIoAdrs[2], uIrqNo[2]; 0x00D0; 3; 0x01D0; 5; 使わない指定。 nRet; uDeviceId[2], uSubSystemId[2], uBoardId[2]; uChannelNum[2]; = 4115; ポート 1 に、PCI-4115 の = 0x0001; = 0; チャンネル 1 を割り当てている。 = 1; = 4156; ポート 2 に、PCI-4156 の = 0x0101; = 1; チャンネル 1 を割り当てている。 = 1; nRet = LapbnInit( 2, uDeviceID, uSubsystemID, uBoardID, uChannelNum); nRet = LapbnInit(2 , 0xD000 , uIoAdrs, uIrqNo , 0 , 0 , 0); I/O ポートアドレス等を 指定する代わりに、 デバイス ID 等を指定。 © 2003, 2005 Interface Corporation. All rights reserved. 43 弊社ライブラリを使用したシステムからの移行 移植のポイントは、以下の通りです。 ・ 拡張ボードの I/O ポートアドレス等を直接指定からデバイス ID 等を指定に変更 ・ タイマ種別の指定は無い(拡張ボード内部のインターバルタイマが使用される) 受信クロックの設定(LapbnOpenPort, LapbnvdOpenPort) プロトコルの初期化を行う関数(LapbnOpenPort, LapbnvdOpenPort)では、オープンするポートの設 定を初期化用の構造体(LapbnPORTINITDATA, LapbnvdPORTINITDATA)にて行います。 この構造体中に、送受信クロックの設定を行うメンバ変数(ClockType)があります。 この内、C(98)/ISA 拡張ボードと PCI/CompactPCI 拡張ボードとでは、受信クロックの設定範囲が 異なります。 値 説明 10h 20h 30h 40h 50h RT 信号を受信クロックとする DPLL 回路より生成されるクロックを受信クロックとする ボーレート範囲に違いがある他は、上と同じ APLL 回路より生成されるクロックを受信クロックとする ボーレート範囲に違いがある他は、上と同じ VCD-4115 VCD-4215 ○ ○ ○ ○ ○ GPD-4115 ○ ○ ○ × × VCD-4115/4215 で APLL を使用している場合は、GPD-4115 では DPLL を使用するように変更し てください。 なお、C(98)/ISA 拡張ボードでは DPLL を使用した場合、設定可能なボーレートの最高速度が 500kbps でしたが、PCI/CompactPCI 拡張ボードでは 2Mbps(RS-232C 使用時は 1Mbps)まで設定可 能となっています。 © 2003, 2005 Interface Corporation. All rights reserved. 44 拡張ボードを直接制御したシステムからの移行 第4章 拡張ボードを直接制御したシステムからの移行 本章では、「1.3 システム移行のケース例」の「ケース 2 既存のシステムは、拡張ボードを直接 制御していた」で示した、C(98)/ISA 拡張ボードに対して直接制御している既存システムを、 PCI/CompactPCI 拡張ボードに変更する際の注意点などについて説明します。 4.1 移行の概要 システム移行時に問題となるであろう項目は、以下の通りです。 1. 使用する拡張ボードの選択 2. PCI/CompactPCI 拡張ボードに割り当てられたリソースを取得する 3. PCI/CompactPCI 拡張ボードに搭載されたメモリへのアクセス 4. 共有割り込み処理 「1.使用する拡張ボードの選択」については、 「2.3 使用する PCI/CompactPCI 拡張ボードの選択」 を参照してください。 次に、「2. PCI/CompactPCI 拡張ボードに割り当てられたリソースを取得する」と 「3. PCI/CompactPCI 拡張ボードに搭載されたメモリへのアクセス」、「4. 共有割り込み処理」 についてですが、これらは、弊社より提供している以下のサービスソフトウェアを使う事で移植 作業を効率的に行う事ができます。 表 4-1 サービスソフトウェアの一覧 問題事項 PCI/CompactPCI 拡張ボードに割 り当てられたリソースを取得した い PCI/CompactPCI 拡張ボードに搭 載されたメモリへのアクセスをし たい 共有割り込み処理をしたい 型式 BPD-0805 BPD-0806 BPD-0811 説明 DOS 用リソース取得ライブラリ PC DOS(MS-DOS)から、PCI/CompactPCI 拡張ボードのリ ソース割り当て情報を取得するためのライブラリです。 DOS 用 4G メモリアクセスツール PC DOS(MS-DOS)から、1MByte 以上のメモリ空間をア クセスするためのツールとライブラリです。 DOS 用割り込み登録ライブラリ PC DOS(MS-DOS)上で、割り込みチェイン処理を容易に 実現するためのライブラリです。 ★各種サービスソフトウェアの入手について 上表の各種サービスソフトウェアは、弊社 Web site より無償でダウンロードできます。 弊社 Web site:www.interface.co.jp © 2003, 2005 Interface Corporation. All rights reserved. 45 拡張ボードを直接制御したシステムからの移行 4.2 PCI/CompactPCI 拡張ボードに割り当てられたリソースを取得 する 何故、PCI/CompactPCI 拡張ボードに割り当てられたリソースを取得しなければならないか?に ついては、「2.1 PCI/CompactPCI 拡張ボードは、如何にしてリソースを設定するのか?」を参照 してください。 ここでは、PCI/CompactPCI 拡張ボードのリソースを取得する為に、「BPD-0805 DOS 用リソース 取得ライブラリ」を使用した例を紹介します。 BPD-0805 は、以下に示す関数を提供します。 関数名 PciGetConfigReg 機能 ベンダ ID とデバイス ID から、PCI/CompactPCI 拡張ボードに割り当てられた、 I/O ポートアドレス、メモリアドレス、割り込み番号を取得します。 ベンダ ID とデバイス ID、サブベンダ ID、サブシステム ID から、PCI/CompactPCI 拡張ボードに割り当てられた、I/O ポートアドレス、メモリアドレス、割り込み 番号ならびに、全コンフィギュレーションレジスタを取得します。 PciGetConfigRegEx 通常であれば、PciGetConfigReg 関数で十分な情報が得られます。プログラム側で PCI/CompactPCI 拡張ボードと CompactPCI 拡張ボードを区分けして認識したいとか、全コンフィギュレーション レジスタを取得したい場合に PciGetConfigRegEx 関数を使います。 以下に、システム内の PCI-2702C のリソース情報を取得する例を示します。 #include <stdio.h> #include <dos.h> #include "GETBAR.H" int main(void) { リソースを取得する PCI 拡張ボードの指定。 unsigned long ulBaseAdrs[6]; unsigned short uIoAdrs; char nIrqNo; int nRswNo; ここでは PCI-2702C を指定。 /* リソースの取得 */ if(PciGetConfigReg(1, 0x1147, 2702, ulBaseAdrs, &nIrqNo) <> 0){ printf(“fail get PCI resource¥n”); リソース取得に成功すると、 return –1; 値が格納される。 } uIoAdrs = (unsigned short)(ulBaseAdrs[0] & 0x3L); /* I/O ポートアドレス */ nRswNo = inp(uIoAdrs + 0xf) & 0x0f; printf("I/O ポートアドレス:%4x¥n", uIoAdrs); /* ボード識別用 RSW の値 */ printf("割り込み番号:%d¥n", nIrqNo); printf("ボード識別用 RSW:%x¥n", nRswNo); return 0; } ところで、システム内に PCI-2702C が複数枚 実装されている時、 どうすれば良いのでしょうか? 同一型式で複数枚の情報を取得するには、第 1 引数の値をインクリメントして取得します。 © 2003, 2005 Interface Corporation. All rights reserved. 46 拡張ボードを直接制御したシステムからの移行 以下に、修正したコードの例を示します。 #include <stdio.h> #include <dos.h> #include "GETBAR.H" int main(void) { unsigned long unsigned short char int ulBaseAdrs[6]; uIoAdrs; nIrqNo; nRswNo, nRet, i; 何枚目のリソースを取得するか、 この引数の値で指定する。 for(i = 1; ; i++){ /* リソースの取得 */ nRet = PciGetConfigReg(i, 0x1147, 2702, ulBaseAdrs, &nIrqNo); if(nRet == -3) break; if(nRet < 0){ printf(“fail get PCI resource¥n”); return –1; } uIoAdrs = (unsigned short)(ulBaseAdrs[0] & 0x3L); /* I/O ポートアドレス */ nRswNo = inp(uIoAdrs + 0xf) & 0x0f; /* ボード識別用 RSW の値 */ printf("%d 番目のリソース情報¥n", i); printf("I/O ポートアドレス:%4x¥n", uIoAdrs); printf("割り込み番号:%d¥n", nIrqNo); printf("ボード識別用 RSW:%x¥n", nRswNo); } return 0; } このコードは、コンピュータ内の全ての PCI-2702C のリソースを列挙します。 4.3 PCI/CompactPCI 拡張ボードに搭載されたメモリへのアクセス をする メモリの搭載された PCI/CompactPCI 拡張ボードのリソース情報を取得した時、メモリアドレス が 1Mbyte 以上のアドレス空間に設定される事に気付かれると思います。 PCI/CompactPCI 拡張ボードは、4Gbyte のメモリアドレス空間を持つ為 このように設定されるの ですが、通常の DOS アプリケーションで 1Mbyte 以上のメモリ空間にアクセスするのは少々手 間な作業を必要とします。 この問題に対処する為、弊社では 4Gbyte のメモリ空間に自由にアクセスできるサービスソフト ウェア「BPD-0806 DOS 用 4G メモリアクセスツール」を提供しております。 © 2003, 2005 Interface Corporation. All rights reserved. 47 拡張ボードを直接制御したシステムからの移行 パソコンのメモリ空間 BPD-0806 を使うことで、この FFFFFFFFh 空き領域 メモリへアクセスすることが可能に なります。 PCI 拡張ボードに 割り当てられる メモリ領域 通常の PC DOS(MS-DOS)の プログラムは、このメモリ領域より パソコン本体の 00100000h 上にアクセスするのは難しい。 内蔵メモリ 000FFFFFh 1MByte 00000000h 図 4-1 BPD-0806 により、上位のメモリにアクセスできる ここでは、「BPD-0806 DOS 用 4G メモリアクセスツール」を使い、PCI/CompactPCI 拡張ボード のメモリにアクセスする例を示します。 BPD-0806 には、FBIMEM4G.COM というツールと、4Gbyte メモリ空間へアクセスする補助関数 が用意されています。 FBIMEM4G.COM は、CPU の REAL モード時のセグメントリミットを 64Kbyte から 4Gbyte に拡 張する処理を行います。 その結果、32 ビットレジスタを使い、4Gbyte 空間へのアドレス参照を可能にします。 REAL モード時のセグメントリミットは 64Kbyte の為、このコードは アクセス <FBIMEM4G.COM 適用前> 例外を招きます。 MOV AX, 0000H MOV FS, AX MOV DWORD PTR FS:[00400000H], 12345678H セグメントリミットを 4Gbyte に拡張 <FBIMEM4G.COM 適用後> した為、このコードは実行できます。 MOV AX, 0000H MOV FS, AX MOV DWORD PTR FS:[00400000H], 12345678H なお、FBIMEM4G.COM がセグメントリミットを 4Gbyte に拡張するセグメントレジスタは、DS, ES,FS,GS レジスタです。 ★FBIMEM4G.COM の制限 FBIMEM4G.COM を実行する際、CPU を REAL モードにする必要があります。 仮想 86 モードでは動作しませんので ご注意ください。 © 2003, 2005 Interface Corporation. All rights reserved. 48 拡張ボードを直接制御したシステムからの移行 BPD-0806 は、FBIMEM4G.COM 実行後、4Gbyte のメモリ空間にアクセスする補助関数を用意し ております。 関数名 UioPeekByte UioPokeByte UioPeekWord UioPokeWord UioPeekDword UioPokeDword 機能 指定したメモリから 指定したメモリに、 指定したメモリから 指定したメモリに、 指定したメモリから 指定したメモリに、 1 バイト(8 ビット)データを読み込みます 1 バイト(8 ビット)データを書き込みます 1 ワード(16 ビット)データを読み込みます 1 ワード(16 ビット)データを書き込みます 1 ダブルワード(32 ビット)データを読み込みます 1 ダブルワード(32 ビット)データを書き込みます お客様は、これらの補助関数を用いてプログラムを行います。 以下に、PCI-4116 のメモリ領域の先頭 4Kbyte に FFh を書き込むコード例を示します。 #include #include #include #include <stdio.h> <dos.h> "GETBAR.H" “FBIUIO.H” int main(void) { unsigned long unsigned short char int ulBaseAdrs[6], ulMemAdrs; uIoAdrs; nIrqNo; i; /* リソースの取得 */ if(PciGetConfigReg(1, 0x1147, 4116, ulBaseAdrs, &nIrqNo) <> 0){ printf(“fail get PCI resource¥n”); return –1; } uIoAdrs = (unsigned short)(ulBaseAdrs[0] & 0x3L); /* I/O ポートアドレス */ ulMemAdrs = ulBaseAdrs[1] & 0xfL; /* メモリアドレス */ outp(uIoAdrs + 0, 0x2); for(i = 0; i < 4096; i++){ UioPokeByte(ulMemAdrs + i, 0xff); } return 0; } /* リセット発行 */ /* FFh でフィルする */ PCI-4116 の先頭 4Kbyte の メモリ領域を FFh でフィル。 4.4 共有割り込み処理をする 「1.2 ソフトウェア面から見た C(98)/ISA と PCI/CompactPCI の違い」で触れたように、 PCI/CompactPCI 拡張ボードは 1 つの割り込みを複数枚で共有する事ができます。 1 つの割り込みを共有できる事で、C(98)/ISA 拡張ボードを使用していた時に頭を悩ませていた、 割り込みリソースの不足という問題は解消されました。 ただし、ソフトウェア側で割り込みの共有処理を追加する必要がでてきます。 ここで、割り込み共有をする場合の問題を、もう少し詳細に解説します。 C(98)/ISA 拡張ボードでは 1 つの割り込みに対して、1 つの拡張ボードしか割り当てられません。 © 2003, 2005 Interface Corporation. All rights reserved. 49 拡張ボードを直接制御したシステムからの移行 この為、例えば IBX-2702C が IRQ3 の割り込みを使用するに設定し、実際に IRQ3 のハードウェ ア割り込みが発生した時、システムは IBX-2702C から割り込みが発生したと断定できます。 IBX-2702C IRQ3 IBX-xxxx IRQ9 IRQ3 の割り込みが発生 CPU IBX-xxxx IRQ11 割り込みを出したのは、 IBX-xxxx IRQ12 IBX-2702C と断定できる。 図 4-2 C(98)/ISA 拡張ボードは割り込みは 1 対 1 PCI/CompactPCI 拡張ボードでは 1 つの割り込みに対して、複数の拡張ボードを割り当てる事が できます。この為、例えば PCI-2104C と PCI-2702C が IRQ3 の割り込みを使用していた場合、実 際に IRQ3 のハードウェア割り込みが発生した時、システムは PCI-2104C か PCI-2702C のどちら が割り込みを発生させたのか わかりません。 PCI-2702C IRQ3 PCI-2104C IRQ3 の割り込みが発生 IRQ3 CPU PCI-xxxx IRQ11 割り込みを出したのは、 PCI-xxxx IRQ12 PCI-2104C か PCI-2702C の いずれか。 図 4-3 PCI/CompactPCI 拡張ボードは割り込みは 1 対 n 割り込みを発生させたボードを特定するには、もう少し情報が必要です。 その情報とは割り込みステータスです。PCI 拡張ボードが割り込みを発生した場合、その PCI/CompactPCI 拡張ボードは割り込みステータスに、自身が割り込みを発生した印を書き込み ます。ソフトウェアは この情報を得る事で、その PCI/CompactPCI 拡張ボードが割り込みを発生 したと断定する事ができます。 © 2003, 2005 Interface Corporation. All rights reserved. 50 拡張ボードを直接制御したシステムからの移行 PCI-2702C IRQ3 割り込みステータス:ON IRQ3 の割り込みが発生 CPU PCI-2104C IRQ3 割り込みステータス:OFF PCI-2702C の割り込みステー PCI-xxxx IRQ11 タスが ON になっているので、 PCI-2702C が割り込みを 出したと断定できる。 PCI-xxxx IRQ12 図 4-4 PCI/CompactPCI 拡張ボードは割り込みステータスでボードを特定 この問題に対処する為、弊社では割り込み処理を簡易に記述する為のサービスソフトウェア 「BPD-0811 PCI DOS 用割り込み登録ライブラリ」を提供しております。 BPD-0811 は割り込み発生時、ユーザが登録する関数を呼び出す機能を提供します。 以下に提供している関数を示します。 関数名 PciSetInterrupt PciKillInterrupt 機能 ユーザ割込み処理関数を登録します。 ユーザ割込み処理関数を削除します。 ここで、BPD-0811 付属のサンプルプログラムから、PCI-6103 でインターバルタイマの割り込み 回数をカウントするコード(smp フォルダの SMP6103.C)を説明します。 まず、コード全体を以下に示します。 List 4-1 SMP6103.C 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 /* ======================================================================== */ /* */ /* PCI-6103 MS-DOS用 インターバルタイマ 割り込みサンプルプログラム */ /* */ /* Copyright (C) 2001 Interface Corporation. */ /* */ /* ======================================================================== */ #include #include #include #include #include <stdio.h> <stdlib.h> <conio.h> <dos.h> "getbar.h" #include "pci_isr.h" unsigned short timer; /* ------------------------------------------------------------------------ */ /* PCI 割り込み処理ルーチン */ © 2003, 2005 Interface Corporation. All rights reserved. 51 拡張ボードを直接制御したシステムからの移行 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 /* ------------------------------------------------------------------------ */ int far user_func(int handle, short user1, long user2) { unsigned char stat; unsigned short port; port = user1; stat = inp(port + 0x02); if (stat & 0x10) { timer++; return 1; } return 0; // 割り込みステータスの確認 // 割り込み処理の正常終了 // 他のデバイスによる割り込み } /* ------------------------------------------------------------------------ */ /* メイン処理 */ /* ------------------------------------------------------------------------ */ void main(void) { unsigned long bar[6]; unsigned char irq; unsigned short handle, port; int r; r = PciGetConfigReg(1, 0x1147, 6103, bar, &irq); if (!r) { port = bar[0] & 0xfffc; printf("BAR0 = %04XH ¥n", port); printf("IRQ = %d ¥n", irq); // PCI リソースの取得 handle = PciSetInterrupt(irq, user_func, port, 0L); // 割り込み処理の登録 if (handle != outp(port outp(port outp(port outp(port outp(port 0xffff) + 0x04, + 0x05, + 0x06, + 0x03, + 0x07, { 0x00); 0x00); 0x01); 0x10); 0x02); // インターバルタイマの設定 // 割り込みマスクのオープン // インターバルタイマの開始 while (1) { printf("TIMER = %04XH¥r", timer); if (kbhit()) { getch(); printf("¥n"); break; } } outp(port + 0x07, 0x00); outp(port + 0x03, 0x00); // インターバルタイマの停止 // 割り込みマスクのクローズ PciKillInterrupt(handle); // 割り込み処理の削除 } } } © 2003, 2005 Interface Corporation. All rights reserved. 52 拡張ボードを直接制御したシステムからの移行 ソースコードの内、重要な個所は、22∼34 行目の割り込み処理ルーチンと、52 行目と 72 行目の 割り込み処理ルーチンの登録と削除呼び出しです。 52 行目の PciSetInterrupt 関数呼び出しは、割り込み番号とユーザ関数を指定して登録します。ラ イブラリは指定されたハードウェア割り込みを検出した時、登録されたユーザ関数を呼び出すよ うになります。 この関数は、同じ割り込み番号に対して複数のユーザ関数を登録する事ができます。 次に、22∼34 行目の割り込み処理ルーチンの内、28 から 33 行目の処理の流れに注目してくださ い。ここでは、PCI-6103 の割り込みステータスレジスタにアクセスし、この割り込みが PCI-6103 から発せられたものかチェックを行っています。 もし、この割り込みが PCI-6103 から発せられたと判れば 1 を返し(31 行目)、ライブラリに対し て この割り込み処理ルーチンが割り込み処理した事を伝えます。 PCI-6103 から発せられてなければ 0 を返し(33 行目)、この割り込み処理ルーチンは何もしなか った事を伝えます。 ライブラリは、ユーザ関数からの 1 か 0 のリターン値により、発生した割り込みの処理完了を知 る事ができます。 例えば、IRQ3 の割り込みに対して、A,B,C の 3 つの割り込み処理ルーチンが登録されたとし ます。IRQ3 の割り込みが発生した時、ライブラリは各々の割り込み処理ルーチンを順次呼び出 します。呼び出した割り込み処理ルーチンが 1 を返せば、ライブラリは割り込み処理が完了した と判断し、割り込みコントローラへの完了処理(EOI)を行って処理を終了します。 割り込み処理ルーチンが 0 を返せば、ライブラリは次に登録された割り込み処理ルーチンを、順 次呼び出します。 72 行目の PciKillInterrupt 関数呼び出しは、52 行目で登録したユーザ関数を登録削除します。登 録したら この関数で登録削除するようにして下さい。 © 2003, 2005 Interface Corporation. All rights reserved. 53 索引 [索引] B LapbnvdInit ......................................................................... 43 LapbnvdOpenPort ............................................................... 44 BPD-0805 ....................................................................... 5, 45 BPD-0806 ....................................................................... 5, 45 BPD-0811 ....................................................................... 5, 45 P PCI BIOS............................................................................... 8 PciGetConfigReg ................................................................ 46 PciGetConfigRegEx............................................................ 46 PciKillInterrupt ................................................................... 51 PciSetInterrupt..................................................................... 51 PCI コンフィギュレーションレジスタ ........................... 6 C CompactPCI........................................................................ 12 D DioDisableInterrupt ............................................................ 18 DioEnableInterrupt ....................................................... 17 DioSetup ............................................................................. 16 T F さ FBIMEM4G.COM ............................................................. 48 最大ボーレート ................................................................. 30 サブシステム ID.................................................................. 7 送受信バッファ ................................................................. 30 TUT-0017............................................................................... 5 G GPD-2000 ........................................................................... 15 GPD-3100 ........................................................................... 18 GPD-3100 WaveDriver ...................................................... 19 GPD-3300 ........................................................................... 22 GPD-3300 WaveDriver ...................................................... 23 GPD-3500 ........................................................................... 26 GPD-3500 WaveDriver ...................................................... 27 GPD-4101 ........................................................................... 30 GPD-4115 ........................................................................... 42 GPD-4141 ........................................................................... 30 た デバイス ID.......................................................................... 7 転送レート ........................................................................... 2 は 波形メモリ .............................................................20, 23, 28 ベンダ ID.............................................................................. 7 ボード識別用ロータリスイッチ....................................... 9 I わ INT ファンクション............................................................8 割り込みステータス ........................................................... 3 割り込みの共有 ................................................................... 3 割り込み番号 ....................................................................... 2 L LapbnInit............................................................................. 43 LapbnOpenPort................................................................... 44 © 2003, 2005 Interface Corporation. All rights reserved. 54 技術資料一覧 技術資料紹介 弊社では下記の技術資料を提供しております。 詳しくは、弊社 Web site(www.interface.co.jp)、または弊社窓口までお問い合わせ下さい。 カタログ PRM-0058 インタフェース総合カタログ チュートリアル TUT-0014 Microsoft Visual Studio .NET 移行ガイド TUT-0006 C(98)/ISA 製品から PCI/CompactPCI 製品への移行チュートリアル(DOS 編) TUT-0007 拡張ユニット チュートリアル(入門編) TUT-0008 拡張ユニット チュートリアル(問題解決編) TUT-0009 システムユニット チュートリアル TUT-0025 Visual Basic による DIO 入門書 TUT-0016 Visual Basic による PPI 入門書 TUT-0021 Visual Basic による AD 入門書 TUT-0023 Visual Basic による DA 入門書 TUT-0029 Visual Basic による HDLC 入門書 TUT-0027 Visual Basic による GP-IB 入門書 TUT-0033 Visual Basic による メモリンク 入門書 TUT-0031 Visual Basic による エンコーダカウンタ 入門書 TUT-0019 Visual Basic による モータコントローラ 入門書 TUT-0024 Visual C++ による DIO 入門書 TUT-0034 Visual C++ による PPI 入門書 TUT-0020 Visual C++ による AD 入門書 TUT-0022 Visual C++ による DA 入門書 TUT-0028 Visual C++ による HDLC 入門書 TUT-0026 Visual C++ による GP-IB 入門書 TUT-0032 Visual C++ による メモリンク 入門書 TUT-0030 Visual C++ による エンコーダカウンタ 入門書 TUT-0018 Visual C++ による モータコントローラ 入門書 TUT-0015 モーションコントロール チュートリアル TUT-0053 モーションコントロール チュートリアル(PCI/CompactPCI) TUT-0001 弊社バスブリッジを使用した PCI バスによる C バスボード制御 手順書 TUT-0002 弊社バスブリッジを使用した PCI バスによる ISA バスボード制御 手順書 TUT-0003 Linux による PCI/CompactPCI/CardBus 制御 入門書 TUT-0017 システム事例 メモリンクを使用した負荷分散システム チュートリアル TUT-0036 RTLinux による PCI/CompactPCI/CardBus 制御入門書(導入編) TUT-0037 RTLinux による HDLC ボード制御プログラミング チュートリアル TUT-0038 RTLinux による DIO ボード制御プログラミング チュートリアル TUT-0039 RTLinux による AD ボード制御プログラミング チュートリアル TUT-0043 RTLinux による調歩同期シリアル通信ボード制御プログラミング チュートリアル TUT-0040 RTLinux による DA ボード制御プログラミング チュートリアル TUT-0041 RTLinux による GP-IB ボード制御プログラミング チュートリアル TUT-0044 RTLinux によるメモリ共有インタフェースボード制御プログラミング チュートリアル TUT-0048 RTLinux によるカウンタボード制御プログラミング チュートリアル TUT-0050 RTLinux によるモーションコントローラボード制御プログラミング チュートリアル TUT-0054 CAN チュートリアル TUT-0055 チュートリアル 画像入力ボード 技術情報資料(セミナ資料) 初めての CAN インタフェース Linux, リアルタイム Linux 移植(SH-4)経験談及び当社の今後の取り組みについて Linux から PCI/CompactPCI ボードを制御する方法 ActiveX コントロールによるシステム組み込み技術 CompactPCI への置き換え+システム構築/移行ガイド MS-DOS から PCI/CompactPCI ボードを制御する方法 © 2003, 2005 Interface Corporation. All rights reserved. 55 参考文献 参考文献 大川 善邦 著:PCI バスによる I/O 制御(オーム社:1999 年) Edward Solari、George Willse 著:PCI ハードウェアとソフトウェア(インフォ・クリエイツ:1995 年) © 2003, 2005 Interface Corporation. All rights reserved. C(98)/ISA 製品から PCI/CompactPCI 製品への移行チュートリアル DOS 編 2005 年 3 月 Ver. 1.2 発行 発行所 〒732-0828 広島県広島市南区京橋町 10-21 TEL 082-262-7777 FAX 082-262-5066 ISD-7079-12 価格 ¥2,100 (定価 ¥2,000 + 消費税 ¥100) 本書の内容の一部または全部を、無断で転載することを禁止します。 本書の内容は、将来予告なく変更することがありますので、あらかじめご了承ください。 © 2003, 2005 Interface Corporation. All rights reserved. C(98)/ISA 製品から PCI/CompactPCI 製品への移行チュートリアル DOS 編 TUT-0006 Ver.1.2 www.interface.co.jp