Skip to content

Commit 3f028a8

Browse files
committed
Use generic constant for NVIC_PRIO_BITS.
1 parent 208b0c3 commit 3f028a8

File tree

1 file changed

+15
-16
lines changed

1 file changed

+15
-16
lines changed

src/peripheral/scb.rs

+15-16
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
@@ -170,12 +170,11 @@ impl PriorityGrouping {
170170
#[inline]
171171
pub const fn encode_priority(
172172
&self,
173-
nvic_prio_bits: u8,
174173
preemption_priority: u8,
175174
sub_priority: u8,
176175
) -> 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);
176+
let preemption_priority_bits = self.preemption_priority_bits();
177+
let sub_priority_bits = self.sub_priority_bits();
179178

180179
let premption_priority_mask = (1 << preemption_priority_bits) - 1;
181180
let sub_priority_mask = (1 << sub_priority_bits) - 1;
@@ -187,17 +186,17 @@ impl PriorityGrouping {
187186
| (sub_priority & sub_priority_mask);
188187

189188
// Priority is stored in the highest bits.
190-
priority << (8 - nvic_prio_bits)
189+
priority << (8 - NVIC_PRIO_BITS)
191190
}
192191

193192
/// Decode priority stored in `nvic_prio_bits` into a tuple consisting of
194193
/// the preemption priority and sub-priority.
195194
#[inline]
196-
pub const fn decode_priority(&self, nvic_prio_bits: u8, mut priority: u8) -> (u8, u8) {
195+
pub const fn decode_priority(&self, mut priority: u8) -> (u8, u8) {
197196
// Priority is stored in the highest bits.
198-
priority >>= 8 - nvic_prio_bits;
197+
priority >>= 8 - NVIC_PRIO_BITS;
199198

200-
let sub_priority_bits = self.sub_priority_bits(nvic_prio_bits);
199+
let sub_priority_bits = self.sub_priority_bits();
201200

202201
let preemption_priority = priority >> sub_priority_bits;
203202
let sub_priority = priority & ((1 << sub_priority_bits) - 1);
@@ -951,7 +950,7 @@ impl SCB {
951950

952951
/// Set the priority grouping.
953952
#[inline]
954-
pub fn set_priority_grouping(&mut self, grouping: PriorityGrouping) {
953+
pub fn set_priority_grouping<const NVIC_PRIO_BITS: u8>(&mut self, grouping: PriorityGrouping<NVIC_PRIO_BITS>) {
955954
unsafe {
956955
self.aircr.write({
957956
SCB_AIRCR_VECTKEY | // Unlock for writing.
@@ -962,7 +961,7 @@ impl SCB {
962961

963962
/// Get the priority grouping.
964963
#[inline]
965-
pub fn get_priority_grouping(&self) -> PriorityGrouping {
964+
pub fn get_priority_grouping<const NVIC_PRIO_BITS: u8>(&self) -> PriorityGrouping<NVIC_PRIO_BITS> {
966965
match self.aircr.read() & SCB_AIRCR_PRIGROUP_MASK >> SCB_AIRCR_PRIGROUP_POS {
967966
0 => PriorityGrouping::Prigroup0,
968967
1 => PriorityGrouping::Prigroup1,

0 commit comments

Comments
 (0)