zoukankan      html  css  js  c++  java
  • 什么样的gpio才需要用can_sleep


    对于有些挂载在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



  • 相关阅读:
    LR12解决不能打开webTours服务问题
    python中join()方法介绍
    python中的sort方法和sorted方法
    如何发送最新的测试报告到目标邮箱?
    python2.7发送邮件失败之——邮箱安全问题
    python2.7发送邮件失败之——代码问题
    python2.7发送邮件失败之——SMTPAuthenticationError问题
    使用HTMLTestRunner在目标目录下并未生成HTML文件解决办法
    python标准日志模块logging及日志系统设计
    性能测试需求分析
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744543.html
Copyright © 2011-2022 走看看