码迷,mamicode.com
首页 > 其他好文 > 详细

FreeRTO之Cortex-M中断管理

时间:2018-06-05 21:05:47      阅读:485      评论:0      收藏:0      [点我收藏+]

标签:大于   复位   中断寄存器   freertos   ase   sep   abr   个数   特权   

一,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中断管理

标签:大于   复位   中断寄存器   freertos   ase   sep   abr   个数   特权   

原文地址:https://www.cnblogs.com/stephen-mcu-tech/p/9135574.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!