博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[国嵌攻略][119][Linux中断处理程序设计]
阅读量:4557 次
发布时间:2019-06-08

本文共 1263 字,大约阅读时间需要 4 分钟。

裸机中断:

1.中断统一入口。

2.注册中断处理程序。

3.根据中断源编号,调用中断处理程序。

 

Linux中断

1.在entry-armv.S中的_irq_svc是中断统一入口。

2.获取产生中断源的编号(中断号)。

3.根据中断号,找到irq_desc结构

4.从irq_desc描述结构中取出事先注册好的函数来运行。

 

驱动程序需要做什么

1.实现中断处理程序

2.注册中断处理程序

 

Linux中断处理程序设计

1.中断注册

request_irp函数用于注册中断。

int request_irq(unsigned int irq,

void (*handler)(int, void *, struct pt_regs *),

unsigned long flags,

const char *devname,

void *dev_id

)

返回0表示成功,或者返回一个错误码。

参数说明:

1.1.unsigned int irq

中断号

 

1.2.void (*handler)(int, void *, struct pt_regs *)

中断处理函数

 

1.3.unsigned long flags

与中断管理有关的各种选项

在flags参数中,可以选择一些与中断管理有关的选项,例如:

IRQF_DISABLED(SA_INTERRUPT)

如果设置该位,表示是一个“快速”中断处理程序;如果没有设置该位,那么是一个“慢速”中断处理程序。

快/慢速中断的主要区别在于:快速中断保证中断处理的原子性(不被打断),而慢速中断则不保证。换句话说,也就是”开启中断”标志位(处理器IF)在运行快速中断处理程序时是关闭的,因此在服务该中断时,不会被其他类型的中断打断;而调用慢速中断处理时,其他类型的中断仍可以得到服务。

IRQF_SHARED(SA_SHIRQ)

该位表明该中断号是多个设备共享的。

在irq_desc结构中相同中断号的处理函数形成一个链表,但响应中断时,该链表上的中断函数都会被调用一遍。所以在编写中断处理程序时,首先检查设备是否产生中断,如果产生了中断,那么处理;如果没有,那么退出。

IRQF_TRIGGER_FALLING

下降沿产生中断

 

1.4.const char *devname

设备名

 

1.5.void *dev_id

共享中断时使用。

 

2.中断处理程序

中断处理程序的特别之处是在中断上下文中运行的,它的行为受到某些限制:

2.1.不能使用可能引起阻塞的函数

2.2.不能使用可能引起调度的函数

 

3.中断处理流程:

3.1.检测设备是否产生了中断

3.2.清除中断产生标志

3.3.相应的硬件操作

 

4.注销中断

当设备不再需要使用中断时(通常在驱动卸载时),应当把它们注销,使用函数:

void free_irq(unsigned int irq, void *dev_id)

 

转载于:https://www.cnblogs.com/d442130165/p/5254752.html

你可能感兴趣的文章
CS 和 BS 的区别和优缺点
查看>>
(三)配置本地YUM源
查看>>
【LeetCode & 剑指offer刷题】数组题17:Increasing Triplet Subsequence
查看>>
【MySQL】ERROR 1045 (28000): Access denied for user的解决方法
查看>>
centos安装mysql57
查看>>
HDU 2002 计算球体积
查看>>
GROUP BY 与聚合函数 使用注意点
查看>>
oracle表名、字段名大小写问题。
查看>>
SVN学习--VisualSVN Server和TortoiseSVN的配置和使用
查看>>
CSS-继承和层叠
查看>>
「雕爷学编程」Arduino动手做(13)——触摸开关模块
查看>>
【u119】中位数
查看>>
【42.86%】【codeforces 742D】Arpa's weak amphitheater and Mehrdad's valuable Hoses
查看>>
Python Pandas分组聚合
查看>>
Thymeleaf 学习笔记
查看>>
MAC IP等相关
查看>>
Unable to instantiate prefab. Prefab may be broken.(Unity2018.2.2报错)
查看>>
Java中的TreeMap、Comparable、Comparator
查看>>
无刷新页面分页
查看>>
Mybatis(二)|搭建mybatis环境之注解版-简单搭配
查看>>