FreeRtos里的几个中断屏蔽

1、primask 寄存器

PRIMASK用于禁止除NMI和HardFalut外的所有异常和中断,使用方法:

cpsid i	; //设置primask (禁止中断)
cpsie i ;  //清除primask  (使能中断)

也可以

movs r0,#1
msr primask r0;   //将 1写入primask禁止所有中断movs r0,#0
mar primask r0  //将0写入primask使能中断

2、faultmask寄存器

faultmask寄存器连HardFault都可以屏蔽掉,使用方法和primask类似:

cpsid f	; //设置faultmask (禁止中断)
cpsie f ;  //清除faultmask  (使能中断)

或者:

movs r0,#1
msr faultmask r0;   //将 1写入fault mask禁止所有中断movs r0,#0
mar faultmask r0  //将0写入faultmask使能中断

3、basepri寄存器

 basepri寄存器的做法更细腻,可以屏蔽优先级低于某个阈值的中断(中断优先级号越低代表的优先级越高),例如:要屏蔽优先级不高于0x60的中断:

mov r0,#0x60
msr basepri, r0

取消对中断的屏蔽,可以直接将basepri清零

mov r0,#0
mar basepri,r0

FreeRtos的开关中断就是通过basepri寄存器实现的

例如: portDISABLE_INTERRUPTS()

 在这个中断里面打了个断点,debug了一下,当前系统中configMAX_SYSCALL_INTERRUPT_PRIORITY是0x10

然后portENABLE_INTERRUPTS()开中断

debug了一下