linux驱动——中断

1.Cortex-A系列的中断的简介

中断的基本概念:(interrupt)

        中断本质上是系统内部的异常机制,当中断产生之后,他会停下当前正在执行的任务,转而去做其他的事情,在停下当前正在执行的任务之前,要先入栈(保护现场,其他的事情做完之后,我们要继续执行先前的任务,就需要先恢复现场(出栈)。

linux下的中断一般是分为两类:

软中断: 信号、软件定时器

硬中断:跟硬件相关的,如:按键

A系类的芯片支持的中断的类型:

        SGI:软件生成中断;

        PPI:私有外设中断;

        SPI:共享的外设的中断,使用的比较多的中断的类型;

A系列的芯片:

        可以设置中断的优先级;

        可以使能或者失能中断;

        在linux系统中,中断其实就是一个编号,要想使用某个中断我们必须先知道这个中断的编号;

        在系统里要想查看中断的使用情况 : cat /proc/interrupts

2.linux的外部中断的介绍

        外部中断输入spi的共享中断,中断并不能直接使用硬件的中断号,要想使用中断必须借助与内核提供的函数,将引脚转换成linux认同的中断号。

3.linux中断注册相关的API

函数的原型:int gpio_to_irq(unsigned int gpio)

功能:将一个GPIO口转换成中断号

头文件:<linux/gpio.h>

参数:unsigned int gpio:你要转换成中断号的GPIO口的编号

返回值:成功返回要使用的中断号

有了中断号之后就可以对中断进行注册 等等相关的操作;

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

函数的原型:void enable_irq(unsigned int irq)

功能:使能中断

头文件:<linux/irq.h>

参数:unsigned int irq:就是前边你通过gpio_to_irq获取到的中断号

函数的返回值:无

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

函数的原型: void disable_irq(unsigned int irq)

功能:失能中断号

函数的头文件 :<linux/irq.h>

函数的参数:unsigned int irq:中断号

函数的返回值:无

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

函数的原型:

int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev);

功能:向内核注册一个中断

头文件:<linux/interrupt.h>

参数:

        unsigned int irq:中断号

        irq_handler_t handler:中断的服务函数,当产生中断的时候会调用此函数

        irqreturn_t (*irq_handler_t)(int, void *)

        unsigned long flags,:触发的方式

                IRQF_TRIGGER_FALLING:下降沿

                IRQF_TRIGGER_RISING:上升沿

                IRQF_TRIGGER_HIGH:高电平

                IRQF_TRIGGER_LOW:低电平

        const char *name:中断的名字  会出现在/proc/interrupts这个文件里

        void *dev:跟中断服务函数传的私有数据  一般不用

返回值:

        成功返回    0

        失败返回  负数

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

函数的原型:void free_irq(unsigned int irq, void *dev_id)

功能:注销一个中断

头文件:<linux/interrupt.h>

参数:

        irq:中断号

        void *dev_id:要和中断注册函数的最后一个参数dev相同

函数的返回值:无

4.下面是练习的部分代码,仅供参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/454196.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智慧城市大模型来啦!港大百度推出UrbanGPT

论文作者解读链接&#xff1a;https://blog.csdn.net/qq_42715656/article/details/136681839 项目链接&#xff1a;https://urban-gpt.github.io/ 代码链接&#xff1a;https://github.com/HKUDS/UrbanGPT 论文链接&#xff1a;https://arxiv.org/abs/2403.00813 研究实验室链…

CMake 编译 raylib 程序

CMakeLists.txt 内容如下&#xff1a; cmake_minimum_required(VERSION 3.0) project(t001) # 搜索指定目录下源文件 file(GLOB SRC_LIST ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) # 包含头文件路径 include_directories(F:/vclib/raylib-5.0_win64_mingw-w64/include) # 包含静态…

mysql基于mycat实现读写分离

试验环境 基于mysql主从复制已经实现 mycat主机192.168.199.149&#xff0c;安装好java和jdk 数据库主机192.168.199.150 数据库从机192.168.199.151 149配置 下载mycat并解压 vim /root/mycat/conf/server.xml vim /root/mycat/conf/schema.xml 150是主数据库&#xff0…

Cesium--基于材质旋转图片

材质部分的代码如下 // 自定义材质const customMaterial new Cesium.Material({translucent: true,fabric: {uniforms: {image:circle_img,speed:30.0,},source: czm_material czm_getMaterial(czm_materialInput materialInput){czm_material material czm_getDefaultMateri…

“光谱视界革新:ChatGPT在成像光谱遥感中的智能革命“

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力。本文重点介绍ChatGPT在遥感中的应用&#xff0c;人工智能…

JVM 类的加载篇

