diff --git a/cores/arduino/trap_handler.c b/cores/arduino/trap_handler.c index b491eae..39cfe95 100644 --- a/cores/arduino/trap_handler.c +++ b/cores/arduino/trap_handler.c @@ -1,5 +1,5 @@ -#include "mik32_hal_irq.h" -#include "wiring_LL.h" +#include "mik32_hal_irq.h" +#include "wiring_LL.h" // isr functions extern void serial_interrupt_handler(uint8_t uartNumInt); @@ -11,12 +11,34 @@ void __attribute__((weak)) wire_interrupt_handler(void) } void __attribute__((weak)) servo_interrupt_handler(void) { - // dummy function for case when wire library is not in use + // dummy function for case when servo library is not in use +} +void __attribute__((weak)) ISR(void) +{ + /* A dummy function for the case when additional interrupts are not used in the project. + In the project, you need to create a function of the form: + extern "C" void ISR(void) + { + // timer16 is taken as an example + if (TIM16_GET_ARRM_INT_STATUS(htimer16_1_)) + { + // necessary actions + } + // reset timer interrupt flags + TIM16_CLEAR_INT_MASK(htimer16_1_, 0xFFFFFFFF); + } + before that, be sure to connect the libraries: + #include "mik32_hal_timer16.h" + #include "mik32_hal_irq.h" + #include "wiring_LL.h" */ } // ---------------------------------------------- // -void __attribute__((noinline, section(".ram_text"), optimize("O3"))) trap_handler (void) +void __attribute__((noinline, section(".ram_text"), optimize("O3"))) trap_handler (void) { + // all interrupts + ISR(); + // gpio interrupt if (EPIC_CHECK_GPIO_IRQ()) gpio_interrupt_handler(); @@ -36,7 +58,7 @@ void __attribute__((noinline, section(".ram_text"), optimize("O3"))) trap_handle // uart1 interrupt if (EPIC_CHECK_UART_1()) serial_interrupt_handler(1); - + // i2c interrupt if (EPIC_CHECK_I2C_1()) wire_interrupt_handler();