Linux 驱动层gpio调用

本文详细介绍了GPIO子系统中的IO口操作,包括GPIO的申请、释放、输入输出设置,以及GPIO中断的处理、中断请求和释放方法。重点讲述了如何通过设备树获取GPIO信息和配置中断功能。

###################  GPIO中断
芯片厂商的gpio被定义在drivers/gpio/gpio-xxx.c中

1.基于GPIO子系统的IO口控制
    /*用于申请一个GPIO管脚*/
1.1    int gpio_request(unsigned gpio, const char* label)
    gpio --- 要申请的gpio标号,使用of_get_named_gpio函数从设备树获取
指定的gpio信息,此函数会发挥这个GPIO标号
    label --- 别名

    /*用于释放管脚的空间*/
1.2    void gpio_free(unsigned gpio)
    
    /*用于设置某个gpio输入*/
1.3    int gpio_direction_input(unsigned gpio)

    /*用于设置某个gpio输出,并设置默认输出值*/
1.4    int gpio_direction_output(unsigned gpio, int value)

    /*用于获取某个GPIO的值(0\1)*/
1.5     #define gpio_get_value __gpio_get_value
    int __gpio_get_value(unsgined gpio)
    返回值 --- 非负值:得到的GPIO值,负值:获取失败

    /*gpio_set_value*/
1.6    #define gpio_set_value __gpio_set_value
    void __gpio_set_value(unsigned gpio, int value)

    /*从节点名找到设备节点*/
1.7    static inline struct device_node *of_find_node_by_path(const char *path)

    /*从设备节点搜索gpio属性,返回GPIO编号*/
1.8    static inline int of_get_named_gpio(struct device_node *np,
                                   const char *propname, int index)
    propname --- 属性名
    index  ---  第index个属性

###################  GPIO中断
    /*通过GPIO号申请中断*/
2.1    static inline int gpio_to_irq(unsigned int gpio)

    /*中断处理函数*/
2.2    static irqreturn_t myIntHandler(int irq, void *dev_id)
    
    /*申请中断*/
2.3    request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,
        const char *name, void *dev)

    /*中断释放*/
2.4    const void *free_irq(unsigned int, void *);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值