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

文章讨论了在STM微控制器开发中,如何确定和管理中断事件。通过NVIC和SCB寄存器,开发者可以检查中断的Enable、Pending和Active状态。在调试时,可以使用KEIL仿真查看中断信息,而在非调试环境中,则需要直接访问内核寄存器。文章强调了查阅Cortex-M系列权威指南的重要性,因为芯片参考手册可能不包含所有内核寄存器的详细信息。

这会进了哪个中断

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

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

调试中

通过点击Peripherals(外设)选择内核外设,点击NVIC进行一览
在这里插入图片描述

非调试环境

通过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

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值