@@ -110,7 +110,6 @@ static us_timestamp_t convert_timestamp(us_timestamp_t ref, timestamp_t timestam
110
110
*/
111
111
static void update_present_time (const ticker_data_t * const ticker )
112
112
{
113
-
114
113
ticker_event_queue_t * queue = ticker -> queue ;
115
114
uint32_t ticker_time = ticker -> interface -> read ();
116
115
if (ticker_time == ticker -> queue -> tick_last_read ) {
@@ -252,11 +251,16 @@ static void schedule_interrupt(const ticker_data_t *const ticker)
252
251
void ticker_set_handler (const ticker_data_t * const ticker , ticker_event_handler handler )
253
252
{
254
253
initialize (ticker );
254
+
255
+ core_util_critical_section_enter ();
255
256
set_handler (ticker , handler );
257
+ core_util_critical_section_exit ();
256
258
}
257
259
258
260
void ticker_irq_handler (const ticker_data_t * const ticker )
259
261
{
262
+ core_util_critical_section_enter ();
263
+
260
264
ticker -> interface -> clear_interrupt ();
261
265
262
266
/* Go through all the pending TimerEvents */
@@ -284,6 +288,8 @@ void ticker_irq_handler(const ticker_data_t *const ticker)
284
288
}
285
289
286
290
schedule_interrupt (ticker );
291
+
292
+ core_util_critical_section_exit ();
287
293
}
288
294
289
295
void ticker_insert_event (const ticker_data_t * const ticker , ticker_event_t * obj , timestamp_t timestamp , uint32_t id )
@@ -296,13 +302,14 @@ void ticker_insert_event(const ticker_data_t *const ticker, ticker_event_t *obj,
296
302
ticker -> queue -> present_time ,
297
303
timestamp
298
304
);
299
- core_util_critical_section_exit ();
300
305
301
306
// defer to ticker_insert_event_us
302
307
ticker_insert_event_us (
303
308
ticker ,
304
309
obj , absolute_timestamp , id
305
310
);
311
+
312
+ core_util_critical_section_exit ();
306
313
}
307
314
308
315
void ticker_insert_event_us (const ticker_data_t * const ticker , ticker_event_t * obj , us_timestamp_t timestamp , uint32_t id )
@@ -343,6 +350,7 @@ void ticker_insert_event_us(const ticker_data_t *const ticker, ticker_event_t *o
343
350
schedule_interrupt (ticker );
344
351
345
352
core_util_critical_section_exit ();
353
+
346
354
}
347
355
348
356
void ticker_remove_event (const ticker_data_t * const ticker , ticker_event_t * obj )
@@ -377,7 +385,11 @@ timestamp_t ticker_read(const ticker_data_t *const ticker)
377
385
us_timestamp_t ticker_read_us (const ticker_data_t * const ticker )
378
386
{
379
387
initialize (ticker );
388
+
389
+ core_util_critical_section_enter ();
380
390
update_present_time (ticker );
391
+ core_util_critical_section_exit ();
392
+
381
393
return ticker -> queue -> present_time ;
382
394
}
383
395
0 commit comments