Sound Byte Libs 1ee2ca6
C++ firmware library for audio applications on 32-bit ARM Cortex-M processors
Loading...
Searching...
No Matches
control.hpp
Go to the documentation of this file.
1/**
2 * @file control.hpp
3 * @brief ARM Cortex-M interrupt control primitives
4 * @ingroup hal
5 *
6 * Low-level hardware operations for ARM interrupt control using CMSIS intrinsics.
7 * Provides minimal hardware primitives without RAII - use patterns layer for convenience.
8 */
9
10#ifndef SBL_HAL_INTERRUPTS_CONTROL_HPP_
11#define SBL_HAL_INTERRUPTS_CONTROL_HPP_
12
13#include <cstdint>
14
15// ARM CMSIS intrinsics - platform provides implementation
16#ifndef __get_PRIMASK
17#define __get_PRIMASK() (0) // Fallback for non-ARM builds
18#endif
19
20#ifndef __disable_irq
21#define __disable_irq() do {} while(0) // Fallback for non-ARM builds
22#endif
23
24#ifndef __set_PRIMASK
25#define __set_PRIMASK(x) do { (void)(x); } while(0) // Fallback for non-ARM builds
26#endif
27
28namespace sbl {
29namespace core {
30namespace hal {
31namespace interrupts {
32
33/**
34 * @brief Disable ARM interrupts and return previous state
35 *
36 * Disables all interrupts (except NMI/Hard Fault) using ARM PRIMASK register.
37 * Returns previous PRIMASK state for later restoration.
38 *
39 * @return Previous PRIMASK register value
40 */
41inline uint32_t disable_and_save() {
42 uint32_t saved_primask = __get_PRIMASK();
44 return saved_primask;
45}
46
47/**
48 * @brief Restore ARM interrupt state
49 *
50 * Restores PRIMASK register to specified state.
51 * Typically used with value returned from disable_and_save().
52 *
53 * @param saved_state Previous PRIMASK value to restore
54 */
55inline void restore(uint32_t saved_state) {
56 __set_PRIMASK(saved_state);
57}
58
59/**
60 * @brief Get current ARM interrupt state
61 *
62 * @return Current PRIMASK register value (0 = enabled, 1 = disabled)
63 */
64inline uint32_t get_state() {
65 return __get_PRIMASK();
66}
67
68/**
69 * @brief Check if ARM interrupts are enabled
70 *
71 * @return true if interrupts enabled, false if disabled
72 */
73inline bool are_enabled() {
74 return __get_PRIMASK() == 0;
75}
76
77} // namespace interrupts
78} // namespace hal
79} // namespace core
80} // namespace sbl
81
82#endif // SBL_HAL_INTERRUPTS_CONTROL_HPP_
#define __get_PRIMASK()
Definition control.hpp:17
#define __set_PRIMASK(x)
Definition control.hpp:25
#define __disable_irq()
Definition control.hpp:21
bool are_enabled()
Check if ARM interrupts are enabled.
Definition control.hpp:73
void restore(uint32_t saved_state)
Restore ARM interrupt state.
Definition control.hpp:55
uint32_t get_state()
Get current ARM interrupt state.
Definition control.hpp:64
uint32_t disable_and_save()
Disable ARM interrupts and return previous state.
Definition control.hpp:41
Root namespace for all Sound Byte Libs functionality.
Definition aliases.hpp:24