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);
  }
}
相关推荐
Dlrb12113 天前
ARM -IMX6ULL的中断系统、GIC、CP15协处理器详细讲解
arm开发·arm·imx6ull·中断·gic·cp15·协处理器
ZZH_AI项目交付4 天前
同一套前摄心率算法,为什么 iPhone 16 Pro 稳,iPhone XR 会失准?
ios·app·ai编程
kidwjb5 天前
Linux内核-0.1版本的中断流程
linux·内核·中断
凡泰AI5 天前
如何借助MCP打通企业APP内部服务:从统一调用到小程序承接
小程序·uni-app·app·mpaas·mcp·小程序容器
私人珍藏库10 天前
[Android] 会计快题库 -财会职称考试刷题学习
android·人工智能·学习·app·软件·多功能
私人珍藏库10 天前
[Android] SimpleLive-聚合抖B虎鱼网络直播
智能手机·app·工具·软件·多功能
私人珍藏库10 天前
[Android] 抖音短视频 手表版-适配手机 极简体积无广告
智能手机·app·工具·软件·多功能
ZZH_AI项目交付11 天前
端侧大模型跑进 iPhone XR:我为什么没把它做成聊天助手
人工智能·app·ai编程
私人珍藏库11 天前
[Android] Stay浏览器-无限制访问任何网站
智能手机·app·工具·软件·多功能
qq_2573795912 天前
如何卸载Edge浏览器
前端·windows·git·python·edge·app·浏览器