事件中断理解

NVIC是嵌套向量中断控制器

一、优先级定义

在 NVIC 有一个专门的寄存器:中断优先级寄存器 NVIC_IPRx,用来配置外部中断的优先级,IPR 宽度为 8bit,原则上每个外部中断可配置的优先级为 0~255,数值越小,优先级越高。但是绝大多数 CM3 芯片都会精简设计,以致实际上支持的优先级数减少,在 F103 中,只使用了高 4bit,用于表达优先级的这 4bit,又被分组成抢占优先级和子优先级。如果有多个中断同时响应,抢占 优先级高的就会抢占抢占优先级低的优先得到执行,如果抢占优先级相同,就比较子优先级。如果抢占优先级和子优先级都相同的话,就比较他们的硬件中断编号,编号越小,优先级越高。

aef38f08de4644cf9fe53ca9396b0884.png

 

二、优先级分组

优先级的分组由内核外设 SCB 的应用程序中断及复位控制寄存器 AIRCR 的 PRIGROUP[10:8] 位 决定,F103 分为了 5 组,具体如下:主优先级 = 抢占优先级。

EXTI外部中断/事件控制器

EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的 20 个中断/事 件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触 发事件的属性。

事件中断理解_第1张图片

 

SysTick系统定时器

SysTick—系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中。系统定时器是一个 24bit 的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置系统时钟 SYSCLK 等于 72M。当重装载数值寄存器的值递减到 0 的时候,系统定时器就产生一次中断,以此循环往 复。

事件中断深度理解

假设我在玩崩铁,现在主线做完了,系统提示你想要做下一个主线需要更高的等级,这里系统提示就是 SysTick。而我想要早一点做主线,所以这时候我需要花时间去做其他支线来获得经验,这里去做其他支线就是 EXTI。 为了争取早点开启主线,我会按经验高到低依次来完成,这里依照经验高低完成就是 NVIC。

整个过程就是SysTick 提醒 EXTI 发布支线任务同时 NVIC 将支线任务按照优先级来完成

 

 

 

 

 

你可能感兴趣的:(stm32)