Skip to content

Commit 642d7af

Browse files
committed
Added a way to set the interrupt priority using klib
1 parent a686433 commit 642d7af

File tree

14 files changed

+448
-0
lines changed

14 files changed

+448
-0
lines changed

targets/chip/atsam3x8e/atsam3x8e.hpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,38 @@ namespace klib::atsam3x8e {
6161
static void disable_irq() {
6262
__disable_irq();
6363
}
64+
65+
/**
66+
* @brief Set the priority of a interrupt
67+
*
68+
* @tparam Irq
69+
*/
70+
template <irq::arm_vector Irq, uint8_t Priority>
71+
static void interrupt_priority() {
72+
static_assert(static_cast<uint32_t>(Irq) >= static_cast<uint32_t>(irq::arm_vector::count), "Invalid IRQ given to set priority");
73+
static_assert(Priority < (1U << __NVIC_PRIO_BITS), "Invalid priority given to set priority");
74+
75+
// set the priority
76+
NVIC_SetPriority(
77+
static_cast<IRQn_Type>(
78+
static_cast<uint32_t>(Irq) - static_cast<uint32_t>(irq::arm_vector::count)),
79+
Priority
80+
);
81+
}
82+
83+
/**
84+
* @brief Set the priority of a interrupt
85+
*
86+
* @tparam Irq
87+
*/
88+
template <uint32_t Irq, uint8_t Priority>
89+
static void interrupt_priority() {
90+
static_assert(Irq >= static_cast<uint32_t>(irq::arm_vector::count), "Invalid IRQ given to set priority");
91+
static_assert(Priority < (1U << __NVIC_PRIO_BITS), "Invalid priority given to set priority");
92+
93+
// set the priority
94+
NVIC_SetPriority(static_cast<IRQn_Type>(Irq - static_cast<uint32_t>(irq::arm_vector::count)), Priority);
95+
}
6496
}
6597

6698
#endif

targets/chip/atsam4s2b/atsam4s2b.hpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,38 @@ namespace klib::atsam4s2b {
6161
static void disable_irq() {
6262
__disable_irq();
6363
}
64+
65+
/**
66+
* @brief Set the priority of a interrupt
67+
*
68+
* @tparam Irq
69+
*/
70+
template <irq::arm_vector Irq, uint8_t Priority>
71+
static void interrupt_priority() {
72+
static_assert(static_cast<uint32_t>(Irq) >= static_cast<uint32_t>(irq::arm_vector::count), "Invalid IRQ given to set priority");
73+
static_assert(Priority < (1U << __NVIC_PRIO_BITS), "Invalid priority given to set priority");
74+
75+
// set the priority
76+
NVIC_SetPriority(
77+
static_cast<IRQn_Type>(
78+
static_cast<uint32_t>(Irq) - static_cast<uint32_t>(irq::arm_vector::count)),
79+
Priority
80+
);
81+
}
82+
83+
/**
84+
* @brief Set the priority of a interrupt
85+
*
86+
* @tparam Irq
87+
*/
88+
template <uint32_t Irq, uint8_t Priority>
89+
static void interrupt_priority() {
90+
static_assert(Irq >= static_cast<uint32_t>(irq::arm_vector::count), "Invalid IRQ given to set priority");
91+
static_assert(Priority < (1U << __NVIC_PRIO_BITS), "Invalid priority given to set priority");
92+
93+
// set the priority
94+
NVIC_SetPriority(static_cast<IRQn_Type>(Irq - static_cast<uint32_t>(irq::arm_vector::count)), Priority);
95+
}
6496
}
6597

6698
#endif

