REX-5055 Linuxサンプルプログラム仕様書 - IRQ Test Program

  1. REX-5055 IRQ Test Programについて
  2. ソースファイルの説明
  3. 使用ファンクション説明

1. REX-5055 IRQ Test Programについて

Linux上で動作する REX-5055 DIO PC Card用 プログラムです。
IPI16と接続し、入力信号を割込みで処理します。
1秒おきに割込みステータスを読出し、割込みが発生したら 読み出された下位バイトのデータを表示します。
この処理を50回繰り返して終了します。

接続構成図

REX-5055からケーブルRCL-5055Tを使用してIPI16に接続します。

動作環境
プログラムの構造
  1. プログラム開始
  2. デバイススペシャルファイルのオープン
  3. 割込みポーリング処理
  4. デバイススペシャルファイルをクローズ
  5. プログラム終了
プログラムの作成

あらかじめ ROOT ユーザでログインします。

# cd /root/irq_testirq_test のソースが格納されているディレクトリへ移動します
# cc irq_test.c -o irq_testccを実行してプログラムを生成します

/root/Projects/led_ctrl/src ディレクトリにプログラム led_ctrl が作成されます。

主なファイル構成

irq_test.cメイン
rex5055.hrex5055用ヘッダ


2. ソースファイルの説明

main mainルーチン
CardInit REX-5055デバイスファイルのオープンと初期化
CardRelease REX-5055デバイスアファイルのクローズ
DataIn REX-5055割込みポーリング処理

main
メイン
main(int argc, char **argv)
{
    int  count;
    int  val;

    CardInit(argc, argv);
    for ( count = 0; count < 50; count++ ) {
        printf("Count:%3d ", count);
        if (DataIn(&val) & 0x80)
            printf("Data:%04X\n", val );
        printf("\n");
        sleep(1);
    }
    CardRelease();
}
CardInit
REX-5055デバイスファイルのオープンと初期化
void
CardInit(int argc, char **argv)
{
    int   Ctrl_val = 0x88;    /* mode = low & high input mode */
                                           /* up edge , PIO-1 */
    int   Mask_val = 0x82;    /* Int enable, high-in for clear */

    if (argc > 1)
        Card_dev = argv[1];
    else
        Card_dev = "/dev/dio";

    Card_fd = open(Card_dev, O_RDWR);
    if (Card_fd == -1) {
        printf("%s open error ...\n", Card_dev);
        exit(1);
    }

     /* Set Contorl */
    if ( ioctl(Card_fd, REXDIO_SETCTRL, &Ctrl_val) == 1) {
        printf("%s REXDIO_SETCTRL error...\n", Card_dev);
        exit(1);
    }

     /* Set Int mask */
    if ( ioctl(Card_fd, REXDIO_SETMASK, &Mask_val) == -1) {
        printf("%s REXDIO_SETMASK error...\n", Card_dev);
        exit(1);
    }

}
CardRelease
REX-5055デバイスアファイルのクローズ
void
CardRelease(void)
{
    close(Card_fd);
}
DataIn
REX-5055割込みポーリング処理
int
DataIn( int *val )
{
    struct arg {
        short int   Stat_val;
        short int   Word_val;
    };
    struct arg  dio_arg = { 0, 0};

    if ( ioctl(Card_fd, REXDIO_IRQSTAT, &dio_arg) == -1) {
        printf("%s REXDIO_IRQSTAT error...\n", Card_dev);
        exit(1);
    }
    if (dio_arg.Stat_val & 0x80)
        *val = dio_arg.Word_val;

    return dio_arg.Stat_val;
}

3. 使用ファンクション説明


REX-5055 Linuxサンプルプログラム仕様書(End)---> 先頭へ