PEX-224140 Board Support Package Installation on RedHawk Release Notes August 08 2016
1. はじめに 本 書 は Concurrent Computer Corporation(CCUR)の RedHawk 上 で 動 作 する インターフェース 社 製 PEX- 224140 PCI Express ボードサポートパッケージ 用 リリースノートです 2. インストールのための 条 件 PEX- 224140 BSP をインストールするためには 以 下 の 製 品 がインストールされている 事 が 必 要 です PEX- 224140 ボード RedHawk 6.x 以 上 Extmem version 8.3 以 上 PEX-224140は 32 点 フォトカプラ 型 高 耐 圧 接 点 入 力 (シンク 型 出 力 対 応 )を 持 つ PCI Expressデジ タル 入 力 製 品 です 3. インストール 方 法 PEX-224140 BSP は IRQ 共 有 するように 設 計 されています もしこのデバイスの IRQ が 別 のデバイスに よって 共 有 されている 場 合 に このドライバの 性 能 は 損 なわれる 場 合 があります そのため 可 能 な 限 り このボ ードはその IRQ が 他 の 装 置 と 共 有 されていないPCIスロットの 中 に 実 装 する 事 が 奨 励 されます lspci -v コマ ンドをシステムで 種 々の 装 置 の IRQ を 確 認 するために 使 用 することができます PEX-224140 BSP は CDROM/DVD 上 の RPM フォーマットで 供 給 され 別 途 extmem デバイスドライバが インストールされていることが 必 要 です 以 下 に インストールの 手 順 を 示 します : === as root ユーザで 実 行 してください=== # mount /dev/cdrom /mnt あるいは mount /dev/dvd /mnt # cd /mnt もし extmem を 同 時 にインストールする 場 合 には 以 下 のコマンドを 入 力 してください # rpm -ivh bin-extmem-x.y_rhx.y-z.x86_64.rpm PEX-224140BSP 実 行 パッケージのインストール # rpm -ivh bin-pex224140-x.y_rhx.y-z.x86_64.rpm もし 必 要 であれば 続 けて 開 発 パッケージのインストールを 行 ってください # rpm -ivh dev- pex224140-x.y_rhx.y-z.x86_64.rpm # umount /mnt (x.y は RedHawk のバージョン 番 号 であり 6.0,6.3,6.5,7.0 または 7.2 で X.Y は BSP のバージョン z は BSP のリリース 番 号 を 示 し 予 告 なく 変 更 することがあります ) PEX-224140 BSP パッケージは /usr/local/cnc/drivers/extmem/interface/ pex224140 ディレクトリにイ ンストールされ 必 要 な 場 所 に 展 開 されます 4. アンインストール 方 法 PEX-224140 BSP パッケージは 以 下 のコマンドでアンインストールします この 作 業 により /usr/local/cnc/drivers/extmem/interface/ pex224140 ディレクトリは 削 除 されます === as root ユーザで 実 行 してください=== 開 発 パッケージをインストールしていた 場 合 には # rpm -e rpm -ivh dev- pex224140-x.y_rhx.y-z.x86_64 ( 開 発 パッケージの 削 除 ) # rpm -e bin-pex224140-x.y_rhx.y-z.x86_64 ( 実 行 パッケージの 削 除 ) 実 行 パッケージのみをインストールしていた 場 合 には
# rpm -e bin-pex224140-x.y_rhx.y-z.x86_64 ( 実 行 パッケージの 削 除 ) 5. ライブラリマニュアル ライブラリマニュアルは オンラインで 提 供 されます # man pex224140pex224140(3) pex224140(3) NAME pex224140 - external memory board support library SYNOPSIS [ ボードの 詳 細 は PEX224140 マニュアルを 見 てください ] DESCRIPTION pex224140 は external memory ドライバを 利 用 した pex224140 ボードアクセス ライブラリです 本 ボードのレジスタは メモリマップタイプであるため ユーザ 空 間 からで も アクセス 可 能 です 一 般 的 にユーザ 空 間 からのアクセスは 高 速 で 各 関 数 の 末 尾 が_mmap である 場 合 ユーザ 空 間 からレジスタア>クセスします しかし 割 り 込 みを 扱 う 関 数 は カーネル 空 間 からしかアクセス 出 来 ないた め ioctl() を 使 いカーネル 空 間 で BUS WINDOW モードプログラムでレジスタア クセスします #include <sys/pex224140.h> gcc [options...] file -lpex224140 -lextmem... OPEN/CLOSE/MMAP PEX224140 は 通 常 のデバイスファイルと 同 様 に open/close 可 能 です デバ イ ス は 実 使 用 の 前 に 必 ずユーザーが 初 期 化 する 必 要 があります ディフォルト では 非 共 有 モードですが IOCTL_EXTMEM_SHARED を 発 行 すると 複 数 のユーザ で デバイスを 共 有 できます 但 し レジスタなどの 整 合 性 の 責 任 はユーザに 任 されます デバイスドライバでは 最 初 に open したプロセスが 最 後 に close するこ と を 仮 定 しています 典 型 的 なレジスタ 初 期 化 の 手 続 きは ライブラリとして 提 供 されているため プログラムテンプレートを 使 用 します ボードへの 割 り 込 みは アクセスライブラリによって extmem デバイスドライ バ に 登 録 された 割 り 込 み 手 続 きによって 処 理 されます 加 えて 必 要 であれば 以 下 の 例 のように(SIGIO)シグナルハンドラを 使 用 して 追 加 の 処 理 を 行 うことができ ます> アクセスライブラリでは 以 下 の 場 合 に 割 り 込 みレジスタをアクセスし ます (1) pex224140_init(), pex224140_reset(), pex224140_uninit(), pex224140_enable_intrrupt(), など 関 数 呼 び 出 し 時 (2) 実 際 の 割 り 込 みが 発 生 した 時 オ フセット 0x0C(INTR)を 読 み 込 み ON になっているビットをクリアす る この 値 は pex224140_intr_service() 関 数 で 読 み 出 すことができ ま す た だし 関 数 を 呼 び 出 す 前 に 連 続 して 割 り 込 みが 発 生 した 場 合 には 値 は 上 書 きされます また 値 が 上 書 きされ た 場 合 に は pex224140_intr_service() 関 数
の pendig 値 で 検 出 できます (3) アプリケーションプログラムがデバイスを close()した 時 あるいは 異 常 終 了 したとき ************************************************************************************* PEX224140 ************************************************************************************* 割 り 込 みハンドラの 登 録 int pex224140_setup_signal ( int fd, void (*interrupt_handler)(int, siginfo_t *, void *), int mask); void (*interrupt_handler)(int, siginfo_t *, void *) 割 り 込 み ハンドラ mask 割 り 込 みを 許 可 するマスク 値 デバイスの 非 初 期 化 処 理 int pex224140_reset(int fd); int pex224140_reset_mmap(pex224140r *dev); int pex224140_uninit(int fd,pex224140r *dev); デバイスの 初 期 化 処 理 int pex224140_init(int fd,pex224140r **dev, int *dev_size, int option); option 1を 指 定 すると 以 下 の 情 報 が 表 示 される が 返 される このポインタを 利 用 すると 高 速 にアクセスすることができる dev_size pex224140 のデバイスメモリのサイズが 返 される(4096) BAR0 MEM Region addr 0xebfff000 offset 0x00000000 4096 bytes Switch 0 pex224140 の 出 力 を 発 生 させる int pex224140_raise_signal ( int fd, int ack, int out1); int pex224140_raise_signal_mmap(pex224140r *dev,int ack,int out1); ack,out1,out2 割 り 込 みの 種 類 以 下 のいずれかを 指 定 する ack1 PEX224140_PULS_ACK1_NOACTION なにもしない PEX224140_PULS_ACK1_LOW_HIGH ACK1 端 子 を ク リ ア Low->High PEX224140_PULS_ACK1_HIGH_LOW ACK1 端 子 を クリア
High->Low out1 PEX224140_PULS_OUT1_NOACTION なにもしない PEX224140_PULS_OUT1_LEVEL_HIGH High レベル 出 力 PEX224140_PULS_OUT1_LEVEL_LOW Low レベル 出 力 PEX224140_PULS_OUT1_PULSE_LOW Low パルスを 出 力 割 り 込 みサービス 関 数 割 り 込 んだ 際 の 割 り 込 み 要 因 レジスタ(オフセット 0x0c) の 値 を 戻 す int pex224140_intr_service ( int fd, unsigned int *iflag, int *pending); iflag 値 を 戻 す 変 数 pending 保 留 されている 割 り 込 みの 数 を 戻 す 変 数 割 り 込 みを 禁 止 する int pex224140_disable_intrrupt ( int fd, unsigned long int mask); int pex224140_disable_intrrupt_mmap(pex224140r *dev, unsigned long int mask); mask 割 り 込 みを 禁 止 するビットマスク 以 下 のいずれかを 指 定 する PEX224140_IMASK_STB1 STB1 からの 入 力 信 号 PEX224140_IMASK_IN1 IN1 からの 入 力 信 号 PEX224140_IMASK_IN2 IN2 からの 入 力 信 号 PEX224140_IMASK_IN3 IN3 からの 入 力 信 号 PEX224140_IMASK_IN4 IN4 からの 入 力 信 号 PEX224140_IMASK_TIMER タイマー 割 り 込 み PEX224140_IMASK_RESET リセット 割 り 込 み PEX224140_IMASK_ALL 上 記 のすべて 割 り 込 みを 許 可 する int pex224140_enable_intrrupt ( int fd, unsigned long int mask); int pex224140_enable_intrrupt_mmap(pex224140r *dev,unsigned long int mask); mask 割 り 込 みを 禁 止 するビットマスク 以 下 のいずれかを 指 定 する PEX224140_IMASK_STB1 STB1 からの 入 力 信 号 PEX224140_IMASK_IN1 IN1 からの 入 力 信 号 PEX224140_IMASK_IN2 IN2 からの 入 力 信 号 PEX224140_IMASK_IN3 IN3 からの 入 力 信 号 PEX224140_IMASK_IN4 IN4 からの 入 力 信 号 PEX224140_IMASK_TIMER タイマー 割 り 込 み PEX224140_IMASK_RESET リセット 割 り 込 み
PEX224140_IMASK_ALL 上 記 のすべて インターバルタイマーをセットする int pex224140_set_interval_timer(int fd,unsigned unsigned long int base,unsigned unsigned long int div); int pex224140_set_interval_timer_mmap(pex224140r *dev,unsigned long int base,unsigned long int div); base ベースクロック 値 以 下 のいずれかを 指 定 する PEX224140_TIMER_BASE_STOP 停 止 PEX224140_TIMER_BASE_010USEC 10 マイクロ 秒 PEX224140_TIMER_BASE_100USEC 100 マイクロ 秒 PEX224140_TIMER_BASE_001MSEC 1 ミリ 秒 PEX224140_TIMER_BASE_010MSEC 10 ミリ 秒 PEX224140_TIMER_BASE_100MSEC 100 ミリ 秒 div ベースクロックを 分 周 する 値 カウントダウンし 0 の 時 割 り 込 みが 発 生 する 最 大 15 分 周 しかできない インターバルタイマーの 現 在 値 を 読 み 出 す int pex224140_get_interval_timer(int fd,unsigned long int *count); int pex224140_get_interval_timer_mmap(pex224140r *dev,unsigned long int *count); count 値 を 読 み 出 す 変 数 へのポインタ 汎 用 関 数 オフセット 値 を 指 定 してレジスタの 値 を 読 み 出 す int pex224140_get_ioport(int fd,int offset,unsigned long int *value); int pex224140_get_mmap(pex224140r *dev,int offset,unsigned long int *value); offset レジスタオフセット value 値 を 読 み 出 す 変 数 へのポインタ 汎 用 関 数 オフセット 値 を 指 定 してレジスタに 値 を 書 き 出 す int pex224140_set_ioport(int fd,int offset,unsigned long int *value); int pex224140_set_mmap(pex224140r *dev,int offset,unsigned long int *value);
offset レジスタオフセット value 値 を 出 す 変 数 へのポインタ チャネルを 指 定 して 入 力 データを 読 み 出 す int pex224140_read_data(int fd,int ch,unsigned char *data); int pex224140_read_data_mmap(pex224140r *dev,int ch,unsigned char *data); ch チャンネル(0-5) data 値 を 出 す 変 数 へのポインタ すべてのチャネルの 入 力 データを 読 み 出 す int pex224140_read_data_all(int fd,unsigned char *data); int pex224140_read_data_all_mmap(pex224140r *dev,unsigned char *data); data 値 を 出 す 配 列 変 数 へのポインタ DIP スイッチの 読 み 込 み int pex224140_get_sw(int fd,unsigned long int *data); data 出 力 変 数 へのポインタ SEE ALSO /usr/local/cnc/drivers/extmem/interface/pex224140 下 のプログラム AUTHORS Copyright (C) 1995-2016 Concurrent Computer Corp. 08 Aug 2016 pex224140(3)