展开

关键词

高通GPIO(DTS方式)

、在kernel代码中操作gpio 在代码中有两种方式操作gpio,一种是一次申请单个gpio,通过设备树,成功后操纵该gpio,另一种是使用pinctrl子系统,通过设备树设置,一次操作多个gpio。 2.1 直接操作GPIO:因为GPIO一般都是平台设备,一般设备树挂载的节点都可以在&soc下:1 device_node {2 ...3 gpio_name = ; gpio_994 ...5 } 代码:1      int gpio_99 = of_get_named_gpio_flags(dev->of_node, gpio_name, 0, NULL); 从设备数节点, 可选2 gpio_request pinctrl的理解和总结 linux内核中的GPIO系统之(5):gpio subsysem和pinctrl subsystem之间的耦合DTS代码:1 device_node {2 ...3 pinctrl-names = gpio_active, gpio_sleep; 分别对用pinctrl-0和pinctrl-14 pinctrl-0 = ; 引用5 pinctrl-1 = ; 引用6 ...7 };代码:

2.8K40

基于IMX6的GPIO程序

IO的读写一、层 1、ioctl函数     ioctl函数从应用层传递给层不同的cmd参数,层根据传递的cmd参数,使用switch语句判别,来进行不同的工作。 因此要写好一个ioctl的程序,首先要学会如何正确设置cmd参数。     在程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备程序请求处理内容的值。 4、编译程序     写好层程序,使用Makefile,进行编译。编译好的**.ko文件拷贝到开发板,通过insmod指令进行加载即可。 注意:应用层的ioctl函数的cmd参数是传递给层用来区分不同操作的。 arg参数是层和应用层交换的数据,例如当写GPIO,arg=1时,应用层给层传递1,层控制GPIO为高电平;当读GPIO时,应用层通过层传递过来的arg参数的值来判别GPIO的高低电平。

