三星2440键盘驱动问题

jay_lee_1982   2010-5-21 16:40 楼主
在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);
}

回复评论 (2)

回复 楼主 jay_lee_1982 的帖子

s3c2410_gpio_cfgpin (S3C2410_GPF0,S3C2410_GPIO_INPUT); ;设置行引脚为输入,不再接受中断信号即实现关中断功能
处处留心皆学问!
点赞  2010-5-22 08:40
哦,谢谢,知道了。
点赞  2010-5-22 23:10
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复