5#if !defined(__riscv_zicsr) || !defined(__riscv_zifencei)
6#error "CH32 interrupt guards require the RISC-V Zicsr and Zifencei extensions"
11 LIBXR_CH32_INTERRUPT_ENABLE_MASK = 0x88U,
15static inline uint32_t libxr_ch32_interrupt_save_and_disable(
void)
17 uint32_t interrupt_state;
18 const uint32_t mask = LIBXR_CH32_INTERRUPT_ENABLE_MASK;
19 __asm
volatile(
"csrrc %0, 0x800, %1\n\tfence.i"
20 :
"=r"(interrupt_state)
23 return interrupt_state;
27static inline void libxr_ch32_interrupt_restore(uint32_t interrupt_state)
29 const uint32_t restore = interrupt_state & LIBXR_CH32_INTERRUPT_ENABLE_MASK;
32 __asm
volatile(
"csrs 0x800, %0" : :
"r"(restore) :
"memory");