summaryrefslogtreecommitdiffstatshomepage
path: root/stmhal/stm32f4xx_it.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-04-16 23:08:36 +0100
committerDamien George <damien.p.george@gmail.com>2014-04-16 23:08:36 +0100
commit6d983539bcff2a540dd136a7e84e1db2b334528f (patch)
treea5ba1e873fe2ee63a6bc7b8603ce3ff9ce7c2e81 /stmhal/stm32f4xx_it.c
parentf6be480bda92486c3185ceaf8f25f461dfb2aa72 (diff)
downloadmicropython-6d983539bcff2a540dd136a7e84e1db2b334528f.tar.gz
micropython-6d983539bcff2a540dd136a7e84e1db2b334528f.zip
stmhal: Improve flash storage cache management.
Internal flash used for the filesystem is now written (from the cache) only after a 5s delay, or when a file is closed, or when the drive is unmounted from the host. This delay means that multiple writes can accumulate in the cache, and leads to less writes to the flash, making it last longer. It's implemented by a high-priority interrupt that takes care of flash erase and write, and flushing the cache. This is still only an interim solution for the flash filesystem. It eventually needs to be replaced with something that uses less RAM for the cache, something that can use more of the flash, and something that does proper wear levelling.
Diffstat (limited to 'stmhal/stm32f4xx_it.c')
-rw-r--r--stmhal/stm32f4xx_it.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/stmhal/stm32f4xx_it.c b/stmhal/stm32f4xx_it.c
index aee689d7e2..06428a4c4f 100644
--- a/stmhal/stm32f4xx_it.c
+++ b/stmhal/stm32f4xx_it.c
@@ -49,6 +49,7 @@
#include "obj.h"
#include "exti.h"
#include "timer.h"
+#include "storage.h"
/** @addtogroup STM32F4xx_HAL_Examples
* @{
@@ -263,6 +264,19 @@ void OTG_XX_WKUP_IRQHandler(void)
{
}*/
+// Handle a flash (erase/program) interrupt.
+void FLASH_IRQHandler(void) {
+ // This calls the real flash IRQ handler, if needed
+ /*
+ uint32_t flash_cr = FLASH->CR;
+ if ((flash_cr & FLASH_IT_EOP) || (flash_cr & FLASH_IT_ERR)) {
+ HAL_FLASH_IRQHandler();
+ }
+ */
+ // This call the storage IRQ handler, to check if the flash cache needs flushing
+ storage_irq_handler();
+}
+
/**
* @brief These functions handle the EXTI interrupt requests.
* @param None