SEV WFE WFI YIELD NOP ISB DMB 周 期 1 4 4 — 1 2 2 1 1 4 Hint 4 Data synchronization DSB 4 ISO/IEC的C代码不能直接地获取一些Cortex-M0的指令。表7-23列举了CMSIS的C编译器中提供的部分内部函数用于产生这些指令。如果一个C编译器不支持恰当的内部函数,则需要用内嵌汇编来获取有关指令。表7-23 CMSIS内部函数
指 令 CPSIE i CPSID i ISB DSB DMB NOP CMSIS内部函数 void __enable_irq(void) void __disable_irq(void) void __ISB(void) void __DSB(void) void __DMB(void) void __NOP(void) EV REV16 REVSH SEV WFE WFI 指 令 RCMSIS内部函数 uint32_t __REV(uint32_t int value) uint32_t __REV16(uint32_t int value) uint32_t __REVSH(uint32_t int value) void __SEV(void) void __WFE(void) void __WFI(void) CMSIS也提供了几个函数用于获取特殊的寄存器,如表7-24所示。 表7-24 CMSIS提供的用于获取特殊寄存器的函数
特殊寄存器 PRIMASK CONTROL 获 取 方 式 读 写 读 写 读 MSP 写 读 PSP 写 CMSIS函数 uint32_t __get_PRIMASK(void) void __set_PRIMASK(void) Uint32_t __get_CONTROL(uint32_t value) Void __set_CONTROL(uint32_t value) Uint32_t __get_MSP(void) Void __set_MSP(uint32_t TopOfMainStack) Uint32_t __get_PSP(void) Void __set_PSP(uint32_t TopOfMainStack)