/** ************************************************************************************************** * @file interrupt.h * @author Kerem Yollu & Edwin Koch * @date 30.10.2022 * @version 1.0 ************************************************************************************************** * @brief This is the genral interface for interrupts. * * **Detailed Description :** * This the spi interface and belongs to the interface layer. * ************************************************************************************************** */ #ifndef _INTERRUPT_H_ #define _INTERRUPT_H_ #ifdef __cplusplus extern "C" { #endif #include #include #include "hwd_interrupt.h" #define HANDLE_INT_FLAG(flagReg, flagMask, intType) \ if ((flagReg) & (flagMask)) { \ (flagReg) &= ~(flagMask); \ if(intHandlerArray[(intType)]){ \ intHandlerArray[(intType)](); \ } \ } /*! interrupt callback type for the handler */ typedef void (*intHandler_t)(void); extern volatile void (*intHandlerArray[intTypeEND])(); extern const uint8_t interruptTypeIndexList[intTypeEND]; /** * @brief Initialize Interrupt * * Initialize Interrupt by choosing the interrupt type, passing the functionpointer to the handler * and selecting the priority. * The interrupt will be automatically enabled and will be able to run after intEnableAll is * called. If the interrupt should only run at a specific even one can controll it by calling * intDissable prior to calling intEnableAll and calling intEnbale at a specific point and * dissabling it again with intDisable * When the desired interrupt occures the handler will be called. * The interrupt type and priority level is dependent on the architecture of the target MCU. * To find more information on what can be done one must read the documentation specific to the * target MCU. * * @param intType interrupt type * @param handler the interrupthandler * @param priority the interrupt priority */ void intInit( intrType_t intType, intHandler_t handler, uint8_t priority); /** * @brief Enable all Interrupts * * Enables all interrupts globally. * */ void intEnableGlobal(); /** * @brief Disable all Interrups * * Dissables all interrupts globally exept the non maskable ones given by the architecture of the * MCU. */ void intDisableGlobal(); /** * @brief Enable one interrupt type * * The Interrupt for the desired interrupt will be enabled. This means that interrupt of that * type will occure. To revert this intDisable musst be called. * It can be called when interrupts are are globally allowed or when disabled. * * @param intType interrupt type */ void intEnable( intrType_t intType); /** * @brief Dissable one interrupt type * * The Interrupt for the desired interrupt will be disabled. This means that no interrupt of that * type will occure. To revert this intEnable musst be called. * It can be called when interrupts are are globally allowed or when dissabled. * It will not stop other all interrupts in contrast to intDissableAll. * * @param intType interrupt type */ void intDisable( intrType_t intType); #ifdef __cplusplus } #endif #endif