博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
什么样的gpio才需要用can_sleep
阅读量:4181 次
发布时间:2019-05-26

本文共 1663 字,大约阅读时间需要 5 分钟。

对于有些挂载在I2C,SPI总线上的扩展GPIO,读写操作可能会导致睡眠,因此不能在中断函数中
  使用。使用下面的函数以区别于正常的GPIO
  int gpio_get_value_cansleep(unsigned gpio);//读GPIO
  void gpio_set_value_cansleep(unsigned gpio, int value);//写GPIO

-------------------------------------------

这句话的意思:如果soc本身(比如100个)gpio不够用, 那么就要另外接一个gpio controller, 上面再提供额外的50个gpio,这个controller连接到soc上是通过总线比如i2c总线连上去的。这个时候写gpio值,就是通过i2c总线去写新加的那个gpio controller的寄存器的值,所以有可能会有睡眠发生,所以要用can_sleep.

====================================================

gpio

======

  头文件:linux/gpio.h

  实现文件:driver/gpio/gpiolib.c

  参考文件:Doccumentation/gpio.txt



准备工作

------------

  为了驱动具体的设备,驱动程序常常需要系统中的各类资源进行申请,形如以下调用

  -->gpio_request(gpio_num, "led gpio"); //申请GPIO,用做led

  -->request_irq(irq_no, irq_handler, IRQF_DISABLED, irq_name, &irq_data);//申请中断

  

  上述gpio_request()就实现了对应GPIO申请的功能。设备驱动程序如果要获得kernel GPIO模块的

  支持(gpio_request能用...),需要完成如下步骤

  -->Platforms must declare GENERIC_GPIO support in their Kconfig (boolean true)

  -->在模块Kconfig中加入depends on GENERIC_GPIO,对于必须使用GPIO的模块

  -->#inlcude <linux/gpio.h>

  

使用gpio

----------

  准备工作做完之后,就可以申请GPIO然后使用了。下面是使用GPIO的一般性过程

  申请GPIO->设置GPIO方向->设置其他功能(上拉,下拉)->输入或输出值->释放GPIO

  相应的函数如下

  int gpio_request(unsigned gpio, const char *label);//申请GPIO

  void gpio_free(unsigned gpio);//释放GPIO



  int gpio_direction_input(unsigned gpio);//设置为输入

  int gpio_direction_output(unsigned gpio, int value);//设置为输出



  int gpio_set_debounce(unsigned gpio, unsigned debounce);

  

  int __gpio_get_value(unsigned gpio);//读GPIO 通常是inline函数

  void __gpio_set_value(unsigned gpio, int value);//设置GPIO



  对于有些挂载在I2C,SPI总线上的扩展GPIO,读写操作可能会导致睡眠,因此不能在中断函数中

  使用。使用下面的函数以区别于正常的GPIO

  int gpio_get_value_cansleep(unsigned gpio);//读GPIO

  void gpio_set_value_cansleep(unsigned gpio, int value);//写GPIO

转载地址:http://kvhai.baihongyu.com/

你可能感兴趣的文章
HTML5学习之——HTML 5 应用程序缓存
查看>>
HTML5学习之——HTML 5 服务器发送事件
查看>>
SVG学习之——HTML 页面中的 SVG
查看>>
SVG 滤镜学习之——SVG 滤镜
查看>>
mysql中用命令行复制表结构的方法
查看>>
hbase shell出现ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException
查看>>
让代码变得更优雅-Lombok
查看>>
解决Rhythmbox乱码
查看>>
豆瓣爱问共享资料插件发布啦
查看>>
kermit的安装和配置
查看>>
vim 配置
查看>>
openocd zylin
查看>>
进程创建时文件系统处理
查看>>
内核线程创建
查看>>
linux中cat命令使用详解
查看>>
java中的异常机制
查看>>
商务智能-基本方法-数据钻取
查看>>
C++程序员技术需求规划(发展方向)
查看>>
JNI
查看>>
java.lang.IllegalArgumentException: FacesContext must not be null 错误分析及解决
查看>>