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

Cortex-A7:__disable_irq和GIC_DisableIRQ、__enable_irq和GIC_EnableIRQ的区别(1)API介绍

0 相关资料

ARM® Generic Interrupt Controller Architecture version 2.0.pdf

1 API介绍

1.1 __disable_irq

__disable_irq函数的作用是失能IRQ,也就是不响应中断。实现代码如下:

/**\brief   Disable IRQ Interrupts\details Disables IRQ interrupts by setting the I-bit in the CPSR.Can only be executed in Privileged modes.*/
__STATIC_FORCEINLINE void __disable_irq(void)
{__ASM volatile ("cpsid i" : : : "memory");
}

具体工作就是操作CPSR寄存器的I位,将I位设置为1,失能IRQ。相关寄存器如下:
在这里插入图片描述
在这里插入图片描述

1.2 GIC_DisableIRQ

GIC_DisableIRQ是将指定的中断禁用,不再响应该中断。

/** \brief Disables the given interrupt using GIC's ICENABLER register.
* \param [in] IRQn The interrupt to be disabled.
*/
__STATIC_INLINE void GIC_DisableIRQ(IRQn_Type IRQn)
{GICDistributor->ICENABLER[IRQn / 32U] = 1U << (IRQn % 32U);
}

具体工作就是将中断对应的中断清使能位置1,相关寄存器说明如下:
在这里插入图片描述

1.3 __enable_irq

__enable_irq函数的作用是取消对IRQ的失能,也就是响应中断。实现代码如下:

/**\brief   Enable IRQ Interrupts\details Enables IRQ interrupts by clearing the I-bit in the CPSR.Can only be executed in Privileged modes.*/
__STATIC_FORCEINLINE void __enable_irq(void)
{__ASM volatile ("cpsie i" : : : "memory");
}

具体工作就是操作CPSR寄存器的I位,将I位设置为0,取消对IRQ的失能。相关寄存器如下:
在这里插入图片描述
在这里插入图片描述

1.4 GIC_EnableIRQ

GIC_EnableIRQ函数的作用是将指定的中断使能,响应该中断。

/** \brief Enables the given interrupt using GIC's ISENABLER register.
* \param [in] IRQn The interrupt to be enabled.
*/
__STATIC_INLINE void GIC_EnableIRQ(IRQn_Type IRQn)
{GICDistributor->ISENABLER[IRQn / 32U] = 1U << (IRQn % 32U);
}

具体工作就是将中断对应的中断设置使能位置1,相关寄存器说明如下:
在这里插入图片描述

http://www.lryc.cn/news/438387.html

相关文章:

  • MATLAB在嵌入式系统设计中的最佳实践
  • wpf 使用Oxyplot 库制作图表示例
  • CSS3中的@media查询
  • fly专享
  • 初识Linux · 进程(3)
  • 【spring】spring bean对象生命周期,spring容器如何管理bean,spring容器的名称是叫什么
  • 基于51单片机的电饭锅控制系统proteus仿真
  • 创建dataSource错误
  • 为解决bypy大文件上传报错—获取百度云文件直链并使用Aria2上传文件至服务器
  • 53.9k star 提升命令行效率的模糊搜索神器--fzf
  • 项目需求 | MySQL增量备份与恢复的完整操作指南
  • 判断当前环境是否为docker容器下
  • 深入理解FastAPI中的root_path:提升API部署灵活性的关键配置
  • QLORA:高效微调量化大型语言模型
  • CesiumJS+SuperMap3D.js混用实现可视域分析 S3M图层加载 裁剪区域绘制
  • Fish-Speech 部署安装指南
  • Excel 国产化替换新方案
  • 在职研生活学习--20240908
  • chattr:修改文件的特殊属性
  • vue-router 在新的标签页打开链接/路由
  • Ansys HFSS的边界条件与激励端口
  • C++:线程库
  • StarRocks实时分析数据库的基础与应用
  • golang学习笔记17——golang使用go-kit框架搭建微服务详解
  • git update-ref
  • 学习使用在windows系统上安装nodejs以及环境配置图文教程整理
  • Hexo框架学习——从安装到配置
  • 搭建Windows下的Rust开发环境
  • [linux 驱动]misc设备驱动详解与实战
  • C/S架构与B/S架构的适用场景分析