【Keil】调试中查看当前中断信息

这会进了哪个中断

今天我听说了一个问题,STM开发中,在执行一段程序的时候,不知道这会是不是发生了什么中断。如何确认到中断是否执行了,又是哪个中断执行了,在调试中应该怎么办呐?

我们经常会遇到一些需要知道系统当前中断信息的情况,所有中断的Enable状态、Pending状态(已经发生但是还没有执行到中断)、Active状态(正在执行中断)、中断优先级等信息。

调试中

通过点击Peripherals(外设)选择内核外设,点击NVIC进行一览
【Keil】调试中查看当前中断信息_第1张图片

非调试环境

通过NVIC和SCB两个寄存器来查看

typedef struct
{
  __IO uint32_t ISER[1];        /* Interrupt Set Enable Register */
       uint32_t RESERVED0[31];
  __IO uint32_t ICER[1];        /* Interrupt Clear Enable Register */
       uint32_t RSERVED1[31];
  __IO uint32_t ISPR[1];        /* Interrupt Set Pending Register  */
       uint32_t RESERVED2[31];
  __IO uint32_t ICPR[1];        /* Interrupt Clear Pending Register */
       uint32_t RESERVED3[31];
       uint32_t RESERVED4[64];
  __IO uint32_t IP[8];          /* Interrupt Priority Register */
}  NVIC_Type;
 
typedef struct
{
  __I  uint32_t CPUID;          /* CPUID Base Register */
  __IO uint32_t ICSR;           /* Interrupt Control and State Register */
#if (__VTOR_PRESENT == 1)
  __IO uint32_t VTOR;           /* Vector Table Offset Register */
#else
       uint32_t RESERVED0;
#endif
  __IO uint32_t AIRCR;          /* Application Interrupt and Reset Control Register      */
  __IO uint32_t SCR;            /* System Control Register */
  __IO uint32_t CCR;            /* Configuration Control Register */
       uint32_t RESERVED1;
  __IO uint32_t SHP[2];         /* System Handlers Priority Registers. [0] is RESERVED */
  __IO uint32_t SHCSR;          /* System Handler Control and State Register */
} SCB_Type;

这两个寄存器在具体的芯片参考手册上基本没有提到,因为这是内核寄存器,应该查阅的是CortexM系列权威指南,例如Cortex M3与M4权威指南。以下是权威指南里对SCB的所有寄存器的汇总信息。实际上要以手册为准,官方的库提供的并不是很准确,例如库里描述的NVIC没有IABR寄存器,实际上是有的。

SCB

【Keil】调试中查看当前中断信息_第2张图片
这部分的地址映射可以看我的另一篇文章,内存映射。
跟中断相关的是SCB->ICSR寄存器。其他寄存器以后再看内核相关的资料。KEIL仿真时查看到中Enable、Pending等信息也是根据这个寄存器来的。以下是SCB->ICSR的详细信息。
【Keil】调试中查看当前中断信息_第3张图片
举例:ICSR寄存器的bit 26表示systick中断是否pending,写bit 25可以清除systick中断pending,bit 22表示是否有片内外设中断在pending等。
【Keil】调试中查看当前中断信息_第4张图片
通过查看SCB->SHCSR寄存器可以知道内核的一些中断是否处于active状态,例如bit 11代表了systick中断是否active
【Keil】调试中查看当前中断信息_第5张图片

你可能感兴趣的:(stm32)