一、中断介绍
我所使用的是的STM32F407内核是Cortex-M4内核,支持的中断有240个IRQ(中断请求)、1个是不可屏蔽的中断(NMI)、STM32F407内核是Cortex-M4处理器、1个是Systick(滴答定时器)定时器中断和多个系统异常。
1.中断优先级 中断是有优先级的,有优先级就会可能被打断,被打断就会出现中断嵌套的现象。中断优先级位数支持8位,但是芯片的生产厂家为了精简,不会全部实现,比如STM32一共4位,也就是有24=16级
2.优先级配置寄存器 优先级配置寄存器是8位宽,STM32把优先级分为高低两段:抢占优先级(分组优先级)和亚优先级(子优先级),所以怎么比较优先级呢,就是先比较分组优先级,如果分组优先级相同就比较亚优先级。 所以我们来看一下关于优先级分组,一共5组
((LP) == NVIC_LP_SLEEPONEXIT))
/**
* @}
*/
/** @defgroup MISC_Preemption_Priority_Group
* @{
*/
#define NVIC_PriorityGroup_0 ((uint32_t)0x700) /*!< 0 bits for pre-emption priority
4 bits for subpriority */
#define NVIC_PriorityGroup_1 ((uint32_t)0x600) /*!< 1 bits for pre-emption priority
3 bits for subpriority */
#define NVIC_PriorityGroup_2 ((uint32_t)0x500) /*!< 2 bits for pre-emption priority
2 bits for subpriority */
#define NVIC_PriorityGroup_3 ((uint32_t)0x400) /*!< 3 bits for pre-emption priority
1 bits for subpriority */
#define NVIC_PriorityGroup_4 ((uint32_t)0x300) /*!< 4 bits for pre-emption priority
0 bits for subpriority */
在使用FreeRTOS的时候,一般配置为NVIC_PriorityGroup_4,也就是4位抢占位,无亚优先级,之所以这么做是因为RTOS没有处理亚优先级
3.中断屏蔽寄存器 为什么需要终端屏蔽寄存器,当我们要执行一些不能被打断的,时序性很强的的操作的时候,就需要进行中断屏蔽寄存器,将中断进行屏蔽。 这三个寄存器是PRIMASK、FAULTMASK、BASEPRI
4.FreeRTOS的中断配置
#define configPRIO_BITS 4 //4位的优先级位
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15 //配置最低的优先级
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5 //可管理的最大优先级 ,高于5的优先级不归RTOS管理
#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?