中断

1、中断处理函数的注册

中断处理函数的注册使用request_irq,该原型定义在linux/interrupt.h中,函数原型如下:

int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev);

irq为申请的中断号。

handler为中断处理函数指针,该函数指针定义如下:typedef irqreturn_t (*irq_handler_t)(int, void *);

flags有0或以下几种取值,定义在linux/interrupt.h中:

IRQ_DISABLED:用于中断处理函数运行时禁止所有中断。

IRQ_SHARED:用于共享中断。

IRQ_TIMER:用于处理特殊的system timer中断。

name为ASCII文本。

dev参数用于共享中断。

如果request_irq函数调用成功将返回0,否则返回错误码,例子如下(来自s3c2410_wdt.c):

ret = request_irq(wdt_irq->start, s3c2410wdt_irq, 0, pdev->name, pdev);
if (ret != 0) {
        dev_err(dev, "failed to install irq (%d)\n", ret);
        goto err_map;
}
中断处理函数定义在这里:

/* interrupt handler code */

static irqreturn_t s3c2410wdt_irq(int irqno, void *param)
{
        dev_info(wdt_dev, "watchdog timer expired (irq)\n");

        s3c2410wdt_keepalive();
        return IRQ_HANDLED;
}


2、释放中断

释放一个中断处理函数使用free_irq,函数原型如下:

void free_irq(unsigned int irq, void *dev);


3、禁止和启用中断

禁止中断使用disable_irq函数,启用中断使用enable_irq函数,原型如下:

void disable_irq(unsigned int irq);
void enable_irq(unsigned int irq);

// 2015.08.28 add
注意disable_irq和enable_irq必须成对出现,即只有调用了disable_irq函数,才能调用enable_irq函数,否则调用enable_irq会出现一个warning信息,信息内容大致如下:
Unbalanced enable for IRQ ...

// 2015.07.25 add

4. 中断唤醒

如果要使能中断具有唤醒系统功能,那么应该怎么做呢,这里有两个函数。

int enable_irq_wake(unsigned int irq);
int disable_irq_wake(unsigned int irq);

这两个函数通常应该分别在suspend、resume中被调用,同时,在request_irq时需要加上IRQF_NO_SUSPEND标志。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MicroBlaze是一种可定制的32位R处理器,常用于嵌入式系统中。它支持中断机制,可以在处理器执行期间暂停当前任务,转而处理其他紧急任务或外部事件。下面是关于MicroBlaze中断的一些介绍: 1. 中断概念:中断是一种机制,用于在处理器执行期间暂停当前任务,转而处理其他紧急任务或外部事件。当发生中断时,处理器会保存当前的上下文信息,并跳转到中断处理程序来处理中断事件。 2. 中断控制器:MicroBlaze使用中断控制器来管理和处理中断中断控制器负责接收和分发中断信号,并将其传递给相应的中断处理程序。 3. 中断优先级:MicroBlaze支持多个中断源,并为每个中断源分配不同的优先级。较高优先级的中断会打断正在执行的较低优先级中断或任务。 4. 中断处理程序:每个中断源都有一个对应的中断处理程序。当中断发生时,处理器会跳转到相应的中断处理程序来执行特定的操作。中断处理程序通常用于保存当前上下文、处理中断事件、清除中断标志等。 5. 中断向量表:MicroBlaze使用中断向量表来存储每个中断源对应的中断处理程序的地址。当中断发生时,处理器会根据中断号查找中断向量表,并跳转到相应的中断处理程序。 6. 中断使能和屏蔽:MicroBlaze提供了使能和屏蔽中断的机制。通过设置相应的中断使能位和中断屏蔽位,可以控制哪些中断可以触发和哪些中断可以被屏蔽。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值