打印
[应用相关]

如何判断当前的程序运行在中断中

[复制链接]
535|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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勘误手册中英双版

使用特权

评论回复
5
好几遍vh| | 2024-9-30 14:57 | 只看该作者
define INTERRUPT_ACTIVE_BIT_REGISTER2_ADDR ((volatile uint32_t *)0xE000E304U

使用特权

评论回复
6
suncat0504| | 2024-10-29 18:32 | 只看该作者
不是有中断状态寄存器吗,配合自己建立标志,应该可以判断是否在处理中断处理程序,以及哪个中断处理。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

1373

帖子

0

粉丝