STM32F103系列 NVIC中断优先级管理

CM3 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有 256级的可编程中断设置。STM32 并没有使用 CM3 内核的全部东西,只用了它的一部分。STM32 有 84 个中断,包括 16 个内核中断和 68 个可屏蔽中断,具有 16 级可编程的中断优先级。我们常用的就是这 68 个可屏蔽中断,但是 STM32 的 68 个可屏蔽中断,在 STM32F103 系列上面,只有 60 个。

中断管理
首先,对stm32中断进行分组,同时对每个中断设置一个抢占优先级和一个响应优先级。
抢占优先级和响应优先级的区别:
1、高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的;
2、抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断;
3、抢占优先级相同,两个中断同时发生,哪个响应优先级高,哪个先执行;
4、两个中断的抢占优先级和响应优先级都一样,则看哪个中断先发生就先执行。

中断设置流程
(1)系统运行后先设置中断优先级分组。 整个系统执行过程中,只设置一次中断分组。
(2)针对每个中断,设置对应的抢占优先级和响应优先级:
(3)如果需要挂起/解挂,查看中断当前激活状态,分别调用相关函数即可。

中断设置的相关问题

1、为什么要设置中断优先级?

答:中断,在STM32中也称之为异常,就是说程序必须中断正常的执行流程,处理各种临时发生的异常情况。同时发生几种不同的异常情况时,先去响应哪个? 需要设置优先级。当正在处理异常时,又发生了情况更紧急的异常时,需要设置优先级,使更高级的中断可以打断正在执行的低优先级服务。种种需求,必须把各个中断分出三六九等,这就是中断优先级。每一个中断都有自己的优先级设定,这个相当于它在整个中断系统中的身份证,服务卡。

2、优先级分组是什么意思?

答:所谓分组就是一个规定:如何去解释这身份证号码的含义,比如哪几位表示地区,哪几位表示生日。每一个中断的优先级就是它在中断系统中的身份证,这个身份证有8位,要分成两段,一段用来表示自己的阶层,一段用来表示自己在同一阶层中的小级别。用STM32的说法,分别叫做抢占优先级和响应优先级,当你申请中断时,系统要查验你的身份证,看人下菜碟,抢占优先级高的,顾名思义可以有权打断正在享受服务的抢占优先级低的中断,抢占优先级一样的,才去看响应优先级,虽然不能强行打断,但大家都在排队等待服务时,可以插队,即优先得到响应。这个所谓的“优先级分组”就是明确规定这8位中,用哪几位表示抢占,哪几位表示响应。

3、 每个中断都有优先级设置, 它是什么样的? 存放在什么地方?

答:每个中断都有优先级设置,除了系统内核的中断外,STM32还可以有多达240个外部中断。这240个外部中断,都可以由用户自由设置优先级,由8位即一个字节来表示。由系统内核中的240个寄存器来存放,每个寄存器宽度为8比特。
NVIC->IP[240]可以理解是一个以中断通道号为下标索引的240个元素的u8寄存器数组。
由于用户的需求不同,ARM可以允许具体的芯片对中断级数进行简化,只实现这8位中的高几位。比如:我们常用的STM32芯片,就只实现了一半,即高4位。
所以,在我们常用的STM32芯片中,这240个宽度为一个字节的寄存器都只有高4位有效。

参考:http://www.openedv.com/forum.php?mod=viewthread&tid=275496&highlight=�ж����ȼ�����

你可能感兴趣的:(STM32)