summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/FreeRTOS/port_cmsis_systick.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/FreeRTOS/port_cmsis_systick.c b/src/FreeRTOS/port_cmsis_systick.c
index 58c51bb7..b2cc14cd 100644
--- a/src/FreeRTOS/port_cmsis_systick.c
+++ b/src/FreeRTOS/port_cmsis_systick.c
@@ -251,6 +251,14 @@ void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime )
else
#endif
{
+ // Fix ERRATA 87 (https://infocenter.nordicsemi.com/index.jsp?topic=%252Fcom.nordic.infocenter.sdk5.v11.0.0%252Findex.html&cp=4_0_0)
+ // Clear FPU interrupt before going to sleep. This prevent unexpected wake-up.
+ #define FPU_EXCEPTION_MASK 0x0000009F
+ /* Clear exceptions and PendingIRQ from the FPU unit */
+ __set_FPSCR(__get_FPSCR() & ~(FPU_EXCEPTION_MASK));
+ (void) __get_FPSCR();
+ NVIC_ClearPendingIRQ(FPU_IRQn);
+
/* No SD - we would just block interrupts globally.
* BASEPRI cannot be used for that because it would prevent WFE from wake up.
*/