パラレルポート入出力

CPLDをパラレルポートから制御したいので、パラレルポートから入出力する方法を調べた。
まずパラレルポートのピン割り当てについて
http://www.nahitech.com/nahitafu/mame/mame5/printer.html
を参考に調べた。
D-Sub25pinのメスを正面から見て右上:1 左上:13 右下:14 左下:25になるようにピンが割り当てられている。
2-9の8ピンがデータ入出力に使うピンで、18-25がGND。

次に、これらのピンに直接出力してみる。
asm/system.hがバグってるみたいで使えなかったのでppdev.hを使うことにした。
http://www.siio.jp/index.php?How2LinuxParport
を参考にして書いたコードが次

#include <stdio.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/ppdev.h>
#include <linux/parport.h>

int main(void)
{
  int parport;
  parport = open("/dev/parport0", O_RDWR);
  if(parport == -1){
    fprintf(stderr, "Can't open /dev/parport0\n");
    return 1;
  }
  if(ioctl(parport, PPCLAIM)){
    fprintf(stderr, "PPCLAIM error\n");
    close(parport);
    return 1;
  }

  /* D3からD7を1/10秒間隔で順番にHにする */
  int i;
  while(1){
    for(i = 8; i < 256; i <<= 1){
      usleep(100000);
      ioctl(parport, PPWDATA, &i);
    }
  }
  ioctl(parport, PPRELEASE);
  close(parport);
  return 0;
}

それで、テストするためにやったのがこれ。パラレルポートにLED直差し(笑)
5つのLEDが順番にくるくると点灯している。上手く出力出来ているようだ。あっさりと出来た。
普通はちゃんと基板に実装するんだけど、これはこれでシュールだ。本当は抵抗ぐらい付けるべきだけど(^^;