@@ -124,7 +124,7 @@ use self::fpu_consts::*;
124
124
/// Determines the split of preemption priority from sub-priority.
125
125
#[ derive( Debug , Clone , Copy ) ]
126
126
#[ repr( u8 ) ]
127
- pub enum PriorityGrouping {
127
+ pub enum PriorityGrouping < const NVIC_PRIO_BITS : u8 > {
128
128
/// Priority grouping 0
129
129
Prigroup0 = 0 ,
130
130
/// Priority grouping 1
@@ -143,21 +143,21 @@ pub enum PriorityGrouping {
143
143
Prigroup7 = 7 ,
144
144
}
145
145
146
- impl PriorityGrouping {
146
+ impl < const NVIC_PRIO_BITS : u8 > PriorityGrouping < NVIC_PRIO_BITS > {
147
147
#[ inline]
148
- const fn preemption_priority_bits ( & self , nvic_prio_bits : u8 ) -> u8 {
148
+ const fn preemption_priority_bits ( & self ) -> u8 {
149
149
let bits = 7 - * self as u8 ;
150
150
151
- if bits > nvic_prio_bits {
152
- nvic_prio_bits
151
+ if bits > NVIC_PRIO_BITS {
152
+ NVIC_PRIO_BITS
153
153
} else {
154
154
bits
155
155
}
156
156
}
157
157
158
158
#[ 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 ;
161
161
162
162
if bits <= 7 {
163
163
0
@@ -170,12 +170,11 @@ impl PriorityGrouping {
170
170
#[ inline]
171
171
pub const fn encode_priority (
172
172
& self ,
173
- nvic_prio_bits : u8 ,
174
173
preemption_priority : u8 ,
175
174
sub_priority : u8 ,
176
175
) -> 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 ( ) ;
179
178
180
179
let premption_priority_mask = ( 1 << preemption_priority_bits) - 1 ;
181
180
let sub_priority_mask = ( 1 << sub_priority_bits) - 1 ;
@@ -187,17 +186,17 @@ impl PriorityGrouping {
187
186
| ( sub_priority & sub_priority_mask) ;
188
187
189
188
// Priority is stored in the highest bits.
190
- priority << ( 8 - nvic_prio_bits )
189
+ priority << ( 8 - NVIC_PRIO_BITS )
191
190
}
192
191
193
192
/// Decode priority stored in `nvic_prio_bits` into a tuple consisting of
194
193
/// the preemption priority and sub-priority.
195
194
#[ 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 ) {
197
196
// Priority is stored in the highest bits.
198
- priority >>= 8 - nvic_prio_bits ;
197
+ priority >>= 8 - NVIC_PRIO_BITS ;
199
198
200
- let sub_priority_bits = self . sub_priority_bits ( nvic_prio_bits ) ;
199
+ let sub_priority_bits = self . sub_priority_bits ( ) ;
201
200
202
201
let preemption_priority = priority >> sub_priority_bits;
203
202
let sub_priority = priority & ( ( 1 << sub_priority_bits) - 1 ) ;
@@ -951,7 +950,7 @@ impl SCB {
951
950
952
951
/// Set the priority grouping.
953
952
#[ 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 > ) {
955
954
unsafe {
956
955
self . aircr . write ( {
957
956
SCB_AIRCR_VECTKEY | // Unlock for writing.
@@ -962,7 +961,7 @@ impl SCB {
962
961
963
962
/// Get the priority grouping.
964
963
#[ 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 > {
966
965
match self . aircr . read ( ) & SCB_AIRCR_PRIGROUP_MASK >> SCB_AIRCR_PRIGROUP_POS {
967
966
0 => PriorityGrouping :: Prigroup0 ,
968
967
1 => PriorityGrouping :: Prigroup1 ,
0 commit comments