如何判断当前的程序运行在中断中
方法一:通过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))
在中断函数加辅助信息,比如打印信息或者点亮LED等。 中断里面加标志处理,比如打印或者点灯等。 N32G452勘误手册中英双版 define INTERRUPT_ACTIVE_BIT_REGISTER2_ADDR ((volatile uint32_t *)0xE000E304U 不是有中断状态寄存器吗,配合自己建立标志,应该可以判断是否在处理中断处理程序,以及哪个中断处理。
页:
[1]