summaryrefslogtreecommitdiff
path: root/ports/stm32/flashbdev.c
diff options
context:
space:
mode:
Diffstat (limited to 'ports/stm32/flashbdev.c')
-rw-r--r--ports/stm32/flashbdev.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/ports/stm32/flashbdev.c b/ports/stm32/flashbdev.c
index 2b633cf16..395662c8b 100644
--- a/ports/stm32/flashbdev.c
+++ b/ports/stm32/flashbdev.c
@@ -143,14 +143,17 @@ int32_t flash_bdev_ioctl(uint32_t op, uint32_t arg) {
flash_bdev_irq_handler();
return 0;
- case BDEV_IOCTL_SYNC:
+ case BDEV_IOCTL_SYNC: {
+ uint32_t basepri = raise_irq_pri(IRQ_PRI_FLASH); // prevent cache flushing and USB access
if (flash_flags & FLASH_FLAG_DIRTY) {
flash_flags |= FLASH_FLAG_FORCE_WRITE;
while (flash_flags & FLASH_FLAG_DIRTY) {
- NVIC->STIR = FLASH_IRQn;
+ flash_bdev_irq_handler();
}
}
+ restore_irq_pri(basepri);
return 0;
+ }
}
return -MP_EINVAL;
}