diff options
author | Kévin Redon <kredon@sysmocom.de> | 2018-07-03 16:17:56 +0200 |
---|---|---|
committer | Kévin Redon <kredon@sysmocom.de> | 2018-07-03 16:18:00 +0200 |
commit | f48aac560c03ec9a9050b2e4b75e1a4484a2c84f (patch) | |
tree | f2bde7432a383fbdcf7f23cc3aa2b32052503da1 | |
parent | d28d3fc4c040eff04e075b409cad4d2751eeddb2 (diff) |
sniffing: decrease USB IRQ prioprity to prevent USART overrunkredon/simtrace
Change-Id: I870a0aa8e251bbb53249c54bfcaa45de5b5a9486
Handling the USB message queue is done in an ISR and take quite some time.
This can cause a USART/SIM sniffing buffer overrun, resulting in data loss.
By setting the USB IRQ lower than the USART IRQ, the USB ISR can be
interrupted (for short) and no data gets lost.
-rw-r--r-- | firmware/libcommon/source/sniffer.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/firmware/libcommon/source/sniffer.c b/firmware/libcommon/source/sniffer.c index 3719796..70d3734 100644 --- a/firmware/libcommon/source/sniffer.c +++ b/firmware/libcommon/source/sniffer.c @@ -829,6 +829,10 @@ void Sniffer_init(void) sniff_usart.base->US_RTOR = 9600-12; /* -12 because the timer starts at the end of the 12 ETU frame */ /* Enable interrupt to indicate when data has been received or timeout occurred */ USART_EnableIt(sniff_usart.base, US_IER_RXRDY | US_IER_TIMEOUT); + /* Set USB priority lower than USART to not miss sniffing data (both at 0 per default) */ + if (NVIC_GetPriority(IRQ_USART_SIM)>=NVIC_GetPriority(UDP_IRQn)) { + NVIC_SetPriority(UDP_IRQn, NVIC_GetPriority(IRQ_USART_SIM)+2); + } /* Enable interrupt requests for the USART peripheral */ NVIC_EnableIRQ(IRQ_USART_SIM); |