在2440的实例代码有一点看不懂想请教:
从datasheet上看:
GPF0 Input/output EINT0
Register Address R/W Description Reset Value
GPFCON 0x56000050 R/W Configures the pins of port F 0x0
GPF0 [1:0] 00 = Input 01 = Output 10 = EINT[0] 11 = Reserved
代码实例中:
/************* 按键1申请中断 **************/
s3c2410_gpio_cfgpin (S3C2410_GPF0,S3C2410_GPIO_INPUT);
s3c2410_gpio_cfgpin (S3C2410_GPF0,S3C2410_GPF0_EINT0); //设置相应GPIO寄存器为中断模式
。。。 。。。
#define S3C2410_GPIO_INPUT (0xFFFFFFF0) /* not available on A */
#define S3C2410_GPF0_EINT0 (0x02 << 0)
问题:
既然是按键1申请中断,为什么之前先要s3c2410_gpio_cfgpin (S3C2410_GPF0,S3C2410_GPIO_INPUT); ?
下面是内核代码中s3c2410_gpio_cfgpin 实现:
void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function)
{
void __iomem *base = S3C24XX_GPIO_BASE(pin);
unsigned long mask;
unsigned long con;
unsigned long flags;
if (pin < S3C2410_GPIO_BANKB) {
mask = 1 << S3C2410_GPIO_OFFSET(pin);
} else {
mask = 3 << S3C2410_GPIO_OFFSET(pin)*2;
}
switch (function) {
case S3C2410_GPIO_LEAVE:
mask = 0;
function = 0;
break;
case S3C2410_GPIO_INPUT:
case S3C2410_GPIO_OUTPUT:
case S3C2410_GPIO_SFN2:
case S3C2410_GPIO_SFN3:
if (pin < S3C2410_GPIO_BANKB) {
function -= 1;
function &= 1;
function <<= S3C2410_GPIO_OFFSET(pin);
} else {
function &= 3;
function <<= S3C2410_GPIO_OFFSET(pin)*2;
}
}
/* modify the specified register wwith IRQs off */
local_irq_save(flags);
con = __raw_readl(base + 0x00);
con &= ~mask;
con |= function;
__raw_writel(con, base + 0x00);
local_irq_restore(flags);
}
回复 楼主 jay_lee_1982 的帖子
s3c2410_gpio_cfgpin (S3C2410_GPF0,S3C2410_GPIO_INPUT); ;设置行引脚为输入,不再接受中断信号即实现关中断功能