Skip to content

Commit bcf2f79

Browse files
Merge pull request rogerclarkmelbourne#554 from jorisvr/fix_timer
Fix clearing of TIMx_SR register
2 parents 25d4bcc + 8559f11 commit bcf2f79

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

STM32F1/system/libmaple/timer_private.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ static inline __always_inline void dispatch_single_irq(timer_dev *dev,
129129
void (*handler)(void) = dev->handlers[iid];
130130
if (handler) {
131131
handler();
132-
regs->SR &= ~irq_mask;
132+
regs->SR = ~irq_mask;
133133
}
134134
}
135135
}
@@ -165,7 +165,7 @@ static inline __always_inline void dispatch_adv_trg_com(timer_dev *dev) {
165165
handle_irq(dsr, TIMER_SR_TIF, hs, TIMER_TRG_INTERRUPT, handled);
166166
handle_irq(dsr, TIMER_SR_COMIF, hs, TIMER_COM_INTERRUPT, handled);
167167

168-
regs->SR &= ~handled;
168+
regs->SR = ~handled;
169169
}
170170

171171
static inline __always_inline void dispatch_adv_cc(timer_dev *dev) {
@@ -179,7 +179,7 @@ static inline __always_inline void dispatch_adv_cc(timer_dev *dev) {
179179
handle_irq(dsr, TIMER_SR_CC2IF, hs, TIMER_CC2_INTERRUPT, handled);
180180
handle_irq(dsr, TIMER_SR_CC1IF, hs, TIMER_CC1_INTERRUPT, handled);
181181

182-
regs->SR &= ~handled;
182+
regs->SR = ~handled;
183183
}
184184

185185
static inline __always_inline void dispatch_general(timer_dev *dev) {
@@ -195,7 +195,7 @@ static inline __always_inline void dispatch_general(timer_dev *dev) {
195195
handle_irq(dsr, TIMER_SR_CC1IF, hs, TIMER_CC1_INTERRUPT, handled);
196196
handle_irq(dsr, TIMER_SR_UIF, hs, TIMER_UPDATE_INTERRUPT, handled);
197197

198-
regs->SR &= ~handled;
198+
regs->SR = ~handled;
199199
}
200200

201201
/* On F1 (XL-density), F2, and F4, TIM9 and TIM12 are restricted
@@ -211,7 +211,7 @@ static inline __always_inline void dispatch_tim_9_12(timer_dev *dev) {
211211
handle_irq(dsr, TIMER_SR_CC1IF, hs, TIMER_CC1_INTERRUPT, handled);
212212
handle_irq(dsr, TIMER_SR_UIF, hs, TIMER_UPDATE_INTERRUPT, handled);
213213

214-
regs->SR &= ~handled;
214+
regs->SR = ~handled;
215215
}
216216

217217
/* On F1 (XL-density), F2, and F4, timers 10, 11, 13, and 14 are
@@ -225,7 +225,7 @@ static inline __always_inline void dispatch_tim_10_11_13_14(timer_dev *dev) {
225225
handle_irq(dsr, TIMER_SR_CC1IF, hs, TIMER_CC1_INTERRUPT, handled);
226226
handle_irq(dsr, TIMER_SR_UIF, hs, TIMER_UPDATE_INTERRUPT, handled);
227227

228-
regs->SR &= ~handled;
228+
regs->SR = ~handled;
229229
}
230230

231231
static inline __always_inline void dispatch_basic(timer_dev *dev) {

0 commit comments

Comments
 (0)