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

广州白云区建设局网站镇江百度关键词优化

广州白云区建设局网站,镇江百度关键词优化,构建动态网站设计,做视频直播的网站往期内容 本专栏往期内容,interrtupr子系统: 深入解析Linux内核中断管理:从IRQ描述符到irq domain的设计与实现Linux内核中IRQ Domain的结构、操作及映射机制详解中断描述符irq_desc成员详解Linux 内核中断描述符 (irq_desc) 的初始化与动态分…

往期内容

本专栏往期内容,interrtupr子系统:

  1. 深入解析Linux内核中断管理:从IRQ描述符到irq domain的设计与实现
  2. Linux内核中IRQ Domain的结构、操作及映射机制详解
  3. 中断描述符irq_desc成员详解
  4. Linux 内核中断描述符 (irq_desc) 的初始化与动态分配机制详解

pinctrl和gpio子系统专栏:

  1. 专栏地址:pinctrl和gpio子系统

  2. 编写虚拟的GPIO控制器的驱动程序:和pinctrl的交互使用

    – 末片,有专栏内容观看顺序

input子系统专栏:

  1. 专栏地址:input子系统
  2. input角度:I2C触摸屏驱动分析和编写一个简单的I2C驱动程序
    – 末片,有专栏内容观看顺序

I2C子系统专栏:

  1. 专栏地址:IIC子系统
  2. 具体芯片的IIC控制器驱动程序分析:i2c-imx.c-CSDN博客
    – 末篇,有专栏内容观看顺序

总线和设备树专栏:

  1. 专栏地址:总线和设备树
  2. 设备树与 Linux 内核设备驱动模型的整合-CSDN博客
    – 末篇,有专栏内容观看顺序

img

1.中断路径上的3个部件

● 中断源

  • 中断源指引发中断信号的硬件模块,如GPIO、定时器、串口(UART)、DMA控制器等。这些模块都有各自的寄存器,可以设置中断相关的参数,例如:

    • 使能中断:启用或禁用该模块的中断功能。
    • 中断状态:检查该模块是否发生了中断。
    • 中断类型:设置中断的触发条件,例如上升沿触发、下降沿触发或电平触发等。
  • 中断源可以根据其设置的状态来决定是否向中断控制器发送中断请求信号。

● 中断控制器

  • 中断控制器汇集所有中断源的信号,将其发送至CPU。中断控制器可以:

    • 设置优先级:为不同的中断源设置优先级,以便在多重中断同时发生时,确定先响应哪个中断。当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源
    • 向CPU发出中断信号:中断控制器根据优先级和屏蔽设置向CPU发送中断请求信号。CPU通过读取中断控制器寄存器来判断哪个中断源需要响应。
  • 中断控制器的实现因芯片平台而异,例如:

    • STM32F103 使用 NVIC(嵌套向量中断控制器)来处理中断。
    • ARM9 平台中通常由芯片厂商设计的特定中断控制器。
    • Cortex A7 采用 GIC(通用中断控制器),具有更加复杂的中断管理功能。

● CPU

  • CPU会在每条指令执行后检查是否有中断请求。
  • CPU内部的寄存器提供了中断的总开关,可以通过这些寄存器来使能或禁用中断,从而实现对中断响应的控制。

img

2.STM32F103的GPIO中断

对于GPIO中断,STM32F103又引入了External interrupt/event controller (EXTI)。用来设置GPIO的中断类型,如下图:

对于GPIO中断,STM32F103又引入了External interrupt/event controller (EXTI)。用来设置GPIO的中断类型,如下图:

img

EXTI可以给NVIC提供16个中断信号:EXTI0~EXTI15。那么某个EXTIx,它来自哪些GPIO呢?这需要设置GPIO控制器。

2.1 GPIO控制器

STM32F103的GPIO控制器中有AFIO_EXTICR1~AFIO_EXTICR4一共4个寄存器

名为:External interrupt configuration register,外部中断配置寄存器。

用来选择某个外部中断EXTIx的中断源,示例如下:

img

注意:从上图可知,EXTI0只能从PA0、……、PG0中选择一个,这也意味着PA0、……、PG0中只有一个引脚可以用于中断。这跟其他芯片不一样,很多芯片的任一GPIO引脚都可以同时用于中断。

img

2.2 EXTI

在GPIO控制器中,可以设置某个GPIO引脚作为中断源,给EXTI提供中断信号。但是,这个中断的触发方式是怎么的?高电平触发、低电平触发、上升沿触发、下降沿触发?这需要进一步设置。EXTI框图如下:

