mirror of
https://github.com/arduino/Arduino.git
synced 2025-01-18 07:52:14 +01:00
PIO[ABCD] handlers improvement using ATSAM3X8E CLZ instruction
This commit is contained in:
parent
c1ce649554
commit
296c5f0fbf
@ -135,45 +135,45 @@ extern "C" {
|
||||
|
||||
void PIOA_Handler(void) {
|
||||
uint32_t isr = PIOA->PIO_ISR;
|
||||
uint32_t i;
|
||||
for (i=0; i<32; i++, isr>>=1) {
|
||||
if ((isr & 0x1) == 0)
|
||||
continue;
|
||||
if (callbacksPioA[i])
|
||||
callbacksPioA[i]();
|
||||
uint8_t leading_zeros;
|
||||
while((leading_zeros=__CLZ(isr))<32)
|
||||
{
|
||||
uint8_t pin=32-leading_zeros-1;
|
||||
if(callbacksPioA[pin]) callbacksPioA[pin]();
|
||||
isr=isr&(~(1<<pin));
|
||||
}
|
||||
}
|
||||
|
||||
void PIOB_Handler(void) {
|
||||
uint32_t isr = PIOB->PIO_ISR;
|
||||
uint32_t i;
|
||||
for (i=0; i<32; i++, isr>>=1) {
|
||||
if ((isr & 0x1) == 0)
|
||||
continue;
|
||||
if (callbacksPioB[i])
|
||||
callbacksPioB[i]();
|
||||
uint8_t leading_zeros;
|
||||
while((leading_zeros=__CLZ(isr))<32)
|
||||
{
|
||||
uint8_t pin=32-leading_zeros-1;
|
||||
if(callbacksPioB[pin]) callbacksPioB[pin]();
|
||||
isr=isr&(~(1<<pin));
|
||||
}
|
||||
}
|
||||
|
||||
void PIOC_Handler(void) {
|
||||
uint32_t isr = PIOC->PIO_ISR;
|
||||
uint32_t i;
|
||||
for (i=0; i<32; i++, isr>>=1) {
|
||||
if ((isr & 0x1) == 0)
|
||||
continue;
|
||||
if (callbacksPioC[i])
|
||||
callbacksPioC[i]();
|
||||
uint8_t leading_zeros;
|
||||
while((leading_zeros=__CLZ(isr))<32)
|
||||
{
|
||||
uint8_t pin=32-leading_zeros-1;
|
||||
if(callbacksPioC[pin]) callbacksPioC[pin]();
|
||||
isr=isr&(~(1<<pin));
|
||||
}
|
||||
}
|
||||
|
||||
void PIOD_Handler(void) {
|
||||
uint32_t isr = PIOD->PIO_ISR;
|
||||
uint32_t i;
|
||||
for (i=0; i<32; i++, isr>>=1) {
|
||||
if ((isr & 0x1) == 0)
|
||||
continue;
|
||||
if (callbacksPioD[i])
|
||||
callbacksPioD[i]();
|
||||
uint8_t leading_zeros;
|
||||
while((leading_zeros=__CLZ(isr))<32)
|
||||
{
|
||||
uint8_t pin=32-leading_zeros-1;
|
||||
if(callbacksPioD[pin]) callbacksPioD[pin]();
|
||||
isr=isr&(~(1<<pin));
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user