1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#![cfg_attr(feature = "std", allow(unreachable_code, unused_mut))]
#[inline]
pub fn wait_for_int() {
#[cfg(feature = "std")]
return unimplemented!();
unsafe { asm!("wfi" :::: "volatile") };
}
#[inline]
pub fn wait_for_event() {
#[cfg(feature = "std")]
return unimplemented!();
unsafe { asm!("wfe" :::: "volatile") };
}
#[inline]
pub fn send_event() {
#[cfg(feature = "std")]
return unimplemented!();
unsafe { asm!("sev" :::: "volatile") };
}
#[allow(clippy::empty_loop)]
#[inline]
pub fn self_reset() -> ! {
#[cfg(feature = "std")]
return unimplemented!();
unsafe {
use crate::{map::reg::scb, reg::prelude::*};
use drone_core::token::Token;
asm!("
dmb
cpsid f
" :
:
:
: "volatile"
);
scb::Aircr::<Urt>::take().store(|r| r.write_vectkey(0x05FA).set_sysresetreq());
loop {}
}
}
#[allow(unused_assignments, unused_variables)]
#[inline(always)]
pub fn spin(mut cycles: u32) {
#[cfg(feature = "std")]
return unimplemented!();
unsafe {
asm!("
0:
subs $0, $0, #3
bhi 0b
" : "+r"(cycles)
:
: "cc"
: "volatile"
);
}
}