diff options
Diffstat (limited to 'FreeRTOS-Plus/Test/CMock/examples/temp_sensor/src/TimerInterruptConfigurator.c')
-rw-r--r-- | FreeRTOS-Plus/Test/CMock/examples/temp_sensor/src/TimerInterruptConfigurator.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/FreeRTOS-Plus/Test/CMock/examples/temp_sensor/src/TimerInterruptConfigurator.c b/FreeRTOS-Plus/Test/CMock/examples/temp_sensor/src/TimerInterruptConfigurator.c new file mode 100644 index 000000000..fe603ef32 --- /dev/null +++ b/FreeRTOS-Plus/Test/CMock/examples/temp_sensor/src/TimerInterruptConfigurator.c @@ -0,0 +1,55 @@ +#include "Types.h" +#include "TimerInterruptConfigurator.h" +#include "TimerInterruptHandler.h" + +static inline void SetInterruptHandler(void); +static inline void ConfigureInterruptSourceModeRegister(void); +static inline void ClearInterrupt(void); +static inline void EnableCompareInterruptForRegisterC(void); + +void Timer_DisableInterrupt(void) +{ + AT91C_BASE_AIC->AIC_IDCR = TIMER0_ID_MASK; +} + +void Timer_ResetSystemTime(void) +{ + Timer_SetSystemTime(0); +} + +void Timer_ConfigureInterrupt(void) +{ + SetInterruptHandler(); + ConfigureInterruptSourceModeRegister(); + ClearInterrupt(); + EnableCompareInterruptForRegisterC(); +} + +void Timer_EnableInterrupt(void) +{ + AT91C_BASE_AIC->AIC_IECR = TIMER0_ID_MASK; +} + +// +// Helpers +// + +static inline void SetInterruptHandler(void) +{ + AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC0] = (uint32)Timer_InterruptHandler; +} + +static inline void ConfigureInterruptSourceModeRegister(void) +{ + AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0] = 1; +} + +static inline void ClearInterrupt(void) +{ + AT91C_BASE_AIC->AIC_ICCR = TIMER0_ID_MASK; +} + +static inline void EnableCompareInterruptForRegisterC(void) +{ + AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS; +} |