img

沿着上面框图中的红线,我们要设置:

  • 选择哪些GPIO可以发出中断(EXITmux)
  • Falling trigger selection register:是否选择下降沿触发(EventTrigger)
  • Rising trigger selection register:是否选择上升沿触发(EventTrigger)
  • Interrupt mask register:是否屏蔽中断,允许某个EXTI中断(Masking)

当发生中断时,可以读取下列寄存器判断是否发生了中断、发生了哪个中断:

  • Pending reqeust register

要使用EXTI,流程如下:

img

翻译如下:

  • 配置EXTI_IMR:允许EXTI发出中断
  • 配置EXTI_RTSR、EXTI_FTSR,选择中断触发方式
  • 配置NVIC中的寄存器,允许NVIC把中断发给CPU

2.3 NVIC

多个中断源汇聚到NVIC,NVIC的职责就是从多个中断源中取出优先级最高的中断,向CPU发出中断信号。处理中断时,程序可以写NVIC的寄存器,清除中断。涉及的寄存器:

img

我们暂时只需要关注:ISER(中断设置使能寄存器)、ICPR(中断清除挂起寄存器)。要注意的是,这些寄存器有很多个,比如ISER0、ISER1等等。里面的每一位对应一个中断。ISER0中的bit0对应异常向量表中的第16项(向量表从第0项开始),如下图:img

2.4 CPU

cortex M3/M4处理器内部有这几个寄存器:

2.4.1 PRIMASK

img

把PRIMASK的bit0设置为1,就可以屏蔽所有优先级可配置的中断。
可以使用这些指令来设置它:

CPSIE I  ; 清除PRIMASK,使能中断
CPSID I  ; 设置PRIMASK,禁止中断或者:
MOV R0, #1
MSR  PRIMASK R0  ; 将1写入PRIMASK禁止所有中断MOV R0, #0
MSR PRIMASK, R0  ; 将0写入PRIMASK使能所有中断

2.4.2 FAULTMASK

在这里插入图片描述

FAULTMASK和PRIMASK很像,它更进一步,出来一般的中断外,把HardFault都禁止了。
只有NMI可以发生。
可以使用这些指令来设置它:

CPSIE F  ; 清除FAULTMASK
CPSID F  ; 设置FAULTMASK或者:
MOV R0, #1
MSR  FAULTMASK R0  ; 将1写入FAULTMASK禁止中断MOV R0, #0
MSR FAULTMASK, R0  ; 将0写入FAULTMASK使能中断

2.4.3 BASEPRI

img

BASEPRI用来屏蔽这些中断:它们的优先级,其值大于或等于BASEPRI。
可以使用这些指令来设置它:

MOVS R0, #0x60
MSR BASEPRI, R0   ; 禁止优先级在0x60~0xFF间的中断MRS R0, BASEPRI   ; 读取BASEPRIMOVS R0, #0
MSR BASEPRI, R0    ; 取消BASEPRI屏蔽

3.STM32MP157的GPIO中断

STM32MP157的GPIO中断在硬件上的框架,跟STM32F103是类似的。它们的中断控制器不一样,STM32MP157中使用的是GIC:

img

3.1 GPIO控制器

对于STM32MP157,除了把GPIO引脚配置为输入功能外,GPIO控制器里没有中断相关的寄存器。

3.2 EXTI

GPIO引脚可以向CPU发出中断信号,所有的GPIO引脚都可以吗?不是的,需要在EXTI控制器中设置、选择。GPIO引脚触发中断的方式是怎样的?高电平触发、低电平触发、上升沿触发、下降沿触发?这需要进一步设置。这些,都是在EXTI中配置,EXTI框图如下:img

3.2.1 设置EXITmux

选择哪些GPIO可以发出中断。只有16个EXTI中断,从EXTI0~EXTI15;每个EXTIx中断只能从PAx、PBx、……中选择某个引脚,如下图所示:

img

注意:从上图可知,EXTI0只能从PA0、……中选择一个,这也意味着PA0、……中只有一个引脚可以用于中断。这跟其他芯片不一样,很多芯片的任一GPIO引脚都可以同时用于中断。

通过EXTI_EXTICR1等寄存器来设置EXTIx的中断源是哪个GPIO引脚,入下图所示:

img

3.2.2 设置Event Trigger

设置中断触发方式:

img