targets/chip/lpc1752/lpc1752.hpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,38 @@ namespace klib::lpc1752 {
6161
static void disable_irq() {
6262
__disable_irq();
6363
}
64+
65+
/**
66+
* @brief Set the priority of a interrupt
67+
*
68+
* @tparam Irq
69+
*/
70+
template <irq::arm_vector Irq, uint8_t Priority>
71+
static void interrupt_priority() {
72+
static_assert(static_cast<uint32_t>(Irq) >= static_cast<uint32_t>(irq::arm_vector::count), "Invalid IRQ given to set priority");
73+
static_assert(Priority < (1U << __NVIC_PRIO_BITS), "Invalid priority given to set priority");
74+
75+
// set the priority
76+
NVIC_SetPriority(
77+
static_cast<IRQn_Type>(
78+
static_cast<uint32_t>(Irq) - static_cast<uint32_t>(irq::arm_vector::count)),
79+
Priority
80+
);
81+
}
82+
83+
/**
84+
* @brief Set the priority of a interrupt
85+
*
86+
* @tparam Irq
87+
*/
88+
template <uint32_t Irq, uint8_t Priority>
89+
static void interrupt_priority() {
90+
static_assert(Irq >= static_cast<uint32_t>(irq::arm_vector::count), "Invalid IRQ given to set priority");
91+
static_assert(Priority < (1U << __NVIC_PRIO_BITS), "Invalid priority given to set priority");
92+
93+
// set the priority
94+
NVIC_SetPriority(static_cast<IRQn_Type>(Irq - static_cast<uint32_t>(irq::arm_vector::count)), Priority);
95+
}
6496
}
6597

6698
#endif

targets/chip/lpc1754/lpc1754.hpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,38 @@ namespace klib::lpc1754 {
6161
static void disable_irq() {
6262
__disable_irq();
6363
}
64+
65+
/**
66+
* @brief Set the priority of a interrupt
67+
*
68+
* @tparam Irq
69+
*/
70+
template <irq::arm_vector Irq, uint8_t Priority>
71+
static void interrupt_priority() {
72+
static_assert(static_cast<uint32_t>(Irq) >= static_cast<uint32_t>(irq::arm_vector::count), "Invalid IRQ given to set priority");
73+
static_assert(Priority < (1U << __NVIC_PRIO_BITS), "Invalid priority given to set priority");
74+
75+
// set the priority
76+
NVIC_SetPriority(
77+
static_cast<IRQn_Type>(
78+
static_cast<uint32_t>(Irq) - static_cast<uint32_t>(irq::arm_vector::count)),
79+
Priority
80+
);
81+
}
82+
83+
/**
84+
* @brief Set the priority of a interrupt
85+
*
86+
* @tparam Irq
87+
*/
88+
template <uint32_t Irq, uint8_t Priority>
89+
static void interrupt_priority() {
90+
static_assert(Irq >= static_cast<uint32_t>(irq::arm_vector::count), "Invalid IRQ given to set priority");
91+
static_assert(Priority < (1U << __NVIC_PRIO_BITS), "Invalid priority given to set priority");
92+
93+
// set the priority
94+
NVIC_SetPriority(static_cast<IRQn_Type>(Irq - static_cast<uint32_t>(irq::arm_vector::count)), Priority);
95+
}
6496
}
6597

6698
#endif

targets/chip/lpc1756/lpc1756.hpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,38 @@ namespace klib::lpc1756 {
6161
static void disable_irq() {
6262
__disable_irq();
6363
}
64+
65+
/**
66+
* @brief Set the priority of a interrupt
67+
*
68+
* @tparam Irq
69+
*/
70+
template <irq::arm_vector Irq, uint8_t Priority>
71+
static void interrupt_priority() {
72+
static_assert(static_cast<uint32_t>(Irq) >= static_cast<uint32_t>(irq::arm_vector::count), "Invalid IRQ given to set priority");
73+
static_assert(Priority < (1U << __NVIC_PRIO_BITS), "Invalid priority given to set priority");
74+
75+
// set the priority
76+
NVIC_SetPriority(
77+
static_cast<IRQn_Type>(
78+
static_cast<uint32_t>(Irq) - static_cast<uint32_t>(irq::arm_vector::count)),
79+
Priority
80+
);
81+
}
82+
83+
/**
84+
* @brief Set the priority of a interrupt
85+
*
86+
* @tparam Irq
87+
*/
88+
template <uint32_t Irq, uint8_t Priority>
89+
static void interrupt_priority() {
90+
static_assert(Irq >= static_cast<uint32_t>(irq::arm_vector::count), "Invalid IRQ given to set priority");
91+
static_assert(Priority < (1U << __NVIC_PRIO_BITS), "Invalid priority given to set priority");
92+
93+
// set the priority
94+
NVIC_SetPriority(static_cast<IRQn_Type>(Irq - static_cast<uint32_t>(irq::arm_vector::count)), Priority);
95+
}
6496
}
6597

