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优先级的中断被屏蔽

猜你喜欢

转载自www.cnblogs.com/stephen-mcu-tech/p/9135574.html