Microsoft Word - PCI-3346A_BSP_Release_Notes.doc

Similar documents
NI P1200 Release Notes Cover

Microsoft Word - PEX-H291388_BSP_Release_Notes.doc

Microsoft Word - PEX _BSP_Release_Notes.doc

Microsoft Word - PEX-H BSP Release Notes.doc

Microsoft Word - PEX BSP Release Notes.doc

slide5.pptx

CM-3G 周辺モジュール拡張技術文書 MS5607センサ(温度、気圧)

8ビットデータバスでアクセスする場合は、16ビットレジスタを上位バイト、下位バイトに分けてアクセスします

Taro-リストⅠ(公開版).jtd

P6dark P6dark µ-pic 2 µ-pic 2 3 µ-pic µ-pic µ-pic 3 µ-pic (10cm ) MPGC N3035-KA195 No. SN ASD (16ns[C]) (16nsC

‚æ4›ñ

01-introduction.ppt

£Ã¥×¥í¥°¥é¥ß¥ó¥°ÆþÌç (2018) - Â裵²ó ¨¡ À©¸æ¹½Â¤¡§¾ò·ïʬ´ô ¨¡

Nios II - PIO を使用した I2C-Bus (2ワイヤ)マスタの実装

untitled

Microsoft Word - C.....u.K...doc

Taro-リストⅢ(公開版).jtd

Microsoft Word - T-ADA16S.doc

1 $ cat aboutipa 2 IPA is a Japanese quasi-government 3 organization established in accor- 4 dance with The Law for Information 5 Processing Technolog

CLUSTERPRO MC StorageSaver 2.2 for Linux リリースメモ 2017(Apr) NEC Corporation ライセンス パッケージのインストール セットアップ マニュアル 補足事項 注意事項

Prog1_6th

slide6.pptx

新・明解C言語 ポインタ完全攻略

memo

計算機プログラミング

tuat1.dvi

Microsoft Word - Cプログラミング演習(10)

プログラミングI第10回

Microsoft Word - T-AD16P.doc

Taro-ファイル処理(公開版).jtd

tutorial_lc.dvi

Microsoft PowerPoint - RL78G14_動画マニュアル_タイマRD.ppt [互換モード]

CLUSTERPRO MC RootDiskMonitor 2.3 for Linux HW-RAID 監視機能 リリースメモ 2018(Jun) NEC Corporation ライセンス パッケージのインストール セットアップ マニュアル

SOPC Builder ペリフェラル 簡易ユーザ・ガイド - PIO (Parallel I/O)

CLUSTERPRO MC StorageSaver 1.1 for Linux リリースメモ 2015(Jun) NEC Corporation ライセンス パッケージのインストール セットアップ マニュアル 補足事項 注意事項

II 3 yacc (2) 2005 : Yacc 0 ~nakai/ipp2 1 C main main 1 NULL NULL for 2 (a) Yacc 2 (b) 2 3 y

スライド 1

1 1 TA, ,9 1. ( 2. TM TM GUI TM 1. P7-13 TM Notepad, Meadow, ( P109 ). 2. (shisaku01/sys test)

ohp03.dvi

Taro-再帰関数Ⅱ(公開版).jtd

Microsoft Word - Cプログラミング演習(12)

:30 12:00 I. I VI II. III. IV. a d V. VI

PowerPoint Presentation

CLUSTERPRO MC ProcessSaver 2.1 for Linux リリースメモ 2016(Mar) NEC Corporation ライセンス パッケージのインスト ル セットアップ マニュアル 障害発生時の手順 補足事項 注意事項

CLUSTERPRO MC RootDiskMonitor 1.1 for Linux リリースメモ 2013(Sep) NEC Corporation ライセンス パッケージのインストール セットアップ マニュアル

Microsoft Word - Training10_プリプロセッサ.docx

81 /******************************************************************************/ 82 /* スレーブアドレスの設定 */ 83 /*****************************************

< F2D837C E95CF CF68A4A94C5816A2E6A>

Condition DAQ condition condition 2 3 XML key value

2006年10月5日(木)実施

r03.dvi

r07.dvi

本書は INpMac v2.20(intime 5.2 INplc 3 Windows7/8/8.1に対応 ) の内容を元に記載しています Microsoft Windows Visual Studio は 米国 Microsoft Corporation の米国及びその他の国における登録商標です

ohp07.dvi

卒 業 研 究 報 告.PDF

Microsoft Word - no15.docx

スライド 1

AquesTalk2 Win マニュアル

PowerPoint プレゼンテーション

Microsoft Word - Cプログラミング演習(9)

8 / 0 1 i++ i 1 i-- i C !!! C 2

プログラミング基礎

Microsoft Word - EGX100によるH663通信手引

Taro-スタック(公開版).jtd

double float

ex12.dvi

Cプログラミング1(再) 第2回

SuperH RISC engine C/C++ コンパイラ Ver.7 不具合内容 - 過去のお知らせ SuperH RISC engine C/C++ コンパイラ Ver.7 台における不具合内容を以下に示します のチェックツールをルネサスエレクトロニクス株式会社のホームページ

スライド 1

I. Backus-Naur BNF S + S S * S S x S +, *, x BNF S (parse tree) : * x + x x S * S x + S S S x x (1) * x x * x (2) * + x x x (3) + x * x + x x (4) * *

新・明解C言語 実践編

gengo1-12

K227 Java 2

スライド 1

Microsoft PowerPoint - prog04.ppt

Microsoft Word - esm_update_jp.doc

C¥×¥í¥°¥é¥ß¥ó¥° ÆþÌç

Prog1_12th

スライド 1

I 2 tutimura/ I 2 p.1/??

I. Backus-Naur BNF : N N 0 N N N N N N 0, 1 BNF N N 0 11 (parse tree) 11 (1) (2) (3) (4) II. 0(0 101)* (

CONTEC DIOプロバイダ ユーザーズガイド

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

gengo1-12

一般技術用紙…

スライド 1

昨年度までの研究紹介 および 研究計画

Solaris 10 10/08 OSにおける統合インストーラの注意事項

演算増幅器

プログラミング及び演習 第1回 講義概容・実行制御

untitled

データ収集用 NIM/CAMAC モジュールマニュアル 2006/5/23 目次 クレート コントローラ CC/ NIM ADC 1821 (Seiko EG&G)...3 ADC インターフェイス U デッドタイム

gengo1-12

Minimum C Minimum C Minimum C BNF T okenseq W hite Any D

C言語入門

Taro-82ADAカ.jtd

Prog1_15th

プログラミング演習3 - Cプログラミング -

Microsoft Word - PGI WorkstationServer事前準備 doc

ohp08.dvi

Transcription:

PCI-3346A Board Support Package Installation on RedHawk Release Notes August 17, 2017

1. はじめに 本書は Concurrent Real Time Inc(CCRT) の RedHawk 上で動作する インターフェース社製 PCI- 3346A PCI ボードサポートパッケージ用リリースノートです 2. インストールのための条件 PCI- 3346A BSP をインストールするためには 以下の製品がインストールされている事が必要です PCI- 3346A ボード RedHawk 6.x 以上 Extmem version 8.3 以上 PCI-3346A は PCI バスに準拠した 12 ビット DA 変換機能を持った製品です 3. インストール方法 PCI-3346A BSP は IRQ 共有するように設計されています もしこのデバイスの IRQ が 別のデバイスによって共有されている場合に このドライバの性能は損なわれる場合があります そのため 可能な限り このボードはその IRQ が他の装置と共有されていない PCI スロットの中に実装する事が奨励されます lspci -v コマンドをシステムで種々の装置の IRQ を確認するために使用することができます PCI-3346A BSP は CDROM/DVD 上の RPM フォーマットで供給され 別途 extmem デバイスドライバがインストールされていることが必要です 以下に インストールの手順を示します : === root ユーザで実行してください === # mount /dev/cdrom /mnt あるいは mount /dev/dvd /mnt # cd /mnt もし extmem を同時にインストールする場合には 以下のコマンドを入力してください # rpm -ivh bin-extmem-x.y_rhx.y-z.x86_64.rpm PCI-3346ABSP 実行パッケージのインストール # rpm -ivh bin-pcii3346a-x.y_rhx.y-z.x86_64.rpm もし必要であれば 続けて開発パッケージのインストールを行ってください # rpm -ivh dev- pci3346a-x.y_rhx.y-z.x86_64.rpm # umount /mnt (x.y は RedHawk のバージョン番号であり 6.0,6.3,6.5,7.0,7.2 または 7.3 で X.Y は BSP のバージョン z は BSP のリリース番号を示し 予告なく変更することがあります ) PCI-3346A BSP パッケージは /usr/local/cnc/drivers/extmem/interface/pci3346a ディレクトリにインストールされ 必要な場所に展開されます 4. アンインストール方法 PCI-3346A BSP パッケージは 以下のコマンドでアンインストールします この作業により /usr/local/cnc/drivers/extmem/interface/pci3346a ディレクトリは削除されます === root ユーザで実行してください === 開発パッケージをインストールしていた場合には # rpm -e rpm -ivh dev- pci3346a-x.y_rhx.y-z.x86_64 ( 開発パッケージの削除 ) # rpm -e bin-pcii3346a-x.y_rhx.y-z.x86_64 ( 実行パッケージの削除 ) 実行パッケージのみをインストールしていた場合には # rpm -e bin-pci3346a-x.y_rhx.y-z.x86_64 ( 実行パッケージの削除 )

5. ライブラリマニュアル ライブラリマニュアルは オンラインで提供されます # man pci3346a pci3346a(3) pci3346a(3) NAME pci3346a - external memory device access library SYNOPSIS [ ボードの詳細は 各マニュアルを見てください ] DESCRIPTION pci3346a は external memory ドライバを利用した pci3346a ボードアクセスライブラリです #include <sys/pci3346a.h> gcc [options...] file -lpci3346a -lextmem... ************************************************************************************* PCI3346 ************************************************************************************* DIP スイッチの読み込み int pci3346a_get_sw(int fd,unsigned int *data); data 出力変数へのポインタ ************************************************************************************* PCI3346a ************************************************************************************* 割り込みハンドラの登録 int pci3346a_setup_signal ( int fd, void (*interrupt_hadler)( int, siginfo_t *, void *), int mask ); void (*interrupt_hadler)( int, siginfo_t *, void *) 割り込みハンドラ mask 割り込みを許可するビットマスク以下のいずれかを指定する PCI3346A_IMASK_TMR インターバルタイマー PCI3346A_IMASK_SPS DA 変換開始割り込み PCI3346A_IMASK_TRG 外部割り込み (EXINT IN)

PCI3346A_IMASK_ALL (PCI3346A_IMASK_TMR PCI3346A_IMASK_TRG PCI3346A_IMASK_SPS) デバイスの非初期化処理 int pci3346a_reset(int fd); int pci3346a_uninit(int fd); 2つの関数は同じ処理 全ての制御レジスタに 0 値を設定する デバイスの初期化処理 int pci3346a_init ( int fd, int option ); option 1 を指定すると以下の情報が表示される BAR0 I/O Region addr 0x0000a8c0 offset 0x00000000 32 bytes Switch 0 割り込みサービス関数割り込んだ際の割り込み要因レジスタ ( オフセット 0x0D) の値を戻す int pci3346a_intr_service ( int fd, unsigned int *iflag, int *pending ); iflag 値を戻す変数 pending 保留されている割り込みの数を戻す変数 割り込みを禁止する int pci3346a_disable_intrrupt ( int fd, int mask ); mask 割り込みを禁止するビットマスク以下のいずれかを指定する PCI3346A_IMASK_TMR インターバルタイマー PCI3346A_IMASK_SPS DA 変換開始割り込み

PCI3346A_IMASK_TRG 外部割り込み (EXINT IN) PCI3346A_IMASK_ALL (PCI3346A_IMASK_TMR PCI3346A_IMASK_TRG PCI3346A_IMASK_SPS) 割り込みを許可する int pci3346a_enable_intrrupt ( int fd, int mask ); mask 割り込みを禁止するビットマスク以下のいずれかを指定する PCI3346A_IMASK_TMR インターバルタイマー PCI3346A_IMASK_SPS DA 変換開始割り込み PCI3346A_IMASK_TRG 外部割り込み (EXINT IN) PCI3346A_IMASK_ALL (PCI3346A_IMASK_TMR PCI3346A_IMASK_TRG PCI3346A_IMASK_SPS) 汎用関数オフセット値を指定してレジスタの値を読み出す int pci3346a_get_ioport(int fd,int offset,unsigned int *value); offset レジスタオフセット value 値を読み出す変数へのポインタ 汎用関数オフセット値を指定してレジスタに値を書き出す int pci3346a_set_ioport(int fd,int offset,unsigned int *value); offset レジスタオフセット value 値を出す変数へのポインタ データを同時出力モードで出力する int pci3346a_write_data_all(int fd,unsigned short int *data); ch チャンネル data 出力変数へのポインタ チャネルを指定してデータを出力する int pci3346a_write_data(int fd,int ch,unsigned short int data); ch チャンネル

data 出力データ 出力データを読み出す int pci3346a_read_data(int fd,int ch,unsigned short int *data); ch チャンネル data 出力変数へのポインタ チャネル切り替え int pci3346a_set_channel(int fd,int ch); ch チャンネル 同期サンプリング設定 int pci3346a_set_sync(int fd,unsigned int data); data 以下のいずれかを指定する PCI3346A_SYNC_NORMAL 複数枚同期サンプリングを使用しない場合 ( 同期信号はスルーされる ) PCI3346A_SYNC_MASTER 複数枚同期サンプリングを使用する ( 同期信号を出力するマスターになる ) PCI3346A_SYNC_SLAVE 複数枚同期サンプリングを使用する ( 同期信号を入力するスレーブになる ) 割り込みのトリガー設定 int pci3346a_set_trigger(int fd,unsigned int trigger); trigger 以下のいずれかを指定する PCI3346A_TRIG_EXINT EXINT IN 入力 ( 立ち上がりエッジ :1/ 立ち下がりエッジ :0) 有効 PCI3346A_TRIG_NONE なし DA 変換タイマーをセットする int pci3346a_set_convert_timer(int fd,unsigned int div1,unsigned int div2); div1 8MHz のベースクロックを分周する値カウントダウンする最大 65535 分周しかできない div2 div1 の出力を分周する値カウントダウンし 0 の時割り込みが

発生する 最大 65535 分周しかできない DA 変換タイマーをスタートまたは停止する int pci3346a_set_gate(int fd,unsigned int on); on 以下のいずれかを指定する PCI3346A_GATE_ON 0x01 // タ イマーイネーブル PCI3346A_GATE_OFF 0x00 // タ イマーディセーブル DA 変換のレンジをチャンネル指定して設定する / 読み出す int pci3346a_set_channel_range(int fd,int ch,int range); int pci3346a_get_channel_range(int fd,int ch,int *range); ch チャンネル range 以下のいずれかを指定する PCI3346A_RANGE_SETTING_0TOP10 0V から +10V PCI3346A_RANGE_SETTING_M5TOP5-5V から +5V PCI3346A_RANGE_SETTING_M10TOP10-10V から +10V 使用例 #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> #define MAXDATA 1600 int fd; int count=0; int error=0; unsigned short int DATA[MAXDATA]; static void pci3346a_interrupt_handler(int signo, siginfo_t *info, void *ptr)

int pending=0; unsigned int iflag=0; static int ch=0; pci3346a_intr_service(fd,&iflag,&pending); pci3346a_set_channel(fd,ch); ch ++;ch %= 16; pci3346a_write_data(fd,ch,data[count]); if (count<maxdata) count++; int main( int argc, char **argv) int ch,ret; static int cycle=1000,us; char devname[1024]; unsigned int value; int i,error=0; unsigned short int data[16]; extern int optind,errno; extern char *optarg; int c; while((c = getopt(argc, argv, "s:"))!= EOF) switch(c) case s : cycle = atoi( optarg ) ; if (( cycle <= 0 ) ((cycle)>1666)) fprintf(stderr,"invalid ARGUMENT!!0) ; exit( 0 ) ; break; default: fprintf(stderr, "Usage: %s [options]0,argv[0]); fprintf(stderr, "Options:0); fprintf(stderr," -s msec(msec: 0 or 1<=cycle<=16)0); exit(-1); if (optind == argc) /* no more option */ strcpy(devname,"/dev/pci3346a/0"); else strcpy(devname,argv[optind]); for(i=0;i<maxdata; i++) DATA[count]=i; if ((fd = open(devname,o_rdwr)) == -1) fprintf(stderr,"device not found %s(%s)0, devname,strerror(errno)); exit(0);

printf("%s ",devname); if (pci3346a_init(fd,1)<0) fprintf(stderr,"device initialize error %s(%s)0, devname,strerror(errno)); exit(0); ret = pci3346a_set_sync(fd,pci3346a_sync_normal); if(ret) fprintf(stderr,"pci3346a_set_sync() error0); for(ch=0;ch<16;ch++) //ret = pci3346a_set_channel_range(fd,ch,pci3346a_range_setting_0top10); //ret=pci3346a_set_channel_range(fd,ch,pci3346a_range_setting_m5top5); ret= pci3346a_set_channel_range(fd,ch,pci3346a_range_setting_m10top10); if(ret) fprintf(stderr,"pci3346a_set_channel_range() error0); //ret = pci3346a_get_channel_range(fd,ch,&value); printf("ch %d %x0,ch,value); value = PCI3346A_CV_MODE_ALLDISABLE; ret = pci3346a_set_ioport(fd,pci3346a_cv_mode_offset,&value); if(ret) fprintf(stderr,"pci3346a_set_ioport() error0); value = PCI3346A_AOUT_ON; ret = pci3346a_set_ioport(fd,pci3346a_aout_offset,&value); if(ret) fprintf(stderr,"pci3346a_set_ioport() error0); for(ch=0;ch<16;ch++) pci3346a_write_data(fd,ch,0x00f ch<<4); pci3346a_read_data(fd,ch,&data[ch]); if ( data[ch]!= (0x00F ch<<4)) error++; fprintf(stderr,"ch%d data error %X0,ch,data[ch]); value = PCI3346A_CV_MODE_ALLOUT; ret = pci3346a_set_ioport(fd,pci3346a_cv_mode_offset,&value); if(ret) fprintf(stderr,"pci3346a_set_ioport() error0); for(ch=0;ch<16;ch++) data[ch]=0xcc0 ch; ret = pci3346a_write_data_all(fd,data); if(ret) fprintf(stderr,"pci3346a_write_data_all() error0); for(ch=0;ch<16;ch++) ret = pci3346a_read_data(fd,ch,&data[ch]); if(ret) fprintf(stderr,"pci3346a_read_data() error0); if ( data[ch]!= (0xCC0 ch)) error++; fprintf(stderr,"ch%d data error %X0,ch,data[ch]); printf("data read/write test results.0);

printf("error %d0,error); error =0; Us = 1000000/cycle; printf("%d Hz is %d us0,cycle,us); if (pci3346a_set_convert_timer(fd,8,us)<0) fprintf(stderr,"interrupt initialize error %s(%s)0, devname,strerror(errno)); exit(0); if (pci3346a_setup_signal(fd,pci3346a_interrupt_handler,pci3346a_imask_tmr)<0) fprintf(stderr,"interrupt initialize error %s(%s)0, devname,strerror(errno)); exit(0); pci3346a_set_gate(fd,pci3346a_gate_on); for(;count<maxdata;) sleep(1); ",count); printf("%d pci3133_set_gate(fd,pci3346a_gate_off); pci3346a_disable_intrrupt(fd,pci3346a_imask_all); printf("interrupt test results.0); printf("error %d0,error); printf("success %d0,count-error); value = PCI3346A_CV_MODE_ALLCLEAR; ret = pci3346a_set_ioport(fd,pci3346a_cv_mode_offset,&value); if(ret) fprintf(stderr,"pci3346a_set_ioport() error0); if (pci3346a_uninit(fd)<0) fprintf(stderr,"%s0,strerror(errno)); close(fd); SEE ALSO /usr/local/cnc/drivers/extmem/interface/pci3346a/ 下のプログラム AUTHORS Copyright (C) 1995-2016 Concurrent Real Time Inc. 28 Apr 2016 pci3346a(3)