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);
  }
}
相关推荐
weixin_lynhgworld16 小时前
海外盲盒APP开发:从“未知”到“精准”的用户体验革命
app·海外盲盒
Truffle7电子3 天前
STM32理论 —— 存储、中断
stm32·嵌入式硬件·嵌入式·存储·中断
FinClip3 天前
OpenAI推出Apps SDK,你的企业App跟上了吗?
前端·app·openai
用户45539777496214 天前
最新盲盒系统搭建指南:H5/小程序/APP三端源码一站式部署
app
iOS阿玮5 天前
喜欢做马甲包的有福了~现在多了一招续费方式!
uni-app·app·apple
轻口味6 天前
Rokid Glasses 移动端控制应用开发初体验-助力业务创新
android·操作系统·app
铉铉这波能秀7 天前
如何在Android Studio中使用Gemini进行AI Coding
android·java·人工智能·ai·kotlin·app·android studio
Mart!nHu8 天前
OpenHarmony4.0 OTA升级Demo
app·openharmony·ota本地升级
关键帧Keyframe9 天前
AI 换脸不用上传服务器也行?FaceXSwap 这款 App 在手机上离线处理,效果却比云端还强!视频、GIF 动图、照片还都支持!
app·aigc·sora