FreeRTO之Cortex-M中断管理
Posted Stephen1120
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FreeRTO之Cortex-M中断管理相关的知识,希望对你有一定的参考价值。
一,Cortex-M内核的MCU都有NVIC
1,中断是由硬件产生的。
2,与中断有关的寄存器都在NVIC和SCB中。只能在特权级下访问。
3,Cortex-M3和M4的NVIC最多支持240个IRQ、1个NMI、一个SysTick定时器中断和多个系统异常。
4,在STM32F407的软件工程的启动文件中,有中断向量表。(可从其看出有多少个中断和中断类型)
5,在使用FreeRTOS,需要注意这两个中断类型的中断优先级:PendSV和SysTick
6,
二,NVIC
1,由STM32F407的库函数得知:NVIC的开始地址是:0xE000E000UL+0x0100UL=0xE000E100UL
2,NVIC的结构体:NVIC_Type
3,中断寄存器
ISER[8] 0xE000E100UL
ICER[8] 0xE000E100UL+0x080UL
ISPR[8] 0xE000E100UL+0x100UL
ICPR[8] 0xE000E100UL+0x180UL
IABR[8] 0xE000E100UL+0x200UL
IP[240] 0xE000E100UL+0x300UL
STIR 0xE000E100UL+0xE00UL
三,优先级
1,Cortex-M内核的MCU
2,PendSC中断优先级的地址为:0xE000ED22;SysTick中断优先级的地址为:0xE000ED23。
3,优先级的数值越小,则优先级越高。
4,3个系统异常:复位、NMI、硬件fault有固定的优先级,高于所有其它异常。
5,对Cortex-M内核的ST MCU来说,使用优先级配置寄存器的高四位来表达优先级,即使用16级优先级。
6,对STM32来说,有效的优先级组有5组: 分组3、分组4、分组5、分组6、分组7。(对应到STM32F407的库函数版本中,则依次为:系统中断优先级分组4 3 2 1 0)
7,使用FreeRTOS,推荐使用系统中断优先级分组4。即使用优先级配置寄存器的高四位来表达抢占优先级,共16级抢占级别。数值越小,优先级越高,方便使用。
8,为什么在设置寄存器的时候,使用了间隔的计算方法,而不是直接幅值?(角度:代码可读性)
四,AIRCR
五,SCB
六,在FreeRTOS中,经常使用BASEPRI来屏蔽中断
1,BASEPRI,只屏蔽优先级低于某一阀值的中断(优先级在数字上大于等于某个数)。
例如:MOV R0,#5
MSR BASEPRI,R0
表示:0-4优先级的中断不可被屏蔽,5-15优先级的中断被屏蔽
以上是关于FreeRTO之Cortex-M中断管理的主要内容,如果未能解决你的问题,请参考以下文章