X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fcpu%2Fcortex-m3%2Fdrv%2Ftimer_cm3.h;h=80ec8eb7d67edb2a3d4eba060ac9dce0942ac021;hb=9a9bb767d984876ff35a9fba379f46f57a07236c;hp=54bb4bebbeb378a8a85a2adb7c73c02a84f04a83;hpb=9894dd2c3a530cf89e5f8011b88a5c18be836e1b;p=bertos.git diff --git a/bertos/cpu/cortex-m3/drv/timer_cm3.h b/bertos/cpu/cortex-m3/drv/timer_cm3.h index 54bb4beb..80ec8eb7 100644 --- a/bertos/cpu/cortex-m3/drv/timer_cm3.h +++ b/bertos/cpu/cortex-m3/drv/timer_cm3.h @@ -38,10 +38,17 @@ #ifndef TIMER_CM3_H #define TIMER_CM3_H +#include "cfg/cfg_timer.h" /* CONFIG_TIMER */ + +#include +#include + #if CPU_CM3_LM3S #include #elif CPU_CM3_STM32 #include +#elif CPU_CM3_AT91SAM3 + #include /*#elif Add other families here */ #else #error Unknown CPU @@ -52,40 +59,49 @@ * * Select which hardware timer interrupt to use for system clock and softtimers. * - * $WIZ$ timer_select = "TIMER_DEFAULT" + * $WIZ$ timer_select = "TIMER_DEFAULT", "TIMER_ON_GPTM" */ -#define TIMER_DEFAULT /* */ ///< Default system timer +#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 -/* 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 NVIC_ST_CURRENT_R; -} + #error Unimplemented value for CONFIG_TIMER +#endif /* CONFIG_TIMER */ void timer_hw_init(void); void timer_hw_exit(void);