前言
- RTOS 移植到ARM平台上时,使用了较多的ARM汇编指令,需要修改 CPU 寄存器 BASEPRI
BASEPRI 是什么
- 基础优先级屏蔽寄存器,设置为 0x00时,不屏蔽 任何异常

- 这里使用 ARM Cortext-M3 系列的MCU,查看Cortext-M3的手册

- 发现 BASEPRI 是一个独立的【CPU寄存器】,不同于【通用寄存器 R0 ~ R15】
操作方法
- 需要了解 ARM CPU的寻址方式,如 设置 BASEPRI 寄存器为 0的方法
MOV32 R2, #0 ; Restore BASEPRI priority level to 0
CPSID I ; 禁用IRQ 中断响应,因为这里改的是CPU 异常屏蔽的寄存器
MSR BASEPRI, R2 ; R2 其实为0,这里不能直接 #0 ,需要先放在通用寄存器中
DSB
ISB
CPSIE I ; 使能 IRQ 中断响应
小结
- 修改或设置 BASEPRI,需要寄存器寻址的方式,也就是不能使用立即数,需要把修改的值先放在一个通用寄存器中。调用 MSR指令去修改
- 在设置CPU 的【中断屏蔽】【异常屏蔽】时,可以先关闭中断,防止【高优先级】的异常或中断的【打断】