5.中断机制

本文深入解析Linux中断机制,包括与其他操作系统的异同、关键函数应用、设备树配置及代码实现。探讨了中断上下文切换、中断上半部与下半部的概念,并详细介绍了屏蔽和使能中断、请求和释放中断的函数,以及如何通过tasklet和workqueue进行中断耗时部分的推迟处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.linux中断机制和其他操作系统的异同

相同的: 中断上下文切换,如保留现场,中断向量表跳转,调用中断处理程序,恢复现场等。
  linux 特有的: 中断上半部,中断下半部
linux中断机制

2.中断使用相关函数
2.1 屏蔽和使能中断
disable_irq(int irq); //屏蔽指定中断号的中断
enable_irq(int irq);  //使能某中断号的中断
2.2 请求和释放中断
request_irq(unsigned int irq,   //硬件中断号
			irq_handler_t handler,  //中断处理函数
				unsigned long flags,  //中断标志
					const char *name,  //中断名称 
						void *dev)	
//释放指定的中断, irq表示中断号  dev_id中断共享时用,一般为NULL
void free_irq(unsigned int irq,void *dev_id);  
2.3 中断耗时部分推迟处理

推迟处理一般用 tasklet和 workqueue

2.3.1 tasklet推迟处理
	//tasklet的使用
	DECLARE_TASKLET (xxx_tasklet, xxx_do_tasklet, 0) //注册tasklet
	
	tasklet_schedule(&xxx_tasklet)  //触发tasklet		 

	static void xxx_do_tasklet(unsigned long arg) //处理函数
2.3.2 workqueue推迟处理
	//workqueue的使用
	struct work_struct my_wq; //定义工作队列 (用于推迟处理耗时操作)
	INIT_WORK(&my_wq,(void *)my_delay_work);  //初始化工作队列
	
	schedule_work(&my_wq);   //启动工作队列
	void my_delay_work(unsigned long arg)//处理函数
3.设备树配置
interrupt-key {
			compatible = "interrupt,key";
			interrupt-parent = <&gpx1>;  
			/*对应arch\arm\boot\dts\exynos4x12-pinctrl.dtsi 中的
					gpx1: gpx1 {
						gpio-controller;
						#gpio-cells = <2>;
									
						interrupt-controller;
						interrupt-parent = <&gic>;
						interrupts = <0 24 0>, <0 25 0>, <0 26 0>, <0 27 0>,
							<0 28 0>, <0 29 0>, <0 30 0>, <0 31 0>;
						#interrupt-cells = <2>;
					};	
			*/
			interrupts = <1 2>;<2,2>  
			/*  1 对应 gpx1 第二组中断 <0 25 0> 。  
				2 对应触发方式 下降沿触发
					( 详见 Documentation/devicetree/bindings/arm/gic.txt  
						2 = high-to-low edge triggered)
		25由来:电路图(K2->UART_RING->XEINT9)
						->芯片手册 9.2 Interrupt Source
						   -> 25  57  – EINT[9] External Interrupt 			                             
			*/   
		};
4.代码

中断上半部代码
中断下半部代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值