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);
  }
}
相关推荐
veteranJayBrother3 天前
uniapp实现书架
微信小程序·uni-app·app·书架
胡西风_foxww5 天前
高考相关 APP 案例分享
算法·app·志愿·高考
YesPMP258 天前
短剧小程序,打造专属短剧观看平台
小程序·app·html5·平台·短剧·影视
飞飞_圆代码21 天前
iOS安卓渠道归因分析在App推广矩阵中的场景应用
android·ios·app
Amd79421 天前
Nuxt.js 应用中的 app:resolve 事件钩子详解
中间件·app·生命周期·nuxt·插件·resolve·钩子
四川掌上时代科技有限公司22 天前
校园圈子论坛系统该如何搭建配置?可打包APP小程序H5源码交付支持二开
前端·游戏·小程序·uni-app·app·php
乌南竹25 天前
原生 App 上架 Mac App Store 过程总结
app
wfh1321 个月前
国际 Android WPS Office v18.13 解锁版
app
时光飞逝的日子1 个月前
Cortex-A7和Cortex-M7架构处理器取中断向量全流程分析
中断·cortex-a7·cortex-m·中断向量·中断向量表·arm状态·thumb状态
昵称p1 个月前
- 串口通信
mcu·串口·usart·中断