您的位置:首页 > 其它

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

2012-08-01 13:12 399 查看
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;

}

3 原型:void s3c2410_gpio_pullup(unsigned int pin, unsigned int to);

作用:设置相应GPIO口的上拉电阻

eg

s3c2410_gpio_pullup(S3C2410_GPB5,0)//设置S3C2410_GPB5不要上拉电阻

s3c2410_gpio_pullup(S3C2410_GPB5,1)//设置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); // //0x08是GPxUP寄存器的物理偏移量

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);

作用:该函数给指定的引脚位写入0或1,即是配置相应的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); //0x04是GPxDAT寄存器的物理偏移量

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