PEX-H285011 Board Support Package Installation on RedHawk Release Notes April 28 2016
1. はじめに 本 書 は Concurrent Computer Corporation(CCUR)の RedHawk 上 で 動 作 する インターフェース 社 製 PEX- H285011 PCI Express ボードサポートパッケージ 用 リリースノートです 2. インストールのための 条 件 PEX- H285011 BSP をインストールするためには 以 下 の 製 品 がインストールされている 事 が 必 要 です PEX- H285011 ボード RedHawk 6.x 以 上 Extmem version 8.3 以 上 PEX-H285011は PCI Expressに 準 拠 した シンク 型 出 力 対 応 電 流 駆 動 フォトカプラ 入 力 の64 点 デジタル 信 号 入 力 と 高 電 流 オープンコレクタシンク 型 出 力 64 点 のデジタル 信 号 出 力 を 持 つデジタル 入 出 力 製 品 です ( 注 意 : 本 ボードは1ボードで2つの 論 理 デバイスが 存 在 し 偶 数 は 入 力 奇 数 は 出 力 チャンネルになります ) 3. インストール 方 法 PEX-H285011 BSP は IRQ 共 有 するように 設 計 されています もしこのデバイスの IRQ が 別 のデバイスに よって 共 有 されている 場 合 に このドライバの 性 能 は 損 なわれる 場 合 があります そのため 可 能 な 限 り このボ ードはその IRQ が 他 の 装 置 と 共 有 されていないPCIスロットの 中 に 実 装 する 事 が 奨 励 されます lspci -v コマ ンドをシステムで 種 々の 装 置 の IRQ を 確 認 するために 使 用 することができます PEX-H285011 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-H285011BSP 実 行 パッケージのインストール # rpm -ivh bin-pexh285011-x.y_rhx.y-z.x86_64.rpm もし 必 要 であれば 続 けて 開 発 パッケージのインストールを 行 ってください # rpm -ivh dev- pexh285011-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-H285011 BSP パッケージは /usr/local/cnc/drivers/extmem/interface/ pexh285011 ディレクトリに インストールされ 必 要 な 場 所 に 展 開 されます 4. アンインストール 方 法 PEX-H285011 BSP パッケージは 以 下 のコマンドでアンインストールします この 作 業 により /usr/local/cnc/drivers/extmem/interface/pexh285011 ディレクトリは 削 除 されます === as root ユーザで 実 行 してください=== 開 発 パッケージをインストールしていた 場 合 には # rpm -e rpm -ivh dev- pexh285011-x.y_rhx.y-z.x86_64 ( 開 発 パッケージの 削 除 ) # rpm -e bin-pexh285011-x.y_rhx.y-z.x86_64 ( 実 行 パッケージの 削 除 ) 実 行 パッケージのみをインストールしていた 場 合 には
# rpm -e bin-pexh285011-x.y_rhx.y-z.x86_64 ( 実 行 パッケージの 削 除 ) 5. ライブラリマニュアル ライブラリマニュアルは オンラインで 提 供 されます # man pexh285011 pexh285011(3) pexh285011(3) NAME pexh285011 - external memory device access library SYNOPSIS [ ボードの 詳 細 は 各 マニュアルを 見 てください ] DESCRIPTION pexh285011 は external memory ドライバを 利 用 した pexh285011 ボードアクセ スライブラリです #include <sys/pexh285011.h> gcc [options...] file -lpexh285011 -lextmem... OPEN/CLOSE/MMAP PEXH285011 は 通 常 のデバイスファイルと 同 様 に open/close 可 能 です デバイ ス は 実 使 用 の 前 に 必 ずユーザーが 初 期 化 する 必 要 があります ディフォルト では 非 共 有 モードですが IOCTL_EXTMEM_SHARED を 発 行 すると 複 数 のユーザ で デバイスを 共 有 できます 但 し レジスタなどの 整 合 性 の 責 任 はユーザに 任 されます デバイスドライバでは 最 初 に open したプロセスが 最 後 に close するこ と を 仮 定 しています 典 型 的 なレジスタ 初 期 化 の 手 続 きは ライブラリとして 提 供 されているため プログラムテンプレートを 使 用 します 注 意 : 本 ボードは 一 つの 物 理 デバイスで 二 つの 独 立 した 論 理 デバイス( 入 力 と 出 力 )を 構 成 します 論 理 デバイスは サブシステム ID+サブベンダーID で 区 別 することができます 入 力 :0x2D0B1147 出 力 :0x2D8B1147 サブシステム ID は 以 下 の API で 取 得 できます extmem_device_info_t device_info; ioctl(fd,ioctl_extmem_get_device_info,&device_info); if (device_info.subsys_id==0x2d0b1147) { printf("input Board\n"); } if (device_info.subsys_id==0x2d8b1147) { printf("output Board\n"); } ボードへの 割 り 込 みは アクセスライブラリによって extmem デバイスドライ バ に 登 録 された 割 り 込 み 手 続 きによって 処 理 されます 加 えて 必 要 であれば 以 下 の 例 のように(SIGIO)シグナルハンドラを 使 用 して 追 加 の 処 理 を 行 うことができ ます アクセスライブラリでは 以 下 の 場 合 に 割 り 込 みレジスタをアクセスし
ます (1) pexh285011_init(), pexh285011_reset(), pexh285011_uninit(), pexh285011_enable_intrrupt(), など 関 数 呼 び 出 し 時 (2) 実 際 の 割 り 込 みが 発 生 した 時 オ フセット 0x0C(INTR)を 読 み 込 み ON になっているビットをクリアする この 値 は pexh285011_intr_service() 関 数 で 読 み 出 すことができます た だし 関 数 を 呼 び 出 す 前 に 連 続 して 割 り 込 みが 発 生 した 場 合 には 値 は 上 書 きされます また 値 が 上 書 きされた 場 合 に は pexh285011_intr_service() 関 数 の pendig 値 で 検 出 できます (3) アプリケーションプログラムがデバイスを close()した 時 あるいは 異 常 終 了 したとき ************************************************************************************* PEXH285011 ************************************************************************************* DIP スイッチの 読 み 込 み int pexh285011_get_sw(int fd,unsigned long int *data); data 出 力 変 数 へのポインタ 割 り 込 みハンドラの 登 録 void (*interrupt_hadler)( int, siginfo_t *, void *) 割 り 込 みハンドラ mask 割 り 込 みを 許 可 するマスク 値 デバイスの 非 初 期 化 処 理 int pexh285011_reset(int fd); int pexh285011_reset_mmap(pexh285011r *dev); int pexh285011_uninit(int fd,pexh285011r *dev); デバイスの 初 期 化 処 理 int pexh285011_init(int fd,pexh285011r **dev, int *dev_size, int option); option 1を 指 定 すると 以 下 の 情 報 が 表 示 される が 返 される このポインタを 利 用 すると 高 速 にアクセスすることができる dev_size pexh285011 のデバイスメモリのサイズが 返 される(4096) BAR0 MEM Region addr 0xebfff000 offset 0x00000000 4096 bytes Switch 0 Input Board または BAR0 MEM Region addr 0xebfff000 offset 0x00000000 4096 bytes Switch 0 Output Board
割 り 込 みサービス 関 数 割 り 込 んだ 際 の 割 り 込 み 要 因 レジスタ(オフセット 0x0c) の 値 を 戻 す int pexh285011_intr_service ( int fd, unsigned int *iflag, int *pending); iflag 値 を 戻 す 変 数 pending 保 留 されている 割 り 込 みの 数 を 戻 す 変 数 割 り 込 みを 禁 止 する int pexh285011_disable_intrrupt ( int fd, unsigned long int mask); int pexh285011_disable_intrrupt_mmap(pexh285011r *dev,unsigned long int mask); mask 割 り 込 みを 禁 止 するビットマスク 以 下 のいずれかを 指 定 する PEXH285011_IMASK_SIG1 IN1 からの 入 力 信 号 PEXH285011_IMASK_SIG2 IN2 からの 入 力 信 号 PEXH285011_IMASK_SIG3 IN3 からの 入 力 信 号 PEXH285011_IMASK_SIG4 IN4 からの 入 力 信 号 PEXH285011_IMASK_TIMER タイマー 割 り 込 み PEXH285011_IMASK_RESET リセット 割 り 込 み PEXH285011_IMASK_ALL 上 記 のすべて 割 り 込 みを 許 可 する int pexh285011_enable_intrrupt ( int fd, unsigned long int mask); int pexh285011_enable_intrrupt_mmap(pexh285011r *dev,unsigned long int mask); mask 割 り 込 みを 禁 止 するビットマスク 以 下 のいずれかを 指 定 する PEXH285011_IMASK_SIG1 IN1 からの 入 力 信 号 PEXH285011_IMASK_SIG2 IN2 からの 入 力 信 号 PEXH285011_IMASK_SIG3 IN3 からの 入 力 信 号 PEXH285011_IMASK_SIG4 IN4 からの 入 力 信 号 PEXH285011_IMASK_TIMER タイマー 割 り 込 み PEXH285011_IMASK_RESET リセット 割 り 込 み PEXH285011_IMASK_ALL 上 記 のすべて インターバルタイマーをセットする int pexh285011_set_interval_timer(int fd,unsigned int base,unsigned long int div); int pexh285011_set_interval_timer_mmap(pexh285011r *dev,unsigned long int base,unsigned long int div);
base ベースクロック 値 以 下 のいずれかを 指 定 する PEXH285011_TIMER_BASE_STOP 停 止 PEXH285011_TIMER_BASE_010USEC 10 マイクロ 秒 PEXH285011_TIMER_BASE_100USEC 100 マイクロ 秒 PEXH285011_TIMER_BASE_001MSEC 1 ミリ 秒 PEXH285011_TIMER_BASE_010MSEC 10 ミリ 秒 PEXH285011_TIMER_BASE_100MSEC 100 ミリ 秒 div ベースクロックを 分 周 する 値 カウントダウンし 0 の 時 割 り 込 みが 発 生 する 最 大 15 分 周 しかできない インターバルタイマーの 現 在 値 を 読 み 出 す int pexh285011_get_interval_timer(int fd,unsigned long int *count); int pexh285011_get_interval_timer_mmap(pexh285011r *dev,unsigned long int *count); count 値 を 読 み 出 す 変 数 へのポインタ 汎 用 関 数 オフセット 値 を 指 定 してレジスタの 値 を 読 み 出 す int pexh285011_get_ioport(int fd,int offset,unsigned long int *value); int pexh285011_get_mmap(pexh285011r *dev,int offset,unsigned long int *value); offset レジスタオフセット value 値 を 読 み 出 す 変 数 へのポインタ 汎 用 関 数 オフセット 値 を 指 定 してレジスタに 値 を 書 き 出 す int pexh285011_set_ioport(int fd,int offset,unsigned long int *value); int pexh285011_set_mmap(pexh285011r *dev,int offset,unsigned long int *value); offset レジスタオフセット value 値 を 出 す 変 数 へのポインタ チャネルを 指 定 して 入 力 データを 読 み 出 す int pexh285011_read_data(int fd,int ch,unsigned char *data); int pexh285011_read_data_mmap(pexh285011r *dev,int ch,unsigned char *data); ch チャンネル data 値 を 出 す 変 数 へのポインタ
チャネルを 指 定 してデータを 出 力 する int pexh285011_write_data(int fd,int ch,unsigned char *data); int pexh285011_write_data_mmap(pexh285011r *dev,int ch,unsigned char *data); ch チャンネル data 出 力 変 数 へのポインタ すべてのチャネルの 入 力 データを 読 み 出 す int pexh285011_read_data_all(int fd,unsigned char *data); int pexh285011_read_data_all_mmap(pexh285011r *dev,unsigned char *data); data 値 を 出 す 配 列 変 数 へのポインタ すべてのチャネルのデータを 出 力 する int pexh285011_write_data_all(int fd,unsigned char *data); int pexh285011_write_data_all_mmap(pexh285011r *dev,unsigned char *data); data 出 力 配 列 変 数 へのポインタ SEE ALSO /usr/local/cnc/drivers/extmem/interface/pexh285011 下 のプログラム AUTHORS Copyright (C) 1995-2016 Concurrent Computer Corp. 28 Apr 2016 pexh285011(3)