Merge branch 'bugfix/phy_critical_v3.1' into 'release/v3.1'

fix bug that phy_enter_critical cannot effect on dual-core

See merge request espressif/esp-idf!6943
This commit is contained in:
Jiang Jiang Jian 2019-12-12 12:16:21 +08:00
commit 02ba857c69

View file

@ -67,14 +67,27 @@ static _lock_t s_modem_sleep_lock;
/* time stamp updated when the PHY/RF is turned on */ /* time stamp updated when the PHY/RF is turned on */
static int64_t s_phy_rf_en_ts = 0; static int64_t s_phy_rf_en_ts = 0;
static DRAM_ATTR portMUX_TYPE s_phy_int_mux = portMUX_INITIALIZER_UNLOCKED;
uint32_t IRAM_ATTR phy_enter_critical(void) uint32_t IRAM_ATTR phy_enter_critical(void)
{ {
return portENTER_CRITICAL_NESTED(); if (xPortInIsrContext()) {
portENTER_CRITICAL_ISR(&s_phy_int_mux);
} else {
portENTER_CRITICAL(&s_phy_int_mux);
}
// Interrupt level will be stored in current tcb, so always return zero.
return 0;
} }
void IRAM_ATTR phy_exit_critical(uint32_t level) void IRAM_ATTR phy_exit_critical(uint32_t level)
{ {
portEXIT_CRITICAL_NESTED(level); // Param level don't need any more, ignore it.
if (xPortInIsrContext()) {
portEXIT_CRITICAL_ISR(&s_phy_int_mux);
} else {
portEXIT_CRITICAL(&s_phy_int_mux);
}
} }
int64_t esp_phy_rf_get_on_ts(void) int64_t esp_phy_rf_get_on_ts(void)