PEX-H2994W Board Support Package
Installation on RedHawk
Release Notes Revision B
Sepetember 9, 2022

1. はじめに本書は、Concurrent Real Time Inc(CCRT)の RedHawk 上で動作する、インターフェース社製 PEXH2994W PCI Express ボードサポートパッケージ 用リリースノートです。

2. インストールのための条件
PEX-H2994W BSP をインストールするためには、以下の製品がインストールされている事が必要です。
• PEX-H2994W ボード• RedHawk 6.x 以上• Extmem version 8.3 以上
PEX-H2994Wは、PCI Expressに準拠した、フォトカプラ型高耐圧接点入力の64点デジタル信号入力と、高電流オープンコレクタシンク型出力64点のデジタル信号出力を持つデジタル入出力共用製品です。

3. インストール方法
PEX-H2994W BSP は、IRQ 共有するように設計されています。 もしこのデバイスの IRQ が、別のデバイスによって共有されている場合に、このドライバの性能は損なわれる場合があります。 そのため、可能な限り、このボードはその IRQ が他の装置と共有されていないＰＣＩスロットの中に実装する事が奨励されます。 “lspci -v”コマンドをシステムで種々の装置の IRQ を確認するために使用することができます。
PEX-H2994W BSP は、 CDROM/DVD 上の RPM/DEB フォーマットで供給され、別途 extmem デバイスドライバがインストールされていることが必要です。
以下に、インストールの手順を示します。:
x86_64 アーキテクチャの場合=== root ユーザで実行してください===# mount /dev/cdrom /mnt あるいは mount /dev/dvd /mnt
# cd /mnt
もし、extmem を同時にインストールする場合には、以下のコマンドを入力してください# rpm -ivh bin-extmem-X.Y_RHx.y-z.x86_64.rpm
PEXH2994W BSP 実行パッケージのインストール# rpm -ivh bin-pexh2994w -X.Y_RHx.y-ｚ.x86_64.rpm
もし必要であれば、続けて開発パッケージのインストールを行ってください# rpm -ivh dev-pexh2994w -X.Y_RHx.y-ｚ.x86_64.rpm# umount /mnt
amd64 アーキテクチャの場合=== root ユーザで実行してください===# mount /dev/cdrom /mnt あるいは mount /dev/dvd /mnt
# cd /mnt
もし、extmem を同時にインストールする場合には、以下のコマンドを入力してください# apt install ./bin-extmem-rhx.y_X.Y_amd64.deb
PEXH2994W BSP 実行パッケージのインストール# apt install ./bin-pexh2994w -rhx.y_X.Y_amd64.deb
もし必要であれば、続けて開発パッケージのインストールを行ってください# apt install ./dev-pexh2994w -rhx.y_X.Y_amd64.deb# umount /mnt
arm64 アーキテクチャの場合=== root ユーザで実行してください===# mount /dev/cdrom /mnt あるいは mount /dev/dvd /mnt

# cd /mnt
もし、extmem を同時にインストールする場合には、以下のコマンドを入力してください# apt install ./bin-extmem-rhx.y_X.Y_arm64.deb
PEXH2994W BSP 実行パッケージのインストール# apt install ./bin-pexh2994w -rhx.y_X.Y_arm64.deb
もし必要であれば、続けて開発パッケージのインストールを行ってください# apt install ./dev-pexh2994w -rhx.y_X.Y_arm64.deb# umount /mnt
(x.y は RedHawk のバージョン番号であり、 6.x,7.x または 8.x で、X.Y は、BSP のバージョン、z は、BSP のリリース番号を示し、予告なく変更することがあります。)
PEX-H2994W BSP パッケージは /usr/local/CNC/drivers/extmem/interfacePEX-H2994W ディレクトリにインストールされ、必要な場所に展開されます。

4. アンインストール方法
PEX-H2994W BSP パッケージは、以下のコマンドでアンインストールします。この作業により/usr/local/CNC/drivers/extmem/interfacePEX-H2994W ディレクトリは削除されます。
x86_64 アーキテクチャの場合=== root ユーザで実行してください===開発パッケージをインストールしていた場合には、# rpm -e dev-pexh2994w -X.Y_RHx.y-ｚ.x86_64 (開発パッケージの削除)# rpm -e bin-pexh2994w -X.Y_RHx.y-ｚ.x86_64 (実行パッケージの削除)
実行パッケージのみをインストールしていた場合には、# rpm -e bin-pexh2994w -X.Y_RHx.y-ｚ.x86_64 (実行パッケージの削除)
amd64 アーキテクチャの場合=== root ユーザで実行してください===開発パッケージをインストールしていた場合には、# apt purge dev-pexh2994w -rhx.y(開発パッケージの削除)# apt purge bin-pexh2994w -rhx.y(実行パッケージの削除)
実行パッケージのみをインストールしていた場合には、# apt purge bin-pexh2994w -rhx.y(実行パッケージの削除)
arm64 アーキテクチャの場合=== root ユーザで実行してください===開発パッケージをインストールしていた場合には、# apt purge dev-pexh2994w -rhx.y(開発パッケージの削除)# apt purge bin-pexh2994w -rhx.y(実行パッケージの削除)
実行パッケージのみをインストールしていた場合には、# apt purge bin-pexh2994w -rhx.y(実行パッケージの削除)

