diff --git a/arch/arm/src/s32k1xx/s32k1xx_progmem.c b/arch/arm/src/s32k1xx/s32k1xx_progmem.c index c1ac94f0908..70d8c007cd3 100644 --- a/arch/arm/src/s32k1xx/s32k1xx_progmem.c +++ b/arch/arm/src/s32k1xx/s32k1xx_progmem.c @@ -77,6 +77,13 @@ static uint32_t execute_ftfc_command(void) uint8_t regval; uint32_t retval; + /* AN12003: only one FlexNVM operation can be executed at a time. + * Disable ISR during this time so an ISR doesn't cause a hardfault + * from a simultaneous read. + */ + + irqstate_t flags = enter_critical_section(); + /* Clear CCIF to launch command */ regval = getreg8(S32K1XX_FTFC_FSTAT); @@ -87,6 +94,8 @@ static uint32_t execute_ftfc_command(void) retval = getreg8(S32K1XX_FTFC_FSTAT); + leave_critical_section(flags); + if (retval & (FTTC_FSTAT_MGSTAT0 | FTTC_FSTAT_FPVIOL | FTTC_FSTAT_ACCERR | FTTC_FSTAT_RDCOLERR)) {