linux中断

本文详细介绍了Linux内核中断处理的流程,包括裸机中断、申请释放中断、中断处理函数以及上半部和下半部的概念。强调了中断处理速度的重要性,并对比了软中断、tasklet和工作队列的使用。设备树中断节点信息的解析也在讨论之列,如GPIO中断的配置。此外,还提到了编写中断驱动和按键消抖的试验驱动步骤。
摘要由CSDN通过智能技术生成

一、Linux内 核中断处理简介
1.1、裸机中断

1.2 linux中断
1、先知道你要使用的中断对应的中断号。
2、先申请request_irq,此函数会激活中断。
3、如果不用中断了,那就释放掉,使用free_irq。
4、中断处理函数irqreturn_t (*irq_handler_t) (int, void *)。

5、使能和禁止中断,

1.3 上半部和下半部
中断一定要处理的越快越好,
1、软中断
static struct softirq_action softirq_vec[NR_SOFTIRQS] 10个

要使用软中断,要先注册,使用函数open_softir。注册以后使用raise_softirq触发。
软中断我们不要去用!!
软中断我们不要去用!!

2、tasklet

也需要用到上半部,只是上半部的中断处理函数重点是调用tasklet_schedule。
1、定义一个tasklet函数。
2、初始化、重点是设置对应的处理函数



3、工作队列

1.4 设备树中断节点信息
1、#interrupt-cells指定interrupt的cells数量,也就是属性interrupts。

intc: interrupt-controller@00a01000 {
	compatible = "arm,cortex-a7-gic";
	#interrupt-cells = <3>;
	interrupt-controller;
	reg = <0x00a01000 0x1000>,
	      <0x00a02000 0x100>;
};

		gpio5: gpio@020ac000 {
			compatible = "fsl,imx6ul-gpio", "fsl,imx35-gpio";
			reg = <0x020ac000 0x4000>;
			interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>,
				     <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
			gpio-controller;
			#gpio-cells = <2>;
			interrupt-controller;
			#interrupt-cells = <2>;
		};


	fxls8471@1e {
	compatible = "fsl,fxls8471";
	reg = <0x1e>;
	position = <0>;
	interrupt-parent = <&gpio5>;
	interrupts = <0 8>;
};

interrupt-parent指定父中断。interrupts第一个cells就是gpio编号,因此上面就是用的gpio5_io00。


通过函数 irq_of_parse_and_map从inttertupes属性获取中断号。

二、编写试验驱动
1、修改设备树
2、编写中断驱动

3、按键消抖

三、测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值