增加中断处理 API.

Signed-off-by: rick.chan <chenyang@autoai.com>
This commit is contained in:
rick.chan 2020-06-19 19:00:24 +08:00
parent 1dd04e5e12
commit 9b6db57445
2 changed files with 79 additions and 0 deletions

View File

@ -160,3 +160,43 @@ sizeSize of map.
**返回值:** **返回值:**
成功则返回映射内存首地址,失败返回 NULL。 成功则返回映射内存首地址,失败返回 NULL。
## devm_request_irq 函数
**头文件:**
```cpp
#include <linux/interrupt.h>
```
**函数原型:**
```c
devm_request_irq(struct device *dev, unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id);
```
**说明:**
Devm 版本申请中断并注册中断处理程序。
**参数:**
dev设备结构体
irq要申请的硬件中断号
handler向系统注册的中断处理函数是一个回调函数中断发生时系统调用这个函数
irqflags中断处理的属性若设置了 IRQF_DISABLED则表示中断处理程序是快速处理程序快速处理程序被调用时屏蔽所有中断慢速处理程序不屏蔽若设置了 IRQF_SHARED则表示多个设备共享中断若设置了 IRQF_SAMPLE_RANDOM表示对系统熵有贡献对系统获取随机数有好处这几个flag是可以通过或的方式同时使用的
devname设置中断名称通常是设备驱动程序的名称在cat /proc/interrupts中可以看到此名称
dev_id该参数将会传递给 handler 所对应的回调函数。
**返回值:**
0表示成功
-INVAL表示中断号无效或处理函数指针为NULL
-EBUSY表示中断已经被占用且不能共享。

View File

@ -0,0 +1,39 @@
# Linux Kernel 中断处理
## request_irq
**头文件:**
```cpp
#include <linux/interrupt.h>
```
**函数原型:**
```c
int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id);
```
**说明:**
申请中断并注册中断处理程序。
**参数:**
irq要申请的硬件中断号
handler向系统注册的中断处理函数是一个回调函数中断发生时系统调用这个函数
irqflags中断处理的属性若设置了 IRQF_DISABLED则表示中断处理程序是快速处理程序快速处理程序被调用时屏蔽所有中断慢速处理程序不屏蔽若设置了 IRQF_SHARED则表示多个设备共享中断若设置了 IRQF_SAMPLE_RANDOM表示对系统熵有贡献对系统获取随机数有好处这几个flag是可以通过或的方式同时使用的
devname设置中断名称通常是设备驱动程序的名称在cat /proc/interrupts中可以看到此名称
dev_id该参数将会传递给 handler 所对应的回调函数。
**返回值:**
0表示成功
-INVAL表示中断号无效或处理函数指针为NULL
-EBUSY表示中断已经被占用且不能共享。