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);
  }
}
相关推荐
上海安当技术1 天前
固件签名与Secure Boot:安当CAS如何构建汽车固件信任链
网络·汽车·信任链·boot·secure·固件签名·安当cas
梦想的颜色3 天前
AI 时代小白 VibeCoding 做 APP:UniApp(含 Uni‑X)、Flutter 与 React Native+Expo全维度技术选型对比指南
flutter·react native·app·uniapp·vibecoding·unippx·app产品
Dlrb12115 天前
Linux驱动---Linux 中断系统及其上与下半部的介绍与阻塞IO实现按键检测
linux·嵌入式硬件·imx6ull·中断·阻塞io
不爱说话郭德纲5 天前
uni-app x iOS 扫码模糊怎么办?AVFoundation 灰尘级别摄像头助你超广角聚焦
前端·uni-app·app
Magic-ZYJ5 天前
不登录、不联网也能用:我是如何设计一款“本地优先”iOS App 的
ios·app·iphone·研发·独立开发者·心情日记
不爱说话郭德纲6 天前
零基础,学做KMP项目,TRAE Work手把手带你月薪.....
前端·后端·app
纵有疾風起7 天前
I/O 软件层次结构:从用户态到硬件中断的完整旅程
操作系统·408·中断·lut·驱动程序·设备独立性
ZZH_AI项目交付8 天前
Apple Silicon 模拟器遇到旧版 MLKit:一次完整的依赖排查
ios·app·编译器
GitLqr9 天前
Flutter 实战:为你的 App 增加桌面快捷方式 (Quick Actions)
flutter·app·全栈
ZZH_AI项目交付9 天前
一个 33,623 字节的 ViewController——拆开它我用了四步
ios·app·apple