xref: /nrf52832-nimble/nordic/nrfx/drivers/src/nrfx_rtc.c (revision 150812a83cab50279bd772ef6db1bfaf255f2c5b)
1*150812a8SEvalZero /*
2*150812a8SEvalZero  * Copyright (c) 2014 - 2018, Nordic Semiconductor ASA
3*150812a8SEvalZero  * All rights reserved.
4*150812a8SEvalZero  *
5*150812a8SEvalZero  * Redistribution and use in source and binary forms, with or without
6*150812a8SEvalZero  * modification, are permitted provided that the following conditions are met:
7*150812a8SEvalZero  *
8*150812a8SEvalZero  * 1. Redistributions of source code must retain the above copyright notice, this
9*150812a8SEvalZero  *    list of conditions and the following disclaimer.
10*150812a8SEvalZero  *
11*150812a8SEvalZero  * 2. Redistributions in binary form must reproduce the above copyright
12*150812a8SEvalZero  *    notice, this list of conditions and the following disclaimer in the
13*150812a8SEvalZero  *    documentation and/or other materials provided with the distribution.
14*150812a8SEvalZero  *
15*150812a8SEvalZero  * 3. Neither the name of the copyright holder nor the names of its
16*150812a8SEvalZero  *    contributors may be used to endorse or promote products derived from this
17*150812a8SEvalZero  *    software without specific prior written permission.
18*150812a8SEvalZero  *
19*150812a8SEvalZero  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20*150812a8SEvalZero  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21*150812a8SEvalZero  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22*150812a8SEvalZero  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23*150812a8SEvalZero  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24*150812a8SEvalZero  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25*150812a8SEvalZero  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26*150812a8SEvalZero  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27*150812a8SEvalZero  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28*150812a8SEvalZero  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29*150812a8SEvalZero  * POSSIBILITY OF SUCH DAMAGE.
30*150812a8SEvalZero  */
31*150812a8SEvalZero 
32*150812a8SEvalZero #include <nrfx.h>
33*150812a8SEvalZero 
34*150812a8SEvalZero #if NRFX_CHECK(NRFX_RTC_ENABLED)
35*150812a8SEvalZero 
36*150812a8SEvalZero #if !(NRFX_CHECK(NRFX_RTC0_ENABLED) || NRFX_CHECK(NRFX_RTC1_ENABLED) || \
37*150812a8SEvalZero       NRFX_CHECK(NRFX_RTC2_ENABLED))
38*150812a8SEvalZero #error "No enabled RTC instances. Check <nrfx_config.h>."
39*150812a8SEvalZero #endif
40*150812a8SEvalZero 
41*150812a8SEvalZero #include <nrfx_rtc.h>
42*150812a8SEvalZero 
43*150812a8SEvalZero #define NRFX_LOG_MODULE RTC
44*150812a8SEvalZero #include <nrfx_log.h>
45*150812a8SEvalZero 
46*150812a8SEvalZero #define EVT_TO_STR(event)                                           \
47*150812a8SEvalZero     (event == NRF_RTC_EVENT_TICK      ? "NRF_RTC_EVENT_TICK"      : \
48*150812a8SEvalZero     (event == NRF_RTC_EVENT_OVERFLOW  ? "NRF_RTC_EVENT_OVERFLOW"  : \
49*150812a8SEvalZero     (event == NRF_RTC_EVENT_COMPARE_0 ? "NRF_RTC_EVENT_COMPARE_0" : \
50*150812a8SEvalZero     (event == NRF_RTC_EVENT_COMPARE_1 ? "NRF_RTC_EVENT_COMPARE_1" : \
51*150812a8SEvalZero     (event == NRF_RTC_EVENT_COMPARE_2 ? "NRF_RTC_EVENT_COMPARE_2" : \
52*150812a8SEvalZero     (event == NRF_RTC_EVENT_COMPARE_3 ? "NRF_RTC_EVENT_COMPARE_3" : \
53*150812a8SEvalZero                                         "UNKNOWN EVENT"))))))
54*150812a8SEvalZero 
55*150812a8SEvalZero 
56*150812a8SEvalZero /**@brief RTC driver instance control block structure. */
57*150812a8SEvalZero typedef struct
58*150812a8SEvalZero {
59*150812a8SEvalZero     nrfx_drv_state_t state;        /**< Instance state. */
60*150812a8SEvalZero     bool             reliable;     /**< Reliable mode flag. */
61*150812a8SEvalZero     uint8_t          tick_latency; /**< Maximum length of interrupt handler in ticks (max 7.7 ms). */
62*150812a8SEvalZero } nrfx_rtc_cb_t;
63*150812a8SEvalZero 
64*150812a8SEvalZero // User callbacks local storage.
65*150812a8SEvalZero static nrfx_rtc_handler_t m_handlers[NRFX_RTC_ENABLED_COUNT];
66*150812a8SEvalZero static nrfx_rtc_cb_t      m_cb[NRFX_RTC_ENABLED_COUNT];
67*150812a8SEvalZero 
nrfx_rtc_init(nrfx_rtc_t const * const p_instance,nrfx_rtc_config_t const * p_config,nrfx_rtc_handler_t handler)68*150812a8SEvalZero nrfx_err_t nrfx_rtc_init(nrfx_rtc_t const * const  p_instance,
69*150812a8SEvalZero                          nrfx_rtc_config_t const * p_config,
70*150812a8SEvalZero                          nrfx_rtc_handler_t        handler)
71*150812a8SEvalZero {
72*150812a8SEvalZero     NRFX_ASSERT(p_config);
73*150812a8SEvalZero     NRFX_ASSERT(handler);
74*150812a8SEvalZero     nrfx_err_t err_code;
75*150812a8SEvalZero 
76*150812a8SEvalZero     m_handlers[p_instance->instance_id] = handler;
77*150812a8SEvalZero 
78*150812a8SEvalZero     if (m_cb[p_instance->instance_id].state != NRFX_DRV_STATE_UNINITIALIZED)
79*150812a8SEvalZero     {
80*150812a8SEvalZero         err_code = NRFX_ERROR_INVALID_STATE;
81*150812a8SEvalZero         NRFX_LOG_WARNING("Function: %s, error code: %s.",
82*150812a8SEvalZero                          __func__,
83*150812a8SEvalZero                          NRFX_LOG_ERROR_STRING_GET(err_code));
84*150812a8SEvalZero         return err_code;
85*150812a8SEvalZero     }
86*150812a8SEvalZero 
87*150812a8SEvalZero     NRFX_IRQ_PRIORITY_SET(p_instance->irq, p_config->interrupt_priority);
88*150812a8SEvalZero     NRFX_IRQ_ENABLE(p_instance->irq);
89*150812a8SEvalZero     nrf_rtc_prescaler_set(p_instance->p_reg, p_config->prescaler);
90*150812a8SEvalZero     m_cb[p_instance->instance_id].reliable     = p_config->reliable;
91*150812a8SEvalZero     m_cb[p_instance->instance_id].tick_latency = p_config->tick_latency;
92*150812a8SEvalZero     m_cb[p_instance->instance_id].state        = NRFX_DRV_STATE_INITIALIZED;
93*150812a8SEvalZero 
94*150812a8SEvalZero     err_code = NRFX_SUCCESS;
95*150812a8SEvalZero     NRFX_LOG_INFO("Function: %s, error code: %s.", __func__, NRFX_LOG_ERROR_STRING_GET(err_code));
96*150812a8SEvalZero     return err_code;
97*150812a8SEvalZero }
98*150812a8SEvalZero 
nrfx_rtc_uninit(nrfx_rtc_t const * const p_instance)99*150812a8SEvalZero void nrfx_rtc_uninit(nrfx_rtc_t const * const p_instance)
100*150812a8SEvalZero {
101*150812a8SEvalZero     uint32_t mask = NRF_RTC_INT_TICK_MASK     |
102*150812a8SEvalZero                     NRF_RTC_INT_OVERFLOW_MASK |
103*150812a8SEvalZero                     NRF_RTC_INT_COMPARE0_MASK |
104*150812a8SEvalZero                     NRF_RTC_INT_COMPARE1_MASK |
105*150812a8SEvalZero                     NRF_RTC_INT_COMPARE2_MASK |
106*150812a8SEvalZero                     NRF_RTC_INT_COMPARE3_MASK;
107*150812a8SEvalZero     NRFX_ASSERT(m_cb[p_instance->instance_id].state != NRFX_DRV_STATE_UNINITIALIZED);
108*150812a8SEvalZero 
109*150812a8SEvalZero     NRFX_IRQ_DISABLE(p_instance->irq);
110*150812a8SEvalZero 
111*150812a8SEvalZero     nrf_rtc_task_trigger(p_instance->p_reg, NRF_RTC_TASK_STOP);
112*150812a8SEvalZero     nrf_rtc_event_disable(p_instance->p_reg, mask);
113*150812a8SEvalZero     nrf_rtc_int_disable(p_instance->p_reg, mask);
114*150812a8SEvalZero 
115*150812a8SEvalZero     m_cb[p_instance->instance_id].state = NRFX_DRV_STATE_UNINITIALIZED;
116*150812a8SEvalZero     NRFX_LOG_INFO("Uninitialized.");
117*150812a8SEvalZero }
118*150812a8SEvalZero 
nrfx_rtc_enable(nrfx_rtc_t const * const p_instance)119*150812a8SEvalZero void nrfx_rtc_enable(nrfx_rtc_t const * const p_instance)
120*150812a8SEvalZero {
121*150812a8SEvalZero     NRFX_ASSERT(m_cb[p_instance->instance_id].state == NRFX_DRV_STATE_INITIALIZED);
122*150812a8SEvalZero 
123*150812a8SEvalZero     nrf_rtc_task_trigger(p_instance->p_reg, NRF_RTC_TASK_START);
124*150812a8SEvalZero     m_cb[p_instance->instance_id].state = NRFX_DRV_STATE_POWERED_ON;
125*150812a8SEvalZero     NRFX_LOG_INFO("Enabled.");
126*150812a8SEvalZero }
127*150812a8SEvalZero 
nrfx_rtc_disable(nrfx_rtc_t const * const p_instance)128*150812a8SEvalZero void nrfx_rtc_disable(nrfx_rtc_t const * const p_instance)
129*150812a8SEvalZero {
130*150812a8SEvalZero     NRFX_ASSERT(m_cb[p_instance->instance_id].state != NRFX_DRV_STATE_UNINITIALIZED);
131*150812a8SEvalZero 
132*150812a8SEvalZero     nrf_rtc_task_trigger(p_instance->p_reg, NRF_RTC_TASK_STOP);
133*150812a8SEvalZero     m_cb[p_instance->instance_id].state = NRFX_DRV_STATE_INITIALIZED;
134*150812a8SEvalZero     NRFX_LOG_INFO("Disabled.");
135*150812a8SEvalZero }
136*150812a8SEvalZero 
nrfx_rtc_cc_disable(nrfx_rtc_t const * const p_instance,uint32_t channel)137*150812a8SEvalZero nrfx_err_t nrfx_rtc_cc_disable(nrfx_rtc_t const * const p_instance, uint32_t channel)
138*150812a8SEvalZero {
139*150812a8SEvalZero     NRFX_ASSERT(m_cb[p_instance->instance_id].state != NRFX_DRV_STATE_UNINITIALIZED);
140*150812a8SEvalZero     NRFX_ASSERT(channel<p_instance->cc_channel_count);
141*150812a8SEvalZero 
142*150812a8SEvalZero     nrfx_err_t err_code;
143*150812a8SEvalZero     uint32_t int_mask = RTC_CHANNEL_INT_MASK(channel);
144*150812a8SEvalZero     nrf_rtc_event_t event    = RTC_CHANNEL_EVENT_ADDR(channel);
145*150812a8SEvalZero 
146*150812a8SEvalZero     nrf_rtc_event_disable(p_instance->p_reg,int_mask);
147*150812a8SEvalZero     if (nrf_rtc_int_is_enabled(p_instance->p_reg,int_mask))
148*150812a8SEvalZero     {
149*150812a8SEvalZero         nrf_rtc_int_disable(p_instance->p_reg,int_mask);
150*150812a8SEvalZero         if (nrf_rtc_event_pending(p_instance->p_reg,event))
151*150812a8SEvalZero         {
152*150812a8SEvalZero             nrf_rtc_event_clear(p_instance->p_reg,event);
153*150812a8SEvalZero             err_code = NRFX_ERROR_TIMEOUT;
154*150812a8SEvalZero             NRFX_LOG_WARNING("Function: %s, error code: %s.",
155*150812a8SEvalZero                              __func__,
156*150812a8SEvalZero                              NRFX_LOG_ERROR_STRING_GET(err_code));
157*150812a8SEvalZero             return err_code;
158*150812a8SEvalZero         }
159*150812a8SEvalZero     }
160*150812a8SEvalZero     NRFX_LOG_INFO("RTC id: %d, channel disabled: %lu.", p_instance->instance_id, channel);
161*150812a8SEvalZero     err_code = NRFX_SUCCESS;
162*150812a8SEvalZero     NRFX_LOG_INFO("Function: %s, error code: %s.", __func__, NRFX_LOG_ERROR_STRING_GET(err_code));
163*150812a8SEvalZero     return err_code;
164*150812a8SEvalZero }
165*150812a8SEvalZero 
nrfx_rtc_cc_set(nrfx_rtc_t const * const p_instance,uint32_t channel,uint32_t val,bool enable_irq)166*150812a8SEvalZero nrfx_err_t nrfx_rtc_cc_set(nrfx_rtc_t const * const p_instance,
167*150812a8SEvalZero                            uint32_t channel,
168*150812a8SEvalZero                            uint32_t val,
169*150812a8SEvalZero                            bool enable_irq)
170*150812a8SEvalZero {
171*150812a8SEvalZero     NRFX_ASSERT(m_cb[p_instance->instance_id].state != NRFX_DRV_STATE_UNINITIALIZED);
172*150812a8SEvalZero     NRFX_ASSERT(channel<p_instance->cc_channel_count);
173*150812a8SEvalZero 
174*150812a8SEvalZero     nrfx_err_t err_code;
175*150812a8SEvalZero     uint32_t int_mask = RTC_CHANNEL_INT_MASK(channel);
176*150812a8SEvalZero     nrf_rtc_event_t event    = RTC_CHANNEL_EVENT_ADDR(channel);
177*150812a8SEvalZero 
178*150812a8SEvalZero     nrf_rtc_event_disable(p_instance->p_reg, int_mask);
179*150812a8SEvalZero     nrf_rtc_int_disable(p_instance->p_reg, int_mask);
180*150812a8SEvalZero 
181*150812a8SEvalZero     val = RTC_WRAP(val);
182*150812a8SEvalZero     if (m_cb[p_instance->instance_id].reliable)
183*150812a8SEvalZero     {
184*150812a8SEvalZero         nrf_rtc_cc_set(p_instance->p_reg,channel,val);
185*150812a8SEvalZero         uint32_t cnt = nrf_rtc_counter_get(p_instance->p_reg);
186*150812a8SEvalZero         int32_t diff = cnt - val;
187*150812a8SEvalZero         if (cnt < val)
188*150812a8SEvalZero         {
189*150812a8SEvalZero             diff += RTC_COUNTER_COUNTER_Msk;
190*150812a8SEvalZero         }
191*150812a8SEvalZero         if (diff < m_cb[p_instance->instance_id].tick_latency)
192*150812a8SEvalZero         {
193*150812a8SEvalZero             err_code = NRFX_ERROR_TIMEOUT;
194*150812a8SEvalZero             NRFX_LOG_WARNING("Function: %s, error code: %s.",
195*150812a8SEvalZero                              __func__,
196*150812a8SEvalZero                              NRFX_LOG_ERROR_STRING_GET(err_code));
197*150812a8SEvalZero             return err_code;
198*150812a8SEvalZero         }
199*150812a8SEvalZero     }
200*150812a8SEvalZero     else
201*150812a8SEvalZero     {
202*150812a8SEvalZero         nrf_rtc_cc_set(p_instance->p_reg,channel,val);
203*150812a8SEvalZero     }
204*150812a8SEvalZero 
205*150812a8SEvalZero     if (enable_irq)
206*150812a8SEvalZero     {
207*150812a8SEvalZero         nrf_rtc_event_clear(p_instance->p_reg,event);
208*150812a8SEvalZero         nrf_rtc_int_enable(p_instance->p_reg, int_mask);
209*150812a8SEvalZero     }
210*150812a8SEvalZero     nrf_rtc_event_enable(p_instance->p_reg,int_mask);
211*150812a8SEvalZero 
212*150812a8SEvalZero     NRFX_LOG_INFO("RTC id: %d, channel enabled: %lu, compare value: %lu.",
213*150812a8SEvalZero                   p_instance->instance_id,
214*150812a8SEvalZero                   channel,
215*150812a8SEvalZero                   val);
216*150812a8SEvalZero     err_code = NRFX_SUCCESS;
217*150812a8SEvalZero     NRFX_LOG_INFO("Function: %s, error code: %s.", __func__, NRFX_LOG_ERROR_STRING_GET(err_code));
218*150812a8SEvalZero     return err_code;
219*150812a8SEvalZero }
220*150812a8SEvalZero 
nrfx_rtc_tick_enable(nrfx_rtc_t const * const p_instance,bool enable_irq)221*150812a8SEvalZero void nrfx_rtc_tick_enable(nrfx_rtc_t const * const p_instance, bool enable_irq)
222*150812a8SEvalZero {
223*150812a8SEvalZero     nrf_rtc_event_t event = NRF_RTC_EVENT_TICK;
224*150812a8SEvalZero     uint32_t mask = NRF_RTC_INT_TICK_MASK;
225*150812a8SEvalZero 
226*150812a8SEvalZero     nrf_rtc_event_clear(p_instance->p_reg, event);
227*150812a8SEvalZero     nrf_rtc_event_enable(p_instance->p_reg, mask);
228*150812a8SEvalZero     if (enable_irq)
229*150812a8SEvalZero     {
230*150812a8SEvalZero         nrf_rtc_int_enable(p_instance->p_reg, mask);
231*150812a8SEvalZero     }
232*150812a8SEvalZero     NRFX_LOG_INFO("Tick events enabled.");
233*150812a8SEvalZero }
234*150812a8SEvalZero 
nrfx_rtc_tick_disable(nrfx_rtc_t const * const p_instance)235*150812a8SEvalZero void nrfx_rtc_tick_disable(nrfx_rtc_t const * const p_instance)
236*150812a8SEvalZero {
237*150812a8SEvalZero     uint32_t mask = NRF_RTC_INT_TICK_MASK;
238*150812a8SEvalZero 
239*150812a8SEvalZero     nrf_rtc_event_disable(p_instance->p_reg, mask);
240*150812a8SEvalZero     nrf_rtc_int_disable(p_instance->p_reg, mask);
241*150812a8SEvalZero     NRFX_LOG_INFO("Tick events disabled.");
242*150812a8SEvalZero }
243*150812a8SEvalZero 
nrfx_rtc_overflow_enable(nrfx_rtc_t const * const p_instance,bool enable_irq)244*150812a8SEvalZero void nrfx_rtc_overflow_enable(nrfx_rtc_t const * const p_instance, bool enable_irq)
245*150812a8SEvalZero {
246*150812a8SEvalZero     nrf_rtc_event_t event = NRF_RTC_EVENT_OVERFLOW;
247*150812a8SEvalZero     uint32_t mask = NRF_RTC_INT_OVERFLOW_MASK;
248*150812a8SEvalZero 
249*150812a8SEvalZero     nrf_rtc_event_clear(p_instance->p_reg, event);
250*150812a8SEvalZero     nrf_rtc_event_enable(p_instance->p_reg, mask);
251*150812a8SEvalZero     if (enable_irq)
252*150812a8SEvalZero     {
253*150812a8SEvalZero         nrf_rtc_int_enable(p_instance->p_reg, mask);
254*150812a8SEvalZero     }
255*150812a8SEvalZero }
256*150812a8SEvalZero 
nrfx_rtc_overflow_disable(nrfx_rtc_t const * const p_instance)257*150812a8SEvalZero void nrfx_rtc_overflow_disable(nrfx_rtc_t const * const p_instance)
258*150812a8SEvalZero {
259*150812a8SEvalZero     uint32_t mask = NRF_RTC_INT_OVERFLOW_MASK;
260*150812a8SEvalZero     nrf_rtc_event_disable(p_instance->p_reg, mask);
261*150812a8SEvalZero     nrf_rtc_int_disable(p_instance->p_reg, mask);
262*150812a8SEvalZero }
263*150812a8SEvalZero 
nrfx_rtc_max_ticks_get(nrfx_rtc_t const * const p_instance)264*150812a8SEvalZero uint32_t nrfx_rtc_max_ticks_get(nrfx_rtc_t const * const p_instance)
265*150812a8SEvalZero {
266*150812a8SEvalZero     uint32_t ticks;
267*150812a8SEvalZero     if (m_cb[p_instance->instance_id].reliable)
268*150812a8SEvalZero     {
269*150812a8SEvalZero         ticks = RTC_COUNTER_COUNTER_Msk - m_cb[p_instance->instance_id].tick_latency;
270*150812a8SEvalZero     }
271*150812a8SEvalZero     else
272*150812a8SEvalZero     {
273*150812a8SEvalZero         ticks = RTC_COUNTER_COUNTER_Msk;
274*150812a8SEvalZero     }
275*150812a8SEvalZero     return ticks;
276*150812a8SEvalZero }
277*150812a8SEvalZero 
irq_handler(NRF_RTC_Type * p_reg,uint32_t instance_id,uint32_t channel_count)278*150812a8SEvalZero static void irq_handler(NRF_RTC_Type * p_reg,
279*150812a8SEvalZero                         uint32_t       instance_id,
280*150812a8SEvalZero                         uint32_t       channel_count)
281*150812a8SEvalZero {
282*150812a8SEvalZero     uint32_t i;
283*150812a8SEvalZero     uint32_t int_mask = (uint32_t)NRF_RTC_INT_COMPARE0_MASK;
284*150812a8SEvalZero     nrf_rtc_event_t event = NRF_RTC_EVENT_COMPARE_0;
285*150812a8SEvalZero 
286*150812a8SEvalZero     for (i = 0; i < channel_count; i++)
287*150812a8SEvalZero     {
288*150812a8SEvalZero         if (nrf_rtc_int_is_enabled(p_reg,int_mask) && nrf_rtc_event_pending(p_reg,event))
289*150812a8SEvalZero         {
290*150812a8SEvalZero             nrf_rtc_event_disable(p_reg,int_mask);
291*150812a8SEvalZero             nrf_rtc_int_disable(p_reg,int_mask);
292*150812a8SEvalZero             nrf_rtc_event_clear(p_reg,event);
293*150812a8SEvalZero             NRFX_LOG_DEBUG("Event: %s, instance id: %lu.", EVT_TO_STR(event), instance_id);
294*150812a8SEvalZero             m_handlers[instance_id]((nrfx_rtc_int_type_t)i);
295*150812a8SEvalZero         }
296*150812a8SEvalZero         int_mask <<= 1;
297*150812a8SEvalZero         event    = (nrf_rtc_event_t)((uint32_t)event + sizeof(uint32_t));
298*150812a8SEvalZero     }
299*150812a8SEvalZero     event = NRF_RTC_EVENT_TICK;
300*150812a8SEvalZero     if (nrf_rtc_int_is_enabled(p_reg,NRF_RTC_INT_TICK_MASK) &&
301*150812a8SEvalZero         nrf_rtc_event_pending(p_reg, event))
302*150812a8SEvalZero     {
303*150812a8SEvalZero         nrf_rtc_event_clear(p_reg, event);
304*150812a8SEvalZero         NRFX_LOG_DEBUG("Event: %s, instance id: %lu.", EVT_TO_STR(event), instance_id);
305*150812a8SEvalZero         m_handlers[instance_id](NRFX_RTC_INT_TICK);
306*150812a8SEvalZero     }
307*150812a8SEvalZero 
308*150812a8SEvalZero     event = NRF_RTC_EVENT_OVERFLOW;
309*150812a8SEvalZero     if (nrf_rtc_int_is_enabled(p_reg,NRF_RTC_INT_OVERFLOW_MASK) &&
310*150812a8SEvalZero         nrf_rtc_event_pending(p_reg, event))
311*150812a8SEvalZero     {
312*150812a8SEvalZero         nrf_rtc_event_clear(p_reg,event);
313*150812a8SEvalZero         NRFX_LOG_DEBUG("Event: %s, instance id: %lu.", EVT_TO_STR(event), instance_id);
314*150812a8SEvalZero         m_handlers[instance_id](NRFX_RTC_INT_OVERFLOW);
315*150812a8SEvalZero     }
316*150812a8SEvalZero }
317*150812a8SEvalZero 
318*150812a8SEvalZero #if NRFX_CHECK(NRFX_RTC0_ENABLED)
nrfx_rtc_0_irq_handler(void)319*150812a8SEvalZero void nrfx_rtc_0_irq_handler(void)
320*150812a8SEvalZero {
321*150812a8SEvalZero     irq_handler(NRF_RTC0, NRFX_RTC0_INST_IDX, NRF_RTC_CC_CHANNEL_COUNT(0));
322*150812a8SEvalZero }
323*150812a8SEvalZero #endif
324*150812a8SEvalZero 
325*150812a8SEvalZero #if NRFX_CHECK(NRFX_RTC1_ENABLED)
nrfx_rtc_1_irq_handler(void)326*150812a8SEvalZero void nrfx_rtc_1_irq_handler(void)
327*150812a8SEvalZero {
328*150812a8SEvalZero     irq_handler(NRF_RTC1, NRFX_RTC1_INST_IDX, NRF_RTC_CC_CHANNEL_COUNT(1));
329*150812a8SEvalZero }
330*150812a8SEvalZero #endif
331*150812a8SEvalZero 
332*150812a8SEvalZero #if NRFX_CHECK(NRFX_RTC2_ENABLED)
nrfx_rtc_2_irq_handler(void)333*150812a8SEvalZero void nrfx_rtc_2_irq_handler(void)
334*150812a8SEvalZero {
335*150812a8SEvalZero     irq_handler(NRF_RTC2, NRFX_RTC2_INST_IDX, NRF_RTC_CC_CHANNEL_COUNT(2));
336*150812a8SEvalZero }
337*150812a8SEvalZero #endif
338*150812a8SEvalZero 
339*150812a8SEvalZero #endif // NRFX_CHECK(NRFX_RTC_ENABLED)
340