转:gpio_direction_output 与 gpio_set_value

gpio_set_value(port_num,0/1) 一般只是在这个GPIO口的寄存器上写上某个值,至于这个端口是否设置为输出,它就管不了!

而gpio_direction_output (port_num,0/1),在某个GPIO口写上某个值之后,还会把这个端口设置为输出模式。

因此,有人也许就会建议,把gpio_set_value这个函数直接去掉不用,是否可以,显然是可以的。

系统开发人员在要结合这两者来使用,以便提高效率。

一般某个端口设置好了输入与输出模式后,最好不要经常变动。

首先要调用gpio_direction_output(),以后要设置高低电平时,直接使用gpio_set_value()就可以了,这样可以省却再次调用设置输出模式的操作,从而提高运行效率!

时间: 2024-12-16 08:48:43

转:gpio_direction_output 与 gpio_set_value的相关文章

linux 标准 GPIO 操作

Linux 提供了GPIO 操作的 API,具体初始化及注册函数在 driver/gpio/lib_gpio.c 中实现. #include int gpio_request(unsigned gpio, const char *label); 获得并占有 GPIO port 的使用权,由参数 gpio 指定具体 port.非空的label指针有助于诊断.主要告诉内核这块地址被占用了.当其他地方调用同一地址的gpio_request就会报告错误,该地址已经被申请.在/proc/mem有地址占用表

Linux中的gpio口使用方法

Linux中的IO使用方法 应该是新版本内核才有的方法.请参考:./Documentation/gpio.txt文件 提供的API:驱动需要包含 #include <linux/gpio.h> 判断一个IO是否合法:int gpio_is_valid(int number); 设置GPIO的方向,如果是输出同时设置电平:/* set as input or output, returning 0 or negative errno */int gpio_direction_input(unsi

gpio操作(LS1B)

1.一般gpio_request 封装了mem_request(),起保护作用,最后要调用mem_free之类的,主要是告诉内核这个地址被占用了.当其他地方调用同一地址gpio_request就会报告错误,改地址已被申请.在/proc/mem 可以看到有地址占用表描述. 这种用法的保护前提是大家都遵守先申请在访问,有一个地方没有遵守这个规则,这功能就失效了,就好比进程互斥,必须大家在访问临界资源的时候都先获取锁一样,其中一个没有遵守约定,代码报废: 2.__gpio_set_value 和 gp

u-boot下延时程序失效的bug调试

最近在工作中的一个项目中,大概是将两块板卡相连(一块STM32跑裸机程序,另一块AM335x跑Linux系统),但是发现在u-boot有时无法启动成功,需要通过一个GPIO的状态来判断,具体来说就是本来上电后端口默认高阻抗,先利用程序先拉低大概100ms,然后在使用程序拉高100ms,然后STM32程序检测这段电平跳变,从而确定系统正确启动,否则会进行软件复位使AM335X的单板能够正常启动,程序本身并不难,但是调试时遇到了一个奇怪的bug,简单记录下. 平台:am335x,u-boot v20

gpio_request 原形代码

http://blog.csdn.net/maopig/article/details/7428561 其原型为 int gpio_request(unsigned gpio, const char *label) 先说说其参数,gpio则为你要申请的哪一个管脚,label则是为其取一个名字.其具体实现如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

基于S3C2440的linux-3.6.6移植——LED驱动【转】

本文转载自:http://www.voidcn.com/blog/lqxandroid2012/article/p-625005.html 目前的linux版本的许多驱动都是基于设备模型,LED也不例外. 简单地说,设备模型就是系统认为所有的设备都是挂接在总线上的,而要使设备工作,就需要相应的驱动.设备模型会产生一个虚拟的文件系统——sysfs,它给用户提供了一个从用户空间去访问内核设备的方法,它在linux里的路径是/sys.如果要写程序访问sysfs,可以像读写普通文件一样来操作/sys目录

Linux内核驱动之GPIO子系统(一)GPIO的使用

转自:http://blog.csdn.net/mirkerson/article/details/8464290 一 概述 Linux内核中gpio是最简单,最常用的资源(和 interrupt ,dma,timer一样)驱动程序,应用程序都能够通过相应的接口使用gpio,gpio使用0-MAX_INT之间的整数标识,不能使用负数,gpio与硬件体系密切相关的,不过linux有一个框架处理gpio,能够使用统一的接口来操作gpio.在讲gpio核心(gpiolib.c)之前先来看看gpio是怎

【整理】--ARM GPIO概述

S3C6410的GPIO引脚相对来说比较多,而且大部分引脚都具有多重复用功能,如何在linux上用最简单的方式来控制GPIO这需要我们好好研究一下底层的代码了,其实方法有很多种,鉴于在操作系统端控制GPIO并不像控制传统的单片机那样. 这里我将提及一种方法来讲述,这种方法也是我至今看到最简单的方法 首先我们打开linux-3.0.1\arch\arm\plat-samsung\include\plat下gpio-cfg.h这个头文件,仔细浏览后发现,我们可以使用的函数: 1.设置单一io口 in

中断处理 I/O内存

回顾:内核竞态与并发 什么情况下会产生竞态 1)SMP 2)单CPU支持任务抢占 3)中断和进程之间 4)中断和中断之间 解决竞态的方法 1)中断屏蔽 2)原子操作 位原子操作 整形原子操作 atomic{     int....} 3)自旋锁 优点:一旦可以获取锁,立即获取 缺点:长时间获取锁不成功,会消耗CPU资源 它所保护的临界资源(代码段)通常比较短 4)信号量 down(...)会导致睡眠 等等看前一章中 自旋锁只允许一个持有者,信号量可以有多个持有者 信号量保护的临界资源(代码段)通