summaryrefslogtreecommitdiff
path: root/FreeRTOS-Plus/Test/CMock/examples/temp_sensor/src/TimerInterruptConfigurator.c
diff options
context:
space:
mode:
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.c55
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;
+}