diff --git a/Core/Include/Reg/SHAL_TIM_CALLBACK.h b/Core/Include/Reg/SHAL_TIM_CALLBACK.h new file mode 100644 index 0000000..4f8943d --- /dev/null +++ b/Core/Include/Reg/SHAL_TIM_CALLBACK.h @@ -0,0 +1,26 @@ +// +// Created by Luca on 8/28/2025. +// + +#ifndef SHMINGO_HAL_SHAL_TIMER_CALLBACK_H +#define SHMINGO_HAL_SHAL_TIMER_CALLBACK_H + +#include "SHAL_TIM_REG.h" + +#define DEFINE_TIMER_IRQ(key, irq_handler) \ +extern "C" void irq_handler(void) { \ + auto tim_reg = getTimerRegister(key) \ + if (tim_reg->SR & TIM_SR_UIF) { \ + tim_reg->SR &= ~TIM_SR_UIF; /* clear flag */ \ + auto cb = timer_callbacks[static_cast(key)]; \ + if (cb) cb(); \ + } \ +} + +typedef void (*TimerCallback)(); //Typedef for callback function + +static TimerCallback timer_callbacks[static_cast(Timer_Key::NUM_TIMERS)] = {nullptr}; //Timer IRQ Callback table + +void registerTimerCallback(Timer_Key key, TimerCallback callback); + +#endif //SHMINGO_HAL_SHAL_TIMER_CALLBACK_H diff --git a/Core/Src/Reg/SHAL_TIM_CALLBACK.cpp b/Core/Src/Reg/SHAL_TIM_CALLBACK.cpp new file mode 100644 index 0000000..8e6ce11 --- /dev/null +++ b/Core/Src/Reg/SHAL_TIM_CALLBACK.cpp @@ -0,0 +1,9 @@ +// +// Created by Luca on 8/28/2025. +// + +#include "SHAL_TIMER_CALLBACK.h" + +void registerTimerCallback(Timer_Key key, TimerCallback callback){ + timer_callbacks[static_cast(key)] = callback; +} \ No newline at end of file