zoukankan      html  css  js  c++  java
  • s3c2410_gpio_setpin()等系列函数

    s3c2410-GPIO操作相关系列函数解析


       

    函数的定义在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。

    函数定义:

    1. void s3c2410_gpio_setpin(unsigned int pin, unsigned int to)  
    2.  
    3.     void __iomem *base S3C2410_GPIO_BASE(pin);  
    4.     unsigned long offs S3C2410_GPIO_OFFSET(pin);  
    5.     unsigned long flags;  
    6.     unsigned long dat;  
    7.   
    8.     local_irq_save(flags);  
    9.   
    10.     dat __raw_readl(base 0x04);  
    11.     dat &= ~(1 << offs);  
    12.     dat |= to << offs;  
    13.     __raw_writel(dat, base 0x04);  
    14.   
    15.     local_irq_restore(flags);  
    16.  
    17. EXPORT_SYMBOL(s3c2410_gpio_setpin);  

    (2)unsigned int s3c2410_gpio_getpin(unsigned intpin);

    获取相应GPIO口的值。

    函数定义:

    1. unsigned int s3c2410_gpio_getpin(unsigned int pin)  
    2.  
    3.     void __iomem *base S3C2410_GPIO_BASE(pin);  
    4.     unsigned long offs S3C2410_GPIO_OFFSET(pin);  
    5.   
    6.     return __raw_readl(base 0x04) (1<< offs);  
    7.  
    8.   
    9. EXPORT_SYMBOL(s3c2410_gpio_getpin);  

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

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

    函数定义:

    1. void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function)  
    2.  
    3.     void __iomem *base S3C2410_GPIO_BASE(pin);  
    4.     unsigned long mask;  
    5.     unsigned long con;  
    6.     unsigned long flags;  
    7.   
    8.     if (pin S3C2410_GPIO_BANKB)  
    9.         mask << S3C2410_GPIO_OFFSET(pin);  
    10.     else  
    11.         mask << S3C2410_GPIO_OFFSET(pin)*2;  
    12.      
    13.   
    14.     local_irq_save(flags);  
    15.   
    16.     con  __raw_readl(base 0x00);  
    17.     con &= ~mask;  
    18.     con |= function;  
    19.   
    20.     __raw_writel(con, base 0x00);  
    21.   
    22.     local_irq_restore(flags);  
    23.  
    24.   
    25. EXPORT_SYMBOL(s3c2410_gpio_cfgpin);  

    (4)unsignedint s3c2410_gpio_getcfg(unsigned int pin);

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

    函数定义:

    1. unsigned int s3c2410_gpio_getcfg(unsigned int pin)  
    2.  
    3.     void __iomem *base S3C2410_GPIO_BASE(pin);  
    4.     unsigned long mask;  
    5.   
    6.     if (pin S3C2410_GPIO_BANKB)  
    7.         mask << S3C2410_GPIO_OFFSET(pin);  
    8.     else  
    9.         mask << S3C2410_GPIO_OFFSET(pin)*2;  
    10.      
    11.   
    12.     return __raw_readl(base) mask;  
    13.  
    14.   
    15. 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。

    函数定义:

    1. void s3c2410_gpio_pullup(unsigned int pin, unsigned int to)  
    2.  
    3.     void __iomem *base S3C2410_GPIO_BASE(pin);  
    4.     unsigned long offs S3C2410_GPIO_OFFSET(pin);  
    5.     unsigned long flags;  
    6.     unsigned long up;  
    7.   
    8.     if (pin S3C2410_GPIO_BANKB)  
    9.         return 
    10.   
    11.     local_irq_save(flags);  
    12.   
    13.     up __raw_readl(base 0x08);  
    14.     up &= ~(1L << offs);  
    15.     up |= to << offs;  
    16.     __raw_writel(up, base 0x08);  
    17.   
    18.     local_irq_restore(flags);  
    19.  
    20.   
    21. EXPORT_SYMBOL(s3c2410_gpio_pullup);  

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

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

    函数定义:

    1. unsigned int s3c2410_modify_misccr(unsigned int clear, unsigned int change)  
    2.  
    3.     unsigned long flags;  
    4.     unsigned long misccr;  
    5.   
    6.     local_irq_save(flags);  
    7.     misccr __raw_readl(S3C2410_MISCCR);  
    8.     misccr &= ~clear;  
    9.     misccr ^= change;  
    10.     __raw_writel(misccr, S3C2410_MISCCR);  
    11.     local_irq_restore(flags);  
    12.   
    13.     return misccr;  
    14.  
    15.   
    16. EXPORT_SYMBOL(s3c2410_modify_misccr);  

    (7)ints3c2410_gpio_getirq(unsigned int pin);

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

    函数定义:

    1. int s3c2410_gpio_getirq(unsigned int pin)  
    2.  
    3.     if (pin S3C2410_GPF0 || pin S3C2410_GPG15_EINT23)  
    4.         return -1;    
    5.   
    6.     if (pin S3C2410_GPG0 && pin S3C2410_GPF7)  
    7.         return -1;    
    8.   
    9.     if (pin S3C2410_GPF4)  
    10.         return (pin S3C2410_GPF0) IRQ_EINT0;  
    11.   
    12.     if (pin S3C2410_GPG0)  
    13.         return (pin S3C2410_GPF4) IRQ_EINT4;  
    14.   
    15.     return (pin S3C2410_GPG0) IRQ_EINT8;  
    16.  
    17.   
    18. EXPORT_SYMBOL(s3c2410_gpio_getirq);  

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

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

    函数定义:

    1. int s3c2410_gpio_irqfilter(unsigned int pin, unsigned int on,  
    2.                unsigned int config)  
    3.  
    4.     void __iomem *reg S3C2410_EINFLT0;  
    5.     unsigned long flags;  
    6.     unsigned long val;  
    7.   
    8.     if (pin S3C2410_GPG8 || pin S3C2410_GPG15)  
    9.         return -1;  
    10.   
    11.     config &= 0xff;  
    12.   
    13.     pin -= S3C2410_GPG8_EINT16;  
    14.     reg += pin ~3;  
    15.   
    16.     local_irq_save(flags);  
    17.   
    18.       
    19.   
    20.     val __raw_readl(reg);  
    21.     val &= ~(0xff << ((pin 3) 8));  
    22.     val |= config << ((pin 3) 8);  
    23.     __raw_writel(val, reg);  
    24.   
    25.       
    26.   
    27.     val __raw_readl(S3C2410_EXTINT2);  
    28.     val &= ~(1 << ((pin 4) 3));  
    29.     val |= on << ((pin 4) 3);  
    30.     __raw_writel(val, S3C2410_EXTINT2);  
    31.   
    32.     local_irq_restore(flags);  
    33.   
    34.     return 0;  
    35.  
    36.   
    37. EXPORT_SYMBOL(s3c2410_gpio_irqfilter); 


  • 相关阅读:
    module模块和包(十七)
    swap(十六)
    文件系统
    Confluence 6 管理协同编辑
    Confluence 6 管理协同编辑
    Confluence 6 数据收集隐私策略
    Confluence 6 修改警告的阈值和表现
    Confluence 6 警告的类型
    Confluence 6 诊断
    Confluence 6 垃圾收集性能问题
  • 原文地址:https://www.cnblogs.com/techstone/p/3321360.html
Copyright © 2011-2022 走看看