STM32提供了中断管理的嵌套向量中断控制器(NVIC)
Cotex-M3和M4最多支持240+的IRQ,一个不可屏蔽中断(NMI),一个滴答定时器中断和多个系统异常。
CM3中,数字越小,优先级越高。三个系统的中断为负数,优先级最高。 支持3个固定的高优先级和多达256级的可编程优先级,支持128抢占。绝大多数芯片会精简设计,裁掉低端的有效位。如果使用三位表达优先级,低的5位会被裁掉,读值都是0.
7到3,对应0到4。STM32只用了高四位表示优先级。
裸机实现一般用的事组2优先级,即7,6表示抢占优先级,5,6表示子优先级
FreeRTOS推荐组4,也就是[7:4]都表示抢占优先级,即一共有16级优先级,0-15,越小优先级越高。
FreeRTOS中设置PendSV和Systick中断。
UCOS操作PRIMASK控制出NMI和硬件fault之外的中断。
FreeRTOS操作BASEPRI寄存器,控制的中断。屏蔽某一段阈值后的中断,如写入0x60,即屏蔽0x60到0xF0优先级的中断,运行0x00到0x50的中断
FreeRTOS管理5到15的中断,0到4优先级的任务不能使用os的API函数。
中断测试:
开中断:portENABLE_INTERRUPTS() // 开启5-15的中断
关中断:portDISBLE_INTERRUPTS() // 关闭5-15的中断