当前位置: 首页 > ds >正文

【二】12.关于中断

前言:
    L内核提供了完善的中断框架,我们只需要申请,然后注册中断处理函数即可。
1.裸机的中断处理方法回顾:
       步骤1:使能中断,初始化相应的寄存器。
       步骤2:注册中断服务函数,也就是像irqTable数组的指定标号处写入中断服务函数。
       步骤3:中断发生以后进入IRQ中断服务函数,在IRQ中断服务函数在数组irqTable里面查找具体的中断处理函数,找到以后执行相应的中断处理函数。
2.L中断API函数:

中断申请

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

中断释放

void free_irq(unsigned int irq, void *dev)

中断处理函数

irqreturn_t (*irq_handler_t) (int, void *)

中断使能与禁止

void enable_irq(unsigned int irq)

void disable_irq(unsigned int irq)

void disable_irq_nosync(unsigned int irq)

local_irq_enable()

local_irq_disable()

local_irq_save(flags)

local_irq_restore(flags)

3.上半部与下半部:
            上半部:就是中断处理函数,那些处理过程比较快,不会占用很长时间的处理就放在上半部完成。
            下半部:如果处理过程比较耗时,那么就将这些比较耗时的代码提出来,交给下半部去执行,这样中断处理函数就会快进快出。
            三个下半部机制:
                      (1)软中断:不建议使用,我没看,别咬我。。。。。。。。。。。。
                      (2)tasklet:
                            

                     (3)工作队列:没用到,我没看,别咬我。。。。。。。。。。。。。
4.中断<--->设备树:
                STM32MP1 有三个与中断有关的控制器:GICEXTI  NVIC。
        (1)GIC:全称为:Generic Interrupt Controller。
                            GIC 将众多的中断源分为分为三类:
        ①、SPI(Shared Peripheral Interrupt),共享中断,顾名思义,所有 Core 共享的中断,这个是最常见的,那些外部中断都属于 SPI 中断(注意!不是 SPI 总线那个中断)。比如 GPIO 中断、串口中断等等,这些中断所有的 Core 都可以处理,不限定特定 Core。中断ID: 988  ID 分配给 SPI,像 GPIO 中断、串口中断等这些外部中断。
        ②、PPI(Private Peripheral Interrupt),私有中断,我们说了 GIC 是支持多核的,每个核肯定有自己独有的中断。这些独有的中断肯定是要指定的核心处理,因此这些中断就叫做私有中断。中断ID: 16  ID 分配给 PPI
        ③、SGI(Software-generated Interrupt),软件中断,由软件触发引起的中断,通过向寄存器GICD_SGIR 写入数据来触发,系统会使用 SGI 中断来完成多核之间的通信。中断ID:ID0~ID15:这 16  ID 分配给 SGI
    (2)EXTI:全称是:Extended interrupt and event controller。
                            EXTI 的异步输入事件可以分为 2 组:
        ①、可配置事件(来自能够生成脉冲的 I/O 或外设的信号),这类事件具有以下特性:
        – 可选择的有效触发边沿。
        – 中断挂起状态寄存器位。
        – 单独的中断和事件生成屏蔽。
        – 支持软件触发。
        ②、直接事件(来自其他外设的中断和唤醒源,需要在外设中清除),这类事件具有以下特性:
        – 固定上升沿有效触发。
        – EXTI 中无中断挂起状态寄存器位(中断挂起状态由生成事件的外设提供)。
        – 单独的中断和事件生成屏蔽。
        – 不支持软件触发。
        (3)NVIC:NVIC  Cortex-M4内核的中断控制器。
      (4)GIC控制器节点:
                            stm32mp151.dtsi 文件,其中的 intc 节点就是 GIC 的中断控制器节点:
                
                            SPI6 节点内容:
                
        (5)EXIT控制器节点:
                        stm32mp151.dtsi 文件,其中的 exti 节点就是 EXTI 的中断控制器节点:
        
                    GPIO 节点信息里面的 EXTI 相关内容:
        我们来看一个具体的应用,打开 stm32mp15xx-dkx.dtsi 文件,找到如下所示内容:
        

                   中断运用代码如下---------------------------->>>>>>>>>>>>>>>>>>>>>>

设备树节点添加
驱动代码
      看系统中注册的中断"cat /proc/interrupts"。
http://www.xdnf.cn/news/13443.html

相关文章:

  • APM32芯得 EP.10 | 基于APM32F411控制的一个软开关电路设计分享
  • yolo格式分割标签可视化,coco-seg数据集
  • 6个月Python学习计划 Day 19 - 模块与包的实战拆分
  • 【Java】在 Spring Boot 中集成 Spring Security + JWT 实现基于 Token 的身份认证
  • 使用Spring Boot Actuator构建用户应用
  • 发布一个angular的npm包(包含多个模块)
  • Nuclei PoC 编写详解:从入门到实践
  • PostgreSQL 数据库技术峰会重庆站回顾|IvorySQL 开源实践与社区生态
  • python打卡day50
  • Leetcode 3572. Maximize Y‑Sum by Picking a Triplet of Distinct X‑Values
  • 对3D对象进行形变分析
  • 基于“SpringBoot+uniapp的考研书库微信小程序设计与实现7000字论文
  • 新型DuplexSpy RAT可使攻击者完全控制Windows系统
  • 微信小程序中的计算属性库-miniprogram-computed
  • 23-Oracle 23 ai 区块链表(Blockchain Table)
  • Cursor 工具项目构建指南:MySql 数据库结构设计的 Cursor 规范
  • MongoDB 基础
  • 鸿蒙考试-Ability生命周期篇
  • 到院率最高提升40%,消费医疗用AI营销机器人跑赢增长焦虑
  • 【python深度学习】Day 50 预训练模型+CBAM模块
  • 高效多尺度网络与可学习离散小波变换用于盲运动去模糊
  • 第四章 RAG 知识库基础
  • CanFestival移植到STM32G4
  • HTML实现的2048游戏
  • 从算法到系统架构:AI生成内容连贯性技术深度解析
  • 全网首发!AgentCPM-GUI通过adb操控手机教程
  • pikachu靶场通关笔记23 SQL注入06-delete注入(报错法)
  • RT_Thread——邮箱
  • Monorepo + PNPM 搭建高效多项目管理
  • 基于流形迁移学习的快速动态多目标进化算法(MMTL-MOEA/D)求解FDA1-FDA5和dMOP1-dMOP3,提供完整MATLAB代码