int gpio_set_debounce(unsigned gpio, unsigned debounce) //获取gpio对应的中断线路 int gpio_to_irq(unsigned gpio) //gpio中断,当产生中断时调用handle函数 int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char * name, void * dev) linux gpio设备驱动程序 在前面...
gpio-controller: Marks the device node as a gpio controller. #gpio-cells The first cell is the pin number. The second cell is used to specify the gpio polarity: 0 = active high. 1 = active low. 例子: /*添加rgb_led节点*/rgb_led{#address-cells = <1>;#size-cells = <1>;compatible...
GPIO1连接到GIC,GPIO2连接到GIC,所以GPIO1的父亲是GIC,GPIO2的父亲是GIC。 假设GPIO1有32个中断源,但是它把其中的16个汇聚起来向GIC发出一个中断,把另外16个汇聚起来向GIC发出另一个中断。这就意味着GPIO1会用到GIC的两个中断,会涉及GIC里的2个hwirq。 这些层级关系、中断号(hwirq),都会在设备树中有所体现。
中断发生以后进入IRQ中断服务函数,在IRQ中断服务函数在数组irqTable里面查找具体的中断处理函数,找到以后执行相应的中断处理函数。 在Linux内核中也提供了大量的中断相关的API函数,来看一下这些跟中断有关的API函数: 中断号 每个中断都有一个中断号,通过中断号即可区分不同的中断,有的资料也把中断号叫做中断线。在Linu...
3.1 gpio_keys_get_devtree_pdata 函数解析dts文件 这个文件解析的dts 有两种方式,一种是直接传入irq的,一种是只传入gpio口的。 我们的这个项目,就只传入了gpio口。 3.2 gpio_keys_setup_key 函数 这个函数用来设置gpio口的中断的,直接看代码会比较清楚。
irq_handler_t handler, unsigned long flags, const char *name, void *dev) irq:要申请中断的中断号。 handler:中断处理函数,当中断发生以后就会执行此中断处理函数。 name:中断名字,设置以后可以在/proc/interrupts 文件中看到对应的中断名字。 flags:参数如下 ...
int gpio_to_irq(unsigned gpio); gpio: gpio编号 返回值:中断编号可以传给request_irq()和free_irq() 举个例子:单个GPIO 申请gpio4,输出模式,输出高(从设备树配置) 设备树设置 gpio_test{ status="ok"; gpio_req=<&tlmn 4 0>; 代码实现 struct device dev; ...
int gpio_to_irq(unsigned gpio); gpio: gpio编号 返回值:中断编号可以传给request_irq()和free_irq() 举个例子:单个GPIO 申请gpio4,输出模式,输出高(从设备树配置) 设备树设置 gpio_test{ status="ok"; gpio_req=<&tlmn 4 0>; 代码实现 struct device dev; ...
3.3. 调用of_irq_get获得中断号 如果你的设备节点既不能转换为platform_device,它也不是I2C设备,不是SPI设备,那么在驱动程序中可以自行调用of_irq_get函数去解析设备树,得到中断号。 3.4. 对于GPIO 参考: drivers/input/keyboard/gpio_keys.c 可以使用gpio_to_irq或gpiod_to_irq获得中断号。
Int gpio_to_irq(unsigned int irq); 参数: irq,要使能的中断对应的编号 2. 外部IO中断驱动编写 2.1 IO原理图 图2.1 GPIO0_D6 GPIO0_D6=0*32+(4-1)-8+6=30 2.2 驱动示例代码 #include<linux/init.h> #include<linux/module.h> #include<linux/gpio.h> ...