From c7587f11ec52157fffd8dbdc6b0d800e349f8bc1 Mon Sep 17 00:00:00 2001 From: Piotr Esden-Tempski Date: Tue, 1 Feb 2011 22:43:18 -0800 Subject: [PATCH] Added get flag and get counter functions to timer. Allow proper interrupt handling and recording timer counter values. --- include/libopencm3/stm32/timer.h | 2 ++ lib/stm32/timer.c | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/include/libopencm3/stm32/timer.h b/include/libopencm3/stm32/timer.h index 4ba3c985..7b5df860 100644 --- a/include/libopencm3/stm32/timer.h +++ b/include/libopencm3/stm32/timer.h @@ -855,6 +855,7 @@ enum tim_oc_mode { void timer_reset(u32 timer_peripheral); void timer_enable_irq(u32 timer_peripheral, u32 irq); void timer_disable_irq(u32 timer_peripheral, u32 irq); +bool timer_get_flag(u32 timer_peripheral, u32 flag); void timer_clear_flag(u32 timer_peripheral, u32 flag); void timer_set_mode(u32 timer_peripheral, u8 clock_div, u8 alignment, u8 direction); @@ -915,5 +916,6 @@ void timer_set_disabled_off_state_in_idle_mode(u32 timer_peripheral); void timer_set_break_lock(u32 timer_peripheral, u32 lock); void timer_set_deadtime(u32 timer_peripheral, u32 deadtime); void timer_generate_event(u32 timer_peripheral, u32 event); +u32 timer_get_counter(u32 timer_peripheral); #endif diff --git a/lib/stm32/timer.c b/lib/stm32/timer.c index 827cde0e..d0876d9a 100644 --- a/lib/stm32/timer.c +++ b/lib/stm32/timer.c @@ -104,6 +104,16 @@ void timer_disable_irq(u32 timer_peripheral, u32 irq) TIM_DIER(timer_peripheral) &= ~irq; } +bool timer_get_flag(u32 timer_peripheral, u32 flag) +{ + if (((TIM_SR(timer_peripheral) & flag) != 0) && + ((TIM_DIER(timer_peripheral) & flag) != 0)) { + return true; + } + + return false; +} + void timer_clear_flag(u32 timer_peripheral, u32 flag) { TIM_SR(timer_peripheral) &= ~flag; @@ -929,3 +939,8 @@ void timer_generate_event(u32 timer_peripheral, u32 event) { TIM_EGR(timer_peripheral) |= event; } + +u32 timer_get_counter(u32 timer_peripheral) +{ + return TIM_CNT(timer_peripheral); +}