Fix crash caused by bluetooth high level interrupt

This commit is contained in:
xiongweichao 2021-11-10 11:46:46 +08:00
parent b298795e37
commit 44b9e6e055
2 changed files with 11 additions and 0 deletions

View File

@ -113,4 +113,8 @@ menu "Power Management"
If enabled, the I/D-cache tag memory will be retained in light sleep. Depending on the the
cache configuration, if this option is enabled, it will consume up to 9 KB of internal RAM.
config PM_UPDATE_CCOMPARE_HLI_WORKAROUND
bool
default y if PM_ENABLE && BTDM_CTRL_HLI
endmenu # "Power Management"

View File

@ -536,6 +536,10 @@ static void IRAM_ATTR do_switch(pm_mode_t new_mode)
*/
static void IRAM_ATTR update_ccompare(void)
{
#if CONFIG_PM_UPDATE_CCOMPARE_HLI_WORKAROUND
/* disable level 4 and below */
uint32_t irq_status = XTOS_SET_INTLEVEL(XCHAL_DEBUGLEVEL - 2);
#endif
uint32_t ccount = cpu_hal_get_cycle_count();
uint32_t ccompare = XTHAL_GET_CCOMPARE(XT_TIMER_INDEX);
if ((ccompare - CCOMPARE_MIN_CYCLES_IN_FUTURE) - ccount < UINT32_MAX / 2) {
@ -546,6 +550,9 @@ static void IRAM_ATTR update_ccompare(void)
XTHAL_SET_CCOMPARE(XT_TIMER_INDEX, new_ccompare);
}
}
#if CONFIG_PM_UPDATE_CCOMPARE_HLI_WORKAROUND
XTOS_RESTORE_INTLEVEL(irq_status);
#endif
}
#endif // CONFIG_FREERTOS_SYSTICK_USES_CCOUNT