cortex_m/
critical_section.rs
1#[cfg(all(cortex_m, feature = "critical-section-single-core"))]
2mod single_core_critical_section {
3 use critical_section::{set_impl, Impl, RawRestoreState};
4
5 use crate::interrupt;
6 use crate::register::primask;
7
8 struct SingleCoreCriticalSection;
9 set_impl!(SingleCoreCriticalSection);
10
11 unsafe impl Impl for SingleCoreCriticalSection {
12 unsafe fn acquire() -> RawRestoreState {
13 let was_active = primask::read().is_active();
14 interrupt::disable();
15 was_active
16 }
17
18 unsafe fn release(was_active: RawRestoreState) {
19 if was_active {
21 interrupt::enable()
22 }
23 }
24 }
25}