Add function to read hp ticks.
authorasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Wed, 12 May 2010 14:12:41 +0000 (14:12 +0000)
committerasterix <asterix@38d2e660-2303-0410-9eaa-f027e97ec537>
Wed, 12 May 2010 14:12:41 +0000 (14:12 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@3665 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/cpu/arm/drv/timer_at91.h
bertos/cpu/avr/drv/timer_avr.h
bertos/cpu/cortex-m3/drv/timer_cm3.h
bertos/drv/timer.h

index 90a72cf0e7bcefa44b1e56261ef2be2737513aff..63c2c6448ad091e9b637549befb631bffd98c8de 100644 (file)
                return PIIR & CPIV_MASK;
        }
 
+       INLINE hptime_t timer_hw_hpticks(ticks_t clock)
+       {
+               return timer_hw_hpread() + clock * TIMER_HW_CNT;
+       }
+
 #else
 
        #error Unimplemented value for CONFIG_TIMER
index a2a413b60c5ce1b411eece4c42116f093b88451d..20764a1b60658328913da827d6a081b4cf160570 100644 (file)
 /** Not needed, timer IRQ handler called only for timer source */
 #define timer_hw_triggered() (true)
 
+
+INLINE hptime_t timer_hw_hpticks(ticks_t clock)
+{
+       return timer_hw_hpread() + clock * TIMER_HW_CNT;
+}
+
 void timer_hw_init(void);
 
 #endif /* DRV_TIMER_AVR_H */
index 54bb4bebbeb378a8a85a2adb7c73c02a84f04a83..3e47d294912bacc447ad4b1bc628001ed79a24b5 100644 (file)
@@ -38,6 +38,8 @@
 #ifndef TIMER_CM3_H
 #define TIMER_CM3_H
 
+#include "cfg/cfg_timer.h"     /* CONFIG_TIMER */
+
 #if CPU_CM3_LM3S
        #include <io/lm3s.h>
 #elif CPU_CM3_STM32
  *
  * 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
+
+       /* Frequency of the hardware high-precision timer. */
+       #define TIMER_HW_HPTICKS_PER_SEC (CPU_FREQ)
 
-/* Ticks frequency (HZ) */
-#define TIMER_TICKS_PER_SEC    1000
+       /* Maximum value of the high-precision hardware counter register */
+       #define TIMER_HW_CNT (CPU_FREQ / TIMER_TICKS_PER_SEC)
 
-/* Frequency of the hardware high-precision timer. */
-#define TIMER_HW_HPTICKS_PER_SEC (CPU_FREQ)
+       /** Type of time expressed in ticks of the hardware high-precision timer */
+       typedef uint32_t hptime_t;
+       #define SIZEOF_HPTIME_T 4
 
-/* Maximum value of the high-precision hardware counter register */
-#define TIMER_HW_CNT (CPU_FREQ / TIMER_TICKS_PER_SEC)
+       /* Timer ISR prototype */
+       ISR_PROTO_CONTEXT_SWITCH(timer_handler);
+       #define DEFINE_TIMER_ISR DECLARE_ISR_CONTEXT_SWITCH(timer_handler)
 
-/** Type of time expressed in ticks of the hardware high-precision timer */
-typedef uint32_t hptime_t;
-#define SIZEOF_HPTIME_T 4
+       INLINE void timer_hw_irq(void)
+       {
+       }
 
-/* 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 bool timer_hw_triggered(void)
+       {
+               return true;
+       }
 
-INLINE bool timer_hw_triggered(void)
-{
-       return true;
-}
+       INLINE hptime_t timer_hw_hpread(void)
+       {
+               return NVIC_ST_CURRENT_R;
+       }
+
+       INLINE hptime_t timer_hw_hpticks(ticks_t clock)
+       {
+               return (TIMER_HW_CNT - timer_hw_hpread()) + clock * TIMER_HW_CNT;
+       }
+
+#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);
index de2680093243d1b47d0ec5884b3c56c94cea13db..0fd030749c80045b4a7cc862188c4c8116c9e112 100644 (file)
@@ -146,6 +146,13 @@ INLINE ticks_t timer_clock_unlocked(void)
        return _clock;
 }
 
+/**
+ */
+INLINE hptime_t timer_clock_hp(void)
+{
+       return timer_hw_hpticks(_clock);
+}
+
 /** Convert \a ms [ms] to ticks. */
 INLINE ticks_t ms_to_ticks(mtime_t ms)
 {