兄弟,你没认真看linux内核的文档吧?
S3C24xx平台的GPIO.txt说明,Linux内核提供了下面几个个函数:
void s3c2410_gpio_pullup(unsigned int pin, unsigned int to);
unsigned int s3c2410_gpio_getpin(unsigned int pin);
void s3c2410_gpio_setpin(unsigned int pin, unsigned int to);
void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function);
int s3c2410_gpio_getirq(unsigned int pin);
同样的S3C64xx等平台都有,
void s3c_gpio_setpin(unsigned int pin, unsigned int to);
void s3c_gpio_cfgpin(unsigned int pin, unsigned int function);
int s3c_gpio_getirq(unsigned int pin);
现在基本能明白了吧,很多东西实际上内核已经做完了,我们没必要再直接读写寄存器的值。
如果硬是要这么做(为了时空效率除外),这跟裸跑啥区别,失去了跑linux的意义了.
下面是一个例子:
//上拉GPIO
s3c_gpio_setpull(S3C64XX_GPE(1), S3C_GPIO_PULL_UP);
//设置为输出
s3c_gpio_cfgpin(S3C64XX_GPE(1), S3C_GPIO_OUTPUT);
//设置低电平输出
gpio_set_value(S3C64XX_GPE(1),0);
PS:在调用这些函数之前,添加下面的头文件。
#include <mach/regs-gpio.h>
#include <mach/gpio.h>
#include <plat/gpio-cfg.h>
同时,在使用一个GPIO之前,应该向系统确认该GPIO没有被占用。
int gpio_is_valid(int number);
[ 此帖被lintel在2011-12-10 02:57重新编辑 ]