This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

sd_softdevice_disable() only possible at thread level?

My app (using S130v2.0.1 nRF51822 SDK12.3)  triggers app_error_fault_handler (seen on a PIN; since not able to debug due to timing) on sd_softdevice_disable(). A snippet of my code follows (using an available IRQn to trigger sd_softdevice_disable with priority 3):

#define SD_END_IRQn                 ADC_IRQn // NOt used by app
#define SD_END_IRQHandler           ADC_IRQHandler
#define SD_END_IRQPriority          3

void SD_END_IRQHandler(void)
{
        uint32_t err_code = sd_softdevice_disable();
        APP_ERROR_CHECK(err_code);
}

void nrf_evt_signal_handler(uint32_t evt_id)
{
    uint32_t err_code;

    switch (evt_id)
    {
        case NRF_EVT_RADIO_SIGNAL_CALLBACK_INVALID_RETURN:
            // No implementation needed
            break;

        case NRF_EVT_RADIO_SESSION_IDLE:
            err_code = sd_radio_session_close();
            APP_ERROR_CHECK(err_code);
            break;

        case NRF_EVT_RADIO_SESSION_CLOSED:
            // The session is closed and all acquired resources are released.
            // Softdevice can be disabled.
            err_code = sd_nvic_SetPendingIRQ(SD_END_IRQn);
            APP_ERROR_CHECK(err_code);
            break;

        case NRF_EVT_RADIO_BLOCKED:
        case NRF_EVT_RADIO_CANCELED:
            configure_next_event_normal(m_ts_distance, m_ts_length);
            err_code = request_next_event_normal();
            APP_ERROR_CHECK(err_code);
            break;

        default:
            break;
    }
}

Any ideas why am I not able to disable softdevice?

Parents Reply
  • As you can see from my snippet, sd_softdevice_disable is called from a software interrupt (priority level 3) once my code gets event NRF_EVT_RADIO_SESSION_CLOSED from softdevice. That means, no timeslot. MOreover, at that time - RADIO SESSION CLOSED- there are no functions sd_* running. 

    My experience says that the softdevice MUST be disabled at thread level (main.c). Can anyone confirm this?  

Children
No Data
Related