[Armadillo:01635] Re: Armadillo-210   CON 4の GPIO 制御方法

nakai email@hidden
2007年 6月 4日 (月) 12:09:31 JST


中井です。

A210のGPIOドライバはPortA:2には対応していません。
ドライバに該当ポートの処理を追加することもできますが、
アプリケーション側で対応できるのでサンプルを張ります。

yuic23 at yahoo さんのサンプルでは、mmapのオフセットに仮想アドレスが指定されていますが、
ここでは、物理アドレスを設定してください。

ちなみに、オフセットは次のとおりです。
PADDR:gpio_base[4]
PADR:gpio_base[0]

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
/* サンプル:mmapを使用したLED赤制御 */

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>

typedef unsigned long u32;

#define GPIO_PHYS_ADDR (0x80840000)
#define GPIO_MAP_LEN (0x100)

int main(void)
{
  int fd;
  u32 *gpio_base;

  fd = open("/dev/mem", O_RDWR);
  if (fd < 0) {
    perror("open");
    return -1;
  }

  gpio_base = mmap(NULL, GPIO_MAP_LEN, PROT_READ | PROT_WRITE, MAP_SHARED,
		   fd, GPIO_PHYS_ADDR);
  if (gpio_base == MAP_FAILED) {
    perror("mmap");
    close(fd);
    return -1;
  }
  printf("PEDR:\t0x%08lx\n", gpio_base[8]); /* offset: 0x20 */
  printf("PEDDR:\t0x%08lx\n", gpio_base[9]); /* offset: 0x24 */

  /* LED[RED: ON */
  gpio_base[8] |= 0x01;
  msync(gpio_base, GPIO_MAP_LEN, MS_SYNC);

  sleep(1);

  /* LED[RED: OFF */
  gpio_base[8] &= ~0x01;
  msync(gpio_base, GPIO_MAP_LEN, MS_SYNC);
  
  munmap(gpio_base, GPIO_MAP_LEN);
  close(fd);

  return 0;
}




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