85880
  • 广告
    关闭

    腾讯云前端性能优化大赛

    首屏耗时优化比拼,赢千元大奖

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux通用GPIO写法与应用

    方法二:自己编写GPIO的方式该方式主要利用字符设备程序,通过ioctl函数进行控制。相比用sysfs文件系统的方式,这种方式的操作流程更加的清晰。 程序的编写gpio属于字符设备,所以可以通过字符设备程序的框架来完善gpio控制。 将GPIO集成到内核中由于前面已经将问题模块单独编译,此时若想集成到内核中,则需要做以下几件事:4.1 向内核中添加文件由于GPIO属于字符设备,所以应该放在kerneldriverschar 这个宏表示当配置了TFM_V2_GPIO宏时,tfmv2_gpio.c将会编译成,内核启时,该加载。下图是Linux启后自加载的tfm_v2的gpio。? 同时启后再dev目录中可以看到生成的设备?5. 总结由于应用层不能直接操作gpio,但是应用程序可以调用程序的接口来操作gpio。这也是为什么控制gpio这么麻烦的原因。

    2.5K31

    手把手教你树莓派GPIO管脚

    在前两次文章中,我们给大家简单介绍了树莓派,并介绍了如何安装raspbian系统,今天我们来看下,系统安装后,我们如何来操作树莓派的GPIO来控制LED灯的点亮。 准备工作:安装有respbian系统的树莓派开发板,鼠标,键盘,HDMI线LED灯,电阻,面包板,导线若干搭建电路:电路很简单,就是用树莓派的gpioLED灯,按照树莓派的GPIO管脚分布图,将LED 灯串联一个限流电阻后,一段接GPIO 引脚,一端接地。? 电路搭建好之后,就是写程序来LED点亮打开python3?新建一个文件,并添加下图代码,保存,并运行? 点击运行模块,?即可看到LED灯点亮?

    63450

    AB153x API----GPIO枚举

    HAL_GPIO_DRIVING_CURRENT_16MA = 1, HAL_GPIO_DRIVING_CURRENT_24MA = 2, HAL_GPIO_DRIVING_CURRENT_32MA = 3} 该枚举定义了电流 ◆ hal_gpio_driving_current_t 枚举hal_gpio_driving_current_t 该枚举定义了电流。 枚举器 HAL_GPIO_DRIVING_CURRENT_8MA 将GPIO电流定义为8mA。 HAL_GPIO_DRIVING_CURRENT_16MA 将GPIO电流定义为16mA。 HAL_GPIO_DRIVING_CURRENT_24MA 将GPIO电流定义为24mA。 HAL_GPIO_DRIVING_CURRENT_32MA 将GPIO电流定义为32mA。 HAL_GPIO_1 GPIO引脚1。 HAL_GPIO_2 GPIO引脚2。 HAL_GPIO_3 GPIO引脚3。 HAL_GPIO_4 GPIO引脚4。 HAL_GPIO_5 GPIO引脚5。

    23720

    用3个IO口控制6个LED灯,怎么做到的?查理复用!

    单片机除去电源脚(正极)和GND脚(负极),只剩最多6个GPIO脚。那么是怎么做到够用的?原来,经过巧妙的电路设计,这款电牙刷实现了用3个GPIO控制6个LED灯,节省了GPIO。 查理复用是一种能够在LED,特别是大量LED时有效地节约GPIO的方法。使用该方法,n个GPIO可以 n*(n-1) 个LED,所以:使用2个GPIO可以2个LED。 使用3个GPIO可以6个LED。使用4个GPIO可以12个LED。以此类推。这种方式能够实现的基础是:单片机GPIO的三个状态:高电平、低电平、高阻态。LED具有单向导电性。 首先,LED亮起时完全由单片机的GPIO输出电流,所以对于GPIO的电流能力有一定的要求。 设计电路时要注意查询自己使用的MCU的电流能力,下图是STM32单片机中对GPIO电流能力的说明:其次,如果出现了某个LED开路或短路的情况,电流的流向会被打乱,LED亮起来的逻辑会变得错乱。

    21540

    全志A64 设备树里的gpio应用开发

    gpio控制器是由厂商负责好的,在设备树里关于gpio控制器的描述:pio: pinctrl@01c20800 { compatible = allwinner,sun50i-pinctrl; reg ----上下拉, 0关闭功能, 1上拉, 2下拉, 3保留 | | | | | |-------------------------力,电流等级(0 - 3),级别越高,输出电流越大 | | | | pio r_pio(PL组) |-----------------------------------------------------属性名字(随便命名)那么在Linux里如何获取设备树里设备节点的 );每个io只能被请求一次,可防止多个来控制同一个IO口void gpio_free(unsigned gpio); 释放已请求的io口 int gpio_direction_input(unsigned :jkbuzzer { compatible = jk,buzzer; gpios = ; }; jkleds { compatible = jk,leds; gpios = , ; };在Linux中编写蜂鸣器的测试代码

    1.1K30

    瑞芯微RV1109配置GPIO设备树修改笔记(熟悉新平台从点灯大法开始)

    compatible 表示兼容的意思,它的作用就是定义一系列的字符串,用来指定硬件是否兼容相应的,其它的部分接下来分析。 3.2、 GPIO 实现3.2.1、设备树节点配置管脚绑定编号位于:kernelincludedt-bindingspinctrlrockchip.h? 以下是 bl_led 的设备树节点:bl_led{ gpio_num = ; gpio_function = ; 0:output 1:input}; 3.2.2、 Linux 实现内核中 rp_gpio 这个可以用来它,经过 linux grep 命令的查看,可以看到该源代码的位置位于driversrongpinrp_gpio.c :.driversrongpinrp_gpio.c:275 gpio_data -> rp_gpio_num.gpio_event); } } ret = input_register_device(gpio_data->input); } *设置platform数据

    45420

    【i.MX6ULL】开发6——Pinctrl子系统与GPIO子系统点亮LED

    使用直接操作寄存器的方式,是将与LED有关的寄存器信息,直接写到了LED的代码中,这也是一种比较常规的控制方式。但当芯片的寄存器发了变,就要对底层的进行重写。 那SD卡程序怎么知道CD引脚连接的GPIO1_IO19呢? 属于GPIO1组19 表示GPIO1组的第19号IOGPIO_ACTIVE_LOW 表示低电平有效根据上面这些信息,SD卡程序就可以使用GPIO1_IO19来检测SD卡的CD信号了2.2 gpio子系统 3.3 修改LED文件在上一篇的设备树版的文件上进行修改,主要修改内容如下。 4.2 测试测试方式与之前的一样,都是先加载文件,然后调用应用程序来控制LED的亮灭:效果和之前的寄存器版点亮LED与设备树版点亮LED的效果一样5 总结本篇介绍了使用Pinctrl子系统与GPIO

    9420

    全志平台GPIO 在sys_config.fex中的具体定义及配置方法

    全志平台GPIO 在sys_config.fex中的具体定义及配置方法1.GPIO的定义与使用1.1.GPIO在sys_config.fex 中的定义在对应方案中的sys_config.fex 可以找到许多的 :gpio_test0 = port:PF02Port:端口+组内序号| | | | | |——————-输出电平| | | | |—————————–内部电阻| | | |————————————–能力 端口编号端口编号,例如:PA,PB,PC, …组内序号,例如:0,1, 2, …功能选择,指定PIN 的功能,具体参考IC datasheet内部电阻,包括三种状态,0:上下拉禁用(默认), 1:上拉,2:下拉能力 ,柯配置能力四级别,0(默认),1, 2, 3输出电平,0或1,只有当PIN配成 输出是才有效1.2.GPIO在datasheet中的功能定义对应IC的datasheet 中的 GPIO MULTIPLEXING 如果GPIO 配置其他功能选择,内部电阻,能力之类,调用 pinctrl 模块接口配合使用。

    19620

    Linux 开发 gpio子系统 快速入门

    gpio 和 pinctrl 子系统在内核里的使用率非常高,和嵌入式产品的关联非常大。从这两个子系统开始学习开发是个不错的入门选择。 pinctrl 的作用:引脚复用,例如某个引脚即可用作为普通的gpio,也可以作为UART的TX;引脚配置,一般包括上下拉、能力等;? gpio子系统的常见,例如 leds-gpio.c、gpio_keys.c 等legacy.rst描述 legacy gpio 接口注:本文基于 Linux-4.19。 interface,形式为 gpiod_xxx(),例如 void gpiod_set_value(struct gpio_desc *desc, int value),新添加的代码一律采用这套 API 点击查看大图正常情况下,工程师不需要了解 gpio chip driver 和 gpiolib:工程师负责编写 gpio consumer drvier;芯片厂商的 bsp 工程师负责编写 gpio

    25620

    【深度】韦东山:GPIO和Pinctrl子系统的使用

    前面的视频,我们使用直接操作寄存器的方法编写。这只是为了让大家掌握程序的本质,在实际开发过程中我们可不这样做,太低效了! 现在的芯片辄几百个引脚,在使用到GPIO功能时,让你一个引脚一个引脚去找对应的寄存器,这要疯掉。术业有专攻,这些累活就让芯片厂家做吧──他们是BSP工程师。我们在他们的基础上开发,我们是工程师。 以前我们通过寄存器来操作GPIO引脚,即使LED程序,对于不同的板子它的代码也完全不同。 当BSP工程师实现了GPIO子系统后,我们就可以: a. 在设备树里指定GPIO引脚 b. 在代码中: 使用GPIO子系统的标准函数获得GPIO、设置GPIO方向、读取设置GPIO值。 这样的代码,将是单板无关的。 2.3 在代码中调用GPIO子系统在设备树中指定了GPIO引脚,在代码中如何使用? 也就是GPIO子系统的接口函数是什么?

    1K20

    PYNQ上手笔记 | ③PS端+PL端点灯

    ),板载外设。 其中:橙色部分是需要自己编写的应用程序代码带有bsp的绿色部分是SDK自生成的板级支持包黄色部分是关于ARM内核的一些硬件设计文件2.4.1.1.硬件设计文件(hdf)红色文件system.hdf 在这里插入图片描述2.4.1.2.板级支持包(BSP)板级包中只需要关注绿色的文件system.mss,这个文件说明了该工程中板级支持包的所有信息,包括:目标硬件信息 ? 5.实验扩展5.1.自己手实现led5.1.1.新建空工程在SDK中左上角“File -> New -> Application Project”,创建一个空工程: ?? 5.2.加入RGBLED加入RGBLED有两种方法:挂载在已实现的axi_gpio_0的通道1上:axi_gpio_0支持32个io,led只使用了前4个,所以可以将两颗rgbled的6个引脚挂载在

    36910

    gpio_key按键

    1.gpio_key.c介绍1.1 功能介绍Linux内核下的 driversinputkeyboardgpio_keys.c实现了一个体系结构无关的GPIO按键,使用此按键,只需在设备树gpio-key 的实现非常简单,但是较适合于实现独立式按键。1.2 架构介绍gpio-keys是基于input架构实现的一个通用GPIO按键。 该基于platform_driver架构,实现了和设备分离,符合Linux设备模型的思想。本文以自己的理解介绍gpio_keys.c实现原理及代码技巧。 注:容易进入误区的一点,设备树of _xx API并不都是直接从设备树里直接拿到属性的,而是先将设备树节点属性值转化为device_node数据结构体成员值,然后通过of_xx API从device_node 附上遍历获取设备树节点属性值代码:?

    88130

    【STM32H7教程】第15章 STM32H7的GPIO基础知识(重要)

    GPIO配置是所有外设的基础,大家务必要熟练掌握。 开漏端相当于 MOS 管的漏极(三极管的集电极),要得到高电平状态必须外接上拉电阻才行,因此输出高电平的能力完全由外接上拉电阻决定,但是其输出低电平的能力很强。 15.3.3 复用推挽和开漏复用指的是GPIO切换到CPU内部设备(比如SPI,I2C,UART等电路),也就是GPIO不是作为普通IO使用,是由内部设备直接。推挽和开漏的特征同上。 拉电流负载:一种负载电流从门流向外电路,称为拉电流负载。比如使用STM32H7的GPIO直接LED就是拉电流形式。? 灌电流负载:负载电流从外电路流入门,称为灌电流负载。 比如下面这种形式的LED电路?有了上面这些知识后再来看STM32H7的IO能力(截图来自STM32H7参考手册):?

    49430

    Linux中gpio接口的使用方法示例

    前言Linux内核中gpio是最简单,最常用的资源(和 interrupt ,dma,timer一样)程序,应用程序都能够通过相应的接口使用gpiogpio使用0~MAX_INT之间的整数标识,不能使用负数 ,gpio与硬件体系密切相关的,不过linux有一个框架处理gpio,能够使用统一的接口来操作gpio.在讲gpio核心(gpiolib.c)之前先来看看gpio是怎么使用的使用gpio使用gpio接口需要包含 #include ,在中使用延时函数mdelay,需要包含#include 文件,Documentationgpio.txt文件有作详细说明。 value);获取输入引脚的电平:* GPIO INPUT: return zero or nonzero *int gpio_get_value(unsigned gpio); * GPIO OUTPUT (unsigned gpio);将GPIO映射为IRQ中断:* map GPIO numbers to IRQ numbers *int gpio_to_irq(unsigned gpio); * map

    43053

    GPIO 软件框架

    GPIO 八种工作模式详解接着上一篇的讲,我们上一篇研究了 GPIO 的硬件结构,其来源于 STM32 官方手册,研究了 GPIO 的八种工作模式和推挽输出及开漏输出原理,接下来我们研究 GPIO 的软件部分 pinctrl 子系统管理 200 个 IO 口的上拉下拉电阻,电流能力,是硬件底层的存在。 ②、根据获取到的 pin 信息来设置 pin 的复用功能③、根据获取到的 pin 信息来设置 pin 的电气特性,比如上下拉、速度、能力等。 注意,pinctrl 子系统也是一个标准的 platform ,当设备和匹配的时候,probe 函数会执行,只是 pinctrl 子系统采用的 arch_initcall 去声明,而不是 module_init (具体原因看下面这篇文章)Linux 挂载顺序分析 pinctrl 和 gpio 子系统软件框架如下:pinctrlgpio可以看出其实两者软件框架一样的,主要是 HW Abstract layer

    6620

    STM32低功耗模式下GPIO如何配置最节能?

    目录1、将未使用的GPIO 配置为模拟输入模式2、调节GPIO 速度3、GPIO不使用时禁用寄存器时钟4、避免悬空未使用的引脚----STM32低功耗模式下GPIO如何配置最节能,这里总结了一下四点,亲测有效 1、将未使用的GPIO 配置为模拟输入模式GPIO始终有一个输入通道,可以是数字或模拟通道,如果不需要读取GPIO数据,则优先配置为模拟输入。 因此必须平衡GPIO性能与噪声。通常GPIO配置为低速模式即可,但是高波特率的串口需要配置为高速模式,所以每个GPIO信号的上升时间和下降时间必须适应与相关信号频率和电路板容性负载兼容的最小值。 如果GPIO连接到外部接收器(外部元件输入),则必须使用PP或PUPD强制GPIO信号值。当GPIO连接到器(外部元件输出或总线)时,器必须提供有效电平(VDD 或接地)。 如果未定义器电平,则必须使用PUPD强制GPIO上的信号。

    26040

    基于瑞芯微RV1109 Linux触摸屏GT911调试心得

    ,那这个I2C 设备肯定是存在的;其他数值表示该地址对应的 I2C 设备是存在的,并且还没有程序跟它匹配。 2、GT911移植2.1、配置Linux内核支持gt9xxGT911在Linux内核中已经支持了,位于以下路径,如果没有的话就需要跟触摸屏厂商要代码,如果要不到那么就拿着Datasheet自己干吧 kerneldriversinputtouchscreengt9xx 另外,也提供了menuconfig,我们只需要在配置的时候搜索GT9XX,然后配置上就可以了。 2.2、查看GT911代码中需要配置的设备树参数代码:kerneldriversinputtouchscreengt9xx 接下来打开gt9xx.c,划到最下面,我们可以看到:这样,我们就确定了设备树中的第一个参数 由1部分我们已经知道“UU”表示这个地址的 I2C 设备已经有在使用占用它了,那这个I2C 设备肯定是存在的;也就是说这个设备已经挂载成功了。

    43360

    【i.MX6ULL】开发3——GPIO寄存器配置原理

    前面的两篇Linux文章,介绍了字符设备的两种新旧开发方式,并使用一个虚拟的字符来学习字符设备的开发的流程。 同样,i.MX6ULL也有多种点灯方式:裸机系统:汇编操作寄存器点灯、C语言操作寄存器点灯跑Linux系统:字符LED点灯、设备树LED点灯究其本质,最终都是要操作i.MX6ULL的寄存器。 该模式又包含了如下的属性配置:DSE 能力配置:通过调整芯片内部与引脚串联电阻 R0 的大小,从而改变引脚的能力。可以把R0的值配置为原值的12、13⋯17 等。 它又分成MUX_Mode(IO 模式控制)以及Pad Settings(Pad 配置)两个部分:① MUX_Mode配置:用来配置引脚的复用功能② Pad Settings 配置:配置引脚的属性,例如能力 命名1.3.1 按照GPIO分组i.MX6ULL芯片的GPIO被分成 5 组, 并且每组GPIO的数量不尽相同,例如GPIO1有32个引脚,GPIO2有22个引脚等等:GPIO组引脚数名称GPIO132GPIO1

    13030

    相关产品

    • 事件总线

      事件总线

      腾讯云事件总线(EB)是一款安全,稳定,高效的无服务器事件管理平台,支持腾讯云服务、自定义应用、SaaS应用以标准化、中心化的方式接入,帮助您轻松实现无服务器事件驱动架构。

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭

      扫码关注云+社区

      领取腾讯云代金券