外部终端之request_irq()函数

Linux中断——request_irq 目录 linux 中断之irq 前言 中断注册与释放 irq相关 查看/proc/interrupts 查看/proc/stat IRQ Number问题 Handler相关 flag相关 linux 中断之irq 前言 前面一篇文章已经对中断做了一些简单介绍《关于Linux中断一些思考》,但是中断是怎么告诉内核(kernel)的呢?这里我们带着问题去了解一下irq的调用。 所谓中断它其实是硬件产生了一个信号,然后告诉内核要去处理它。Linux处理中断很像用户空间(user . 阅读详情
/**
 *	request_threaded_irq - allocate an interrupt line
 *	@irq: Interrupt line to allocate
 *	@handler: Function to be called when the IRQ occurs.
 *		  Primary handler for threaded interrupts
 *		  If NULL and thread_fn != NULL the default
 *		  primary handler is installed
 *	@thread_fn: Function called from the irq handler thread
 *		    If NULL, no irq thread is created
 *	@irqflags: Interrupt type flags
 *	@devname: An ascii name for the claiming device
 *	@dev_id: A cookie passed back to the handler function
 *
 *	This call allocates interrupt resources and enables the
 *	interrupt line and IRQ handling. From the point this
 *	call is made your handler function may be invoked. Since
 *	your handler function must clear any interrupt the board
 *	raises, you must take care both to initialise your hardware
 *	and to set up the interrupt handler in the right order.
 *
 *	If you want to set up a threaded irq handler for your device
 *	then you need to supply @handler and @thread_fn. @handler ist
 *	still called in hard interrupt context and has to check
 *	whether the interrupt originates from the device. If yes it
 *	needs to disable the interrupt on the device and return
 *	IRQ_WAKE_THREAD which will wake up the handler thread and run
 *	@thread_fn. This split handler design is necessary to support
 *	shared interrupts.
 *
 *	Dev_id must be globally unique. Normally the address of the
 *	device data structure is used as the cookie. Since the handler
 *	receives this value it makes sense to use it.
 *
 *	If your interrupt is shared you must pass a non NULL dev_id
 *	as this is required when freeing the interrupt.
 *
 *	Flags:
 *
 *	IRQF_SHARED		Interrupt is shared
 *	IRQF_SAMPLE_RANDOM	The interrupt can be used for entropy
 *	IRQF_TRIGGER_*		Specify active edge(s) or level
 *
 */

int request_irq(unsigned int irq,
		irq_handler_t handler,
		unsigned long flags, const char *devname, void *dev_id)
{
	struct irq_node *node;
	int res;

	node = new_irq_node();
	if (!node)
		return -ENOMEM;

	node->handler = handler;
	node->flags   = flags;
	node->dev_id  = dev_id;
	node->devname = devname;

	res = setup_irq(irq, node);
	if (res)
		node->handler = NULL;

	return res;
}

参数:
unsigned int irq:中断号,根据datasheet查看对应中断号
irq_handler_t handler:中断处理函数名
unsigned long flags:中断方式(比如上升沿,下降沿,上升下降沿)
const char *devname:中断名称cat proc/interruputs命令查看名称
void *dev_id:当前设备结构体

Linux 嵌入式驱动开发外部中断 文章目录1. 外部中断框架2. container_of() 函数3. 命令4. 上半部与下半部 1. 外部中断框架 中断号:通过中断号即可区分不同的中断 申请中断号 step 3 request_irq 函数,申请中断并使能,可能导致睡眠,不能在中断上下文或者其他禁止睡眠的代码段中使用。 /* 函数原型 */ /* * irq: 申请的中断号 * handler: 中断处理函数 * flags: 中断标志 * name: 中断名 * dev: 一般情况下将 dev 设置为设备结构 阅读详情

相关推荐

单片机中的中断请求实现——request_irq函数

在这个例子中,我们定义了一个名为external_interrupt的中断处理函数,并使用request_irq函数请求注册中断号为10的中断请求。常见的中断类型包括定时器中断、串口中断、IO口中断等。在单片机编程中,中断请求的实现与Linux内核中的实现有所不同,但基本思路是一致的。通过request_irq函数向系统请求注册中断号,并将中断处理函数与之绑定,即可完成对中断请求的处理。request_irq函数的作用是向操作系统请求注册一个中断请求,并将对应的中断处理函数与之绑定。

qq_37934722的博客 620

Linux中断

按键中断,定时器消抖

afddasfa的博客 6152

AutosarMCAL开发——基于EB Irq驱动

本文为博主个人学习总结记录,如有不正,欢迎指正。

qq_45583706的博客 1728

中断申请函数request_irq详解

原地址:http://blog.youkuaiyun.com/wealoong/article/details/7566546 一、中断注册方法 在linux内核中用于申请中断的函数是request_irq(),函数原型在Kernel/irq/manage.c中定义: int request_irq(unsigned int irq, irq_handler_t handler,     

2万+

request_irq的实现(单片机)

我们需要将我们的中断处理函数的地址写入中断向量表中的相应位置,以便在中断发生时调用该函数。它允许我们指定所需的中断号和中断处理函数,并在中断发生时执行相应的操作。在单片机编程中,request_irq函数用于请求中断服务例程,它允许我们指定所需的中断号和中断处理函数,并在中断发生时执行相应的操作。在这个例子中,我们通过设置相应的寄存器位来配置INT0和INT1的中断触发类型,并使能相应的中断。在这个例子中,我们通过设置相应的寄存器位来配置INT0和INT1的中断触发类型,并使能相应的中断。

UoEmacs_Lisp的博客 195

金融科技数据源

数字金融开放研究平台

平平淡淡,戒急用忍,一生学闭嘴。 1758

Linux中断子系统---中断申请request_irq()与中断线程化request_threaded_irq()

一、申请中断request_irq() Linux中使用中断需要先进行申请,申请中断的API函数如下: int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev) irq:要申请中断的中断号。 handler:中断处理函数。 name:中断名字,设置以后可以在/proc/interrupts 文件中看到对应的中断名字。

lihuan680680的博客 1万+

新手必看:TwinCAT死活扫不到倍福CX5020?别慌,先检查这3个地方(附静态IP配置)

本文详细介绍了TwinCAT软件无法扫描到倍福CX5020控制器的常见问题及解决方案。从网络连通性检查、系统环境配置到静态IP设置,提供了一套完整的排查流程和优化建议,帮助新手快速解决通信问题,确保设备稳定运行。

weixin_27219587的博客 364

linux request_详解Linux中request_irq()如何注册中断 free_irq()如何注销中断

首先来看一下中断的定义:当CPU当CPU正在处理某事件的时候,外部或者内部发生的某一事件请求CPU迅速去处理,于是CPU暂时中止当前的工作,转去处理所发生的事件。中断服务处理完该事件后,再返回到原来被中止的地方继续原来的工作,这样的过程称为中断。中断是嵌入式系统中最关键的技术之一,它有效地保证了系统的实时性。当我们在Linux下开发软件时,想要自己写一个中断处理程序去执行自己的代码,那么我们首先就...

weixin_39639622的博客 662

UE5.3像素流送Docker化部署:从Linux服务器搭建到云端实时渲染

本文详细介绍了在Linux服务器上使用Docker容器化部署UE5.3像素流送服务的完整流程。通过将虚幻引擎运行时、信令服务器和TURN服务打包为标准化镜像,利用Docker Compose进行编排,实现了云端实时渲染应用的快速部署、环境一致与弹性扩展,有效解决了传统部署中的环境依赖与运维难题。

k0l1m2n3o的博客 200

信息安全与技术——(十一)恶意代码检测与防范技术

恶意代码(Malicious Code )或恶意软件(Malware )主要是指以危害信息的安全等不良意图为目的的程序,它们一般潜伏在受害计算机系统中实施破坏或窃取信息。

m0_63853448的博客 5991

注册注销中断request_irq函数和free_irq函数

在上一篇文章中我们分析了中断的三个结构体irq_desc、irq_chip、irqaction,并且简单分析了中断发生的流程,实际上上述的操作我们是不需要自己实现的,内核已经实现了,我们需要做的是如何去注册一个中断,编写相应的中断处理函数,当中断发生时,内核会自动执行中断处理函数。 当我们想自己写个中断处理程序,去执行自己的代码,就需要写irq_desc->action->handle...

qq_42230338的博客 1298

手把手教你配置MAX96712解串器:从I2C地址分配到PWM帧同步

本文详细解析了MAX96712解串器在自动驾驶视觉链路中的核心配置流程。从I2C地址分配、GMSL2数据流映射到实现多摄像头精准同步的PWM帧同步触发,手把手指导工程师构建高可靠性的图像传输系统,并提供了实用的Linux调试技巧与问题排查思路。

weixin_29297127的博客 926

request_irq

int request_irq(unsigned int irq,         irq_handler_t handler,         unsigned long flags, const char *devname, void *dev_id) {     struct irq_node *node;     int res;     node = new_irq_node();  ...

zmjames2000 Just record 287

AUTOSAR从入门到精通-汽车电子电气架构(EEA)(二)

需求的传递并非完全是瀑布式的单向传递,而是双向的,只有被下游接受了的需求才是有效的需求,而且,下游是可以反向对上游提出需求的。当街区的设计完成之后,接下来要做的就是每栋建筑的详细设计,建筑的设计者发布的图纸中规定了房屋的主要结构、所在位置与周边环境的相互关系,以及屋中各种组件的位置与相互之间结合的关系,比如砖混结构、房屋的具体位置和朝向、卧室与客厅的相对位置与尺寸、马桶在卫生间中的位置等,还会对各种建筑材料的选取原则给出具体的标准,比如水泥的标号,钢筋的型号,各种电线的等级要求等等。

getusushu的博客 373

Python爬虫实战:基于Scrapy与Playwright高效爬取人民网新闻数据

本文将详细介绍如何使用Python最新技术栈(Scrapy框架结合Playwright浏览器自动化工具)高效爬取人民网新闻数据。文章包含完整项目搭建、反反爬策略、数据解析存储以及性能优化等核心内容,提供可直接运行的代码示例,适合中高级Python开发者学习现代网络爬虫开发技术。python# 去除特殊空白字符。

2201_76125261的博客 1118

分析request_irq和free_irq函数如何注册注销中断(详解)

转载地址:https://www.cnblogs.com/lifexy/p/7506613.html 当我们想自己写个中断处理程序,去执行自己的代码,就需要写irq_desc->action->handler,然后通过request_irq()来向内核申请注册中断 本节目标: 分析request_irq()如何申请注册中断,free_irq()如何注销中断 1....

kunkliu的博客 1096

USLE模型(1.2):LS因子的计算

基于USLE的甘南川西北土壤侵蚀研究。准备好30米分辨率的dem。

所有专家都曾始于新手 3481

6.分析request_irq和free_irq函数如何注册注销中断(详解)

come from : https://www.cnblogs.com/lifexy/p/7506613.html 上一节讲了如何实现运行中断,这些都是系统给做好的,当我们想自己写个中断处理程序,去执行自己的代码,就需要写irq_desc->action->handler,然后通过request_irq()来向内核申请注册中断 本节目标:      分析request_irq()...

zmjames2000 Just record 599

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Linux内核中断:request_irq,free_irq

Linux内核中断   步骤一:打开内核源代码,在里面搜索interrupt.h文件               打开文件后我们可以在里面看到这样的函数 typedef irqreturn_t (*irq_handler_t)(int,void *); 申请中断号 request_irq(unsigned int irq, irq_hand

欧阳海宾 2734

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

linux下的中断(interrupt)IRQ( Interrupt Request)以及IRQ绑核小结

https://blog.youkuaiyun.com/wangjianno2/article/details/50529991 1.在系统结构中,CPU工作的模式有两种,一种是中断,由各种设备发起;一种是轮询,由CPU主动发起。所有的linux操作系统都是基于中断驱动的。当我们在键盘上按下一个按键时,键盘就会对CPU说,一个键已经被按下。在这种情况下,键盘的IRQ线路中的电压就会发生一次变化,而这种电压的变化就是来自设备的请求,就相当于说这个设备有一个请求需要处理。 而本文主要介绍中断这种工作模式。 2.中断I

二进制模----细微行动改变影响世界 2594

OK6410 linux3.0.1 外部中断组1~9无法request_irq的解决方法

因项目需求远程遥控,准备在OK6410上使用红外线控制板子。由于板子上自带的红外所接引脚GPE1几乎等同于摆设,故需要外加红外头。在写驱动的时候发现中断组1~9无法request_irq成功,咨询官方技术支持和论坛没有任何答复,只好自己改内核了。仔细看源码,飞凌居然没初始化19组的中断,我和我的小伙伴都惊呆了 以下代码加入到manage.c中 static inline void

warcraftzhaochen的专栏 1316

linux IRQ Management(七)- 中断处理流程

了解如何申请irq 1.Introduction   如何向Linux Kernel中的中断子系统注册中断处理函数? 2.High-level interrupt-management interfaces   The generic IRQ layer provides a set of function interfaces for device drivers to grab IRQ d...

weixin_41028621的博客 5012

Linux 6.6内核中断深度解析(四):中断注册与投递 — 从 request_irq 到 handler 的完整链路

本文解析 Linux 中断从「驱动注册」到「硬件投递」的完整链路。两条独立路径在 irq_desc 汇合:注册线 request_irq → request_threaded_irq → __setup_irq 把 irqaction 挂到 desc->action 链表;投递线 common_interrupt 经 per-CPU 的 vector_irq[vector] 把 vector 号翻译成 irq_desc,再走 desc->handle_irq 函数指针。

Ruiery的博客 345
上一篇: Linux驱动之设备注册和驱动注册分析
下一篇: LINUX总线架构
Groza_cc
博客等级 码龄7年 2粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值