我们都知道一个类从加载到卸载一共分为七个过程 加载 - 链接(验证 - 准备 - 解析) - 初始化 - 使用 - 卸载 下文我们将详细解析这些过程 谁需要加载? 在Java中数据类型分为基本数据类型和引用数据类型,基本数据类型由虚拟机预定义,引用数据类型则需要类的加载 1.加载/装载(loa…

Flex布局实现一部分元素左对齐,一部分右对齐

单个Flex容器内有三个靠右对齐的按钮&#xff0c;如图&#xff1a; display: flex; justify-content: flex-end; 现在需让红色按钮靠左&#xff0c;而另外两个蓝色按钮保持靠右&#xff1a; 方法一&#xff1a; 为红色按钮单独加上&#xff1a;flex: 1; 原理是&#xff1a;利用…

【Docker】docker-compose安装

中文网上复制粘贴的很多&#xff0c;尤以docker-compose为甚。搜索引擎上能搜到的&#xff0c;github的那个网址&#xff0c;curl显示要十几个小时&#xff08;蛮奇怪&#xff0c;win主机直接访问下载就很快&#xff0c;虚拟机Linux去curl就很慢&#xff09;。daocloud的那个&a…

php对接谷歌admob广告收益reporting api分享

今天收到需求,需要对接reporting api接口&#xff0c;拉取广告收益回来。网上找到文档开始对接&#xff0c;对接完成了&#xff0c;今天分享给大家一些心得 文档地址:https://developers.google.com/admob/api/v1/reporting?hlzh-cn#php-client-library 因为接口使用的google…

闪回技术

目录 闪回技术 恢复mybonus表 彻底删除mybonus表 清空回收站 Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 闪回技术 Flash Back 给予用户最为直接的支持之一就是给了用户后悔的机会 但是现在如果用户想去操作这个…

全网最完整的iperf测试工具使用说明

文章目录 前言iPerf 2.0、iPerf 3.0 和 iPerf 3.1 之间的变化iPerf 3 用户文档iPerf 2.0.6、iPerf 2.0.7 和 iPerf 2.0.8 之间的更改iPerf 2 用户文档调整 TCP 连接调整 UDP 连接组 播IPv6 模式使用代表性流测量带宽将服务器作为守护程序运行 前言 iPerf - TCP、UDP 和 SCTP 的…

VUE实现Provide的计算属性

通过此篇可以学到&#xff1a; 如何使用Providerinject进行“跨代”传值如何实现一个计算属性的Provider如何解决告警“injection "xxxxx" not found. ” 一、描述 目前需要创建一个计算属性传入Provide&#xff0c;并且能够被其他组件Inject 二、实现 父组件 .…

每日一题——LeetCode1678.设计Goal解析器

方法一 splice 将字符串转为数组&#xff0c;对数组进行遍历&#xff0c;碰到G保持不变&#xff0c;继续循环&#xff0c;碰到 ( 看他后一位&#xff0c;是 ) 则删除两个元素&#xff0c;添加一个 o &#xff0c;不是则删除四个元素&#xff0c;添加元素 al &#xff0c;最后将…

Python—实例练习

1.编写程序x1&#xff0c;请先输入a和b两个整数&#xff0c;然后编写程序并输出 # (1)计算并显示a的绝对值&#xff1b; print("请输入a&#xff1a;") aint(input())if a>0:print(a) else:print(-a) # (2)两数中的最大值&#xff1b; a int(input()) b int(…

ProcessOn:让你的思维导图与流程图绘制更加高效

ProcessOn&#xff1a;让你的思维导图与流程图绘制更加高效 在当今这个信息爆炸的时代&#xff0c;有效地组织和呈现我们的想法变得尤为重要。无论是学生、教师、项目经理还是设计师&#xff0c;一个好的思维导图或流程图工具都能让我们的工作和学习更加高效。今天&#xff0c…

【项目笔记】java微服务:黑马头条(day02)

文章目录 app端文章查看&#xff0c;静态化freemarker,分布式文件系统minIO1)文章列表加载1.1)需求分析1.2)表结构分析1.3)导入文章数据库1.3.1)导入数据库1.3.2)导入对应的实体类 1.4)实现思路1.5)接口定义1.6)功能实现1.6.1)&#xff1a;导入heima-leadnews-article微服务&am…

管理application的secret,在哪个level呢

从安全设计来看&#xff0c;访问控制是非常重要的。除非是完全公开的网页&#xff0c;可以没有任何限制的访问 在实施访问控制的应用application中呢&#xff0c;你的秘钥管理控制在哪个level呢 level -2 没有访问控制&#xff0c;注意这是-2 负二&#xff0c;不是level 2 l…

H5炫酷DJ背景引导页源码

源码名称&#xff1a;炫酷DJ背景引导页源码 源码介绍&#xff1a;一款带有动态视频背景的引导页源码&#xff0c;带有四个按钮&#xff0c;右下角也有三个按钮。 需求环境&#xff1a;H5 下载地址&#xff1a; https://www.changyouzuhao.cn/11665.html

今天做了两个工具

URL可用性检测 2.影视 第一个工具为第二个工具服务&#xff0c;一定程度上检测了搜集到视频解析接口是否可用。

2023年终总结——跌跌撞撞不断修正

目录 一、回顾1.一月&#xff0c;鼓足信心的开始2.二月&#xff0c;焦躁不安3.三月&#xff0c;路还是要一步一步的走4.四月&#xff0c;平平淡淡的前行5.五月&#xff0c;轰轰烈烈的前行6.六月&#xff0c;看事情更底层透彻了7.七月&#xff0c;设计模式升华月8.八月&#xff…
最新文章