6698
#endif

targets/chip/lpc1759/lpc1759.hpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,38 @@ namespace klib::lpc1759 {
6161
static void disable_irq() {
6262
__disable_irq();
6363
}
64+
65+
/**
66+
* @brief Set the priority of a interrupt
67+
*
68+
* @tparam Irq
69+
*/
70+
template <irq::arm_vector Irq, uint8_t Priority>
71+
static void interrupt_priority() {
72+
static_assert(static_cast<uint32_t>(Irq) >= static_cast<uint32_t>(irq::arm_vector::count), "Invalid IRQ given to set priority");
73+
static_assert(Priority < (1U << __NVIC_PRIO_BITS), "Invalid priority given to set priority");
74+
75+
// set the priority
76+
NVIC_SetPriority(
77+
static_cast<IRQn_Type>(
78+
static_cast<uint32_t>(Irq) - static_cast<uint32_t>(irq::arm_vector::count)),
79+
Priority
80+
);
81+
}
82+
83+
/**
84+
* @brief Set the priority of a interrupt
85+
*
86+
* @tparam Irq
87+
*/
88+
template <uint32_t Irq, uint8_t Priority>
89+
static void interrupt_priority() {
90+
static_assert(Irq >= static_cast<uint32_t>(irq::arm_vector::count), "Invalid IRQ given to set priority");
91+
static_assert(Priority < (1U << __NVIC_PRIO_BITS), "Invalid priority given to set priority");
92+
93+
// set the priority
94+
NVIC_SetPriority(static_cast<IRQn_Type>(Irq - static_cast<uint32_t>(irq::arm_vector::count)), Priority);
95+
}
6496
}
6597

6698
#endif

targets/chip/lpc1788/lpc1788.hpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,38 @@ namespace klib::lpc1788 {
6161
static void disable_irq() {
6262
__disable_irq();
6363
}
64+
65+
/**
66+
* @brief Set the priority of a interrupt
67+
*
68+
* @tparam Irq
69+
*/
70+
template <irq::arm_vector Irq, uint8_t Priority>
71+
static void interrupt_priority() {
72+
static_assert(static_cast<uint32_t>(Irq) >= static_cast<uint32_t>(irq::arm_vector::count), "Invalid IRQ given to set priority");
73+
static_assert(Priority < (1U << __NVIC_PRIO_BITS), "Invalid priority given to set priority");
74+
75+
// set the priority
76+
NVIC_SetPriority(
77+
static_cast<IRQn_Type>(
78+
static_cast<uint32_t>(Irq) - static_cast<uint32_t>(irq::arm_vector::count)),
79+
Priority
80+
);
81+
}
82+
83+
/**
84+
* @brief Set the priority of a interrupt
85+
*
86+
* @tparam Irq
87+
*/
88+
template <uint32_t Irq, uint8_t Priority>
89+
static void interrupt_priority() {
90+
static_assert(Irq >= static_cast<uint32_t>(irq::arm_vector::count), "Invalid IRQ given to set priority");
91+
static_assert(Priority < (1U << __NVIC_PRIO_BITS), "Invalid priority given to set priority");
92+
93+
// set the priority
94+
NVIC_SetPriority(static_cast<IRQn_Type>(Irq - static_cast<uint32_t>(irq::arm_vector::count)), Priority);
95+
}
6496
}
6597

6698
#endif

