@@ -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