summaryrefslogtreecommitdiffstatshomepage
path: root/stmhal/timer.c
diff options
context:
space:
mode:
authorHenrik Sölver <henrik.solver@gmail.com>2017-04-13 21:38:17 +0200
committerDamien George <damien.p.george@gmail.com>2017-04-18 18:09:59 +1000
commit1f3887dc28a7ee1f5671fcc194930fa33a60ece5 (patch)
tree95aa45eea7b12d7cb464f03253ceeb347c0c628b /stmhal/timer.c
parentc7c14f163458046767b539c567a421076ea9a6b7 (diff)
downloadmicropython-1f3887dc28a7ee1f5671fcc194930fa33a60ece5.tar.gz
micropython-1f3887dc28a7ee1f5671fcc194930fa33a60ece5.zip
stmhal/timer: Clear interrupt flag before setting callback.
Sometimes when setting a channel callback the callback fires immediately, even if the compare register is set to a value far into the future. This happens when the free running counter has previously been equal to what happens to be in the compare register. This patch make sure that there is no pending interrupt when setting a callback.
Diffstat (limited to 'stmhal/timer.c')
-rw-r--r--stmhal/timer.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/stmhal/timer.c b/stmhal/timer.c
index 7f0a70c5e8..5a574867b6 100644
--- a/stmhal/timer.c
+++ b/stmhal/timer.c
@@ -1302,6 +1302,7 @@ STATIC mp_obj_t pyb_timer_channel_callback(mp_obj_t self_in, mp_obj_t callback)
} else if (mp_obj_is_callable(callback)) {
self->callback = callback;
uint8_t tim_id = self->timer->tim_id;
+ __HAL_TIM_CLEAR_IT(&self->timer->tim, TIMER_IRQ_MASK(self->channel));
if (tim_id == 1) {
HAL_NVIC_EnableIRQ(TIM1_CC_IRQn);
#if defined(TIM8) // STM32F401 doesn't have a TIM8