linux irq 接口,Linux内核API irq_set_irq_type

irq_set_irq_type函数功能描述:此函数用于设置中断处理函数触发的类型,被操作的中断描述符保存在数组irq_desc中,对应的下标为参数irq的值,设置的中断触发类型为参数type所代表的类型。

irq_set_irq_type文件包含

irq_set_irq_type函数定义

在内核源码中的位置:linux-3.19.3/kernel/irq/chip.c

函数定义格式:

irq_set_irq_type输入参数说明

参数 unsigned int irq是对应的中断号,与数组irq_desc的下标相对应,数组的大小为16640。

参数unsigned int type是系统定义的中断触发类型,定义见文件linux-3.19.3/include/linux/irq.h,可能的取值定义如下:

IRQ_TYPE_NONE 0x00000000系统默认的没有明确指明类型的触发模式

IRQ_TYPE_EDGE_RISING 0x00000001上升沿触发

IRQ_TYPE_EDGE_FALLING 0x00000002下降沿触发

IRQ_TYPE_EDGE_BOTH (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING)上升沿下降沿两种触发都行

IRQ_TYPE_LEVEL_HIGH 0x00000004高电平触发

IRQ_TYPE_LEVEL_LOW 0x00000008低电平触发

IRQ_TYPE_SENSE_MASK 0x0000000f以上任何一种条件

IRQ_TYPE_DEFAULT IRQ_TYPE_SENSE_MASK以上任何一种条件

IRQ_TYPE_PROBE 0x00000010在进程中查询

irq_set_irq_type返回参数说明

函数的返回结果是int型变量,返回0或者负数,如果返回结果是负数,说明设置中断触发类型失败;如果返回结果是0,有四种情况:

设置中断触发类型成功;

传入的中断触发类型参数是IRQ_TYPE_NONE,如果传入此参数,函数不会更改中断的触发类型;

数组中与irq对应的元素的chip字段的值为NULL;

数组中与irq对应的元素的chip字段的值不为NULL,但chip字段的set_type字段的值为NULL。

irq_set_irq_type实例解析

编写测试文件:irq_set_irq_type.c

头文件引用及全局变量定义:

中断处理函数及中断线程函数定义:

模块加载函数定义:

模块退出函数定义:

模块加载、退出函数调用:

实例运行结果及分析:

编译模块,执行命令insmod irq_set_irq_type.ko插入内核模块,然后输入命令dmesg -c查看内核输出信息,出现如图所示的信息。

c51c0a864ed274a4a56fe00c15b4d23e.png

结果分析:

由图可以看出函数irq_set_irq_type( )的返回值是0,并且中断处理函数执行一次。但返回0并不代表设置中断触发类型成功,因为动态申请的中断描述符其字段chip的值为NULL,所以返回0是必然。

如果想设置中断的类型成功,必须满足以下条件:

中断描述符存在数组irq_desc中;

参数type不是IRQ_TYPE_NONE;

中断描述符的chip字段的值不为NULL;

中断描述符的字段chip的字段set_type的值不为NULL。

但是满足以上条件,也不一定能设置成功,还需要看字段set_type代表的函数的实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值