21 #ifndef ARM_CORTEX_COMMON_NVIC_HPP_INCLUDED 22 #define ARM_CORTEX_COMMON_NVIC_HPP_INCLUDED 24 #include <arch/scb.hpp> 27 #include <type_traits> 36 static constexpr
int irqn = _irqn;
45 static_assert(irqn < 0 && irqn > -16,
"illegal core exception interrupt number");
50 static constexpr
bool priority_available =
irqn > -13;
52 static typename std::enable_if<priority_available>::type set_priority(uint32_t priority) {
53 scb::set_priority<irqn>(priority);
56 static typename std::enable_if<priority_available, uint32_t>::type get_priority(
void) {
57 return scb::set_priority<irqn>();
68 static_assert(
irqn >= 0,
"illegal irq channel interrupt number");
70 static constexpr
unsigned reg_index = (uint32_t)
irqn >> 5;
71 static constexpr
unsigned irq_bit = 1 << ((uint32_t)
irqn & 0x1F);
83 ISERx::store(irq_bit);
86 ICERx::store(irq_bit);
90 return ISPRx::load() & irq_bit;
93 ISPRx::store(irq_bit);
97 ICPRx::store(irq_bit);
100 return IABRx::load() & (irq_bit);
104 static void set_priority(uint32_t priority) {
105 IPRx::store((priority << (8 - priority_bits)) & 0xff);
108 static uint32_t get_priority(
void) {
109 return((uint32_t)(IPRx::load() >> (8 - priority_bits)));
135 return ((irqn == -3) ||
146 #endif // ARM_CORTEX_COMMON_NVIC_HPP_INCLUDED Interrupt Set-Pending Registers.
Definition: nvic.hpp:54
static void clear_pending(void)
Definition: nvic.hpp:96
static constexpr bool reserved_irqn(int irqn)
Definition: nvic.hpp:134
static void enable(void)
Definition: nvic.hpp:82
Interrupt Set-Enable Registers.
Definition: nvic.hpp:49
static void disable(void)
Definition: nvic.hpp:85
Interrupt Clear-Pending Registers.
Definition: nvic.hpp:59
static void set_pending(void)
Definition: nvic.hpp:92
static constexpr int irqn
Definition: nvic.hpp:36
static bool is_active(void)
Definition: nvic.hpp:99
Interrupt Active Bit Register.
Definition: nvic.hpp:64
static bool is_pending(void)
Definition: nvic.hpp:89
Interrupt Priority Register.
Definition: nvic.hpp:69
Interrupt Set-Enable Registers.
Definition: nvic.hpp:44