tetl 0.1.0
Embedded Template Library
Loading...
Searching...
No Matches
interrupt.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSL-1.0
2
3#ifndef TETL_HARDWARE_STM32_INTERRUPT_HPP
4#define TETL_HARDWARE_STM32_INTERRUPT_HPP
5
6#include <etl/version.hpp>
7
8#include <etl/array.hpp>
9#include <etl/cstddef.hpp>
10
12// EXAMPLE
13// extern isr::vector_t callbacks;
14
15// static void dummy_handler() {
16// }
17
18// constexpr auto callbacks = isr::vector_t{
19// nullptr,
20// dummy_handler,
21// dummy_handler,
22// };
23
24// void NMI_Handler() { isr::call(callbacks, isr_ids::nmi); }
25// void HardFault_Handler() { isr::call(callbacks, isr_ids::hard_fault); }
26// void SysTick_Handler() { isr::call_checked(callbacks, isr_ids::sys_tick); }
27
28enum struct isr_ids : size_t {
33};
34
35struct isr {
36 using callback_t = void (*)();
38
39 static auto call(vector_t const& callbacks, isr_ids id) noexcept -> void { callbacks[static_cast<size_t>(id)](); }
40
41 static auto call_checked(vector_t const& callbacks, isr_ids id) noexcept -> void
42 {
43 if (callbacks[static_cast<size_t>(id)] != nullptr) {
44 callbacks[static_cast<size_t>(id)]();
45 }
46 }
47};
48} // namespace etl::experimental::hardware::stm32
49
50#endif // TETL_HARDWARE_STM32_INTERRUPT_HPP
isr_ids
Definition interrupt.hpp:28
@ max_id
Definition interrupt.hpp:32
@ hard_fault
Definition interrupt.hpp:30
@ sys_tick
Definition interrupt.hpp:31
@ nmi
Definition interrupt.hpp:29
array(T, U...) -> array< T, 1+sizeof...(U)>
One deduction guide is provided for array to provide an equivalent of experimental::make_array for co...
Definition interrupt.hpp:35
static auto call(vector_t const &callbacks, isr_ids id) noexcept -> void
Definition interrupt.hpp:39
void(*)() callback_t
Definition interrupt.hpp:36
etl::array< callback_t, static_cast< size_t >(isr_ids::max_id)> vector_t
Definition interrupt.hpp:37
static auto call_checked(vector_t const &callbacks, isr_ids id) noexcept -> void
Definition interrupt.hpp:41