STM32 基础知识--中断

目录

一、中断向量

二、中断优先级与嵌套

1、中断优先级

2、中断嵌套

三、中断悬起

1、中断的悬起

2、PendSV

四、总结


一、中断向量

中断向量是单片机保存中断入口函数的一张向量表,在使用keil编译程序时,生成的二进制固件,开头部分为各种中断的入口函数即中断向量。以STM32F103的启动汇编作为示例,

 __Vectors为定义的向量表,向量表的第一个字为设备上电后的初始栈顶,接下来依次为复位中断,NMI中断等的入口。

各中断函数的实现如下图,定义为弱函数,可被用户重定义。

中断函数入口的本质是一个地址,当外部中断发生时,硬件根据中断类型在中断向量表中寻找到指定中断的入口,处理器保存当前运行程序的上下文,然后跳转到中断入口函数。

用户重定义中断接口示例(部分),只需要与.s中定义重名函数即可:

void UsageFault_Handler(void)
{
  /* USER CODE BEGIN UsageFault_IRQn 0 */

  /* USER CODE END UsageFault_IRQn 0 */
  while (1)
  {
    /* USER CODE BEGIN W1_UsageFault_IRQn 0 */
    /* USER CODE END W1_UsageFault_IRQn 0 */
  }
}

void SysTick_Handler(void)
{
  /* USER CODE BEGIN SysTick_IRQn 0 */
  extern void xPortSysTickHandler( void );
  xPortSysTickHandler();
  /* USER CODE END SysTick_IRQn 0 */
  
  /* USER CODE BEGIN SysTick_IRQn 1 */
  
  /* USER CODE END SysTick_IRQn 1 */
}

二、中断优先级与嵌套

1、中断优先级

中断优先级顾名思义,是用来区分中断等级的,中断优先级越高,中断越被优先处理。当两个中断同时发生时,中断优先级较高的会被先处理,处理完之后再处理优先级低的中断。

2、中断嵌套

处理器正在处理一个中断,此时一个优先级较高的中断被触发,那么不等低优先级中断执行完,处理器会停止当前低优先级的任务去处理高优先级的中断,此过程为中断嵌套,也就是说高优先级的中断可以打断(抢占)低优先级的中断。

注意,中断嵌套层次于函数的递归,会在嵌套或递归过程中保存程序的上下文到栈中,如果嵌套或递归层次过深灰导致栈溢出。基于此原因要对中断优先级进行分组,保证可抢占的中断不能过多,以致于最坏情况下不会因为中断大量嵌套导致栈溢出。

三、中断悬起

1、中断的悬起

处理器正在处理一个高优先级的中断,此时一个低优先级的中断被触发,那么系统会继续执行高优先级的中断,此时为了防止漏掉低优先级的中断信号,M3会将该低优先级的中断悬起标志位置为有效,当高优先级的中断执行完,会根据悬起标志位来处理低优先级的中断,这样的机制保证系统不会丢失低优先级中断的中断源。

2、PendSV

PendSV为可悬起系统调用,一般在实时操作系统中用来实现任务的上下文切换。PendSV优先级一般被设置为最低。如果触发了PendSV,当前有中断正在执行的情况下,继续执行中断,PendSV中断被悬起,当处理器执行完所以中断时,才会去执行PendSV。

四、总结

欢迎批评指正!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值