如何查询网站的外链,设计需要了解的网站,wordpress首页添加登陆,如何做私人网页什么是中断#xff1f; 让CPU打断正常运行的程序#xff0c;转而去处理紧急的事件#xff08;程序#xff09;#xff0c;就叫中断 中断执行机制#xff0c;可简单概括为三步#xff1a;
1#xff0c;中断请求 外设产生中断请求#xff08;GPIO外部中断、定时器中断…什么是中断 让CPU打断正常运行的程序转而去处理紧急的事件程序就叫中断 中断执行机制可简单概括为三步
1中断请求 外设产生中断请求GPIO外部中断、定时器中断等
2响应中断 CPU停止执行当前程序转而去执行中断处理程序ISR
3退出中断 执行完毕返回被打断的程序处继续往下执行 STM32中断是怎么进入到中断服务程序的
1.中断请求当外部事件如外部中断定时器溢出等或者内部事件如ADC转换完成、串口接收完成等发生时相应的中断源会向NVIC嵌套向量中断控制器发生一个中断请求。
2.中断优先级判断NVIC会根据中断的优先级来判断是否应该处理该中断。如果当前活动的中断优先级低于新请求的中断则进行中断嵌套处理更高优先级的中断。
3.保存上下文当CPU接收中断并准备跳转到中断程序时它会自动将当前的程序状态保存到栈中。这是为了在处理完中断后能够恢复中断前的状态继续执行。
4.跳转到中断向量CPU通过查找中断向量表来确定中断的服务程序入口地址。STM32的中断向量表位于FLASH的开始部分每个中断都有一个固定的向量地址。
5.执行中断服务程序一旦确定了入口地址CPU就会跳转到该地址并开始执行中断服务程序。在中断服务程序中通常需要先清除中断标志然后执行响应的处理代码。
6.恢复上下文中断服务程序执行完成后CPU会从栈中恢复之前保存的程序状态。
7.返回主程序恢复上下文后程序会从原来被中断的地方继续执行。 中断优先级分组设置 ARM Cortex-M 使用了 8 位宽的寄存器来配置中断的优先等级这个寄存器就是中断优先级配置寄存器。也就是有256个优先级 但STM32只用了中断优先级配置寄存器的高4位 [7 : 4]所以STM32提供了最大16级的中断优先等级 STM32 的中断优先级可以分为抢占优先级和子优先级
抢占优先级 抢占优先级高的中断可以打断正在执行但抢占优先级低的中断
子优先级当同时发生具有相同抢占优先级的两个中断时子优先级数值小的优先执行
注意中断优先级数值越小越优先 一共有 5 种分配方式对应着中断优先级分组的 5 个组 通过调用函数HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4即可完成设置
在HAL_Init中设置
FreeRTOS官网关于中断说明https://www.freertos.org/RTOS-Cortex-M3-M4.html 特点
1、低于configMAX_SYSCALL_INTERRUPT_PRIORITY优先级的中断里才允许调用FreeRTOS 的API函数
2、建议将所有优先级位指定为抢占优先级位方便FreeRTOS管理
调用函数HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4)
3、中断优先级数值越小越优先任务优先级数值越大越优先 中断相关寄存器
三个系统中断优先级配置寄存器分别为 SHPR1、 SHPR2、 SHPR3
SHPR1寄存器地址0xE000ED18
SHPR2寄存器地址0xE000ED1C
SHPR3寄存器地址0xE000ED20 表出自《Cortex M3权威指南(中文)》第286页 FreeRTOS如何配置PendSV和Systick中断优先级 中断相关寄存器 三个中断屏蔽寄存器分别为 PRIMASK、 FAULTMASK 和BASEPRI FreeRTOS所使用的中断管理就是利用的BASEPRI这个寄存器 BASEPRI屏蔽优先级低于某一个阈值的中断 比如 BASEPRI设置为0x50代表中断优先级在5~15内的均被屏蔽0~4的中断优先级正常执行0x50表示的是优先级小于等于5的中断被屏蔽至于为什么是0x50这个0是低四位在STM32中不用来设置中断优先级STM32只用高四位[7:4]来设置中断优先级 BASEPRI屏蔽优先级低于某一个阈值的中断当设置为0时则不关闭任何中断 关中断程序示例 中断优先级在5 ~ 15的全部被关闭 当BASEPRI设置为0x50时 在中断服务函数中调度FreeRTOS的API函数需注意 1、中断服务函数的优先级需在FreeRTOS所管理的范围内 2、在中断服务函数里边需调用FreeRTOS的API函数必须使用带“FromISR”后缀的函数 开中断程序示例 FreeRTOS中断管理就是利用BASEPRI寄存器实现的