2777|1

6495

帖子

9

TA的资源

版主

楼主
 

《原子Linux驱动开发》基础阅读6:Linux中断 [复制链接]

        在我们进行裸机或linux开发的时候,中断都是会被频繁使用的功能,在裸机中使用中断需要做许多工作,比如配置寄存器、使能中断、初始化等等,Linux内核提供完整的中断框架,我们只需要申请,然后注册中断处理函数即可,非常的方便。
        在裸机中断的处理方法,先是使能中断,然后初始化相应的寄存器,接下来注册中断服务函数,然后当中断发生的时候进入中断服务函数进行处理。而在Linux内核中提供了大量的中断相关的API函数,接下来我们就了解一下。
 
        中断号:每一个中断都有一个中断号,通过中断号区分不同的中断。在Linux内核中使用一个int变量表示中断号;
        Request_irq函数:在Linux内核中,如果想要使用某个中断需要申请,该函数用于申请中断,有可能会导致睡眠,因此不能在中断上下文或者其他禁止睡眠的代码中使用该函数,函数会使能中断,我们不需要手动去使能中断;
        Free_irq函数:我们在申请中断中使能了中断,在完成之后,要通过这个函数释放掉相应的中断;
        中断处理函数:使用Request_irq函数申请中断的时候需要设置对应的中断处理函数,也就是说要把相应的中断号与对应的处理函数指针相关联;
 
        这里我们要了解一下上半部和下半部的概念,或者是顶半部与底半部,我们使用Request_irq申请中断的时候注册的中断服务函数属于中断处理的上半部,然后中断触发,那么中断处理函数就会执行,我们都知道中断处理函数一定要快速执行,越短越好,但是有一些中断过程可能是比较费时间的,我们必须要进行一些处理来缩短执行时间。这个时候中断触发进入中断处理函数,如果时间比较短,就可以直接在上半部完成;比较耗时,就需要把这些耗时的代码提出来,交给下半部去完成,来实现中断处理函数的快进快出。
        那么如何实现下半部的机制呢,其一就是软中断功能,软中断必须在编译的时候静态注册;Tesklet是利用软中断实现另外一种下半部的机制,我们更建议使用这种方法;第三种执行方式就是工作队列,在进行上下文执行时,工作队列将要推后的工作交给一个内核线程去执行,因此工作队列工作在进程上下文,所以其允许睡眠或重新调度。每一个worker都有一个工作队列线程,处理自己工作队列中的所有工作,在实际驱动开发中,只需要定义工作即可。而关于工作队列和工作线程,我们基本不用去管,简单创建就可以了
        设备数中需要对中断属性信息进行设置,linux内核,通过读取设备树中的中断属性信息来配置中断。编写驱动的时候需要用到中断号,可以直接通过对应的函数从属性中提取对应的设备号。

最新回复

Linux中断学习了 谢谢分享   详情 回复 发表于 2024-3-16 07:35
点赞 关注
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引


回复
举报

6810

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

Linux中断学习了

谢谢分享

 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表