s3c2410_gpio_setpin()等系列函数

发布时间:2024-08-09  

函数的定义在arch/arm/mach-s3c2410/gpio.c,相关的宏定义在include/asm-arm/arch-s3c2410/regs-gpio.h




(1)voids3c2410_gpio_setpin(unsigned int pin, unsigned intto);


设置相应GPIO口的输出值,例如:

pin=S3C2410_GPG2,to=0,则设置S3C2410_GPG2的输出值为0;

pin=S3C2410_GPG2,to=1,则设置S3C2410_GPG2的输出值为1。


函数定义:


viewplain

void s3c2410_gpio_setpin(unsigned int pin, unsigned int to)  

{  

    void __iomem *base = S3C2410_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);  

    dat &= ~(1 << offs);  

    dat |= to << offs;  

    __raw_writel(dat, base + 0x04);  

  

    local_irq_restore(flags);  

}  

EXPORT_SYMBOL(s3c2410_gpio_setpin);  


(2)unsigned int s3c2410_gpio_getpin(unsigned intpin);


获取相应GPIO口的值。


函数定义:


viewplain

unsigned int s3c2410_gpio_getpin(unsigned int pin)  

{  

    void __iomem *base = S3C2410_GPIO_BASE(pin);  

    unsigned long offs = S3C2410_GPIO_OFFSET(pin);  

  

    return __raw_readl(base + 0x04) & (1<< offs);  

}  

  

EXPORT_SYMBOL(s3c2410_gpio_getpin);  


(3)voids3c2410_gpio_cfgpin(unsigned int pin, unsigned intfunction);


设置相应GPIO口的工作模式,输入、输出、中断等。


函数定义:


viewplain

void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function)  

{  

    void __iomem *base = S3C2410_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;  

    }  

  

    local_irq_save(flags);  

  

    con  = __raw_readl(base + 0x00);  

    con &= ~mask;  

    con |= function;  

  

    __raw_writel(con, base + 0x00);  

  

    local_irq_restore(flags);  

}  

  

EXPORT_SYMBOL(s3c2410_gpio_cfgpin);  


(4)unsignedint s3c2410_gpio_getcfg(unsigned int pin);

获取相应GPIO口的工作模式,输入、输出、中断等。


函数定义:


viewplain

unsigned int s3c2410_gpio_getcfg(unsigned int pin)  

{  

    void __iomem *base = S3C2410_GPIO_BASE(pin);  

    unsigned long mask;  

  

    if (pin < S3C2410_GPIO_BANKB) {  

        mask = 1 << S3C2410_GPIO_OFFSET(pin);  

    } else {  

        mask = 3 << S3C2410_GPIO_OFFSET(pin)*2;  

    }  

  

    return __raw_readl(base) & mask;  

}  

  

EXPORT_SYMBOL(s3c2410_gpio_getcfg);  


(5)voids3c2410_gpio_pullup(unsigned int pin, unsigned intto);

设置相应的GPIO口的电平,例如:


pin=S3C2410_GPG2,to=0,则拉低S3C2410_GPG2,也就是设置S3C2410_GPG2的值为0;

pin=S3C2410_GPG2,to=1,则拉高S3C2410_GPG2,也就是设置S3C2410_GPG2的值为1。


函数定义:


viewplain

void s3c2410_gpio_pullup(unsigned int pin, unsigned int to)  

{  

    void __iomem *base = S3C2410_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);  

    up &= ~(1L << offs);  

    up |= to << offs;  

    __raw_writel(up, base + 0x08);  

  

    local_irq_restore(flags);  

}  

  

EXPORT_SYMBOL(s3c2410_gpio_pullup);  


(6)unsignedint s3c2410_modify_misccr(unsigned int clear, unsigned intchange);

杂项设置,设置寄存器MISCCR,具体看函数定义。


函数定义:


viewplain

unsigned int s3c2410_modify_misccr(unsigned int clear, unsigned int change)  

{  

    unsigned long flags;  

    unsigned long misccr;  

  

    local_irq_save(flags);  

    misccr = __raw_readl(S3C2410_MISCCR);  

    misccr &= ~clear;  

    misccr ^= change;  

    __raw_writel(misccr, S3C2410_MISCCR);  

    local_irq_restore(flags);  

  

    return misccr;  

}  

  

EXPORT_SYMBOL(s3c2410_modify_misccr);  


(7)ints3c2410_gpio_getirq(unsigned int pin);

获取相应的GPIO口所对应的中断号。


函数定义:


viewplain

int s3c2410_gpio_getirq(unsigned int pin)  

{  

    if (pin < S3C2410_GPF0 || pin > S3C2410_GPG15_EINT23)  

        return -1;    

  

    if (pin < S3C2410_GPG0 && pin > S3C2410_GPF7)  

        return -1;    

  

    if (pin < S3C2410_GPF4)  

        return (pin - S3C2410_GPF0) + IRQ_EINT0;  

  

    if (pin < S3C2410_GPG0)  

        return (pin - S3C2410_GPF4) + IRQ_EINT4;  

  

    return (pin - S3C2410_GPG0) + IRQ_EINT8;  

}  

  

EXPORT_SYMBOL(s3c2410_gpio_getirq);  


(8)ints3c2410_gpio_irqfilter(unsigned int pin, unsigned int on, unsignedint config);

中断过滤配置,具体看函数定义。


函数定义:


viewplain

int s3c2410_gpio_irqfilter(unsigned int pin, unsigned int on,  

               unsigned int config)  

{  

    void __iomem *reg = S3C2410_EINFLT0;  

    unsigned long flags;  

    unsigned long val;  

  

    if (pin < S3C2410_GPG8 || pin > S3C2410_GPG15)  

        return -1;  

  

    config &= 0xff;  

  

    pin -= S3C2410_GPG8_EINT16;  

    reg += pin & ~3;  

  

    local_irq_save(flags);  

  

      

  

    val = __raw_readl(reg);  

    val &= ~(0xff << ((pin & 3) * 8));  

    val |= config << ((pin & 3) * 8);  

    __raw_writel(val, reg);  

  

      

  

    val = __raw_readl(S3C2410_EXTINT2);  

    val &= ~(1 << ((pin * 4) + 3));  

    val |= on << ((pin * 4) + 3);  

    __raw_writel(val, S3C2410_EXTINT2);  

  

    local_irq_restore(flags);  

  

    return 0;  

}  

  

EXPORT_SYMBOL(s3c2410_gpio_irqfilter); 


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>