targets/chip/lpc55s66/lpc55s66.hpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,38 @@ namespace klib::lpc55s66 {
7070
static void disable_irq() {
7171
__disable_irq();
7272
}
73+
74+
/**
75+
* @brief Set the priority of a interrupt
76+
*
77+
* @tparam Irq
78+
*/
79+
template <irq::arm_vector Irq, uint8_t Priority>
80+
static void interrupt_priority() {
81+
static_assert(static_cast<uint32_t>(Irq) >= static_cast<uint32_t>(irq::arm_vector::count), "Invalid IRQ given to set priority");
82+
static_assert(Priority < (1U << __NVIC_PRIO_BITS), "Invalid priority given to set priority");
83+
84+
// set the priority
85+
NVIC_SetPriority(
86+
static_cast<IRQn_Type>(
87+
static_cast<uint32_t>(Irq) - static_cast<uint32_t>(irq::arm_vector::count)),
88+
Priority
89+
);
90+
}
91+
92+
/**
93+
* @brief Set the priority of a interrupt
94+
*
95+
* @tparam Irq
96+
*/
97+
template <uint32_t Irq, uint8_t Priority>
98+
static void interrupt_priority() {
99+
static_assert(Irq >= static_cast<uint32_t>(irq::arm_vector::count), "Invalid IRQ given to set priority");
100+
static_assert(Priority < (1U << __NVIC_PRIO_BITS), "Invalid priority given to set priority");
101+
102+
// set the priority
103+
NVIC_SetPriority(static_cast<IRQn_Type>(Irq - static_cast<uint32_t>(irq::arm_vector::count)), Priority);
104+
}
73105
}
74106

75107
#endif

targets/chip/lpc802/lpc802.hpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,38 @@ namespace klib::lpc802 {
6161
static void disable_irq() {
6262
__disable_irq();
6363
}
64+
65+
/**
66+
* @brief Set the priority of a interrupt
67+
*
68+
* @tparam Irq
69+
*/
70+
template <irq::arm_vector Irq, uint8_t Priority>
71+
static void interrupt_priority() {
72+
static_assert(static_cast<uint32_t>(Irq) >= static_cast<uint32_t>(irq::arm_vector::count), "Invalid IRQ given to set priority");
73+
static_assert(Priority < (1U << __NVIC_PRIO_BITS), "Invalid priority given to set priority");
74+
75+
// set the priority
76+
NVIC_SetPriority(
77+
static_cast<IRQn_Type>(
78+
static_cast<uint32_t>(Irq) - static_cast<uint32_t>(irq::arm_vector::count)),
79+
Priority
80+
);
81+
}
82+
83+
/**
84+
* @brief Set the priority of a interrupt
85+
*
86+
* @tparam Irq
87+
*/
88+
template <uint32_t Irq, uint8_t Priority>
89+
static void interrupt_priority() {
90+
static_assert(Irq >= static_cast<uint32_t>(irq::arm_vector::count), "Invalid IRQ given to set priority");
91+
static_assert(Priority < (1U << __NVIC_PRIO_BITS), "Invalid priority given to set priority");
92+
93+
// set the priority
94+
NVIC_SetPriority(static_cast<IRQn_Type>(Irq - static_cast<uint32_t>(irq::arm_vector::count)), Priority);
95+
}
6496
}
6597

6698
#endif

targets/chip/max32625/max32625.hpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,38 @@ namespace klib::max32625 {
6161
static void disable_irq() {
6262
__disable_irq();
6363
}
64+
65+
/**
66+
* @brief Set the priority of a interrupt
67+
*
68+
* @tparam Irq
69+
*/
70+
template <irq::arm_vector Irq, uint8_t Priority>
71+
static void interrupt_priority() {
72+
static_assert(static_cast<uint32_t>(Irq) >= static_cast<uint32_t>(irq::arm_vector::count), "Invalid IRQ given to set priority");
73+
static_assert(Priority < (1U << __NVIC_PRIO_BITS), "Invalid priority given to set priority");
74+
75+
// set the priority
76+
NVIC_SetPriority(
77+
static_cast<IRQn_Type>(
78+
static_cast<uint32_t>(Irq) - static_cast<uint32_t>(irq::arm_vector::count)),
79+
Priority
80+
);
81+
}
82+
83+
/**
84+
* @brief Set the priority of a interrupt
85+
*
86+
* @tparam Irq
87+
*/
88+
template <uint32_t Irq, uint8_t Priority>
89+
static void interrupt_priority() {
90+
static_assert(Irq >= static_cast<uint32_t>(irq::arm_vector::count), "Invalid IRQ given to set priority");
91+
static_assert(Priority < (1U << __NVIC_PRIO_BITS), "Invalid priority given to set priority");
92+
93+
// set the priority
94+
NVIC_SetPriority(static_cast<IRQn_Type>(Irq - static_cast<uint32_t>(irq::arm_vector::count)), Priority);
95+
}
6496
}
6597

6698
#endif

0 commit comments

Comments
 (0)