Skip to content

Commit 4e0526f

Browse files
committed
Use generic constant for NVIC_PRIO_BITS.
1 parent 208b0c3 commit 4e0526f

File tree

1 file changed

+21
-21
lines changed

1 file changed

+21
-21
lines changed

Diff for: src/peripheral/scb.rs

+21-21
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ use self::fpu_consts::*;
124124
/// Determines the split of preemption priority from sub-priority.
125125
#[derive(Debug, Clone, Copy)]
126126
#[repr(u8)]
127-
pub enum PriorityGrouping {
127+
pub enum PriorityGrouping<const NVIC_PRIO_BITS: u8> {
128128
/// Priority grouping 0
129129
Prigroup0 = 0,
130130
/// Priority grouping 1
@@ -143,21 +143,21 @@ pub enum PriorityGrouping {
143143
Prigroup7 = 7,
144144
}
145145

146-
impl PriorityGrouping {
146+
impl<const NVIC_PRIO_BITS: u8> PriorityGrouping<NVIC_PRIO_BITS> {
147147
#[inline]
148-
const fn preemption_priority_bits(&self, nvic_prio_bits: u8) -> u8 {
148+
const fn preemption_priority_bits(&self) -> u8 {
149149
let bits = 7 - *self as u8;
150150

151-
if bits > nvic_prio_bits {
152-
nvic_prio_bits
151+
if bits > NVIC_PRIO_BITS {
152+
NVIC_PRIO_BITS
153153
} else {
154154
bits
155155
}
156156
}
157157

158158
#[inline]
159-
const fn sub_priority_bits(&self, nvic_prio_bits: u8) -> u8 {
160-
let bits = *self as u8 + nvic_prio_bits;
159+
const fn sub_priority_bits(&self) -> u8 {
160+
let bits = *self as u8 + NVIC_PRIO_BITS;
161161

162162
if bits <= 7 {
163163
0
@@ -168,14 +168,9 @@ impl PriorityGrouping {
168168

169169
/// Encode `preemption_priority` and `sub_priority` to fit in `nvic_prio_bits`.
170170
#[inline]
171-
pub const fn encode_priority(
172-
&self,
173-
nvic_prio_bits: u8,
174-
preemption_priority: u8,
175-
sub_priority: u8,
176-
) -> u8 {
177-
let preemption_priority_bits = self.preemption_priority_bits(nvic_prio_bits);
178-
let sub_priority_bits = self.sub_priority_bits(nvic_prio_bits);
171+
pub const fn encode_priority(&self, preemption_priority: u8, sub_priority: u8) -> u8 {
172+
let preemption_priority_bits = self.preemption_priority_bits();
173+
let sub_priority_bits = self.sub_priority_bits();
179174

180175
let premption_priority_mask = (1 << preemption_priority_bits) - 1;
181176
let sub_priority_mask = (1 << sub_priority_bits) - 1;
@@ -187,17 +182,17 @@ impl PriorityGrouping {
187182
| (sub_priority & sub_priority_mask);
188183

189184
// Priority is stored in the highest bits.
190-
priority << (8 - nvic_prio_bits)
185+
priority << (8 - NVIC_PRIO_BITS)
191186
}
192187

193188
/// Decode priority stored in `nvic_prio_bits` into a tuple consisting of
194189
/// the preemption priority and sub-priority.
195190
#[inline]
196-
pub const fn decode_priority(&self, nvic_prio_bits: u8, mut priority: u8) -> (u8, u8) {
191+
pub const fn decode_priority(&self, mut priority: u8) -> (u8, u8) {
197192
// Priority is stored in the highest bits.
198-
priority >>= 8 - nvic_prio_bits;
193+
priority >>= 8 - NVIC_PRIO_BITS;
199194

200-
let sub_priority_bits = self.sub_priority_bits(nvic_prio_bits);
195+
let sub_priority_bits = self.sub_priority_bits();
201196

202197
let preemption_priority = priority >> sub_priority_bits;
203198
let sub_priority = priority & ((1 << sub_priority_bits) - 1);
@@ -951,7 +946,10 @@ impl SCB {
951946

952947
/// Set the priority grouping.
953948
#[inline]
954-
pub fn set_priority_grouping(&mut self, grouping: PriorityGrouping) {
949+
pub fn set_priority_grouping<const NVIC_PRIO_BITS: u8>(
950+
&mut self,
951+
grouping: PriorityGrouping<NVIC_PRIO_BITS>,
952+
) {
955953
unsafe {
956954
self.aircr.write({
957955
SCB_AIRCR_VECTKEY | // Unlock for writing.
@@ -962,7 +960,9 @@ impl SCB {
962960

963961
/// Get the priority grouping.
964962
#[inline]
965-
pub fn get_priority_grouping(&self) -> PriorityGrouping {
963+
pub fn get_priority_grouping<const NVIC_PRIO_BITS: u8>(
964+
&self,
965+
) -> PriorityGrouping<NVIC_PRIO_BITS> {
966966
match self.aircr.read() & SCB_AIRCR_PRIGROUP_MASK >> SCB_AIRCR_PRIGROUP_POS {
967967
0 => PriorityGrouping::Prigroup0,
968968
1 => PriorityGrouping::Prigroup1,

0 commit comments

Comments
 (0)