REX-5055 Linuxドライバ仕様書

  1. REX-5055 Linuxドライバについて
  2. 特徴
  3. Read/Writeファンクション
  4. IOCTLファンクション
  5. 各ファンクション説明
  6. 割込みの使用について
  7. デバイスドライバ使用方法
  8. サンプルプログラムについて

1. REX-5055 Linuxドライバについて

REX-5055 DIO PC Card用 Linuxドライバです。


2. 特徴


3. Read/Writeファンクション

Write function を使用する

WrtCtrl:0xDD\n Write コントロールレジスタ
WrtMask:0xDD\n Writeマスクレジスタ
ReadMask:0xDD\n Read割込みステータスレジスタ
ReadLowByte\n Read Low Data
ReadHighByte\n Read High Data
ReadWord\n Read Word Data
GetBit:DD\n Get Bit status 指定したビットの状態を読み出す
WriteLowByte:0xDD\n Write Low Data
WriteHighByte:0xDD\n Write High Data
WriteWord:0xDD\n Write Word Data
SetBitOn:DD\n Set Bit 指定したビットをセットする
SetBitOff:DD\n Set Bit 指定したビットをクリアする
PollIrqStat\n IRQ Ststusをポーリングする
SetIrqResponse\n 割り込み処理での出力データを設定する

リードデータフォーマット一覧
Read function を使用する

L:0xNN\n ポートから読出したデータレジスタ下位バイトデータ
先頭が"L:" と"0x"で始まる2桁の16進数
H:0xNN\n ポートから読出したデータレジスタ上位バイトデータ
先頭が"H:" と"0x"で始まる2桁の16進数
W:0xNNNN\n ポートから読出したワードデータ
先頭が"W:" と"0x"で始まる4桁の16進数
B:DD:sss\n 指定したビットの状態
先頭が"B:" でDDにはビット番号を現す"00"〜"15"の2桁の10進数、 sssには"On"または"Off"の文字列
M:0xNN\n マスクデータ
先頭が"M:" と"0x"で始まる2桁の16進数
S:0xNN\n IRQステータス
先頭が"S:" と"0x"で始まる2桁の16進数


4. IOCTLファンクション

ioctl function を使用する

シンボル 機能
REXDIO_WRTCTRL Writeコントロールレジスタ
REXDIO_SETMASK Writeマスクレジスタ
REXDIO_GETMASK Readマスクレジスタ
REXDIO_OUT_HIGHBYTE Write High Data
REXDIO_IN_HIGHBYTE Read High Data
REXDIO_OUT_LOWBYTE Write Low Data
REXDIO_IN_LOWBYTE Read Low Data
REXDIO_OUT_WORD Write Word Data
REXDIO_IN_WORD Read Word Data
REXDIO_IRQSTAT IRQ Ststusをポーリングする
REXDIO_IRQRESPONSE 割り込み処理での出力データを設定する

これらのシンボルはヘッダーファイル rex5055d.h で定義されている


5. 各ファンクション説明


6. 割込みの使用について

REX-5055 はPIO0-PCIO15 の1ラインを割込み入力ラインとして使用できます。
割込みの解除は、割込みマスクレジスタB0-B3に設定した値に従って、 PIO0-7, PIO8-15 の入力または出力によって行われます。
本ドライバでは、"WrtMask:"またはREXDIO_SETMASKによって設定される設定値で 割込みの有効無効を判断し、ドライバ内で割込みクリア処理を行います。

ICLRxn割込みクリア条件ドライバ処理
ICLRR2 = 1PIO0-PIO7の入力 割込み発生時に自動的にデータレジスタからの読み込み
読み込まれたデータは、"IRQ Statusポーリング処理"で取り出せます
ICLRR3 = 1PIO8-PIO15の入力
ICLRW2 = 1PIO0-PIO7へ出力 割込み発生時に自動的にデータレジスタへ出力
出力データは、先に"割り込み処理時の出力データの設定"で行います
ICLRW3 = 1PIO8-PIO15へ出力


7. デバイスドライバの使用方法

以下では、REX-5055の上位バイトを出力、下位バイトを入力に設定して、 ビット15をオンにした後、下位バイトのデータを読み出しています。

char *ctrl_cmd = "WrtCtrl:0x02"; コントロールレジスタへの設定値
(P0-P7:入力 P8-P15:出力)
char *mask_cmd = "WrtMask:0x00"; IRQマスクレジスタへの設定値
(IRQは使用しない)
fd = open ("/dev/dio", O_RDWR); mknod で作製したデバイススペシャルファイルを指定し、使用を開始する。
write (fd, ctrl_cmd, strlen(ctrl_cmd)); コントロールレジスタの設定
write (fd, mask_cmd, strlen(mask_cmd)); IRQマスクレジスタの設定
write (fd, "SetBitOn:15\n", 12); ビット15をオンに設定
write (fd, "ReadLowByte:\n", 13); 下位バイト読出し命令
read (fd, buf, 6); 下位バイトが buf に "L:0xNN\n" の書式で読み込まれる
close(fd) デバイススペシャルファイルの使用を終了する。


8. サンプルプログラムについて


REX-5055 Linuxドライバ仕様書(End)