@@ -134,47 +134,47 @@ extern "C" {
134
134
#endif
135
135
136
136
void 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
+ }
145
145
}
146
146
147
147
void 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
+ }
156
156
}
157
157
158
158
void 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
+ }
167
167
}
168
168
169
169
void 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
+ }
178
178
}
179
179
180
180
#ifdef __cplusplus
0 commit comments