From f3b19ef6347f41b073b27c7a83a12cfc1c7267b8 Mon Sep 17 00:00:00 2001 From: Antonin ENFRUN Date: Thu, 8 Sep 2016 00:02:17 +0200 Subject: [PATCH] py/asmthumb: Flush D-cache, and invalidate I-cache on STM32F7. Tested on a STM32F7DISCO at 216MHz. All tests generating code (inlineasm, native, viper) now pass, except pybnative/while.py, but that's because there is no LED(2). --- py/asmthumb.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/py/asmthumb.c b/py/asmthumb.c index 8341c958e9..1aae3d38eb 100644 --- a/py/asmthumb.c +++ b/py/asmthumb.c @@ -90,6 +90,15 @@ void asm_thumb_start_pass(asm_thumb_t *as, uint pass) { void asm_thumb_end_pass(asm_thumb_t *as) { (void)as; // could check labels are resolved... + + #if defined(MCU_SERIES_F7) + if (as->pass == ASM_THUMB_PASS_EMIT) { + // flush D-cache, so the code emited is stored in memory + SCB_CleanDCache_by_Addr((uint32_t*)as->code_base, as->code_size); + // invalidate I-cache + SCB_InvalidateICache(); + } + #endif } // all functions must go through this one to emit bytes