how schedule other thread when PDM interrupt occurs

HI ,Nordic 

Currently I am trying to get voice data via DMIC on NRF52840DK and send it out via BLE after OPUS encoding, but I am having trouble: nrfx_pdm_start keeps triggering nrfx_pdm_irq_handler, which causes my other threads to be unable to be scheduled. threads can be scheduled as well?

Thanks a lot 

my code:

ISR_DIRECT_DECLARE(pdm_isr_handler)
{
nrfx_pdm_irq_handler();
ISR_DIRECT_PM(); /* PM done after servicing interrupt for best latency
*/

return 1; /* We should check if scheduling decision should be made */
}

static void process_audio_buffer(const void* buffer) {
static int index = 0;
LOG_DBG("process_audio_buffer...\n");
k_msgq_put(pdm_queue, buffer, K_NO_WAIT);

}

static void drv_audio_pdm_event_handler(nrfx_pdm_evt_t const* const p_evt) {

if (p_evt->error) {
printk("pdm handler error %d", p_evt->error);
return;
}

if (p_evt->buffer_released) {
for (uint8_t l = 0; l < PDM_BUF_NUM; l++) {
if (pdm_buf[l].mic_buf == p_evt->buffer_released) {
pdm_buf[l].released = true;
data_source_info.audio_source_info.audio_buffer = &pdm_buf[l].mic_buf;
process_audio_buffer(data_source_info.audio_source_info.audio_buffer);
break;
}
}

}

  err = nrfx_pdm_init(&config_pdm, drv_audio_pdm_event_handler);

Related