什么样的gpio才需要用can_sleep

转载 2015年11月19日 10:19:14

原文出处:http://blog.csdn.net/tangkegagalikaiwu/article/details/8548852

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

C语言冒泡法排序[经典]

C语言冒泡法排序[经典] 冒泡法排序的算法思想是:        通过无序区中相邻记录关键字间的比较和位置交换,使关键字的记录如气泡一般逐渐往上“漂浮”至“水面”。整个算法是从最下面的记录开始,对...

gpio子系统和pinctrl子系统(三)

转自http://blog.rongpmcu.com/gpiozi-xi-tong-he-pinctrlzi-xi-tong-xia/ 情景分析 打算从两个角度来情景分析,先从bs...

什么样的gpio才需要用can_sleep

对于有些挂载在I2C,SPI总线上的扩展GPIO,读写操作可能会导致睡眠,因此不能在中断函数中   使用。使用下面的函数以区别于正常的GPIO   int gpio_get_value_cansl...

SPI、I2C、UART、I2S、GPIO、SDIO、CAN,你能分清楚吗?

总线有三种:内部总线、系统总线和外部总线。内部总线是微机内部各外围芯片与处理器之间的总线,用于芯片一级的互连;而系统总线是微机中各插件板与系统板之间的总线,用于插件板一级的互连;外部总线则是微机和外部...

SPI、I2C、I2S、UART、GPIO、SDIO、CAN的介绍

SPI 、 I2C 、 I2S 、 UART 、 GPIO 、 SDIO 、 CAN 的介绍,各自的特点是什么?                     SPI :   SPI(Serial Peri...

SPI、I2C、UART、I2S、GPIO、SDIO、CAN简述

SPI、I2C、UART、I2S、GPIO、SDIO、CAN简述

EC016 串口转can bus、GPIO 芯片方案介绍

EC016 串口转can bus、GPIO 芯片方案介绍   串口转CANBUS ,串口转8 IN 、8 OUT GPIO芯片 EC016方案功能说明 1、 EC016方案芯片...

对SPI、IIC、IIS、UART、CAN、SDIO、GPIO的解释

SPI(Serial Peripheral Interface:串行外设接口); SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线可以实现...
  • lile777
  • lile777
  • 2014年07月10日 13:03
  • 855

SPI、I2C、I2S、UART、GPIO、SDIO、CAN的介绍,各自的特点是什么?

转:http://blog.sina.com.cn/s/blog_6d0c454d0101aaym.html SPI: SPI(Serial Peripheral Interface...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:什么样的gpio才需要用can_sleep
举报原因:
原因补充:

(最多只允许输入30个字)