详解内核驱动操作GPIO引脚API函数(2)

2 原型:unsigned int s3c2410_gpio_getcfg(unsigned int pin)
作用:该函数根据引脚获得指定引脚配置的功能值
eg 
s3c2410_gpio_getcfg (S3C2410_GPB5)//读取B5脚为的配置功能 输入00、输出01、特殊功能02 ……
函数原代码及注释:
unsigned int s3c2410_gpio_getcfg(unsigned int pin)
{
void __iomem *base = S3C24XX_GPIO_BASE(pin);
unsigned long val = __raw_readl(base);
if (pin < S3C2410_GPIO_BANKB) { //此判断操作主要是针对A端口,原因前面已解释
val >>= S3C2410_GPIO_OFFSET(pin);
val &= 1;
val += 1;
} else {
val >>= S3C2410_GPIO_OFFSET(pin)*2;
val &= 3;
}
return val | S3C2410_GPIO_INPUT;
}

原型:void s3c2410_gpio_pullup(unsigned int pin, unsigned int to)
作用:设置相应GPIO口的上拉电阻
eg 
s3c2410_gpio_pullupS3C2410_GPB50//设置S3C2410_GPB5不要上拉电阻
s3c2410_gpio_pullupS3C2410_GPB51//设置S3C2410_GPB5要上拉电阻
函数原代码及注释:
void s3c2410_gpio_pullup(unsigned int pin, unsigned int to)
{
void __iomem *base = S3C24XX_GPIO_BASE(pin);
unsigned long offs = S3C2410_GPIO_OFFSET(pin);
unsigned long flags;
unsigned long up;
if (pin < S3C2410_GPIO_BANKB)
return;
local_irq_save(flags);
up = __raw_readl(base + 0x08); // //0x08GPxUP寄存器的物理偏移量
up &= ~(1L << offs); //1L是什么东西,暂时没看明白,可能是错误,感觉应该是1
up |= to << offs;
__raw_writel(up, base + 0x08);
local_irq_restore(flags);
}
4原型:void s3c2410_gpio_setpin(unsigned int pin, unsigned int to)
作用:该函数给指定的引脚位写入01,即是配置相应的DAT位。
eg
s3c2410_gpio_setpin (S3C2410_GPB5 ,0)//设置S3C2410_GPB5的输出值为0
s3c2410_gpio_setpin (S3C2410_GPB5 ,1)//设置S3C2410_GPB5的输出值为1
函数原代码及注释:
void s3c2410_gpio_setpin(unsigned int pin, unsigned int to)
{
void __iomem *base = S3C24XX_GPIO_BASE(pin);
unsigned long offs = S3C2410_GPIO_OFFSET(pin);
unsigned long flags;
unsigned long dat;
local_irq_save(flags);
dat = __raw_readl(base + 0x04); //0x04GPxDAT寄存器的物理偏移量
dat &= ~(1 << offs);
dat |= to << offs;
__raw_writel(dat, base + 0x04);
local_irq_restore(flags);
}
5原型:void s3c2410_gpio_getpin(unsigned int pin)
作用:该函数读取指定引脚的状态 返回0 1,即是读取相应的DAT位。
eg
s3c2410_gpio_setpin (S3C2410_GPB5 )// 读取S3C2410_GPB5位的状态。
函数原代码及注释:
unsigned int s3c2410_gpio_getpin(unsigned int pin)
{
void __iomem *base = S3C24XX_GPIO_BASE(pin);
unsigned long offs = S3C2410_GPIO_OFFSET(pin);

return __raw_readl(base + 0x04) & (1<< offs);
}
6原型:unsigned int s3c2410_modify_misccr(unsigned int clear, unsigned int change)
作用: 主要是设置混杂控制寄存器(Miscellaneous control :物理地址0x56000080), 此寄存器控制数据口上拉寄存器,hi-z 状态,USB块和CLKOUT选择
7原型:int s3c2410_gpio_getirq(unsigned int pin)
作用: 读取中断引脚的状态 GPF0-GPF7、GPG0-GPG7
eg
s3c2410_gpio_ getirq (S3C2410_GPF0 )// 读取S3C2410_GPF0位的状态,看是否产生EINT8中断。

你可能感兴趣的:(GPIO)