设备驱动(八)
2014-02-18 09:47
106 查看
Linux中断机制
中断子系统
对所有的中断源进行编号(中断号) 位置:linux-3.2/arch/arm/mach-s5pv210/include/mach/irqs.h
判断中断源,执行相应的ISR
IRQ_EINT(n)获取外部中断源中断号
内核中存在中断描述表
struct irq_desc irqdesc[];
注册中断
static inline int __must_check
request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,
const char *name, void *dev)
irqno:中断号
handler: 中断处理函数
flags: 中断标志位 <linux/interrupt.h>
IRQF_DISABLED 不允许中断嵌套
IRQF_SHARED 是否是共享中断
IRQF_TRIGGER_LOW 低电平触发方式
只有外部中断源需要指定触发方式
name 设备名 /proc/interrupts
dev_id 传递给handler的参数, (独占:NULL,共享中断:设备结构体地址)
中断释放
void free_irq(int irqno, void *dev)
dev要与注册时的dev相同
中断处理函数ISR
irqreturn_t handler(int irqno, void *dev)
返回值
IRQ_HANDLED 中断函数已经处理
IRQ_NONE 在共享中断中,非当前设备发生中
中断函数要求
中断嵌套处于关闭状态,所以中断函数执行时间尽可能短
严禁睡眠
中断子系统
对所有的中断源进行编号(中断号) 位置:linux-3.2/arch/arm/mach-s5pv210/include/mach/irqs.h
判断中断源,执行相应的ISR
IRQ_EINT(n)获取外部中断源中断号
内核中存在中断描述表
struct irq_desc irqdesc[];
注册中断
static inline int __must_check
request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,
const char *name, void *dev)
irqno:中断号
handler: 中断处理函数
flags: 中断标志位 <linux/interrupt.h>
IRQF_DISABLED 不允许中断嵌套
IRQF_SHARED 是否是共享中断
IRQF_TRIGGER_LOW 低电平触发方式
只有外部中断源需要指定触发方式
name 设备名 /proc/interrupts
dev_id 传递给handler的参数, (独占:NULL,共享中断:设备结构体地址)
中断释放
void free_irq(int irqno, void *dev)
dev要与注册时的dev相同
中断处理函数ISR
irqreturn_t handler(int irqno, void *dev)
返回值
IRQ_HANDLED 中断函数已经处理
IRQ_NONE 在共享中断中,非当前设备发生中
中断函数要求
中断嵌套处于关闭状态,所以中断函数执行时间尽可能短
严禁睡眠
相关文章推荐
- linux查看硬件信息及驱动设备相关整理
- Linux设备驱动之I2C架构分析
- 通用 USB 设备驱动源码分析 【转】
- 字符设备驱动编写步骤
- Windows驱动开发WDM (3)- 设备内存读写方式
- Linux关于总线、设备、驱动的注册顺序
- 20150226 IMX257 总线设备驱动模型编程之设备篇
- linux设备驱动归纳总结(四):2.进程调度的相关概念
- 设备驱动之HelloWorld
- PCI设备驱动开发
- Linux ALSA声卡驱动之四:Control设备的创建
- Linux设备驱动之Hello world驱动的实现
- linux之设备驱动----简单hello world模块(1)
- linux内核设备驱动模型六之device
- Linux设备驱动之内存映射
- linux内核部件分析(六)——设备驱动模型之device
- 学习笔记 --- LINUX MTD设备之NORFLASH驱动分析
- Linux字符设备驱动程序开发(1)-使用字符设备驱动
- 设备驱动和设备模型
- 22 使用内核里的at24-eeprom设备驱动