Change filename and macros from AT91SAM3.. to SAM3.. to conform to Atmel's official...
[bertos.git] / bertos / cpu / cortex-m3 / drv / timer_cm3.h
index b81df0bf7ec1e3d9d09e735fff677bf94ab3e1eb..0d45ad26453e3177424b9a8700d92749727354a0 100644 (file)
 #ifndef TIMER_CM3_H
 #define TIMER_CM3_H
 
+#include "cfg/cfg_timer.h"     /* CONFIG_TIMER */
+
+#include <cpu/detect.h>
+#include <cpu/irq.h>
+
 #if CPU_CM3_LM3S
        #include <io/lm3s.h>
 #elif CPU_CM3_STM32
        #include <io/stm32.h>
+#elif CPU_CM3_SAM3
+       #include <io/sam3.h>
 /*#elif  Add other families here */
 #else
        #error Unknown CPU
 #endif
 
-/* Ticks frequency (HZ) */
-#define TIMER_TICKS_PER_SEC    1000
+/**
+ * \name Values for CONFIG_TIMER.
+ *
+ * Select which hardware timer interrupt to use for system clock and softtimers.
+ *
+ * $WIZ$ timer_select = "TIMER_DEFAULT", "TIMER_ON_GPTM"
+ */
+#define TIMER_ON_GPTM  1
+
+#define TIMER_DEFAULT  TIMER_ON_GPTM ///< Default system timer
+
+#if (CONFIG_TIMER == TIMER_ON_GPTM)
+       /* Ticks frequency (HZ) */
+       #define TIMER_TICKS_PER_SEC     1000
+
+       /* Frequency of the hardware high-precision timer. */
+       #define TIMER_HW_HPTICKS_PER_SEC (CPU_FREQ)
 
-/* Frequency of the hardware high-precision timer. */
-#define TIMER_HW_HPTICKS_PER_SEC (CPU_FREQ)
+       /* Maximum value of the high-precision hardware counter register */
+       #define TIMER_HW_CNT (CPU_FREQ / TIMER_TICKS_PER_SEC)
 
-/* Maximum value of the high-precision hardware counter register */
-#define TIMER_HW_CNT (CPU_FREQ / TIMER_TICKS_PER_SEC)
+       /** Type of time expressed in ticks of the hardware high-precision timer */
+       typedef uint32_t hptime_t;
+       #define SIZEOF_HPTIME_T 4
 
-/** Type of time expressed in ticks of the hardware high-precision timer */
-typedef uint32_t hptime_t;
-#define SIZEOF_HPTIME_T 4
+       /* Timer ISR prototype */
+       ISR_PROTO_CONTEXT_SWITCH(timer_handler);
+       #define DEFINE_TIMER_ISR DECLARE_ISR_CONTEXT_SWITCH(timer_handler)
 
-/* Timer ISR prototype */
-ISR_PROTO_CONTEXT_SWITCH(timer_handler);
-#define DEFINE_TIMER_ISR DECLARE_ISR_CONTEXT_SWITCH(timer_handler)
+       INLINE void timer_hw_irq(void)
+       {
+       }
 
-INLINE void timer_hw_irq(void)
-{
-}
 
-INLINE bool timer_hw_triggered(void)
-{
-       return true;
-}
+       INLINE bool timer_hw_triggered(void)
+       {
+               return true;
+       }
+
+       INLINE hptime_t timer_hw_hpread(void)
+       {
+               return (TIMER_HW_CNT - NVIC_ST_CURRENT_R);
+       }
+
+#else
 
-INLINE hptime_t timer_hw_hpread(void)
-{
-       return HWREG(NVIC_ST_CURRENT);
-}
+       #error Unimplemented value for CONFIG_TIMER
+#endif /* CONFIG_TIMER */
 
 void timer_hw_init(void);
 void timer_hw_exit(void);