maudlu 发表于 2024-7-22 20:03

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

方法一:通过IPSR寄存器https://i-blog.csdnimg.cn/blog_migrate/0f3149bd3bb9c109080c368804188b3e.png代码参考:__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_E31Chttps://i-blog.csdnimg.cn/blog_migrate/c39081306152aeb4f56c7ca815c6e304.png参考代码:#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

不是有中断状态寄存器吗,配合自己建立标志,应该可以判断是否在处理中断处理程序,以及哪个中断处理。
页: [1]
查看完整版本: 如何判断当前的程序运行在中断中