diff --git a/pycardium/mphalport.c b/pycardium/mphalport.c
index c4ba6bdb1874a890350ccc8b7df57f6167d55f83..ab3e0857c7d132f67c4c9b5f08530f06563d9a3d 100644
--- a/pycardium/mphalport.c
+++ b/pycardium/mphalport.c
@@ -166,13 +166,16 @@ void SysTick_Handler(void)
 static uint64_t systick_get_us()
 {
 	uint32_t val, count;
+	uint32_t irqsaved = __get_PRIMASK();
 
 	/* The asynchronous/slow clocking of the systick means that
 	 * its value can jump to 0 before the interrupt is triggered.
 	 * Simply wait until it is not 0 and then read the count. */
 	do {
+		__set_PRIMASK(0);
 		val   = SysTick->VAL;
 		count = systick_count;
+		__set_PRIMASK(irqsaved);
 	} while (val == 0);
 
 	uint64_t us = count * SYSTICK_INTERVAL_US +