5. ライブラリマニュアル
ライブラリマニュアルは、オンラインで提供されます。
# man pexh2994w
pexh2994w(3) Library Functions Manual

pexh2994w(3)NAME
pexh2994w - external memory board support library
SYNOPSIS[ ボードの詳細は、各マニュアルを見てください ]DESCRIPTION
pexh2994w は、external memory ドライバを利用した pexh2994w ボードアクセスライブラリです。
#include <sys/pexh2994w.h>
gcc [options ...] file -lpexh2994w -lextmem ...
*************************************************************************************
PEXH2994W*************************************************************************************
割り込みハンドラの登録
int pexh2994w_setup_signal(
int fd,void (*interrupt_handler)(int, siginfo_t *, void *),int mask);
戻り値
エラーなら-1 成功なら 0
引数
fd ファイルディスクリプタ番号
void (*interrupt_handler)(int, siginfo_t *, void *) 割り込みハンドラ
mask 割り込みを許可するマスク値
デバイスの非初期化処理
int pexh2994w_reset(int fd);
int pexh2994w_uninit(int fd);
戻り値
エラーなら-1 成功なら 0
引数
fd ファイルディスクリプタ番号
２つの関数は同じ処理、全ての制御レジスタに 0 値を設定する。
デバイスの初期化処理
int pexh2994w_init(int fd,int option);
戻り値
エラーなら-1 成功なら 0
引数
fd ファイルディスクリプタ番号

option １を指定すると以下の情報が表示される
BAR0 I/O Region addr 0x00004480 offset 0x00000000 16 bytes Switch 1
pexh2994w の出力を発生させる
int pexh2994w_raise_signal(int fd,
int ack,
int out1,int out2);
戻り値エラーなら-1 成功なら 0引数
fd ファイルディスクリプタ番号
ack,out1,out2 割り込みの種類 以下のいずれかを指定する
ack1
PEXH2994W_PULS_ACK1_NOACTION
なにもしないPEXH2994W_PULS_ACK1_LOW_HIGH
ACK1 端子をクリア Low->HighPEXH2994W_PULS_ACK1_HIGH_LOW
ACK1 端子をクリア High->Low
out1
PEXH2994W_PULS_OUT1_NOACTION
なにもしないPEXH2994W_PULS_OUT1_LEVEL_HIGH High レベル出力
PEXH2994W_PULS_OUT1_LEVEL_LOW
Low レベル出力
PEXH2994W_PULS_OUT1_PULSE_LOW
Low パルスを出力
out2
PEXH2994W_PULS_OUT2_NOACTION
なにもしないPEXH2994W_PULS_OUT2_LEVEL_HIGH High レベル出力
PEXH2994W_PULS_OUT2_LEVEL_LOW
Low レベル出力
PEXH2994W_PULS_OUT2_PULSE_LOW
Low パルスを出力割り込みサービス関数 割り込んだ際の割り込み要因レジスタ(オフセット 0x0c)の値を戻す
int pexh2994w_intr_service(int fd,unsigned int *iflag,int *pending);
戻り値
エラーなら-1 成功なら 0
引数
fd ファイルディスクリプタ番号
iflag 値を戻す変数
pending 保留されている割り込みの数を戻す変数
割り込みを禁止する
int pexh2994w_disable_intrrupt(int fd,int mask);
戻り値
エラーなら-1 成功なら 0
引数
fd ファイルディスクリプタ番号

