有关中断

中断申请注册函数request_irq()

int request_irq(unsigned int irq, irq_handler_t handler,
                         unsigned long irqflags, const char *devname, void *dev_id)

四个参数的表示依次是:

1、注册中断号

2、中断处理函数  (申请中断的时候 ,只注册中断函数,不执行中断函数)

3、中断属性,触发中断的方式,是否是共享中断

4 设备名

5设备号,很多资料中都建议将设备结构指针作为dev_id参数,

下面解释一下dev_id参数为什么必须的,而且是必须唯一的。

当调用free_irq注销中断处理函数时(通常卸载驱动时其中断处理函数也会被注销掉),因为dev_id是唯一的,所以可以通过它来判断从共享中断线上的多个中断处理程序中删除指定的一个。如果没有这个参数,那么kernel不可能知道给定的中断线上到底要删除哪一个处理程序。

注销函数定义在Kernel/irq/manage.c中定义: 
    
void free_irq(unsigned int irq, void *dev_id)


enable_irq(MT6589_KP_IRQ_ID);

disable_irq_nosync(MT6589_KP_IRQ_ID);



request_irq()  enable_irq()  和 diable_irq_nosync()的使用模板

static irqreturn_t kpd_irq_handler(int irq, void *dev_id)
{
/* use _nosync to avoid deadlock */
disable_irq_nosync(MT6589_KP_IRQ_ID);//中断处理程序中不能使用disable_irq, 否则会导致cpu被synchronize_irq独占而发生系统崩溃.
tasklet_schedule(&kpd_keymap_tasklet);
return IRQ_HANDLED;
}


static void kpd_keymap_handler(unsigned long data)
{
-----------------------------------

        ---------------------------------- 

        ------------------------------------

enable_irq(MT6589_KP_IRQ_ID);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值