小言_互联网的博客

Cortex-M3中的NVIC概览

244人阅读  评论(0)

一、CM3及STM32中断介绍。

1.CM3内核支持256个中断,其中包含了16个内核中断和240和外部中断,并且具有256级可编程的中断设置。

2.STM32一共使用了84个中断,包含16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。

3.STM32F103系列上仅使用了60个可屏蔽中断,V3.5标准外设库中通过枚举类型IRQn将内核中断(中断号小于0)和可屏蔽中断(中断号大于定于0)包含起来。(如下图)

二、分组和优先级

1.CM3内核通过AIRCR寄存器的[10:8]来描述优先级分组,也即是CM3最多可以有8钟分组方式。但是STM32F1只采用了其中的5种分组方式(分组号为7、6、5、4、3),至于为什么分组号由7~3是因为:优先级分组寄存器是一个从 LSB 左边开始的值。

2.每个外部中断都有一个对应的优先级寄存器,每个寄存器占用 8 位,但是允许最少只使用最高 3 位。 4 个相临的优先级寄存器拼成一个 32 位寄存器。根据优先级组设置,优先级可以被分为高低两个位段,分别是抢占优先级和亚优先级。优先级寄存器都可以按字节访问,当然也可以按半字/字来访问。有意义的优先级寄存器数目由芯片厂商实现的中断数目决定。

3.如STM32F1系列则使用了AIR_CR[10:8]来作为分组标识(分别为0x300 、0x400 、0x500 、0x600 、0x700),IP[7:4]中的低8位中的4位用来设置抢占和响应优先级(且为高4位,LSB),所以通过分组标识的不同分别有如下几种组合方式。

4.将IP算出的优先级号写入到对应中断号对应的IP寄存器中即可完成对应中断优先级的设定。

5.通过32bit类型的ISER寄存器使能对应的中断号,即可完成对应中断的使能。(STM32F1系列只是用了60个可屏蔽中断,所以仅用2个ISER寄存器即可全部标识所有中断。)

6.同样通过32bit类型的ICER寄存器Q去使能对应的中断号,即可完成对应中断的去使能。

7.所有 NVIC 的中断控制/状态寄存器都只能在特权级下访问。


转载:https://blog.csdn.net/qq_23117727/article/details/101626250
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场