STM32MP135裸机编程:BOOT跳转到APP前关闭所有中断、清除所有中断挂起标志操作方法

0 前言

一般来说,MCU/SOC的BOOT在跳转到APP前都需要进行环境清理的操作,其中必须进行的一项操作便是关闭所有中断、清除所有中断挂起标志。本文介绍基于STM32MP135裸机编程下关闭所有中断、清除所有中断挂起标志的操作方法。

1 操作方法

STM32MP135裸机编程下关闭所有中断、清除所有中断挂起标志的操作语句如下:

c 复制代码
for (irqn = 0; irqn < (IRQn_ID_t)MAX_IRQ_n; irqn++)
{
      GIC_DisableIRQ((IRQn_Type)irqn);
      GIC_ClearPendingIRQ((IRQn_Type)irqn);
}

MAX_IRQ_n表示IRQ的数量。

2 寄存器描述

(1)中断去使能寄存器

中断对应位写1表示关闭中断。

(2)中断挂起清除寄存器

中断对应位写1表示清除中断挂起标志。

注:这里分为外设产生的中断和软件中断。

3 HAL库实现

c 复制代码
/** \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);
}

/** \brief Clears the given interrupt from being pending using GIC's ICPENDR register.
* \param [in] IRQn The interrupt to be enabled.
*/
__STATIC_INLINE void GIC_ClearPendingIRQ(IRQn_Type IRQn)
{
  if (IRQn >= 16U) {
    GICDistributor->ICPENDR[IRQn / 32U] = 1U << (IRQn % 32U);
  } else {
    // INTID 0-15 Software Generated Interrupt
    GICDistributor->CPENDSGIR[IRQn / 4U] = 1U << ((IRQn % 4U) * 8U);
  }
}
相关推荐
MyBili8 小时前
【安卓开发/搞机】快图浏览(QuickPic)技术解析:为何这款3MB应用仍是本地图库的性能天花板?
android·app·安卓·文件管理·相册·看图软件·手机相册
kango2 天前
Xcode、模拟器Runtime、真机符号完整知识手册
ios·app
花 满 楼2 天前
RISC-V APLIC 中断模块总结——第一篇
mcu·risc-v·中断·aplic
蓝悦无人机2 天前
蓝悦地面站APP深度测评:一套软件,手机/电脑双端通用,打通“规划-执行-复盘”全链路
app·无人机·无人机地面站·地面站平台
梦想的颜色3 天前
【AI实战】React‑Native + AI 移动端 APP 完整实战全流程|云端 / 本地大模型、Agent 集成、安装配置、避坑指南
react.js·大模型·app·agent·reactnative·expo·ai 应用开发
黑臂麒麟5 天前
HarmonyOS鸿蒙实战应用7:随手账本——数据导出与分享
华为·app·arkts·鸿蒙
黑臂麒麟5 天前
Harmony鸿蒙实战应用10:随手账本——发布检查与最终验收
华为·app·arkts·鸿蒙
黑臂麒麟5 天前
HarmonyOS鸿蒙实战应用6:随手账本——Preferences本地持久化
数据库·华为·app·鸿蒙
黑臂麒麟5 天前
HarmonyOS随手账本App——从项目搭建到数据模型设计
华为·app·鸿蒙
黑臂麒麟5 天前
Harmony鸿蒙实战应用5:随手账本——搜索筛选与分类统计
华为·app·arkts·鸿蒙