static int wdt_nrf_setup(struct device *dev, u8_t options) { nrf_wdt_behaviour_t behaviour; ARG_UNUSED(dev); /* Activate all available options. Run in all cases. */ behaviour = NRF_WDT_BEHAVIOUR_RUN_SLEEP_HALT; /* Deactivate running in sleep mode. */ if (options & WDT_OPT_PAUSE_IN_SLEEP) { behaviour &= ~NRF_WDT_BEHAVIOUR_RUN_SLEEP; } /* Deactivate running when debugger is attached. */ if (options & WDT_OPT_PAUSE_HALTED_BY_DBG) { behaviour &= ~NRF_WDT_BEHAVIOUR_RUN_HALT; } nrf_wdt_behaviour_set(behaviour); /* The watchdog timer is driven by the LFCLK clock running at 32768 Hz. * The timeout value given in milliseconds needs to be converted here * to watchdog ticks.*/ nrf_wdt_reload_value_set( (uint32_t)(((uint64_t)m_timeout * 32768) / 1000)); nrfx_wdt_enable(); return 0; }
ret_code_t nrf_drv_wdt_init(nrf_drv_wdt_config_t const * p_config, nrf_wdt_event_handler_t wdt_event_handler) { ASSERT(wdt_event_handler != NULL); ret_code_t err_code; m_wdt_event_handler = wdt_event_handler; if (m_state == NRF_DRV_STATE_UNINITIALIZED) { m_state = NRF_DRV_STATE_INITIALIZED; } else { err_code = NRF_ERROR_INVALID_STATE; NRF_LOG_WARNING("Function: %s, error code: %s.\r\n", (uint32_t)__func__, (uint32_t)ERR_TO_STR(err_code)); return err_code; } if (p_config == NULL) { p_config = &m_default_config; } nrf_wdt_behaviour_set(p_config->behaviour); nrf_wdt_reload_value_set((p_config->reload_value * 32768) / 1000); nrf_drv_common_irq_enable(WDT_IRQn, p_config->interrupt_priority); err_code = NRF_SUCCESS; NRF_LOG_INFO("Function: %s, error code: %s.\r\n", (uint32_t)__func__, (uint32_t)ERR_TO_STR(err_code)); return err_code; }