每个中断的优先级都是用寄存器中的 8 位来设置的,而STM32F1xx 和 F4xx 使用了寄存器 8 位中的高四位[7:4],低四位取零,这样 2^4=16,能表示 16级中断嵌套。
抢占优先级和子优先级(响应优先级)
FreeRTOS的中断配置没有处理子优先级(亦称响应优先级)这种情况,所以只能配置为组4,直接就16个优先级,使用起来也简单!
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
补充:
FreeRTOS开关中断的函数为
portENABLE_INTERRUPTS()和portDISABLE_INTERRUPTS(),它们都是宏定义。
函数的定义位于portmacro.h中:
/* 关中断,将configMAX_SYSCALL_INTERRUPT_PRIORITY写入到BASEPRI寄存器,中断抢占优先级低于configMAX_SYSCALL_INTERRUPT_PRIORITY会屏蔽 */
#define portDISABLE_INTERRUPTS() vPortRaiseBASEPRI()
/* 开中断,将BASEPRI寄存器值设置为0,所有中断将得到响应 */
#define portENABLE_INTERRUPTS() vPortSetBASEPRI( 0 )