[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 メーリングリストの案内