详解内核驱动操作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中断。
作用:该函数根据引脚获得指定引脚配置的功能值
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引脚API函数(1)
- 详解内核驱动操作GPIO引脚API函数
- 树莓派_GPIO引脚操作_wiringPi的安装与使用
- NodeMCU教程 GPIO操作与引脚映射
- stm32笔记:GPIO的的配置和操作(2)引脚输入之查询按键
- stm32f407之GPIO(操作寄存器)
- 介绍几个操作文件的API函数
- 高通平台中gpio简单操作和调试
- VC 鼠标和光标操作的API函数
- stm32定义GPIO口方向和操作的代码
- 在DM355平台上如何在应用层直接控制GPIO----操作arm的寄存器
- linux 中的GPIO操作
- GPIO模拟I2C操作调试注意事项
- 在基于OMAP3530的DevKit8000开发板上实现Linux操作系统下的GPIO读写操作
- linux内核里的GPIO操作函数
- 三星s3c24xx平台GPIO操作详解
- STM32F1x系列——GPIO操作
- androidgpio操作
- Windows CE下操作GPIO的方法(以ARM9 S3C2410为例)
- 树莓派高级GPIO库,wiringpi2 for python使用笔记(三)GPIO操作