mask 割り込みを禁止するビットマスク 以下のいずれかを指定する
PEXH2994W_IMASK_STB1
STB1 からの入力信号
PEXH2994W_IMASK_IRIN1 IR.IN1 からの入力信号
PEXH2994W_IMASK_IRIN2 IR.IN2 からの入力信号
PEXH2994W_IMASK_TIMER タイマー割り込みPEXH2994W_IMASK_RESET リセット割り込み割り込みを許可する
int pexh2994w_enable_intrrupt(int fd,int mask);
戻り値
エラーなら-1 成功なら 0
引数
fd ファイルディスクリプタ番号
mask 割り込みを禁止するビットマスク 以下のいずれかを指定する
PEXH2994W_IMASK_STB1
STB1 からの入力信号
PEXH2994W_IMASK_IRIN1 IR.IN1 からの入力信号
PEXH2994W_IMASK_IRIN2 IR.IN2 からの入力信号
PEXH2994W_IMASK_TIMER タイマー割り込みPEXH2994W_IMASK_RESET リセット割り込み
PEXH2994W_IMASK_ALL
上記のすべてインターバルタイマーをセットする
int pexh2994w_set_interval_timer(int fd,unsigned int base,unsigned int div);
戻り値
エラーなら-1 成功なら 0
引数
fd ファイルディスクリプタ番号
base ベースクロック値 以下のいずれかを指定する
PEXH2994W_TIMER_BASE_STOP
停止
PEXH2994W_TIMER_BASE_010USEC
10 マイクロ秒
PEXH2994W_TIMER_BASE_100USEC
100 マイクロ秒
PEXH2994W_TIMER_BASE_001MSEC
1 ミリ秒
PEXH2994W_TIMER_BASE_010MSEC
10 ミリ秒
PEXH2994W_TIMER_BASE_100MSEC
100 ミリ秒
div ベースクロックを分周する値 カウントダウンし 0 の時割り込みが発生する
最大１５分周しかできない
インターバルタイマーの現在値を読み出す
int pexh2994w_get_interval_timer(int fd,unsigned int *count);
戻り値
エラーなら-1 成功なら 0
引数
fd ファイルディスクリプタ番号
count 値を読み出す変数へのポインタ
汎用関数 オフセット値を指定してレジスタの値を読み出す
int pexh2994w_get_ioport(int fd,int offset,unsigned int *value);
戻り値
エラーなら-1 成功なら 0
引数
fd
ファイルディスクリプタ番号

offset レジスタオフセット
value 値を読み出す変数へのポインタ
汎用関数 オフセット値を指定してレジスタに値を書き出す
int pexh2994w_set_ioport(int fd,int offset,unsigned int *value);
戻り値
エラーなら-1 成功なら 0
引数
fd ファイルディスクリプタ番号
offset レジスタオフセット
value 値を出す変数へのポインタ
チャネルを指定して入力データを読み出す
int pexh2994w_read_data(int fd,int ch,unsigned char *data);
戻り値
エラーなら-1 成功なら 0
引数
fd ファイルディスクリプタ番号ch チャンネル
data 値を出す変数へのポインタ
すべてのチャネルの入力データを読み出す
int pexh2994w_read_data_all(int fd,unsigned char *data);
戻り値
エラーなら-1 成功なら 0
引数
fd ファイルディスクリプタ番号
data 値を出す配列変数へのポインタ
pexh2994w.3.UTF8
使用例
int pexh2994w_write_data(int fd,unsigned long int ch,unsigned char *data)
戻り値
エラーなら-1 成功なら 0
引数
fd ファイルディスクリプタ番号ch チャンネル
data 出力変数へのポインタ

すべてのチャネルのデータを出力する
int pexh2994w_write_data_all(int fd,unsigned char *data)
戻り値
エラーなら-1 成功なら 0
引数
fd ファイルディスクリプタ番号
data 出力配列変数へのポインタ
DIP スイッチの読み込み
int pexh2994w_get_sw(int fd,unsigned long int *data);
戻り値
エラーなら-1 成功なら 0
引数fd ファイルディスクリプタ番号
data 出力変数へのポインタ************************************************************************//**//* init.c -- PEX-H2994W*//**//************************************************************************/#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <errno.h>#include <memory.h>#include <sys/mman.h>#include <sys/param.h>#include <sys/file.h>#include <sys/types.h>#include <sys/extmem.h>#include <signal.h>#include <stdlib.h>#include <sys/libinterface.h>int
main(argc, argv)
int argc;
char **argv;
{
int
fd;
char devname[1024];
int mem_size;
if ( argc < 2 ) {strcpy(devname,"/dev/pexh2994w/0");} else {strcpy(devname,argv[1]);}if ((fd = open(devname,O_RDWR)) == -1){
fprintf(stderr,"Device not found %s(%s)0,devname,strerror(errno));exit(0);}
printf("%s ",devname);if (pexh2994w_init(fd,1)<0){
fprintf(stderr,"Device initialize error %s(%s)0,devname,strerror(errno));exit(0);}if (pexh2994w_uninit(fd)<0){
fprintf(stderr,"%s0,strerror(errno));}close(fd);}
SEE ALSO/usr/local/CNC/drivers/extmem/interface/pexh2994w 下のプログラム
AUTHORSCopyright (C) 1995-2019 Concurrent Real Time Inc.
20 Jul 2019

pexh2994w(3)