这段代码是用于配置嵌套向量中断控制器(Nested Vectored Interrupt Controller,NVIC)的优先级分组。NVIC是微控制器中的一个组件,用于管理中断。在ARM Cortex-M系列微控制器中,这种配置是非常常见的。
每一行定义了一个`NVIC_PriorityGroup`,它决定了中断优先级的分配方式。具体来说:
- `NVIC_PriorityGroup_0`:预留0位用于抢占优先级(pre-emption priority),4位用于子优先级(subpriority)。这意味着所有的中断都有相同的抢占优先级,中断响应完全由子优先级决定。
- `NVIC_PriorityGroup_1`:1位用于抢占优先级,3位用于子优先级。这意味着中断可以有不同的抢占优先级,抢占优先级更高的中断可以打断抢占优先级较低的中断服务。
- `NVIC_PriorityGroup_2`:2位用于抢占优先级,2位用于子优先级。抢占优先级和子优先级的位数平衡,提供了更多的优先级级别。
- `NVIC_PriorityGroup_3`:3位用于抢占优先级,1位用于子优先级。这提供了更多的抢占优先级级别,但子优先级级别较少。
- `NVIC_PriorityGroup_4`:4位用于抢占优先级,0位用于子优先级。这意味着所有的中断都只由抢占优先级决定,没有子优先级的区分。
在设置NVIC的优先级时,这些宏定义被用来指定优先级分组的配置。抢占优先级允许一个正在处理的中断被另一个更高优先级的中断打断,而子优先级则用于在相同抢占优先级的中断之间进一步区分优先级。
例如,如果设置为`NVIC_PriorityGroup_2`,那么可以有以下优先级配置:
- 抢占优先级:00(最低),01,10,11(最高)
- 子优先级:00(最低),01,10,11(最高)
这意味着有4个不同的抢占优先级和4个不同的子优先级,总共可以配置16个不同的中断优先级。