X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fcpu%2Farm%2Fdrv%2Ftimer_at91.h;h=54ba6e37f37f6d693e981b5693aba5954b161eb5;hb=5e75e84ec8e806f7ded1207b395be2fb09a60a35;hp=eca205c504a22c43c2f95eb80de78142958847f8;hpb=8dabf14299bc6b3b9fc0b4dfdeba91af82aba46c;p=bertos.git diff --git a/bertos/cpu/arm/drv/timer_at91.h b/bertos/cpu/arm/drv/timer_at91.h index eca205c5..54ba6e37 100644 --- a/bertos/cpu/arm/drv/timer_at91.h +++ b/bertos/cpu/arm/drv/timer_at91.h @@ -40,10 +40,13 @@ #ifndef DRV_AT91_TIMER_H #define DRV_AT91_TIMER_H -#include /* CPU_FREQ */ +#include /* CPU_FREQ */ #include "cfg/cfg_timer.h" /* CONFIG_TIMER */ #include /* uint8_t */ +#include /* BV */ + +#include /** * \name Values for CONFIG_TIMER. @@ -70,12 +73,33 @@ /** Frequency of the hardware high-precision timer. */ #define TIMER_HW_HPTICKS_PER_SEC (CPU_FREQ / 16) - /// Type of time expressed in ticks of the hardware high-precision timer + /** Type of time expressed in ticks of the hardware high-precision timer */ typedef uint32_t hptime_t; + + INLINE void timer_hw_irq(void) + { + /* Reset counters, this is needed to reset timer and interrupt flags */ + uint32_t dummy = PIVR; + (void) dummy; + } + + INLINE bool timer_hw_triggered(void) + { + return PIT_SR & BV(PITS); + } + + INLINE hptime_t timer_hw_hpread(void) + { + /* In the upper part of PIT_PIIR there is unused data */ + return PIIR & CPIV_MASK; + } + #else #error Unimplemented value for CONFIG_TIMER #endif /* CONFIG_TIMER */ +void timer_hw_init(void); + #endif /* DRV_TIMER_AT91_H */