From 75ba6b7623308d2e4584b774c125ed63ec62ddd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C5=82=C4=85bek=2C=20Andrzej?= Date: Mon, 4 Jul 2016 09:21:39 +0200 Subject: [PATCH] Polished tickers implementation - moved interrupt clearing code. --- .../hal/TARGET_NORDIC/TARGET_NRF5/lp_ticker.c | 3 +-- .../hal/TARGET_NORDIC/TARGET_NRF5/us_ticker.c | 24 ++++--------------- 2 files changed, 6 insertions(+), 21 deletions(-) diff --git a/hal/targets/hal/TARGET_NORDIC/TARGET_NRF5/lp_ticker.c b/hal/targets/hal/TARGET_NORDIC/TARGET_NRF5/lp_ticker.c index 0f403bc5f0..ae63c2a1e1 100644 --- a/hal/targets/hal/TARGET_NORDIC/TARGET_NRF5/lp_ticker.c +++ b/hal/targets/hal/TARGET_NORDIC/TARGET_NRF5/lp_ticker.c @@ -42,8 +42,7 @@ void lp_ticker_disable_interrupt(void) void lp_ticker_clear_interrupt(void) { - // No implementation needed. The event that triggers the interrupt is - // cleared in 'common_rtc_irq_handler'. + nrf_rtc_event_clear(COMMON_RTC_INSTANCE, LP_TICKER_EVENT); } #endif // DEVICE_LOWPOWERTIMER diff --git a/hal/targets/hal/TARGET_NORDIC/TARGET_NRF5/us_ticker.c b/hal/targets/hal/TARGET_NORDIC/TARGET_NRF5/us_ticker.c index 7acebd72e5..101c1d3997 100644 --- a/hal/targets/hal/TARGET_NORDIC/TARGET_NRF5/us_ticker.c +++ b/hal/targets/hal/TARGET_NORDIC/TARGET_NRF5/us_ticker.c @@ -34,32 +34,19 @@ void common_rtc_irq_handler(void) void COMMON_RTC_IRQ_HANDLER(void) #endif { - nrf_rtc_event_t event; - uint32_t int_mask; - - event = US_TICKER_EVENT; - int_mask = US_TICKER_INT_MASK; - if (nrf_rtc_event_pending(COMMON_RTC_INSTANCE, event)) { - nrf_rtc_event_clear(COMMON_RTC_INSTANCE, event); - nrf_rtc_event_disable(COMMON_RTC_INSTANCE, int_mask); - + if (nrf_rtc_event_pending(COMMON_RTC_INSTANCE, US_TICKER_EVENT)) { us_ticker_irq_handler(); } #if DEVICE_LOWPOWERTIMER - event = LP_TICKER_EVENT; - int_mask = LP_TICKER_INT_MASK; - if (nrf_rtc_event_pending(COMMON_RTC_INSTANCE, event)) { - nrf_rtc_event_clear(COMMON_RTC_INSTANCE, event); - nrf_rtc_event_disable(COMMON_RTC_INSTANCE, int_mask); + if (nrf_rtc_event_pending(COMMON_RTC_INSTANCE, LP_TICKER_EVENT)) { lp_ticker_irq_handler(); } #endif - event = NRF_RTC_EVENT_OVERFLOW; - if (nrf_rtc_event_pending(COMMON_RTC_INSTANCE, event)) { - nrf_rtc_event_clear(COMMON_RTC_INSTANCE, event); + if (nrf_rtc_event_pending(COMMON_RTC_INSTANCE, NRF_RTC_EVENT_OVERFLOW)) { + nrf_rtc_event_clear(COMMON_RTC_INSTANCE, NRF_RTC_EVENT_OVERFLOW); // Don't disable this event. It shall occur periodically. ++m_common_rtc_overflows; @@ -204,6 +191,5 @@ void us_ticker_disable_interrupt(void) void us_ticker_clear_interrupt(void) { - // No implementation needed. The event that triggers the interrupt is - // cleared in 'common_rtc_irq_handler'. + nrf_rtc_event_clear(COMMON_RTC_INSTANCE, US_TICKER_EVENT); }