@@ -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
@@ -168,14 +168,9 @@ impl PriorityGrouping {
168
168
169
169
/// Encode `preemption_priority` and `sub_priority` to fit in `nvic_prio_bits`.
170
170
#[ 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 ( ) ;
179
174
180
175
let premption_priority_mask = ( 1 << preemption_priority_bits) - 1 ;
181
176
let sub_priority_mask = ( 1 << sub_priority_bits) - 1 ;
@@ -187,17 +182,17 @@ impl PriorityGrouping {
187
182
| ( sub_priority & sub_priority_mask) ;
188
183
189
184
// Priority is stored in the highest bits.
190
- priority << ( 8 - nvic_prio_bits )
185
+ priority << ( 8 - NVIC_PRIO_BITS )
191
186
}
192
187
193
188
/// Decode priority stored in `nvic_prio_bits` into a tuple consisting of
194
189
/// the preemption priority and sub-priority.
195
190
#[ 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 ) {
197
192
// Priority is stored in the highest bits.
198
- priority >>= 8 - nvic_prio_bits ;
193
+ priority >>= 8 - NVIC_PRIO_BITS ;
199
194
200
- let sub_priority_bits = self . sub_priority_bits ( nvic_prio_bits ) ;
195
+ let sub_priority_bits = self . sub_priority_bits ( ) ;
201
196
202
197
let preemption_priority = priority >> sub_priority_bits;
203
198
let sub_priority = priority & ( ( 1 << sub_priority_bits) - 1 ) ;
@@ -951,7 +946,10 @@ impl SCB {
951
946
952
947
/// Set the priority grouping.
953
948
#[ 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
+ ) {
955
953
unsafe {
956
954
self . aircr . write ( {
957
955
SCB_AIRCR_VECTKEY | // Unlock for writing.
@@ -962,7 +960,9 @@ impl SCB {
962
960
963
961
/// Get the priority grouping.
964
962
#[ 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 > {
966
966
match self . aircr . read ( ) & SCB_AIRCR_PRIGROUP_MASK >> SCB_AIRCR_PRIGROUP_POS {
967
967
0 => PriorityGrouping :: Prigroup0 ,
968
968
1 => PriorityGrouping :: Prigroup1 ,
0 commit comments