[Armadillo:01627] Re: GPIOの割り込みについて

mizo email@hidden
2007年 5月 31日 (木) 19:14:28 JST


溝渕です。

Armadillo-9のGPIOドライバは割り込みに対応していない為、ドライバの入れ替
えが必要になります。
以下の手順で、Armadillo-210のGPIOドライバを使用しているのは、
Armadillo-9とGPIOポートが同じである為です。
また、以下ではkernel2.6を使用しています。

・linux-2.6.x/drivers/Kconfig の編集
config ARMADILLO210_GPIO
	tristate "Old version: Armadillo-210 GPIO driver"
	depends on ARCH_ARMADILLO210 || ARCH_EP93XX	←追加

・make menuconfig でドライバの入れ替え
Device Drivers --->
   Character devices --->
      <*> Old version: Armadillo-210 GPIO driver	←選択

      < > EP93xx GPIO support				←選択解除

こうして作成したkernelでフラッシュメモリの書き換えを行なうとGPIOの割り込
みを使うことができます。


以下、割り込みが入るか5秒経過するまで待つサンプルコードです。

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <fcntl.h>
#include <asm/arch/armadillo2x0_gpio.h>

#define DEVICE "/dev/gpio"
#define TIMEOUT 5000

int main(int argc, char *argv[])
{
	int fd;
	int ret;
	struct gpio_param param;
	struct wait_param wparam;

	param.next = NULL;
	param.no = GPIO0;
	param.mode = MODE_INPUT;
	param.data.i.value = 0;
	param.data.i.int_enable = 1; /* 0:disable/1:enable */
	param.data.i.int_type = TYPE_FALLING_EDGE;

	fd = open(DEVICE, O_RDWR);
	if (fd < 0) {
		perror("open");
		return -1;
	}
  
	ioctl(fd, PARAM_SET, &param);

	wparam.list = GPIO0;
	wparam.timeout = TIMEOUT; 
 
	ret = ioctl(fd, INTERRUPT_WAIT, &wparam);
	if (ret) {
		perror("ioctl");
		return -1;
	}

	close(fd);

	return 0;
}





armadillo メーリングリストの案内