我的程式
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include<sys/mman.h>
#include<fcntl.h>
#include <asm/page.h>
#define GPIO_CTL_BASE 0x56000000
#define rGPCCON 0x10
#define rGPCDAT 0x14
#define rGPCUP 0x18
int main(int argc, char** argv)
{
int gpio_fd, ip=0, i=0;
unsigned char * gpio_map, * GPCCON, * GPCDAT, * GPCUP;
gpio_map = NULL;
GPCCON = NULL;
GPCDAT = NULL;
GPCUP = NULL;
gpio_fd = open("/dev/mem",O_RDWR);
if (gpio_fd == -1)
{
printf("can't open /dev/mem.\n");
return ;
}
gpio_map = (unsigned char *) mmap(0, getpagesize(),PROT_READ | PROT_WRITE, MAP_SHARED,gpio_fd, GPIO_CTL_BASE);
GPCCON = (unsigned int *) (gpio_map+0x10);
GPCDAT = (unsigned int *) (gpio_map+0x14);
GPCUP = (unsigned int *) (gpio_map+0x18);
for (ip=0;ip<=10;ip++)
{
printf("GPCCON[%x] GPCDAT[%x] GPCUP[%x]\n", *GPCCON, *GPCDAT, *GPCUP);
sleep(5);
}
if (gpio_fd != 0x0)
{
close(gpio_fd);
}
printf("GPIO Control Test end\n");
gpio_fd = 0x0;
gpio_map = NULL;
GPCCON = NULL;
GPCDAT = NULL;
GPCUP = NULL;
}
1. 請問程式裡面
gpio_map = (unsigned char *) mmap(0, getpagesize(),PROT_READ | PROT_WRITE, MAP_SHARED,gpio_fd, GPIO_CTL_BASE);
GPCCON = (unsigned int *) (gpio_map+0x10);
GPCDAT = (unsigned int *) (gpio_map+0x14);
GPCUP = (unsigned int *) (gpio_map+0x18);
的這四段是不是在對 ARM 板說我要使用(註冊) rGPCCON、rGPCDAT、 rGPCUP 我要使用(註冊)這三個gpio
2.如果是那我要怎樣控制gpio的動作,在程式裡面加入什麼樣的指令才可以控制動作,
例如我想讓 rGPCCON 的GPC5、GPC6、GPC7變成輸出,rGPCDAT 的GPC5、GPC6、GPC7都是1,我要加入怎樣的指令才可以完成控制的動作。