SylixOS Lite版本中断优先级设置
2018-02-28 11:08
337 查看
非Lite版本中断关闭方式
SylixOS向用户提供arch层关中断的接口,其接口名称为archIntDisable(),调用该函数将禁用所有外设的中断。在ARM体系结构体中,对于ARM系列、Cortex-A系列的芯片,arch层接口archIntDisable()的实现方式如程序清单1.1所示。程序清单1.1 非Lite版本的arch层中断关闭方式FUNC_DEF(archIntDisable)
MRS R0 , CPSR
ORR R1 , R0, #0x80
MSR CPSR_c, R1
MRS R2 , CPSR
AND R2 , R2, #0x80
CMP R2 , #0x80
BNE archIntDisable
BX LR
FUNC_END()
上述代码由汇编语言实现,可以看出archIntDisable函数主要是将CPSR寄存器中的中断失能位置1,以达到屏蔽所有中断的作用。
Lite版本中断关闭方式
但在ARM Cortex-M、Cortex-A系列的芯片中,并不存在CPSR寄存器,它提供BASEPRI中断屏蔽寄存器,SylixOS采用中断优先级的方式屏蔽arch层中断,其archIntDisable接口的实现方式如程序清单2.1所示。程序清单2.1 Lite版本的arch层中断关闭方式FUNC_DEF(archIntDisable)MRS R0 , BASEPRI
MOV R1 , #LW_CFG_CORTEX_M_INT_MASK
MSR BASEPRI, R1
BX LR
FUNC_END()
Lite版本中arch层关中断的方式是根据中断优先级掩码进行屏蔽,其宏定义LW_CFG_CORTEX_M_INT_MASK即表示中断优先级掩码,SylixOS默认设置为2,即当调用archIntDisable函数时,中断优先级大于2的中断号将被屏蔽,中断优先级小于2的中断号将无法被屏蔽。
因此在Lite版本的BSP中,需要将各个外设器件的中断优先级设置为大于2,这样才能关闭所有中断,否则SylixOS可能在一些需要关闭中断的关键代码处由于关不住某一外设中断而导致错误。
设置外设中断优先级的接口定义如程序清单2.2所示,各个驱动外设可以根据实际情况进行设置。程序清单2.2 设置中断优先级函数#include <SylixOS.h>
ULONG API_InterVectorSetPriority (ULONG ulVector, UINT uiPrio);
相关文章推荐
- SylixOS Lite版本中断优先级设置
- SylixOS Lite版本中断优先级设置
- stm32 设置systick中断抢先式优先级
- 一起学CC3200系列教程之中断优先级设置
- PIT设置_中断优先级设置__MK20DX128VLH5_K20系列
- STM32中断—优先级设置
- stm32 设置systick中断抢先式优先级
- stm32 设置systick中断抢先式优先级
- STM32中断控制及优先级设置
- 对corte m3中断优先级设置的理解
- stm32 设置systick中断抢先式优先级
- STM32的中断优先级设置
- stm32(二) stm32中断优先级的设置
- M0+/M4中断优先级设置问题(Tips about the interrupt priority of M0+/M4)
- stm32学习——中断的优先级设置
- STM32F4设置NVIC中断优先级分组
- 第九章:STM32 对于NVIC中断优先级的设置
- stm32(二) stm32中断优先级的设置
- STM32中断中设置的先占式优先级与从优先级(转)
- SYD8801代码解析二【复位等特殊系统行为要等待硬件响应】【协议栈上报事件处理】【时钟源准确度的优化】【修改蓝牙名称】【设置中断优先级】