diff --git a/cores/arduino/WInterrupts.c b/cores/arduino/WInterrupts.c index 25b45d794bdac0948d171b1527043ee613fc0a3c..4023395b830a965d65a28ac0d7a4918281281f11 100644 --- a/cores/arduino/WInterrupts.c +++ b/cores/arduino/WInterrupts.c @@ -176,9 +176,6 @@ void attachInterrupt( uint32_t ulPin, voidFuncPtr callback, uint32_t ulMode ) EIC->NMICTRL.reg= EIC_NMICTRL_NMISENSE_RISE ; break ; } - - // Enable the interrupt - EIC->INTENSET.reg = EIC_INTENSET_EXTINT( 1 << digitalPinToInterrupt( ulPin ) ) ; } } @@ -210,21 +207,8 @@ void EIC_Handler( void ) { uint32_t ul ; - // Test NMI first - if ( (EIC->NMIFLAG.reg & EIC_NMIFLAG_NMI) == EIC_NMIFLAG_NMI ) - { - // Call the callback function if assigned - if ( callbacksInt[EXTERNAL_INT_NMI]._callback != NULL ) - { - callbacksInt[EXTERNAL_INT_NMI]._callback() ; - } - - // Clear the interrupt - EIC->NMIFLAG.reg = EIC_NMIFLAG_NMI ; - } - // Test the 16 normal interrupts - for ( ul = EXTERNAL_INT_0 ; ul < EXTERNAL_INT_NMI ; ul++ ) + for ( ul = EXTERNAL_INT_0 ; ul <= EXTERNAL_INT_15 ; ul++ ) { if ( (EIC->INTFLAG.reg & ( 1 << ul ) ) != 0 ) { @@ -240,6 +224,21 @@ void EIC_Handler( void ) } } +/* + * External Non-Maskable Interrupt Controller NVIC Interrupt Handler + */ +void NMI_Handler( void ) +{ + // Call the callback function if assigned + if ( callbacksInt[EXTERNAL_INT_NMI]._callback != NULL ) + { + callbacksInt[EXTERNAL_INT_NMI]._callback() ; + } + + // Clear the interrupt + EIC->NMIFLAG.reg = EIC_NMIFLAG_NMI ; +} + #ifdef __cplusplus } #endif