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