Hi Nordic,
Chip set: nRF52840
SDK: 15.3.0
Softdevice: S140 (06.01.01)
Button interface with MCU: Total=13 (All with GPIOTE)
We have face one blocking issue at button press, some time it stuck at some point,
I have debugging the issue and found it stuck at "timer_list_remove" function.
also i haven't got any timer interrupt while this issue come.
/**@brief Function for removing a timer from the timer queue. * * @param[in] timer_id Id of timer to remove. * * @return TRUE if Capture Compare register must be updated, FALSE otherwise. */ static bool timer_list_remove(timer_node_t * p_timer) { timer_node_t * p_old_head; timer_node_t * p_previous; timer_node_t * p_current; uint32_t timeout; // Find the timer's position in timer list. p_old_head = mp_timer_id_head; p_previous = mp_timer_id_head; p_current = p_previous; while (p_current != NULL) { if (p_current == p_timer) { break; } p_previous = p_current; p_current = p_current->next; } // Timer not in active list. if (p_current == NULL) { return false; } // Timer is the first in the list if (p_previous == p_current) { mp_timer_id_head = mp_timer_id_head->next; // No more timers in the list. Reset RTC1 in case Start timer operations are present in the queue. if (mp_timer_id_head == NULL) { NRF_RTC1->TASKS_CLEAR = 1; m_ticks_latest = 0; m_rtc1_reset = true; nrf_delay_us(MAX_RTC_TASKS_DELAY); } } // Remaining timeout between next timeout. timeout = p_current->ticks_to_expire; // Link previous timer with next of this timer, i.e. removing the timer from list. p_previous->next = p_current->next; // If this is not the last timer, increment the next timer by this timer timeout. p_current = p_previous->next; if (p_current != NULL) { p_current->ticks_to_expire += timeout; } return (p_old_head != mp_timer_id_head); }
please give appropriate solution for that,
Thanks,
Sandip Divani