From: asterix Date: Wed, 12 May 2010 14:12:41 +0000 (+0000) Subject: Add function to read hp ticks. X-Git-Tag: 2.5.0~252 X-Git-Url: https://codewiz.org/gitweb?a=commitdiff_plain;h=51157819d281eeca3d8afa8c27e22353c301e2ca;p=bertos.git Add function to read hp ticks. git-svn-id: https://src.develer.com/svnoss/bertos/trunk@3665 38d2e660-2303-0410-9eaa-f027e97ec537 --- diff --git a/bertos/cpu/arm/drv/timer_at91.h b/bertos/cpu/arm/drv/timer_at91.h index 90a72cf0..63c2c644 100644 --- a/bertos/cpu/arm/drv/timer_at91.h +++ b/bertos/cpu/arm/drv/timer_at91.h @@ -99,6 +99,11 @@ 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 diff --git a/bertos/cpu/avr/drv/timer_avr.h b/bertos/cpu/avr/drv/timer_avr.h index a2a413b6..20764a1b 100644 --- a/bertos/cpu/avr/drv/timer_avr.h +++ b/bertos/cpu/avr/drv/timer_avr.h @@ -170,6 +170,12 @@ /** 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 */ diff --git a/bertos/cpu/cortex-m3/drv/timer_cm3.h b/bertos/cpu/cortex-m3/drv/timer_cm3.h index 54bb4beb..3e47d294 100644 --- a/bertos/cpu/cortex-m3/drv/timer_cm3.h +++ b/bertos/cpu/cortex-m3/drv/timer_cm3.h @@ -38,6 +38,8 @@ #ifndef TIMER_CM3_H #define TIMER_CM3_H +#include "cfg/cfg_timer.h" /* CONFIG_TIMER */ + #if CPU_CM3_LM3S #include #elif CPU_CM3_STM32 @@ -52,40 +54,54 @@ * * 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); diff --git a/bertos/drv/timer.h b/bertos/drv/timer.h index de268009..0fd03074 100644 --- a/bertos/drv/timer.h +++ b/bertos/drv/timer.h @@ -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) {