Nordic nRF51 DK nrf_esb_init() не возвращается
Я разрабатываю параллельное приложение BLE и Shockburst для nRF51 DK. Сначала я попытался запустить Shockbust в одиночку. Он скомпилирован и не было никакой проблемы загрузить его на доску. Но когда я запускаю его, это не работает. Я думаю, что нашел ошибку, но я не знаю, как ее решить:
Функция nrf_esb_init() не возвращается. Я окружил функцию светодиодами для тестирования. LED_1 горит, поэтому функция вызывается, но LED_2 никогда не мигает:
void esb_wake(void) {
nrf_gpio_pin_toggle(LED_1); // flash
nrf_esb_init(NRF_ESB_MODE_PTX);
nrf_gpio_pin_toggle(LED_2); //does not flash
nrf_esb_set_base_address_0(addr0);
nrf_esb_set_base_address_1(addr1);
nrf_esb_set_channel(rf_channel);
uint32_t err_code = timeslot_sd_init();
APP_ERROR_CHECK(err_code);
nrf_esb_enable();
nrf_esb_set_max_number_of_tx_attempts(1);
}
Я использую SDK 10.0 и Softdevice s310.
У кого-нибудь есть идея, как решить мою проблему?
1 ответ
Я смог решить проблему самостоятельно:
Как я уже сказал, я использую мягкое устройство, и это зло. Софт-устройство "хозяин доски". ShockBurst не является частью softdevice. Поэтому мне пришлось сообщить программному устройству, когда я использую какой-то внешний код. Решение состоит в том, чтобы вызвать nrf_esb_init() не раньше, чем начнется временной интервал. Поэтому я переместил функцию в свой обработчик событий временного интервала в случае NRF_RADIO_CALLBACK_SIGNAL_TYPE_START.