-Using SoftDevice S110 8.0.0 for the nRF51822_xxAA.
-UART0 running on 19k2 without flow control (only rx/tx) and using irq priority APP_IRQ_PRIORITY_LOW (=3)
-Using the Radio Timeslot functionality while also fulfilling the peripheral role
When the system is not connected all is working fine. The Radio Timeslot is being used to broadcast and listen to proprietary messages when the radio is not used for advertisement. Also the UART is transmitting and receiving as expected.
But when the nRF51822 is connected I get UART errors (overrun). I implemented the radio notification for debugging and see that for several milliseconds (4ms-13ms) after the radio is disabled, the UART ISR is not entered even though bytes are received on the RX line. During this time the UART fifo will obviously overrun since bytes are not read from the RXD register. The radio activity mentioned above is normal BLE communication (reception and transmission of regular BLE packets) and the timeslot was not active.
When I change the UART priority to APP_IRQ_PRIORITY_HIGH (=1) the overrun error does not occur, so it seems like the softdevice is blocking the UART interrupt when the overrun error happens(?).
Futhermore, even though the timeslot is not active at the moment the overrun error occurs, the problem is non-existent when the Radio Timeslot functionality is not used (not initialized/started).
I made a screendump of the scenario:
My questions:
-Is it normal for the softdevice to block the UART interrupt (with low prio) for several milliseconds? This seems very long to me?
-How do I figure out what the softdevice is doing in that moment after the radio is deactivated?
-What could be the relation to the Radio Timeslot (maybe some left over, not re-initialized radio setting?)?
Using UART flow control is not an option in this scenario. Also, changing the priority is not my preferred solution, at least not before understanding why this is happening.