@@ -134,47 +134,47 @@ extern "C" {
134134#endif
135135
136136void PIOA_Handler (void ) {
137- uint32_t isr = PIOA -> PIO_ISR ;
138- uint32_t i ;
139- for ( i = 0 ; i < 32 ; i ++ , isr >>= 1 ) {
140- if (( isr & 0x1 ) == 0 )
141- continue ;
142- if (callbacksPioA [i ])
143- callbacksPioA [ i ]( );
144- }
137+ uint32_t isr = PIOA -> PIO_ISR ;
138+ uint8_t leading_zeros ;
139+ while (( leading_zeros = __CLZ ( isr )) < 32 )
140+ {
141+ uint8_t pin = 32 - leading_zeros - 1 ;
142+ if (callbacksPioA [pin ]) callbacksPioA [ pin ]();
143+ isr = isr & (~( 1 << pin ) );
144+ }
145145}
146146
147147void PIOB_Handler (void ) {
148- uint32_t isr = PIOB -> PIO_ISR ;
149- uint32_t i ;
150- for ( i = 0 ; i < 32 ; i ++ , isr >>= 1 ) {
151- if (( isr & 0x1 ) == 0 )
152- continue ;
153- if (callbacksPioB [i ])
154- callbacksPioB [ i ]( );
155- }
148+ uint32_t isr = PIOB -> PIO_ISR ;
149+ uint8_t leading_zeros ;
150+ while (( leading_zeros = __CLZ ( isr )) < 32 )
151+ {
152+ uint8_t pin = 32 - leading_zeros - 1 ;
153+ if (callbacksPioB [pin ]) callbacksPioB [ pin ]();
154+ isr = isr & (~( 1 << pin ) );
155+ }
156156}
157157
158158void PIOC_Handler (void ) {
159- uint32_t isr = PIOC -> PIO_ISR ;
160- uint32_t i ;
161- for ( i = 0 ; i < 32 ; i ++ , isr >>= 1 ) {
162- if (( isr & 0x1 ) == 0 )
163- continue ;
164- if (callbacksPioC [i ])
165- callbacksPioC [ i ]( );
166- }
159+ uint32_t isr = PIOC -> PIO_ISR ;
160+ uint8_t leading_zeros ;
161+ while (( leading_zeros = __CLZ ( isr )) < 32 )
162+ {
163+ uint8_t pin = 32 - leading_zeros - 1 ;
164+ if (callbacksPioC [pin ]) callbacksPioC [ pin ]();
165+ isr = isr & (~( 1 << pin ) );
166+ }
167167}
168168
169169void PIOD_Handler (void ) {
170- uint32_t isr = PIOD -> PIO_ISR ;
171- uint32_t i ;
172- for ( i = 0 ; i < 32 ; i ++ , isr >>= 1 ) {
173- if (( isr & 0x1 ) == 0 )
174- continue ;
175- if (callbacksPioD [i ])
176- callbacksPioD [ i ]( );
177- }
170+ uint32_t isr = PIOD -> PIO_ISR ;
171+ uint8_t leading_zeros ;
172+ while (( leading_zeros = __CLZ ( isr )) < 32 )
173+ {
174+ uint8_t pin = 32 - leading_zeros - 1 ;
175+ if (callbacksPioD [pin ]) callbacksPioD [ pin ]();
176+ isr = isr & (~( 1 << pin ) );
177+ }
178178}
179179
180180#ifdef __cplusplus
0 commit comments