static uint32_t irq_nesting;
__INLINE void enter_critical(void)
{
__disable_irq();
irq_nesting++;
__DSB();
__ISB();
}
__INLINE void exit_critical(void)
{
if (irq_nesting) {
irq_nesting--;
}
if (irq_nesting == 0) {
__enable_irq();
}
}
__STATIC_INLINE __ASM uint32_t interrupt_disable(void)
{
mrs r0, PRIMASK
cpsid i
bx lr
}
__STATIC_INLINE __ASM void interrupt_enable(uint32_t mask)
{
msr PRIMASK, r0
bx lr
}
文章评论(0条评论)
登录后参与讨论