3.2.3 设置Masking

允许某个EXTI中断:

img

3.2.4 查看中断状态、清中断

img

3.3 GIC

ARM体系结构定义了通用中断控制器(GIC),该控制器包括一组用于管理单核或多核系统中的中断的硬件资源。GIC提供了内存映射寄存器,可用于管理中断源和行为,以及(在多核系统中)用于将中断路由到各个CPU核。它使软件能够屏蔽,启用和禁用来自各个中断源的中断,以(在硬件中)对各个中断源进行优先级排序和生成软件触发中断。它还提供对TrustZone安全性扩展的支持。GIC接受系统级别中断的产生,并可以发信号通知给它所连接的每个内核,从而有可能导致IRQ或FIQ异常发生。

3.4 GIC

CPU的CPSR寄存器中有一位:I位,用来使能/禁止中断。

img

可以使用以下汇编指令修改I位:

  CPSIE I  ; 清除I位,使能中断CPSID I  ; 设置I位,禁止中断

4.IMX6ULL的GPIO中断

IMX6ULL的GPIO中断在硬件上的框架,跟STM32MP157是类似的。IMX6ULL中没有EXTI控制器,对GPIO的中断配置、控制(stm32MP157:EXIT设置EXITx的某一个引脚作为中断源,设置其中断的触发方式,设置EXITx能否中断 >>> 在GPIO控制器里配置中断引脚、中断引脚触发方式、使能GPIO中断),都在GPIO模块内部实现:

img

img

4.1 GPIO控制器

4.1.1 配置GPIO中断

每组GPIO中都有对应的GPIOx_ICR1、GPIOx_ICR2寄存器(interrupt configuration register )。每个引脚都可以配置为中断引脚,并配置它的触发方式:

img

4.1.2 使能GPIO中断

img

4.1.3 判断中断状态、清中断

img

4.2 GIC

ARM体系结构定义了通用中断控制器(GIC),该控制器包括一组用于管理单核或多核系统中的中断的硬件资源。GIC提供了内存映射寄存器,可用于管理中断源和行为,以及(在多核系统中)用于将中断路由到各个CPU核。它使软件能够屏蔽,启用和禁用来自各个中断源的中断,以(在硬件中)对各个中断源进行优先级排序和生成软件触发中断。它还提供对TrustZone安全性扩展的支持。GIC接受系统级别中断的产生,并可以发信号通知给它所连接的每个内核,从而有可能导致IRQ或FIQ异常发生。

4.3 CPU

CPU的CPSR寄存器中有一位:I位,用来使能/禁止中断。可以使用以下汇编指令修改I位:img

  CPSIE I  ; 清除I位,使能中断CPSID I  ; 设置I位,禁止中断
http://www.hkea.cn/news/369068/

相关文章:

  • 柳州建设局网站广告买卖网
  • 做外贸一般上哪些网站google play谷歌商店
  • 泉州手机网站制作如何做企业产品推广
  • 徐州手机网站设计汕头网站建设优化
  • 有没有专业收费做网站优化的百度百科优化排名
  • 常州网站建设哪家便宜江西seo推广软件
  • 如何用pageadmin做网站品牌宣传策略有哪些
  • 网站免费优化软件需要优化的地方
  • 24小时学会网站建设下载厦门百度竞价开户
  • 怎样学做网站网站权重等级
  • 做网站好还是做淘宝好北京seo推广
  • 郑州门户网站建设哪家好网站首页不收录
  • 网站制作营销型哪些网站可以发广告
  • 最新政府网站建设理念广州头条新闻最新
  • 济宁网站建设神华线上推广的三种方式
  • 我要表白网站在线制作如何做网站的教程
  • 福州论坛建站模板策划网络营销活动
  • 网站建设 天津百度市场应用官方app
  • 动态网站制作流程友情链接的定义
  • 企业网站开发方案免费建立一个网站
  • 网站引导页面制作的四个任务名称推广引流的10个渠道
  • 南宁网站建设制作后台网站关键词优化价格
  • 微信小程序商城制作公司宁波seo推广服务
  • 响应式购物网站公司seo是什么意思
  • 360未经证实的网站如何做电商运营方案
  • 网站建设类公司排名营销方案范文100例
  • 郑州网站设计 郑州网站开发网络优化有前途吗
  • 黑河做网站首页关键词排名优化
  • 网站二级域名怎么解析公司网络搭建
  • wordpress做网店win10优化大师是官方的吗