aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPiotr Esden-Tempski2011-01-31 22:08:37 -0800
committerPiotr Esden-Tempski2011-01-31 22:08:37 -0800
commitd40fb96fcf6b7415c445df036641ebd1fa00e55c (patch)
tree203e0a4f2c39022059a23925c5bfa8b6a79394f5
parent92edc113f9825f333ea66e41e8fcdbeb45da9cd6 (diff)
Added set prescaler and set repetition counter functions to timer.
-rw-r--r--examples/stm32/stm32-h103/pwm_6step/pwm_6step.c9
-rw-r--r--include/libopencm3/stm32/timer.h2
-rw-r--r--lib/stm32/timer.c13
3 files changed, 21 insertions, 3 deletions
diff --git a/examples/stm32/stm32-h103/pwm_6step/pwm_6step.c b/examples/stm32/stm32-h103/pwm_6step/pwm_6step.c
index 505b3c8..bda8ff7 100644
--- a/examples/stm32/stm32-h103/pwm_6step/pwm_6step.c
+++ b/examples/stm32/stm32-h103/pwm_6step/pwm_6step.c
@@ -124,9 +124,6 @@ void tim_setup(void)
/* Reset TIM1 peripheral */
timer_reset(TIM1);
- /* Clock division. */
- timer_set_clock_division(TIM1, TIM_CR1_CKD_CK_INT);
-
/* Timer global mode:
* - No divider
* - alignment edge
@@ -136,6 +133,12 @@ void tim_setup(void)
TIM_CR1_CMS_EDGE,
TIM_CR1_DIR_UP);
+ /* Reset prescaler value. */
+ timer_set_prescaler(TIM1, 0);
+
+ /* Reset repetition counter value. */
+ timer_set_repetition_counter(TIM1, 0);
+
/* Enable preload. */
timer_enable_preload(TIM1);
diff --git a/include/libopencm3/stm32/timer.h b/include/libopencm3/stm32/timer.h
index b11802e..4ba3c98 100644
--- a/include/libopencm3/stm32/timer.h
+++ b/include/libopencm3/stm32/timer.h
@@ -883,6 +883,8 @@ void timer_enable_compare_control_update_on_trigger(u32 timer_peripheral);
void timer_disable_compare_control_update_on_trigger(u32 timer_peripheral);
void timer_enable_preload_complementry_enable_bits(u32 timer_peripheral);
void timer_disable_preload_complementry_enable_bits(u32 timer_peripheral);
+void timer_set_prescaler(u32 timer_peripheral, u32 value);
+void timer_set_repetition_counter(u32 timer_peripheral, u32 value);
void timer_set_period(u32 timer_peripheral, u32 period);
void timer_enable_oc_clear(u32 timer_peripheral, enum tim_oc_id oc_id);
void timer_disable_oc_clear(u32 timer_peripheral, enum tim_oc_id oc_id);
diff --git a/lib/stm32/timer.c b/lib/stm32/timer.c
index 9a6534d..827cde0 100644
--- a/lib/stm32/timer.c
+++ b/lib/stm32/timer.c
@@ -253,6 +253,19 @@ void timer_disable_preload_complementry_enable_bits(u32 timer_peripheral)
TIM_CR2(timer_peripheral) &= ~TIM_CR2_CCPC;
}
+void timer_set_prescaler(u32 timer_peripheral, u32 value)
+{
+ TIM_PSC(timer_peripheral) = value;
+}
+
+void timer_set_repetition_counter(u32 timer_peripheral, u32 value)
+{
+ if ((timer_peripheral == TIM1) ||
+ (timer_peripheral == TIM8)) {
+ TIM_RCR(timer_peripheral) = value;
+ }
+}
+
void timer_set_period(u32 timer_peripheral, u32 period)
{
TIM_ARR(timer_peripheral) = period;