首页 > 其他分享 >GPIO各类函数的使用

GPIO各类函数的使用

时间:2023-08-30 20:44:06浏览次数:50  
标签:函数 int request unsigned 各类 GPIO gpio

参考:https://lwn.net/Articles/532714/

内核中,系统中的每个 GPIO 都由一个简单的无符号整数表示。一般板子上有几百个GPIO引脚

 

GPIO 必须在使用前进行分配,但当前的实现并未强制执行此要求。基本分配函数为:

    int gpio_request(unsigned int gpio, const char *label);

gpio 参数指示需要哪个 GPIO,而label 则将一个字符串与其关联起来,该字符串稍后会出现在 sysfs 中。通常的约定适用:零返回代码表示成功;否则返回值将为负错误号。

 

GPIO 可以通过以下方式返回到系统:

    void gpio_free(unsigned int gpio); 

这些函数有一些变体;gpio_request_one()可用于设置 GPIO 的初始配置, gpio_request_array()可以通过一次调用请求和配置一整套 ​​GPIO。还有一些“托管”版本(例如 devm_gpio_request() ),可以在开发人员忘记时自动处理清理工作。

 

一些 GPIO 用于输出,其他用于输入。适当接线的 GPIO 可以在任一模式下使用,但在任何给定时间只有一个方向处于活动状态。内核代码必须告知 GPIO 核心如何使用线路;这是通过这些函数完成的:

    int gpio_direction_input( unsigned int gpio); int gpio_direction_output( unsigned int gpio, int );

无论哪种情况,gpio都是 GPIO 编号。在输出情况下,还必须指定 GPIO 的值(零或一);作为调用的一部分,GPIO 将进行相应设置。对于这两个函数,返回值同样为零或负错误数。(具有适当功能的)GPIO 的方向可以随时更改。

对于输入 GPIO,可以通过以下方式读取当前值:

    int gpio_get_value( unsigned int gpio); 

该函数返回所提供的gpio 的值;它没有返回错误代码的规定。假设(在几乎所有情况下都是正确的) 调用 gpio_direction_input()时会发现任何错误,因此检查该函数的返回值非常重要。

设置输出 GPIO 的值始终可以使用gpio_direction_output() 完成 ,但是,如果已知 GPIO 已处于输出模式,则gpio_set_value()可能会更有效一些:

 

    void gpio_set_value(unsigned int gpio, int value);

当输入 GPIO 更改值时,某些 GPIO 控制器可以生成中断。在这种情况下,希望处理此类中断的代码应首先确定与给定 GPIO 线关联的 IRQ 号:

    int gpio_to_irq( unsigned int gpio); 

给定的gpio必须已通过 gpio_request()获得并首先置于输入模式。如果有关联的中断号,它将作为gpio_to_irq()的返回值传回;否则将返回负错误号。一旦以这种方式获得,中断号就可以传递给request_irq()以设置中断的处理。

最后,GPIO 子系统能够通过 sysfs 层次结构表示 GPIO 线,允许用户空间查询(并可能修改)它们。内核代码可以导致特定的 GPIO 出现在 sysfs 中:

 

    int gpio_export(unsigned int gpio, bool Direction_may_change);

Direction_may_change参数控制是否允许用户空间改变GPIO的方向在许多情况下,允许这种控制会导致整个系统发生不好的事情。可以使用gpio_unexport()从 sysfs 中删除 GPIO ,或者使用gpio_export_link()指定另一个名称。

这就是内核低级 GPIO 接口的概述。许多细节自然被省略了;有关更详细的说明,请参阅Documentation/gpio.txt 。还省略了 API 的低级驱动程序端,通过它可以将 GPIO 线提供给 GPIO 子系统;涵盖该 API 可能是未来文章的主题。不过,下一部分将探讨上述 API 中发现的一些缺陷以及如何修复这些缺陷。

标签:函数,int,request,unsigned,各类,GPIO,gpio
From: https://www.cnblogs.com/TysonXiao/p/17668237.html

相关文章

  • 函数命名
    1.标题旁的内容渲染<div><TitleComponent><PrimaryOrganization>{renderFunc?.()}<div>renderTitleExtras: 这个名称表明函数的目的是在标题右侧渲染额外的内容renderTitleExtensions: 如果渲染的内容类似于标题的侧边栏,这个名称可以传达其作用(渲染的内容......
  • js 函数的保护函数 防止toString检测
    js函数的保护函数防止toString检测letcatvm={};(()=>{"usestrict";const$toString=Function.toString;constmyFunction_toString_symbol=Symbol('('.concat('',')_',(Math.random()+'').toStr......
  • map()函数
    map()是Python内置的函数之一,用于将一个函数应用于一个或多个可迭代对象中的每个元素,并返回一个包含结果的新的map对象。根据引用,map()函数接受两个参数,第一个参数是一个函数名,第二个参数是一个或多个可迭代的序列(如列表、元组、集合)。map()函数将函数应用于可迭代对象中的每个元......
  • STL- 函数对象
    4STL-函数对象4.1函数对象4.1.1函数对象概念概念:重载函数调用操作符的类,其对象常称为函数对象函数对象使用重载的()时,行为类似函数调用,也叫仿函数本质:函数对象(仿函数)是一个类,不是一个函数4.1.2函数对象使用特点:函数对象在使用时,可以像普通函数那样调用,可以......
  • 函数模板
    1模板1.1模板的概念模板就是建立通用的模具,大大提高复用性模板的特点:模板不可以直接使用,它只是一个框架模板的通用并不是万能的1.2函数模板C++另一种编程思想称为泛型编程,主要利用的技术就是模板C++提供两种模板机制:函数模板和类模板1.2.1函数模板语法函......
  • 函数提高
    3函数提高3.1函数默认参数在C++中,函数的形参列表中的形参是可以有默认值的。语法:返回值类型函数名(参数=默认值){}3.2函数占位参数C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置语法:返回值类型函数名(数据类型){}在现阶段函数的占位参......
  • UE如何制作C++函数事件蓝图
    一.蓝图类中的函数在新建的actor中的C++ .h文件中,声明UFUNCTION(BlueprintCallable,Category="XXXX"),然后在.cpp中写函数的内容即可。编译后用蓝图继承C++类,可以进行函数的调用了二.建立函数库任意蓝图可以调用建立BlueprintFunctionLibrary的C++类,参考一中进行函数......
  • C++虚函数 覆盖(重写)
    1、虚函数  在成员函数前面加virtual后,该函数就称为虚函数,此时该类就会像虚继承一样多了一个虚表指针(虚函数表指针、虚指针)2、虚函数表  虚表指针指向的是属于该类的一张表格的首地址,该表格中记录了该类中所有虚函数的首地址    如果类中没有其他成员变......
  • Vue3 响应式工具函数
    isRef()​检查某个值是否为ref。unref()​如果参数是ref,则返回内部值,否则返回参数本身。这是 val=isRef(val)?val.value:val 计算的一个语法糖toRef()​可以将值、refs或getters规范化为refs(3.3+)。也可以基于响应式对象上的一个属性,创建一个对应的ref。这......
  • golang 协程、延迟函数调用、以及恐慌和恢复
    此篇文章将介绍协程和延迟函数调用。协程和延迟函数调用是Go中比较独特的两个特性。恐慌和恢复也将在此篇文章中得到简单介绍。本文并非全面地对这些特性进行介绍,后面的其它文章会陆续补全本文的未介绍的内容。协程(goroutine)现代CPU一般含有多个核,并且一个核可能支持多线程。......