[应用相关] 如何判断当前的程序运行在中断中

[复制链接]
 楼主| maudlu 发表于 2024-7-22 20:03 | 显示全部楼层 |阅读模式
方法一:

通过IPSR寄存器

代码参考:

__STATIC_INLINE uint32_t __get_IPSR(void)
{
  register uint32_t __regIPSR          __ASM("ipsr");
  return(__regIPSR);
}

#define IS_IRQ_MODE()             (__get_IPSR_s() != 0U)


方法二:

通过ACTIVE寄存器族 0xE000_E300_0xE000_E31C

参考代码:

#define INTERRUPT_ACTIVE_BIT_REGISTER1_MASK 0xBFFFFFFFU  (根据芯片芯片中断实际情况设置)
#define INTERRUPT_ACTIVE_BIT_REGISTER2_MASK 0x0000011FU
#define INTERRUPT_ACTIVE_BIT_REGISTER1_ADDR ((volatile uint32_t *)0xE000E300U)
#define INTERRUPT_ACTIVE_BIT_REGISTER2_ADDR ((volatile uint32_t *)0xE000E304U)

#define phPlatform_Is_Irq_Context()    ((*(INTERRUPT_ACTIVE_BIT_REGISTER1_ADDR) & INTERRUPT_ACTIVE_BIT_REGISTER1_MASK) || \
                                                                                  (*(INTERRUPT_ACTIVE_BIT_REGISTER2_ADDR) & INTERRUPT_ACTIVE_BIT_REGISTER2_MASK))


chenqianqian 发表于 2024-8-8 08:32 来自手机 | 显示全部楼层
在中断函数加辅助信息,比如打印信息或者点亮LED等。
chenjun89 发表于 2024-8-14 08:28 来自手机 | 显示全部楼层
中断里面加标志处理,比如打印或者点灯等。
工程师犹饿死 发表于 2024-8-31 16:49 | 显示全部楼层
N32G452勘误手册中英双版
好几遍vh 发表于 2024-9-30 14:57 来自手机 | 显示全部楼层
define INTERRUPT_ACTIVE_BIT_REGISTER2_ADDR ((volatile uint32_t *)0xE000E304U
suncat0504 发表于 2024-10-29 18:32 | 显示全部楼层
不是有中断状态寄存器吗,配合自己建立标志,应该可以判断是否在处理中断处理程序,以及哪个中断处理。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

1639

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

48

主题

1639

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部